@wlloyalty/wll-react-sdk 1.4.3 → 1.4.4

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.
@@ -2,6 +2,8 @@ import React from 'react';
2
2
  import { TGroup } from '../../../types/group';
3
3
  type GroupProps = {
4
4
  id: string;
5
+ enablePullToRefresh?: boolean;
6
+ onRefresh?: () => Promise<void>;
5
7
  };
6
8
  type GroupContextType = {
7
9
  groupData: TGroup;
@@ -46,5 +48,5 @@ export declare const GroupSections: () => JSX.Element;
46
48
  * @param {string} props.id - The unique identifier of the group to fetch and display
47
49
  * @returns {JSX.Element|null} The rendered group or null if invalid ID
48
50
  */
49
- declare const Group: ({ id }: GroupProps) => JSX.Element | null;
51
+ declare const Group: ({ id, enablePullToRefresh, onRefresh }: GroupProps) => JSX.Element | null;
50
52
  export default Group;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hook to invalidate SDK data
3
+ * @returns Methods to trigger SDK data updates
4
+ */
5
+ export declare function useInvalidateData(): {
6
+ invalidateGroupData: () => void;
7
+ invalidateSectionData: (sectionId?: string) => void;
8
+ invalidateTileData: (tileId?: string) => void;
9
+ };
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { RefreshControl } from 'react-native';
3
+ type UsePullToRefreshProps = {
4
+ onRefresh?: () => Promise<void>;
5
+ refreshing?: boolean;
6
+ };
7
+ export declare function usePullToRefresh({ onRefresh, refreshing: externalRefreshing, }?: UsePullToRefreshProps): {
8
+ refreshControl: React.CElement<import("react-native").RefreshControlProps, RefreshControl>;
9
+ refreshing: boolean;
10
+ handleRefresh: () => Promise<void>;
11
+ };
12
+ export {};
@@ -2,6 +2,8 @@ export * from './components/atoms';
2
2
  export * from './components/molecules';
3
3
  export * from './components/organisms';
4
4
  export * from './context/WllSdkContext';
5
+ export { useInvalidateData } from './hooks/useInvalidateData';
6
+ export { usePullToRefresh } from './hooks/usePullToRefresh';
5
7
  export * from './types/common';
6
8
  export * from './types/group';
7
9
  export * from './types/navigation';
package/dist/web.js CHANGED
@@ -20758,6 +20758,98 @@ var useInitialGroupFetch = function (_a) {
20758
20758
  };
20759
20759
  };
20760
20760
 
20761
+ /**
20762
+ * Hook to invalidate SDK data
20763
+ * @returns Methods to trigger SDK data updates
20764
+ */
20765
+ function useInvalidateData() {
20766
+ var sdk = useWllSdk();
20767
+ return {
20768
+ invalidateGroupData: function () {
20769
+ if (sdk) {
20770
+ sdk.notifyDataChange('GROUP_DATA_CHANGED');
20771
+ }
20772
+ },
20773
+ invalidateSectionData: function (sectionId) {
20774
+ if (sdk) {
20775
+ sdk.notifyDataChange('SECTION_DATA_CHANGED', {
20776
+ sectionId: sectionId
20777
+ });
20778
+ }
20779
+ },
20780
+ invalidateTileData: function (tileId) {
20781
+ if (sdk) {
20782
+ sdk.notifyDataChange('TILE_DATA_CHANGED', {
20783
+ tileId: tileId
20784
+ });
20785
+ }
20786
+ }
20787
+ };
20788
+ }
20789
+
20790
+ function usePullToRefresh(_a) {
20791
+ var _this = this;
20792
+ var _b = _a === void 0 ? {} : _a,
20793
+ onRefresh = _b.onRefresh,
20794
+ externalRefreshing = _b.refreshing;
20795
+ var _c = React.useState(false),
20796
+ internalRefreshing = _c[0],
20797
+ setInternalRefreshing = _c[1];
20798
+ var invalidateGroupData = useInvalidateData().invalidateGroupData;
20799
+ var refreshing = externalRefreshing !== null && externalRefreshing !== void 0 ? externalRefreshing : internalRefreshing;
20800
+ var handleRefresh = React.useCallback(function () {
20801
+ return __awaiter(_this, void 0, void 0, function () {
20802
+ var error_1;
20803
+ return __generator(this, function (_a) {
20804
+ switch (_a.label) {
20805
+ case 0:
20806
+ if (refreshing) return [2 /*return*/];
20807
+ setInternalRefreshing(true);
20808
+ _a.label = 1;
20809
+ case 1:
20810
+ _a.trys.push([1, 6, 7, 8]);
20811
+ if (!onRefresh) return [3 /*break*/, 3];
20812
+ return [4 /*yield*/, onRefresh()];
20813
+ case 2:
20814
+ _a.sent();
20815
+ return [3 /*break*/, 5];
20816
+ case 3:
20817
+ // Default behavior: refresh all group data
20818
+ invalidateGroupData();
20819
+ // Add a small delay to show the refresh animation
20820
+ return [4 /*yield*/, new Promise(function (resolve) {
20821
+ return setTimeout(resolve, 1000);
20822
+ })];
20823
+ case 4:
20824
+ // Add a small delay to show the refresh animation
20825
+ _a.sent();
20826
+ _a.label = 5;
20827
+ case 5:
20828
+ return [3 /*break*/, 8];
20829
+ case 6:
20830
+ error_1 = _a.sent();
20831
+ console.error('Pull to refresh failed:', error_1);
20832
+ return [3 /*break*/, 8];
20833
+ case 7:
20834
+ setInternalRefreshing(false);
20835
+ return [7 /*endfinally*/];
20836
+ case 8:
20837
+ return [2 /*return*/];
20838
+ }
20839
+ });
20840
+ });
20841
+ }, [refreshing, onRefresh, invalidateGroupData]);
20842
+ var refreshControl = /*#__PURE__*/React.createElement(RefreshControl, {
20843
+ refreshing: refreshing,
20844
+ onRefresh: handleRefresh
20845
+ });
20846
+ return {
20847
+ refreshControl: refreshControl,
20848
+ refreshing: refreshing,
20849
+ handleRefresh: handleRefresh
20850
+ };
20851
+ }
20852
+
20761
20853
  exports.SectionType = void 0;
