@edifice.io/react 2.5.20 → 2.5.21-develop.20260526135535

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.
@@ -22,6 +22,8 @@ export * from './useIsAdmlcOrAdmc';
22
22
  export * from './useKeyPress';
23
23
  export * from './useLibraryUrl';
24
24
  export * from './useMediaLibrary';
25
+ export * from './usePublicConf';
26
+ export * from './useScreeb';
25
27
  export * from './useScrollToTop';
26
28
  export * from './useTitle';
27
29
  export * from './useToast';
@@ -0,0 +1 @@
1
+ export { default as usePublicConf } from './usePublicConf';
@@ -0,0 +1,2 @@
1
+ import { App } from '@edifice.io/client';
2
+ export default function usePublicConf<T>(appCode: App): import('@tanstack/react-query').UseQueryResult<T, Error>;
@@ -0,0 +1,12 @@
1
+ import { odeServices } from "@edifice.io/client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ function usePublicConf(appCode) {
4
+ return useQuery({
5
+ queryKey: ["publicConf", appCode],
6
+ queryFn: () => odeServices.conf().getPublicConf(appCode),
7
+ staleTime: 1 / 0
8
+ });
9
+ }
10
+ export {
11
+ usePublicConf as default
12
+ };
@@ -0,0 +1 @@
1
+ export { useScreeb, type ScreebProperties, type ScreebSurveyHooks } from './useScreeb';
@@ -0,0 +1,12 @@
1
+ import { HooksMessageStart, HooksSurveyStart, PropertyRecord } from '@screeb/sdk-browser';
2
+ export type { HooksMessageStart as ScreebMessageHooks };
3
+ export type { HooksSurveyStart as ScreebSurveyHooks };
4
+ export type ScreebProperties = PropertyRecord;
5
+ export declare function useScreeb(): {
6
+ closeSurvey: () => Promise<unknown>;
7
+ forceTargetingCheck: () => Promise<unknown>;
8
+ setIdentityProperties: (properties: ScreebProperties) => Promise<unknown>;
9
+ trackEvent: (name: string, properties?: ScreebProperties) => Promise<unknown>;
10
+ triggerMessage: (messageId: string, hooks?: HooksMessageStart) => Promise<unknown>;
11
+ triggerSurvey: (surveyId: string, hooks?: HooksSurveyStart, hiddenFields?: ScreebProperties) => Promise<unknown>;
12
+ };
@@ -0,0 +1,22 @@
1
+ import { useScreeb as useScreeb$1 } from "@screeb/sdk-react";
2
+ function useScreeb() {
3
+ const {
4
+ eventTrack,
5
+ identityProperties,
6
+ messageStart,
7
+ surveyClose,
8
+ surveyStart,
9
+ targetingCheck
10
+ } = useScreeb$1();
11
+ return {
12
+ closeSurvey: () => surveyClose(),
13
+ forceTargetingCheck: () => targetingCheck(),
14
+ setIdentityProperties: (properties) => identityProperties(properties),
15
+ trackEvent: (name, properties) => eventTrack(name, properties),
16
+ triggerMessage: (messageId, hooks) => messageStart(messageId, void 0, void 0, hooks),
17
+ triggerSurvey: (surveyId, hooks, hiddenFields) => surveyStart(surveyId, void 0, void 0, hiddenFields, hooks)
18
+ };
19
+ }
20
+ export {
21
+ useScreeb
22
+ };
package/dist/index.js CHANGED
@@ -95,29 +95,31 @@ import { default as default93 } from "./hooks/useIsAdmlcOrAdmc/useIsAdmlcOrAdmc.
95
95
  import { default as default94 } from "./hooks/useKeyPress/useKeyPress.js";
96
96
  import { default as default95 } from "./hooks/useLibraryUrl/useLibraryUrl.js";
97
97
  import { default as default96 } from "./hooks/useMediaLibrary/useMediaLibrary.js";
