@asteby/storefront-react 0.25.0 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -2
- package/dist/account-server.cjs +128 -19
- package/dist/account-server.cjs.map +1 -1
- package/dist/account-server.d.cts +67 -4
- package/dist/account-server.d.ts +67 -4
- package/dist/account-server.js +125 -20
- package/dist/account-server.js.map +1 -1
- package/dist/account.cjs +252 -7
- package/dist/account.cjs.map +1 -1
- package/dist/account.css +91 -0
- package/dist/account.d.cts +130 -6
- package/dist/account.d.ts +130 -6
- package/dist/account.js +247 -8
- package/dist/account.js.map +1 -1
- package/dist/checkout.cjs +162 -8
- package/dist/checkout.cjs.map +1 -1
- package/dist/checkout.d.cts +104 -4
- package/dist/checkout.d.ts +104 -4
- package/dist/checkout.js +158 -10
- package/dist/checkout.js.map +1 -1
- package/dist/chunk-Z4C4LKXF.js +25 -0
- package/dist/chunk-Z4C4LKXF.js.map +1 -0
- package/dist/fiscal-server.cjs +27 -2
- package/dist/fiscal-server.cjs.map +1 -1
- package/dist/fiscal-server.d.cts +10 -1
- package/dist/fiscal-server.d.ts +10 -1
- package/dist/fiscal-server.js +26 -3
- package/dist/fiscal-server.js.map +1 -1
- package/dist/fit-key-B9sYQVwG.d.cts +49 -0
- package/dist/fit-key-B9sYQVwG.d.ts +49 -0
- package/dist/fitment.cjs +54 -9
- package/dist/fitment.cjs.map +1 -1
- package/dist/fitment.d.cts +20 -2
- package/dist/fitment.d.ts +20 -2
- package/dist/fitment.js +54 -10
- package/dist/fitment.js.map +1 -1
- package/dist/settings-types-jxFQFFqP.d.cts +77 -0
- package/dist/settings-types-jxFQFFqP.d.ts +77 -0
- package/dist/subjects-server.cjs +248 -0
- package/dist/subjects-server.cjs.map +1 -0
- package/dist/subjects-server.d.cts +130 -0
- package/dist/subjects-server.d.ts +130 -0
- package/dist/subjects-server.js +217 -0
- package/dist/subjects-server.js.map +1 -0
- package/dist/subjects.cjs +501 -0
- package/dist/subjects.cjs.map +1 -0
- package/dist/subjects.css +166 -0
- package/dist/subjects.d.cts +178 -0
- package/dist/subjects.d.ts +178 -0
- package/dist/subjects.js +465 -0
- package/dist/subjects.js.map +1 -0
- package/package.json +23 -2
- package/dist/types-D7pVK0GK.d.cts +0 -39
- package/dist/types-D7pVK0GK.d.ts +0 -39
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/subjects/messages.ts","../src/subjects/subject-picker.tsx","../src/subjects/subject-garage.tsx","../src/subjects/subject-filter.tsx","../src/subjects/use-subjects.ts"],"names":["jsxs","jsx","useState"],"mappings":"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","file":"subjects.js","sourcesContent":["/** Texts of the «My items» components. Spanish (es-MX) by default, English with `en*`, any locale with `messages`. */\nimport type { SubjectErrorCode } from './types.js'\n\nexport type DeepPartial<T> = { [K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K] }\n\n/**\n * `{kind}` is the singular name the store gave the kind, lowercased («vehículo»); `{name}` the label of an item. Nothing\n * here names a kind: the words come from the data the organization publishes.\n */\nexport type SubjectMessages = {\n garage: {\n empty: string\n add: string\n active: string\n makeActive: string\n edit: string\n remove: string\n removeConfirm: string\n removeHint: string\n viewParts: string\n limit: string\n loadError: string\n retry: string\n saved: string\n removed: string\n privateLabel: string\n }\n picker: {\n choose: string\n chooseFirst: string\n nickname: string\n nicknameHint: string\n privateNote: string\n privateKeep: string\n privateClear: string\n makeActive: string\n save: string\n saving: string\n cancel: string\n refine: string\n errors: Record<'required' | 'unknown' | 'invalid' | 'not_in_catalog' | 'year_range' | 'catalog_unavailable', string> & Record<SubjectErrorCode, string>\n }\n filter: {\n forItem: string\n change: string\n choose: string\n onlyFits: string\n showAll: string\n save: string\n }\n fit: { fits: string; universal: string; no: string; unknown: string }\n}\n\nconst ES: SubjectMessages = {\n garage: {\n empty: 'Aún no guardas ningún {kind}.',\n add: 'Agregar {kind}',\n active: 'Activo',\n makeActive: 'Hacer activo',\n edit: 'Editar',\n remove: 'Eliminar',\n removeConfirm: 'Sí, eliminar {name}',\n removeHint: 'Se borra de verdad: no queda nada guardado.',\n viewParts: 'Ver piezas compatibles',\n limit: 'Llegaste al límite ({max}). Elimina uno para agregar otro.',\n loadError: 'No pudimos cargar esto.',\n retry: 'Reintentar',\n saved: 'Guardado.',\n removed: 'Eliminado.',\n privateLabel: '{field}: {value}',\n },\n picker: {\n choose: 'Elige…',\n chooseFirst: 'Primero elige el campo anterior',\n nickname: 'Apodo (opcional)',\n nicknameHint: 'Para reconocerlo, por ejemplo «El de diario».',\n privateNote: 'Solo tú lo ves. No se usa para buscar piezas ni se comparte.',\n privateKeep: 'Déjalo vacío para conservar el guardado.',\n privateClear: 'Quitar el guardado',\n makeActive: 'Usar como activo',\n save: 'Guardar',\n saving: 'Guardando…',\n cancel: 'Cancelar',\n refine: 'Continuar',\n errors: {\n required: 'Completa este campo.',\n unknown: 'Ese campo no existe.',\n invalid: 'El valor no es válido.',\n not_in_catalog: 'Elige una opción de la lista.',\n year_range: 'Ese año no corresponde a lo que elegiste.',\n catalog_unavailable: 'El catálogo no está disponible por ahora.',\n validation: 'Revisa los datos.',\n duplicate: 'Ya lo tienes guardado.',\n limit: 'Llegaste al límite. Elimina uno para agregar otro.',\n rate_limited: 'Demasiados intentos. Espera un momento.',\n unauthorized: 'Inicia sesión para continuar.',\n not_found: 'Ya no existe.',\n unsupported: 'Esta tienda no ofrece esto.',\n store_misconfigured: 'La tienda no está configurada para esto. Avísale al negocio.',\n unavailable: 'No pudimos guardar. Intenta de nuevo.',\n },\n },\n filter: {\n forItem: 'Para: {name}',\n change: 'Cambiar',\n choose: 'Elige tu {kind} para ver solo lo que le queda',\n onlyFits: 'Solo lo compatible',\n showAll: 'Ver todo',\n save: 'Guardar en mi cuenta',\n },\n fit: { fits: 'Compatible con tu {kind}', universal: 'Universal', no: 'No es para tu {kind}', unknown: 'Sin datos de compatibilidad' },\n}\n\nconst EN: SubjectMessages = {\n garage: {\n empty: 'You have not saved any {kind} yet.',\n add: 'Add {kind}',\n active: 'Active',\n makeActive: 'Make active',\n edit: 'Edit',\n remove: 'Delete',\n removeConfirm: 'Yes, delete {name}',\n removeHint: 'It is really deleted: nothing is kept.',\n viewParts: 'See compatible parts',\n limit: 'You reached the limit ({max}). Delete one to add another.',\n loadError: 'We could not load this.',\n retry: 'Try again',\n saved: 'Saved.',\n removed: 'Deleted.',\n privateLabel: '{field}: {value}',\n },\n picker: {\n choose: 'Choose…',\n chooseFirst: 'Choose the previous field first',\n nickname: 'Nickname (optional)',\n nicknameHint: 'To recognize it, e.g. “The everyday one”.',\n privateNote: 'Only you see it. It is not used to search parts and it is never shared.',\n privateKeep: 'Leave it empty to keep the saved one.',\n privateClear: 'Remove the saved one',\n makeActive: 'Use as active',\n save: 'Save',\n saving: 'Saving…',\n cancel: 'Cancel',\n refine: 'Continue',\n errors: {\n required: 'Fill in this field.',\n unknown: 'That field does not exist.',\n invalid: 'The value is not valid.',\n not_in_catalog: 'Choose an option from the list.',\n year_range: 'That year does not match what you chose.',\n catalog_unavailable: 'The catalog is not available right now.',\n validation: 'Check the details.',\n duplicate: 'You already saved this.',\n limit: 'You reached the limit. Delete one to add another.',\n rate_limited: 'Too many attempts. Wait a moment.',\n unauthorized: 'Sign in to continue.',\n not_found: 'It no longer exists.',\n unsupported: 'This store does not offer this.',\n store_misconfigured: 'The store is not set up for this. Let the business know.',\n unavailable: 'We could not save. Try again.',\n },\n },\n filter: {\n forItem: 'For: {name}',\n change: 'Change',\n choose: 'Choose your {kind} to see only what fits',\n onlyFits: 'Only what fits',\n showAll: 'Show all',\n save: 'Save to my account',\n },\n fit: { fits: 'Fits your {kind}', universal: 'Universal', no: 'Not for your {kind}', unknown: 'No compatibility data' },\n}\n\nfunction merge<T>(base: T, over: DeepPartial<T> | undefined): T {\n if (!over) return base\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) }\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) continue\n const cur = out[k]\n out[k] = cur && typeof cur === 'object' && typeof v === 'object' && v ? merge(cur, v as DeepPartial<typeof cur>) : v\n }\n return out as T\n}\n\n/** Messages for a locale (`en*` → English, else Spanish), with the store's overrides on top. */\nexport function subjectMessages(locale?: string, overrides?: DeepPartial<SubjectMessages>): SubjectMessages {\n return merge(locale?.toLowerCase().startsWith('en') ? EN : ES, overrides)\n}\n\n/** `{name}` placeholders. */\nexport function fill(template: string, values: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (m, k: string) => (k in values ? String(values[k]) : m))\n}\n","/**\n * The form that saves or edits one item of a kind («Add vehicle»). It is driven by the kind's DATA: one control per\n * field, in order. A catalog field is a `<select>` whose options narrow by what was already chosen (a cascade); a year\n * with known model years is a `<select>` too, else a number; a free field is a text box. It works WITHOUT JavaScript\n * as a `<form method=\"post\">`: «Continue» / «Save» post the values, the action answers the next level (or the errors by\n * field) and the page renders the form again with `values`. With JavaScript the cascade is live and `onSubmit` gets\n * the validated input.\n *\n * A `private` field (a licence plate) is a plain text box labelled «only you see it». It is NEVER prefilled (the server\n * only returns it masked) and an empty one keeps the stored value on edit (`<name>.clear` removes it).\n */\nimport { resolveSubject, reconcileSubjectValues, subjectOptions, type Subject, type SubjectField, type SubjectInput, type SubjectKind, type SubjectProblems, type SubjectValues } from '@asteby/storefront'\nimport { useId, useMemo, useState, type FormEvent } from 'react'\nimport { useResolvedLocale } from '../locale.js'\nimport { fill, subjectMessages, type DeepPartial, type SubjectMessages } from './messages.js'\nimport type { SubjectActionData } from './types.js'\n\nexport type SubjectPickerClassNames = Partial<Record<'form' | 'field' | 'label' | 'control' | 'hint' | 'error' | 'actions' | 'submit' | 'cancel' | 'privateNote', string>>\n\nexport type SubjectPickerProps = {\n kind: SubjectKind\n /** The item being edited (its public values start the form); omit to add one. */\n subject?: Subject | null\n /** Values to start with (what `SubjectActionData.values` returned after an error, or a refinement without JavaScript). */\n values?: SubjectValues\n /** What the action answered: errors by field, refilled values. */\n data?: SubjectActionData | null\n /** `action` of the form (default: the current URL). */\n action?: string\n /** Field-name prefix (default `subject`: `subject.make`). */\n namePrefix?: string\n /** With JavaScript: receives the validated input; the form does not post. Without it the form posts normally. */\n onSubmit?: (input: SubjectInput, subject?: Subject | null) => void | Promise<void>\n onCancel?: () => void\n pending?: boolean\n /** Offer «use as active» (default true when the buyer already has items of this kind: the caller decides). */\n offerDefault?: boolean\n locale?: string\n messages?: DeepPartial<SubjectMessages>\n classNames?: SubjectPickerClassNames\n}\n\nconst isYearField = (f: SubjectField) => f.type === 'year'\nconst initialValues = (kind: SubjectKind, subject?: Subject | null, values?: SubjectValues): SubjectValues => {\n const out: SubjectValues = {}\n for (const f of kind.fields) {\n if (f.private) continue // never prefilled: the server only returns it masked\n const v = values?.[f.key] ?? (subject?.attributes[f.key] as string | number | undefined)\n if (v !== undefined && v !== null) out[f.key] = v\n }\n return out\n}\n\nexport function SubjectPicker(props: SubjectPickerProps) {\n const { kind, subject, data, action, namePrefix = 'subject', onSubmit, onCancel, pending, classNames: cx = {} } = props\n const locale = useResolvedLocale(props.locale)\n const m = subjectMessages(locale, props.messages).picker\n const uid = useId().replace(/:/g, '')\n const [values, setValues] = useState<SubjectValues>(() => initialValues(kind, subject, props.values ?? (data?.values as SubjectValues | undefined)))\n const [nickname, setNickname] = useState(subject?.nickname ?? '')\n const [makeDefault, setMakeDefault] = useState(false)\n const [clientProblems, setClientProblems] = useState<SubjectProblems | null>(null)\n const [clear, setClear] = useState<Record<string, boolean>>({})\n const [privates, setPrivates] = useState<Record<string, string>>({})\n\n const serverErrors = data?.fieldErrors ?? {}\n const problemOf = (key: string) => clientProblems?.[key] ?? serverErrors[key]\n const errorText = (code: string | undefined) => (code ? ((m.errors as Record<string, string>)[code] ?? m.errors.invalid) : undefined)\n const topError = !data?.ok && data?.error && !data.error.field ? errorText(data.error.code) : undefined\n\n const optionsOf = useMemo(() => (f: SubjectField) => (f.source === 'catalog' ? subjectOptions(kind, f.key, values) : []), [kind, values])\n\n const set = (key: string, value: string) => {\n setClientProblems(null)\n setValues((cur) => reconcileSubjectValues(kind, { ...cur, [key]: value }))\n }\n\n const submit = (e: FormEvent<HTMLFormElement>) => {\n if (!onSubmit) return // posts as a normal form\n e.preventDefault()\n const sent: SubjectValues = { ...values }\n for (const f of kind.fields) {\n if (!f.private) continue\n if (clear[f.key]) sent[f.key] = null\n else if (privates[f.key]) sent[f.key] = privates[f.key]\n }\n // Validate like the server does, on what the buyer typed; an edit keeps stored private values, so they are not required.\n const r = resolveSubject(kind, sent)\n if (!r.ok) {\n // An edit keeps the stored private values, so an empty private field is not missing.\n const privateKeys = new Set(kind.fields.filter((f) => f.private).map((f) => f.key))\n const blocking = Object.fromEntries(Object.entries(r.problems).filter(([key, code]) => !(subject && code === 'required' && privateKeys.has(key)))) as SubjectProblems\n if (Object.keys(blocking).length > 0) {\n setClientProblems(blocking)\n return\n }\n }\n const attributes: Record<string, unknown> = {}\n for (const f of kind.fields) {\n const v = sent[f.key]\n if (v === null && f.private) attributes[f.key] = null\n else if (v !== undefined && v !== null && v !== '') attributes[f.key] = v\n }\n void onSubmit({ kind: kind.key, attributes, nickname: nickname.trim() || null, ...(makeDefault ? { is_default: true } : {}) }, subject)\n }\n\n const name = (key: string) => `${namePrefix}.${key}`\n const levelKeys = kind.fields.filter((f) => f.source === 'catalog' && !isYearField(f)).map((f) => f.key)\n\n return (\n <form method=\"post\" action={action} onSubmit={submit} className={cx.form} data-sf-subject-picker data-sf-subject-kind={kind.key} noValidate={!!onSubmit}>\n <input type=\"hidden\" name=\"intent\" value=\"subject-save\" />\n <input type=\"hidden\" name=\"kind\" value={kind.key} />\n {subject ? <input type=\"hidden\" name=\"id\" value={subject.id} /> : null}\n {topError ? (\n <p role=\"alert\" className={cx.error} data-sf-subject-error>\n {topError}\n </p>\n ) : null}\n {kind.fields.map((f) => {\n const id = `sf-subject-${uid}-${f.key}`\n const err = errorText(problemOf(f.key))\n const opts = optionsOf(f)\n const waiting = f.source === 'catalog' && !isYearField(f) && levelKeys.indexOf(f.key) > 0 && opts.length === 0\n const describedBy = [err ? `${id}-err` : '', f.private ? `${id}-priv` : ''].filter(Boolean).join(' ') || undefined\n let control\n if (f.private) {\n control = (\n <input\n id={id}\n name={name(f.key)}\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"characters\"\n spellCheck={false}\n maxLength={f.max}\n className={cx.control}\n value={privates[f.key] ?? ''}\n onChange={(e) => setPrivates((cur) => ({ ...cur, [f.key]: e.target.value }))}\n aria-describedby={describedBy}\n aria-invalid={err ? true : undefined}\n placeholder={subject && typeof subject.attributes[f.key] === 'string' ? String(subject.attributes[f.key]) : undefined}\n data-sf-private\n />\n )\n } else if (f.source === 'catalog' && opts.length > 0) {\n control = (\n <select id={id} name={name(f.key)} className={cx.control} value={String(values[f.key] ?? '')} onChange={(e) => set(f.key, e.target.value)} required={f.required} aria-describedby={describedBy} aria-invalid={err ? true : undefined}>\n <option value=\"\">{m.choose}</option>\n {opts.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n )\n } else if (f.source === 'catalog' && !isYearField(f)) {\n control = (\n <select id={id} name={name(f.key)} className={cx.control} value=\"\" disabled aria-describedby={describedBy}>\n <option value=\"\">{waiting ? m.chooseFirst : m.choose}</option>\n </select>\n )\n } else {\n control = (\n <input\n id={id}\n name={name(f.key)}\n type={isYearField(f) ? 'number' : 'text'}\n inputMode={isYearField(f) ? 'numeric' : undefined}\n min={isYearField(f) ? 1900 : undefined}\n max={isYearField(f) ? 2100 : undefined}\n maxLength={f.max}\n className={cx.control}\n value={String(values[f.key] ?? '')}\n onChange={(e) => set(f.key, e.target.value)}\n required={f.required}\n aria-describedby={describedBy}\n aria-invalid={err ? true : undefined}\n />\n )\n }\n return (\n <div key={f.key} className={cx.field} data-sf-subject-field={f.key} data-sf-subject-year={isYearField(f) ? '' : undefined}>\n <label htmlFor={id} className={cx.label}>\n {f.label}\n {f.required ? <span aria-hidden=\"true\"> *</span> : null}\n </label>\n {control}\n {f.private ? (\n <p id={`${id}-priv`} className={cx.privateNote ?? cx.hint} data-sf-subject-private-note>\n {m.privateNote}\n {subject && subject.attributes[f.key] !== undefined ? ` ${m.privateKeep}` : ''}\n </p>\n ) : null}\n {f.private && subject && subject.attributes[f.key] !== undefined ? (\n <label className={cx.hint} data-sf-subject-clear>\n <input type=\"checkbox\" name={`${name(f.key)}.clear`} checked={!!clear[f.key]} onChange={(e) => setClear((cur) => ({ ...cur, [f.key]: e.target.checked }))} /> {m.privateClear}\n </label>\n ) : null}\n {err ? (\n <p id={`${id}-err`} role=\"alert\" className={cx.error} data-sf-subject-error>\n {err}\n </p>\n ) : null}\n </div>\n )\n })}\n <div className={cx.field} data-sf-subject-field=\"nickname\">\n <label htmlFor={`sf-subject-${uid}-nick`} className={cx.label}>\n {m.nickname}\n </label>\n <input id={`sf-subject-${uid}-nick`} name=\"nickname\" type=\"text\" maxLength={40} className={cx.control} value={nickname} onChange={(e) => setNickname(e.target.value)} aria-describedby={`sf-subject-${uid}-nick-h`} />\n <p id={`sf-subject-${uid}-nick-h`} className={cx.hint}>\n {m.nicknameHint}\n </p>\n </div>\n {props.offerDefault && !subject?.is_default ? (\n <label className={cx.hint} data-sf-subject-default>\n <input type=\"checkbox\" name=\"is_default\" value=\"1\" checked={makeDefault} onChange={(e) => setMakeDefault(e.target.checked)} /> {m.makeActive}\n </label>\n ) : null}\n <div className={cx.actions}>\n <button type=\"submit\" className={cx.submit} disabled={pending} data-sf-subject-submit>\n {pending ? m.saving : m.save}\n </button>\n {/* Without JavaScript the cascade advances by posting: «Continue» shows the next level. */}\n <noscript>\n <button type=\"submit\" name=\"intent\" value=\"subject-refine\" formNoValidate data-sf-subject-refine>\n {m.refine}\n </button>\n </noscript>\n {onCancel ? (\n <button type=\"button\" className={cx.cancel} onClick={onCancel} data-sf-subject-cancel>\n {m.cancel}\n </button>\n ) : null}\n </div>\n </form>\n )\n}\n\n","/**\n * «My items» of one kind («My garage»): a card per saved item with its label, nickname and masked private values, the\n * active badge, and the actions: see compatible parts, make active, edit, delete (inline confirmation, no `confirm()`),\n * plus «Add» with the picker. Every action is a `<form method=\"post\">` with an `intent` (`createSubjectAction` answers), so\n * it all works without JavaScript; with JavaScript pass `onSave` / `onDelete` / `onMakeDefault` and nothing navigates.\n *\n * The section's name is `kind.label_plural` (data). Render it only when `kind` exists: a store that declares no kind has no\n * garage, and a read that failed shows «We could not load this · Try again» instead of the list (`status=\"error\"`).\n */\nimport type { Subject, SubjectInput, SubjectKind } from '@asteby/storefront'\nimport { useResolvedLocale } from '../locale.js'\nimport { fill, subjectMessages, type DeepPartial, type SubjectMessages } from './messages.js'\nimport { SubjectPicker, type SubjectPickerClassNames } from './subject-picker.js'\nimport type { SubjectActionData } from './types.js'\n\nexport type SubjectGarageClassNames = SubjectPickerClassNames &\n Partial<Record<'root' | 'header' | 'title' | 'list' | 'card' | 'cardTitle' | 'nickname' | 'badge' | 'meta' | 'cardActions' | 'button' | 'primary' | 'danger' | 'empty' | 'notice' | 'limit' | 'details' | 'summary', string>>\n\nexport type SubjectGarageProps = {\n kind: SubjectKind\n /** The buyer's items (any kind: only this kind's are shown). */\n subjects: Subject[]\n /** `error`: the read failed; the list is replaced by a retry. `ready` (default) shows the list. */\n status?: 'ready' | 'error'\n onRetry?: () => void\n /** `action` of the forms (default: the current URL). */\n action?: string\n /** Where «see compatible parts» goes for an item (e.g. `/productos?para=<fit_key>`); `null`/omitted hides the link. */\n partsHref?: (subject: Subject) => string | null | undefined\n /** What the action answered: errors and refilled values for the form it concerns, a notice after a save. */\n data?: SubjectActionData | null\n /** Id of the item whose edit form is open without JavaScript (after a failed save); `'new'` for the add form. */\n openId?: string | null\n onSave?: (input: SubjectInput, subject?: Subject | null) => void | Promise<void>\n onDelete?: (subject: Subject) => void | Promise<void>\n onMakeDefault?: (subject: Subject) => void | Promise<void>\n pending?: boolean\n headingLevel?: 2 | 3\n locale?: string\n messages?: DeepPartial<SubjectMessages>\n classNames?: SubjectGarageClassNames\n}\n\nexport function SubjectGarage(props: SubjectGarageProps) {\n const { kind, status = 'ready', action, partsHref, data, onSave, onDelete, onMakeDefault, pending, classNames: cx = {} } = props\n const locale = useResolvedLocale(props.locale)\n const msgs = subjectMessages(locale, props.messages)\n const m = msgs.garage\n const Heading = props.headingLevel === 3 ? 'h3' : 'h2'\n const singular = kind.label.toLowerCase()\n const mine = props.subjects.filter((s) => s.kind === kind.key)\n const atLimit = mine.length >= kind.max_per_account\n const openId = props.openId ?? (data && !data.ok && (data.intent === 'subject-save' || data.intent === 'subject-refine') ? (data.id ?? 'new') : null)\n\n return (\n <section className={cx.root} data-sf-subject-garage data-sf-subject-kind={kind.key} aria-labelledby={`sf-garage-${kind.key}`}>\n <header className={cx.header}>\n <Heading id={`sf-garage-${kind.key}`} className={cx.title}>\n {kind.label_plural}\n </Heading>\n </header>\n {data?.ok && data.intent && data.intent !== 'subject-default' ? (\n <p role=\"status\" className={cx.notice} data-sf-subject-notice>\n {data.intent === 'subject-delete' ? m.removed : m.saved}\n </p>\n ) : null}\n {status === 'error' ? (\n <div role=\"alert\" className={cx.notice} data-sf-subject-degraded>\n <p>{m.loadError}</p>\n {props.onRetry ? (\n <button type=\"button\" className={cx.button} onClick={props.onRetry}>\n {m.retry}\n </button>\n ) : (\n <a href=\"\" className={cx.button}>\n {m.retry}\n </a>\n )}\n </div>\n ) : (\n <>\n {mine.length === 0 ? (\n <p className={cx.empty} data-sf-subject-empty>\n {fill(m.empty, { kind: singular })}\n </p>\n ) : (\n <ul className={cx.list} data-sf-subject-list>\n {mine.map((s) => {\n const parts = partsHref?.(s)\n const privates = kind.fields.filter((f) => f.private && s.attributes[f.key] !== undefined)\n return (\n <li key={s.id} className={cx.card} data-sf-subject={s.id} data-sf-subject-active={s.is_default ? '' : undefined}>\n <p className={cx.cardTitle} data-sf-subject-label>\n {s.label}\n {s.is_default ? (\n <span className={cx.badge} data-sf-subject-badge>\n {m.active}\n </span>\n ) : null}\n </p>\n {s.nickname ? <p className={cx.nickname}>{s.nickname}</p> : null}\n {privates.map((f) => (\n <p key={f.key} className={cx.meta} data-sf-subject-private-value>\n {fill(m.privateLabel, { field: f.label, value: String(s.attributes[f.key]) })}\n </p>\n ))}\n <div className={cx.cardActions}>\n {parts ? (\n <a href={parts} className={`${cx.button ?? ''} ${cx.primary ?? ''}`.trim() || undefined} data-sf-subject-parts>\n {m.viewParts}\n </a>\n ) : null}\n {!s.is_default ? (\n <form method=\"post\" action={action} onSubmit={onMakeDefault ? (e) => { e.preventDefault(); void onMakeDefault(s) } : undefined} data-sf-subject-default-form>\n <input type=\"hidden\" name=\"intent\" value=\"subject-default\" />\n <input type=\"hidden\" name=\"id\" value={s.id} />\n <button type=\"submit\" className={cx.button} disabled={pending}>\n {m.makeActive}\n </button>\n </form>\n ) : null}\n <details className={cx.details} open={openId === s.id || undefined} data-sf-subject-edit>\n <summary className={cx.summary}>{m.edit}</summary>\n <SubjectPicker\n kind={kind}\n subject={s}\n {...(action ? { action } : {})}\n data={openId === s.id ? data : null}\n {...(onSave ? { onSubmit: onSave } : {})}\n pending={pending}\n locale={locale}\n {...(props.messages ? { messages: props.messages } : {})}\n classNames={cx}\n />\n </details>\n <details className={cx.details} data-sf-subject-remove>\n <summary className={cx.summary}>{m.remove}</summary>\n <p className={cx.meta}>{m.removeHint}</p>\n <form method=\"post\" action={action} onSubmit={onDelete ? (e) => { e.preventDefault(); void onDelete(s) } : undefined}>\n <input type=\"hidden\" name=\"intent\" value=\"subject-delete\" />\n <input type=\"hidden\" name=\"id\" value={s.id} />\n <button type=\"submit\" className={`${cx.button ?? ''} ${cx.danger ?? ''}`.trim() || undefined} disabled={pending}>\n {fill(m.removeConfirm, { name: s.label })}\n </button>\n </form>\n </details>\n </div>\n </li>\n )\n })}\n </ul>\n )}\n {atLimit ? (\n <p className={cx.limit} data-sf-subject-limit>\n {fill(m.limit, { max: kind.max_per_account })}\n </p>\n ) : (\n <details className={cx.details} open={openId === 'new' || undefined} data-sf-subject-add>\n <summary className={cx.summary}>{fill(m.add, { kind: singular })}</summary>\n <SubjectPicker\n kind={kind}\n {...(action ? { action } : {})}\n data={openId === 'new' ? data : null}\n {...(onSave ? { onSubmit: onSave } : {})}\n offerDefault={mine.length > 0}\n pending={pending}\n locale={locale}\n {...(props.messages ? { messages: props.messages } : {})}\n classNames={cx}\n />\n </details>\n )}\n </>\n )}\n </section>\n )\n}\n","/**\n * The compatibility filter of a catalog page, and the badge of a product («fits your vehicle»). Presentational: the loader\n * decides what applies (`loadSubjectsContext().active[kind]`) and the page passes `tags_any` (`fitTagsAny`) to the product\n * list; this only says it. Links, not buttons, so it works without JavaScript and keeps the URL shareable.\n */\nimport type { SubjectKind } from '@asteby/storefront'\nimport type { ReactNode } from 'react'\nimport { useResolvedLocale } from '../locale.js'\nimport { fill, subjectMessages, type DeepPartial, type SubjectMessages } from './messages.js'\n\nexport type SubjectFilterClassNames = Partial<Record<'root' | 'label' | 'link' | 'toggle', string>>\n\nexport type SubjectFilterProps = {\n kind: SubjectKind\n /** The item that applies, or `null` when the buyer has not chosen one. */\n active: { label: string; fit_key: string } | null\n /** Showing the whole catalog (the buyer asked for it) instead of only what fits. */\n showingAll?: boolean\n /** Where «Change» goes (the garage or the picker). Omit to hide it. */\n changeHref?: string\n /** Where «Choose your …» goes when there is no active item. */\n chooseHref?: string\n /** The same page showing only what fits / everything (e.g. with and without `?todo=1`). */\n onlyFitsHref?: string\n showAllHref?: string\n locale?: string\n messages?: DeepPartial<SubjectMessages>\n classNames?: SubjectFilterClassNames\n}\n\nexport function SubjectFilter(props: SubjectFilterProps) {\n const { kind, active, showingAll, classNames: cx = {} } = props\n const locale = useResolvedLocale(props.locale)\n const m = subjectMessages(locale, props.messages).filter\n const singular = kind.label.toLowerCase()\n if (!active) {\n return props.chooseHref ? (\n <p className={cx.root} data-sf-subject-filter data-sf-subject-filter-empty>\n <a href={props.chooseHref} className={cx.link}>\n {fill(m.choose, { kind: singular })}\n </a>\n </p>\n ) : null\n }\n return (\n <div className={cx.root} data-sf-subject-filter data-sf-subject-showing={showingAll ? 'all' : 'fits'}>\n <span className={cx.label}>{fill(m.forItem, { name: active.label })}</span>\n {props.changeHref ? (\n <a href={props.changeHref} className={cx.link}>\n {m.change}\n </a>\n ) : null}\n {showingAll && props.onlyFitsHref ? (\n <a href={props.onlyFitsHref} className={cx.toggle ?? cx.link}>\n {m.onlyFits}\n </a>\n ) : null}\n {!showingAll && props.showAllHref ? (\n <a href={props.showAllHref} className={cx.toggle ?? cx.link}>\n {m.showAll}\n </a>\n ) : null}\n </div>\n )\n}\n\nexport type SubjectFitBadgeProps = {\n kind: SubjectKind\n /** `fitState(product)` of `@asteby/storefront-react/fitment` (the state `withFit` resolved). */\n state: 'fits' | 'universal' | 'no' | 'unknown'\n /** Show the badge for `unknown` too (default: it is hidden: no data, no claim). */\n showUnknown?: boolean\n locale?: string\n messages?: DeepPartial<SubjectMessages>\n className?: string\n children?: ReactNode\n}\n\n/** «Fits your vehicle» / «Universal» / «Not for your vehicle». With no compatibility data it says nothing. */\nexport function SubjectFitBadge(props: SubjectFitBadgeProps) {\n const locale = useResolvedLocale(props.locale)\n const m = subjectMessages(locale, props.messages).fit\n if (props.state === 'unknown' && !props.showUnknown) return null\n return (\n <span className={props.className} data-sf-subject-fit={props.state}>\n {fill(m[props.state], { kind: props.kind.label.toLowerCase() })}\n {props.children}\n </span>\n )\n}\n\n","/**\n * Data hook of «My items» for stores that render on the client (the loader/action pair of `subjects/server` is the way on\n * a server-rendered store). It talks to the client of the `StorefrontProvider` (or `client`), which must carry the buyer's\n * session (`withCustomerToken`). It never throws: a failure is `status: 'error'` and `reload()` is the retry; a store that\n * declares no kind is `status: 'unavailable'` and the section should not render.\n */\nimport type { StorefrontClient, Subject, SubjectInput, SubjectKind, SubjectPatch } from '@asteby/storefront'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { useOptionalStorefront } from '../context.js'\n\nexport type UseSubjectsStatus = 'loading' | 'ready' | 'error' | 'unavailable'\n\nexport type UseSubjects = {\n status: UseSubjectsStatus\n kinds: SubjectKind[]\n subjects: Subject[]\n error: Error | null\n reload: () => void\n create: (input: SubjectInput) => Promise<Subject>\n update: (id: string, patch: SubjectPatch) => Promise<Subject>\n remove: (id: string) => Promise<void>\n makeDefault: (id: string) => Promise<Subject>\n}\n\nexport function useSubjects(client?: StorefrontClient | null): UseSubjects {\n const ctx = useOptionalStorefront()\n const sf = client ?? ctx?.client ?? null\n const [state, setState] = useState<{ status: UseSubjectsStatus; kinds: SubjectKind[]; subjects: Subject[]; error: Error | null }>({ status: 'loading', kinds: [], subjects: [], error: null })\n const alive = useRef<AbortController | null>(null)\n\n const load = useCallback(() => {\n alive.current?.abort()\n if (!sf) {\n setState({ status: 'loading', kinds: [], subjects: [], error: null })\n return\n }\n const ctl = new AbortController()\n alive.current = ctl\n const opt = { signal: ctl.signal }\n setState((s) => (s.status === 'ready' ? s : { status: 'loading', kinds: [], subjects: [], error: null }))\n sf.content.subjectKinds(opt).then(\n async (kinds) => {\n if (ctl.signal.aborted) return\n if (kinds.length === 0) return setState({ status: 'unavailable', kinds: [], subjects: [], error: null })\n try {\n const subjects = await sf.customer.subjects.list(undefined, opt)\n if (!ctl.signal.aborted) setState({ status: 'ready', kinds, subjects, error: null })\n } catch (e) {\n if (!ctl.signal.aborted) setState({ status: 'error', kinds, subjects: [], error: e instanceof Error ? e : new Error('Request failed') })\n }\n },\n (e) => !ctl.signal.aborted && setState({ status: 'error', kinds: [], subjects: [], error: e instanceof Error ? e : new Error('Request failed') }),\n )\n }, [sf])\n\n useEffect(() => {\n load()\n return () => alive.current?.abort()\n }, [load])\n\n const need = () => {\n if (!sf) throw new Error('useSubjects: no storefront client')\n return sf\n }\n const create = useCallback(async (input: SubjectInput) => {\n const saved = await need().customer.subjects.create(input)\n load()\n return saved\n }, [sf, load]) // eslint-disable-line react-hooks/exhaustive-deps\n const update = useCallback(async (id: string, patch: SubjectPatch) => {\n const saved = await need().customer.subjects.update(id, patch)\n load()\n return saved\n }, [sf, load]) // eslint-disable-line react-hooks/exhaustive-deps\n const remove = useCallback(async (id: string) => {\n await need().customer.subjects.delete(id)\n load()\n }, [sf, load]) // eslint-disable-line react-hooks/exhaustive-deps\n const makeDefault = useCallback((id: string) => update(id, { is_default: true }), [update])\n\n return { ...state, reload: load, create, update, remove, makeDefault }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asteby/storefront-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"description": "React bindings for @asteby/storefront — SSR-safe provider, optimistic cart, Money, responsive Image, prices, variant selection, SEO meta and JSON-LD, section registry and server-rendered theme CSS.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -111,6 +111,27 @@
|
|
|
111
111
|
}
|
|
112
112
|
},
|
|
113
113
|
"./fiscal.css": "./dist/fiscal.css",
|
|
114
|
+
"./subjects": {
|
|
115
|
+
"import": {
|
|
116
|
+
"types": "./dist/subjects.d.ts",
|
|
117
|
+
"default": "./dist/subjects.js"
|
|
118
|
+
},
|
|
119
|
+
"require": {
|
|
120
|
+
"types": "./dist/subjects.d.cts",
|
|
121
|
+
"default": "./dist/subjects.cjs"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"./subjects/server": {
|
|
125
|
+
"import": {
|
|
126
|
+
"types": "./dist/subjects-server.d.ts",
|
|
127
|
+
"default": "./dist/subjects-server.js"
|
|
128
|
+
},
|
|
129
|
+
"require": {
|
|
130
|
+
"types": "./dist/subjects-server.d.cts",
|
|
131
|
+
"default": "./dist/subjects-server.cjs"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"./subjects.css": "./dist/subjects.css",
|
|
114
135
|
"./payments": {
|
|
115
136
|
"import": {
|
|
116
137
|
"types": "./dist/payments.d.ts",
|
|
@@ -163,7 +184,7 @@
|
|
|
163
184
|
"react": "^19.0.0"
|
|
164
185
|
},
|
|
165
186
|
"dependencies": {
|
|
166
|
-
"@asteby/storefront": "0.
|
|
187
|
+
"@asteby/storefront": "0.18.0"
|
|
167
188
|
},
|
|
168
189
|
"devDependencies": {
|
|
169
190
|
"@testing-library/react": "^16.3.2",
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/** What the account form and the server action share. Plain types: no React, no server code. */
|
|
2
|
-
/** What the buyer is doing. It is the `intent` field of the account form. */
|
|
3
|
-
type AuthIntent = 'login' | 'register' | 'verify' | 'otp-request' | 'otp-login' | 'forgot' | 'reset';
|
|
4
|
-
/** Screen the form shows next, set by the action (`verify`: code of the registration; `otp`: code to sign in; `reset`: code + new password). */
|
|
5
|
-
type AuthStep = 'verify' | 'otp' | 'reset';
|
|
6
|
-
type AuthErrorCode =
|
|
7
|
-
/** Wrong email or password. */
|
|
8
|
-
'invalid_credentials'
|
|
9
|
-
/** Wrong or expired code. */
|
|
10
|
-
| 'invalid_code'
|
|
11
|
-
/** The email already has an account. */
|
|
12
|
-
| 'email_taken'
|
|
13
|
-
/** Too many attempts: wait and try again. */
|
|
14
|
-
| 'rate_limited'
|
|
15
|
-
/** A field was rejected (`field` says which). */
|
|
16
|
-
| 'validation'
|
|
17
|
-
/** The store does not offer this way of signing in. */
|
|
18
|
-
| 'unsupported'
|
|
19
|
-
/**
|
|
20
|
-
* The store's own credential lacks a permission (`403 insufficient_scope`): the shop is misconfigured, not the
|
|
21
|
-
* buyer's data. The buyer can still check out as a guest; the server already logged how to repair it.
|
|
22
|
-
*/
|
|
23
|
-
| 'store_misconfigured'
|
|
24
|
-
/** Anything else (network, server). */
|
|
25
|
-
| 'unavailable';
|
|
26
|
-
/** What the action returns when it does not redirect. Texts are NOT here: `<AccountAuth>` writes them (i18n). */
|
|
27
|
-
type AuthActionData = {
|
|
28
|
-
ok: boolean;
|
|
29
|
-
/** Next screen of the form. */
|
|
30
|
-
step?: AuthStep;
|
|
31
|
-
/** Email the flow is about, to carry it to the next screen. */
|
|
32
|
-
email?: string;
|
|
33
|
-
error?: {
|
|
34
|
-
code: AuthErrorCode;
|
|
35
|
-
field?: string;
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export type { AuthActionData as A, AuthErrorCode as a, AuthIntent as b, AuthStep as c };
|
package/dist/types-D7pVK0GK.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/** What the account form and the server action share. Plain types: no React, no server code. */
|
|
2
|
-
/** What the buyer is doing. It is the `intent` field of the account form. */
|
|
3
|
-
type AuthIntent = 'login' | 'register' | 'verify' | 'otp-request' | 'otp-login' | 'forgot' | 'reset';
|
|
4
|
-
/** Screen the form shows next, set by the action (`verify`: code of the registration; `otp`: code to sign in; `reset`: code + new password). */
|
|
5
|
-
type AuthStep = 'verify' | 'otp' | 'reset';
|
|
6
|
-
type AuthErrorCode =
|
|
7
|
-
/** Wrong email or password. */
|
|
8
|
-
'invalid_credentials'
|
|
9
|
-
/** Wrong or expired code. */
|
|
10
|
-
| 'invalid_code'
|
|
11
|
-
/** The email already has an account. */
|
|
12
|
-
| 'email_taken'
|
|
13
|
-
/** Too many attempts: wait and try again. */
|
|
14
|
-
| 'rate_limited'
|
|
15
|
-
/** A field was rejected (`field` says which). */
|
|
16
|
-
| 'validation'
|
|
17
|
-
/** The store does not offer this way of signing in. */
|
|
18
|
-
| 'unsupported'
|
|
19
|
-
/**
|
|
20
|
-
* The store's own credential lacks a permission (`403 insufficient_scope`): the shop is misconfigured, not the
|
|
21
|
-
* buyer's data. The buyer can still check out as a guest; the server already logged how to repair it.
|
|
22
|
-
*/
|
|
23
|
-
| 'store_misconfigured'
|
|
24
|
-
/** Anything else (network, server). */
|
|
25
|
-
| 'unavailable';
|
|
26
|
-
/** What the action returns when it does not redirect. Texts are NOT here: `<AccountAuth>` writes them (i18n). */
|
|
27
|
-
type AuthActionData = {
|
|
28
|
-
ok: boolean;
|
|
29
|
-
/** Next screen of the form. */
|
|
30
|
-
step?: AuthStep;
|
|
31
|
-
/** Email the flow is about, to carry it to the next screen. */
|
|
32
|
-
email?: string;
|
|
33
|
-
error?: {
|
|
34
|
-
code: AuthErrorCode;
|
|
35
|
-
field?: string;
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export type { AuthActionData as A, AuthErrorCode as a, AuthIntent as b, AuthStep as c };
|