bs-unified-ui 1.0.929 → 1.0.930

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.
@@ -4,3 +4,4 @@ export * from './NotificationContext';
4
4
  export * from './NotificationService';
5
5
  export type { AuthConfig } from './AuthManager';
6
6
  export type { UseNotificationsResult, UseNotificationsOptions, } from './useNotifications';
7
+ export type { UseNotificationsV2Result, UseNotificationsOptions as UseNotificationsV2Options, } from './useNotificationsV2';
package/index.js CHANGED
@@ -45775,12 +45775,10 @@ var ObservableSet = /** @class */ (function () {
45775
45775
  return ObservableSet;
45776
45776
  }());
45777
45777
 
45778
- // Constant empty array to avoid recreating on each render
45779
- var EMPTY_WAREHOUSES_CONFIG = [];
45780
45778
  var useNotificationsV2 = function (options) {
45781
45779
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
45782
45780
  if (options === void 0) { options = {}; }
45783
- var onNotification = options.onNotification, onConnectionChange = options.onConnectionChange, onError = options.onError, _k = options.timezone, timezone = _k === void 0 ? 'America/Vancouver' : _k, navigate = options.navigate, bsOrgId = options.bsOrgId, cfWsId = options.cfWsId, soundConfig = options.soundConfig, triggerEvents = options.triggerEvents, _l = options.warehousesConfig, warehousesConfig = _l === void 0 ? EMPTY_WAREHOUSES_CONFIG : _l;
45781
+ var onNotification = options.onNotification, onConnectionChange = options.onConnectionChange, onError = options.onError, _k = options.timezone, timezone = _k === void 0 ? 'America/Vancouver' : _k, navigate = options.navigate, bsOrgId = options.bsOrgId, cfWsId = options.cfWsId, soundConfig = options.soundConfig, triggerEvents = options.triggerEvents, _l = options.warehousesConfig, warehousesConfig = _l === void 0 ? [] : _l;
45784
45782
  var _m = React.useState([]), popoverNotifications = _m[0], setPopoverNotifications = _m[1];
45785
45783
  var _o = React.useState(true), popoverLoading = _o[0], setPopoverLoading = _o[1];
45786
45784
  var _p = React.useState(false), popoverHasNextPage = _p[0], setPopoverHasNextPage = _p[1];
@@ -45849,10 +45847,11 @@ var useNotificationsV2 = function (options) {
45849
45847
  var playAudioForGroupRef = React.useRef(function () { });
45850
45848
  var fetchIndicatorsInFlightRef = React.useRef(false);
45851
45849
  var fetchAudioRepeatInFlightRef = React.useRef(false);
45850
+ var loadPopoverNotificationsInFlightRef = React.useRef(false);
45852
45851
  var onErrorRef = React.useRef(onError);
45853
45852
  var onNotificationRef = React.useRef(onNotification);
45854
45853
  var onConnectionChangeRef = React.useRef(onConnectionChange);
45855
- var warehousesConfigRef = React.useRef(warehousesConfig);
45854
+ var warehousesConfigRef = React.useRef([]);
45856
45855
  // Track current pathname for display indicators
45857
45856
  var currentPath = useCurrentPath();
45858
45857
  // Check which page user is currently on
@@ -45935,7 +45934,14 @@ var useNotificationsV2 = function (options) {
45935
45934
  memoizedTriggerEvents === null || memoizedTriggerEvents === void 0 ? void 0 : memoizedTriggerEvents[DELIVERY_EVENTS.NEW_DRIVER],
45936
45935
  ]);
45937
45936
  // Memoize warehousesConfig to prevent recreating when array content is the same
45938
- var memoizedWarehousesConfig = React.useMemo(function () { return warehousesConfig; }, [JSON.stringify(warehousesConfig)]);
45937
+ var memoizedWarehousesConfig = React.useMemo(function () {
45938
+ var prev = warehousesConfigRef.current;
45939
+ if (prev.length === warehousesConfig.length &&
45940
+ prev.every(function (val, idx) { return val === warehousesConfig[idx]; })) {
45941
+ return prev;
45942
+ }
45943
+ return warehousesConfig;
45944
+ }, [warehousesConfig]);
45939
45945
  var markAsRead = React.useCallback(function (notificationId) { return __awaiter(void 0, void 0, void 0, function () {
45940
45946
  var err_1, errorMessage;
45941
45947
  var _a;
@@ -46083,9 +46089,14 @@ var useNotificationsV2 = function (options) {
46083
46089
  case 0:
46084
46090
  if (!serviceRef.current)
46085
46091
  return [2 /*return*/];
46092
+ // Guard: Skip if already loading to prevent duplicate calls
46093
+ if (loadPopoverNotificationsInFlightRef.current) {
46094
+ return [2 /*return*/];
46095
+ }
46086
46096
  _b.label = 1;
46087
46097
  case 1:
46088
46098
  _b.trys.push([1, 3, 4, 5]);
46099
+ loadPopoverNotificationsInFlightRef.current = true;
46089
46100
  return [4 /*yield*/, serviceRef.current.loadNotifications(params)];
46090
46101
  case 2:
46091
46102
  data_1 = _b.sent();
@@ -46110,6 +46121,7 @@ var useNotificationsV2 = function (options) {
46110
46121
  case 4:
46111
46122
  if (!(params === null || params === void 0 ? void 0 : params.lastNotificationId))
46112
46123
  setPopoverLoading(false);
46124
+ loadPopoverNotificationsInFlightRef.current = false;
46113
46125
  return [7 /*endfinally*/];
46114
46126
  case 5: return [2 /*return*/];
46115
46127
  }
@@ -46268,7 +46280,6 @@ var useNotificationsV2 = function (options) {
46268
46280
  });
46269
46281
  }); }, [
46270
46282
  bsOrgId,
46271
- memoizedWarehousesConfig,
46272
46283
  memoizedTriggerEvents,
46273
46284
  playAudioForGroup,
46274
46285
  startAudioRepeatForGroup,
@@ -46907,7 +46918,12 @@ var useNotificationsV2 = function (options) {
46907
46918
  fetchAudioRepeatTimerRef.current = null;
46908
46919
  }, 3000);
46909
46920
  }
46910
- }, [fetchAudioRepeat, memoizedSoundConfig, memoizedReminderEvents, memoizedWarehousesConfig]);
46921
+ }, [
46922
+ fetchAudioRepeat,
46923
+ memoizedSoundConfig,
46924
+ memoizedReminderEvents,
46925
+ memoizedWarehousesConfig,
46926
+ ]);
46911
46927
  // Restart interval when repeatingInterval or mute changes per group
