Skip to content

[feature] custom strings for restock detector #2779

@gsaiz

Description

@gsaiz

Version and OS
0.47.06 on linux/docker

Is your feature request related to a problem? Please describe.

The problem I am facing is that the list of out-of-stock strings in stock-not-in-stock.js does not cover this product: https://www.vagabond.com/es/sheila-5635-001-35

¡Pronto estarán en stock!

Describe the solution you'd like

I have thought about just opening a PR with my new use case, but maybe what would be better for the long run would be to allow a custom string to be passed to the "Restock & Price Detection" tab when you configure the URL?

Describe the use-case and give concrete real-world examples

The use case is using the restock detector feature to parse the fact that size 39 is out of stock for this URL at this moment:

https://www.vagabond.com/es/sheila-5635-001-35

<button class="jsProductPageSizeButton semButtonSecondary tw-p-0 tw-pt-2 tw-flex tw-flex-wrap tw-justify-center tw-items-center tw-border tw-border-neutral300 on-active:tw-bg-neutral100 on-active:tw-shadow-[0_2px_0_0_theme(colors.black)] on-active:tw-font-semibold on-active:tw-text-stroke-width-0 tw-bg-[linear-gradient(to_bottom_right,transparent,transparent_calc(50%-1px),theme(colors.neutral300)_calc(50%-0.5px),theme(colors.neutral300)_calc(50%+0.5px),transparent_calc(50%+1px),transparent)] jsSizeSelectorStockUpdates jsProductPageSizeButtonNotBuyable tw-relative tw-text-stroke-width-0 active" data-buyable="false" data-size="39" data-eusize="39" data-code="5635-001-35-39" data-fewinstock="False" data-stock-message="Pronto en stock" data-delivery-information="" data-subscription-text="&lt;p class=&quot;tinymce-content&quot;&gt;&lt;span class=&quot;text-bold&quot;&gt;&amp;iexcl;Pronto estar&amp;aacute;n en stock!&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;tinymce-content&quot; style=&quot;font-size: 13px;&quot;&gt;Elige la talla e introduce tu correo electr&amp;oacute;nico para recibir una notificaci&amp;oacute;n &lt;span class=&quot;tinymce-content&quot;&gt;en cuanto tu talla&lt;/span&gt; est&amp;eacute; disponible.&lt;/span&gt;&lt;/p&gt;">
            39
                <div class="tw-bg-white tw-border tw-absolute tw-w-max tw-z-40 tw-px-4 tw-pt-2 tw-bottom-[50px] tw-text-details-sm-regular tw-max-w-[20em] tw-hidden [*:hover&gt;&amp;]:[@media(hover:hover)_and_(pointer:fine)]:tw-block]">
                    Pronto en stock
                </div>
        </button>

I could write a CSS selector with the data-buyable attribute filtering by the data-eusize=39 attribute, but this request is about having the restock feature allow me to copy&paste "Pronto estarán en stock" to see that it is not in stock.

I have seen that the page has an ld+json script:

<script type="application/ld+json">
    {
        "@context": "https://schema.org/",
        "@type": "Product",
        "name": "SHEILA",
        "image": [
"https://cdn.vagabond.com/thumbnails/200/211/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/462/488/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/564/596/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/924/976/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/1264/1336/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/2048/2164/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/200/211/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/462/488/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/564/596/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/924/976/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/1264/1336/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/2048/2164/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/200/211/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/462/488/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/564/596/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/924/976/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/1264/1336/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/2048/2164/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/200/78/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/462/180/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/564/220/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/924/361/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/1264/494/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/2048/800/crop/productimages/pos1/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/200/78/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/462/180/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/564/220/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/924/361/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/1264/494/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/2048/800/crop/productimages/pos2/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/200/78/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/462/180/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/564/220/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/924/361/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/1264/494/crop/productimages/pos3/list/5635-001-35.jpg","https://cdn.vagabond.com/thumbnails/2048/800/crop/productimages/pos3/list/5635-001-35.jpg"],
        "description": "Sheila son botas de montar minimalistas con un estilo atemporal. El modelo está confeccionado en cuero marrón oscuro con puntera redondeada, caña ancha y cierre de cremallera lateral. Tacón en bloque mide 38 mm. Cuero marrón oscuro Puntera redondeada Caña ancha Cierre con cremallera Tacones de 38mm Para un cuidado duradero: usa crema para zapatos e impermeabilizante para alargar la vida útil del calzado.",
        "sku": "5635-001-35",
        "brand": {
            "@type": "Thing",
            "name": "Vagabond Shoemakers"
        },
        "offers": {
            "@type": "Offer",
            "url": "https://www.vagabond.com/es/sheila-5635-001-35/",
            "priceCurrency": "EUR",
            "price": "220.00",
            "itemCondition": "https://schema.org/NewCondition",
            "availability": "https://schema.org/InStock",
            "seller": {
                "@type": "Organization",
                "name": "Vagabond International AB"
            }
        },

        "aggregateRating": {
            "@type": "AggregateRating",
            "ratingValue": 5,
            "ratingCount": 3
        }
    }
</script>

Unfortunately the item appears as in stock ("availability": "https://schema.org/InStock") because 1 of its variants is, that is there is stock in 2 out of the 7 sizes available. I don't know if this is supposed to be like this in JSON-LD, but it does not make much sense to me since a buyer will usually only buy one variant of the product, so knowing which one is in stock is relevant.

Additional context

I am happy to give a go to any changes to the Python side; I am much less comfortable on the JS side of things.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions