Skip to content

Commit e1105c2

Browse files
committed
Improve interface
Signed-off-by: basseche <[email protected]>
1 parent cef7aef commit e1105c2

File tree

2 files changed

+18
-45
lines changed

2 files changed

+18
-45
lines changed

src/components/inputs/reactHookForm/DirectoryItemsInput.tsx

Lines changed: 14 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { TreeViewFinderNodeProps } from '../../treeViewFinder';
2020
import { OverflowableText } from '../../overflowableText';
2121
import { DirectoryItemSelector } from '../../directoryItemSelector';
2222
import { fetchDirectoryElementPath } from '../../../services';
23-
import { BASE_EQUIPMENTS, ElementAttributes, EquipmentType, mergeSx } from '../../../utils';
23+
import { getBasicEquipmentLabel, ElementAttributes, EquipmentType, mergeSx } from '../../../utils';
2424
import { NAME } from './constants';
2525

2626
const styles = {
@@ -67,11 +67,6 @@ export interface DirectoryItemsInputProps {
6767
equipmentColorsMap?: Map<string, string>;
6868
}
6969

70-
interface EquipmentMetaData {
71-
color: string;
72-
translateLabel: string | undefined;
73-
}
74-
7570
export function DirectoryItemsInput({
7671
label,
7772
name,
@@ -94,14 +89,14 @@ export function DirectoryItemsInput({
9489
const [multiSelect, setMultiSelect] = useState(allowMultiSelect);
9590
const types = useMemo(() => [elementType], [elementType]);
9691
const [directoryItemSelectorOpen, setDirectoryItemSelectorOpen] = useState(false);
97-
const [elementsMetadata, setElementsMetadata] = useState<EquipmentMetaData[]>([]);
9892
const {
9993
fields: elements,
10094
append,
10195
remove,
10296
} = useFieldArray({
10397
name,
10498
});
99+
const elementsWithMetaData: TreeViewFinderNodeProps[] = elements as unknown as TreeViewFinderNodeProps[];
105100

106101
const formContext = useCustomFormContext();
107102
const { getValues, validationSchema } = formContext;
@@ -124,7 +119,6 @@ export function DirectoryItemsInput({
124119
});
125120
}
126121

127-
const currentElementsMetadata = elementsMetadata ? [...elementsMetadata] : [];
128122
values.forEach((value) => {
129123
const { icon, children, ...otherElementAttributes } = value;
130124

@@ -136,49 +130,23 @@ export function DirectoryItemsInput({
136130
});
137131
} else {
138132
append(otherElementAttributes);
139-
if (equipmentColorsMap && value?.specificMetadata?.equipmentType) {
140-
const type: EquipmentType = value?.specificMetadata?.equipmentType as EquipmentType;
141-
currentElementsMetadata.push({
142-
color: equipmentColorsMap.get(value.specificMetadata.equipmentType) ?? '',
143-
translateLabel:
144-
type !== EquipmentType.HVDC_LINE ? BASE_EQUIPMENTS[type]?.label : 'HvdcLines',
145-
});
146-
}
147133
onRowChanged?.(true);
148134
onChange?.(getValues(name));
149135
}
150136
});
151137
setDirectoryItemSelectorOpen(false);
152138
setSelected([]);
153-
if (equipmentColorsMap) {
154-
setElementsMetadata(currentElementsMetadata);
155-
}
156139
},
157-
[
158-
selected,
159-
elementsMetadata,
160-
equipmentColorsMap,
161-
remove,
162-
getValues,
163-
name,
164-
snackError,
165-
append,
166-
onRowChanged,
167-
onChange,
168-
]
140+
[selected, remove, getValues, name, snackError, append, onRowChanged, onChange]
169141
);
170142

171143
const removeElements = useCallback(
172144
(index: number) => {
173145
remove(index);
174146
onRowChanged?.(true);
175147
onChange?.(getValues(name));
176-
if (elementsMetadata?.length > 0) {
177-
const currentColors = [...elementsMetadata.slice(0, index), ...elementsMetadata.slice(index + 1)];
178-
setElementsMetadata(currentColors);
179-
}
180148
},
181-
[remove, onRowChanged, onChange, getValues, name, elementsMetadata]
149+
[remove, onRowChanged, onChange, getValues, name]
182150
);
183151

184152
const handleChipClick = useCallback(
@@ -213,23 +181,24 @@ export function DirectoryItemsInput({
213181
)}
214182
error={!!error?.message}
215183
>
216-
{elements?.length === 0 && label && (
184+
{elementsWithMetaData?.length === 0 && label && (
217185
<FieldLabel
218186
label={label}
219187
optional={labelRequiredFromContext && !isFieldRequired(name, validationSchema, getValues())}
220188
/>
221189
)}
222-
{elements?.length > 0 && (
190+
{elementsWithMetaData?.length > 0 && (
223191
<FormControl sx={styles.formDirectoryElements2}>
224-
{elements.map((item, index) => (
192+
{elementsWithMetaData.map((item, index) => (
225193
<Box key={`Box${item.id}`} sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
226194
<Chip
227195
key={item.id}
228196
size="small"
229197
sx={{
230198
backgroundColor:
231-
elementsMetadata?.length > index
232-
? elementsMetadata?.[index]?.color
199+
item.specificMetadata?.equipmentType &&
200+
equipmentColorsMap?.has(item.specificMetadata?.equipmentType)
201+
? equipmentColorsMap.get(item.specificMetadata.equipmentType)
233202
: undefined,
234203
}}
235204
onDelete={() => removeElements(index)}
@@ -242,12 +211,12 @@ export function DirectoryItemsInput({
242211
}
243212
/>
244213
<FormHelperText>
245-
{elementsMetadata?.[index]?.translateLabel ? (
214+
{item?.specificMetadata?.equipmentType ? (
246215
<FormattedMessage
247216
id={
248-
elementsMetadata?.length > index
249-
? elementsMetadata?.[index]?.translateLabel
250-
: undefined
217+
item.specificMetadata.equipmentType !== EquipmentType.HVDC_LINE
218+
? getBasicEquipmentLabel(item.specificMetadata.equipmentType)
219+
: 'HvdcLines'
251220
}
252221
/>
253222
) : (

src/utils/types/equipmentType.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ export const BASE_EQUIPMENTS: Partial<Record<EquipmentType, { id: EquipmentType;
136136
},
137137
};
138138

139+
export function getBasicEquipmentLabel(equipmentType: string | undefined): string {
140+
return equipmentType ? (BASE_EQUIPMENTS[equipmentType as EquipmentType]?.label ?? '') : '';
141+
}
142+
139143
export const EQUIPMENT_TYPE: Partial<
140144
Record<
141145
EquipmentType | ExtendedEquipmentType,

0 commit comments

Comments
 (0)