98
- import { default as default97 } from "./hooks/useScrollToTop/useScrollToTop.js";
99
- import { default as default98 } from "./modules/modals/ShareModal/hooks/useShareMutation.js";
100
- import { default as default99 } from "./hooks/useTitle/useTitle.js";
101
- import { default as default100 } from "./hooks/useToast/useToast.js";
102
- import { default as default101 } from "./hooks/useToggle/useToggle.js";
103
- import { default as default102 } from "./hooks/useTrapFocus/useTrapFocus.js";
104
- import { default as default103 } from "./hooks/useTrashedResource/useTrashedResource.js";
105
- import { default as default104 } from "./modules/modals/ResourceModal/hooks/useUpdateMutation.js";
106
- import { default as default105 } from "./hooks/useUpload/useUpload.js";
107
- import { default as default106 } from "./hooks/useUploadFiles/useUploadFiles.js";
108
- import { default as default107 } from "./hooks/useUser/useUser.js";
109
- import { default as default108 } from "./hooks/useWorkspaceFile/useWorkspaceFile.js";
110
- import { default as default109 } from "./hooks/useWorkspaceFolders/useWorkspaceFolders.js";
111
- import { WORKSPACE_SHARED_FOLDER_ID, WORKSPACE_USER_FOLDER_ID, default as default110 } from "./hooks/useWorkspaceFolders/useWorkspaceFoldersTree.js";
112
- import { default as default111 } from "./hooks/useWorkspaceSearch/useWorkspaceSearch.js";
113
- import { default as default112 } from "./hooks/useXitiTrackPageLoad/useXitiTrackPageLoad.js";
114
- import { default as default113 } from "./hooks/useZendeskGuide/useZendeskGuide.js";
98
+ import { default as default97 } from "./hooks/usePublicConf/usePublicConf.js";
99
+ import { default as default98 } from "./hooks/useScrollToTop/useScrollToTop.js";
100
+ import { default as default99 } from "./modules/modals/ShareModal/hooks/useShareMutation.js";
101
+ import { default as default100 } from "./hooks/useTitle/useTitle.js";
102
+ import { default as default101 } from "./hooks/useToast/useToast.js";
103
+ import { default as default102 } from "./hooks/useToggle/useToggle.js";
104
+ import { default as default103 } from "./hooks/useTrapFocus/useTrapFocus.js";
105
+ import { default as default104 } from "./hooks/useTrashedResource/useTrashedResource.js";
106
+ import { default as default105 } from "./modules/modals/ResourceModal/hooks/useUpdateMutation.js";
107
+ import { default as default106 } from "./hooks/useUpload/useUpload.js";
108
+ import { default as default107 } from "./hooks/useUploadFiles/useUploadFiles.js";
109
+ import { default as default108 } from "./hooks/useUser/useUser.js";
110
+ import { default as default109 } from "./hooks/useWorkspaceFile/useWorkspaceFile.js";
111
+ import { default as default110 } from "./hooks/useWorkspaceFolders/useWorkspaceFolders.js";
112
+ import { WORKSPACE_SHARED_FOLDER_ID, WORKSPACE_USER_FOLDER_ID, default as default111 } from "./hooks/useWorkspaceFolders/useWorkspaceFoldersTree.js";
113
+ import { default as default112 } from "./hooks/useWorkspaceSearch/useWorkspaceSearch.js";
114
+ import { default as default113 } from "./hooks/useXitiTrackPageLoad/useXitiTrackPageLoad.js";
115
+ import { default as default114 } from "./hooks/useZendeskGuide/useZendeskGuide.js";
115
116
  import { AccessiblePalette, DefaultPalette } from "./components/ColorPicker/ColorPalette.js";
116
117
  import { AntProvider } from "./providers/AntThemeProvider/AntProvider.js";
117
118
  import { Column, Grid } from "./components/Grid/Grid.js";