46912
46928
  React.useEffect(function () {
46913
46929
  if (!memoizedSoundConfig)
@@ -47213,6 +47229,66 @@ var NotificationToast = React.forwardRef(function (props, ref) {
47213
47229
  });
47214
47230
 
47215
47231
  var NotificationContext = React.createContext(null);
47232
+ /**
47233
+ * Creates a default notification context with safe default values
47234
+ * Used when Provider is not mounted or not yet initialized
47235
+ */
47236
+ function createDefaultNotificationContext() {
47237
+ var _this = this;
47238
+ return {
47239
+ popoverLoading: false,
47240
+ popoverHasNextPage: false,
47241
+ isUnreadPopover: false,
47242
+ popoverNotifications: [],
47243
+ timezone: 'America/Vancouver',
47244
+ filter: undefined,
47245
+ notifications: [],
47246
+ notificationLoading: false,
47247
+ unreadCount: 0,
47248
+ isConnected: false,
47249
+ loading: false,
47250
+ error: null,
47251
+ isInitialized: false,
47252
+ hasNextPage: false,
47253
+ indicators: {
47254
+ order: false,
47255
+ chat: false,
47256
+ task_update: false,
47257
+ new_driver: false,
47258
+ },
47259
+ allReminders: new ObservableSet(),
47260
+ setIsUnreadPopover: function () { },
47261
+ connect: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47262
+ return [2 /*return*/];
47263
+ }); }); },
47264
+ disconnect: function () { },
47265
+ loadNotifications: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47266
+ return [2 /*return*/];
47267
+ }); }); },
47268
+ loadMorePopoverNotifications: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47269
+ return [2 /*return*/];
47270
+ }); }); },
47271
+ markAsRead: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47272
+ return [2 /*return*/];
47273
+ }); }); },
47274
+ markAllAsRead: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47275
+ return [2 /*return*/];
47276
+ }); }); },
47277
+ retry: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47278
+ return [2 /*return*/];
47279
+ }); }); },
47280
+ refreshAuth: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47281
+ return [2 /*return*/];
47282
+ }); }); },
47283
+ handleClickNotification: function () { },
47284
+ handleApplyFilter: function () { },
47285
+ redirectToNotificationPage: function () { },
47286
+ setIsActiveNotificationPage: function () { },
47287
+ updateIndicators: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
47288
+ return [2 /*return*/];
47289
+ }); }); },
47290
+ };
47291
+ }
47216
47292
  var NotificationProviderBase = function (_a) {
47217
47293
  var children = _a.children, config = _a.config, useNotificationsHook = _a.useNotificationsHook;
47218
47294
  // Use refs to store callbacks to avoid recreating them
@@ -47296,13 +47372,15 @@ var NotificationProvider = function (_a) {
47296
47372
  }, [config]);
47297
47373
  // Memoize the hook selection
47298
47374
  var useNotificationsHook = React.useMemo(function () { return (isV2 ? useNotificationsV2 : useNotifications); }, [isV2]);
47299
- return (React.createElement(NotificationProviderBase, { config: restConfig, useNotificationsHook: useNotificationsHook }, children));
47375
+ return (React.createElement(NotificationProviderBase, { key: isV2 ? 'v2' : 'v1', config: restConfig, useNotificationsHook: useNotificationsHook }, children));
47300
47376
  };
47301
47377
  var useNotificationContext = function () {
47302
47378
  var context = React.useContext(NotificationContext);
47303
47379
  if (!context) {
47304
- throw new Error('useNotificationContext must be used within NotificationProvider. ' +
47305
- 'Wrap your app with <NotificationProvider> at the root level.');
47380
+ // eslint-disable-next-line no-console
47381
+ console.warn('useNotificationContext: No NotificationProvider found. ' +
47382
+ 'Returning default values. Wrap your app with <NotificationProvider> at the root level.');
47383
+ return createDefaultNotificationContext();
47306
47384
  }
47307
47385
  return context;
47308
47386
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bs-unified-ui",
3
- "version": "1.0.929",
3
+ "version": "1.0.930",
4
4
  "license": "MIT",
5
5
  "author": "Advesa",
6
6
  "description": "UI Components for Unified Breadstack UI",