Skip to content

Commit b38b63c

Browse files
committed
ATLAS-5049: [React UI] Unable to add single value type attributes in Business Metadata
1 parent 7502cec commit b38b63c

File tree

8 files changed

+115
-47
lines changed

8 files changed

+115
-47
lines changed

dashboard/src/index.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
@use "@styles/errorPage.scss" as *;
3636
@use "@styles/errorPage.scss" as *;
3737
@use "@styles/customdatepPicker.scss" as *;
38+
@use "@styles/administration.scss" as *;
3839

3940
@font-face {
4041
font-family: "Source Sans 3";

dashboard/src/styles/administration.scss

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@
3232
padding-left: 20px;
3333
}
3434

35-
.audit-results-lsit-item {
36-
display: list-item;
37-
padding-left: 0;
38-
}
39-
4035
.audit-results-entityid {
4136
display: block;
4237
}
38+
39+
.enum-value-selector {
40+
display: inline-grid !important;
41+
grid-template-columns: 1fr !important;
42+
}

dashboard/src/utils/CommonViewFunction.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,3 +305,25 @@ export const generateObjectForSaveSearchApi = (options) => {
305305
return obj;
306306
}
307307
};
308+
309+
export const getTypeName = (
310+
multiValueSelect: boolean,
311+
enumType: string,
312+
rest: any
313+
) => {
314+
if (multiValueSelect) {
315+
switch (rest.typeName) {
316+
case "enumeration":
317+
return `array<${enumType}>`;
318+
default:
319+
return `array<${rest.typeName}>`;
320+
}
321+
} else {
322+
switch (rest.typeName) {
323+
case "enumeration":
324+
return enumType;
325+
default:
326+
return rest.typeName;
327+
}
328+
}
329+
};

