@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
package/dist/index.cjs
CHANGED
|
@@ -776,11 +776,42 @@ var ProductDetailContext = react.createContext({
|
|
|
776
776
|
waitProductLoading: true,
|
|
777
777
|
setSelectedVariants: () => null
|
|
778
778
|
});
|
|
779
|
+
function resolveSelectedVariants(productDetail, selected_variants) {
|
|
780
|
+
if (!productDetail?.variant) return [];
|
|
781
|
+
if (selected_variants !== null && selected_variants !== void 0) {
|
|
782
|
+
const selectedIds = String(selected_variants).split(",").map(Number).filter((id) => Number.isFinite(id));
|
|
783
|
+
return productDetail.variant?.map((vType) => {
|
|
784
|
+
const matchedVariant = vType.variants.find(
|
|
785
|
+
(variant) => selectedIds.includes(variant.id)
|
|
786
|
+
);
|
|
787
|
+
if (matchedVariant) {
|
|
788
|
+
return {
|
|
789
|
+
id: matchedVariant.id,
|
|
790
|
+
type: vType.variant_type.type,
|
|
791
|
+
value: matchedVariant.label
|
|
792
|
+
};
|
|
793
|
+
}
|
|
794
|
+
return null;
|
|
795
|
+
}).filter(Boolean) || [];
|
|
796
|
+
}
|
|
797
|
+
return productDetail.variant?.map((vType) => ({
|
|
798
|
+
id: vType.variants[0].id,
|
|
799
|
+
type: vType.variant_type.type,
|
|
800
|
+
value: vType.variants[0].label
|
|
801
|
+
})) || [];
|
|
802
|
+
}
|
|
779
803
|
var ProductDetailProvider = (props) => {
|
|
780
|
-
const
|
|
781
|
-
const [
|
|
782
|
-
|
|
783
|
-
|
|
804
|
+
const hasInitial = Boolean(props.initialProductDetail);
|
|
805
|
+
const [selectedVariants, setSelectedVariants] = react.useState(
|
|
806
|
+
() => hasInitial ? resolveSelectedVariants(
|
|
807
|
+
props.initialProductDetail,
|
|
808
|
+
props.selected_variants
|
|
809
|
+
) : []
|
|
810
|
+
);
|
|
811
|
+
const [productDetail, setProductDetail] = react.useState(
|
|
812
|
+
props.initialProductDetail ?? null
|
|
813
|
+
);
|
|
814
|
+
const [waitProductLoading, setWaitProductLoading] = react.useState(!hasInitial);
|
|
784
815
|
const selectUnselectVariants = (type, value, id) => {
|
|
785
816
|
setWaitProductLoading(true);
|
|
786
817
|
setSelectedVariants((prev) => {
|
|
@@ -800,35 +831,15 @@ var ProductDetailProvider = (props) => {
|
|
|
800
831
|
};
|
|
801
832
|
react.useEffect(() => {
|
|
802
833
|
(async () => {
|
|
803
|
-
|
|
834
|
+
if (!hasInitial) {
|
|
835
|
+
setWaitProductLoading(true);
|
|
836
|
+
}
|
|
804
837
|
try {
|
|
805
838
|
const productDetail2 = await api.api.getProductDetail(props.productId);
|
|
806
839
|
setProductDetail(productDetail2);
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
(variant) => selectedIds.includes(variant.id)
|
|
811
|
-
);
|
|
812
|
-
if (matchedVariant) {
|
|
813
|
-
return {
|
|
814
|
-
id: matchedVariant.id,
|
|
815
|
-
type: vType.variant_type.type,
|
|
816
|
-
value: matchedVariant.label
|
|
817
|
-
};
|
|
818
|
-
}
|
|
819
|
-
return null;
|
|
820
|
-
}).filter(Boolean);
|
|
821
|
-
setSelectedVariants(initialV || []);
|
|
822
|
-
} else {
|
|
823
|
-
let initialV = productDetail2.variant.map((vType) => {
|
|
824
|
-
return {
|
|
825
|
-
id: vType.variants[0].id,
|
|
826
|
-
type: vType.variant_type.type,
|
|
827
|
-
value: vType.variants[0].label
|
|
828
|
-
};
|
|
829
|
-
});
|
|
830
|
-
setSelectedVariants(initialV || []);
|
|
831
|
-
}
|
|
840
|
+
setSelectedVariants(
|
|
841
|
+
resolveSelectedVariants(productDetail2, props.selected_variants)
|
|
842
|
+
);
|
|
832
843
|
} catch (error) {
|
|
833
844
|
console.error("Error loading product details:", error);
|
|
834
845
|
} finally {
|
|
@@ -926,15 +937,25 @@ var HomeConfigContext = react.createContext({
|
|
|
926
937
|
loading: true
|
|
927
938
|
});
|
|
928
939
|
var HomeConfigProvider = (props) => {
|
|
929
|
-
const
|
|
940
|
+
const hasInitial = Boolean(props.initialThemeContent);
|
|
941
|
+
const [selectedConfig, setSelectedConfig] = react.useState(() => {
|
|
942
|
+
const data = props.initialThemeContent?.data;
|
|
943
|
+
return Array.isArray(data) ? data.filter((item) => item !== null && item !== void 0) : [];
|
|
944
|
+
});
|
|
930
945
|
const { token } = useThemeEdit();
|
|
931
946
|
const themeConfig = react.useContext(BusinessConfigContext);
|
|
932
|
-
const [themeConfigData, setThemeConfigData] = react.useState(
|
|
933
|
-
|
|
947
|
+
const [themeConfigData, setThemeConfigData] = react.useState(
|
|
948
|
+
props.initialThemeContent ?? {}
|
|
949
|
+
);
|
|
950
|
+
const [isInitialized, setIsInitialized] = react.useState(hasInitial);
|
|
934
951
|
const updateRef = react.useRef(false);
|
|
935
|
-
const [loading, setLoading] = react.useState(
|
|
952
|
+
const [loading, setLoading] = react.useState(!hasInitial);
|
|
936
953
|
const getThemeConfig = react.useCallback(async () => {
|
|
937
|
-
|
|
954
|
+
if (!hasInitial) {
|
|
955
|
+
setLoading(true);
|
|
956
|
+
} else {
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
938
959
|
try {
|
|
939
960
|
const response = await api$1.retrieveThemeContent(
|
|
940
961
|
themeConfig.theme.id,
|
|
@@ -950,11 +971,11 @@ var HomeConfigProvider = (props) => {
|
|
|
950
971
|
}
|
|
951
972
|
setIsInitialized(true);
|
|
952
973
|
} catch (error) {
|
|
953
|
-
console.
|
|
974
|
+
console.log("Error fetching theme content:", error);
|
|
954
975
|
} finally {
|
|
955
976
|
setLoading(false);
|
|
956
977
|
}
|
|
957
|
-
}, [themeConfig.theme.id]);
|
|
978
|
+
}, [themeConfig.theme.id, hasInitial, props.page]);
|
|
958
979
|
const onUpdateThemeContent = react.useCallback(
|
|
959
980
|
async (configToUpdate = selectedConfig) => {
|
|
960
981
|
try {
|
|
@@ -1048,6 +1069,73 @@ var HomeConfigProvider = (props) => {
|
|
|
1048
1069
|
);
|
|
1049
1070
|
};
|
|
1050
1071
|
var useHomeConfig = () => react.useContext(HomeConfigContext);
|
|
1072
|
+
var HomeConfigHeroSliderContext = react.createContext({
|
|
1073
|
+
loading: true,
|
|
1074
|
+
heroSliderConfigData: [],
|
|
1075
|
+
onUpdateHeroSlider: () => null
|
|
1076
|
+
});
|
|
1077
|
+
var HomeConfigHeroSliderProvider = (props) => {
|
|
1078
|
+
const hasInitial = Array.isArray(props.initialThemeContent?.data);
|
|
1079
|
+
const [loading, setLoading] = react.useState(!hasInitial);
|
|
1080
|
+
const [heroSliderConfigData, setHeroSliderConfigData] = react.useState(
|
|
1081
|
+
() => hasInitial ? props.initialThemeContent.data : []
|
|
1082
|
+
);
|
|
1083
|
+
const { token } = useThemeEdit();
|
|
1084
|
+
const themeConfig = react.useContext(BusinessConfigContext);
|
|
1085
|
+
const getHeroSliderConfig = react.useCallback(async () => {
|
|
1086
|
+
if (hasInitial) {
|
|
1087
|
+
return;
|
|
1088
|
+
}
|
|
1089
|
+
setLoading(true);
|
|
1090
|
+
try {
|
|
1091
|
+
const response = await api$1.retrieveThemeContent(
|
|
1092
|
+
themeConfig.theme.id,
|
|
1093
|
+
"hero_slider"
|
|
1094
|
+
);
|
|
1095
|
+
setHeroSliderConfigData(response.data);
|
|
1096
|
+
} catch (error) {
|
|
1097
|
+
console.error("Error fetching hero slider content:", error);
|
|
1098
|
+
} finally {
|
|
1099
|
+
setLoading(false);
|
|
1100
|
+
}
|
|
1101
|
+
}, [themeConfig.theme.id, hasInitial]);
|
|
1102
|
+
react.useEffect(() => {
|
|
1103
|
+
getHeroSliderConfig();
|
|
1104
|
+
}, [getHeroSliderConfig]);
|
|
1105
|
+
const onUpdateHeroSlider = async (configToUpdate) => {
|
|
1106
|
+
setLoading(true);
|
|
1107
|
+
try {
|
|
1108
|
+
const body = {
|
|
1109
|
+
data: configToUpdate,
|
|
1110
|
+
slug: "hero_slider",
|
|
1111
|
+
platform: typeof window !== "undefined" ? "website" : "app"
|
|
1112
|
+
};
|
|
1113
|
+
await api$1.updateThemeContent(
|
|
1114
|
+
body,
|
|
1115
|
+
themeConfig?.theme?.id,
|
|
1116
|
+
"hero_slider",
|
|
1117
|
+
token
|
|
1118
|
+
);
|
|
1119
|
+
const updatedResponse = await api$1.retrieveThemeContent(
|
|
1120
|
+
themeConfig.theme.id,
|
|
1121
|
+
"hero_slider"
|
|
1122
|
+
);
|
|
1123
|
+
setHeroSliderConfigData(updatedResponse.data);
|
|
1124
|
+
} catch (error) {
|
|
1125
|
+
console.error("Error updating theme content:", error);
|
|
1126
|
+
} finally {
|
|
1127
|
+
setLoading(false);
|
|
1128
|
+
}
|
|
1129
|
+
};
|
|
1130
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1131
|
+
HomeConfigHeroSliderContext.Provider,
|
|
1132
|
+
{
|
|
1133
|
+
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1134
|
+
children: props.children
|
|
1135
|
+
}
|
|
1136
|
+
);
|
|
1137
|
+
};
|
|
1138
|
+
var useHomeConfigHeroSlider = () => react.useContext(HomeConfigHeroSliderContext);
|
|
1051
1139
|
var CustomPageConfigContext = react.createContext({
|
|
1052
1140
|
selectedConfig: [],
|
|
1053
1141
|
setSelectedConfig: () => null,
|
|
@@ -1178,80 +1266,17 @@ var CustomPageConfigProvider = (props) => {
|
|
|
1178
1266
|
onUpdateHeroSlider,
|
|
1179
1267
|
loading
|
|
1180
1268
|
},
|
|
1181
|
-
children:
|
|
1269
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1270
|
+
HomeConfigHeroSliderContext.Provider,
|
|
1271
|
+
{
|
|
1272
|
+
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1273
|
+
children: props.children
|
|
1274
|
+
}
|
|
1275
|
+
)
|
|
1182
1276
|
}
|
|
1183
1277
|
);
|
|
1184
1278
|
};
|
|
1185
1279
|
var useCustomPageConfig = () => react.useContext(CustomPageConfigContext);
|
|
1186
|
-
var HomeConfigHeroSliderContext = react.createContext({
|
|
1187
|
-
loading: true,
|
|
1188
|
-
heroSliderConfigData: [],
|
|
1189
|
-
onUpdateHeroSlider: () => null
|
|
1190
|
-
});
|
|
1191
|
-
var HomeConfigHeroSliderProvider = (props) => {
|
|
1192
|
-
const [loading, setLoading] = react.useState(true);
|
|
1193
|
-
const [heroSliderConfigData, setHeroSliderConfigData] = react.useState([]);
|
|
1194
|
-
const { token } = useThemeEdit();
|
|
1195
|
-
const themeConfig = react.useContext(BusinessConfigContext);
|
|
1196
|
-
const getHeroSliderConfig = async () => {
|
|
1197
|
-
setLoading(true);
|
|
1198
|
-
try {
|
|
1199
|
-
const response = await api$1.retrieveThemeContent(
|
|
1200
|
-
themeConfig.theme.id,
|
|
1201
|
-
"hero_slider"
|
|
1202
|
-
);
|
|
1203
|
-
setHeroSliderConfigData(response.data);
|
|
1204
|
-
} finally {
|
|
1205
|
-
setLoading(false);
|
|
1206
|
-
}
|
|
1207
|
-
};
|
|
1208
|
-
react.useEffect(() => {
|
|
1209
|
-
getHeroSliderConfig();
|
|
1210
|
-
}, []);
|
|
1211
|
-
const onUpdateHeroSlider = async (configToUpdate) => {
|
|
1212
|
-
setLoading(true);
|
|
1213
|
-
try {
|
|
1214
|
-
const body = {
|
|
1215
|
-
data: configToUpdate,
|
|
1216
|
-
slug: "hero_slider",
|
|
1217
|
-
platform: typeof window !== "undefined" ? "website" : "app"
|
|
1218
|
-
};
|
|
1219
|
-
await api$1.updateThemeContent(
|
|
1220
|
-
body,
|
|
1221
|
-
themeConfig?.theme?.id,
|
|
1222
|
-
"hero_slider",
|
|
1223
|
-
token
|
|
1224
|
-
);
|
|
1225
|
-
const updatedResponse = await api$1.retrieveThemeContent(
|
|
1226
|
-
themeConfig.theme.id,
|
|
1227
|
-
"hero_slider"
|
|
1228
|
-
);
|
|
1229
|
-
setHeroSliderConfigData(updatedResponse.data);
|
|
1230
|
-
} catch (error) {
|
|
1231
|
-
console.error("Error updating theme content:", error);
|
|
1232
|
-
} finally {
|
|
1233
|
-
setLoading(false);
|
|
1234
|
-
}
|
|
1235
|
-
};
|
|
1236
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1237
|
-
HomeConfigHeroSliderContext.Provider,
|
|
1238
|
-
{
|
|
1239
|
-
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1240
|
-
children: props.children
|
|
1241
|
-
}
|
|
1242
|
-
);
|
|
1243
|
-
};
|
|
1244
|
-
var useHomeConfigHeroSlider = () => react.useContext(HomeConfigHeroSliderContext);
|
|
1245
|
-
var CustomPageHeroSliderProvider = (props) => {
|
|
1246
|
-
const { loading, heroSliderConfigData, onUpdateHeroSlider } = useCustomPageConfig();
|
|
1247
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1248
|
-
HomeConfigHeroSliderContext.Provider,
|
|
1249
|
-
{
|
|
1250
|
-
value: { loading, heroSliderConfigData, onUpdateHeroSlider },
|
|
1251
|
-
children: props.children
|
|
1252
|
-
}
|
|
1253
|
-
);
|
|
1254
|
-
};
|
|
1255
1280
|
var WishlistContext = react.createContext({
|
|
1256
1281
|
wishlistItems: [],
|
|
1257
1282
|
addToWishlist: () => null,
|
|
@@ -1407,13 +1432,24 @@ var HeaderFooterContext = react.createContext({
|
|
|
1407
1432
|
announcementConfig: {}
|
|
1408
1433
|
});
|
|
1409
1434
|
var HeaderFooterProvider = (props) => {
|
|
1410
|
-
const
|
|
1411
|
-
const
|
|
1412
|
-
const [
|
|
1435
|
+
const hasInitial = props.initialThemeContent != null && "data" in props.initialThemeContent;
|
|
1436
|
+
const initialData = hasInitial ? props.initialThemeContent.data ?? {} : {};
|
|
1437
|
+
const [headerConfig, setHeaderConfig] = react.useState(
|
|
1438
|
+
() => props.page === "header" ? initialData : {}
|
|
1439
|
+
);
|
|
1440
|
+
const [footerConfig, setFooterConfig] = react.useState(
|
|
1441
|
+
() => props.page === "footer" ? initialData : {}
|
|
1442
|
+
);
|
|
1443
|
+
const [announcementConfig, setAnnouncementConfig] = react.useState(
|
|
1444
|
+
() => props.page === "announcement" ? initialData : {}
|
|
1445
|
+
);
|
|
1413
1446
|
const { token } = useThemeEdit();
|
|
1414
1447
|
const themeConfig = useBusiness();
|
|
1415
|
-
const [loading, setLoading] = react.useState(
|
|
1448
|
+
const [loading, setLoading] = react.useState(!hasInitial);
|
|
1416
1449
|
const getThemeConfig = react.useCallback(async () => {
|
|
1450
|
+
if (hasInitial) {
|
|
1451
|
+
return;
|
|
1452
|
+
}
|
|
1417
1453
|
setLoading(true);
|
|
1418
1454
|
try {
|
|
1419
1455
|
const response = await api.api.retrieveThemeContent(
|
|
@@ -1428,7 +1464,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1428
1464
|
} finally {
|
|
1429
1465
|
setLoading(false);
|
|
1430
1466
|
}
|
|
1431
|
-
}, [themeConfig.theme.id]);
|
|
1467
|
+
}, [themeConfig.theme.id, hasInitial, props.page]);
|
|
1432
1468
|
const onUpdateThemeContent = react.useCallback(
|
|
1433
1469
|
async (configToUpdate) => {
|
|
1434
1470
|
try {
|
|
@@ -1456,7 +1492,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1456
1492
|
setLoading(false);
|
|
1457
1493
|
}
|
|
1458
1494
|
},
|
|
1459
|
-
[props.page]
|
|
1495
|
+
[props.page, themeConfig.theme.id, token]
|
|
1460
1496
|
);
|
|
1461
1497
|
react.useEffect(() => {
|
|
1462
1498
|
getThemeConfig();
|
|
@@ -1464,7 +1500,13 @@ var HeaderFooterProvider = (props) => {
|
|
|
1464
1500
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1465
1501
|
HeaderFooterContext.Provider,
|
|
1466
1502
|
{
|
|
1467
|
-
value: {
|
|
1503
|
+
value: {
|
|
1504
|
+
headerConfig,
|
|
1505
|
+
footerConfig,
|
|
1506
|
+
onUpdateThemeContent,
|
|
1507
|
+
loading,
|
|
1508
|
+
announcementConfig
|
|
1509
|
+
},
|
|
1468
1510
|
children: loading ? null : props.children
|
|
1469
1511
|
}
|
|
1470
1512
|
);
|
|
@@ -1921,7 +1963,6 @@ exports.CartWishlistRefreshContext = CartWishlistRefreshContext;
|
|
|
1921
1963
|
exports.CartWishlistRefreshProvider = CartWishlistRefreshProvider;
|
|
1922
1964
|
exports.CustomPageConfigContext = CustomPageConfigContext;
|
|
1923
1965
|
exports.CustomPageConfigProvider = CustomPageConfigProvider;
|
|
1924
|
-
exports.CustomPageHeroSliderProvider = CustomPageHeroSliderProvider;
|
|
1925
1966
|
exports.CustomerConfigContext = CustomerConfigContext;
|
|
1926
1967
|
exports.CustomerConfigProvider = CustomerConfigProvider;
|
|
1927
1968
|
exports.FilterContext = FilterContext;
|