From eb2a9baadd90ac5ae7f827b9f5666f0713b3f2a8 Mon Sep 17 00:00:00 2001 From: Keith Grant Date: Thu, 7 Jan 2021 11:54:21 -0800 Subject: [PATCH] Convert WorkflowApprovalList to table --- .../ScheduleList/ScheduleListItem.jsx | 2 +- .../WorkflowApprovalList.jsx | 31 ++-- .../WorkflowApprovalListItem.jsx | 89 +++++------ .../WorkflowApprovalListItem.test.jsx | 147 ++++++++++-------- 4 files changed, 137 insertions(+), 132 deletions(-) diff --git a/awx/ui_next/src/components/Schedule/ScheduleList/ScheduleListItem.jsx b/awx/ui_next/src/components/Schedule/ScheduleList/ScheduleListItem.jsx index 3bfcf9fb55..6e71a64e18 100644 --- a/awx/ui_next/src/components/Schedule/ScheduleList/ScheduleListItem.jsx +++ b/awx/ui_next/src/components/Schedule/ScheduleList/ScheduleListItem.jsx @@ -55,7 +55,7 @@ function ScheduleListItem({ i18n, isSelected, onSelect, schedule, rowIndex }) { onSelect, disable: false, }} - dataLabel={i18n._(`Selected`)} + dataLabel={i18n._(t`Selected`)} /> diff --git a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.jsx b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.jsx index bf78d30a8d..f042f301ea 100644 --- a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.jsx +++ b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.jsx @@ -4,9 +4,11 @@ import { withI18n } from '@lingui/react'; import { t } from '@lingui/macro'; import { Card, PageSection } from '@patternfly/react-core'; import { WorkflowApprovalsAPI } from '../../../api'; -import PaginatedDataList, { - ToolbarDeleteButton, -} from '../../../components/PaginatedDataList'; +import PaginatedTable, { + HeaderRow, + HeaderCell, +} from '../../../components/PaginatedTable'; +import { ToolbarDeleteButton } from '../../../components/PaginatedDataList'; import AlertModal from '../../../components/AlertModal'; import ErrorDetail from '../../../components/ErrorDetail'; import DataListToolbar from '../../../components/DataListToolbar'; @@ -155,7 +157,7 @@ function WorkflowApprovalsList({ i18n }) { <> - ( )} - renderItem={workflowApproval => ( + headerRow={ + + {i18n._(t`Name`)} + {i18n._(t`Job`)} + {i18n._(t`Started`)} + {i18n._(t`Status`)} + + } + renderRow={(workflowApproval, index) => ( handleSelect(workflowApproval)} onSuccessfulAction={fetchWorkflowApprovals} + rowIndex={index} /> )} /> diff --git a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.jsx b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.jsx index 085cc33ba2..95aab631ca 100644 --- a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.jsx +++ b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.jsx @@ -2,27 +2,14 @@ import React from 'react'; import { withI18n } from '@lingui/react'; import { t } from '@lingui/macro'; import { string, bool, func } from 'prop-types'; -import { - DataListCheck, - DataListItem, - DataListItemCells, - DataListItemRow, - Label, -} from '@patternfly/react-core'; +import { Label } from '@patternfly/react-core'; +import { Tr, Td } from '@patternfly/react-table'; import { Link } from 'react-router-dom'; import styled from 'styled-components'; -import DataListCell from '../../../components/DataListCell'; import { WorkflowApproval } from '../../../types'; import { formatDateString } from '../../../util/dates'; import WorkflowApprovalStatus from '../shared/WorkflowApprovalStatus'; -const StatusCell = styled(DataListCell)` - @media screen and (min-width: 768px) { - display: flex; - justify-content: flex-end; - } -`; - const JobLabel = styled.b` margin-right: 24px; `; @@ -32,6 +19,7 @@ function WorkflowApprovalListItem({ isSelected, onSelect, detailUrl, + rowIndex, i18n, }) { const labelId = `check-action-${workflowApproval.id}`; @@ -62,44 +50,39 @@ function WorkflowApprovalListItem({ }; return ( - - - - - - {workflowApproval.name} - - , - - <> - {i18n._(t`Job`)} - {workflowJob && workflowJob?.id ? ( - - {`${workflowJob?.id} - ${workflowJob?.name}`} - - ) : ( - i18n._(t`Deleted`) - )} - - , - -
{getStatus()}
-
, - ]} - /> -
-
+ + + + + {workflowApproval.name} + + + + <> + {i18n._(t`Job`)} + {workflowJob && workflowJob?.id ? ( + + {`${workflowJob?.id} - ${workflowJob?.name}`} + + ) : ( + i18n._(t`Deleted`) + )} + + + + {formatDateString(workflowApproval.started)} + + +
{getStatus()}
+ + ); } diff --git a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx index 2709ab2fa9..e64db9f3cc 100644 --- a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx +++ b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx @@ -12,91 +12,112 @@ describe('', () => { afterEach(() => { wrapper.unmount(); }); + test('should display never expires status', () => { wrapper = mountWithContexts( - {}} - workflowApproval={workflowApproval} - /> + + + {}} + workflowApproval={workflowApproval} + /> + +
); expect(wrapper.find('Label[children="Never expires"]').length).toBe(1); }); test('should display timed out status', () => { wrapper = mountWithContexts( - {}} - workflowApproval={{ - ...workflowApproval, - status: 'failed', - timed_out: true, - }} - /> + + + {}} + workflowApproval={{ + ...workflowApproval, + status: 'failed', + timed_out: true, + }} + /> + +
); expect(wrapper.find('Label[children="Timed out"]').length).toBe(1); }); test('should display canceled status', () => { wrapper = mountWithContexts( - {}} - workflowApproval={{ - ...workflowApproval, - canceled_on: '2020-10-09T19:59:26.974046Z', - status: 'canceled', - }} - /> + + + {}} + workflowApproval={{ + ...workflowApproval, + canceled_on: '2020-10-09T19:59:26.974046Z', + status: 'canceled', + }} + /> + +
); expect(wrapper.find('Label[children="Canceled"]').length).toBe(1); }); test('should display approved status', () => { wrapper = mountWithContexts( - {}} - workflowApproval={{ - ...workflowApproval, - status: 'successful', - summary_fields: { - ...workflowApproval.summary_fields, - approved_or_denied_by: { - id: 1, - username: 'admin', - first_name: '', - last_name: '', - }, - }, - }} - /> + + + {}} + workflowApproval={{ + ...workflowApproval, + status: 'successful', + summary_fields: { + ...workflowApproval.summary_fields, + approved_or_denied_by: { + id: 1, + username: 'admin', + first_name: '', + last_name: '', + }, + }, + }} + /> + +
); expect(wrapper.find('Label[children="Approved"]').length).toBe(1); }); test('should display denied status', () => { wrapper = mountWithContexts( - {}} - workflowApproval={{ - ...workflowApproval, - failed: true, - status: 'failed', - summary_fields: { - ...workflowApproval.summary_fields, - approved_or_denied_by: { - id: 1, - username: 'admin', - first_name: '', - last_name: '', - }, - }, - }} - /> + + + {}} + workflowApproval={{ + ...workflowApproval, + failed: true, + status: 'failed', + summary_fields: { + ...workflowApproval.summary_fields, + approved_or_denied_by: { + id: 1, + username: 'admin', + first_name: '', + last_name: '', + }, + }, + }} + /> + +
); expect(wrapper.find('Label[children="Denied"]').length).toBe(1); });