@salla.sa/twilight-theme-engine 1.0.52 → 1.0.54
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/{AddToCartForm-CO5QIWTJ.js → AddToCartForm-ZMGIDWJ2.js} +3 -3
- package/dist/{AddToCartForm-CO5QIWTJ.js.map → AddToCartForm-ZMGIDWJ2.js.map} +1 -1
- package/dist/{BlogAuthorPage-MTGRJW6C.js → BlogAuthorPage-SPCVIGER.js} +9 -9
- package/dist/{BlogAuthorPage-MTGRJW6C.js.map → BlogAuthorPage-SPCVIGER.js.map} +1 -1
- package/dist/{BlogCategoryPage-J5643FWA.js → BlogCategoryPage-2R2U4UVZ.js} +9 -9
- package/dist/{BlogCategoryPage-J5643FWA.js.map → BlogCategoryPage-2R2U4UVZ.js.map} +1 -1
- package/dist/{BlogPage-IQDW2HYN.js → BlogPage-AJF5L5JE.js} +41 -19
- package/dist/BlogPage-AJF5L5JE.js.map +1 -0
- package/dist/{BlogSinglePage-J7POWQFT.js → BlogSinglePage-GPC7G5RZ.js} +7 -7
- package/dist/{BlogSinglePage-J7POWQFT.js.map → BlogSinglePage-GPC7G5RZ.js.map} +1 -1
- package/dist/{BlogTagPage-STS5PZHM.js → BlogTagPage-SZPOZKYO.js} +9 -9
- package/dist/{BlogTagPage-STS5PZHM.js.map → BlogTagPage-SZPOZKYO.js.map} +1 -1
- package/dist/{BrandsPage-E2HRAZN3.js → BrandsPage-7XTWLCMP.js} +7 -7
- package/dist/{BrandsPage-E2HRAZN3.js.map → BrandsPage-7XTWLCMP.js.map} +1 -1
- package/dist/{Breadcrumb-I2CYGO5K.js → Breadcrumb-4YCGQ7QL.js} +7 -7
- package/dist/{Breadcrumb-I2CYGO5K.js.map → Breadcrumb-4YCGQ7QL.js.map} +1 -1
- package/dist/{CartItem-CRUPTVF6.js → CartItem-THEEFXBX.js} +7 -7
- package/dist/{CartItem-CRUPTVF6.js.map → CartItem-THEEFXBX.js.map} +1 -1
- package/dist/{CartSummary-PPTKJM2S.js → CartSummary-DVDFJ2SO.js} +7 -7
- package/dist/{CartSummary-PPTKJM2S.js.map → CartSummary-DVDFJ2SO.js.map} +1 -1
- package/dist/{Copyright-67RVBNSV.js → Copyright-CEYZUB3X.js} +3 -3
- package/dist/{Copyright-67RVBNSV.js.map → Copyright-CEYZUB3X.js.map} +1 -1
- package/dist/{CustomerLayout-ZJUNE4NT.js → CustomerLayout-3TIIQDQ2.js} +7 -7
- package/dist/{CustomerLayout-ZJUNE4NT.js.map → CustomerLayout-3TIIQDQ2.js.map} +1 -1
- package/dist/{Footer-K25ISQ6E.js → Footer-M7LJ64A6.js} +7 -7
- package/dist/{Footer-K25ISQ6E.js.map → Footer-M7LJ64A6.js.map} +1 -1
- package/dist/{Header-L7ZAPT45.js → Header-JMWCXZHK.js} +6 -6
- package/dist/{Header-L7ZAPT45.js.map → Header-JMWCXZHK.js.map} +1 -1
- package/dist/{LoyaltyPage-X7BFPO4O.js → LoyaltyPage-KRXUKUFF.js} +8 -8
- package/dist/{LoyaltyPage-X7BFPO4O.js.map → LoyaltyPage-KRXUKUFF.js.map} +1 -1
- package/dist/{MainMenu-ZI57F6VG.js → MainMenu-WHF7ASUW.js} +3 -3
- package/dist/{MainMenu-ZI57F6VG.js.map → MainMenu-WHF7ASUW.js.map} +1 -1
- package/dist/{MasterLayout-FGMCLVWW.js → MasterLayout-F3FXWM67.js} +7 -7
- package/dist/{MasterLayout-FGMCLVWW.js.map → MasterLayout-F3FXWM67.js.map} +1 -1
- package/dist/{MobileMenu-QKQZSSOA.js → MobileMenu-ZCJYSGK6.js} +7 -7
- package/dist/{MobileMenu-QKQZSSOA.js.map → MobileMenu-ZCJYSGK6.js.map} +1 -1
- package/dist/{NotificationsPage-OMVSSTVA.js → NotificationsPage-BYVSEORE.js} +7 -7
- package/dist/{NotificationsPage-OMVSSTVA.js.map → NotificationsPage-BYVSEORE.js.map} +1 -1
- package/dist/{OrderSinglePage-CPX6J7YO.js → OrderSinglePage-JZBRALXE.js} +8 -8
- package/dist/{OrderSinglePage-CPX6J7YO.js.map → OrderSinglePage-JZBRALXE.js.map} +1 -1
- package/dist/{OrdersPage-SFLQKJFQ.js → OrdersPage-Z274BZQB.js} +14 -9
- package/dist/OrdersPage-Z274BZQB.js.map +1 -0
- package/dist/{PageSingle-R2W2QSTE.js → PageSingle-GOR4L2V6.js} +3 -3
- package/dist/{PageSingle-R2W2QSTE.js.map → PageSingle-GOR4L2V6.js.map} +1 -1
- package/dist/{ProductDetails-2L34UXT3.js → ProductDetails-5P26PWUH.js} +3 -3
- package/dist/{ProductDetails-2L34UXT3.js.map → ProductDetails-5P26PWUH.js.map} +1 -1
- package/dist/{ProfilePage-LPAZYMHH.js → ProfilePage-UCPWBRSG.js} +7 -7
- package/dist/{ProfilePage-LPAZYMHH.js.map → ProfilePage-UCPWBRSG.js.map} +1 -1
- package/dist/{SeoCartWidget-AH4VVASI.js → SeoCartWidget-UUFUC5BA.js} +7 -7
- package/dist/{SeoCartWidget-AH4VVASI.js.map → SeoCartWidget-UUFUC5BA.js.map} +1 -1
- package/dist/{SettingsPage-RJUZW3V4.js → SettingsPage-KUMSRMDA.js} +7 -7
- package/dist/{SettingsPage-RJUZW3V4.js.map → SettingsPage-KUMSRMDA.js.map} +1 -1
- package/dist/{StoreClosedNotification-FPNPF2GW.js → StoreClosedNotification-ZADX6XF6.js} +8 -8
- package/dist/{StoreClosedNotification-FPNPF2GW.js.map → StoreClosedNotification-ZADX6XF6.js.map} +1 -1
- package/dist/{TestimonialsPage-KCTMCLFB.js → TestimonialsPage-FIPHRYNP.js} +3 -3
- package/dist/{TestimonialsPage-KCTMCLFB.js.map → TestimonialsPage-FIPHRYNP.js.map} +1 -1
- package/dist/{ThankYouPage-WOD6Y6TV.js → ThankYouPage-RGBNBHOT.js} +7 -7
- package/dist/{ThankYouPage-WOD6Y6TV.js.map → ThankYouPage-RGBNBHOT.js.map} +1 -1
- package/dist/{WalletPage-W2IDME7R.js → WalletPage-OUCUFTEH.js} +7 -7
- package/dist/{WalletPage-W2IDME7R.js.map → WalletPage-OUCUFTEH.js.map} +1 -1
- package/dist/WishlistPage-KEWT7Y5L.js +375 -0
- package/dist/WishlistPage-KEWT7Y5L.js.map +1 -0
- package/dist/api/brands.js +3 -3
- package/dist/api/cart.js +3 -3
- package/dist/api/category.js +3 -3
- package/dist/api/loyalty.js +3 -3
- package/dist/api/order.js +3 -3
- package/dist/api/page.js +3 -3
- package/dist/api/product.js +3 -3
- package/dist/api/wishlist.js +4 -4
- package/dist/{chunk-5NHSIK3V.js → chunk-3NSG3KI6.js} +6 -6
- package/dist/{chunk-5NHSIK3V.js.map → chunk-3NSG3KI6.js.map} +1 -1
- package/dist/{chunk-WEN7W6YS.js → chunk-57ZYZKCD.js} +7 -7
- package/dist/{chunk-WEN7W6YS.js.map → chunk-57ZYZKCD.js.map} +1 -1
- package/dist/{chunk-EMKO3C2V.js → chunk-62SHHET3.js} +3 -3
- package/dist/{chunk-EMKO3C2V.js.map → chunk-62SHHET3.js.map} +1 -1
- package/dist/{chunk-JK77XRXR.js → chunk-63GHZIAG.js} +3 -3
- package/dist/{chunk-JK77XRXR.js.map → chunk-63GHZIAG.js.map} +1 -1
- package/dist/{chunk-MQGAYYYV.js → chunk-6DH255C3.js} +3 -3
- package/dist/{chunk-MQGAYYYV.js.map → chunk-6DH255C3.js.map} +1 -1
- package/dist/{chunk-QBRYGYIP.js → chunk-7ANJ7LGZ.js} +6 -6
- package/dist/{chunk-QBRYGYIP.js.map → chunk-7ANJ7LGZ.js.map} +1 -1
- package/dist/{chunk-TEOX2GUU.js → chunk-7XBSSGRK.js} +3 -3
- package/dist/{chunk-TEOX2GUU.js.map → chunk-7XBSSGRK.js.map} +1 -1
- package/dist/{chunk-WHOWSSX4.js → chunk-A2ZO3IR7.js} +3 -3
- package/dist/{chunk-WHOWSSX4.js.map → chunk-A2ZO3IR7.js.map} +1 -1
- package/dist/{chunk-ASN3HL47.js → chunk-BCHT4NRD.js} +4 -4
- package/dist/{chunk-ASN3HL47.js.map → chunk-BCHT4NRD.js.map} +1 -1
- package/dist/{chunk-JEJR23P4.js → chunk-BQ4CV7YX.js} +3 -3
- package/dist/{chunk-JEJR23P4.js.map → chunk-BQ4CV7YX.js.map} +1 -1
- package/dist/{chunk-UYK4CSL3.js → chunk-BVB75J3R.js} +3 -3
- package/dist/{chunk-UYK4CSL3.js.map → chunk-BVB75J3R.js.map} +1 -1
- package/dist/{chunk-YHHYXRFV.js → chunk-EGQ6DXLD.js} +4 -4
- package/dist/{chunk-YHHYXRFV.js.map → chunk-EGQ6DXLD.js.map} +1 -1
- package/dist/{chunk-GWKCKU4G.js → chunk-GLKBT6N6.js} +10 -10
- package/dist/{chunk-GWKCKU4G.js.map → chunk-GLKBT6N6.js.map} +1 -1
- package/dist/{chunk-AEPO4POY.js → chunk-IXD32BQX.js} +5 -5
- package/dist/{chunk-AEPO4POY.js.map → chunk-IXD32BQX.js.map} +1 -1
- package/dist/{chunk-QUUSMVCP.js → chunk-NCGZMLBS.js} +3 -3
- package/dist/{chunk-QUUSMVCP.js.map → chunk-NCGZMLBS.js.map} +1 -1
- package/dist/chunk-Q3QX22YI.js +14 -0
- package/dist/{chunk-V4ILJDUG.js.map → chunk-Q3QX22YI.js.map} +1 -1
- package/dist/{chunk-GXNQX4Z2.js → chunk-QBIW266S.js} +3 -3
- package/dist/{chunk-GXNQX4Z2.js.map → chunk-QBIW266S.js.map} +1 -1
- package/dist/{chunk-OKP6LUT7.js → chunk-QM75GGXX.js} +3 -3
- package/dist/{chunk-OKP6LUT7.js.map → chunk-QM75GGXX.js.map} +1 -1
- package/dist/{chunk-MTONGOJD.js → chunk-TFB3QXYH.js} +3 -2
- package/dist/chunk-TFB3QXYH.js.map +1 -0
- package/dist/{chunk-ICNOLZNT.js → chunk-TIDHWQIS.js} +3 -3
- package/dist/{chunk-ICNOLZNT.js.map → chunk-TIDHWQIS.js.map} +1 -1
- package/dist/chunk-UIDPX3GA.js +24 -0
- package/dist/chunk-UIDPX3GA.js.map +1 -0
- package/dist/{chunk-VW7N4JHG.js → chunk-VDBTF3WC.js} +10 -7
- package/dist/chunk-VDBTF3WC.js.map +1 -0
- package/dist/{chunk-IH3TQ3LD.js → chunk-XEQ6ILIP.js} +3 -3
- package/dist/{chunk-IH3TQ3LD.js.map → chunk-XEQ6ILIP.js.map} +1 -1
- package/dist/{chunk-YIAM7LGR.js → chunk-ZFLU5EKG.js} +4 -4
- package/dist/{chunk-YIAM7LGR.js.map → chunk-ZFLU5EKG.js.map} +1 -1
- package/dist/components/cart/index.js +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/drawer/index.js +5 -5
- package/dist/components/home/index.js +8 -8
- package/dist/components/layout/index.js +5 -5
- package/dist/components/product/index.js +6 -6
- package/dist/components/store/index.js +7 -7
- package/dist/{document-class-XJ3QIMBO.js → document-class-OCA75GGE.js} +6 -6
- package/dist/{document-class-XJ3QIMBO.js.map → document-class-OCA75GGE.js.map} +1 -1
- package/dist/hooks/index.js +5 -5
- package/dist/hooks/useGtm.js +5 -5
- package/dist/hooks/useMoney.js +5 -5
- package/dist/hooks/useStore.js +5 -5
- package/dist/index.js +5 -5
- package/dist/{navigation-BCTD7TIG.js → navigation-ERMAPC4D.js} +4 -4
- package/dist/{navigation-BCTD7TIG.js.map → navigation-ERMAPC4D.js.map} +1 -1
- package/dist/{navigation-DF2RT7D6.js → navigation-JINL5V44.js} +5 -5
- package/dist/{navigation-DF2RT7D6.js.map → navigation-JINL5V44.js.map} +1 -1
- package/dist/{not-found-DLUE3J4K.js → not-found-RM4AHY6T.js} +8 -8
- package/dist/{not-found-DLUE3J4K.js.map → not-found-RM4AHY6T.js.map} +1 -1
- package/dist/providers/index.js +5 -5
- package/dist/router/route-ids.d.ts +1 -0
- package/dist/router/route-ids.d.ts.map +1 -1
- package/dist/routes/account/orders/OrdersPage.d.ts.map +1 -1
- package/dist/routes/account/orders.js +4 -4
- package/dist/routes/account/wishlist/WishlistPage.d.ts.map +1 -1
- package/dist/routes/account/wishlist/WishlistShare.d.ts +36 -0
- package/dist/routes/account/wishlist/WishlistShare.d.ts.map +1 -0
- package/dist/routes/account.js +11 -11
- package/dist/routes/blog/BlogPage.d.ts.map +1 -1
- package/dist/routes/blog/BlogTags.d.ts +17 -0
- package/dist/routes/blog/BlogTags.d.ts.map +1 -0
- package/dist/routes/blog.js +8 -8
- package/dist/routes/brands.js +4 -4
- package/dist/routes/cart.js +12 -12
- package/dist/routes/home.js +9 -9
- package/dist/routes/index.js +3 -3
- package/dist/routes/loyalty.js +4 -4
- package/dist/routes/page.js +4 -4
- package/dist/routes/product-listing.js +10 -10
- package/dist/routes/product.js +8 -8
- package/dist/routes/seo-redirects.d.ts +9 -0
- package/dist/routes/seo-redirects.d.ts.map +1 -1
- package/dist/routes/seo-redirects.js +3 -3
- package/dist/routes/testimonials.js +2 -2
- package/dist/routes/thank-you.js +4 -4
- package/dist/skeleton.js +9 -9
- package/dist/tanstack/document-class.d.ts.map +1 -1
- package/dist/tanstack/router.d.ts.map +1 -1
- package/dist/tanstack.js +6 -6
- package/dist/types/salla-sdk.d.ts +2 -0
- package/dist/types/salla-sdk.d.ts.map +1 -1
- package/dist/vite/adapters/tanstack.adapter.d.ts.map +1 -1
- package/dist/vite/index.js +35 -4
- package/dist/vite/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/BlogPage-IQDW2HYN.js.map +0 -1
- package/dist/OrdersPage-SFLQKJFQ.js.map +0 -1
- package/dist/WishlistPage-NE74MFAD.js +0 -151
- package/dist/WishlistPage-NE74MFAD.js.map +0 -1
- package/dist/chunk-KV5R4LKM.js +0 -16
- package/dist/chunk-KV5R4LKM.js.map +0 -1
- package/dist/chunk-MTONGOJD.js.map +0 -1
- package/dist/chunk-V4ILJDUG.js +0 -14
- package/dist/chunk-VW7N4JHG.js.map +0 -1
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { wishlist } from './chunk-7XBSSGRK.js';
|
|
2
|
+
import './chunk-BVB75J3R.js';
|
|
3
|
+
import { useMoney } from './chunk-GLKBT6N6.js';
|
|
4
|
+
import './chunk-7ANJ7LGZ.js';
|
|
5
|
+
import './chunk-JKIRRMBU.js';
|
|
6
|
+
import './chunk-2JV6WZ6O.js';
|
|
7
|
+
import './chunk-6IATCGID.js';
|
|
8
|
+
import './chunk-3MHDV5JS.js';
|
|
9
|
+
import './chunk-VVZNW5CB.js';
|
|
10
|
+
import './chunk-JD4J2ZB6.js';
|
|
11
|
+
import { useLocation } from './chunk-63GHZIAG.js';
|
|
12
|
+
import './chunk-TFB3QXYH.js';
|
|
13
|
+
import './chunk-C5X6CVXC.js';
|
|
14
|
+
import './chunk-QKIQ3K24.js';
|
|
15
|
+
import './chunk-Z74NUTEI.js';
|
|
16
|
+
import './chunk-O6XXHXC4.js';
|
|
17
|
+
import './chunk-3FIWHGCZ.js';
|
|
18
|
+
import './chunk-XTMHHLNK.js';
|
|
19
|
+
import './chunk-PJWFEMBX.js';
|
|
20
|
+
import './chunk-TP3LCGE7.js';
|
|
21
|
+
import './chunk-Z653O7MX.js';
|
|
22
|
+
import './chunk-ZCH7W7DZ.js';
|
|
23
|
+
import './chunk-3U26OMNO.js';
|
|
24
|
+
import './chunk-JWXJPJBO.js';
|
|
25
|
+
import './chunk-CW625T2E.js';
|
|
26
|
+
import './chunk-BVSJPBJ6.js';
|
|
27
|
+
import { useWishlist } from './chunk-GBWCXUPD.js';
|
|
28
|
+
import './chunk-OAMIDZKW.js';
|
|
29
|
+
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
30
|
+
import './chunk-T72DAX7R.js';
|
|
31
|
+
import './chunk-YMVLYYLU.js';
|
|
32
|
+
import './chunk-RJPPO3ET.js';
|
|
33
|
+
import { HookSlot } from './chunk-Q7VWURUR.js';
|
|
34
|
+
import './chunk-GU2KUQVD.js';
|
|
35
|
+
import { LazyNoContent, Image } from './chunk-6DH255C3.js';
|
|
36
|
+
import './chunk-AXW67SY7.js';
|
|
37
|
+
import './chunk-BYMOPN2S.js';
|
|
38
|
+
import './chunk-SKLEJJ6M.js';
|
|
39
|
+
import './chunk-6BZ5TKEV.js';
|
|
40
|
+
import './chunk-FZKRSGLP.js';
|
|
41
|
+
import './chunk-CUG6VOLM.js';
|
|
42
|
+
import './chunk-HX3YKS5W.js';
|
|
43
|
+
import './chunk-OBSAH7K6.js';
|
|
44
|
+
import './chunk-DF6FBKDN.js';
|
|
45
|
+
import './chunk-DGUM43GV.js';
|
|
46
|
+
import { useRef, useMemo, useState, useCallback, useEffect } from 'react';
|
|
47
|
+
import { ItemsList } from '@salla.sa/twilight-components-react';
|
|
48
|
+
import { SallaAddProductButton } from '@salla.sa/twilight-components-react/add-product-button';
|
|
49
|
+
import { SallaButton } from '@salla.sa/twilight-components-react/button';
|
|
50
|
+
import { SallaSocialShareCore } from '@salla.sa/twilight-components-react/social-share';
|
|
51
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
52
|
+
|
|
53
|
+
function useWishlistShare() {
|
|
54
|
+
const [menuOpen, setMenuOpen] = useState(false);
|
|
55
|
+
const [selecting, setSelecting] = useState(false);
|
|
56
|
+
const [selectedIds, setSelectedIds] = useState([]);
|
|
57
|
+
const [sharing, setSharing] = useState(false);
|
|
58
|
+
const [shareUrl, setShareUrl] = useState("");
|
|
59
|
+
const loadedIdsRef = useRef([]);
|
|
60
|
+
const socialShareRef = useRef(null);
|
|
61
|
+
const share = useCallback(async (ids, selectAll) => {
|
|
62
|
+
if (!window.salla?.wishlist?.share) return;
|
|
63
|
+
setSharing(true);
|
|
64
|
+
try {
|
|
65
|
+
const response = await window.salla.wishlist.share(ids, selectAll);
|
|
66
|
+
const url = response?.data?.url || response?.url || "";
|
|
67
|
+
if (!url) return;
|
|
68
|
+
setShareUrl(url);
|
|
69
|
+
const element = socialShareRef.current;
|
|
70
|
+
if (element) {
|
|
71
|
+
element.url = url;
|
|
72
|
+
await element.refresh?.();
|
|
73
|
+
await element.open?.();
|
|
74
|
+
}
|
|
75
|
+
} catch {
|
|
76
|
+
} finally {
|
|
77
|
+
setSharing(false);
|
|
78
|
+
}
|
|
79
|
+
}, []);
|
|
80
|
+
const shareAll = useCallback(() => {
|
|
81
|
+
setMenuOpen(false);
|
|
82
|
+
void share([], true);
|
|
83
|
+
}, [share]);
|
|
84
|
+
const shareSelected = useCallback(() => {
|
|
85
|
+
if (selectedIds.length) void share(selectedIds, false);
|
|
86
|
+
}, [share, selectedIds]);
|
|
87
|
+
const startSelecting = useCallback(() => {
|
|
88
|
+
setMenuOpen(false);
|
|
89
|
+
setSelecting(true);
|
|
90
|
+
}, []);
|
|
91
|
+
const cancelSelecting = useCallback(() => {
|
|
92
|
+
setSelecting(false);
|
|
93
|
+
setSelectedIds([]);
|
|
94
|
+
setShareUrl("");
|
|
95
|
+
void socialShareRef.current?.close?.();
|
|
96
|
+
}, []);
|
|
97
|
+
const toggleSelected = useCallback((id) => {
|
|
98
|
+
setShareUrl("");
|
|
99
|
+
setSelectedIds(
|
|
100
|
+
(current) => current.includes(id) ? current.filter((existing) => existing !== id) : [...current, id]
|
|
101
|
+
);
|
|
102
|
+
}, []);
|
|
103
|
+
const toggleAll = useCallback(() => {
|
|
104
|
+
setShareUrl("");
|
|
105
|
+
setSelectedIds(
|
|
106
|
+
(current) => current.length && current.length === loadedIdsRef.current.length ? [] : [...loadedIdsRef.current]
|
|
107
|
+
);
|
|
108
|
+
}, []);
|
|
109
|
+
return {
|
|
110
|
+
menuOpen,
|
|
111
|
+
setMenuOpen,
|
|
112
|
+
selecting,
|
|
113
|
+
selectedIds,
|
|
114
|
+
sharing,
|
|
115
|
+
shareUrl,
|
|
116
|
+
loadedIdsRef,
|
|
117
|
+
socialShareRef,
|
|
118
|
+
shareAll,
|
|
119
|
+
shareSelected,
|
|
120
|
+
startSelecting,
|
|
121
|
+
cancelSelecting,
|
|
122
|
+
toggleSelected,
|
|
123
|
+
toggleAll
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function WishlistShareBar({
|
|
127
|
+
state,
|
|
128
|
+
hasProducts
|
|
129
|
+
}) {
|
|
130
|
+
const { t } = useTranslation();
|
|
131
|
+
const rootRef = useRef(null);
|
|
132
|
+
const { menuOpen, setMenuOpen } = state;
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (!menuOpen) return;
|
|
135
|
+
const onPointerDown = (event) => {
|
|
136
|
+
if (!rootRef.current?.contains(event.target)) setMenuOpen(false);
|
|
137
|
+
};
|
|
138
|
+
const onKeyDown = (event) => {
|
|
139
|
+
if (event.key === "Escape") setMenuOpen(false);
|
|
140
|
+
};
|
|
141
|
+
document.addEventListener("mousedown", onPointerDown);
|
|
142
|
+
document.addEventListener("keydown", onKeyDown);
|
|
143
|
+
return () => {
|
|
144
|
+
document.removeEventListener("mousedown", onPointerDown);
|
|
145
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
146
|
+
};
|
|
147
|
+
}, [menuOpen, setMenuOpen]);
|
|
148
|
+
const selectedCount = state.selectedIds.length;
|
|
149
|
+
const allSelected = selectedCount > 0 && selectedCount === state.loadedIdsRef.current.length;
|
|
150
|
+
return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: "s-wishlist-actions", children: [
|
|
151
|
+
/* @__PURE__ */ jsx("div", { className: "s-wishlist-actions-bar flex items-center justify-end gap-3 mb-3", children: state.selecting ? /* @__PURE__ */ jsxs("div", { className: "s-wishlist-actions-selection flex items-center gap-3", children: [
|
|
152
|
+
/* @__PURE__ */ jsxs("label", { className: "s-wishlist-actions-select-all inline-flex items-center gap-2 text-sm", children: [
|
|
153
|
+
/* @__PURE__ */ jsx(
|
|
154
|
+
"input",
|
|
155
|
+
{
|
|
156
|
+
type: "checkbox",
|
|
157
|
+
checked: allSelected,
|
|
158
|
+
ref: (input) => {
|
|
159
|
+
if (input) input.indeterminate = selectedCount > 0 && !allSelected;
|
|
160
|
+
},
|
|
161
|
+
onChange: state.toggleAll
|
|
162
|
+
}
|
|
163
|
+
),
|
|
164
|
+
t("pages.wishlist.select_all", "Select all")
|
|
165
|
+
] }),
|
|
166
|
+
/* @__PURE__ */ jsxs(
|
|
167
|
+
SallaButton,
|
|
168
|
+
{
|
|
169
|
+
color: "primary",
|
|
170
|
+
disabled: selectedCount === 0 || state.sharing,
|
|
171
|
+
onClick: state.shareSelected,
|
|
172
|
+
children: [
|
|
173
|
+
t("pages.wishlist.share", "Share"),
|
|
174
|
+
selectedCount > 0 ? ` (${selectedCount})` : ""
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
),
|
|
178
|
+
/* @__PURE__ */ jsx(SallaButton, { fill: "outline", color: "light", onClick: state.cancelSelecting, children: t("common.elements.cancel", "Cancel") })
|
|
179
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "s-wishlist-actions-dropdown relative", children: [
|
|
180
|
+
/* @__PURE__ */ jsx(
|
|
181
|
+
SallaButton,
|
|
182
|
+
{
|
|
183
|
+
color: "primary",
|
|
184
|
+
fill: "outline",
|
|
185
|
+
disabled: !hasProducts || state.sharing,
|
|
186
|
+
"aria-haspopup": "true",
|
|
187
|
+
"aria-expanded": menuOpen,
|
|
188
|
+
onClick: () => setMenuOpen(!menuOpen),
|
|
189
|
+
children: /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-center gap-2", children: [
|
|
190
|
+
/* @__PURE__ */ jsx("i", { className: "sicon-share-alt", "aria-hidden": "true" }),
|
|
191
|
+
t("pages.wishlist.share", "Share"),
|
|
192
|
+
/* @__PURE__ */ jsx("i", { className: "sicon-keyboard_arrow_down", "aria-hidden": "true" })
|
|
193
|
+
] })
|
|
194
|
+
}
|
|
195
|
+
),
|
|
196
|
+
menuOpen && /* @__PURE__ */ jsxs(
|
|
197
|
+
"ul",
|
|
198
|
+
{
|
|
199
|
+
role: "menu",
|
|
200
|
+
className: "s-wishlist-actions-menu absolute z-10 mt-2 min-w-48 rounded-md bg-white py-2 shadow-default rtl:right-0 ltr:left-0",
|
|
201
|
+
children: [
|
|
202
|
+
/* @__PURE__ */ jsx("li", { role: "none", children: /* @__PURE__ */ jsx(
|
|
203
|
+
"button",
|
|
204
|
+
{
|
|
205
|
+
type: "button",
|
|
206
|
+
role: "menuitem",
|
|
207
|
+
className: "s-wishlist-actions-item block w-full px-4 py-2 text-start text-sm text-gray-700 hover:bg-gray-50",
|
|
208
|
+
onClick: state.shareAll,
|
|
209
|
+
children: t("pages.wishlist.share_all", "Share the list")
|
|
210
|
+
}
|
|
211
|
+
) }),
|
|
212
|
+
/* @__PURE__ */ jsx("li", { role: "none", children: /* @__PURE__ */ jsx(
|
|
213
|
+
"button",
|
|
214
|
+
{
|
|
215
|
+
type: "button",
|
|
216
|
+
role: "menuitem",
|
|
217
|
+
className: "s-wishlist-actions-item block w-full px-4 py-2 text-start text-sm text-gray-700 hover:bg-gray-50",
|
|
218
|
+
onClick: state.startSelecting,
|
|
219
|
+
children: t("pages.wishlist.share_specific", "Share specific items")
|
|
220
|
+
}
|
|
221
|
+
) })
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
)
|
|
225
|
+
] }) }),
|
|
226
|
+
/* @__PURE__ */ jsx(
|
|
227
|
+
SallaSocialShareCore,
|
|
228
|
+
{
|
|
229
|
+
ref: state.socialShareRef,
|
|
230
|
+
url: state.shareUrl || void 0,
|
|
231
|
+
mode: "modal",
|
|
232
|
+
modalTitle: t("pages.wishlist.share_list_title", "Share wishlist"),
|
|
233
|
+
className: "s-wishlist-actions-social",
|
|
234
|
+
children: /* @__PURE__ */ jsx("span", { slot: "widget", className: "s-wishlist-actions-social-anchor", "aria-hidden": "true" })
|
|
235
|
+
}
|
|
236
|
+
)
|
|
237
|
+
] });
|
|
238
|
+
}
|
|
239
|
+
function WishlistCard({
|
|
240
|
+
product: prod,
|
|
241
|
+
selection
|
|
242
|
+
}) {
|
|
243
|
+
const { remove } = useWishlist();
|
|
244
|
+
const { format } = useMoney();
|
|
245
|
+
const handleRemove = () => {
|
|
246
|
+
if (prod.id) {
|
|
247
|
+
remove(Number(prod.id));
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
const displayPrice = prod.sale_price ?? prod.price;
|
|
251
|
+
const regularPrice = prod.regular_price;
|
|
252
|
+
return /* @__PURE__ */ jsxs(
|
|
253
|
+
"div",
|
|
254
|
+
{
|
|
255
|
+
id: `wishlist-product-${prod.id}`,
|
|
256
|
+
className: `product-entry product-entry--wishlist${selection?.selected ? " is-selected" : ""}`,
|
|
257
|
+
children: [
|
|
258
|
+
selection?.selecting && /* @__PURE__ */ jsx(
|
|
259
|
+
"input",
|
|
260
|
+
{
|
|
261
|
+
type: "checkbox",
|
|
262
|
+
className: "s-wishlist-select shrink-0 rtl:ml-4 ltr:mr-4",
|
|
263
|
+
"aria-label": prod.name,
|
|
264
|
+
checked: selection.selected,
|
|
265
|
+
onChange: () => selection.onToggle(Number(prod.id))
|
|
266
|
+
}
|
|
267
|
+
),
|
|
268
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center mb-4 sm:mb-0", children: [
|
|
269
|
+
/* @__PURE__ */ jsx("a", { href: prod.url, className: "product-entry__image", children: /* @__PURE__ */ jsx(
|
|
270
|
+
Image,
|
|
271
|
+
{
|
|
272
|
+
className: "object-cover w-full h-full",
|
|
273
|
+
src: prod.image?.url,
|
|
274
|
+
alt: prod.image?.alt ?? prod.name,
|
|
275
|
+
aspectRatio: "1/1"
|
|
276
|
+
}
|
|
277
|
+
) }),
|
|
278
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 rtl:pr-5 ltr:pl-5", children: [
|
|
279
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm text-gray-800 leading-6 mb-1.5 rtl:pl-5 ltr:pr-5 rtl:md:pl-8 ltr:md:pr-8 line-clamp-1", children: /* @__PURE__ */ jsx("a", { href: prod.url, children: prod.name }) }),
|
|
280
|
+
/* @__PURE__ */ jsx("div", { className: "w-full center-between", children: prod.is_on_sale && regularPrice ? /* @__PURE__ */ jsxs("div", { className: "space-x-1 rtl:space-x-reverse", children: [
|
|
281
|
+
/* @__PURE__ */ jsx("h4", { className: "inline-block text-sm font-bold text-red-400", children: format(displayPrice) }),
|
|
282
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-gray-500 line-through", children: format(regularPrice) })
|
|
283
|
+
] }) : /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold", children: format(displayPrice) }) })
|
|
284
|
+
] })
|
|
285
|
+
] }),
|
|
286
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-4 rtl:space-x-reverse", children: [
|
|
287
|
+
/* @__PURE__ */ jsx(
|
|
288
|
+
SallaAddProductButton,
|
|
289
|
+
{
|
|
290
|
+
productStatus: prod.status,
|
|
291
|
+
productId: prod.id,
|
|
292
|
+
productType: prod.type,
|
|
293
|
+
loaderPosition: "center",
|
|
294
|
+
fill: "outline",
|
|
295
|
+
className: "flex-grow w-full sm:grow-0 md:w-40"
|
|
296
|
+
}
|
|
297
|
+
),
|
|
298
|
+
/* @__PURE__ */ jsx(
|
|
299
|
+
SallaButton,
|
|
300
|
+
{
|
|
301
|
+
loaderPosition: "center",
|
|
302
|
+
shape: "icon",
|
|
303
|
+
size: "small",
|
|
304
|
+
color: "danger",
|
|
305
|
+
className: "btn--delete",
|
|
306
|
+
onClick: handleRemove,
|
|
307
|
+
children: /* @__PURE__ */ jsx("i", { className: "sicon-cancel" })
|
|
308
|
+
}
|
|
309
|
+
)
|
|
310
|
+
] })
|
|
311
|
+
]
|
|
312
|
+
}
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
function WishlistPage({ query, products, pagination }) {
|
|
316
|
+
const { t } = useTranslation();
|
|
317
|
+
const { pathname, searchStr } = useLocation();
|
|
318
|
+
const nextPageRef = useRef(query.page + 1);
|
|
319
|
+
const shareState = useWishlistShare();
|
|
320
|
+
const selectedIdSet = useMemo(() => new Set(shareState.selectedIds), [shareState.selectedIds]);
|
|
321
|
+
const loader = async () => {
|
|
322
|
+
const pageToLoad = nextPageRef.current;
|
|
323
|
+
const result = await wishlist.list({ page: pageToLoad });
|
|
324
|
+
nextPageRef.current = pageToLoad + 1;
|
|
325
|
+
return {
|
|
326
|
+
items: result.items,
|
|
327
|
+
next: result.next
|
|
328
|
+
};
|
|
329
|
+
};
|
|
330
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-5", id: "wishlist", children: [
|
|
331
|
+
/* @__PURE__ */ jsx(HookSlot, { name: "customer:wishlist.items.start" }),
|
|
332
|
+
/* @__PURE__ */ jsx(WishlistShareBar, { state: shareState, hasProducts: products.length > 0 }),
|
|
333
|
+
/* @__PURE__ */ jsx(
|
|
334
|
+
ItemsList,
|
|
335
|
+
{
|
|
336
|
+
items: products,
|
|
337
|
+
loader,
|
|
338
|
+
mode: pagination?.next ? "infinite" : "static",
|
|
339
|
+
pageUrl: pathname + searchStr,
|
|
340
|
+
className: "s-products-list",
|
|
341
|
+
itemsClassName: "s-products-list-wrapper s-products-list-row-cards",
|
|
342
|
+
empty: /* @__PURE__ */ jsx("div", { className: "text-center py-16", children: /* @__PURE__ */ jsx(
|
|
343
|
+
LazyNoContent,
|
|
344
|
+
{
|
|
345
|
+
icon: "sicon-heart",
|
|
346
|
+
message: t("common.errors.no_wishlist", "You don't have any wishes"),
|
|
347
|
+
actionLabel: t("pages.offer.continue_shopping", "Continue shopping"),
|
|
348
|
+
actionUrl: "/"
|
|
349
|
+
}
|
|
350
|
+
) }),
|
|
351
|
+
t: (key, fallback) => t(key, fallback || key),
|
|
352
|
+
children: (items) => {
|
|
353
|
+
shareState.loadedIdsRef.current = items.map((item) => Number(item.id));
|
|
354
|
+
return items.map((prod) => /* @__PURE__ */ jsx(
|
|
355
|
+
WishlistCard,
|
|
356
|
+
{
|
|
357
|
+
product: prod,
|
|
358
|
+
selection: {
|
|
359
|
+
selecting: shareState.selecting,
|
|
360
|
+
selected: selectedIdSet.has(Number(prod.id)),
|
|
361
|
+
onToggle: shareState.toggleSelected
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
prod.id
|
|
365
|
+
));
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
),
|
|
369
|
+
/* @__PURE__ */ jsx(HookSlot, { name: "customer:wishlist.items.end" })
|
|
370
|
+
] });
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export { WishlistPage };
|
|
374
|
+
//# sourceMappingURL=WishlistPage-KEWT7Y5L.js.map
|
|
375
|
+
//# sourceMappingURL=WishlistPage-KEWT7Y5L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/routes/account/wishlist/WishlistShare.tsx","../src/routes/account/wishlist/WishlistPage.tsx"],"names":["SallaSocialShare","jsxs","jsx","SallaButton","useRef"],"mappings":"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","file":"WishlistPage-KEWT7Y5L.js","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\n// The eager (non-deferred) export: the share dialog is opened imperatively through a ref, and the\n// deferred wrapper doesn't attach it until it has hydrated — a click before that would do nothing.\nimport { SallaSocialShareCore as SallaSocialShare } from '@salla.sa/twilight-components-react/social-share';\nimport { useTranslation } from '../../../providers/I18nProvider';\n\ntype ShareResponse = { data?: { url?: string }; url?: string } | undefined;\ntype SocialShareElement = HTMLElement & {\n url?: string;\n refresh?: () => Promise<void>;\n open?: () => Promise<void>;\n close?: () => Promise<void>;\n};\n\n/**\n * Share state for the wishlist page: the \"Share\" dropdown (share the whole list / share\n * specific items), the selection used by \"specific items\", and the share request itself.\n * Mirrors what the SDK's `<salla-wishlist-actions>` does, but drives the page's own React\n * list — that component needs a sibling `<salla-products-list>`, which this page doesn't render.\n */\nexport function useWishlistShare() {\n const [menuOpen, setMenuOpen] = useState(false);\n const [selecting, setSelecting] = useState(false);\n const [selectedIds, setSelectedIds] = useState<number[]>([]);\n const [sharing, setSharing] = useState(false);\n const [shareUrl, setShareUrl] = useState('');\n /** Ids of every product currently rendered (later cursor pages included), for \"select all\". */\n const loadedIdsRef = useRef<number[]>([]);\n const socialShareRef = useRef<SocialShareElement | null>(null);\n\n const share = useCallback(async (ids: number[], selectAll: boolean) => {\n if (!window.salla?.wishlist?.share) return;\n setSharing(true);\n try {\n const response = (await window.salla.wishlist.share(ids, selectAll)) as ShareResponse;\n const url = response?.data?.url || response?.url || '';\n if (!url) return;\n setShareUrl(url);\n const element = socialShareRef.current;\n if (element) {\n element.url = url;\n await element.refresh?.();\n await element.open?.();\n }\n } catch {\n // The SDK reports a failed share itself (notification); nothing to recover here.\n } finally {\n setSharing(false);\n }\n }, []);\n\n const shareAll = useCallback(() => {\n setMenuOpen(false);\n void share([], true);\n }, [share]);\n\n const shareSelected = useCallback(() => {\n if (selectedIds.length) void share(selectedIds, false);\n }, [share, selectedIds]);\n\n const startSelecting = useCallback(() => {\n setMenuOpen(false);\n setSelecting(true);\n }, []);\n\n const cancelSelecting = useCallback(() => {\n setSelecting(false);\n setSelectedIds([]);\n setShareUrl('');\n void socialShareRef.current?.close?.();\n }, []);\n\n const toggleSelected = useCallback((id: number) => {\n setShareUrl('');\n setSelectedIds((current) =>\n current.includes(id) ? current.filter((existing) => existing !== id) : [...current, id]\n );\n }, []);\n\n const toggleAll = useCallback(() => {\n setShareUrl('');\n setSelectedIds((current) =>\n current.length && current.length === loadedIdsRef.current.length\n ? []\n : [...loadedIdsRef.current]\n );\n }, []);\n\n return {\n menuOpen,\n setMenuOpen,\n selecting,\n selectedIds,\n sharing,\n shareUrl,\n loadedIdsRef,\n socialShareRef,\n shareAll,\n shareSelected,\n startSelecting,\n cancelSelecting,\n toggleSelected,\n toggleAll,\n };\n}\n\nexport type WishlistShareState = ReturnType<typeof useWishlistShare>;\n\n/** The bar above the wishlist: the \"Share\" dropdown, or — while picking products — the selection controls. */\nexport function WishlistShareBar({\n state,\n hasProducts,\n}: {\n state: WishlistShareState;\n hasProducts: boolean;\n}) {\n const { t } = useTranslation();\n const rootRef = useRef<HTMLDivElement>(null);\n const { menuOpen, setMenuOpen } = state;\n\n // Close the dropdown on an outside click or Escape.\n useEffect(() => {\n if (!menuOpen) return;\n const onPointerDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) setMenuOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') setMenuOpen(false);\n };\n document.addEventListener('mousedown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('mousedown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [menuOpen, setMenuOpen]);\n\n const selectedCount = state.selectedIds.length;\n const allSelected = selectedCount > 0 && selectedCount === state.loadedIdsRef.current.length;\n\n return (\n <div ref={rootRef} className=\"s-wishlist-actions\">\n <div className=\"s-wishlist-actions-bar flex items-center justify-end gap-3 mb-3\">\n {state.selecting ? (\n <div className=\"s-wishlist-actions-selection flex items-center gap-3\">\n <label className=\"s-wishlist-actions-select-all inline-flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={(input) => {\n if (input) input.indeterminate = selectedCount > 0 && !allSelected;\n }}\n onChange={state.toggleAll}\n />\n {t('pages.wishlist.select_all', 'Select all')}\n </label>\n <SallaButton\n color=\"primary\"\n disabled={selectedCount === 0 || state.sharing}\n onClick={state.shareSelected}\n >\n {t('pages.wishlist.share', 'Share')}\n {selectedCount > 0 ? ` (${selectedCount})` : ''}\n </SallaButton>\n <SallaButton fill=\"outline\" color=\"light\" onClick={state.cancelSelecting}>\n {t('common.elements.cancel', 'Cancel')}\n </SallaButton>\n </div>\n ) : (\n <div className=\"s-wishlist-actions-dropdown relative\">\n <SallaButton\n color=\"primary\"\n fill=\"outline\"\n disabled={!hasProducts || state.sharing}\n aria-haspopup=\"true\"\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(!menuOpen)}\n >\n <span className=\"flex items-center justify-center gap-2\">\n <i className=\"sicon-share-alt\" aria-hidden=\"true\" />\n {t('pages.wishlist.share', 'Share')}\n <i className=\"sicon-keyboard_arrow_down\" aria-hidden=\"true\" />\n </span>\n </SallaButton>\n {menuOpen && (\n <ul\n role=\"menu\"\n className=\"s-wishlist-actions-menu absolute z-10 mt-2 min-w-48 rounded-md bg-white py-2 shadow-default rtl:right-0 ltr:left-0\"\n >\n <li role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"s-wishlist-actions-item block w-full px-4 py-2 text-start text-sm text-gray-700 hover:bg-gray-50\"\n onClick={state.shareAll}\n >\n {t('pages.wishlist.share_all', 'Share the list')}\n </button>\n </li>\n <li role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"s-wishlist-actions-item block w-full px-4 py-2 text-start text-sm text-gray-700 hover:bg-gray-50\"\n onClick={state.startSelecting}\n >\n {t('pages.wishlist.share_specific', 'Share specific items')}\n </button>\n </li>\n </ul>\n )}\n </div>\n )}\n </div>\n {/* Same setup as the SDK's <salla-wishlist-actions>: the centered modal variant, opened by the\n dropdown rather than by the component's own round share button, so the default\n `widget` slot (that button) is replaced by an empty anchor. */}\n <SallaSocialShare\n ref={state.socialShareRef as never}\n url={state.shareUrl || undefined}\n mode=\"modal\"\n modalTitle={t('pages.wishlist.share_list_title', 'Share wishlist')}\n className=\"s-wishlist-actions-social\"\n >\n <span slot=\"widget\" className=\"s-wishlist-actions-social-anchor\" aria-hidden=\"true\" />\n </SallaSocialShare>\n </div>\n );\n}\n","import { useMemo, useRef } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { SallaAddProductButton } from '@salla.sa/twilight-components-react/add-product-button';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { wishlist } from '../../../api/wishlist';\nimport type { Product } from '../../../types';\nimport { HookSlot, useWishlist, useMoney } from '../../../hooks';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { WishlistPageProps } from './types';\nimport { WishlistShareBar, useWishlistShare } from './WishlistShare';\nimport { NoContent, Image } from '../../../components/common';\nimport { useLocation } from '../../../providers/NavigationProvider';\n\ninterface WishlistCardSelection {\n /** \"Share specific items\" mode: the card shows a checkbox and toggles on click. */\n selecting: boolean;\n selected: boolean;\n onToggle: (id: number) => void;\n}\n\nfunction WishlistCard({\n product: prod,\n selection,\n}: {\n product: Product;\n selection?: WishlistCardSelection;\n}) {\n const { remove } = useWishlist();\n const { format } = useMoney();\n\n const handleRemove = () => {\n if (prod.id) {\n remove(Number(prod.id));\n }\n };\n\n const displayPrice = prod.sale_price ?? prod.price;\n const regularPrice = prod.regular_price;\n\n return (\n <div\n id={`wishlist-product-${prod.id}`}\n className={`product-entry product-entry--wishlist${selection?.selected ? ' is-selected' : ''}`}\n >\n {selection?.selecting && (\n <input\n type=\"checkbox\"\n className=\"s-wishlist-select shrink-0 rtl:ml-4 ltr:mr-4\"\n aria-label={prod.name}\n checked={selection.selected}\n onChange={() => selection.onToggle(Number(prod.id))}\n />\n )}\n <div className=\"flex items-center mb-4 sm:mb-0\">\n <a href={prod.url} className=\"product-entry__image\">\n <Image\n className=\"object-cover w-full h-full\"\n src={prod.image?.url}\n alt={prod.image?.alt ?? prod.name}\n aspectRatio=\"1/1\"\n />\n </a>\n <div className=\"flex-1 rtl:pr-5 ltr:pl-5\">\n <h3 className=\"text-sm text-gray-800 leading-6 mb-1.5 rtl:pl-5 ltr:pr-5 rtl:md:pl-8 ltr:md:pr-8 line-clamp-1\">\n <a href={prod.url}>{prod.name}</a>\n </h3>\n <div className=\"w-full center-between\">\n {prod.is_on_sale && regularPrice ? (\n <div className=\"space-x-1 rtl:space-x-reverse\">\n <h4 className=\"inline-block text-sm font-bold text-red-400\">\n {format(displayPrice)}\n </h4>\n <span className=\"text-sm text-gray-500 line-through\">{format(regularPrice)}</span>\n </div>\n ) : (\n <h4 className=\"text-sm font-bold\">{format(displayPrice)}</h4>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex items-center space-x-4 rtl:space-x-reverse\">\n <SallaAddProductButton\n productStatus={prod.status}\n productId={prod.id}\n productType={prod.type}\n loaderPosition=\"center\"\n fill=\"outline\"\n className=\"flex-grow w-full sm:grow-0 md:w-40\"\n />\n <SallaButton\n loaderPosition=\"center\"\n shape=\"icon\"\n size=\"small\"\n color=\"danger\"\n className=\"btn--delete\"\n onClick={handleRemove}\n >\n <i className=\"sicon-cancel\" />\n </SallaButton>\n </div>\n </div>\n );\n}\n\nexport function WishlistPage({ query, products, pagination }: WishlistPageProps) {\n const { t } = useTranslation();\n const { pathname, searchStr } = useLocation();\n\n // Track the next page to load (starts at page 2 since page 1 is SSR)\n const nextPageRef = useRef(query.page + 1);\n const shareState = useWishlistShare();\n const selectedIdSet = useMemo(() => new Set(shareState.selectedIds), [shareState.selectedIds]);\n\n const loader = async () => {\n const pageToLoad = nextPageRef.current;\n const result = await wishlist.list({ page: pageToLoad });\n\n nextPageRef.current = pageToLoad + 1;\n\n return {\n items: result.items,\n next: result.next,\n };\n };\n\n return (\n <div className=\"space-y-5\" id=\"wishlist\">\n <HookSlot name=\"customer:wishlist.items.start\" />\n <WishlistShareBar state={shareState} hasProducts={products.length > 0} />\n <ItemsList<Product>\n items={products}\n loader={loader}\n mode={pagination?.next ? 'infinite' : 'static'}\n pageUrl={pathname + searchStr}\n className=\"s-products-list\"\n itemsClassName=\"s-products-list-wrapper s-products-list-row-cards\"\n empty={\n <div className=\"text-center py-16\">\n <NoContent\n icon=\"sicon-heart\"\n message={t('common.errors.no_wishlist', \"You don't have any wishes\")}\n actionLabel={t('pages.offer.continue_shopping', 'Continue shopping')}\n actionUrl=\"/\"\n />\n </div>\n }\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) => {\n shareState.loadedIdsRef.current = items.map((item) => Number(item.id));\n return items.map((prod) => (\n <WishlistCard\n key={prod.id}\n product={prod}\n selection={{\n selecting: shareState.selecting,\n selected: selectedIdSet.has(Number(prod.id)),\n onToggle: shareState.toggleSelected,\n }}\n />\n ));\n }}\n </ItemsList>\n <HookSlot name=\"customer:wishlist.items.end\" />\n </div>\n );\n}\n"]}
|
package/dist/api/brands.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { brand } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { brand } from '../chunk-XEQ6ILIP.js';
|
|
2
|
+
import '../chunk-63GHZIAG.js';
|
|
3
|
+
import '../chunk-TFB3QXYH.js';
|
|
4
4
|
import '../chunk-O6XXHXC4.js';
|
|
5
5
|
import '../chunk-3FIWHGCZ.js';
|
|
6
6
|
import '../chunk-XTMHHLNK.js';
|
package/dist/api/cart.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { cart } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { cart } from '../chunk-QBIW266S.js';
|
|
2
|
+
import '../chunk-63GHZIAG.js';
|
|
3
|
+
import '../chunk-TFB3QXYH.js';
|
|
4
4
|
import '../chunk-O6XXHXC4.js';
|
|
5
5
|
import '../chunk-3FIWHGCZ.js';
|
|
6
6
|
import '../chunk-XTMHHLNK.js';
|
package/dist/api/category.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { category } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { category } from '../chunk-A2ZO3IR7.js';
|
|
2
|
+
import '../chunk-63GHZIAG.js';
|
|
3
|
+
import '../chunk-TFB3QXYH.js';
|
|
4
4
|
import '../chunk-O6XXHXC4.js';
|
|
5
5
|
import '../chunk-3FIWHGCZ.js';
|
|
6
6
|
import '../chunk-XTMHHLNK.js';
|
package/dist/api/loyalty.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { loyalty } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { loyalty } from '../chunk-62SHHET3.js';
|
|
2
|
+
import '../chunk-63GHZIAG.js';
|
|
3
|
+
import '../chunk-TFB3QXYH.js';
|
|
4
4
|
import '../chunk-O6XXHXC4.js';
|
|
5
5
|
import '../chunk-3FIWHGCZ.js';
|
|
6
6
|
import '../chunk-XTMHHLNK.js';
|
package/dist/api/order.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { order } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { order } from '../chunk-QM75GGXX.js';
|
|
2
|
+
import '../chunk-63GHZIAG.js';
|
|
3
|
+
import '../chunk-TFB3QXYH.js';
|
|
4
4
|
import '../chunk-O6XXHXC4.js';
|
|
5
5
|
import '../chunk-3FIWHGCZ.js';
|
|
6
6
|
import '../chunk-XTMHHLNK.js';
|
package/dist/api/page.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { page } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { page } from '../chunk-TIDHWQIS.js';
|
|
2
|
+
import '../chunk-63GHZIAG.js';
|
|
3
|
+
import '../chunk-TFB3QXYH.js';
|
|
4
4
|
import '../chunk-O6XXHXC4.js';
|
|
5
5
|
import '../chunk-3FIWHGCZ.js';
|
|
6
6
|
import '../chunk-XTMHHLNK.js';
|
package/dist/api/product.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-BVB75J3R.js';
|
|
2
|
+
import '../chunk-63GHZIAG.js';
|
|
3
|
+
import '../chunk-TFB3QXYH.js';
|
|
4
4
|
import '../chunk-O6XXHXC4.js';
|
|
5
5
|
import '../chunk-3FIWHGCZ.js';
|
|
6
6
|
import '../chunk-XTMHHLNK.js';
|
package/dist/api/wishlist.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { wishlist } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
export { wishlist } from '../chunk-7XBSSGRK.js';
|
|
2
|
+
import '../chunk-BVB75J3R.js';
|
|
3
|
+
import '../chunk-63GHZIAG.js';
|
|
4
|
+
import '../chunk-TFB3QXYH.js';
|
|
5
5
|
import '../chunk-O6XXHXC4.js';
|
|
6
6
|
import '../chunk-3FIWHGCZ.js';
|
|
7
7
|
import '../chunk-XTMHHLNK.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { registry } from './chunk-342EPVXN.js';
|
|
2
|
-
import { useMoney, useNumber } from './chunk-
|
|
2
|
+
import { useMoney, useNumber } from './chunk-GLKBT6N6.js';
|
|
3
3
|
import { useAsset } from './chunk-Z653O7MX.js';
|
|
4
4
|
import { useWishlist } from './chunk-GBWCXUPD.js';
|
|
5
5
|
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
6
|
-
import { Image } from './chunk-
|
|
6
|
+
import { Image } from './chunk-6DH255C3.js';
|
|
7
7
|
import { LazyImageModal } from './chunk-CUG6VOLM.js';
|
|
8
8
|
import { useTwilight } from './chunk-DF6FBKDN.js';
|
|
9
9
|
import { lazy, memo, useCallback, useMemo, useState, useEffect, Suspense } from 'react';
|
|
@@ -13,10 +13,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
13
13
|
import { SallaSlider } from '@salla.sa/twilight-components-react/slider';
|
|
14
14
|
|
|
15
15
|
var LazyProductDetails = lazy(
|
|
16
|
-
() => import('./ProductDetails-
|
|
16
|
+
() => import('./ProductDetails-5P26PWUH.js').then((m) => ({ default: m.ProductDetails }))
|
|
17
17
|
);
|
|
18
18
|
var LazyAddToCartForm = lazy(
|
|
19
|
-
() => import('./AddToCartForm-
|
|
19
|
+
() => import('./AddToCartForm-ZMGIDWJ2.js').then((m) => ({ default: m.AddToCartForm }))
|
|
20
20
|
);
|
|
21
21
|
var PRODUCT_CARD_KEY = "product:card";
|
|
22
22
|
var PRODUCT_IMAGE_SRCSET_WIDTHS = [150, 300, 450, 600];
|
|
@@ -414,5 +414,5 @@ function ThumbSlide({ image, index }) {
|
|
|
414
414
|
}
|
|
415
415
|
|
|
416
416
|
export { LazyAddToCartForm, LazyProductDetails, ProductCard, ProductGallery };
|
|
417
|
-
//# sourceMappingURL=chunk-
|
|
418
|
-
//# sourceMappingURL=chunk-
|
|
417
|
+
//# sourceMappingURL=chunk-3NSG3KI6.js.map
|
|
418
|
+
//# sourceMappingURL=chunk-3NSG3KI6.js.map
|