import { useRecoilCallback } from 'recoil'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { GraphQLView } from '@/views/types/GraphQLView'; import { isDefined } from '~/utils/isDefined'; export const useUpdateCurrentView = (viewBarComponentId?: string) => { const currentViewIdCallbackState = useRecoilComponentCallbackStateV2( currentViewIdComponentState, viewBarComponentId, ); const { updateOneRecord } = useUpdateOneRecord({ objectNameSingular: CoreObjectNameSingular.View, }); const updateCurrentView = useRecoilCallback( ({ snapshot }) => async (view: Partial) => { const currentViewId = snapshot .getLoadable(currentViewIdCallbackState) .getValue(); if (isDefined(currentViewId)) { await updateOneRecord({ idToUpdate: currentViewId, updateOneRecordInput: view, }); } }, [currentViewIdCallbackState, updateOneRecord], ); return { updateCurrentView, }; };