Adding the possibility to change the view name and incon from the Options menu dropdown --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
107 lines
4.4 KiB
TypeScript
107 lines
4.4 KiB
TypeScript
import { Key } from 'ts-key-enum';
|
|
import { IconChevronLeft } from 'twenty-ui';
|
|
|
|
import { IconPicker } from '@/ui/input/components/IconPicker';
|
|
import { TextInputV2 } from '@/ui/input/components/TextInputV2';
|
|
import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader';
|
|
import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent';
|
|
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
|
import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator';
|
|
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
|
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
|
|
import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentStateV2';
|
|
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
|
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
|
import { ViewsHotkeyScope } from '@/views/types/ViewsHotkeyScope';
|
|
import { ViewPickerEditButton } from '@/views/view-picker/components/ViewPickerEditButton';
|
|
import { ViewPickerIconAndNameContainer } from '@/views/view-picker/components/ViewPickerIconAndNameContainer';
|
|
import { ViewPickerSaveButtonContainer } from '@/views/view-picker/components/ViewPickerSaveButtonContainer';
|
|
import { useUpdateViewFromCurrentState } from '@/views/view-picker/hooks/useUpdateViewFromCurrentState';
|
|
import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
|
|
import { viewPickerInputNameComponentState } from '@/views/view-picker/states/viewPickerInputNameComponentState';
|
|
import { viewPickerIsDirtyComponentState } from '@/views/view-picker/states/viewPickerIsDirtyComponentState';
|
|
import { viewPickerIsPersistingComponentState } from '@/views/view-picker/states/viewPickerIsPersistingComponentState';
|
|
import { viewPickerSelectedIconComponentState } from '@/views/view-picker/states/viewPickerSelectedIconComponentState';
|
|
|
|
export const ViewPickerContentEditMode = () => {
|
|
const { setViewPickerMode } = useViewPickerMode();
|
|
|
|
const [viewPickerInputName, setViewPickerInputName] =
|
|
useRecoilComponentStateV2(viewPickerInputNameComponentState);
|
|
const [viewPickerSelectedIcon, setViewPickerSelectedIcon] =
|
|
useRecoilComponentStateV2(viewPickerSelectedIconComponentState);
|
|
|
|
const viewPickerIsPersisting = useRecoilComponentValueV2(
|
|
viewPickerIsPersistingComponentState,
|
|
);
|
|
const setViewPickerIsDirty = useSetRecoilComponentStateV2(
|
|
viewPickerIsDirtyComponentState,
|
|
);
|
|
|
|
const setHotkeyScope = useSetHotkeyScope();
|
|
|
|
const { updateViewFromCurrentState } = useUpdateViewFromCurrentState();
|
|
|
|
useScopedHotkeys(
|
|
Key.Enter,
|
|
async () => {
|
|
if (viewPickerIsPersisting) {
|
|
return;
|
|
}
|
|
|
|
await updateViewFromCurrentState();
|
|
},
|
|
ViewsHotkeyScope.ListDropdown,
|
|
);
|
|
|
|
const onIconChange = ({ iconKey }: { iconKey: string }) => {
|
|
setViewPickerIsDirty(true);
|
|
setViewPickerSelectedIcon(iconKey);
|
|
};
|
|
|
|
const handleClose = async () => {
|
|
await updateViewFromCurrentState();
|
|
|
|
setViewPickerMode('list');
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<DropdownMenuHeader
|
|
StartComponent={
|
|
<DropdownMenuHeaderLeftComponent
|
|
onClick={handleClose}
|
|
Icon={IconChevronLeft}
|
|
/>
|
|
}
|
|
>
|
|
Edit view
|
|
</DropdownMenuHeader>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuItemsContainer>
|
|
<ViewPickerIconAndNameContainer>
|
|
<IconPicker
|
|
onChange={onIconChange}
|
|
selectedIconKey={viewPickerSelectedIcon}
|
|
onClose={() => setHotkeyScope(ViewsHotkeyScope.ListDropdown)}
|
|
/>
|
|
<TextInputV2
|
|
value={viewPickerInputName}
|
|
onChange={(value) => {
|
|
setViewPickerIsDirty(true);
|
|
setViewPickerInputName(value);
|
|
}}
|
|
autoFocus
|
|
/>
|
|
</ViewPickerIconAndNameContainer>
|
|
</DropdownMenuItemsContainer>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuItemsContainer scrollable={false}>
|
|
<ViewPickerSaveButtonContainer>
|
|
<ViewPickerEditButton />
|
|
</ViewPickerSaveButtonContainer>
|
|
</DropdownMenuItemsContainer>
|
|
</>
|
|
);
|
|
};
|