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:
@ -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>
|
||||||
|
|||||||
@ -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 ? (
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user