From 31a196a76513df809ee91427129926370de551ba Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sun, 14 Mar 2021 13:27:01 +0300 Subject: feat: add useOptions hook --- src/hooks/useOptions.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/hooks/useOptions.ts (limited to 'src/hooks') diff --git a/src/hooks/useOptions.ts b/src/hooks/useOptions.ts new file mode 100644 index 0000000..de8fc95 --- /dev/null +++ b/src/hooks/useOptions.ts @@ -0,0 +1,28 @@ +import { useEffect } from 'react'; +import { Option } from '../components/Select'; +import hooks from './useAPIClient'; + +// Load service entities and map them into select options +// setting the default value in formik +const useOptions = ( + service: string, + field: string, + values: Record, + setFieldValue: (any) => void, + mapper = item => ({ key: item._id, label: item.name }), +): Option[] => { + const { data: items } = hooks[service].useList(); + + const options = items?.map(mapper); + + useEffect(() => { + if (items?.length && !values[field]) { + setFieldValue(field, items[0]._id); + } + }, [items, setFieldValue]); + + return options; +}; + + +export default useOptions; -- cgit v1.2.3