@apvee/spfx-react-toolkit 1.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/LICENSE +21 -0
- package/README.md +2012 -0
- package/lib/core/atoms.internal.d.ts +53 -0
- package/lib/core/atoms.internal.d.ts.map +1 -0
- package/lib/core/atoms.internal.js +35 -0
- package/lib/core/atoms.internal.js.map +1 -0
- package/lib/core/context.internal.d.ts +23 -0
- package/lib/core/context.internal.d.ts.map +1 -0
- package/lib/core/context.internal.js +34 -0
- package/lib/core/context.internal.js.map +1 -0
- package/lib/core/index.d.ts +6 -0
- package/lib/core/index.d.ts.map +1 -0
- package/lib/core/index.js +6 -0
- package/lib/core/index.js.map +1 -0
- package/lib/core/provider-application-customizer.d.ts +57 -0
- package/lib/core/provider-application-customizer.d.ts.map +1 -0
- package/lib/core/provider-application-customizer.js +45 -0
- package/lib/core/provider-application-customizer.js.map +1 -0
- package/lib/core/provider-base.internal.d.ts +20 -0
- package/lib/core/provider-base.internal.d.ts.map +1 -0
- package/lib/core/provider-base.internal.js +126 -0
- package/lib/core/provider-base.internal.js.map +1 -0
- package/lib/core/provider-field-customizer.d.ts +58 -0
- package/lib/core/provider-field-customizer.d.ts.map +1 -0
- package/lib/core/provider-field-customizer.js +46 -0
- package/lib/core/provider-field-customizer.js.map +1 -0
- package/lib/core/provider-listview-commandset.d.ts +60 -0
- package/lib/core/provider-listview-commandset.d.ts.map +1 -0
- package/lib/core/provider-listview-commandset.js +48 -0
- package/lib/core/provider-listview-commandset.js.map +1 -0
- package/lib/core/provider-webpart.d.ts +48 -0
- package/lib/core/provider-webpart.d.ts.map +1 -0
- package/lib/core/provider-webpart.js +36 -0
- package/lib/core/provider-webpart.js.map +1 -0
- package/lib/core/types.d.ts +84 -0
- package/lib/core/types.d.ts.map +1 -0
- package/lib/core/types.js +4 -0
- package/lib/core/types.js.map +1 -0
- package/lib/hooks/index.d.ts +34 -0
- package/lib/hooks/index.d.ts.map +1 -0
- package/lib/hooks/index.js +34 -0
- package/lib/hooks/index.js.map +1 -0
- package/lib/hooks/useSPFxAadHttpClient.d.ts +231 -0
- package/lib/hooks/useSPFxAadHttpClient.d.ts.map +1 -0
- package/lib/hooks/useSPFxAadHttpClient.js +299 -0
- package/lib/hooks/useSPFxAadHttpClient.js.map +1 -0
- package/lib/hooks/useSPFxContainerInfo.d.ts +41 -0
- package/lib/hooks/useSPFxContainerInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxContainerInfo.js +47 -0
- package/lib/hooks/useSPFxContainerInfo.js.map +1 -0
- package/lib/hooks/useSPFxContainerSize.d.ts +119 -0
- package/lib/hooks/useSPFxContainerSize.d.ts.map +1 -0
- package/lib/hooks/useSPFxContainerSize.js +150 -0
- package/lib/hooks/useSPFxContainerSize.js.map +1 -0
- package/lib/hooks/useSPFxContext.d.ts +14 -0
- package/lib/hooks/useSPFxContext.d.ts.map +1 -0
- package/lib/hooks/useSPFxContext.js +16 -0
- package/lib/hooks/useSPFxContext.js.map +1 -0
- package/lib/hooks/useSPFxCorrelationInfo.d.ts +51 -0
- package/lib/hooks/useSPFxCorrelationInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxCorrelationInfo.js +58 -0
- package/lib/hooks/useSPFxCorrelationInfo.js.map +1 -0
- package/lib/hooks/useSPFxCrossSitePermissions.d.ts +81 -0
- package/lib/hooks/useSPFxCrossSitePermissions.d.ts.map +1 -0
- package/lib/hooks/useSPFxCrossSitePermissions.js +132 -0
- package/lib/hooks/useSPFxCrossSitePermissions.js.map +1 -0
- package/lib/hooks/useSPFxDisplayMode.d.ts +61 -0
- package/lib/hooks/useSPFxDisplayMode.d.ts.map +1 -0
- package/lib/hooks/useSPFxDisplayMode.js +69 -0
- package/lib/hooks/useSPFxDisplayMode.js.map +1 -0
- package/lib/hooks/useSPFxEnvironmentInfo.d.ts +63 -0
- package/lib/hooks/useSPFxEnvironmentInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxEnvironmentInfo.js +91 -0
- package/lib/hooks/useSPFxEnvironmentInfo.js.map +1 -0
- package/lib/hooks/useSPFxFluent9ThemeInfo.d.ts +105 -0
- package/lib/hooks/useSPFxFluent9ThemeInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxFluent9ThemeInfo.js +136 -0
- package/lib/hooks/useSPFxFluent9ThemeInfo.js.map +1 -0
- package/lib/hooks/useSPFxHubSiteInfo.d.ts +80 -0
- package/lib/hooks/useSPFxHubSiteInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxHubSiteInfo.js +127 -0
- package/lib/hooks/useSPFxHubSiteInfo.js.map +1 -0
- package/lib/hooks/useSPFxInstanceInfo.d.ts +41 -0
- package/lib/hooks/useSPFxInstanceInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxInstanceInfo.js +40 -0
- package/lib/hooks/useSPFxInstanceInfo.js.map +1 -0
- package/lib/hooks/useSPFxListInfo.d.ts +64 -0
- package/lib/hooks/useSPFxListInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxListInfo.js +70 -0
- package/lib/hooks/useSPFxListInfo.js.map +1 -0
- package/lib/hooks/useSPFxLocaleInfo.d.ts +123 -0
- package/lib/hooks/useSPFxLocaleInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxLocaleInfo.js +109 -0
- package/lib/hooks/useSPFxLocaleInfo.js.map +1 -0
- package/lib/hooks/useSPFxLogger.d.ts +108 -0
- package/lib/hooks/useSPFxLogger.d.ts.map +1 -0
- package/lib/hooks/useSPFxLogger.js +117 -0
- package/lib/hooks/useSPFxLogger.js.map +1 -0
- package/lib/hooks/useSPFxMSGraphClient.d.ts +200 -0
- package/lib/hooks/useSPFxMSGraphClient.d.ts.map +1 -0
- package/lib/hooks/useSPFxMSGraphClient.js +264 -0
- package/lib/hooks/useSPFxMSGraphClient.js.map +1 -0
- package/lib/hooks/useSPFxOneDriveAppData.d.ts +264 -0
- package/lib/hooks/useSPFxOneDriveAppData.d.ts.map +1 -0
- package/lib/hooks/useSPFxOneDriveAppData.js +395 -0
- package/lib/hooks/useSPFxOneDriveAppData.js.map +1 -0
- package/lib/hooks/useSPFxPageContext.d.ts +37 -0
- package/lib/hooks/useSPFxPageContext.d.ts.map +1 -0
- package/lib/hooks/useSPFxPageContext.js +49 -0
- package/lib/hooks/useSPFxPageContext.js.map +1 -0
- package/lib/hooks/useSPFxPageType.d.ts +82 -0
- package/lib/hooks/useSPFxPageType.d.ts.map +1 -0
- package/lib/hooks/useSPFxPageType.js +137 -0
- package/lib/hooks/useSPFxPageType.js.map +1 -0
- package/lib/hooks/useSPFxPerformance.d.ts +72 -0
- package/lib/hooks/useSPFxPerformance.d.ts.map +1 -0
- package/lib/hooks/useSPFxPerformance.js +167 -0
- package/lib/hooks/useSPFxPerformance.js.map +1 -0
- package/lib/hooks/useSPFxPermissions.d.ts +61 -0
- package/lib/hooks/useSPFxPermissions.d.ts.map +1 -0
- package/lib/hooks/useSPFxPermissions.js +73 -0
- package/lib/hooks/useSPFxPermissions.js.map +1 -0
- package/lib/hooks/useSPFxPnP.d.ts +539 -0
- package/lib/hooks/useSPFxPnP.d.ts.map +1 -0
- package/lib/hooks/useSPFxPnP.js +533 -0
- package/lib/hooks/useSPFxPnP.js.map +1 -0
- package/lib/hooks/useSPFxPnPContext.d.ts +290 -0
- package/lib/hooks/useSPFxPnPContext.d.ts.map +1 -0
- package/lib/hooks/useSPFxPnPContext.js +340 -0
- package/lib/hooks/useSPFxPnPContext.js.map +1 -0
- package/lib/hooks/useSPFxPnPList.d.ts +545 -0
- package/lib/hooks/useSPFxPnPList.d.ts.map +1 -0
- package/lib/hooks/useSPFxPnPList.js +906 -0
- package/lib/hooks/useSPFxPnPList.js.map +1 -0
- package/lib/hooks/useSPFxPnPSearch.d.ts +540 -0
- package/lib/hooks/useSPFxPnPSearch.d.ts.map +1 -0
- package/lib/hooks/useSPFxPnPSearch.js +672 -0
- package/lib/hooks/useSPFxPnPSearch.js.map +1 -0
- package/lib/hooks/useSPFxProperties.d.ts +80 -0
- package/lib/hooks/useSPFxProperties.d.ts.map +1 -0
- package/lib/hooks/useSPFxProperties.js +95 -0
- package/lib/hooks/useSPFxProperties.js.map +1 -0
- package/lib/hooks/useSPFxSPHttpClient.d.ts +218 -0
- package/lib/hooks/useSPFxSPHttpClient.d.ts.map +1 -0
- package/lib/hooks/useSPFxSPHttpClient.js +287 -0
- package/lib/hooks/useSPFxSPHttpClient.js.map +1 -0
- package/lib/hooks/useSPFxServiceScope.d.ts +107 -0
- package/lib/hooks/useSPFxServiceScope.d.ts.map +1 -0
- package/lib/hooks/useSPFxServiceScope.js +105 -0
- package/lib/hooks/useSPFxServiceScope.js.map +1 -0
- package/lib/hooks/useSPFxSiteInfo.d.ts +116 -0
- package/lib/hooks/useSPFxSiteInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxSiteInfo.js +109 -0
- package/lib/hooks/useSPFxSiteInfo.js.map +1 -0
- package/lib/hooks/useSPFxStorage.d.ts +81 -0
- package/lib/hooks/useSPFxStorage.d.ts.map +1 -0
- package/lib/hooks/useSPFxStorage.js +140 -0
- package/lib/hooks/useSPFxStorage.js.map +1 -0
- package/lib/hooks/useSPFxTeams.d.ts +63 -0
- package/lib/hooks/useSPFxTeams.d.ts.map +1 -0
- package/lib/hooks/useSPFxTeams.js +198 -0
- package/lib/hooks/useSPFxTeams.js.map +1 -0
- package/lib/hooks/useSPFxTenantProperty.d.ts +389 -0
- package/lib/hooks/useSPFxTenantProperty.d.ts.map +1 -0
- package/lib/hooks/useSPFxTenantProperty.js +683 -0
- package/lib/hooks/useSPFxTenantProperty.js.map +1 -0
- package/lib/hooks/useSPFxThemeInfo.d.ts +27 -0
- package/lib/hooks/useSPFxThemeInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxThemeInfo.js +33 -0
- package/lib/hooks/useSPFxThemeInfo.js.map +1 -0
- package/lib/hooks/useSPFxUserInfo.d.ts +47 -0
- package/lib/hooks/useSPFxUserInfo.d.ts.map +1 -0
- package/lib/hooks/useSPFxUserInfo.js +47 -0
- package/lib/hooks/useSPFxUserInfo.js.map +1 -0
- package/lib/hooks/useSPFxUserPhoto.d.ts +270 -0
- package/lib/hooks/useSPFxUserPhoto.d.ts.map +1 -0
- package/lib/hooks/useSPFxUserPhoto.js +346 -0
- package/lib/hooks/useSPFxUserPhoto.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +3 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/resize-observer.internal.d.ts +10 -0
- package/lib/utils/resize-observer.internal.d.ts.map +1 -0
- package/lib/utils/resize-observer.internal.js +34 -0
- package/lib/utils/resize-observer.internal.js.map +1 -0
- package/lib/utils/theme-subscription.internal.d.ts +11 -0
- package/lib/utils/theme-subscription.internal.d.ts.map +1 -0
- package/lib/utils/theme-subscription.internal.js +58 -0
- package/lib/utils/theme-subscription.internal.js.map +1 -0
- package/lib/utils/type-guards.internal.d.ts +35 -0
- package/lib/utils/type-guards.internal.d.ts.map +1 -0
- package/lib/utils/type-guards.internal.js +88 -0
- package/lib/utils/type-guards.internal.js.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.d.ts +13 -0
- package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.d.ts.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js +67 -0
- package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.manifest.json +21 -0
- package/lib/webparts/spFxReactToolkitTest/assets/welcome-dark.png +0 -0
- package/lib/webparts/spFxReactToolkitTest/assets/welcome-light.png +0 -0
- package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.d.ts +8 -0
- package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.d.ts.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.js +2 -0
- package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.js.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.d.ts +8 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.d.ts.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js +1351 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.css +2 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.d.ts +18 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.d.ts.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js +19 -0
- package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js.map +1 -0
- package/lib/webparts/spFxReactToolkitTest/loc/en-us.js +16 -0
- package/package.json +95 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useSPFxContext } from '../core/context.internal';
|
|
2
|
+
/**
|
|
3
|
+
* Internal hook to access SPFx context
|
|
4
|
+
*
|
|
5
|
+
* Returns:
|
|
6
|
+
* - instanceId: Unique identifier for this SPFx instance
|
|
7
|
+
* - spfxContext: The SPFx context object (WebPartContext, etc.)
|
|
8
|
+
* - kind: Type of host component ('WebPart', 'AppCustomizer', etc.)
|
|
9
|
+
*
|
|
10
|
+
* @throws Error if used outside SPFxProvider
|
|
11
|
+
* @internal - Not exported in public API
|
|
12
|
+
*/
|
|
13
|
+
export { useSPFxContext };
|
|
14
|
+
//# sourceMappingURL=useSPFxContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxContext.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxContext.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// useSPFxContext.ts
|
|
2
|
+
// Internal hook to access SPFx context metadata
|
|
3
|
+
import { useSPFxContext } from '../core/context.internal';
|
|
4
|
+
/**
|
|
5
|
+
* Internal hook to access SPFx context
|
|
6
|
+
*
|
|
7
|
+
* Returns:
|
|
8
|
+
* - instanceId: Unique identifier for this SPFx instance
|
|
9
|
+
* - spfxContext: The SPFx context object (WebPartContext, etc.)
|
|
10
|
+
* - kind: Type of host component ('WebPart', 'AppCustomizer', etc.)
|
|
11
|
+
*
|
|
12
|
+
* @throws Error if used outside SPFxProvider
|
|
13
|
+
* @internal - Not exported in public API
|
|
14
|
+
*/
|
|
15
|
+
export { useSPFxContext };
|
|
16
|
+
//# sourceMappingURL=useSPFxContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxContext.js","sourceRoot":"","sources":["../../src/hooks/useSPFxContext.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,gDAAgD;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return type for useSPFxCorrelationInfo hook
|
|
3
|
+
*/
|
|
4
|
+
export interface SPFxCorrelationInfo {
|
|
5
|
+
/** Correlation ID for tracking requests across services */
|
|
6
|
+
readonly correlationId: string | undefined;
|
|
7
|
+
/** Azure AD Tenant ID */
|
|
8
|
+
readonly tenantId: string | undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Hook for correlation and tenant ID extraction
|
|
12
|
+
*
|
|
13
|
+
* Provides diagnostic IDs for tracking and monitoring:
|
|
14
|
+
* - Correlation ID: Tracks requests across SPFx → SharePoint → Microsoft Graph
|
|
15
|
+
* - Tenant ID: Azure AD tenant identifier
|
|
16
|
+
*
|
|
17
|
+
* These IDs are essential for:
|
|
18
|
+
* - Distributed tracing
|
|
19
|
+
* - Log correlation
|
|
20
|
+
* - Support tickets
|
|
21
|
+
* - Diagnostic troubleshooting
|
|
22
|
+
* - Security auditing
|
|
23
|
+
*
|
|
24
|
+
* Useful for:
|
|
25
|
+
* - Structured logging
|
|
26
|
+
* - Error tracking (Application Insights, etc.)
|
|
27
|
+
* - Support requests
|
|
28
|
+
* - Performance monitoring
|
|
29
|
+
*
|
|
30
|
+
* @returns Correlation and tenant identifiers
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* function MyComponent() {
|
|
35
|
+
* const { correlationId, tenantId } = useSPFxCorrelationInfo();
|
|
36
|
+
*
|
|
37
|
+
* const logError = (error: Error) => {
|
|
38
|
+
* console.error('Error occurred', {
|
|
39
|
+
* message: error.message,
|
|
40
|
+
* correlationId,
|
|
41
|
+
* tenantId,
|
|
42
|
+
* timestamp: new Date().toISOString()
|
|
43
|
+
* });
|
|
44
|
+
* };
|
|
45
|
+
*
|
|
46
|
+
* return <div>Tenant: {tenantId}</div>;
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function useSPFxCorrelationInfo(): SPFxCorrelationInfo;
|
|
51
|
+
//# sourceMappingURL=useSPFxCorrelationInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxCorrelationInfo.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxCorrelationInfo.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAgB5D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// useSPFxCorrelationInfo.ts
|
|
2
|
+
// Hook for correlation and tenant ID extraction
|
|
3
|
+
import { useSPFxPageContext } from './useSPFxPageContext';
|
|
4
|
+
/**
|
|
5
|
+
* Hook for correlation and tenant ID extraction
|
|
6
|
+
*
|
|
7
|
+
* Provides diagnostic IDs for tracking and monitoring:
|
|
8
|
+
* - Correlation ID: Tracks requests across SPFx → SharePoint → Microsoft Graph
|
|
9
|
+
* - Tenant ID: Azure AD tenant identifier
|
|
10
|
+
*
|
|
11
|
+
* These IDs are essential for:
|
|
12
|
+
* - Distributed tracing
|
|
13
|
+
* - Log correlation
|
|
14
|
+
* - Support tickets
|
|
15
|
+
* - Diagnostic troubleshooting
|
|
16
|
+
* - Security auditing
|
|
17
|
+
*
|
|
18
|
+
* Useful for:
|
|
19
|
+
* - Structured logging
|
|
20
|
+
* - Error tracking (Application Insights, etc.)
|
|
21
|
+
* - Support requests
|
|
22
|
+
* - Performance monitoring
|
|
23
|
+
*
|
|
24
|
+
* @returns Correlation and tenant identifiers
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* function MyComponent() {
|
|
29
|
+
* const { correlationId, tenantId } = useSPFxCorrelationInfo();
|
|
30
|
+
*
|
|
31
|
+
* const logError = (error: Error) => {
|
|
32
|
+
* console.error('Error occurred', {
|
|
33
|
+
* message: error.message,
|
|
34
|
+
* correlationId,
|
|
35
|
+
* tenantId,
|
|
36
|
+
* timestamp: new Date().toISOString()
|
|
37
|
+
* });
|
|
38
|
+
* };
|
|
39
|
+
*
|
|
40
|
+
* return <div>Tenant: {tenantId}</div>;
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function useSPFxCorrelationInfo() {
|
|
45
|
+
var _a, _b, _c;
|
|
46
|
+
var pageContext = useSPFxPageContext();
|
|
47
|
+
// correlationId is in pageContext.site (SPSite type - public API)
|
|
48
|
+
var correlationId = (_b = (_a = pageContext.site) === null || _a === void 0 ? void 0 : _a.correlationId) === null || _b === void 0 ? void 0 : _b.toString();
|
|
49
|
+
// tenantId is in pageContext.aadInfo (AzureActiveDirectoryInfo - internal type)
|
|
50
|
+
// Casting required because AzureActiveDirectoryInfo is not exposed in public types
|
|
51
|
+
var aadInfo = pageContext.aadInfo;
|
|
52
|
+
var tenantId = (_c = aadInfo === null || aadInfo === void 0 ? void 0 : aadInfo.tenantId) === null || _c === void 0 ? void 0 : _c.toString();
|
|
53
|
+
return {
|
|
54
|
+
correlationId: correlationId,
|
|
55
|
+
tenantId: tenantId,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=useSPFxCorrelationInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxCorrelationInfo.js","sourceRoot":"","sources":["../../src/hooks/useSPFxCorrelationInfo.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,gDAAgD;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAa1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,sBAAsB;;IACpC,IAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IAEzC,kEAAkE;IAClE,IAAM,aAAa,GAAG,MAAA,MAAA,WAAW,CAAC,IAAI,0CAAE,aAAa,0CAAE,QAAQ,EAAE,CAAC;IAElE,gFAAgF;IAChF,mFAAmF;IACnF,IAAM,OAAO,GAAG,WAAW,CAAC,OACuB,CAAC;IACpD,IAAM,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,0CAAE,QAAQ,EAAE,CAAC;IAE/C,OAAO;QACL,aAAa,eAAA;QACb,QAAQ,UAAA;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { SPPermission } from '@microsoft/sp-page-context';
|
|
2
|
+
/**
|
|
3
|
+
* Options for cross-site permissions retrieval
|
|
4
|
+
*/
|
|
5
|
+
export interface SPFxCrossSitePermissionsOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Optional web URL within the site (e.g., '/sites/mysite/subweb')
|
|
8
|
+
*/
|
|
9
|
+
webUrl?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Optional list ID to retrieve list-level permissions
|
|
12
|
+
*/
|
|
13
|
+
listId?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Information about cross-site permissions
|
|
17
|
+
*/
|
|
18
|
+
export interface SPFxCrossSitePermissionsInfo {
|
|
19
|
+
/**
|
|
20
|
+
* Site-level permissions
|
|
21
|
+
*/
|
|
22
|
+
sitePermissions?: SPPermission;
|
|
23
|
+
/**
|
|
24
|
+
* Web-level permissions
|
|
25
|
+
*/
|
|
26
|
+
webPermissions?: SPPermission;
|
|
27
|
+
/**
|
|
28
|
+
* List-level permissions (if listId provided)
|
|
29
|
+
*/
|
|
30
|
+
listPermissions?: SPPermission;
|
|
31
|
+
/**
|
|
32
|
+
* Check if user has specific web permission
|
|
33
|
+
*/
|
|
34
|
+
hasWebPermission: (permission: SPPermission) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Check if user has specific site permission
|
|
37
|
+
*/
|
|
38
|
+
hasSitePermission: (permission: SPPermission) => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if user has specific list permission
|
|
41
|
+
*/
|
|
42
|
+
hasListPermission: (permission: SPPermission) => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Loading state
|
|
45
|
+
*/
|
|
46
|
+
isLoading: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Error state
|
|
49
|
+
*/
|
|
50
|
+
error?: Error;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Hook to retrieve permissions for a different site/web/list
|
|
54
|
+
*
|
|
55
|
+
* @param siteUrl - The target site URL (optional - no fetch if undefined/empty)
|
|
56
|
+
* @param options - Optional configuration (webUrl, listId)
|
|
57
|
+
* @returns Permissions information with helper methods
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* // Lazy loading - no fetch until URL is set
|
|
62
|
+
* const [targetUrl, setTargetUrl] = useState<string | undefined>(undefined);
|
|
63
|
+
* const {
|
|
64
|
+
* sitePermissions,
|
|
65
|
+
* webPermissions,
|
|
66
|
+
* hasWebPermission,
|
|
67
|
+
* isLoading
|
|
68
|
+
* } = useSPFxCrossSitePermissions(targetUrl, {
|
|
69
|
+
* webUrl: 'https://contoso.sharepoint.com/sites/target/subweb'
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // Set URL when ready - triggers fetch
|
|
73
|
+
* setTargetUrl('https://contoso.sharepoint.com/sites/target');
|
|
74
|
+
*
|
|
75
|
+
* if (!isLoading && hasWebPermission(SPPermission.addListItems)) {
|
|
76
|
+
* // User can add items
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export declare function useSPFxCrossSitePermissions(siteUrl?: string, options?: SPFxCrossSitePermissionsOptions): SPFxCrossSitePermissionsInfo;
|
|
81
|
+
//# sourceMappingURL=useSPFxCrossSitePermissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxCrossSitePermissions.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxCrossSitePermissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAE/B;;OAEG;IACH,cAAc,CAAC,EAAE,YAAY,CAAC;IAE9B;;OAEG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAE/B;;OAEG;IACH,gBAAgB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;IAExD;;OAEG;IACH,iBAAiB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;IAEzD;;OAEG;IACH,iBAAiB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;IAEzD;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,+BAA+B,GACxC,4BAA4B,CA6H9B"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { SPPermission } from '@microsoft/sp-page-context';
|
|
3
|
+
import { SPHttpClient } from '@microsoft/sp-http';
|
|
4
|
+
import { useSPFxSPHttpClient } from './useSPFxSPHttpClient';
|
|
5
|
+
/**
|
|
6
|
+
* Hook to retrieve permissions for a different site/web/list
|
|
7
|
+
*
|
|
8
|
+
* @param siteUrl - The target site URL (optional - no fetch if undefined/empty)
|
|
9
|
+
* @param options - Optional configuration (webUrl, listId)
|
|
10
|
+
* @returns Permissions information with helper methods
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* // Lazy loading - no fetch until URL is set
|
|
15
|
+
* const [targetUrl, setTargetUrl] = useState<string | undefined>(undefined);
|
|
16
|
+
* const {
|
|
17
|
+
* sitePermissions,
|
|
18
|
+
* webPermissions,
|
|
19
|
+
* hasWebPermission,
|
|
20
|
+
* isLoading
|
|
21
|
+
* } = useSPFxCrossSitePermissions(targetUrl, {
|
|
22
|
+
* webUrl: 'https://contoso.sharepoint.com/sites/target/subweb'
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Set URL when ready - triggers fetch
|
|
26
|
+
* setTargetUrl('https://contoso.sharepoint.com/sites/target');
|
|
27
|
+
*
|
|
28
|
+
* if (!isLoading && hasWebPermission(SPPermission.addListItems)) {
|
|
29
|
+
* // User can add items
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function useSPFxCrossSitePermissions(siteUrl, options) {
|
|
34
|
+
var invoke = useSPFxSPHttpClient().invoke;
|
|
35
|
+
var _a = useState(), sitePermissions = _a[0], setSitePermissions = _a[1];
|
|
36
|
+
var _b = useState(), webPermissions = _b[0], setWebPermissions = _b[1];
|
|
37
|
+
var _c = useState(), listPermissions = _c[0], setListPermissions = _c[1];
|
|
38
|
+
var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
|
|
39
|
+
var _e = useState(), error = _e[0], setError = _e[1];
|
|
40
|
+
// Helper: Convert EffectiveBasePermissions to SPPermission
|
|
41
|
+
var convertToSPPermission = useCallback(function (data) {
|
|
42
|
+
return new SPPermission(data);
|
|
43
|
+
}, []);
|
|
44
|
+
// Fetch permissions when inputs change
|
|
45
|
+
useEffect(function () {
|
|
46
|
+
// Skip fetch if siteUrl is not provided or empty
|
|
47
|
+
if (!siteUrl || siteUrl.trim() === '') {
|
|
48
|
+
// Reset to idle state (no loading, no error)
|
|
49
|
+
setIsLoading(false);
|
|
50
|
+
setError(undefined);
|
|
51
|
+
setSitePermissions(undefined);
|
|
52
|
+
setWebPermissions(undefined);
|
|
53
|
+
setListPermissions(undefined);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
setIsLoading(true);
|
|
57
|
+
setError(undefined);
|
|
58
|
+
var targetWebUrl = (options === null || options === void 0 ? void 0 : options.webUrl) || siteUrl;
|
|
59
|
+
// Fetch site permissions
|
|
60
|
+
var fetchSitePermissions = invoke(function (client) {
|
|
61
|
+
return client.get("".concat(siteUrl, "/_api/site/effectivebasepermissions"), SPHttpClient.configurations.v1)
|
|
62
|
+
.then(function (res) { return res.json(); })
|
|
63
|
+
.then(function (data) {
|
|
64
|
+
if (data.EffectiveBasePermissions) {
|
|
65
|
+
return convertToSPPermission(data.EffectiveBasePermissions);
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
// Fetch web permissions
|
|
71
|
+
var fetchWebPermissions = invoke(function (client) {
|
|
72
|
+
return client.get("".concat(targetWebUrl, "/_api/web/effectivebasepermissions"), SPHttpClient.configurations.v1)
|
|
73
|
+
.then(function (res) { return res.json(); })
|
|
74
|
+
.then(function (data) {
|
|
75
|
+
if (data.EffectiveBasePermissions) {
|
|
76
|
+
return convertToSPPermission(data.EffectiveBasePermissions);
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
// Fetch list permissions if listId provided
|
|
82
|
+
var fetchListPermissions = (options === null || options === void 0 ? void 0 : options.listId)
|
|
83
|
+
? invoke(function (client) {
|
|
84
|
+
return client.get("".concat(targetWebUrl, "/_api/web/lists(guid'").concat(options.listId, "')/effectivebasepermissions"), SPHttpClient.configurations.v1)
|
|
85
|
+
.then(function (res) { return res.json(); })
|
|
86
|
+
.then(function (data) {
|
|
87
|
+
if (data.EffectiveBasePermissions) {
|
|
88
|
+
return convertToSPPermission(data.EffectiveBasePermissions);
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
});
|
|
92
|
+
})
|
|
93
|
+
: Promise.resolve(undefined);
|
|
94
|
+
// Execute all fetches in parallel
|
|
95
|
+
Promise.all([fetchSitePermissions, fetchWebPermissions, fetchListPermissions])
|
|
96
|
+
.then(function (_a) {
|
|
97
|
+
var site = _a[0], web = _a[1], list = _a[2];
|
|
98
|
+
setSitePermissions(site);
|
|
99
|
+
setWebPermissions(web);
|
|
100
|
+
setListPermissions(list);
|
|
101
|
+
setIsLoading(false);
|
|
102
|
+
})
|
|
103
|
+
.catch(function (err) {
|
|
104
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
105
|
+
setIsLoading(false);
|
|
106
|
+
});
|
|
107
|
+
}, [siteUrl, options === null || options === void 0 ? void 0 : options.webUrl, options === null || options === void 0 ? void 0 : options.listId, invoke, convertToSPPermission]);
|
|
108
|
+
// Helper methods
|
|
109
|
+
var hasWebPermission = useCallback(function (permission) {
|
|
110
|
+
var _a;
|
|
111
|
+
return (_a = webPermissions === null || webPermissions === void 0 ? void 0 : webPermissions.hasPermission(permission)) !== null && _a !== void 0 ? _a : false;
|
|
112
|
+
}, [webPermissions]);
|
|
113
|
+
var hasSitePermission = useCallback(function (permission) {
|
|
114
|
+
var _a;
|
|
115
|
+
return (_a = sitePermissions === null || sitePermissions === void 0 ? void 0 : sitePermissions.hasPermission(permission)) !== null && _a !== void 0 ? _a : false;
|
|
116
|
+
}, [sitePermissions]);
|
|
117
|
+
var hasListPermission = useCallback(function (permission) {
|
|
118
|
+
var _a;
|
|
119
|
+
return (_a = listPermissions === null || listPermissions === void 0 ? void 0 : listPermissions.hasPermission(permission)) !== null && _a !== void 0 ? _a : false;
|
|
120
|
+
}, [listPermissions]);
|
|
121
|
+
return {
|
|
122
|
+
sitePermissions: sitePermissions,
|
|
123
|
+
webPermissions: webPermissions,
|
|
124
|
+
listPermissions: listPermissions,
|
|
125
|
+
hasWebPermission: hasWebPermission,
|
|
126
|
+
hasSitePermission: hasSitePermission,
|
|
127
|
+
hasListPermission: hasListPermission,
|
|
128
|
+
isLoading: isLoading,
|
|
129
|
+
error: error,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=useSPFxCrossSitePermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxCrossSitePermissions.js","sourceRoot":"","sources":["../../src/hooks/useSPFxCrossSitePermissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { DisplayMode } from '@microsoft/sp-core-library';
|
|
2
|
+
/**
|
|
3
|
+
* Return type for useSPFxDisplayMode hook
|
|
4
|
+
*/
|
|
5
|
+
export interface SPFxDisplayModeInfo {
|
|
6
|
+
/** Current display mode (Read/Edit) */
|
|
7
|
+
readonly mode: DisplayMode;
|
|
8
|
+
/** Whether currently in Edit mode */
|
|
9
|
+
readonly isEdit: boolean;
|
|
10
|
+
/** Whether currently in Read mode */
|
|
11
|
+
readonly isRead: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Hook to access SPFx display mode (readonly)
|
|
15
|
+
*
|
|
16
|
+
* Display mode controls whether the WebPart/Extension is in:
|
|
17
|
+
* - Read mode (DisplayMode.Read): Normal viewing mode
|
|
18
|
+
* - Edit mode (DisplayMode.Edit): Editing/configuration mode
|
|
19
|
+
*
|
|
20
|
+
* Note: displayMode is readonly in SPFx and controlled by SharePoint.
|
|
21
|
+
* It changes when the user clicks the Edit button in the page.
|
|
22
|
+
*
|
|
23
|
+
* Useful for:
|
|
24
|
+
* - Showing/hiding edit controls
|
|
25
|
+
* - Conditional rendering based on mode
|
|
26
|
+
* - Different layouts for read vs edit
|
|
27
|
+
*
|
|
28
|
+
* @returns Display mode information
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* function MyComponent() {
|
|
33
|
+
* const { mode, isEdit } = useSPFxDisplayMode();
|
|
34
|
+
*
|
|
35
|
+
* return (
|
|
36
|
+
* <div>
|
|
37
|
+
* <p>Mode: {isEdit ? 'Editing' : 'Reading'}</p>
|
|
38
|
+
* {isEdit && <EditControls />}
|
|
39
|
+
* </div>
|
|
40
|
+
* );
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function useSPFxDisplayMode(): SPFxDisplayModeInfo;
|
|
45
|
+
/**
|
|
46
|
+
* Hook to check if currently in Edit mode
|
|
47
|
+
* Shortcut for useSPFxDisplayMode().isEdit
|
|
48
|
+
*
|
|
49
|
+
* @returns true if in Edit mode, false otherwise
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* function MyComponent() {
|
|
54
|
+
* const isEdit = useSPFxIsEdit();
|
|
55
|
+
*
|
|
56
|
+
* return isEdit ? <EditView /> : <ReadView />;
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function useSPFxIsEdit(): boolean;
|
|
61
|
+
//# sourceMappingURL=useSPFxDisplayMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxDisplayMode.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxDisplayMode.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAexD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAGvC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// useSPFxDisplayMode.ts
|
|
2
|
+
// Hook to access display mode (Read/Edit)
|
|
3
|
+
import { useAtomValue } from 'jotai';
|
|
4
|
+
import { DisplayMode } from '@microsoft/sp-core-library';
|
|
5
|
+
import { spfxAtoms } from './../core/atoms.internal';
|
|
6
|
+
/**
|
|
7
|
+
* Hook to access SPFx display mode (readonly)
|
|
8
|
+
*
|
|
9
|
+
* Display mode controls whether the WebPart/Extension is in:
|
|
10
|
+
* - Read mode (DisplayMode.Read): Normal viewing mode
|
|
11
|
+
* - Edit mode (DisplayMode.Edit): Editing/configuration mode
|
|
12
|
+
*
|
|
13
|
+
* Note: displayMode is readonly in SPFx and controlled by SharePoint.
|
|
14
|
+
* It changes when the user clicks the Edit button in the page.
|
|
15
|
+
*
|
|
16
|
+
* Useful for:
|
|
17
|
+
* - Showing/hiding edit controls
|
|
18
|
+
* - Conditional rendering based on mode
|
|
19
|
+
* - Different layouts for read vs edit
|
|
20
|
+
*
|
|
21
|
+
* @returns Display mode information
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* function MyComponent() {
|
|
26
|
+
* const { mode, isEdit } = useSPFxDisplayMode();
|
|
27
|
+
*
|
|
28
|
+
* return (
|
|
29
|
+
* <div>
|
|
30
|
+
* <p>Mode: {isEdit ? 'Editing' : 'Reading'}</p>
|
|
31
|
+
* {isEdit && <EditControls />}
|
|
32
|
+
* </div>
|
|
33
|
+
* );
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function useSPFxDisplayMode() {
|
|
38
|
+
// Read current mode directly from atom (readonly)
|
|
39
|
+
var modeValue = useAtomValue(spfxAtoms.displayMode);
|
|
40
|
+
// Default to Read mode if not set
|
|
41
|
+
var mode = modeValue !== null && modeValue !== void 0 ? modeValue : DisplayMode.Read;
|
|
42
|
+
var isEdit = mode === DisplayMode.Edit;
|
|
43
|
+
var isRead = mode === DisplayMode.Read;
|
|
44
|
+
return {
|
|
45
|
+
mode: mode,
|
|
46
|
+
isEdit: isEdit,
|
|
47
|
+
isRead: isRead,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Hook to check if currently in Edit mode
|
|
52
|
+
* Shortcut for useSPFxDisplayMode().isEdit
|
|
53
|
+
*
|
|
54
|
+
* @returns true if in Edit mode, false otherwise
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* function MyComponent() {
|
|
59
|
+
* const isEdit = useSPFxIsEdit();
|
|
60
|
+
*
|
|
61
|
+
* return isEdit ? <EditView /> : <ReadView />;
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export function useSPFxIsEdit() {
|
|
66
|
+
var isEdit = useSPFxDisplayMode().isEdit;
|
|
67
|
+
return isEdit;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=useSPFxDisplayMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxDisplayMode.js","sourceRoot":"","sources":["../../src/hooks/useSPFxDisplayMode.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,0CAA0C;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAgBrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,kBAAkB;IAChC,kDAAkD;IAClD,IAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEtD,kCAAkC;IAClC,IAAM,IAAI,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,WAAW,CAAC,IAAI,CAAC;IAE3C,IAAM,MAAM,GAAG,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;IACzC,IAAM,MAAM,GAAG,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;IAEzC,OAAO;QACL,IAAI,MAAA;QACJ,MAAM,QAAA;QACN,MAAM,QAAA;KACP,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa;IACnB,IAAA,MAAM,GAAK,kBAAkB,EAAE,OAAzB,CAA0B;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPFx environment types
|
|
3
|
+
*/
|
|
4
|
+
export type SPFxEnvironmentType = 'Local' | 'SharePoint' | 'SharePointOnPrem' | 'Teams' | 'Office' | 'Outlook';
|
|
5
|
+
/**
|
|
6
|
+
* Return type for useSPFxEnvironmentInfo hook
|
|
7
|
+
*/
|
|
8
|
+
export interface SPFxEnvironmentInfo {
|
|
9
|
+
/** Current environment type */
|
|
10
|
+
readonly type: SPFxEnvironmentType;
|
|
11
|
+
/** Whether running in local workbench */
|
|
12
|
+
readonly isLocal: boolean;
|
|
13
|
+
/** Whether running in SharePoint workbench (hosted or local) */
|
|
14
|
+
readonly isWorkbench: boolean;
|
|
15
|
+
/** Whether running in SharePoint Online */
|
|
16
|
+
readonly isSharePoint: boolean;
|
|
17
|
+
/** Whether running in SharePoint On-Premises */
|
|
18
|
+
readonly isSharePointOnPrem: boolean;
|
|
19
|
+
/** Whether running in Microsoft Teams */
|
|
20
|
+
readonly isTeams: boolean;
|
|
21
|
+
/** Whether running in Office application */
|
|
22
|
+
readonly isOffice: boolean;
|
|
23
|
+
/** Whether running in Outlook */
|
|
24
|
+
readonly isOutlook: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Hook to access SPFx environment type information
|
|
28
|
+
*
|
|
29
|
+
* Detects the current host environment:
|
|
30
|
+
* - Local: Local workbench (localhost)
|
|
31
|
+
* - SharePoint: SharePoint Online
|
|
32
|
+
* - SharePointOnPrem: SharePoint On-Premises
|
|
33
|
+
* - Teams: Microsoft Teams
|
|
34
|
+
* - Office: Office applications
|
|
35
|
+
* - Outlook: Outlook
|
|
36
|
+
*
|
|
37
|
+
* Useful for:
|
|
38
|
+
* - Environment-specific rendering
|
|
39
|
+
* - Feature availability checks
|
|
40
|
+
* - API endpoint selection
|
|
41
|
+
* - Debugging information
|
|
42
|
+
*
|
|
43
|
+
* @returns Environment information
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* function MyComponent() {
|
|
48
|
+
* const { type, isTeams, isLocal } = useSPFxEnvironmentInfo();
|
|
49
|
+
*
|
|
50
|
+
* if (isLocal) {
|
|
51
|
+
* return <div>Development Mode</div>;
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* if (isTeams) {
|
|
55
|
+
* return <TeamsSpecificUI />;
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* return <SharePointUI />;
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function useSPFxEnvironmentInfo(): SPFxEnvironmentInfo;
|
|
63
|
+
//# sourceMappingURL=useSPFxEnvironmentInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxEnvironmentInfo.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxEnvironmentInfo.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,YAAY,GACZ,kBAAkB,GAClB,OAAO,GACP,QAAQ,GACR,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAEnC,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAE9B,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAE/B,gDAAgD;IAChD,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAErC,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAgE5D"}
|