20762
20854
  (function (SectionType) {
20763
20855
  SectionType["Grid"] = "GRID";
@@ -21535,7 +21627,8 @@ var GroupSections = function () {
21535
21627
  });
21536
21628
  }
21537
21629
  var sortedSections = sortByPriority(activeSections);
21538
- return /*#__PURE__*/React.createElement(View$2, {
21630
+ var Container = IS_WEB ? View$2 : ScrollView$2;
21631
+ return /*#__PURE__*/React.createElement(Container, {
21539
21632
  accessible: true,
21540
21633
  accessibilityLabel: "Group: ".concat(groupData.name || 'Unnamed group'),
21541
21634
  role: "region"
@@ -21559,17 +21652,26 @@ var GroupSections = function () {
21559
21652
  * @returns {JSX.Element|null} The rendered group or null if invalid ID
21560
21653
  */
21561
21654
  var Group = function (_a) {
21562
- var id = _a.id;
21655
+ var id = _a.id,
21656
+ _b = _a.enablePullToRefresh,
21657
+ enablePullToRefresh = _b === void 0 ? true : _b,
21658
+ onRefresh = _a.onRefresh;
21563
21659
  if (!id) {
21564
21660
  console.warn('Group component requires id prop');
21565
21661
  return null;
21566
21662
  }
21567
- var _b = useGroupData(id),
21568
- groupData = _b.groupData,
21569
- isLoading = _b.isLoading,
21570
- error = _b.error;
21663
+ var _c = useGroupData(id),
21664
+ groupData = _c.groupData,
21665
+ isLoading = _c.isLoading,
21666
+ error = _c.error;
21571
21667
  var theme = useWllSdk().theme;
21572
- if (isLoading) {
21668
+ var _d = usePullToRefresh({
21669
+ onRefresh: onRefresh,
21670
+ refreshing: isLoading && !groupData
21671
+ }),
21672
+ refreshControl = _d.refreshControl;
21673
+ _d.refreshing;
21674
+ if (isLoading && !groupData) {
21573
21675
  return /*#__PURE__*/React.createElement(View$2, {
21574
21676
  style: {
21575
21677
  flex: 1,
@@ -21586,13 +21688,18 @@ var Group = function (_a) {
21586
21688
  message: error || 'No group data available'
21587
21689
  });
21588
21690
  }
21691
+ var Container = IS_WEB ? View$2 : ScrollView$2;
21692
+ var containerProps = IS_WEB ? {} : {
21693
+ refreshControl: enablePullToRefresh ? refreshControl : undefined,
21694
+ showsVerticalScrollIndicator: true
21695
+ };
21589
21696
  return /*#__PURE__*/React.createElement(GroupContext.Provider, {
21590
21697
  value: {
21591
21698
  groupData: groupData
21592
21699
  }
21593
21700
  }, /*#__PURE__*/React.createElement(View$2, {
21594
21701
  testID: "group-container"
21595
- }, /*#__PURE__*/React.createElement(GroupSections, null)));
21702
+ }, /*#__PURE__*/React.createElement(Container, __assign({}, containerProps), /*#__PURE__*/React.createElement(GroupSections, null))));
21596
21703
  };
21597
21704
 
21598
21705
  /**
@@ -22859,5 +22966,7 @@ exports.TileContainer = TileContainer;
22859
22966
  exports.WllSdkProvider = WllSdkProvider;
22860
22967
  exports.alignMap = alignMap;
22861
22968
  exports.justifyMap = justifyMap;
22969
+ exports.useInvalidateData = useInvalidateData;
22970
+ exports.usePullToRefresh = usePullToRefresh;
22862
22971
  exports.useWllSdk = useWllSdk;
22863
22972
  //# sourceMappingURL=web.js.map