@growupsell/react-ecommerce-core 2.0.13 → 2.0.16
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-VK7BF3ES.js → chunk-ID4JKOXT.js} +159 -117
- package/dist/chunk-ID4JKOXT.js.map +1 -0
- package/dist/index.cjs +156 -115
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -10
- package/dist/index.d.ts +9 -10
- package/dist/index.js +1 -1
- package/dist/provider.cjs +156 -115
- 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-VK7BF3ES.js.map +0 -1
|
@@ -769,11 +769,42 @@ var ProductDetailContext = createContext({
|
|
|
769
769
|
waitProductLoading: true,
|
|
770
770
|
setSelectedVariants: () => null
|
|
771
771
|
});
|
|
772
|
+
function resolveSelectedVariants(productDetail, selected_variants) {
|
|
773
|
+
if (!productDetail?.variant) return [];
|
|
774
|
+
if (selected_variants !== null && selected_variants !== void 0) {
|
|
775
|
+
const selectedIds = String(selected_variants).split(",").map(Number).filter((id) => Number.isFinite(id));
|
|
776
|
+
return productDetail.variant?.map((vType) => {
|
|
777
|
+
const matchedVariant = vType.variants.find(
|
|
778
|
+
(variant) => selectedIds.includes(variant.id)
|
|
779
|
+
);
|
|
780
|
+
if (matchedVariant) {
|
|
781
|
+
return {
|
|
782
|
+
id: matchedVariant.id,
|
|
783
|
+
type: vType.variant_type.type,
|
|
784
|
+
value: matchedVariant.label
|
|
785
|
+
};
|
|
786
|
+
}
|
|
787
|
+
return null;
|
|
788
|
+
}).filter(Boolean) || [];
|
|
789
|
+
}
|
|
790
|
+
return productDetail.variant?.map((vType) => ({
|
|
791
|
+
id: vType.variants[0].id,
|
|
792
|
+
type: vType.variant_type.type,
|
|
793
|
+
value: vType.variants[0].label
|
|
794
|
+
})) || [];
|
|
795
|
+
}
|
|
772
796
|
var ProductDetailProvider = (props) => {
|
|
773
|
-
const
|
|
774
|
-
const [
|
|
775
|
-
|
|
776
|
-
|
|
797
|
+
const hasInitial = Boolean(props.initialProductDetail);
|
|
798
|
+
const [selectedVariants, setSelectedVariants] = useState(
|
|
799
|
+
() => hasInitial ? resolveSelectedVariants(
|
|
800
|
+
props.initialProductDetail,
|
|
801
|
+
props.selected_variants
|
|
802
|
+
) : []
|
|
803
|
+
);
|
|
804
|
+
const [productDetail, setProductDetail] = useState(
|
|
805
|
+
props.initialProductDetail ?? null
|
|
806
|
+
);
|
|
807
|
+
const [waitProductLoading, setWaitProductLoading] = useState(!hasInitial);
|
|
777
808
|
const selectUnselectVariants = (type, value, id) => {
|
|
778
809
|
setWaitProductLoading(true);
|
|
779
810
|
setSelectedVariants((prev) => {
|
|
@@ -793,35 +824,15 @@ var ProductDetailProvider = (props) => {
|
|
|
793
824
|
};
|
|
794
825
|
useEffect(() => {
|
|
795
826
|
(async () => {
|
|
796
|
-
|
|
827
|
+
if (!hasInitial) {
|
|
828
|
+
setWaitProductLoading(true);
|
|
829
|
+
}
|
|
797
830
|
try {
|
|
798
831
|
const productDetail2 = await api.getProductDetail(props.productId);
|
|
799
832
|
setProductDetail(productDetail2);
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
(variant) => selectedIds.includes(variant.id)
|
|
804
|
-
);
|
|
805
|
-
if (matchedVariant) {
|
|
806
|
-
return {
|
|
807
|
-
id: matchedVariant.id,
|
|
808
|
-
type: vType.variant_type.type,
|
|
809
|
-
value: matchedVariant.label
|
|
810
|
-
};
|
|
811
|
-
}
|
|
812
|
-
return null;
|
|
813
|
-
}).filter(Boolean);
|
|
814
|
-
setSelectedVariants(initialV || []);
|
|
815
|
-
} else {
|
|
816
|
-
let initialV = productDetail2.variant.map((vType) => {
|
|
817
|
-
return {
|
|
818
|
-
id: vType.variants[0].id,
|
|
819
|
-
type: vType.variant_type.type,
|
|
820
|
-
value: vType.variants[0].label
|
|
821
|
-
};
|
|
822
|
-
});
|
|
823
|
-
setSelectedVariants(initialV || []);
|
|
824
|
-
}
|
|
833
|
+
setSelectedVariants(
|
|
834
|
+
resolveSelectedVariants(productDetail2, props.selected_variants)
|
|
835
|
+
);
|
|
825
836
|
} catch (error) {
|
|
826
837
|
console.error("Error loading product details:", error);
|
|
827
838
|
} finally {
|
|
@@ -919,15 +930,25 @@ var HomeConfigContext = createContext({
|
|
|
919
930
|
loading: true
|
|
920
931
|
});
|
|
921
932
|
var HomeConfigProvider = (props) => {
|
|
922
|
-
const
|
|
933
|
+
const hasInitial = Boolean(props.initialThemeContent);
|
|
934
|
+
const [selectedConfig, setSelectedConfig] = useState(() => {
|
|
935
|
+
const data = props.initialThemeContent?.data;
|
|
936
|
+
return Array.isArray(data) ? data.filter((item) => item !== null && item !== void 0) : [];
|
|
937
|
+
});
|
|
923
938
|
const { token } = useThemeEdit();
|
|
924
939
|
const themeConfig = useContext(BusinessConfigContext);
|
|
925
|
-
const [themeConfigData, setThemeConfigData] = useState(
|
|
926
|
-
|
|
940
|
+
const [themeConfigData, setThemeConfigData] = useState(
|
|
941
|
+
props.initialThemeContent ?? {}
|
|
942
|
+
);
|
|
943
|
+
const [isInitialized, setIsInitialized] = useState(hasInitial);
|
|
927
944
|
const updateRef = useRef(false);
|
|
928
|
-
const [loading, setLoading] = useState(
|
|
945
|
+
const [loading, setLoading] = useState(!hasInitial);
|
|
929
946
|
const getThemeConfig = useCallback(async () => {
|
|
930
|
-
|
|
947
|
+
if (!hasInitial) {
|
|
948
|
+
setLoading(true);
|
|
949
|
+
} else {
|
|
950
|
+
return;
|
|
951
|
+
}
|
|
931
952
|
try {
|
|
932
953
|
const response = await retrieveThemeContent(
|
|
933
954
|
themeConfig.theme.id,
|
|
@@ -943,11 +964,11 @@ var HomeConfigProvider = (props) => {
|
|
|
943
964
|
}
|
|
944
965
|
setIsInitialized(true);
|
|
945
966
|
} catch (error) {
|
|
946
|
-
console.
|
|
967
|
+
console.log("Error fetching theme content:", error);
|
|
947
968
|
} finally {
|
|
948
969
|
setLoading(false);
|
|
949
970
|
}
|
|
950
|
-
}, [themeConfig.theme.id]);
|
|
971
|
+
}, [themeConfig.theme.id, hasInitial, props.page]);
|
|
951
972
|
const onUpdateThemeContent = useCallback(
|
|
952
973
|
async (configToUpdate = selectedConfig) => {
|
|
953
974
|
try {
|
|
@@ -1041,6 +1062,73 @@ var HomeConfigProvider = (props) => {
|
|
|
1041
1062
|
);
|
|
1042
1063
|
};
|
|
1043
1064
|
var useHomeConfig = () => useContext(HomeConfigContext);
|
|
1065
|
+
var HomeConfigHeroSliderContext = createContext({
|
|
1066
|
+
loading: true,
|
|
1067
|
+
heroSliderConfigData: [],
|
|
1068
|
+
onUpdateHeroSlider: () => null
|
|
1069
|
+
});
|
|
1070
|
+
var HomeConfigHeroSliderProvider = (props) => {
|
|
1071
|
+
const hasInitial = Array.isArray(props.initialThemeContent?.data);
|
|
1072
|
+
const [loading, setLoading] = useState(!hasInitial);
|
|
1073
|
+
const [heroSliderConfigData, setHeroSliderConfigData] = useState(
|
|
1074
|
+
() => hasInitial ? props.initialThemeContent.data : []
|
|
1075
|
+
);
|
|
1076
|
+
const { token } = useThemeEdit();
|
|
1077
|
+
const themeConfig = useContext(BusinessConfigContext);
|
|
1078
|
+
const getHeroSliderConfig = useCallback(async () => {
|
|
1079
|
+
if (hasInitial) {
|
|
1080
|
+
return;
|
|
1081
|
+
}
|
|
1082
|
+
setLoading(true);
|
|
1083
|
+
try {
|
|
1084
|
+
const response = await retrieveThemeContent(
|
|
1085
|
+
themeConfig.theme.id,
|
|
1086
|
+
"hero_slider"
|
|
1087
|
+
);
|
|
1088
|
+
setHeroSliderConfigData(response.data);
|
|
1089
|
+
} catch (error) {
|
|
1090
|
+
console.error("Error fetching hero slider content:", error);
|
|
1091
|
+
} finally {
|
|
1092
|
+
setLoading(false);
|
|
1093
|
+
}
|
|
1094
|
+
}, [themeConfig.theme.id, hasInitial]);
|
|
1095
|
+
useEffect(() => {
|
|
1096
|
+
getHeroSliderConfig();
|
|
1097
|
+
}, [getHeroSliderConfig]);
|
|
1098
|
+
const onUpdateHeroSlider = async (configToUpdate) => {
|
|
1099
|
+
setLoading(true);
|
|
1100
|
+
try {
|
|
1101
|
+
const body = {
|
|
1102
|
+
data: configToUpdate,
|
|
1103
|
+
slug: "hero_slider",
|
|
1104
|
+
platform: typeof window !== "undefined" ? "website" : "app"
|
|
1105
|
+
};
|
|
1106
|
+
await updateThemeContent(
|
|
1107
|
+
body,
|
|
1108
|
+
themeConfig?.theme?.id,
|
|
1109
|
+
"hero_slider",
|
|
1110
|
+
token
|
|
1111
|
+
);
|
|
1112
|
+
const updatedResponse = await retrieveThemeContent(
|
|
1113
|
+
themeConfig.theme.id,
|
|
1114
|
+
"hero_slider"
|
|
1115
|
+
);
|
|
1116
|
+
setHeroSliderConfigData(updatedResponse.data);
|
|
1117
|
+
} catch (error) {
|
|
1118
|
+
console.error("Error updating theme content:", error);
|
|
1119
|
+
} finally {
|
|
1120
|
+
setLoading(false);
|
|
1121
|
+
}
|
|
1122
|
+
};
|
|
1123
|
+
return /* @__PURE__ */ jsx(
|
|
1124
|
+
HomeConfigHeroSliderContext.Provider,
|
|
1125
|
+
{
|
|
1126
|
+
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1127
|
+
children: props.children
|
|
1128
|
+
}
|
|
1129
|
+
);
|
|
1130
|
+
};
|
|
1131
|
+
var useHomeConfigHeroSlider = () => useContext(HomeConfigHeroSliderContext);
|
|
1044
1132
|
var CustomPageConfigContext = createContext({
|
|
1045
1133
|
selectedConfig: [],
|
|
1046
1134
|
setSelectedConfig: () => null,
|
|
@@ -1171,80 +1259,17 @@ var CustomPageConfigProvider = (props) => {
|
|
|
1171
1259
|
onUpdateHeroSlider,
|
|
1172
1260
|
loading
|
|
1173
1261
|
},
|
|
1174
|
-
children:
|
|
1262
|
+
children: /* @__PURE__ */ jsx(
|
|
1263
|
+
HomeConfigHeroSliderContext.Provider,
|
|
1264
|
+
{
|
|
1265
|
+
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1266
|
+
children: props.children
|
|
1267
|
+
}
|
|
1268
|
+
)
|
|
1175
1269
|
}
|
|
1176
1270
|
);
|
|
1177
1271
|
};
|
|
1178
1272
|
var useCustomPageConfig = () => useContext(CustomPageConfigContext);
|
|
1179
|
-
var HomeConfigHeroSliderContext = createContext({
|
|
1180
|
-
loading: true,
|
|
1181
|
-
heroSliderConfigData: [],
|
|
1182
|
-
onUpdateHeroSlider: () => null
|
|
1183
|
-
});
|
|
1184
|
-
var HomeConfigHeroSliderProvider = (props) => {
|
|
1185
|
-
const [loading, setLoading] = useState(true);
|
|
1186
|
-
const [heroSliderConfigData, setHeroSliderConfigData] = useState([]);
|
|
1187
|
-
const { token } = useThemeEdit();
|
|
1188
|
-
const themeConfig = useContext(BusinessConfigContext);
|
|
1189
|
-
const getHeroSliderConfig = async () => {
|
|
1190
|
-
setLoading(true);
|
|
1191
|
-
try {
|
|
1192
|
-
const response = await retrieveThemeContent(
|
|
1193
|
-
themeConfig.theme.id,
|
|
1194
|
-
"hero_slider"
|
|
1195
|
-
);
|
|
1196
|
-
setHeroSliderConfigData(response.data);
|
|
1197
|
-
} finally {
|
|
1198
|
-
setLoading(false);
|
|
1199
|
-
}
|
|
1200
|
-
};
|
|
1201
|
-
useEffect(() => {
|
|
1202
|
-
getHeroSliderConfig();
|
|
1203
|
-
}, []);
|
|
1204
|
-
const onUpdateHeroSlider = async (configToUpdate) => {
|
|
1205
|
-
setLoading(true);
|
|
1206
|
-
try {
|
|
1207
|
-
const body = {
|
|
1208
|
-
data: configToUpdate,
|
|
1209
|
-
slug: "hero_slider",
|
|
1210
|
-
platform: typeof window !== "undefined" ? "website" : "app"
|
|
1211
|
-
};
|
|
1212
|
-
await updateThemeContent(
|
|
1213
|
-
body,
|
|
1214
|
-
themeConfig?.theme?.id,
|
|
1215
|
-
"hero_slider",
|
|
1216
|
-
token
|
|
1217
|
-
);
|
|
1218
|
-
const updatedResponse = await retrieveThemeContent(
|
|
1219
|
-
themeConfig.theme.id,
|
|
1220
|
-
"hero_slider"
|
|
1221
|
-
);
|
|
1222
|
-
setHeroSliderConfigData(updatedResponse.data);
|
|
1223
|
-
} catch (error) {
|
|
1224
|
-
console.error("Error updating theme content:", error);
|
|
1225
|
-
} finally {
|
|
1226
|
-
setLoading(false);
|
|
1227
|
-
}
|
|
1228
|
-
};
|
|
1229
|
-
return /* @__PURE__ */ jsx(
|
|
1230
|
-
HomeConfigHeroSliderContext.Provider,
|
|
1231
|
-
{
|
|
1232
|
-
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1233
|
-
children: props.children
|
|
1234
|
-
}
|
|
1235
|
-
);
|
|
1236
|
-
};
|
|
1237
|
-
var useHomeConfigHeroSlider = () => useContext(HomeConfigHeroSliderContext);
|
|
1238
|
-
var CustomPageHeroSliderProvider = (props) => {
|
|
1239
|
-
const { loading, heroSliderConfigData, onUpdateHeroSlider } = useCustomPageConfig();
|
|
1240
|
-
return /* @__PURE__ */ jsx(
|
|
1241
|
-
HomeConfigHeroSliderContext.Provider,
|
|
1242
|
-
{
|
|
1243
|
-
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1244
|
-
children: props.children
|
|
1245
|
-
}
|
|
1246
|
-
);
|
|
1247
|
-
};
|
|
1248
1273
|
var WishlistContext = createContext({
|
|
1249
1274
|
wishlistItems: [],
|
|
1250
1275
|
addToWishlist: () => null,
|
|
@@ -1385,13 +1410,24 @@ var HeaderFooterContext = createContext({
|
|
|
1385
1410
|
announcementConfig: {}
|
|
1386
1411
|
});
|
|
1387
1412
|
var HeaderFooterProvider = (props) => {
|
|
1388
|
-
const
|
|
1389
|
-
const
|
|
1390
|
-
const [
|
|
1413
|
+
const hasInitial = props.initialThemeContent != null && "data" in props.initialThemeContent;
|
|
1414
|
+
const initialData = hasInitial ? props.initialThemeContent.data ?? {} : {};
|
|
1415
|
+
const [headerConfig, setHeaderConfig] = useState(
|
|
1416
|
+
() => props.page === "header" ? initialData : {}
|
|
1417
|
+
);
|
|
1418
|
+
const [footerConfig, setFooterConfig] = useState(
|
|
1419
|
+
() => props.page === "footer" ? initialData : {}
|
|
1420
|
+
);
|
|
1421
|
+
const [announcementConfig, setAnnouncementConfig] = useState(
|
|
1422
|
+
() => props.page === "announcement" ? initialData : {}
|
|
1423
|
+
);
|
|
1391
1424
|
const { token } = useThemeEdit();
|
|
1392
1425
|
const themeConfig = useBusiness();
|
|
1393
|
-
const [loading, setLoading] = useState(
|
|
1426
|
+
const [loading, setLoading] = useState(!hasInitial);
|
|
1394
1427
|
const getThemeConfig = useCallback(async () => {
|
|
1428
|
+
if (hasInitial) {
|
|
1429
|
+
return;
|
|
1430
|
+
}
|
|
1395
1431
|
setLoading(true);
|
|
1396
1432
|
try {
|
|
1397
1433
|
const response = await api.retrieveThemeContent(
|
|
@@ -1406,7 +1442,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1406
1442
|
} finally {
|
|
1407
1443
|
setLoading(false);
|
|
1408
1444
|
}
|
|
1409
|
-
}, [themeConfig.theme.id]);
|
|
1445
|
+
}, [themeConfig.theme.id, hasInitial, props.page]);
|
|
1410
1446
|
const onUpdateThemeContent = useCallback(
|
|
1411
1447
|
async (configToUpdate) => {
|
|
1412
1448
|
try {
|
|
@@ -1434,7 +1470,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1434
1470
|
setLoading(false);
|
|
1435
1471
|
}
|
|
1436
1472
|
},
|
|
1437
|
-
[props.page]
|
|
1473
|
+
[props.page, themeConfig.theme.id, token]
|
|
1438
1474
|
);
|
|
1439
1475
|
useEffect(() => {
|
|
1440
1476
|
getThemeConfig();
|
|
@@ -1442,7 +1478,13 @@ var HeaderFooterProvider = (props) => {
|
|
|
1442
1478
|
return /* @__PURE__ */ jsx(
|
|
1443
1479
|
HeaderFooterContext.Provider,
|
|
1444
1480
|
{
|
|
1445
|
-
value: {
|
|
1481
|
+
value: {
|
|
1482
|
+
headerConfig,
|
|
1483
|
+
footerConfig,
|
|
1484
|
+
onUpdateThemeContent,
|
|
1485
|
+
loading,
|
|
1486
|
+
announcementConfig
|
|
1487
|
+
},
|
|
1446
1488
|
children: loading ? null : props.children
|
|
1447
1489
|
}
|
|
1448
1490
|
);
|
|
@@ -1901,6 +1943,6 @@ var BaseProvider = ({
|
|
|
1901
1943
|
return /* @__PURE__ */ jsx(StorageProvider, { storage, children: /* @__PURE__ */ jsx(ToastSupportProvider, { value: toast, children: /* @__PURE__ */ jsx(BusinessConfigProvider, { data: businessConfig, baseURL, children: /* @__PURE__ */ jsx(ReferralCodeProvider, { referralCodeFromUrl, children: /* @__PURE__ */ jsx(ThemeEditProvider, { isThemeEdit: isEdit, token, isHeader, isFooter, isAnnouncementBar, children: /* @__PURE__ */ jsx(BusinessMediaProvider, { children: /* @__PURE__ */ jsx(CustomerConfigProvider, { children: /* @__PURE__ */ jsx(AuthProvider, { children: /* @__PURE__ */ jsx(ModalProvider, { children: /* @__PURE__ */ jsx(LiveSupportWidgetProvider, { children: businessConfig.category.type == "retail" ? /* @__PURE__ */ jsx(ProductConfigProvider, { children: /* @__PURE__ */ jsx(CartWishlistRefreshProvider, { children: /* @__PURE__ */ jsx(CartProvider, { children: /* @__PURE__ */ jsx(WishlistProvider, { children: /* @__PURE__ */ jsx(FilterProvider, { children: /* @__PURE__ */ jsx(Fragment, { children }) }) }) }) }) }) : /* @__PURE__ */ jsx(MenuCartProvider, { children: /* @__PURE__ */ jsx(MenuFilterProvider, { children: /* @__PURE__ */ jsx(Fragment, { children }) }) }) }) }) }) }) }) }) }) }) }) });
|
|
1902
1944
|
};
|
|
1903
1945
|
|
|
1904
|
-
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider,
|
|
1905
|
-
//# sourceMappingURL=chunk-
|
|
1906
|
-
//# sourceMappingURL=chunk-
|
|
1946
|
+
export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext, HomeConfigHeroSliderContext, HomeConfigHeroSliderProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, ToastSupportProvider, WishlistContext, WishlistProvider, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSlider, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist };
|
|
1947
|
+
//# sourceMappingURL=chunk-ID4JKOXT.js.map
|
|
1948
|
+
//# sourceMappingURL=chunk-ID4JKOXT.js.map
|