Skip to content

Commit 92d0ae1

Browse files
committed
Use IconPicker instead
1 parent d2d58ee commit 92d0ae1

File tree

4 files changed

+84
-88
lines changed

4 files changed

+84
-88
lines changed

packages/twenty-front/src/modules/ui/input/components/IconPicker.tsx

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import styled from '@emotion/styled';
2-
import { useMemo, useState } from 'react';
2+
import { ReactNode, useMemo, useState } from 'react';
33

44
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
55
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
@@ -24,6 +24,8 @@ import {
2424
LightIconButton,
2525
} from 'twenty-ui/input';
2626
import { IconPickerHotkeyScope } from '../types/IconPickerHotkeyScope';
27+
import { DropdownOffset } from '@/ui/layout/dropdown/types/DropdownOffset';
28+
2729
export type IconPickerProps = {
2830
disabled?: boolean;
2931
dropdownId?: string;
@@ -35,6 +37,10 @@ export type IconPickerProps = {
3537
variant?: IconButtonVariant;
3638
className?: string;
3739
size?: IconButtonSize;
40+
clickableComponent?: ReactNode;
41+
dropdownWidth?: number;
42+
dropdownOffset?: DropdownOffset;
43+
maxIconsVisible?: number;
3844
};
3945

4046
const StyledMenuIconItemsContainer = styled.div`
@@ -100,6 +106,10 @@ export const IconPicker = ({
100106
variant = 'secondary',
101107
className,
102108
size = 'medium',
109+
clickableComponent,
110+
dropdownWidth,
111+
dropdownOffset,
112+
maxIconsVisible = 25,
103113
}: IconPickerProps) => {
104114
const [searchString, setSearchString] = useState('');
105115
const {
@@ -169,8 +179,8 @@ export const IconPicker = ({
169179
...filteredAndSortedIconKeys.filter(
170180
(iconKey) => iconKey !== selectedIconKey,
171181
),
172-
].slice(0, 25)
173-
: filteredAndSortedIconKeys.slice(0, 25);
182+
].slice(0, maxIconsVisible)
183+
: filteredAndSortedIconKeys.slice(0, maxIconsVisible);
174184
}, [icons, searchString, selectedIconKey]);
175185

176186
const iconKeys2d = useMemo(
@@ -185,21 +195,26 @@ export const IconPicker = ({
185195
<Dropdown
186196
dropdownId={dropdownId}
187197
dropdownHotkeyScope={{ scope: IconPickerHotkeyScope.IconPicker }}
198+
dropdownOffset={dropdownOffset}
188199
clickableComponent={
189-
<IconButton
190-
ariaLabel={`Click to select icon ${
191-
selectedIconKey
192-
? `(selected: ${selectedIconKey})`
193-
: `(no icon selected)`
194-
}`}
195-
disabled={disabled}
196-
Icon={icon}
197-
variant={variant}
198-
size={size}
199-
/>
200+
clickableComponent || (
201+
<IconButton
202+
ariaLabel={`Click to select icon ${
203+
selectedIconKey
204+
? `(selected: ${selectedIconKey})`
205+
: `(no icon selected)`
206+
}`}
207+
disabled={disabled}
208+
Icon={icon}
209+
variant={variant}
210+
size={size}
211+
/>
212+
)
200213
}
201214
dropdownComponents={
202-
<DropdownContent widthInPixels={ICON_PICKER_DROPDOWN_CONTENT_WIDTH}>
215+
<DropdownContent
216+
widthInPixels={dropdownWidth || ICON_PICKER_DROPDOWN_CONTENT_WIDTH}
217+
>
203218
<SelectableList
204219
selectableListInstanceId="icon-list"
205220
selectableItemIdMatrix={iconKeys2d}

packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm.tsx

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ import { useIcons } from 'twenty-ui/display';
1717
import { SelectOption } from 'twenty-ui/input';
1818
import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth';
1919
import { useLingui } from '@lingui/react/macro';
20-
import { COMMAND_MENU_ICON_OPTIONS } from '@/workflow/workflow-trigger/constants/CommandMenuIconOptions';
20+
import { IconPicker } from '@/ui/input/components/IconPicker';
21+
import { SelectControl } from '@/ui/input/components/SelectControl';
22+
import styled from '@emotion/styled';
2123

2224
type WorkflowEditTriggerManualFormProps = {
2325
trigger: WorkflowManualTrigger;
@@ -31,6 +33,23 @@ type WorkflowEditTriggerManualFormProps = {
3133
onTriggerUpdate: (trigger: WorkflowManualTrigger) => void;
3234
};
3335
};
36+
const StyledLabel = styled.span`
37+
color: ${({ theme }) => theme.font.color.light};
38+
font-size: ${({ theme }) => theme.font.size.xs};
39+
font-weight: ${({ theme }) => theme.font.weight.semiBold};
40+
margin-bottom: ${({ theme }) => theme.spacing(1)};
41+
`;
42+
43+
const StyledDescription = styled.span`
44+
color: ${({ theme }) => theme.font.color.light};
45+
font-size: ${({ theme }) => theme.font.size.sm};
46+
margin-top: ${({ theme }) => theme.spacing(0.25)};
47+
`;
48+
49+
const StyledIconPickerContainer = styled.div`
50+
display: flex;
51+
flex-direction: column;
52+
`;
3453

3554
export const WorkflowEditTriggerManualForm = ({
3655
trigger,
@@ -103,6 +122,7 @@ export const WorkflowEditTriggerManualForm = ({
103122
settings: getManualTriggerDefaultSettings({
104123
availability: updatedTriggerType,
105124
activeNonSystemObjectMetadataItems,
125+
icon: trigger.settings.icon,
106126
}),
107127
});
108128
}}
@@ -137,14 +157,35 @@ export const WorkflowEditTriggerManualForm = ({
137157
dropdownWidth={GenericDropdownContentWidth.ExtraLarge}
138158
/>
139159
) : null}
140-
<Select
160+
<IconPicker
141161
dropdownId={'workflow-edit-manual-trigger-icon'}
142-
label={t`Command Menu Icon`}
143-
description={t`The icon your workflow trigger will display in the command menu`}
144-
value={trigger.settings.icon}
145-
options={COMMAND_MENU_ICON_OPTIONS}
146-
withSearchInput
147-
onChange={(icon) => {
162+
selectedIconKey={trigger.settings.icon}
163+
dropdownOffset={{ y: -parseInt(theme.spacing(3), 10) }}
164+
dropdownWidth={GenericDropdownContentWidth.ExtraLarge}
165+
maxIconsVisible={9 * 8} // 9 columns * 8 lines
166+
disabled={triggerOptions.readonly}
167+
clickableComponent={
168+
<StyledIconPickerContainer
169+
onClick={(e) => {
170+
if (triggerOptions.readonly === true) {
171+
e.stopPropagation();
172+
e.preventDefault();
173+
}
174+
}}
175+
>
176+
<StyledLabel>{t`Command menu icon`}</StyledLabel>
177+
<SelectControl
178+
isDisabled={triggerOptions.readonly}
179+
selectedOption={{
180+
Icon: getIcon(trigger.settings.icon),
181+
value: trigger.settings.icon || null,
182+
label: '',
183+
}}
184+
/>
185+
<StyledDescription>{t`The icon your workflow trigger will display in the command menu`}</StyledDescription>
186+
</StyledIconPickerContainer>
187+
}
188+
onChange={({ iconKey }) => {
148189
if (triggerOptions.readonly === true) {
149190
return;
150191
}
@@ -153,12 +194,10 @@ export const WorkflowEditTriggerManualForm = ({
153194
...trigger,
154195
settings: {
155196
...trigger.settings,
156-
icon,
197+
icon: iconKey,
157198
},
158199
});
159200
}}
160-
dropdownOffset={{ y: parseInt(theme.spacing(1), 10) }}
161-
dropdownWidth={GenericDropdownContentWidth.ExtraLarge}
162201
/>
163202
</WorkflowStepBody>
164203
</>

packages/twenty-front/src/modules/workflow/workflow-trigger/constants/CommandMenuIconOptions.ts

Lines changed: 0 additions & 60 deletions
This file was deleted.

packages/twenty-front/src/modules/workflow/workflow-trigger/utils/getManualTriggerDefaultSettings.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,25 @@ import { COMMAND_MENU_DEFAULT_ICON } from '@/workflow/workflow-trigger/constants
99
export const getManualTriggerDefaultSettings = ({
1010
availability,
1111
activeNonSystemObjectMetadataItems,
12+
icon,
1213
}: {
1314
availability: WorkflowManualTriggerAvailability;
1415
activeNonSystemObjectMetadataItems: ObjectMetadataItem[];
16+
icon?: string;
1517
}): WorkflowManualTriggerSettings => {
1618
switch (availability) {
1719
case 'EVERYWHERE': {
1820
return {
1921
objectType: undefined,
2022
outputSchema: {},
21-
icon: COMMAND_MENU_DEFAULT_ICON,
23+
icon: icon || COMMAND_MENU_DEFAULT_ICON,
2224
};
2325
}
2426
case 'WHEN_RECORD_SELECTED': {
2527
return {
2628
objectType: activeNonSystemObjectMetadataItems[0].nameSingular,
2729
outputSchema: {},
28-
icon: COMMAND_MENU_DEFAULT_ICON,
30+
icon: icon || COMMAND_MENU_DEFAULT_ICON,
2931
};
3032
}
3133
}

0 commit comments

Comments
 (0)