UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

107 lines 3.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSelectAll = void 0; const react_query_1 = require("@tanstack/react-query"); const notification_1 = require("../../notification/index.cjs"); const dataProvider_1 = require("../../dataProvider/index.cjs"); const useRecordSelection_1 = require("./useRecordSelection.cjs"); const core_1 = require("../../core/index.cjs"); const util_1 = require("../../util/index.cjs"); /** * Get a callback to select all records of a resource (capped by the limit parameter) * * @param {Object} params The hook parameters { resource, sort, filter } * @returns {Function} handleSelectAll A function to select all items of a list * * @example * import { List, Datagrid, BulkActionsToolbar, BulkDeleteButton, useListContext, useSelectAll } from 'react-admin'; * * const MySelectAllButton = () => { * const { sort, filter } = useListContext(); * const handleSelectAll = useSelectAll({ resource: 'posts', sort, filter }); * const handleClick = () => handleSelectAll({ * queryOptions: { meta: { foo: 'bar' } }, * limit: 250, * }); * return <button onClick={handleClick}>Select All</button>; * }; * * const PostBulkActionsToolbar = () => ( * <BulkActionsToolbar actions={<MySelectAllButton/>}> * <BulkDeleteButton /> * </BulkActionsToolbar> * ); * * export const PostList = () => ( * <List> * <Datagrid bulkActionsToolbar={<PostBulkActionsToolbar />}> * ... * </Datagrid> * </List> * ); */ const useSelectAll = (params) => { const { sort, filter, storeKey, disableSyncWithStore } = params; const resource = (0, core_1.useResourceContext)(params); if (!resource) { throw new Error('useSelectAll should be used inside a ResourceContextProvider or passed a resource prop'); } const dataProvider = (0, dataProvider_1.useDataProvider)(); const queryClient = (0, react_query_1.useQueryClient)(); const [, { select }] = (0, useRecordSelection_1.useRecordSelection)({ resource, storeKey, disableSyncWithStore, }); const notify = (0, notification_1.useNotify)(); const handleSelectAll = (0, util_1.useEvent)(async ({ queryOptions = {}, limit = 250, } = {}) => { const { meta, onSuccess, onError, ...otherQueryOptions } = queryOptions; try { const results = await queryClient.fetchQuery({ queryKey: [ resource, 'getList', { pagination: { page: 1, perPage: limit }, sort, filter, meta, }, ], queryFn: () => dataProvider.getList(resource, { pagination: { page: 1, perPage: limit, }, sort, filter, meta, }), ...otherQueryOptions, }); const allIds = results.data?.map(({ id }) => id) || []; select(allIds); if (allIds.length === limit) { notify('ra.message.select_all_limit_reached', { messageArgs: { max: limit }, type: 'warning', }); } if (onSuccess) { onSuccess(results); } return results.data; } catch (error) { if (onError) { onError(error); } else { notify('ra.notification.http_error', { type: 'warning' }); } } }); return handleSelectAll; }; exports.useSelectAll = useSelectAll; //# sourceMappingURL=useSelectAll.js.map