@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.
@@ -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 [selectedVariants, setSelectedVariants] = useState([]);
774
- const [productDetail, setProductDetail] = useState([]);
775
- const [waitProductLoading, setWaitProductLoading] = useState(true);
776
- const selectedIds = props?.selected_variants?.split(",").map(Number);
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
- setWaitProductLoading(true);
827
+ if (!hasInitial) {
828
+ setWaitProductLoading(true);
829
+ }
797
830
  try {
798
831
  const productDetail2 = await api.getProductDetail(props.productId);
799
832
  setProductDetail(productDetail2);
800
- if (props.selected_variants !== null) {
801
- const initialV = productDetail2?.variant?.map((vType) => {
802
- const matchedVariant = vType.variants.find(
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 [selectedConfig, setSelectedConfig] = useState([]);
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
- const [isInitialized, setIsInitialized] = useState(false);
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(true);
945
+ const [loading, setLoading] = useState(!hasInitial);
929
946
  const getThemeConfig = useCallback(async () => {
930
- setLoading(true);
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.error("Error fetching theme content:", error);
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: props.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 [headerConfig, setHeaderConfig] = useState({});
1389
- const [footerConfig, setFooterConfig] = useState({});
1390
- const [announcementConfig, setAnnouncementConfig] = useState({});
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(true);
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: { headerConfig, footerConfig, onUpdateThemeContent, loading, announcementConfig },
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, CustomPageHeroSliderProvider, 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 };
1905
- //# sourceMappingURL=chunk-VK7BF3ES.js.map
1906
- //# sourceMappingURL=chunk-VK7BF3ES.js.map
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