2024-09-24
This commit is contained in:
parent
f60f20dccf
commit
6d9837a692
56 changed files with 796 additions and 434 deletions
|
|
@ -16,7 +16,7 @@
|
|||
border-bottom: 1px solid var(--couleur-noir);
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits__produit__illustratif {
|
||||
padding: 1rem;
|
||||
padding: var(--espace-l);
|
||||
text-align: center;
|
||||
border-right: 1px solid var(--couleur-noir);
|
||||
}
|
||||
|
|
@ -31,35 +31,53 @@
|
|||
place-content: center;
|
||||
width: fit-content;
|
||||
margin: auto;
|
||||
font-style: italic;
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__nom-prix {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
column-gap: var(--espace-xl);
|
||||
justify-content: space-between;
|
||||
margin-bottom: 0.33rem;
|
||||
font-size: 1var --espace-l;
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__nom-prix span {
|
||||
font-weight: 600;
|
||||
font-style: initial;
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__description {
|
||||
margin-bottom: 1rem;
|
||||
margin-bottom: var(--espace-l);
|
||||
text-transform: lowercase;
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__actions {
|
||||
display: grid;
|
||||
grid-template-columns: 0.25fr 0.5fr 0.25fr;
|
||||
grid-template-columns: 0.25fr auto 0.25fr;
|
||||
grid-template-rows: 1fr 1fr;
|
||||
place-content: center;
|
||||
font-weight: 500;
|
||||
font-style: initial;
|
||||
border: 1px solid var(--couleur-noir);
|
||||
/**
|
||||
* 1. Cache les flèches d'augmentation/diminution sur Firefox.
|
||||
* 2. Cache les flèches d'augmentation/diminution sur Chrome/Edge/Safari.
|
||||
*/
|
||||
/* Bouton de suppression du Produit du Panier */
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__actions button:first-of-type {
|
||||
grid-column: 1;
|
||||
width: 3rem;
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__actions input {
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number] {
|
||||
grid-column: 2;
|
||||
text-align: center;
|
||||
appearance: textfield; /* 1 */
|
||||
background: initial;
|
||||
border: initial;
|
||||
border-right: 1px solid var(--couleur-noir);
|
||||
border-left: 1px solid var(--couleur-noir);
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-outer-spin-button, #panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-inner-spin-button {
|
||||
margin: 0; /* 2 */
|
||||
appearance: none; /* 2 */
|
||||
}
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__actions button:nth-of-type(2) {
|
||||
grid-column: 3;
|
||||
width: 3rem;
|
||||
|
|
@ -67,16 +85,21 @@
|
|||
#panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type {
|
||||
grid-column: span 3;
|
||||
grid-row: 2;
|
||||
padding: 0.25rem;
|
||||
padding: var(--espace-xs);
|
||||
text-transform: lowercase;
|
||||
border-top: 1px solid var(--couleur-noir);
|
||||
}
|
||||
@media (hover: hover) {
|
||||
#panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type:hover {
|
||||
color: var(--couleur-blanc);
|
||||
background: var(--couleur-noir);
|
||||
}
|
||||
}
|
||||
#panneau-panier .panneau__emballages {
|
||||
width: 100%;
|
||||
padding: 1rem 0;
|
||||
padding: var(--espace-l) 0;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
letter-spacing: 0.5px;
|
||||
border-bottom: 1px solid var(--couleur-noir);
|
||||
}
|
||||
#panneau-panier .panneau__emballages__conteneur {
|
||||
|
|
@ -95,7 +118,7 @@
|
|||
#panneau-panier .panneau__emballages__choix {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
gap: 2rem;
|
||||
column-gap: var(--espace-xl);
|
||||
text-transform: lowercase;
|
||||
/**
|
||||
* 1. Pour un alignement parfait du label avec la case à cocher.
|
||||
|
|
@ -111,8 +134,8 @@
|
|||
cursor: pointer;
|
||||
}
|
||||
#panneau-panier .panneau__emballages__choix input[type=radio] {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
width: var(--espace-l);
|
||||
height: var(--espace-l);
|
||||
appearance: none;
|
||||
border: 1px solid var(--couleur-noir);
|
||||
}
|
||||
|
|
@ -131,7 +154,7 @@
|
|||
}
|
||||
#panneau-panier .panneau__instructions-code-promo {
|
||||
width: 100%;
|
||||
padding: 1rem 0;
|
||||
padding: var(--espace-l) 0;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid var(--couleur-noir);
|
||||
/**
|
||||
|
|
@ -143,11 +166,10 @@
|
|||
resize: vertical;
|
||||
display: block; /* 1 */
|
||||
margin: auto; /* 1 */
|
||||
margin-bottom: 0.5rem; /* 2 */
|
||||
padding: 0.5rem;
|
||||
margin-bottom: var(--espace-s); /* 2 */
|
||||
padding: var(--espace-s);
|
||||
font-size: 0.8rem;
|
||||
font-weight: 450;
|
||||
letter-spacing: 0.5px;
|
||||
background: initial;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
|
@ -159,7 +181,7 @@
|
|||
}
|
||||
#panneau-panier .panneau__instructions-code-promo__code-promo input {
|
||||
width: 30ch;
|
||||
padding: 0.25rem;
|
||||
padding: var(--espace-xs);
|
||||
background: var(--couleur-gris);
|
||||
border: 1px solid var(--couleur-noir);
|
||||
}
|
||||
|
|
@ -167,7 +189,7 @@
|
|||
text-transform: lowercase;
|
||||
}
|
||||
#panneau-panier .panneau__instructions-code-promo__code-promo button {
|
||||
padding: 0.25rem 2rem;
|
||||
padding: var(--espace-xs) var(--espace-xl);
|
||||
color: var(--couleur-blanc);
|
||||
text-transform: lowercase;
|
||||
background: var(--couleur-noir);
|
||||
|
|
@ -177,11 +199,11 @@
|
|||
#panneau-panier .panneau__sous-totaux {
|
||||
width: fit-content;
|
||||
margin: auto;
|
||||
padding: 1rem 0;
|
||||
padding: var(--espace-l) 0;
|
||||
text-align: center;
|
||||
}
|
||||
#panneau-panier .panneau__sous-totaux p + p {
|
||||
margin-top: 1rem;
|
||||
margin-top: var(--espace-l);
|
||||
}
|
||||
#panneau-panier .panneau__sous-totaux__ligne {
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAOR;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;AAgCA;AAAA;AAAA;;AA9BA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAQN;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;;;AClPN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA","file":"page-panier.css"}
|
||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;AAOA;AAAA;AAAA;AAAA;AAyBA;;AA9BA;EACE;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;IACA;;;AASZ;EACE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;AAgCA;AAAA;AAAA;;AA9BA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAQN;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;;;AC1QN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA","file":"page-panier.css"}
|
||||
|
|
@ -15,6 +15,10 @@
|
|||
"file": "index.js",
|
||||
"name": "index"
|
||||
},
|
||||
"_index2.js": {
|
||||
"file": "index2.js",
|
||||
"name": "index"
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts": {
|
||||
"file": "api2.js",
|
||||
"name": "api",
|
||||
|
|
@ -85,13 +89,31 @@
|
|||
"_Either.js"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add.item.ts": {
|
||||
"file": "cart-add.item.js",
|
||||
"name": "cart-add.item",
|
||||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add.item.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts": {
|
||||
"file": "reseau.js",
|
||||
"name": "reseau",
|
||||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_index.js"
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts": {
|
||||
"file": "cart-add-item.js",
|
||||
"name": "cart-add-item",
|
||||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_index2.js"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts": {
|
||||
"file": "cart-remove-item.js",
|
||||
"name": "cart-remove-item",
|
||||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_index2.js"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts": {
|
||||
|
|
@ -100,7 +122,7 @@
|
|||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_index.js"
|
||||
"_index2.js"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts": {
|
||||
|
|
@ -109,7 +131,7 @@
|
|||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_index.js"
|
||||
"_index2.js"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts": {
|
||||
|
|
@ -125,20 +147,44 @@
|
|||
"_Either.js"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": {
|
||||
"file": "scripts-page-panier.js",
|
||||
"name": "scripts-page-panier",
|
||||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_index.js",
|
||||
"_chunk-7BKSRZNG.js",
|
||||
"_index2.js",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
|
||||
"_Either.js",
|
||||
"_exports.js"
|
||||
]
|
||||
},
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": {
|
||||
"file": "scripts-page-produit.js",
|
||||
"name": "scripts-page-produit",
|
||||
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_chunk-7BKSRZNG.js",
|
||||
"_index.js",
|
||||
"_chunk-7BKSRZNG.js",
|
||||
"_index2.js",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add.item.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
|
||||
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
import{c as R}from"./api2.js";import{r as F}from"./Either.js";const H="application/json",S="Content-Type",y=Symbol(),w=Symbol();function C(t={}){var e;return(e=Object.entries(t).find(([o])=>o.toLowerCase()===S.toLowerCase()))===null||e===void 0?void 0:e[1]}function P(t){return/^application\/.*json.*/.test(t)}const u=function(t,e,o=!1){return Object.entries(e).reduce((c,[i,l])=>{const f=t[i];return Array.isArray(f)&&Array.isArray(l)?c[i]=o?[...f,...l]:l:typeof f=="object"&&typeof l=="object"?c[i]=u(f,l,o):c[i]=l,c},{...t})},g={options:{},errorType:"text",polyfills:{},polyfill(t,e=!0,o=!1,...c){const i=this.polyfills[t]||(typeof self<"u"?self[t]:null)||(typeof global<"u"?global[t]:null);if(e&&!i)throw new Error(t+" is not defined");return o&&i?new i(...c):i}};function L(t,e=!1){g.options=e?t:u(g.options,t)}function N(t,e=!1){g.polyfills=e?t:u(g.polyfills,t)}function I(t){g.errorType=t}const J=t=>e=>t.reduceRight((o,c)=>c(o),e)||e;class x extends Error{}const U=t=>{const e=Object.create(null);t=t._addons.reduce((r,s)=>s.beforeRequest&&s.beforeRequest(r,t._options,e)||r,t);const{_url:o,_options:c,_config:i,_catchers:l,_resolvers:f,_middlewares:m,_addons:E}=t,d=new Map(l),D=u(i.options,c);let j=o;const v=J(m)((r,s)=>(j=r,i.polyfill("fetch")(r,s)))(o,D),b=new Error,A=v.catch(r=>{throw{[y]:r}}).then(r=>{var s;if(!r.ok){const n=new x;if(n.cause=b,n.stack=n.stack+`
|
||||
import{d as R}from"./api2.js";import{r as F}from"./Either.js";const H="application/json",S="Content-Type",y=Symbol(),w=Symbol();function C(t={}){var e;return(e=Object.entries(t).find(([o])=>o.toLowerCase()===S.toLowerCase()))===null||e===void 0?void 0:e[1]}function P(t){return/^application\/.*json.*/.test(t)}const u=function(t,e,o=!1){return Object.entries(e).reduce((c,[i,l])=>{const f=t[i];return Array.isArray(f)&&Array.isArray(l)?c[i]=o?[...f,...l]:l:typeof f=="object"&&typeof l=="object"?c[i]=u(f,l,o):c[i]=l,c},{...t})},g={options:{},errorType:"text",polyfills:{},polyfill(t,e=!0,o=!1,...c){const i=this.polyfills[t]||(typeof self<"u"?self[t]:null)||(typeof global<"u"?global[t]:null);if(e&&!i)throw new Error(t+" is not defined");return o&&i?new i(...c):i}};function L(t,e=!1){g.options=e?t:u(g.options,t)}function N(t,e=!1){g.polyfills=e?t:u(g.polyfills,t)}function I(t){g.errorType=t}const J=t=>e=>t.reduceRight((o,c)=>c(o),e)||e;class x extends Error{}const U=t=>{const e=Object.create(null);t=t._addons.reduce((r,s)=>s.beforeRequest&&s.beforeRequest(r,t._options,e)||r,t);const{_url:o,_options:c,_config:i,_catchers:l,_resolvers:f,_middlewares:m,_addons:E}=t,d=new Map(l),D=u(i.options,c);let j=o;const v=J(m)((r,s)=>(j=r,i.polyfill("fetch")(r,s)))(o,D),b=new Error,A=v.catch(r=>{throw{[y]:r}}).then(r=>{var s;if(!r.ok){const n=new x;if(n.cause=b,n.stack=n.stack+`
|
||||
CAUSE: `+b.stack,n.response=r,n.status=r.status,n.url=j,r.type==="opaque")throw n;const a=i.errorType==="json"||((s=r.headers.get("Content-Type"))===null||s===void 0?void 0:s.split(";")[0])==="application/json";return(i.errorType?a?r.text():r[i.errorType]():Promise.resolve(r.body)).then(h=>{throw n.message=typeof h=="string"?h:r.statusText,h&&(a&&typeof h=="string"?(n.text=h,n.json=JSON.parse(h)):n[i.errorType]=h),n})}return r}),O=r=>r.catch(s=>{const n=Object.prototype.hasOwnProperty.call(s,y),a=n?s[y]:s,T=a?.status&&d.get(a.status)||d.get(a?.name)||n&&d.has(y)&&d.get(y);if(T)return T(a,t);const h=d.get(w);if(h)return h(a,t);throw a}),_=r=>s=>O(r?A.then(n=>n&&n[r]()).then(n=>s?s(n):n):A.then(n=>s?s(n):n)),M={_wretchReq:t,_fetchReq:v,_sharedState:e,res:_(null),json:_("json"),blob:_("blob"),formData:_("formData"),arrayBuffer:_("arrayBuffer"),text:_("text"),error(r,s){return d.set(r,s),this},badRequest(r){return this.error(400,r)},unauthorized(r){return this.error(401,r)},forbidden(r){return this.error(403,r)},notFound(r){return this.error(404,r)},timeout(r){return this.error(408,r)},internalError(r){return this.error(500,r)},fetchError(r){return this.error(y,r)}},q=E.reduce((r,s)=>({...r,...typeof s.resolver=="function"?s.resolver(r):s.resolver}),M);return f.reduce((r,s)=>s(r,t),q)},k={_url:"",_options:{},_config:g,_catchers:new Map,_resolvers:[],_deferred:[],_middlewares:[],_addons:[],addon(t){return{...this,_addons:[...this._addons,t],...t.wretch}},errorType(t){return{...this,_config:{...this._config,errorType:t}}},polyfills(t,e=!1){return{...this,_config:{...this._config,polyfills:e?t:u(this._config.polyfills,t)}}},url(t,e=!1){if(e)return{...this,_url:t};const o=this._url.split("?");return{...this,_url:o.length>1?o[0]+t+"?"+o[1]:this._url+t}},options(t,e=!1){return{...this,_options:e?t:u(this._options,t)}},headers(t){const e=t?Array.isArray(t)?Object.fromEntries(t):"entries"in t?Object.fromEntries(t.entries()):t:{};return{...this,_options:u(this._options,{headers:e})}},accept(t){return this.headers({Accept:t})},content(t){return this.headers({[S]:t})},auth(t){return this.headers({Authorization:t})},catcher(t,e){const o=new Map(this._catchers);return o.set(t,e),{...this,_catchers:o}},catcherFallback(t){return this.catcher(w,t)},resolve(t,e=!1){return{...this,_resolvers:e?[t]:[...this._resolvers,t]}},defer(t,e=!1){return{...this,_deferred:e?[t]:[...this._deferred,t]}},middlewares(t,e=!1){return{...this,_middlewares:e?t:[...this._middlewares,...t]}},fetch(t=this._options.method,e="",o=null){let c=this.url(e).options({method:t});const i=C(c._options.headers),l=this._config.polyfill("FormData",!1),f=typeof o=="object"&&!(l&&o instanceof l)&&(!c._options.headers||!i||P(i));return c=o?f?c.json(o,i):c.body(o):c,U(c._deferred.reduce((m,E)=>E(m,m._url,m._options),c))},get(t=""){return this.fetch("GET",t)},delete(t=""){return this.fetch("DELETE",t)},put(t,e=""){return this.fetch("PUT",e,t)},post(t,e=""){return this.fetch("POST",e,t)},patch(t,e=""){return this.fetch("PATCH",e,t)},head(t=""){return this.fetch("HEAD",t)},opts(t=""){return this.fetch("OPTIONS",t)},body(t){return{...this,_options:{...this._options,body:t}}},json(t,e){const o=C(this._options.headers);return this.content(e||P(o)&&o||H).body(JSON.stringify(t))}};function p(t="",e={}){return{...k,_url:t,_options:e}}p.default=p;p.options=L;p.errorType=I;p.polyfills=N;p.WretchError=x;fetch(R,{credentials:"same-origin",headers:{"Content-Type":"application/json"},method:"GET",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(F);p(R).content("application/json").options({credentials:"same-origin",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).get().json().catch();
|
||||
//# sourceMappingURL=api.js.map
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
const E="wp-json",T=`/${E}/wc/store/cart`,t=`/${E}/wc/store/cart/add-item`,s="Nonce",_="retry-after",I="x-sentry-rate-limits";export{I as E,t as R,_ as a,s as b,T as c};
|
||||
const E="wp-json",T=`/${E}/wc/store/cart`,t=`/${E}/wc/store/cart/add-item`,_=`/${E}/wc/store/cart/remove-item`,s="Nonce",I="retry-after",R="x-sentry-rate-limits";export{R as E,_ as R,I as a,t as b,s as c,T as d};
|
||||
//# sourceMappingURL=api2.js.map
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"api2.js","sources":["../../src/scripts/constantes/api.ts"],"sourcesContent":["// Chemins et Routes pour l'API WordPress\nexport const CHEMIN_API_REST = \"wp-json\";\nexport const ROUTE_API_PANIER = `/${CHEMIN_API_REST}/wc/store/cart`;\nexport const ROUTE_API_AJOUTE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/add-item`;\n\n// En-têtes\nexport const ENTETE_WC_NONCE = \"Nonce\";\nexport const ENTETE_GLITCHTIP_RETRY_AFTER = \"retry-after\";\nexport const ENTETE_GLITCHTIP_RATE_LIMITS = \"x-sentry-rate-limits\";\n"],"names":["CHEMIN_API_REST","ROUTE_API_PANIER","ROUTE_API_AJOUTE_ARTICLE_PANIER","ENTETE_WC_NONCE","ENTETE_GLITCHTIP_RETRY_AFTER","ENTETE_GLITCHTIP_RATE_LIMITS"],"mappings":"AACO,MAAMA,EAAkB,UAClBC,EAAmB,IAAID,CAAe,iBACtCE,EAAkC,IAAIF,CAAe,0BAGrDG,EAAkB,QAClBC,EAA+B,cAC/BC,EAA+B"}
|
||||
{"version":3,"file":"api2.js","sources":["../../src/scripts/constantes/api.ts"],"sourcesContent":["// Chemins et Routes pour l'API WordPress\nexport const CHEMIN_API_REST = \"wp-json\";\nexport const ROUTE_API_PANIER = `/${CHEMIN_API_REST}/wc/store/cart`;\nexport const ROUTE_API_AJOUTE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/add-item`;\nexport const ROUTE_API_RETIRE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/remove-item`;\n\n// En-têtes\nexport const ENTETE_WC_NONCE = \"Nonce\";\nexport const ENTETE_GLITCHTIP_RETRY_AFTER = \"retry-after\";\nexport const ENTETE_GLITCHTIP_RATE_LIMITS = \"x-sentry-rate-limits\";\n"],"names":["CHEMIN_API_REST","ROUTE_API_PANIER","ROUTE_API_AJOUTE_ARTICLE_PANIER","ROUTE_API_RETIRE_ARTICLE_PANIER","ENTETE_WC_NONCE","ENTETE_GLITCHTIP_RETRY_AFTER","ENTETE_GLITCHTIP_RATE_LIMITS"],"mappings":"AACO,MAAMA,EAAkB,UAClBC,EAAmB,IAAID,CAAe,iBACtCE,EAAkC,IAAIF,CAAe,0BACrDG,EAAkC,IAAIH,CAAe,6BAGrDI,EAAkB,QAClBC,EAA+B,cAC/BC,EAA+B"}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
import{o as s,a as t,p as o,n as a,b as m,s as r}from"./index2.js";const n=s({attribute:r(),value:r()}),i=s({id:t(a()),quantity:t(a()),variation:t(m(n))}),p=e=>o(i,e);export{p};
|
||||
//# sourceMappingURL=cart-add-item.js.map
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"cart-add-item.js","sources":["../../src/scripts/lib/schemas/cart-add-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCStoreCartAddItemArgs } from \"../../types/api/cart-add-item\";\n\nexport const WCStoreCartAddItemArgsItemsSchema = v.object({\n /** Variation attribute name. */\n attribute: v.string(),\n /** Variation attribute value. */\n value: v.string(),\n});\n\nexport const WCStoreCartAddItemArgsSchema = v.object({\n /** The basket item product or variation ID. */\n id: v.optional(v.number()),\n /** Quantity of this item to add to the basket. */\n quantity: v.optional(v.number()),\n /** Chosen attributes (for variations). */\n variation: v.optional(v.array(WCStoreCartAddItemArgsItemsSchema)),\n});\n\nexport const parseWCStoreCartAddItemArgs: (args: unknown) => WCStoreCartAddItemArgs = (args) =>\n v.parse(WCStoreCartAddItemArgsSchema, args);\n"],"names":["WCStoreCartAddItemArgsItemsSchema","v.object","v.string","WCStoreCartAddItemArgsSchema","v.optional","v.number","v.array","parseWCStoreCartAddItemArgs","args","v.parse"],"mappings":"mEAIa,MAAAA,EAAoCC,EAAS,CAExD,UAAWC,EAAS,EAEpB,MAAOA,EAAS,CAClB,CAAC,EAEYC,EAA+BF,EAAS,CAEnD,GAAIG,EAAWC,GAAU,EAEzB,SAAUD,EAAWC,GAAU,EAE/B,UAAWD,EAAWE,EAAQN,CAAiC,CAAC,CAClE,CAAC,EAEYO,EAA0EC,GACrFC,EAAQN,EAA8BK,CAAI"}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
import{o as s,a as t,p as o,n as a,b as m,s as r}from"./index.js";const n=s({attribute:r(),value:r()}),i=s({id:t(a()),quantity:t(a()),variation:t(m(n))}),p=e=>o(i,e);export{p};
|
||||
//# sourceMappingURL=cart-add.item.js.map
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"version":3,"file":"cart-add.item.js","sources":["../../src/scripts/lib/schemas/cart-add.item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCStoreCartAddItemArgs } from \"../../types/api/cart-add-item.ts\";\n\nexport const WCStoreCartAddItemArgsItemsSchema = v.object({\n /** Variation attribute name. */\n attribute: v.string(),\n /** Variation attribute value. */\n value: v.string(),\n});\n\nexport const WCStoreCartAddItemArgsSchema = v.object({\n /** The basket item product or variation ID. */\n id: v.optional(v.number()),\n /** Quantity of this item to add to the basket. */\n quantity: v.optional(v.number()),\n /** Chosen attributes (for variations). */\n variation: v.optional(v.array(WCStoreCartAddItemArgsItemsSchema)),\n});\n\nexport const parseWCStoreCartAddItemArgs: (args: unknown) => WCStoreCartAddItemArgs = (args) =>\n v.parse(WCStoreCartAddItemArgsSchema, args);\n"],"names":["WCStoreCartAddItemArgsItemsSchema","v.object","v.string","WCStoreCartAddItemArgsSchema","v.optional","v.number","v.array","parseWCStoreCartAddItemArgs","args","v.parse"],"mappings":"kEAIa,MAAAA,EAAoCC,EAAS,CAExD,UAAWC,EAAS,EAEpB,MAAOA,EAAS,CAClB,CAAC,EAEYC,EAA+BF,EAAS,CAEnD,GAAIG,EAAWC,GAAU,EAEzB,SAAUD,EAAWC,GAAU,EAE/B,UAAWD,EAAWE,EAAQN,CAAiC,CAAC,CAClE,CAAC,EAEYO,EAA0EC,GACrFC,EAAQN,EAA8BK,CAAI"}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
import{o as e,s as o}from"./index2.js";const r=e({key:o()});export{r as W};
|
||||
//# sourceMappingURL=cart-remove-item.js.map
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"cart-remove-item.js","sources":["../../src/scripts/lib/schemas/cart-remove-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCStoreCartRemoveItemArgs } from \"../../types/api/cart-remove-item\";\n\nexport const WCStoreCartRemoveItemArgsSchema = v.object({\n /** Unique identifier (key) for the basket item. */\n key: v.string(),\n});\n\nexport const parseWCStoreCartRemoveItemArgs = (args: WCStoreCartRemoveItemArgs): WCStoreCartRemoveItemArgs =>\n v.parse(WCStoreCartRemoveItemArgsSchema, args);\n"],"names":["WCStoreCartRemoveItemArgsSchema","v.object","v.string"],"mappings":"uCAIa,MAAAA,EAAkCC,EAAS,CAEtD,IAAKC,EAAS,CAChB,CAAC"}
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
import{o as a,s as e,u as i,n,c as s,b as t,d as r,i as o}from"./index.js";a({name:e(),package_id:i([n(),e()])});const m=a({billing_address:s(),coupons:s(),cross_sells:s(),errors:s(),extensions:s(),fees:s(),has_calculated_shipping:s(),items:t(s()),items_count:r(n(),o()),items_weight:s(),needs_payment:s(),needs_shipping:s(),payment_methods:s(),payment_requirements:s(),shipping_address:s(),shipping_rates:s(),totals:s()});export{m as W};
|
||||
import{o as a,s as e,u as i,n,c as s,b as t,d as r,i as o}from"./index2.js";a({name:e(),package_id:i([n(),e()])});const m=a({billing_address:s(),coupons:s(),cross_sells:s(),errors:s(),extensions:s(),fees:s(),has_calculated_shipping:s(),items:t(s()),items_count:r(n(),o()),items_weight:s(),needs_payment:s(),needs_shipping:s(),payment_methods:s(),payment_requirements:s(),shipping_address:s(),shipping_rates:s(),totals:s()});export{m as W};
|
||||
//# sourceMappingURL=cart.js.map
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"cart.js","sources":["../../src/scripts/lib/schemas/cart.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nconst WCStoreCartItemTotalsSchema = v.object({\n currency_code: v.string(),\n currency_decimal_separator: v.string(),\n currency_minor_unit: v.number(),\n currency_prefix: v.string(),\n currency_suffix: v.string(),\n currency_symbol: v.string(),\n currency_thousand_separator: v.string(),\n total_discount: v.string(),\n total_discount_tax: v.string(),\n});\n\nconst WCStoreCartItemShippingRateSchema = v.object({\n name: v.string(),\n package_id: v.union([v.number(), v.string()]),\n});\n\nconst WCStoreCartItemSchema = v.object({\n code: v.string(),\n discount_type: v.string(),\n shipping_rates: v.array(WCStoreCartItemShippingRateSchema),\n totals: v.array(WCStoreCartItemTotalsSchema),\n});\n\nexport const WCStoreCartSchema = v.object({\n billing_address: v.unknown(),\n coupons: v.unknown(),\n cross_sells: v.unknown(),\n errors: v.unknown(),\n extensions: v.unknown(),\n fees: v.unknown(),\n has_calculated_shipping: v.unknown(),\n items: v.array(v.unknown()),\n items_count: v.pipe(v.number(), v.integer()),\n items_weight: v.unknown(),\n needs_payment: v.unknown(),\n needs_shipping: v.unknown(),\n payment_methods: v.unknown(),\n payment_requirements: v.unknown(),\n shipping_address: v.unknown(),\n shipping_rates: v.unknown(),\n totals: v.unknown(),\n});\n"],"names":["v.object","v.string","v.union","v.number","WCStoreCartSchema","v.unknown","v.array","v.pipe","v.integer"],"mappings":"AAc0CA,OAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,MAAAA,aAAAA,EAAS,CACjD,KAAMC,EAAS,EACf,WAAYC,EAAQ,CAACC,IAAYF,EAAU,CAAA,CAAC,CAC9C,CAAC,EASY,MAAAG,EAAoBJ,EAAS,CACxC,gBAAiBK,EAAU,EAC3B,QAASA,EAAU,EACnB,YAAaA,EAAU,EACvB,OAAQA,EAAU,EAClB,WAAYA,EAAU,EACtB,KAAMA,EAAU,EAChB,wBAAyBA,EAAU,EACnC,MAAOC,EAAQD,GAAW,EAC1B,YAAaE,EAAOJ,EAAY,EAAAK,GAAW,EAC3C,aAAcH,EAAU,EACxB,cAAeA,EAAU,EACzB,eAAgBA,EAAU,EAC1B,gBAAiBA,EAAU,EAC3B,qBAAsBA,EAAU,EAChC,iBAAkBA,EAAU,EAC5B,eAAgBA,EAAU,EAC1B,OAAQA,EAAU,CACpB,CAAC"}
|
||||
{"version":3,"file":"cart.js","sources":["../../src/scripts/lib/schemas/cart.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nconst WCStoreCartItemTotalsSchema = v.object({\n currency_code: v.string(),\n currency_decimal_separator: v.string(),\n currency_minor_unit: v.number(),\n currency_prefix: v.string(),\n currency_suffix: v.string(),\n currency_symbol: v.string(),\n currency_thousand_separator: v.string(),\n total_discount: v.string(),\n total_discount_tax: v.string(),\n});\n\nconst WCStoreCartItemShippingRateSchema = v.object({\n name: v.string(),\n package_id: v.union([v.number(), v.string()]),\n});\n\nconst WCStoreCartItemSchema = v.object({\n code: v.string(),\n discount_type: v.string(),\n shipping_rates: v.array(WCStoreCartItemShippingRateSchema),\n totals: v.array(WCStoreCartItemTotalsSchema),\n});\n\nexport const WCStoreCartSchema = v.object({\n billing_address: v.unknown(),\n coupons: v.unknown(),\n cross_sells: v.unknown(),\n errors: v.unknown(),\n extensions: v.unknown(),\n fees: v.unknown(),\n has_calculated_shipping: v.unknown(),\n items: v.array(v.unknown()),\n items_count: v.pipe(v.number(), v.integer()),\n items_weight: v.unknown(),\n needs_payment: v.unknown(),\n needs_shipping: v.unknown(),\n payment_methods: v.unknown(),\n payment_requirements: v.unknown(),\n shipping_address: v.unknown(),\n shipping_rates: v.unknown(),\n totals: v.unknown(),\n});\n"],"names":["v.object","v.string","v.union","v.number","WCStoreCartSchema","v.unknown","v.array","v.pipe","v.integer"],"mappings":"AAc0CA,OAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,MAAAA,cAAAA,EAAS,CACjD,KAAMC,EAAS,EACf,WAAYC,EAAQ,CAACC,IAAYF,EAAU,CAAA,CAAC,CAC9C,CAAC,EASY,MAAAG,EAAoBJ,EAAS,CACxC,gBAAiBK,EAAU,EAC3B,QAASA,EAAU,EACnB,YAAaA,EAAU,EACvB,OAAQA,EAAU,EAClB,WAAYA,EAAU,EACtB,KAAMA,EAAU,EAChB,wBAAyBA,EAAU,EACnC,MAAOC,EAAQD,GAAW,EAC1B,YAAaE,EAAOJ,EAAY,EAAAK,GAAW,EAC3C,aAAcH,EAAU,EACxB,cAAeA,EAAU,EACzB,eAAgBA,EAAU,EAC1B,gBAAiBA,EAAU,EAC3B,qBAAsBA,EAAU,EAChC,iBAAkBA,EAAU,EAC5B,eAAgBA,EAAU,EAC1B,OAAQA,EAAU,CACpB,CAAC"}
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
const E="aria-selected",T="hidden",a="data-contient-articles",t="disabled",s=".compte-panier a[rel='cart']",e="#selecteur-variation",o="#bouton-ajout-panier",n="a[role='tab']",c="section[role='tabpanel']";export{E as A,s as S,o as a,e as b,n as c,c as d,T as e,t as f,a as g};
|
||||
const E="aria-selected",T="hidden",a="data-contient-articles",t="disabled",s="data-cle-panier",_=".compte-panier a[rel='cart']",o="#selecteur-variation",e="#bouton-ajout-panier",n="a[role='tab']",c="section[role='tabpanel']",R="article",S="button.detail-produit__actions__suppression";export{s as A,R as S,S as a,_ as b,e as c,o as d,n as e,c as f,E as g,T as h,t as i,a as j};
|
||||
//# sourceMappingURL=dom.js.map
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\n\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n"],"names":["ATTRIBUT_ARIA_SELECTED","ATTRIBUT_HIDDEN","ATTRIBUT_CONTIENT_ARTICLES","ATTRIBUT_DESACTIVE","SELECTEUR_BOUTON_PANIER","SELECTEUR_SELECTEUR_QUANTITE","SELECTEUR_BOUTON_AJOUT_PANIER","SELECTEUR_LIENS_ONGLETS","SELECTEUR_SECTIONS_CONTENUS"],"mappings":"AAEO,MAAMA,EAAyB,gBAEzBC,EAAkB,SAClBC,EAA6B,yBAC7BC,EAAqB,WAErBC,EAA0B,+BAC1BC,EAA+B,uBAC/BC,EAAgC,uBAChCC,EAA0B,gBAC1BC,EAA8B"}
|
||||
{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\nexport const ATTRIBUT_CLE_PANIER = \"data-cle-panier\";\n\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n\n// Panier\nexport const SELECTEUR_ENTREES_PANIER = \"article\";\nexport const SELECTEUR_BOUTON_SUPPRESSION_PANIER = \"button.detail-produit__actions__suppression\";\n"],"names":["ATTRIBUT_ARIA_SELECTED","ATTRIBUT_HIDDEN","ATTRIBUT_CONTIENT_ARTICLES","ATTRIBUT_DESACTIVE","ATTRIBUT_CLE_PANIER","SELECTEUR_BOUTON_PANIER","SELECTEUR_SELECTEUR_QUANTITE","SELECTEUR_BOUTON_AJOUT_PANIER","SELECTEUR_LIENS_ONGLETS","SELECTEUR_SECTIONS_CONTENUS","SELECTEUR_ENTREES_PANIER","SELECTEUR_BOUTON_SUPPRESSION_PANIER"],"mappings":"AAEO,MAAMA,EAAyB,gBAEzBC,EAAkB,SAClBC,EAA6B,yBAC7BC,EAAqB,WACrBC,EAAsB,kBAEtBC,EAA0B,+BAC1BC,EAA+B,uBAC/BC,EAAgC,uBAChCC,EAA0B,gBAC1BC,EAA8B,2BAG9BC,EAA2B,UAC3BC,EAAsC"}
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
import{x as m}from"./chunk-7BKSRZNG.js";import{e as n,f as a,g as c,h as o}from"./erreurs.js";import{E as s,r as E,l as i}from"./Either.js";import"./exports.js";function p(e){return e!==null}function l(e){return e===void 0?!0:typeof e=="string"||Array.isArray(e)?e.length===0:Object.keys(e).length===0}const f=e=>e,L=e=>r=>s.encase(()=>e.querySelector(r)).mapLeft(t=>n(c(r))).chain(t=>p(t)?E(t):i(n(o(r)))),R=e=>r=>s.encase(()=>m(e.querySelectorAll(r),Array.from)).mapLeft(t=>n(c(r))).chain(t=>l(t)?i(n(o(r))):E(t)),S=e=>e.caseOf({Left:a,Right:f}),g=e=>e.caseOf({Left:a,Right:f});export{g as a,R as b,L as c,S as r};
|
||||
import{x as m}from"./chunk-7BKSRZNG.js";import{e as n,f as a,g as c,h as o}from"./erreurs.js";import{E as s,r as E,l as i}from"./Either.js";import"./exports.js";function p(e){return e!==null}function l(e){return e===void 0?!0:typeof e=="string"||Array.isArray(e)?e.length===0:Object.keys(e).length===0}const f=e=>e,L=e=>r=>s.encase(()=>e.querySelector(r)).mapLeft(t=>n(c(r))).chain(t=>p(t)?E(t):i(n(o(r)))),R=e=>r=>s.encase(()=>m(e.querySelectorAll(r),Array.from)).mapLeft(t=>n(c(r))).chain(t=>l(t)?i(n(o(r))):E(t)),S=e=>e.caseOf({Left:a,Right:f}),g=e=>e.caseOf({Left:a,Right:f});export{L as a,S as b,R as c,g as r};
|
||||
//# sourceMappingURL=dom2.js.map
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
import{$ as o}from"./exports.js";const u=r=>`Le selecteur "${r}" est invalide`,d=r=>`La requête "${r}" n'a retourné aucun Élément.`,h=r=>new SyntaxError(r);class s extends Error{constructor(e="400 BadRequestError"){super(e),this.name="BadRequestError"}}class t extends Error{constructor(e="401 UnauthorizedError"){super(e),this.name="UnauthorizedError"}}class n extends Error{constructor(e="404 NotFoundError"){super(e),this.name="NotFoundError"}}class E extends Error{constructor(e="500 ServerError"){super(e),this.name="ServerError"}}class a extends Error{constructor(e){super(JSON.stringify(e)),this.name="UnknownError"}}const i=r=>new a(r),l=r=>{throw r},w=r=>{throw new s(`(${r.code}) ${r.message}`)},m=r=>{throw new t(`(${r.code}) ${r.message}`)},p=r=>{throw new n(`(${r.code}) ${r.message}`)},v=r=>{throw new E(r)},R=r=>o(r),S=r=>{throw o(r),r};export{i as E,w as a,m as b,p as c,l as d,h as e,S as f,u as g,d as h,v as l,R as r};
|
||||
import{$ as o}from"./exports.js";const u=r=>`Le selecteur "${r}" est invalide`,d=r=>`La requête "${r}" n'a retourné aucun Élément.`,i=r=>new SyntaxError(r);class s extends Error{constructor(e="400 BadRequestError"){super(e),this.name="BadRequestError"}}class t extends Error{constructor(e="401 UnauthorizedError"){super(e),this.name="UnauthorizedError"}}class n extends Error{constructor(e="404 NotFoundError"){super(e),this.name="NotFoundError"}}class E extends Error{constructor(e="500 ServerError"){super(e),this.name="ServerError"}}class a extends Error{constructor(e){super(JSON.stringify(e)),this.name="UnknownError"}}class l extends Error{constructor(e){super(JSON.stringify(e)),this.name="DOMElementAbsentError"}}const h=r=>new a(r),m=r=>{throw r},w=r=>{throw new s(`(${r.code}) ${r.message}`)},p=r=>{throw new t(`(${r.code}) ${r.message}`)},v=r=>{throw new n(`(${r.code}) ${r.message}`)},R=r=>{throw new E(r)},S=r=>(console.error(r),o(r)),x=r=>{throw o(r),r};export{l as D,h as E,w as a,p as b,v as c,m as d,i as e,x as f,u as g,d as h,R as l,S as r};
|
||||
//# sourceMappingURL=erreurs.js.map
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,2 +1,2 @@
|
|||
import{e as t,o as s,n as r,s as o}from"./index.js";const e=s({code:o(),data:s({status:r()}),message:o()}),c=s({body:e,status:r()}),n=a=>t(c,a);export{n as i};
|
||||
import{e as t,o as s,n as r,s as o}from"./index2.js";const e=s({code:o(),data:s({status:r()}),message:o()}),c=s({body:e,status:r()}),n=a=>t(c,a);export{n as i};
|
||||
//# sourceMappingURL=erreurs2.js.map
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/schemas/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const isWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["WCErrorBodySchema","v.object","v.string","v.number","WCErrorSchema","isWCError","donnees","v.is"],"mappings":"oDAIa,MAAAA,EAAoBC,EAAS,CACxC,KAAMC,EAAS,EACf,KAAMD,EAAS,CACb,OAAQE,EAAS,CAAA,CAClB,EACD,QAASD,EAAS,CACpB,CAAC,EAEYE,EAAgBH,EAAS,CACpC,KAAMD,EACN,OAAQG,EAAS,CACnB,CAAC,EAEYE,EAAaC,GAAyCC,EAAKH,EAAeE,CAAO"}
|
||||
{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/schemas/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const isWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["WCErrorBodySchema","v.object","v.string","v.number","WCErrorSchema","isWCError","donnees","v.is"],"mappings":"qDAIa,MAAAA,EAAoBC,EAAS,CACxC,KAAMC,EAAS,EACf,KAAMD,EAAS,CACb,OAAQE,EAAS,CAAA,CAClB,EACD,QAASD,EAAS,CACpB,CAAC,EAEYE,EAAgBH,EAAS,CACpC,KAAMD,EACN,OAAQG,EAAS,CACnB,CAAC,EAEYE,EAAaC,GAAyCC,EAAKH,EAAeE,CAAO"}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,2 +1,2 @@
|
|||
const s=e=>t=>t instanceof e,n=s(HTMLSelectElement),o=e=>e instanceof Error,c=e=>e.status===500;export{c as a,o as b,n as e};
|
||||
const s=e=>t=>t instanceof e,n=s(HTMLSelectElement),o=e=>e instanceof Error,c=e=>e.status===500;export{o as a,n as b,c as e};
|
||||
//# sourceMappingURL=gardes.js.map
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
import{c as g,b as M}from"./api2.js";import{E as h,r as o,l as f,M as p,n as u,j as c}from"./Either.js";var l;const y={liftEither(i){if(i.isRight())return Promise.resolve(i.extract());throw i.extract()},fromPromise(i){return i.then(y.liftEither)},throwE(i){throw i}};class m{constructor(t){this.runPromise=t,this[l]="EitherAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/alt"]=this.alt,this.then=(r,e)=>this.run().then(r,e)}leftOrDefault(t){return this.run().then(r=>r.leftOrDefault(t))}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return n(async t=>{const r=await this;if(r.isRight()){const e=await r.extract();return t.liftEither(e)}return t.liftEither(r)})}ap(t){return n(async r=>{const e=await t;if(e.isRight()){const a=await this.run();return a.isRight()?e.extract()(a.extract()):r.liftEither(a)}return r.liftEither(e)})}alt(t){return n(async r=>{const e=await this.run();if(e.isRight())return e.extract();{const a=await t;return r.liftEither(a)}})}extend(t){return n(async r=>{const e=await this.run();if(e.isRight()){const a=n.liftEither(e);return r.liftEither(o(t(a)))}return r.liftEither(e)})}async run(){try{return o(await this.runPromise(y))}catch(t){return f(t)}}bimap(t,r){return n(async e=>{const a=await this.run();try{return await e.liftEither(a.bimap(t,r))}catch(P){throw await P}})}map(t){return n(r=>this.runPromise(r).then(t))}mapLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){throw await t(e)}})}chain(t){return n(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}chainLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){return r.fromPromise(t(e))}})}toMaybeAsync(){return s(async({liftMaybe:t})=>{const r=await this.run();return t(r.toMaybe())})}swap(){return n(async t=>{const r=await this.run();return r.isRight()&&t.throwE(r.extract()),t.liftEither(o(r.extract()))})}ifLeft(t){return n(async r=>{const e=await this.run();return e.ifLeft(t),r.liftEither(e)})}ifRight(t){return n(async r=>{const e=await this.run();return e.ifRight(t),r.liftEither(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return n(({fromPromise:r})=>r(this.run().finally(t)))}}l=Symbol.toStringTag;const n=Object.assign(i=>new m(i),{fromPromise:i=>n(({fromPromise:t})=>t(i())),liftEither:i=>n(({liftEither:t})=>t(i)),lefts:i=>Promise.all(i.map(t=>t.run())).then(h.lefts),rights:i=>Promise.all(i.map(t=>t.run())).then(h.rights),sequence:i=>n(async t=>{let r=[];for await(const e of i){if(e.isLeft())return t.liftEither(e);r.push(e.extract())}return t.liftEither(o(r))}),all:i=>n.fromPromise(async()=>Promise.all(i).then(h.sequence))});m.prototype.constructor=n;var w;const b={liftMaybe(i){if(i.isJust())return Promise.resolve(i.extract());throw u},fromPromise(i){return i.then(b.liftMaybe)}};class E{constructor(t){this.runPromise=t,this[w]="MaybeAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/filter"]=this.filter,this["fantasy-land/alt"]=this.alt}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return s(async t=>{const r=await this.run();if(r.isJust()){const e=await r.extract();return t.liftMaybe(e)}return t.liftMaybe(u)})}ap(t){return s(async r=>{const e=await t;if(e.isJust()){const a=await this.run();return a.isJust()?e.extract()(a.extract()):r.liftMaybe(u)}return r.liftMaybe(u)})}alt(t){return s(async r=>{const e=await this.run();if(e.isJust())return e.extract();{const a=await t;return r.liftMaybe(a)}})}extend(t){return s(async r=>{const e=await this.run();if(e.isJust()){const a=s.liftMaybe(e);return r.liftMaybe(c(t(a)))}return r.liftMaybe(u)})}filter(t){return s(async r=>{const e=await this.run();return r.liftMaybe(e.filter(t))})}async run(){try{return c(await this.runPromise(b))}catch{return u}}map(t){return s(r=>this.runPromise(r).then(t))}chain(t){return s(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}toEitherAsync(t){return n(async({liftEither:r})=>{const e=await this.run();return r(e.toEither(t))})}ifJust(t){return s(async r=>{const e=await this.run();return e.ifJust(t),r.liftMaybe(e)})}ifNothing(t){return s(async r=>{const e=await this.run();return e.ifNothing(t),r.liftMaybe(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return s(({fromPromise:r})=>r(this.run().finally(t)))}then(t,r){return this.run().then(t,r)}}w=Symbol.toStringTag;const s=Object.assign(i=>new E(i),{catMaybes:i=>Promise.all(i).then(p.catMaybes),fromPromise:i=>s(({fromPromise:t})=>t(i())),liftMaybe:i=>s(({liftMaybe:t})=>t(i))});E.prototype.constructor=s;const x=_etats,d=()=>fetch(g,{credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[M]:x.nonce},method:"GET",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(o).catch(f);n.fromPromise(d).map(i=>i.json()).ifLeft(i=>{console.error(i)});
|
||||
import{d as g,c as M}from"./api2.js";import{E as h,r as o,l as f,M as p,n as u,j as c}from"./Either.js";var l;const y={liftEither(i){if(i.isRight())return Promise.resolve(i.extract());throw i.extract()},fromPromise(i){return i.then(y.liftEither)},throwE(i){throw i}};class m{constructor(t){this.runPromise=t,this[l]="EitherAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/alt"]=this.alt,this.then=(r,e)=>this.run().then(r,e)}leftOrDefault(t){return this.run().then(r=>r.leftOrDefault(t))}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return n(async t=>{const r=await this;if(r.isRight()){const e=await r.extract();return t.liftEither(e)}return t.liftEither(r)})}ap(t){return n(async r=>{const e=await t;if(e.isRight()){const a=await this.run();return a.isRight()?e.extract()(a.extract()):r.liftEither(a)}return r.liftEither(e)})}alt(t){return n(async r=>{const e=await this.run();if(e.isRight())return e.extract();{const a=await t;return r.liftEither(a)}})}extend(t){return n(async r=>{const e=await this.run();if(e.isRight()){const a=n.liftEither(e);return r.liftEither(o(t(a)))}return r.liftEither(e)})}async run(){try{return o(await this.runPromise(y))}catch(t){return f(t)}}bimap(t,r){return n(async e=>{const a=await this.run();try{return await e.liftEither(a.bimap(t,r))}catch(P){throw await P}})}map(t){return n(r=>this.runPromise(r).then(t))}mapLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){throw await t(e)}})}chain(t){return n(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}chainLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){return r.fromPromise(t(e))}})}toMaybeAsync(){return s(async({liftMaybe:t})=>{const r=await this.run();return t(r.toMaybe())})}swap(){return n(async t=>{const r=await this.run();return r.isRight()&&t.throwE(r.extract()),t.liftEither(o(r.extract()))})}ifLeft(t){return n(async r=>{const e=await this.run();return e.ifLeft(t),r.liftEither(e)})}ifRight(t){return n(async r=>{const e=await this.run();return e.ifRight(t),r.liftEither(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return n(({fromPromise:r})=>r(this.run().finally(t)))}}l=Symbol.toStringTag;const n=Object.assign(i=>new m(i),{fromPromise:i=>n(({fromPromise:t})=>t(i())),liftEither:i=>n(({liftEither:t})=>t(i)),lefts:i=>Promise.all(i.map(t=>t.run())).then(h.lefts),rights:i=>Promise.all(i.map(t=>t.run())).then(h.rights),sequence:i=>n(async t=>{let r=[];for await(const e of i){if(e.isLeft())return t.liftEither(e);r.push(e.extract())}return t.liftEither(o(r))}),all:i=>n.fromPromise(async()=>Promise.all(i).then(h.sequence))});m.prototype.constructor=n;var w;const E={liftMaybe(i){if(i.isJust())return Promise.resolve(i.extract());throw u},fromPromise(i){return i.then(E.liftMaybe)}};class b{constructor(t){this.runPromise=t,this[w]="MaybeAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/filter"]=this.filter,this["fantasy-land/alt"]=this.alt}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return s(async t=>{const r=await this.run();if(r.isJust()){const e=await r.extract();return t.liftMaybe(e)}return t.liftMaybe(u)})}ap(t){return s(async r=>{const e=await t;if(e.isJust()){const a=await this.run();return a.isJust()?e.extract()(a.extract()):r.liftMaybe(u)}return r.liftMaybe(u)})}alt(t){return s(async r=>{const e=await this.run();if(e.isJust())return e.extract();{const a=await t;return r.liftMaybe(a)}})}extend(t){return s(async r=>{const e=await this.run();if(e.isJust()){const a=s.liftMaybe(e);return r.liftMaybe(c(t(a)))}return r.liftMaybe(u)})}filter(t){return s(async r=>{const e=await this.run();return r.liftMaybe(e.filter(t))})}async run(){try{return c(await this.runPromise(E))}catch{return u}}map(t){return s(r=>this.runPromise(r).then(t))}chain(t){return s(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}toEitherAsync(t){return n(async({liftEither:r})=>{const e=await this.run();return r(e.toEither(t))})}ifJust(t){return s(async r=>{const e=await this.run();return e.ifJust(t),r.liftMaybe(e)})}ifNothing(t){return s(async r=>{const e=await this.run();return e.ifNothing(t),r.liftMaybe(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return s(({fromPromise:r})=>r(this.run().finally(t)))}then(t,r){return this.run().then(t,r)}}w=Symbol.toStringTag;const s=Object.assign(i=>new b(i),{catMaybes:i=>Promise.all(i).then(p.catMaybes),fromPromise:i=>s(({fromPromise:t})=>t(i())),liftMaybe:i=>s(({liftMaybe:t})=>t(i))});b.prototype.constructor=s;const d=_etats,x=()=>fetch(g,{credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[M]:d.nonce},method:"GET",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(o).catch(f);n.fromPromise(x).map(i=>i.json()).ifLeft(i=>{console.error(i)});
|
||||
//# sourceMappingURL=gestion-panier.js.map
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
web/app/themes/haiku-atelier-2024/assets/js/index2.js
Normal file
2
web/app/themes/haiku-atelier-2024/assets/js/index2.js
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
var h=Object.defineProperty;var m=(e,s,r)=>s in e?h(e,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[s]=r;var y=(e,s,r)=>m(e,typeof s!="symbol"?s+"":s,r);var c;function b(e){return{lang:e?.lang??c?.lang,message:e?.message,abortEarly:e?.abortEarly??c?.abortEarly,abortPipeEarly:e?.abortPipeEarly??c?.abortPipeEarly}}var g;function k(e){return g?.get(e)}var E;function _(e){return E?.get(e)}var d;function x(e,s){return d?.get(e)?.get(s)}function j(e){const s=typeof e;return s==="string"?`"${e}"`:s==="number"||s==="bigint"||s==="boolean"?`${e}`:s==="object"||s==="function"?(e&&Object.getPrototypeOf(e)?.constructor?.name)??"null":s}function o(e,s,r,n,u){const i=u&&"input"in u?u.input:r.value,f=u?.expected??e.expects??null,l=u?.received??j(i),t={kind:e.kind,type:e.type,input:i,expected:f,received:l,message:`Invalid ${s}: ${f?`Expected ${f} but r`:"R"}eceived ${l}`,requirement:e.requirement,path:u?.path,issues:u?.issues,lang:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},a=e.kind==="schema",p=u?.message??e.message??x(e.reference,t.lang)??(a?_(t.lang):null)??n.message??k(t.lang);p&&(t.message=typeof p=="function"?p(t):p),a&&(r.typed=!1),r.issues?r.issues.push(t):r.issues=[t]}function $(e,s){const r=[...new Set(e)];return r.length>1?`(${r.join(` ${s} `)})`:r[0]??"never"}var D=class extends Error{constructor(s){super(s[0].message);y(this,"issues");this.name="ValiError",this.issues=s}};function P(e){return{kind:"validation",type:"integer",reference:P,async:!1,expects:null,requirement:Number.isInteger,message:e,_run(s,r){return s.typed&&!this.requirement(s.value)&&o(this,"integer",s,r),s}}}function w(e,s,r){return typeof e.default=="function"?e.default(s,r):e.default}function V(e,s){return!e._run({typed:!1,value:s},{abortEarly:!0}).issues}function I(e,s){return{kind:"schema",type:"array",reference:I,expects:"Array",async:!1,item:e,message:s,_run(r,n){const u=r.value;if(Array.isArray(u)){r.typed=!0,r.value=[];for(let i=0;i<u.length;i++){const f=u[i],l=this.item._run({typed:!1,value:f},n);if(l.issues){const t={type:"array",origin:"value",input:u,key:i,value:f};for(const a of l.issues)a.path?a.path.unshift(t):a.path=[t],r.issues?.push(a);if(r.issues||(r.issues=l.issues),n.abortEarly){r.typed=!1;break}}l.typed||(r.typed=!1),r.value.push(l.value)}}else o(this,"type",r,n);return r}}}function q(e){return{kind:"schema",type:"number",reference:q,expects:"number",async:!1,message:e,_run(s,r){return typeof s.value=="number"&&!isNaN(s.value)?s.typed=!0:o(this,"type",s,r),s}}}function S(e,s){return{kind:"schema",type:"object",reference:S,expects:"Object",async:!1,entries:e,message:s,_run(r,n){const u=r.value;if(u&&typeof u=="object"){r.typed=!0,r.value={};for(const i in this.entries){const f=u[i],l=this.entries[i]._run({typed:!1,value:f},n);if(l.issues){const t={type:"object",origin:"value",input:u,key:i,value:f};for(const a of l.issues)a.path?a.path.unshift(t):a.path=[t],r.issues?.push(a);if(r.issues||(r.issues=l.issues),n.abortEarly){r.typed=!1;break}}l.typed||(r.typed=!1),(l.value!==void 0||i in u)&&(r.value[i]=l.value)}}else o(this,"type",r,n);return r}}}function A(e,...s){const r={kind:"schema",type:"optional",reference:A,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,_run(n,u){return n.value===void 0&&("default"in this&&(n.value=w(this,n,u)),n.value===void 0)?(n.typed=!0,n):this.wrapped._run(n,u)}};return 0 in s&&(r.default=s[0]),r}function M(e){return{kind:"schema",type:"string",reference:M,expects:"string",async:!1,message:e,_run(s,r){return typeof s.value=="string"?s.typed=!0:o(this,"type",s,r),s}}}function v(e){let s;if(e)for(const r of e)s?s.push(...r.issues):s=r.issues;return s}function N(e,s){return{kind:"schema",type:"union",reference:N,expects:$(e.map(r=>r.expects),"|"),async:!1,options:e,message:s,_run(r,n){let u,i,f;for(const l of this.options){const t=l._run({typed:!1,value:r.value},n);if(t.typed)if(t.issues)i?i.push(t):i=[t];else{u=t;break}else f?f.push(t):f=[t]}if(u)return u;if(i){if(i.length===1)return i[0];o(this,"type",r,n,{issues:v(i)}),r.typed=!0}else{if(f?.length===1)return f[0];o(this,"type",r,n,{issues:v(f)})}return r}}}function O(){return{kind:"schema",type:"unknown",reference:O,expects:"unknown",async:!1,_run(e){return e.typed=!0,e}}}function C(e,s,r){const n=e._run({typed:!1,value:s},b(r));if(n.issues)throw new D(n.issues);return n.value}function R(...e){return{...e[0],pipe:e,_run(s,r){for(const n of e)if(n.kind!=="metadata"){if(s.issues&&(n.kind==="schema"||n.kind==="transformation")){s.typed=!1;break}(!s.issues||!r.abortEarly&&!r.abortPipeEarly)&&(s=n._run(s,r))}return s}}}export{A as a,I as b,O as c,R as d,V as e,P as i,q as n,S as o,C as p,M as s,N as u};
|
||||
//# sourceMappingURL=index2.js.map
|
||||
File diff suppressed because one or more lines are too long
2
web/app/themes/haiku-atelier-2024/assets/js/reseau.js
Normal file
2
web/app/themes/haiku-atelier-2024/assets/js/reseau.js
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
import{c as e}from"./api2.js";const n=o=>fetch(o.route,{body:o.corps,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[e]:o.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)});export{n as p};
|
||||
//# sourceMappingURL=reseau.js.map
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from \"../constantes/api.ts\";\n\ntype ArgumentsPostBackendWC = {\n corps: BodyInit;\n nonce: string;\n route: string;\n};\n\nexport const postBackendWC = (args: ArgumentsPostBackendWC) =>\n fetch(\n args.route,\n {\n body: args.corps,\n credentials: \"same-origin\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n"],"names":["ENTETE_WC_NONCE","postBackendWC","args"],"mappings":"AAQa,OAAA,KAAAA,MAAA,YAAA,MAAAC,EAAiBC,GAC5B,MACEA,EAAK,MACL,CACE,KAAMA,EAAK,MACX,YAAa,cACb,QAAS,CACP,OAAU,mBACV,eAAgB,mBAChB,CAACF,CAAe,EAAGE,EAAK,KAC1B,EACA,OAAQ,OACR,KAAM,cACN,OAAQ,YAAY,QAAQ,GAAI,CAClC,CACF"}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
import{r as m,z as R,N as o}from"./index.js";import{x as E}from"./chunk-7BKSRZNG.js";import{p as c}from"./index2.js";import{R as S}from"./api2.js";import{S as d,A as _,a as A}from"./dom.js";import{r as I,a as N}from"./dom2.js";import{r as p,D as h,l as v,a as C,b as T,c as P,E as L,d as b}from"./erreurs.js";import{e as g,a as O}from"./gardes.js";import{p as y}from"./reseau.js";import{W as w}from"./cart-remove-item.js";import{W as U}from"./cart.js";import{i as a}from"./erreurs2.js";import{r as B}from"./utils.js";import{M as D,E as W}from"./Either.js";import"./exports.js";const l=_etats,M=E(B(d),I),k=()=>{console.debug(l),M.forEach(r=>{const i=D.fromNullable(r.getAttribute(_));N(r)(A).ifLeft(()=>p(new h(`L'entrée « ${i.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de suppression.`))).ifRight(n=>{n.addEventListener("click",()=>{const u=i.ifNothing(()=>{r.remove()}).orDefault("CLE_IMPOSSIBLE");n.textContent="removing...",W.encase(()=>c(w,{key:u})).map(f=>{y({corps:JSON.stringify(f),nonce:l.nonce,route:S}).then(async e=>{g(e)&&v("500 Server Error"),E(await e.json(),m(t=>console.debug(t)),t=>R(t).with({body:o.select(),status:400},a,C).with({body:o.select(),status:401},a,T).with({body:o.select(),status:404},a,P).with(o._,s=>c(U,s)).otherwise(s=>E(s,L,b)),m(()=>r.remove()))}).catch(e=>{O(e)?(p(e),console.error(e)):console.error("e n'est pas une Erreur ?!",e)})})})})})};document.addEventListener("DOMContentLoaded",()=>{k()});
|
||||
//# sourceMappingURL=scripts-page-panier.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,2 +1,2 @@
|
|||
import{b as e,c as r}from"./dom2.js";import"./chunk-7BKSRZNG.js";import"./erreurs.js";import"./exports.js";import"./Either.js";const p=e(document),u=r(document);export{p as a,u as r};
|
||||
import{c as e,a as r}from"./dom2.js";import"./chunk-7BKSRZNG.js";import"./erreurs.js";import"./exports.js";import"./Either.js";const p=e(document),u=r(document);export{u as a,p as r};
|
||||
//# sourceMappingURL=utils.js.map
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ $sous_total_panier = WC()->cart->get_subtotal();
|
|||
$total_panier = WC()->cart->get_total("");
|
||||
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
|
||||
$panier[$cart_item_key] = [
|
||||
"attributs" => recupere_et_formate_attributs_produit($cart_item["data"]?->get_attributes()),
|
||||
"cle" => $cart_item_key,
|
||||
"id_variation" => $cart_item["variation_id"],
|
||||
"image" => pipe(
|
||||
|
|
@ -38,12 +39,13 @@ $contexte["sous_total_panier"] = $sous_total_panier;
|
|||
$contexte["produits_panier"] = $panier;
|
||||
|
||||
// echo "<br><br><br><pre>";
|
||||
// echo "<pre>" . print_r($panier) . "</pre>";
|
||||
// print_r(WC()->cart->get_cart());
|
||||
// print_r($panier);
|
||||
// echo "</pre>";
|
||||
|
||||
// Charge les styles de la page
|
||||
function charge_styles_page_panier(): void {
|
||||
// Charge les scripts et styles de la page
|
||||
function charge_scripts_styles_page_panier(): void {
|
||||
wp_enqueue_style(
|
||||
handle: "haiku-atelier-2024-styles-page-panier",
|
||||
src: get_template_directory_uri() . "/assets/css/pages/page-panier.css",
|
||||
|
|
@ -51,8 +53,14 @@ function charge_styles_page_panier(): void {
|
|||
ver: filemtime(get_template_directory() . "/assets/css/pages/page-panier.css"),
|
||||
media: false,
|
||||
);
|
||||
wp_enqueue_script_module(
|
||||
id: "haiku-atelier-2024-scripts-page-panier",
|
||||
src: get_template_directory_uri() . "/assets/js/scripts-page-panier.js",
|
||||
deps: [],
|
||||
version: filemtime(get_template_directory() . "/assets/js/scripts-page-panier.js"),
|
||||
);
|
||||
}
|
||||
add_action("wp_enqueue_scripts", "charge_styles_page_panier");
|
||||
add_action("wp_enqueue_scripts", "charge_scripts_styles_page_panier");
|
||||
|
||||
// Rendu
|
||||
Timber::render(filenames: $modeles, data: $contexte);
|
||||
|
|
|
|||
|
|
@ -30,10 +30,6 @@ $contexte["produit"] = $produit;
|
|||
$contexte["produits_meme_collection"] = $produits_meme_collection;
|
||||
$contexte["tailles_produit"] = $valeurs_attribut_tailles;
|
||||
|
||||
/* Nonce WooCommerce pour l'API Rest */
|
||||
$nonce_wc = wp_create_nonce("wc_store_api");
|
||||
$contexte["nonce_wc"] = $nonce_wc;
|
||||
|
||||
// echo "<pre>"
|
||||
// print_r($produit);
|
||||
// echo "</pre>";
|
||||
|
|
|
|||
|
|
@ -103,13 +103,17 @@ class StarterSite extends Site {
|
|||
|
||||
// Récupère le Panier de l'Utilisateur
|
||||
$panier = WC()->cart->get_cart();
|
||||
$quantite_articles = sizeof($panier);
|
||||
$quantite_articles = WC()->cart->get_cart_contents_count();
|
||||
$articles_presents = $quantite_articles > 0 ? "true" : "false";
|
||||
|
||||
$context["panier"] = $panier;
|
||||
$context["quantite_articles"] = $quantite_articles;
|
||||
$context["articles_presents"] = $articles_presents;
|
||||
|
||||
// Nonce WooCommerce pour l'API Rest
|
||||
$nonce_wc = wp_create_nonce("wc_store_api");
|
||||
$context["nonce_wc"] = $nonce_wc;
|
||||
|
||||
return $context;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -118,3 +118,15 @@ function recupere_produits_meme_collection($slug_collection) {
|
|||
]);
|
||||
};
|
||||
}
|
||||
|
||||
/* Page Panier */
|
||||
|
||||
function recupere_et_formate_attributs_produit($attributs_produit) {
|
||||
return [
|
||||
// Taille
|
||||
"taille" => [
|
||||
"nom" => "Size",
|
||||
"valeur" => $attributs_produit["pa_sizes"] ?? false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
// Illustration du Produit
|
||||
&__illustratif {
|
||||
padding: 1rem;
|
||||
padding: var(--espace-l);
|
||||
text-align: center;
|
||||
border-right: 1px solid var(--couleur-noir);
|
||||
|
||||
|
|
@ -39,26 +39,33 @@
|
|||
place-content: center;
|
||||
width: fit-content;
|
||||
margin: auto;
|
||||
|
||||
// padding: 2rem 0;
|
||||
font-style: italic;
|
||||
|
||||
&__nom-prix {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
column-gap: var(--espace-xl);
|
||||
justify-content: space-between;
|
||||
margin-bottom: 0.33rem;
|
||||
font-size: 1var (--espace-l);
|
||||
|
||||
span {
|
||||
font-weight: 600;
|
||||
font-style: initial;
|
||||
}
|
||||
}
|
||||
|
||||
&__description {
|
||||
margin-bottom: 1rem;
|
||||
margin-bottom: var(--espace-l);
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
// Sélecteur de quantité et bouton de suppression du Panier
|
||||
&__actions {
|
||||
display: grid;
|
||||
grid-template-columns: 0.25fr 0.5fr 0.25fr;
|
||||
grid-template-columns: 0.25fr auto 0.25fr;
|
||||
grid-template-rows: 1fr 1fr;
|
||||
place-content: center;
|
||||
font-weight: 500;
|
||||
font-style: initial;
|
||||
border: 1px solid var(--couleur-noir);
|
||||
|
||||
button:first-of-type {
|
||||
|
|
@ -66,13 +73,24 @@
|
|||
width: 3rem;
|
||||
}
|
||||
|
||||
input {
|
||||
/**
|
||||
* 1. Cache les flèches d'augmentation/diminution sur Firefox.
|
||||
* 2. Cache les flèches d'augmentation/diminution sur Chrome/Edge/Safari.
|
||||
*/
|
||||
input[type="number"] {
|
||||
grid-column: 2;
|
||||
text-align: center;
|
||||
appearance: textfield; /* 1 */
|
||||
background: initial;
|
||||
border: initial;
|
||||
border-right: 1px solid var(--couleur-noir);
|
||||
border-left: 1px solid var(--couleur-noir);
|
||||
|
||||
&::-webkit-outer-spin-button,
|
||||
&::-webkit-inner-spin-button {
|
||||
margin: 0; /* 2 */
|
||||
appearance: none; /* 2 */
|
||||
}
|
||||
}
|
||||
|
||||
button:nth-of-type(2) {
|
||||
|
|
@ -80,12 +98,20 @@
|
|||
width: 3rem;
|
||||
}
|
||||
|
||||
/* Bouton de suppression du Produit du Panier */
|
||||
button:last-of-type {
|
||||
grid-column: span 3;
|
||||
grid-row: 2;
|
||||
padding: 0.25rem;
|
||||
padding: var(--espace-xs);
|
||||
text-transform: lowercase;
|
||||
border-top: 1px solid var(--couleur-noir);
|
||||
|
||||
@media (hover: hover) {
|
||||
&:hover {
|
||||
color: var(--couleur-blanc);
|
||||
background: var(--couleur-noir);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -94,10 +120,9 @@
|
|||
// Choix des emballages
|
||||
.panneau__emballages {
|
||||
width: 100%;
|
||||
padding: 1rem 0;
|
||||
padding: var(--espace-l) 0;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
letter-spacing: 0.5px;
|
||||
border-bottom: 1px solid var(--couleur-noir);
|
||||
|
||||
// Un conteneur est nécessaire pour la bordure inférieure
|
||||
|
|
@ -120,7 +145,7 @@
|
|||
&__choix {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
gap: 2rem;
|
||||
column-gap: var(--espace-xl);
|
||||
text-transform: lowercase;
|
||||
|
||||
&__ligne {
|
||||
|
|
@ -136,8 +161,8 @@
|
|||
|
||||
// TODO: Utiliser un SVG plutôt qu'un « x » ?
|
||||
input[type="radio"] {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
width: var(--espace-l);
|
||||
height: var(--espace-l);
|
||||
appearance: none;
|
||||
border: 1px solid var(--couleur-noir);
|
||||
|
||||
|
|
@ -166,7 +191,7 @@
|
|||
// Instructions pour la commande et code promo
|
||||
.panneau__instructions-code-promo {
|
||||
width: 100%;
|
||||
padding: 1rem 0;
|
||||
padding: var(--espace-l) 0;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid var(--couleur-noir);
|
||||
|
||||
|
|
@ -178,11 +203,10 @@
|
|||
resize: vertical;
|
||||
display: block; /* 1 */
|
||||
margin: auto; /* 1 */
|
||||
margin-bottom: 0.5rem; /* 2 */
|
||||
padding: 0.5rem;
|
||||
margin-bottom: var(--espace-s); /* 2 */
|
||||
padding: var(--espace-s);
|
||||
font-size: 0.8rem;
|
||||
font-weight: 450;
|
||||
letter-spacing: 0.5px;
|
||||
background: initial;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
|
@ -195,7 +219,7 @@
|
|||
|
||||
input {
|
||||
width: 30ch;
|
||||
padding: 0.25rem;
|
||||
padding: var(--espace-xs);
|
||||
background: var(--couleur-gris);
|
||||
border: 1px solid var(--couleur-noir);
|
||||
|
||||
|
|
@ -205,7 +229,7 @@
|
|||
}
|
||||
|
||||
button {
|
||||
padding: 0.25rem 2rem;
|
||||
padding: var(--espace-xs) var(--espace-xl);
|
||||
color: var(--couleur-blanc);
|
||||
text-transform: lowercase;
|
||||
background: var(--couleur-noir);
|
||||
|
|
@ -218,11 +242,11 @@
|
|||
.panneau__sous-totaux {
|
||||
width: fit-content;
|
||||
margin: auto;
|
||||
padding: 1rem 0;
|
||||
padding: var(--espace-l) 0;
|
||||
text-align: center;
|
||||
|
||||
p + p {
|
||||
margin-top: 1rem;
|
||||
margin-top: var(--espace-l);
|
||||
}
|
||||
|
||||
&__ligne {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
export const CHEMIN_API_REST = "wp-json";
|
||||
export const ROUTE_API_PANIER = `/${CHEMIN_API_REST}/wc/store/cart`;
|
||||
export const ROUTE_API_AJOUTE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/add-item`;
|
||||
export const ROUTE_API_RETIRE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/remove-item`;
|
||||
|
||||
// En-têtes
|
||||
export const ENTETE_WC_NONCE = "Nonce";
|
||||
|
|
|
|||
|
|
@ -5,9 +5,14 @@ export const ATTRIBUT_ARIA_HIDDEN = "aria-hidden";
|
|||
export const ATTRIBUT_HIDDEN = "hidden";
|
||||
export const ATTRIBUT_CONTIENT_ARTICLES = "data-contient-articles";
|
||||
export const ATTRIBUT_DESACTIVE = "disabled";
|
||||
export const ATTRIBUT_CLE_PANIER = "data-cle-panier";
|
||||
|
||||
export const SELECTEUR_BOUTON_PANIER = ".compte-panier a[rel='cart']";
|
||||
export const SELECTEUR_SELECTEUR_QUANTITE = "#selecteur-variation";
|
||||
export const SELECTEUR_BOUTON_AJOUT_PANIER = "#bouton-ajout-panier";
|
||||
export const SELECTEUR_LIENS_ONGLETS = "a[role='tab']";
|
||||
export const SELECTEUR_SECTIONS_CONTENUS = "section[role='tabpanel']";
|
||||
|
||||
// Panier
|
||||
export const SELECTEUR_ENTREES_PANIER = "article";
|
||||
export const SELECTEUR_BOUTON_SUPPRESSION_PANIER = "button.detail-produit__actions__suppression";
|
||||
|
|
|
|||
|
|
@ -45,6 +45,12 @@ export class UnknownError extends Error {
|
|||
this.name = "UnknownError";
|
||||
}
|
||||
}
|
||||
export class DOMElementAbsentError extends Error {
|
||||
constructor(message: unknown) {
|
||||
super(JSON.stringify(message));
|
||||
this.name = "DOMElementAbsentError";
|
||||
}
|
||||
}
|
||||
|
||||
/* Fonction utilitaire pour créer ou lever des Erreurs */
|
||||
export const Erreur = (message: string): Error => new Error(message);
|
||||
|
|
@ -73,7 +79,10 @@ export const leveUnknownError = (erreur: unknown): never => {
|
|||
|
||||
/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Permet d'indiquer
|
||||
le type d'Erreur à l'appel de la fonction. */
|
||||
export const reporteErreur = <E extends Error>(erreur: E): string => captureException(erreur);
|
||||
export const reporteErreur = <E extends Error>(erreur: E): string => {
|
||||
console.error(erreur);
|
||||
return captureException(erreur);
|
||||
};
|
||||
|
||||
/**
|
||||
* Reporte une Erreur au service GlitchTip puis la lève sous forme d'Exception.
|
||||
|
|
|
|||
24
web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts
Normal file
24
web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from "../constantes/api.ts";
|
||||
|
||||
type ArgumentsPostBackendWC = {
|
||||
corps: BodyInit;
|
||||
nonce: string;
|
||||
route: string;
|
||||
};
|
||||
|
||||
export const postBackendWC = (args: ArgumentsPostBackendWC) =>
|
||||
fetch(
|
||||
args.route,
|
||||
{
|
||||
body: args.corps,
|
||||
credentials: "same-origin",
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
"Content-Type": "application/json",
|
||||
[ENTETE_WC_NONCE]: args.nonce,
|
||||
},
|
||||
method: "POST",
|
||||
mode: "same-origin",
|
||||
signal: AbortSignal.timeout(5000),
|
||||
},
|
||||
);
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import * as v from "valibot";
|
||||
|
||||
import type { WCStoreCartAddItemArgs } from "../../types/api/cart-add-item.ts";
|
||||
import type { WCStoreCartAddItemArgs } from "../../types/api/cart-add-item";
|
||||
|
||||
export const WCStoreCartAddItemArgsItemsSchema = v.object({
|
||||
/** Variation attribute name. */
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import * as v from "valibot";
|
||||
|
||||
import type { WCStoreCartRemoveItemArgs } from "../../types/api/cart-remove-item";
|
||||
|
||||
export const WCStoreCartRemoveItemArgsSchema = v.object({
|
||||
/** Unique identifier (key) for the basket item. */
|
||||
key: v.string(),
|
||||
});
|
||||
|
||||
export const parseWCStoreCartRemoveItemArgs = (args: WCStoreCartRemoveItemArgs): WCStoreCartRemoveItemArgs =>
|
||||
v.parse(WCStoreCartRemoveItemArgsSchema, args);
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
import { Either, Maybe } from "purify-ts";
|
||||
import { pipe, tap } from "remeda";
|
||||
import { match, P } from "ts-pattern";
|
||||
import { parse } from "valibot";
|
||||
|
||||
import type { WCStoreCartRemoveItemArgs } from "./types/api/cart-remove-item";
|
||||
|
||||
import { ROUTE_API_RETIRE_ARTICLE_PANIER } from "./constantes/api.ts";
|
||||
import {
|
||||
ATTRIBUT_CLE_PANIER,
|
||||
SELECTEUR_BOUTON_SUPPRESSION_PANIER,
|
||||
SELECTEUR_ENTREES_PANIER,
|
||||
} from "./constantes/dom.ts";
|
||||
import { recupereElementAvecSelecteur, recupereElementsOuLeve } from "./lib/dom.ts";
|
||||
import {
|
||||
DOMElementAbsentError,
|
||||
ErreurInconnue,
|
||||
leveBadRequestError,
|
||||
leveErreur,
|
||||
leveNotFoundError,
|
||||
leveServerError,
|
||||
leveUnauthorizedError,
|
||||
reporteErreur,
|
||||
type UnknownError,
|
||||
} from "./lib/erreurs.ts";
|
||||
import { estError, estReponse500 } from "./lib/gardes.ts";
|
||||
import { postBackendWC } from "./lib/reseau.ts";
|
||||
import { WCStoreCartRemoveItemArgsSchema } from "./lib/schemas/cart-remove-item.ts";
|
||||
import { WCStoreCartSchema } from "./lib/schemas/cart.ts";
|
||||
import { isWCError } from "./lib/schemas/erreurs.ts";
|
||||
import { recupereElementsDocumentEither } from "./lib/utils.ts";
|
||||
|
||||
/**
|
||||
* Récupère les <article> dans le panier
|
||||
* Itère dessus
|
||||
* Récupère le button de suppression
|
||||
* Si n'existe pas pour une raison ou une autre
|
||||
* Ne rien faire
|
||||
* Créé un eventListener au click
|
||||
* Récupère la clé Panier de l'attribut data-cle-panier
|
||||
* Si n'existe pas pour une raison ou une autre
|
||||
* Retirer l'élément du DOM
|
||||
* Réalise une requête API pour supprimer l'entrée du Panier
|
||||
* Remplacer le texte du bouton remove avec un picto de chargement
|
||||
* Au retour avec succès, retirer l'élément du DOM
|
||||
* Sinon, afficher un message à l'Utilisateur avec des pistes de résolution (?)
|
||||
*
|
||||
* TODO: Prévoir le cas où il n'y a pas de Produits dans le Panier
|
||||
*/
|
||||
|
||||
/** États utiles pour les scripts de la page. */
|
||||
type EtatsPage = {
|
||||
/** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */
|
||||
nonce: string;
|
||||
};
|
||||
|
||||
// @ts-expect-error -- États injectés par le modèle PHP
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP
|
||||
const ETATS_PAGE: EtatsPage = _etats;
|
||||
|
||||
/** */
|
||||
const ENTREES_PANIER: Array<HTMLElement> = pipe(
|
||||
recupereElementsDocumentEither<HTMLElement>(SELECTEUR_ENTREES_PANIER),
|
||||
recupereElementsOuLeve,
|
||||
);
|
||||
|
||||
const initialiseScriptsPagePanier = (): void => {
|
||||
console.debug(ETATS_PAGE);
|
||||
|
||||
ENTREES_PANIER.forEach((entree: HTMLElement) => {
|
||||
const maybeClePanier: Maybe<string> = Maybe.fromNullable(entree.getAttribute(ATTRIBUT_CLE_PANIER));
|
||||
|
||||
recupereElementAvecSelecteur(entree)<HTMLButtonElement>(SELECTEUR_BOUTON_SUPPRESSION_PANIER)
|
||||
// Remplace la SyntaxError par une Erreur plus détaillée et parlante
|
||||
.ifLeft(() =>
|
||||
reporteErreur(
|
||||
new DOMElementAbsentError(
|
||||
`L'entrée « ${maybeClePanier.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de suppression.`,
|
||||
),
|
||||
)
|
||||
)
|
||||
// Créé l'Écouteur d'Événement pour le click sur le Bouton
|
||||
.ifRight((boutonPanier: HTMLButtonElement) => {
|
||||
boutonPanier.addEventListener("click", (): void => {
|
||||
// Retire l'entrée du DOM si la clé Panier n'existe pas et arrête précocement
|
||||
const clePanier = maybeClePanier
|
||||
.ifNothing(() => {
|
||||
entree.remove();
|
||||
return;
|
||||
})
|
||||
.orDefault("CLE_IMPOSSIBLE");
|
||||
|
||||
// Affiche un texte de chargement dans le Bouton
|
||||
boutonPanier.textContent = "removing...";
|
||||
|
||||
Either
|
||||
.encase<Error, WCStoreCartRemoveItemArgs>(() => parse(WCStoreCartRemoveItemArgsSchema, { key: clePanier }))
|
||||
.map(
|
||||
(args: WCStoreCartRemoveItemArgs) => {
|
||||
postBackendWC({
|
||||
corps: JSON.stringify(args),
|
||||
nonce: ETATS_PAGE.nonce,
|
||||
route: ROUTE_API_RETIRE_ARTICLE_PANIER,
|
||||
})
|
||||
.then(async (reponse: Response) => {
|
||||
// Traite le cas d'erreur 500
|
||||
if (estReponse500(reponse)) leveServerError("500 Server Error");
|
||||
|
||||
pipe(
|
||||
// Récupère la Réponse
|
||||
await reponse.json(),
|
||||
tap((a) => console.debug(a)),
|
||||
// Traite tous les codes HTTPs possibles
|
||||
(corpsReponse: unknown) =>
|
||||
match(corpsReponse)
|
||||
// Réponses problématiques
|
||||
.with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)
|
||||
.with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)
|
||||
.with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)
|
||||
// Réponse OK (201)
|
||||
.with(P._, corpsOkInconnu => parse(WCStoreCartSchema, corpsOkInconnu))
|
||||
// Réponses inconnues
|
||||
.otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>)),
|
||||
tap(() => entree.remove()),
|
||||
);
|
||||
})
|
||||
.catch((e: unknown) => {
|
||||
if (estError(e)) {
|
||||
reporteErreur(e);
|
||||
console.error(e);
|
||||
} else {
|
||||
console.error("e n'est pas une Erreur ?!", e);
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
// Retire l'entrée du Panier du DOM
|
||||
// setTimeout(() => {
|
||||
// entree.remove();
|
||||
// }, 3200);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
initialiseScriptsPagePanier();
|
||||
});
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
import { Either, Maybe } from "purify-ts";
|
||||
import { pipe, prop, tap } from "remeda";
|
||||
import { match, P } from "ts-pattern";
|
||||
import { parse, value } from "valibot";
|
||||
import { parse } from "valibot";
|
||||
|
||||
import type { WCStoreCart } from "./types/api/cart";
|
||||
import type { WCStoreCartAddItemArgs } from "./types/api/cart-add-item.ts";
|
||||
|
|
@ -32,7 +32,7 @@ import {
|
|||
type UnknownError,
|
||||
} from "./lib/erreurs.ts";
|
||||
import { estError, estHTMLSelectElement, estReponse500 } from "./lib/gardes.ts";
|
||||
import { parseWCStoreCartAddItemArgs } from "./lib/schemas/cart-add.item.ts";
|
||||
import { parseWCStoreCartAddItemArgs } from "./lib/schemas/cart-add-item.ts";
|
||||
import { WCStoreCartSchema } from "./lib/schemas/cart.ts";
|
||||
import { isWCError } from "./lib/schemas/erreurs.ts";
|
||||
import { recupereElementDocumentEither, recupereElementsDocumentEither } from "./lib/utils.ts";
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import type { InferOutput } from "valibot";
|
|||
import type {
|
||||
WCStoreCartAddItemArgsItemsSchema,
|
||||
WCStoreCartAddItemArgsSchema,
|
||||
} from "../../lib/schemas/cart-add.item.ts";
|
||||
} from "../../lib/schemas/cart-add-item.ts";
|
||||
|
||||
export type WCStoreCartAddItemArgsItems = InferOutput<typeof WCStoreCartAddItemArgsItemsSchema>;
|
||||
export type WCStoreCartAddItemArgs = InferOutput<typeof WCStoreCartAddItemArgsSchema>;
|
||||
|
|
|
|||
5
web/app/themes/haiku-atelier-2024/src/scripts/types/api/cart-remove-item.d.ts
vendored
Normal file
5
web/app/themes/haiku-atelier-2024/src/scripts/types/api/cart-remove-item.d.ts
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import type { InferOutput } from "valibot";
|
||||
|
||||
import type { WCStoreCartRemoveItemArgsSchema } from "../../lib/schemas/cart-remove-item.ts";
|
||||
|
||||
export type WCStoreCartRemoveItemArgs = InferOutput<typeof WCStoreCartRemoveItemArgsSchema>;
|
||||
|
|
@ -1,5 +1,21 @@
|
|||
{% extends "base.twig" %}
|
||||
|
||||
{% block head %}
|
||||
<script>
|
||||
// Injection d'états pour les Scripts de la page.
|
||||
|
||||
/**
|
||||
* @typedef {Object} Etats - États utiles pour les scripts de la page.
|
||||
* @property {string} nonce - Un nonce pour l'authentification de requêtes API.
|
||||
*/
|
||||
|
||||
/** @type {Etats} */
|
||||
const _etats = {
|
||||
nonce: "{{ nonce_wc }}",
|
||||
};
|
||||
</script>
|
||||
{% endblock head %}
|
||||
|
||||
{% block contenu %}
|
||||
<main id="page-panier">
|
||||
<section class="panneau" id="panneau-panier">
|
||||
|
|
@ -7,23 +23,32 @@
|
|||
<h2>Your cart</h2>
|
||||
</header>
|
||||
|
||||
{# TODO: Prévoir le cas où il n'y a pas de Produits dans le Panier #}
|
||||
|
||||
<div class="panneau__grille-produits">
|
||||
{% for produit in produits_panier %}
|
||||
<article class="panneau__grille-produits__produit">
|
||||
<article class="panneau__grille-produits__produit" data-cle-panier="{{ produit.cle }}">
|
||||
<div class="panneau__grille-produits__produit__illustratif">
|
||||
{{ produit.image }}
|
||||
</div>
|
||||
|
||||
<div class="panneau__grille-produits__produit__textuel detail-produit">
|
||||
<h3 class="detail-produit__nom-prix">{{ produit.titre }}. <span>{{ produit.prix }} €</span></h3>
|
||||
<p class="detail-produit__description">size 8</p>
|
||||
<p class="detail-produit__description">
|
||||
{# Affiche tous les attributs relevants pour la variation choisie #}
|
||||
{% for attribut in produit.attributs %}
|
||||
{% if attribut.valeur %}
|
||||
{{ attribut.nom }} {{ attribut.valeur }}<br>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
|
||||
<div class="detail-produit__actions">
|
||||
<button type="button">-</button>
|
||||
<input type="number" value="1" />
|
||||
<input min="0" type="number" value="{{ produit.quantite }}" />
|
||||
<button type="button">+</button>
|
||||
|
||||
<button type="button">Remove</button>
|
||||
<button class="detail-produit__actions__suppression" type="button">Remove</button>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue