@edifice.io/react 2.3.2-develop-b2school-actualites.20251027110554 → 2.3.2-develop-b2school-actualites.20251103102719
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/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useInfiniteScroll/index.d.ts +1 -0
- package/dist/hooks/useInfiniteScroll/useInfiniteScroll.d.ts +33 -0
- package/dist/hooks/useInfiniteScroll/useInfiniteScroll.js +20 -0
- package/dist/index.js +78 -74
- package/dist/utilities/index.d.ts +1 -0
- package/dist/utilities/react-query/index.d.ts +1 -0
- package/dist/utilities/react-query/react-query-utils.d.ts +21 -0
- package/dist/utilities/react-query/react-query-utils.js +13 -0
- package/package.json +6 -6
package/dist/hooks/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './useHasWorkflow';
|
|
|
15
15
|
export * from './useHover';
|
|
16
16
|
export * from './useHttpErrorToast';
|
|
17
17
|
export * from './useImage';
|
|
18
|
+
export * from './useInfiniteScroll';
|
|
18
19
|
export * from './useIsAdml';
|
|
19
20
|
export * from './useKeyPress';
|
|
20
21
|
export * from './useLibraryUrl';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as useInfiniteScroll } from './useInfiniteScroll';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A custom React hook that provides infinite scroll functionality using the Intersection Observer API.
|
|
3
|
+
*
|
|
4
|
+
* This hook returns a ref callback that can be attached to a DOM element (typically at the bottom
|
|
5
|
+
* of a scrollable list). When that element becomes visible in the viewport, the provided callback
|
|
6
|
+
* function is executed, allowing you to load more content.
|
|
7
|
+
*
|
|
8
|
+
* @param params - Configuration object for the infinite scroll hook
|
|
9
|
+
* @param params.callback - Function to execute when the observed element intersects with the viewport
|
|
10
|
+
* @param params.options - Optional Intersection Observer configuration options (defaults to { threshold: 0.1 })
|
|
11
|
+
*
|
|
12
|
+
* @returns A ref callback function that should be attached to the target DOM element
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const loadMoreRef = useInfiniteScroll({
|
|
17
|
+
* // Load more data when the element is visible
|
|
18
|
+
* callback: loadMoreItems,
|
|
19
|
+
* options: { threshold: 0.5 } // Trigger when 50% of element is visible
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* return (
|
|
23
|
+
* <div>
|
|
24
|
+
* {items.map(item => <Item key={item.id} {...item} />)}
|
|
25
|
+
* <div ref={loadMoreRef}>Loading...</div>
|
|
26
|
+
* </div>
|
|
27
|
+
* );
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export default function useInfiniteScroll({ callback, options, }: {
|
|
31
|
+
callback: () => void;
|
|
32
|
+
options?: IntersectionObserverInit;
|
|
33
|
+
}): (node: HTMLElement | null) => void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useRef, useCallback } from "react";
|
|
2
|
+
function useInfiniteScroll({
|
|
3
|
+
callback,
|
|
4
|
+
options = {
|
|
5
|
+
threshold: 0.1
|
|
6
|
+
}
|
|
7
|
+
}) {
|
|
8
|
+
const observerRef = useRef(null);
|
|
9
|
+
return useCallback((node) => {
|
|
10
|
+
if (observerRef.current && (observerRef.current.disconnect(), observerRef.current = null), !node) return;
|
|
11
|
+
const observer = new IntersectionObserver(async (entries) => {
|
|
12
|
+
for (const entry of entries)
|
|
13
|
+
entry.isIntersecting && await callback();
|
|
14
|
+
}, options);
|
|
15
|
+
observer.observe(node), observerRef.current = observer;
|
|
16
|
+
}, [callback, options]);
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
useInfiniteScroll as default
|
|
20
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -62,43 +62,44 @@ import { default as default61 } from "./hooks/useHasWorkflow/useHasWorkflow.js";
|
|
|
62
62
|
import { default as default62 } from "./hooks/useHover/useHover.js";
|
|
63
63
|
import { default as default63 } from "./hooks/useHttpErrorToast/useHttpErrorToast.js";
|
|
64
64
|
import { default as default64 } from "./hooks/useImage/useImage.js";
|
|
65
|
-
import { default as default65 } from "./hooks/
|
|
66
|
-
import { default as default66 } from "./hooks/
|
|
67
|
-
import { default as default67 } from "./hooks/
|
|
68
|
-
import { default as default68 } from "./hooks/
|
|
69
|
-
import { default as default69 } from "./hooks/
|
|
70
|
-
import { default as default70 } from "./hooks/
|
|
71
|
-
import { default as default71 } from "./hooks/
|
|
72
|
-
import { default as default72 } from "./hooks/
|
|
73
|
-
import { default as default73 } from "./hooks/
|
|
74
|
-
import { default as default74 } from "./hooks/
|
|
75
|
-
import { default as default75 } from "./hooks/
|
|
76
|
-
import { default as default76 } from "./hooks/
|
|
77
|
-
import { default as default77 } from "./hooks/
|
|
78
|
-
import { default as default78 } from "./hooks/
|
|
79
|
-
import { default as default79 } from "./hooks/
|
|
80
|
-
import {
|
|
81
|
-
import { default as default81 } from "./hooks/
|
|
82
|
-
import { default as default82 } from "./hooks/
|
|
83
|
-
import { default as default83 } from "./hooks/
|
|
84
|
-
import { default as default84 } from "./
|
|
85
|
-
import { default as default85 } from "./modules/modals/
|
|
86
|
-
import { default as default86 } from "./modules/modals/
|
|
87
|
-
import { default as default87 } from "./modules/modals/
|
|
88
|
-
import { default as default88 } from "./modules/modals/ResourceModal/
|
|
89
|
-
import { default as default89 } from "./modules/modals/
|
|
90
|
-
import { default as default90 } from "./modules/modals/ShareModal/
|
|
91
|
-
import { default as default91 } from "./modules/modals/ShareModal/
|
|
92
|
-
import { default as default92 } from "./modules/
|
|
93
|
-
import { default as default93 } from "./modules/multimedia/
|
|
94
|
-
import { default as default94 } from "./modules/multimedia/
|
|
95
|
-
import { default as default95 } from "./modules/multimedia/
|
|
96
|
-
import { default as default96 } from "./modules/multimedia/
|
|
97
|
-
import { default as default97 } from "./modules/multimedia/
|
|
98
|
-
import { default as default98 } from "./modules/multimedia/
|
|
99
|
-
import { default as default99 } from "./modules/multimedia/
|
|
100
|
-
import { default as default100 } from "./modules/multimedia/
|
|
101
|
-
import { default as default101 } from "./modules/multimedia/
|
|
65
|
+
import { default as default65 } from "./hooks/useInfiniteScroll/useInfiniteScroll.js";
|
|
66
|
+
import { default as default66 } from "./hooks/useIsAdml/useIsAdml.js";
|
|
67
|
+
import { default as default67 } from "./hooks/useKeyPress/useKeyPress.js";
|
|
68
|
+
import { default as default68 } from "./hooks/useLibraryUrl/useLibraryUrl.js";
|
|
69
|
+
import { default as default69 } from "./hooks/useMediaLibrary/useMediaLibrary.js";
|
|
70
|
+
import { default as default70 } from "./hooks/useScrollToTop/useScrollToTop.js";
|
|
71
|
+
import { default as default71 } from "./hooks/useTitle/useTitle.js";
|
|
72
|
+
import { default as default72 } from "./hooks/useToast/useToast.js";
|
|
73
|
+
import { default as default73 } from "./hooks/useToggle/useToggle.js";
|
|
74
|
+
import { default as default74 } from "./hooks/useTrapFocus/useTrapFocus.js";
|
|
75
|
+
import { default as default75 } from "./hooks/useTrashedResource/useTrashedResource.js";
|
|
76
|
+
import { default as default76 } from "./hooks/useUpload/useUpload.js";
|
|
77
|
+
import { default as default77 } from "./hooks/useUploadFiles/useUploadFiles.js";
|
|
78
|
+
import { default as default78 } from "./hooks/useUser/useUser.js";
|
|
79
|
+
import { default as default79 } from "./hooks/useWorkspaceFile/useWorkspaceFile.js";
|
|
80
|
+
import { default as default80 } from "./hooks/useWorkspaceFolders/useWorkspaceFolders.js";
|
|
81
|
+
import { WORKSPACE_SHARED_FOLDER_ID, WORKSPACE_USER_FOLDER_ID, default as default81 } from "./hooks/useWorkspaceFolders/useWorkspaceFoldersTree.js";
|
|
82
|
+
import { default as default82 } from "./hooks/useWorkspaceSearch/useWorkspaceSearch.js";
|
|
83
|
+
import { default as default83 } from "./hooks/useXitiTrackPageLoad/useXitiTrackPageLoad.js";
|
|
84
|
+
import { default as default84 } from "./hooks/useZendeskGuide/useZendeskGuide.js";
|
|
85
|
+
import { default as default85 } from "./modules/modals/ConfirmModal/ConfirmModal.js";
|
|
86
|
+
import { default as default86 } from "./modules/modals/OnboardingModal/OnboardingModal.js";
|
|
87
|
+
import { default as default87 } from "./modules/modals/PublishModal/PublishModal.js";
|
|
88
|
+
import { default as default88 } from "./modules/modals/ResourceModal/apps/BlogPublic.js";
|
|
89
|
+
import { default as default89 } from "./modules/modals/ResourceModal/hooks/useUpdateMutation.js";
|
|
90
|
+
import { default as default90 } from "./modules/modals/ShareModal/ShareModal.js";
|
|
91
|
+
import { default as default91 } from "./modules/modals/ShareModal/apps/ShareBlog.js";
|
|
92
|
+
import { default as default92 } from "./modules/modals/ShareModal/hooks/useShareMutation.js";
|
|
93
|
+
import { default as default93 } from "./modules/multimedia/AudioRecorder/AudioRecorder.js";
|
|
94
|
+
import { default as default94 } from "./modules/multimedia/Embed/Embed.js";
|
|
95
|
+
import { default as default95 } from "./modules/multimedia/ImageEditor/components/ImageEditor.js";
|
|
96
|
+
import { default as default96 } from "./modules/multimedia/ImagePicker/ImagePicker.js";
|
|
97
|
+
import { default as default97 } from "./modules/multimedia/FileCard/FileCard.js";
|
|
98
|
+
import { default as default98 } from "./modules/multimedia/MediaLibrary/MediaLibrary.js";
|
|
99
|
+
import { default as default99 } from "./modules/multimedia/VideoEmbed/VideoEmbed.js";
|
|
100
|
+
import { default as default100 } from "./modules/multimedia/VideoRecorder/VideoRecorder.js";
|
|
101
|
+
import { default as default101 } from "./modules/multimedia/Workspace/Workspace.js";
|
|
102
|
+
import { default as default102 } from "./modules/multimedia/WorkspaceFolders/WorkspaceFolders.js";
|
|
102
103
|
import { AccessiblePalette, DefaultPalette } from "./components/ColorPicker/ColorPalette.js";
|
|
103
104
|
import { Divider } from "./components/Divider/Divider.js";
|
|
104
105
|
import { DropzoneContext, useDropzoneContext } from "./components/Dropzone/DropzoneContext.js";
|
|
@@ -128,6 +129,7 @@ import { useEdificeTheme } from "./providers/EdificeThemeProvider/EdificeThemePr
|
|
|
128
129
|
import { MockedProvider } from "./providers/MockedProvider/MockedProvider.js";
|
|
129
130
|
import { checkUserRight } from "./utilities/check-user-rights/check-user-rights.js";
|
|
130
131
|
import { emptyScreenMapping } from "./utilities/emptyscreen-mapping/emptyscreen-mapping.js";
|
|
132
|
+
import { invalidateQueriesWithFirstPage } from "./utilities/react-query/react-query-utils.js";
|
|
131
133
|
import { mergeRefs, setRef } from "./utilities/refs/ref.js";
|
|
132
134
|
export {
|
|
133
135
|
AccessiblePalette,
|
|
@@ -136,11 +138,11 @@ export {
|
|
|
136
138
|
default4 as AppHeader,
|
|
137
139
|
default5 as AppIcon,
|
|
138
140
|
default6 as Attachment,
|
|
139
|
-
|
|
141
|
+
default93 as AudioRecorder,
|
|
140
142
|
default7 as Avatar,
|
|
141
143
|
default8 as AvatarGroup,
|
|
142
144
|
default9 as Badge,
|
|
143
|
-
|
|
145
|
+
default88 as BlogPublic,
|
|
144
146
|
default10 as Breadcrumb,
|
|
145
147
|
default11 as Button,
|
|
146
148
|
default37 as ButtonSkeleton,
|
|
@@ -150,7 +152,7 @@ export {
|
|
|
150
152
|
default17 as ColorPickerItem,
|
|
151
153
|
Column,
|
|
152
154
|
default18 as Combobox,
|
|
153
|
-
|
|
155
|
+
default85 as ConfirmModal,
|
|
154
156
|
DefaultPalette,
|
|
155
157
|
Divider,
|
|
156
158
|
DndTree,
|
|
@@ -161,10 +163,10 @@ export {
|
|
|
161
163
|
EdificeClientProvider,
|
|
162
164
|
EdificeThemeContext,
|
|
163
165
|
EdificeThemeProvider,
|
|
164
|
-
|
|
166
|
+
default94 as Embed,
|
|
165
167
|
default21 as EmptyScreen,
|
|
166
168
|
ExternalLinker,
|
|
167
|
-
|
|
169
|
+
default97 as FileCard,
|
|
168
170
|
default22 as Flex,
|
|
169
171
|
default24 as FormControl,
|
|
170
172
|
default23 as FormText,
|
|
@@ -172,8 +174,8 @@ export {
|
|
|
172
174
|
default25 as Heading,
|
|
173
175
|
default12 as IconButton,
|
|
174
176
|
default26 as Image,
|
|
175
|
-
|
|
176
|
-
|
|
177
|
+
default95 as ImageEditor,
|
|
178
|
+
default96 as ImagePicker,
|
|
177
179
|
default27 as Input,
|
|
178
180
|
InternalLinker,
|
|
179
181
|
default28 as Label,
|
|
@@ -182,25 +184,25 @@ export {
|
|
|
182
184
|
default29 as Loading,
|
|
183
185
|
default30 as LoadingScreen,
|
|
184
186
|
default31 as Logo,
|
|
185
|
-
|
|
187
|
+
default98 as MediaLibrary,
|
|
186
188
|
Menu,
|
|
187
189
|
MockedProvider,
|
|
188
190
|
default32 as Modal,
|
|
189
|
-
|
|
191
|
+
default86 as OnboardingModal,
|
|
190
192
|
Popover,
|
|
191
193
|
PopoverBody,
|
|
192
194
|
PopoverFooter,
|
|
193
195
|
PopoverHeader,
|
|
194
196
|
default33 as PreventPropagation,
|
|
195
|
-
|
|
197
|
+
default87 as PublishModal,
|
|
196
198
|
default34 as Radio,
|
|
197
199
|
ResourceModal,
|
|
198
200
|
default35 as SearchBar,
|
|
199
201
|
default13 as SearchButton,
|
|
200
202
|
default36 as Select,
|
|
201
203
|
SeparatedInfo,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
+
default91 as ShareBlog,
|
|
205
|
+
default90 as ShareModal,
|
|
204
206
|
default45 as SortableTree,
|
|
205
207
|
default39 as StackedGroup,
|
|
206
208
|
default40 as Stepper,
|
|
@@ -215,13 +217,13 @@ export {
|
|
|
215
217
|
TreeNode,
|
|
216
218
|
TreeNodeFolderWrapper,
|
|
217
219
|
default47 as TreeView,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
+
default99 as VideoEmbed,
|
|
221
|
+
default100 as VideoRecorder,
|
|
220
222
|
default48 as VisuallyHidden,
|
|
221
223
|
WORKSPACE_SHARED_FOLDER_ID,
|
|
222
224
|
WORKSPACE_USER_FOLDER_ID,
|
|
223
|
-
|
|
224
|
-
|
|
225
|
+
default101 as Workspace,
|
|
226
|
+
default102 as WorkspaceFolders,
|
|
225
227
|
addNode,
|
|
226
228
|
arrayUnique,
|
|
227
229
|
buildTree,
|
|
@@ -243,6 +245,7 @@ export {
|
|
|
243
245
|
getIndicesToUpdate,
|
|
244
246
|
getProjection,
|
|
245
247
|
hasChildren,
|
|
248
|
+
invalidateQueriesWithFirstPage,
|
|
246
249
|
mergeRefs,
|
|
247
250
|
modifyNode,
|
|
248
251
|
moveNode,
|
|
@@ -269,28 +272,29 @@ export {
|
|
|
269
272
|
default62 as useHover,
|
|
270
273
|
default63 as useHttpErrorToast,
|
|
271
274
|
default64 as useImage,
|
|
272
|
-
default65 as
|
|
273
|
-
default66 as
|
|
274
|
-
default67 as
|
|
275
|
-
default68 as
|
|
276
|
-
default69 as
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
default71 as
|
|
280
|
-
default72 as
|
|
281
|
-
default73 as
|
|
282
|
-
default74 as
|
|
275
|
+
default65 as useInfiniteScroll,
|
|
276
|
+
default66 as useIsAdml,
|
|
277
|
+
default67 as useKeyPress,
|
|
278
|
+
default68 as useLibraryUrl,
|
|
279
|
+
default69 as useMediaLibrary,
|
|
280
|
+
default70 as useScrollToTop,
|
|
281
|
+
default92 as useShareMutation,
|
|
282
|
+
default71 as useTitle,
|
|
283
|
+
default72 as useToast,
|
|
284
|
+
default73 as useToggle,
|
|
285
|
+
default74 as useTrapFocus,
|
|
286
|
+
default75 as useTrashedResource,
|
|
283
287
|
useTreeSortable,
|
|
284
288
|
useTreeView,
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
289
|
+
default89 as useUpdateMutation,
|
|
290
|
+
default76 as useUpload,
|
|
291
|
+
default77 as useUploadFiles,
|
|
292
|
+
default78 as useUser,
|
|
293
|
+
default79 as useWorkspaceFile,
|
|
294
|
+
default80 as useWorkspaceFolders,
|
|
295
|
+
default81 as useWorkspaceFoldersTree,
|
|
296
|
+
default82 as useWorkspaceSearch,
|
|
297
|
+
default83 as useXitiTrackPageLoad,
|
|
298
|
+
default84 as useZendeskGuide,
|
|
295
299
|
wrapTreeNode
|
|
296
300
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './react-query-utils';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { InvalidateQueryFilters, QueryClient } from '../../node_modules/@tanstack/react-query';
|
|
2
|
+
/**
|
|
3
|
+
* Invalidates queries and resets infinite query data to only contain the first page.
|
|
4
|
+
*
|
|
5
|
+
* This utility function is useful when you want to invalidate a query but also ensure
|
|
6
|
+
* that any infinite query data is reset to show only the first page, removing any
|
|
7
|
+
* previously loaded subsequent pages.
|
|
8
|
+
*
|
|
9
|
+
* @param queryClient - The TanStack Query client instance used to manage queries
|
|
10
|
+
* @param options - The invalidate query filters that specify which queries to invalidate
|
|
11
|
+
* @returns The result of the invalidateQueries operation, or undefined if no queryKey is provided
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Invalidate user queries and reset to first page only
|
|
16
|
+
* invalidateQueriesWithFirstPage(queryClient, {
|
|
17
|
+
* queryKey: ['users']
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function invalidateQueriesWithFirstPage(queryClient: QueryClient, options: InvalidateQueryFilters): Promise<void> | undefined;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function invalidateQueriesWithFirstPage(queryClient, options) {
|
|
2
|
+
if (options.queryKey)
|
|
3
|
+
return queryClient.setQueriesData({
|
|
4
|
+
queryKey: options.queryKey
|
|
5
|
+
}, (oldData) => oldData != null && oldData.pages ? {
|
|
6
|
+
...oldData,
|
|
7
|
+
pages: [oldData.pages[0]],
|
|
8
|
+
pageParams: [oldData.pageParams[0]]
|
|
9
|
+
} : oldData), queryClient.invalidateQueries(options);
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
invalidateQueriesWithFirstPage
|
|
13
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edifice.io/react",
|
|
3
|
-
"version": "2.3.2-develop-b2school-actualites.
|
|
3
|
+
"version": "2.3.2-develop-b2school-actualites.20251103102719",
|
|
4
4
|
"description": "Edifice React Library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -131,9 +131,9 @@
|
|
|
131
131
|
"react-slugify": "^3.0.3",
|
|
132
132
|
"swiper": "^10.1.0",
|
|
133
133
|
"ua-parser-js": "^1.0.36",
|
|
134
|
-
"@edifice.io/bootstrap": "2.3.2-develop-b2school-actualites.
|
|
135
|
-
"@edifice.io/
|
|
136
|
-
"@edifice.io/
|
|
134
|
+
"@edifice.io/bootstrap": "2.3.2-develop-b2school-actualites.20251103102719",
|
|
135
|
+
"@edifice.io/tiptap-extensions": "2.3.2-develop-b2school-actualites.20251103102719",
|
|
136
|
+
"@edifice.io/utilities": "2.3.2-develop-b2school-actualites.20251103102719"
|
|
137
137
|
},
|
|
138
138
|
"devDependencies": {
|
|
139
139
|
"@babel/plugin-transform-react-pure-annotations": "^7.23.3",
|
|
@@ -164,8 +164,8 @@
|
|
|
164
164
|
"vite": "^5.4.11",
|
|
165
165
|
"vite-plugin-dts": "^4.1.0",
|
|
166
166
|
"vite-tsconfig-paths": "^5.0.1",
|
|
167
|
-
"@edifice.io/
|
|
168
|
-
"@edifice.io/
|
|
167
|
+
"@edifice.io/client": "2.3.2-develop-b2school-actualites.20251103102719",
|
|
168
|
+
"@edifice.io/config": "2.3.2-develop-b2school-actualites.20251103102719"
|
|
169
169
|
},
|
|
170
170
|
"peerDependencies": {
|
|
171
171
|
"@react-spring/web": "^9.7.5",
|