@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.
- package/lib/core/atoms.internal.js +1 -1
- package/lib/core/atoms.internal.js.map +1 -1
- package/lib/core/context.internal.js +2 -2
- package/lib/core/context.internal.js.map +1 -1
- package/lib/core/provider-base.internal.js +29 -29
- package/lib/core/provider-base.internal.js.map +1 -1
- package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.d.ts +14 -0
- package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.d.ts.map +1 -0
- package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.js +20 -0
- package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.js.map +1 -0
- package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.manifest.json +17 -0
- package/lib/extensions/spFxReactToolkitTest/loc/en-us.js +5 -0
- package/lib/hooks/index.d.ts +1 -0
- package/lib/hooks/index.d.ts.map +1 -1
- package/lib/hooks/index.js +1 -0
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useAppCatalogUrl.internal.d.ts +26 -0
- package/lib/hooks/useAppCatalogUrl.internal.d.ts.map +1 -0
- package/lib/hooks/useAppCatalogUrl.internal.js +72 -0
- package/lib/hooks/useAppCatalogUrl.internal.js.map +1 -0
- package/lib/hooks/useAsyncInvoke.internal.js +27 -75
- package/lib/hooks/useAsyncInvoke.internal.js.map +1 -1
- package/lib/hooks/useSPFxAadHttpClient.d.ts +46 -0
- package/lib/hooks/useSPFxAadHttpClient.d.ts.map +1 -1
- package/lib/hooks/useSPFxAadHttpClient.js +65 -20
- package/lib/hooks/useSPFxAadHttpClient.js.map +1 -1
- package/lib/hooks/useSPFxContainerInfo.js +5 -5
- package/lib/hooks/useSPFxContainerInfo.js.map +1 -1
- package/lib/hooks/useSPFxContainerSize.js +9 -10
- package/lib/hooks/useSPFxContainerSize.js.map +1 -1
- package/lib/hooks/useSPFxCorrelationInfo.js +6 -7
- package/lib/hooks/useSPFxCorrelationInfo.js.map +1 -1
- package/lib/hooks/useSPFxCrossSitePermissions.js +48 -58
- package/lib/hooks/useSPFxCrossSitePermissions.js.map +1 -1
- package/lib/hooks/useSPFxDisplayMode.js +8 -8
- package/lib/hooks/useSPFxDisplayMode.js.map +1 -1
- package/lib/hooks/useSPFxEnvironmentInfo.js +17 -18
- package/lib/hooks/useSPFxEnvironmentInfo.js.map +1 -1
- package/lib/hooks/useSPFxFluent9ThemeInfo.js +4 -4
- package/lib/hooks/useSPFxFluent9ThemeInfo.js.map +1 -1
- package/lib/hooks/useSPFxHttpClient.d.ts +18 -2
- package/lib/hooks/useSPFxHttpClient.d.ts.map +1 -1
- package/lib/hooks/useSPFxHttpClient.js +19 -9
- package/lib/hooks/useSPFxHttpClient.js.map +1 -1
- package/lib/hooks/useSPFxHubSiteInfo.js +21 -24
- package/lib/hooks/useSPFxHubSiteInfo.js.map +1 -1
- package/lib/hooks/useSPFxInstanceInfo.js +2 -2
- package/lib/hooks/useSPFxInstanceInfo.js.map +1 -1
- package/lib/hooks/useSPFxListInfo.js +8 -9
- package/lib/hooks/useSPFxListInfo.js.map +1 -1
- package/lib/hooks/useSPFxLocaleInfo.js +10 -10
- package/lib/hooks/useSPFxLocaleInfo.js.map +1 -1
- package/lib/hooks/useSPFxLogger.js +26 -26
- package/lib/hooks/useSPFxLogger.js.map +1 -1
- package/lib/hooks/useSPFxMSGraphClient.d.ts +50 -3
- package/lib/hooks/useSPFxMSGraphClient.d.ts.map +1 -1
- package/lib/hooks/useSPFxMSGraphClient.js +68 -15
- package/lib/hooks/useSPFxMSGraphClient.js.map +1 -1
- package/lib/hooks/useSPFxOneDriveAppData.d.ts +0 -1
- package/lib/hooks/useSPFxOneDriveAppData.d.ts.map +1 -1
- package/lib/hooks/useSPFxOneDriveAppData.js +420 -230
- package/lib/hooks/useSPFxOneDriveAppData.js.map +1 -1
- package/lib/hooks/useSPFxPageContext.js +2 -2
- package/lib/hooks/useSPFxPageContext.js.map +1 -1
- package/lib/hooks/useSPFxPageType.js +19 -20
- package/lib/hooks/useSPFxPageType.js.map +1 -1
- package/lib/hooks/useSPFxPerformance.js +33 -87
- package/lib/hooks/useSPFxPerformance.js.map +1 -1
- package/lib/hooks/useSPFxPermissions.js +14 -15
- package/lib/hooks/useSPFxPermissions.js.map +1 -1
- package/lib/hooks/useSPFxPnP.js +62 -119
- package/lib/hooks/useSPFxPnP.js.map +1 -1
- package/lib/hooks/useSPFxPnPContext.js +22 -25
- package/lib/hooks/useSPFxPnPContext.js.map +1 -1
- package/lib/hooks/useSPFxPnPList.js +307 -451
- package/lib/hooks/useSPFxPnPList.js.map +1 -1
- package/lib/hooks/useSPFxPnPSearch.js +262 -353
- package/lib/hooks/useSPFxPnPSearch.js.map +1 -1
- package/lib/hooks/useSPFxProperties.js +12 -20
- package/lib/hooks/useSPFxProperties.js.map +1 -1
- package/lib/hooks/useSPFxSPHttpClient.d.ts +18 -2
- package/lib/hooks/useSPFxSPHttpClient.d.ts.map +1 -1
- package/lib/hooks/useSPFxSPHttpClient.js +28 -18
- package/lib/hooks/useSPFxSPHttpClient.js.map +1 -1
- package/lib/hooks/useSPFxServiceScope.js +6 -6
- package/lib/hooks/useSPFxServiceScope.js.map +1 -1
- package/lib/hooks/useSPFxSiteInfo.js +7 -8
- package/lib/hooks/useSPFxSiteInfo.js.map +1 -1
- package/lib/hooks/useSPFxStorage.js +22 -22
- package/lib/hooks/useSPFxStorage.js.map +1 -1
- package/lib/hooks/useSPFxTeams.js +37 -92
- package/lib/hooks/useSPFxTeams.js.map +1 -1
- package/lib/hooks/useSPFxTenantKeyValueStore.d.ts +252 -0
- package/lib/hooks/useSPFxTenantKeyValueStore.d.ts.map +1 -0
- package/lib/hooks/useSPFxTenantKeyValueStore.js +572 -0
- package/lib/hooks/useSPFxTenantKeyValueStore.js.map +1 -0
- package/lib/hooks/useSPFxTenantProperty.d.ts +23 -244
- package/lib/hooks/useSPFxTenantProperty.d.ts.map +1 -1
- package/lib/hooks/useSPFxTenantProperty.js +85 -559
- package/lib/hooks/useSPFxTenantProperty.js.map +1 -1
- package/lib/hooks/useSPFxUserInfo.js +3 -4
- package/lib/hooks/useSPFxUserInfo.js.map +1 -1
- package/lib/hooks/useSPFxUserPhoto.js +76 -123
- package/lib/hooks/useSPFxUserPhoto.js.map +1 -1
- package/lib/utils/resize-observer.internal.js +6 -7
- package/lib/utils/resize-observer.internal.js.map +1 -1
- package/lib/utils/theme-subscription.internal.js +8 -8
- package/lib/utils/theme-subscription.internal.js.map +1 -1
- package/lib/utils/type-guards.internal.js +6 -6
- package/lib/utils/type-guards.internal.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js +12 -37
- package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.d.ts.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js +279 -342
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/HttpClientDemo.js +26 -86
- package/lib/webparts/spFxReactToolkitTest/components/demos/HttpClientDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPContextDemo.js +53 -113
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPContextDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPListDemo.js +49 -121
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPListDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPOperationsDemo.js +44 -103
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPOperationsDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchAdvancedDemo.js +15 -15
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchAdvancedDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchBasicDemo.js +18 -66
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchBasicDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchRefinersDemo.js +9 -9
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchRefinersDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchSuggestionsDemo.js +37 -86
- package/lib/webparts/spFxReactToolkitTest/components/demos/PnPSearchSuggestionsDemo.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/shared/InfoRow.js +6 -9
- package/lib/webparts/spFxReactToolkitTest/components/shared/InfoRow.js.map +1 -1
- package/lib/webparts/spFxReactToolkitTest/components/shared/StatusBadge.js +3 -6
- package/lib/webparts/spFxReactToolkitTest/components/shared/StatusBadge.js.map +1 -1
- 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 * as React from 'react';
|
|
38
2
|
import { Stack, TextField, PrimaryButton, DefaultButton, MessageBar, Separator, Label, Icon, } from '@fluentui/react';
|
|
39
3
|
import { useSPFxPnPList } from '../../../../hooks';
|
|
@@ -43,95 +7,59 @@ import '@pnp/sp/items';
|
|
|
43
7
|
/**
|
|
44
8
|
* Example 7: useSPFxPnPList - CRUD Operations
|
|
45
9
|
*/
|
|
46
|
-
export
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
query(
|
|
10
|
+
export const PnPListDemo = () => {
|
|
11
|
+
const [listTitle, setListTitle] = React.useState('');
|
|
12
|
+
const [newTitle, setNewTitle] = React.useState('');
|
|
13
|
+
const [editingId, setEditingId] = React.useState(null);
|
|
14
|
+
const [editTitle, setEditTitle] = React.useState('');
|
|
15
|
+
const { query, items, loading, error, isEmpty, hasMore, loadMore, clearError, create, update, remove, } = useSPFxPnPList(listTitle, { pageSize: 10 });
|
|
16
|
+
const handleLoadList = React.useCallback(() => {
|
|
17
|
+
query(q => q.select('Id', 'Title').orderBy('Id', false)).catch(err => console.error('Load error:', err));
|
|
54
18
|
}, [query]);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return [4 /*yield*/, update(id, { Title: editTitle })];
|
|
89
|
-
case 2:
|
|
90
|
-
_a.sent();
|
|
91
|
-
setEditingId(null);
|
|
92
|
-
setEditTitle('');
|
|
93
|
-
return [3 /*break*/, 4];
|
|
94
|
-
case 3:
|
|
95
|
-
err_2 = _a.sent();
|
|
96
|
-
console.error('Update error:', err_2);
|
|
97
|
-
return [3 /*break*/, 4];
|
|
98
|
-
case 4: return [2 /*return*/];
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}); }, [update, editTitle]);
|
|
102
|
-
var handleDelete = React.useCallback(function (id) { return __awaiter(void 0, void 0, void 0, function () {
|
|
103
|
-
var err_3;
|
|
104
|
-
return __generator(this, function (_a) {
|
|
105
|
-
switch (_a.label) {
|
|
106
|
-
case 0:
|
|
107
|
-
if (!confirm('Delete this item?'))
|
|
108
|
-
return [2 /*return*/];
|
|
109
|
-
_a.label = 1;
|
|
110
|
-
case 1:
|
|
111
|
-
_a.trys.push([1, 3, , 4]);
|
|
112
|
-
return [4 /*yield*/, remove(id)];
|
|
113
|
-
case 2:
|
|
114
|
-
_a.sent();
|
|
115
|
-
return [3 /*break*/, 4];
|
|
116
|
-
case 3:
|
|
117
|
-
err_3 = _a.sent();
|
|
118
|
-
console.error('Delete error:', err_3);
|
|
119
|
-
return [3 /*break*/, 4];
|
|
120
|
-
case 4: return [2 /*return*/];
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}); }, [remove]);
|
|
19
|
+
const handleCreate = React.useCallback(async () => {
|
|
20
|
+
if (!newTitle || !listTitle)
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
await create({ Title: newTitle });
|
|
24
|
+
setNewTitle('');
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
console.error('Create error:', err);
|
|
28
|
+
}
|
|
29
|
+
}, [create, newTitle, listTitle]);
|
|
30
|
+
const handleUpdate = React.useCallback(async (id) => {
|
|
31
|
+
if (!editTitle)
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
await update(id, { Title: editTitle });
|
|
35
|
+
setEditingId(null);
|
|
36
|
+
setEditTitle('');
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
console.error('Update error:', err);
|
|
40
|
+
}
|
|
41
|
+
}, [update, editTitle]);
|
|
42
|
+
const handleDelete = React.useCallback(async (id) => {
|
|
43
|
+
if (!confirm('Delete this item?'))
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
await remove(id);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error('Delete error:', err);
|
|
50
|
+
}
|
|
51
|
+
}, [remove]);
|
|
124
52
|
return (React.createElement(Stack, { tokens: { childrenGap: 10 }, styles: { root: { padding: '16px', border: '1px solid #edebe9', borderRadius: '4px' } } },
|
|
125
53
|
React.createElement("h3", null,
|
|
126
54
|
React.createElement(Icon, { iconName: "BulletedList", style: { marginRight: '8px' } }),
|
|
127
55
|
"Example 3: useSPFxPnPList - CRUD Operations"),
|
|
128
56
|
React.createElement(Separator, null),
|
|
129
57
|
React.createElement(Stack, { horizontal: true, tokens: { childrenGap: 6 } },
|
|
130
|
-
React.createElement(TextField, { label: "List Title", value: listTitle, onChange:
|
|
58
|
+
React.createElement(TextField, { label: "List Title", value: listTitle, onChange: (_, newValue) => setListTitle(newValue ?? ''), placeholder: "e.g., Site Pages", styles: { root: { flexGrow: 1 } } }),
|
|
131
59
|
React.createElement(PrimaryButton, { text: "Load", onClick: handleLoadList, disabled: !listTitle || loading, styles: { root: { marginTop: '28px' } } })),
|
|
132
60
|
error && (React.createElement(MessageBar, { onDismiss: clearError }, error.message)),
|
|
133
61
|
listTitle && (React.createElement(Stack, { horizontal: true, tokens: { childrenGap: 6 }, styles: { root: { padding: '8px', backgroundColor: '#f3f2f1', borderRadius: '4px' } } },
|
|
134
|
-
React.createElement(TextField, { value: newTitle, onChange:
|
|
62
|
+
React.createElement(TextField, { value: newTitle, onChange: (_, newValue) => setNewTitle(newValue ?? ''), placeholder: "New item title...", styles: { root: { flexGrow: 1 } } }),
|
|
135
63
|
React.createElement(PrimaryButton, { text: "Create", onClick: handleCreate, disabled: !newTitle || loading }))),
|
|
136
64
|
loading && React.createElement(MessageBar, null, "Loading..."),
|
|
137
65
|
isEmpty && !loading && React.createElement(MessageBar, null, "No items found."),
|
|
@@ -140,17 +68,17 @@ export var PnPListDemo = function () {
|
|
|
140
68
|
"Items (",
|
|
141
69
|
items.length,
|
|
142
70
|
"):"),
|
|
143
|
-
items.map(
|
|
144
|
-
React.createElement(TextField, { value: editTitle, onChange:
|
|
145
|
-
React.createElement(DefaultButton, { text: "Save", onClick:
|
|
146
|
-
React.createElement(DefaultButton, { text: "Cancel", onClick:
|
|
71
|
+
items.map(item => (React.createElement(Stack, { key: item.Id, horizontal: true, tokens: { childrenGap: 6 }, styles: { root: { padding: '6px', backgroundColor: '#faf9f8', borderRadius: '4px' } } }, editingId === item.Id ? (React.createElement(React.Fragment, null,
|
|
72
|
+
React.createElement(TextField, { value: editTitle, onChange: (_, v) => setEditTitle(v ?? ''), styles: { root: { flexGrow: 1 } } }),
|
|
73
|
+
React.createElement(DefaultButton, { text: "Save", onClick: () => handleUpdate(item.Id) }),
|
|
74
|
+
React.createElement(DefaultButton, { text: "Cancel", onClick: () => { setEditingId(null); setEditTitle(''); } }))) : (React.createElement(React.Fragment, null,
|
|
147
75
|
React.createElement("div", { style: { flexGrow: 1 } },
|
|
148
76
|
"#",
|
|
149
77
|
item.Id,
|
|
150
78
|
" - ",
|
|
151
79
|
item.Title),
|
|
152
|
-
React.createElement(DefaultButton, { text: "Edit", onClick:
|
|
153
|
-
React.createElement(DefaultButton, { text: "Delete", onClick:
|
|
80
|
+
React.createElement(DefaultButton, { text: "Edit", onClick: () => { setEditingId(item.Id); setEditTitle(item.Title); } }),
|
|
81
|
+
React.createElement(DefaultButton, { text: "Delete", onClick: () => handleDelete(item.Id) })))))),
|
|
154
82
|
hasMore && React.createElement(PrimaryButton, { text: "Load More", onClick: loadMore, disabled: loading }))),
|
|
155
83
|
React.createElement(Label, null,
|
|
156
84
|
React.createElement(Icon, { iconName: "InfoSolid", style: { marginRight: '4px', color: '#0078d4' } }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PnPListDemo.js","sourceRoot":"","sources":["../../../../../src/webparts/spFxReactToolkitTest/components/demos/PnPListDemo.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PnPListDemo.js","sourceRoot":"","sources":["../../../../../src/webparts/spFxReactToolkitTest/components/demos/PnPListDemo.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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 * as React from 'react';
|
|
38
2
|
import { Stack, PrimaryButton, MessageBar, MessageBarType, Separator, Label, Icon, } from '@fluentui/react';
|
|
39
3
|
import { useSPFxPnP } from '../../../../hooks';
|
|
@@ -45,69 +9,46 @@ import '@pnp/sp/site-users';
|
|
|
45
9
|
* Example 2: useSPFxPnP
|
|
46
10
|
* Shows invoke() for single operations and batch() for multiple operations
|
|
47
11
|
*/
|
|
48
|
-
export
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
userPromise = batchedSP.web.currentUser.select('Title')();
|
|
89
|
-
webPromise = batchedSP.web.select('Title')();
|
|
90
|
-
// Wait for all batched operations to complete
|
|
91
|
-
return [2 /*return*/, Promise.all([listsPromise, userPromise, webPromise])];
|
|
92
|
-
});
|
|
93
|
-
}); })];
|
|
94
|
-
case 1:
|
|
95
|
-
results = _a.sent();
|
|
96
|
-
listsResult = results[0], userResult = results[1], webResult = results[2];
|
|
97
|
-
setBatchData({
|
|
98
|
-
lists: listsResult,
|
|
99
|
-
user: userResult,
|
|
100
|
-
webTitle: webResult.Title
|
|
101
|
-
});
|
|
102
|
-
return [3 /*break*/, 3];
|
|
103
|
-
case 2:
|
|
104
|
-
err_2 = _a.sent();
|
|
105
|
-
console.error('Batch error:', err_2);
|
|
106
|
-
return [3 /*break*/, 3];
|
|
107
|
-
case 3: return [2 /*return*/];
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}); }, [batch, clearError]);
|
|
12
|
+
export const PnPOperationsDemo = () => {
|
|
13
|
+
const { invoke, batch, isLoading, error, clearError } = useSPFxPnP();
|
|
14
|
+
const [lists, setLists] = React.useState([]);
|
|
15
|
+
const [batchData, setBatchData] = React.useState(null);
|
|
16
|
+
const handleInvokeLists = React.useCallback(async () => {
|
|
17
|
+
try {
|
|
18
|
+
clearError();
|
|
19
|
+
const result = await invoke(sp => sp.web.lists
|
|
20
|
+
.select('Title', 'ItemCount')
|
|
21
|
+
.filter('Hidden eq false')
|
|
22
|
+
.top(10)());
|
|
23
|
+
setLists(result);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error('Invoke error:', err);
|
|
27
|
+
}
|
|
28
|
+
}, [invoke, clearError]);
|
|
29
|
+
const handleBatchOperations = React.useCallback(async () => {
|
|
30
|
+
try {
|
|
31
|
+
clearError();
|
|
32
|
+
// ✅ Correct batch usage: callback receives batchedSP and returns Promise
|
|
33
|
+
const results = await batch(async (batchedSP) => {
|
|
34
|
+
// All these operations will be sent in ONE HTTP request
|
|
35
|
+
const listsPromise = batchedSP.web.lists.select('Title').top(5)();
|
|
36
|
+
const userPromise = batchedSP.web.currentUser.select('Title')();
|
|
37
|
+
const webPromise = batchedSP.web.select('Title')();
|
|
38
|
+
// Wait for all batched operations to complete
|
|
39
|
+
return Promise.all([listsPromise, userPromise, webPromise]);
|
|
40
|
+
});
|
|
41
|
+
const [listsResult, userResult, webResult] = results;
|
|
42
|
+
setBatchData({
|
|
43
|
+
lists: listsResult,
|
|
44
|
+
user: userResult,
|
|
45
|
+
webTitle: webResult.Title
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error('Batch error:', err);
|
|
50
|
+
}
|
|
51
|
+
}, [batch, clearError]);
|
|
111
52
|
return (React.createElement(Stack, { tokens: { childrenGap: 10 }, styles: { root: { padding: '16px', border: '1px solid #edebe9', borderRadius: '4px' } } },
|
|
112
53
|
React.createElement("h3", null,
|
|
113
54
|
React.createElement(Icon, { iconName: "CloudUpload", style: { marginRight: '8px' } }),
|
|
@@ -119,11 +60,11 @@ export var PnPOperationsDemo = function () {
|
|
|
119
60
|
React.createElement(PrimaryButton, { text: isLoading ? 'Loading...' : 'Load Lists (invoke)', onClick: handleInvokeLists, disabled: isLoading, iconProps: { iconName: 'BulletedList' } }),
|
|
120
61
|
lists.length > 0 && (React.createElement(Stack, { tokens: { childrenGap: 4 }, styles: { root: { padding: '12px', backgroundColor: '#f3f2f1', borderRadius: '4px' } } },
|
|
121
62
|
React.createElement(Label, null, "Lists (top 10, non-hidden):"),
|
|
122
|
-
lists.map(
|
|
63
|
+
lists.map((list, idx) => (React.createElement("div", { key: idx, style: { padding: '4px 0', borderBottom: idx < lists.length - 1 ? '1px solid #edebe9' : 'none' } },
|
|
123
64
|
React.createElement("strong", null, list.Title),
|
|
124
65
|
" - ",
|
|
125
66
|
list.ItemCount,
|
|
126
|
-
" items"))
|
|
67
|
+
" items")))))),
|
|
127
68
|
React.createElement(Stack, { tokens: { childrenGap: 8 } },
|
|
128
69
|
React.createElement(Label, null, "Batch Operations with batch()"),
|
|
129
70
|
React.createElement(PrimaryButton, { text: isLoading ? 'Loading...' : 'Load Multiple (batch)', onClick: handleBatchOperations, disabled: isLoading, iconProps: { iconName: 'Streaming' } }),
|
|
@@ -131,9 +72,9 @@ export var PnPOperationsDemo = function () {
|
|
|
131
72
|
React.createElement(InfoRow, { label: "Web Title", value: batchData.webTitle, icon: "CityNext" }),
|
|
132
73
|
React.createElement(InfoRow, { label: "Current User", value: batchData.user.Title, icon: "Contact" }),
|
|
133
74
|
React.createElement(Label, null, "Lists (top 5):"),
|
|
134
|
-
batchData.lists.map(
|
|
75
|
+
batchData.lists.map((list, idx) => (React.createElement("div", { key: idx, style: { paddingLeft: '16px' } },
|
|
135
76
|
"\u2022 ",
|
|
136
|
-
list.Title))
|
|
77
|
+
list.Title)))))),
|
|
137
78
|
React.createElement(Label, null,
|
|
138
79
|
React.createElement(Icon, { iconName: "InfoSolid", style: { marginRight: '4px', color: '#0078d4' } }),
|
|
139
80
|
"invoke() for single operations, batch() combines multiple requests into ONE HTTP call for better performance.")));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PnPOperationsDemo.js","sourceRoot":"","sources":["../../../../../src/webparts/spFxReactToolkitTest/components/demos/PnPOperationsDemo.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PnPOperationsDemo.js","sourceRoot":"","sources":["../../../../../src/webparts/spFxReactToolkitTest/components/demos/PnPOperationsDemo.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,13 @@ import { useSPFxPnPSearch, SearchVerticals } from '../../../../hooks';
|
|
|
4
4
|
/**
|
|
5
5
|
* Example 4: Advanced Search with Builder and Verticals
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
export const PnPSearchAdvancedDemo = () => {
|
|
8
|
+
const [selectedVertical, setSelectedVertical] = React.useState('All');
|
|
9
|
+
const { search, results, totalResults, loading, loadMore, hasMore, error, clearError, } = useSPFxPnPSearch({
|
|
10
10
|
pageSize: 5,
|
|
11
11
|
selectProperties: ['Title', 'Path', 'Author', 'LastModifiedTime', 'FileType']
|
|
12
|
-
})
|
|
13
|
-
|
|
12
|
+
});
|
|
13
|
+
const getVerticalSourceId = (vertical) => {
|
|
14
14
|
switch (vertical) {
|
|
15
15
|
case 'People': return SearchVerticals.People;
|
|
16
16
|
case 'Documents': return SearchVerticals.Documents;
|
|
@@ -19,14 +19,14 @@ export var PnPSearchAdvancedDemo = function () {
|
|
|
19
19
|
default: return undefined;
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
|
|
23
|
-
search(
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
const handleSearch = React.useCallback((query) => {
|
|
23
|
+
search((builder) => {
|
|
24
|
+
let result = builder.text(query).sortList({ Property: 'LastModifiedTime', Direction: 1 });
|
|
25
|
+
const sourceId = getVerticalSourceId(selectedVertical);
|
|
26
26
|
if (sourceId)
|
|
27
27
|
result = result.sourceId(sourceId);
|
|
28
28
|
return result;
|
|
29
|
-
}).catch(
|
|
29
|
+
}).catch(err => console.error('Search error:', err));
|
|
30
30
|
}, [search, selectedVertical]);
|
|
31
31
|
return (React.createElement(Stack, { tokens: { childrenGap: 10 }, styles: { root: { padding: '16px', border: '1px solid #edebe9', borderRadius: '4px' } } },
|
|
32
32
|
React.createElement("h3", null,
|
|
@@ -34,10 +34,10 @@ export var PnPSearchAdvancedDemo = function () {
|
|
|
34
34
|
"Example 2: Advanced Search with Builder"),
|
|
35
35
|
React.createElement(Separator, null),
|
|
36
36
|
error && (React.createElement(MessageBar, { messageBarType: MessageBarType.error, onDismiss: clearError }, error.message)),
|
|
37
|
-
React.createElement(Stack, { horizontal: true, tokens: { childrenGap: 6 }, wrap: true }, ['All', 'Documents', 'Pages', 'People', 'Videos'].map(
|
|
37
|
+
React.createElement(Stack, { horizontal: true, tokens: { childrenGap: 6 }, wrap: true }, ['All', 'Documents', 'Pages', 'People', 'Videos'].map((v) => (React.createElement(DefaultButton, { key: v, text: v, onClick: () => setSelectedVertical(v), primary: selectedVertical === v })))),
|
|
38
38
|
React.createElement(Stack, { horizontal: true, tokens: { childrenGap: 6 } },
|
|
39
|
-
React.createElement(PrimaryButton, { text: "Search All", onClick:
|
|
40
|
-
React.createElement(DefaultButton, { text: "Search Documents", onClick:
|
|
39
|
+
React.createElement(PrimaryButton, { text: "Search All", onClick: () => handleSearch('*'), disabled: loading }),
|
|
40
|
+
React.createElement(DefaultButton, { text: "Search Documents", onClick: () => handleSearch('filetype:docx OR filetype:pdf'), disabled: loading })),
|
|
41
41
|
totalResults !== undefined && (React.createElement(MessageBar, { messageBarType: MessageBarType.info },
|
|
42
42
|
"Found ",
|
|
43
43
|
totalResults,
|
|
@@ -47,13 +47,13 @@ export var PnPSearchAdvancedDemo = function () {
|
|
|
47
47
|
selectedVertical,
|
|
48
48
|
"\"")),
|
|
49
49
|
results.length > 0 && (React.createElement(Stack, { tokens: { childrenGap: 6 } },
|
|
50
|
-
results.map(
|
|
50
|
+
results.map((result) => (React.createElement(Stack, { key: result.id, tokens: { childrenGap: 2 }, styles: { root: { padding: '10px', backgroundColor: '#f3f2f1', borderRadius: '4px' } } },
|
|
51
51
|
React.createElement("div", { style: { fontWeight: 600 } }, result.data.Title || '(No Title)'),
|
|
52
52
|
React.createElement(Label, null,
|
|
53
53
|
result.data.Author,
|
|
54
54
|
" - ",
|
|
55
55
|
result.data.LastModifiedTime ? new Date(result.data.LastModifiedTime).toLocaleDateString() : 'N/A'),
|
|
56
|
-
React.createElement("a", { href: result.data.Path, target: "_blank", rel: "noopener noreferrer", style: { fontSize: '11px' } }, result.data.Path)))
|
|
56
|
+
React.createElement("a", { href: result.data.Path, target: "_blank", rel: "noopener noreferrer", style: { fontSize: '11px' } }, result.data.Path)))),
|
|
57
57
|
hasMore && (React.createElement(PrimaryButton, { text: loading ? 'Loading...' : 'Load More', onClick: loadMore, disabled: loading })))),
|
|
58
58
|
React.createElement(Label, null,
|
|
59
59
|
React.createElement(Icon, { iconName: "InfoSolid", style: { marginRight: '4px', color: '#0078d4' } }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PnPSearchAdvancedDemo.js","sourceRoot":"","sources":["../../../../../src/webparts/spFxReactToolkitTest/components/demos/PnPSearchAdvancedDemo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,SAAS,EACT,KAAK,EACL,IAAI,GACL,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEtE;;GAEG;AACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"PnPSearchAdvancedDemo.js","sourceRoot":"","sources":["../../../../../src/webparts/spFxReactToolkitTest/components/demos/PnPSearchAdvancedDemo.tsx"],"names":[],"mappings":"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"}
|