@enadhq/enad-react-sdk 0.0.6
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/client/cart/components/cart-drawer.d.mts +19 -0
- package/dist/client/cart/components/cart-drawer.mjs +180 -0
- package/dist/client/cart/components/cart-drawer.mjs.map +1 -0
- package/dist/client/cart/components/cart-trigger.d.mts +5 -0
- package/dist/client/cart/components/cart-trigger.mjs +18 -0
- package/dist/client/cart/components/cart-trigger.mjs.map +1 -0
- package/dist/client/cart/constants/session.d.mts +3 -0
- package/dist/client/cart/constants/session.mjs +5 -0
- package/dist/client/cart/constants/session.mjs.map +1 -0
- package/dist/client/cart/contexts/cart.d.mts +27 -0
- package/dist/client/cart/contexts/cart.mjs +22 -0
- package/dist/client/cart/contexts/cart.mjs.map +1 -0
- package/dist/client/cart/hooks/useCart.d.mts +29 -0
- package/dist/client/cart/hooks/useCart.mjs +26 -0
- package/dist/client/cart/hooks/useCart.mjs.map +1 -0
- package/dist/client/cart/hooks/useCartActions.d.mts +26 -0
- package/dist/client/cart/hooks/useCartActions.mjs +58 -0
- package/dist/client/cart/hooks/useCartActions.mjs.map +1 -0
- package/dist/client/cart/queries/addToCartQueryFn.d.mts +10 -0
- package/dist/client/cart/queries/addToCartQueryFn.mjs +27 -0
- package/dist/client/cart/queries/addToCartQueryFn.mjs.map +1 -0
- package/dist/client/cart/queries/getCartQueryFn.d.mts +7 -0
- package/dist/client/cart/queries/getCartQueryFn.mjs +34 -0
- package/dist/client/cart/queries/getCartQueryFn.mjs.map +1 -0
- package/dist/client/cart/queries/removeCartItemQueryFn.d.mts +9 -0
- package/dist/client/cart/queries/removeCartItemQueryFn.mjs +24 -0
- package/dist/client/cart/queries/removeCartItemQueryFn.mjs.map +1 -0
- package/dist/client/cart/queries/updateCartItemQueryFn.d.mts +10 -0
- package/dist/client/cart/queries/updateCartItemQueryFn.mjs +27 -0
- package/dist/client/cart/queries/updateCartItemQueryFn.mjs.map +1 -0
- package/dist/client/cart/types/cart.d.mts +36 -0
- package/dist/client/cart/types/cart.mjs +1 -0
- package/dist/client/cart/types/cart.mjs.map +1 -0
- package/dist/client/cart/utils/session.d.mts +6 -0
- package/dist/client/cart/utils/session.mjs +21 -0
- package/dist/client/cart/utils/session.mjs.map +1 -0
- package/dist/client/cms/storyblok/preview/registerStoryblokBridge.d.mts +6 -0
- package/dist/client/cms/storyblok/preview/registerStoryblokBridge.mjs +24 -0
- package/dist/client/cms/storyblok/preview/registerStoryblokBridge.mjs.map +1 -0
- package/dist/client/cms/storyblok/preview/storyblok-preview-syncer.d.mts +22 -0
- package/dist/client/cms/storyblok/preview/storyblok-preview-syncer.mjs +79 -0
- package/dist/client/cms/storyblok/preview/storyblok-preview-syncer.mjs.map +1 -0
- package/dist/client/global/auth/withAuth.d.mts +6 -0
- package/dist/client/global/auth/withAuth.mjs +25 -0
- package/dist/client/global/auth/withAuth.mjs.map +1 -0
- package/dist/client/global/config/index.d.mts +17 -0
- package/dist/client/global/config/index.mjs +34 -0
- package/dist/client/global/config/index.mjs.map +1 -0
- package/dist/client/global/constants/tags.d.mts +16 -0
- package/dist/client/global/constants/tags.mjs +18 -0
- package/dist/client/global/constants/tags.mjs.map +1 -0
- package/dist/client/global/providers/enad-provider.d.mts +23 -0
- package/dist/client/global/providers/enad-provider.mjs +11 -0
- package/dist/client/global/providers/enad-provider.mjs.map +1 -0
- package/dist/client/search/actions/searchAction.d.mts +5 -0
- package/dist/client/search/actions/searchAction.mjs +18 -0
- package/dist/client/search/actions/searchAction.mjs.map +1 -0
- package/dist/client/search/components/search-bar.d.mts +2 -0
- package/dist/client/search/components/search-bar.mjs +1 -0
- package/dist/client/search/components/search-bar.mjs.map +1 -0
- package/dist/client/search/hooks/useSearch.d.mts +18 -0
- package/dist/client/search/hooks/useSearch.mjs +37 -0
- package/dist/client/search/hooks/useSearch.mjs.map +1 -0
- package/dist/client/user/actions/createResetPasswordLinkAction.d.mts +14 -0
- package/dist/client/user/actions/createResetPasswordLinkAction.mjs +30 -0
- package/dist/client/user/actions/createResetPasswordLinkAction.mjs.map +1 -0
- package/dist/client/user/actions/getUserAction.d.mts +5 -0
- package/dist/client/user/actions/getUserAction.mjs +19 -0
- package/dist/client/user/actions/getUserAction.mjs.map +1 -0
- package/dist/client/user/actions/logInUserAction.d.mts +15 -0
- package/dist/client/user/actions/logInUserAction.mjs +34 -0
- package/dist/client/user/actions/logInUserAction.mjs.map +1 -0
- package/dist/client/user/actions/logoutUserAction.d.mts +3 -0
- package/dist/client/user/actions/logoutUserAction.mjs +10 -0
- package/dist/client/user/actions/logoutUserAction.mjs.map +1 -0
- package/dist/client/user/actions/registerOrganisationAction.d.mts +12 -0
- package/dist/client/user/actions/registerOrganisationAction.mjs +18 -0
- package/dist/client/user/actions/registerOrganisationAction.mjs.map +1 -0
- package/dist/client/user/actions/registerUserAction.d.mts +18 -0
- package/dist/client/user/actions/registerUserAction.mjs +42 -0
- package/dist/client/user/actions/registerUserAction.mjs.map +1 -0
- package/dist/client/user/actions/registerUserWithoutRedirectAction.d.mts +44 -0
- package/dist/client/user/actions/registerUserWithoutRedirectAction.mjs +58 -0
- package/dist/client/user/actions/registerUserWithoutRedirectAction.mjs.map +1 -0
- package/dist/client/user/actions/updatePasswordAction.d.mts +21 -0
- package/dist/client/user/actions/updatePasswordAction.mjs +37 -0
- package/dist/client/user/actions/updatePasswordAction.mjs.map +1 -0
- package/dist/client/user/api/userRoute.d.mts +9 -0
- package/dist/client/user/api/userRoute.mjs +65 -0
- package/dist/client/user/api/userRoute.mjs.map +1 -0
- package/dist/client/user/clients/enad.d.mts +6 -0
- package/dist/client/user/clients/enad.mjs +19 -0
- package/dist/client/user/clients/enad.mjs.map +1 -0
- package/dist/client/user/components/login-form.d.mts +20 -0
- package/dist/client/user/components/login-form.mjs +113 -0
- package/dist/client/user/components/login-form.mjs.map +1 -0
- package/dist/client/user/components/reset-password-form.d.mts +15 -0
- package/dist/client/user/components/reset-password-form.mjs +86 -0
- package/dist/client/user/components/reset-password-form.mjs.map +1 -0
- package/dist/client/user/components/sign-out.d.mts +5 -0
- package/dist/client/user/components/sign-out.mjs +23 -0
- package/dist/client/user/components/sign-out.mjs.map +1 -0
- package/dist/client/user/components/signup-form.d.mts +15 -0
- package/dist/client/user/components/signup-form.mjs +155 -0
- package/dist/client/user/components/signup-form.mjs.map +1 -0
- package/dist/client/user/components/signup-organisation-form.d.mts +20 -0
- package/dist/client/user/components/signup-organisation-form.mjs +813 -0
- package/dist/client/user/components/signup-organisation-form.mjs.map +1 -0
- package/dist/client/user/components/update-password-form.d.mts +11 -0
- package/dist/client/user/components/update-password-form.mjs +69 -0
- package/dist/client/user/components/update-password-form.mjs.map +1 -0
- package/dist/client/user/hooks/index.d.mts +3 -0
- package/dist/client/user/hooks/index.mjs +2 -0
- package/dist/client/user/hooks/index.mjs.map +1 -0
- package/dist/client/user/hooks/useUser.d.mts +16 -0
- package/dist/client/user/hooks/useUser.mjs +32 -0
- package/dist/client/user/hooks/useUser.mjs.map +1 -0
- package/dist/client/user/types/user.d.mts +202 -0
- package/dist/client/user/types/user.mjs +1 -0
- package/dist/client/user/types/user.mjs.map +1 -0
- package/dist/client/user/utils/userCookieService.d.mts +20 -0
- package/dist/client/user/utils/userCookieService.mjs +51 -0
- package/dist/client/user/utils/userCookieService.mjs.map +1 -0
- package/dist/client/wishlist/actions/addItemsToWishlistAction.d.mts +7 -0
- package/dist/client/wishlist/actions/addItemsToWishlistAction.mjs +20 -0
- package/dist/client/wishlist/actions/addItemsToWishlistAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/createOrGetShareTokenAction.d.mts +6 -0
- package/dist/client/wishlist/actions/createOrGetShareTokenAction.mjs +20 -0
- package/dist/client/wishlist/actions/createOrGetShareTokenAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/createWishlistAction.d.mts +6 -0
- package/dist/client/wishlist/actions/createWishlistAction.mjs +16 -0
- package/dist/client/wishlist/actions/createWishlistAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/deleteItemsFromWishlistAction.d.mts +7 -0
- package/dist/client/wishlist/actions/deleteItemsFromWishlistAction.mjs +20 -0
- package/dist/client/wishlist/actions/deleteItemsFromWishlistAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/deleteWishlistAction.d.mts +5 -0
- package/dist/client/wishlist/actions/deleteWishlistAction.mjs +16 -0
- package/dist/client/wishlist/actions/deleteWishlistAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/getSharedWishlistAction.d.mts +6 -0
- package/dist/client/wishlist/actions/getSharedWishlistAction.mjs +20 -0
- package/dist/client/wishlist/actions/getSharedWishlistAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/getSpecificWishlistAction.d.mts +6 -0
- package/dist/client/wishlist/actions/getSpecificWishlistAction.mjs +20 -0
- package/dist/client/wishlist/actions/getSpecificWishlistAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/getUserWishlists.d.mts +7 -0
- package/dist/client/wishlist/actions/getUserWishlists.mjs +25 -0
- package/dist/client/wishlist/actions/getUserWishlists.mjs.map +1 -0
- package/dist/client/wishlist/actions/revokeShareTokenAction.d.mts +5 -0
- package/dist/client/wishlist/actions/revokeShareTokenAction.mjs +20 -0
- package/dist/client/wishlist/actions/revokeShareTokenAction.mjs.map +1 -0
- package/dist/client/wishlist/actions/updateWishlistAction.d.mts +6 -0
- package/dist/client/wishlist/actions/updateWishlistAction.mjs +20 -0
- package/dist/client/wishlist/actions/updateWishlistAction.mjs.map +1 -0
- package/dist/client/wishlist/hooks/index.d.mts +3 -0
- package/dist/client/wishlist/hooks/index.mjs +2 -0
- package/dist/client/wishlist/hooks/index.mjs.map +1 -0
- package/dist/client/wishlist/hooks/useWishlist.d.mts +98 -0
- package/dist/client/wishlist/hooks/useWishlist.mjs +66 -0
- package/dist/client/wishlist/hooks/useWishlist.mjs.map +1 -0
- package/dist/client/wishlist/hooks/useWishlistActions.d.mts +48 -0
- package/dist/client/wishlist/hooks/useWishlistActions.mjs +101 -0
- package/dist/client/wishlist/hooks/useWishlistActions.mjs.map +1 -0
- package/dist/client/wishlist/wishlist-drawer.d.mts +19 -0
- package/dist/client/wishlist/wishlist-drawer.mjs +180 -0
- package/dist/client/wishlist/wishlist-drawer.mjs.map +1 -0
- package/dist/styles.css +959 -0
- package/package.json +64 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BrinkConfig } from '../contexts/cart.mjs';
|
|
2
|
+
import { CartResponse } from '../types/cart.mjs';
|
|
3
|
+
import 'react';
|
|
4
|
+
|
|
5
|
+
declare const updateCartItemFn: (brinkConfig: BrinkConfig) => ({ itemId, quantity, }: {
|
|
6
|
+
itemId: string;
|
|
7
|
+
quantity: number;
|
|
8
|
+
}) => Promise<CartResponse>;
|
|
9
|
+
|
|
10
|
+
export { updateCartItemFn };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CART_SESSION_KEY } from "../constants/session";
|
|
2
|
+
import { getCartSession } from "../utils/session";
|
|
3
|
+
const updateCartItemFn = (brinkConfig) => {
|
|
4
|
+
const { env } = brinkConfig;
|
|
5
|
+
return async ({
|
|
6
|
+
itemId,
|
|
7
|
+
quantity
|
|
8
|
+
}) => {
|
|
9
|
+
const baseUrl = `https://shopper.eu-west-1.${env}.brinkcommerce.io`;
|
|
10
|
+
const res = await fetch(`${baseUrl}/shopper/sessions/items/${itemId}`, {
|
|
11
|
+
method: "PUT",
|
|
12
|
+
headers: {
|
|
13
|
+
Authorization: `Bearer ${getCartSession()}`,
|
|
14
|
+
"Content-Type": "application/json"
|
|
15
|
+
},
|
|
16
|
+
body: JSON.stringify({ quantity })
|
|
17
|
+
});
|
|
18
|
+
if (!res.ok) throw new Error("Failed to update cart item");
|
|
19
|
+
const data = await res.json();
|
|
20
|
+
localStorage.setItem(CART_SESSION_KEY, data.token);
|
|
21
|
+
return data;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export {
|
|
25
|
+
updateCartItemFn
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=updateCartItemQueryFn.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/cart/queries/updateCartItemQueryFn.tsx"],"sourcesContent":["import { BrinkConfig } from \"../contexts/cart\"\nimport { CART_SESSION_KEY } from \"../constants/session\"\nimport { getCartSession } from \"../utils/session\"\nimport { CartResponse } from \"../types/cart\"\n\nexport const updateCartItemFn = (brinkConfig: BrinkConfig) => {\n const { env } = brinkConfig\n\n return async ({\n itemId,\n quantity,\n }: {\n itemId: string\n quantity: number\n }): Promise<CartResponse> => {\n const baseUrl = `https://shopper.eu-west-1.${env}.brinkcommerce.io`\n\n const res = await fetch(`${baseUrl}/shopper/sessions/items/${itemId}`, {\n method: \"PUT\",\n headers: {\n Authorization: `Bearer ${getCartSession()}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ quantity }),\n })\n\n if (!res.ok) throw new Error(\"Failed to update cart item\")\n\n const data = (await res.json()) as CartResponse\n localStorage.setItem(CART_SESSION_KEY, data.token)\n\n return data\n }\n}\n"],"mappings":"AACA,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAGxB,MAAM,mBAAmB,CAAC,gBAA6B;AAC5D,QAAM,EAAE,IAAI,IAAI;AAEhB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,EACF,MAG6B;AAC3B,UAAM,UAAU,6BAA6B,GAAG;AAEhD,UAAM,MAAM,MAAM,MAAM,GAAG,OAAO,2BAA2B,MAAM,IAAI;AAAA,MACrE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,eAAe,UAAU,eAAe,CAAC;AAAA,QACzC,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,SAAS,CAAC;AAAA,IACnC,CAAC;AAED,QAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,4BAA4B;AAEzD,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,iBAAa,QAAQ,kBAAkB,KAAK,KAAK;AAEjD,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
interface Cart {
|
|
2
|
+
id: string;
|
|
3
|
+
storeGroupId: string;
|
|
4
|
+
countryCode: string;
|
|
5
|
+
currencyCode: string;
|
|
6
|
+
languageCode: string;
|
|
7
|
+
isTaxIncludedInPrice: boolean;
|
|
8
|
+
discountCodes: string[];
|
|
9
|
+
created: string;
|
|
10
|
+
updated: string;
|
|
11
|
+
discountAmount: number;
|
|
12
|
+
revision: number;
|
|
13
|
+
items: any[];
|
|
14
|
+
totals: {
|
|
15
|
+
subTotal: number;
|
|
16
|
+
taxTotal: number;
|
|
17
|
+
discountTotal: number;
|
|
18
|
+
grandTotal: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
interface CartResponse {
|
|
22
|
+
token: string;
|
|
23
|
+
cart: Cart;
|
|
24
|
+
capabilities: {
|
|
25
|
+
paymentProviders: {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
}[];
|
|
29
|
+
shippingProviders: {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
}[];
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type { Cart, CartResponse };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=cart.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare const hasCartSession: () => boolean;
|
|
2
|
+
declare const clearCartSession: () => void;
|
|
3
|
+
declare const setCartSession: (token: string) => void;
|
|
4
|
+
declare const getCartSession: () => string | null;
|
|
5
|
+
|
|
6
|
+
export { clearCartSession, getCartSession, hasCartSession, setCartSession };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CART_SESSION_KEY } from "../constants/session";
|
|
2
|
+
const hasCartSession = () => {
|
|
3
|
+
const sessionToken = localStorage.getItem(CART_SESSION_KEY);
|
|
4
|
+
return !!sessionToken;
|
|
5
|
+
};
|
|
6
|
+
const clearCartSession = () => {
|
|
7
|
+
localStorage.removeItem(CART_SESSION_KEY);
|
|
8
|
+
};
|
|
9
|
+
const setCartSession = (token) => {
|
|
10
|
+
localStorage.setItem(CART_SESSION_KEY, token);
|
|
11
|
+
};
|
|
12
|
+
const getCartSession = () => {
|
|
13
|
+
return localStorage.getItem(CART_SESSION_KEY);
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
clearCartSession,
|
|
17
|
+
getCartSession,
|
|
18
|
+
hasCartSession,
|
|
19
|
+
setCartSession
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=session.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/cart/utils/session.ts"],"sourcesContent":["import { CART_SESSION_KEY } from \"../constants/session\"\n\n// Has cart session\nexport const hasCartSession = (): boolean => {\n const sessionToken = localStorage.getItem(CART_SESSION_KEY)\n return !!sessionToken\n}\n\n// Clear cart session\nexport const clearCartSession = (): void => {\n localStorage.removeItem(CART_SESSION_KEY)\n}\n\n// Set cart session\nexport const setCartSession = (token: string): void => {\n localStorage.setItem(CART_SESSION_KEY, token)\n}\n\n// Get cart session\nexport const getCartSession = (): string | null => {\n return localStorage.getItem(CART_SESSION_KEY)\n}\n"],"mappings":"AAAA,SAAS,wBAAwB;AAG1B,MAAM,iBAAiB,MAAe;AAC3C,QAAM,eAAe,aAAa,QAAQ,gBAAgB;AAC1D,SAAO,CAAC,CAAC;AACX;AAGO,MAAM,mBAAmB,MAAY;AAC1C,eAAa,WAAW,gBAAgB;AAC1C;AAGO,MAAM,iBAAiB,CAAC,UAAwB;AACrD,eAAa,QAAQ,kBAAkB,KAAK;AAC9C;AAGO,MAAM,iBAAiB,MAAqB;AACjD,SAAO,aAAa,QAAQ,gBAAgB;AAC9C;","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const registerStoryblokBridge = ({
|
|
2
|
+
onInput,
|
|
3
|
+
resolve_relations
|
|
4
|
+
}) => {
|
|
5
|
+
window.addEventListener("message", (event) => {
|
|
6
|
+
if (!event.data) return;
|
|
7
|
+
const { action, story } = event.data;
|
|
8
|
+
if (action && story && (action === "input" || action === "published" || action === "change" || action === "enterEditmode")) {
|
|
9
|
+
onInput(story);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
const win = window;
|
|
13
|
+
if (win.StoryblokBridge) {
|
|
14
|
+
new win.StoryblokBridge({
|
|
15
|
+
preventClicks: true,
|
|
16
|
+
resolveRelations: resolve_relations?.split(",") ?? [],
|
|
17
|
+
resolveLinks: "story"
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
registerStoryblokBridge
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=registerStoryblokBridge.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/client/cms/storyblok/preview/registerStoryblokBridge.ts"],"sourcesContent":["export const registerStoryblokBridge = ({\n onInput,\n resolve_relations,\n}: {\n onInput: (story: any) => void;\n resolve_relations?: string;\n}) => {\n // Listen directly to postMessage events from Storyblok editor\n window.addEventListener(\"message\", (event) => {\n if (!event.data) return;\n\n const { action, story } = event.data;\n\n if (\n action &&\n story &&\n (action === \"input\" ||\n action === \"published\" ||\n action === \"change\" ||\n action === \"enterEditmode\")\n ) {\n onInput(story);\n }\n });\n\n // Initialize StoryblokBridge for click prevention\n const win = window as any;\n if (win.StoryblokBridge) {\n new win.StoryblokBridge({\n preventClicks: true,\n resolveRelations: resolve_relations?.split(\",\") ?? [],\n resolveLinks: \"story\",\n });\n }\n};\n"],"mappings":"AAAO,MAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AACF,MAGM;AAEJ,SAAO,iBAAiB,WAAW,CAAC,UAAU;AAC5C,QAAI,CAAC,MAAM,KAAM;AAEjB,UAAM,EAAE,QAAQ,MAAM,IAAI,MAAM;AAEhC,QACE,UACA,UACC,WAAW,WACV,WAAW,eACX,WAAW,YACX,WAAW,kBACb;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EACF,CAAC;AAGD,QAAM,MAAM;AACZ,MAAI,IAAI,iBAAiB;AACvB,QAAI,IAAI,gBAAgB;AAAA,MACtB,eAAe;AAAA,MACf,kBAAkB,mBAAmB,MAAM,GAAG,KAAK,CAAC;AAAA,MACpD,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface StoryblokStoryData {
|
|
4
|
+
lang?: string;
|
|
5
|
+
full_slug: string;
|
|
6
|
+
localized_paths?: {
|
|
7
|
+
lang: string;
|
|
8
|
+
path: string;
|
|
9
|
+
}[];
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
declare function previewUpdateAction({ story, pathToRevalidate, }: {
|
|
13
|
+
story: StoryblokStoryData;
|
|
14
|
+
pathToRevalidate?: string;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
interface StoryblokPreviewSyncerProps {
|
|
17
|
+
pathToRevalidate: string;
|
|
18
|
+
resolve_relations?: string;
|
|
19
|
+
}
|
|
20
|
+
declare function StoryblokPreviewSyncer({ pathToRevalidate, resolve_relations, }: StoryblokPreviewSyncerProps): react_jsx_runtime.JSX.Element;
|
|
21
|
+
|
|
22
|
+
export { StoryblokPreviewSyncer, previewUpdateAction };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
|
+
import Script from "next/script";
|
|
5
|
+
import { registerStoryblokBridge } from "./registerStoryblokBridge";
|
|
6
|
+
import { revalidatePath } from "next/cache";
|
|
7
|
+
async function previewUpdateAction({
|
|
8
|
+
story,
|
|
9
|
+
pathToRevalidate
|
|
10
|
+
}) {
|
|
11
|
+
if (!story) return;
|
|
12
|
+
try {
|
|
13
|
+
const lang = story?.lang;
|
|
14
|
+
let slug = story.full_slug;
|
|
15
|
+
if (lang !== "") {
|
|
16
|
+
const localizedPath = story?.localized_paths?.find(
|
|
17
|
+
(path) => path.lang === lang
|
|
18
|
+
)?.path;
|
|
19
|
+
if (localizedPath) {
|
|
20
|
+
slug = localizedPath;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (slug.endsWith("/")) {
|
|
24
|
+
slug = slug.slice(0, -1);
|
|
25
|
+
}
|
|
26
|
+
global.storyblokCache.set(slug, JSON.stringify(story));
|
|
27
|
+
if (pathToRevalidate) {
|
|
28
|
+
revalidatePath(pathToRevalidate);
|
|
29
|
+
}
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error("Preview update failed:", error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function StoryblokPreviewSyncer({
|
|
35
|
+
pathToRevalidate,
|
|
36
|
+
resolve_relations = ""
|
|
37
|
+
}) {
|
|
38
|
+
const [isScriptLoaded, setIsScriptLoaded] = useState(false);
|
|
39
|
+
const isInitialized = useRef(false);
|
|
40
|
+
const handleInput = useCallback(
|
|
41
|
+
(story) => {
|
|
42
|
+
previewUpdateAction({ story, pathToRevalidate });
|
|
43
|
+
},
|
|
44
|
+
[pathToRevalidate]
|
|
45
|
+
);
|
|
46
|
+
const initBridge = useCallback(() => {
|
|
47
|
+
if (isInitialized.current) return false;
|
|
48
|
+
const StoryblokBridge = window.StoryblokBridge;
|
|
49
|
+
if (!StoryblokBridge) return false;
|
|
50
|
+
isInitialized.current = true;
|
|
51
|
+
registerStoryblokBridge({
|
|
52
|
+
onInput: handleInput,
|
|
53
|
+
resolve_relations
|
|
54
|
+
});
|
|
55
|
+
return true;
|
|
56
|
+
}, [handleInput, resolve_relations]);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
initBridge();
|
|
59
|
+
}, [initBridge]);
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
if (isScriptLoaded) {
|
|
62
|
+
initBridge();
|
|
63
|
+
}
|
|
64
|
+
}, [isScriptLoaded, initBridge]);
|
|
65
|
+
return /* @__PURE__ */ jsx(
|
|
66
|
+
Script,
|
|
67
|
+
{
|
|
68
|
+
src: "//app.storyblok.com/f/storyblok-v2-latest.js",
|
|
69
|
+
strategy: "afterInteractive",
|
|
70
|
+
onLoad: () => setIsScriptLoaded(true),
|
|
71
|
+
onReady: () => setIsScriptLoaded(true)
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
StoryblokPreviewSyncer,
|
|
77
|
+
previewUpdateAction
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=storyblok-preview-syncer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/client/cms/storyblok/preview/storyblok-preview-syncer.tsx"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport Script from \"next/script\"\n\nimport { registerStoryblokBridge } from \"./registerStoryblokBridge\"\nimport { revalidatePath } from \"next/cache\"\n\ninterface StoryblokStoryData {\n lang?: string\n full_slug: string\n localized_paths?: { lang: string; path: string }[]\n [key: string]: unknown\n}\n\ninterface Global {\n storyblokCache: Map<string, string>\n}\n\ndeclare const global: Global\n\nexport async function previewUpdateAction({\n story,\n pathToRevalidate,\n}: {\n story: StoryblokStoryData\n pathToRevalidate?: string\n}) {\n if (!story) return\n\n try {\n const lang = story?.lang\n let slug = story.full_slug\n\n if (lang !== \"\") {\n const localizedPath = story?.localized_paths?.find(\n (path: { lang: string }) => path.lang === lang\n )?.path\n if (localizedPath) {\n slug = localizedPath\n }\n }\n\n if (slug.endsWith(\"/\")) {\n slug = slug.slice(0, -1)\n }\n\n global.storyblokCache.set(slug, JSON.stringify(story))\n\n if (pathToRevalidate) {\n revalidatePath(pathToRevalidate)\n }\n } catch (error) {\n console.error(\"Preview update failed:\", error)\n }\n}\n\ninterface StoryblokPreviewSyncerProps {\n pathToRevalidate: string\n resolve_relations?: string\n}\n\nexport function StoryblokPreviewSyncer({\n pathToRevalidate,\n resolve_relations = \"\",\n}: StoryblokPreviewSyncerProps) {\n const [isScriptLoaded, setIsScriptLoaded] = useState(false)\n const isInitialized = useRef(false)\n\n const handleInput = useCallback(\n (story: StoryblokStoryData) => {\n previewUpdateAction({ story, pathToRevalidate })\n },\n [pathToRevalidate]\n )\n\n const initBridge = useCallback(() => {\n if (isInitialized.current) return false\n\n const StoryblokBridge = (window as typeof window & { StoryblokBridge?: unknown })\n .StoryblokBridge\n\n if (!StoryblokBridge) return false\n\n isInitialized.current = true\n\n registerStoryblokBridge({\n onInput: handleInput,\n resolve_relations,\n })\n\n return true\n }, [handleInput, resolve_relations])\n\n useEffect(() => {\n initBridge()\n }, [initBridge])\n\n useEffect(() => {\n if (isScriptLoaded) {\n initBridge()\n }\n }, [isScriptLoaded, initBridge])\n\n return (\n <Script\n src=\"//app.storyblok.com/f/storyblok-v2-latest.js\"\n strategy=\"afterInteractive\"\n onLoad={() => setIsScriptLoaded(true)}\n onReady={() => setIsScriptLoaded(true)}\n />\n )\n}\n"],"mappings":";AA0GI;AAxGJ,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AAEzD,OAAO,YAAY;AAEnB,SAAS,+BAA+B;AACxC,SAAS,sBAAsB;AAe/B,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AACF,GAGG;AACD,MAAI,CAAC,MAAO;AAEZ,MAAI;AACF,UAAM,OAAO,OAAO;AACpB,QAAI,OAAO,MAAM;AAEjB,QAAI,SAAS,IAAI;AACf,YAAM,gBAAgB,OAAO,iBAAiB;AAAA,QAC5C,CAAC,SAA2B,KAAK,SAAS;AAAA,MAC5C,GAAG;AACH,UAAI,eAAe;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,GAAG,GAAG;AACtB,aAAO,KAAK,MAAM,GAAG,EAAE;AAAA,IACzB;AAEA,WAAO,eAAe,IAAI,MAAM,KAAK,UAAU,KAAK,CAAC;AAErD,QAAI,kBAAkB;AACpB,qBAAe,gBAAgB;AAAA,IACjC;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,0BAA0B,KAAK;AAAA,EAC/C;AACF;AAOO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA,oBAAoB;AACtB,GAAgC;AAC9B,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D,QAAM,gBAAgB,OAAO,KAAK;AAElC,QAAM,cAAc;AAAA,IAClB,CAAC,UAA8B;AAC7B,0BAAoB,EAAE,OAAO,iBAAiB,CAAC;AAAA,IACjD;AAAA,IACA,CAAC,gBAAgB;AAAA,EACnB;AAEA,QAAM,aAAa,YAAY,MAAM;AACnC,QAAI,cAAc,QAAS,QAAO;AAElC,UAAM,kBAAmB,OACtB;AAEH,QAAI,CAAC,gBAAiB,QAAO;AAE7B,kBAAc,UAAU;AAExB,4BAAwB;AAAA,MACtB,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,aAAa,iBAAiB,CAAC;AAEnC,YAAU,MAAM;AACd,eAAW;AAAA,EACb,GAAG,CAAC,UAAU,CAAC;AAEf,YAAU,MAAM;AACd,QAAI,gBAAgB;AAClB,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,gBAAgB,UAAU,CAAC;AAE/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,UAAS;AAAA,MACT,QAAQ,MAAM,kBAAkB,IAAI;AAAA,MACpC,SAAS,MAAM,kBAAkB,IAAI;AAAA;AAAA,EACvC;AAEJ;","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { cookies } from "next/headers";
|
|
2
|
+
import { customerClient } from "../../user/clients/enad";
|
|
3
|
+
import { userCookieService } from "../../user/utils/userCookieService";
|
|
4
|
+
async function withAuth(action) {
|
|
5
|
+
const cookieStore = await cookies();
|
|
6
|
+
const token = cookieStore.get("access_token");
|
|
7
|
+
const refreshToken = cookieStore.get("refresh_token");
|
|
8
|
+
if (!token && !refreshToken) {
|
|
9
|
+
await userCookieService.clear();
|
|
10
|
+
throw new Error("Not authenticated");
|
|
11
|
+
}
|
|
12
|
+
if (!token && refreshToken) {
|
|
13
|
+
const [res, error] = await customerClient.user.refreshAccessToken(refreshToken.value);
|
|
14
|
+
if (error) {
|
|
15
|
+
console.error("Refresh token error:", error);
|
|
16
|
+
throw new Error("Failed to refresh token");
|
|
17
|
+
}
|
|
18
|
+
await userCookieService.setTokens(res.access_token, res.refresh_token);
|
|
19
|
+
}
|
|
20
|
+
return action();
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
withAuth
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=withAuth.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/global/auth/withAuth.ts"],"sourcesContent":["import { cookies } from \"next/headers\"\n\nimport { customerClient } from \"../../user/clients/enad\"\nimport { userCookieService } from \"../../user/utils/userCookieService\"\n/**\n * Generic wrapper for any server action to check auth and refresh token on demand.\n **/\nexport async function withAuth<T>(action: () => Promise<T>): Promise<T> {\n const cookieStore = await cookies()\n const token = cookieStore.get(\"access_token\")\n const refreshToken = cookieStore.get(\"refresh_token\")\n\n if (!token && !refreshToken) {\n await userCookieService.clear()\n throw new Error(\"Not authenticated\")\n }\n\n if (!token && refreshToken) {\n const [res, error] = await customerClient.user.refreshAccessToken(refreshToken.value)\n if (error) {\n console.error(\"Refresh token error:\", error)\n throw new Error(\"Failed to refresh token\")\n }\n\n await userCookieService.setTokens(res.access_token, res.refresh_token)\n }\n\n return action()\n}\n"],"mappings":"AAAA,SAAS,eAAe;AAExB,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAIlC,eAAsB,SAAY,QAAsC;AACtE,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,QAAQ,YAAY,IAAI,cAAc;AAC5C,QAAM,eAAe,YAAY,IAAI,eAAe;AAEpD,MAAI,CAAC,SAAS,CAAC,cAAc;AAC3B,UAAM,kBAAkB,MAAM;AAC9B,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,MAAI,CAAC,SAAS,cAAc;AAC1B,UAAM,CAAC,KAAK,KAAK,IAAI,MAAM,eAAe,KAAK,mBAAmB,aAAa,KAAK;AACpF,QAAI,OAAO;AACT,cAAQ,MAAM,wBAAwB,KAAK;AAC3C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAEA,UAAM,kBAAkB,UAAU,IAAI,cAAc,IAAI,aAAa;AAAA,EACvE;AAEA,SAAO,OAAO;AAChB;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface EnadServerConfig {
|
|
2
|
+
userApiKey: string;
|
|
3
|
+
}
|
|
4
|
+
interface EnadClientConfig {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
appId: string;
|
|
7
|
+
groupId: string;
|
|
8
|
+
defaultLocale?: string;
|
|
9
|
+
defaultMarket?: string;
|
|
10
|
+
}
|
|
11
|
+
interface EnadConfig {
|
|
12
|
+
server: EnadServerConfig;
|
|
13
|
+
client: EnadClientConfig;
|
|
14
|
+
}
|
|
15
|
+
declare const enadConfig: EnadConfig;
|
|
16
|
+
|
|
17
|
+
export { enadConfig };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const enadConfig = {
|
|
2
|
+
server: {
|
|
3
|
+
/**
|
|
4
|
+
* User API Key.
|
|
5
|
+
*/
|
|
6
|
+
userApiKey: process.env.ENAD_USER_API_KEY || ""
|
|
7
|
+
},
|
|
8
|
+
client: {
|
|
9
|
+
/**
|
|
10
|
+
* Shopper API key.
|
|
11
|
+
*/
|
|
12
|
+
apiKey: process.env.NEXT_PUBLIC_ENAD_API_KEY || "",
|
|
13
|
+
/**
|
|
14
|
+
* Application ID.
|
|
15
|
+
*/
|
|
16
|
+
appId: process.env.NEXT_PUBLIC_ENAD_APP_ID || "",
|
|
17
|
+
/**
|
|
18
|
+
* Group ID.
|
|
19
|
+
*/
|
|
20
|
+
groupId: process.env.NEXT_PUBLIC_ENAD_GROUP_ID || "",
|
|
21
|
+
/**
|
|
22
|
+
* Default locale for the client.
|
|
23
|
+
*/
|
|
24
|
+
defaultLocale: process.env.NEXT_PUBLIC_ENAD_DEFAULT_LOCALE || "en",
|
|
25
|
+
/**
|
|
26
|
+
* Default market for the client.
|
|
27
|
+
*/
|
|
28
|
+
defaultMarket: process.env.NEXT_PUBLIC_ENAD_DEFAULT_MARKET || "us"
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
export {
|
|
32
|
+
enadConfig
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/global/config/index.ts"],"sourcesContent":["interface EnadServerConfig {\n userApiKey: string\n}\n\ninterface EnadClientConfig {\n apiKey: string\n appId: string\n groupId: string\n defaultLocale?: string\n defaultMarket?: string\n}\n\ninterface EnadConfig {\n server: EnadServerConfig\n client: EnadClientConfig\n}\n\nexport const enadConfig: EnadConfig = {\n server: {\n /**\n * User API Key.\n */\n userApiKey: process.env.ENAD_USER_API_KEY || \"\",\n },\n\n client: {\n /**\n * Shopper API key.\n */\n apiKey: process.env.NEXT_PUBLIC_ENAD_API_KEY || \"\",\n /**\n * Application ID.\n */\n appId: process.env.NEXT_PUBLIC_ENAD_APP_ID || \"\",\n /**\n * Group ID.\n */\n groupId: process.env.NEXT_PUBLIC_ENAD_GROUP_ID || \"\",\n /**\n * Default locale for the client.\n */\n defaultLocale: process.env.NEXT_PUBLIC_ENAD_DEFAULT_LOCALE || \"en\",\n /**\n * Default market for the client.\n */\n defaultMarket: process.env.NEXT_PUBLIC_ENAD_DEFAULT_MARKET || \"us\",\n },\n}\n"],"mappings":"AAiBO,MAAM,aAAyB;AAAA,EACpC,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIN,YAAY,QAAQ,IAAI,qBAAqB;AAAA,EAC/C;AAAA,EAEA,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIN,QAAQ,QAAQ,IAAI,4BAA4B;AAAA;AAAA;AAAA;AAAA,IAIhD,OAAO,QAAQ,IAAI,2BAA2B;AAAA;AAAA;AAAA;AAAA,IAI9C,SAAS,QAAQ,IAAI,6BAA6B;AAAA;AAAA;AAAA;AAAA,IAIlD,eAAe,QAAQ,IAAI,mCAAmC;AAAA;AAAA;AAAA;AAAA,IAI9D,eAAe,QAAQ,IAAI,mCAAmC;AAAA,EAChE;AACF;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare const CACHE_TAGS: {
|
|
2
|
+
collections: string;
|
|
3
|
+
products: string;
|
|
4
|
+
cart: string;
|
|
5
|
+
checkout: string;
|
|
6
|
+
wishlist: string;
|
|
7
|
+
stock: string;
|
|
8
|
+
price: string;
|
|
9
|
+
watchlist: string;
|
|
10
|
+
qliro: string;
|
|
11
|
+
myOrders: string;
|
|
12
|
+
settings: string;
|
|
13
|
+
signupStatus: string;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { CACHE_TAGS };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const CACHE_TAGS = {
|
|
2
|
+
collections: "collections",
|
|
3
|
+
products: "products",
|
|
4
|
+
cart: "cart",
|
|
5
|
+
checkout: "checkout",
|
|
6
|
+
wishlist: "wishlist",
|
|
7
|
+
stock: "stock",
|
|
8
|
+
price: "price",
|
|
9
|
+
watchlist: "watchlist",
|
|
10
|
+
qliro: "qliro",
|
|
11
|
+
myOrders: "my-orders",
|
|
12
|
+
settings: "settings",
|
|
13
|
+
signupStatus: "signup-status"
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
CACHE_TAGS
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=tags.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/global/constants/tags.ts"],"sourcesContent":["export const CACHE_TAGS = {\n collections: \"collections\",\n products: \"products\",\n cart: \"cart\",\n checkout: \"checkout\",\n wishlist: \"wishlist\",\n stock: \"stock\",\n price: \"price\",\n watchlist: \"watchlist\",\n qliro: \"qliro\",\n myOrders: \"my-orders\",\n settings: \"settings\",\n signupStatus: \"signup-status\",\n}\n"],"mappings":"AAAO,MAAM,aAAa;AAAA,EACxB,aAAa;AAAA,EACb,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAChB;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { BrinkConfig } from '../../cart/contexts/cart.mjs';
|
|
3
|
+
import 'react';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* EnadProviderProps defines the properties for the EnadProvider component.
|
|
7
|
+
*/
|
|
8
|
+
interface EnadProviderProps {
|
|
9
|
+
/**
|
|
10
|
+
* Children components to be wrapped by the provider.
|
|
11
|
+
*/
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for the cart context.
|
|
15
|
+
*/
|
|
16
|
+
brink: BrinkConfig;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* EnadProvider component that sets up all necessary context providers for the Enad React SDK.
|
|
20
|
+
*/
|
|
21
|
+
declare function EnadProvider({ children, brink }: EnadProviderProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
|
|
23
|
+
export { EnadProvider, type EnadProviderProps };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
3
|
+
import { CartProvider } from "../../cart/contexts/cart";
|
|
4
|
+
const queryClient = new QueryClient();
|
|
5
|
+
function EnadProvider({ children, brink }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(CartProvider, { ...brink, children }) });
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
EnadProvider
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=enad-provider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/global/providers/enad-provider.tsx"],"sourcesContent":["import { QueryClient, QueryClientProvider } from \"@tanstack/react-query\"\nimport { BrinkConfig, CartProvider } from \"../../cart/contexts/cart\"\n\n/**\n * EnadProviderProps defines the properties for the EnadProvider component.\n */\nexport interface EnadProviderProps {\n /**\n * Children components to be wrapped by the provider.\n */\n children: React.ReactNode\n /**\n * Configuration for the cart context.\n */\n brink: BrinkConfig\n}\n\nconst queryClient = new QueryClient()\n\n/**\n * EnadProvider component that sets up all necessary context providers for the Enad React SDK.\n */\nexport function EnadProvider({ children, brink }: EnadProviderProps) {\n return (\n <QueryClientProvider client={queryClient}>\n <CartProvider {...brink}>{children}</CartProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":"AAyBM;AAzBN,SAAS,aAAa,2BAA2B;AACjD,SAAsB,oBAAoB;AAgB1C,MAAM,cAAc,IAAI,YAAY;AAK7B,SAAS,aAAa,EAAE,UAAU,MAAM,GAAsB;AACnE,SACE,oBAAC,uBAAoB,QAAQ,aAC3B,8BAAC,gBAAc,GAAG,OAAQ,UAAS,GACrC;AAEJ;","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { shopperClient } from "../../user/clients/enad";
|
|
3
|
+
const searchAction = async (query, filters) => {
|
|
4
|
+
if (!query) return [];
|
|
5
|
+
try {
|
|
6
|
+
const [data, error] = await shopperClient.products.search(query, filters);
|
|
7
|
+
if (error) throw error;
|
|
8
|
+
console.log("res", data);
|
|
9
|
+
return data;
|
|
10
|
+
} catch (err) {
|
|
11
|
+
console.error("SearchAction error:", err);
|
|
12
|
+
throw err;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
searchAction
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=searchAction.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/search/actions/searchAction.ts"],"sourcesContent":["\"use server\"\n\nimport { shopperClient } from \"../../user/clients/enad\"\n\nexport const searchAction = async (query: string, filters: Record<string, any>) => {\n if (!query) return []\n\n try {\n const [data, error] = await shopperClient.products.search(query, filters)\n\n if (error) throw error\n\n console.log(\"res\", data)\n return data\n } catch (err) {\n console.error(\"SearchAction error:\", err)\n throw err\n }\n}\n"],"mappings":";AAEA,SAAS,qBAAqB;AAEvB,MAAM,eAAe,OAAO,OAAe,YAAiC;AACjF,MAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,MAAI;AACF,UAAM,CAAC,MAAM,KAAK,IAAI,MAAM,cAAc,SAAS,OAAO,OAAO,OAAO;AAExE,QAAI,MAAO,OAAM;AAEjB,YAAQ,IAAI,OAAO,IAAI;AACvB,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,YAAQ,MAAM,uBAAuB,GAAG;AACxC,UAAM;AAAA,EACR;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=search-bar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as _enadhq_enad_ts_sdk from '@enadhq/enad-ts-sdk';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Search
|
|
6
|
+
*/
|
|
7
|
+
declare const useSearch: () => {
|
|
8
|
+
query: string;
|
|
9
|
+
setQuery: React.Dispatch<React.SetStateAction<string>>;
|
|
10
|
+
filters: Record<string, any>;
|
|
11
|
+
setFilters: React.Dispatch<React.SetStateAction<Record<string, any>>>;
|
|
12
|
+
result: _enadhq_enad_ts_sdk.SearchResponse<_enadhq_enad_ts_sdk.EnadSearchProduct> | undefined;
|
|
13
|
+
loading: boolean;
|
|
14
|
+
error: Error | null;
|
|
15
|
+
performSearch: () => void;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { useSearch };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useQuery } from "@tanstack/react-query";
|
|
4
|
+
import { searchAction } from "../actions/searchAction";
|
|
5
|
+
const useSearch = () => {
|
|
6
|
+
const [query, setQuery] = useState("");
|
|
7
|
+
const [filters, setFilters] = useState({});
|
|
8
|
+
const [activeQuery, setActiveQuery] = useState("");
|
|
9
|
+
const { data, isLoading, isError, error, refetch } = useQuery({
|
|
10
|
+
queryKey: ["products-search", activeQuery, filters],
|
|
11
|
+
queryFn: async () => {
|
|
12
|
+
return searchAction(activeQuery, filters);
|
|
13
|
+
},
|
|
14
|
+
enabled: !!activeQuery,
|
|
15
|
+
// run only when performSearch is called
|
|
16
|
+
staleTime: 1e3 * 30
|
|
17
|
+
});
|
|
18
|
+
const performSearch = () => {
|
|
19
|
+
if (query.trim() === "") return;
|
|
20
|
+
setActiveQuery(query);
|
|
21
|
+
refetch();
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
query,
|
|
25
|
+
setQuery,
|
|
26
|
+
filters,
|
|
27
|
+
setFilters,
|
|
28
|
+
result: Array.isArray(data) ? void 0 : data,
|
|
29
|
+
loading: isLoading,
|
|
30
|
+
error: isError ? error : null,
|
|
31
|
+
performSearch
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
useSearch
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=useSearch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/search/hooks/useSearch.ts"],"sourcesContent":["\"use client\"\n\nimport { useState } from \"react\"\nimport { useQuery } from \"@tanstack/react-query\"\nimport { searchAction } from \"../actions/searchAction\"\n\n/**\n * Search\n */\nexport const useSearch = () => {\n const [query, setQuery] = useState(\"\")\n const [filters, setFilters] = useState<Record<string, any>>({})\n const [activeQuery, setActiveQuery] = useState<string>(\"\") // query actually used for search\n\n const { data, isLoading, isError, error, refetch } = useQuery({\n queryKey: [\"products-search\", activeQuery, filters],\n queryFn: async () => {\n return searchAction(activeQuery, filters)\n },\n enabled: !!activeQuery, // run only when performSearch is called\n staleTime: 1000 * 30,\n })\n\n /**\n * Manually trigger a search using the current `query` and `filters`.\n */\n const performSearch = () => {\n // Only trigger if query has content\n if (query.trim() === \"\") return\n setActiveQuery(query)\n refetch()\n }\n\n return {\n query,\n setQuery,\n filters,\n setFilters,\n result: Array.isArray(data) ? undefined : data,\n loading: isLoading,\n error: isError ? error : null,\n performSearch,\n }\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAKtB,MAAM,YAAY,MAAM;AAC7B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,SAAS,UAAU,IAAI,SAA8B,CAAC,CAAC;AAC9D,QAAM,CAAC,aAAa,cAAc,IAAI,SAAiB,EAAE;AAEzD,QAAM,EAAE,MAAM,WAAW,SAAS,OAAO,QAAQ,IAAI,SAAS;AAAA,IAC5D,UAAU,CAAC,mBAAmB,aAAa,OAAO;AAAA,IAClD,SAAS,YAAY;AACnB,aAAO,aAAa,aAAa,OAAO;AAAA,IAC1C;AAAA,IACA,SAAS,CAAC,CAAC;AAAA;AAAA,IACX,WAAW,MAAO;AAAA,EACpB,CAAC;AAKD,QAAM,gBAAgB,MAAM;AAE1B,QAAI,MAAM,KAAK,MAAM,GAAI;AACzB,mBAAe,KAAK;AACpB,YAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,MAAM,QAAQ,IAAI,IAAI,SAAY;AAAA,IAC1C,SAAS;AAAA,IACT,OAAO,UAAU,QAAQ;AAAA,IACzB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface Options {
|
|
2
|
+
redirectPath?: string;
|
|
3
|
+
}
|
|
4
|
+
declare const createPasswordResetLinkAction: (formData: FormData, options: Options) => Promise<{
|
|
5
|
+
errors: {
|
|
6
|
+
email?: string[] | undefined;
|
|
7
|
+
};
|
|
8
|
+
} | {
|
|
9
|
+
errors: {
|
|
10
|
+
general: string[];
|
|
11
|
+
};
|
|
12
|
+
}>;
|
|
13
|
+
|
|
14
|
+
export { createPasswordResetLinkAction };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { customerClient } from "../clients/enad";
|
|
3
|
+
import { redirect } from "next/navigation";
|
|
4
|
+
import * as z from "zod";
|
|
5
|
+
const credentialsSchema = z.object({
|
|
6
|
+
email: z.string().email({ message: "Invalid email address" })
|
|
7
|
+
});
|
|
8
|
+
const createPasswordResetLinkAction = async (formData, options) => {
|
|
9
|
+
const email = formData.get("email")?.toString() ?? "";
|
|
10
|
+
const result = credentialsSchema.safeParse({ email });
|
|
11
|
+
if (!result.success) {
|
|
12
|
+
console.error("Validation errors:", result.error.flatten().fieldErrors);
|
|
13
|
+
return {
|
|
14
|
+
errors: result.error.flatten().fieldErrors
|
|
15
|
+
// per-field errors
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const [_, error] = await customerClient.user.createPasswordResetLink(email);
|
|
19
|
+
if (error) {
|
|
20
|
+
console.error("create password reset link error:", error);
|
|
21
|
+
return {
|
|
22
|
+
errors: { general: ["Failed to reset password. Please try again later."] }
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
redirect(options.redirectPath ?? "/");
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
createPasswordResetLinkAction
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=createResetPasswordLinkAction.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/user/actions/createResetPasswordLinkAction.ts"],"sourcesContent":["\"use server\"\n\nimport { customerClient } from \"../clients/enad\"\nimport { redirect } from \"next/navigation\"\n\nimport * as z from \"zod\"\n\n// Define validation schema\nconst credentialsSchema = z.object({\n email: z.string().email({ message: \"Invalid email address\" }),\n})\n\ninterface Options {\n redirectPath?: string\n}\n\nexport const createPasswordResetLinkAction = async (formData: FormData, options: Options) => {\n // Extract fields\n const email = formData.get(\"email\")?.toString() ?? \"\"\n\n // Validate\n const result = credentialsSchema.safeParse({ email })\n\n if (!result.success) {\n console.error(\"Validation errors:\", result.error.flatten().fieldErrors)\n return {\n errors: result.error.flatten().fieldErrors, // per-field errors\n }\n }\n\n // Call API\n const [_, error] = await customerClient.user.createPasswordResetLink(email)\n\n if (error) {\n console.error(\"create password reset link error:\", error)\n return {\n errors: { general: [\"Failed to reset password. Please try again later.\"] },\n }\n }\n\n // Successful login → redirect to home\n redirect(options.redirectPath ?? \"/\")\n}\n"],"mappings":";AAEA,SAAS,sBAAsB;AAC/B,SAAS,gBAAgB;AAEzB,YAAY,OAAO;AAGnB,MAAM,oBAAoB,EAAE,OAAO;AAAA,EACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,wBAAwB,CAAC;AAC9D,CAAC;AAMM,MAAM,gCAAgC,OAAO,UAAoB,YAAqB;AAE3F,QAAM,QAAQ,SAAS,IAAI,OAAO,GAAG,SAAS,KAAK;AAGnD,QAAM,SAAS,kBAAkB,UAAU,EAAE,MAAM,CAAC;AAEpD,MAAI,CAAC,OAAO,SAAS;AACnB,YAAQ,MAAM,sBAAsB,OAAO,MAAM,QAAQ,EAAE,WAAW;AACtE,WAAO;AAAA,MACL,QAAQ,OAAO,MAAM,QAAQ,EAAE;AAAA;AAAA,IACjC;AAAA,EACF;AAGA,QAAM,CAAC,GAAG,KAAK,IAAI,MAAM,eAAe,KAAK,wBAAwB,KAAK;AAE1E,MAAI,OAAO;AACT,YAAQ,MAAM,qCAAqC,KAAK;AACxD,WAAO;AAAA,MACL,QAAQ,EAAE,SAAS,CAAC,mDAAmD,EAAE;AAAA,IAC3E;AAAA,EACF;AAGA,WAAS,QAAQ,gBAAgB,GAAG;AACtC;","names":[]}
|