@apvee/spfx-react-toolkit 1.2.1 → 2.0.0

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.
Files changed (138) hide show
  1. package/lib/core/atoms.internal.js +1 -1
  2. package/lib/core/atoms.internal.js.map +1 -1
  3. package/lib/core/context.internal.js +2 -2
  4. package/lib/core/context.internal.js.map +1 -1
  5. package/lib/core/provider-base.internal.js +29 -29
  6. package/lib/core/provider-base.internal.js.map +1 -1
  7. package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.d.ts +14 -0
  8. package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.d.ts.map +1 -0
  9. package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.js +20 -0
  10. package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.js.map +1 -0
  11. package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.manifest.json +17 -0
  12. package/lib/extensions/spFxReactToolkitTest/loc/en-us.js +5 -0
  13. package/lib/hooks/index.d.ts +1 -0
  14. package/lib/hooks/index.d.ts.map +1 -1
  15. package/lib/hooks/index.js +1 -0
  16. package/lib/hooks/index.js.map +1 -1
  17. package/lib/hooks/useAppCatalogUrl.internal.d.ts +26 -0
  18. package/lib/hooks/useAppCatalogUrl.internal.d.ts.map +1 -0
  19. package/lib/hooks/useAppCatalogUrl.internal.js +72 -0
  20. package/lib/hooks/useAppCatalogUrl.internal.js.map +1 -0
  21. package/lib/hooks/useAsyncInvoke.internal.js +27 -75
  22. package/lib/hooks/useAsyncInvoke.internal.js.map +1 -1
  23. package/lib/hooks/useSPFxAadHttpClient.d.ts +46 -0
  24. package/lib/hooks/useSPFxAadHttpClient.d.ts.map +1 -1
  25. package/lib/hooks/useSPFxAadHttpClient.js +65 -20
  26. package/lib/hooks/useSPFxAadHttpClient.js.map +1 -1
  27. package/lib/hooks/useSPFxContainerInfo.js +5 -5
  28. package/lib/hooks/useSPFxContainerInfo.js.map +1 -1
  29. package/lib/hooks/useSPFxContainerSize.js +9 -10
  30. package/lib/hooks/useSPFxContainerSize.js.map +1 -1
  31. package/lib/hooks/useSPFxCorrelationInfo.js +6 -7
  32. package/lib/hooks/useSPFxCorrelationInfo.js.map +1 -1
  33. package/lib/hooks/useSPFxCrossSitePermissions.js +48 -58
  34. package/lib/hooks/useSPFxCrossSitePermissions.js.map +1 -1
  35. package/lib/hooks/useSPFxDisplayMode.js +8 -8
  36. package/lib/hooks/useSPFxDisplayMode.js.map +1 -1
  37. package/lib/hooks/useSPFxEnvironmentInfo.js +17 -18
  38. package/lib/hooks/useSPFxEnvironmentInfo.js.map +1 -1
  39. package/lib/hooks/useSPFxFluent9ThemeInfo.js +4 -4
  40. package/lib/hooks/useSPFxFluent9ThemeInfo.js.map +1 -1
  41. package/lib/hooks/useSPFxHttpClient.d.ts +18 -2
  42. package/lib/hooks/useSPFxHttpClient.d.ts.map +1 -1
  43. package/lib/hooks/useSPFxHttpClient.js +19 -9
  44. package/lib/hooks/useSPFxHttpClient.js.map +1 -1
  45. package/lib/hooks/useSPFxHubSiteInfo.js +21 -24
  46. package/lib/hooks/useSPFxHubSiteInfo.js.map +1 -1
  47. package/lib/hooks/useSPFxInstanceInfo.js +2 -2
  48. package/lib/hooks/useSPFxInstanceInfo.js.map +1 -1
  49. package/lib/hooks/useSPFxListInfo.js +8 -9
  50. package/lib/hooks/useSPFxListInfo.js.map +1 -1
  51. package/lib/hooks/useSPFxLocaleInfo.js +10 -10
  52. package/lib/hooks/useSPFxLocaleInfo.js.map +1 -1
  53. package/lib/hooks/useSPFxLogger.js +26 -26
  54. package/lib/hooks/useSPFxLogger.js.map +1 -1
  55. package/lib/hooks/useSPFxMSGraphClient.d.ts +50 -3
  56. package/lib/hooks/useSPFxMSGraphClient.d.ts.map +1 -1
  57. package/lib/hooks/useSPFxMSGraphClient.js +68 -15
  58. package/lib/hooks/useSPFxMSGraphClient.js.map +1 -1
  59. package/lib/hooks/useSPFxOneDriveAppData.d.ts +0 -1
  60. package/lib/hooks/useSPFxOneDriveAppData.d.ts.map +1 -1
  61. package/lib/hooks/useSPFxOneDriveAppData.js +420 -230
  62. package/lib/hooks/useSPFxOneDriveAppData.js.map +1 -1
  63. package/lib/hooks/useSPFxPageContext.js +2 -2
  64. package/lib/hooks/useSPFxPageContext.js.map +1 -1
  65. package/lib/hooks/useSPFxPageType.js +19 -20
  66. package/lib/hooks/useSPFxPageType.js.map +1 -1
  67. package/lib/hooks/useSPFxPerformance.js +33 -87
  68. package/lib/hooks/useSPFxPerformance.js.map +1 -1
  69. package/lib/hooks/useSPFxPermissions.js +14 -15
  70. package/lib/hooks/useSPFxPermissions.js.map +1 -1
  71. package/lib/hooks/useSPFxPnP.js +62 -119
  72. package/lib/hooks/useSPFxPnP.js.map +1 -1
  73. package/lib/hooks/useSPFxPnPContext.js +22 -25
  74. package/lib/hooks/useSPFxPnPContext.js.map +1 -1
  75. package/lib/hooks/useSPFxPnPList.js +307 -451
  76. package/lib/hooks/useSPFxPnPList.js.map +1 -1
  77. package/lib/hooks/useSPFxPnPSearch.js +262 -353
  78. package/lib/hooks/useSPFxPnPSearch.js.map +1 -1
  79. package/lib/hooks/useSPFxProperties.js +12 -20
  80. package/lib/hooks/useSPFxProperties.js.map +1 -1
  81. package/lib/hooks/useSPFxSPHttpClient.d.ts +18 -2
  82. package/lib/hooks/useSPFxSPHttpClient.d.ts.map +1 -1
  83. package/lib/hooks/useSPFxSPHttpClient.js +28 -18
  84. package/lib/hooks/useSPFxSPHttpClient.js.map +1 -1
  85. package/lib/hooks/useSPFxServiceScope.js +6 -6
  86. package/lib/hooks/useSPFxServiceScope.js.map +1 -1
  87. package/lib/hooks/useSPFxSiteInfo.js +7 -8
  88. package/lib/hooks/useSPFxSiteInfo.js.map +1 -1
  89. package/lib/hooks/useSPFxStorage.js +22 -22
  90. package/lib/hooks/useSPFxStorage.js.map +1 -1
  91. package/lib/hooks/useSPFxTeams.js +37 -92
  92. package/lib/hooks/useSPFxTeams.js.map +1 -1
  93. package/lib/hooks/useSPFxTenantKeyValueStore.d.ts +252 -0
  94. package/lib/hooks/useSPFxTenantKeyValueStore.d.ts.map +1 -0
  95. package/lib/hooks/useSPFxTenantKeyValueStore.js +572 -0
  96. package/lib/hooks/useSPFxTenantKeyValueStore.js.map +1 -0
  97. package/lib/hooks/useSPFxTenantProperty.d.ts +23 -244
  98. package/lib/hooks/useSPFxTenantProperty.d.ts.map +1 -1
  99. package/lib/hooks/useSPFxTenantProperty.js +85 -559
  100. package/lib/hooks/useSPFxTenantProperty.js.map +1 -1
  101. package/lib/hooks/useSPFxUserInfo.js +3 -4
  102. package/lib/hooks/useSPFxUserInfo.js.map +1 -1
  103. package/lib/hooks/useSPFxUserPhoto.js +76 -123
  104. package/lib/hooks/useSPFxUserPhoto.js.map +1 -1
  105. package/lib/utils/resize-observer.internal.js +6 -7
  106. package/lib/utils/resize-observer.internal.js.map +1 -1
  107. package/lib/utils/theme-subscription.internal.js +8 -8
  108. package/lib/utils/theme-subscription.internal.js.map +1 -1
  109. package/lib/utils/type-guards.internal.js +6 -6
  110. package/lib/utils/type-guards.internal.js.map +1 -1
  111. package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js +12 -37
  112. package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js.map +1 -1
  113. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.d.ts.map +1 -1
  114. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js +279 -342
  115. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js.map +1 -1
  116. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js +1 -1
  117. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js.map +1 -1
  118. package/lib/webparts/spFxReactToolkitTest/components/demos/HttpClientDemo.js +26 -86
  119. package/lib/webparts/spFxReactToolkitTest/components/demos/HttpClientDemo.js.map +1 -1
  120. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPContextDemo.js +53 -113
  121. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPContextDemo.js.map +1 -1
  122. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPListDemo.js +49 -121
  123. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPListDemo.js.map +1 -1
  124. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPOperationsDemo.js +44 -103
  125. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPOperationsDemo.js.map +1 -1
  126. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchAdvancedDemo.js +15 -15
  127. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchAdvancedDemo.js.map +1 -1
  128. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchBasicDemo.js +18 -66
  129. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchBasicDemo.js.map +1 -1
  130. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchRefinersDemo.js +9 -9
  131. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchRefinersDemo.js.map +1 -1
  132. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchSuggestionsDemo.js +37 -86
  133. package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchSuggestionsDemo.js.map +1 -1
  134. package/lib/webparts/spFxReactToolkitTest/components/shared/InfoRow.js +6 -9
  135. package/lib/webparts/spFxReactToolkitTest/components/shared/InfoRow.js.map +1 -1
  136. package/lib/webparts/spFxReactToolkitTest/components/shared/StatusBadge.js +3 -6
  137. package/lib/webparts/spFxReactToolkitTest/components/shared/StatusBadge.js.map +1 -1
  138. package/package.json +8 -6
