@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,53 @@
|
|
|
1
|
+
import type { DisplayMode } from '@microsoft/sp-core-library';
|
|
2
|
+
import type { IReadonlyTheme } from '@microsoft/sp-component-base';
|
|
3
|
+
import type { ContainerSize } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Collection of Jotai atoms for SPFx state
|
|
6
|
+
*
|
|
7
|
+
* These atoms are isolated per Provider instance through separate stores.
|
|
8
|
+
* Each SPFxProvider creates its own store, ensuring complete isolation
|
|
9
|
+
* between multiple instances on the same page.
|
|
10
|
+
*
|
|
11
|
+
* Usage in hooks:
|
|
12
|
+
* const theme = useAtomValue(spfxAtoms.theme);
|
|
13
|
+
* const setDisplayMode = useSetAtom(spfxAtoms.displayMode);
|
|
14
|
+
*
|
|
15
|
+
* Benefits:
|
|
16
|
+
* - Simple atom definitions (no scoping complexity)
|
|
17
|
+
* - Automatic isolation via Provider store
|
|
18
|
+
* - Automatic cleanup when Provider unmounts
|
|
19
|
+
* - Type-safe and follows Jotai best practices
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export declare const spfxAtoms: {
|
|
24
|
+
readonly theme: import("jotai").PrimitiveAtom<IReadonlyTheme | undefined> & {
|
|
25
|
+
init: IReadonlyTheme | undefined;
|
|
26
|
+
};
|
|
27
|
+
readonly displayMode: import("jotai").PrimitiveAtom<DisplayMode | undefined> & {
|
|
28
|
+
init: DisplayMode | undefined;
|
|
29
|
+
};
|
|
30
|
+
readonly properties: import("jotai").PrimitiveAtom<unknown> & {
|
|
31
|
+
init: unknown;
|
|
32
|
+
};
|
|
33
|
+
readonly containerEl: import("jotai").PrimitiveAtom<HTMLElement | undefined> & {
|
|
34
|
+
init: HTMLElement | undefined;
|
|
35
|
+
};
|
|
36
|
+
readonly containerSize: import("jotai").PrimitiveAtom<ContainerSize | undefined> & {
|
|
37
|
+
init: ContainerSize | undefined;
|
|
38
|
+
};
|
|
39
|
+
readonly teams: import("jotai").PrimitiveAtom<{
|
|
40
|
+
supported: boolean;
|
|
41
|
+
context?: unknown;
|
|
42
|
+
theme?: "default" | "dark" | "highContrast" | undefined;
|
|
43
|
+
initialized: boolean;
|
|
44
|
+
}> & {
|
|
45
|
+
init: {
|
|
46
|
+
supported: boolean;
|
|
47
|
+
context?: unknown;
|
|
48
|
+
theme?: "default" | "dark" | "highContrast" | undefined;
|
|
49
|
+
initialized: boolean;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=atoms.internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atoms.internal.d.ts","sourceRoot":"","sources":["../../src/core/atoms.internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;mBAeP,OAAO;kBACR,OAAO;;qBAEJ,OAAO;;;uBAHT,OAAO;sBACR,OAAO;;yBAEJ,OAAO;;;CAEd,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// atoms.ts
|
|
2
|
+
// Jotai atoms for SPFx state management
|
|
3
|
+
// Each Provider instance gets its own isolated store
|
|
4
|
+
import { atom } from 'jotai';
|
|
5
|
+
/**
|
|
6
|
+
* Collection of Jotai atoms for SPFx state
|
|
7
|
+
*
|
|
8
|
+
* These atoms are isolated per Provider instance through separate stores.
|
|
9
|
+
* Each SPFxProvider creates its own store, ensuring complete isolation
|
|
10
|
+
* between multiple instances on the same page.
|
|
11
|
+
*
|
|
12
|
+
* Usage in hooks:
|
|
13
|
+
* const theme = useAtomValue(spfxAtoms.theme);
|
|
14
|
+
* const setDisplayMode = useSetAtom(spfxAtoms.displayMode);
|
|
15
|
+
*
|
|
16
|
+
* Benefits:
|
|
17
|
+
* - Simple atom definitions (no scoping complexity)
|
|
18
|
+
* - Automatic isolation via Provider store
|
|
19
|
+
* - Automatic cleanup when Provider unmounts
|
|
20
|
+
* - Type-safe and follows Jotai best practices
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export var spfxAtoms = {
|
|
25
|
+
// Core state atoms
|
|
26
|
+
theme: atom(undefined),
|
|
27
|
+
displayMode: atom(undefined),
|
|
28
|
+
properties: atom(undefined),
|
|
29
|
+
// Container state atoms
|
|
30
|
+
containerEl: atom(undefined),
|
|
31
|
+
containerSize: atom(undefined),
|
|
32
|
+
// Teams context state (async initialized)
|
|
33
|
+
teams: atom({ supported: false, initialized: false }),
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=atoms.internal.js.map
|
|
@@ -0,0 +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,IAAM,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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { SPFxContextValue } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* React Context for SPFx metadata
|
|
5
|
+
* Contains only static reference data:
|
|
6
|
+
* - instanceId: Unique identifier for this SPFx instance
|
|
7
|
+
* - spfxContext: The SPFx context object (WebPartContext, etc.)
|
|
8
|
+
* - kind: Type of host component
|
|
9
|
+
*
|
|
10
|
+
* This context does NOT contain reactive state.
|
|
11
|
+
* State is managed via Jotai atoms in isolated stores per Provider instance.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare const SPFxContext: React.Context<SPFxContextValue | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Internal hook to access SPFx context
|
|
18
|
+
* Throws error if used outside SPFxProvider
|
|
19
|
+
*
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export declare function useSPFxContext(): SPFxContextValue;
|
|
23
|
+
//# sourceMappingURL=context.internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.internal.d.ts","sourceRoot":"","sources":["../../src/core/context.internal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,wCAAqD,CAAC;AAM9E;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,CAWjD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// context.tsx
|
|
2
|
+
// React Context for SPFx metadata (static, non-reactive)
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
/**
|
|
5
|
+
* React Context for SPFx metadata
|
|
6
|
+
* Contains only static reference data:
|
|
7
|
+
* - instanceId: Unique identifier for this SPFx instance
|
|
8
|
+
* - spfxContext: The SPFx context object (WebPartContext, etc.)
|
|
9
|
+
* - kind: Type of host component
|
|
10
|
+
*
|
|
11
|
+
* This context does NOT contain reactive state.
|
|
12
|
+
* State is managed via Jotai atoms in isolated stores per Provider instance.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export var SPFxContext = React.createContext(null);
|
|
17
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
18
|
+
SPFxContext.displayName = 'SPFxContext';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Internal hook to access SPFx context
|
|
22
|
+
* Throws error if used outside SPFxProvider
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export function useSPFxContext() {
|
|
27
|
+
var context = React.useContext(SPFxContext);
|
|
28
|
+
if (!context) {
|
|
29
|
+
throw new Error('useSPFxContext must be used within SPFxProvider. ' +
|
|
30
|
+
'Make sure your component is wrapped with <SPFxProvider>.');
|
|
31
|
+
}
|
|
32
|
+
return context;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=context.internal.js.map
|
|
@@ -0,0 +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,IAAM,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;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAM,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { BaseApplicationCustomizer } from '@microsoft/sp-application-base';
|
|
3
|
+
/**
|
|
4
|
+
* Props for the SPFx Application Customizer-specific provider component.
|
|
5
|
+
*
|
|
6
|
+
* @template TProps - The properties type for the Application Customizer.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export interface SPFxApplicationCustomizerProviderProps<TProps extends {} = {}> {
|
|
10
|
+
/**
|
|
11
|
+
* The SPFx Application Customizer instance.
|
|
12
|
+
*/
|
|
13
|
+
instance: BaseApplicationCustomizer<TProps>;
|
|
14
|
+
/**
|
|
15
|
+
* The children to render within the provider.
|
|
16
|
+
*/
|
|
17
|
+
children?: React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* SPFx context provider specifically for Application Customizers.
|
|
21
|
+
*
|
|
22
|
+
* This is a type-safe wrapper around the base provider that accepts an Application Customizer instance
|
|
23
|
+
* directly without requiring type casting. Use this provider in Application Customizers instead of the
|
|
24
|
+
* generic `SPFxProvider`.
|
|
25
|
+
*
|
|
26
|
+
* @param props - The component props.
|
|
27
|
+
* @returns The provider component.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* import { SPFxApplicationCustomizerProvider } from 'spfx-react-toolkit';
|
|
32
|
+
*
|
|
33
|
+
* export default class MyApplicationCustomizer extends BaseApplicationCustomizer<IMyProps> {
|
|
34
|
+
* public onInit(): Promise<void> {
|
|
35
|
+
* // Create a placeholder for your customizer
|
|
36
|
+
* const placeholder = this.context.placeholderProvider.tryCreateContent(
|
|
37
|
+
* PlaceholderName.Top
|
|
38
|
+
* );
|
|
39
|
+
*
|
|
40
|
+
* if (placeholder) {
|
|
41
|
+
* const element = React.createElement(
|
|
42
|
+
* SPFxApplicationCustomizerProvider,
|
|
43
|
+
* { instance: this },
|
|
44
|
+
* React.createElement(MyComponent)
|
|
45
|
+
* );
|
|
46
|
+
* ReactDom.render(element, placeholder.domElement);
|
|
47
|
+
* }
|
|
48
|
+
*
|
|
49
|
+
* return Promise.resolve();
|
|
50
|
+
* }
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @public
|
|
55
|
+
*/
|
|
56
|
+
export declare function SPFxApplicationCustomizerProvider<TProps extends {} = {}>(props: SPFxApplicationCustomizerProviderProps<TProps>): JSX.Element;
|
|
57
|
+
//# sourceMappingURL=provider-application-customizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-application-customizer.d.ts","sourceRoot":"","sources":["../../src/core/provider-application-customizer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAGhF;;;;;GAKG;AACH,MAAM,WAAW,sCAAsC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE;IAC5E;;OAEG;IACH,QAAQ,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EACtE,KAAK,EAAE,sCAAsC,CAAC,MAAM,CAAC,GACpD,GAAG,CAAC,OAAO,CAEb"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// provider-application-customizer.tsx
|
|
2
|
+
// Type-safe provider for Application Customizers
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { SPFxProviderBase } from './provider-base.internal';
|
|
5
|
+
/**
|
|
6
|
+
* SPFx context provider specifically for Application Customizers.
|
|
7
|
+
*
|
|
8
|
+
* This is a type-safe wrapper around the base provider that accepts an Application Customizer instance
|
|
9
|
+
* directly without requiring type casting. Use this provider in Application Customizers instead of the
|
|
10
|
+
* generic `SPFxProvider`.
|
|
11
|
+
*
|
|
12
|
+
* @param props - The component props.
|
|
13
|
+
* @returns The provider component.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { SPFxApplicationCustomizerProvider } from 'spfx-react-toolkit';
|
|
18
|
+
*
|
|
19
|
+
* export default class MyApplicationCustomizer extends BaseApplicationCustomizer<IMyProps> {
|
|
20
|
+
* public onInit(): Promise<void> {
|
|
21
|
+
* // Create a placeholder for your customizer
|
|
22
|
+
* const placeholder = this.context.placeholderProvider.tryCreateContent(
|
|
23
|
+
* PlaceholderName.Top
|
|
24
|
+
* );
|
|
25
|
+
*
|
|
26
|
+
* if (placeholder) {
|
|
27
|
+
* const element = React.createElement(
|
|
28
|
+
* SPFxApplicationCustomizerProvider,
|
|
29
|
+
* { instance: this },
|
|
30
|
+
* React.createElement(MyComponent)
|
|
31
|
+
* );
|
|
32
|
+
* ReactDom.render(element, placeholder.domElement);
|
|
33
|
+
* }
|
|
34
|
+
*
|
|
35
|
+
* return Promise.resolve();
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @public
|
|
41
|
+
*/
|
|
42
|
+
export function SPFxApplicationCustomizerProvider(props) {
|
|
43
|
+
return React.createElement(SPFxProviderBase, { instance: props.instance }, props.children);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=provider-application-customizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-application-customizer.js","sourceRoot":"","sources":["../../src/core/provider-application-customizer.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iDAAiD;AAEjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAoB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAAqD;IAErD,OAAO,oBAAC,gBAAgB,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAiB,IAAG,KAAK,CAAC,QAAQ,CAAoB,CAAC;AAClG,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { SPFxProviderProps } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* SPFxProviderBase - Internal base provider with shared logic
|
|
5
|
+
*
|
|
6
|
+
* Creates an isolated Jotai store for each instance, ensuring complete
|
|
7
|
+
* state isolation between multiple SPFx components on the same page.
|
|
8
|
+
*
|
|
9
|
+
* DO NOT use directly - use type-specific providers instead:
|
|
10
|
+
* - SPFxWebPartProvider
|
|
11
|
+
* - SPFxApplicationCustomizerProvider
|
|
12
|
+
* - SPFxListViewCommandSetProvider
|
|
13
|
+
* - SPFxFieldCustomizerProvider
|
|
14
|
+
*
|
|
15
|
+
* Or use the generic SPFxProvider for backward compatibility.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function SPFxProviderBase<TProps extends {} = {}>(props: SPFxProviderProps<TProps>): JSX.Element;
|
|
20
|
+
//# sourceMappingURL=provider-base.internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-base.internal.d.ts","sourceRoot":"","sources":["../../src/core/provider-base.internal.tsx"],"names":[],"mappings":";AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAOnE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EACrD,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAC/B,GAAG,CAAC,OAAO,CAgIb"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// provider-base.tsx
|
|
2
|
+
// SPFxProviderBase - Internal base implementation with shared logic
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Provider, createStore, useSetAtom, useAtomValue } from 'jotai';
|
|
5
|
+
import { SPFxContext } from './context.internal';
|
|
6
|
+
import { spfxAtoms } from './atoms.internal';
|
|
7
|
+
import { detectComponentKind, isWebPart, } from '../utils/type-guards.internal';
|
|
8
|
+
import { useThemeSubscription } from '../utils/theme-subscription.internal';
|
|
9
|
+
/**
|
|
10
|
+
* SPFxProviderBase - Internal base provider with shared logic
|
|
11
|
+
*
|
|
12
|
+
* Creates an isolated Jotai store for each instance, ensuring complete
|
|
13
|
+
* state isolation between multiple SPFx components on the same page.
|
|
14
|
+
*
|
|
15
|
+
* DO NOT use directly - use type-specific providers instead:
|
|
16
|
+
* - SPFxWebPartProvider
|
|
17
|
+
* - SPFxApplicationCustomizerProvider
|
|
18
|
+
* - SPFxListViewCommandSetProvider
|
|
19
|
+
* - SPFxFieldCustomizerProvider
|
|
20
|
+
*
|
|
21
|
+
* Or use the generic SPFxProvider for backward compatibility.
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export function SPFxProviderBase(props) {
|
|
26
|
+
var instance = props.instance, children = props.children;
|
|
27
|
+
// Cast to 'any' to access protected/private properties
|
|
28
|
+
// This is safe because we're inside the provider and know the structure
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
+
var instanceAny = instance;
|
|
31
|
+
// Detect component kind (WebPart, AppCustomizer, etc.)
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
var kind = React.useMemo(function () { return detectComponentKind(instance); }, [instance]);
|
|
34
|
+
// Extract context (BaseComponentContext - has instanceId)
|
|
35
|
+
var context = instanceAny.context;
|
|
36
|
+
// Extract instanceId type-safe (all SPFx contexts extend BaseComponentContext)
|
|
37
|
+
var instanceId = React.useMemo(function () { return context.instanceId; }, [context]);
|
|
38
|
+
// Create isolated Jotai store for this Provider instance
|
|
39
|
+
// Each store is independent, ensuring complete state isolation
|
|
40
|
+
var store = React.useMemo(function () { return createStore(); }, []);
|
|
41
|
+
// Get atom setters (using the isolated store)
|
|
42
|
+
var setProperties = useSetAtom(spfxAtoms.properties, { store: store });
|
|
43
|
+
var setDisplayMode = useSetAtom(spfxAtoms.displayMode, { store: store });
|
|
44
|
+
var setContainerEl = useSetAtom(spfxAtoms.containerEl, { store: store });
|
|
45
|
+
var setTheme = useSetAtom(spfxAtoms.theme, { store: store });
|
|
46
|
+
// Ref to track last known properties value (prevents loop)
|
|
47
|
+
var lastPropertiesRef = React.useRef(instanceAny.properties);
|
|
48
|
+
// Subscribe to theme changes (single subscription per instance)
|
|
49
|
+
useThemeSubscription(context, setTheme);
|
|
50
|
+
// Initialize atoms based on component type
|
|
51
|
+
React.useEffect(function () {
|
|
52
|
+
// Properties (common to all)
|
|
53
|
+
setProperties(instanceAny.properties);
|
|
54
|
+
lastPropertiesRef.current = instanceAny.properties;
|
|
55
|
+
// WebPart-specific
|
|
56
|
+
if (isWebPart(instance)) {
|
|
57
|
+
setDisplayMode(instanceAny.displayMode);
|
|
58
|
+
setContainerEl(instanceAny.domElement);
|
|
59
|
+
}
|
|
60
|
+
}, [
|
|
61
|
+
instance,
|
|
62
|
+
instanceAny,
|
|
63
|
+
setProperties,
|
|
64
|
+
setDisplayMode,
|
|
65
|
+
setContainerEl,
|
|
66
|
+
]);
|
|
67
|
+
// Sync properties when they change (SPFx → Atom)
|
|
68
|
+
// Property Pane changes will trigger this via instance.properties reference change
|
|
69
|
+
React.useEffect(function () {
|
|
70
|
+
if (instanceAny.properties !== lastPropertiesRef.current) {
|
|
71
|
+
setProperties(instanceAny.properties);
|
|
72
|
+
lastPropertiesRef.current = instanceAny.properties;
|
|
73
|
+
}
|
|
74
|
+
}, [instanceAny.properties, setProperties, instanceAny]);
|
|
75
|
+
// Sync properties when atom changes (Atom → SPFx)
|
|
76
|
+
// Hook updates will trigger this via atom subscription
|
|
77
|
+
var properties = useAtomValue(spfxAtoms.properties, { store: store });
|
|
78
|
+
React.useEffect(function () {
|
|
79
|
+
// Guard: Don't sync if atom is still undefined (initial state before initialization)
|
|
80
|
+
// This prevents race condition where useAtomValue reads before initialization useEffect runs
|
|
81
|
+
if (properties === undefined) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// Only sync if atom value is different from last known value
|
|
85
|
+
if (properties !== lastPropertiesRef.current) {
|
|
86
|
+
// Mutate SPFx properties object (copy all properties from atom to instance)
|
|
87
|
+
var target = instanceAny.properties;
|
|
88
|
+
var source = properties;
|
|
89
|
+
// Clear existing properties
|
|
90
|
+
for (var key in target) {
|
|
91
|
+
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
92
|
+
delete target[key];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Copy new properties
|
|
96
|
+
for (var key in source) {
|
|
97
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
98
|
+
target[key] = source[key];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
lastPropertiesRef.current = properties;
|
|
102
|
+
// Refresh Property Pane for WebParts (if propertyPane exists)
|
|
103
|
+
if (isWebPart(instance)) {
|
|
104
|
+
var ctx = instanceAny.context;
|
|
105
|
+
if (ctx.propertyPane && typeof ctx.propertyPane.refresh === 'function') {
|
|
106
|
+
ctx.propertyPane.refresh();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}, [properties, instance, instanceAny]);
|
|
111
|
+
// WebPart: Sync displayMode when it changes
|
|
112
|
+
React.useEffect(function () {
|
|
113
|
+
if (isWebPart(instance)) {
|
|
114
|
+
setDisplayMode(instanceAny.displayMode);
|
|
115
|
+
}
|
|
116
|
+
}, [instance, instanceAny, setDisplayMode]);
|
|
117
|
+
// Create context value (memoized to prevent re-renders)
|
|
118
|
+
var contextValue = React.useMemo(function () { return ({
|
|
119
|
+
instanceId: instanceId,
|
|
120
|
+
spfxContext: context,
|
|
121
|
+
kind: kind,
|
|
122
|
+
}); }, [instanceId, context, kind]);
|
|
123
|
+
return (React.createElement(Provider, { store: store },
|
|
124
|
+
React.createElement(SPFxContext.Provider, { value: contextValue }, children)));
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=provider-base.internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,58 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { BaseFieldCustomizer } from '@microsoft/sp-listview-extensibility';
|
|
3
|
+
/**
|
|
4
|
+
* Props for the SPFx Field Customizer-specific provider component.
|
|
5
|
+
*
|
|
6
|
+
* @template TProps - The properties type for the Field Customizer.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export interface SPFxFieldCustomizerProviderProps<TProps extends {} = {}> {
|
|
10
|
+
/**
|
|
11
|
+
* The SPFx Field Customizer instance.
|
|
12
|
+
*/
|
|
13
|
+
instance: BaseFieldCustomizer<TProps>;
|
|
14
|
+
/**
|
|
15
|
+
* The children to render within the provider.
|
|
16
|
+
*/
|
|
17
|
+
children?: React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* SPFx context provider specifically for Field Customizers.
|
|
21
|
+
*
|
|
22
|
+
* This is a type-safe wrapper around the base provider that accepts a Field Customizer instance
|
|
23
|
+
* directly without requiring type casting. Use this provider in Field Customizers instead of the
|
|
24
|
+
* generic `SPFxProvider`.
|
|
25
|
+
*
|
|
26
|
+
* @param props - The component props.
|
|
27
|
+
* @returns The provider component.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* import { SPFxFieldCustomizerProvider } from 'spfx-react-toolkit';
|
|
32
|
+
* import * as ReactDom from 'react-dom';
|
|
33
|
+
*
|
|
34
|
+
* export default class MyFieldCustomizer extends BaseFieldCustomizer<IMyProps> {
|
|
35
|
+
* public onRenderCell(event: IFieldCustomizerCellEventParameters): void {
|
|
36
|
+
* const element = React.createElement(
|
|
37
|
+
* SPFxFieldCustomizerProvider,
|
|
38
|
+
* { instance: this },
|
|
39
|
+
* React.createElement(MyFieldRenderer, {
|
|
40
|
+
* value: event.fieldValue,
|
|
41
|
+
* listItem: event.listItem
|
|
42
|
+
* })
|
|
43
|
+
* );
|
|
44
|
+
*
|
|
45
|
+
* ReactDom.render(element, event.domElement);
|
|
46
|
+
* }
|
|
47
|
+
*
|
|
48
|
+
* public onDisposeCell(event: IFieldCustomizerCellEventParameters): void {
|
|
49
|
+
* ReactDom.unmountComponentAtNode(event.domElement);
|
|
50
|
+
* super.onDisposeCell(event);
|
|
51
|
+
* }
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @public
|
|
56
|
+
*/
|
|
57
|
+
export declare function SPFxFieldCustomizerProvider<TProps extends {} = {}>(props: SPFxFieldCustomizerProviderProps<TProps>): JSX.Element;
|
|
58
|
+
//# sourceMappingURL=provider-field-customizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-field-customizer.d.ts","sourceRoot":"","sources":["../../src/core/provider-field-customizer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAGhF;;;;;GAKG;AACH,MAAM,WAAW,gCAAgC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE;IACtE;;OAEG;IACH,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EAChE,KAAK,EAAE,gCAAgC,CAAC,MAAM,CAAC,GAC9C,GAAG,CAAC,OAAO,CAEb"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// provider-field-customizer.tsx
|
|
2
|
+
// Type-safe provider for Field Customizers
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { SPFxProviderBase } from './provider-base.internal';
|
|
5
|
+
/**
|
|
6
|
+
* SPFx context provider specifically for Field Customizers.
|
|
7
|
+
*
|
|
8
|
+
* This is a type-safe wrapper around the base provider that accepts a Field Customizer instance
|
|
9
|
+
* directly without requiring type casting. Use this provider in Field Customizers instead of the
|
|
10
|
+
* generic `SPFxProvider`.
|
|
11
|
+
*
|
|
12
|
+
* @param props - The component props.
|
|
13
|
+
* @returns The provider component.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { SPFxFieldCustomizerProvider } from 'spfx-react-toolkit';
|
|
18
|
+
* import * as ReactDom from 'react-dom';
|
|
19
|
+
*
|
|
20
|
+
* export default class MyFieldCustomizer extends BaseFieldCustomizer<IMyProps> {
|
|
21
|
+
* public onRenderCell(event: IFieldCustomizerCellEventParameters): void {
|
|
22
|
+
* const element = React.createElement(
|
|
23
|
+
* SPFxFieldCustomizerProvider,
|
|
24
|
+
* { instance: this },
|
|
25
|
+
* React.createElement(MyFieldRenderer, {
|
|
26
|
+
* value: event.fieldValue,
|
|
27
|
+
* listItem: event.listItem
|
|
28
|
+
* })
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* ReactDom.render(element, event.domElement);
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* public onDisposeCell(event: IFieldCustomizerCellEventParameters): void {
|
|
35
|
+
* ReactDom.unmountComponentAtNode(event.domElement);
|
|
36
|
+
* super.onDisposeCell(event);
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @public
|
|
42
|
+
*/
|
|
43
|
+
export function SPFxFieldCustomizerProvider(props) {
|
|
44
|
+
return React.createElement(SPFxProviderBase, { instance: props.instance }, props.children);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=provider-field-customizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-field-customizer.js","sourceRoot":"","sources":["../../src/core/provider-field-customizer.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2CAA2C;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAoB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA+C;IAE/C,OAAO,oBAAC,gBAAgB,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAiB,IAAG,KAAK,CAAC,QAAQ,CAAoB,CAAC;AAClG,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { BaseListViewCommandSet } from '@microsoft/sp-listview-extensibility';
|
|
3
|
+
/**
|
|
4
|
+
* Props for the SPFx ListView Command Set-specific provider component.
|
|
5
|
+
*
|
|
6
|
+
* @template TProps - The properties type for the ListView Command Set.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export interface SPFxListViewCommandSetProviderProps<TProps extends {} = {}> {
|
|
10
|
+
/**
|
|
11
|
+
* The SPFx ListView Command Set instance.
|
|
12
|
+
*/
|
|
13
|
+
instance: BaseListViewCommandSet<TProps>;
|
|
14
|
+
/**
|
|
15
|
+
* The children to render within the provider.
|
|
16
|
+
*/
|
|
17
|
+
children?: React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* SPFx context provider specifically for ListView Command Sets.
|
|
21
|
+
*
|
|
22
|
+
* This is a type-safe wrapper around the base provider that accepts a ListView Command Set instance
|
|
23
|
+
* directly without requiring type casting. Use this provider in ListView Command Sets instead of the
|
|
24
|
+
* generic `SPFxProvider`.
|
|
25
|
+
*
|
|
26
|
+
* @param props - The component props.
|
|
27
|
+
* @returns The provider component.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* import { SPFxListViewCommandSetProvider } from 'spfx-react-toolkit';
|
|
32
|
+
* import { Dialog } from '@microsoft/sp-dialog';
|
|
33
|
+
*
|
|
34
|
+
* export default class MyCommandSet extends BaseListViewCommandSet<IMyProps> {
|
|
35
|
+
* public onExecute(event: IListViewCommandSetExecuteEventParameters): void {
|
|
36
|
+
* switch (event.itemId) {
|
|
37
|
+
* case 'COMMAND_1':
|
|
38
|
+
* // Create a dialog container
|
|
39
|
+
* const dialog = Dialog.alert({
|
|
40
|
+
* title: 'Custom Dialog',
|
|
41
|
+
* message: this._renderDialog()
|
|
42
|
+
* });
|
|
43
|
+
* break;
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* private _renderDialog(): React.ReactElement {
|
|
48
|
+
* return React.createElement(
|
|
49
|
+
* SPFxListViewCommandSetProvider,
|
|
50
|
+
* { instance: this },
|
|
51
|
+
* React.createElement(MyComponent)
|
|
52
|
+
* );
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
59
|
+
export declare function SPFxListViewCommandSetProvider<TProps extends {} = {}>(props: SPFxListViewCommandSetProviderProps<TProps>): JSX.Element;
|
|
60
|
+
//# sourceMappingURL=provider-listview-commandset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-listview-commandset.d.ts","sourceRoot":"","sources":["../../src/core/provider-listview-commandset.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAGnF;;;;;GAKG;AACH,MAAM,WAAW,mCAAmC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE;IACzE;;OAEG;IACH,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEzC;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EACnE,KAAK,EAAE,mCAAmC,CAAC,MAAM,CAAC,GACjD,GAAG,CAAC,OAAO,CAEb"}
|