43042d55b2
https://github.com/user-attachments/assets/960b8b0d-10e8-42a1-bf61-e875359ea302 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Devessier <29370468+Devessier@users.noreply.github.com> Co-authored-by: Devessier <baptiste@devessier.fr>
95 lines
3.3 KiB
TypeScript
95 lines
3.3 KiB
TypeScript
import { CommandGroup } from '@/command-menu/components/CommandGroup';
|
|
import { CommandMenuItem } from '@/command-menu/components/CommandMenuItem';
|
|
import { CommandMenuList } from '@/command-menu/components/CommandMenuList';
|
|
import { WidgetSettingsFooter } from '@/command-menu/pages/page-layout/components/WidgetSettingsFooter';
|
|
import { useNavigatePageLayoutCommandMenu } from '@/command-menu/pages/page-layout/hooks/useNavigatePageLayoutCommandMenu';
|
|
import { usePageLayoutIdForRecordPageLayoutFromContextStoreTargetedRecord } from '@/command-menu/pages/page-layout/hooks/usePageLayoutIdForRecordPageLayoutFromContextStoreTargetedRecord';
|
|
import { useWidgetInEditMode } from '@/command-menu/pages/page-layout/hooks/useWidgetInEditMode';
|
|
import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages';
|
|
import { useTemporaryFieldsConfiguration } from '@/page-layout/hooks/useTemporaryFieldsConfiguration';
|
|
import { SelectableListItem } from '@/ui/layout/selectable-list/components/SelectableListItem';
|
|
import styled from '@emotion/styled';
|
|
import { useLingui } from '@lingui/react/macro';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
import { IconLayoutSidebarRight } from 'twenty-ui/display';
|
|
|
|
const StyledContainer = styled.div`
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
`;
|
|
|
|
const StyledCommandMenuContainer = styled.div`
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1;
|
|
overflow: hidden;
|
|
`;
|
|
|
|
export const CommandMenuPageLayoutFieldsSettings = () => {
|
|
const { t } = useLingui();
|
|
const { navigatePageLayoutCommandMenu } = useNavigatePageLayoutCommandMenu();
|
|
const { pageLayoutId, objectNameSingular } =
|
|
usePageLayoutIdForRecordPageLayoutFromContextStoreTargetedRecord();
|
|
|
|
const { widgetInEditMode } = useWidgetInEditMode(pageLayoutId);
|
|
const fieldsConfiguration =
|
|
useTemporaryFieldsConfiguration(objectNameSingular);
|
|
|
|
if (!isDefined(widgetInEditMode)) {
|
|
return null;
|
|
}
|
|
|
|
const totalFieldsCount = fieldsConfiguration.sections.reduce(
|
|
(count, section) => count + section.fields.length,
|
|
0,
|
|
);
|
|
|
|
const handleNavigateToLayout = () => {
|
|
navigatePageLayoutCommandMenu({
|
|
commandMenuPage: CommandMenuPages.PageLayoutFieldsLayout,
|
|
});
|
|
};
|
|
|
|
const selectableItemIds = [
|
|
'layout',
|
|
'display-more-fields-button',
|
|
'action-button',
|
|
'move-down',
|
|
'move-up',
|
|
'move-to-tab',
|
|
'add-widget-above',
|
|
'add-widget-below',
|
|
'delete',
|
|
];
|
|
|
|
return (
|
|
<StyledContainer>
|
|
<StyledCommandMenuContainer>
|
|
<CommandMenuList
|
|
commandGroups={[]}
|
|
selectableItemIds={selectableItemIds}
|
|
>
|
|
<CommandGroup heading={t`Customize`}>
|
|
<SelectableListItem
|
|
itemId="layout"
|
|
onEnter={handleNavigateToLayout}
|
|
>
|
|
<CommandMenuItem
|
|
id="layout"
|
|
label={t`Layout`}
|
|
Icon={IconLayoutSidebarRight}
|
|
hasSubMenu
|
|
onClick={handleNavigateToLayout}
|
|
description={t`${totalFieldsCount} fields`}
|
|
contextualTextPosition="right"
|
|
/>
|
|
</SelectableListItem>
|
|
</CommandGroup>
|
|
</CommandMenuList>
|
|
</StyledCommandMenuContainer>
|
|
<WidgetSettingsFooter pageLayoutId={pageLayoutId} />
|
|
</StyledContainer>
|
|
);
|
|
};
|