@thefittingroom/shop-ui 3.0.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ErrorModal.js +43 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ErrorModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/FitModal.js +106 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/FitModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ForgotPasswordModal.js +43 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ForgotPasswordModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/LoadingAvatarModal.js +38 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/LoadingAvatarModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/LoggedOutModal.js +36 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/LoggedOutModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ModalManager.js +107 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ModalManager.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/NoAvatarModal.js +19 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/NoAvatarModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ResetLinkModal.js +31 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ResetLinkModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ScanCodeModal.js +77 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/ScanCodeModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/SignInModal.js +94 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/SignInModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/SizeErrorModal.js +43 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/SizeErrorModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/TryOnModal.js +51 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Modals/TryOnModal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/SizeRec.js +363 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/SizeRec.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Vto.js +52 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/Vto.js.map +1 -0
- package/{dist/esm/components/index.d.ts → .rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/index.js} +3 -2
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/index.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/locale.js +108 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/locale.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/slider.js +44 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/slider.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/svgs.js +33 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/svgs.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/uiError.js +8 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/uiError.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/helpers/telephone.js +12368 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/helpers/telephone.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/helpers/validations.js +15 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/helpers/validations.js.map +1 -0
- package/{dist/esm/index.d.ts → .rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/index.js} +1 -1
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/index.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/init.js +7 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/init.js.map +1 -0
- package/{dist/esm/styles/index.d.ts → .rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/styles/index.js} +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/styles/index.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/tfr-modal.js +77 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/tfr-modal.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/tfr-size-rec.js +188 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/tfr-size-rec.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/tfr.js +196 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/tfr.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/types/index.js +15 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/types/index.js.map +1 -0
- package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/index.js +55 -35
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +4 -4
- package/dist/esm/index.min.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +13 -12
- package/dist/esm/components/Modals/ErrorModal.d.ts +0 -8
- package/dist/esm/components/Modals/FitModal.d.ts +0 -3
- package/dist/esm/components/Modals/ForgotPasswordModal.d.ts +0 -3
- package/dist/esm/components/Modals/LoadingAvatarModal.d.ts +0 -3
- package/dist/esm/components/Modals/LoggedOutModal.d.ts +0 -3
- package/dist/esm/components/Modals/ModalManager.d.ts +0 -8
- package/dist/esm/components/Modals/NoAvatarModal.d.ts +0 -3
- package/dist/esm/components/Modals/ResetLinkModal.d.ts +0 -3
- package/dist/esm/components/Modals/ScanCodeModal.d.ts +0 -3
- package/dist/esm/components/Modals/SignInModal.d.ts +0 -3
- package/dist/esm/components/Modals/SizeErrorModal.d.ts +0 -3
- package/dist/esm/components/Modals/TryOnModal.d.ts +0 -3
- package/dist/esm/components/SizeRec.d.ts +0 -65
- package/dist/esm/components/Vto.d.ts +0 -9
- package/dist/esm/components/locale.d.ts +0 -41
- package/dist/esm/components/slider.d.ts +0 -3
- package/dist/esm/components/svgs.d.ts +0 -3
- package/dist/esm/components/uiError.d.ts +0 -6
- package/dist/esm/helpers/telephone.d.ts +0 -1
- package/dist/esm/helpers/validations.d.ts +0 -2
- package/dist/esm/init.d.ts +0 -12
- package/dist/esm/tfr-modal.d.ts +0 -21
- package/dist/esm/tfr-size-rec.d.ts +0 -58
- package/dist/esm/tfr.d.ts +0 -44
- package/dist/esm/types/index.d.ts +0 -150
- /package/{.env.tmp → .env.dev} +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { L } from '../locale';
|
|
2
|
+
const SignInModal = (props) => {
|
|
3
|
+
const { email } = props;
|
|
4
|
+
const onSignIn = (e) => {
|
|
5
|
+
e.preventDefault();
|
|
6
|
+
const email = document.getElementById('email-input').value;
|
|
7
|
+
const password = document.getElementById('password-input').value;
|
|
8
|
+
resetValidation();
|
|
9
|
+
props.onSignIn(email, password, validationError);
|
|
10
|
+
};
|
|
11
|
+
const onNavForgotPassword = () => {
|
|
12
|
+
const email = document.getElementById('email-input').value;
|
|
13
|
+
props.onNavForgotPassword(email);
|
|
14
|
+
};
|
|
15
|
+
const onNavScanCode = () => {
|
|
16
|
+
props.onNavScanCode();
|
|
17
|
+
};
|
|
18
|
+
const onHook = () => {
|
|
19
|
+
var _a, _b, _c, _d;
|
|
20
|
+
(_a = document.getElementById('tfr-sign-in-form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', onSignIn);
|
|
21
|
+
(_b = document.getElementById('tfr-sign-in')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', onSignIn);
|
|
22
|
+
(_c = document.getElementById('tfr-forgot-password')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', onNavForgotPassword);
|
|
23
|
+
(_d = document.getElementById('tfr-scan-code')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', onNavScanCode);
|
|
24
|
+
};
|
|
25
|
+
const onUnhook = () => {
|
|
26
|
+
var _a, _b, _c, _d;
|
|
27
|
+
(_a = document.getElementById('tfr-sign-in-form')) === null || _a === void 0 ? void 0 : _a.removeEventListener('submit', onSignIn);
|
|
28
|
+
(_b = document.getElementById('tfr-sign-in')) === null || _b === void 0 ? void 0 : _b.removeEventListener('click', onSignIn);
|
|
29
|
+
(_c = document.getElementById('tfr-forgot-password')) === null || _c === void 0 ? void 0 : _c.removeEventListener('click', onNavForgotPassword);
|
|
30
|
+
(_d = document.getElementById('tfr-scan-code')) === null || _d === void 0 ? void 0 : _d.removeEventListener('click', onNavScanCode);
|
|
31
|
+
};
|
|
32
|
+
const resetValidation = () => {
|
|
33
|
+
const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element');
|
|
34
|
+
fieldsetElement.forEach((element) => {
|
|
35
|
+
element.classList.remove('tfr-fieldset-err');
|
|
36
|
+
});
|
|
37
|
+
const labelElement = document.querySelectorAll('.tfr-label-element');
|
|
38
|
+
labelElement.forEach((element) => {
|
|
39
|
+
element.classList.remove('tfr-c-red');
|
|
40
|
+
});
|
|
41
|
+
const formError = document.querySelector('#tfr-form-error');
|
|
42
|
+
formError.classList.remove('tfr-d-block');
|
|
43
|
+
formError.innerHTML = '';
|
|
44
|
+
};
|
|
45
|
+
const validationError = (message) => {
|
|
46
|
+
const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element');
|
|
47
|
+
fieldsetElement.forEach((element) => {
|
|
48
|
+
element.classList.add('tfr-fieldset-err');
|
|
49
|
+
});
|
|
50
|
+
const labelElement = document.querySelectorAll('.tfr-label-element');
|
|
51
|
+
labelElement.forEach((element) => {
|
|
52
|
+
element.classList.add('tfr-c-red');
|
|
53
|
+
});
|
|
54
|
+
const formError = document.querySelector('#tfr-form-error');
|
|
55
|
+
formError.innerHTML = message || 'Something went wrong';
|
|
56
|
+
formError.classList.add('tfr-d-block');
|
|
57
|
+
};
|
|
58
|
+
const body = () => {
|
|
59
|
+
return `
|
|
60
|
+
<form id="tfr-sign-in-form">
|
|
61
|
+
<div class="tfr-title-font tfr-light-22-300 tfr-mt-10">${L.SignIn}</div>
|
|
62
|
+
|
|
63
|
+
<fieldset class="tfr-fieldset-element tfr-fieldset tfr-mt-20">
|
|
64
|
+
<legend tfr-element="true" class="tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5">${L.EmailAddress}</legend>
|
|
65
|
+
<input tfr-element="true" type="email" id="email-input" value="${email || ''}" />
|
|
66
|
+
</fieldset>
|
|
67
|
+
|
|
68
|
+
<fieldset class="tfr-fieldset-element tfr-fieldset tfr-mt-20">
|
|
69
|
+
<legend tfr-element="true" class="tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5">${L.Password}</legend>
|
|
70
|
+
<input tfr-element="true" type="password" id="password-input" />
|
|
71
|
+
</fieldset>
|
|
72
|
+
|
|
73
|
+
<div tfr-element="true" class="tfr-body-font tfr-12-default tfr-c-red tfr-mt-10 tfr-d-none" id="tfr-form-error"></div>
|
|
74
|
+
|
|
75
|
+
<div class="tfr-mt-20">
|
|
76
|
+
<span id="tfr-forgot-password" tfr-element="true" class="tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-15">${L.ForgotPasswordWithSymbol}</span>
|
|
77
|
+
<span id="tfr-scan-code" tfr-element="true" class="tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor">${L.DontHaveAcc}</span>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<button id="tfr-sign-in" tfr-element="true" class="tfr-standard-button tfr-c-brand-bg tfr-c-whitetfr-title-font tfr-medium-16-default tfr-cursor tfr-mt-30" id="sign-in-button" type="submit">
|
|
81
|
+
${L.SignIn}
|
|
82
|
+
</button>
|
|
83
|
+
</form>
|
|
84
|
+
`;
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
Hook: onHook,
|
|
88
|
+
Unhook: onUnhook,
|
|
89
|
+
Body: body,
|
|
90
|
+
useFullModalContent: true,
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
export default SignInModal;
|
|
94
|
+
//# sourceMappingURL=SignInModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignInModal.js","sourceRoot":"","sources":["../../../../src/components/Modals/SignInModal.ts"],"names":[],"mappings":"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","sourcesContent":["import { ModalContent, SignInModalProps } from '../../types'\nimport { L } from '../locale'\n\nconst SignInModal = (props: SignInModalProps): ModalContent => {\n const { email } = props\n\n const onSignIn = (e: Event) => {\n e.preventDefault()\n\n const email = (<HTMLInputElement>document.getElementById('email-input')).value\n const password = (<HTMLInputElement>document.getElementById('password-input')).value\n resetValidation()\n props.onSignIn(email, password, validationError)\n }\n\n const onNavForgotPassword = () => {\n const email = (<HTMLInputElement>document.getElementById('email-input')).value\n props.onNavForgotPassword(email)\n }\n\n const onNavScanCode = () => {\n props.onNavScanCode()\n }\n\n const onHook = () => {\n document.getElementById('tfr-sign-in-form')?.addEventListener('submit', onSignIn)\n document.getElementById('tfr-sign-in')?.addEventListener('click', onSignIn)\n document.getElementById('tfr-forgot-password')?.addEventListener('click', onNavForgotPassword)\n document.getElementById('tfr-scan-code')?.addEventListener('click', onNavScanCode)\n }\n\n const onUnhook = () => {\n document.getElementById('tfr-sign-in-form')?.removeEventListener('submit', onSignIn)\n document.getElementById('tfr-sign-in')?.removeEventListener('click', onSignIn)\n document.getElementById('tfr-forgot-password')?.removeEventListener('click', onNavForgotPassword)\n document.getElementById('tfr-scan-code')?.removeEventListener('click', onNavScanCode)\n }\n\n const resetValidation = () => {\n const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element')\n fieldsetElement.forEach((element) => {\n element.classList.remove('tfr-fieldset-err')\n })\n\n const labelElement = document.querySelectorAll('.tfr-label-element')\n labelElement.forEach((element) => {\n element.classList.remove('tfr-c-red')\n })\n\n const formError = document.querySelector('#tfr-form-error')\n formError.classList.remove('tfr-d-block')\n formError.innerHTML = ''\n }\n\n const validationError = (message: string) => {\n const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element')\n fieldsetElement.forEach((element) => {\n element.classList.add('tfr-fieldset-err')\n })\n\n const labelElement = document.querySelectorAll('.tfr-label-element')\n labelElement.forEach((element) => {\n element.classList.add('tfr-c-red')\n })\n\n const formError = document.querySelector('#tfr-form-error')\n formError.innerHTML = message || 'Something went wrong'\n formError.classList.add('tfr-d-block')\n }\n\n const body = () => {\n return `\n <form id=\"tfr-sign-in-form\">\n <div class=\"tfr-title-font tfr-light-22-300 tfr-mt-10\">${L.SignIn}</div>\n\n <fieldset class=\"tfr-fieldset-element tfr-fieldset tfr-mt-20\">\n <legend tfr-element=\"true\" class=\"tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5\">${\n L.EmailAddress\n }</legend>\n <input tfr-element=\"true\" type=\"email\" id=\"email-input\" value=\"${email || ''}\" />\n </fieldset>\n\n <fieldset class=\"tfr-fieldset-element tfr-fieldset tfr-mt-20\">\n <legend tfr-element=\"true\" class=\"tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5\">${\n L.Password\n }</legend>\n <input tfr-element=\"true\" type=\"password\" id=\"password-input\" />\n </fieldset>\n\n <div tfr-element=\"true\" class=\"tfr-body-font tfr-12-default tfr-c-red tfr-mt-10 tfr-d-none\" id=\"tfr-form-error\"></div>\n\n <div class=\"tfr-mt-20\">\n <span id=\"tfr-forgot-password\" tfr-element=\"true\" class=\"tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-15\">${\n L.ForgotPasswordWithSymbol\n }</span>\n <span id=\"tfr-scan-code\" tfr-element=\"true\" class=\"tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor\">${\n L.DontHaveAcc\n }</span>\n </div>\n\n <button id=\"tfr-sign-in\" tfr-element=\"true\" class=\"tfr-standard-button tfr-c-brand-bg tfr-c-whitetfr-title-font tfr-medium-16-default tfr-cursor tfr-mt-30\" id=\"sign-in-button\" type=\"submit\">\n ${L.SignIn}\n </button>\n </form>\n `\n }\n\n return {\n Hook: onHook,\n Unhook: onUnhook,\n Body: body,\n useFullModalContent: true,\n }\n}\nexport default SignInModal\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { L } from '../locale';
|
|
2
|
+
const SizeErrorModal = (props) => {
|
|
3
|
+
const onNavBack = () => {
|
|
4
|
+
props.onNavBack();
|
|
5
|
+
};
|
|
6
|
+
const onClose = () => {
|
|
7
|
+
props.onClose();
|
|
8
|
+
};
|
|
9
|
+
const Hook = () => {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
(_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', onNavBack);
|
|
12
|
+
(_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', onClose);
|
|
13
|
+
};
|
|
14
|
+
const Unhook = () => {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
(_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', onNavBack);
|
|
17
|
+
(_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.removeEventListener('click', onClose);
|
|
18
|
+
};
|
|
19
|
+
const Body = () => {
|
|
20
|
+
var _a, _b, _c;
|
|
21
|
+
console.debug('rendering size error modal', props);
|
|
22
|
+
return `
|
|
23
|
+
<div class="tfr-mt-15-p tfr-mb-13-p">
|
|
24
|
+
<div tfr-element="true" class="tfr-title-font tfr-light-22-300 tfr-c-black">
|
|
25
|
+
${L.NoSizeAvailable} ${(_a = props.sizes) === null || _a === void 0 ? void 0 : _a.recommended} ${L.OrSize} ${(_c = (_b = props.sizes) === null || _b === void 0 ? void 0 : _b.available) === null || _c === void 0 ? void 0 : _c.join(' or ')}
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="tfr-t-a-center">
|
|
30
|
+
<span id="tfr-back" tfr-element="true" class="tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-20">${L.ReturnToCatalogPage || 'Return to Catalog Page'}</span>
|
|
31
|
+
<span id="tfr-close" tfr-element="true" class="tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor">${L.ReturnToProductPage || 'Return to Product Page'}</span>
|
|
32
|
+
</div>
|
|
33
|
+
`;
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
Hook,
|
|
37
|
+
Unhook,
|
|
38
|
+
Body,
|
|
39
|
+
useFullModalContent: true,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export default SizeErrorModal;
|
|
43
|
+
//# sourceMappingURL=SizeErrorModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SizeErrorModal.js","sourceRoot":"","sources":["../../../../src/components/Modals/SizeErrorModal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,WAAW,CAAA;AAE7B,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAgB,EAAE;IAClE,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,KAAK,CAAC,SAAS,EAAE,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;;QAChB,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzE,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC1E,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;;QAClB,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC5E,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;;QAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;QAClD,OAAO;;;SAGF,CAAC,CAAC,eAAe,IAAI,MAAA,KAAK,CAAC,KAAK,0CAAE,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,SAAS,0CAAE,IAAI,CAAC,MAAM,CAAC;;;;;4IAM5F,CAAC,CAAC,mBAAmB,IAAI,wBAC3B;mIAEE,CAAC,CAAC,mBAAmB,IAAI,wBAC3B;;SAEH,CAAA;IACP,CAAC,CAAA;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,mBAAmB,EAAE,IAAI;KAC1B,CAAA;AACH,CAAC,CAAA;AAED,eAAe,cAAc,CAAA","sourcesContent":["import { ModalContent, SizeErrorModalProps } from '../../types'\nimport { L } from '../locale'\n\nconst SizeErrorModal = (props: SizeErrorModalProps): ModalContent => {\n const onNavBack = () => {\n props.onNavBack()\n }\n\n const onClose = () => {\n props.onClose()\n }\n\n const Hook = () => {\n document.getElementById('tfr-back')?.addEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.addEventListener('click', onClose)\n }\n\n const Unhook = () => {\n document.getElementById('tfr-back')?.removeEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.removeEventListener('click', onClose)\n }\n\n const Body = () => {\n console.debug('rendering size error modal', props)\n return `\n <div class=\"tfr-mt-15-p tfr-mb-13-p\">\n <div tfr-element=\"true\" class=\"tfr-title-font tfr-light-22-300 tfr-c-black\">\n\t\t\t\t\t\t\t${L.NoSizeAvailable} ${props.sizes?.recommended} ${L.OrSize} ${props.sizes?.available?.join(' or ')}\n\t\t\t\t\t\t</div>\n </div>\n\n <div class=\"tfr-t-a-center\">\n <span id=\"tfr-back\" tfr-element=\"true\" class=\"tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-20\">${\n L.ReturnToCatalogPage || 'Return to Catalog Page'\n }</span>\n <span id=\"tfr-close\" tfr-element=\"true\" class=\"tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor\">${\n L.ReturnToProductPage || 'Return to Product Page'\n }</span>\n </div>\n `\n }\n\n return {\n Hook,\n Unhook,\n Body,\n useFullModalContent: true,\n }\n}\n\nexport default SizeErrorModal\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { InitImageSlider } from '../../components/slider';
|
|
2
|
+
const TryOnModal = (props) => {
|
|
3
|
+
let close = () => void 0;
|
|
4
|
+
const onNavBack = () => {
|
|
5
|
+
props.onNavBack();
|
|
6
|
+
};
|
|
7
|
+
const onClose = () => {
|
|
8
|
+
props.onClose();
|
|
9
|
+
};
|
|
10
|
+
const Hook = () => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const tryOnImage = document.getElementById('tfr-tryon-image');
|
|
13
|
+
const onChange = (slider, imageUrl) => {
|
|
14
|
+
console.debug('slider change', slider, imageUrl);
|
|
15
|
+
tryOnImage.src = imageUrl;
|
|
16
|
+
};
|
|
17
|
+
const slider = InitImageSlider('tfr-slider', onChange);
|
|
18
|
+
if (Array.isArray(props.frames) && props.frames.length > 0) {
|
|
19
|
+
const e = slider.Load(props.frames);
|
|
20
|
+
if (e instanceof Error) {
|
|
21
|
+
console.error(e);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
close = e;
|
|
25
|
+
}
|
|
26
|
+
(_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', onNavBack);
|
|
27
|
+
(_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', onClose);
|
|
28
|
+
};
|
|
29
|
+
const Unhook = () => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
close();
|
|
32
|
+
(_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', onNavBack);
|
|
33
|
+
(_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.removeEventListener('click', onClose);
|
|
34
|
+
};
|
|
35
|
+
const Body = () => {
|
|
36
|
+
return `
|
|
37
|
+
<div class="tfr-slider-wrapper">
|
|
38
|
+
<img id="tfr-tryon-image" src="" />
|
|
39
|
+
<input type="range" id="tfr-slider" />
|
|
40
|
+
</div>
|
|
41
|
+
`;
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
Hook,
|
|
45
|
+
Unhook,
|
|
46
|
+
Body,
|
|
47
|
+
useFullModalContent: true,
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
export default TryOnModal;
|
|
51
|
+
//# sourceMappingURL=TryOnModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TryOnModal.js","sourceRoot":"","sources":["../../../../src/components/Modals/TryOnModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAGzD,MAAM,UAAU,GAAG,CAAC,KAAsB,EAAgB,EAAE;IAC1D,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IAExB,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,KAAK,CAAC,SAAS,EAAE,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;;QAChB,MAAM,UAAU,GAAqB,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACpC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YAChD,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAA;QAC3B,CAAC,CAAA;QACD,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACnC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAChB,OAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAe,CAAA;QACzB,CAAC;QACD,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzE,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC1E,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;;QAClB,KAAK,EAAE,CAAA;QACP,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC5E,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,OAAO;;;;;SAKF,CAAA;IACP,CAAC,CAAA;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,mBAAmB,EAAE,IAAI;KAC1B,CAAA;AACH,CAAC,CAAA;AAED,eAAe,UAAU,CAAA","sourcesContent":["import { InitImageSlider } from '../../components/slider'\nimport { ModalContent, TryOnModalProps } from '../../types'\n\nconst TryOnModal = (props: TryOnModalProps): ModalContent => {\n let close = () => void 0\n\n const onNavBack = () => {\n props.onNavBack()\n }\n\n const onClose = () => {\n props.onClose()\n }\n\n const Hook = () => {\n const tryOnImage = <HTMLImageElement>document.getElementById('tfr-tryon-image')\n const onChange = (slider, imageUrl) => {\n console.debug('slider change', slider, imageUrl)\n tryOnImage.src = imageUrl\n }\n const slider = InitImageSlider('tfr-slider', onChange)\n if (Array.isArray(props.frames) && props.frames.length > 0) {\n const e = slider.Load(props.frames)\n if (e instanceof Error) {\n console.error(e)\n return\n }\n close = e as () => void\n }\n document.getElementById('tfr-back')?.addEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.addEventListener('click', onClose)\n }\n\n const Unhook = () => {\n close()\n document.getElementById('tfr-back')?.removeEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.removeEventListener('click', onClose)\n }\n\n const Body = () => {\n return `\n <div class=\"tfr-slider-wrapper\">\n\t\t\t\t<img id=\"tfr-tryon-image\" src=\"\" />\n\t\t\t\t<input type=\"range\" id=\"tfr-slider\" />\n\t\t\t\t</div>\n `\n }\n\n return {\n Hook,\n Unhook,\n Body,\n useFullModalContent: true,\n }\n}\n\nexport default TryOnModal\n"]}
|
package/.rollup.cache/home/codeliger/code/thefittingroom/shop-sdk-ui/dist/esm/components/SizeRec.js
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import { infoIcon, tfrDoor, userIcon } from './svgs';
|
|
2
|
+
export class SizeRecComponent {
|
|
3
|
+
constructor(sizeRecMainDivId, onSignInClick, onSignOutClick, onFitInfoClick, onTryOnClick) {
|
|
4
|
+
this.onSignInClick = onSignInClick;
|
|
5
|
+
this.onSignOutClick = onSignOutClick;
|
|
6
|
+
this.onFitInfoClick = onFitInfoClick;
|
|
7
|
+
this.onTryOnClick = onTryOnClick;
|
|
8
|
+
this._sku = '';
|
|
9
|
+
this._styleId = null;
|
|
10
|
+
this.isLoggedIn = false;
|
|
11
|
+
this.tfrLoggedInElements = [];
|
|
12
|
+
this.tfrLoggedOutElements = [];
|
|
13
|
+
this.tfrToggleOpenElements = [];
|
|
14
|
+
this.tfrToggleClosedElements = [];
|
|
15
|
+
this.isCollapsed = false;
|
|
16
|
+
this.redraw = null;
|
|
17
|
+
this.init(sizeRecMainDivId);
|
|
18
|
+
}
|
|
19
|
+
get sku() {
|
|
20
|
+
return this._sku;
|
|
21
|
+
}
|
|
22
|
+
setSku(sku) {
|
|
23
|
+
this._sku = sku;
|
|
24
|
+
}
|
|
25
|
+
get styleId() {
|
|
26
|
+
return this._styleId;
|
|
27
|
+
}
|
|
28
|
+
setStyleId(styleId) {
|
|
29
|
+
this._styleId = styleId;
|
|
30
|
+
}
|
|
31
|
+
setIsLoggedIn(isLoggedIn) {
|
|
32
|
+
this.isLoggedIn = isLoggedIn;
|
|
33
|
+
this.tfrSizeRecSelectContainer.style.display = 'flex';
|
|
34
|
+
this.tfrSizeRecSelect.style.display = 'flex';
|
|
35
|
+
this.tfrSizeHowItFits.style.display = 'block';
|
|
36
|
+
if (isLoggedIn) {
|
|
37
|
+
this.tfrSizeHowItFits.style.opacity = '1';
|
|
38
|
+
this.tfrSizeRecSelect.style.opacity = '1';
|
|
39
|
+
this.tfrLoggedInElements.forEach((element) => (element.style.display = 'block'));
|
|
40
|
+
this.tfrLoggedOutElements.forEach((element) => (element.style.display = 'none'));
|
|
41
|
+
this.tfrSizeRecActionLogin.style.display = 'none';
|
|
42
|
+
this.tfrSizeRecActionLogout.style.display = 'block';
|
|
43
|
+
this.tfrSizeRecTitle.style.display = 'flex';
|
|
44
|
+
this.isCollapsed = false;
|
|
45
|
+
this.tfrSizeRecTitleToggle.classList.add('tfr-chevron-up');
|
|
46
|
+
this.tfrSizeRecTitleToggle.classList.remove('tfr-chevron-down');
|
|
47
|
+
// Ensure the container is visible
|
|
48
|
+
this.tfrSizeRecSelectContainer.style.display = 'flex';
|
|
49
|
+
this.tfrSizeRecSelectContainer.style.opacity = '1';
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.tfrSizeHowItFits.style.opacity = '0.4';
|
|
53
|
+
this.tfrSizeRecSelect.style.opacity = '0.4';
|
|
54
|
+
this.tfrLoggedInElements.forEach((element) => (element.style.display = 'none'));
|
|
55
|
+
this.tfrLoggedOutElements.forEach((element) => (element.style.display = 'block'));
|
|
56
|
+
this.tfrSizeRecActionLogin.style.display = 'block';
|
|
57
|
+
this.tfrSizeRecActionLogout.style.display = 'none';
|
|
58
|
+
this.tfrSizeRecTitle.style.display = 'flex';
|
|
59
|
+
this.tfrSizeRecommendationError.style.display = 'none';
|
|
60
|
+
this.tfrSizeRecommendationError.innerHTML = '';
|
|
61
|
+
this.renderSizeRecSelectLoggedOut();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
setLoading(isLoading) {
|
|
65
|
+
if (isLoading) {
|
|
66
|
+
this.tfrSizeRecLoading.style.display = 'block';
|
|
67
|
+
this.tfrSizeRecommendationsContainer.style.display = 'none';
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.tfrSizeRecLoading.style.display = 'none';
|
|
71
|
+
this.tfrSizeRecommendationsContainer.style.display = 'flex';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
setGarmentLocations(locations) {
|
|
75
|
+
if (!locations || !locations.length) {
|
|
76
|
+
this.tfrSizeRecTitle.style.display = 'none';
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.renderGarmentLocations(locations);
|
|
80
|
+
}
|
|
81
|
+
setRecommendedSize({ recommended, sizes }) {
|
|
82
|
+
this.renderSizeRec(recommended, sizes);
|
|
83
|
+
}
|
|
84
|
+
setError() {
|
|
85
|
+
this.tfrSizeRecTitle.style.display = 'none';
|
|
86
|
+
if (!this.isLoggedIn)
|
|
87
|
+
return;
|
|
88
|
+
this.tfrSizeRecommendationError.style.display = 'block';
|
|
89
|
+
this.tfrSizeRecommendationError.innerHTML = 'No recommended size found.';
|
|
90
|
+
}
|
|
91
|
+
init(sizeRecMainDivId) {
|
|
92
|
+
const sizeRecMainDiv = document.getElementById(sizeRecMainDivId);
|
|
93
|
+
if (!sizeRecMainDiv)
|
|
94
|
+
throw new Error('Size rec main div not found');
|
|
95
|
+
this.render(sizeRecMainDiv);
|
|
96
|
+
this.setElements();
|
|
97
|
+
this.bindEvents();
|
|
98
|
+
}
|
|
99
|
+
setElements() {
|
|
100
|
+
this.tfrSizeHowItFits = document.getElementById('tfr-size-how-it-fits');
|
|
101
|
+
this.tfrSizeRecTitle = document.getElementById('tfr-size-rec-title');
|
|
102
|
+
this.tfrInfoIcon = document.getElementById('tfr-info-icon');
|
|
103
|
+
this.tfrLoginToView = document.getElementById('tfr-login-to-view');
|
|
104
|
+
this.tfrSizeRecActionLogin = document.getElementById('tfr-size-rec-action-login');
|
|
105
|
+
this.tfrSizeRecActionLogout = document.getElementById('tfr-size-rec-action-logout');
|
|
106
|
+
this.tfrSizeRecTable = document.getElementById('tfr-size-rec-table');
|
|
107
|
+
this.tfrSizeRecommendationError = document.getElementById('tfr-size-recommendation-error');
|
|
108
|
+
this.tfrSizeRecSize = document.getElementById('tfr-size-rec-size');
|
|
109
|
+
this.tfrSizeRecSelect = document.getElementById('tfr-size-rec-select');
|
|
110
|
+
this.tfrSizeRecLoading = document.getElementById('tfr-size-rec-loading');
|
|
111
|
+
this.tfrSizeRecTitleToggle = document.getElementById('tfr-size-rec-title-toggle');
|
|
112
|
+
this.tfrSizeRecSelectContainer = document.getElementById('tfr-size-rec-select-container');
|
|
113
|
+
this.tfrSizeRecommendationsContainer = document.getElementById('tfr-size-recommendations-container');
|
|
114
|
+
this.tfrLoggedInElements = document.querySelectorAll('.tfr-logged-in');
|
|
115
|
+
this.tfrLoggedOutElements = document.querySelectorAll('.tfr-logged-out');
|
|
116
|
+
this.tfrToggleOpenElements = document.querySelectorAll('.tfr-toggle-open');
|
|
117
|
+
this.tfrToggleClosedElements = document.querySelectorAll('.tfr-toggle-closed');
|
|
118
|
+
}
|
|
119
|
+
bindEvents() {
|
|
120
|
+
this.tfrSizeRecActionLogin.addEventListener('click', this.onSignInClick);
|
|
121
|
+
this.tfrSizeRecActionLogout.addEventListener('click', this.onSignOutClick);
|
|
122
|
+
this.tfrSizeRecSelect.addEventListener('click', this.onSizeRecSelectClick.bind(this));
|
|
123
|
+
this.tfrSizeRecTitleToggle.addEventListener('click', this.toggletSizeRecSelectContainer.bind(this));
|
|
124
|
+
this.tfrInfoIcon.addEventListener('click', this.onFitInfoClick);
|
|
125
|
+
this.tfrLoginToView.addEventListener('click', this.onSignInClick);
|
|
126
|
+
const tryOnButton = document.getElementById('tfr-try-on-button');
|
|
127
|
+
if (!tryOnButton)
|
|
128
|
+
return;
|
|
129
|
+
tryOnButton.addEventListener('click', async () => {
|
|
130
|
+
// Prevent multiple clicks while loading
|
|
131
|
+
if (tryOnButton.classList.contains('loading')) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const activeButton = document.querySelector('.tfr-size-rec-select-button.active');
|
|
135
|
+
if (!activeButton)
|
|
136
|
+
return;
|
|
137
|
+
const selectedSizeId = Number(activeButton.getAttribute('data-size-id'));
|
|
138
|
+
if (Number.isNaN(selectedSizeId))
|
|
139
|
+
return;
|
|
140
|
+
// Set loading state
|
|
141
|
+
tryOnButton.classList.add('loading');
|
|
142
|
+
const originalText = tryOnButton.textContent;
|
|
143
|
+
tryOnButton.textContent = ' ';
|
|
144
|
+
tryOnButton.setAttribute('disabled', 'true');
|
|
145
|
+
try {
|
|
146
|
+
// Get all size buttons
|
|
147
|
+
const allSizeButtons = Array.from(document.querySelectorAll('.tfr-size-rec-select-button'));
|
|
148
|
+
const activeIndex = allSizeButtons.indexOf(activeButton);
|
|
149
|
+
if (this.styleId !== null) {
|
|
150
|
+
// 1. Fetch and display the VTO for the active (recommended) size
|
|
151
|
+
try {
|
|
152
|
+
await this.onTryOnClick(this.styleId, selectedSizeId, true);
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
console.error(`Error trying on active size ${selectedSizeId}:`, e);
|
|
156
|
+
// Optionally, inform the user about the error for the primary VTO
|
|
157
|
+
}
|
|
158
|
+
// 2. Fetch VTO for the size to the left (if it exists)
|
|
159
|
+
if (activeIndex > 0) {
|
|
160
|
+
const leftButton = allSizeButtons[activeIndex - 1];
|
|
161
|
+
await this._preloadNeighborVTO(leftButton);
|
|
162
|
+
}
|
|
163
|
+
// 3. Fetch VTO for the size to the right (if it exists)
|
|
164
|
+
if (activeIndex >= 0 && activeIndex < allSizeButtons.length - 1) {
|
|
165
|
+
const rightButton = allSizeButtons[activeIndex + 1];
|
|
166
|
+
await this._preloadNeighborVTO(rightButton);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
console.error('Error during sequential try-on process:', error);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
// Reset loading state
|
|
175
|
+
tryOnButton.classList.remove('loading');
|
|
176
|
+
tryOnButton.textContent = originalText;
|
|
177
|
+
tryOnButton.removeAttribute('disabled');
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
async _preloadNeighborVTO(buttonElement) {
|
|
182
|
+
var _a;
|
|
183
|
+
// this.styleId is assumed to be non-null here because the calling context (bindEvents)
|
|
184
|
+
// is wrapped in 'if (this.styleId !== null)'
|
|
185
|
+
const sizeId = Number(buttonElement.getAttribute('data-size-id'));
|
|
186
|
+
if (!Number.isNaN(sizeId)) {
|
|
187
|
+
try {
|
|
188
|
+
await this.onTryOnClick(this.styleId, sizeId, false);
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
const buttonText = ((_a = buttonElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || 'N/A';
|
|
192
|
+
console.error(`Error pre-loading try-on for size ${sizeId} (button: ${buttonText}):`, e);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
onSizeRecSelectClick(e) {
|
|
197
|
+
const target = e.target;
|
|
198
|
+
if (!target.classList.contains('tfr-size-rec-select-button') || target.classList.contains('tfr-disabled'))
|
|
199
|
+
return;
|
|
200
|
+
e.preventDefault();
|
|
201
|
+
const selectedIndex = Number(target.getAttribute('data-index'));
|
|
202
|
+
if (Number.isNaN(selectedIndex))
|
|
203
|
+
return;
|
|
204
|
+
const allButtons = document.querySelectorAll('.tfr-size-rec-select-button');
|
|
205
|
+
allButtons.forEach((button) => button.classList.remove('active'));
|
|
206
|
+
allButtons.item(selectedIndex).classList.add('active');
|
|
207
|
+
this.redraw(selectedIndex);
|
|
208
|
+
const selectedSizeId = Number(target.getAttribute('data-size-id'));
|
|
209
|
+
if (Number.isNaN(selectedSizeId))
|
|
210
|
+
return;
|
|
211
|
+
this.onTryOnClick(this.styleId, selectedSizeId, true);
|
|
212
|
+
}
|
|
213
|
+
renderSizeRec(recommended, sizes) {
|
|
214
|
+
this.tfrSizeRecSize.innerHTML = ` ${recommended}`;
|
|
215
|
+
const selectedSizeIndex = sizes.findIndex(({ size }) => size === recommended);
|
|
216
|
+
this.redraw = (index) => this.renderSizeRecTable(sizes, index);
|
|
217
|
+
this.redraw(selectedSizeIndex);
|
|
218
|
+
this.renderSizeRecSelect(sizes, selectedSizeIndex);
|
|
219
|
+
}
|
|
220
|
+
renderSizeRecTable(sizes, index) {
|
|
221
|
+
const { locations } = sizes[index];
|
|
222
|
+
const html = locations
|
|
223
|
+
.map(({ location, fit, isPerfect }) => this.renderSizeRecTableRow(location, fit, isPerfect))
|
|
224
|
+
.join('');
|
|
225
|
+
this.tfrSizeRecTable.innerHTML = html;
|
|
226
|
+
}
|
|
227
|
+
renderSizeRecSelect(sizes, index) {
|
|
228
|
+
const sizeNames = sizes.map(({ size }) => size);
|
|
229
|
+
const html = sizeNames
|
|
230
|
+
.map((name, i) => `<div class="tfr-size-rec-select-button ${i === index ? 'active' : ''}" data-index="${i}" data-size-id="${sizes[i].size_id}">${name}</div>`)
|
|
231
|
+
.join('');
|
|
232
|
+
this.tfrSizeRecSelect.innerHTML = html;
|
|
233
|
+
}
|
|
234
|
+
renderSizeRecSelectLoggedOut() {
|
|
235
|
+
const html = [
|
|
236
|
+
`<div class="tfr-size-rec-select-button tfr-disabled">M</div>`,
|
|
237
|
+
`<div class="tfr-size-rec-select-button tfr-disabled active">L</div>`,
|
|
238
|
+
`<div class="tfr-size-rec-select-button tfr-disabled">XL</div>`,
|
|
239
|
+
].join('');
|
|
240
|
+
this.tfrSizeRecSelect.innerHTML = html;
|
|
241
|
+
}
|
|
242
|
+
renderSizeRecTableRow(location, fit, isPerfect = false) {
|
|
243
|
+
return `<div class="tfr-size-rec-table-row">
|
|
244
|
+
<div class="tfr-size-rec-table-cell-left">${location}</div>
|
|
245
|
+
<div class="tfr-size-rec-table-cell-right ${isPerfect ? 'perfect' : ''}">
|
|
246
|
+
${fit}
|
|
247
|
+
</div>
|
|
248
|
+
</div>`;
|
|
249
|
+
}
|
|
250
|
+
renderGarmentLocations(locations) {
|
|
251
|
+
const innerHtml = locations
|
|
252
|
+
.map((location, index) => this.renderSizeRecTableRow(location, this.randomFit(index), true))
|
|
253
|
+
.join('');
|
|
254
|
+
const html = `<div id="tfr-logged-out-overlay-container">
|
|
255
|
+
<div id="tfr-logged-out-overlay">
|
|
256
|
+
Login to reveal how this item will fit specifically at each area of your body in different sizes
|
|
257
|
+
</div>
|
|
258
|
+
<div>
|
|
259
|
+
${innerHtml}
|
|
260
|
+
</div>
|
|
261
|
+
</div>`;
|
|
262
|
+
this.tfrSizeRecTable.innerHTML = html;
|
|
263
|
+
}
|
|
264
|
+
randomFit(index) {
|
|
265
|
+
const choices = ['Slightly Tight', 'Perfect Fit', 'Perfect Fit', 'Slightly Loose', 'Perfect Fit'];
|
|
266
|
+
return choices[index % choices.length];
|
|
267
|
+
}
|
|
268
|
+
toggletSizeRecSelectContainer() {
|
|
269
|
+
if (this.isCollapsed) {
|
|
270
|
+
this.isCollapsed = false;
|
|
271
|
+
this.tfrSizeRecTitleToggle.classList.add('tfr-chevron-up');
|
|
272
|
+
this.tfrSizeRecTitleToggle.classList.remove('tfr-chevron-down');
|
|
273
|
+
this.tfrToggleOpenElements.forEach((element) => (element.style.display = 'block'));
|
|
274
|
+
this.tfrToggleClosedElements.forEach((element) => (element.style.display = 'none'));
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
this.isCollapsed = true;
|
|
278
|
+
this.tfrSizeRecTitleToggle.classList.remove('tfr-chevron-up');
|
|
279
|
+
this.tfrSizeRecTitleToggle.classList.add('tfr-chevron-down');
|
|
280
|
+
this.tfrToggleOpenElements.forEach((element) => (element.style.display = 'none'));
|
|
281
|
+
this.tfrToggleClosedElements.forEach((element) => (element.style.display = 'block'));
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
render(sizeRecMainDiv) {
|
|
285
|
+
const body = `<div id="tfr-size-recommendations">
|
|
286
|
+
<div id="tfr-size-rec-loading">
|
|
287
|
+
<div class="lds-ellipsis">
|
|
288
|
+
<div></div>
|
|
289
|
+
<div></div>
|
|
290
|
+
<div></div>
|
|
291
|
+
<div></div>
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
<div id="tfr-size-recommendations-container">
|
|
295
|
+
<div id="tfr-size-rec-title-toggle" class="tfr-chevron-up">v</div>
|
|
296
|
+
|
|
297
|
+
<div class="tfr-logged-out">
|
|
298
|
+
<div class="tfr-flex tfr-gap tfr-mb-2 tfr-mobile-small-text">
|
|
299
|
+
<div>Uncertain of your size?</div>
|
|
300
|
+
|
|
301
|
+
<div class="tfr-toggle-closed">
|
|
302
|
+
<div class="tfr-flex tfr-items-center">
|
|
303
|
+
<div>Try</div>
|
|
304
|
+
<div class="tfr-powered-by-logo">${tfrDoor}</div>
|
|
305
|
+
<div class="tfr-powered-by-text-bold">The Fitting Room</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
<div class="tfr-toggle-open">
|
|
310
|
+
<div id="tfr-login-to-view" class="tfr-flex tfr-items-center">
|
|
311
|
+
${userIcon} Login to view
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<div class="tfr-logged-in">
|
|
318
|
+
<div id="tfr-size-rec-title">
|
|
319
|
+
Recommended Size:
|
|
320
|
+
<div id="tfr-size-rec-size">
|
|
321
|
+
<div class="tfr-size-rec-login-cta">
|
|
322
|
+
${userIcon} Sign up to view
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
</div>
|
|
326
|
+
</div>
|
|
327
|
+
|
|
328
|
+
<div class="tfr-toggle-open" style="width: 100%">
|
|
329
|
+
<div id="tfr-size-rec-select-container">
|
|
330
|
+
<div id="tfr-size-how-it-fits">Select size to see how it fits:</div>
|
|
331
|
+
|
|
332
|
+
<div id="tfr-size-rec-select"></div>
|
|
333
|
+
|
|
334
|
+
<div id="tfr-size-rec-subtitle">
|
|
335
|
+
How it fits
|
|
336
|
+
<span id="tfr-info-icon">${infoIcon}</span>
|
|
337
|
+
</div>
|
|
338
|
+
|
|
339
|
+
<div id="tfr-size-rec-table"></div>
|
|
340
|
+
|
|
341
|
+
<div id="tfr-try-on-button" class="tfr-try-on-button">Try On</div>
|
|
342
|
+
</div>
|
|
343
|
+
</div>
|
|
344
|
+
|
|
345
|
+
<div id="tfr-size-rec-action">
|
|
346
|
+
<div id="tfr-size-rec-action-login">Sign up or login</div>
|
|
347
|
+
<div id="tfr-size-rec-action-logout">Log out</div>
|
|
348
|
+
</div>
|
|
349
|
+
|
|
350
|
+
<div class="tfr-toggle-open">
|
|
351
|
+
<div class="tfr-powered-by">
|
|
352
|
+
<div>Powered by</div>
|
|
353
|
+
<div class="tfr-powered-by-logo">${tfrDoor}</div>
|
|
354
|
+
<div class="tfr-powered-by-text-bold">The Fitting Room</div>
|
|
355
|
+
</div>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
</div>
|
|
359
|
+
<div id="tfr-size-recommendation-error"></div>`;
|
|
360
|
+
sizeRecMainDiv.innerHTML = body;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=SizeRec.js.map
|