dashboard/src/views/BusinessMetadata/BusinessMetadataAtrributeForm.tsx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,23 @@ const BusinessMetadataAttributeForm = ({
154154
await updateEnum(data);
155155
toast.dismiss(toastId.current);
156156
toastId.current = toast.success(
157-
`Enumeration ${enumType} updated
158-
successfully`
157+
`Enumeration ${enumType} updated successfully`
159158
);
160159
} else {
161160
toast.dismiss(toastId.current);
162161
toastId.current = toast.success("No updated values");
163162
}
163+
fields?.forEach((fieldItem: any, idx: number) => {
164+
const fieldEnumType =
165+
attributeDefsWatch &&
166+
attributeDefsWatch(`attributeDefs.${idx}.enumType`);
167+
if (fieldEnumType === enumType) {
168+
attributeDefsSetValue(
169+
`attributeDefs.${idx}.enumValues`,
170+
elementValues
171+
);
172+
}
173+
});
164174
handleCloseEnumModal();
165175
reset({ enumType: "", enumValues: [] });
166176
dispatchState(fetchEnumData());
@@ -170,6 +180,7 @@ const BusinessMetadataAttributeForm = ({
170180
}
171181
};
172182
const handleCloseEnumModal = () => {
183+
reset({ enumType: "", enumValues: [] });
173184
setEnumModal(false);
174185
};
175186

@@ -571,7 +582,7 @@ const BusinessMetadataAttributeForm = ({
571582
}}
572583
size="small"
573584
id="search-by-type"
574-
value={value || []}
585+
value={value || null}
575586
clearIcon={null}
576587
onChange={(_event, newValue) => {
577588
onChange(newValue);
@@ -596,9 +607,6 @@ const BusinessMetadataAttributeForm = ({
596607
}
597608
}}
598609
filterSelectedOptions
599-
isOptionEqualToValue={(option, value) =>
600-
option === value
601-
}
602610
options={
603611
!isEmpty(enumTypes)
604612
? enumTypes.map((option: any) => option)
@@ -612,7 +620,6 @@ const BusinessMetadataAttributeForm = ({
612620
disabled={
613621
isEmpty(editbmAttribute) ? false : true
614622
}
615-
// label="Select type"
616623
InputLabelProps={{
617624
style: {
618625
top: "unset",
@@ -681,11 +688,15 @@ const BusinessMetadataAttributeForm = ({
681688
<Grid item md={7}>
682689
<Autocomplete
683690
size="small"
691+
className="enum-value-selector"
684692
readOnly
685693
disableClearable={true}
686694
multiple={true}
687695
value={watched?.[index]?.enumValues || []}
688696
getOptionLabel={(option) => option.value}
697+
isOptionEqualToValue={(option, value) =>
698+
option.value === value.value
699+
}
689700
data-cy="enumValueSelector"
690701
options={
691702
!isEmpty(enumTypeOptions)

dashboard/src/views/BusinessMetadata/BusinessMetadataForm.tsx

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import { setEditBMAttribute } from "@redux/slice/createBMSlice";
4343
import { cloneDeep } from "@utils/Helper";
4444
import { fetchBusinessMetaData } from "@redux/slice/typeDefSlices/typedefBusinessMetadataSlice";
4545
import { defaultType } from "@utils/Enum";
46+
import { getTypeName } from "@utils/CommonViewFunction";
4647

4748
const BusinessMetaDataForm = ({
4849
setForm,
@@ -77,7 +78,7 @@ const BusinessMetaDataForm = ({
7778
: "enumeration";
7879
let selectedEnumObj = !isEmpty(enumDefs)
7980
? enumDefs.find((obj: { name: any }) => {
80-
return obj.name == typeName;
81+
return obj.name == (str.indexOf("<") != -1 ? extracted : str);
8182
})
8283
: {};
8384
let selectedEnumValues = !isEmpty(selectedEnumObj)
@@ -108,7 +109,9 @@ const BusinessMetaDataForm = ({
108109
: defaultType.includes(typeName)
109110
? typeName
110111
: "enumeration",
111-
...(currentTypeName == "enumeration" && { enumType: typeName }),
112+
...(currentTypeName == "enumeration" && {
113+
enumType: str.indexOf("<") != -1 ? extracted : str
114+
}),
112115
...(currentTypeName == "enumeration" && {
113116
enumValues: enumTypeOptions
114117
}),
@@ -164,9 +167,11 @@ const BusinessMetaDataForm = ({
164167
: defaultType.includes(typeName)
165168
? typeName
166169
: "enumeration";
167-
let selectedEnumObj = enumDefs.find((obj: { name: any }) => {
168-
return obj.name == typeName;
169-
});
170+
let selectedEnumObj = !isEmpty(enumDefs)
171+
? enumDefs.find((obj: { name: any }) => {
172+
return obj.name == (str.indexOf("<") != -1 ? extracted : str);
173+
})
174+
: {};
170175
let selectedEnumValues = !isEmpty(selectedEnumObj)
171176
? selectedEnumObj?.elementDefs
172177
: [];
@@ -189,7 +194,9 @@ const BusinessMetaDataForm = ({
189194
: []
190195
},
191196
typeName: currentTypeName,
192-
...(currentTypeName == "enumeration" && { enumType: typeName }),
197+
...(currentTypeName == "enumeration" && {
198+
enumType: str.indexOf("<") != -1 ? extracted : str
199+
}),
193200
...(currentTypeName == "enumeration" && {
194201
enumValues: enumTypeOptions
195202
}),
@@ -233,6 +240,7 @@ const BusinessMetaDataForm = ({
233240

234241
const onSubmit = async (values: any) => {
235242
let formData = { ...values };
243+
236244
let bmData = cloneDeep(bmAttribute);
237245

238246
const { name, description, attributeDefs } = formData;
@@ -243,24 +251,33 @@ const BusinessMetaDataForm = ({
243251
let attributeDefsData = !isEmpty(attributeDefs) ? [...attributeDefs] : [];
244252

245253
let attributes = !isEmpty(attributeDefsData)
246-
? attributeDefsData.map((item) => ({
247-
...item,
248-
...{
254+
? attributeDefsData.map((item) => {
255+
const { multiValueSelect, enumType, enumValues, ...rest } = item;
256+
257+
const baseObj = {
258+
...rest,
249259
options: {
250260
applicableEntityTypes: JSON.stringify(
251-
item.options.applicableEntityTypes
261+
rest.options.applicableEntityTypes
252262
),
253-
maxStrLength: item.options.maxStrLength
263+
maxStrLength: rest.options.maxStrLength
254264
},
255-
typeName: item.multiValueSelect
256-
? item.typeName == "enumeration"
257-
? item.enumType
258-
: `array<${item.typeName}>`
259-
: item.typeName == "enumeration"
260-
? item.enumType
261-
: `array<${item.typeName}>`
262-
}
263-
}))
265+
...(multiValueSelect && {
266+
multiValueSelect: true,
267+
multiValued: true
268+
}),
269+
...(enumType && {
270+
enumValues: !isEmpty(enumValues)
271+
? enumValues.map((enums: { value: any }) => {
272+
return enums.value;
273+
})
274+
: []
275+
}),
276+
typeName: getTypeName(multiValueSelect, enumType, rest)
277+
};
278+
279+
return baseObj;
280+
})
264281
: [];
265282

266283
let data = {

dashboard/src/views/BusinessMetadata/EnumCreateUpdate.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,12 @@ const EnumCreateUpdate = ({
131131
sx={{ flex: "1" }}
132132
size="small"
133133
value={value}
134-
onChange={(_event, newValue) => {
134+
onChange={(_event, newValue, reason) => {
135+
if (reason == "clear") {
136+
onChange("");
137+
setValue("enumValues", []);
138+
return;
139+
}
135140
if (!isEmpty(newValue.label)) {
136141
onChange(newValue.value);
137142
} else {
@@ -170,6 +175,7 @@ const EnumCreateUpdate = ({
170175

171176
return filtered;
172177
}}
178+
clearIcon={null}
173179
filterSelectedOptions
174180
onBlur={onBlur}
175181
options={
@@ -261,7 +267,6 @@ const EnumCreateUpdate = ({
261267
: []
262268
}
263269
onBlur={onBlur}
264-
className="advanced-search-autocomplete"
265270
renderInput={(params) => (
266271
<TextField
267272
{...params}

dashboard/src/views/DetailPage/BusinessMetadataDetails/BusinessMetadataAtrribute.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ const BusinessMetadataAtrribute = ({ componentProps, row }: any) => {
5656
<span>N/A</span>
5757
),
5858
header: "Type Name",
59-
enableSorting: true
59+
enableSorting: true,
60+
width: "30%"
6061
},
6162
{
6263
accessorKey: "searchWeight",
@@ -176,7 +177,9 @@ const BusinessMetadataAtrribute = ({ componentProps, row }: any) => {
176177
: "enumeration";
177178
let selectedEnumObj = !isEmpty(enumDefs)
178179
? enumDefs.find((obj: { name: any }) => {
179-
return obj.name == typeName;
180+
return (
181+
obj.name == (str.indexOf("<") != -1 ? extracted : str)
182+
);
180183
})
181184
: {};
182185
let selectedEnumValues = !isEmpty(selectedEnumObj)
@@ -208,7 +211,7 @@ const BusinessMetadataAtrribute = ({ componentProps, row }: any) => {
208211
? typeName
209212
: "enumeration",
210213
...(currentTypeName == "enumeration" && {
211-
enumType: typeName
214+
enumType: str.indexOf("<") != -1 ? extracted : str
212215
}),
213216
...(currentTypeName == "enumeration" && {
214217
enumValues: enumTypeOptions

dashboard/src/views/DetailPage/BusinessMetadataDetails/BusinessMetadataDetailsLayout.tsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import { createEditBusinessMetadata } from "@api/apiMethods/typeDefApiMethods";
4545
import { cloneDeep } from "@utils/Helper";
4646
import { defaultAttrObj, defaultType } from "@utils/Enum";
4747
import { fetchBusinessMetaData } from "@redux/slice/typeDefSlices/typedefBusinessMetadataSlice";
48+
import { getTypeName } from "@utils/CommonViewFunction";
4849

4950
const BusinessMetadataDetailsLayout = () => {
5051
const { bmguid } = useParams();
@@ -97,9 +98,10 @@ const BusinessMetadataDetailsLayout = () => {
9798
: "enumeration";
9899
let selectedEnumObj = !isEmpty(enumDefs)
99100
? enumDefs.find((obj: { name: any }) => {
100-
return obj.name == typeName;
101+
return obj.name == (str.indexOf("<") != -1 ? extracted : str);
101102
})
102103
: {};
104+
103105
let selectedEnumValues = !isEmpty(selectedEnumObj)
104106
? selectedEnumObj?.elementDefs
105107
: [];
@@ -129,7 +131,9 @@ const BusinessMetadataDetailsLayout = () => {
129131
: defaultType.includes(typeName)
130132
? typeName
131133
: "enumeration",
132-
...(currentTypeName == "enumeration" && { enumType: typeName }),
134+
...(currentTypeName == "enumeration" && {
135+
enumType: str.indexOf("<") != -1 ? extracted : str
136+
}),
133137
...(currentTypeName == "enumeration" && {
134138
enumValues: enumTypeOptions
135139
}),
@@ -175,7 +179,7 @@ const BusinessMetadataDetailsLayout = () => {
175179
let attributeDefsData = [...formAttributes];
176180

177181
let attributes = attributeDefsData.map((item) => {
178-
const { multiValueSelect, ...rest } = item;
182+
const { multiValueSelect, enumValues, enumType, ...rest } = item;
179183

180184
return {
181185
...rest,
@@ -186,13 +190,18 @@ const BusinessMetadataDetailsLayout = () => {
186190
),
187191
maxStrLength: rest.options.maxStrLength
188192
},
189-
typeName: rest.multiValueSelect
190-
? rest.typeName == "enumeration"
191-
? rest.enumType
192-
: `array<${rest.typeName}>`
193-
: rest.typeName == "enumeration"
194-
? rest.enumType
195-
: `array<${rest.typeName}>`
193+
...(multiValueSelect && {
194+
multiValueSelect: true,
195+
multiValued: true
196+
}),
197+
...(!isEmpty(enumType) && {
198+
enumValues: !isEmpty(enumType)
199+
? enumValues.map((enums: { value: any }) => {
200+
return enums.value;
201+
})
202+
: []
203+
}),
204+
typeName: getTypeName(multiValueSelect, enumType, rest)
196205
}
197206
};
198207
});

0 commit comments

Comments
 (0)