@strato-admin/faker-ecommerce 0.1.0 → 0.3.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/dist/dataProvider.js +1 -2
- package/dist/generate.d.ts +2 -1
- package/dist/generate.js +15 -8
- package/dist/ra-core/src/auth/LogoutOnMount.d.ts +8 -0
- package/dist/ra-core/src/auth/LogoutOnMount.js +16 -0
- package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.d.ts +22 -0
- package/dist/ra-core/src/auth/addRefreshAuthToAuthProvider.js +41 -0
- package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.d.ts +21 -0
- package/dist/ra-core/src/auth/addRefreshAuthToDataProvider.js +30 -0
- package/dist/ra-core/src/auth/convertLegacyAuthProvider.d.ts +12 -0
- package/dist/ra-core/src/auth/convertLegacyAuthProvider.js +19 -0
- package/dist/ra-core/src/auth/index.d.ts +27 -0
- package/dist/ra-core/src/auth/index.js +34 -0
- package/dist/ra-core/src/auth/types.d.ts +7 -0
- package/dist/ra-core/src/auth/types.js +5 -0
- package/dist/ra-core/src/auth/useAuthProvider.d.ts +10 -0
- package/dist/ra-core/src/auth/useAuthProvider.js +11 -0
- package/dist/ra-core/src/auth/useAuthState.d.ts +48 -0
- package/dist/ra-core/src/auth/useAuthState.js +171 -0
- package/dist/ra-core/src/auth/useAuthenticated.d.ts +36 -0
- package/dist/ra-core/src/auth/useAuthenticated.js +34 -0
- package/dist/ra-core/src/auth/useCanAccess.d.ts +56 -0
- package/dist/ra-core/src/auth/useCanAccess.js +108 -0
- package/dist/ra-core/src/auth/useCanAccessCallback.d.ts +39 -0
- package/dist/ra-core/src/auth/useCanAccessCallback.js +45 -0
- package/dist/ra-core/src/auth/useCanAccessResources.d.ts +67 -0
- package/dist/ra-core/src/auth/useCanAccessResources.js +92 -0
- package/dist/ra-core/src/auth/useCheckAuth.d.ts +48 -0
- package/dist/ra-core/src/auth/useCheckAuth.js +76 -0
- package/dist/ra-core/src/auth/useGetIdentity.d.ts +41 -0
- package/dist/ra-core/src/auth/useGetIdentity.js +86 -0
- package/dist/ra-core/src/auth/useGetPermissions.d.ts +41 -0
- package/dist/ra-core/src/auth/useGetPermissions.js +47 -0
- package/dist/ra-core/src/auth/useHandleAuthCallback.d.ts +20 -0
- package/dist/ra-core/src/auth/useHandleAuthCallback.js +83 -0
- package/dist/ra-core/src/auth/useIsAuthPending.d.ts +13 -0
- package/dist/ra-core/src/auth/useIsAuthPending.js +30 -0
- package/dist/ra-core/src/auth/useLogin.d.ts +34 -0
- package/dist/ra-core/src/auth/useLogin.js +78 -0
- package/dist/ra-core/src/auth/useLogout.d.ts +31 -0
- package/dist/ra-core/src/auth/useLogout.js +117 -0
- package/dist/ra-core/src/auth/useLogoutIfAccessDenied.d.ts +42 -0
- package/dist/ra-core/src/auth/useLogoutIfAccessDenied.js +111 -0
- package/dist/ra-core/src/auth/usePermissions.d.ts +41 -0
- package/dist/ra-core/src/auth/usePermissions.js +123 -0
- package/dist/ra-core/src/controller/button/index.d.ts +7 -0
- package/dist/ra-core/src/controller/button/index.js +7 -0
- package/dist/ra-core/src/controller/button/useBulkDeleteController.d.ts +14 -0
- package/dist/ra-core/src/controller/button/useBulkDeleteController.js +66 -0
- package/dist/ra-core/src/controller/create/index.d.ts +6 -0
- package/dist/ra-core/src/controller/create/index.js +6 -0
- package/dist/ra-core/src/controller/create/useCreateController.d.ts +50 -0
- package/dist/ra-core/src/controller/create/useCreateController.js +149 -0
- package/dist/ra-core/src/controller/edit/index.d.ts +6 -0
- package/dist/ra-core/src/controller/edit/index.js +6 -0
- package/dist/ra-core/src/controller/edit/useEditController.d.ts +72 -0
- package/dist/ra-core/src/controller/edit/useEditController.js +206 -0
- package/dist/ra-core/src/controller/field/index.d.ts +12 -0
- package/dist/ra-core/src/controller/field/index.js +12 -0
- package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.d.ts +1 -0
- package/dist/ra-core/src/controller/field/sanitizeFieldRestProps.js +1 -0
- package/dist/ra-core/src/controller/field/types.d.ts +28 -0
- package/dist/ra-core/src/controller/field/types.js +1 -0
- package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.d.ts +39 -0
- package/dist/ra-core/src/controller/field/useReferenceArrayFieldController.js +82 -0
- package/dist/ra-core/src/controller/field/useReferenceFieldController.d.ts +14 -0
- package/dist/ra-core/src/controller/field/useReferenceFieldController.js +31 -0
- package/dist/ra-core/src/controller/field/useReferenceManyFieldController.d.ts +49 -0
- package/dist/ra-core/src/controller/field/useReferenceManyFieldController.js +264 -0
- package/dist/ra-core/src/controller/index.d.ts +17 -0
- package/dist/ra-core/src/controller/index.js +16 -0
- package/dist/ra-core/src/controller/input/ArrayInputContext.d.ts +9 -0
- package/dist/ra-core/src/controller/input/ArrayInputContext.js +8 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.d.ts +15 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorContext.js +8 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.d.ts +13 -0
- package/dist/ra-core/src/controller/input/SimpleFormIteratorItemContext.js +8 -0
- package/dist/ra-core/src/controller/input/index.d.ts +17 -0
- package/dist/ra-core/src/controller/input/index.js +17 -0
- package/dist/ra-core/src/controller/input/referenceDataStatus.d.ts +32 -0
- package/dist/ra-core/src/controller/input/referenceDataStatus.js +74 -0
- package/dist/ra-core/src/controller/input/sanitizeInputRestProps.d.ts +1 -0
- package/dist/ra-core/src/controller/input/sanitizeInputRestProps.js +1 -0
- package/dist/ra-core/src/controller/input/types.d.ts +3 -0
- package/dist/ra-core/src/controller/input/types.js +1 -0
- package/dist/ra-core/src/controller/input/useArrayInput.d.ts +8 -0
- package/dist/ra-core/src/controller/input/useArrayInput.js +29 -0
- package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.d.ts +3 -0
- package/dist/ra-core/src/controller/input/useGetArrayInputNewItemDefaults.js +37 -0
- package/dist/ra-core/src/controller/input/useReferenceArrayInputController.d.ts +48 -0
- package/dist/ra-core/src/controller/input/useReferenceArrayInputController.js +137 -0
- package/dist/ra-core/src/controller/input/useReferenceInputController.d.ts +54 -0
- package/dist/ra-core/src/controller/input/useReferenceInputController.js +208 -0
- package/dist/ra-core/src/controller/input/useReferenceParams.d.ts +106 -0
- package/dist/ra-core/src/controller/input/useReferenceParams.js +226 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIterator.d.ts +7 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIterator.js +15 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.d.ts +7 -0
- package/dist/ra-core/src/controller/input/useSimpleFormIteratorItem.js +15 -0
- package/dist/ra-core/src/controller/list/InfinitePaginationContext.d.ts +25 -0
- package/dist/ra-core/src/controller/list/InfinitePaginationContext.js +32 -0
- package/dist/ra-core/src/controller/list/index.d.ts +30 -0
- package/dist/ra-core/src/controller/list/index.js +30 -0
- package/dist/ra-core/src/controller/list/queryReducer.d.ts +45 -0
- package/dist/ra-core/src/controller/list/queryReducer.js +85 -0
- package/dist/ra-core/src/controller/list/useFilterContext.d.ts +2 -0
- package/dist/ra-core/src/controller/list/useFilterContext.js +5 -0
- package/dist/ra-core/src/controller/list/useInfiniteListController.d.ts +44 -0
- package/dist/ra-core/src/controller/list/useInfiniteListController.js +175 -0
- package/dist/ra-core/src/controller/list/useInfinitePaginationContext.d.ts +16 -0
- package/dist/ra-core/src/controller/list/useInfinitePaginationContext.js +17 -0
- package/dist/ra-core/src/controller/list/useList.d.ts +55 -0
- package/dist/ra-core/src/controller/list/useList.js +223 -0
- package/dist/ra-core/src/controller/list/useListContext.d.ts +59 -0
- package/dist/ra-core/src/controller/list/useListContext.js +65 -0
- package/dist/ra-core/src/controller/list/useListContextWithProps.d.ts +44 -0
- package/dist/ra-core/src/controller/list/useListContextWithProps.js +84 -0
- package/dist/ra-core/src/controller/list/useListController.d.ts +296 -0
- package/dist/ra-core/src/controller/list/useListController.js +234 -0
- package/dist/ra-core/src/controller/list/useListFilterContext.d.ts +11 -0
- package/dist/ra-core/src/controller/list/useListFilterContext.js +18 -0
- package/dist/ra-core/src/controller/list/useListPaginationContext.d.ts +12 -0
- package/dist/ra-core/src/controller/list/useListPaginationContext.js +19 -0
- package/dist/ra-core/src/controller/list/useListParams.d.ts +116 -0
- package/dist/ra-core/src/controller/list/useListParams.js +281 -0
- package/dist/ra-core/src/controller/list/useListSortContext.d.ts +12 -0
- package/dist/ra-core/src/controller/list/useListSortContext.js +19 -0
- package/dist/ra-core/src/controller/list/useRecordSelection.d.ts +32 -0
- package/dist/ra-core/src/controller/list/useRecordSelection.js +93 -0
- package/dist/ra-core/src/controller/list/useSavedQueries.d.ts +14 -0
- package/dist/ra-core/src/controller/list/useSavedQueries.js +29 -0
- package/dist/ra-core/src/controller/list/useUnselect.d.ts +10 -0
- package/dist/ra-core/src/controller/list/useUnselect.js +18 -0
- package/dist/ra-core/src/controller/list/useUnselectAll.d.ts +9 -0
- package/dist/ra-core/src/controller/list/useUnselectAll.js +18 -0
- package/dist/ra-core/src/controller/record/index.d.ts +5 -0
- package/dist/ra-core/src/controller/record/index.js +5 -0
- package/dist/ra-core/src/controller/record/useRecordContext.d.ts +34 -0
- package/dist/ra-core/src/controller/record/useRecordContext.js +36 -0
- package/dist/ra-core/src/controller/saveContext/SaveContext.d.ts +20 -0
- package/dist/ra-core/src/controller/saveContext/SaveContext.js +2 -0
- package/dist/ra-core/src/controller/saveContext/index.d.ts +6 -0
- package/dist/ra-core/src/controller/saveContext/index.js +6 -0
- package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.d.ts +39 -0
- package/dist/ra-core/src/controller/saveContext/useMutationMiddlewares.js +79 -0
- package/dist/ra-core/src/controller/saveContext/usePickSaveContext.d.ts +5 -0
- package/dist/ra-core/src/controller/saveContext/usePickSaveContext.js +25 -0
- package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.d.ts +6 -0
- package/dist/ra-core/src/controller/saveContext/useRegisterMutationMiddleware.js +18 -0
- package/dist/ra-core/src/controller/saveContext/useSaveContext.d.ts +14 -0
- package/dist/ra-core/src/controller/saveContext/useSaveContext.js +17 -0
- package/dist/ra-core/src/controller/show/index.d.ts +6 -0
- package/dist/ra-core/src/controller/show/index.js +6 -0
- package/dist/ra-core/src/controller/show/useShowController.d.ts +75 -0
- package/dist/ra-core/src/controller/show/useShowController.js +110 -0
- package/dist/ra-core/src/controller/useFilterState.d.ts +46 -0
- package/dist/ra-core/src/controller/useFilterState.js +70 -0
- package/dist/ra-core/src/controller/usePaginationState.d.ts +33 -0
- package/dist/ra-core/src/controller/usePaginationState.js +45 -0
- package/dist/ra-core/src/controller/usePrevNextController.d.ts +127 -0
- package/dist/ra-core/src/controller/usePrevNextController.js +215 -0
- package/dist/ra-core/src/controller/useReference.d.ts +49 -0
- package/dist/ra-core/src/controller/useReference.js +42 -0
- package/dist/ra-core/src/controller/useSortState.d.ts +61 -0
- package/dist/ra-core/src/controller/useSortState.js +96 -0
- package/dist/ra-core/src/core/DefaultTitleContext.d.ts +15 -0
- package/dist/ra-core/src/core/DefaultTitleContext.js +15 -0
- package/dist/ra-core/src/core/HasDashboardContext.d.ts +21 -0
- package/dist/ra-core/src/core/HasDashboardContext.js +22 -0
- package/dist/ra-core/src/core/ResourceContext.d.ts +19 -0
- package/dist/ra-core/src/core/ResourceContext.js +19 -0
- package/dist/ra-core/src/core/UserMenuContext.d.ts +34 -0
- package/dist/ra-core/src/core/UserMenuContext.js +28 -0
- package/dist/ra-core/src/core/index.d.ts +27 -0
- package/dist/ra-core/src/core/index.js +27 -0
- package/dist/ra-core/src/core/useGetRecordRepresentation.d.ts +13 -0
- package/dist/ra-core/src/core/useGetRecordRepresentation.js +44 -0
- package/dist/ra-core/src/core/useGetResourceLabel.d.ts +22 -0
- package/dist/ra-core/src/core/useGetResourceLabel.js +42 -0
- package/dist/ra-core/src/core/useIsOffline.d.ts +7 -0
- package/dist/ra-core/src/core/useIsOffline.js +18 -0
- package/dist/ra-core/src/core/useResourceContext.d.ts +36 -0
- package/dist/ra-core/src/core/useResourceContext.js +38 -0
- package/dist/ra-core/src/core/useResourceDefinition.d.ts +31 -0
- package/dist/ra-core/src/core/useResourceDefinition.js +48 -0
- package/dist/ra-core/src/core/useResourceDefinitionContext.d.ts +1 -0
- package/dist/ra-core/src/core/useResourceDefinitionContext.js +3 -0
- package/dist/ra-core/src/core/useResourceDefinitions.d.ts +21 -0
- package/dist/ra-core/src/core/useResourceDefinitions.js +20 -0
- package/dist/ra-core/src/core/useUserMenu.d.ts +28 -0
- package/dist/ra-core/src/core/useUserMenu.js +30 -0
- package/dist/ra-core/src/core/useWrappedSource.d.ts +11 -0
- package/dist/ra-core/src/core/useWrappedSource.js +15 -0
- package/dist/ra-core/src/dataProvider/DataProviderContext.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/DataProviderContext.js +4 -0
- package/dist/ra-core/src/dataProvider/HttpError.d.ts +6 -0
- package/dist/ra-core/src/dataProvider/HttpError.js +19 -0
- package/dist/ra-core/src/dataProvider/combineDataProviders.d.ts +21 -0
- package/dist/ra-core/src/dataProvider/combineDataProviders.js +32 -0
- package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.d.ts +12 -0
- package/dist/ra-core/src/dataProvider/convertLegacyDataProvider.js +40 -0
- package/dist/ra-core/src/dataProvider/dataFetchActions.d.ts +15 -0
- package/dist/ra-core/src/dataProvider/dataFetchActions.js +49 -0
- package/dist/ra-core/src/dataProvider/defaultDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/defaultDataProvider.js +12 -0
- package/dist/ra-core/src/dataProvider/fetch.d.ts +32 -0
- package/dist/ra-core/src/dataProvider/fetch.js +78 -0
- package/dist/ra-core/src/dataProvider/index.d.ts +34 -0
- package/dist/ra-core/src/dataProvider/index.js +33 -0
- package/dist/ra-core/src/dataProvider/populateQueryCache.d.ts +22 -0
- package/dist/ra-core/src/dataProvider/populateQueryCache.js +30 -0
- package/dist/ra-core/src/dataProvider/testDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/testDataProvider.js +41 -0
- package/dist/ra-core/src/dataProvider/undo/index.d.ts +6 -0
- package/dist/ra-core/src/dataProvider/undo/index.js +6 -0
- package/dist/ra-core/src/dataProvider/undo/types.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/undo/types.js +1 -0
- package/dist/ra-core/src/dataProvider/undoableEventEmitter.d.ts +3 -0
- package/dist/ra-core/src/dataProvider/undoableEventEmitter.js +2 -0
- package/dist/ra-core/src/dataProvider/useCreate.d.ts +89 -0
- package/dist/ra-core/src/dataProvider/useCreate.js +155 -0
- package/dist/ra-core/src/dataProvider/useDataProvider.d.ts +2 -0
- package/dist/ra-core/src/dataProvider/useDataProvider.js +140 -0
- package/dist/ra-core/src/dataProvider/useDelete.d.ts +83 -0
- package/dist/ra-core/src/dataProvider/useDelete.js +171 -0
- package/dist/ra-core/src/dataProvider/useDeleteMany.d.ts +81 -0
- package/dist/ra-core/src/dataProvider/useDeleteMany.js +193 -0
- package/dist/ra-core/src/dataProvider/useGetList.d.ts +58 -0
- package/dist/ra-core/src/dataProvider/useGetList.js +131 -0
- package/dist/ra-core/src/dataProvider/useGetMany.d.ts +49 -0
- package/dist/ra-core/src/dataProvider/useGetMany.js +143 -0
- package/dist/ra-core/src/dataProvider/useGetManyAggregate.d.ts +62 -0
- package/dist/ra-core/src/dataProvider/useGetManyAggregate.js +295 -0
- package/dist/ra-core/src/dataProvider/useGetManyReference.d.ts +62 -0
- package/dist/ra-core/src/dataProvider/useGetManyReference.js +117 -0
- package/dist/ra-core/src/dataProvider/useGetOne.d.ts +48 -0
- package/dist/ra-core/src/dataProvider/useGetOne.js +94 -0
- package/dist/ra-core/src/dataProvider/useGetRecordId.d.ts +14 -0
- package/dist/ra-core/src/dataProvider/useGetRecordId.js +22 -0
- package/dist/ra-core/src/dataProvider/useInfiniteGetList.d.ts +64 -0
- package/dist/ra-core/src/dataProvider/useInfiniteGetList.js +177 -0
- package/dist/ra-core/src/dataProvider/useIsDataLoaded.d.ts +13 -0
- package/dist/ra-core/src/dataProvider/useIsDataLoaded.js +35 -0
- package/dist/ra-core/src/dataProvider/useLoading.d.ts +12 -0
- package/dist/ra-core/src/dataProvider/useLoading.js +41 -0
- package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.d.ts +51 -0
- package/dist/ra-core/src/dataProvider/useMutationWithMutationMode.js +238 -0
- package/dist/ra-core/src/dataProvider/useRefresh.d.ts +14 -0
- package/dist/ra-core/src/dataProvider/useRefresh.js +21 -0
- package/dist/ra-core/src/dataProvider/useUpdate.d.ts +89 -0
- package/dist/ra-core/src/dataProvider/useUpdate.js +183 -0
- package/dist/ra-core/src/dataProvider/useUpdateMany.d.ts +81 -0
- package/dist/ra-core/src/dataProvider/useUpdateMany.js +171 -0
- package/dist/ra-core/src/dataProvider/validateResponseFormat.d.ts +5 -0
- package/dist/ra-core/src/dataProvider/validateResponseFormat.js +35 -0
- package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.d.ts +162 -0
- package/dist/ra-core/src/dataProvider/withLifecycleCallbacks.js +377 -0
- package/dist/ra-core/src/dataTable/DataTableCallbacksContext.d.ts +18 -0
- package/dist/ra-core/src/dataTable/DataTableCallbacksContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.d.ts +2 -0
- package/dist/ra-core/src/dataTable/DataTableColumnFilterContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableColumnRankContext.d.ts +2 -0
- package/dist/ra-core/src/dataTable/DataTableColumnRankContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableConfigContext.d.ts +22 -0
- package/dist/ra-core/src/dataTable/DataTableConfigContext.js +7 -0
- package/dist/ra-core/src/dataTable/DataTableDataContext.d.ts +4 -0
- package/dist/ra-core/src/dataTable/DataTableDataContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableRenderContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableRenderContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableSelectedIdsContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableSortContext.d.ts +3 -0
- package/dist/ra-core/src/dataTable/DataTableSortContext.js +3 -0
- package/dist/ra-core/src/dataTable/DataTableStoreContext.d.ts +8 -0
- package/dist/ra-core/src/dataTable/DataTableStoreContext.js +6 -0
- package/dist/ra-core/src/dataTable/index.d.ts +11 -0
- package/dist/ra-core/src/dataTable/index.js +11 -0
- package/dist/ra-core/src/dataTable/types.d.ts +2 -0
- package/dist/ra-core/src/dataTable/types.js +1 -0
- package/dist/ra-core/src/export/ExporterContext.d.ts +2 -0
- package/dist/ra-core/src/export/ExporterContext.js +4 -0
- package/dist/ra-core/src/export/defaultExporter.d.ts +2 -0
- package/dist/ra-core/src/export/defaultExporter.js +3 -0
- package/dist/ra-core/src/export/downloadCSV.d.ts +1 -0
- package/dist/ra-core/src/export/downloadCSV.js +17 -0
- package/dist/ra-core/src/export/fetchRelatedRecords.d.ts +14 -0
- package/dist/ra-core/src/export/fetchRelatedRecords.js +19 -0
- package/dist/ra-core/src/export/getRelatedIds.d.ts +24 -0
- package/dist/ra-core/src/export/getRelatedIds.js +26 -0
- package/dist/ra-core/src/export/index.d.ts +5 -0
- package/dist/ra-core/src/export/index.js +5 -0
- package/dist/ra-core/src/export/useBulkExport.d.ts +11 -0
- package/dist/ra-core/src/export/useBulkExport.js +30 -0
- package/dist/ra-core/src/form/WarnWhenUnsavedChanges.d.ts +5 -0
- package/dist/ra-core/src/form/WarnWhenUnsavedChanges.js +5 -0
- package/dist/ra-core/src/form/choices/ChoicesContext.d.ts +65 -0
- package/dist/ra-core/src/form/choices/ChoicesContext.js +7 -0
- package/dist/ra-core/src/form/choices/index.d.ts +4 -0
- package/dist/ra-core/src/form/choices/index.js +4 -0
- package/dist/ra-core/src/form/choices/useChoicesContext.d.ts +5 -0
- package/dist/ra-core/src/form/choices/useChoicesContext.js +62 -0
- package/dist/ra-core/src/form/getFormInitialValues.d.ts +8 -0
- package/dist/ra-core/src/form/getFormInitialValues.js +14 -0
- package/dist/ra-core/src/form/groups/FormGroupContext.d.ts +9 -0
- package/dist/ra-core/src/form/groups/FormGroupContext.js +9 -0
- package/dist/ra-core/src/form/groups/index.d.ts +6 -0
- package/dist/ra-core/src/form/groups/index.js +6 -0
- package/dist/ra-core/src/form/groups/useFormGroup.d.ts +67 -0
- package/dist/ra-core/src/form/groups/useFormGroup.js +146 -0
- package/dist/ra-core/src/form/groups/useFormGroupContext.d.ts +4 -0
- package/dist/ra-core/src/form/groups/useFormGroupContext.js +9 -0
- package/dist/ra-core/src/form/groups/useFormGroups.d.ts +4 -0
- package/dist/ra-core/src/form/groups/useFormGroups.js +9 -0
- package/dist/ra-core/src/form/index.d.ts +14 -0
- package/dist/ra-core/src/form/index.js +14 -0
- package/dist/ra-core/src/form/sanitizeEmptyValues.d.ts +7 -0
- package/dist/ra-core/src/form/sanitizeEmptyValues.js +26 -0
- package/dist/ra-core/src/form/useApplyInputDefaultValues.d.ts +19 -0
- package/dist/ra-core/src/form/useApplyInputDefaultValues.js +71 -0
- package/dist/ra-core/src/form/useAugmentedForm.d.ts +32 -0
- package/dist/ra-core/src/form/useAugmentedForm.js +101 -0
- package/dist/ra-core/src/form/useFormIsDirty.d.ts +4 -0
- package/dist/ra-core/src/form/useFormIsDirty.js +39 -0
- package/dist/ra-core/src/form/useInput.d.ts +33 -0
- package/dist/ra-core/src/form/useInput.js +100 -0
- package/dist/ra-core/src/form/useRecordFromLocation.d.ts +22 -0
- package/dist/ra-core/src/form/useRecordFromLocation.js +59 -0
- package/dist/ra-core/src/form/useSuggestions.d.ts +43 -0
- package/dist/ra-core/src/form/useSuggestions.js +186 -0
- package/dist/ra-core/src/form/validation/getSimpleValidationResolver.d.ts +31 -0
- package/dist/ra-core/src/form/validation/getSimpleValidationResolver.js +87 -0
- package/dist/ra-core/src/form/validation/index.d.ts +7 -0
- package/dist/ra-core/src/form/validation/index.js +7 -0
- package/dist/ra-core/src/form/validation/setSubmissionErrors.d.ts +21 -0
- package/dist/ra-core/src/form/validation/setSubmissionErrors.js +34 -0
- package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.d.ts +26 -0
- package/dist/ra-core/src/form/validation/useGetValidationErrorMessage.js +35 -0
- package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.d.ts +9 -0
- package/dist/ra-core/src/form/validation/useNotifyIsFormInvalid.js +30 -0
- package/dist/ra-core/src/form/validation/useUnique.d.ts +57 -0
- package/dist/ra-core/src/form/validation/useUnique.js +107 -0
- package/dist/ra-core/src/form/validation/validate.d.ts +168 -0
- package/dist/ra-core/src/form/validation/validate.js +218 -0
- package/dist/ra-core/src/i18n/I18nContext.d.ts +3 -0
- package/dist/ra-core/src/i18n/I18nContext.js +11 -0
- package/dist/ra-core/src/i18n/TranslatableContext.d.ts +16 -0
- package/dist/ra-core/src/i18n/TranslatableContext.js +2 -0
- package/dist/ra-core/src/i18n/TranslationMessages.d.ts +221 -0
- package/dist/ra-core/src/i18n/TranslationMessages.js +1 -0
- package/dist/ra-core/src/i18n/TranslationUtils.d.ts +60 -0
- package/dist/ra-core/src/i18n/TranslationUtils.js +70 -0
- package/dist/ra-core/src/i18n/index.d.ts +20 -0
- package/dist/ra-core/src/i18n/index.js +20 -0
- package/dist/ra-core/src/i18n/substituteTokens.d.ts +8 -0
- package/dist/ra-core/src/i18n/substituteTokens.js +18 -0
- package/dist/ra-core/src/i18n/useI18nProvider.d.ts +12 -0
- package/dist/ra-core/src/i18n/useI18nProvider.js +14 -0
- package/dist/ra-core/src/i18n/useLocales.d.ts +31 -0
- package/dist/ra-core/src/i18n/useLocales.js +28 -0
- package/dist/ra-core/src/i18n/useResourceTranslation.d.ts +8 -0
- package/dist/ra-core/src/i18n/useResourceTranslation.js +18 -0
- package/dist/ra-core/src/i18n/useTranslatable.d.ts +29 -0
- package/dist/ra-core/src/i18n/useTranslatable.js +98 -0
- package/dist/ra-core/src/i18n/useTranslatableContext.d.ts +31 -0
- package/dist/ra-core/src/i18n/useTranslatableContext.js +38 -0
- package/dist/ra-core/src/i18n/useTranslate.d.ts +21 -0
- package/dist/ra-core/src/i18n/useTranslate.js +29 -0
- package/dist/ra-core/src/i18n/useTranslateLabel.d.ts +6 -0
- package/dist/ra-core/src/i18n/useTranslateLabel.js +26 -0
- package/dist/ra-core/src/index.d.ts +16 -0
- package/dist/ra-core/src/index.js +16 -0
- package/dist/ra-core/src/inference/InferredElement.d.ts +12 -0
- package/dist/ra-core/src/inference/InferredElement.js +40 -0
- package/dist/ra-core/src/inference/assertions.d.ts +26 -0
- package/dist/ra-core/src/inference/assertions.js +38 -0
- package/dist/ra-core/src/inference/getElementsFromRecords.d.ts +35 -0
- package/dist/ra-core/src/inference/getElementsFromRecords.js +39 -0
- package/dist/ra-core/src/inference/getValuesFromRecords.d.ts +28 -0
- package/dist/ra-core/src/inference/getValuesFromRecords.js +40 -0
- package/dist/ra-core/src/inference/index.d.ts +6 -0
- package/dist/ra-core/src/inference/index.js +6 -0
- package/dist/ra-core/src/inference/inferTypeFromValues.d.ts +21 -0
- package/dist/ra-core/src/inference/inferTypeFromValues.js +141 -0
- package/dist/ra-core/src/inference/types.d.ts +9 -0
- package/dist/ra-core/src/inference/types.js +1 -0
- package/dist/ra-core/src/notification/CloseNotificationContext.d.ts +2 -0
- package/dist/ra-core/src/notification/CloseNotificationContext.js +2 -0
- package/dist/ra-core/src/notification/NotificationContext.d.ts +37 -0
- package/dist/ra-core/src/notification/NotificationContext.js +35 -0
- package/dist/ra-core/src/notification/index.d.ts +9 -0
- package/dist/ra-core/src/notification/index.js +9 -0
- package/dist/ra-core/src/notification/types.d.ts +14 -0
- package/dist/ra-core/src/notification/types.js +1 -0
- package/dist/ra-core/src/notification/useCloseNotification.d.ts +1 -0
- package/dist/ra-core/src/notification/useCloseNotification.js +9 -0
- package/dist/ra-core/src/notification/useNotificationContext.d.ts +1 -0
- package/dist/ra-core/src/notification/useNotificationContext.js +3 -0
- package/dist/ra-core/src/notification/useNotify.d.ts +20 -0
- package/dist/ra-core/src/notification/useNotify.js +28 -0
- package/dist/ra-core/src/preferences/index.d.ts +7 -0
- package/dist/ra-core/src/preferences/index.js +7 -0
- package/dist/ra-core/src/preferences/usePreference.d.ts +18 -0
- package/dist/ra-core/src/preferences/usePreference.js +10 -0
- package/dist/ra-core/src/preferences/usePreferenceInput.d.ts +22 -0
- package/dist/ra-core/src/preferences/usePreferenceInput.js +43 -0
- package/dist/ra-core/src/preferences/usePreferencesEditor.d.ts +2 -0
- package/dist/ra-core/src/preferences/usePreferencesEditor.js +9 -0
- package/dist/ra-core/src/preferences/useSetInspectorTitle.d.ts +7 -0
- package/dist/ra-core/src/preferences/useSetInspectorTitle.js +19 -0
- package/dist/ra-core/src/routing/BasenameContext.d.ts +1 -0
- package/dist/ra-core/src/routing/BasenameContext.js +2 -0
- package/dist/ra-core/src/routing/RouterProvider.d.ts +163 -0
- package/dist/ra-core/src/routing/RouterProvider.js +1 -0
- package/dist/ra-core/src/routing/index.d.ts +28 -0
- package/dist/ra-core/src/routing/index.js +28 -0
- package/dist/ra-core/src/routing/types.d.ts +3 -0
- package/dist/ra-core/src/routing/types.js +1 -0
- package/dist/ra-core/src/routing/useBasename.d.ts +21 -0
- package/dist/ra-core/src/routing/useBasename.js +23 -0
- package/dist/ra-core/src/routing/useBlocker.d.ts +14 -0
- package/dist/ra-core/src/routing/useBlocker.js +17 -0
- package/dist/ra-core/src/routing/useCanBlock.d.ts +7 -0
- package/dist/ra-core/src/routing/useCanBlock.js +11 -0
- package/dist/ra-core/src/routing/useCreatePath.d.ts +42 -0
- package/dist/ra-core/src/routing/useCreatePath.js +69 -0
- package/dist/ra-core/src/routing/useGetPathForRecord.d.ts +42 -0
- package/dist/ra-core/src/routing/useGetPathForRecord.js +135 -0
- package/dist/ra-core/src/routing/useGetPathForRecordCallback.d.ts +6 -0
- package/dist/ra-core/src/routing/useGetPathForRecordCallback.js +82 -0
- package/dist/ra-core/src/routing/useInRouterContext.d.ts +11 -0
- package/dist/ra-core/src/routing/useInRouterContext.js +15 -0
- package/dist/ra-core/src/routing/useLocation.d.ts +10 -0
- package/dist/ra-core/src/routing/useLocation.js +13 -0
- package/dist/ra-core/src/routing/useMatch.d.ts +15 -0
- package/dist/ra-core/src/routing/useMatch.js +15 -0
- package/dist/ra-core/src/routing/useMatchPath.d.ts +17 -0
- package/dist/ra-core/src/routing/useMatchPath.js +17 -0
- package/dist/ra-core/src/routing/useNavigate.d.ts +12 -0
- package/dist/ra-core/src/routing/useNavigate.js +15 -0
- package/dist/ra-core/src/routing/useParams.d.ts +9 -0
- package/dist/ra-core/src/routing/useParams.js +13 -0
- package/dist/ra-core/src/routing/useRedirect.d.ts +30 -0
- package/dist/ra-core/src/routing/useRedirect.js +66 -0
- package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.d.ts +7 -0
- package/dist/ra-core/src/routing/useResetErrorBoundaryOnLocationChange.js +17 -0
- package/dist/ra-core/src/routing/useRestoreScrollPosition.d.ts +40 -0
- package/dist/ra-core/src/routing/useRestoreScrollPosition.js +70 -0
- package/dist/ra-core/src/routing/useSplatPathBase.d.ts +13 -0
- package/dist/ra-core/src/routing/useSplatPathBase.js +21 -0
- package/dist/ra-core/src/store/index.d.ts +11 -0
- package/dist/ra-core/src/store/index.js +11 -0
- package/dist/ra-core/src/store/localStorageStore.d.ts +27 -0
- package/dist/ra-core/src/store/localStorageStore.js +198 -0
- package/dist/ra-core/src/store/types.d.ts +11 -0
- package/dist/ra-core/src/store/types.js +1 -0
- package/dist/ra-core/src/store/useRemoveFromStore.d.ts +17 -0
- package/dist/ra-core/src/store/useRemoveFromStore.js +29 -0
- package/dist/ra-core/src/store/useRemoveItemsFromStore.d.ts +17 -0
- package/dist/ra-core/src/store/useRemoveItemsFromStore.js +29 -0
- package/dist/ra-core/src/store/useResetStore.d.ts +17 -0
- package/dist/ra-core/src/store/useResetStore.js +21 -0
- package/dist/ra-core/src/store/useStore.d.ts +48 -0
- package/dist/ra-core/src/store/useStore.js +32 -0
- package/dist/ra-core/src/store/useStoreContext.d.ts +4 -0
- package/dist/ra-core/src/store/useStoreContext.js +6 -0
- package/dist/ra-core/src/test-ui/defaultI18nProvider.d.ts +2 -0
- package/dist/ra-core/src/test-ui/defaultI18nProvider.js +10 -0
- package/dist/ra-core/src/test-ui/index.d.ts +21 -0
- package/dist/ra-core/src/test-ui/index.js +21 -0
- package/dist/ra-core/src/types.d.ts +284 -0
- package/dist/ra-core/src/types.js +5 -0
- package/dist/ra-core/src/util/asyncDebounce.d.ts +7 -0
- package/dist/ra-core/src/util/asyncDebounce.js +29 -0
- package/dist/ra-core/src/util/escapePath.d.ts +11 -0
- package/dist/ra-core/src/util/escapePath.js +10 -0
- package/dist/ra-core/src/util/genericMemo.d.ts +5 -0
- package/dist/ra-core/src/util/genericMemo.js +14 -0
- package/dist/ra-core/src/util/getFieldLabelTranslationArgs.d.ts +22 -0
- package/dist/ra-core/src/util/getFieldLabelTranslationArgs.js +73 -0
- package/dist/ra-core/src/util/getMutationMode.d.ts +1 -0
- package/dist/ra-core/src/util/getMutationMode.js +13 -0
- package/dist/ra-core/src/util/hooks.d.ts +15 -0
- package/dist/ra-core/src/util/hooks.js +73 -0
- package/dist/ra-core/src/util/index.d.ts +20 -0
- package/dist/ra-core/src/util/index.js +19 -0
- package/dist/ra-core/src/util/mergeRefs.d.ts +2 -0
- package/dist/ra-core/src/util/mergeRefs.js +13 -0
- package/dist/ra-core/src/util/removeEmpty.d.ts +2 -0
- package/dist/ra-core/src/util/removeEmpty.js +16 -0
- package/dist/ra-core/src/util/removeKey.d.ts +2 -0
- package/dist/ra-core/src/util/removeKey.js +22 -0
- package/dist/ra-core/src/util/shallowEqual.d.ts +1 -0
- package/dist/ra-core/src/util/shallowEqual.js +29 -0
- package/dist/ra-core/src/util/useCheckForApplicationUpdate.d.ts +21 -0
- package/dist/ra-core/src/util/useCheckForApplicationUpdate.js +84 -0
- package/dist/ra-core/src/util/useDebouncedEvent.d.ts +8 -0
- package/dist/ra-core/src/util/useDebouncedEvent.js +28 -0
- package/dist/ra-core/src/util/useEvent.d.ts +7 -0
- package/dist/ra-core/src/util/useEvent.js +19 -0
- package/dist/ra-core/src/util/useFieldValue.d.ts +21 -0
- package/dist/ra-core/src/util/useFieldValue.js +27 -0
- package/dist/ra-core/src/util/useWhyDidYouUpdate.d.ts +12 -0
- package/dist/ra-core/src/util/useWhyDidYouUpdate.js +42 -0
- package/dist/ra-core/src/util/warning.d.ts +2 -0
- package/dist/ra-core/src/util/warning.js +5 -0
- package/dist/strato-faker-ecommerce/src/dataProvider.d.ts +2 -0
- package/dist/strato-faker-ecommerce/src/dataProvider.js +6 -0
- package/dist/strato-faker-ecommerce/src/generate.d.ts +8 -0
- package/dist/strato-faker-ecommerce/src/generate.js +148 -0
- package/dist/strato-faker-ecommerce/src/index.d.ts +3 -0
- package/dist/strato-faker-ecommerce/src/index.js +3 -0
- package/dist/strato-faker-ecommerce/src/types.d.ts +69 -0
- package/dist/strato-faker-ecommerce/src/types.js +1 -0
- package/dist/types.d.ts +1 -1
- package/package.json +6 -5
- package/src/dataProvider.ts +3 -3
- package/src/generate.test.ts +12 -12
- package/src/generate.ts +21 -14
- package/src/types.ts +1 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { isValidElement, useCallback, useEffect, useMemo } from 'react';
|
|
2
|
+
import { useAuthenticated, useRequireAccess } from '../../auth';
|
|
3
|
+
import { useTranslate } from '../../i18n';
|
|
4
|
+
import { useNotify } from '../../notification';
|
|
5
|
+
import { useDataProvider, useInfiniteGetList } from '../../dataProvider';
|
|
6
|
+
import { defaultExporter } from '../../export';
|
|
7
|
+
import { useResourceContext, useGetResourceLabel } from '../../core';
|
|
8
|
+
import { useRecordSelection } from './useRecordSelection';
|
|
9
|
+
import { useListParams } from './useListParams';
|
|
10
|
+
import { useSelectAll } from './useSelectAll';
|
|
11
|
+
import { useEvent } from '../../util';
|
|
12
|
+
/**
|
|
13
|
+
* Prepare data for the InfiniteList view
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} props The props passed to the InfiniteList component.
|
|
16
|
+
*
|
|
17
|
+
* @return {Object} controllerProps Fetched and computed data for the List view
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
*
|
|
21
|
+
* import { useInfiniteListController } from 'react-admin';
|
|
22
|
+
* import ListView from './ListView';
|
|
23
|
+
*
|
|
24
|
+
* const MyList = props => {
|
|
25
|
+
* const controllerProps = useInfiniteListController(props);
|
|
26
|
+
* return <ListView {...controllerProps} {...props} />;
|
|
27
|
+
* }
|
|
28
|
+
*/
|
|
29
|
+
export const useInfiniteListController = (props = {}) => {
|
|
30
|
+
const { debounce = 500, disableAuthentication = false, disableSyncWithLocation = false, exporter = defaultExporter, filter, filterDefaultValues, perPage = 10, queryOptions, sort, storeKey, } = props;
|
|
31
|
+
const resource = useResourceContext(props);
|
|
32
|
+
const { meta, ...otherQueryOptions } = queryOptions ?? {};
|
|
33
|
+
if (!resource) {
|
|
34
|
+
throw new Error(`<InfiniteList> was called outside of a ResourceContext and without a resource prop. You must set the resource prop.`);
|
|
35
|
+
}
|
|
36
|
+
if (filter && isValidElement(filter)) {
|
|
37
|
+
throw new Error('<InfiniteList> received a React element as `filter` props. If you intended to set the list filter elements, use the `filters` (with an s) prop instead. The `filter` prop is internal and should not be set by the developer.');
|
|
38
|
+
}
|
|
39
|
+
const { isPending: isPendingAuthenticated } = useAuthenticated({
|
|
40
|
+
enabled: !disableAuthentication,
|
|
41
|
+
});
|
|
42
|
+
const { isPending: isPendingCanAccess } = useRequireAccess({
|
|
43
|
+
action: 'list',
|
|
44
|
+
resource,
|
|
45
|
+
enabled: !disableAuthentication && !isPendingAuthenticated,
|
|
46
|
+
});
|
|
47
|
+
const translate = useTranslate();
|
|
48
|
+
const notify = useNotify();
|
|
49
|
+
const dataProvider = useDataProvider();
|
|
50
|
+
const [query, queryModifiers] = useListParams({
|
|
51
|
+
debounce,
|
|
52
|
+
disableSyncWithLocation,
|
|
53
|
+
filterDefaultValues,
|
|
54
|
+
perPage,
|
|
55
|
+
resource,
|
|
56
|
+
sort,
|
|
57
|
+
storeKey,
|
|
58
|
+
});
|
|
59
|
+
const [selectedIds, selectionModifiers] = useRecordSelection({ resource });
|
|
60
|
+
const onUnselectItems = useCallback((fromAllStoreKeys) => {
|
|
61
|
+
return selectionModifiers.unselect(selectedIds, fromAllStoreKeys);
|
|
62
|
+
}, [selectedIds, selectionModifiers]);
|
|
63
|
+
const { data, total, error, isLoading, isPaused, isPending, isPlaceholderData, isFetching, hasNextPage, hasPreviousPage, fetchNextPage, isFetchingNextPage, fetchPreviousPage, isFetchingPreviousPage, refetch, meta: responseMeta, } = useInfiniteGetList(resource, {
|
|
64
|
+
pagination: {
|
|
65
|
+
page: query.page,
|
|
66
|
+
perPage: query.perPage,
|
|
67
|
+
},
|
|
68
|
+
sort: { field: query.sort, order: query.order },
|
|
69
|
+
filter: { ...query.filter, ...filter },
|
|
70
|
+
meta,
|
|
71
|
+
}, {
|
|
72
|
+
enabled: (!isPendingAuthenticated && !isPendingCanAccess) ||
|
|
73
|
+
disableAuthentication,
|
|
74
|
+
placeholderData: previousData => previousData,
|
|
75
|
+
retry: false,
|
|
76
|
+
onError: error => notify(error?.message || "strato.notification.http_error', {
|
|
77
|
+
type: 'error',
|
|
78
|
+
messageArgs: {
|
|
79
|
+
_: error?.message,
|
|
80
|
+
},
|
|
81
|
+
}),
|
|
82
|
+
...otherQueryOptions,
|
|
83
|
+
});
|
|
84
|
+
const onSelectAll = useSelectAll({
|
|
85
|
+
resource,
|
|
86
|
+
sort: { field: query.sort, order: query.order },
|
|
87
|
+
filter: { ...query.filter, ...filter },
|
|
88
|
+
});
|
|
89
|
+
// change page if there is no data
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (query.page <= 0 ||
|
|
92
|
+
(!isFetching &&
|
|
93
|
+
query.page > 1 &&
|
|
94
|
+
(data == null || data?.pages.length === 0))) {
|
|
95
|
+
// Query for a page that doesn't exist, set page to 1
|
|
96
|
+
queryModifiers.setPage(1);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (total == null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const totalPages = Math.ceil(total / query.perPage) || 1;
|
|
103
|
+
if (!isFetching && query.page > totalPages) {
|
|
104
|
+
// Query for a page out of bounds, set page to the last existing page
|
|
105
|
+
// It occurs when deleting the last element of the last page
|
|
106
|
+
queryModifiers.setPage(totalPages);
|
|
107
|
+
}
|
|
108
|
+
}, [isFetching, query.page, query.perPage, data, queryModifiers, total]);
|
|
109
|
+
const currentSort = useMemo(() => ({
|
|
110
|
+
field: query.sort,
|
|
111
|
+
order: query.order,
|
|
112
|
+
}), [query.sort, query.order]);
|
|
113
|
+
const getResourceLabel = useGetResourceLabel();
|
|
114
|
+
const defaultTitle = translate(`resources.${resource}.page.list`, {
|
|
115
|
+
_: translate("strato.page.list', {
|
|
116
|
+
name: getResourceLabel(resource, 2),
|
|
117
|
+
}),
|
|
118
|
+
});
|
|
119
|
+
const unwrappedData = useMemo(() => data?.pages?.reduce((acc, page) => [...acc, ...page.data], []), [data]);
|
|
120
|
+
const getData = useEvent(async ({ maxResults, meta: metaOverride } = {}) => {
|
|
121
|
+
if (total === 0) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const limit = maxResults ?? (total != null ? total : DEFAULT_MAX_RESULTS);
|
|
125
|
+
const { data } = await dataProvider.getList(resource, {
|
|
126
|
+
sort: currentSort,
|
|
127
|
+
filter: filter
|
|
128
|
+
? { ...query.filterValues, ...filter }
|
|
129
|
+
: query.filterValues,
|
|
130
|
+
pagination: { page: 1, perPage: limit },
|
|
131
|
+
meta: metaOverride ?? meta,
|
|
132
|
+
});
|
|
133
|
+
return data;
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
sort: currentSort,
|
|
137
|
+
data: unwrappedData,
|
|
138
|
+
defaultTitle,
|
|
139
|
+
displayedFilters: query.displayedFilters,
|
|
140
|
+
error,
|
|
141
|
+
exporter,
|
|
142
|
+
filter,
|
|
143
|
+
filterValues: query.filterValues,
|
|
144
|
+
hideFilter: queryModifiers.hideFilter,
|
|
145
|
+
isFetching,
|
|
146
|
+
isLoading,
|
|
147
|
+
isPaused,
|
|
148
|
+
isPending,
|
|
149
|
+
isPlaceholderData,
|
|
150
|
+
onSelect: selectionModifiers.select,
|
|
151
|
+
onSelectAll,
|
|
152
|
+
onToggleItem: selectionModifiers.toggle,
|
|
153
|
+
onUnselectItems,
|
|
154
|
+
page: query.page,
|
|
155
|
+
perPage: query.perPage,
|
|
156
|
+
refetch,
|
|
157
|
+
resource,
|
|
158
|
+
selectedIds,
|
|
159
|
+
setFilters: queryModifiers.setFilters,
|
|
160
|
+
setPage: queryModifiers.setPage,
|
|
161
|
+
setPerPage: queryModifiers.setPerPage,
|
|
162
|
+
setSort: queryModifiers.setSort,
|
|
163
|
+
showFilter: queryModifiers.showFilter,
|
|
164
|
+
total: total,
|
|
165
|
+
hasNextPage,
|
|
166
|
+
hasPreviousPage,
|
|
167
|
+
fetchNextPage,
|
|
168
|
+
isFetchingNextPage,
|
|
169
|
+
fetchPreviousPage,
|
|
170
|
+
isFetchingPreviousPage,
|
|
171
|
+
meta: responseMeta,
|
|
172
|
+
getData,
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
const DEFAULT_MAX_RESULTS = 1000;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { InfinitePaginationContextValue } from './InfinitePaginationContext';
|
|
2
|
+
/**
|
|
3
|
+
* Hook to read the infinite pagination callbacks from the InfinitePaginationContext.
|
|
4
|
+
*
|
|
5
|
+
* Must be used within a <InfinitePaginationContext.Provider> (e.g. as a descendent of <InfiniteList>
|
|
6
|
+
* or <InfiniteListBase>).
|
|
7
|
+
*
|
|
8
|
+
* @typedef {Object} InfinitePaginationContextValue
|
|
9
|
+
* @prop {Function} fetchNextPage a callback to fetch the next page
|
|
10
|
+
* @prop {Function} fetchPreviousPage a callback to fetch the previous page
|
|
11
|
+
*
|
|
12
|
+
* @returns {InfinitePaginationContextValue} infinite pagination callbacks
|
|
13
|
+
*
|
|
14
|
+
* @see useInfiniteListController for how the callbacks are built
|
|
15
|
+
*/
|
|
16
|
+
export declare const useInfinitePaginationContext: () => InfinitePaginationContextValue;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { InfinitePaginationContext, } from './InfinitePaginationContext';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to read the infinite pagination callbacks from the InfinitePaginationContext.
|
|
5
|
+
*
|
|
6
|
+
* Must be used within a <InfinitePaginationContext.Provider> (e.g. as a descendent of <InfiniteList>
|
|
7
|
+
* or <InfiniteListBase>).
|
|
8
|
+
*
|
|
9
|
+
* @typedef {Object} InfinitePaginationContextValue
|
|
10
|
+
* @prop {Function} fetchNextPage a callback to fetch the next page
|
|
11
|
+
* @prop {Function} fetchPreviousPage a callback to fetch the previous page
|
|
12
|
+
*
|
|
13
|
+
* @returns {InfinitePaginationContextValue} infinite pagination callbacks
|
|
14
|
+
*
|
|
15
|
+
* @see useInfiniteListController for how the callbacks are built
|
|
16
|
+
*/
|
|
17
|
+
export const useInfinitePaginationContext = () => useContext(InfinitePaginationContext);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Exporter, FilterPayload, RaRecord, SortPayload } from '../../types';
|
|
2
|
+
import { ListControllerResult } from './useListController';
|
|
3
|
+
/**
|
|
4
|
+
* Handle filtering, sorting and pagination on local data.
|
|
5
|
+
*
|
|
6
|
+
* Returns the data and callbacks expected by <ListContext>.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const data = [
|
|
10
|
+
* { id: 1, name: 'Arnold' },
|
|
11
|
+
* { id: 2, name: 'Sylvester' },
|
|
12
|
+
* { id: 3, name: 'Jean-Claude' },
|
|
13
|
+
* ]
|
|
14
|
+
*
|
|
15
|
+
* const MyComponent = () => {
|
|
16
|
+
* const listContext = useList({ data });
|
|
17
|
+
* return (
|
|
18
|
+
* <ListContextProvider value={listContext}>
|
|
19
|
+
* <Datagrid>
|
|
20
|
+
* <TextField source="id" />
|
|
21
|
+
* <TextField source="name" />
|
|
22
|
+
* </Datagrid>
|
|
23
|
+
* </ListContextProvider>
|
|
24
|
+
* );
|
|
25
|
+
* };
|
|
26
|
+
*
|
|
27
|
+
* @param {UseListOptions} props
|
|
28
|
+
* @param {RaRecord[]} props.data An array of records
|
|
29
|
+
* @param {Boolean} props.isFetching: Optional. A boolean indicating whether the data is being loaded
|
|
30
|
+
* @param {Boolean} props.isLoading: Optional. A boolean indicating whether the data has been loaded at least once
|
|
31
|
+
* @param {Error | String} props.error: Optional. The error if any occurred while loading the data
|
|
32
|
+
* @param {Object} props.filter: Optional. An object containing the filters applied on the data
|
|
33
|
+
* @param {Number} props.page: Optional. The initial page index
|
|
34
|
+
* @param {Number} props.perPage: Optional. The initial page size
|
|
35
|
+
* @param {SortPayload} props.sort: Optional. The initial sort (field and order)
|
|
36
|
+
* @param {filterCallback} prop.filterCallback Optional. A function that allows you to make a custom filter
|
|
37
|
+
*/
|
|
38
|
+
export declare const useList: <RecordType extends RaRecord = any, ErrorType = Error>(props: UseListOptions<RecordType, ErrorType>) => UseListValue<RecordType, ErrorType>;
|
|
39
|
+
export interface UseListOptions<RecordType extends RaRecord = any, ErrorType = Error> {
|
|
40
|
+
data?: RecordType[];
|
|
41
|
+
error?: ErrorType | null;
|
|
42
|
+
filter?: FilterPayload;
|
|
43
|
+
isFetching?: boolean;
|
|
44
|
+
isLoading?: boolean;
|
|
45
|
+
isPaused?: boolean;
|
|
46
|
+
isPending?: boolean;
|
|
47
|
+
isPlaceholderData?: boolean;
|
|
48
|
+
page?: number;
|
|
49
|
+
perPage?: number;
|
|
50
|
+
sort?: SortPayload;
|
|
51
|
+
resource?: string;
|
|
52
|
+
filterCallback?: (record: RecordType) => boolean;
|
|
53
|
+
exporter?: Exporter<RecordType> | false;
|
|
54
|
+
}
|
|
55
|
+
export type UseListValue<RecordType extends RaRecord = any, ErrorType = Error> = ListControllerResult<RecordType, ErrorType>;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import get from 'lodash/get.js';
|
|
3
|
+
import isEqual from 'lodash/isEqual.js';
|
|
4
|
+
import { removeEmpty } from '../../util';
|
|
5
|
+
import { useResourceContext } from '../../core';
|
|
6
|
+
import usePaginationState from '../usePaginationState';
|
|
7
|
+
import useSortState from '../useSortState';
|
|
8
|
+
import { useRecordSelection } from './useRecordSelection';
|
|
9
|
+
import { flattenObject } from '../../dataProvider/fetch';
|
|
10
|
+
import { defaultExporter } from '../../export';
|
|
11
|
+
const refetch = () => {
|
|
12
|
+
throw new Error('refetch is not available for a ListContext built from useList based on local data');
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Handle filtering, sorting and pagination on local data.
|
|
16
|
+
*
|
|
17
|
+
* Returns the data and callbacks expected by <ListContext>.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const data = [
|
|
21
|
+
* { id: 1, name: 'Arnold' },
|
|
22
|
+
* { id: 2, name: 'Sylvester' },
|
|
23
|
+
* { id: 3, name: 'Jean-Claude' },
|
|
24
|
+
* ]
|
|
25
|
+
*
|
|
26
|
+
* const MyComponent = () => {
|
|
27
|
+
* const listContext = useList({ data });
|
|
28
|
+
* return (
|
|
29
|
+
* <ListContextProvider value={listContext}>
|
|
30
|
+
* <Datagrid>
|
|
31
|
+
* <TextField source="id" />
|
|
32
|
+
* <TextField source="name" />
|
|
33
|
+
* </Datagrid>
|
|
34
|
+
* </ListContextProvider>
|
|
35
|
+
* );
|
|
36
|
+
* };
|
|
37
|
+
*
|
|
38
|
+
* @param {UseListOptions} props
|
|
39
|
+
* @param {RaRecord[]} props.data An array of records
|
|
40
|
+
* @param {Boolean} props.isFetching: Optional. A boolean indicating whether the data is being loaded
|
|
41
|
+
* @param {Boolean} props.isLoading: Optional. A boolean indicating whether the data has been loaded at least once
|
|
42
|
+
* @param {Error | String} props.error: Optional. The error if any occurred while loading the data
|
|
43
|
+
* @param {Object} props.filter: Optional. An object containing the filters applied on the data
|
|
44
|
+
* @param {Number} props.page: Optional. The initial page index
|
|
45
|
+
* @param {Number} props.perPage: Optional. The initial page size
|
|
46
|
+
* @param {SortPayload} props.sort: Optional. The initial sort (field and order)
|
|
47
|
+
* @param {filterCallback} prop.filterCallback Optional. A function that allows you to make a custom filter
|
|
48
|
+
*/
|
|
49
|
+
export const useList = (props) => {
|
|
50
|
+
const { data, error, filter = defaultFilter, isFetching = false, isLoading = false, isPaused = false, isPending = false, isPlaceholderData = false, page: initialPage = 1, perPage: initialPerPage = 1000, sort: initialSort, filterCallback = defaultFilterCallback, exporter = defaultExporter, } = props;
|
|
51
|
+
const resource = useResourceContext(props);
|
|
52
|
+
const [finalItems, setFinalItems] = useState(() => ({
|
|
53
|
+
data,
|
|
54
|
+
total: data ? data.length : undefined,
|
|
55
|
+
}));
|
|
56
|
+
// pagination logic
|
|
57
|
+
const { page, setPage, perPage, setPerPage } = usePaginationState({
|
|
58
|
+
page: initialPage,
|
|
59
|
+
perPage: initialPerPage,
|
|
60
|
+
});
|
|
61
|
+
// sort logic
|
|
62
|
+
const { sort, setSort: setSortState } = useSortState(initialSort);
|
|
63
|
+
const setSort = useCallback((sort) => {
|
|
64
|
+
setSortState(sort);
|
|
65
|
+
setPage(1);
|
|
66
|
+
}, [setPage, setSortState]);
|
|
67
|
+
// selection logic
|
|
68
|
+
const [selectedIds, selectionModifiers] = useRecordSelection(resource
|
|
69
|
+
? {
|
|
70
|
+
resource,
|
|
71
|
+
}
|
|
72
|
+
: { disableSyncWithStore: true });
|
|
73
|
+
const onUnselectItems = useCallback((fromAllStoreKeys) => {
|
|
74
|
+
return selectionModifiers.unselect(selectedIds, fromAllStoreKeys);
|
|
75
|
+
}, [selectedIds, selectionModifiers]);
|
|
76
|
+
// filter logic
|
|
77
|
+
const filterRef = useRef(filter);
|
|
78
|
+
const [displayedFilters, setDisplayedFilters] = useState({});
|
|
79
|
+
const [filterValues, setFilterValues] = useState(filter);
|
|
80
|
+
const hideFilter = useCallback((filterName) => {
|
|
81
|
+
setDisplayedFilters(previousState => {
|
|
82
|
+
const { [filterName]: _, ...newState } = previousState;
|
|
83
|
+
return newState;
|
|
84
|
+
});
|
|
85
|
+
setFilterValues(previousState => {
|
|
86
|
+
const { [filterName]: _, ...newState } = previousState;
|
|
87
|
+
return newState;
|
|
88
|
+
});
|
|
89
|
+
}, [setDisplayedFilters, setFilterValues]);
|
|
90
|
+
const showFilter = useCallback((filterName, defaultValue) => {
|
|
91
|
+
setDisplayedFilters(previousState => ({
|
|
92
|
+
...previousState,
|
|
93
|
+
[filterName]: true,
|
|
94
|
+
}));
|
|
95
|
+
setFilterValues(previousState => removeEmpty({
|
|
96
|
+
...previousState,
|
|
97
|
+
[filterName]: defaultValue,
|
|
98
|
+
}));
|
|
99
|
+
}, [setDisplayedFilters, setFilterValues]);
|
|
100
|
+
const setFilters = useCallback((filters, displayedFilters = undefined) => {
|
|
101
|
+
setFilterValues(removeEmpty(filters));
|
|
102
|
+
if (displayedFilters) {
|
|
103
|
+
setDisplayedFilters(displayedFilters);
|
|
104
|
+
}
|
|
105
|
+
setPage(1);
|
|
106
|
+
}, [setDisplayedFilters, setFilterValues, setPage]);
|
|
107
|
+
// handle filter prop change
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (!isEqual(filter, filterRef.current)) {
|
|
110
|
+
filterRef.current = filter;
|
|
111
|
+
setFilterValues(filter);
|
|
112
|
+
}
|
|
113
|
+
}, [filter]);
|
|
114
|
+
const applyFilterAndSort = useCallback((records) => {
|
|
115
|
+
let tempData = records;
|
|
116
|
+
if (filterValues) {
|
|
117
|
+
const flattenFilterValues = flattenObject(filterValues);
|
|
118
|
+
tempData = records
|
|
119
|
+
.filter(record => Object.entries(flattenFilterValues).every(([filterName, filterValue]) => {
|
|
120
|
+
const recordValue = get(record, filterName);
|
|
121
|
+
const result = Array.isArray(recordValue)
|
|
122
|
+
? Array.isArray(filterValue)
|
|
123
|
+
? recordValue.some(item => filterValue.includes(item))
|
|
124
|
+
: recordValue.includes(filterValue)
|
|
125
|
+
: Array.isArray(filterValue)
|
|
126
|
+
? filterValue.includes(recordValue)
|
|
127
|
+
: filterName === 'q' // special full-text filter
|
|
128
|
+
? Object.keys(record).some(key => typeof record[key] ===
|
|
129
|
+
'string' &&
|
|
130
|
+
record[key]
|
|
131
|
+
.toLowerCase()
|
|
132
|
+
.includes(filterValue.toLowerCase()))
|
|
133
|
+
: filterValue == recordValue; // eslint-disable-line eqeqeq
|
|
134
|
+
return result;
|
|
135
|
+
}))
|
|
136
|
+
.filter(filterCallback);
|
|
137
|
+
}
|
|
138
|
+
if (sort.field) {
|
|
139
|
+
tempData = tempData.sort((a, b) => {
|
|
140
|
+
if (get(a, sort.field) > get(b, sort.field)) {
|
|
141
|
+
return sort.order === 'ASC' ? 1 : -1;
|
|
142
|
+
}
|
|
143
|
+
if (get(a, sort.field) < get(b, sort.field)) {
|
|
144
|
+
return sort.order === 'ASC' ? -1 : 1;
|
|
145
|
+
}
|
|
146
|
+
return 0;
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return tempData;
|
|
150
|
+
}, [filterValues, filterCallback, sort.field, sort.order]);
|
|
151
|
+
// We do all the data processing (filtering, sorting, paginating) client-side
|
|
152
|
+
useEffect(() => {
|
|
153
|
+
if (isPending || !data)
|
|
154
|
+
return;
|
|
155
|
+
const filteredAndSorted = applyFilterAndSort(data);
|
|
156
|
+
const filteredLength = filteredAndSorted.length;
|
|
157
|
+
const paginatedData = filteredAndSorted.slice((page - 1) * perPage, page * perPage);
|
|
158
|
+
setFinalItems({
|
|
159
|
+
data: paginatedData,
|
|
160
|
+
total: filteredLength,
|
|
161
|
+
});
|
|
162
|
+
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
163
|
+
[
|
|
164
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
165
|
+
JSON.stringify(data),
|
|
166
|
+
applyFilterAndSort,
|
|
167
|
+
isPending,
|
|
168
|
+
page,
|
|
169
|
+
perPage,
|
|
170
|
+
setFinalItems,
|
|
171
|
+
]);
|
|
172
|
+
const onSelectAll = useCallback(() => {
|
|
173
|
+
const allIds = data?.map(({ id }) => id) || [];
|
|
174
|
+
selectionModifiers.select(allIds);
|
|
175
|
+
}, [data, selectionModifiers]);
|
|
176
|
+
const getData = useCallback(async ({ maxResults } = {}) => {
|
|
177
|
+
if (isPending || !data) {
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
const filteredAndSorted = applyFilterAndSort(data);
|
|
181
|
+
if (maxResults != null) {
|
|
182
|
+
return filteredAndSorted.slice(0, maxResults);
|
|
183
|
+
}
|
|
184
|
+
return filteredAndSorted;
|
|
185
|
+
}, [applyFilterAndSort, data, isPending]);
|
|
186
|
+
return {
|
|
187
|
+
sort,
|
|
188
|
+
data: isPending ? undefined : finalItems?.data ?? [],
|
|
189
|
+
defaultTitle: '',
|
|
190
|
+
error: error ?? null,
|
|
191
|
+
displayedFilters,
|
|
192
|
+
exporter,
|
|
193
|
+
filterValues,
|
|
194
|
+
hasNextPage: finalItems?.total == null
|
|
195
|
+
? false
|
|
196
|
+
: page * perPage < finalItems.total,
|
|
197
|
+
hasPreviousPage: page > 1,
|
|
198
|
+
hideFilter,
|
|
199
|
+
isFetching,
|
|
200
|
+
isLoading,
|
|
201
|
+
isPaused,
|
|
202
|
+
isPending,
|
|
203
|
+
isPlaceholderData,
|
|
204
|
+
onSelect: selectionModifiers.select,
|
|
205
|
+
onSelectAll,
|
|
206
|
+
onToggleItem: selectionModifiers.toggle,
|
|
207
|
+
onUnselectItems,
|
|
208
|
+
page,
|
|
209
|
+
perPage,
|
|
210
|
+
resource: '',
|
|
211
|
+
refetch,
|
|
212
|
+
selectedIds,
|
|
213
|
+
setFilters,
|
|
214
|
+
setPage,
|
|
215
|
+
setPerPage,
|
|
216
|
+
setSort,
|
|
217
|
+
showFilter,
|
|
218
|
+
total: finalItems?.total,
|
|
219
|
+
getData,
|
|
220
|
+
};
|
|
221
|
+
};
|
|
222
|
+
const defaultFilter = {};
|
|
223
|
+
const defaultFilterCallback = (record) => Boolean(record);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ListControllerResult } from './useListController';
|
|
2
|
+
import { RaRecord } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to read the list controller props from the ListContext.
|
|
5
|
+
*
|
|
6
|
+
* Used within a <ListContextProvider> (e.g. as a descendent of <List>).
|
|
7
|
+
*
|
|
8
|
+
* @returns {ListControllerResult} list controller props
|
|
9
|
+
*
|
|
10
|
+
* @see useListController for how it is filled
|
|
11
|
+
*
|
|
12
|
+
* @example // custom list view
|
|
13
|
+
*
|
|
14
|
+
* import { useListContext } from 'react-admin';
|
|
15
|
+
*
|
|
16
|
+
* const MyList = () => {
|
|
17
|
+
* const { data, isPending } = useListContext();
|
|
18
|
+
* if (isPending) {
|
|
19
|
+
* return <>Loading...</>;
|
|
20
|
+
* }
|
|
21
|
+
* return (
|
|
22
|
+
* <ul>
|
|
23
|
+
* {data.map(record => (
|
|
24
|
+
* <li key={record.id}>{record.name}</li>
|
|
25
|
+
* ))}
|
|
26
|
+
* </ul>
|
|
27
|
+
* );
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* @example // custom pagination
|
|
31
|
+
*
|
|
32
|
+
* import { useListContext } from 'react-admin';
|
|
33
|
+
* import { Button, Toolbar } from '@mui/material';
|
|
34
|
+
* import ChevronLeft from '@mui/icons-material/ChevronLeft';
|
|
35
|
+
* import ChevronRight from '@mui/icons-material/ChevronRight';
|
|
36
|
+
*
|
|
37
|
+
* const PrevNextPagination = () => {
|
|
38
|
+
* const { page, perPage, total, setPage } = useListContext();
|
|
39
|
+
* const nbPages = Math.ceil(total / perPage) || 1;
|
|
40
|
+
* return (
|
|
41
|
+
* nbPages > 1 &&
|
|
42
|
+
* <Toolbar>
|
|
43
|
+
* {page > 1 &&
|
|
44
|
+
* <Button color="primary" key="prev" onClick={() => setPage(page - 1)}>
|
|
45
|
+
* <ChevronLeft />
|
|
46
|
+
* Prev
|
|
47
|
+
* </Button>
|
|
48
|
+
* }
|
|
49
|
+
* {page !== nbPages &&
|
|
50
|
+
* <Button color="primary" key="next" onClick={() => setPage(page + 1)}>
|
|
51
|
+
* Next
|
|
52
|
+
* <ChevronRight />
|
|
53
|
+
* </Button>
|
|
54
|
+
* }
|
|
55
|
+
* </Toolbar>
|
|
56
|
+
* );
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
export declare const useListContext: <RecordType extends RaRecord = any, ErrorType = Error>() => ListControllerResult<RecordType, ErrorType>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { ListContext } from './ListContext';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to read the list controller props from the ListContext.
|
|
5
|
+
*
|
|
6
|
+
* Used within a <ListContextProvider> (e.g. as a descendent of <List>).
|
|
7
|
+
*
|
|
8
|
+
* @returns {ListControllerResult} list controller props
|
|
9
|
+
*
|
|
10
|
+
* @see useListController for how it is filled
|
|
11
|
+
*
|
|
12
|
+
* @example // custom list view
|
|
13
|
+
*
|
|
14
|
+
* import { useListContext } from 'react-admin';
|
|
15
|
+
*
|
|
16
|
+
* const MyList = () => {
|
|
17
|
+
* const { data, isPending } = useListContext();
|
|
18
|
+
* if (isPending) {
|
|
19
|
+
* return <>Loading...</>;
|
|
20
|
+
* }
|
|
21
|
+
* return (
|
|
22
|
+
* <ul>
|
|
23
|
+
* {data.map(record => (
|
|
24
|
+
* <li key={record.id}>{record.name}</li>
|
|
25
|
+
* ))}
|
|
26
|
+
* </ul>
|
|
27
|
+
* );
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* @example // custom pagination
|
|
31
|
+
*
|
|
32
|
+
* import { useListContext } from 'react-admin';
|
|
33
|
+
* import { Button, Toolbar } from '@mui/material';
|
|
34
|
+
* import ChevronLeft from '@mui/icons-material/ChevronLeft';
|
|
35
|
+
* import ChevronRight from '@mui/icons-material/ChevronRight';
|
|
36
|
+
*
|
|
37
|
+
* const PrevNextPagination = () => {
|
|
38
|
+
* const { page, perPage, total, setPage } = useListContext();
|
|
39
|
+
* const nbPages = Math.ceil(total / perPage) || 1;
|
|
40
|
+
* return (
|
|
41
|
+
* nbPages > 1 &&
|
|
42
|
+
* <Toolbar>
|
|
43
|
+
* {page > 1 &&
|
|
44
|
+
* <Button color="primary" key="prev" onClick={() => setPage(page - 1)}>
|
|
45
|
+
* <ChevronLeft />
|
|
46
|
+
* Prev
|
|
47
|
+
* </Button>
|
|
48
|
+
* }
|
|
49
|
+
* {page !== nbPages &&
|
|
50
|
+
* <Button color="primary" key="next" onClick={() => setPage(page + 1)}>
|
|
51
|
+
* Next
|
|
52
|
+
* <ChevronRight />
|
|
53
|
+
* </Button>
|
|
54
|
+
* }
|
|
55
|
+
* </Toolbar>
|
|
56
|
+
* );
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
export const useListContext = () => {
|
|
60
|
+
const context = useContext(ListContext);
|
|
61
|
+
if (!context) {
|
|
62
|
+
throw new Error('useListContext must be used inside a ListContextProvider');
|
|
63
|
+
}
|
|
64
|
+
return context;
|
|
65
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ListControllerResult } from './useListController';
|
|
2
|
+
import { RaRecord } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to read the list controller props from the ListContext.
|
|
5
|
+
*
|
|
6
|
+
* Mostly used within a <ListContext.Provider> (e.g. as a descendent of <List>
|
|
7
|
+
* or <ListBase>).
|
|
8
|
+
*
|
|
9
|
+
* But you can also use it without a <ListContext.Provider>. In this case, it is up to you
|
|
10
|
+
* to pass all the necessary props (see the list below).
|
|
11
|
+
*
|
|
12
|
+
* The given props will take precedence over context values.
|
|
13
|
+
*
|
|
14
|
+
* @typedef {Object} ListControllerProps
|
|
15
|
+
* @prop {Object} data an array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... }]
|
|
16
|
+
* @prop {integer} total the total number of results for the current filters, excluding pagination. Useful to build the pagination controls. e.g. 23
|
|
17
|
+
* @prop {boolean} isFetching boolean that is true on mount, and false once the data was fetched
|
|
18
|
+
* @prop {boolean} isLoading boolean that is false until the data is available
|
|
19
|
+
* @prop {integer} page the current page. Starts at 1
|
|
20
|
+
* @prop {Function} setPage a callback to change the page, e.g. setPage(3)
|
|
21
|
+
* @prop {integer} perPage the number of results per page. Defaults to 25
|
|
22
|
+
* @prop {Function} setPerPage a callback to change the number of results per page, e.g. setPerPage(25)
|
|
23
|
+
* @prop {Object} sort a sort object { field, order }, e.g. { field: 'date', order: 'DESC' }
|
|
24
|
+
* @prop {Function} setSort a callback to change the sort, e.g. setSort({ field : 'name', order: 'ASC' })
|
|
25
|
+
* @prop {Object} filterValues a dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' }
|
|
26
|
+
* @prop {Function} setFilters a callback to update the filters, e.g. setFilters(filters, displayedFilters)
|
|
27
|
+
* @prop {Object} displayedFilters a dictionary of the displayed filters, e.g. { title: true, nationality: true }
|
|
28
|
+
* @prop {Function} showFilter a callback to show one of the filters, e.g. showFilter('title', defaultValue)
|
|
29
|
+
* @prop {Function} hideFilter a callback to hide one of the filters, e.g. hideFilter('title')
|
|
30
|
+
* @prop {Array} selectedIds an array listing the ids of the selected rows, e.g. [123, 456]
|
|
31
|
+
* @prop {Function} onSelect callback to change the list of selected rows, e.g. onSelect([456, 789])
|
|
32
|
+
* @prop {Function} onSelectAll callback to select all the records, e.g. onSelectAll({ limit: 50, queryOptions: { meta: { foo: 'bar' } } })
|
|
33
|
+
* @prop {Function} onToggleItem callback to toggle the selection of a given record based on its id, e.g. onToggleItem(456)
|
|
34
|
+
* @prop {Function} onUnselectItems callback to clear the selection, e.g. onUnselectItems();
|
|
35
|
+
* @prop {string} defaultTitle the translated title based on the resource, e.g. 'Posts'
|
|
36
|
+
* @prop {string} resource the resource name, deduced from the location. e.g. 'posts'
|
|
37
|
+
*
|
|
38
|
+
* @param {ListControllerProps} props Props passed to the useListContext hook
|
|
39
|
+
*
|
|
40
|
+
* @returns {ListControllerResult} list controller props
|
|
41
|
+
*
|
|
42
|
+
* @see useListController for how it is filled
|
|
43
|
+
*/
|
|
44
|
+
export declare const useListContextWithProps: <RecordType extends RaRecord = any>(props?: any) => Partial<ListControllerResult<RecordType>>;
|