haiku-atelier-2024/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js
gcch b50f437ea0 2025-11-03 (bis)
- ajoute un .dockerignore.
- met à jour les dépendances.
- utilise bun comme gestionnaire de paquets npm.
- utilise une configuration Vite en TypeScript.
- ajoute les fichiers compilés JavaScript aux fichiers pris en charge par Git.
2025-11-03 14:14:24 +01:00

106 lines
No EOL
5.9 KiB
JavaScript

import "./journalisation.CEgm28xa.js";
import { dt as pipe } from "./exports.CurVqjr0.js";
import { $ as Maybe, Dt as DOM_BOUTON_AJOUT_PANIER, E as array, H as string, Ht as DOM_CONTENUS_ACCORDEON, I as number, J as lanceAnimationCycleLoading, L as object, S as reporteErreur, T as ValiError, Ut as DOM_DOM_QUANTITE, a as mustGetEleInDocument, an as DOM_PRIX_PRODUIT, b as ServerError, dt as ATTRIBUT_DESACTIVE, h as BadRequestError, it as ATTRIBUT_ARIA_EXPANDED, l as recupereElementDocumentEither, mn as forEach, pt as ATTRIBUT_HIDDEN, rt as ATTRIBUT_ARIA_CONTROLS, s as mustGetElesInDocument, st as ATTRIBUT_CHARGEMENT, wt as DOM_BOUTONS_ACCORDEON, yt as ATTRIBUT_PRIX, z as optional } from "./dom.emspS_OW.js";
import "./belt_Option-91f3b350.CMbgtZ-W.js";
import { n as tap } from "./index-c1cc4c86.D2nZEikK.js";
import { i as get, t as estHTMLSelectElement } from "./gardes.CYxPzOAc.js";
import { i as ROUTE_API_AJOUTE_ARTICLE_PANIER } from "./api.CM5TBNEA.js";
import { s as WCStoreCartSchema, t as emetMessageMajBoutonPanier } from "./messages.CqHLtCes.js";
import { a as safeFetch, n as newPartialResponse, r as postBackend, s as EitherAsync } from "./reseau.BY4MrTI9.js";
import { t as safeSchemaParse } from "./validation.CYJDC5vQ.js";
import { n as z, t as M } from "./dist.CzYTlmnN.js";
//#region web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-add-item.ts
const WCStoreCartAddItemArgsItemsSchema = object({
attribute: string(),
value: string()
});
const WCStoreCartAddItemArgsSchema = object({
id: optional(number()),
quantity: optional(number()),
variation: optional(array(WCStoreCartAddItemArgsItemsSchema))
});
//#endregion
//#region web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts
var ETATS_PAGE = _etats;
/**
* Fonction utilitaire pour déplier toutes les sections de la Boîte des Informations Produit en ajustant les attributs
* correspondants.
*/
var deplieToutesSections = (ensembleLiensContenus) => forEach(ensembleLiensContenus, (ensemble) => {
Maybe.fromNullable(ensemble.at(0)).ifJust((e) => e.setAttribute(ATTRIBUT_ARIA_EXPANDED, "false"));
Maybe.fromNullable(ensemble.at(1)).ifJust((e) => e.setAttribute(ATTRIBUT_HIDDEN, "true"));
});
var E = {
BOUTON_AJOUT_PANIER: mustGetEleInDocument(DOM_BOUTON_AJOUT_PANIER),
BOUTONS_ACCORDEON: mustGetElesInDocument(DOM_BOUTONS_ACCORDEON),
CONTENUS_ACCORDEON: mustGetElesInDocument(DOM_CONTENUS_ACCORDEON),
PRIX_PRODUIT: mustGetEleInDocument(DOM_PRIX_PRODUIT),
DOM_VARIATION: recupereElementDocumentEither(DOM_DOM_QUANTITE)
};
var gereAccordeonDetailsProduit = () => {
const contenus = /* @__PURE__ */ new Map();
E.BOUTONS_ACCORDEON.forEach((bouton, index) => {
const idContenu = bouton.getAttribute(ATTRIBUT_ARIA_CONTROLS);
const sectionCorrespondante = E.CONTENUS_ACCORDEON[index];
if (!idContenu) throw new Error("Le lien ne dispose pas d'ID !");
if (!sectionCorrespondante) throw new Error("Le lien ne dispose pas de section correspondante !");
contenus.set(idContenu, [bouton, sectionCorrespondante]);
bouton.addEventListener("click", (evenement) => {
evenement.preventDefault();
const estAncienContenuDeplie = bouton.getAttribute(ATTRIBUT_ARIA_EXPANDED) === "true";
pipe(contenus.values(), Array.from, deplieToutesSections);
if (estAncienContenuDeplie) return;
bouton.setAttribute(ATTRIBUT_ARIA_EXPANDED, "true");
sectionCorrespondante.removeAttribute(ATTRIBUT_HIDDEN);
});
});
E.DOM_VARIATION.ifRight((selecteur) => selecteur.addEventListener("change", (evenement) => {
const cibleSelecteur = Maybe.fromNullable(evenement.target).filter(estHTMLSelectElement);
cibleSelecteur.map((v) => v.validity.valid).ifJust((v) => E.BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, !v));
cibleSelecteur.chainNullable((s) => s.selectedOptions[0]).chainNullable((e) => e.getAttribute(ATTRIBUT_PRIX)).ifJust((p) => {
E.PRIX_PRODUIT.textContent = `${p}`;
});
}));
E.BOUTON_AJOUT_PANIER.addEventListener("click", () => ajouteProduitAuPanier());
};
var ajouteProduitAuPanier = () => {
const argsRequete = {
id: E.DOM_VARIATION.map((selecteur) => Number(selecteur.value)).orDefault(ETATS_PAGE.idProduit),
quantity: 1
};
EitherAsync.liftEither(safeSchemaParse(argsRequete, WCStoreCartAddItemArgsSchema)).ifRight(() => {
E.BOUTON_AJOUT_PANIER.setAttribute(ATTRIBUT_DESACTIVE, "");
E.BOUTON_AJOUT_PANIER.setAttribute(ATTRIBUT_CHARGEMENT, "");
lanceAnimationCycleLoading(E.BOUTON_AJOUT_PANIER, 500);
}).chain((args) => safeFetch(postBackend({
corps: JSON.stringify(args),
nonce: ETATS_PAGE.nonce,
route: ROUTE_API_AJOUTE_ARTICLE_PANIER
}))).chain((reponse) => EitherAsync(async ({ throwE }) => M(await newPartialResponse(reponse)).with({ status: 500 }, () => throwE(new ServerError("500 Server Error"))).with({ status: 400 }, () => throwE(new BadRequestError("400 Bad Request Error"))).with({ status: 201 }, (r) => r.body).otherwise((erreur) => throwE(/* @__PURE__ */ new Error(`Erreur inconnue ${String(erreur.status)}`))))).chain((corpsReponse) => EitherAsync.liftEither(safeSchemaParse(corpsReponse, WCStoreCartSchema))).ifRight((panier) => pipe(get(panier, "items_count"), tap((totalArticles) => {
E.BOUTON_AJOUT_PANIER.textContent = "Added to cart!";
emetMessageMajBoutonPanier({ quantiteProduits: totalArticles });
}))).ifLeft((erreur) => {
M(erreur).with(z.instanceOf(ValiError), (e) => {
reporteErreur(e);
console.error(e.issues);
}).with(z.instanceOf(ServerError), z.instanceOf(BadRequestError), (e) => {
reporteErreur(e);
console.error(e);
}).with(z.instanceOf(DOMException), z.instanceOf(TypeError), z.instanceOf(Error), (e) => {
reporteErreur(e);
console.error(e);
}).exhaustive();
E.BOUTON_AJOUT_PANIER.textContent = "Add to cart";
}).finally(() => {
E.BOUTON_AJOUT_PANIER.removeAttribute(ATTRIBUT_CHARGEMENT);
E.BOUTON_AJOUT_PANIER.removeAttribute(ATTRIBUT_DESACTIVE);
}).run();
};
document.addEventListener("DOMContentLoaded", () => {
gereAccordeonDetailsProduit();
});
//#endregion
//# sourceMappingURL=scripts-page-produit.js.map