src/widgets/ManageNexus/hooks/useQuickLinkEditForm.ts (64 lines of code) (raw):

import React from 'react'; import { useForm } from 'react-hook-form'; import { editResource } from '../../../k8s/common/editResource'; import { useQuickLinkCRUD } from '../../../k8s/groups/EDP/QuickLink/hooks/useQuickLinkCRUD'; import { QuickLinkKubeObjectInterface } from '../../../k8s/groups/EDP/QuickLink/types'; import { FormItem } from '../../../providers/MultiForm/types'; import { FORM_MODES } from '../../../types/forms'; import { QUICK_LINK_FORM_NAMES } from '../names'; import { QuickLinkFormValues, WidgetPermissions } from '../types'; export const useQuickLinkEditForm = ({ quickLink, permissions, }: { quickLink: QuickLinkKubeObjectInterface; permissions: WidgetPermissions; }): FormItem => { const { editQuickLink, mutations: { QuickLinkEditMutation }, } = useQuickLinkCRUD({}); const defaultValues = React.useMemo( () => ({ [QUICK_LINK_FORM_NAMES.externalUrl.name]: quickLink?.spec.url, }), [quickLink?.spec.url] ); const form = useForm<QuickLinkFormValues>({ defaultValues: defaultValues, }); React.useEffect(() => { form.reset(defaultValues, { keepDirty: false }); }, [defaultValues, form]); const handleSubmit = React.useCallback( async (values: QuickLinkFormValues) => { if (!permissions?.update?.QuickLink.allowed) { return false; } const newQuickLinkData = editResource(QUICK_LINK_FORM_NAMES, quickLink, values); await editQuickLink({ QuickLinkData: newQuickLinkData, }); }, [permissions?.update?.QuickLink.allowed, quickLink, editQuickLink] ); return React.useMemo( () => ({ mode: FORM_MODES.EDIT, form, onSubmit: form.handleSubmit(handleSubmit), isSubmitting: QuickLinkEditMutation.isLoading, allowedToSubmit: { isAllowed: permissions?.update?.QuickLink.allowed, reason: permissions?.update?.QuickLink.reason, }, }), [ form, handleSubmit, QuickLinkEditMutation.isLoading, permissions?.update?.QuickLink.allowed, permissions?.update?.QuickLink.reason, ] ); };