118
119
  import { DropzoneContext, useDropzoneContext } from "./components/Dropzone/DropzoneContext.js";
119
120
  import { EdificeClientContext } from "./providers/EdificeClientProvider/EdificeClientProvider.context.js";
120
121
  import { EdificeClientProvider } from "./providers/EdificeClientProvider/EdificeClientProvider.js";
122
+ import { EdificeScreebProvider } from "./providers/EdificeScreebProvider/EdificeScreebProvider.js";
121
123
  import { EdificeThemeContext } from "./providers/EdificeThemeProvider/EdificeThemeProvider.context.js";
122
124
  import { EdificeThemeProvider } from "./providers/EdificeThemeProvider/EdificeThemeProvider.js";
123
125
  import { ExternalLinker } from "./modules/multimedia/Linker/ExternalLinker/ExternalLinker.js";
@@ -147,6 +149,7 @@ import { useCheckable } from "./hooks/useCheckable/useCheckable.js";
147
149
  import { useEdificeClient } from "./providers/EdificeClientProvider/EdificeClientProvider.hook.js";
148
150
  import { useEdificeTheme } from "./providers/EdificeThemeProvider/EdificeThemeProvider.hook.js";
149
151
  import { useFileToAttachment } from "./components/AddAttachments/hooks/useFileToAttachment.js";
152
+ import { useScreeb } from "./hooks/useScreeb/useScreeb.js";
150
153
  import { useTreeSortable } from "./components/Tree/hooks/useTreeSortable.js";
151
154
  import { useTreeView } from "./components/TreeView/hooks/useTreeView.js";
