We removed the blue focus on phone/domain/array/email floating inputs but we want to keep it in the app settings. <img width="644" alt="Screenshot 2024-11-05 at 15 55 04" src="https://github.com/user-attachments/assets/afcbe6b2-2d6b-4e0d-8397-4268d529127c"> <img width="606" alt="Screenshot 2024-11-05 at 15 55 23" src="https://github.com/user-attachments/assets/004becf8-41e7-45d6-9ad9-9e487b8db8f3"> <img width="351" alt="Screenshot 2024-11-05 at 15 55 33" src="https://github.com/user-attachments/assets/6a4c06e6-04d3-46bf-940b-9fd61ee91995"> <img width="330" alt="Screenshot 2024-11-05 at 15 55 41" src="https://github.com/user-attachments/assets/e6fc8bbd-eca3-47bc-93f1-d6ff8d3d8a13"> <img width="588" alt="Screenshot 2024-11-05 at 15 56 07" src="https://github.com/user-attachments/assets/0d0f5e80-3501-4346-94a1-6ea4b77ee7ba"> <img width="211" alt="Screenshot 2024-11-05 at 15 56 31" src="https://github.com/user-attachments/assets/9cd85f4d-8052-4c6b-a694-84c691c6217d">
101 lines
4.1 KiB
TypeScript
101 lines
4.1 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';
|
|
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 StartIcon={IconChevronLeft} onClick={handleClose}>
|
|
Edit view
|
|
</DropdownMenuHeader>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuItemsContainer>
|
|
<ViewPickerIconAndNameContainer>
|
|
<IconPicker
|
|
onChange={onIconChange}
|
|
selectedIconKey={viewPickerSelectedIcon}
|
|
disableBlur
|
|
onClose={() => setHotkeyScope(ViewsHotkeyScope.ListDropdown)}
|
|
/>
|
|
<TextInputV2
|
|
value={viewPickerInputName}
|
|
onChange={(value) => {
|
|
setViewPickerIsDirty(true);
|
|
setViewPickerInputName(value);
|
|
}}
|
|
autoFocus
|
|
/>
|
|
</ViewPickerIconAndNameContainer>
|
|
</DropdownMenuItemsContainer>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuItemsContainer>
|
|
<ViewPickerSaveButtonContainer>
|
|
<ViewPickerEditButton />
|
|
</ViewPickerSaveButtonContainer>
|
|
</DropdownMenuItemsContainer>
|
|
</>
|
|
);
|
|
};
|