@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atoms.internal.js","sourceRoot":"","sources":["../../src/core/atoms.internal.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,wCAAwC;AACxC,qDAAqD;AAErD,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAK7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"atoms.internal.js","sourceRoot":"","sources":["../../src/core/atoms.internal.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,wCAAwC;AACxC,qDAAqD;AAErD,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAK7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB;IACnB,KAAK,EAAE,IAAI,CAA6B,SAAS,CAAC;IAElD,WAAW,EAAE,IAAI,CAA0B,SAAS,CAAC;IAErD,UAAU,EAAE,IAAI,CAAU,SAAS,CAAC;IAEpC,wBAAwB;IACxB,WAAW,EAAE,IAAI,CAA0B,SAAS,CAAC;IAErD,aAAa,EAAE,IAAI,CAA4B,SAAS,CAAC;IAEzD,0CAA0C;IAC1C,KAAK,EAAE,IAAI,CAKR,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;CACpC,CAAC"}
|
|
@@ -13,7 +13,7 @@ import * as React from 'react';
|
|
|
13
13
|
*
|
|
14
14
|
* @internal
|
|
15
15
|
*/
|
|
16
|
-
export
|
|
16
|
+
export const SPFxContext = React.createContext(null);
|
|
17
17
|
if (process.env.NODE_ENV !== 'production') {
|
|
18
18
|
SPFxContext.displayName = 'SPFxContext';
|
|
19
19
|
}
|
|
@@ -29,7 +29,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
29
29
|
* @internal
|
|
30
30
|
*/
|
|
31
31
|
export function useSPFxContext() {
|
|
32
|
-
|
|
32
|
+
const context = React.useContext(SPFxContext);
|
|
33
33
|
if (!context) {
|
|
34
34
|
throw new Error('useSPFxContext must be used within SPFxProvider. ' +
|
|
35
35
|
'Make sure your component is wrapped with <SPFxProvider>.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.internal.js","sourceRoot":"","sources":["../../src/core/context.internal.tsx"],"names":[],"mappings":"AAAA,cAAc;AACd,yDAAyD;AAEzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"context.internal.js","sourceRoot":"","sources":["../../src/core/context.internal.tsx"],"names":[],"mappings":"AAAA,cAAc;AACd,yDAAyD;AAEzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA0B,IAAI,CAAC,CAAC;AAE9E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;IAC1C,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mDAAmD;YACnD,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -28,23 +28,23 @@ import { useThemeSubscription } from '../utils/theme-subscription.internal';
|
|
|
28
28
|
* @internal
|
|
29
29
|
*/
|
|
30
30
|
export function SPFxProviderBase(props) {
|
|
31
|
-
|
|
31
|
+
const { instance, children } = props;
|
|
32
32
|
// Cast to 'any' to access protected/private properties
|
|
33
33
|
// This is safe because we're inside the provider and know the structure
|
|
34
34
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
|
-
|
|
35
|
+
const instanceAny = instance;
|
|
36
36
|
// Detect component kind (WebPart, AppCustomizer, etc.)
|
|
37
37
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
-
|
|
38
|
+
const kind = React.useMemo(() => detectComponentKind(instance), [instance]);
|
|
39
39
|
// Extract context (BaseComponentContext - has instanceId)
|
|
40
|
-
|
|
40
|
+
const context = instanceAny.context;
|
|
41
41
|
// Extract instanceId type-safe (all SPFx contexts extend BaseComponentContext)
|
|
42
|
-
|
|
42
|
+
const instanceId = React.useMemo(() => context.instanceId, [context]);
|
|
43
43
|
// Extract serviceScope and ensure it's finished before rendering
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
const serviceScope = React.useMemo(() => context.serviceScope, [context]);
|
|
45
|
+
const [isScopeReady, setIsScopeReady] = React.useState(false);
|
|
46
46
|
// Wait for serviceScope to be finished before rendering children
|
|
47
|
-
React.useEffect(
|
|
47
|
+
React.useEffect(() => {
|
|
48
48
|
if (!serviceScope) {
|
|
49
49
|
// Fallback: if no serviceScope, proceed (shouldn't happen in valid SPFx)
|
|
50
50
|
setIsScopeReady(true);
|
|
@@ -52,24 +52,24 @@ export function SPFxProviderBase(props) {
|
|
|
52
52
|
}
|
|
53
53
|
// whenFinished callback fires immediately if already finished (synchronous)
|
|
54
54
|
// or later when finished (asynchronous) - handles both scenarios
|
|
55
|
-
serviceScope.whenFinished(
|
|
55
|
+
serviceScope.whenFinished(() => {
|
|
56
56
|
setIsScopeReady(true);
|
|
57
57
|
});
|
|
58
58
|
}, [serviceScope]);
|
|
59
59
|
// Create isolated Jotai store for this Provider instance
|
|
60
60
|
// Each store is independent, ensuring complete state isolation
|
|
61
|
-
|
|
61
|
+
const store = React.useMemo(() => createStore(), []);
|
|
62
62
|
// Get atom setters (using the isolated store)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
const setProperties = useSetAtom(spfxAtoms.properties, { store });
|
|
64
|
+
const setDisplayMode = useSetAtom(spfxAtoms.displayMode, { store });
|
|
65
|
+
const setContainerEl = useSetAtom(spfxAtoms.containerEl, { store });
|
|
66
|
+
const setTheme = useSetAtom(spfxAtoms.theme, { store });
|
|
67
67
|
// Ref to track last known properties value (prevents loop)
|
|
68
|
-
|
|
68
|
+
const lastPropertiesRef = React.useRef(instanceAny.properties);
|
|
69
69
|
// Subscribe to theme changes (single subscription per instance)
|
|
70
70
|
useThemeSubscription(context, setTheme);
|
|
71
71
|
// Initialize atoms based on component type
|
|
72
|
-
React.useEffect(
|
|
72
|
+
React.useEffect(() => {
|
|
73
73
|
// Properties (common to all)
|
|
74
74
|
setProperties(instanceAny.properties);
|
|
75
75
|
lastPropertiesRef.current = instanceAny.properties;
|
|
@@ -87,7 +87,7 @@ export function SPFxProviderBase(props) {
|
|
|
87
87
|
]);
|
|
88
88
|
// Sync properties when they change (SPFx → Atom)
|
|
89
89
|
// Property Pane changes will trigger this via instance.properties reference change
|
|
90
|
-
React.useEffect(
|
|
90
|
+
React.useEffect(() => {
|
|
91
91
|
if (instanceAny.properties !== lastPropertiesRef.current) {
|
|
92
92
|
setProperties(instanceAny.properties);
|
|
93
93
|
lastPropertiesRef.current = instanceAny.properties;
|
|
@@ -95,8 +95,8 @@ export function SPFxProviderBase(props) {
|
|
|
95
95
|
}, [instanceAny.properties, setProperties, instanceAny]);
|
|
96
96
|
// Sync properties when atom changes (Atom → SPFx)
|
|
97
97
|
// Hook updates will trigger this via atom subscription
|
|
98
|
-
|
|
99
|
-
React.useEffect(
|
|
98
|
+
const properties = useAtomValue(spfxAtoms.properties, { store });
|
|
99
|
+
React.useEffect(() => {
|
|
100
100
|
// Guard: Don't sync if atom is still undefined (initial state before initialization)
|
|
101
101
|
// This prevents race condition where useAtomValue reads before initialization useEffect runs
|
|
102
102
|
if (properties === undefined) {
|
|
@@ -105,16 +105,16 @@ export function SPFxProviderBase(props) {
|
|
|
105
105
|
// Only sync if atom value is different from last known value
|
|
106
106
|
if (properties !== lastPropertiesRef.current) {
|
|
107
107
|
// Mutate SPFx properties object (copy all properties from atom to instance)
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
const target = instanceAny.properties;
|
|
109
|
+
const source = properties;
|
|
110
110
|
// Clear existing properties
|
|
111
|
-
for (
|
|
111
|
+
for (const key in target) {
|
|
112
112
|
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
113
113
|
delete target[key];
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
// Copy new properties
|
|
117
|
-
for (
|
|
117
|
+
for (const key in source) {
|
|
118
118
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
119
119
|
target[key] = source[key];
|
|
120
120
|
}
|
|
@@ -122,7 +122,7 @@ export function SPFxProviderBase(props) {
|
|
|
122
122
|
lastPropertiesRef.current = properties;
|
|
123
123
|
// Refresh Property Pane for WebParts (if propertyPane exists)
|
|
124
124
|
if (isWebPart(instance)) {
|
|
125
|
-
|
|
125
|
+
const ctx = instanceAny.context;
|
|
126
126
|
if (ctx.propertyPane && typeof ctx.propertyPane.refresh === 'function') {
|
|
127
127
|
ctx.propertyPane.refresh();
|
|
128
128
|
}
|
|
@@ -130,17 +130,17 @@ export function SPFxProviderBase(props) {
|
|
|
130
130
|
}
|
|
131
131
|
}, [properties, instance, instanceAny]);
|
|
132
132
|
// WebPart: Sync displayMode when it changes
|
|
133
|
-
React.useEffect(
|
|
133
|
+
React.useEffect(() => {
|
|
134
134
|
if (isWebPart(instance)) {
|
|
135
135
|
setDisplayMode(instanceAny.displayMode);
|
|
136
136
|
}
|
|
137
137
|
}, [instance, instanceAny, setDisplayMode]);
|
|
138
138
|
// Create context value (memoized to prevent re-renders)
|
|
139
|
-
|
|
140
|
-
instanceId
|
|
139
|
+
const contextValue = React.useMemo(() => ({
|
|
140
|
+
instanceId,
|
|
141
141
|
spfxContext: context,
|
|
142
|
-
kind
|
|
143
|
-
})
|
|
142
|
+
kind,
|
|
143
|
+
}), [instanceId, context, kind]);
|
|
144
144
|
// Guard: Wait for serviceScope to be finished before rendering children
|
|
145
145
|
// This ensures all hooks can safely consume services via serviceScope.consume()
|
|
146
146
|
// If serviceScope is already finished, this guard passes immediately (no flash)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-base.internal.js","sourceRoot":"","sources":["../../src/core/provider-base.internal.tsx"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,oEAAoE;AAEpE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EACL,mBAAmB,EACnB,SAAS,GACV,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAgC;
|
|
1
|
+
{"version":3,"file":"provider-base.internal.js","sourceRoot":"","sources":["../../src/core/provider-base.internal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseApplicationCustomizer } from '@microsoft/sp-application-base';
|
|
2
|
+
/**
|
|
3
|
+
* If your command set uses the ClientSideComponentProperties JSON input,
|
|
4
|
+
* it will be deserialized into the BaseExtension.properties object.
|
|
5
|
+
* You can define an interface to describe it.
|
|
6
|
+
*/
|
|
7
|
+
export interface ISpFxReactToolkitTestApplicationCustomizerProperties {
|
|
8
|
+
testMessage: string;
|
|
9
|
+
}
|
|
10
|
+
/** A Custom Action which can be run during execution of a Client Side Application */
|
|
11
|
+
export default class SpFxReactToolkitTestApplicationCustomizer extends BaseApplicationCustomizer<ISpFxReactToolkitTestApplicationCustomizerProperties> {
|
|
12
|
+
onInit(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=SpFxReactToolkitTestApplicationCustomizer.d.ts.map
|
package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpFxReactToolkitTestApplicationCustomizer.d.ts","sourceRoot":"","sources":["../../../src/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,yBAAyB,EAC1B,MAAM,gCAAgC,CAAC;AAOxC;;;;GAIG;AACH,MAAM,WAAW,oDAAoD;IAEnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,yCACnB,SAAQ,yBAAyB,CAAC,oDAAoD,CAAC;IAEhF,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAc/B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Log } from '@microsoft/sp-core-library';
|
|
2
|
+
import { BaseApplicationCustomizer } from '@microsoft/sp-application-base';
|
|
3
|
+
import { Dialog } from '@microsoft/sp-dialog';
|
|
4
|
+
import * as strings from 'SpFxReactToolkitTestApplicationCustomizerStrings';
|
|
5
|
+
const LOG_SOURCE = 'SpFxReactToolkitTestApplicationCustomizer';
|
|
6
|
+
/** A Custom Action which can be run during execution of a Client Side Application */
|
|
7
|
+
export default class SpFxReactToolkitTestApplicationCustomizer extends BaseApplicationCustomizer {
|
|
8
|
+
onInit() {
|
|
9
|
+
Log.info(LOG_SOURCE, `Initialized ${strings.Title}`);
|
|
10
|
+
let message = this.properties.testMessage;
|
|
11
|
+
if (!message) {
|
|
12
|
+
message = '(No properties were provided.)';
|
|
13
|
+
}
|
|
14
|
+
Dialog.alert(`Hello from ${strings.Title}:\n\n${message}`).catch(() => {
|
|
15
|
+
/* handle error */
|
|
16
|
+
});
|
|
17
|
+
return Promise.resolve();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=SpFxReactToolkitTestApplicationCustomizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpFxReactToolkitTestApplicationCustomizer.js","sourceRoot":"","sources":["../../../src/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,EACL,yBAAyB,EAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,OAAO,MAAM,kDAAkD,CAAC;AAE5E,MAAM,UAAU,GAAW,2CAA2C,CAAC;AAYvE,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,yCACnB,SAAQ,yBAA+E;IAEhF,MAAM;QACX,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAErD,IAAI,OAAO,GAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,gCAAgC,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,KAAK,QAAQ,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACpE,kBAAkB;QACpB,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
package/lib/extensions/spFxReactToolkitTest/SpFxReactToolkitTestApplicationCustomizer.manifest.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-extension-manifest.schema.json",
|
|
3
|
+
|
|
4
|
+
"id": "4c2e58cc-1253-43e5-bfa3-b22a07ace279",
|
|
5
|
+
"alias": "SpFxReactToolkitTestApplicationCustomize",
|
|
6
|
+
"componentType": "Extension",
|
|
7
|
+
"extensionType": "ApplicationCustomizer",
|
|
8
|
+
|
|
9
|
+
// The "*" signifies that the version should be taken from the package.json
|
|
10
|
+
"version": "*",
|
|
11
|
+
"manifestVersion": 2,
|
|
12
|
+
|
|
13
|
+
// If true, the component can only be installed on sites where Custom Script is allowed.
|
|
14
|
+
// Components that allow authors to embed arbitrary script code should set this to true.
|
|
15
|
+
// https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f
|
|
16
|
+
"requiresCustomScript": false
|
|
17
|
+
}
|
package/lib/hooks/index.d.ts
CHANGED
|
@@ -59,6 +59,7 @@ export * from './useSPFxServiceScope';
|
|
|
59
59
|
export * from './useSPFxSiteInfo';
|
|
60
60
|
export * from './useSPFxStorage';
|
|
61
61
|
export * from './useSPFxTeams';
|
|
62
|
+
export * from './useSPFxTenantKeyValueStore';
|
|
62
63
|
export * from './useSPFxTenantProperty';
|
|
63
64
|
export * from './useSPFxThemeInfo';
|
|
64
65
|
export * from './useSPFxUserInfo';
|
package/lib/hooks/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
package/lib/hooks/index.js
CHANGED
|
@@ -59,6 +59,7 @@ export * from './useSPFxServiceScope';
|
|
|
59
59
|
export * from './useSPFxSiteInfo';
|
|
60
60
|
export * from './useSPFxStorage';
|
|
61
61
|
export * from './useSPFxTeams';
|
|
62
|
+
export * from './useSPFxTenantKeyValueStore';
|
|
62
63
|
export * from './useSPFxTenantProperty';
|
|
63
64
|
export * from './useSPFxThemeInfo';
|
|
64
65
|
export * from './useSPFxUserInfo';
|
package/lib/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { SPHttpClient } from '@microsoft/sp-http';
|
|
3
|
+
/**
|
|
4
|
+
* Return type for useAppCatalogUrl internal hook
|
|
5
|
+
*/
|
|
6
|
+
export interface AppCatalogUrlInfo {
|
|
7
|
+
/** Resolved tenant app catalog URL, or undefined if not yet discovered */
|
|
8
|
+
readonly appCatalogUrl: string | undefined;
|
|
9
|
+
/** SPHttpClient instance from context */
|
|
10
|
+
readonly spHttpClient: SPHttpClient | undefined;
|
|
11
|
+
/** Discover and return the tenant app catalog URL (cached after first call) */
|
|
12
|
+
readonly discoverAppCatalogUrl: () => Promise<string>;
|
|
13
|
+
/** Check if current user is Site Collection Admin on the app catalog */
|
|
14
|
+
readonly checkWritePermission: (catalogUrl: string) => Promise<boolean>;
|
|
15
|
+
/** Ref tracking component mounted state */
|
|
16
|
+
readonly isMountedRef: React.MutableRefObject<boolean>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Internal hook to discover and cache the tenant app catalog URL.
|
|
20
|
+
* Shared by useSPFxTenantProperty and useSPFxTenantKeyValueStore.
|
|
21
|
+
*
|
|
22
|
+
* @returns Object with app catalog URL, discovery function, and permission check
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare function useAppCatalogUrl(): AppCatalogUrlInfo;
|
|
26
|
+
//# sourceMappingURL=useAppCatalogUrl.internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAppCatalogUrl.internal.d.ts","sourceRoot":"","sources":["../../src/hooks/useAppCatalogUrl.internal.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,yCAAyC;IACzC,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IAChD,+EAA+E;IAC/E,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,wEAAwE;IACxE,QAAQ,CAAC,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACxD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CA2EpD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// useAppCatalogUrl.internal.ts
|
|
2
|
+
// Internal hook to discover and cache the tenant app catalog URL
|
|
3
|
+
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
4
|
+
import { useSPFxSPHttpClient } from './useSPFxSPHttpClient';
|
|
5
|
+
import { useSPFxPageContext } from './useSPFxPageContext';
|
|
6
|
+
import { SPHttpClient } from '@microsoft/sp-http';
|
|
7
|
+
/**
|
|
8
|
+
* Internal hook to discover and cache the tenant app catalog URL.
|
|
9
|
+
* Shared by useSPFxTenantProperty and useSPFxTenantKeyValueStore.
|
|
10
|
+
*
|
|
11
|
+
* @returns Object with app catalog URL, discovery function, and permission check
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export function useAppCatalogUrl() {
|
|
15
|
+
const { client: spHttpClient } = useSPFxSPHttpClient();
|
|
16
|
+
const pageContext = useSPFxPageContext();
|
|
17
|
+
const [appCatalogUrl, setAppCatalogUrl] = useState(undefined);
|
|
18
|
+
const isMountedRef = useRef(true);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
isMountedRef.current = true;
|
|
21
|
+
return () => {
|
|
22
|
+
isMountedRef.current = false;
|
|
23
|
+
};
|
|
24
|
+
}, []);
|
|
25
|
+
const discoverAppCatalogUrl = useCallback(async () => {
|
|
26
|
+
if (!spHttpClient || !pageContext) {
|
|
27
|
+
throw new Error('SPHttpClient or PageContext not available');
|
|
28
|
+
}
|
|
29
|
+
if (appCatalogUrl) {
|
|
30
|
+
return appCatalogUrl;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const response = await spHttpClient.get(`${pageContext.web.absoluteUrl}/_api/SP_TenantSettings_Current`, SPHttpClient.configurations.v1);
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new Error(`Failed to discover app catalog: ${response.statusText}`);
|
|
36
|
+
}
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
if (!data.CorporateCatalogUrl) {
|
|
39
|
+
throw new Error('Tenant app catalog is not provisioned. Please provision the app catalog first.');
|
|
40
|
+
}
|
|
41
|
+
if (isMountedRef.current) {
|
|
42
|
+
setAppCatalogUrl(data.CorporateCatalogUrl);
|
|
43
|
+
}
|
|
44
|
+
return data.CorporateCatalogUrl;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
throw new Error(`App catalog discovery failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
48
|
+
}
|
|
49
|
+
}, [spHttpClient, pageContext, appCatalogUrl]);
|
|
50
|
+
const checkWritePermission = useCallback(async (catalogUrl) => {
|
|
51
|
+
if (!spHttpClient)
|
|
52
|
+
return false;
|
|
53
|
+
try {
|
|
54
|
+
const response = await spHttpClient.get(`${catalogUrl}/_api/web/currentuser?$select=IsSiteAdmin`, SPHttpClient.configurations.v1);
|
|
55
|
+
if (!response.ok)
|
|
56
|
+
return false;
|
|
57
|
+
const user = await response.json();
|
|
58
|
+
return user.IsSiteAdmin === true;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}, [spHttpClient]);
|
|
64
|
+
return {
|
|
65
|
+
appCatalogUrl,
|
|
66
|
+
spHttpClient,
|
|
67
|
+
discoverAppCatalogUrl,
|
|
68
|
+
checkWritePermission,
|
|
69
|
+
isMountedRef,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=useAppCatalogUrl.internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAppCatalogUrl.internal.js","sourceRoot":"","sources":["../../src/hooks/useAppCatalogUrl.internal.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,iEAAiE;AAEjE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA0BlD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACvD,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IAEzC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAElF,MAAM,YAAY,GAAG,MAAM,CAAU,IAAI,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,qBAAqB,GAAG,WAAW,CAAC,KAAK,IAAqB,EAAE;QACpE,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAyB,MAAM,YAAY,CAAC,GAAG,CAC3D,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,iCAAiC,EAC/D,YAAY,CAAC,cAAc,CAAC,EAAE,CAC/B,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,MAAM,IAAI,GAA8B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE9D,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;YACpG,CAAC;YAED,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC7C,CAAC;YAED,OAAO,IAAI,CAAC,mBAAmB,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;IAE/C,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,EAAE,UAAkB,EAAoB,EAAE;QACtF,IAAI,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAyB,MAAM,YAAY,CAAC,GAAG,CAC3D,GAAG,UAAU,2CAA2C,EACxD,YAAY,CAAC,cAAc,CAAC,EAAE,CAC/B,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;YAE/B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO;QACL,aAAa;QACb,YAAY;QACZ,qBAAqB;QACrB,oBAAoB;QACpB,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -1,42 +1,6 @@
|
|
|
1
1
|
// useAsyncInvoke.internal.ts
|
|
2
2
|
// Internal hook for async invocation with state management
|
|
3
3
|
// Used by HTTP client hooks to reduce code duplication
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
14
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
15
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
16
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
17
|
-
function step(op) {
|
|
18
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
19
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
20
|
-
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;
|
|
21
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
22
|
-
switch (op[0]) {
|
|
23
|
-
case 0: case 1: t = op; break;
|
|
24
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
25
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
26
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
27
|
-
default:
|
|
28
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
29
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
30
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
31
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
32
|
-
if (t[2]) _.ops.pop();
|
|
33
|
-
_.trys.pop(); continue;
|
|
34
|
-
}
|
|
35
|
-
op = body.call(thisArg, _);
|
|
36
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
37
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
4
|
import { useState, useCallback } from 'react';
|
|
41
5
|
/**
|
|
42
6
|
* Internal hook for async invocation with state management.
|
|
@@ -68,51 +32,39 @@ import { useState, useCallback } from 'react';
|
|
|
68
32
|
*
|
|
69
33
|
* @internal
|
|
70
34
|
*/
|
|
71
|
-
export function useAsyncInvoke(client, notReadyError) {
|
|
72
|
-
var _this = this;
|
|
73
|
-
if (notReadyError === void 0) { notReadyError = 'Client not initialized'; }
|
|
35
|
+
export function useAsyncInvoke(client, notReadyError = 'Client not initialized') {
|
|
74
36
|
// State management
|
|
75
|
-
|
|
76
|
-
|
|
37
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
38
|
+
const [error, setError] = useState(undefined);
|
|
77
39
|
// Invoke with automatic state management
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
capturedError = err_1 instanceof Error ? err_1 : new Error(String(err_1));
|
|
98
|
-
setError(capturedError);
|
|
99
|
-
throw capturedError;
|
|
100
|
-
case 4:
|
|
101
|
-
setIsLoading(false);
|
|
102
|
-
return [7 /*endfinally*/];
|
|
103
|
-
case 5: return [2 /*return*/];
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}); }, [client, notReadyError]);
|
|
40
|
+
const invoke = useCallback(async (fn) => {
|
|
41
|
+
if (!client) {
|
|
42
|
+
throw new Error(notReadyError);
|
|
43
|
+
}
|
|
44
|
+
setIsLoading(true);
|
|
45
|
+
setError(undefined);
|
|
46
|
+
try {
|
|
47
|
+
const result = await fn(client);
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const capturedError = err instanceof Error ? err : new Error(String(err));
|
|
52
|
+
setError(capturedError);
|
|
53
|
+
throw capturedError;
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
setIsLoading(false);
|
|
57
|
+
}
|
|
58
|
+
}, [client, notReadyError]);
|
|
107
59
|
// Clear error helper
|
|
108
|
-
|
|
60
|
+
const clearError = useCallback(() => {
|
|
109
61
|
setError(undefined);
|
|
110
62
|
}, []);
|
|
111
63
|
return {
|
|
112
|
-
invoke
|
|
113
|
-
isLoading
|
|
114
|
-
error
|
|
115
|
-
clearError
|
|
64
|
+
invoke,
|
|
65
|
+
isLoading,
|
|
66
|
+
error,
|
|
67
|
+
clearError,
|
|
116
68
|
};
|
|
117
69
|
}
|
|
118
70
|
//# sourceMappingURL=useAsyncInvoke.internal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAsyncInvoke.internal.js","sourceRoot":"","sources":["../../src/hooks/useAsyncInvoke.internal.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,2DAA2D;AAC3D,uDAAuD
|
|
1
|
+
{"version":3,"file":"useAsyncInvoke.internal.js","sourceRoot":"","sources":["../../src/hooks/useAsyncInvoke.internal.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,2DAA2D;AAC3D,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAgC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA2B,EAC3B,gBAAwB,wBAAwB;IAEhD,mBAAmB;IACnB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB,SAAS,CAAC,CAAC;IAEjE,yCAAyC;IACzC,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAK,EAAmC,EAAc,EAAE;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxB,MAAM,aAAa,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,CAAC,CACxB,CAAC;IAEF,qBAAqB;IACrB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,MAAM;QACN,SAAS;QACT,KAAK;QACL,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -15,6 +15,7 @@ export interface SPFxAadHttpClientInfo {
|
|
|
15
15
|
*
|
|
16
16
|
* @param fn - Function that receives AadHttpClient and returns a promise
|
|
17
17
|
* @returns Promise with the result
|
|
18
|
+
* @throws Error if client is not initialized yet
|
|
18
19
|
*
|
|
19
20
|
* @example
|
|
20
21
|
* ```tsx
|
|
@@ -35,6 +36,7 @@ export interface SPFxAadHttpClientInfo {
|
|
|
35
36
|
/**
|
|
36
37
|
* Last error from invoke() calls.
|
|
37
38
|
* Does not capture errors from direct client usage.
|
|
39
|
+
* @see initError for initialization errors
|
|
38
40
|
*/
|
|
39
41
|
readonly error: Error | undefined;
|
|
40
42
|
/** Clear the current error */
|
|
@@ -43,6 +45,50 @@ export interface SPFxAadHttpClientInfo {
|
|
|
43
45
|
readonly setResourceUrl: (url: string) => void;
|
|
44
46
|
/** Current Azure AD resource URL or App ID */
|
|
45
47
|
readonly resourceUrl: string | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* True while the AAD client is being initialized.
|
|
50
|
+
* Use this to show a loading indicator during startup.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* const { client, isInitializing } = useSPFxAadHttpClient('https://api.contoso.com');
|
|
55
|
+
*
|
|
56
|
+
* if (isInitializing) return <Spinner label="Initializing AAD client..." />;
|
|
57
|
+
* if (!client) return <Error message="AAD client unavailable" />;
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
readonly isInitializing: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Error that occurred during client initialization.
|
|
63
|
+
* If set, the client will remain undefined.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```tsx
|
|
67
|
+
* const { initError } = useSPFxAadHttpClient('https://api.contoso.com');
|
|
68
|
+
*
|
|
69
|
+
* if (initError) {
|
|
70
|
+
* return <MessageBar messageBarType={MessageBarType.error}>
|
|
71
|
+
* Failed to initialize AAD client: {initError.message}
|
|
72
|
+
* </MessageBar>;
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
readonly initError: Error | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Computed state: true when client is ready for use.
|
|
79
|
+
* Equivalent to: client !== undefined && !isInitializing && !initError
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```tsx
|
|
83
|
+
* const { isReady, invoke, resourceUrl } = useSPFxAadHttpClient('https://api.contoso.com');
|
|
84
|
+
*
|
|
85
|
+
* if (!isReady) return <Spinner />;
|
|
86
|
+
*
|
|
87
|
+
* // Safe to use client or invoke
|
|
88
|
+
* const data = await invoke(c => c.get(`${resourceUrl}/api/data`, ...).then(r => r.json()));
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
readonly isReady: boolean;
|
|
46
92
|
}
|
|
47
93
|
/**
|
|
48
94
|
* Hook to access Azure AD-secured APIs with built-in state management
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSPFxAadHttpClient.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxAadHttpClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAGzE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAE3C
|
|
1
|
+
{"version":3,"file":"useSPFxAadHttpClient.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxAadHttpClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAGzE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAE3C;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE9E;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IAElC,8BAA8B;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAEhC,yEAAyE;IACzE,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/C,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IAEjC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2LG;AACH,wBAAgB,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAsGvF"}
|