152
155
  export {
@@ -182,6 +185,7 @@ export {
182
185
  DropzoneContext,
183
186
  EdificeClientContext,
184
187
  EdificeClientProvider,
188
+ EdificeScreebProvider,
185
189
  EdificeThemeContext,
186
190
  EdificeThemeProvider,
187
191
  default25 as Embed,
@@ -314,24 +318,26 @@ export {
314
318
  default94 as useKeyPress,
315
319
  default95 as useLibraryUrl,
316
320
  default96 as useMediaLibrary,
317
- default97 as useScrollToTop,
318
- default98 as useShareMutation,
319
- default99 as useTitle,
320
- default100 as useToast,
321
- default101 as useToggle,
322
- default102 as useTrapFocus,
323
- default103 as useTrashedResource,
321
+ default97 as usePublicConf,
322
+ useScreeb,
323
+ default98 as useScrollToTop,
324
+ default99 as useShareMutation,
325
+ default100 as useTitle,
326
+ default101 as useToast,
327
+ default102 as useToggle,
328
+ default103 as useTrapFocus,
329
+ default104 as useTrashedResource,
324
330
  useTreeSortable,
325
331
  useTreeView,
326
- default104 as useUpdateMutation,
327
- default105 as useUpload,
328
- default106 as useUploadFiles,
329
- default107 as useUser,
330
- default108 as useWorkspaceFile,
331
- default109 as useWorkspaceFolders,
332
- default110 as useWorkspaceFoldersTree,
333
- default111 as useWorkspaceSearch,
334
- default112 as useXitiTrackPageLoad,
335
- default113 as useZendeskGuide,
332
+ default105 as useUpdateMutation,
333
+ default106 as useUpload,
334
+ default107 as useUploadFiles,
335
+ default108 as useUser,
336
+ default109 as useWorkspaceFile,
337
+ default110 as useWorkspaceFolders,
338
+ default111 as useWorkspaceFoldersTree,
339
+ default112 as useWorkspaceSearch,
340
+ default113 as useXitiTrackPageLoad,
341
+ default114 as useZendeskGuide,
336
342
  wrapTreeNode
337
343
  };
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ import { HooksInit } from '@screeb/sdk-browser';
3
+ export type EdificeScreebProviderProps = {
4
+ children: ReactNode;
5
+ onSurveyDisplayAllowed?: HooksInit['onSurveyDisplayAllowed'];
6
+ };
7
+ export declare const EdificeScreebProvider: ({ children, onSurveyDisplayAllowed, }: EdificeScreebProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,52 @@
1
+ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import { ScreebProvider, useScreeb } from "@screeb/sdk-react";
4
+ import { useEdificeClient } from "../EdificeClientProvider/EdificeClientProvider.hook.js";
5
+ import usePublicConf from "../../hooks/usePublicConf/usePublicConf.js";
6
+ async function hashUserId(userId) {
7
+ const hashBuffer = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(userId));
8
+ return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join("").slice(0, 16);
9
+ }
10
+ const ScreebInitializer = ({
11
+ appId,
12
+ onSurveyDisplayAllowed
13
+ }) => {
14
+ const {
15
+ user
16
+ } = useEdificeClient(), {
17
+ init,
18
+ identityReset
19
+ } = useScreeb();
20
+ return useEffect(() => {
21
+ if (!user) return;
22
+ const hooks = onSurveyDisplayAllowed ? {
23
+ version: "1.0.0",
24
+ onSurveyDisplayAllowed
25
+ } : void 0;
26
+ hashUserId(user.userId).then((hashedId) => init(appId, hashedId, {
27
+ profile: user.type
28
+ }, hooks)).catch((error) => {
29
+ console.error("Failed to initialize Screeb:", error);
30
+ });
31
+ }, [user, appId, init, onSurveyDisplayAllowed]), useEffect(() => () => {
32
+ identityReset();
33
+ }, [identityReset]), null;
34
+ }, EdificeScreebProvider = ({
35
+ children,
36
+ onSurveyDisplayAllowed
37
+ }) => {
38
+ const {
39
+ appCode,
40
+ user,
41
+ userProfile
42
+ } = useEdificeClient(), {
43
+ data: publicConf
44
+ } = usePublicConf(appCode), appId = publicConf == null ? void 0 : publicConf["screeb-app-id"], allowedProfiles = publicConf == null ? void 0 : publicConf["screeb-allowed-profiles"], profileAllowed = !(allowedProfiles != null && allowedProfiles.length) || allowedProfiles.includes((userProfile == null ? void 0 : userProfile[0]) ?? "");
45
+ return !appId || !user || !profileAllowed ? /* @__PURE__ */ jsx(Fragment, { children }) : /* @__PURE__ */ jsxs(ScreebProvider, { children: [
46
+ /* @__PURE__ */ jsx(ScreebInitializer, { appId, onSurveyDisplayAllowed }),
47
+ children
48
+ ] });
49
+ };
50
+ export {
51
+ EdificeScreebProvider
52
+ };
@@ -0,0 +1 @@
1
+ export { EdificeScreebProvider } from './EdificeScreebProvider';
@@ -1,19 +1,27 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { QueryClientProvider, QueryClient } from "@tanstack/react-query";
3
- import { EdificeClientProvider } from "../EdificeClientProvider/EdificeClientProvider.js";
3
+ import { EdificeClientContext } from "../EdificeClientProvider/EdificeClientProvider.context.js";
4
4
  import { EdificeThemeContext } from "../EdificeThemeProvider/EdificeThemeProvider.context.js";
5
- const queryClient = new QueryClient(), Providers = ({
6
- children
7
- }) => /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(EdificeClientProvider, { params: {
8
- app: "wiki"
9
- }, children }) }), MockedProvider = ({
5
+ import { mockQueryResult, mockSession, mockConf } from "./MockedProvider.mocks.js";
6
+ const queryClient = new QueryClient(), MockedProvider = ({
10
7
  children
11
8
  }) => {
12
9
  const themeContextValue = {
13
10
  theme: "default",
14
11
  setTheme: vi.fn()
12
+ }, clientContextValue = {
13
+ appCode: "wiki",
14
+ applications: mockConf.applications,
15
+ confQuery: mockQueryResult(mockConf),
16
+ currentApp: mockConf.currentApp,
17
+ currentLanguage: mockSession.currentLanguage,
18
+ init: !0,
19
+ sessionQuery: mockQueryResult(mockSession),
20
+ user: mockSession.user,
21
+ userDescription: mockSession.userDescription,
22
+ userProfile: mockSession.userProfile
15
23
  };
16
- return /* @__PURE__ */ jsx(Providers, { children: /* @__PURE__ */ jsx(EdificeThemeContext.Provider, { value: themeContextValue, children }) });
24
+ return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(EdificeClientContext.Provider, { value: clientContextValue, children: /* @__PURE__ */ jsx(EdificeThemeContext.Provider, { value: themeContextValue, children }) }) });
17
25
  };
