@growupsell/react-ecommerce-core 2.0.17 → 2.0.18
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/{chunk-D24PXFD3.js → chunk-FOGKAOV4.js} +102 -98
- package/dist/chunk-FOGKAOV4.js.map +1 -0
- package/dist/index.cjs +103 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -14
- package/dist/index.d.ts +21 -14
- package/dist/index.js +1 -1
- package/dist/provider.cjs +103 -97
- package/dist/provider.cjs.map +1 -1
- package/dist/provider.d.cts +1 -1
- package/dist/provider.d.ts +1 -1
- package/dist/provider.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-D24PXFD3.js.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -95,6 +95,7 @@ declare const FilterContext: React__default.Context<{
|
|
|
95
95
|
selectedCategoryId: number[];
|
|
96
96
|
addCategoryFilterId: (id: number) => void;
|
|
97
97
|
removeCategoryFilterId: (id: number) => void;
|
|
98
|
+
replaceCategoryFilterIds: (ids: number[]) => void;
|
|
98
99
|
menuList: any[];
|
|
99
100
|
productLoading: boolean;
|
|
100
101
|
currentPage: number;
|
|
@@ -136,6 +137,7 @@ declare const useFilter: () => {
|
|
|
136
137
|
selectedCategoryId: number[];
|
|
137
138
|
addCategoryFilterId: (id: number) => void;
|
|
138
139
|
removeCategoryFilterId: (id: number) => void;
|
|
140
|
+
replaceCategoryFilterIds: (ids: number[]) => void;
|
|
139
141
|
menuList: any[];
|
|
140
142
|
productLoading: boolean;
|
|
141
143
|
currentPage: number;
|
|
@@ -278,8 +280,6 @@ declare const CustomPageConfigContext: React__default.Context<{
|
|
|
278
280
|
updateConfig: (config: any, index: number) => void;
|
|
279
281
|
removeConfig: (index: number) => void;
|
|
280
282
|
moveConfig: (fromIndex: number, toIndex: number) => void;
|
|
281
|
-
heroSliderConfigData: any[];
|
|
282
|
-
onUpdateHeroSlider: (slides: any[]) => Promise<void>;
|
|
283
283
|
loading: boolean;
|
|
284
284
|
}>;
|
|
285
285
|
declare const CustomPageConfigProvider: (props: {
|
|
@@ -293,8 +293,6 @@ declare const useCustomPageConfig: () => {
|
|
|
293
293
|
updateConfig: (config: any, index: number) => void;
|
|
294
294
|
removeConfig: (index: number) => void;
|
|
295
295
|
moveConfig: (fromIndex: number, toIndex: number) => void;
|
|
296
|
-
heroSliderConfigData: any[];
|
|
297
|
-
onUpdateHeroSlider: (slides: any[]) => Promise<void>;
|
|
298
296
|
loading: boolean;
|
|
299
297
|
};
|
|
300
298
|
|
|
@@ -397,20 +395,29 @@ declare const ModalProvider: ({ children }: {
|
|
|
397
395
|
}) => react_jsx_runtime.JSX.Element;
|
|
398
396
|
declare const useModal: () => ModalContextType;
|
|
399
397
|
|
|
400
|
-
declare const
|
|
398
|
+
declare const HERO_SECTION_SLUG = "hero_section";
|
|
399
|
+
type HeroSectionState = {
|
|
400
|
+
type: string;
|
|
401
|
+
data: any;
|
|
402
|
+
} | null;
|
|
403
|
+
/** Read a `hero_section` theme row. Empty or missing type means no hero. */
|
|
404
|
+
declare function resolveHeroSection(sectionRow: any): HeroSectionState;
|
|
405
|
+
declare const HomeConfigHeroSectionContext: React__default.Context<{
|
|
401
406
|
loading: boolean;
|
|
402
|
-
|
|
403
|
-
|
|
407
|
+
heroSection: HeroSectionState;
|
|
408
|
+
onUpdateHeroSection: (next: HeroSectionState) => Promise<void>;
|
|
404
409
|
}>;
|
|
405
|
-
declare const
|
|
410
|
+
declare const HomeConfigHeroSectionProvider: (props: {
|
|
406
411
|
children: React__default.ReactNode;
|
|
407
|
-
/**
|
|
408
|
-
|
|
412
|
+
/** `hero_section` theme row from the server. Null when the slug is missing. */
|
|
413
|
+
initialHeroSection?: any;
|
|
414
|
+
/** True after the server asked for `hero_section`, even if it is null. */
|
|
415
|
+
heroContentFetched?: boolean;
|
|
409
416
|
}) => react_jsx_runtime.JSX.Element;
|
|
410
|
-
declare const
|
|
417
|
+
declare const useHomeConfigHeroSection: () => {
|
|
411
418
|
loading: boolean;
|
|
412
|
-
|
|
413
|
-
|
|
419
|
+
heroSection: HeroSectionState;
|
|
420
|
+
onUpdateHeroSection: (next: HeroSectionState) => Promise<void>;
|
|
414
421
|
};
|
|
415
422
|
|
|
416
423
|
declare const HeaderFooterContext: React__default.Context<{
|
|
@@ -546,4 +553,4 @@ type Props = {
|
|
|
546
553
|
declare const LiveSupportWidgetProvider: React__default.FC<Props>;
|
|
547
554
|
declare const useLiveSupportWidget: () => LiveSupportWidgetContextValue;
|
|
548
555
|
|
|
549
|
-
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext,
|
|
556
|
+
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HERO_SECTION_SLUG, HeaderFooterContext, HeaderFooterProvider, type HeroSectionState, HomeConfigContext, HomeConfigHeroSectionContext, HomeConfigHeroSectionProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, type ToastSupportApi, type ToastSupportOptions, ToastSupportProvider, WishlistContext, WishlistProvider, resolveHeroSection, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSection, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist };
|
package/dist/index.d.ts
CHANGED
|
@@ -95,6 +95,7 @@ declare const FilterContext: React__default.Context<{
|
|
|
95
95
|
selectedCategoryId: number[];
|
|
96
96
|
addCategoryFilterId: (id: number) => void;
|
|
97
97
|
removeCategoryFilterId: (id: number) => void;
|
|
98
|
+
replaceCategoryFilterIds: (ids: number[]) => void;
|
|
98
99
|
menuList: any[];
|
|
99
100
|
productLoading: boolean;
|
|
100
101
|
currentPage: number;
|
|
@@ -136,6 +137,7 @@ declare const useFilter: () => {
|
|
|
136
137
|
selectedCategoryId: number[];
|
|
137
138
|
addCategoryFilterId: (id: number) => void;
|
|
138
139
|
removeCategoryFilterId: (id: number) => void;
|
|
140
|
+
replaceCategoryFilterIds: (ids: number[]) => void;
|
|
139
141
|
menuList: any[];
|
|
140
142
|
productLoading: boolean;
|
|
141
143
|
currentPage: number;
|
|
@@ -278,8 +280,6 @@ declare const CustomPageConfigContext: React__default.Context<{
|
|
|
278
280
|
updateConfig: (config: any, index: number) => void;
|
|
279
281
|
removeConfig: (index: number) => void;
|
|
280
282
|
moveConfig: (fromIndex: number, toIndex: number) => void;
|
|
281
|
-
heroSliderConfigData: any[];
|
|
282
|
-
onUpdateHeroSlider: (slides: any[]) => Promise<void>;
|
|
283
283
|
loading: boolean;
|
|
284
284
|
}>;
|
|
285
285
|
declare const CustomPageConfigProvider: (props: {
|
|
@@ -293,8 +293,6 @@ declare const useCustomPageConfig: () => {
|
|
|
293
293
|
updateConfig: (config: any, index: number) => void;
|
|
294
294
|
removeConfig: (index: number) => void;
|
|
295
295
|
moveConfig: (fromIndex: number, toIndex: number) => void;
|
|
296
|
-
heroSliderConfigData: any[];
|
|
297
|
-
onUpdateHeroSlider: (slides: any[]) => Promise<void>;
|
|
298
296
|
loading: boolean;
|
|
299
297
|
};
|
|
300
298
|
|
|
@@ -397,20 +395,29 @@ declare const ModalProvider: ({ children }: {
|
|
|
397
395
|
}) => react_jsx_runtime.JSX.Element;
|
|
398
396
|
declare const useModal: () => ModalContextType;
|
|
399
397
|
|
|
400
|
-
declare const
|
|
398
|
+
declare const HERO_SECTION_SLUG = "hero_section";
|
|
399
|
+
type HeroSectionState = {
|
|
400
|
+
type: string;
|
|
401
|
+
data: any;
|
|
402
|
+
} | null;
|
|
403
|
+
/** Read a `hero_section` theme row. Empty or missing type means no hero. */
|
|
404
|
+
declare function resolveHeroSection(sectionRow: any): HeroSectionState;
|
|
405
|
+
declare const HomeConfigHeroSectionContext: React__default.Context<{
|
|
401
406
|
loading: boolean;
|
|
402
|
-
|
|
403
|
-
|
|
407
|
+
heroSection: HeroSectionState;
|
|
408
|
+
onUpdateHeroSection: (next: HeroSectionState) => Promise<void>;
|
|
404
409
|
}>;
|
|
405
|
-
declare const
|
|
410
|
+
declare const HomeConfigHeroSectionProvider: (props: {
|
|
406
411
|
children: React__default.ReactNode;
|
|
407
|
-
/**
|
|
408
|
-
|
|
412
|
+
/** `hero_section` theme row from the server. Null when the slug is missing. */
|
|
413
|
+
initialHeroSection?: any;
|
|
414
|
+
/** True after the server asked for `hero_section`, even if it is null. */
|
|
415
|
+
heroContentFetched?: boolean;
|
|
409
416
|
}) => react_jsx_runtime.JSX.Element;
|
|
410
|
-
declare const
|
|
417
|
+
declare const useHomeConfigHeroSection: () => {
|
|
411
418
|
loading: boolean;
|
|
412
|
-
|
|
413
|
-
|
|
419
|
+
heroSection: HeroSectionState;
|
|
420
|
+
onUpdateHeroSection: (next: HeroSectionState) => Promise<void>;
|
|
414
421
|
};
|
|
415
422
|
|
|
416
423
|
declare const HeaderFooterContext: React__default.Context<{
|
|
@@ -546,4 +553,4 @@ type Props = {
|
|
|
546
553
|
declare const LiveSupportWidgetProvider: React__default.FC<Props>;
|
|
547
554
|
declare const useLiveSupportWidget: () => LiveSupportWidgetContextValue;
|
|
548
555
|
|
|
549
|
-
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext,
|
|
556
|
+
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HERO_SECTION_SLUG, HeaderFooterContext, HeaderFooterProvider, type HeroSectionState, HomeConfigContext, HomeConfigHeroSectionContext, HomeConfigHeroSectionProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, type ToastSupportApi, type ToastSupportOptions, ToastSupportProvider, WishlistContext, WishlistProvider, resolveHeroSection, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSection, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext,
|
|
1
|
+
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HERO_SECTION_SLUG, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext, HomeConfigHeroSectionContext, HomeConfigHeroSectionProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, ToastSupportProvider, WishlistContext, WishlistProvider, resolveHeroSection, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSection, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist } from './chunk-FOGKAOV4.js';
|
|
2
2
|
export { BusinessConfigContext } from './chunk-SP77KIKJ.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/provider.cjs
CHANGED
|
@@ -561,10 +561,18 @@ var CartProvider = (props) => {
|
|
|
561
561
|
);
|
|
562
562
|
};
|
|
563
563
|
var useCart = () => react.useContext(CartContext);
|
|
564
|
+
var getRouteCategoryId = () => {
|
|
565
|
+
if (typeof window === "undefined") return null;
|
|
566
|
+
const match = window.location.pathname.match(/\/products\/[^/]+\/(\d+)\/?$/);
|
|
567
|
+
if (!match) return null;
|
|
568
|
+
const id = Number(match[1]);
|
|
569
|
+
return Number.isFinite(id) ? id : null;
|
|
570
|
+
};
|
|
564
571
|
var FilterContext = react.createContext({
|
|
565
572
|
selectedCategoryId: [],
|
|
566
573
|
addCategoryFilterId: () => null,
|
|
567
574
|
removeCategoryFilterId: () => null,
|
|
575
|
+
replaceCategoryFilterIds: () => null,
|
|
568
576
|
menuList: [],
|
|
569
577
|
productLoading: true,
|
|
570
578
|
currentPage: 1,
|
|
@@ -621,6 +629,7 @@ var FilterProvider = (props) => {
|
|
|
621
629
|
const [limit, setLimit] = react.useState(10);
|
|
622
630
|
const [offset, setOffset] = react.useState(0);
|
|
623
631
|
const [total, setTotal] = react.useState(0);
|
|
632
|
+
const waitingForRouteCategory = react.useRef(getRouteCategoryId() != null);
|
|
624
633
|
const fetchBrandList = async () => {
|
|
625
634
|
setBrandLoading(true);
|
|
626
635
|
let body = {
|
|
@@ -644,6 +653,15 @@ var FilterProvider = (props) => {
|
|
|
644
653
|
});
|
|
645
654
|
setCurrentPage(1);
|
|
646
655
|
};
|
|
656
|
+
const replaceCategoryFilterIds = (ids) => {
|
|
657
|
+
const unique = Array.from(new Set(ids.filter((id) => Number.isFinite(id))));
|
|
658
|
+
setSelectedCategoryId(unique);
|
|
659
|
+
setCurrentPage(1);
|
|
660
|
+
setOffset(0);
|
|
661
|
+
setMenuList([]);
|
|
662
|
+
setProductLoading(true);
|
|
663
|
+
waitingForRouteCategory.current = false;
|
|
664
|
+
};
|
|
647
665
|
const categoryFilterKey = selectedCategoryId.length === 1 ? selectedCategoryId[0] : void 0;
|
|
648
666
|
react.useEffect(() => {
|
|
649
667
|
let active = true;
|
|
@@ -740,9 +758,10 @@ var FilterProvider = (props) => {
|
|
|
740
758
|
setVariantLoading(false);
|
|
741
759
|
};
|
|
742
760
|
react.useEffect(() => {
|
|
743
|
-
if (
|
|
744
|
-
|
|
745
|
-
|
|
761
|
+
if (filterConfigLoading) return;
|
|
762
|
+
if (waitingForRouteCategory.current && selectedCategoryId.length === 0) return;
|
|
763
|
+
waitingForRouteCategory.current = false;
|
|
764
|
+
fetchProductList();
|
|
746
765
|
}, [
|
|
747
766
|
selectedCategoryId,
|
|
748
767
|
currentPage,
|
|
@@ -795,6 +814,7 @@ var FilterProvider = (props) => {
|
|
|
795
814
|
setMenuList,
|
|
796
815
|
addCategoryFilterId,
|
|
797
816
|
removeCategoryFilterId,
|
|
817
|
+
replaceCategoryFilterIds,
|
|
798
818
|
menuList,
|
|
799
819
|
productLoading,
|
|
800
820
|
currentPage,
|
|
@@ -1004,6 +1024,7 @@ var HomeConfigProvider = (props) => {
|
|
|
1004
1024
|
});
|
|
1005
1025
|
const { token } = useThemeEdit();
|
|
1006
1026
|
const themeConfig = react.useContext(BusinessConfigContext);
|
|
1027
|
+
const themeId = themeConfig.theme.id;
|
|
1007
1028
|
const [themeConfigData, setThemeConfigData] = react.useState(
|
|
1008
1029
|
props.initialThemeContent ?? {}
|
|
1009
1030
|
);
|
|
@@ -1011,16 +1032,13 @@ var HomeConfigProvider = (props) => {
|
|
|
1011
1032
|
const updateRef = react.useRef(false);
|
|
1012
1033
|
const [loading, setLoading] = react.useState(!hasInitial);
|
|
1013
1034
|
const getThemeConfig = react.useCallback(async () => {
|
|
1014
|
-
if (!
|
|
1015
|
-
setLoading(
|
|
1016
|
-
} else {
|
|
1035
|
+
if (hasInitial || !themeId) {
|
|
1036
|
+
if (!themeId) setLoading(false);
|
|
1017
1037
|
return;
|
|
1018
1038
|
}
|
|
1039
|
+
setLoading(true);
|
|
1019
1040
|
try {
|
|
1020
|
-
const response = await api$1.retrieveThemeContent(
|
|
1021
|
-
themeConfig.theme.id,
|
|
1022
|
-
props.page
|
|
1023
|
-
);
|
|
1041
|
+
const response = await api$1.retrieveThemeContent(themeId, props.page);
|
|
1024
1042
|
setThemeConfigData(response);
|
|
1025
1043
|
if (response?.data && Array.isArray(response.data)) {
|
|
1026
1044
|
setSelectedConfig(
|
|
@@ -1035,7 +1053,7 @@ var HomeConfigProvider = (props) => {
|
|
|
1035
1053
|
} finally {
|
|
1036
1054
|
setLoading(false);
|
|
1037
1055
|
}
|
|
1038
|
-
}, [
|
|
1056
|
+
}, [themeId, hasInitial, props.page]);
|
|
1039
1057
|
const onUpdateThemeContent = react.useCallback(
|
|
1040
1058
|
async (configToUpdate = selectedConfig) => {
|
|
1041
1059
|
try {
|
|
@@ -1046,16 +1064,9 @@ var HomeConfigProvider = (props) => {
|
|
|
1046
1064
|
};
|
|
1047
1065
|
if (updateRef.current) return;
|
|
1048
1066
|
updateRef.current = true;
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
props.page,
|
|
1053
|
-
token
|
|
1054
|
-
);
|
|
1055
|
-
const updatedResponse = await api$1.retrieveThemeContent(
|
|
1056
|
-
themeConfig.theme.id,
|
|
1057
|
-
props.page
|
|
1058
|
-
);
|
|
1067
|
+
if (!themeId) return;
|
|
1068
|
+
await api$1.updateThemeContent(body, themeId, props.page, token);
|
|
1069
|
+
const updatedResponse = await api$1.retrieveThemeContent(themeId, props.page);
|
|
1059
1070
|
setThemeConfigData(updatedResponse);
|
|
1060
1071
|
} catch (error) {
|
|
1061
1072
|
console.error("Error updating theme content:", error);
|
|
@@ -1063,7 +1074,7 @@ var HomeConfigProvider = (props) => {
|
|
|
1063
1074
|
updateRef.current = false;
|
|
1064
1075
|
}
|
|
1065
1076
|
},
|
|
1066
|
-
[isInitialized, token,
|
|
1077
|
+
[isInitialized, token, themeId, selectedConfig]
|
|
1067
1078
|
);
|
|
1068
1079
|
const addConfig = react.useCallback(
|
|
1069
1080
|
async (config) => {
|
|
@@ -1129,73 +1140,76 @@ var HomeConfigProvider = (props) => {
|
|
|
1129
1140
|
);
|
|
1130
1141
|
};
|
|
1131
1142
|
var useHomeConfig = () => react.useContext(HomeConfigContext);
|
|
1132
|
-
var
|
|
1143
|
+
var HERO_SECTION_SLUG = "hero_section";
|
|
1144
|
+
function resolveHeroSection(sectionRow) {
|
|
1145
|
+
if (sectionRow == null) return null;
|
|
1146
|
+
const data = sectionRow.data !== void 0 ? sectionRow.data : sectionRow;
|
|
1147
|
+
if (!data || typeof data !== "object" || Array.isArray(data)) return null;
|
|
1148
|
+
if (typeof data.type !== "string" || !data.type) return null;
|
|
1149
|
+
return { type: data.type, data: data.data };
|
|
1150
|
+
}
|
|
1151
|
+
var HomeConfigHeroSectionContext = react.createContext({
|
|
1133
1152
|
loading: true,
|
|
1134
|
-
|
|
1135
|
-
|
|
1153
|
+
heroSection: null,
|
|
1154
|
+
onUpdateHeroSection: async () => void 0
|
|
1136
1155
|
});
|
|
1137
|
-
var
|
|
1138
|
-
const
|
|
1139
|
-
|
|
1140
|
-
const [heroSliderConfigData, setHeroSliderConfigData] = react.useState(
|
|
1141
|
-
() => hasInitial ? props.initialThemeContent.data : []
|
|
1156
|
+
var HomeConfigHeroSectionProvider = (props) => {
|
|
1157
|
+
const [heroSection, setHeroSection] = react.useState(
|
|
1158
|
+
() => props.heroContentFetched ? resolveHeroSection(props.initialHeroSection) : null
|
|
1142
1159
|
);
|
|
1160
|
+
const [loading, setLoading] = react.useState(!props.heroContentFetched);
|
|
1143
1161
|
const { token } = useThemeEdit();
|
|
1144
1162
|
const themeConfig = react.useContext(BusinessConfigContext);
|
|
1145
|
-
const
|
|
1146
|
-
|
|
1163
|
+
const themeId = themeConfig.theme.id;
|
|
1164
|
+
const loadHeroSection = react.useCallback(async () => {
|
|
1165
|
+
if (props.heroContentFetched || !themeId) {
|
|
1166
|
+
if (!themeId) setLoading(false);
|
|
1147
1167
|
return;
|
|
1148
1168
|
}
|
|
1149
1169
|
setLoading(true);
|
|
1150
1170
|
try {
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1171
|
+
let sectionRow = null;
|
|
1172
|
+
try {
|
|
1173
|
+
sectionRow = await api$1.retrieveThemeContent(themeId, HERO_SECTION_SLUG);
|
|
1174
|
+
} catch {
|
|
1175
|
+
sectionRow = null;
|
|
1176
|
+
}
|
|
1177
|
+
setHeroSection(resolveHeroSection(sectionRow));
|
|
1156
1178
|
} catch (error) {
|
|
1157
|
-
console.error("Error fetching hero
|
|
1179
|
+
console.error("Error fetching hero section:", error);
|
|
1158
1180
|
} finally {
|
|
1159
1181
|
setLoading(false);
|
|
1160
1182
|
}
|
|
1161
|
-
}, [
|
|
1183
|
+
}, [props.heroContentFetched, themeId]);
|
|
1162
1184
|
react.useEffect(() => {
|
|
1163
|
-
|
|
1164
|
-
}, [
|
|
1165
|
-
const
|
|
1185
|
+
loadHeroSection();
|
|
1186
|
+
}, [loadHeroSection]);
|
|
1187
|
+
const onUpdateHeroSection = async (next) => {
|
|
1166
1188
|
setLoading(true);
|
|
1167
1189
|
try {
|
|
1168
1190
|
const body = {
|
|
1169
|
-
data:
|
|
1170
|
-
slug:
|
|
1191
|
+
data: next ? { type: next.type, data: next.data } : { type: null, data: null },
|
|
1192
|
+
slug: HERO_SECTION_SLUG,
|
|
1171
1193
|
platform: typeof window !== "undefined" ? "website" : "app"
|
|
1172
1194
|
};
|
|
1173
|
-
await api$1.updateThemeContent(
|
|
1174
|
-
|
|
1175
|
-
themeConfig?.theme?.id,
|
|
1176
|
-
"hero_slider",
|
|
1177
|
-
token
|
|
1178
|
-
);
|
|
1179
|
-
const updatedResponse = await api$1.retrieveThemeContent(
|
|
1180
|
-
themeConfig.theme.id,
|
|
1181
|
-
"hero_slider"
|
|
1182
|
-
);
|
|
1183
|
-
setHeroSliderConfigData(updatedResponse.data);
|
|
1195
|
+
await api$1.updateThemeContent(body, themeId, HERO_SECTION_SLUG, token);
|
|
1196
|
+
setHeroSection(next);
|
|
1184
1197
|
} catch (error) {
|
|
1185
|
-
console.error("Error updating
|
|
1198
|
+
console.error("Error updating hero section:", error);
|
|
1199
|
+
throw error;
|
|
1186
1200
|
} finally {
|
|
1187
1201
|
setLoading(false);
|
|
1188
1202
|
}
|
|
1189
1203
|
};
|
|
1190
1204
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1191
|
-
|
|
1205
|
+
HomeConfigHeroSectionContext.Provider,
|
|
1192
1206
|
{
|
|
1193
|
-
value: { loading,
|
|
1207
|
+
value: { loading, heroSection, onUpdateHeroSection },
|
|
1194
1208
|
children: props.children
|
|
1195
1209
|
}
|
|
1196
1210
|
);
|
|
1197
1211
|
};
|
|
1198
|
-
var
|
|
1212
|
+
var useHomeConfigHeroSection = () => react.useContext(HomeConfigHeroSectionContext);
|
|
1199
1213
|
var CustomPageConfigContext = react.createContext({
|
|
1200
1214
|
selectedConfig: [],
|
|
1201
1215
|
setSelectedConfig: () => null,
|
|
@@ -1203,28 +1217,26 @@ var CustomPageConfigContext = react.createContext({
|
|
|
1203
1217
|
updateConfig: () => null,
|
|
1204
1218
|
removeConfig: () => null,
|
|
1205
1219
|
moveConfig: () => null,
|
|
1206
|
-
heroSliderConfigData: [],
|
|
1207
|
-
onUpdateHeroSlider: async () => void 0,
|
|
1208
1220
|
loading: true
|
|
1209
1221
|
});
|
|
1210
1222
|
var CustomPageConfigProvider = (props) => {
|
|
1211
1223
|
const { token } = useThemeEdit();
|
|
1212
1224
|
const [selectedConfig, setSelectedConfig] = react.useState([]);
|
|
1213
|
-
const [
|
|
1225
|
+
const [heroSection, setHeroSection] = react.useState(null);
|
|
1214
1226
|
const [loading, setLoading] = react.useState(true);
|
|
1215
1227
|
const selectedConfigRef = react.useRef([]);
|
|
1216
|
-
const
|
|
1228
|
+
const heroSectionRef = react.useRef(null);
|
|
1217
1229
|
const saveQueueRef = react.useRef(Promise.resolve());
|
|
1218
1230
|
const load = react.useCallback(async () => {
|
|
1219
1231
|
setLoading(true);
|
|
1220
1232
|
try {
|
|
1221
1233
|
const row = await api$1.getCustomPageContent(props.pageId, token);
|
|
1222
1234
|
const fromContent = api$1.splitCustomPageContent(row?.content);
|
|
1223
|
-
const
|
|
1235
|
+
const hero = row?.hero_content !== void 0 && row?.hero_content !== null ? api$1.readHeroSectionValue(row.hero_content) : fromContent.heroSection;
|
|
1224
1236
|
selectedConfigRef.current = fromContent.blocks;
|
|
1225
|
-
|
|
1237
|
+
heroSectionRef.current = hero;
|
|
1226
1238
|
setSelectedConfig(fromContent.blocks);
|
|
1227
|
-
|
|
1239
|
+
setHeroSection(hero);
|
|
1228
1240
|
} catch (e) {
|
|
1229
1241
|
console.error("Error loading custom page content:", e);
|
|
1230
1242
|
} finally {
|
|
@@ -1232,16 +1244,16 @@ var CustomPageConfigProvider = (props) => {
|
|
|
1232
1244
|
}
|
|
1233
1245
|
}, [props.pageId, token]);
|
|
1234
1246
|
const persistLatest = react.useCallback(
|
|
1235
|
-
(
|
|
1247
|
+
() => {
|
|
1236
1248
|
const run = async () => {
|
|
1237
1249
|
try {
|
|
1238
1250
|
const blocks = selectedConfigRef.current;
|
|
1239
|
-
const
|
|
1251
|
+
const hero = heroSectionRef.current;
|
|
1240
1252
|
await api$1.updateCustomPageContent(
|
|
1241
1253
|
props.pageId,
|
|
1242
1254
|
{
|
|
1243
|
-
content: api$1.mergeCustomPageContent(blocks,
|
|
1244
|
-
|
|
1255
|
+
content: api$1.mergeCustomPageContent(blocks, hero),
|
|
1256
|
+
hero_content: hero ? { type: hero.type, data: hero.data } : { type: null, data: null }
|
|
1245
1257
|
},
|
|
1246
1258
|
token
|
|
1247
1259
|
);
|
|
@@ -1300,12 +1312,11 @@ var CustomPageConfigProvider = (props) => {
|
|
|
1300
1312
|
},
|
|
1301
1313
|
[persistLatest]
|
|
1302
1314
|
);
|
|
1303
|
-
const
|
|
1304
|
-
async (
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
await persistLatest(true);
|
|
1315
|
+
const onUpdateHeroSection = react.useCallback(
|
|
1316
|
+
async (next) => {
|
|
1317
|
+
heroSectionRef.current = next;
|
|
1318
|
+
setHeroSection(next);
|
|
1319
|
+
await persistLatest();
|
|
1309
1320
|
},
|
|
1310
1321
|
[persistLatest]
|
|
1311
1322
|
);
|
|
@@ -1322,14 +1333,12 @@ var CustomPageConfigProvider = (props) => {
|
|
|
1322
1333
|
updateConfig,
|
|
1323
1334
|
removeConfig,
|
|
1324
1335
|
moveConfig,
|
|
1325
|
-
heroSliderConfigData,
|
|
1326
|
-
onUpdateHeroSlider,
|
|
1327
1336
|
loading
|
|
1328
1337
|
},
|
|
1329
1338
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1330
|
-
|
|
1339
|
+
HomeConfigHeroSectionContext.Provider,
|
|
1331
1340
|
{
|
|
1332
|
-
value: { loading,
|
|
1341
|
+
value: { loading, heroSection, onUpdateHeroSection },
|
|
1333
1342
|
children: props.children
|
|
1334
1343
|
}
|
|
1335
1344
|
)
|
|
@@ -1505,17 +1514,16 @@ var HeaderFooterProvider = (props) => {
|
|
|
1505
1514
|
);
|
|
1506
1515
|
const { token } = useThemeEdit();
|
|
1507
1516
|
const themeConfig = useBusiness();
|
|
1517
|
+
const themeId = themeConfig.theme.id;
|
|
1508
1518
|
const [loading, setLoading] = react.useState(!hasInitial);
|
|
1509
1519
|
const getThemeConfig = react.useCallback(async () => {
|
|
1510
|
-
if (hasInitial) {
|
|
1520
|
+
if (hasInitial || !themeId) {
|
|
1521
|
+
if (!themeId) setLoading(false);
|
|
1511
1522
|
return;
|
|
1512
1523
|
}
|
|
1513
1524
|
setLoading(true);
|
|
1514
1525
|
try {
|
|
1515
|
-
const response = await api.api.retrieveThemeContent(
|
|
1516
|
-
themeConfig.theme.id,
|
|
1517
|
-
props.page
|
|
1518
|
-
);
|
|
1526
|
+
const response = await api.api.retrieveThemeContent(themeId, props.page);
|
|
1519
1527
|
response.slug === "header" && setHeaderConfig(response.data);
|
|
1520
1528
|
response.slug === "footer" && setFooterConfig(response.data);
|
|
1521
1529
|
response.slug === "announcement" && setAnnouncementConfig(response.data);
|
|
@@ -1524,7 +1532,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1524
1532
|
} finally {
|
|
1525
1533
|
setLoading(false);
|
|
1526
1534
|
}
|
|
1527
|
-
}, [
|
|
1535
|
+
}, [themeId, hasInitial, props.page]);
|
|
1528
1536
|
const onUpdateThemeContent = react.useCallback(
|
|
1529
1537
|
async (configToUpdate) => {
|
|
1530
1538
|
try {
|
|
@@ -1533,14 +1541,10 @@ var HeaderFooterProvider = (props) => {
|
|
|
1533
1541
|
slug: props.page,
|
|
1534
1542
|
platform: typeof window !== "undefined" ? "website" : "app"
|
|
1535
1543
|
};
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
themeConfig.theme.id,
|
|
1539
|
-
props.page,
|
|
1540
|
-
token
|
|
1541
|
-
);
|
|
1544
|
+
if (!themeId) return;
|
|
1545
|
+
await api.api.updateThemeContent(body, themeId, props.page, token);
|
|
1542
1546
|
const updatedResponse = await api.api.retrieveThemeContent(
|
|
1543
|
-
|
|
1547
|
+
themeId,
|
|
1544
1548
|
props.page
|
|
1545
1549
|
);
|
|
1546
1550
|
updatedResponse.slug === "header" && setHeaderConfig(updatedResponse.data);
|
|
@@ -1552,7 +1556,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1552
1556
|
setLoading(false);
|
|
1553
1557
|
}
|
|
1554
1558
|
},
|
|
1555
|
-
[props.page,
|
|
1559
|
+
[props.page, themeId, token]
|
|
1556
1560
|
);
|
|
1557
1561
|
react.useEffect(() => {
|
|
1558
1562
|
getThemeConfig();
|
|
@@ -2027,11 +2031,12 @@ exports.CustomerConfigContext = CustomerConfigContext;
|
|
|
2027
2031
|
exports.CustomerConfigProvider = CustomerConfigProvider;
|
|
2028
2032
|
exports.FilterContext = FilterContext;
|
|
2029
2033
|
exports.FilterProvider = FilterProvider;
|
|
2034
|
+
exports.HERO_SECTION_SLUG = HERO_SECTION_SLUG;
|
|
2030
2035
|
exports.HeaderFooterContext = HeaderFooterContext;
|
|
2031
2036
|
exports.HeaderFooterProvider = HeaderFooterProvider;
|
|
2032
2037
|
exports.HomeConfigContext = HomeConfigContext;
|
|
2033
|
-
exports.
|
|
2034
|
-
exports.
|
|
2038
|
+
exports.HomeConfigHeroSectionContext = HomeConfigHeroSectionContext;
|
|
2039
|
+
exports.HomeConfigHeroSectionProvider = HomeConfigHeroSectionProvider;
|
|
2035
2040
|
exports.HomeConfigProvider = HomeConfigProvider;
|
|
2036
2041
|
exports.LiveSupportWidgetProvider = LiveSupportWidgetProvider;
|
|
2037
2042
|
exports.MenuCartContext = MenuCartContext;
|
|
@@ -2051,6 +2056,7 @@ exports.ThemeEditProvider = ThemeEditProvider;
|
|
|
2051
2056
|
exports.ToastSupportProvider = ToastSupportProvider;
|
|
2052
2057
|
exports.WishlistContext = WishlistContext;
|
|
2053
2058
|
exports.WishlistProvider = WishlistProvider;
|
|
2059
|
+
exports.resolveHeroSection = resolveHeroSection;
|
|
2054
2060
|
exports.useAuth = useAuth;
|
|
2055
2061
|
exports.useBusiness = useBusiness;
|
|
2056
2062
|
exports.useBusinessContext = useBusinessContext;
|
|
@@ -2062,7 +2068,7 @@ exports.useCustomer = useCustomer;
|
|
|
2062
2068
|
exports.useFilter = useFilter;
|
|
2063
2069
|
exports.useHeaderFooter = useHeaderFooter;
|
|
2064
2070
|
exports.useHomeConfig = useHomeConfig;
|
|
2065
|
-
exports.
|
|
2071
|
+
exports.useHomeConfigHeroSection = useHomeConfigHeroSection;
|
|
2066
2072
|
exports.useLiveSupportWidget = useLiveSupportWidget;
|
|
2067
2073
|
exports.useMenuCart = useMenuCart;
|
|
2068
2074
|
exports.useMenuFilter = useMenuFilter;
|