Skip to content

Commit 5f16a2e

Browse files
authored
Update WfoSidebar, add toOptionalArrayEntries (#1845)
* 1821 Update WfoSidebar, add toOptionalArrayEntries * linted
1 parent 21c2886 commit 5f16a2e

File tree

5 files changed

+65
-8
lines changed

5 files changed

+65
-8
lines changed

.changeset/mean-rockets-learn.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@orchestrator-ui/orchestrator-ui-components': minor
3+
---
4+
5+
1821 Update WfoSidebar, add toOptionalArrayEntries

packages/orchestrator-ui-components/src/components/WfoPageTemplate/WfoSidebar/WfoSidebar.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@ import React, { FC, useState } from 'react';
33
import { useTranslations } from 'next-intl';
44
import { useRouter } from 'next/router';
55

6-
import { EuiHorizontalRule, EuiSideNav, EuiSpacer } from '@elastic/eui';
6+
import {
7+
EuiHorizontalRule,
8+
EuiSideNav,
9+
EuiSpacer,
10+
htmlIdGenerator,
11+
} from '@elastic/eui';
712
import { EuiSideNavItemType } from '@elastic/eui/src/components/side_nav/side_nav_types';
813

914
import { WfoIsAllowedToRender, menuItemIsAllowed } from '@/components';
15+
import { WfoMenuItemLink } from '@/components';
1016
import { getMenuStyles } from '@/components/WfoPageTemplate/WfoSidebar/styles';
1117
import { WfoStartWorkflowButtonComboBox } from '@/components/WfoStartButton/WfoStartWorkflowComboBox';
1218
import { PolicyResource } from '@/configuration/policy-resources';
@@ -26,7 +32,6 @@ import {
2632
PATH_WORKFLOWS,
2733
} from '../paths';
2834
import { WfoCopyright } from './WfoCopyright';
29-
import { WfoMenuItemLink } from './WfoMenuLink';
3035

3136
export const urlPolicyMap = new Map<string, PolicyResource>([
3237
[PATH_WORKFLOWS, PolicyResource.NAVIGATION_WORKFLOWS],
@@ -36,11 +41,11 @@ export const urlPolicyMap = new Map<string, PolicyResource>([
3641
[PATH_SETTINGS, PolicyResource.NAVIGATION_SETTINGS],
3742
]);
3843

39-
export const sideNavMenuDivider: EuiSideNavItemType<object> = {
44+
export const createSideNavDivider = (): EuiSideNavItemType<object> => ({
4045
name: '',
41-
id: 'menuDivider',
46+
id: htmlIdGenerator('menuDivider')(),
4247
renderItem: () => <EuiHorizontalRule margin="xs" />,
43-
};
48+
});
4449

4550
export type WfoSidebarProps = {
4651
overrideMenuItems?: (

packages/orchestrator-ui-components/src/components/WfoSettings/WfoModifySettings.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import { useTranslations } from 'next-intl';
44

55
import { EuiFlexItem, EuiPanel, EuiSpacer, EuiText } from '@elastic/eui';
66

7-
import { WfoEngineStatusButton } from './WfoEngineStatusButton';
8-
import { WfoResetTextSearchIndexButton } from './WfoResetTextSearchIndexButton';
7+
import {
8+
WfoEngineStatusButton,
9+
WfoResetTextSearchIndexButton,
10+
} from '@/components';
911

1012
export const WfoModifySettings = () => {
1113
const t = useTranslations('settings.page');

packages/orchestrator-ui-components/src/utils/optionalArray.spec.ts

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { optionalArrayMapper, toOptionalArrayEntry } from './optionalArray';
1+
import {
2+
optionalArrayMapper,
3+
toOptionalArrayEntries,
4+
toOptionalArrayEntry,
5+
} from './optionalArray';
26

37
describe('toOptionalArrayEntry', () => {
48
const testInput = { testField: 'testValue' };
@@ -16,6 +20,42 @@ describe('toOptionalArrayEntry', () => {
1620
});
1721
});
1822

23+
describe('toOptionalArrayEntries', () => {
24+
test('returns data as an array when condition is true and data is not an array', () => {
25+
const result = toOptionalArrayEntries('singleItem', true);
26+
expect(result).toEqual(['singleItem']);
27+
});
28+
29+
test('returns data as it is when condition is true and data is already an array', () => {
30+
const result = toOptionalArrayEntries(['item1', 'item2'], true);
31+
expect(result).toEqual(['item1', 'item2']);
32+
});
33+
34+
test('returns an empty array when condition is false regardless of data type', () => {
35+
const resultWithSingleItem = toOptionalArrayEntries(
36+
'singleItem',
37+
false,
38+
);
39+
const resultWithArray = toOptionalArrayEntries(
40+
['item1', 'item2'],
41+
false,
42+
);
43+
44+
expect(resultWithSingleItem).toEqual([]);
45+
expect(resultWithArray).toEqual([]);
46+
});
47+
48+
test('does not mutate the original data', () => {
49+
const singleItem = 'singleItem';
50+
const arrayData = ['item1', 'item2'];
51+
toOptionalArrayEntries(singleItem, true);
52+
toOptionalArrayEntries(arrayData, true);
53+
54+
expect(singleItem).toBe('singleItem');
55+
expect(arrayData).toEqual(['item1', 'item2']);
56+
});
57+
});
58+
1959
describe('optionalArrayMapper', () => {
2060
it('applies the mapper when data is defined', () => {
2161
const testData = [{ testField: 'testValue' }];

packages/orchestrator-ui-components/src/utils/optionalArray.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ export const toOptionalArrayEntry = <T>(
33
condition: boolean,
44
): [T] | [] => (condition ? [data] : []);
55

6+
export const toOptionalArrayEntries = <T>(
7+
data: T | T[],
8+
condition: boolean,
9+
): T[] => (condition ? (Array.isArray(data) ? data : [data]) : []);
10+
611
export const optionalArrayMapper = <T, U>(
712
data: T[] | undefined = [],
813
mapper: (input: T) => U,

0 commit comments

Comments
 (0)