From d727ab0f579958b51acfad4134e519dc511d2fca Mon Sep 17 00:00:00 2001 From: Michael Krasnov Date: Tue, 17 Dec 2024 07:23:05 -0500 Subject: [PATCH] BACKLOG-23323 Improvements to the background jobs page --- .github/workflows/on-code-change.yml | 2 +- package.json | 4 +- .../backgroundJobs/BackgroundJobsTable.jsx | 14 ++- .../HistoryBackgroundJobsTable.jsx | 11 ++- .../ScheduledBackgroundJobsTable.jsx | 9 +- .../serverSettings/backgroundJobs/hooks.js | 6 +- .../serverSettings/backgroundJobs/index.jsx | 36 +++++-- .../serverSettings/backgroundJobs/styles.css | 7 ++ .../serverSettings/backgroundJobs/utils.jsx | 10 +- .../systemHealth/registerRoutes.js | 1 + webpack.config.js | 18 +++- yarn.lock | 96 ++++++++++++++++++- 12 files changed, 185 insertions(+), 29 deletions(-) create mode 100644 src/javascript/serverSettings/backgroundJobs/styles.css diff --git a/.github/workflows/on-code-change.yml b/.github/workflows/on-code-change.yml index 0ebefb22..95240a17 100644 --- a/.github/workflows/on-code-change.yml +++ b/.github/workflows/on-code-change.yml @@ -26,7 +26,7 @@ jobs: - uses: actions/checkout@v4 - uses: Jahia/jahia-modules-action/static-analysis@v2 with: - node_version: 14 + node_version: 18 auditci_level: high build: diff --git a/package.json b/package.json index ca59b144..ae60da19 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "dependencies": { "@jahia/moonstone": "^2.9.1", "@jahia/ui-extender": "^1.0.6", + "css-loader": "^7.1.2", "graphql-tag": "^2.12.6", "i18next": "^19.1.0", "prop-types": "^15.7.2", @@ -47,7 +48,8 @@ "react-iframe": "^1.8.0", "react-router": "^5.1.2", "react-router-dom": "^5.1.2", - "react-table": "^7.8.0" + "react-table": "^7.8.0", + "style-loader": "^4.0.0" }, "devDependencies": { "@babel/cli": "^7.6.2", diff --git a/src/javascript/serverSettings/backgroundJobs/BackgroundJobsTable.jsx b/src/javascript/serverSettings/backgroundJobs/BackgroundJobsTable.jsx index d2c27ea7..de1442ea 100644 --- a/src/javascript/serverSettings/backgroundJobs/BackgroundJobsTable.jsx +++ b/src/javascript/serverSettings/backgroundJobs/BackgroundJobsTable.jsx @@ -1,4 +1,4 @@ -import React, {useMemo} from 'react'; +import React, {useImperativeHandle, useMemo, forwardRef} from 'react'; import {useTable, useSortBy} from 'react-table'; import { Loader, @@ -37,7 +37,7 @@ NothingToDisplay.propTypes = { isError: PropTypes.bool }; -const BackgroundJobsTable = ({tableProps, paginationProps, loading, error, ...props}) => { +const BackgroundJobsTable = forwardRef(({tableProps, paginationProps, loading, error, refetch, ...props}, ref) => { const { limit, setLimit, @@ -54,6 +54,10 @@ const BackgroundJobsTable = ({tableProps, paginationProps, loading, error, ...pr prepareRow } = useTable(tableProps, useSortBy); + useImperativeHandle(ref, () => ({ + refetch + })); + const content = useMemo(() => { if (rows.length === 0) { return ; @@ -118,14 +122,14 @@ const BackgroundJobsTable = ({tableProps, paginationProps, loading, error, ...pr ); -}; +}); BackgroundJobsTable.propTypes = { tableProps: PropTypes.object.isRequired, paginationProps: PropTypes.object.isRequired, - // eslint-disable-next-line react/boolean-prop-naming - loading: PropTypes.bool, + loading: PropTypes.bool, + refetch: PropTypes.func, error: PropTypes.object, 'data-testid': PropTypes.string }; diff --git a/src/javascript/serverSettings/backgroundJobs/HistoryBackgroundJobsTable.jsx b/src/javascript/serverSettings/backgroundJobs/HistoryBackgroundJobsTable.jsx index 12e89f65..ec1caed8 100644 --- a/src/javascript/serverSettings/backgroundJobs/HistoryBackgroundJobsTable.jsx +++ b/src/javascript/serverSettings/backgroundJobs/HistoryBackgroundJobsTable.jsx @@ -1,11 +1,11 @@ -import React, {useMemo} from 'react'; +import React, {useMemo, forwardRef} from 'react'; import {useHistoryBackgroundJobs} from './hooks'; const {useTranslation} = require('react-i18next'); import {parseUsername} from './utils'; import BackgroundJobsTable from './BackgroundJobsTable'; import JobStatusBadge from './JobStatusBadge'; -const HistoryBackgroundJobsTable = () => { +const HistoryBackgroundJobsTable = forwardRef((_, ref) => { const {t} = useTranslation('serverSettings'); const { jobs, @@ -14,6 +14,7 @@ const HistoryBackgroundJobsTable = () => { totalCount, currentPage, setPage, + refetch, loading, error } = useHistoryBackgroundJobs(); @@ -52,7 +53,7 @@ const HistoryBackgroundJobsTable = () => { Header: t('backgroundJobs.columns.duration'), accessor: 'duration', Cell: ({value}) => `${value} ms`, - customWidth: 80 + customWidth: 105 } ]; }, [t]); @@ -65,13 +66,15 @@ const HistoryBackgroundJobsTable = () => { return ( ); -}; +}); export default HistoryBackgroundJobsTable; diff --git a/src/javascript/serverSettings/backgroundJobs/ScheduledBackgroundJobsTable.jsx b/src/javascript/serverSettings/backgroundJobs/ScheduledBackgroundJobsTable.jsx index e325f60e..e2bcea0a 100644 --- a/src/javascript/serverSettings/backgroundJobs/ScheduledBackgroundJobsTable.jsx +++ b/src/javascript/serverSettings/backgroundJobs/ScheduledBackgroundJobsTable.jsx @@ -1,9 +1,9 @@ -import React, {useMemo} from 'react'; +import React, {useMemo, forwardRef} from 'react'; import {useTranslation} from 'react-i18next'; import {useScheduledBackgroundJobs} from './hooks'; import BackgroundJobsTable from './BackgroundJobsTable'; -const ScheduledBackgroundJobsTable = () => { +const ScheduledBackgroundJobsTable = forwardRef((_, ref) => { const {t} = useTranslation('serverSettings'); const { jobs, @@ -12,6 +12,7 @@ const ScheduledBackgroundJobsTable = () => { totalCount, currentPage, setPage, + refetch, loading, error } = useScheduledBackgroundJobs(); @@ -37,13 +38,15 @@ const ScheduledBackgroundJobsTable = () => { return ( ); -}; +}); export default ScheduledBackgroundJobsTable; diff --git a/src/javascript/serverSettings/backgroundJobs/hooks.js b/src/javascript/serverSettings/backgroundJobs/hooks.js index 9b722122..60655e8f 100644 --- a/src/javascript/serverSettings/backgroundJobs/hooks.js +++ b/src/javascript/serverSettings/backgroundJobs/hooks.js @@ -6,7 +6,7 @@ export const useHistoryBackgroundJobs = () => { const [page, setPage] = useState(1); const [limit, setLimit] = useState(10); const offset = useMemo(() => (page - 1) * limit, [page, limit]); - const {data, loading, error} = useQuery(GET_BACKGROUND_JOBS, { + const {data, loading, error, refetch} = useQuery(GET_BACKGROUND_JOBS, { variables: { includeStatuses: null, excludeStatuses: ['SCHEDULED'], @@ -23,6 +23,7 @@ export const useHistoryBackgroundJobs = () => { jobs, totalCount, currentPage: page, + refetch, setPage, limit, setLimit, @@ -35,7 +36,7 @@ export const useScheduledBackgroundJobs = () => { const [page, setPage] = useState(1); const [limit, setLimit] = useState(10); const offset = useMemo(() => (page - 1) * limit, [page, limit]); - const {data, loading, error} = useQuery(GET_BACKGROUND_JOBS, { + const {data, loading, error, refetch} = useQuery(GET_BACKGROUND_JOBS, { variables: { includeStatuses: ['SCHEDULED'], excludeStatuses: null, @@ -53,6 +54,7 @@ export const useScheduledBackgroundJobs = () => { totalCount, currentPage: page, setPage, + refetch, limit, setLimit, loading, diff --git a/src/javascript/serverSettings/backgroundJobs/index.jsx b/src/javascript/serverSettings/backgroundJobs/index.jsx index 561261bc..7dd4f484 100644 --- a/src/javascript/serverSettings/backgroundJobs/index.jsx +++ b/src/javascript/serverSettings/backgroundJobs/index.jsx @@ -1,24 +1,29 @@ -import React, {useState} from 'react'; -import {Header, LayoutContent, Paper, Tab, TabItem} from '@jahia/moonstone'; +import React, {useMemo, useRef, useState} from 'react'; +import {Button, Header, LayoutContent, Paper, Tab, TabItem} from '@jahia/moonstone'; import HistoryBackgroundJobsTable from './HistoryBackgroundJobsTable'; import ScheduledBackgroundJobsTable from './ScheduledBackgroundJobsTable'; import {useTranslation} from 'react-i18next'; +import SvgReload from '@jahia/moonstone/dist/icons/components/Reload'; +import classes from './styles.css'; const BackgroundJobsTabs = () => { const {t} = useTranslation('serverSettings'); const [activeTab, setActiveTab] = useState('history'); + const historyRef = useRef(null); + const historyTable = useMemo(() => , []); - const content = activeTab === 'history' ? : ; + const scheduledRef = useRef(null); + const scheduledTable = useMemo(() => , []); return ( } content={( - + { /> setActiveTab('scheduled')} /> +
+