@faststore/components 2.0.83-alpha.0 → 2.0.87-alpha.0
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/dist/assets/SealCheck.d.ts +4 -0
- package/dist/assets/SealCheck.js +6 -0
- package/dist/assets/SealCheck.js.map +1 -0
- package/dist/assets/SealWarning.d.ts +4 -0
- package/dist/assets/SealWarning.js +6 -0
- package/dist/assets/SealWarning.js.map +1 -0
- package/dist/assets/index.d.ts +2 -0
- package/dist/assets/index.js +2 -0
- package/dist/assets/index.js.map +1 -1
- package/dist/hooks/UIProvider.d.ts +3 -3
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/molecules/SkuSelector/SkuSelector.d.ts +78 -0
- package/dist/molecules/SkuSelector/SkuSelector.js +31 -0
- package/dist/molecules/SkuSelector/SkuSelector.js.map +1 -0
- package/dist/molecules/SkuSelector/index.d.ts +2 -0
- package/dist/molecules/SkuSelector/index.js +2 -0
- package/dist/molecules/SkuSelector/index.js.map +1 -0
- package/dist/molecules/SkuSelector/useDefineVariant.d.ts +3 -0
- package/dist/molecules/SkuSelector/useDefineVariant.js +27 -0
- package/dist/molecules/SkuSelector/useDefineVariant.js.map +1 -0
- package/dist/molecules/SkuSelector/useSkuSlug.d.ts +6 -0
- package/dist/molecules/SkuSelector/useSkuSlug.js +23 -0
- package/dist/molecules/SkuSelector/useSkuSlug.js.map +1 -0
- package/dist/molecules/Toast/Toast.d.ts +3 -0
- package/dist/molecules/Toast/Toast.js +31 -0
- package/dist/molecules/Toast/Toast.js.map +1 -0
- package/dist/molecules/Toast/index.d.ts +1 -0
- package/dist/molecules/Toast/index.js +2 -0
- package/dist/molecules/Toast/index.js.map +1 -0
- package/package.json +2 -2
- package/src/assets/SealCheck.tsx +17 -0
- package/src/assets/SealWarning.tsx +17 -0
- package/src/assets/index.ts +2 -0
- package/src/hooks/UIProvider.tsx +3 -3
- package/src/hooks/index.ts +1 -1
- package/src/index.ts +3 -0
- package/src/molecules/SkuSelector/SkuSelector.tsx +181 -0
- package/src/molecules/SkuSelector/index.tsx +2 -0
- package/src/molecules/SkuSelector/useDefineVariant.ts +36 -0
- package/src/molecules/SkuSelector/useSkuSlug.ts +49 -0
- package/src/molecules/Toast/Toast.tsx +53 -0
- package/src/molecules/Toast/index.ts +1 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
// Icon from Phosphor Icons
|
|
3
|
+
const SealCheck = ({ size = 24 }) => (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, fill: "currentColor", viewBox: "0 0 256 256" },
|
|
4
|
+
React.createElement("path", { d: "M225.86,102.82c-3.77-3.94-7.67-8-9.14-11.57-1.36-3.27-1.44-8.69-1.52-13.94-.15-9.76-.31-20.82-8-28.51s-18.75-7.85-28.51-8c-5.25-.08-10.67-.16-13.94-1.52-3.56-1.47-7.63-5.37-11.57-9.14C146.28,23.51,138.44,16,128,16s-18.27,7.51-25.18,14.14c-3.94,3.77-8,7.67-11.57,9.14C88,40.64,82.56,40.72,77.31,40.8c-9.76.15-20.82.31-28.51,8S41,67.55,40.8,77.31c-.08,5.25-.16,10.67-1.52,13.94-1.47,3.56-5.37,7.63-9.14,11.57C23.51,109.72,16,117.56,16,128s7.51,18.27,14.14,25.18c3.77,3.94,7.67,8,9.14,11.57,1.36,3.27,1.44,8.69,1.52,13.94.15,9.76.31,20.82,8,28.51s18.75,7.85,28.51,8c5.25.08,10.67.16,13.94,1.52,3.56,1.47,7.63,5.37,11.57,9.14C109.72,232.49,117.56,240,128,240s18.27-7.51,25.18-14.14c3.94-3.77,8-7.67,11.57-9.14,3.27-1.36,8.69-1.44,13.94-1.52,9.76-.15,20.82-.31,28.51-8s7.85-18.75,8-28.51c.08-5.25.16-10.67,1.52-13.94,1.47-3.56,5.37-7.63,9.14-11.57C232.49,146.28,240,138.44,240,128S232.49,109.73,225.86,102.82Zm-11.55,39.29c-4.79,5-9.75,10.17-12.38,16.52-2.52,6.1-2.63,13.07-2.73,19.82-.1,7-.21,14.33-3.32,17.43s-10.39,3.22-17.43,3.32c-6.75.1-13.72.21-19.82,2.73-6.35,2.63-11.52,7.59-16.52,12.38S132,224,128,224s-9.15-4.92-14.11-9.69-10.17-9.75-16.52-12.38c-6.1-2.52-13.07-2.63-19.82-2.73-7-.1-14.33-.21-17.43-3.32s-3.22-10.39-3.32-17.43c-.1-6.75-.21-13.72-2.73-19.82-2.63-6.35-7.59-11.52-12.38-16.52S32,132,32,128s4.92-9.15,9.69-14.11,9.75-10.17,12.38-16.52c2.52-6.1,2.63-13.07,2.73-19.82.1-7,.21-14.33,3.32-17.43S70.51,56.9,77.55,56.8c6.75-.1,13.72-.21,19.82-2.73,6.35-2.63,11.52-7.59,16.52-12.38S124,32,128,32s9.15,4.92,14.11,9.69,10.17,9.75,16.52,12.38c6.1,2.52,13.07,2.63,19.82,2.73,7,.1,14.33.21,17.43,3.32s3.22,10.39,3.32,17.43c.1,6.75.21,13.72,2.73,19.82,2.63,6.35,7.59,11.52,12.38,16.52S224,124,224,128,219.08,137.15,214.31,142.11ZM173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34Z" })));
|
|
5
|
+
export default SealCheck;
|
|
6
|
+
//# sourceMappingURL=SealCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SealCheck.js","sourceRoot":"","sources":["../../src/assets/SealCheck.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,2BAA2B;AAC3B,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAa,EAAE,EAAE,CAAC,CAC9C,6BACE,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,IAAI,EAAC,cAAc,EACnB,OAAO,EAAC,aAAa;IAErB,8BAAM,CAAC,EAAC,40DAA40D,GAAQ,CACx1D,CACP,CAAA;AAED,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
// Icon from Phosphor Icons
|
|
3
|
+
const SealWarning = ({ size = 24 }) => (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, fill: "currentColor", viewBox: "0 0 256 256" },
|
|
4
|
+
React.createElement("path", { d: "M225.86,102.82c-3.77-3.94-7.67-8-9.14-11.57-1.36-3.27-1.44-8.69-1.52-13.94-.15-9.76-.31-20.82-8-28.51s-18.75-7.85-28.51-8c-5.25-.08-10.67-.16-13.94-1.52-3.56-1.47-7.63-5.37-11.57-9.14C146.28,23.51,138.44,16,128,16s-18.27,7.51-25.18,14.14c-3.94,3.77-8,7.67-11.57,9.14C88,40.64,82.56,40.72,77.31,40.8c-9.76.15-20.82.31-28.51,8S41,67.55,40.8,77.31c-.08,5.25-.16,10.67-1.52,13.94-1.47,3.56-5.37,7.63-9.14,11.57C23.51,109.72,16,117.56,16,128s7.51,18.27,14.14,25.18c3.77,3.94,7.67,8,9.14,11.57,1.36,3.27,1.44,8.69,1.52,13.94.15,9.76.31,20.82,8,28.51s18.75,7.85,28.51,8c5.25.08,10.67.16,13.94,1.52,3.56,1.47,7.63,5.37,11.57,9.14C109.72,232.49,117.56,240,128,240s18.27-7.51,25.18-14.14c3.94-3.77,8-7.67,11.57-9.14,3.27-1.36,8.69-1.44,13.94-1.52,9.76-.15,20.82-.31,28.51-8s7.85-18.75,8-28.51c.08-5.25.16-10.67,1.52-13.94,1.47-3.56,5.37-7.63,9.14-11.57C232.49,146.28,240,138.44,240,128S232.49,109.73,225.86,102.82Zm-11.55,39.29c-4.79,5-9.75,10.17-12.38,16.52-2.52,6.1-2.63,13.07-2.73,19.82-.1,7-.21,14.33-3.32,17.43s-10.39,3.22-17.43,3.32c-6.75.1-13.72.21-19.82,2.73-6.35,2.63-11.52,7.59-16.52,12.38S132,224,128,224s-9.15-4.92-14.11-9.69-10.17-9.75-16.52-12.38c-6.1-2.52-13.07-2.63-19.82-2.73-7-.1-14.33-.21-17.43-3.32s-3.22-10.39-3.32-17.43c-.1-6.75-.21-13.72-2.73-19.82-2.63-6.35-7.59-11.52-12.38-16.52S32,132,32,128s4.92-9.15,9.69-14.11,9.75-10.17,12.38-16.52c2.52-6.1,2.63-13.07,2.73-19.82.1-7,.21-14.33,3.32-17.43S70.51,56.9,77.55,56.8c6.75-.1,13.72-.21,19.82-2.73,6.35-2.63,11.52-7.59,16.52-12.38S124,32,128,32s9.15,4.92,14.11,9.69,10.17,9.75,16.52,12.38c6.1,2.52,13.07,2.63,19.82,2.73,7,.1,14.33.21,17.43,3.32s3.22,10.39,3.32,17.43c.1,6.75.21,13.72,2.73,19.82,2.63,6.35,7.59,11.52,12.38,16.52S224,124,224,128,219.08,137.15,214.31,142.11ZM120,136V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z" })));
|
|
5
|
+
export default SealWarning;
|
|
6
|
+
//# sourceMappingURL=SealWarning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SealWarning.js","sourceRoot":"","sources":["../../src/assets/SealWarning.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,2BAA2B;AAC3B,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAa,EAAE,EAAE,CAAC,CAChD,6BACE,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,IAAI,EAAC,cAAc,EACnB,OAAO,EAAC,aAAa;IAErB,8BAAM,CAAC,EAAC,kyDAAkyD,GAAQ,CAC9yD,CACP,CAAA;AAED,eAAe,WAAW,CAAA"}
|
package/dist/assets/index.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export { default as MagnifyingGlass } from './MagnifyingGlass';
|
|
|
14
14
|
export { default as MinusCircle } from './MinusCircle';
|
|
15
15
|
export { default as PlusCircle } from './PlusCircle';
|
|
16
16
|
export { default as Ruler } from './Ruler';
|
|
17
|
+
export { default as SealCheck } from './SealCheck';
|
|
18
|
+
export { default as SealWarning } from './SealWarning';
|
|
17
19
|
export { default as ShoppingCart } from './ShoppingCart';
|
|
18
20
|
export { default as Star } from './Star';
|
|
19
21
|
export { default as TagIcon } from './TagIcon';
|
package/dist/assets/index.js
CHANGED
|
@@ -15,6 +15,8 @@ export { default as MagnifyingGlass } from './MagnifyingGlass';
|
|
|
15
15
|
export { default as MinusCircle } from './MinusCircle';
|
|
16
16
|
export { default as PlusCircle } from './PlusCircle';
|
|
17
17
|
export { default as Ruler } from './Ruler';
|
|
18
|
+
export { default as SealCheck } from './SealCheck';
|
|
19
|
+
export { default as SealWarning } from './SealWarning';
|
|
18
20
|
export { default as ShoppingCart } from './ShoppingCart';
|
|
19
21
|
export { default as Star } from './Star';
|
|
20
22
|
export { default as TagIcon } from './TagIcon';
|
package/dist/assets/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,cAAc,gBAAgB,CAAA;AAE9B,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,cAAc,gBAAgB,CAAA;AAE9B,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { PropsWithChildren } from 'react';
|
|
2
|
-
interface Toast {
|
|
1
|
+
import type { PropsWithChildren, ReactNode } from 'react';
|
|
2
|
+
export interface Toast {
|
|
3
3
|
message: string;
|
|
4
4
|
status: 'ERROR' | 'WARNING' | 'INFO';
|
|
5
5
|
title?: string;
|
|
6
|
-
icon?:
|
|
6
|
+
icon?: ReactNode;
|
|
7
7
|
}
|
|
8
8
|
interface State {
|
|
9
9
|
/** Cart sidebar */
|
package/dist/hooks/index.d.ts
CHANGED
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAuB,KAAK,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -76,10 +76,13 @@ export { default as SearchTop, SearchTopTerm } from './molecules/SearchTop';
|
|
|
76
76
|
export type { SearchTopProps, SearchTopTermProps } from './molecules/SearchTop';
|
|
77
77
|
export { default as SelectField } from './molecules/SelectField';
|
|
78
78
|
export type { SelectFieldProps } from './molecules/SelectField';
|
|
79
|
+
export { default as SkuSelector } from './molecules/SkuSelector';
|
|
80
|
+
export type { SkuSelectorProps, SkuOption } from './molecules/SkuSelector';
|
|
79
81
|
export { Table, TableBody, TableCell, TableFooter, TableHead, TableRow, } from './molecules/Table';
|
|
80
82
|
export type { TableProps, TableBodyProps, TableCellProps, TableFooterProps, TableHeadProps, TableRowProps, } from './molecules/Table';
|
|
81
83
|
export { default as Tag } from './molecules/Tag';
|
|
82
84
|
export type { TagProps } from './molecules/Tag';
|
|
85
|
+
export { default as Toast } from './molecules/Toast';
|
|
83
86
|
export { default as Toggle } from './molecules/Toggle';
|
|
84
87
|
export type { ToggleProps } from './molecules/Toggle';
|
|
85
88
|
export { default as ToggleField } from './molecules/ToggleField';
|
package/dist/index.js
CHANGED
|
@@ -43,8 +43,10 @@ export { default as SearchHistory, SearchHistoryTerm, } from './molecules/Search
|
|
|
43
43
|
export { default as SearchProducts, SearchProductItem, SearchProductItemImage, SearchProductItemContent, } from './molecules/SearchProducts';
|
|
44
44
|
export { default as SearchTop, SearchTopTerm } from './molecules/SearchTop';
|
|
45
45
|
export { default as SelectField } from './molecules/SelectField';
|
|
46
|
+
export { default as SkuSelector } from './molecules/SkuSelector';
|
|
46
47
|
export { Table, TableBody, TableCell, TableFooter, TableHead, TableRow, } from './molecules/Table';
|
|
47
48
|
export { default as Tag } from './molecules/Tag';
|
|
49
|
+
export { default as Toast } from './molecules/Toast';
|
|
48
50
|
export { default as Toggle } from './molecules/Toggle';
|
|
49
51
|
export { default as ToggleField } from './molecules/ToggleField';
|
|
50
52
|
export { default as QuantitySelector } from './molecules/QuantitySelector';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { FunctionComponent, HTMLAttributes } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { LinkProps, LinkElementType } from '../..';
|
|
4
|
+
import { Variant } from './useDefineVariant';
|
|
5
|
+
export interface SkuOption {
|
|
6
|
+
/**
|
|
7
|
+
* Alternative text description of the image.
|
|
8
|
+
*/
|
|
9
|
+
alt?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Image URL.
|
|
12
|
+
*/
|
|
13
|
+
src?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Label to describe the option when selected. This is mandatory if you want to use the `image` variant.'
|
|
16
|
+
*/
|
|
17
|
+
label: string;
|
|
18
|
+
/**
|
|
19
|
+
* Current value for this option.
|
|
20
|
+
*/
|
|
21
|
+
value: string;
|
|
22
|
+
/**
|
|
23
|
+
* Specifies that this option should be disabled.
|
|
24
|
+
*/
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Hex color code for this option. This is mandatory if you want to use the `Color` variant.
|
|
28
|
+
*/
|
|
29
|
+
hexColor?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SkuSelectorProps extends HTMLAttributes<HTMLDivElement> {
|
|
32
|
+
/**
|
|
33
|
+
* ID to find this component in testing tools (e.g.: cypress,
|
|
34
|
+
* testing-library, and jest).
|
|
35
|
+
*/
|
|
36
|
+
testId?: string;
|
|
37
|
+
/**
|
|
38
|
+
* ID of the current instance of the component.
|
|
39
|
+
*/
|
|
40
|
+
id?: string;
|
|
41
|
+
/**
|
|
42
|
+
* SKU options that should be rendered.
|
|
43
|
+
*/
|
|
44
|
+
availableVariations: Record<string, SkuOption[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Name of the SKU property that this selector is relative to.
|
|
47
|
+
*/
|
|
48
|
+
skuPropertyName: string;
|
|
49
|
+
/**
|
|
50
|
+
* Currently active variation's value.
|
|
51
|
+
*/
|
|
52
|
+
activeVariations: Record<string, string>;
|
|
53
|
+
/**
|
|
54
|
+
* Optional variant type, when is not passed the type is inferred based on options properties
|
|
55
|
+
*/
|
|
56
|
+
variant?: Variant;
|
|
57
|
+
/**
|
|
58
|
+
* Extends all Link Props.
|
|
59
|
+
*/
|
|
60
|
+
linkProps?: Partial<LinkProps<LinkElementType>>;
|
|
61
|
+
/**
|
|
62
|
+
* Optional function to determines the href string.
|
|
63
|
+
*/
|
|
64
|
+
getItemHref?: (option: SkuOption) => string;
|
|
65
|
+
/**
|
|
66
|
+
* Maps property value combinations to their respective SKU's slug
|
|
67
|
+
*/
|
|
68
|
+
slugsMap: Record<string, string>;
|
|
69
|
+
/**
|
|
70
|
+
* Function that returns a React component that will be used to render images.
|
|
71
|
+
*/
|
|
72
|
+
ImageComponent?: FunctionComponent<{
|
|
73
|
+
src: string;
|
|
74
|
+
alt: string;
|
|
75
|
+
}>;
|
|
76
|
+
}
|
|
77
|
+
declare const SkuSelector: React.ForwardRefExoticComponent<SkuSelectorProps & React.RefAttributes<HTMLDivElement>>;
|
|
78
|
+
export default SkuSelector;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { Label, SROnly, Link } from '../..';
|
|
3
|
+
import { useDefineVariant } from './useDefineVariant';
|
|
4
|
+
import { useSkuSlug } from './useSkuSlug';
|
|
5
|
+
// TODO: Change by ImageComponent when it be right
|
|
6
|
+
const ImageComponentFallback = ({ src, alt, ...otherProps }) => React.createElement("img", { src: src, alt: alt, ...otherProps });
|
|
7
|
+
const SkuSelector = forwardRef(function SkuSelector({ availableVariations, skuPropertyName, testId, activeVariations, linkProps, slugsMap, getItemHref: getItemHrefProp, ImageComponent = ImageComponentFallback, variant: variantProp, ...otherProps }, ref) {
|
|
8
|
+
const activeSelectorValue = activeVariations[skuPropertyName];
|
|
9
|
+
const options = availableVariations[skuPropertyName];
|
|
10
|
+
const variant = useDefineVariant(options, variantProp);
|
|
11
|
+
const { getItemHref } = useSkuSlug(activeVariations, slugsMap, skuPropertyName, getItemHrefProp);
|
|
12
|
+
return (React.createElement("div", { ref: ref, "data-fs-sku-selector": true, "data-testid": testId, "data-fs-sku-selector-variant": variant, ...otherProps },
|
|
13
|
+
skuPropertyName && (React.createElement(Label, { "data-fs-sku-selector-title": true },
|
|
14
|
+
skuPropertyName,
|
|
15
|
+
": ",
|
|
16
|
+
React.createElement("strong", null, activeSelectorValue))),
|
|
17
|
+
React.createElement("ul", { "data-fs-sku-selector-list": true }, options.map((option, index) => {
|
|
18
|
+
return (React.createElement("li", { key: String(index), title: option.label, "data-fs-sku-selector-option": true, "data-fs-sku-selector-disabled": option.disabled, "data-fs-sku-selector-checked": option.value === activeVariations[skuPropertyName] },
|
|
19
|
+
React.createElement(Link, { "data-fs-sku-selector-option-link": true, href: getItemHref(option), ...linkProps },
|
|
20
|
+
React.createElement(SROnly, { text: option.label })),
|
|
21
|
+
variant === 'label' && React.createElement("span", null, option.value),
|
|
22
|
+
variant === 'image' && ImageComponent && (React.createElement("span", null,
|
|
23
|
+
React.createElement(ImageComponent, { src: option.src ?? '', alt: option.alt ?? '', "data-fs-sku-selector-option-image": true }))),
|
|
24
|
+
variant === 'color' && (React.createElement("span", null,
|
|
25
|
+
React.createElement("div", { "data-fs-sku-selector-option-color": true, title: option.value, style: {
|
|
26
|
+
'--data-fs-sku-selector-option-color-bkg-color': option.hexColor,
|
|
27
|
+
} })))));
|
|
28
|
+
}))));
|
|
29
|
+
});
|
|
30
|
+
export default SkuSelector;
|
|
31
|
+
//# sourceMappingURL=SkuSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkuSelector.js","sourceRoot":"","sources":["../../../src/molecules/SkuSelector/SkuSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAA8B,MAAM,OAAO,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAW,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,kDAAkD;AAClD,MAAM,sBAAsB,GAAuC,CAAC,EAClE,GAAG,EACH,GAAG,EACH,GAAG,UAAU,EACd,EAAE,EAAE,CAAC,6BAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAM,UAAU,GAAI,CAAA;AA4EjD,MAAM,WAAW,GAAG,UAAU,CAC5B,SAAS,WAAW,CAClB,EACE,mBAAmB,EACnB,eAAe,EACf,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,WAAW,EAAE,eAAe,EAC5B,cAAc,GAAG,sBAAsB,EACvC,OAAO,EAAE,WAAW,EACpB,GAAG,UAAU,EACd,EACD,GAAG;IAEH,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAA;IAEpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAEtD,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;IAEhG,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,+CAEK,MAAM,kCACW,OAAO,KACjC,UAAU;QAEb,eAAe,IAAI,CAClB,oBAAC,KAAK;YACH,eAAe;;YAAG,oCAAS,mBAAmB,CAAU,CACnD,CACT;QACD,iEACG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7B,OAAO,CACL,4BACE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAClB,KAAK,EAAE,MAAM,CAAC,KAAK,wEAEY,MAAM,CAAC,QAAQ,kCAE5C,MAAM,CAAC,KAAK,KAAK,gBAAgB,CAAC,eAAe,CAAC;gBAGpD,oBAAC,IAAI,8CAEH,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,KACrB,SAAS;oBAEb,oBAAC,MAAM,IAAC,IAAI,EAAE,MAAM,CAAC,KAAK,GAAI,CACzB;gBAEN,OAAO,KAAK,OAAO,IAAI,kCAAO,MAAM,CAAC,KAAK,CAAQ;gBAElD,OAAO,KAAK,OAAO,IAAI,cAAc,IAAI,CACxC;oBACE,oBAAC,cAAc,IACb,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EACrB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,8CAErB,CACG,CACR;gBAEA,OAAO,KAAK,OAAO,IAAI,CACtB;oBACE,wEAEE,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,KAAK,EACH;4BACE,+CAA+C,EAC7C,MAAM,CAAC,QAAQ;yBACK,GAErB,CACF,CACR,CACE,CACN,CAAA;QACH,CAAC,CAAC,CACC,CACD,CACP,CAAA;AACH,CAAC,CACF,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/molecules/SkuSelector/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
const getImageName = (src) => {
|
|
3
|
+
const sourcePath = new URL(src).pathname;
|
|
4
|
+
const imageName = sourcePath.split('/').at(-1);
|
|
5
|
+
return imageName;
|
|
6
|
+
};
|
|
7
|
+
export const useDefineVariant = (options, variant) => useMemo(() => {
|
|
8
|
+
if (variant)
|
|
9
|
+
return variant;
|
|
10
|
+
const allOptionsHaveHexColor = options.every((option) => option.hexColor);
|
|
11
|
+
if (allOptionsHaveHexColor) {
|
|
12
|
+
return 'color';
|
|
13
|
+
}
|
|
14
|
+
const firstImageName = options[0]?.src && getImageName(options[0].src);
|
|
15
|
+
const areSourcesEqualsOrNull = options.every((option) => {
|
|
16
|
+
if (!option.src) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
const optionImageName = getImageName(option.src);
|
|
20
|
+
return optionImageName === firstImageName;
|
|
21
|
+
});
|
|
22
|
+
if (!areSourcesEqualsOrNull) {
|
|
23
|
+
return 'image';
|
|
24
|
+
}
|
|
25
|
+
return 'label';
|
|
26
|
+
}, [options, variant]);
|
|
27
|
+
//# sourceMappingURL=useDefineVariant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDefineVariant.js","sourceRoot":"","sources":["../../../src/molecules/SkuSelector/useDefineVariant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAK/B,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE;IACnC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;IACxC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAoB,EAAE,OAAiB,EAAW,EAAE,CACnF,OAAO,CAAC,GAAG,EAAE;IACX,IAAG,OAAO;QAAE,OAAO,OAAO,CAAA;IAE1B,MAAM,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACzE,IAAI,sBAAsB,EAAE;QAC1B,OAAO,OAAO,CAAA;KACf;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAEtE,MAAM,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;QACtD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACf,OAAO,IAAI,CAAA;SACZ;QACD,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChD,OAAO,eAAe,KAAK,cAAc,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sBAAsB,EAAE;QAC3B,OAAO,OAAO,CAAA;KACf;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SkuOption } from './SkuSelector';
|
|
2
|
+
export declare const useSkuSlug: (activeVariations: Record<string, string>, slugsMap: Record<string, string>, skuPropertyName: string, getItemHrefProp?: ((option: SkuOption) => string) | undefined) => {
|
|
3
|
+
getItemHref: (option: SkuOption) => string | {
|
|
4
|
+
getItemHrefProp: (option: SkuOption) => string;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
function getSkuSlug(slugsMap, selectedVariations, dominantVariation) {
|
|
3
|
+
const slugsMapKey = Object.entries(selectedVariations).flat().join('-');
|
|
4
|
+
if (slugsMapKey in slugsMap) {
|
|
5
|
+
return slugsMap[slugsMapKey];
|
|
6
|
+
}
|
|
7
|
+
const possibleVariants = Object.keys(slugsMap);
|
|
8
|
+
const firstVariationForDominantValue = possibleVariants.find((slug) => slug.includes(`${dominantVariation}-${selectedVariations[dominantVariation]}`));
|
|
9
|
+
return slugsMap[firstVariationForDominantValue ?? possibleVariants[0]];
|
|
10
|
+
}
|
|
11
|
+
export const useSkuSlug = (activeVariations, slugsMap, skuPropertyName, getItemHrefProp) => {
|
|
12
|
+
const getItemHref = useCallback((option) => {
|
|
13
|
+
if (getItemHrefProp)
|
|
14
|
+
return { getItemHrefProp };
|
|
15
|
+
const currentItemHref = `/${getSkuSlug(slugsMap, {
|
|
16
|
+
...activeVariations,
|
|
17
|
+
[skuPropertyName]: option.value,
|
|
18
|
+
}, skuPropertyName)}/p`;
|
|
19
|
+
return currentItemHref;
|
|
20
|
+
}, [activeVariations, getItemHrefProp, slugsMap, skuPropertyName]);
|
|
21
|
+
return { getItemHref };
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=useSkuSlug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSkuSlug.js","sourceRoot":"","sources":["../../../src/molecules/SkuSelector/useSkuSlug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGnC,SAAS,UAAU,CACjB,QAAgC,EAChC,kBAA0C,EAC1C,iBAAyB;IAEzB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEvE,IAAI,WAAW,IAAI,QAAQ,EAAE;QAC3B,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAA;KAC7B;IAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAE9C,MAAM,8BAA8B,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACpE,IAAI,CAAC,QAAQ,CACX,GAAG,iBAAiB,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAChE,CACF,CAAA;IAED,OAAO,QAAQ,CAAC,8BAA8B,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,gBAAwC,EACxC,QAAgC,EAChC,eAAuB,EACvB,eAA+C,EAC/C,EAAE;IACF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAAiB,EAAE,EAAE;QACpB,IAAG,eAAe;YAAE,OAAO,EAAE,eAAe,EAAE,CAAA;QAE9C,MAAM,eAAe,GAAG,IAAI,UAAU,CACpC,QAAQ,EACR;YACE,GAAG,gBAAgB;YACnB,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,KAAK;SAChC,EACD,eAAe,CAChB,IAAI,CAAA;QACL,OAAO,eAAe,CAAA;IACxB,CAAC,EACD,CAAC,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,CAAC,CAC/D,CAAA;IACD,OAAO,EAAE,WAAW,EAAE,CAAA;AACxB,CAAC,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { Icon } from '../..';
|
|
3
|
+
import { useUI } from '../../hooks';
|
|
4
|
+
function Toast() {
|
|
5
|
+
const { toasts, popToast } = useUI();
|
|
6
|
+
const toast = toasts[toasts.length - 1];
|
|
7
|
+
const timeoutRef = useRef();
|
|
8
|
+
const [visible, setVisible] = useState(false);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (!toast) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const timeout = setTimeout(() => setVisible(true), 10);
|
|
14
|
+
return () => clearTimeout(timeout);
|
|
15
|
+
}, [toast]);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
timeoutRef.current = setTimeout(() => setVisible(false), 6e3);
|
|
18
|
+
return () => timeoutRef.current && clearTimeout(timeoutRef.current);
|
|
19
|
+
}, [toast]);
|
|
20
|
+
if (toast === undefined) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return (React.createElement("div", { role: "status", "data-fs-toast": true, "data-fs-toast-visible": visible, onTransitionEnd: () => !visible && popToast() },
|
|
24
|
+
toast.icon && (React.createElement("div", { "data-fs-toast-icon-container": true },
|
|
25
|
+
React.createElement(Icon, { component: toast.icon }))),
|
|
26
|
+
React.createElement("div", { "data-fs-toast-content": true },
|
|
27
|
+
toast.title && React.createElement("p", { "data-fs-toast-title": true }, toast.title),
|
|
28
|
+
React.createElement("p", { "data-fs-toast-message": true }, toast.message))));
|
|
29
|
+
}
|
|
30
|
+
export default Toast;
|
|
31
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/molecules/Toast/Toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,SAAS,KAAK;IACZ,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,MAAM,EAAkB,CAAA;IAE3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,SAAS,CAAA;SACjB;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QAEtD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAA;QAE7D,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACrE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CACL,6BACE,IAAI,EAAC,QAAQ,kDAEU,OAAO,EAC9B,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,QAAQ,EAAE;QAE5C,KAAK,CAAC,IAAI,IAAI,CACb;YACE,oBAAC,IAAI,IAAC,SAAS,EAAE,KAAK,CAAC,IAAI,GAAI,CAC3B,CACP;QACD;YACG,KAAK,CAAC,KAAK,IAAI,0DAAwB,KAAK,CAAC,KAAK,CAAK;YACxD,4DAA0B,KAAK,CAAC,OAAO,CAAK,CACxC,CACF,CACP,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Toast';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/molecules/Toast/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faststore/components",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.87-alpha.0",
|
|
4
4
|
"module": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
6
6
|
"author": "Emerson Laurentino @emersonlaurentino",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"node": "16.18.0",
|
|
31
31
|
"yarn": "1.19.1"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "b3bf59d620318b0bd4511eb4731eb716006c0fb4"
|
|
34
34
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { IconProps } from './IconProps'
|
|
3
|
+
|
|
4
|
+
// Icon from Phosphor Icons
|
|
5
|
+
const SealCheck = ({ size = 24 }: IconProps) => (
|
|
6
|
+
<svg
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
width={size}
|
|
9
|
+
height={size}
|
|
10
|
+
fill="currentColor"
|
|
11
|
+
viewBox="0 0 256 256"
|
|
12
|
+
>
|
|
13
|
+
<path d="M225.86,102.82c-3.77-3.94-7.67-8-9.14-11.57-1.36-3.27-1.44-8.69-1.52-13.94-.15-9.76-.31-20.82-8-28.51s-18.75-7.85-28.51-8c-5.25-.08-10.67-.16-13.94-1.52-3.56-1.47-7.63-5.37-11.57-9.14C146.28,23.51,138.44,16,128,16s-18.27,7.51-25.18,14.14c-3.94,3.77-8,7.67-11.57,9.14C88,40.64,82.56,40.72,77.31,40.8c-9.76.15-20.82.31-28.51,8S41,67.55,40.8,77.31c-.08,5.25-.16,10.67-1.52,13.94-1.47,3.56-5.37,7.63-9.14,11.57C23.51,109.72,16,117.56,16,128s7.51,18.27,14.14,25.18c3.77,3.94,7.67,8,9.14,11.57,1.36,3.27,1.44,8.69,1.52,13.94.15,9.76.31,20.82,8,28.51s18.75,7.85,28.51,8c5.25.08,10.67.16,13.94,1.52,3.56,1.47,7.63,5.37,11.57,9.14C109.72,232.49,117.56,240,128,240s18.27-7.51,25.18-14.14c3.94-3.77,8-7.67,11.57-9.14,3.27-1.36,8.69-1.44,13.94-1.52,9.76-.15,20.82-.31,28.51-8s7.85-18.75,8-28.51c.08-5.25.16-10.67,1.52-13.94,1.47-3.56,5.37-7.63,9.14-11.57C232.49,146.28,240,138.44,240,128S232.49,109.73,225.86,102.82Zm-11.55,39.29c-4.79,5-9.75,10.17-12.38,16.52-2.52,6.1-2.63,13.07-2.73,19.82-.1,7-.21,14.33-3.32,17.43s-10.39,3.22-17.43,3.32c-6.75.1-13.72.21-19.82,2.73-6.35,2.63-11.52,7.59-16.52,12.38S132,224,128,224s-9.15-4.92-14.11-9.69-10.17-9.75-16.52-12.38c-6.1-2.52-13.07-2.63-19.82-2.73-7-.1-14.33-.21-17.43-3.32s-3.22-10.39-3.32-17.43c-.1-6.75-.21-13.72-2.73-19.82-2.63-6.35-7.59-11.52-12.38-16.52S32,132,32,128s4.92-9.15,9.69-14.11,9.75-10.17,12.38-16.52c2.52-6.1,2.63-13.07,2.73-19.82.1-7,.21-14.33,3.32-17.43S70.51,56.9,77.55,56.8c6.75-.1,13.72-.21,19.82-2.73,6.35-2.63,11.52-7.59,16.52-12.38S124,32,128,32s9.15,4.92,14.11,9.69,10.17,9.75,16.52,12.38c6.1,2.52,13.07,2.63,19.82,2.73,7,.1,14.33.21,17.43,3.32s3.22,10.39,3.32,17.43c.1,6.75.21,13.72,2.73,19.82,2.63,6.35,7.59,11.52,12.38,16.52S224,124,224,128,219.08,137.15,214.31,142.11ZM173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34Z"></path>
|
|
14
|
+
</svg>
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
export default SealCheck
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { IconProps } from './IconProps'
|
|
3
|
+
|
|
4
|
+
// Icon from Phosphor Icons
|
|
5
|
+
const SealWarning = ({ size = 24 }: IconProps) => (
|
|
6
|
+
<svg
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
width={size}
|
|
9
|
+
height={size}
|
|
10
|
+
fill="currentColor"
|
|
11
|
+
viewBox="0 0 256 256"
|
|
12
|
+
>
|
|
13
|
+
<path d="M225.86,102.82c-3.77-3.94-7.67-8-9.14-11.57-1.36-3.27-1.44-8.69-1.52-13.94-.15-9.76-.31-20.82-8-28.51s-18.75-7.85-28.51-8c-5.25-.08-10.67-.16-13.94-1.52-3.56-1.47-7.63-5.37-11.57-9.14C146.28,23.51,138.44,16,128,16s-18.27,7.51-25.18,14.14c-3.94,3.77-8,7.67-11.57,9.14C88,40.64,82.56,40.72,77.31,40.8c-9.76.15-20.82.31-28.51,8S41,67.55,40.8,77.31c-.08,5.25-.16,10.67-1.52,13.94-1.47,3.56-5.37,7.63-9.14,11.57C23.51,109.72,16,117.56,16,128s7.51,18.27,14.14,25.18c3.77,3.94,7.67,8,9.14,11.57,1.36,3.27,1.44,8.69,1.52,13.94.15,9.76.31,20.82,8,28.51s18.75,7.85,28.51,8c5.25.08,10.67.16,13.94,1.52,3.56,1.47,7.63,5.37,11.57,9.14C109.72,232.49,117.56,240,128,240s18.27-7.51,25.18-14.14c3.94-3.77,8-7.67,11.57-9.14,3.27-1.36,8.69-1.44,13.94-1.52,9.76-.15,20.82-.31,28.51-8s7.85-18.75,8-28.51c.08-5.25.16-10.67,1.52-13.94,1.47-3.56,5.37-7.63,9.14-11.57C232.49,146.28,240,138.44,240,128S232.49,109.73,225.86,102.82Zm-11.55,39.29c-4.79,5-9.75,10.17-12.38,16.52-2.52,6.1-2.63,13.07-2.73,19.82-.1,7-.21,14.33-3.32,17.43s-10.39,3.22-17.43,3.32c-6.75.1-13.72.21-19.82,2.73-6.35,2.63-11.52,7.59-16.52,12.38S132,224,128,224s-9.15-4.92-14.11-9.69-10.17-9.75-16.52-12.38c-6.1-2.52-13.07-2.63-19.82-2.73-7-.1-14.33-.21-17.43-3.32s-3.22-10.39-3.32-17.43c-.1-6.75-.21-13.72-2.73-19.82-2.63-6.35-7.59-11.52-12.38-16.52S32,132,32,128s4.92-9.15,9.69-14.11,9.75-10.17,12.38-16.52c2.52-6.1,2.63-13.07,2.73-19.82.1-7,.21-14.33,3.32-17.43S70.51,56.9,77.55,56.8c6.75-.1,13.72-.21,19.82-2.73,6.35-2.63,11.52-7.59,16.52-12.38S124,32,128,32s9.15,4.92,14.11,9.69,10.17,9.75,16.52,12.38c6.1,2.52,13.07,2.63,19.82,2.73,7,.1,14.33.21,17.43,3.32s3.22,10.39,3.32,17.43c.1,6.75.21,13.72,2.73,19.82,2.63,6.35,7.59,11.52,12.38,16.52S224,124,224,128,219.08,137.15,214.31,142.11ZM120,136V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"></path>
|
|
14
|
+
</svg>
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
export default SealWarning
|
package/src/assets/index.ts
CHANGED
|
@@ -16,6 +16,8 @@ export { default as MagnifyingGlass } from './MagnifyingGlass'
|
|
|
16
16
|
export { default as MinusCircle } from './MinusCircle'
|
|
17
17
|
export { default as PlusCircle } from './PlusCircle'
|
|
18
18
|
export { default as Ruler } from './Ruler'
|
|
19
|
+
export { default as SealCheck } from './SealCheck'
|
|
20
|
+
export { default as SealWarning } from './SealWarning'
|
|
19
21
|
export { default as ShoppingCart } from './ShoppingCart'
|
|
20
22
|
export { default as Star } from './Star'
|
|
21
23
|
export { default as TagIcon } from './TagIcon'
|
package/src/hooks/UIProvider.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { PropsWithChildren } from 'react'
|
|
1
|
+
import type { PropsWithChildren, ReactNode } from 'react'
|
|
2
2
|
import React, { createContext, useContext, useMemo, useReducer } from 'react'
|
|
3
3
|
|
|
4
|
-
interface Toast {
|
|
4
|
+
export interface Toast {
|
|
5
5
|
message: string
|
|
6
6
|
status: 'ERROR' | 'WARNING' | 'INFO'
|
|
7
7
|
title?: string
|
|
8
|
-
icon?:
|
|
8
|
+
icon?: ReactNode
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
interface State {
|
package/src/hooks/index.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -148,6 +148,8 @@ export { default as SearchTop, SearchTopTerm } from './molecules/SearchTop'
|
|
|
148
148
|
export type { SearchTopProps, SearchTopTermProps } from './molecules/SearchTop'
|
|
149
149
|
export { default as SelectField } from './molecules/SelectField'
|
|
150
150
|
export type { SelectFieldProps } from './molecules/SelectField'
|
|
151
|
+
export { default as SkuSelector } from './molecules/SkuSelector'
|
|
152
|
+
export type { SkuSelectorProps, SkuOption } from './molecules/SkuSelector'
|
|
151
153
|
export {
|
|
152
154
|
Table,
|
|
153
155
|
TableBody,
|
|
@@ -166,6 +168,7 @@ export type {
|
|
|
166
168
|
} from './molecules/Table'
|
|
167
169
|
export { default as Tag } from './molecules/Tag'
|
|
168
170
|
export type { TagProps } from './molecules/Tag'
|
|
171
|
+
export { default as Toast } from './molecules/Toast'
|
|
169
172
|
export { default as Toggle } from './molecules/Toggle'
|
|
170
173
|
export type { ToggleProps } from './molecules/Toggle'
|
|
171
174
|
export { default as ToggleField } from './molecules/ToggleField'
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/* eslint-disable @next/next/no-img-element */
|
|
2
|
+
import type { FunctionComponent, HTMLAttributes } from 'react'
|
|
3
|
+
import React, { forwardRef } from 'react'
|
|
4
|
+
import { Label, SROnly, Link, LinkProps, LinkElementType } from '../..'
|
|
5
|
+
import { useDefineVariant, Variant } from './useDefineVariant'
|
|
6
|
+
import { useSkuSlug } from './useSkuSlug'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
// TODO: Change by ImageComponent when it be right
|
|
10
|
+
const ImageComponentFallback: SkuSelectorProps['ImageComponent'] = ({
|
|
11
|
+
src,
|
|
12
|
+
alt,
|
|
13
|
+
...otherProps
|
|
14
|
+
}) => <img src={src} alt={alt} {...otherProps} />
|
|
15
|
+
|
|
16
|
+
export interface SkuOption {
|
|
17
|
+
/**
|
|
18
|
+
* Alternative text description of the image.
|
|
19
|
+
*/
|
|
20
|
+
alt?: string
|
|
21
|
+
/**
|
|
22
|
+
* Image URL.
|
|
23
|
+
*/
|
|
24
|
+
src?: string
|
|
25
|
+
/**
|
|
26
|
+
* Label to describe the option when selected. This is mandatory if you want to use the `image` variant.'
|
|
27
|
+
*/
|
|
28
|
+
label: string
|
|
29
|
+
/**
|
|
30
|
+
* Current value for this option.
|
|
31
|
+
*/
|
|
32
|
+
value: string
|
|
33
|
+
/**
|
|
34
|
+
* Specifies that this option should be disabled.
|
|
35
|
+
*/
|
|
36
|
+
disabled?: boolean
|
|
37
|
+
/**
|
|
38
|
+
* Hex color code for this option. This is mandatory if you want to use the `Color` variant.
|
|
39
|
+
*/
|
|
40
|
+
hexColor?: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface SkuSelectorProps extends HTMLAttributes<HTMLDivElement> {
|
|
44
|
+
/**
|
|
45
|
+
* ID to find this component in testing tools (e.g.: cypress,
|
|
46
|
+
* testing-library, and jest).
|
|
47
|
+
*/
|
|
48
|
+
testId?: string
|
|
49
|
+
/**
|
|
50
|
+
* ID of the current instance of the component.
|
|
51
|
+
*/
|
|
52
|
+
id?: string
|
|
53
|
+
/**
|
|
54
|
+
* SKU options that should be rendered.
|
|
55
|
+
*/
|
|
56
|
+
availableVariations: Record<string, SkuOption[]>
|
|
57
|
+
/**
|
|
58
|
+
* Name of the SKU property that this selector is relative to.
|
|
59
|
+
*/
|
|
60
|
+
skuPropertyName: string
|
|
61
|
+
/**
|
|
62
|
+
* Currently active variation's value.
|
|
63
|
+
*/
|
|
64
|
+
activeVariations: Record<string, string>
|
|
65
|
+
/**
|
|
66
|
+
* Optional variant type, when is not passed the type is inferred based on options properties
|
|
67
|
+
*/
|
|
68
|
+
variant?: Variant
|
|
69
|
+
/**
|
|
70
|
+
* Extends all Link Props.
|
|
71
|
+
*/
|
|
72
|
+
linkProps?: Partial<LinkProps<LinkElementType>>
|
|
73
|
+
/**
|
|
74
|
+
* Optional function to determines the href string.
|
|
75
|
+
*/
|
|
76
|
+
getItemHref?: (option: SkuOption) => string
|
|
77
|
+
/**
|
|
78
|
+
* Maps property value combinations to their respective SKU's slug
|
|
79
|
+
*/
|
|
80
|
+
slugsMap: Record<string, string>
|
|
81
|
+
/**
|
|
82
|
+
* Function that returns a React component that will be used to render images.
|
|
83
|
+
*/
|
|
84
|
+
ImageComponent?: FunctionComponent<{
|
|
85
|
+
src: string
|
|
86
|
+
alt: string
|
|
87
|
+
}>
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const SkuSelector = forwardRef<HTMLDivElement, SkuSelectorProps>(
|
|
91
|
+
function SkuSelector(
|
|
92
|
+
{
|
|
93
|
+
availableVariations,
|
|
94
|
+
skuPropertyName,
|
|
95
|
+
testId,
|
|
96
|
+
activeVariations,
|
|
97
|
+
linkProps,
|
|
98
|
+
slugsMap,
|
|
99
|
+
getItemHref: getItemHrefProp,
|
|
100
|
+
ImageComponent = ImageComponentFallback,
|
|
101
|
+
variant: variantProp,
|
|
102
|
+
...otherProps
|
|
103
|
+
},
|
|
104
|
+
ref
|
|
105
|
+
) {
|
|
106
|
+
const activeSelectorValue = activeVariations[skuPropertyName]
|
|
107
|
+
const options = availableVariations[skuPropertyName]
|
|
108
|
+
|
|
109
|
+
const variant = useDefineVariant(options, variantProp)
|
|
110
|
+
|
|
111
|
+
const { getItemHref } = useSkuSlug(activeVariations, slugsMap, skuPropertyName, getItemHrefProp)
|
|
112
|
+
|
|
113
|
+
return (
|
|
114
|
+
<div
|
|
115
|
+
ref={ref}
|
|
116
|
+
data-fs-sku-selector
|
|
117
|
+
data-testid={testId}
|
|
118
|
+
data-fs-sku-selector-variant={variant}
|
|
119
|
+
{...otherProps}
|
|
120
|
+
>
|
|
121
|
+
{skuPropertyName && (
|
|
122
|
+
<Label data-fs-sku-selector-title>
|
|
123
|
+
{skuPropertyName}: <strong>{activeSelectorValue}</strong>
|
|
124
|
+
</Label>
|
|
125
|
+
)}
|
|
126
|
+
<ul data-fs-sku-selector-list>
|
|
127
|
+
{options.map((option, index) => {
|
|
128
|
+
return (
|
|
129
|
+
<li
|
|
130
|
+
key={String(index)}
|
|
131
|
+
title={option.label}
|
|
132
|
+
data-fs-sku-selector-option
|
|
133
|
+
data-fs-sku-selector-disabled={option.disabled}
|
|
134
|
+
data-fs-sku-selector-checked={
|
|
135
|
+
option.value === activeVariations[skuPropertyName]
|
|
136
|
+
}
|
|
137
|
+
>
|
|
138
|
+
<Link
|
|
139
|
+
data-fs-sku-selector-option-link
|
|
140
|
+
href={getItemHref(option)}
|
|
141
|
+
{...linkProps}
|
|
142
|
+
>
|
|
143
|
+
<SROnly text={option.label} />
|
|
144
|
+
</Link>
|
|
145
|
+
|
|
146
|
+
{variant === 'label' && <span>{option.value}</span>}
|
|
147
|
+
|
|
148
|
+
{variant === 'image' && ImageComponent && (
|
|
149
|
+
<span>
|
|
150
|
+
<ImageComponent
|
|
151
|
+
src={option.src ?? ''}
|
|
152
|
+
alt={option.alt ?? ''}
|
|
153
|
+
data-fs-sku-selector-option-image
|
|
154
|
+
/>
|
|
155
|
+
</span>
|
|
156
|
+
)}
|
|
157
|
+
|
|
158
|
+
{variant === 'color' && (
|
|
159
|
+
<span>
|
|
160
|
+
<div
|
|
161
|
+
data-fs-sku-selector-option-color
|
|
162
|
+
title={option.value}
|
|
163
|
+
style={
|
|
164
|
+
{
|
|
165
|
+
'--data-fs-sku-selector-option-color-bkg-color':
|
|
166
|
+
option.hexColor,
|
|
167
|
+
} as React.CSSProperties
|
|
168
|
+
}
|
|
169
|
+
></div>
|
|
170
|
+
</span>
|
|
171
|
+
)}
|
|
172
|
+
</li>
|
|
173
|
+
)
|
|
174
|
+
})}
|
|
175
|
+
</ul>
|
|
176
|
+
</div>
|
|
177
|
+
)
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
export default SkuSelector
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useMemo } from 'react'
|
|
2
|
+
import { SkuOption } from './SkuSelector'
|
|
3
|
+
|
|
4
|
+
export type Variant = 'image' | 'color' | 'label'
|
|
5
|
+
|
|
6
|
+
const getImageName = (src: string) => {
|
|
7
|
+
const sourcePath = new URL(src).pathname
|
|
8
|
+
const imageName = sourcePath.split('/').at(-1)
|
|
9
|
+
return imageName
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const useDefineVariant = (options: SkuOption[], variant?: Variant): Variant =>
|
|
13
|
+
useMemo(() => {
|
|
14
|
+
if(variant) return variant
|
|
15
|
+
|
|
16
|
+
const allOptionsHaveHexColor = options.every((option) => option.hexColor)
|
|
17
|
+
if (allOptionsHaveHexColor) {
|
|
18
|
+
return 'color'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const firstImageName = options[0]?.src && getImageName(options[0].src)
|
|
22
|
+
|
|
23
|
+
const areSourcesEqualsOrNull = options.every((option) => {
|
|
24
|
+
if (!option.src) {
|
|
25
|
+
return true
|
|
26
|
+
}
|
|
27
|
+
const optionImageName = getImageName(option.src)
|
|
28
|
+
return optionImageName === firstImageName
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
if (!areSourcesEqualsOrNull) {
|
|
32
|
+
return 'image'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return 'label'
|
|
36
|
+
}, [options, variant])
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useCallback } from 'react'
|
|
2
|
+
import { SkuOption } from './SkuSelector'
|
|
3
|
+
|
|
4
|
+
function getSkuSlug(
|
|
5
|
+
slugsMap: Record<string, string>,
|
|
6
|
+
selectedVariations: Record<string, string>,
|
|
7
|
+
dominantVariation: string
|
|
8
|
+
) {
|
|
9
|
+
const slugsMapKey = Object.entries(selectedVariations).flat().join('-')
|
|
10
|
+
|
|
11
|
+
if (slugsMapKey in slugsMap) {
|
|
12
|
+
return slugsMap[slugsMapKey]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const possibleVariants = Object.keys(slugsMap)
|
|
16
|
+
|
|
17
|
+
const firstVariationForDominantValue = possibleVariants.find((slug) =>
|
|
18
|
+
slug.includes(
|
|
19
|
+
`${dominantVariation}-${selectedVariations[dominantVariation]}`
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
return slugsMap[firstVariationForDominantValue ?? possibleVariants[0]]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const useSkuSlug = (
|
|
27
|
+
activeVariations: Record<string, string>,
|
|
28
|
+
slugsMap: Record<string, string>,
|
|
29
|
+
skuPropertyName: string,
|
|
30
|
+
getItemHrefProp?: (option: SkuOption) => string
|
|
31
|
+
) => {
|
|
32
|
+
const getItemHref = useCallback(
|
|
33
|
+
(option: SkuOption) => {
|
|
34
|
+
if(getItemHrefProp) return { getItemHrefProp }
|
|
35
|
+
|
|
36
|
+
const currentItemHref = `/${getSkuSlug(
|
|
37
|
+
slugsMap,
|
|
38
|
+
{
|
|
39
|
+
...activeVariations,
|
|
40
|
+
[skuPropertyName]: option.value,
|
|
41
|
+
},
|
|
42
|
+
skuPropertyName
|
|
43
|
+
)}/p`
|
|
44
|
+
return currentItemHref
|
|
45
|
+
},
|
|
46
|
+
[activeVariations, getItemHrefProp, slugsMap, skuPropertyName]
|
|
47
|
+
)
|
|
48
|
+
return { getItemHref }
|
|
49
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import { Icon } from '../..'
|
|
4
|
+
import { useUI } from '../../hooks'
|
|
5
|
+
|
|
6
|
+
function Toast() {
|
|
7
|
+
const { toasts, popToast } = useUI()
|
|
8
|
+
const toast = toasts[toasts.length - 1]
|
|
9
|
+
const timeoutRef = useRef<NodeJS.Timeout>()
|
|
10
|
+
|
|
11
|
+
const [visible, setVisible] = useState(false)
|
|
12
|
+
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!toast) {
|
|
15
|
+
return undefined
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const timeout = setTimeout(() => setVisible(true), 10)
|
|
19
|
+
|
|
20
|
+
return () => clearTimeout(timeout)
|
|
21
|
+
}, [toast])
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
timeoutRef.current = setTimeout(() => setVisible(false), 6e3)
|
|
25
|
+
|
|
26
|
+
return () => timeoutRef.current && clearTimeout(timeoutRef.current)
|
|
27
|
+
}, [toast])
|
|
28
|
+
|
|
29
|
+
if (toast === undefined) {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<div
|
|
35
|
+
role="status"
|
|
36
|
+
data-fs-toast
|
|
37
|
+
data-fs-toast-visible={visible}
|
|
38
|
+
onTransitionEnd={() => !visible && popToast()}
|
|
39
|
+
>
|
|
40
|
+
{toast.icon && (
|
|
41
|
+
<div data-fs-toast-icon-container>
|
|
42
|
+
<Icon component={toast.icon} />
|
|
43
|
+
</div>
|
|
44
|
+
)}
|
|
45
|
+
<div data-fs-toast-content>
|
|
46
|
+
{toast.title && <p data-fs-toast-title>{toast.title}</p>}
|
|
47
|
+
<p data-fs-toast-message>{toast.message}</p>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default Toast
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Toast'
|