@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,37 @@
|
|
|
1
|
+
import type { PageContext } from '@microsoft/sp-page-context';
|
|
2
|
+
/**
|
|
3
|
+
* Hook to access SharePoint page context
|
|
4
|
+
*
|
|
5
|
+
* Provides access to SharePoint page context containing information about:
|
|
6
|
+
* - Site collection and web
|
|
7
|
+
* - Current user
|
|
8
|
+
* - Current list and list item (if applicable)
|
|
9
|
+
* - Teams context (if running in Teams)
|
|
10
|
+
* - Culture and locale settings
|
|
11
|
+
* - Permissions and capabilities
|
|
12
|
+
*
|
|
13
|
+
* @returns SharePoint page context object
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* This hook extracts and returns the `pageContext` property from the SPFx context.
|
|
17
|
+
* If you need access to the full SPFx context object, use `useSPFxContext` instead.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* function MyComponent() {
|
|
22
|
+
* const pageContext = useSPFxPageContext();
|
|
23
|
+
*
|
|
24
|
+
* return (
|
|
25
|
+
* <div>
|
|
26
|
+
* <p>Site: {pageContext.web.title}</p>
|
|
27
|
+
* <p>User: {pageContext.user.displayName}</p>
|
|
28
|
+
* <p>Locale: {pageContext.cultureInfo.currentUICultureName}</p>
|
|
29
|
+
* </div>
|
|
30
|
+
* );
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @see {@link useSPFxContext} for accessing the full SPFx context
|
|
35
|
+
*/
|
|
36
|
+
export declare function useSPFxPageContext(): PageContext;
|
|
37
|
+
//# sourceMappingURL=useSPFxPageContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxPageContext.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPageContext.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,CAehD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// useSPFxPageContext.ts
|
|
2
|
+
// Hook to access SharePoint page context
|
|
3
|
+
import { useSPFxContext } from './useSPFxContext';
|
|
4
|
+
/**
|
|
5
|
+
* Hook to access SharePoint page context
|
|
6
|
+
*
|
|
7
|
+
* Provides access to SharePoint page context containing information about:
|
|
8
|
+
* - Site collection and web
|
|
9
|
+
* - Current user
|
|
10
|
+
* - Current list and list item (if applicable)
|
|
11
|
+
* - Teams context (if running in Teams)
|
|
12
|
+
* - Culture and locale settings
|
|
13
|
+
* - Permissions and capabilities
|
|
14
|
+
*
|
|
15
|
+
* @returns SharePoint page context object
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* This hook extracts and returns the `pageContext` property from the SPFx context.
|
|
19
|
+
* If you need access to the full SPFx context object, use `useSPFxContext` instead.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* function MyComponent() {
|
|
24
|
+
* const pageContext = useSPFxPageContext();
|
|
25
|
+
*
|
|
26
|
+
* return (
|
|
27
|
+
* <div>
|
|
28
|
+
* <p>Site: {pageContext.web.title}</p>
|
|
29
|
+
* <p>User: {pageContext.user.displayName}</p>
|
|
30
|
+
* <p>Locale: {pageContext.cultureInfo.currentUICultureName}</p>
|
|
31
|
+
* </div>
|
|
32
|
+
* );
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @see {@link useSPFxContext} for accessing the full SPFx context
|
|
37
|
+
*/
|
|
38
|
+
export function useSPFxPageContext() {
|
|
39
|
+
var spfxContext = useSPFxContext().spfxContext;
|
|
40
|
+
// Extract pageContext from SPFx context
|
|
41
|
+
// All SPFx contexts have pageContext property
|
|
42
|
+
var ctx = spfxContext;
|
|
43
|
+
if (!ctx.pageContext) {
|
|
44
|
+
throw new Error('SPFx context does not contain pageContext. ' +
|
|
45
|
+
'This should never happen with valid SPFx contexts.');
|
|
46
|
+
}
|
|
47
|
+
return ctx.pageContext;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=useSPFxPageContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxPageContext.js","sourceRoot":"","sources":["../../src/hooks/useSPFxPageContext.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,yCAAyC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,kBAAkB;IACxB,IAAA,WAAW,GAAK,cAAc,EAAE,YAArB,CAAsB;IAEzC,wCAAwC;IACxC,8CAA8C;IAC9C,IAAM,GAAG,GAAG,WAA4C,CAAC;IAEzD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,6CAA6C;YAC7C,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC,WAAW,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SharePoint page types
|
|
3
|
+
*/
|
|
4
|
+
export type SPFxPageType = 'sitePage' | 'webPartPage' | 'listPage' | 'listFormPage' | 'profilePage' | 'searchPage' | 'unknown';
|
|
5
|
+
/**
|
|
6
|
+
* Return type for useSPFxPageType hook
|
|
7
|
+
*/
|
|
8
|
+
export interface SPFxPageTypeInfo {
|
|
9
|
+
/** Current page type */
|
|
10
|
+
readonly pageType: SPFxPageType;
|
|
11
|
+
/** Whether the page is a modern site page */
|
|
12
|
+
readonly isModernPage: boolean;
|
|
13
|
+
/** Whether the page is a site page (modern) */
|
|
14
|
+
readonly isSitePage: boolean;
|
|
15
|
+
/** Whether the page is a list page (list view) */
|
|
16
|
+
readonly isListPage: boolean;
|
|
17
|
+
/** Whether the page is a list form page */
|
|
18
|
+
readonly isListFormPage: boolean;
|
|
19
|
+
/** Whether the page is a classic web part page */
|
|
20
|
+
readonly isWebPartPage: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Hook for SharePoint page type detection
|
|
24
|
+
*
|
|
25
|
+
* Detects the current SharePoint page type:
|
|
26
|
+
* - sitePage: Modern site page (Site Pages library)
|
|
27
|
+
* - webPartPage: Classic web part page
|
|
28
|
+
* - listPage: List view page
|
|
29
|
+
* - listFormPage: List form (new/edit/display item)
|
|
30
|
+
* - profilePage: User profile page
|
|
31
|
+
* - searchPage: Search results page
|
|
32
|
+
* - unknown: Unable to determine
|
|
33
|
+
*
|
|
34
|
+
* Helper flags provided:
|
|
35
|
+
* - isModernPage: True for modern site pages
|
|
36
|
+
* - isSitePage: True for site pages
|
|
37
|
+
* - isListPage: True for list views
|
|
38
|
+
* - isListFormPage: True for list forms
|
|
39
|
+
* - isWebPartPage: True for classic web part pages
|
|
40
|
+
*
|
|
41
|
+
* Use this hook for:
|
|
42
|
+
* - Conditional rendering based on page type
|
|
43
|
+
* - Feature availability checks (e.g., modern-only features)
|
|
44
|
+
* - Page-specific behavior
|
|
45
|
+
* - Analytics/telemetry
|
|
46
|
+
*
|
|
47
|
+
* @returns Page type information
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* function MyComponent() {
|
|
52
|
+
* const { pageType, isModernPage, isSitePage } = useSPFxPageType();
|
|
53
|
+
*
|
|
54
|
+
* if (!isModernPage) {
|
|
55
|
+
* return <div>This feature requires a modern page</div>;
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* return (
|
|
59
|
+
* <div>
|
|
60
|
+
* <h3>Page Type: {pageType}</h3>
|
|
61
|
+
* {isSitePage && <ModernPageFeature />}
|
|
62
|
+
* </div>
|
|
63
|
+
* );
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @example Conditional features
|
|
68
|
+
* ```tsx
|
|
69
|
+
* function ConditionalUI() {
|
|
70
|
+
* const { isListPage, isListFormPage } = useSPFxPageType();
|
|
71
|
+
*
|
|
72
|
+
* return (
|
|
73
|
+
* <div>
|
|
74
|
+
* {isListPage && <ListViewCustomizer />}
|
|
75
|
+
* {isListFormPage && <FormFieldCustomizer />}
|
|
76
|
+
* </div>
|
|
77
|
+
* );
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function useSPFxPageType(): SPFxPageTypeInfo;
|
|
82
|
+
//# sourceMappingURL=useSPFxPageType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxPageType.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPageType.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,aAAa,GACb,UAAU,GACV,cAAc,GACd,aAAa,GACb,YAAY,GACZ,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAE/B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IAEjC,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,CAoFlD"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// useSPFxPageType.ts
|
|
2
|
+
// Hook for SharePoint page type detection
|
|
3
|
+
import { useSPFxPageContext } from './useSPFxPageContext';
|
|
4
|
+
/**
|
|
5
|
+
* Hook for SharePoint page type detection
|
|
6
|
+
*
|
|
7
|
+
* Detects the current SharePoint page type:
|
|
8
|
+
* - sitePage: Modern site page (Site Pages library)
|
|
9
|
+
* - webPartPage: Classic web part page
|
|
10
|
+
* - listPage: List view page
|
|
11
|
+
* - listFormPage: List form (new/edit/display item)
|
|
12
|
+
* - profilePage: User profile page
|
|
13
|
+
* - searchPage: Search results page
|
|
14
|
+
* - unknown: Unable to determine
|
|
15
|
+
*
|
|
16
|
+
* Helper flags provided:
|
|
17
|
+
* - isModernPage: True for modern site pages
|
|
18
|
+
* - isSitePage: True for site pages
|
|
19
|
+
* - isListPage: True for list views
|
|
20
|
+
* - isListFormPage: True for list forms
|
|
21
|
+
* - isWebPartPage: True for classic web part pages
|
|
22
|
+
*
|
|
23
|
+
* Use this hook for:
|
|
24
|
+
* - Conditional rendering based on page type
|
|
25
|
+
* - Feature availability checks (e.g., modern-only features)
|
|
26
|
+
* - Page-specific behavior
|
|
27
|
+
* - Analytics/telemetry
|
|
28
|
+
*
|
|
29
|
+
* @returns Page type information
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* function MyComponent() {
|
|
34
|
+
* const { pageType, isModernPage, isSitePage } = useSPFxPageType();
|
|
35
|
+
*
|
|
36
|
+
* if (!isModernPage) {
|
|
37
|
+
* return <div>This feature requires a modern page</div>;
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* return (
|
|
41
|
+
* <div>
|
|
42
|
+
* <h3>Page Type: {pageType}</h3>
|
|
43
|
+
* {isSitePage && <ModernPageFeature />}
|
|
44
|
+
* </div>
|
|
45
|
+
* );
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @example Conditional features
|
|
50
|
+
* ```tsx
|
|
51
|
+
* function ConditionalUI() {
|
|
52
|
+
* const { isListPage, isListFormPage } = useSPFxPageType();
|
|
53
|
+
*
|
|
54
|
+
* return (
|
|
55
|
+
* <div>
|
|
56
|
+
* {isListPage && <ListViewCustomizer />}
|
|
57
|
+
* {isListFormPage && <FormFieldCustomizer />}
|
|
58
|
+
* </div>
|
|
59
|
+
* );
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function useSPFxPageType() {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
var pageContext = useSPFxPageContext();
|
|
66
|
+
// Try to get page type from modern pageContext
|
|
67
|
+
var modernPage = pageContext.page;
|
|
68
|
+
// Try to get page type from legacy context
|
|
69
|
+
var legacy = pageContext.legacyPageContext;
|
|
70
|
+
// Determine page type
|
|
71
|
+
var pageType = 'unknown';
|
|
72
|
+
// Check modern page type first
|
|
73
|
+
var modernPageType = (_a = modernPage === null || modernPage === void 0 ? void 0 : modernPage.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
74
|
+
if (modernPageType) {
|
|
75
|
+
if (modernPageType.indexOf('sitepage') !== -1) {
|
|
76
|
+
pageType = 'sitePage';
|
|
77
|
+
}
|
|
78
|
+
else if (modernPageType.indexOf('webpartpage') !== -1) {
|
|
79
|
+
pageType = 'webPartPage';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Check legacy page type
|
|
83
|
+
if (pageType === 'unknown') {
|
|
84
|
+
var legacyPageType = (_b = legacy === null || legacy === void 0 ? void 0 : legacy.pageType) === null || _b === void 0 ? void 0 : _b.toLowerCase();
|
|
85
|
+
if (legacyPageType) {
|
|
86
|
+
if (legacyPageType.indexOf('sitepage') !== -1) {
|
|
87
|
+
pageType = 'sitePage';
|
|
88
|
+
}
|
|
89
|
+
else if (legacyPageType.indexOf('webpartpage') !== -1) {
|
|
90
|
+
pageType = 'webPartPage';
|
|
91
|
+
}
|
|
92
|
+
else if (legacyPageType.indexOf('list') !== -1) {
|
|
93
|
+
// Check if it's a form or list view
|
|
94
|
+
if ((legacy === null || legacy === void 0 ? void 0 : legacy.formType) !== undefined && legacy.formType !== null) {
|
|
95
|
+
pageType = 'listFormPage';
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
pageType = 'listPage';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (legacyPageType.indexOf('profile') !== -1) {
|
|
102
|
+
pageType = 'profilePage';
|
|
103
|
+
}
|
|
104
|
+
else if (legacyPageType.indexOf('search') !== -1) {
|
|
105
|
+
pageType = 'searchPage';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// If still unknown, try to infer from context
|
|
110
|
+
if (pageType === 'unknown') {
|
|
111
|
+
// If we have a list ID, likely a list page
|
|
112
|
+
if (legacy === null || legacy === void 0 ? void 0 : legacy.listId) {
|
|
113
|
+
if (legacy.formType !== undefined && legacy.formType !== null) {
|
|
114
|
+
pageType = 'listFormPage';
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
pageType = 'listPage';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Calculate helper flags
|
|
122
|
+
var isSitePage = pageType === 'sitePage';
|
|
123
|
+
var isWebPartPage = pageType === 'webPartPage';
|
|
124
|
+
var isListPage = pageType === 'listPage';
|
|
125
|
+
var isListFormPage = pageType === 'listFormPage';
|
|
126
|
+
// Modern page = site page (not classic web part page)
|
|
127
|
+
var isModernPage = isSitePage;
|
|
128
|
+
return {
|
|
129
|
+
pageType: pageType,
|
|
130
|
+
isModernPage: isModernPage,
|
|
131
|
+
isSitePage: isSitePage,
|
|
132
|
+
isListPage: isListPage,
|
|
133
|
+
isListFormPage: isListFormPage,
|
|
134
|
+
isWebPartPage: isWebPartPage,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=useSPFxPageType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxPageType.js","sourceRoot":"","sources":["../../src/hooks/useSPFxPageType.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance result type
|
|
3
|
+
*/
|
|
4
|
+
export interface SPFxPerfResult<T = unknown> {
|
|
5
|
+
/** Measurement name */
|
|
6
|
+
readonly name: string;
|
|
7
|
+
/** Duration in milliseconds */
|
|
8
|
+
readonly durationMs: number;
|
|
9
|
+
/** Optional result from timed operation */
|
|
10
|
+
readonly result?: T;
|
|
11
|
+
/** SPFx instance ID */
|
|
12
|
+
readonly instanceId: string;
|
|
13
|
+
/** Host kind */
|
|
14
|
+
readonly host: string;
|
|
15
|
+
/** Correlation ID for tracking */
|
|
16
|
+
readonly correlationId: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Return type for useSPFxPerformance hook
|
|
20
|
+
*/
|
|
21
|
+
export interface SPFxPerformanceInfo {
|
|
22
|
+
/** Create a performance mark */
|
|
23
|
+
readonly mark: (name: string) => void;
|
|
24
|
+
/** Measure duration between two marks */
|
|
25
|
+
readonly measure: (name: string, startMark: string, endMark?: string) => SPFxPerfResult;
|
|
26
|
+
/** Time an async operation */
|
|
27
|
+
readonly time: <T>(name: string, fn: () => Promise<T> | T) => Promise<SPFxPerfResult<T>>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Hook for performance measurement and monitoring
|
|
31
|
+
*
|
|
32
|
+
* Provides access to the Performance API for measuring code execution time.
|
|
33
|
+
*
|
|
34
|
+
* Methods:
|
|
35
|
+
* - mark(): Create named performance marks
|
|
36
|
+
* - measure(): Calculate duration between marks
|
|
37
|
+
* - time(): Wrap async operations with automatic timing
|
|
38
|
+
*
|
|
39
|
+
* All measurements include SPFx context (instanceId, correlationId) for
|
|
40
|
+
* integration with logging and monitoring systems.
|
|
41
|
+
*
|
|
42
|
+
* Useful for:
|
|
43
|
+
* - Performance profiling
|
|
44
|
+
* - Identifying bottlenecks
|
|
45
|
+
* - Monitoring real-world performance
|
|
46
|
+
* - Integration with Application Insights
|
|
47
|
+
* - Custom performance dashboards
|
|
48
|
+
*
|
|
49
|
+
* @returns Performance measurement methods
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* function MyComponent() {
|
|
54
|
+
* const { mark, measure, time } = useSPFxPerformance();
|
|
55
|
+
* const [data, setData] = useState(null);
|
|
56
|
+
*
|
|
57
|
+
* const fetchData = async () => {
|
|
58
|
+
* const result = await time('fetch-data', async () => {
|
|
59
|
+
* const response = await fetch('/api/data');
|
|
60
|
+
* return response.json();
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* console.log(`Fetch took ${result.durationMs}ms`);
|
|
64
|
+
* setData(result.result);
|
|
65
|
+
* };
|
|
66
|
+
*
|
|
67
|
+
* return <button onClick={fetchData}>Load Data</button>;
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function useSPFxPerformance(): SPFxPerformanceInfo;
|
|
72
|
+
//# sourceMappingURL=useSPFxPerformance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxPerformance.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPerformance.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpB,uBAAuB;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,kCAAkC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,cAAc,CAAC;IAExF,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CA+ExD"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// useSPFxPerformance.ts
|
|
2
|
+
// Hook for performance measurement and monitoring
|
|
3
|
+
var __assign = (this && this.__assign) || function () {
|
|
4
|
+
__assign = Object.assign || function(t) {
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
+
t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
return __assign.apply(this, arguments);
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
24
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
25
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
26
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
27
|
+
function step(op) {
|
|
28
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
29
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
30
|
+
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;
|
|
31
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
32
|
+
switch (op[0]) {
|
|
33
|
+
case 0: case 1: t = op; break;
|
|
34
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
35
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
36
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
37
|
+
default:
|
|
38
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
39
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
40
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
41
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
42
|
+
if (t[2]) _.ops.pop();
|
|
43
|
+
_.trys.pop(); continue;
|
|
44
|
+
}
|
|
45
|
+
op = body.call(thisArg, _);
|
|
46
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
47
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
import { useCallback } from 'react';
|
|
51
|
+
import { useSPFxInstanceInfo } from './useSPFxInstanceInfo';
|
|
52
|
+
import { useSPFxCorrelationInfo } from './useSPFxCorrelationInfo';
|
|
53
|
+
/**
|
|
54
|
+
* Hook for performance measurement and monitoring
|
|
55
|
+
*
|
|
56
|
+
* Provides access to the Performance API for measuring code execution time.
|
|
57
|
+
*
|
|
58
|
+
* Methods:
|
|
59
|
+
* - mark(): Create named performance marks
|
|
60
|
+
* - measure(): Calculate duration between marks
|
|
61
|
+
* - time(): Wrap async operations with automatic timing
|
|
62
|
+
*
|
|
63
|
+
* All measurements include SPFx context (instanceId, correlationId) for
|
|
64
|
+
* integration with logging and monitoring systems.
|
|
65
|
+
*
|
|
66
|
+
* Useful for:
|
|
67
|
+
* - Performance profiling
|
|
68
|
+
* - Identifying bottlenecks
|
|
69
|
+
* - Monitoring real-world performance
|
|
70
|
+
* - Integration with Application Insights
|
|
71
|
+
* - Custom performance dashboards
|
|
72
|
+
*
|
|
73
|
+
* @returns Performance measurement methods
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```tsx
|
|
77
|
+
* function MyComponent() {
|
|
78
|
+
* const { mark, measure, time } = useSPFxPerformance();
|
|
79
|
+
* const [data, setData] = useState(null);
|
|
80
|
+
*
|
|
81
|
+
* const fetchData = async () => {
|
|
82
|
+
* const result = await time('fetch-data', async () => {
|
|
83
|
+
* const response = await fetch('/api/data');
|
|
84
|
+
* return response.json();
|
|
85
|
+
* });
|
|
86
|
+
*
|
|
87
|
+
* console.log(`Fetch took ${result.durationMs}ms`);
|
|
88
|
+
* setData(result.result);
|
|
89
|
+
* };
|
|
90
|
+
*
|
|
91
|
+
* return <button onClick={fetchData}>Load Data</button>;
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export function useSPFxPerformance() {
|
|
96
|
+
var _this = this;
|
|
97
|
+
var _a = useSPFxInstanceInfo(), instanceId = _a.id, host = _a.kind;
|
|
98
|
+
var correlationId = useSPFxCorrelationInfo().correlationId;
|
|
99
|
+
// Create a performance mark
|
|
100
|
+
var mark = useCallback(function (name) {
|
|
101
|
+
if (typeof (performance === null || performance === void 0 ? void 0 : performance.mark) === 'function') {
|
|
102
|
+
try {
|
|
103
|
+
performance.mark(name);
|
|
104
|
+
}
|
|
105
|
+
catch (_a) {
|
|
106
|
+
// Swallow errors (e.g., invalid mark name)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}, []);
|
|
110
|
+
// Measure duration between marks
|
|
111
|
+
var measure = useCallback(function (name, startMark, endMark) {
|
|
112
|
+
var _a;
|
|
113
|
+
try {
|
|
114
|
+
// Create end mark if provided
|
|
115
|
+
if (endMark && typeof (performance === null || performance === void 0 ? void 0 : performance.mark) === 'function') {
|
|
116
|
+
performance.mark(endMark);
|
|
117
|
+
}
|
|
118
|
+
// Create measure
|
|
119
|
+
if (typeof (performance === null || performance === void 0 ? void 0 : performance.measure) === 'function') {
|
|
120
|
+
performance.measure(name, startMark, endMark);
|
|
121
|
+
// Get the measurement
|
|
122
|
+
var entries = performance.getEntriesByName(name, 'measure');
|
|
123
|
+
var lastEntry = entries[entries.length - 1];
|
|
124
|
+
return {
|
|
125
|
+
name: name,
|
|
126
|
+
durationMs: (_a = lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.duration) !== null && _a !== void 0 ? _a : 0,
|
|
127
|
+
instanceId: instanceId,
|
|
128
|
+
host: host,
|
|
129
|
+
correlationId: correlationId,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (_b) {
|
|
134
|
+
// Swallow errors
|
|
135
|
+
}
|
|
136
|
+
// Fallback result
|
|
137
|
+
return {
|
|
138
|
+
name: name,
|
|
139
|
+
durationMs: 0,
|
|
140
|
+
instanceId: instanceId,
|
|
141
|
+
host: host,
|
|
142
|
+
correlationId: correlationId,
|
|
143
|
+
};
|
|
144
|
+
}, [instanceId, host, correlationId]);
|
|
145
|
+
// Time an async operation
|
|
146
|
+
var time = useCallback(function (name, fn) { return __awaiter(_this, void 0, void 0, function () {
|
|
147
|
+
var startMark, result, measurement;
|
|
148
|
+
return __generator(this, function (_a) {
|
|
149
|
+
switch (_a.label) {
|
|
150
|
+
case 0:
|
|
151
|
+
startMark = name + '-start';
|
|
152
|
+
mark(startMark);
|
|
153
|
+
return [4 /*yield*/, Promise.resolve().then(fn)];
|
|
154
|
+
case 1:
|
|
155
|
+
result = _a.sent();
|
|
156
|
+
measurement = measure(name, startMark);
|
|
157
|
+
return [2 /*return*/, __assign(__assign({}, measurement), { result: result })];
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}); }, [mark, measure]);
|
|
161
|
+
return {
|
|
162
|
+
mark: mark,
|
|
163
|
+
measure: measure,
|
|
164
|
+
time: time,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=useSPFxPerformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxPerformance.js","sourceRoot":"","sources":["../../src/hooks/useSPFxPerformance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { SPPermission } from '@microsoft/sp-page-context';
|
|
2
|
+
/**
|
|
3
|
+
* Return type for useSPFxPermissions hook
|
|
4
|
+
*/
|
|
5
|
+
export interface SPFxPermissionsInfo {
|
|
6
|
+
/** Site collection permissions */
|
|
7
|
+
readonly sitePermissions: SPPermission | undefined;
|
|
8
|
+
/** Web permissions */
|
|
9
|
+
readonly webPermissions: SPPermission | undefined;
|
|
10
|
+
/** List permissions (if in list context) */
|
|
11
|
+
readonly listPermissions: SPPermission | undefined;
|
|
12
|
+
/** Check if user has specific web permission */
|
|
13
|
+
readonly hasWebPermission: (permission: SPPermission) => boolean;
|
|
14
|
+
/** Check if user has specific site permission */
|
|
15
|
+
readonly hasSitePermission: (permission: SPPermission) => boolean;
|
|
16
|
+
/** Check if user has specific list permission */
|
|
17
|
+
readonly hasListPermission: (permission: SPPermission) => boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Hook for SharePoint permissions checking
|
|
21
|
+
*
|
|
22
|
+
* Provides access to current user's permissions at different scopes:
|
|
23
|
+
* - Site collection level
|
|
24
|
+
* - Web (subsite) level
|
|
25
|
+
* - List level (if applicable)
|
|
26
|
+
*
|
|
27
|
+
* Includes helper methods for permission checks using SPPermission enum.
|
|
28
|
+
*
|
|
29
|
+
* Common permissions to check:
|
|
30
|
+
* - SPPermission.manageWeb
|
|
31
|
+
* - SPPermission.addListItems
|
|
32
|
+
* - SPPermission.editListItems
|
|
33
|
+
* - SPPermission.deleteListItems
|
|
34
|
+
* - SPPermission.viewListItems
|
|
35
|
+
* - SPPermission.managePermissions
|
|
36
|
+
*
|
|
37
|
+
* Useful for:
|
|
38
|
+
* - Conditional UI rendering
|
|
39
|
+
* - Feature availability
|
|
40
|
+
* - Security trimming
|
|
41
|
+
* - Authorization checks
|
|
42
|
+
*
|
|
43
|
+
* @returns Permissions and helper methods
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* function MyComponent() {
|
|
48
|
+
* const { web, hasWebPermission } = useSPFxPermissions();
|
|
49
|
+
* const canManage = hasWebPermission(SPPermission.manageWeb);
|
|
50
|
+
*
|
|
51
|
+
* return (
|
|
52
|
+
* <div>
|
|
53
|
+
* {canManage && <button>Manage Settings</button>}
|
|
54
|
+
* <p>Can manage: {canManage ? 'Yes' : 'No'}</p>
|
|
55
|
+
* </div>
|
|
56
|
+
* );
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function useSPFxPermissions(): SPFxPermissionsInfo;
|
|
61
|
+
//# sourceMappingURL=useSPFxPermissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSPFxPermissions.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPermissions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,QAAQ,CAAC,eAAe,EAAE,YAAY,GAAG,SAAS,CAAC;IAEnD,sBAAsB;IACtB,QAAQ,CAAC,cAAc,EAAE,YAAY,GAAG,SAAS,CAAC;IAElD,4CAA4C;IAC5C,QAAQ,CAAC,eAAe,EAAE,YAAY,GAAG,SAAS,CAAC;IAEnD,gDAAgD;IAChD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;IAEjE,iDAAiD;IACjD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;IAElE,iDAAiD;IACjD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;CACnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CA2CxD"}
|