From bd6f9f5c978b5129f37862ebaca2fb48db307019 Mon Sep 17 00:00:00 2001 From: Andrew Larned Date: Mon, 24 Feb 2025 13:48:14 -0500 Subject: [PATCH 01/10] feat!: Display additional criteria/system maintenance data [#OCD-4783] --- src/app/api/standards.jsx | 35 +++++ .../certification-criteria-view.jsx | 0 .../certification-criteria.jsx | 0 .../certification-criteria.test.jsx | 0 .../conformance-methods-view.jsx | 99 +++++++++++++++ .../conformance-methods.jsx | 60 +++++++++ .../system-maintenance/cqm/cqms-view.jsx | 120 ++++++++++++++++++ .../system-maintenance/cqm/cqms.jsx | 60 +++++++++ .../test-data/test-data-view.jsx | 94 ++++++++++++++ .../test-data/test-data.jsx | 60 +++++++++ .../system-maintenance/system-maintenance.jsx | 26 +++- 11 files changed, 553 insertions(+), 1 deletion(-) rename src/app/components/system-maintenance/{certification-criteria => certification-criterion}/certification-criteria-view.jsx (100%) rename src/app/components/system-maintenance/{certification-criteria => certification-criterion}/certification-criteria.jsx (100%) rename src/app/components/system-maintenance/{certification-criteria => certification-criterion}/certification-criteria.test.jsx (100%) create mode 100755 src/app/components/system-maintenance/conformance-method/conformance-methods-view.jsx create mode 100755 src/app/components/system-maintenance/conformance-method/conformance-methods.jsx create mode 100755 src/app/components/system-maintenance/cqm/cqms-view.jsx create mode 100755 src/app/components/system-maintenance/cqm/cqms.jsx create mode 100755 src/app/components/system-maintenance/test-data/test-data-view.jsx create mode 100755 src/app/components/system-maintenance/test-data/test-data.jsx diff --git a/src/app/api/standards.jsx b/src/app/api/standards.jsx index 6a92277199..8d1404cf3e 100755 --- a/src/app/api/standards.jsx +++ b/src/app/api/standards.jsx @@ -84,6 +84,30 @@ const useFetchAccessibilityStandards = () => { }); }; +const useFetchConformanceMethods = () => { + const axios = useAxios(); + return useQuery(['conformance-methods'], async () => { + const response = await axios.get('conformance-methods'); + return response.data; + }); +}; + +const useFetchCqms = (props = { active: true }) => { + const params = Object + .entries(props) + .filter(([key, value]) => key !== 'active' && value) + .filter(([key]) => (key !== 'active')) + .map(([key, value]) => `${key}=${value}`) + .join('&'); + let query = 'cqms'; + if (params.length > 0) { query += `?${params}`; } + const axios = useAxios(); + return useQuery(['cqms', params], async () => { + const response = await axios.get(query); + return response.data.filter((cc) => !props.active || cc.startDay < jsJoda.LocalDate.now()); + }); +}; + const useFetchCriteria = (props = { enabled: true, active: true }) => { const params = Object .entries(props) @@ -174,6 +198,14 @@ const useFetchSvaps = () => { }); }; +const useFetchTestData = () => { + const axios = useAxios(); + return useQuery(['test-data'], async () => { + const response = await axios.get('data/test_data'); + return response.data.data; + }); +}; + const useFetchTestTools = () => { const axios = useAxios(); return useQuery(['test-tools'], async () => { @@ -345,6 +377,8 @@ export { useDeleteTestTool, useDeleteUcdProcess, useFetchAccessibilityStandards, + useFetchConformanceMethods, + useFetchCqms, useFetchCriteria, useFetchCriteriaForFunctionalitiesTested, useFetchCriteriaForStandards, @@ -355,6 +389,7 @@ export { useFetchRules, useFetchStandards, useFetchSvaps, + useFetchTestData, useFetchTestTools, useFetchUcdProcesses, usePostAccessibilityStandard, diff --git a/src/app/components/system-maintenance/certification-criteria/certification-criteria-view.jsx b/src/app/components/system-maintenance/certification-criterion/certification-criteria-view.jsx similarity index 100% rename from src/app/components/system-maintenance/certification-criteria/certification-criteria-view.jsx rename to src/app/components/system-maintenance/certification-criterion/certification-criteria-view.jsx diff --git a/src/app/components/system-maintenance/certification-criteria/certification-criteria.jsx b/src/app/components/system-maintenance/certification-criterion/certification-criteria.jsx similarity index 100% rename from src/app/components/system-maintenance/certification-criteria/certification-criteria.jsx rename to src/app/components/system-maintenance/certification-criterion/certification-criteria.jsx diff --git a/src/app/components/system-maintenance/certification-criteria/certification-criteria.test.jsx b/src/app/components/system-maintenance/certification-criterion/certification-criteria.test.jsx similarity index 100% rename from src/app/components/system-maintenance/certification-criteria/certification-criteria.test.jsx rename to src/app/components/system-maintenance/certification-criterion/certification-criteria.test.jsx diff --git a/src/app/components/system-maintenance/conformance-method/conformance-methods-view.jsx b/src/app/components/system-maintenance/conformance-method/conformance-methods-view.jsx new file mode 100755 index 0000000000..d993cd3955 --- /dev/null +++ b/src/app/components/system-maintenance/conformance-method/conformance-methods-view.jsx @@ -0,0 +1,99 @@ +import React, { useEffect, useState } from 'react'; +import { + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableRow, + makeStyles, +} from '@material-ui/core'; +import { arrayOf, object } from 'prop-types'; + +import { ChplSortableHeaders, sortComparator } from 'components/util/sortable-headers'; +import { sortCriteria } from 'services/criteria.service'; +import { getDisplayDateFormat } from 'services/date-util'; +import { utilStyles } from 'themes'; + +const headers = [ + { property: 'name', text: 'Name', sortable: true }, + { property: 'removalDate', text: 'Removal Date', sortable: true }, + { text: 'Applicable Criteria' }, +]; + +const useStyles = makeStyles({ + ...utilStyles, +}); + +function ChplConformanceMethodsView({ conformanceMethods: initialConformanceMethods }) { + const [conformanceMethods, setConformanceMethods] = useState([]); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState('name'); + const classes = useStyles(); + + useEffect(() => { + setConformanceMethods(initialConformanceMethods + .map((item) => ({ + ...item, + criteriaDisplay: item.criteria + .sort(sortCriteria) + .map((c) => c.number) + .join(', '), + })) + .sort(sortComparator('name'))); + }, [initialConformanceMethods]); + + const handleTableSort = (event, property, orderDirection) => { + const descending = orderDirection === 'desc'; + const updated = conformanceMethods.sort(sortComparator(property, descending)); + setOrderBy(property); + setOrder(orderDirection); + setConformanceMethods(updated); + }; + + return ( + <> + + + + + { conformanceMethods + .map((item) => ( + + + { item.removed + && ( + <> + Removed | + + )} + { item.name } + + + { getDisplayDateFormat(item.removalDate) } + + + { item.criteriaDisplay } + + + ))} + +
+
+ + ); +} + +export default ChplConformanceMethodsView; + +ChplConformanceMethodsView.propTypes = { + conformanceMethods: arrayOf(object).isRequired, +}; diff --git a/src/app/components/system-maintenance/conformance-method/conformance-methods.jsx b/src/app/components/system-maintenance/conformance-method/conformance-methods.jsx new file mode 100755 index 0000000000..fa8f018cc3 --- /dev/null +++ b/src/app/components/system-maintenance/conformance-method/conformance-methods.jsx @@ -0,0 +1,60 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { + Button, + Card, + CardContent, + CardHeader, + CircularProgress, +} from '@material-ui/core'; + +import ChplConformanceMethodsView from './conformance-methods-view'; + +import { useFetchConformanceMethods } from 'api/standards'; +import { BreadcrumbContext } from 'shared/contexts'; + +function ChplConformanceMethods() { + const { append, display } = useContext(BreadcrumbContext); + const { data, isLoading, isSuccess } = useFetchConformanceMethods(); + const [conformanceMethods, setConformanceMethods] = useState([]); + + useEffect(() => { + append( + , + ); + display('conformanceMethods.viewall.disabled'); + }, []); + + useEffect(() => { + if (isLoading || !isSuccess) { return; } + setConformanceMethods(data); + }, [data, isLoading, isSuccess]); + + if (isLoading) { + return ( + + ); + } + + return ( + + + + + + + ); +} + +export default ChplConformanceMethods; + +ChplConformanceMethods.propTypes = { +}; diff --git a/src/app/components/system-maintenance/cqm/cqms-view.jsx b/src/app/components/system-maintenance/cqm/cqms-view.jsx new file mode 100755 index 0000000000..bc1ba0143a --- /dev/null +++ b/src/app/components/system-maintenance/cqm/cqms-view.jsx @@ -0,0 +1,120 @@ +import React, { useEffect, useState } from 'react'; +import { + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableRow, + makeStyles, +} from '@material-ui/core'; +import { arrayOf } from 'prop-types'; + +import { ChplLink } from 'components/util'; +import { ChplSortableHeaders, sortComparator } from 'components/util/sortable-headers'; +import { getDisplayDateFormat } from 'services/date-util'; +import { cqm as cqmPropType } from 'shared/prop-types'; +import { utilStyles } from 'themes'; + +const headers = [ + { property: 'number', text: 'Number', sortable: true }, + { property: 'title', text: 'Title', sortable: true }, + { property: 'startDay', text: 'Start Date', sortable: true }, + { property: 'endDay', text: 'End Date', sortable: true }, + { text: 'Certification Companion Guide' }, + { text: 'Rule' }, + { text: 'Attributes' }, +]; + +const useStyles = makeStyles({ + ...utilStyles, +}); + +function ChplCqmsView({ cqms: initialCqms }) { + const [cqms, setCqms] = useState([]); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState('value'); + const classes = useStyles(); + + useEffect(() => { + setCqms(initialCqms + .sort(sortComparator('value'))); + }, [initialCqms]); + + const handleTableSort = (event, property, orderDirection) => { + const descending = orderDirection === 'desc'; + const updated = cqms.sort(sortComparator(property, descending)); + setOrderBy(property); + setOrder(orderDirection); + setCqms(updated); + }; + + return ( + <> + + + + + { cqms + .map((item) => ( + + + { item.removed + && ( + <> + Removed | + + )} + { item.number } + + + { item.title } + + + { getDisplayDateFormat(item.startDay) } + + + { getDisplayDateFormat(item.endDay) } + + + { item.companionGuideLink + && ( + + )} + { !item.companionGuideLink + && ( + 'N/A' + )} + + + { item.rule?.name } + + + { item.displayAttributes.length > 0 ? item.displayAttributes : 'N/A' } + + + ))} + +
+
+ + ); +} + +export default ChplCqmsView; + +ChplCqmsView.propTypes = { + cqms: arrayOf(cqmPropType).isRequired, +}; diff --git a/src/app/components/system-maintenance/cqm/cqms.jsx b/src/app/components/system-maintenance/cqm/cqms.jsx new file mode 100755 index 0000000000..0153931ba6 --- /dev/null +++ b/src/app/components/system-maintenance/cqm/cqms.jsx @@ -0,0 +1,60 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { + Button, + Card, + CardContent, + CardHeader, + CircularProgress, +} from '@material-ui/core'; + +import ChplCqmsView from './cqms-view'; + +import { useFetchCqms } from 'api/standards'; +import { BreadcrumbContext } from 'shared/contexts'; + +function ChplCqms() { + const { append, display } = useContext(BreadcrumbContext); + const { data, isLoading, isSuccess } = useFetchCqms({ active: false }); + const [cqms, setCqms] = useState([]); + + useEffect(() => { + append( + , + ); + display('cqms.viewall.disabled'); + }, []); + + useEffect(() => { + if (isLoading || !isSuccess) { return; } + setCqms(data); + }, [data, isLoading, isSuccess]); + + if (isLoading) { + return ( + + ); + } + + return ( + + + + + + + ); +} + +export default ChplCqms; + +ChplCqms.propTypes = { +}; diff --git a/src/app/components/system-maintenance/test-data/test-data-view.jsx b/src/app/components/system-maintenance/test-data/test-data-view.jsx new file mode 100755 index 0000000000..874e9f9ec6 --- /dev/null +++ b/src/app/components/system-maintenance/test-data/test-data-view.jsx @@ -0,0 +1,94 @@ +import React, { useEffect, useState } from 'react'; +import { + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableRow, + makeStyles, +} from '@material-ui/core'; +import { arrayOf, object } from 'prop-types'; + +import { ChplSortableHeaders, sortComparator } from 'components/util/sortable-headers'; +import { utilStyles } from 'themes'; + +const headers = [ + { property: 'name', text: 'Name', sortable: true }, + { property: 'description', text: 'Description', sortable: true }, + { text: 'Applicable Criteria' }, +]; + +const useStyles = makeStyles({ + ...utilStyles, +}); + +function ChplTestDataView({ testData: initialTestData }) { + const [testData, setTestData] = useState([]); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState('name'); + const classes = useStyles(); + + useEffect(() => { + setTestData(initialTestData + .map((item) => ({ + ...item, + criteriaDisplay: item.criteria.number, + })) + .sort(sortComparator('name'))); + }, [initialTestData]); + + const handleTableSort = (event, property, orderDirection) => { + const descending = orderDirection === 'desc'; + const updated = testData.sort(sortComparator(property, descending)); + setOrderBy(property); + setOrder(orderDirection); + setTestData(updated); + }; + + return ( + <> + + + + + { testData + .map((item) => ( + + + { item.removed + && ( + <> + Removed | + + )} + { item.name } + + + { item.description } + + + { item.criteriaDisplay } + + + ))} + +
+
+ + ); +} + +export default ChplTestDataView; + +ChplTestDataView.propTypes = { + testData: arrayOf(object).isRequired, +}; diff --git a/src/app/components/system-maintenance/test-data/test-data.jsx b/src/app/components/system-maintenance/test-data/test-data.jsx new file mode 100755 index 0000000000..0f60878cf2 --- /dev/null +++ b/src/app/components/system-maintenance/test-data/test-data.jsx @@ -0,0 +1,60 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { + Button, + Card, + CardContent, + CardHeader, + CircularProgress, +} from '@material-ui/core'; + +import ChplTestDataView from './test-data-view'; + +import { useFetchTestData } from 'api/standards'; +import { BreadcrumbContext } from 'shared/contexts'; + +function ChplTestData() { + const { append, display } = useContext(BreadcrumbContext); + const { data, isLoading, isSuccess } = useFetchTestData(); + const [testData, setTestData] = useState([]); + + useEffect(() => { + append( + , + ); + display('testData.viewall.disabled'); + }, []); + + useEffect(() => { + if (isLoading || !isSuccess) { return; } + setTestData(data); + }, [data, isLoading, isSuccess]); + + if (isLoading) { + return ( + + ); + } + + return ( + + + + + + + ); +} + +export default ChplTestData; + +ChplTestData.propTypes = { +}; diff --git a/src/app/pages/administration/system-maintenance/system-maintenance.jsx b/src/app/pages/administration/system-maintenance/system-maintenance.jsx index 19fa5042b1..03aea1bf8f 100755 --- a/src/app/pages/administration/system-maintenance/system-maintenance.jsx +++ b/src/app/pages/administration/system-maintenance/system-maintenance.jsx @@ -27,13 +27,16 @@ import BeenhereOutlinedIcon from '@material-ui/icons/BeenhereOutlined'; import ChplAccessibilityStandards from 'components/system-maintenance/accessibility-standard/accessibility-standards'; import ChplAnnouncements from 'components/system-maintenance/announcement/announcements'; import ChplApiKeys from 'components/system-maintenance/api-key/api-keys'; -import ChplCertificationCriteria from 'components/system-maintenance/certification-criteria/certification-criteria'; +import ChplCertificationCriteria from 'components/system-maintenance/certification-criterion/certification-criteria'; +import ChplConformanceMethods from 'components/system-maintenance/conformance-method/conformance-methods'; +import ChplCqms from 'components/system-maintenance/cqm/cqms'; import ChplFunctionalitiesTested from 'components/system-maintenance/functionality-tested/functionalities-tested'; import ChplManageSubscriptions from 'pages/subscriptions/manage-subscriptions'; import ChplQmsStandards from 'components/system-maintenance/qms-standard/qms-standards'; import ChplStandards from 'components/system-maintenance/standard/standards'; import ChplSvaps from 'components/system-maintenance/svap/svaps'; import ChplSystemJobs from 'components/jobs/system-jobs'; +import ChplTestData from 'components/system-maintenance/test-data/test-data'; import ChplTestTools from 'components/system-maintenance/test-tool/test-tools'; import ChplUcdProcesses from 'components/system-maintenance/ucd-process/ucd-processes'; import { eventTrack } from 'services/analytics.service'; @@ -124,6 +127,16 @@ const maintenanceItems = [{ primary: 'Certification Criteria', secondary: 'Table of the Certification Criteria values', icon: , +}, { + id: 'conformanceMethods', + primary: 'Conformance Methods', + secondary: 'Table of Conformance Methods', + icon: , +}, { + id: 'cqms', + primary: 'CQMs', + secondary: 'Table of the CQM values', + icon: , }, { id: 'functionalitiesTested', primary: 'Functionalities Tested', @@ -156,6 +169,11 @@ const maintenanceItems = [{ secondary: 'View and schedule system-related jobs', roles: ['chpl-admin'], icon: , +}, { + id: 'testData', + primary: 'Test Data', + secondary: 'Table of Test Data', + icon: , }, { id: 'testTools', primary: 'Test Tools', @@ -228,6 +246,8 @@ function ChplSystemMaintenance() { hide('announcements.edit.disabled'); hide('apiKeys.viewall.disabled'); hide('certificationCriteria.viewall.disabled'); + hide('conformanceMethods.viewall.disabled'); + hide('cqms.viewall.disabled'); hide('functionalitiesTested.viewall.disabled'); hide('functionalitiesTested.viewall'); hide('functionalitiesTested.add.disabled'); @@ -241,6 +261,7 @@ function ChplSystemMaintenance() { hide('standards.viewall'); hide('standards.add.disabled'); hide('standards.edit.disabled'); + hide('testData.viewall.disabled'); hide('testTools.viewall.disabled'); hide('testTools.viewall'); hide('testTools.add.disabled'); @@ -315,12 +336,15 @@ function ChplSystemMaintenance() { { active === 'announcements' && } { active === 'apiKeys' && } { active === 'certificationCriteria' && } + { active === 'conformanceMethods' && } + { active === 'cqms' && } { active === 'qmsStandards' && } { active === 'functionalitiesTested' && } { active === 'subscriptions' && } { active === 'standards' && } { active === 'svaps' && } { active === 'systemJobs' && } + { active === 'testData' && } { active === 'testTools' && } { active === 'ucdProcesses' && } From 5205e4172a929c70718db3fd62ca6855cfcbe612 Mon Sep 17 00:00:00 2001 From: Matthew Stankiewicz Date: Mon, 24 Feb 2025 14:50:22 -0500 Subject: [PATCH 02/10] ui: add addtional icons to system maintenance and alphabetized icons [#OCD-4783] --- .../system-maintenance/system-maintenance.jsx | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/app/pages/administration/system-maintenance/system-maintenance.jsx b/src/app/pages/administration/system-maintenance/system-maintenance.jsx index 03aea1bf8f..5dc6574cf9 100755 --- a/src/app/pages/administration/system-maintenance/system-maintenance.jsx +++ b/src/app/pages/administration/system-maintenance/system-maintenance.jsx @@ -11,18 +11,21 @@ import { Divider, ListItemText, } from '@material-ui/core'; -import CodeOutlinedIcon from '@material-ui/icons/CodeOutlined'; +import AccessibilityNewOutlinedIcon from '@material-ui/icons/AccessibilityNewOutlined'; import AnnouncementOutlinedIcon from '@material-ui/icons/AnnouncementOutlined'; -import SubscriptionsOutlinedIcon from '@material-ui/icons/SubscriptionsOutlined'; +import AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined'; +import AssignmentTurnedInOutlinedIcon from '@material-ui/icons/AssignmentTurnedInOutlined'; +import BeenhereOutlinedIcon from '@material-ui/icons/BeenhereOutlined'; import BookOutlinedIcon from '@material-ui/icons/BookOutlined'; -import TrendingUpOutlinedIcon from '@material-ui/icons/TrendingUpOutlined'; +import BuildOutlinedIcon from '@material-ui/icons/BuildOutlined'; +import CodeOutlinedIcon from '@material-ui/icons/CodeOutlined'; +import DataUsageOutlinedIcon from '@material-ui/icons/DataUsageOutlined'; import PlaylistAddCheckOutlinedIcon from '@material-ui/icons/PlaylistAddCheckOutlined'; -import AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined'; -import AccessibilityNewOutlinedIcon from '@material-ui/icons/AccessibilityNewOutlined'; import PlayArrowOutlinedIcon from '@material-ui/icons/PlayArrowOutlined'; +import SpeedOutlinedIcon from '@material-ui/icons/SpeedOutlined'; +import SubscriptionsOutlinedIcon from '@material-ui/icons/SubscriptionsOutlined'; import TouchAppOutlinedIcon from '@material-ui/icons/TouchAppOutlined'; -import BuildOutlinedIcon from '@material-ui/icons/BuildOutlined'; -import BeenhereOutlinedIcon from '@material-ui/icons/BeenhereOutlined'; +import TrendingUpOutlinedIcon from '@material-ui/icons/TrendingUpOutlined'; import ChplAccessibilityStandards from 'components/system-maintenance/accessibility-standard/accessibility-standards'; import ChplAnnouncements from 'components/system-maintenance/announcement/announcements'; @@ -131,12 +134,12 @@ const maintenanceItems = [{ id: 'conformanceMethods', primary: 'Conformance Methods', secondary: 'Table of Conformance Methods', - icon: , + icon: , }, { id: 'cqms', primary: 'CQMs', secondary: 'Table of the CQM values', - icon: , + icon: , }, { id: 'functionalitiesTested', primary: 'Functionalities Tested', @@ -146,7 +149,7 @@ const maintenanceItems = [{ id: 'qmsStandards', primary: 'QMS Standards', secondary: 'Add and update the QMS Standards available to be applied to listings', - icon: , + icon: , }, { id: 'standards', primary: 'Standards', @@ -173,7 +176,7 @@ const maintenanceItems = [{ id: 'testData', primary: 'Test Data', secondary: 'Table of Test Data', - icon: , + icon: , }, { id: 'testTools', primary: 'Test Tools', From 64596b64c873e754eeb45da377be810bc65a66d3 Mon Sep 17 00:00:00 2001 From: Andrew Larned Date: Mon, 24 Feb 2025 15:05:41 -0500 Subject: [PATCH 03/10] feat: handle g1/g2 measures and code sets [#OCD-4783] --- src/app/api/standards.jsx | 18 ++++ .../code-set/code-sets-view.jsx | 97 +++++++++++++++++++ .../system-maintenance/code-set/code-sets.jsx | 60 ++++++++++++ .../system-maintenance/g1g2/g1g2-view.jsx | 97 +++++++++++++++++++ .../system-maintenance/g1g2/g1g2.jsx | 60 ++++++++++++ .../system-maintenance/system-maintenance.jsx | 20 +++- 6 files changed, 350 insertions(+), 2 deletions(-) create mode 100755 src/app/components/system-maintenance/code-set/code-sets-view.jsx create mode 100755 src/app/components/system-maintenance/code-set/code-sets.jsx create mode 100755 src/app/components/system-maintenance/g1g2/g1g2-view.jsx create mode 100755 src/app/components/system-maintenance/g1g2/g1g2.jsx diff --git a/src/app/api/standards.jsx b/src/app/api/standards.jsx index 8d1404cf3e..3965d8ae8f 100755 --- a/src/app/api/standards.jsx +++ b/src/app/api/standards.jsx @@ -84,6 +84,14 @@ const useFetchAccessibilityStandards = () => { }); }; +const useFetchCodeSets = () => { + const axios = useAxios(); + return useQuery(['code-sets'], async () => { + const response = await axios.get('code-sets'); + return response.data; + }); +}; + const useFetchConformanceMethods = () => { const axios = useAxios(); return useQuery(['conformance-methods'], async () => { @@ -166,6 +174,14 @@ const useFetchFunctionalitiesTested = () => { }); }; +const useFetchG1g2 = () => { + const axios = useAxios(); + return useQuery(['g1g2'], async () => { + const response = await axios.get('g1g2'); + return response.data; + }); +}; + const useFetchQmsStandards = () => { const axios = useAxios(); return useQuery(['qms-standards'], async () => { @@ -377,6 +393,7 @@ export { useDeleteTestTool, useDeleteUcdProcess, useFetchAccessibilityStandards, + useFetchCodeSets, useFetchConformanceMethods, useFetchCqms, useFetchCriteria, @@ -385,6 +402,7 @@ export { useFetchCriteriaForSvaps, useFetchCriteriaForTestTools, useFetchFunctionalitiesTested, + useFetchG1g2, useFetchQmsStandards, useFetchRules, useFetchStandards, diff --git a/src/app/components/system-maintenance/code-set/code-sets-view.jsx b/src/app/components/system-maintenance/code-set/code-sets-view.jsx new file mode 100755 index 0000000000..93926afe7a --- /dev/null +++ b/src/app/components/system-maintenance/code-set/code-sets-view.jsx @@ -0,0 +1,97 @@ +import React, { useEffect, useState } from 'react'; +import { + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableRow, + makeStyles, +} from '@material-ui/core'; +import { arrayOf, object } from 'prop-types'; + +import { ChplSortableHeaders, sortComparator } from 'components/util/sortable-headers'; +import { sortCriteria } from 'services/criteria.service'; +import { getDisplayDateFormat } from 'services/date-util'; +import { utilStyles } from 'themes'; + +const headers = [ + { property: 'name', text: 'Name', sortable: true }, + { property: 'startDay', text: 'Start Date', sortable: true }, + { property: 'requiredDay', text: 'Required Date', sortable: true }, + { text: 'Applicable Criteria' }, +]; + +const useStyles = makeStyles({ + ...utilStyles, +}); + +function ChplCodeSetsView({ codeSets: initialCodeSets }) { + const [codeSets, setCodeSets] = useState([]); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState('name'); + const classes = useStyles(); + + useEffect(() => { + setCodeSets(initialCodeSets + .map((item) => ({ + ...item, + criteriaDisplay: item.criteria + .sort(sortCriteria) + .map((c) => c.number) + .join(', '), + })) + .sort(sortComparator('name'))); + }, [initialCodeSets]); + + const handleTableSort = (event, property, orderDirection) => { + const descending = orderDirection === 'desc'; + const updated = codeSets.sort(sortComparator(property, descending)); + setOrderBy(property); + setOrder(orderDirection); + setCodeSets(updated); + }; + + return ( + <> + + + + + { codeSets + .map((item) => ( + + + { item.name } + + + { getDisplayDateFormat(item.startDay) } + + + { getDisplayDateFormat(item.requiredDay) } + + + { item.criteriaDisplay } + + + ))} + +
+
+ + ); +} + +export default ChplCodeSetsView; + +ChplCodeSetsView.propTypes = { + codeSets: arrayOf(object).isRequired, +}; diff --git a/src/app/components/system-maintenance/code-set/code-sets.jsx b/src/app/components/system-maintenance/code-set/code-sets.jsx new file mode 100755 index 0000000000..77a2dd2740 --- /dev/null +++ b/src/app/components/system-maintenance/code-set/code-sets.jsx @@ -0,0 +1,60 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { + Button, + Card, + CardContent, + CardHeader, + CircularProgress, +} from '@material-ui/core'; + +import ChplCodeSetsView from './code-sets-view'; + +import { useFetchCodeSets } from 'api/standards'; +import { BreadcrumbContext } from 'shared/contexts'; + +function ChplCodeSets() { + const { append, display } = useContext(BreadcrumbContext); + const { data, isLoading, isSuccess } = useFetchCodeSets(); + const [codeSets, setCodeSets] = useState([]); + + useEffect(() => { + append( + , + ); + display('codeSets.viewall.disabled'); + }, []); + + useEffect(() => { + if (isLoading || !isSuccess) { return; } + setCodeSets(data); + }, [data, isLoading, isSuccess]); + + if (isLoading) { + return ( + + ); + } + + return ( + + + + + + + ); +} + +export default ChplCodeSets; + +ChplCodeSets.propTypes = { +}; diff --git a/src/app/components/system-maintenance/g1g2/g1g2-view.jsx b/src/app/components/system-maintenance/g1g2/g1g2-view.jsx new file mode 100755 index 0000000000..b792763c26 --- /dev/null +++ b/src/app/components/system-maintenance/g1g2/g1g2-view.jsx @@ -0,0 +1,97 @@ +import React, { useEffect, useState } from 'react'; +import { + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableRow, + makeStyles, +} from '@material-ui/core'; +import { arrayOf, object } from 'prop-types'; + +import { ChplSortableHeaders, sortComparator } from 'components/util/sortable-headers'; +import { sortCriteria } from 'services/criteria.service'; +import { getDisplayDateFormat } from 'services/date-util'; +import { utilStyles } from 'themes'; + +const headers = [ + { property: 'name', text: 'Name', sortable: true }, + { property: 'startDay', text: 'Start Date', sortable: true }, + { property: 'requiredDay', text: 'Required Date', sortable: true }, + { text: 'Applicable Criteria' }, +]; + +const useStyles = makeStyles({ + ...utilStyles, +}); + +function ChplG1g2View({ g1g2: initialG1g2 }) { + const [g1g2, setG1g2] = useState([]); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState('name'); + const classes = useStyles(); + + useEffect(() => { + setG1g2(initialG1g2 + .map((item) => ({ + ...item, + criteriaDisplay: item.criteria + .sort(sortCriteria) + .map((c) => c.number) + .join(', '), + })) + .sort(sortComparator('name'))); + }, [initialG1g2]); + + const handleTableSort = (event, property, orderDirection) => { + const descending = orderDirection === 'desc'; + const updated = g1g2.sort(sortComparator(property, descending)); + setOrderBy(property); + setOrder(orderDirection); + setG1g2(updated); + }; + + return ( + <> + + + + + { g1g2 + .map((item) => ( + + + { item.name } + + + { getDisplayDateFormat(item.startDay) } + + + { getDisplayDateFormat(item.requiredDay) } + + + { item.criteriaDisplay } + + + ))} + +
+
+ + ); +} + +export default ChplG1g2View; + +ChplG1g2View.propTypes = { + g1g2: arrayOf(object).isRequired, +}; diff --git a/src/app/components/system-maintenance/g1g2/g1g2.jsx b/src/app/components/system-maintenance/g1g2/g1g2.jsx new file mode 100755 index 0000000000..4885029f04 --- /dev/null +++ b/src/app/components/system-maintenance/g1g2/g1g2.jsx @@ -0,0 +1,60 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { + Button, + Card, + CardContent, + CardHeader, + CircularProgress, +} from '@material-ui/core'; + +import ChplG1g2View from './g1g2-view'; + +import { useFetchG1g2 } from 'api/standards'; +import { BreadcrumbContext } from 'shared/contexts'; + +function ChplG1g2() { + const { append, display } = useContext(BreadcrumbContext); + const { data, isLoading, isSuccess } = useFetchG1g2(); + const [g1g2, setG1g2] = useState([]); + + useEffect(() => { + append( + , + ); + display('g1g2.viewall.disabled'); + }, []); + + useEffect(() => { + if (isLoading || !isSuccess) { return; } + setG1g2(data); + }, [data, isLoading, isSuccess]); + + if (isLoading) { + return ( + + ); + } + + return ( + + + + + + + ); +} + +export default ChplG1g2; + +ChplG1g2.propTypes = { +}; diff --git a/src/app/pages/administration/system-maintenance/system-maintenance.jsx b/src/app/pages/administration/system-maintenance/system-maintenance.jsx index 03aea1bf8f..507ec33972 100755 --- a/src/app/pages/administration/system-maintenance/system-maintenance.jsx +++ b/src/app/pages/administration/system-maintenance/system-maintenance.jsx @@ -28,9 +28,11 @@ import ChplAccessibilityStandards from 'components/system-maintenance/accessibil import ChplAnnouncements from 'components/system-maintenance/announcement/announcements'; import ChplApiKeys from 'components/system-maintenance/api-key/api-keys'; import ChplCertificationCriteria from 'components/system-maintenance/certification-criterion/certification-criteria'; +import ChplCodeSets from 'components/system-maintenance/code-set/code-sets'; import ChplConformanceMethods from 'components/system-maintenance/conformance-method/conformance-methods'; import ChplCqms from 'components/system-maintenance/cqm/cqms'; import ChplFunctionalitiesTested from 'components/system-maintenance/functionality-tested/functionalities-tested'; +import ChplG1g2 from 'components/system-maintenance/g1g2/g1g2'; import ChplManageSubscriptions from 'pages/subscriptions/manage-subscriptions'; import ChplQmsStandards from 'components/system-maintenance/qms-standard/qms-standards'; import ChplStandards from 'components/system-maintenance/standard/standards'; @@ -127,6 +129,11 @@ const maintenanceItems = [{ primary: 'Certification Criteria', secondary: 'Table of the Certification Criteria values', icon: , +}, { + id: 'codeSets', + primary: 'Code Sets', + secondary: 'Table of Code Sets', + icon: , }, { id: 'conformanceMethods', primary: 'Conformance Methods', @@ -142,6 +149,11 @@ const maintenanceItems = [{ primary: 'Functionalities Tested', secondary: 'Table of the Functionality Tested values used during testing of certification criterion functionality', icon: , +}, { + id: 'g1g2', + primary: 'G1/G2 Measures', + secondary: 'Table of G1/G2 Measures', + icon: , }, { id: 'qmsStandards', primary: 'QMS Standards', @@ -246,12 +258,14 @@ function ChplSystemMaintenance() { hide('announcements.edit.disabled'); hide('apiKeys.viewall.disabled'); hide('certificationCriteria.viewall.disabled'); + hide('codeSets.viewall.disabled'); hide('conformanceMethods.viewall.disabled'); hide('cqms.viewall.disabled'); hide('functionalitiesTested.viewall.disabled'); hide('functionalitiesTested.viewall'); hide('functionalitiesTested.add.disabled'); hide('functionalitiesTested.edit.disabled'); + hide('g1g2.viewall.disabled'); hide('manageSubscriptions.viewall.disabled'); hide('qmsStandards.viewall.disabled'); hide('qmsStandards.viewall'); @@ -336,12 +350,14 @@ function ChplSystemMaintenance() { { active === 'announcements' && } { active === 'apiKeys' && } { active === 'certificationCriteria' && } + { active === 'codeSets' && } { active === 'conformanceMethods' && } { active === 'cqms' && } - { active === 'qmsStandards' && } { active === 'functionalitiesTested' && } - { active === 'subscriptions' && } + { active === 'g1g2' && } + { active === 'qmsStandards' && } { active === 'standards' && } + { active === 'subscriptions' && } { active === 'svaps' && } { active === 'systemJobs' && } { active === 'testData' && } From dbb5c99e8664bf5664ae574bd91583b60b94cfba Mon Sep 17 00:00:00 2001 From: Andrew Larned Date: Tue, 25 Feb 2025 11:48:24 -0500 Subject: [PATCH 04/10] fix: integrate CQM display with API data [#OCD-4783] --- .../system-maintenance/cqm/cqms-view.jsx | 54 +++++++------------ 1 file changed, 19 insertions(+), 35 deletions(-) diff --git a/src/app/components/system-maintenance/cqm/cqms-view.jsx b/src/app/components/system-maintenance/cqm/cqms-view.jsx index bc1ba0143a..dbc5e5e283 100755 --- a/src/app/components/system-maintenance/cqm/cqms-view.jsx +++ b/src/app/components/system-maintenance/cqm/cqms-view.jsx @@ -10,26 +10,28 @@ import { } from '@material-ui/core'; import { arrayOf } from 'prop-types'; -import { ChplLink } from 'components/util'; import { ChplSortableHeaders, sortComparator } from 'components/util/sortable-headers'; -import { getDisplayDateFormat } from 'services/date-util'; import { cqm as cqmPropType } from 'shared/prop-types'; import { utilStyles } from 'themes'; const headers = [ - { property: 'number', text: 'Number', sortable: true }, + { property: 'display', text: 'ID', sortable: true }, { property: 'title', text: 'Title', sortable: true }, - { property: 'startDay', text: 'Start Date', sortable: true }, - { property: 'endDay', text: 'End Date', sortable: true }, - { text: 'Certification Companion Guide' }, - { text: 'Rule' }, - { text: 'Attributes' }, + { property: 'description', text: 'Description', sortable: true }, + { property: 'domain', text: 'Domain', sortable: true }, + { text: 'Version(s)' }, ]; const useStyles = makeStyles({ ...utilStyles, }); +const sortVersion = (a, b) => { + const aNum = parseInt(a.substring(1), 10); + const bNum = parseInt(b.substring(1), 10); + return aNum - bNum; +}; + function ChplCqmsView({ cqms: initialCqms }) { const [cqms, setCqms] = useState([]); const [order, setOrder] = useState('asc'); @@ -38,6 +40,11 @@ function ChplCqmsView({ cqms: initialCqms }) { useEffect(() => { setCqms(initialCqms + .map((c) => ({ + ...c, + display: c.cmsId ? c.cmsId : `NQF-${c.nqfNumber}`, + versionDisplay: c.versions.sort(sortVersion).join(', '), + })) .sort(sortComparator('value'))); }, [initialCqms]); @@ -67,42 +74,19 @@ function ChplCqmsView({ cqms: initialCqms }) { .map((item) => ( - { item.removed - && ( - <> - Removed | - - )} - { item.number } + { item.display } { item.title } - { getDisplayDateFormat(item.startDay) } - - - { getDisplayDateFormat(item.endDay) } - - - { item.companionGuideLink - && ( - - )} - { !item.companionGuideLink - && ( - 'N/A' - )} + { item.description } - { item.rule?.name } + { item.domain } - { item.displayAttributes.length > 0 ? item.displayAttributes : 'N/A' } + { item.versionDisplay } ))} From 8ab8fb9cb07e2194c41794d83f576575bea9ea05 Mon Sep 17 00:00:00 2001 From: Andrew Larned Date: Tue, 25 Feb 2025 12:35:20 -0500 Subject: [PATCH 05/10] feat: integrate with g1g2 measures data [#OCD-4783] --- src/app/api/standards.jsx | 4 +-- .../system-maintenance/g1g2/g1g2-view.jsx | 28 +++++++++++++------ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/app/api/standards.jsx b/src/app/api/standards.jsx index 3965d8ae8f..fc9a73b138 100755 --- a/src/app/api/standards.jsx +++ b/src/app/api/standards.jsx @@ -177,8 +177,8 @@ const useFetchFunctionalitiesTested = () => { const useFetchG1g2 = () => { const axios = useAxios(); return useQuery(['g1g2'], async () => { - const response = await axios.get('g1g2'); - return response.data; + const response = await axios.get('data/measures'); + return response.data.data; }); }; diff --git a/src/app/components/system-maintenance/g1g2/g1g2-view.jsx b/src/app/components/system-maintenance/g1g2/g1g2-view.jsx index b792763c26..860f379dab 100755 --- a/src/app/components/system-maintenance/g1g2/g1g2-view.jsx +++ b/src/app/components/system-maintenance/g1g2/g1g2-view.jsx @@ -12,13 +12,13 @@ import { arrayOf, object } from 'prop-types'; import { ChplSortableHeaders, sortComparator } from 'components/util/sortable-headers'; import { sortCriteria } from 'services/criteria.service'; -import { getDisplayDateFormat } from 'services/date-util'; import { utilStyles } from 'themes'; const headers = [ + { property: 'abbreviation', text: 'Abbreviation', sortable: true }, + { property: 'domainDisplay', text: 'Domain', sortable: true }, + { property: 'requiredTest', text: 'Required Test', sortable: true }, { property: 'name', text: 'Name', sortable: true }, - { property: 'startDay', text: 'Start Date', sortable: true }, - { property: 'requiredDay', text: 'Required Date', sortable: true }, { text: 'Applicable Criteria' }, ]; @@ -29,19 +29,20 @@ const useStyles = makeStyles({ function ChplG1g2View({ g1g2: initialG1g2 }) { const [g1g2, setG1g2] = useState([]); const [order, setOrder] = useState('asc'); - const [orderBy, setOrderBy] = useState('name'); + const [orderBy, setOrderBy] = useState('abbreviation'); const classes = useStyles(); useEffect(() => { setG1g2(initialG1g2 .map((item) => ({ ...item, - criteriaDisplay: item.criteria + domainDisplay: item.domain.name, + criteriaDisplay: item.allowedCriteria .sort(sortCriteria) .map((c) => c.number) .join(', '), })) - .sort(sortComparator('name'))); + .sort(sortComparator('abbreviation'))); }, [initialG1g2]); const handleTableSort = (event, property, orderDirection) => { @@ -70,13 +71,22 @@ function ChplG1g2View({ g1g2: initialG1g2 }) { .map((item) => ( - { item.name } + { item.abbreviation } + + + { item.domainDisplay } - { getDisplayDateFormat(item.startDay) } + { item.removed + && ( + <> + Removed | + + )} + { item.requiredTest } - { getDisplayDateFormat(item.requiredDay) } + { item.name } { item.criteriaDisplay } From cf9e7faa1cfc45b12d5150bb4f35306c27869856 Mon Sep 17 00:00:00 2001 From: Andrew Larned Date: Tue, 25 Feb 2025 12:35:47 -0500 Subject: [PATCH 06/10] fix: use valid key for cqms [#OCD-4783] --- src/app/components/system-maintenance/cqm/cqms-view.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/system-maintenance/cqm/cqms-view.jsx b/src/app/components/system-maintenance/cqm/cqms-view.jsx index dbc5e5e283..6d2074a90e 100755 --- a/src/app/components/system-maintenance/cqm/cqms-view.jsx +++ b/src/app/components/system-maintenance/cqm/cqms-view.jsx @@ -72,7 +72,7 @@ function ChplCqmsView({ cqms: initialCqms }) { { cqms .map((item) => ( - + { item.display } From a65ba03134df12040762da0ba194335a879c4660 Mon Sep 17 00:00:00 2001 From: Andrew Larned Date: Tue, 25 Feb 2025 12:36:14 -0500 Subject: [PATCH 07/10] style: sort things according to program standards [#OCD-4783] --- .../system-maintenance/system-maintenance.jsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/pages/administration/system-maintenance/system-maintenance.jsx b/src/app/pages/administration/system-maintenance/system-maintenance.jsx index 507ec33972..eb4ebff911 100755 --- a/src/app/pages/administration/system-maintenance/system-maintenance.jsx +++ b/src/app/pages/administration/system-maintenance/system-maintenance.jsx @@ -11,18 +11,18 @@ import { Divider, ListItemText, } from '@material-ui/core'; -import CodeOutlinedIcon from '@material-ui/icons/CodeOutlined'; +import AccessibilityNewOutlinedIcon from '@material-ui/icons/AccessibilityNewOutlined'; import AnnouncementOutlinedIcon from '@material-ui/icons/AnnouncementOutlined'; -import SubscriptionsOutlinedIcon from '@material-ui/icons/SubscriptionsOutlined'; -import BookOutlinedIcon from '@material-ui/icons/BookOutlined'; -import TrendingUpOutlinedIcon from '@material-ui/icons/TrendingUpOutlined'; -import PlaylistAddCheckOutlinedIcon from '@material-ui/icons/PlaylistAddCheckOutlined'; import AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined'; -import AccessibilityNewOutlinedIcon from '@material-ui/icons/AccessibilityNewOutlined'; +import BeenhereOutlinedIcon from '@material-ui/icons/BeenhereOutlined'; +import BookOutlinedIcon from '@material-ui/icons/BookOutlined'; +import BuildOutlinedIcon from '@material-ui/icons/BuildOutlined'; +import CodeOutlinedIcon from '@material-ui/icons/CodeOutlined'; import PlayArrowOutlinedIcon from '@material-ui/icons/PlayArrowOutlined'; +import PlaylistAddCheckOutlinedIcon from '@material-ui/icons/PlaylistAddCheckOutlined'; +import SubscriptionsOutlinedIcon from '@material-ui/icons/SubscriptionsOutlined'; import TouchAppOutlinedIcon from '@material-ui/icons/TouchAppOutlined'; -import BuildOutlinedIcon from '@material-ui/icons/BuildOutlined'; -import BeenhereOutlinedIcon from '@material-ui/icons/BeenhereOutlined'; +import TrendingUpOutlinedIcon from '@material-ui/icons/TrendingUpOutlined'; import ChplAccessibilityStandards from 'components/system-maintenance/accessibility-standard/accessibility-standards'; import ChplAnnouncements from 'components/system-maintenance/announcement/announcements'; From 5191013539ff0bfb80ec9b020a66ebbb8fb0dbb3 Mon Sep 17 00:00:00 2001 From: Matthew Stankiewicz Date: Tue, 25 Feb 2025 15:51:35 -0500 Subject: [PATCH 08/10] ui: update icons to represent sections better [#OCD-4783] --- .../system-maintenance/system-maintenance.jsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/app/pages/administration/system-maintenance/system-maintenance.jsx b/src/app/pages/administration/system-maintenance/system-maintenance.jsx index 3fd94fc467..4b5410b9be 100755 --- a/src/app/pages/administration/system-maintenance/system-maintenance.jsx +++ b/src/app/pages/administration/system-maintenance/system-maintenance.jsx @@ -12,14 +12,19 @@ import { ListItemText, } from '@material-ui/core'; import AccessibilityNewOutlinedIcon from '@material-ui/icons/AccessibilityNewOutlined'; +import AccountBalanceOutlinedIcon from '@material-ui/icons/AccountBalanceOutlined'; import AnnouncementOutlinedIcon from '@material-ui/icons/AnnouncementOutlined'; import AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined'; +import AssignmentTurnedInOutlinedIcon from '@material-ui/icons/AssignmentTurnedInOutlined'; import BeenhereOutlinedIcon from '@material-ui/icons/BeenhereOutlined'; import BookOutlinedIcon from '@material-ui/icons/BookOutlined'; import BuildOutlinedIcon from '@material-ui/icons/BuildOutlined'; +import DataUsageOutlinedIcon from '@material-ui/icons/DataUsageOutlined'; import CodeOutlinedIcon from '@material-ui/icons/CodeOutlined'; import PlayArrowOutlinedIcon from '@material-ui/icons/PlayArrowOutlined'; import PlaylistAddCheckOutlinedIcon from '@material-ui/icons/PlaylistAddCheckOutlined'; +import SettingsEthernetIcon from '@material-ui/icons/SettingsEthernet'; +import SpeedOutlinedIcon from '@material-ui/icons/SpeedOutlined'; import SubscriptionsOutlinedIcon from '@material-ui/icons/SubscriptionsOutlined'; import TouchAppOutlinedIcon from '@material-ui/icons/TouchAppOutlined'; import TrendingUpOutlinedIcon from '@material-ui/icons/TrendingUpOutlined'; @@ -133,12 +138,12 @@ const maintenanceItems = [{ id: 'codeSets', primary: 'Code Sets', secondary: 'Table of Code Sets', - icon: , + icon: , }, { id: 'conformanceMethods', primary: 'Conformance Methods', secondary: 'Table of Conformance Methods', - icon: , + icon: , }, { id: 'cqms', primary: 'CQMs', @@ -153,7 +158,7 @@ const maintenanceItems = [{ id: 'g1g2', primary: 'G1/G2 Measures', secondary: 'Table of G1/G2 Measures', - icon: , + icon: , }, { id: 'qmsStandards', primary: 'QMS Standards', From c799b9c9e80596edc80fdea0ce0b1f1bb4a0ce84 Mon Sep 17 00:00:00 2001 From: Matthew Stankiewicz Date: Wed, 26 Feb 2025 14:18:32 -0500 Subject: [PATCH 09/10] ui: add min width to first column in CMS table [#OCD-4783] --- .../components/system-maintenance/cqm/cqms-view.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/app/components/system-maintenance/cqm/cqms-view.jsx b/src/app/components/system-maintenance/cqm/cqms-view.jsx index 6d2074a90e..ebe12aa8aa 100755 --- a/src/app/components/system-maintenance/cqm/cqms-view.jsx +++ b/src/app/components/system-maintenance/cqm/cqms-view.jsx @@ -73,19 +73,19 @@ function ChplCqmsView({ cqms: initialCqms }) { { cqms .map((item) => ( - + { item.display } - + { item.title } - + { item.description } - + { item.domain } - + { item.versionDisplay } From 0fb5a7556249f765b0509d7166aa7eef2666d9fb Mon Sep 17 00:00:00 2001 From: Matthew Stankiewicz Date: Wed, 26 Feb 2025 14:20:40 -0500 Subject: [PATCH 10/10] fix: take out min width in other cells [#OCD-4783] --- src/app/components/system-maintenance/cqm/cqms-view.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/components/system-maintenance/cqm/cqms-view.jsx b/src/app/components/system-maintenance/cqm/cqms-view.jsx index ebe12aa8aa..7d9a3cc4ba 100755 --- a/src/app/components/system-maintenance/cqm/cqms-view.jsx +++ b/src/app/components/system-maintenance/cqm/cqms-view.jsx @@ -76,16 +76,16 @@ function ChplCqmsView({ cqms: initialCqms }) { { item.display } - + { item.title } - + { item.description } - + { item.domain } - + { item.versionDisplay }