Skip to content

Commit 789b865

Browse files
fralongoFrancesco Longo
andauthored
chore: Add selected options values in multiselect analytics metadata (#3679)
Co-authored-by: Francesco Longo <[email protected]>
1 parent 1446c8c commit 789b865

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

src/multiselect/__tests__/analytics-metadata.test.tsx

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@ function renderMultiselectWithSelectedOptions(props: Partial<MultiselectProps>)
5454
return createWrapper(renderResult.container).findMultiselect()!;
5555
}
5656

57-
const getMetadataContexts = (selectedOptionsCount = 0, label = 'multiselect with metadata', disabled?: boolean) => {
57+
const getMetadataContexts = (
58+
selectedOptionsCount = 0,
59+
label = 'multiselect with metadata',
60+
disabled: boolean = false,
61+
selectedOptions: MultiselectProps['selectedOptions'] = []
62+
) => {
5863
const metadata: GeneratedAnalyticsMetadataFragment = {
5964
contexts: [
6065
{
@@ -65,6 +70,7 @@ const getMetadataContexts = (selectedOptionsCount = 0, label = 'multiselect with
6570
properties: {
6671
disabled: disabled ? 'true' : 'false',
6772
selectedOptionsCount: `${selectedOptionsCount}`,
73+
selectedOptionsValues: selectedOptions.map(option => option.value) as Array<string>,
6874
},
6975
},
7076
},
@@ -256,10 +262,23 @@ describe('Multiselect renders correct analytics metadata', () => {
256262
});
257263
});
258264
describe('with selected options', () => {
265+
test('with one selected option', () => {
266+
const wrapper = renderMultiselectWithSelectedOptions({ selectedOptions: [selectedOptions[0]] });
267+
expect(getGeneratedAnalyticsMetadata(wrapper.getElement())).toEqual(
268+
getMetadataContexts(1, undefined, false, [selectedOptions[0]])
269+
);
270+
});
271+
test('with selected options without value', () => {
272+
const wrapper = renderMultiselectWithSelectedOptions({ selectedOptions: [{ label: 'label1' }] });
273+
expect(getGeneratedAnalyticsMetadata(wrapper.getElement())).toEqual(getMetadataContexts(1));
274+
});
275+
259276
test('when readonly', () => {
260277
const wrapper = renderMultiselectWithSelectedOptions({ readOnly: true });
261278
const simpleToken = wrapper.findToken(1)!.findDismiss().getElement();
262-
expect(getGeneratedAnalyticsMetadata(simpleToken)).toEqual(getMetadataContexts(5));
279+
expect(getGeneratedAnalyticsMetadata(simpleToken)).toEqual(
280+
getMetadataContexts(5, undefined, false, selectedOptions)
281+
);
263282
});
264283

265284
test('in dismiss button', () => {
@@ -272,13 +291,13 @@ describe('Multiselect renders correct analytics metadata', () => {
272291
label: 'Dismiss label1',
273292
position: '1',
274293
},
275-
...getMetadataContexts(5),
294+
...getMetadataContexts(5, undefined, false, selectedOptions),
276295
});
277296

278297
const disabledToken = wrapper.findToken(3)!.findDismiss().getElement();
279298
expect(getGeneratedAnalyticsMetadata(disabledToken)).toEqual({
280299
detail: { position: '3' },
281-
...getMetadataContexts(5),
300+
...getMetadataContexts(5, undefined, false, selectedOptions),
282301
});
283302
});
284303

@@ -298,7 +317,7 @@ describe('Multiselect renders correct analytics metadata', () => {
298317
};
299318
expect(getGeneratedAnalyticsMetadata(tokenToggle)).toEqual({
300319
...showMoreMetadata,
301-
...getMetadataContexts(5),
320+
...getMetadataContexts(5, undefined, false, selectedOptions),
302321
});
303322

304323
wrapper.findTokenToggle()!.click();
@@ -310,7 +329,7 @@ describe('Multiselect renders correct analytics metadata', () => {
310329
};
311330
expect(getGeneratedAnalyticsMetadata(wrapper.findTokenToggle()!.getElement())).toEqual({
312331
...showLessMetadata,
313-
...getMetadataContexts(5),
332+
...getMetadataContexts(5, undefined, false, selectedOptions),
314333
});
315334
});
316335
});

src/multiselect/analytics-metadata/interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@ export interface GeneratedAnalyticsMetadataMultiselectComponent {
2525
properties: {
2626
disabled: string;
2727
selectedOptionsCount: string;
28+
selectedOptionsValues: Array<string>;
2829
};
2930
}

src/multiselect/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ const Multiselect = React.forwardRef(
5252
properties: {
5353
disabled: `${!!restProps.disabled}`,
5454
selectedOptionsCount: `${selectedOptions.length}`,
55+
selectedOptionsValues: selectedOptions
56+
.filter(option => option.value !== undefined)
57+
.map(option => `${option.value}`),
5558
},
5659
};
5760

0 commit comments

Comments
 (0)