@salla.sa/twilight-components 2.12.60 → 2.12.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/salla-add-product-button_41.cjs.entry.js +36 -7
- package/dist/cjs/salla-add-product-button_41.cjs.entry.js.map +1 -1
- package/dist/cjs/twilight.cjs.js +1 -1
- package/dist/collection/components/salla-login-modal/salla-login-modal.js +23 -6
- package/dist/collection/components/salla-login-modal/salla-login-modal.js.map +1 -1
- package/dist/collection/components/salla-verify/salla-verify.js +17 -1
- package/dist/collection/components/salla-verify/salla-verify.js.map +1 -1
- package/dist/components/salla-login-modal.js +23 -6
- package/dist/components/salla-login-modal.js.map +1 -1
- package/dist/components/salla-verify2.js +17 -1
- package/dist/components/salla-verify2.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/salla-add-product-button_41.entry.js +36 -7
- package/dist/esm/salla-add-product-button_41.entry.js.map +1 -1
- package/dist/esm/twilight.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/esm-es5/salla-add-product-button_41.entry.js +1 -1
- package/dist/esm-es5/salla-add-product-button_41.entry.js.map +1 -1
- package/dist/esm-es5/twilight.js +1 -1
- package/dist/esm-es5/twilight.js.map +1 -1
- package/dist/twilight/{p-9e2778f3.system.entry.js → p-8e77c20f.system.entry.js} +2 -2
- package/dist/twilight/p-8e77c20f.system.entry.js.map +1 -0
- package/dist/twilight/p-9f2e0944.system.js +1 -1
- package/dist/twilight/p-9f2e0944.system.js.map +1 -1
- package/dist/twilight/{p-f30381e7.entry.js → p-d4f621d1.entry.js} +5 -5
- package/dist/twilight/p-d4f621d1.entry.js.map +1 -0
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/twilight/twilight.esm.js.map +1 -1
- package/dist/types/components/salla-login-modal/salla-login-modal.d.ts +2 -0
- package/dist/types/components/salla-verify/salla-verify.d.ts +3 -0
- package/package.json +3 -3
- package/dist/twilight/p-9e2778f3.system.entry.js.map +0 -1
- package/dist/twilight/p-f30381e7.entry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salla-verify.js","sourceRoot":"","sources":["../../../src/components/salla-verify/salla-verify.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,gBAAgB,MAAM,oCAAoC,CAAC;AAClE,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AAEjD;;;GAGG;AAGH,MAAM,OAAO,WAAW;EACtB;6BAuCsC,KAAK;mBAML,OAAO;gBAKO,QAAQ;sBAI9B,IAAI;0BAKA,IAAI;;uBASP,EAAE;2BAIG,KAAK;IAvEvC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;MACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;MAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;MAC3G,MAAA,IAAI,CAAC,KAAK,0CAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;MAC5B,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;MACrE,OAAO;KACR;IAED,mHAAmH;IACnH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAAC,EAAE;;MAC7C,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;MACnD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;MAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;MACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;MAC9G,MAAA,IAAI,CAAC,KAAK,0CAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;MACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;MACrB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACnC,CAAC,CAAC,CAAC;GAEJ;EAgDO,WAAW,CAAC,CAAC;IACnB,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,4EAA4E;IACjH,IAAI,CAAC,IAAI;MAAE,OAAO,CAAC,kCAAkC;IACrD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;MAAE,OAAO,CAAC,iDAAiD;IAChF,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EAClC,CAAC;EAEO,UAAU,CAAC,EAAE,EAAE,IAAI;IACzB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;IACtD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;IACnD,IAAI,EAAE,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,EAAE;MACxC,kDAAkD;MAClD,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;KAC9C;EACH,CAAC;EAAA,CAAC;EAEM,cAAc;IACpB,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC9C,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,EAAE;QAClC,SAAS,GAAG,KAAK,CAAC;OACnB;KACF;IACD,OAAO,SAAS,CAAC;EACnB,CAAC;EAEO,WAAW,CAAC,EAAE;;IACpB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;MACpE,OAAO;KACR;IACD,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,CAAC;IACpC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;MACnB,MAAA,EAAE,CAAC,MAAM,CAAC,kBAAkB,0CAAE,KAAK,EAAE,CAAC;MACtC,MAAA,EAAE,CAAC,MAAM,CAAC,kBAAkB,0CAAE,MAAM,EAAE,CAAC;KACxC;SAAM,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MAChC,MAAA,EAAE,CAAC,MAAM,CAAC,sBAAsB,0CAAE,KAAK,EAAE,CAAC;MAC1C,MAAA,EAAE,CAAC,MAAM,CAAC,sBAAsB,0CAAE,MAAM,EAAE,CAAC;KAC5C;IACD,iEAAiE;IACjE,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;MAC9B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;KACtB;EACH,CAAC;EAEO,WAAW,CAAC,EAAE;IACpB,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAC9D,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;OACvB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,0BAA0B;IAC1B,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;EACnD,CAAC;EAEO,WAAW,CAAC,EAAE;IACpB,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;IACxC,0DAA0D;IAC1D,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;MACzB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;MACzB,CAAC,EAAE,GAAG,CAAC,CAAC;KACT;EACH,CAAC;EAEO,WAAW,CAAC,EAAE;;IACpB,oDAAoD;IACpD,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa;MAAE,OAAO;IAC7C,0CAA0C;IAC1C,IAAI,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,KAAI,EAAE,EAAE;MACnC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC5B;IACD,mDAAmD;IACnD,uEAAuE;IACvE,IAAI,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,IAAI,EAAE,EAAE;MAChD,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;KAC1C;EACH,CAAC;EAED;;;KAGG;EAEH,KAAK,CAAC,OAAO;IACX,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;EACzB,CAAC;EAED;;;KAGG;EAEH,KAAK,CAAC,IAAI,CAAC,IAAI;;IACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;IACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,IAAI,CAAC,OAAO,IAAI,OAAO,KAAI,MAAA,IAAI,CAAC,KAAK,0CAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAClB,MAAA,IAAI,CAAC,aAAa,0CAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,gDAAgD;IAChD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;EACnD,CAAC;EAEO,eAAe;IACrB,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;MACpB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;MAClB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;MACjB,OAAO;KACR;IAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;EACnB,CAAC;EAEO,KAAK;IACX,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;EAC5B,CAAC;EAEO,WAAW;IACjB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACnC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IAEtB,IAAI,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;MAC7B,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE;QACzB,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;OAC3C;WAAM;QACL,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,OAAO,CAAC;QACpG,IAAI,CAAC,WAAW,EAAE,CAAC;OACpB;IACH,CAAC,EAAE,IAAI,CAAC,CAAC;EACX,CAAC;EAEO,UAAU;IAChB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;OACnB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;OAC9B,IAAI,CAAC,GAAG,EAAE;MACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;MAClD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC,CAAC;OACD,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OAC5C,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;EACvC,CAAC;EAEO,MAAM;IACZ,wDAAwD;IACxD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;MAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;MAC/C,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;MAChD,OAAO;KACR;IAED,IAAI,IAAI,mBAAK,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAK,IAAI,CAAC,IAAI,CAAE,CAAC;IAEnD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;OACnB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;OAC9B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;OAC5G,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;OAC9C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;OACjD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;OAC9B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;OACvD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;MACf,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;MAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;IACtD,CAAC,CAAC,CAAC;EACP,CAAC;EAED,MAAM;IACJ,OAAO,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAC,IAAI,QAAE,IAAI,CAAC,MAAM,EAAE,CAAQ,CAAC,CAAC;MAC9D,mBAAa,KAAK,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,iBAC1D,IAAI,CAAC,KAAK;QACvB,YAAM,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,sBAAsB,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,GAAS;QACrH,IAAI,CAAC,MAAM,EAAE,CACF,CAAC;EACnB,CAAC;EAGO,MAAM;IACZ,OAAO,CACL,WAAK,KAAK,EAAC,eAAe,EAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI;MACtD,WAAK,KAAK,EAAC,kBAAkB,EAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,GAAI;MAC3F,YAAM,IAAI,EAAC,QAAQ,GAAG;MACtB,YAAM,IAAI,EAAC,OAAO,GAAG;MACrB,aAAO,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,GAAG,EAAC,QAAQ,QAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAI;MACzF,WAAK,KAAK,EAAC,gBAAgB,EAAC,GAAG,EAAC,KAAK,IAClC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAO,IAAI,EAAC,QAAQ,EAAC,YAAY,EAAC,eAAe,EAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAC7G,SAAS,EAAC,GAAG,EAAC,KAAK,EAAC,EAAE,EAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAC,gBAAgB,EAC7D,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EACjC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EACjC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EACjC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EACjC,QAAQ,SAAG,CAAC,CACV;MACN,WAAK,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,iBAAiB;QACxC,oBAAc,KAAK,EAAC,iBAAiB,qBAAiB,QAAQ,EAAC,QAAQ,EAAE,IAAI,EAC3E,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAC5B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IACrB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAC1B;QACf,SAAG,KAAK,EAAC,yBAAyB,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,GAAG,EAAE;UAClE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC;UAC7C,SAAG,KAAK,EAAC,gBAAgB,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAM,CAAI;QAChE,SAAG,IAAI,EAAC,GAAG,EAAC,KAAK,EAAC,iBAAiB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAClE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,IAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAK,CACzE;MACN,YAAM,IAAI,EAAC,cAAc,GAAG,CACxB,CACP,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, Element, Event, EventEmitter, h, Method, Prop, State } from '@stencil/core';\nimport AndroidPhoneIcon from '../../assets/svg/android-phone.svg';\nimport MailIcon from '../../assets/svg/mail.svg';\n\n/**\n * @slot footer - Replaces the footer, by default it contains: verify button, resend, and timer\n * @slot after-footer - placeholder position\n */\n@Component({ tag: 'salla-verify', styleUrl: 'salla-verify.scss' })\n\nexport class SallaVerify {\n constructor() {\n salla.lang.onLoaded(() => {\n this.translationLoaded = true;\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + this.type);\n this.modal?.setTitle(this.title);\n });\n\n if (this.display == 'inline') {\n this.modal = { open: () => '', close: () => '', setTitle: () => '' };\n return;\n }\n\n //todo:: change this way, now we fire the event from the backend, we should listen to salla.profile.event.onUpdated\n salla.event.on('profile::verification', data => {\n let payload = Array.isArray(data) ? data[0] : data;\n this.isProfileVerify = true;\n this.open(payload);\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + payload.type);\n this.modal?.setTitle(this.title);\n });\n\n salla.event.on('modalClosed', () => {\n this.resendAfter = 0;\n this.timer.innerHTML = '30 : 00';\n });\n\n }\n\n private modal: HTMLSallaModalElement | any;\n private body: HTMLDivElement;\n private code: HTMLInputElement;\n private btn: HTMLSallaButtonElement;\n private resendMessage: HTMLParagraphElement;\n private timer: HTMLElement;\n private resend: HTMLAnchorElement;\n private otpInputs: NodeListOf<HTMLInputElement>;\n private firstOtpInput: HTMLInputElement;\n private data: { type: 'mobile' | 'email', phone?: string, country_code?: string, email?: string };\n\n @State() translationLoaded: boolean = false;\n\n @Element() host: HTMLElement;\n /**\n * Should render component without modal\n */\n @Prop() display: 'inline' | 'modal' = 'modal';\n\n /**\n * Verifying method\n */\n @Prop({ mutable: true }) type: 'mobile' | 'email' = 'mobile';\n /**\n * should auto reloading the page after success verification\n */\n @Prop() autoReload: boolean = true;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop() supportWebAuth: boolean = true;\n\n /**\n * Event when success verification\n */\n @Event() verified: EventEmitter;\n\n @State() title: string;\n\n @State() resendAfter: number = 30;\n /**\n * to use: `salla.api.auth.verify` or `salla.profile.verify`\n */\n @State() isProfileVerify: boolean = false;\n\n private splitNumber(e) {\n let data = e.data || e.target.value; // Chrome doesn't get the e.data, it's always empty, fallback to value then.\n if (!data) return; // Shouldn't happen, just in case.\n if (data.length === 1) return; // Here is a normal behavior, not a paste action.\n this.modifyNext(e.target, data);\n }\n\n private modifyNext(el, data) {\n el.value = data[0]; // Apply first item to first input\n data = data.substring(1); // remove the first char.\n if (el.nextElementSibling && data.length) {\n // Do the same with the next element and next data\n this.modifyNext(el.nextElementSibling, data);\n }\n };\n\n private checkAllInputs() {\n let allFilled = true;\n for (let i = 0; i < this.otpInputs.length; i++) {\n if (this.otpInputs[i].value === '') {\n allFilled = false;\n }\n }\n return allFilled;\n }\n\n private handleKeyUp(ev) {\n if (['Alt', 'Shift', 'Control', 'AltGraph', 'Ctrl'].includes(ev.key)) {\n return;\n }\n let key = ev.keyCode || ev.charCode;\n if (ev.target.value) {\n ev.target.nextElementSibling?.focus();\n ev.target.nextElementSibling?.select();\n } else if ([8, 46].includes(key)) {\n ev.target.previousElementSibling?.focus();\n ev.target.previousElementSibling?.select();\n }\n // If the target is populated to quickly, value length can be > 1\n if (ev.target.value.length > 1) {\n this.splitNumber(ev);\n }\n }\n\n private handlePaste(ev) {\n let text = salla.helpers.number(ev.clipboardData.getData('text'))\n .replace(/[^0-9.]/g, '')\n .replace('..', '.');\n this.otpInputs.forEach((input, i) => input.value = text[i] || '');\n // this.toggleOTPSubmit();\n setTimeout(() => this.otpInputs[3].focus(), 100);\n }\n\n private handleInput(ev) {\n salla.helpers.inputDigitsOnly(ev.target)\n // check if all otpInputs has values then send the request\n if (this.checkAllInputs()) {\n setTimeout(() => {\n this.toggleOTPSubmit();\n }, 100);\n }\n }\n\n private handleFocus(ev) {\n // If the focus element is the first one, do nothing\n if (ev.target === this.firstOtpInput) return;\n // If value of input 1 is empty, focus it.\n if (this.firstOtpInput?.value == '') {\n this.firstOtpInput.focus();\n }\n // If value of a previous input is empty, focus it.\n // To remove if you don't wanna force user respecting the fields order.\n if (ev.target.previousElementSibling.value == '') {\n ev.target.previousElementSibling.focus();\n }\n }\n\n /**\n * Get current code\n * @return {string}\n */\n @Method()\n async getCode() {\n return this.code.value;\n }\n\n /**\n * Open verifying modal\n * @param data\n */\n @Method()\n async open(data) {\n this.data = data;\n this.data.type = this.data.type || this.type;\n this.type = this.data.type;\n this.resendTimer();\n this.otpInputs = this.body.querySelectorAll('.s-verify-input');\n this.firstOtpInput = this.body.querySelector('#otp-1');\n this.reset();\n this.display == 'modal' && this.modal?.setTitle(this.title);\n this.modal.open();\n this.firstOtpInput?.addEventListener('input', e => this.splitNumber(e));\n\n // focus the first input after opening the modal\n setTimeout(() => this.otpInputs[0].focus(), 100);\n }\n\n private toggleOTPSubmit() {\n let otp = []\n this.otpInputs.forEach(input => input.value && otp.push(input.value));\n\n this.code.value = otp.join('');\n\n if (otp.length === 4) {\n this.btn.disable()\n this.btn.click();\n return;\n }\n\n this.btn.enable()\n }\n\n private reset() {\n this.otpInputs.forEach((input) => input.value = '');\n this.code.value = '';\n this.otpInputs[0].focus();\n }\n\n private resendTimer() {\n this.resendMessage.style.display = 'block';\n this.resend.style.display = 'none';\n this.resendAfter = 30;\n\n let timerId = setInterval(() => {\n if (this.resendAfter <= 0) {\n clearInterval(timerId);\n this.resend.style.display = 'block';\n this.resendMessage.style.display = 'none';\n } else {\n this.timer.innerHTML = `${this.resendAfter >= 10 ? this.resendAfter : '0' + this.resendAfter} : 00`;\n this.resendAfter--;\n }\n }, 1000);\n }\n\n private resendCode() {\n return this.btn.stop()\n .then(() => this.btn.disable())\n .then(() => {\n this.otpInputs.forEach(input => input.value = '');\n this.otpInputs[0].focus();\n })\n .then(() => salla.api.auth.resend(this.data))\n .finally(() => this.resendTimer());\n }\n\n private submit() {\n //if code not 4 digits, focus on the after filled input,\n if (this.code.value.length < 4) {\n this.otpInputs[this.code.value.length].focus();\n salla.log('Trying to submit without 4 digits!');\n return;\n }\n\n let data = { code: this.code.value, ...this.data };\n\n return this.btn.load()\n .then(() => this.btn.disable())\n .then(() => this.isProfileVerify ? salla.profile.verify(data) : salla.auth.verify(data, this.supportWebAuth))\n .then(response => this.verified.emit(response))\n .then(() => this.btn.stop() && this.btn.disable())\n .then(() => this.modal.close())\n .then(() => this.autoReload && window.location.reload())\n .catch((error) => {\n salla.logger.error(error);\n this.btn.stop() && this.btn.enable() && this.reset()\n });\n }\n\n render() {\n return this.display == 'inline' ? <Host>{this.myBody()}</Host> :\n <salla-modal width=\"xs\" class=\"s-verify\" ref={modal => this.modal = modal}\n modal-title={this.title}>\n <span slot='icon' class=\"s-verify-header-icon\" innerHTML={this.type == \"mobile\" ? AndroidPhoneIcon : MailIcon}></span>\n {this.myBody()}\n </salla-modal>;\n }\n\n\n private myBody() {\n return (\n <div class=\"s-verify-body\" ref={body => this.body = body}>\n <div class=\"s-verify-message\" innerHTML={salla.lang.get('pages.profile.verify_message')} />\n <slot name=\"mobile\" />\n <slot name=\"email\" />\n <input type=\"hidden\" name=\"code\" maxlength=\"4\" required ref={code => this.code = code} />\n <div class=\"s-verify-codes\" dir=\"ltr\">\n {[1, 2, 3, 4].map((i) => <input type=\"number\" autocomplete=\"one-time-code\" pattern=\"[0-9]*\" inputmode=\"numeric\"\n maxlength=\"1\" value=\"\" id={`otp-${i}`} class=\"s-verify-input\"\n onInput={e => this.handleInput(e)}\n onPaste={e => this.handlePaste(e)}\n onKeyUp={e => this.handleKeyUp(e)}\n onFocus={e => this.handleFocus(e)}\n required />)}\n </div>\n <div slot=\"footer\" class=\"s-verify-footer\">\n <salla-button class=\"s-verify-submit\" loader-position='center' disabled={true}\n onClick={() => this.submit()}\n ref={b => this.btn = b}>\n {salla.lang.get('pages.profile.verify')}\n </salla-button>\n <p class=\"s-verify-resend-message\" ref={el => this.resendMessage = el}>\n {salla.lang.get('blocks.header.resend_after')}\n <b class=\"s-verify-timer\" ref={el => this.timer = el}></b></p>\n <a href=\"#\" class=\"s-verify-resend\" onClick={() => this.resendCode()}\n ref={el => this.resend = el}>{salla.lang.get('blocks.comments.submit')}</a>\n </div>\n <slot name=\"after-footer\" />\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"salla-verify.js","sourceRoot":"","sources":["../../../src/components/salla-verify/salla-verify.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Element, Event, EventEmitter, h, Method, Prop, State } from '@stencil/core';\nimport AndroidPhoneIcon from '../../assets/svg/android-phone.svg';\nimport MailIcon from '../../assets/svg/mail.svg';\n\n/**\n * @slot footer - Replaces the footer, by default it contains: verify button, resend, and timer\n * @slot after-footer - placeholder position\n */\n@Component({ tag: 'salla-verify', styleUrl: 'salla-verify.scss' })\n\nexport class SallaVerify {\n constructor() {\n salla.lang.onLoaded(() => {\n this.translationLoaded = true;\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + this.type);\n this.modal?.setTitle(this.title);\n });\n\n if (this.display == 'inline') {\n this.modal = { open: () => '', close: () => '', setTitle: () => '' };\n return;\n }\n\n //todo:: change this way, now we fire the event from the backend, we should listen to salla.profile.event.onUpdated\n salla.event.on('profile::verification', data => {\n let payload = Array.isArray(data) ? data[0] : data;\n this.isProfileVerify = true;\n this.open(payload);\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + payload.type);\n this.modal?.setTitle(this.title);\n });\n\n salla.event.on('modalClosed', () => {\n this.resendAfter = 0;\n this.timer.innerHTML = '30 : 00';\n });\n\n }\n\n private modal: HTMLSallaModalElement | any;\n private body: HTMLDivElement;\n private code: HTMLInputElement;\n private btn: HTMLSallaButtonElement;\n private resendMessage: HTMLParagraphElement;\n private timer: HTMLElement;\n private resend: HTMLAnchorElement;\n private otpInputs: NodeListOf<HTMLInputElement>;\n private firstOtpInput: HTMLInputElement;\n private data: { type: 'mobile' | 'email', phone?: string, country_code?: string, email?: string };\n\n @State() translationLoaded: boolean = false;\n\n @Element() host: HTMLElement;\n /**\n * Should render component without modal\n */\n @Prop() display: 'inline' | 'modal' = 'modal';\n\n /**\n * Verifying method\n */\n @Prop({ mutable: true }) type: 'mobile' | 'email' = 'mobile';\n /**\n * should auto reloading the page after success verification\n */\n @Prop() autoReload: boolean = true;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop() supportWebAuth: boolean = true;\n\n /**\n * Event when success verification\n */\n @Event() verified: EventEmitter;\n\n @State() title: string;\n\n @State() resendAfter: number = 30;\n @State() hasError: boolean;\n @State() errorMessage: string;\n /**\n * to use: `salla.api.auth.verify` or `salla.profile.verify`\n */\n @State() isProfileVerify: boolean = false;\n\n private splitNumber(e) {\n this.resetError();\n let data = e.data || e.target.value; // Chrome doesn't get the e.data, it's always empty, fallback to value then.\n if (!data) return; // Shouldn't happen, just in case.\n if (data.length === 1) return; // Here is a normal behavior, not a paste action.\n this.modifyNext(e.target, data);\n }\n\n private modifyNext(el, data) {\n el.value = data[0]; // Apply first item to first input\n data = data.substring(1); // remove the first char.\n if (el.nextElementSibling && data.length) {\n // Do the same with the next element and next data\n this.modifyNext(el.nextElementSibling, data);\n }\n };\n\n private checkAllInputs() {\n let allFilled = true;\n for (let i = 0; i < this.otpInputs.length; i++) {\n if (this.otpInputs[i].value === '') {\n allFilled = false;\n }\n }\n return allFilled;\n }\n\n private handleKeyUp(ev) {\n this.resetError();\n if (['Alt', 'Shift', 'Control', 'AltGraph', 'Ctrl'].includes(ev.key)) {\n return;\n }\n let key = ev.keyCode || ev.charCode;\n if (ev.target.value) {\n ev.target.nextElementSibling?.focus();\n ev.target.nextElementSibling?.select();\n } else if ([8, 46].includes(key)) {\n ev.target.previousElementSibling?.focus();\n ev.target.previousElementSibling?.select();\n }\n // If the target is populated to quickly, value length can be > 1\n if (ev.target.value.length > 1) {\n this.splitNumber(ev);\n }\n }\n\n private handlePaste(ev) {\n this.resetError();\n let text = salla.helpers.number(ev.clipboardData.getData('text'))\n .replace(/[^0-9.]/g, '')\n .replace('..', '.');\n this.otpInputs.forEach((input, i) => input.value = text[i] || '');\n // this.toggleOTPSubmit();\n setTimeout(() => this.otpInputs[3].focus(), 100);\n }\n\n private handleInput(ev) {\n this.resetError();\n salla.helpers.inputDigitsOnly(ev.target)\n // check if all otpInputs has values then send the request\n if (this.checkAllInputs()) {\n setTimeout(() => {\n this.toggleOTPSubmit();\n }, 100);\n }\n }\n\n private resetError() {\n this.hasError = false;\n this.errorMessage = '';\n }\n private handleFocus(ev) {\n // If the focus element is the first one, do nothing\n if (ev.target === this.firstOtpInput) return;\n // If value of input 1 is empty, focus it.\n if (this.firstOtpInput?.value == '') {\n this.firstOtpInput.focus();\n }\n // If value of a previous input is empty, focus it.\n // To remove if you don't wanna force user respecting the fields order.\n if (ev.target.previousElementSibling.value == '') {\n ev.target.previousElementSibling.focus();\n }\n }\n\n /**\n * Get current code\n * @return {string}\n */\n @Method()\n async getCode() {\n return this.code.value;\n }\n\n /**\n * Open verifying modal\n * @param data\n */\n @Method()\n async open(data) {\n this.data = data;\n this.data.type = this.data.type || this.type;\n this.type = this.data.type;\n this.resendTimer();\n this.otpInputs = this.body.querySelectorAll('.s-verify-input');\n this.firstOtpInput = this.body.querySelector('#otp-1');\n this.reset();\n this.resetError();\n this.display == 'modal' && this.modal?.setTitle(this.title);\n this.modal.open();\n this.firstOtpInput?.addEventListener('input', e => this.splitNumber(e));\n // focus the first input after opening the modal\n setTimeout(() => this.otpInputs[0].focus(), 100);\n }\n\n private toggleOTPSubmit() {\n let otp = []\n this.otpInputs.forEach(input => input.value && otp.push(input.value));\n\n this.code.value = otp.join('');\n\n if (otp.length === 4) {\n this.btn.disable()\n this.btn.click();\n return;\n }\n\n this.btn.enable()\n }\n\n private reset() {\n this.otpInputs.forEach((input) => input.value = '');\n this.code.value = '';\n this.otpInputs[0].focus();\n }\n\n private resendTimer() {\n this.resendMessage.style.display = 'block';\n this.resend.style.display = 'none';\n this.resendAfter = 30;\n\n let timerId = setInterval(() => {\n if (this.resendAfter <= 0) {\n clearInterval(timerId);\n this.resend.style.display = 'block';\n this.resendMessage.style.display = 'none';\n } else {\n this.timer.innerHTML = `${this.resendAfter >= 10 ? this.resendAfter : '0' + this.resendAfter} : 00`;\n this.resendAfter--;\n }\n }, 1000);\n }\n\n private resendCode() {\n return this.btn.stop()\n .then(() => this.btn.disable())\n .then(() => {\n this.otpInputs.forEach(input => input.value = '');\n this.otpInputs[0].focus();\n })\n .then(() => salla.api.auth.resend(this.data))\n .finally(() => this.resendTimer());\n }\n\n private submit() {\n //if code not 4 digits, focus on the after filled input,\n if (this.code.value.length < 4) {\n this.otpInputs[this.code.value.length].focus();\n salla.log('Trying to submit without 4 digits!');\n return;\n }\n\n let data = { code: this.code.value, ...this.data };\n\n return this.btn.load()\n .then(() => this.btn.disable())\n .then(() => this.isProfileVerify ? salla.profile.verify(data) : salla.auth.verify(data, this.supportWebAuth))\n .then(response => this.verified.emit(response))\n .then(() => this.btn.stop() && this.btn.disable())\n .then(() => this.modal.close())\n .then(() => this.autoReload && window.location.reload())\n .catch((error) => {\n this.hasError = true;\n this.errorMessage = error.response.data?.error?.message;\n salla.logger.error(error);\n this.btn.stop() && this.btn.enable() && this.reset()\n });\n }\n\n render() {\n return this.display == 'inline' ? <Host>{this.myBody()}</Host> :\n <salla-modal width=\"xs\" class=\"s-verify\" ref={modal => this.modal = modal}\n modal-title={this.title}>\n <span slot='icon' class=\"s-verify-header-icon\" innerHTML={this.type == \"mobile\" ? AndroidPhoneIcon : MailIcon}></span>\n {this.myBody()}\n </salla-modal>;\n }\n\n\n private myBody() {\n return (\n <div class=\"s-verify-body\" ref={body => this.body = body}>\n <div class=\"s-verify-message\" innerHTML={salla.lang.get('pages.profile.verify_message')} />\n <slot name=\"mobile\" />\n <slot name=\"email\" />\n <input type=\"hidden\" name=\"code\" maxlength=\"4\" required ref={code => this.code = code} />\n <div class={{\"s-verify-codes\": true, \"has-error\": this.hasError}} dir=\"ltr\">\n {[1, 2, 3, 4].map((i) => <input type=\"number\" autocomplete=\"one-time-code\" pattern=\"[0-9]*\" inputmode=\"numeric\"\n maxlength=\"1\" value=\"\" id={`otp-${i}`} class={{\"s-verify-input\": true, \"s-has-error\": this.hasError}}\n onInput={e => this.handleInput(e)}\n onPaste={e => this.handlePaste(e)}\n onKeyUp={e => this.handleKeyUp(e)}\n onFocus={e => this.handleFocus(e)}\n required />)}\n </div>\n {this.hasError && this.errorMessage ? <span class=\"s-verify-error-message\">\n {this.errorMessage}\n </span> : ''}\n <div slot=\"footer\" class=\"s-verify-footer\">\n <salla-button class=\"s-verify-submit\" loader-position='center' disabled={true}\n onClick={() => this.submit()}\n ref={b => this.btn = b}>\n {salla.lang.get('pages.profile.verify')}\n </salla-button>\n <p class=\"s-verify-resend-message\" ref={el => this.resendMessage = el}>\n {salla.lang.get('blocks.header.resend_after')}\n <b class=\"s-verify-timer\" ref={el => this.timer = el}></b></p>\n <a href=\"javascript:void(0);\" class=\"s-verify-resend\" onClick={() => this.resendCode()}\n ref={el => this.resend = el}>{salla.lang.get('blocks.comments.submit')}</a>\n </div>\n <slot name=\"after-footer\" />\n </div>\n );\n }\n}\n"]}
|
|
@@ -43,6 +43,8 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
|
|
|
43
43
|
const error = e.target.nextElementSibling;
|
|
44
44
|
e.target.classList.remove('s-has-error');
|
|
45
45
|
(error === null || error === void 0 ? void 0 : error.classList.contains('s-login-modal-error-message')) && (error.innerText = '');
|
|
46
|
+
this.hasError = false;
|
|
47
|
+
this.errorMessage = '';
|
|
46
48
|
//it was sending two requests for send two verification requests
|
|
47
49
|
submitMethod && e.key == 'Enter' && submitMethod();
|
|
48
50
|
};
|
|
@@ -60,7 +62,9 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
|
|
|
60
62
|
this.loginByEmail = (event = null) => {
|
|
61
63
|
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
62
64
|
if (!Helper.isValidEmail(this.loginEmail.value)) {
|
|
63
|
-
this.validateField(this.loginEmail, this.emailErrorMsg);
|
|
65
|
+
// this.validateField(this.loginEmail, this.emailErrorMsg);
|
|
66
|
+
this.hasError = true;
|
|
67
|
+
this.errorMessage = '* ' + this.emailErrorMsg;
|
|
64
68
|
return;
|
|
65
69
|
}
|
|
66
70
|
this.currentEmail = this.loginEmail.value;
|
|
@@ -104,6 +108,8 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
|
|
|
104
108
|
this.emailErrorMsg = undefined;
|
|
105
109
|
this.firstNameErrorMsg = undefined;
|
|
106
110
|
this.lastNameErrorMsg = undefined;
|
|
111
|
+
this.hasError = undefined;
|
|
112
|
+
this.errorMessage = undefined;
|
|
107
113
|
this.dragAndDrop = salla.lang.get('common.uploader.drag_and_drop');
|
|
108
114
|
this.browseFromFiles = salla.lang.get('common.uploader.browse');
|
|
109
115
|
this.customFields = [];
|
|
@@ -230,6 +236,8 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
|
|
|
230
236
|
showTab(tab, evt) {
|
|
231
237
|
var _a;
|
|
232
238
|
evt === null || evt === void 0 ? void 0 : evt.preventDefault();
|
|
239
|
+
this.hasError = false;
|
|
240
|
+
this.errorMessage = '';
|
|
233
241
|
this.currentTabName = tab.getAttribute('data-name');
|
|
234
242
|
// todo:: use better way for resize the modal
|
|
235
243
|
// setTimeout(() => this.modal.querySelector('.s-login-modal-wrapper')?.setAttribute('style', 'height:' + tab?.scrollHeight + 'px'));
|
|
@@ -247,11 +255,18 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
|
|
|
247
255
|
return this;
|
|
248
256
|
}
|
|
249
257
|
login(btn, data) {
|
|
258
|
+
this.hasError = false;
|
|
259
|
+
this.errorMessage = '';
|
|
250
260
|
btn.load()
|
|
251
261
|
.then(() => btn.disable())
|
|
252
262
|
.then(() => salla.auth.api.login(data))
|
|
253
263
|
.then(() => this.showTab(this.verifyTab))
|
|
254
264
|
.then(() => this.verifyTab.open(data))
|
|
265
|
+
.catch((error) => {
|
|
266
|
+
var _a, _b;
|
|
267
|
+
this.hasError = true;
|
|
268
|
+
this.errorMessage = (_b = (_a = error.response.data) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.message;
|
|
269
|
+
})
|
|
255
270
|
.finally(() => btn.stop() && btn.enable());
|
|
256
271
|
}
|
|
257
272
|
async newUserValidation() {
|
|
@@ -301,11 +316,11 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
|
|
|
301
316
|
}
|
|
302
317
|
getLoginDom() {
|
|
303
318
|
return [!this.inline && h("span", { slot: 'icon', class: "s-login-modal-header-icon", innerHTML: UserIcon }), h("div", { class: this.inline ? 's-login-inline' : 's-login-modal-wrapper' }, this.isMobileAllowed ?
|
|
304
|
-
h("div", { class: this.generateTabClasses('login-phone'), "data-name": "login-phone", ref: tab => this.mobileTab = tab }, h("slot", { name: "before-login-mobile" }), h("form", { onSubmit: (event) => this.loginBySMS(event), method: "POST" }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.mobile')), h("salla-tel-input", { tabindex: "0", ref: el => this.loginTelInput = el, onKeyDown: e => this.typing(e) }), h("salla-button", { class: "s-login-modal-enter-button", type: "submit", "loader-position": 'center', width: "wide", ref: b => this.smsBtn = b }, salla.lang.get('blocks.header.enter'))), this.isEmailAllowed ?
|
|
305
|
-
h("a", { href: "
|
|
306
|
-
h("div", { class: this.generateTabClasses('login-email'), "data-name": "login-email", ref: tab => this.emailTab = tab }, h("slot", { name: "before-login-email" }), h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.email')), h("form", { onSubmit: () => this.loginByEmail(event), method: "POST" }, h("input", { type: "email", ref: el => this.loginEmail = el, onKeyDown: e => this.typing(e), placeholder: "your@email.com", enterkeyhint: "next", class: "s-login-modal-input s-ltr" }), h("span", { class: "s-login-modal-error-message" }), h("salla-button", { "loader-position": 'center', width: "wide", onClick: () => this.loginByEmail(), ref: b => this.emailBtn = b }, salla.lang.get('blocks.header.enter'))), this.isMobileAllowed ?
|
|
307
|
-
h("a", { href: "
|
|
308
|
-
: '', h("slot", { name: "after-login-email" })) : '', h("salla-verify", { display: "inline", "support-web-auth": this.supportWebAuth ? 'true' : 'false', class: this.generateTabClasses('otp'), "data-name": "otp", ref: tab => this.verifyTab = tab, autoReload: false }, h("a", { onClick: () => this.showTab(this.regType == 'phone' ? this.mobileTab : this.emailTab), class: "s-verify-back", innerHTML: ArrowRightIcon, slot: "after-footer", href: "
|
|
319
|
+
h("div", { class: this.generateTabClasses('login-phone'), "data-name": "login-phone", ref: tab => this.mobileTab = tab }, h("slot", { name: "before-login-mobile" }), h("form", { onSubmit: (event) => this.loginBySMS(event), class: this.hasError && this.errorMessage ? 'has-error' : '', method: "POST" }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.mobile')), h("salla-tel-input", { tabindex: "0", ref: el => this.loginTelInput = el, onKeyDown: e => this.typing(e) }), this.hasError && this.errorMessage ? h("span", { class: "s-login-modal-error-message" }, this.errorMessage) : '', h("salla-button", { class: "s-login-modal-enter-button", type: "submit", "loader-position": 'center', width: "wide", ref: b => this.smsBtn = b }, salla.lang.get('blocks.header.enter'))), this.isEmailAllowed ?
|
|
320
|
+
h("a", { href: "javascript:void(0);", onClick: () => this.showTab(this.emailTab), class: "s-login-modal-link" }, salla.lang.get('blocks.header.login_by_email')) : '', h("slot", { name: "after-login-mobile" })) : '', this.isEmailAllowed ?
|
|
321
|
+
h("div", { class: this.generateTabClasses('login-email'), "data-name": "login-email", ref: tab => this.emailTab = tab }, h("slot", { name: "before-login-email" }), h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.email')), h("form", { onSubmit: () => this.loginByEmail(event), method: "POST" }, h("input", { type: "email", ref: el => this.loginEmail = el, onKeyDown: e => this.typing(e), placeholder: "your@email.com", enterkeyhint: "next", class: { "s-login-modal-input s-ltr": true, "s-has-error": this.hasError } }), this.hasError && this.errorMessage ? h("span", { class: "s-login-modal-error-message" }, this.errorMessage) : '', h("salla-button", { class: "s-login-modal-enter-button", "loader-position": 'center', width: "wide", onClick: () => this.loginByEmail(), ref: b => this.emailBtn = b }, salla.lang.get('blocks.header.enter'))), this.isMobileAllowed ?
|
|
322
|
+
h("a", { href: "javascript:void(0);", onClick: () => this.showTab(this.mobileTab), class: "s-login-modal-link" }, salla.lang.get('blocks.header.login_by_sms'))
|
|
323
|
+
: '', h("slot", { name: "after-login-email" })) : '', h("salla-verify", { display: "inline", "support-web-auth": this.supportWebAuth ? 'true' : 'false', class: this.generateTabClasses('otp'), "data-name": "otp", ref: tab => this.verifyTab = tab, autoReload: false }, h("a", { onClick: () => this.showTab(this.regType == 'phone' ? this.mobileTab : this.emailTab), class: "s-verify-back", innerHTML: ArrowRightIcon, slot: "after-footer", href: "javascript:void(0);" }), this.isMobileAllowed && this.regType == 'phone' ? h("div", { dir: "ltr", class: "s-login-modal-currentPhone", slot: "mobile" }, this.currentPhone) : '', this.isEmailAllowed && this.regType == 'email' ? h("div", { dir: "ltr", class: "s-login-modal-currentEmail", slot: "email" }, this.currentEmail) : ''), h("div", { "data-name": "registration", class: this.generateTabClasses('registration'), ref: tab => this.registrationTab = tab }, h("slot", { name: "before-registration" }), h("div", null, h("label", { class: "s-login-modal-label" }, salla.lang.get('blocks.header.your_name')), h("input", { type: "text", class: "s-login-modal-input", ref: el => this.firstName = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: salla.lang.get('pages.profile.first_name') }), h("span", { class: "s-login-modal-error-message" })), h("div", null, h("label", { class: "s-login-modal-label" }, salla.lang.get('pages.profile.last_name')), h("input", { type: "text", class: "s-login-modal-input", ref: el => this.lastName = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: salla.lang.get('pages.profile.last_name') }), h("span", { class: "s-login-modal-error-message" })), h("div", { class: this.generateRegClasses('phone') }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.mobile')), h("salla-tel-input", { ref: el => this.regTelInput = el, onKeyDown: e => this.typing(e, this.newUser) })), h("div", { class: this.generateRegClasses('email') }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.email')), h("input", { type: "email", ref: el => this.regEmail = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: "your@email.com", class: "s-login-modal-input s-ltr" }), h("span", { class: "s-login-modal-error-message" })), h("div", { class: "s-login-modal-custom-fields", ref: el => this.customFieldsWrapper = el }, this.customFields.map((field) => [
|
|
309
324
|
h("label", { class: "s-login-modal-label" }, field.label),
|
|
310
325
|
field.type === CustomFieldType.PHOTO
|
|
311
326
|
? h("salla-file-upload", { name: "image", "instant-upload": true, id: `${field.id}`, title: field.label, required: field.required, url: salla.url.get('upload-image'),
|
|
@@ -341,6 +356,8 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
|
|
|
341
356
|
"emailErrorMsg": [32],
|
|
342
357
|
"firstNameErrorMsg": [32],
|
|
343
358
|
"lastNameErrorMsg": [32],
|
|
359
|
+
"hasError": [32],
|
|
360
|
+
"errorMessage": [32],
|
|
344
361
|
"dragAndDrop": [32],
|
|
345
362
|
"browseFromFiles": [32],
|
|
346
363
|
"customFields": [32],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"salla-login-modal.js","mappings":"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","names":["SallaLoginModal"],"sources":["src/components/salla-login-modal/intefaces.ts","src/components/salla-login-modal/salla-login-modal.scss?tag=salla-login-modal","src/components/salla-login-modal/salla-login-modal.tsx"],"sourcesContent":["export interface CustomField {\n id: number;\n label: string;\n description: string;\n type: string;\n required: boolean;\n length: number;\n}\n\nexport enum CustomFieldType {\n TEXT = 'text',\n NUMBER = 'number',\n PHOTO = 'photo'\n}\n","/*\n* Salla Login Component: login popup modal\n* You can use these classes to target the elements in the component.\n*/\n\n.s-login-modal {\n &-sub-title {\n\n }\n &-main-btn {\n \n }\n &-main-btn-icon {\n\n }\n &-main-btn-text {\n\n }\n &-main-btn-arrow {\n\n }\n &-label {\n\n }\n &-input {\n\n }\n &-otp-input {\n\n }\n &-link {\n\n }\n &-error-message {\n\n }\n &-wrapper {\n\n }\n &-tab {\n\n }\n &-active {\n\n }\n &-unactive {\n\n }\n}\n","import { Component, Element, h, Listen, Method, Prop, State } from '@stencil/core';\nimport UserIcon from \"../../assets/svg/user.svg\";\n//import PhoneIcon from \"../../assets/svg/phone.svg\";\n//import EmailIcon from \"../../assets/svg/mail.svg\";\nimport CameraIcon from '../../assets/svg/camera.svg';\n//import KeyboardArrowRightIcon from \"../../assets/svg/keyboard_arrow_right.svg\";\nimport ArrowRightIcon from \"../../assets/svg/arrow-right.svg\";\nimport Helper from '../../Helpers/Helper';\nimport { CustomField, CustomFieldType } from './intefaces';\n\n/**\n * @slot footer - The footer of modal\n * @slot before-login-type - placeholder position\n * @slot after-login-type - placeholder position\n * @slot before-login-mobile - placeholder position\n * @slot after-login-mobile - placeholder position\n * @slot before-login-email - placeholder position\n * @slot after-login-email - placeholder position\n * @slot before-registration - placeholder position\n * @slot after-registration - placeholder position\n */\n@Component({\n tag: 'salla-login-modal',\n styleUrl: 'salla-login-modal.scss'\n})\n\n\nexport class SallaLoginModal {\n constructor() {\n\n this.title = this.host.title || salla.lang.get('blocks.header.login');\n this.host.removeAttribute('title');\n\n this.emailErrorMsg = salla.lang.get('common.elements.email_is_valid');\n this.firstNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.first_name') });\n this.lastNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.last_name') });\n\n salla.lang.onLoaded(() => {\n this.translationLoaded = true;\n this.title = salla.lang.get('blocks.header.login');\n this.dragAndDrop = salla.lang.get('common.uploader.drag_and_drop');\n this.browseFromFiles = salla.lang.get('common.uploader.browse');\n this.updateTranslations();\n });\n\n salla.event.on('login::open', (data) => {\n if(!this.isEmailAllowed && !this.isMobileAllowed){\n salla.logger.warn('Please enable atleast one login type to use this component.');\n return;\n }\n this.withoutReload = data?.withoutReload ?? this.withoutReload;\n this.open(data)\n });\n salla.onReady( () => {\n this.isEmailAllowed = salla.config.get('store.settings.auth.email_allowed', this.isEmailAllowed);\n this.isMobileAllowed = salla.config.get('store.settings.auth.mobile_allowed', this.isMobileAllowed);\n this.isEmailRequired = salla.config.get('store.settings.auth.is_email_required', this.isEmailRequired);\n });\n }\n\n @Element() host: HTMLElement;\n /**\n * Does the merchant allow to login using email\n */\n @Prop({ mutable: true }) isEmailAllowed: boolean;\n /**\n * Does the merchant/current location for visitor allow to login using mobile, By default outside KSA is `false`\n */\n @Prop({ mutable: true }) isMobileAllowed: boolean = true;\n /**\n * Does the merchant require registration with email & mobile\n */\n @Prop({ mutable: true }) isEmailRequired: boolean = false;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop({ reflect: true }) supportWebAuth: boolean = true;\n\n /**\n * Display the login inline\n */\n @Prop({ reflect: true }) inline: boolean;\n\n\n /**\n * Reload after a successful login\n */\n @Prop() withoutReload: boolean = false;\n\n private modal: HTMLSallaModalElement;\n //private homeTab: HTMLDivElement;\n private mobileTab: HTMLDivElement;\n private emailTab: HTMLDivElement;\n private verifyTab: HTMLSallaVerifyElement;\n private registrationTab: HTMLDivElement;\n private regTelInput: HTMLSallaTelInputElement;\n private regEmail: HTMLInputElement;\n private customFieldsWrapper: HTMLDivElement;\n private loginTelInput: HTMLSallaTelInputElement;\n private loginEmail: HTMLInputElement;\n private firstName: HTMLInputElement;\n private lastName: HTMLInputElement;\n private smsBtn: HTMLSallaButtonElement;\n private emailBtn: HTMLSallaButtonElement;\n private regBtn: HTMLSallaButtonElement;\n\n @State() currentTabName = 'home'\n @State() regType: 'phone' | 'email' = 'phone';\n\n\n @State() translationLoaded: boolean = false;\n @State() currentPhone: string = '';\n @State() currentEmail: string = '';\n @State() title: string;\n @State() emailErrorMsg: string;\n @State() firstNameErrorMsg: string;\n @State() lastNameErrorMsg: string;\n\n @State() dragAndDrop: string = salla.lang.get('common.uploader.drag_and_drop');\n @State() browseFromFiles: string = salla.lang.get('common.uploader.browse');\n @State() customFields: CustomField[] = [];\n\n private customFieldsValues: Object = {};\n @State() uploadedImage: string = undefined;\n\n @Listen('verified', { target: 'window' })\n /**\n * @param {CustomEvent|{details:{case:'new_customer'|'authenticated', redirect_url:string|null}}} event\n */\n onVerified(event) {\n salla.log('verified', event);\n //there is a case when force login is activated & is new user, it will return case inside error key., so cover it.\n let verifyCase = event.detail?.data.case || event.detail?.error.case;\n if (!verifyCase) {\n salla.log('verified but without case!');\n return;\n }\n\n if (verifyCase === \"new_customer\") {\n this.customFields = event.detail?.data?.custom_fields || [];\n return this.showTab(this.registrationTab);\n }\n\n if (!salla.auth.canRedirect()) {\n salla.log('Will not auto redirect or reload, due to `salla.auth.canRedirect()`');\n if (this.inline) {\n return;\n }\n this.modal.close();\n return;\n }\n\n if (event.detail.data.redirect_url) {\n return window.location.href = event.detail.data.redirect_url;\n }\n\n /**\n * we don't want to reload the page if this is not web auth\n * because we'll need the token in the page itself and its there\n * todo :: store the user data in storage for non-web auth and set the config.user from it\n */\n if (this.supportWebAuth && !this.withoutReload) {\n window.location.reload();\n } else {\n if (this.inline) {\n return;\n }\n this.modal.close();\n }\n }\n\n updateTranslations() {\n this.emailErrorMsg = salla.lang.get('common.elements.email_is_valid');\n this.firstNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.first_name') });\n this.lastNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.last_name') });\n if (this.inline) {\n return;\n }\n this.modal?.setTitle(this.title);\n }\n componentDidLoad() {\n if (this.inline) {\n this.getSelectedTab()\n }\n }\n /**\n * Open login component\n */\n @Method()\n // @ts-ignore\n async open(event = null) {\n // todo :: support change the settings from event details\n // if(event && event.hasOwnProperty('isEmailAllowed')){\n // this.isEmailAllowed = event?.isEmailAllowed;\n // }\n //\n // if(event && event.hasOwnProperty('isMobileAllowed')){\n // this.isMobileAllowed = event?.isMobileAllowed;\n // }\n\n /**\n * This is a workaround until we remove all the user objet from twig files\n * When the user is already login, let's reload the page\n */\n if (!salla.config.isGuest()) {\n if (!this.withoutReload) {\n return location.reload();\n }\n // Fire an event if withoutReload is true\n return;\n }\n\n this.getSelectedTab();\n return this.modal.open();\n }\n private getSelectedTab() {\n if (this.isMobileAllowed) {\n this.showTab(this.mobileTab);\n } else if (this.isEmailAllowed) {\n this.showTab(this.emailTab);\n }\n }\n private showTab(tab, evt?) {\n evt?.preventDefault();\n this.currentTabName = tab.getAttribute('data-name');\n\n // todo:: use better way for resize the modal\n // setTimeout(() => this.modal.querySelector('.s-login-modal-wrapper')?.setAttribute('style', 'height:' + tab?.scrollHeight + 'px'));\n\n if ([this.mobileTab, this.emailTab].includes(tab)) {\n this.regType = tab === this.mobileTab ? 'phone' : 'email';\n }\n\n const input = tab.querySelector('input[type=\"tel\"], input[type=\"email\"]');\n input && setTimeout(() => {\n input.focus();\n }, 100);\n if (this.inline) {\n return this;\n }\n this.modal?.setTitle(this.currentTabName === 'registration' ? salla.lang.get('common.titles.registration') : this.title);\n\n return this;\n }\n\n private typing = (e, submitMethod = null) => {\n const error = e.target.nextElementSibling;\n e.target.classList.remove('s-has-error');\n error?.classList.contains('s-login-modal-error-message') && (error.innerText = '');\n //it was sending two requests for send two verification requests\n submitMethod && e.key == 'Enter' && submitMethod();\n }\n\n private loginBySMS = async (event = null) => {\n event?.preventDefault();\n const { phone, countryCode, countryKey } = await this.loginTelInput.getValues();\n const isPhoneValid = await this.loginTelInput.isValid();\n if (!isPhoneValid) {\n return;\n }\n this.currentPhone = `${countryKey} ${phone}`;\n this.login(this.smsBtn, { type: 'mobile', phone: phone, country_code: countryCode });\n\n return false;\n }\n\n private loginByEmail = (event = null) => {\n event?.preventDefault();\n if (!Helper.isValidEmail(this.loginEmail.value)) {\n this.validateField(this.loginEmail, this.emailErrorMsg);\n return;\n }\n this.currentEmail = this.loginEmail.value;\n this.login(this.emailBtn, { type: 'email', email: this.loginEmail.value });\n }\n\n private login(btn: HTMLSallaButtonElement, data) {\n btn.load()\n .then(() => btn.disable())\n .then(() => salla.auth.api.login(data))\n .then(() => this.showTab(this.verifyTab))\n .then(() => this.verifyTab.open(data))\n .finally(() => btn.stop() && btn.enable());\n }\n\n private newUser = async () => {\n const {\n phone: regPhone,\n countryCode\n } = this.regType == \"email\" ? await this.regTelInput.getValues() : await this.loginTelInput.getValues(),\n emailValue = this.regEmail.value || this.loginEmail?.value\n await this.newUserValidation();\n await this.regBtn.load();\n await this.regBtn.disable();\n\n let data: any = {\n first_name: this.firstName.value,\n last_name: this.lastName.value,\n phone: regPhone || this.loginTelInput.phone,\n country_code: countryCode,\n verified_by: this.regType,\n custom_fields: this.customFieldsValues,\n };\n emailValue && (data = { ...data, email: emailValue });\n this.verifyTab.getCode()\n .then(code => salla.auth.api.register({...data, code}))\n .then(() => salla.auth.canRedirect && !this.withoutReload && window.location.reload())\n .catch((error) => {\n salla.logger.error(error);\n this.regBtn.stop() && this.regBtn.enable()\n })\n }\n\n private async newUserValidation() {\n const isLogByPhone = this.regType == \"phone\",\n isLogByEmail = this.regType == \"email\",\n emailValue = this.regEmail.value || (isLogByEmail && this.loginEmail.value),\n isEmailValid = Helper.isValidEmail(emailValue),\n isFirstNameValid = this.firstName.value.length > 0,\n isLastNameValid = this.lastName.value.length > 0,\n isPhoneValid = await this.regTelInput.isValid() || isLogByPhone && await this.loginTelInput.isValid(),\n emailValidation = (emailValue && isEmailValid) || (!emailValue && !this.isEmailRequired);\n\n // Custom Fields Validation\n var isCustomFieldValid = true;\n //we should make sure that there is text nodes between children\n this.customFieldsWrapper.childNodes\n .forEach((field: HTMLSallaFileUploadElement | HTMLInputElement) => {\n this.customFieldsValues[field.id] = field['value'];\n if (!field.required || this.customFieldsValues[field.id].length) {\n return;\n }\n isCustomFieldValid = false;\n const errorMsg: string = salla.lang.get('common.errors.field_required', { attribute: field.title });\n this.validateField(field, errorMsg)\n });\n\n if (emailValidation && isPhoneValid && isFirstNameValid && isLastNameValid && isCustomFieldValid) return;\n !isEmailValid && this.validateField(this.regEmail, this.emailErrorMsg);\n !isFirstNameValid && this.validateField(this.firstName, this.firstNameErrorMsg);\n !isLastNameValid && this.validateField(this.lastName, this.lastNameErrorMsg);\n throw 'Please insert required fields';\n }\n\n private getFilepondPlaceholder() {\n return `<div class=\"s-login-modal-filepond-placeholder\"><span class=\"s-login-modal-filepond-placeholder-icon\">${CameraIcon}</span><p class=\"s-login-modal-filepond-placeholder-text\">${this.dragAndDrop}</p> <span class=\"filepond--label-action\">${this.browseFromFiles}</span></div>`\n }\n\n // eslint-disable-next-line @stencil/own-methods-must-be-private\n validateField(field: HTMLInputElement | HTMLSallaFileUploadElement, errorMsg: string) {\n field.classList.add('s-has-error');\n field.nextElementSibling['innerText'] = '* ' + errorMsg;\n }\n\n generateTabClasses(tabName) {\n return {\n 's-login-modal-tab': tabName !== 'registration' && tabName !== 'otp',\n \"s-hidden\": this.currentTabName !== tabName,\n \"s-show\": this.currentTabName === tabName,\n 's-login-modal-unactive': tabName !== 'registration' && tabName !== 'otp' && this.currentTabName !== tabName,\n 's-login-modal-active': tabName !== 'registration' && tabName !== 'otp' && this.currentTabName === tabName\n }\n }\n\n generateRegClasses(regType) {\n return {\n \"mb-1.5\": true,\n \"s-hidden\": this.regType === regType\n }\n }\n private getLoginDom() {\n return [!this.inline && <span slot='icon' class=\"s-login-modal-header-icon\" innerHTML={UserIcon} />,\n <div class={this.inline ? 's-login-inline' : 's-login-modal-wrapper'}>\n {/* Tab 2 (Login By Mobile)*/}\n {this.isMobileAllowed ?\n <div class={this.generateTabClasses('login-phone')} data-name=\"login-phone\"\n ref={tab => this.mobileTab = tab}>\n <slot name=\"before-login-mobile\" />\n <form onSubmit={(event) => this.loginBySMS(event)} method=\"POST\">\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.mobile')}</label>\n <salla-tel-input tabindex=\"0\" ref={el => this.loginTelInput = el}\n onKeyDown={e => this.typing(e)}></salla-tel-input>\n {/* @ts-ignore */}\n <salla-button class=\"s-login-modal-enter-button\" type=\"submit\" loader-position='center' width=\"wide\" ref={b => this.smsBtn = b}>\n {salla.lang.get('blocks.header.enter')}\n </salla-button>\n </form>\n {this.isEmailAllowed ?\n <a href=\"#\" onClick={() => this.showTab(this.emailTab)}\n class=\"s-login-modal-link\">{salla.lang.get('blocks.header.login_by_email')}</a> : ''}\n <slot name=\"after-login-mobile\" />\n </div> : ''}\n\n\n {/* Tab 3 (Login By Email)*/}\n {this.isEmailAllowed ?\n <div class={this.generateTabClasses('login-email')} data-name=\"login-email\"\n ref={tab => this.emailTab = tab}>\n <slot name=\"before-login-email\" />\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.email')}</label>\n <form onSubmit={() => this.loginByEmail(event)} method=\"POST\">\n <input type=\"email\" ref={el => this.loginEmail = el} onKeyDown={e => this.typing(e)}\n placeholder=\"your@email.com\"\n enterkeyhint=\"next\"\n class=\"s-login-modal-input s-ltr\" />\n <span class=\"s-login-modal-error-message\" />\n <salla-button loader-position='center' width=\"wide\" onClick={() => this.loginByEmail()}\n ref={b => this.emailBtn = b}>{salla.lang.get('blocks.header.enter')}</salla-button>\n </form>\n {this.isMobileAllowed ?\n <a href=\"#\" onClick={() => this.showTab(this.mobileTab)}\n class=\"s-login-modal-link\">{salla.lang.get('blocks.header.login_by_sms')}</a>\n : ''\n }\n <slot name=\"after-login-email\" />\n </div> : ''}\n {/* Tab 4 (Verify OTP)*/}\n <salla-verify display=\"inline\" support-web-auth={this.supportWebAuth ? 'true' : 'false'}\n class={this.generateTabClasses('otp')} data-name=\"otp\" ref={tab => this.verifyTab = tab}\n autoReload={false}>\n <a onClick={() => this.showTab(this.regType == 'phone' ? this.mobileTab : this.emailTab)}\n class=\"s-verify-back\"\n innerHTML={ArrowRightIcon}\n slot=\"after-footer\"\n href=\"#\" />\n {this.isMobileAllowed && this.regType == 'phone' ? <div dir=\"ltr\" class=\"s-login-modal-currentPhone\" slot=\"mobile\">{this.currentPhone}</div> : ''}\n {this.isEmailAllowed && this.regType == 'email' ? <div dir=\"ltr\" class=\"s-login-modal-currentEmail\" slot=\"email\">{this.currentEmail}</div> : ''}\n </salla-verify>\n\n {/* Tab 5 (Register New User)*/}\n <div data-name=\"registration\" class={this.generateTabClasses('registration')}\n ref={tab => this.registrationTab = tab}>\n <slot name=\"before-registration\" />\n <div>\n <label class=\"s-login-modal-label\">{salla.lang.get('blocks.header.your_name')}</label>\n <input type=\"text\" class=\"s-login-modal-input\" ref={el => this.firstName = el}\n onKeyDown={e => this.typing(e, this.newUser)}\n placeholder={salla.lang.get('pages.profile.first_name')} />\n <span class=\"s-login-modal-error-message\" />\n </div>\n\n <div>\n <label class=\"s-login-modal-label\">{salla.lang.get('pages.profile.last_name')}</label>\n <input type=\"text\" class=\"s-login-modal-input\" ref={el => this.lastName = el}\n onKeyDown={e => this.typing(e, this.newUser)}\n placeholder={salla.lang.get('pages.profile.last_name')} />\n <span class=\"s-login-modal-error-message\" />\n </div>\n\n <div class={this.generateRegClasses('phone')}>\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.mobile')}</label>\n <salla-tel-input ref={el => this.regTelInput = el}\n onKeyDown={e => this.typing(e, this.newUser)}></salla-tel-input>\n </div>\n\n <div class={this.generateRegClasses('email')}>\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.email')}</label>\n <input type=\"email\" ref={el => this.regEmail = el} onKeyDown={e => this.typing(e, this.newUser)}\n placeholder=\"your@email.com\"\n class=\"s-login-modal-input s-ltr\" />\n <span class=\"s-login-modal-error-message\" />\n </div>\n <div class=\"s-login-modal-custom-fields\" ref={el => this.customFieldsWrapper = el}>{\n this.customFields.map((field: CustomField) => [\n <label class=\"s-login-modal-label\">{field.label}</label>,\n field.type === CustomFieldType.PHOTO\n ? <salla-file-upload\n name=\"image\"\n instant-upload={true}\n id={`${field.id}`}\n title={field.label}\n required={field.required}\n url={salla.url.get('upload-image')}\n // onUploaded={}\n labelIdle={this.getFilepondPlaceholder()} />\n : <input\n onInput={el => field.type == CustomFieldType.NUMBER ? salla.helpers.inputDigitsOnly(el.target) : {}}\n onKeyDown={e => this.typing(e, this.newUser)}\n class=\"s-login-modal-input s-ltr\"\n maxlength={field.length || 1000}//todo:: support it by adding the maxlength or not, not setting static limit\n placeholder={field.description}\n required={field.required}\n title={field.label}\n id={`${field.id}`}\n type=\"text\" />,\n <span class=\"s-login-modal-error-message\" />\n ])\n }</div>\n\n <salla-button loader-position='center' width=\"wide\" onClick={() => this.newUser()}\n ref={b => this.regBtn = b}>{salla.lang.get('blocks.header.register')}</salla-button>\n <slot name=\"after-registration\" />\n </div>\n </div>]\n }\n render() {\n // @ts-ignore\n // @ts-ignore\n if (this.inline) {\n return this.getLoginDom();\n }\n return (\n <salla-modal class=\"s-login-modal\" modal-title={this.title} ref={modal => this.modal = modal} width=\"xs\">\n {this.getLoginDom()}\n </salla-modal>\n );\n }\n}\n\n"],"version":3}
|
|
1
|
+
{"file":"salla-login-modal.js","mappings":"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","names":["SallaLoginModal"],"sources":["src/components/salla-login-modal/intefaces.ts","src/components/salla-login-modal/salla-login-modal.scss?tag=salla-login-modal","src/components/salla-login-modal/salla-login-modal.tsx"],"sourcesContent":["export interface CustomField {\n id: number;\n label: string;\n description: string;\n type: string;\n required: boolean;\n length: number;\n}\n\nexport enum CustomFieldType {\n TEXT = 'text',\n NUMBER = 'number',\n PHOTO = 'photo'\n}\n","/*\n* Salla Login Component: login popup modal\n* You can use these classes to target the elements in the component.\n*/\n\n.s-login-modal {\n &-sub-title {\n\n }\n &-main-btn {\n \n }\n &-main-btn-icon {\n\n }\n &-main-btn-text {\n\n }\n &-main-btn-arrow {\n\n }\n &-label {\n\n }\n &-input {\n\n }\n &-otp-input {\n\n }\n &-link {\n\n }\n &-error-message {\n\n }\n &-wrapper {\n\n }\n &-tab {\n\n }\n &-active {\n\n }\n &-unactive {\n\n }\n}\n","import { Component, Element, h, Listen, Method, Prop, State } from '@stencil/core';\nimport UserIcon from \"../../assets/svg/user.svg\";\n//import PhoneIcon from \"../../assets/svg/phone.svg\";\n//import EmailIcon from \"../../assets/svg/mail.svg\";\nimport CameraIcon from '../../assets/svg/camera.svg';\n//import KeyboardArrowRightIcon from \"../../assets/svg/keyboard_arrow_right.svg\";\nimport ArrowRightIcon from \"../../assets/svg/arrow-right.svg\";\nimport Helper from '../../Helpers/Helper';\nimport { CustomField, CustomFieldType } from './intefaces';\n\n/**\n * @slot footer - The footer of modal\n * @slot before-login-type - placeholder position\n * @slot after-login-type - placeholder position\n * @slot before-login-mobile - placeholder position\n * @slot after-login-mobile - placeholder position\n * @slot before-login-email - placeholder position\n * @slot after-login-email - placeholder position\n * @slot before-registration - placeholder position\n * @slot after-registration - placeholder position\n */\n@Component({\n tag: 'salla-login-modal',\n styleUrl: 'salla-login-modal.scss'\n})\n\n\nexport class SallaLoginModal {\n constructor() {\n\n this.title = this.host.title || salla.lang.get('blocks.header.login');\n this.host.removeAttribute('title');\n\n this.emailErrorMsg = salla.lang.get('common.elements.email_is_valid');\n this.firstNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.first_name') });\n this.lastNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.last_name') });\n\n salla.lang.onLoaded(() => {\n this.translationLoaded = true;\n this.title = salla.lang.get('blocks.header.login');\n this.dragAndDrop = salla.lang.get('common.uploader.drag_and_drop');\n this.browseFromFiles = salla.lang.get('common.uploader.browse');\n this.updateTranslations();\n });\n\n salla.event.on('login::open', (data) => {\n if(!this.isEmailAllowed && !this.isMobileAllowed){\n salla.logger.warn('Please enable atleast one login type to use this component.');\n return;\n }\n this.withoutReload = data?.withoutReload ?? this.withoutReload;\n this.open(data)\n });\n salla.onReady( () => {\n this.isEmailAllowed = salla.config.get('store.settings.auth.email_allowed', this.isEmailAllowed);\n this.isMobileAllowed = salla.config.get('store.settings.auth.mobile_allowed', this.isMobileAllowed);\n this.isEmailRequired = salla.config.get('store.settings.auth.is_email_required', this.isEmailRequired);\n });\n }\n\n @Element() host: HTMLElement;\n /**\n * Does the merchant allow to login using email\n */\n @Prop({ mutable: true }) isEmailAllowed: boolean;\n /**\n * Does the merchant/current location for visitor allow to login using mobile, By default outside KSA is `false`\n */\n @Prop({ mutable: true }) isMobileAllowed: boolean = true;\n /**\n * Does the merchant require registration with email & mobile\n */\n @Prop({ mutable: true }) isEmailRequired: boolean = false;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop({ reflect: true }) supportWebAuth: boolean = true;\n\n /**\n * Display the login inline\n */\n @Prop({ reflect: true }) inline: boolean;\n\n\n /**\n * Reload after a successful login\n */\n @Prop() withoutReload: boolean = false;\n\n private modal: HTMLSallaModalElement;\n //private homeTab: HTMLDivElement;\n private mobileTab: HTMLDivElement;\n private emailTab: HTMLDivElement;\n private verifyTab: HTMLSallaVerifyElement;\n private registrationTab: HTMLDivElement;\n private regTelInput: HTMLSallaTelInputElement;\n private regEmail: HTMLInputElement;\n private customFieldsWrapper: HTMLDivElement;\n private loginTelInput: HTMLSallaTelInputElement;\n private loginEmail: HTMLInputElement;\n private firstName: HTMLInputElement;\n private lastName: HTMLInputElement;\n private smsBtn: HTMLSallaButtonElement;\n private emailBtn: HTMLSallaButtonElement;\n private regBtn: HTMLSallaButtonElement;\n\n @State() currentTabName = 'home'\n @State() regType: 'phone' | 'email' = 'phone';\n\n\n @State() translationLoaded: boolean = false;\n @State() currentPhone: string = '';\n @State() currentEmail: string = '';\n @State() title: string;\n @State() emailErrorMsg: string;\n @State() firstNameErrorMsg: string;\n @State() lastNameErrorMsg: string;\n @State() hasError: boolean;\n @State() errorMessage: string;\n\n @State() dragAndDrop: string = salla.lang.get('common.uploader.drag_and_drop');\n @State() browseFromFiles: string = salla.lang.get('common.uploader.browse');\n @State() customFields: CustomField[] = [];\n\n private customFieldsValues: Object = {};\n @State() uploadedImage: string = undefined;\n\n @Listen('verified', { target: 'window' })\n /**\n * @param {CustomEvent|{details:{case:'new_customer'|'authenticated', redirect_url:string|null}}} event\n */\n onVerified(event) {\n salla.log('verified', event);\n //there is a case when force login is activated & is new user, it will return case inside error key., so cover it.\n let verifyCase = event.detail?.data.case || event.detail?.error.case;\n if (!verifyCase) {\n salla.log('verified but without case!');\n return;\n }\n\n if (verifyCase === \"new_customer\") {\n this.customFields = event.detail?.data?.custom_fields || [];\n return this.showTab(this.registrationTab);\n }\n\n if (!salla.auth.canRedirect()) {\n salla.log('Will not auto redirect or reload, due to `salla.auth.canRedirect()`');\n if (this.inline) {\n return;\n }\n this.modal.close();\n return;\n }\n\n if (event.detail.data.redirect_url) {\n return window.location.href = event.detail.data.redirect_url;\n }\n\n /**\n * we don't want to reload the page if this is not web auth\n * because we'll need the token in the page itself and its there\n * todo :: store the user data in storage for non-web auth and set the config.user from it\n */\n if (this.supportWebAuth && !this.withoutReload) {\n window.location.reload();\n } else {\n if (this.inline) {\n return;\n }\n this.modal.close();\n }\n }\n\n updateTranslations() {\n this.emailErrorMsg = salla.lang.get('common.elements.email_is_valid');\n this.firstNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.first_name') });\n this.lastNameErrorMsg = salla.lang.get('common.errors.field_required', { attribute: salla.lang.get('pages.profile.last_name') });\n if (this.inline) {\n return;\n }\n this.modal?.setTitle(this.title);\n }\n componentDidLoad() {\n if (this.inline) {\n this.getSelectedTab()\n }\n }\n /**\n * Open login component\n */\n @Method()\n // @ts-ignore\n async open(event = null) {\n // todo :: support change the settings from event details\n // if(event && event.hasOwnProperty('isEmailAllowed')){\n // this.isEmailAllowed = event?.isEmailAllowed;\n // }\n //\n // if(event && event.hasOwnProperty('isMobileAllowed')){\n // this.isMobileAllowed = event?.isMobileAllowed;\n // }\n\n /**\n * This is a workaround until we remove all the user objet from twig files\n * When the user is already login, let's reload the page\n */\n if (!salla.config.isGuest()) {\n if (!this.withoutReload) {\n return location.reload();\n }\n // Fire an event if withoutReload is true\n return;\n }\n\n this.getSelectedTab();\n return this.modal.open();\n }\n private getSelectedTab() {\n if (this.isMobileAllowed) {\n this.showTab(this.mobileTab);\n } else if (this.isEmailAllowed) {\n this.showTab(this.emailTab);\n }\n }\n private showTab(tab, evt?) {\n evt?.preventDefault();\n this.hasError = false;\n this.errorMessage = '';\n this.currentTabName = tab.getAttribute('data-name');\n\n // todo:: use better way for resize the modal\n // setTimeout(() => this.modal.querySelector('.s-login-modal-wrapper')?.setAttribute('style', 'height:' + tab?.scrollHeight + 'px'));\n\n if ([this.mobileTab, this.emailTab].includes(tab)) {\n this.regType = tab === this.mobileTab ? 'phone' : 'email';\n }\n\n const input = tab.querySelector('input[type=\"tel\"], input[type=\"email\"]');\n input && setTimeout(() => {\n input.focus();\n }, 100);\n if (this.inline) {\n return this;\n }\n this.modal?.setTitle(this.currentTabName === 'registration' ? salla.lang.get('common.titles.registration') : this.title);\n\n return this;\n }\n\n private typing = (e, submitMethod = null) => {\n const error = e.target.nextElementSibling;\n e.target.classList.remove('s-has-error');\n error?.classList.contains('s-login-modal-error-message') && (error.innerText = '');\n this.hasError = false;\n this.errorMessage = '';\n //it was sending two requests for send two verification requests\n submitMethod && e.key == 'Enter' && submitMethod();\n }\n\n private loginBySMS = async (event = null) => {\n event?.preventDefault();\n const { phone, countryCode, countryKey } = await this.loginTelInput.getValues();\n const isPhoneValid = await this.loginTelInput.isValid();\n if (!isPhoneValid) {\n return;\n }\n this.currentPhone = `${countryKey} ${phone}`;\n this.login(this.smsBtn, { type: 'mobile', phone: phone, country_code: countryCode });\n\n return false;\n }\n\n private loginByEmail = (event = null) => {\n event?.preventDefault();\n if (!Helper.isValidEmail(this.loginEmail.value)) {\n // this.validateField(this.loginEmail, this.emailErrorMsg);\n this.hasError = true;\n this.errorMessage = '* ' + this.emailErrorMsg;\n return;\n }\n this.currentEmail = this.loginEmail.value;\n this.login(this.emailBtn, { type: 'email', email: this.loginEmail.value });\n }\n\n private login(btn: HTMLSallaButtonElement, data) {\n this.hasError = false;\n this.errorMessage = '';\n btn.load()\n .then(() => btn.disable())\n .then(() => salla.auth.api.login(data))\n .then(() => this.showTab(this.verifyTab))\n .then(() => this.verifyTab.open(data))\n .catch((error) => {\n this.hasError = true;\n this.errorMessage = error.response.data?.error?.message;\n })\n .finally(() => btn.stop() && btn.enable());\n }\n\n private newUser = async () => {\n const {\n phone: regPhone,\n countryCode\n } = this.regType == \"email\" ? await this.regTelInput.getValues() : await this.loginTelInput.getValues(),\n emailValue = this.regEmail.value || this.loginEmail?.value\n await this.newUserValidation();\n await this.regBtn.load();\n await this.regBtn.disable();\n\n let data: any = {\n first_name: this.firstName.value,\n last_name: this.lastName.value,\n phone: regPhone || this.loginTelInput.phone,\n country_code: countryCode,\n verified_by: this.regType,\n custom_fields: this.customFieldsValues,\n };\n emailValue && (data = { ...data, email: emailValue });\n this.verifyTab.getCode()\n .then(code => salla.auth.api.register({...data, code}))\n .then(() => salla.auth.canRedirect && !this.withoutReload && window.location.reload())\n .catch((error) => {\n salla.logger.error(error);\n this.regBtn.stop() && this.regBtn.enable()\n })\n }\n\n private async newUserValidation() {\n const isLogByPhone = this.regType == \"phone\",\n isLogByEmail = this.regType == \"email\",\n emailValue = this.regEmail.value || (isLogByEmail && this.loginEmail.value),\n isEmailValid = Helper.isValidEmail(emailValue),\n isFirstNameValid = this.firstName.value.length > 0,\n isLastNameValid = this.lastName.value.length > 0,\n isPhoneValid = await this.regTelInput.isValid() || isLogByPhone && await this.loginTelInput.isValid(),\n emailValidation = (emailValue && isEmailValid) || (!emailValue && !this.isEmailRequired);\n\n // Custom Fields Validation\n var isCustomFieldValid = true;\n //we should make sure that there is text nodes between children\n this.customFieldsWrapper.childNodes\n .forEach((field: HTMLSallaFileUploadElement | HTMLInputElement) => {\n this.customFieldsValues[field.id] = field['value'];\n if (!field.required || this.customFieldsValues[field.id].length) {\n return;\n }\n isCustomFieldValid = false;\n const errorMsg: string = salla.lang.get('common.errors.field_required', { attribute: field.title });\n this.validateField(field, errorMsg)\n });\n\n if (emailValidation && isPhoneValid && isFirstNameValid && isLastNameValid && isCustomFieldValid) return;\n !isEmailValid && this.validateField(this.regEmail, this.emailErrorMsg);\n !isFirstNameValid && this.validateField(this.firstName, this.firstNameErrorMsg);\n !isLastNameValid && this.validateField(this.lastName, this.lastNameErrorMsg);\n throw 'Please insert required fields';\n }\n\n private getFilepondPlaceholder() {\n return `<div class=\"s-login-modal-filepond-placeholder\"><span class=\"s-login-modal-filepond-placeholder-icon\">${CameraIcon}</span><p class=\"s-login-modal-filepond-placeholder-text\">${this.dragAndDrop}</p> <span class=\"filepond--label-action\">${this.browseFromFiles}</span></div>`\n }\n\n // eslint-disable-next-line @stencil/own-methods-must-be-private\n validateField(field: HTMLInputElement | HTMLSallaFileUploadElement, errorMsg: string) {\n field.classList.add('s-has-error');\n field.nextElementSibling['innerText'] = '* ' + errorMsg;\n }\n\n generateTabClasses(tabName) {\n return {\n 's-login-modal-tab': tabName !== 'registration' && tabName !== 'otp',\n \"s-hidden\": this.currentTabName !== tabName,\n \"s-show\": this.currentTabName === tabName,\n 's-login-modal-unactive': tabName !== 'registration' && tabName !== 'otp' && this.currentTabName !== tabName,\n 's-login-modal-active': tabName !== 'registration' && tabName !== 'otp' && this.currentTabName === tabName\n }\n }\n\n generateRegClasses(regType) {\n return {\n \"mb-1.5\": true,\n \"s-hidden\": this.regType === regType\n }\n }\n private getLoginDom() {\n return [!this.inline && <span slot='icon' class=\"s-login-modal-header-icon\" innerHTML={UserIcon} />,\n <div class={this.inline ? 's-login-inline' : 's-login-modal-wrapper'}>\n {/* Tab 2 (Login By Mobile)*/}\n {this.isMobileAllowed ?\n <div class={this.generateTabClasses('login-phone')} data-name=\"login-phone\"\n ref={tab => this.mobileTab = tab}>\n <slot name=\"before-login-mobile\" />\n <form onSubmit={(event) => this.loginBySMS(event)} class={this.hasError && this.errorMessage ? 'has-error' : ''} method=\"POST\">\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.mobile')}</label>\n <salla-tel-input tabindex=\"0\" ref={el => this.loginTelInput = el}\n onKeyDown={e => this.typing(e)}></salla-tel-input>\n {this.hasError && this.errorMessage ? <span class=\"s-login-modal-error-message\">\n {this.errorMessage}\n </span> : ''}\n {/* @ts-ignore */}\n <salla-button class=\"s-login-modal-enter-button\" type=\"submit\" loader-position='center' width=\"wide\" ref={b => this.smsBtn = b}>\n {salla.lang.get('blocks.header.enter')}\n </salla-button>\n </form>\n {this.isEmailAllowed ?\n <a href=\"javascript:void(0);\" onClick={() => this.showTab(this.emailTab)}\n class=\"s-login-modal-link\">{salla.lang.get('blocks.header.login_by_email')}</a> : ''}\n <slot name=\"after-login-mobile\" />\n </div> : ''}\n\n\n {/* Tab 3 (Login By Email)*/}\n {this.isEmailAllowed ?\n <div class={this.generateTabClasses('login-email')} data-name=\"login-email\"\n ref={tab => this.emailTab = tab}>\n <slot name=\"before-login-email\" />\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.email')}</label>\n <form onSubmit={() => this.loginByEmail(event)} method=\"POST\">\n <input type=\"email\" ref={el => this.loginEmail = el} onKeyDown={e => this.typing(e)}\n \n placeholder=\"your@email.com\"\n enterkeyhint=\"next\"\n class={{\"s-login-modal-input s-ltr\": true, \"s-has-error\": this.hasError}} />\n {this.hasError && this.errorMessage ? <span class=\"s-login-modal-error-message\">\n {this.errorMessage}\n </span> : ''}\n <salla-button class=\"s-login-modal-enter-button\" loader-position='center' width=\"wide\" onClick={() => this.loginByEmail()}\n ref={b => this.emailBtn = b}>{salla.lang.get('blocks.header.enter')}</salla-button>\n </form>\n {this.isMobileAllowed ?\n <a href=\"javascript:void(0);\" onClick={() => this.showTab(this.mobileTab)}\n class=\"s-login-modal-link\">{salla.lang.get('blocks.header.login_by_sms')}</a>\n : ''\n }\n <slot name=\"after-login-email\" />\n </div> : ''}\n {/* Tab 4 (Verify OTP)*/}\n <salla-verify display=\"inline\" support-web-auth={this.supportWebAuth ? 'true' : 'false'}\n class={this.generateTabClasses('otp')} data-name=\"otp\" ref={tab => this.verifyTab = tab}\n autoReload={false}>\n <a onClick={() => this.showTab(this.regType == 'phone' ? this.mobileTab : this.emailTab)}\n class=\"s-verify-back\"\n innerHTML={ArrowRightIcon}\n slot=\"after-footer\"\n href=\"javascript:void(0);\" />\n {this.isMobileAllowed && this.regType == 'phone' ? <div dir=\"ltr\" class=\"s-login-modal-currentPhone\" slot=\"mobile\">{this.currentPhone}</div> : ''}\n {this.isEmailAllowed && this.regType == 'email' ? <div dir=\"ltr\" class=\"s-login-modal-currentEmail\" slot=\"email\">{this.currentEmail}</div> : ''}\n </salla-verify>\n\n {/* Tab 5 (Register New User)*/}\n <div data-name=\"registration\" class={this.generateTabClasses('registration')}\n ref={tab => this.registrationTab = tab}>\n <slot name=\"before-registration\" />\n <div>\n <label class=\"s-login-modal-label\">{salla.lang.get('blocks.header.your_name')}</label>\n <input type=\"text\" class=\"s-login-modal-input\" ref={el => this.firstName = el}\n onKeyDown={e => this.typing(e, this.newUser)}\n placeholder={salla.lang.get('pages.profile.first_name')} />\n <span class=\"s-login-modal-error-message\" />\n </div>\n\n <div>\n <label class=\"s-login-modal-label\">{salla.lang.get('pages.profile.last_name')}</label>\n <input type=\"text\" class=\"s-login-modal-input\" ref={el => this.lastName = el}\n onKeyDown={e => this.typing(e, this.newUser)}\n placeholder={salla.lang.get('pages.profile.last_name')} />\n <span class=\"s-login-modal-error-message\" />\n </div>\n\n <div class={this.generateRegClasses('phone')}>\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.mobile')}</label>\n <salla-tel-input ref={el => this.regTelInput = el}\n onKeyDown={e => this.typing(e, this.newUser)}></salla-tel-input>\n </div>\n\n <div class={this.generateRegClasses('email')}>\n <label class=\"s-login-modal-label\">{salla.lang.get('common.elements.email')}</label>\n <input type=\"email\" ref={el => this.regEmail = el} onKeyDown={e => this.typing(e, this.newUser)}\n placeholder=\"your@email.com\"\n class=\"s-login-modal-input s-ltr\" />\n <span class=\"s-login-modal-error-message\" />\n </div>\n <div class=\"s-login-modal-custom-fields\" ref={el => this.customFieldsWrapper = el}>{\n this.customFields.map((field: CustomField) => [\n <label class=\"s-login-modal-label\">{field.label}</label>,\n field.type === CustomFieldType.PHOTO\n ? <salla-file-upload\n name=\"image\"\n instant-upload={true}\n id={`${field.id}`}\n title={field.label}\n required={field.required}\n url={salla.url.get('upload-image')}\n // onUploaded={}\n labelIdle={this.getFilepondPlaceholder()} />\n : <input\n onInput={el => field.type == CustomFieldType.NUMBER ? salla.helpers.inputDigitsOnly(el.target) : {}}\n onKeyDown={e => this.typing(e, this.newUser)}\n class=\"s-login-modal-input s-ltr\"\n maxlength={field.length || 1000}//todo:: support it by adding the maxlength or not, not setting static limit\n placeholder={field.description}\n required={field.required}\n title={field.label}\n id={`${field.id}`}\n type=\"text\" />,\n <span class=\"s-login-modal-error-message\" />\n ])\n }</div>\n\n <salla-button loader-position='center' width=\"wide\" onClick={() => this.newUser()}\n ref={b => this.regBtn = b}>{salla.lang.get('blocks.header.register')}</salla-button>\n <slot name=\"after-registration\" />\n </div>\n </div>]\n }\n render() {\n // @ts-ignore\n // @ts-ignore\n if (this.inline) {\n return this.getLoginDom();\n }\n return (\n <salla-modal class=\"s-login-modal\" modal-title={this.title} ref={modal => this.modal = modal} width=\"xs\">\n {this.getLoginDom()}\n </salla-modal>\n );\n }\n}\n\n"],"version":3}
|
|
@@ -28,6 +28,8 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
28
28
|
this.supportWebAuth = true;
|
|
29
29
|
this.title = undefined;
|
|
30
30
|
this.resendAfter = 30;
|
|
31
|
+
this.hasError = undefined;
|
|
32
|
+
this.errorMessage = undefined;
|
|
31
33
|
this.isProfileVerify = false;
|
|
32
34
|
salla.lang.onLoaded(() => {
|
|
33
35
|
var _a;
|
|
@@ -54,6 +56,7 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
54
56
|
});
|
|
55
57
|
}
|
|
56
58
|
splitNumber(e) {
|
|
59
|
+
this.resetError();
|
|
57
60
|
let data = e.data || e.target.value; // Chrome doesn't get the e.data, it's always empty, fallback to value then.
|
|
58
61
|
if (!data)
|
|
59
62
|
return; // Shouldn't happen, just in case.
|
|
@@ -81,6 +84,7 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
81
84
|
}
|
|
82
85
|
handleKeyUp(ev) {
|
|
83
86
|
var _a, _b, _c, _d;
|
|
87
|
+
this.resetError();
|
|
84
88
|
if (['Alt', 'Shift', 'Control', 'AltGraph', 'Ctrl'].includes(ev.key)) {
|
|
85
89
|
return;
|
|
86
90
|
}
|
|
@@ -99,6 +103,7 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
99
103
|
}
|
|
100
104
|
}
|
|
101
105
|
handlePaste(ev) {
|
|
106
|
+
this.resetError();
|
|
102
107
|
let text = salla.helpers.number(ev.clipboardData.getData('text'))
|
|
103
108
|
.replace(/[^0-9.]/g, '')
|
|
104
109
|
.replace('..', '.');
|
|
@@ -107,6 +112,7 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
107
112
|
setTimeout(() => this.otpInputs[3].focus(), 100);
|
|
108
113
|
}
|
|
109
114
|
handleInput(ev) {
|
|
115
|
+
this.resetError();
|
|
110
116
|
salla.helpers.inputDigitsOnly(ev.target);
|
|
111
117
|
// check if all otpInputs has values then send the request
|
|
112
118
|
if (this.checkAllInputs()) {
|
|
@@ -115,6 +121,10 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
115
121
|
}, 100);
|
|
116
122
|
}
|
|
117
123
|
}
|
|
124
|
+
resetError() {
|
|
125
|
+
this.hasError = false;
|
|
126
|
+
this.errorMessage = '';
|
|
127
|
+
}
|
|
118
128
|
handleFocus(ev) {
|
|
119
129
|
var _a;
|
|
120
130
|
// If the focus element is the first one, do nothing
|
|
@@ -150,6 +160,7 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
150
160
|
this.otpInputs = this.body.querySelectorAll('.s-verify-input');
|
|
151
161
|
this.firstOtpInput = this.body.querySelector('#otp-1');
|
|
152
162
|
this.reset();
|
|
163
|
+
this.resetError();
|
|
153
164
|
this.display == 'modal' && ((_a = this.modal) === null || _a === void 0 ? void 0 : _a.setTitle(this.title));
|
|
154
165
|
this.modal.open();
|
|
155
166
|
(_b = this.firstOtpInput) === null || _b === void 0 ? void 0 : _b.addEventListener('input', e => this.splitNumber(e));
|
|
@@ -214,6 +225,9 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
214
225
|
.then(() => this.modal.close())
|
|
215
226
|
.then(() => this.autoReload && window.location.reload())
|
|
216
227
|
.catch((error) => {
|
|
228
|
+
var _a, _b;
|
|
229
|
+
this.hasError = true;
|
|
230
|
+
this.errorMessage = (_b = (_a = error.response.data) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.message;
|
|
217
231
|
salla.logger.error(error);
|
|
218
232
|
this.btn.stop() && this.btn.enable() && this.reset();
|
|
219
233
|
});
|
|
@@ -223,7 +237,7 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
223
237
|
h("salla-modal", { width: "xs", class: "s-verify", ref: modal => this.modal = modal, "modal-title": this.title }, h("span", { slot: 'icon', class: "s-verify-header-icon", innerHTML: this.type == "mobile" ? AndroidPhoneIcon : email }), this.myBody());
|
|
224
238
|
}
|
|
225
239
|
myBody() {
|
|
226
|
-
return (h("div", { class: "s-verify-body", ref: body => this.body = body }, h("div", { class: "s-verify-message", innerHTML: salla.lang.get('pages.profile.verify_message') }), h("slot", { name: "mobile" }), h("slot", { name: "email" }), h("input", { type: "hidden", name: "code", maxlength: "4", required: true, ref: code => this.code = code }), h("div", { class: "s-verify-codes", dir: "ltr" }, [1, 2, 3, 4].map((i) => h("input", { type: "number", autocomplete: "one-time-code", pattern: "[0-9]*", inputmode: "numeric", maxlength: "1", value: "", id: `otp-${i}`, class: "s-verify-input", onInput: e => this.handleInput(e), onPaste: e => this.handlePaste(e), onKeyUp: e => this.handleKeyUp(e), onFocus: e => this.handleFocus(e), required: true }))), h("div", { slot: "footer", class: "s-verify-footer" }, h("salla-button", { class: "s-verify-submit", "loader-position": 'center', disabled: true, onClick: () => this.submit(), ref: b => this.btn = b }, salla.lang.get('pages.profile.verify')), h("p", { class: "s-verify-resend-message", ref: el => this.resendMessage = el }, salla.lang.get('blocks.header.resend_after'), h("b", { class: "s-verify-timer", ref: el => this.timer = el })), h("a", { href: "
|
|
240
|
+
return (h("div", { class: "s-verify-body", ref: body => this.body = body }, h("div", { class: "s-verify-message", innerHTML: salla.lang.get('pages.profile.verify_message') }), h("slot", { name: "mobile" }), h("slot", { name: "email" }), h("input", { type: "hidden", name: "code", maxlength: "4", required: true, ref: code => this.code = code }), h("div", { class: { "s-verify-codes": true, "has-error": this.hasError }, dir: "ltr" }, [1, 2, 3, 4].map((i) => h("input", { type: "number", autocomplete: "one-time-code", pattern: "[0-9]*", inputmode: "numeric", maxlength: "1", value: "", id: `otp-${i}`, class: { "s-verify-input": true, "s-has-error": this.hasError }, onInput: e => this.handleInput(e), onPaste: e => this.handlePaste(e), onKeyUp: e => this.handleKeyUp(e), onFocus: e => this.handleFocus(e), required: true }))), this.hasError && this.errorMessage ? h("span", { class: "s-verify-error-message" }, this.errorMessage) : '', h("div", { slot: "footer", class: "s-verify-footer" }, h("salla-button", { class: "s-verify-submit", "loader-position": 'center', disabled: true, onClick: () => this.submit(), ref: b => this.btn = b }, salla.lang.get('pages.profile.verify')), h("p", { class: "s-verify-resend-message", ref: el => this.resendMessage = el }, salla.lang.get('blocks.header.resend_after'), h("b", { class: "s-verify-timer", ref: el => this.timer = el })), h("a", { href: "javascript:void(0);", class: "s-verify-resend", onClick: () => this.resendCode(), ref: el => this.resend = el }, salla.lang.get('blocks.comments.submit'))), h("slot", { name: "after-footer" })));
|
|
227
241
|
}
|
|
228
242
|
get host() { return this; }
|
|
229
243
|
static get style() { return sallaVerifyCss; }
|
|
@@ -235,6 +249,8 @@ const SallaVerify = /*@__PURE__*/ proxyCustomElement(class SallaVerify extends H
|
|
|
235
249
|
"translationLoaded": [32],
|
|
236
250
|
"title": [32],
|
|
237
251
|
"resendAfter": [32],
|
|
252
|
+
"hasError": [32],
|
|
253
|
+
"errorMessage": [32],
|
|
238
254
|
"isProfileVerify": [32],
|
|
239
255
|
"getCode": [64],
|
|
240
256
|
"open": [64]
|