Skip to content

Commit 84954d0

Browse files
committed
fix(pci-worklow): fix workflow region sorting
ref: #TAPC-5397 Signed-off-by: Adrien Turmo <[email protected]>
1 parent 06688b4 commit 84954d0

File tree

3 files changed

+88
-4
lines changed

3 files changed

+88
-4
lines changed

packages/manager/apps/pci-workflow/src/api/hooks/workflows.spec.ts

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { act, renderHook, waitFor } from '@testing-library/react';
22
import { describe, expect, it, vi } from 'vitest';
33

4+
import { ColumnSort } from '@ovh-ux/manager-react-components';
5+
46
import { deleteWorkflow } from '@/api/data/workflow';
57
import { wrapper } from '@/wrapperRenders';
68

7-
import { useDeleteWorkflow } from './workflows';
9+
import { TWorkflow, sortWorkflows, useDeleteWorkflow } from './workflows';
810

911
vi.mock('@/api/data/workflow');
1012

@@ -57,3 +59,77 @@ describe('useDeleteWorkflow', () => {
5759
expect(onSuccessMock).not.toHaveBeenCalled();
5860
});
5961
});
62+
63+
describe('sortWorkflows', () => {
64+
it.each([
65+
{
66+
workflows: [
67+
{ id: '1', name: 'zz', region: 'EU-WEST' },
68+
{ id: '2', name: 'aa', region: 'SBG5' },
69+
{ id: '3', name: 'bb', region: 'GRA9' },
70+
] as TWorkflow[],
71+
sorting: undefined,
72+
expectedResults: [
73+
{ id: '1', name: 'zz', region: 'EU-WEST' },
74+
{ id: '2', name: 'aa', region: 'SBG5' },
75+
{ id: '3', name: 'bb', region: 'GRA9' },
76+
] as TWorkflow[],
77+
},
78+
{
79+
workflows: [
80+
{ id: '1', name: 'zz', region: 'EU-WEST' },
81+
{ id: '2', name: 'aa', region: 'SBG5' },
82+
{ id: '3', name: 'bb', region: 'GRA9' },
83+
] as TWorkflow[],
84+
sorting: { id: 'regions', desc: false } as ColumnSort,
85+
expectedResults: [
86+
{ id: '1', name: 'zz', region: 'EU-WEST' },
87+
{ id: '3', name: 'bb', region: 'GRA9' },
88+
{ id: '2', name: 'aa', region: 'SBG5' },
89+
] as TWorkflow[],
90+
},
91+
{
92+
workflows: [
93+
{ id: '1', name: 'zz', region: 'EU-WEST' },
94+
{ id: '2', name: 'aa', region: 'SBG5' },
95+
{ id: '3', name: 'bb', region: 'GRA9' },
96+
] as TWorkflow[],
97+
sorting: { id: 'regions', desc: true } as ColumnSort,
98+
expectedResults: [
99+
{ id: '2', name: 'aa', region: 'SBG5' },
100+
{ id: '3', name: 'bb', region: 'GRA9' },
101+
{ id: '1', name: 'zz', region: 'EU-WEST' },
102+
] as TWorkflow[],
103+
},
104+
{
105+
workflows: [
106+
{ id: '1', name: 'zz', region: 'EU-WEST' },
107+
{ id: '2', name: 'aa', region: 'SBG5' },
108+
{ id: '3', name: 'bb', region: 'GRA9' },
109+
] as TWorkflow[],
110+
sorting: { id: 'name', desc: false } as ColumnSort,
111+
expectedResults: [
112+
{ id: '2', name: 'aa', region: 'SBG5' },
113+
{ id: '3', name: 'bb', region: 'GRA9' },
114+
{ id: '1', name: 'zz', region: 'EU-WEST' },
115+
] as TWorkflow[],
116+
},
117+
{
118+
workflows: [
119+
{ id: '1', name: 'zz', region: 'EU-WEST' },
120+
{ id: '2', name: 'aa', region: 'SBG5' },
121+
{ id: '3', name: 'bb', region: 'GRA9' },
122+
] as TWorkflow[],
123+
sorting: { id: 'name', desc: true } as ColumnSort,
124+
expectedResults: [
125+
{ id: '1', name: 'zz', region: 'EU-WEST' },
126+
{ id: '3', name: 'bb', region: 'GRA9' },
127+
{ id: '2', name: 'aa', region: 'SBG5' },
128+
] as TWorkflow[],
129+
},
130+
])('should sort workflows with $sorting', ({ workflows, sorting, expectedResults }) => {
131+
const result = sortWorkflows(workflows, sorting, []);
132+
133+
expect(result).toEqual(expectedResults);
134+
});
135+
});

packages/manager/apps/pci-workflow/src/api/hooks/workflows.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,15 @@ export const sortWorkflows = (
139139
if (sorting) {
140140
const { id: sortKey, desc } = sorting;
141141

142-
data.sort(defaultCompareFunction(sortKey as keyof Omit<TWorkflow, 'executions'>));
142+
const comparisonFunction = (() => {
143+
if (sortKey === 'regions') {
144+
return (a: TWorkflow, b: TWorkflow) => a.region.localeCompare(b.region);
145+
} else {
146+
return defaultCompareFunction(sortKey as keyof Omit<TWorkflow, 'executions'>);
147+
}
148+
})();
149+
150+
data.sort(comparisonFunction);
143151
if (desc) {
144152
data.reverse();
145153
}

packages/manager/apps/pci-workflow/src/pages/list/List.page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ export default function ListingPage() {
101101
id: 'regions',
102102
label: t('pci_workflow_localisation'),
103103
cell: (workflow) => (
104-
<DataGridTextCell>
105-
{workflow.regions.map(translateMicroRegion).join(', ')}
104+
<DataGridTextCell className="whitespace-pre-line">
105+
{workflow.regions.filter(Boolean).map(translateMicroRegion).join(',\n')}
106106
</DataGridTextCell>
107107
),
108108
},

0 commit comments

Comments
 (0)