|
|
@@ -0,0 +1,82 @@
|
|
|
+import {addMenu, editMenu, getMenuInfo} from '@apis';
|
|
|
+import {usePutData, useQueryDataInfo} from '@hooks';
|
|
|
+import {AddMenuParams} from '@models';
|
|
|
+import {useEffect} from 'react';
|
|
|
+import {useForm, useFormContext} from 'react-hook-form';
|
|
|
+
|
|
|
+export type FormState = {
|
|
|
+ /** 菜单名称 */
|
|
|
+ menuName: string,
|
|
|
+ /** 菜单排序 */
|
|
|
+ menuOrderBy: number,
|
|
|
+ /** 图标 */
|
|
|
+ menuIcon: string,
|
|
|
+ /** 地址 */
|
|
|
+ menuUrl: string,
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+export function useFormState(
|
|
|
+ id: string,
|
|
|
+ visible: boolean,
|
|
|
+ options: {onFetch: () => void, onClose: () => void},
|
|
|
+) {
|
|
|
+ const formContext = useForm<FormState>({
|
|
|
+ defaultValues: {
|
|
|
+ menuName: '',
|
|
|
+ menuOrderBy: 0,
|
|
|
+ menuIcon: '',
|
|
|
+ menuUrl: '',
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ const {clearErrors, handleSubmit} = formContext;
|
|
|
+
|
|
|
+ useEffect(function() {
|
|
|
+ visible && clearErrors();
|
|
|
+ }, [clearErrors, visible]);
|
|
|
+
|
|
|
+ const [isLoading, {addMutate, editMutate}] = usePutData({
|
|
|
+ addFn: addMenu,
|
|
|
+ editFn: editMenu,
|
|
|
+ ...options,
|
|
|
+ });
|
|
|
+
|
|
|
+ const onSubmit = handleSubmit(function({
|
|
|
+ menuIcon,
|
|
|
+ menuName,
|
|
|
+ menuOrderBy,
|
|
|
+ menuUrl,
|
|
|
+ }) {
|
|
|
+ const params: AddMenuParams = {
|
|
|
+ name: menuName,
|
|
|
+ img: menuIcon,
|
|
|
+ orderBy: String(menuOrderBy),
|
|
|
+ url: menuUrl,
|
|
|
+ pId: '0',
|
|
|
+ };
|
|
|
+
|
|
|
+ id.length > 0
|
|
|
+ ? editMutate({id, ...params})
|
|
|
+ : addMutate(params);
|
|
|
+ });
|
|
|
+
|
|
|
+ return [{formContext, isLoading}, onSubmit] as const;
|
|
|
+}
|
|
|
+
|
|
|
+export function useWatchId(id: string) {
|
|
|
+ const {setValue} = useFormContext<FormState>();
|
|
|
+
|
|
|
+ const data = useQueryDataInfo({
|
|
|
+ queryFn: getMenuInfo,
|
|
|
+ params: ['0', id],
|
|
|
+ enabled: id.length > 0,
|
|
|
+ });
|
|
|
+
|
|
|
+ useEffect(function() {
|
|
|
+ setValue('menuIcon', data?.img ?? '');
|
|
|
+ setValue('menuName', data?.name ?? '');
|
|
|
+ setValue('menuOrderBy', Number(data?.orderBy ?? '0'));
|
|
|
+ setValue('menuUrl', data?.url ?? '');
|
|
|
+ }, [data, setValue]);
|
|
|
+}
|