import React from "react"; import { CheckboxGroupProps } from "antd/lib/checkbox"; import { QueryObserverResult, UseQueryOptions } from "react-query"; import { useList } from "@hooks"; import { CrudSorting, Option, BaseRecord, GetListResponse, CrudFilters, SuccessErrorNotification, HttpError, MetaDataQuery, LiveModeProps, } from "../../../interfaces"; export type useCheckboxGroupProps = { resource: string; optionLabel?: string; optionValue?: string; sort?: CrudSorting; filters?: CrudFilters; queryOptions?: UseQueryOptions, TError>; metaData?: MetaDataQuery; } & SuccessErrorNotification & LiveModeProps; export type UseCheckboxGroupReturnType = { checkboxGroupProps: CheckboxGroupProps; queryResult: QueryObserverResult>; }; /** * `useCheckboxGroup` hook allows you to manage an Ant Design {@link https://ant.design/components/checkbox/#components-checkbox-demo-group Checkbox.Group} component when records in a resource needs to be used as checkbox options. * * @see {@link https://refine.dev/docs/api-references/hooks/field/useCheckboxGroup} for more details. * * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`} * */ export const useCheckboxGroup = < TData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, >({ resource, sort, filters, optionLabel = "title", optionValue = "id", successNotification, errorNotification, queryOptions, liveMode, onLiveEvent, liveParams, metaData, }: useCheckboxGroupProps): UseCheckboxGroupReturnType => { const [options, setOptions] = React.useState([]); const defaultQueryOnSuccess = (data: GetListResponse) => { setOptions( data.data.map((item) => ({ label: item[optionLabel], value: item[optionValue], })), ); }; const queryResult = useList({ resource, config: { sort, filters, }, queryOptions: { ...queryOptions, onSuccess: (data) => { defaultQueryOnSuccess(data); queryOptions?.onSuccess?.(data); }, }, successNotification, errorNotification, liveMode, onLiveEvent, liveParams, metaData, }); return { checkboxGroupProps: { options, }, queryResult, }; };