- 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.
106 lines
No EOL
5.9 KiB
JavaScript
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
|