18
26
  export {
19
27
  MockedProvider
@@ -0,0 +1,6 @@
1
+ import { IGetConf, IGetSession, IUserInfo } from '@edifice.io/client';
2
+ import { UseQueryResult } from '@tanstack/react-query';
3
+ export declare function mockQueryResult<T>(data: T): UseQueryResult<T>;
4
+ export declare const mockUser: IUserInfo;
5
+ export declare const mockSession: IGetSession;
6
+ export declare const mockConf: IGetConf;
@@ -0,0 +1,119 @@
1
+ function mockQueryResult(data) {
2
+ return {
3
+ data,
4
+ isSuccess: !0,
5
+ isLoading: !1,
6
+ isPending: !1,
7
+ isError: !1,
8
+ error: null,
9
+ status: "success",
10
+ fetchStatus: "idle",
11
+ isStale: !1,
12
+ isPlaceholderData: !1,
13
+ isFetching: !1,
14
+ isFetched: !0,
15
+ isFetchedAfterMount: !0,
16
+ isLoadingError: !1,
17
+ isRefetchError: !1,
18
+ isRefetching: !1,
19
+ dataUpdatedAt: 0,
20
+ errorUpdatedAt: 0,
21
+ failureCount: 0,
22
+ failureReason: null,
23
+ errorUpdateCount: 0,
24
+ refetch: vi.fn(),
25
+ promise: Promise.resolve(data)
26
+ };
27
+ }
28
+ const mockUser = {
29
+ classNames: [],
30
+ level: "",
31
+ login: "user.login",
32
+ lastName: "Last Name",
33
+ firstName: "First Name",
34
+ externalId: "external-id",
35
+ federated: null,
36
+ birthDate: "2023-09-25",
37
+ forceChangePassword: null,
38
+ needRevalidateTerms: !1,
39
+ deletePending: !1,
40
+ username: "user.name",
41
+ type: "ENSEIGNANT",
42
+ hasPw: !0,
43
+ functions: {
44
+ SUPER_ADMIN: {
45
+ code: "SUPER_ADMIN",
46
+ scope: []
47
+ }
48
+ },
49
+ groupsIds: ["group-id-1"],
50
+ federatedIDP: null,
51
+ optionEnabled: [],
52
+ userId: "91c22b66-ba1b-4fde-a3fe-95219cc18d4a",
53
+ structures: ["structure-id"],
54
+ structureNames: ["Structure Name"],
55
+ uai: [],
56
+ hasApp: !1,
57
+ classes: [],
58
+ authorizedActions: [],
59
+ apps: [],
60
+ childrenIds: [],
61
+ children: {},
62
+ widgets: [],
63
+ sessionMetadata: {
64
+ _id: "",
65
+ userId: "91c22b66-ba1b-4fde-a3fe-95219cc18d4a"
66
+ }
67
+ }, mockSession = {
68
+ user: mockUser,
69
+ currentLanguage: "fr",
70
+ quotaAndUsage: {
71
+ quota: 104857600,
72
+ storage: 27683216
73
+ },
74
+ userDescription: {
75
+ mood: "default",
76
+ health: "",
77
+ alertSize: !1,
78
+ storage: 27683216,
79
+ type: "USERBOOK",
80
+ userid: "91c22b66-ba1b-4fde-a3fe-95219cc18d4a",
81
+ picture: "/userbook/avatar/91c22b66-ba1b-4fde-a3fe-95219cc18d4a",
82
+ quota: 104857600,
83
+ motto: "",
84
+ theme: "default",
85
+ hobbies: []
86
+ },
87
+ userProfile: ["Teacher"],
88
+ bookmarkedApps: []
89
+ }, mockConf = {
90
+ app: "wiki",
91
+ applications: [],
92
+ conf: {
93
+ dependencies: {
94
+ themes: {},
95
+ widgets: {}
96
+ },
97
+ emitWrapper: !1,
98
+ overriding: []
99
+ },
100
+ currentApp: void 0,
101
+ theme: {
102
+ basePath: "",
103
+ bootstrapVersion: "",
104
+ is1d: !1,
105
+ logoutCallback: "",
106
+ skin: "default",
107
+ skinName: "default",
108
+ skins: [],
109
+ themeName: "default",
110
+ themeUrl: "",
111
+ npmTheme: void 0
112
+ }
113
+ };
114
+ export {
115
+ mockConf,
116
+ mockQueryResult,
117
+ mockSession,
118
+ mockUser
119
+ };
@@ -5,4 +5,5 @@ export * from './EdificeClientProvider/EdificeClientProvider.hook';
5
5
  export * from './EdificeThemeProvider/EdificeThemeProvider';
6
6
  export * from './EdificeThemeProvider/EdificeThemeProvider.context';
7
7
  export * from './EdificeThemeProvider/EdificeThemeProvider.hook';
8
+ export * from './EdificeScreebProvider/EdificeScreebProvider';
8
9
  export * from './MockedProvider/MockedProvider';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edifice.io/react",
3
- "version": "2.5.20",
3
+ "version": "2.5.21-develop.20260526135535",
4
4
  "description": "Edifice React Library",
5
5
  "keywords": [
6
6
  "react",
@@ -74,6 +74,7 @@
74
74
  ],
75
75
  "dependencies": {
76
76
  "@ant-design/icons": "5.4.0",
77
+ "@screeb/sdk-react": "0.6.0",
77
78
  "@dnd-kit/core": "6.3.1",
78
79
  "@dnd-kit/sortable": "8.0.0",
79
80
  "@dnd-kit/utilities": "3.2.2",
@@ -133,9 +134,9 @@
133
134
  "react-slugify": "3.0.3",
134
135
  "swiper": "10.1.0",
135
136
  "ua-parser-js": "1.0.36",
136
- "@edifice.io/bootstrap": "2.5.20",
137
- "@edifice.io/tiptap-extensions": "2.5.20",
138
- "@edifice.io/utilities": "2.5.20"
137
+ "@edifice.io/bootstrap": "2.5.21-develop.20260526135535",
138
+ "@edifice.io/tiptap-extensions": "2.5.21-develop.20260526135535",
139
+ "@edifice.io/utilities": "2.5.21-develop.20260526135535"
139
140
  },
140
141
  "devDependencies": {
141
142
  "@babel/plugin-transform-react-pure-annotations": "7.27.1",
@@ -166,8 +167,8 @@
166
167
  "vite": "5.4.14",
167
168
  "vite-plugin-dts": "4.5.4",
168
169
  "vite-tsconfig-paths": "5.1.4",
169
- "@edifice.io/client": "2.5.20",
170
- "@edifice.io/config": "2.5.20"
170
+ "@edifice.io/client": "2.5.21-develop.20260526135535",
171
+ "@edifice.io/config": "2.5.21-develop.20260526135535"
171
172
  },
172
173
  "peerDependencies": {
173
174
  "@react-spring/web": "9.7.5",