From a28ffee80feba152fa44402c0e40a36aa7bdd8eb Mon Sep 17 00:00:00 2001 From: Jeet Desai <52026385+jeet1desai@users.noreply.github.com> Date: Thu, 28 Mar 2024 15:22:42 +0530 Subject: [PATCH] Fix: Save view by clicking outside popup while editing (#4678) * fix: #4657 Save view by clicking outside popup while editing * made changes on save view * resolved comment --- .../components/ViewPickerCreateOrEditContent.tsx | 9 ++++++++- .../view-picker/components/ViewPickerDropdown.tsx | 12 +++++++++++- .../view-picker/hooks/useViewPickerPersistView.ts | 4 ++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerCreateOrEditContent.tsx b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerCreateOrEditContent.tsx index 0b9d39e86..b57dc8128 100644 --- a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerCreateOrEditContent.tsx +++ b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerCreateOrEditContent.tsx @@ -102,11 +102,18 @@ export const ViewPickerCreateOrEditContent = () => { const { availableFieldsForKanban } = useGetAvailableFieldsForKanban(); + const handleClose = async () => { + if (viewPickerMode === 'edit') { + await handleUpdate(); + } + setViewPickerMode('list'); + }; + return ( <> setViewPickerMode('list')} + onClick={handleClose} > {viewPickerMode === 'create' ? 'Create view' : 'Edit view'} diff --git a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx index 59b347f1b..b46b94416 100644 --- a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx +++ b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx @@ -15,6 +15,7 @@ import { ViewPickerCreateOrEditContentEffect } from '@/views/view-picker/compone import { ViewPickerListContent } from '@/views/view-picker/components/ViewPickerListContent'; import { VIEW_PICKER_DROPDOWN_ID } from '@/views/view-picker/constants/ViewPickerDropdownId'; import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode'; +import { useViewPickerPersistView } from '@/views/view-picker/hooks/useViewPickerPersistView'; import { useViewStates } from '../../hooks/internal/useViewStates'; @@ -49,6 +50,8 @@ export const ViewPickerDropdown = () => { const { currentViewWithCombinedFiltersAndSorts } = useGetCurrentView(); + const { handleUpdate } = useViewPickerPersistView(); + const entityCountInCurrentView = useRecoilValue( entityCountInCurrentViewState, ); @@ -62,13 +65,20 @@ export const ViewPickerDropdown = () => { const { getIcon } = useIcons(); const CurrentViewIcon = getIcon(currentViewWithCombinedFiltersAndSorts?.icon); + const handleClickOutside = async () => { + if (isViewsListDropdownOpen && viewPickerMode === 'edit') { + await handleUpdate(); + } + setViewPickerMode('list'); + }; + return ( setViewPickerMode('list')} + onClickOutside={handleClickOutside} clickableComponent={ {currentViewWithCombinedFiltersAndSorts && CurrentViewIcon ? ( diff --git a/packages/twenty-front/src/modules/views/view-picker/hooks/useViewPickerPersistView.ts b/packages/twenty-front/src/modules/views/view-picker/hooks/useViewPickerPersistView.ts index 825e46c36..42ef7c2db 100644 --- a/packages/twenty-front/src/modules/views/view-picker/hooks/useViewPickerPersistView.ts +++ b/packages/twenty-front/src/modules/views/view-picker/hooks/useViewPickerPersistView.ts @@ -61,6 +61,7 @@ export const useViewPickerPersistView = () => { ({ set, snapshot }) => async () => { set(viewPickerIsPersistingState, true); + closeAndResetViewPicker(); const viewPickerReferenceViewId = getSnapshotValue( snapshot, viewPickerReferenceViewIdState, @@ -72,7 +73,6 @@ export const useViewPickerPersistView = () => { )[0].id, ); await removeView(viewPickerReferenceViewId); - closeAndResetViewPicker(); }, [ closeAndResetViewPicker, @@ -88,6 +88,7 @@ export const useViewPickerPersistView = () => { ({ set, snapshot }) => async () => { set(viewPickerIsPersistingState, true); + closeAndResetViewPicker(); const viewPickerReferenceViewId = getSnapshotValue( snapshot, @@ -108,7 +109,6 @@ export const useViewPickerPersistView = () => { icon: viewPickerSelectedIcon, }); selectView(viewPickerReferenceViewId); - closeAndResetViewPicker(); }, [ viewPickerIsPersistingState,