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
This commit is contained in:
Jeet Desai
2024-03-28 15:22:42 +05:30
committed by GitHub
parent 538ed9026d
commit a28ffee80f
3 changed files with 21 additions and 4 deletions

View File

@ -102,11 +102,18 @@ export const ViewPickerCreateOrEditContent = () => {
const { availableFieldsForKanban } = useGetAvailableFieldsForKanban(); const { availableFieldsForKanban } = useGetAvailableFieldsForKanban();
const handleClose = async () => {
if (viewPickerMode === 'edit') {
await handleUpdate();
}
setViewPickerMode('list');
};
return ( return (
<> <>
<DropdownMenuHeader <DropdownMenuHeader
StartIcon={viewPickerMode === 'create' ? IconX : IconChevronLeft} StartIcon={viewPickerMode === 'create' ? IconX : IconChevronLeft}
onClick={() => setViewPickerMode('list')} onClick={handleClose}
> >
{viewPickerMode === 'create' ? 'Create view' : 'Edit view'} {viewPickerMode === 'create' ? 'Create view' : 'Edit view'}
</DropdownMenuHeader> </DropdownMenuHeader>

View File

@ -15,6 +15,7 @@ import { ViewPickerCreateOrEditContentEffect } from '@/views/view-picker/compone
import { ViewPickerListContent } from '@/views/view-picker/components/ViewPickerListContent'; import { ViewPickerListContent } from '@/views/view-picker/components/ViewPickerListContent';
import { VIEW_PICKER_DROPDOWN_ID } from '@/views/view-picker/constants/ViewPickerDropdownId'; import { VIEW_PICKER_DROPDOWN_ID } from '@/views/view-picker/constants/ViewPickerDropdownId';
import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode'; import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
import { useViewPickerPersistView } from '@/views/view-picker/hooks/useViewPickerPersistView';
import { useViewStates } from '../../hooks/internal/useViewStates'; import { useViewStates } from '../../hooks/internal/useViewStates';
@ -49,6 +50,8 @@ export const ViewPickerDropdown = () => {
const { currentViewWithCombinedFiltersAndSorts } = useGetCurrentView(); const { currentViewWithCombinedFiltersAndSorts } = useGetCurrentView();
const { handleUpdate } = useViewPickerPersistView();
const entityCountInCurrentView = useRecoilValue( const entityCountInCurrentView = useRecoilValue(
entityCountInCurrentViewState, entityCountInCurrentViewState,
); );
@ -62,13 +65,20 @@ export const ViewPickerDropdown = () => {
const { getIcon } = useIcons(); const { getIcon } = useIcons();
const CurrentViewIcon = getIcon(currentViewWithCombinedFiltersAndSorts?.icon); const CurrentViewIcon = getIcon(currentViewWithCombinedFiltersAndSorts?.icon);
const handleClickOutside = async () => {
if (isViewsListDropdownOpen && viewPickerMode === 'edit') {
await handleUpdate();
}
setViewPickerMode('list');
};
return ( return (
<Dropdown <Dropdown
dropdownId={VIEW_PICKER_DROPDOWN_ID} dropdownId={VIEW_PICKER_DROPDOWN_ID}
dropdownHotkeyScope={{ scope: ViewsHotkeyScope.ListDropdown }} dropdownHotkeyScope={{ scope: ViewsHotkeyScope.ListDropdown }}
dropdownOffset={{ x: 0, y: 8 }} dropdownOffset={{ x: 0, y: 8 }}
dropdownMenuWidth={200} dropdownMenuWidth={200}
onClickOutside={() => setViewPickerMode('list')} onClickOutside={handleClickOutside}
clickableComponent={ clickableComponent={
<StyledDropdownButtonContainer isUnfolded={isViewsListDropdownOpen}> <StyledDropdownButtonContainer isUnfolded={isViewsListDropdownOpen}>
{currentViewWithCombinedFiltersAndSorts && CurrentViewIcon ? ( {currentViewWithCombinedFiltersAndSorts && CurrentViewIcon ? (

View File

@ -61,6 +61,7 @@ export const useViewPickerPersistView = () => {
({ set, snapshot }) => ({ set, snapshot }) =>
async () => { async () => {
set(viewPickerIsPersistingState, true); set(viewPickerIsPersistingState, true);
closeAndResetViewPicker();
const viewPickerReferenceViewId = getSnapshotValue( const viewPickerReferenceViewId = getSnapshotValue(
snapshot, snapshot,
viewPickerReferenceViewIdState, viewPickerReferenceViewIdState,
@ -72,7 +73,6 @@ export const useViewPickerPersistView = () => {
)[0].id, )[0].id,
); );
await removeView(viewPickerReferenceViewId); await removeView(viewPickerReferenceViewId);
closeAndResetViewPicker();
}, },
[ [
closeAndResetViewPicker, closeAndResetViewPicker,
@ -88,6 +88,7 @@ export const useViewPickerPersistView = () => {
({ set, snapshot }) => ({ set, snapshot }) =>
async () => { async () => {
set(viewPickerIsPersistingState, true); set(viewPickerIsPersistingState, true);
closeAndResetViewPicker();
const viewPickerReferenceViewId = getSnapshotValue( const viewPickerReferenceViewId = getSnapshotValue(
snapshot, snapshot,
@ -108,7 +109,6 @@ export const useViewPickerPersistView = () => {
icon: viewPickerSelectedIcon, icon: viewPickerSelectedIcon,
}); });
selectView(viewPickerReferenceViewId); selectView(viewPickerReferenceViewId);
closeAndResetViewPicker();
}, },
[ [
viewPickerIsPersistingState, viewPickerIsPersistingState,