[feature]:Improved Options Menu for Default View (#13427)

**Feature** - Improved Options Menu for Default View

**Closes** - #13306

**Description** 

This PR fixes the feature request of Better Options in the Default View.
Added the option of Create a Custom View in the Options, this helps user
create custom views.


**Working Demo** 


https://github.com/user-attachments/assets/32a3f264-c4a0-42aa-9257-56a407ea3c6e

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
Priyansh Verma
2025-08-20 21:39:22 +05:30
committed by GitHub
parent f72c3d73bf
commit ff3f1d945c
7 changed files with 425 additions and 212 deletions
@@ -0,0 +1,31 @@
import { useOpenDropdown } from '@/ui/layout/dropdown/hooks/useOpenDropdown';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { type View } from '@/views/types/View';
import { VIEW_PICKER_DROPDOWN_ID } from '@/views/view-picker/constants/ViewPickerDropdownId';
import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
import { viewPickerReferenceViewIdComponentState } from '@/views/view-picker/states/viewPickerReferenceViewIdComponentState';
import { isDefined } from 'twenty-shared/utils';
export const useOpenCreateViewDropdown = (viewBardId?: string) => {
const setViewPickerReferenceViewId = useSetRecoilComponentState(
viewPickerReferenceViewIdComponentState,
viewBardId,
);
const { setViewPickerMode } = useViewPickerMode(viewBardId);
const { openDropdown } = useOpenDropdown();
const openCreateViewDropdown = (referenceView: View | undefined) => {
if (isDefined(referenceView?.id)) {
setViewPickerReferenceViewId(referenceView.id);
setViewPickerMode('create-empty');
openDropdown({
dropdownComponentInstanceIdFromProps: VIEW_PICKER_DROPDOWN_ID,
});
}
};
return { openCreateViewDropdown };
};
@@ -1,3 +1,4 @@
export enum ViewKey {
Index = 'INDEX',
Custom = 'CUSTOM',
}
@@ -13,6 +13,7 @@ import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { useChangeView } from '@/views/hooks/useChangeView';
import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly';
import { useOpenCreateViewDropdown } from '@/views/hooks/useOpenCreateViewDropown';
import { useUpdateView } from '@/views/hooks/useUpdateView';
import { ViewPickerOptionDropdown } from '@/views/view-picker/components/ViewPickerOptionDropdown';
import { VIEW_PICKER_DROPDOWN_ID } from '@/views/view-picker/constants/ViewPickerDropdownId';
@@ -20,7 +21,6 @@ import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
import { viewPickerReferenceViewIdComponentState } from '@/views/view-picker/states/viewPickerReferenceViewIdComponentState';
import { useLingui } from '@lingui/react/macro';
import { useRecoilValue } from 'recoil';
import { isDefined } from 'twenty-shared/utils';
import { IconPlus } from 'twenty-ui/display';
import { MenuItem } from 'twenty-ui/navigation';
import { moveArrayItem } from '~/utils/array/moveArrayItem';
@@ -58,11 +58,10 @@ export const ViewPickerListContent = () => {
closeDropdown(VIEW_PICKER_DROPDOWN_ID);
};
const { openCreateViewDropdown } = useOpenCreateViewDropdown();
const handleAddViewButtonClick = () => {
if (isDefined(currentView?.id)) {
setViewPickerReferenceViewId(currentView.id);
setViewPickerMode('create-empty');
}
openCreateViewDropdown(currentView);
};
const handleEditViewButtonClick = (