@@ -1,39 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
1
  import { useState, useEffect, useCallback, useRef } from 'react';
38
2
  import { useSPFxPnPContext } from './useSPFxPnPContext';
39
3
  /**
@@ -390,54 +354,49 @@ import { useSPFxPnPContext } from './useSPFxPnPContext';
390
354
  * @see {@link PNPContextInfo} for context information
391
355
  */
392
356
  export function useSPFxPnPList(listTitle, options, pnpContext) {
393
- var _this = this;
394
357
  // Get PnP context (use provided context or create default)
395
- var defaultContext = useSPFxPnPContext();
396
- var context = pnpContext || defaultContext;
358
+ const defaultContext = useSPFxPnPContext();
359
+ const context = pnpContext || defaultContext;
397
360
  // Use the native SPFI instance from context
398
- var sp = context === null || context === void 0 ? void 0 : context.sp;
361
+ const sp = context?.sp;
399
362
  // Default pageSize from hook options
400
- var defaultPageSize = options === null || options === void 0 ? void 0 : options.pageSize;
363
+ const defaultPageSize = options?.pageSize;
401
364
  // Local state management
402
- var _a = useState([]), items = _a[0], setItems = _a[1];
403
- var _b = useState(false), loading = _b[0], setLoading = _b[1];
404
- var _c = useState(false), loadingMore = _c[0], setLoadingMore = _c[1];
405
- var _d = useState(), error = _d[0], setError = _d[1];
406
- var _e = useState(false), hasMore = _e[0], setHasMore = _e[1];
365
+ const [items, setItems] = useState([]);
366
+ const [loading, setLoading] = useState(false);
367
+ const [loadingMore, setLoadingMore] = useState(false);
368
+ const [error, setError] = useState();
369
+ const [hasMore, setHasMore] = useState(false);
407
370
  // State for tracking last query (needed for refetch and loadMore)
408
- var _f = useState(undefined), lastQueryBuilder = _f[0], setLastQueryBuilder = _f[1];
409
- var _g = useState(undefined), lastEffectivePageSize = _g[0], setLastEffectivePageSize = _g[1];
410
- var _h = useState(0), currentSkip = _h[0], setCurrentSkip = _h[1];
371
+ const [lastQueryBuilder, setLastQueryBuilder] = useState(undefined);
372
+ const [lastEffectivePageSize, setLastEffectivePageSize] = useState(undefined);
373
+ const [currentSkip, setCurrentSkip] = useState(0);
411
374
  // Refs
412
- var refetchTimeoutRef = useRef(undefined);
413
- var mountedRef = useRef(true);
375
+ const refetchTimeoutRef = useRef(undefined);
376
+ const mountedRef = useRef(true);
414
377
  // Clear error handler
415
- var clearError = useCallback(function () {
378
+ const clearError = useCallback(() => {
416
379
  setError(undefined);
417
380
  }, []);
418
381
  /**
419
382
  * Helper: Creates a recursive Proxy to track .top() calls in queryBuilder.
420
383
  * This allows automatic detection of user-specified page size.
421
384
  */
422
- var createMonitoredQuery = useCallback(function (target, tracker) {
385
+ const createMonitoredQuery = useCallback((target, tracker) => {
423
386
  /* eslint-disable @typescript-eslint/no-explicit-any */
424
387
  return new Proxy(target, {
425
388
  get: function (t, prop) {
426
389
  if (prop === 'top') {
427
390
  return function (n) {
428
391
  tracker.top = n;
429
- var result = t.top.call(t, n);
392
+ const result = t.top.call(t, n);
430
393
  return createMonitoredQuery(result, tracker);
431
394
  };
432
395
  }
433
- var value = t[prop];
396
+ const value = t[prop];
434
397
  if (typeof value === 'function') {
435
- return function () {
436
- var args = [];
437
- for (var _i = 0; _i < arguments.length; _i++) {
438
- args[_i] = arguments[_i];
439
- }
440
- var result = value.apply(t, args);
398
+ return function (...args) {
399
+ const result = value.apply(t, args);
441
400
  if (result && typeof result === 'object' && typeof result.select === 'function') {
442
401
  return createMonitoredQuery(result, tracker);
443
402
  }
@@ -452,107 +411,91 @@ export function useSPFxPnPList(listTitle, options, pnpContext) {
452
411
  /**
453
412
  * Executes a query with automatic .top() detection.
454
413
  */
455
- var query = useCallback(function (queryBuilder, queryOptions) { return __awaiter(_this, void 0, void 0, function () {
456
- var err, pageSize, baseQuery, tracker, monitored, userQuery, finalQuery, effectivePageSize, result, err_1;
457
- var _a;
458
- return __generator(this, function (_b) {
459
- switch (_b.label) {
460
- case 0:
461
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
462
- err = new Error('[useSPFxPnPList] PnP context not initialized. Ensure @pnp/sp is installed.');
463
- setError(err);
464
- throw err;
465
- }
466
- setLoading(true);
467
- setError(undefined);
468
- _b.label = 1;
469
- case 1:
470
- _b.trys.push([1, 3, , 4]);
471
- pageSize = (_a = queryOptions === null || queryOptions === void 0 ? void 0 : queryOptions.pageSize) !== null && _a !== void 0 ? _a : defaultPageSize;
472
- baseQuery = sp.web.lists.getByTitle(listTitle).items;
473
- tracker = { top: undefined };
474
- monitored = createMonitoredQuery(baseQuery, tracker);
475
- userQuery = queryBuilder ? queryBuilder(monitored) : monitored;
476
- finalQuery = void 0;
477
- effectivePageSize = void 0;
478
- // Warning if both specified
479
- if (tracker.top !== undefined && pageSize !== undefined) {
480
- console.warn("[useSPFxPnPList] Both .top(".concat(tracker.top, ") and pageSize(").concat(pageSize, ") specified. ") +
481
- "Using .top(".concat(tracker.top, ")."));
482
- }
483
- if (tracker.top !== undefined) {
484
- // User specified .top() explicitly
485
- finalQuery = userQuery;
486
- effectivePageSize = tracker.top;
487
- }
488
- else if (pageSize !== undefined) {
489
- // Use pageSize option
490
- finalQuery = userQuery.top(pageSize);
491
- effectivePageSize = pageSize;
492
- }
493
- else {
494
- // No pagination
495
- finalQuery = userQuery;
496
- effectivePageSize = undefined;
497
- }
498
- return [4 /*yield*/, finalQuery()];
499
- case 2:
500
- result = _b.sent();
501
- if (!mountedRef.current)
502
- return [2 /*return*/, result];
503
- // Update state
504
- setItems(result);
505
- setLastQueryBuilder(function () { return queryBuilder; });
506
- setLastEffectivePageSize(effectivePageSize);
507
- setCurrentSkip(result.length);
508
- // hasMore only meaningful with pagination
509
- if (effectivePageSize !== undefined) {
510
- setHasMore(result.length === effectivePageSize);
511
- }
512
- else {
513
- setHasMore(false);
514
- }
515
- setLoading(false);
516
- return [2 /*return*/, result];
517
- case 3:
518
- err_1 = _b.sent();
519
- if (mountedRef.current) {
520
- setError(err_1);
521
- setLoading(false);
522
- }
523
- throw err_1;
524
- case 4: return [2 /*return*/];
414
+ const query = useCallback(async (queryBuilder, queryOptions) => {
415
+ if (!sp || !context?.isInitialized) {
416
+ const err = new Error('[useSPFxPnPList] PnP context not initialized. Ensure @pnp/sp is installed.');
417
+ setError(err);
418
+ throw err;
419
+ }
420
+ setLoading(true);
421
+ setError(undefined);
422
+ try {
423
+ const pageSize = queryOptions?.pageSize ?? defaultPageSize;
424
+ const baseQuery = sp.web.lists.getByTitle(listTitle).items;
425
+ // Track .top() calls with Proxy
426
+ const tracker = { top: undefined };
427
+ const monitored = createMonitoredQuery(baseQuery, tracker);
428
+ // Build user query
429
+ const userQuery = queryBuilder ? queryBuilder(monitored) : monitored;
430
+ // Smart decision: user .top() > pageSize option > no limit
431
+ let finalQuery;
432
+ let effectivePageSize;
433
+ // Warning if both specified
434
+ if (tracker.top !== undefined && pageSize !== undefined) {
435
+ console.warn(`[useSPFxPnPList] Both .top(${tracker.top}) and pageSize(${pageSize}) specified. ` +
436
+ `Using .top(${tracker.top}).`);
525
437
  }
526
- });
527
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, defaultPageSize, createMonitoredQuery]);
438
+ if (tracker.top !== undefined) {
439
+ // User specified .top() explicitly
440
+ finalQuery = userQuery;
441
+ effectivePageSize = tracker.top;
442
+ }
443
+ else if (pageSize !== undefined) {
444
+ // Use pageSize option
445
+ finalQuery = userQuery.top(pageSize);
446
+ effectivePageSize = pageSize;
447
+ }
448
+ else {
449
+ // No pagination
450
+ finalQuery = userQuery;
451
+ effectivePageSize = undefined;
452
+ }
453
+ const result = await finalQuery();
454
+ if (!mountedRef.current)
455
+ return result;
456
+ // Update state
457
+ setItems(result);
458
+ setLastQueryBuilder(() => queryBuilder);
459
+ setLastEffectivePageSize(effectivePageSize);
460
+ setCurrentSkip(result.length);
461
+ // hasMore only meaningful with pagination
462
+ if (effectivePageSize !== undefined) {
463
+ setHasMore(result.length === effectivePageSize);
464
+ }
465
+ else {
466
+ setHasMore(false);
467
+ }
468
+ setLoading(false);
469
+ return result;
470
+ }
471
+ catch (err) {
472
+ if (mountedRef.current) {
473
+ setError(err);
474
+ setLoading(false);
475
+ }
476
+ throw err;
477
+ }
478
+ }, [sp, context?.isInitialized, listTitle, defaultPageSize, createMonitoredQuery]);
528
479
  /**
529
480
  * Re-executes the last query (resets pagination).
530
481
  */
531
- var refetch = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
532
- return __generator(this, function (_a) {
533
- switch (_a.label) {
534
- case 0:
535
- if (!lastQueryBuilder) {
536
- throw new Error('[useSPFxPnPList] No previous query to refetch. Call query() first.');
537
- }
538
- setCurrentSkip(0);
539
- return [4 /*yield*/, query(lastQueryBuilder, { pageSize: lastEffectivePageSize })];
540
- case 1:
541
- _a.sent();
542
- return [2 /*return*/];
543
- }
544
- });
545
- }); }, [lastQueryBuilder, lastEffectivePageSize, query]);
482
+ const refetch = useCallback(async () => {
483
+ if (!lastQueryBuilder) {
484
+ throw new Error('[useSPFxPnPList] No previous query to refetch. Call query() first.');
485
+ }
486
+ setCurrentSkip(0);
487
+ await query(lastQueryBuilder, { pageSize: lastEffectivePageSize });
488
+ }, [lastQueryBuilder, lastEffectivePageSize, query]);
546
489
  /**
547
490
  * Debounced refetch to prevent race conditions during rapid CRUD operations.
548
491
  */
549
- var debouncedRefetch = useCallback(function () {
492
+ const debouncedRefetch = useCallback(() => {
550
493
  if (refetchTimeoutRef.current) {
551
494
  clearTimeout(refetchTimeoutRef.current);
552
495
  }
553
496
  refetchTimeoutRef.current = setTimeout(function () {
554
497
  refetch().catch(function (err) {
555
- var error = err;
498
+ const error = err;
556
499
  console.error('[useSPFxPnPList] Debounced refetch error:', error);
557
500
  setError(error);
558
501
  });
@@ -561,318 +504,231 @@ export function useSPFxPnPList(listTitle, options, pnpContext) {
561
504
  /**
562
505
  * Loads more items (pagination with last query).
563
506
  */
564
- var loadMore = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
565
- var baseQuery, tracker, monitored, userQuery, finalQuery, result_1, err_2;
566
- return __generator(this, function (_a) {
567
- switch (_a.label) {
568
- case 0:
569
- if (!lastQueryBuilder) {
570
- throw new Error('[useSPFxPnPList] No previous query. Call query() first.');
571
- }
572
- if (lastEffectivePageSize === undefined) {
573
- throw new Error('[useSPFxPnPList] Cannot loadMore without pageSize. Specify .top() or pageSize option in query().');
574
- }
575
- if (loadingMore || loading) {
576
- return [2 /*return*/, []];
577
- }
578
- setLoadingMore(true);
579
- _a.label = 1;
580
- case 1:
581
- _a.trys.push([1, 3, , 4]);
582
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
583
- throw new Error('[useSPFxPnPList] PnP context not initialized');
584
- }
585
- baseQuery = sp.web.lists.getByTitle(listTitle).items;
586
- tracker = { top: undefined };
587
- monitored = createMonitoredQuery(baseQuery, tracker);
588
- userQuery = lastQueryBuilder(monitored);
589
- finalQuery = userQuery.skip(currentSkip).top(lastEffectivePageSize);
590
- return [4 /*yield*/, finalQuery()];
591
- case 2:
592
- result_1 = _a.sent();
593
- if (!mountedRef.current)
594
- return [2 /*return*/, result_1];
595
- setItems(function (prevItems) {
596
- return prevItems.concat(result_1);
597
- });
598
- setCurrentSkip(function (prev) {
599
- return prev + result_1.length;
600
- });
601
- setHasMore(result_1.length === lastEffectivePageSize);
602
- setLoadingMore(false);
603
- return [2 /*return*/, result_1];
604
- case 3:
605
- err_2 = _a.sent();
606
- if (mountedRef.current) {
607
- setError(err_2);
608
- setLoadingMore(false);
609
- }
610
- throw err_2;
611
- case 4: return [2 /*return*/];
507
+ const loadMore = useCallback(async () => {
508
+ if (!lastQueryBuilder) {
509
+ throw new Error('[useSPFxPnPList] No previous query. Call query() first.');
510
+ }
511
+ if (lastEffectivePageSize === undefined) {
512
+ throw new Error('[useSPFxPnPList] Cannot loadMore without pageSize. Specify .top() or pageSize option in query().');
513
+ }
514
+ if (loadingMore || loading) {
515
+ return [];
516
+ }
517
+ setLoadingMore(true);
518
+ try {
519
+ if (!sp || !context?.isInitialized) {
520
+ throw new Error('[useSPFxPnPList] PnP context not initialized');
612
521
  }
613
- });
614
- }); }, [lastQueryBuilder, lastEffectivePageSize, loadingMore, loading, sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, currentSkip, createMonitoredQuery]);
522
+ const baseQuery = sp.web.lists.getByTitle(listTitle).items;
523
+ const tracker = { top: undefined };
524
+ const monitored = createMonitoredQuery(baseQuery, tracker);
525
+ const userQuery = lastQueryBuilder(monitored);
526
+ const finalQuery = userQuery.skip(currentSkip).top(lastEffectivePageSize);
527
+ const result = await finalQuery();
528
+ if (!mountedRef.current)
529
+ return result;
530
+ setItems(function (prevItems) {
531
+ return prevItems.concat(result);
532
+ });
533
+ setCurrentSkip(function (prev) {
534
+ return prev + result.length;
535
+ });
536
+ setHasMore(result.length === lastEffectivePageSize);
537
+ setLoadingMore(false);
538
+ return result;
539
+ }
540
+ catch (err) {
541
+ if (mountedRef.current) {
542
+ setError(err);
543
+ setLoadingMore(false);
544
+ }
545
+ throw err;
546
+ }
547
+ }, [lastQueryBuilder, lastEffectivePageSize, loadingMore, loading, sp, context?.isInitialized, listTitle, currentSkip, createMonitoredQuery]);
615
548
  /**
616
549
  * Gets a single item by ID.
617
550
  */
618
- var getById = useCallback(function (id) { return __awaiter(_this, void 0, void 0, function () {
619
- var item, err_3, error_1;
620
- return __generator(this, function (_a) {
621
- switch (_a.label) {
622
- case 0:
623
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
624
- throw new Error('[useSPFxPnPList] PnP context not initialized');
625
- }
626
- _a.label = 1;
627
- case 1:
628
- _a.trys.push([1, 3, , 4]);
629
- return [4 /*yield*/, sp.web.lists.getByTitle(listTitle).items.getById(id)()];
630
- case 2:
631
- item = _a.sent();
632
- return [2 /*return*/, item];
633
- case 3:
634
- err_3 = _a.sent();
635
- error_1 = err_3;
636
- console.error('[useSPFxPnPList] getById error:', error_1);
637
- setError(error_1);
638
- return [2 /*return*/, undefined];
639
- case 4: return [2 /*return*/];
640
- }
641
- });
642
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle]);
551
+ const getById = useCallback(async (id) => {
552
+ if (!sp || !context?.isInitialized) {
553
+ throw new Error('[useSPFxPnPList] PnP context not initialized');
554
+ }
555
+ try {
556
+ const item = await sp.web.lists.getByTitle(listTitle).items.getById(id)();
557
+ return item;
558
+ }
559
+ catch (err) {
560
+ const error = err;
561
+ console.error('[useSPFxPnPList] getById error:', error);
562
+ setError(error);
563
+ return undefined;
564
+ }
565
+ }, [sp, context?.isInitialized, listTitle]);
643
566
  /**
644
567
  * Creates a new list item.
645
568
  */
646
- var create = useCallback(function (item) { return __awaiter(_this, void 0, void 0, function () {
647
- var result, err_4;
648
- return __generator(this, function (_a) {
649
- switch (_a.label) {
650
- case 0:
651
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
652
- throw new Error('PnP context not initialized');
653
- }
654
- _a.label = 1;
655
- case 1:
656
- _a.trys.push([1, 3, , 4]);
657
- return [4 /*yield*/, sp.web.lists.getByTitle(listTitle).items.add(item)];
658
- case 2:
659
- result = _a.sent();
660
- debouncedRefetch();
661
- return [2 /*return*/, result.data.Id];
662
- case 3:
663
- err_4 = _a.sent();
664
- setError(err_4);
665
- throw err_4;
666
- case 4: return [2 /*return*/];
667
- }
668
- });
669
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, debouncedRefetch]);
569
+ const create = useCallback(async (item) => {
570
+ if (!sp || !context?.isInitialized) {
571
+ throw new Error('PnP context not initialized');
572
+ }
573
+ try {
574
+ const result = await sp.web.lists.getByTitle(listTitle).items.add(item);
575
+ debouncedRefetch();
576
+ return result.data.Id;
577
+ }
578
+ catch (err) {
579
+ setError(err);
580
+ throw err;
581
+ }
582
+ }, [sp, context?.isInitialized, listTitle, debouncedRefetch]);
670
583
  /**
671
584
  * Updates an existing list item.
672
585
  */
673
- var update = useCallback(function (id, item) { return __awaiter(_this, void 0, void 0, function () {
674
- var err_5;
675
- return __generator(this, function (_a) {
676
- switch (_a.label) {
677
- case 0:
678
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
679
- throw new Error('PnP context not initialized');
680
- }
681
- _a.label = 1;
682
- case 1:
683
- _a.trys.push([1, 3, , 4]);
684
- return [4 /*yield*/, sp.web.lists.getByTitle(listTitle).items.getById(id).update(item)];
685
- case 2:
686
- _a.sent();
687
- debouncedRefetch();
688
- return [3 /*break*/, 4];
689
- case 3:
690
- err_5 = _a.sent();
691
- setError(err_5);
692
- throw err_5;
693
- case 4: return [2 /*return*/];
694
- }
695
- });
696
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, debouncedRefetch]);
586
+ const update = useCallback(async (id, item) => {
587
+ if (!sp || !context?.isInitialized) {
588
+ throw new Error('PnP context not initialized');
589
+ }
590
+ try {
591
+ await sp.web.lists.getByTitle(listTitle).items.getById(id).update(item);
592
+ debouncedRefetch();
593
+ }
594
+ catch (err) {
595
+ setError(err);
596
+ throw err;
597
+ }
598
+ }, [sp, context?.isInitialized, listTitle, debouncedRefetch]);
697
599
  /**
698
600
  * Deletes a list item.
699
601
  */
700
- var remove = useCallback(function (id) { return __awaiter(_this, void 0, void 0, function () {
701
- var err_6;
702
- return __generator(this, function (_a) {
703
- switch (_a.label) {
704
- case 0:
705
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
706
- throw new Error('PnP context not initialized');
707
- }
708
- _a.label = 1;
709
- case 1:
710
- _a.trys.push([1, 3, , 4]);
711
- return [4 /*yield*/, sp.web.lists.getByTitle(listTitle).items.getById(id).delete()];
712
- case 2:
713
- _a.sent();
714
- debouncedRefetch();
715
- return [3 /*break*/, 4];
716
- case 3:
717
- err_6 = _a.sent();
718
- setError(err_6);
719
- throw err_6;
720
- case 4: return [2 /*return*/];
721
- }
722
- });
723
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, debouncedRefetch]);
602
+ const remove = useCallback(async (id) => {
603
+ if (!sp || !context?.isInitialized) {
604
+ throw new Error('PnP context not initialized');
605
+ }
606
+ try {
607
+ await sp.web.lists.getByTitle(listTitle).items.getById(id).delete();
608
+ debouncedRefetch();
609
+ }
610
+ catch (err) {
611
+ setError(err);
612
+ throw err;
613
+ }
614
+ }, [sp, context?.isInitialized, listTitle, debouncedRefetch]);
724
615
  /**
725
616
  * Creates multiple items in a batch.
726
617
  */
727
- var createBatch = useCallback(function (itemsToCreate) { return __awaiter(_this, void 0, void 0, function () {
728
- var ids_1, errors_1, batchResult, batchedSP, execute, list, i, batchError, err_7, error_2;
729
- return __generator(this, function (_a) {
730
- switch (_a.label) {
731
- case 0:
732
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
733
- throw new Error('PnP context not initialized');
734
- }
735
- _a.label = 1;
736
- case 1:
737
- _a.trys.push([1, 3, , 4]);
738
- ids_1 = [];
739
- errors_1 = [];
740
- batchResult = sp.batched();
741
- batchedSP = batchResult[0];
742
- execute = batchResult[1];
743
- list = batchedSP.web.lists.getByTitle(listTitle);
744
- // Queue all creates
745
- for (i = 0; i < itemsToCreate.length; i++) {
746
- list.items.add(itemsToCreate[i]).then(function (result) {
747
- ids_1.push(result.data.Id);
748
- }).catch(function (error) {
749
- console.error('Batch create error:', error);
750
- errors_1.push(error);
751
- });
752
- }
753
- // Execute batch
754
- return [4 /*yield*/, execute()];
755
- case 2:
756
- // Execute batch
757
- _a.sent();
758
- // If there were errors in individual operations, set error state
759
- if (errors_1.length > 0) {
760
- batchError = new Error("Batch create failed: ".concat(errors_1.length, " of ").concat(itemsToCreate.length, " items failed"));
761
- setError(batchError);
762
- console.error('Batch create summary:', errors_1);
763
- }
764
- debouncedRefetch();
765
- return [2 /*return*/, ids_1];
766
- case 3:
767
- err_7 = _a.sent();
768
- error_2 = err_7;
769
- setError(error_2);
770
- throw error_2;
771
- case 4: return [2 /*return*/];
618
+ const createBatch = useCallback(async (itemsToCreate) => {
619
+ if (!sp || !context?.isInitialized) {
620
+ throw new Error('PnP context not initialized');
621
+ }
622
+ try {
623
+ const ids = [];
624
+ const errors = [];
625
+ const batchResult = sp.batched();
626
+ const batchedSP = batchResult[0];
627
+ const execute = batchResult[1];
628
+ const list = batchedSP.web.lists.getByTitle(listTitle);
629
+ // Queue all creates
630
+ for (let i = 0; i < itemsToCreate.length; i++) {
631
+ list.items.add(itemsToCreate[i]).then(function (result) {
632
+ ids.push(result.data.Id);
633
+ }).catch(function (error) {
634
+ console.error('Batch create error:', error);
635
+ errors.push(error);
636
+ });
772
637
  }
773
- });
774
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, debouncedRefetch]);
638
+ // Execute batch
639
+ await execute();
640
+ // If there were errors in individual operations, set error state
641
+ if (errors.length > 0) {
642
+ const batchError = new Error(`Batch create failed: ${errors.length} of ${itemsToCreate.length} items failed`);
643
+ setError(batchError);
644
+ console.error('Batch create summary:', errors);
645
+ }
646
+ debouncedRefetch();
647
+ return ids;
648
+ }
649
+ catch (err) {
650
+ const error = err;
651
+ setError(error);
652
+ throw error;
653
+ }
654
+ }, [sp, context?.isInitialized, listTitle, debouncedRefetch]);
775
655
  /**
776
656
  * Updates multiple items in a batch.
777
657
  */
778
- var updateBatch = useCallback(function (updates) { return __awaiter(_this, void 0, void 0, function () {
779
- var errors_2, batchResult, batchedSP, execute, list, i, updateItem, batchError, err_8, error_3;
780
- return __generator(this, function (_a) {
781
- switch (_a.label) {
782
- case 0:
783
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
784
- throw new Error('PnP context not initialized');
785
- }
786
- _a.label = 1;
787
- case 1:
788
- _a.trys.push([1, 3, , 4]);
789
- errors_2 = [];
790
- batchResult = sp.batched();
791
- batchedSP = batchResult[0];
792
- execute = batchResult[1];
793
- list = batchedSP.web.lists.getByTitle(listTitle);
794
- // Queue all updates
795
- for (i = 0; i < updates.length; i++) {
796
- updateItem = updates[i];
797
- list.items.getById(updateItem.id).update(updateItem.item).catch(function (error) {
798
- console.error('Batch update error:', error);
799
- errors_2.push(error);
800
- });
801
- }
802
- // Execute batch
803
- return [4 /*yield*/, execute()];
804
- case 2:
805
- // Execute batch
806
- _a.sent();
807
- // If there were errors in individual operations, set error state
808
- if (errors_2.length > 0) {
809
- batchError = new Error("Batch update failed: ".concat(errors_2.length, " of ").concat(updates.length, " items failed"));
810
- setError(batchError);
811
- console.error('Batch update summary:', errors_2);
812
- }
813
- debouncedRefetch();
814
- return [3 /*break*/, 4];
815
- case 3:
816
- err_8 = _a.sent();
817
- error_3 = err_8;
818
- setError(error_3);
819
- throw error_3;
820
- case 4: return [2 /*return*/];
658
+ const updateBatch = useCallback(async (updates) => {
659
+ if (!sp || !context?.isInitialized) {
660
+ throw new Error('PnP context not initialized');
661
+ }
662
+ try {
663
+ const errors = [];
664
+ const batchResult = sp.batched();
665
+ const batchedSP = batchResult[0];
666
+ const execute = batchResult[1];
667
+ const list = batchedSP.web.lists.getByTitle(listTitle);
668
+ // Queue all updates
669
+ for (let i = 0; i < updates.length; i++) {
670
+ const updateItem = updates[i];
671
+ list.items.getById(updateItem.id).update(updateItem.item).catch(function (error) {
672
+ console.error('Batch update error:', error);
673
+ errors.push(error);
674
+ });
821
675
  }
822
- });
823
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, debouncedRefetch]);
676
+ // Execute batch
677
+ await execute();
678
+ // If there were errors in individual operations, set error state
679
+ if (errors.length > 0) {
680
+ const batchError = new Error(`Batch update failed: ${errors.length} of ${updates.length} items failed`);
681
+ setError(batchError);
682
+ console.error('Batch update summary:', errors);
683
+ }
684
+ debouncedRefetch();
685
+ }
686
+ catch (err) {
687
+ const error = err;
688
+ setError(error);
689
+ throw error;
690
+ }
691
+ }, [sp, context?.isInitialized, listTitle, debouncedRefetch]);
824
692
  /**
825
693
  * Deletes multiple items in a batch.
826
694
  */
827
- var removeBatch = useCallback(function (ids) { return __awaiter(_this, void 0, void 0, function () {
828
- var errors_3, batchResult, batchedSP, execute, list, i, batchError, err_9, error_4;
829
- return __generator(this, function (_a) {
830
- switch (_a.label) {
831
- case 0:
832
- if (!sp || !(context === null || context === void 0 ? void 0 : context.isInitialized)) {
833
- throw new Error('PnP context not initialized');
834
- }
835
- _a.label = 1;
836
- case 1:
837
- _a.trys.push([1, 3, , 4]);
838
- errors_3 = [];
839
- batchResult = sp.batched();
840
- batchedSP = batchResult[0];
841
- execute = batchResult[1];
842
- list = batchedSP.web.lists.getByTitle(listTitle);
843
- // Queue all deletes
844
- for (i = 0; i < ids.length; i++) {
845
- list.items.getById(ids[i]).delete().catch(function (error) {
846
- console.error('Batch delete error:', error);
847
- errors_3.push(error);
848
- });
849
- }
850
- // Execute batch
851
- return [4 /*yield*/, execute()];
852
- case 2:
853
- // Execute batch
854
- _a.sent();
855
- // If there were errors in individual operations, set error state
856
- if (errors_3.length > 0) {
857
- batchError = new Error("Batch delete failed: ".concat(errors_3.length, " of ").concat(ids.length, " items failed"));
858
- setError(batchError);
859
- console.error('Batch delete summary:', errors_3);
860
- }
861
- debouncedRefetch();
862
- return [3 /*break*/, 4];
863
- case 3:
864
- err_9 = _a.sent();
865
- error_4 = err_9;
866
- setError(error_4);
867
- throw error_4;
868
- case 4: return [2 /*return*/];
695
+ const removeBatch = useCallback(async (ids) => {
696
+ if (!sp || !context?.isInitialized) {
697
+ throw new Error('PnP context not initialized');
698
+ }
699
+ try {
700
+ const errors = [];
701
+ const batchResult = sp.batched();
702
+ const batchedSP = batchResult[0];
703
+ const execute = batchResult[1];
704
+ const list = batchedSP.web.lists.getByTitle(listTitle);
705
+ // Queue all deletes
706
+ for (let i = 0; i < ids.length; i++) {
707
+ list.items.getById(ids[i]).delete().catch(function (error) {
708
+ console.error('Batch delete error:', error);
709
+ errors.push(error);
710
+ });
869
711
  }
870
- });
871
- }); }, [sp, context === null || context === void 0 ? void 0 : context.isInitialized, listTitle, debouncedRefetch]);
712
+ // Execute batch
713
+ await execute();
714
+ // If there were errors in individual operations, set error state
715
+ if (errors.length > 0) {
716
+ const batchError = new Error(`Batch delete failed: ${errors.length} of ${ids.length} items failed`);
717
+ setError(batchError);
718
+ console.error('Batch delete summary:', errors);
719
+ }
720
+ debouncedRefetch();
721
+ }
722
+ catch (err) {
723
+ const error = err;
724
+ setError(error);
725
+ throw error;
726
+ }
727
+ }, [sp, context?.isInitialized, listTitle, debouncedRefetch]);
872
728
  /**
873
729
  * Cleanup on unmount.
874
730
  */
875
- useEffect(function () {
731
+ useEffect(() => {
876
732
  mountedRef.current = true;
877
733
  return function () {
878
734
  mountedRef.current = false;
@@ -882,25 +738,25 @@ export function useSPFxPnPList(listTitle, options, pnpContext) {
882
738
  };
883
739
  }, []);
884
740
  // Derived state
885
- var isEmpty = items.length === 0 && !loading && !error;
741
+ const isEmpty = items.length === 0 && !loading && !error;
886
742
  return {
887
- query: query,
743
+ query,
888
744
  items: items,
889
- loading: loading,
890
- loadingMore: loadingMore,
891
- error: error,
892
- isEmpty: isEmpty,
893
- hasMore: hasMore,
894
- refetch: refetch,
895
- loadMore: loadMore,
896
- clearError: clearError,
897
- getById: getById,
898
- create: create,
899
- update: update,
900
- remove: remove,
901
- createBatch: createBatch,
902
- updateBatch: updateBatch,
903
- removeBatch: removeBatch,
745
+ loading,
746
+ loadingMore,
747
+ error,
748
+ isEmpty,
749
+ hasMore,
750
+ refetch,
751
+ loadMore,
752
+ clearError,
753
+ getById,
754
+ create,
755
+ update,
756
+ remove,
757
+ createBatch,
758
+ updateBatch,
759
+ removeBatch,
904
760
  };
905
761
  }
906
762
  //# sourceMappingURL=useSPFxPnPList.js.map