From 95507d44559f71138a182e1e9563888e5a26f346 Mon Sep 17 00:00:00 2001 From: Ciel Bellerose Date: Tue, 14 Jul 2026 12:53:07 -0400 Subject: [PATCH 1/6] #4281 move add/delete ruleset type to admin tools --- .../AdminToolsProjectsConfig.tsx | 5 + .../ProjectsConfig/RulesetTypesTable.tsx | 118 ++++++++++++++++++ .../src/pages/RulesPage/RulesetTypePage.tsx | 37 ------ .../components/AddRulesetTypeModal.tsx | 2 +- .../RulesPage/components/RulesetTypeTable.tsx | 75 +---------- 5 files changed, 125 insertions(+), 112 deletions(-) create mode 100644 src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsProjectsConfig.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsProjectsConfig.tsx index 2c77332948..02c6b2187d 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsProjectsConfig.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsProjectsConfig.tsx @@ -12,6 +12,7 @@ import ConfluenceLink from './ProjectsConfig/ConfluenceLink'; import PartReviewSampleImage from './ProjectsConfig/PartReviewSampleImage'; import CommonMistakesTable from './ProjectsConfig/CommonMistakesTable'; import PartTagsTable from './ProjectsConfig/PartTagsTable'; +import RulesetTypesTable from './ProjectsConfig/RulesetTypesTable'; const AdminToolsProjectsConfig: React.FC = () => { return ( @@ -35,6 +36,10 @@ const AdminToolsProjectsConfig: React.FC = () => { Cars Config + + Rules Config + + Links Config diff --git a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx new file mode 100644 index 0000000000..8a7c539187 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx @@ -0,0 +1,118 @@ +import { TableRow, TableCell, Box, IconButton } from '@mui/material'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import { datePipe } from '../../../utils/pipes'; +import ErrorPage from '../../ErrorPage'; +import { NERButton } from '../../../components/NERButton'; +import NERTable from '../../../components/NERTable'; +import { useState } from 'react'; +import { useToast } from '../../../hooks/toasts.hooks'; +import { useAllRulesetTypes, useCreateRulesetType, useDeleteRulesetType } from '../../../hooks/rules.hooks'; +import { Delete } from '@mui/icons-material'; +import RulesetTypeDeleteModal from '../../RulesPage/components/RulesetTypeDeleteModal'; +import AddRulesetTypeModal from '../../RulesPage/components/AddRulesetTypeModal'; + +interface RulesetTypeDeleteButtonProps { + rulesetTypeId: string; + name: string; + onDelete: (rulesetTypeId: string, name: string) => void; +} + +const RulesetTypesTable: React.FC = () => { + const toast = useToast(); + const { data: rulesetTypes = [], isLoading, error } = useAllRulesetTypes(); + const { mutateAsync: createRulesetType } = useCreateRulesetType(); + const { mutateAsync: deleteRulesetType } = useDeleteRulesetType(); + const [addRulesetTypeModalShow, setAddRulesetTypeModalShow] = useState(false); + + if (error) return ; + if (isLoading) return ; + + const handleAddRulesetTypeConfirm = async (data: { name: string }) => { + await createRulesetType({ name: data.name }); + }; + + const handleAddRulesetTypeCancel = () => { + setAddRulesetTypeModalShow(false); + }; + + const handleDeleteRulesetType = async (rulesetTypeId: string, name: string) => { + const rulesetType = rulesetTypes.find((rt) => rt.rulesetTypeId === rulesetTypeId); + if (rulesetType && rulesetType.revisionFiles.length > 0) { + toast.error('Cannot delete ruleset type with existing revisions'); + return; + } + + try { + await deleteRulesetType(rulesetTypeId); + toast.success(`Ruleset Type: ${name} deleted successfully!`); + } catch (error: unknown) { + if (error instanceof Error) { + toast.error(error.message); + } + } + }; + + const RulesetTypeDeleteButton: React.FC = ({ rulesetTypeId, name, onDelete }) => { + const [showDeleteModal, setShowDeleteModal] = useState(false); + + const handleDeleteSubmit = () => { + onDelete(rulesetTypeId, name); + setShowDeleteModal(false); + }; + + return ( + <> + setShowDeleteModal(true)}> + + + {showDeleteModal && ( + setShowDeleteModal(false)} + /> + )} + + ); + }; + + const rulesetTypeTableRows = rulesetTypes.map((rulesetType, index) => ( + + {rulesetType.name} + + {datePipe(rulesetType.lastUpdated)} + + + {rulesetType.revisionFiles.length} + + + + + + )); + + return ( + + + + + setAddRulesetTypeModalShow(!addRulesetTypeModalShow)}> + Add Ruleset Type + + + + ); +}; + +export default RulesetTypesTable; diff --git a/src/frontend/src/pages/RulesPage/RulesetTypePage.tsx b/src/frontend/src/pages/RulesPage/RulesetTypePage.tsx index f92aeaf343..8a45185fc0 100644 --- a/src/frontend/src/pages/RulesPage/RulesetTypePage.tsx +++ b/src/frontend/src/pages/RulesPage/RulesetTypePage.tsx @@ -2,24 +2,8 @@ import React from 'react'; import PageLayout from '../../components/PageLayout'; import { Box } from '@mui/material'; import RulesetTypeTable from './components/RulesetTypeTable'; -import { NERButton } from '../../components/NERButton'; -import AddRulesetTypeModal from './components/AddRulesetTypeModal'; -import { useState } from 'react'; -import { useCreateRulesetType } from '../../hooks/rules.hooks'; const RulesetTypePage: React.FC = () => { - const [addRulesetTypeModalShow, setAddRulesetTypeModalShow] = useState(false); - - const { mutateAsync: createRulesetType } = useCreateRulesetType(); - - const handleAddRulesetTypeConfirm = async (data: { name: string }) => { - await createRulesetType({ name: data.name }); - }; - - const handleAddRulesetTypeCancel = () => { - setAddRulesetTypeModalShow(false); - }; - return ( <> @@ -46,27 +30,6 @@ const RulesetTypePage: React.FC = () => { ml: '20px' })} /> - - setAddRulesetTypeModalShow(!addRulesetTypeModalShow)} - > - Add Ruleset Type - - - diff --git a/src/frontend/src/pages/RulesPage/components/AddRulesetTypeModal.tsx b/src/frontend/src/pages/RulesPage/components/AddRulesetTypeModal.tsx index 0e9caf9c9c..b1d6996744 100644 --- a/src/frontend/src/pages/RulesPage/components/AddRulesetTypeModal.tsx +++ b/src/frontend/src/pages/RulesPage/components/AddRulesetTypeModal.tsx @@ -90,7 +90,7 @@ const AddRulesetTypeModal: React.FC = ({ open, onHide, placeholder="Name Ruleset" error={!!errors.name} fullWidth - sx={{ minWidth: '400px' }} + sx={{ minWidth: '200px' }} /> )} /> diff --git a/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx b/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx index daa3b9bbc4..fe4a3c9212 100644 --- a/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx +++ b/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx @@ -12,8 +12,7 @@ import { Card, CardContent, Typography, - Stack, - IconButton + Stack } from '@mui/material'; import { useHistory } from 'react-router-dom'; import { datePipe } from '../../../utils/pipes'; @@ -24,9 +23,6 @@ import ErrorPage from '../../ErrorPage'; import { RulesetType } from 'shared'; import { NERButton } from '../../../components/NERButton'; import { useToast } from '../../../hooks/toasts.hooks'; -import { useState } from 'react'; -import RulesetTypeDeleteModal from './RulesetTypeDeleteModal'; -import { Delete } from '@mui/icons-material'; type RulesetTypeColumnId = 'id' | 'name' | 'lastUpdated' | 'revisions' | 'actions' | 'delete'; @@ -35,20 +31,12 @@ interface RulesetTypeHeadCell { label: string; } -interface RulesetTypeDeleteButtonProps { - rulesetTypeId: string; - name: string; - onDelete: (rulesetTypeId: string, name: string) => void; -} - const RulesetTypeTable: React.FC = () => { const history = useHistory(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('md')); - const toast = useToast(); const { data: rulesetTypes = [], isLoading, error } = useAllRulesetTypes(); - const { mutateAsync: deleteRulesetType } = useDeleteRulesetType(); const headCells: readonly RulesetTypeHeadCell[] = [ { @@ -66,10 +54,6 @@ const RulesetTypeTable: React.FC = () => { { id: 'actions', label: 'Actions' - }, - { - id: 'delete', - label: '' } ]; @@ -77,47 +61,6 @@ const RulesetTypeTable: React.FC = () => { history.push(routes.RULESET_BY_ID.replace(':rulesetTypeId', rulesetTypeId)); }; - const handleDeleteRulesetType = async (rulesetTypeId: string, name: string) => { - const rulesetType = rulesetTypes.find((rt) => rt.rulesetTypeId === rulesetTypeId); - if (rulesetType && rulesetType.revisionFiles.length > 0) { - toast.error('Cannot delete ruleset type with existing revisions'); - return; - } - - try { - await deleteRulesetType(rulesetTypeId); - toast.success(`Ruleset Type: ${name} deleted successfully!`); - } catch (error: unknown) { - if (error instanceof Error) { - toast.error(error.message); - } - } - }; - - const RulesetTypeDeleteButton: React.FC = ({ rulesetTypeId, name, onDelete }) => { - const [showDeleteModal, setShowDeleteModal] = useState(false); - - const handleDeleteSubmit = () => { - onDelete(rulesetTypeId, name); - setShowDeleteModal(false); - }; - - return ( - <> - setShowDeleteModal(true)}> - - - {showDeleteModal && ( - setShowDeleteModal(false)} - /> - )} - - ); - }; - if (error) return ; if (isLoading) return ; @@ -163,8 +106,6 @@ const RulesetTypeTable: React.FC = () => { '&:hover': { backgroundColor: theme.palette.grey[700] }, - marginRight: '10px', - padding: '4px', lineHeight: 1, borderRadius: '6px' }} @@ -172,11 +113,6 @@ const RulesetTypeTable: React.FC = () => { > View Rulesets - @@ -228,8 +164,6 @@ const RulesetTypeTable: React.FC = () => { '&:hover': { backgroundColor: theme.palette.grey[700] }, - marginRight: '10px', - padding: '4px', lineHeight: 1, borderRadius: '6px' }} @@ -238,13 +172,6 @@ const RulesetTypeTable: React.FC = () => { View Rulesets - - - )) )} From 750673658ae9515f5b287304dfa7d1883018d442 Mon Sep 17 00:00:00 2001 From: Ciel Bellerose Date: Fri, 17 Jul 2026 21:55:01 -0400 Subject: [PATCH 2/6] #4281 lint + moving modals to admin tools --- .../ProjectsConfig}/AddRulesetTypeModal.tsx | 0 .../ProjectsConfig}/RulesetTypeDeleteModal.tsx | 0 .../pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx | 4 ++-- .../src/pages/RulesPage/components/RulesetTypeTable.tsx | 3 +-- 4 files changed, 3 insertions(+), 4 deletions(-) rename src/frontend/src/pages/{RulesPage/components => AdminToolsPage/ProjectsConfig}/AddRulesetTypeModal.tsx (100%) rename src/frontend/src/pages/{RulesPage/components => AdminToolsPage/ProjectsConfig}/RulesetTypeDeleteModal.tsx (100%) diff --git a/src/frontend/src/pages/RulesPage/components/AddRulesetTypeModal.tsx b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/AddRulesetTypeModal.tsx similarity index 100% rename from src/frontend/src/pages/RulesPage/components/AddRulesetTypeModal.tsx rename to src/frontend/src/pages/AdminToolsPage/ProjectsConfig/AddRulesetTypeModal.tsx diff --git a/src/frontend/src/pages/RulesPage/components/RulesetTypeDeleteModal.tsx b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypeDeleteModal.tsx similarity index 100% rename from src/frontend/src/pages/RulesPage/components/RulesetTypeDeleteModal.tsx rename to src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypeDeleteModal.tsx diff --git a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx index 8a7c539187..e2e6520881 100644 --- a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx +++ b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx @@ -8,8 +8,8 @@ import { useState } from 'react'; import { useToast } from '../../../hooks/toasts.hooks'; import { useAllRulesetTypes, useCreateRulesetType, useDeleteRulesetType } from '../../../hooks/rules.hooks'; import { Delete } from '@mui/icons-material'; -import RulesetTypeDeleteModal from '../../RulesPage/components/RulesetTypeDeleteModal'; -import AddRulesetTypeModal from '../../RulesPage/components/AddRulesetTypeModal'; +import RulesetTypeDeleteModal from './RulesetTypeDeleteModal'; +import AddRulesetTypeModal from './AddRulesetTypeModal'; interface RulesetTypeDeleteButtonProps { rulesetTypeId: string; diff --git a/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx b/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx index fe4a3c9212..505dcd5a27 100644 --- a/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx +++ b/src/frontend/src/pages/RulesPage/components/RulesetTypeTable.tsx @@ -17,12 +17,11 @@ import { import { useHistory } from 'react-router-dom'; import { datePipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; -import { useAllRulesetTypes, useDeleteRulesetType } from '../../../hooks/rules.hooks'; +import { useAllRulesetTypes } from '../../../hooks/rules.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { RulesetType } from 'shared'; import { NERButton } from '../../../components/NERButton'; -import { useToast } from '../../../hooks/toasts.hooks'; type RulesetTypeColumnId = 'id' | 'name' | 'lastUpdated' | 'revisions' | 'actions' | 'delete'; From 315434389f8303f6a2d3e15e1d1b8ff4c4122d93 Mon Sep 17 00:00:00 2001 From: Ciel Bellerose Date: Fri, 17 Jul 2026 22:04:33 -0400 Subject: [PATCH 3/6] #4281 update formatting for add modal and admin table --- .../ProjectsConfig/AddRulesetTypeModal.tsx | 40 ++++--------------- .../ProjectsConfig/RulesetTypesTable.tsx | 9 ++++- 2 files changed, 15 insertions(+), 34 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/AddRulesetTypeModal.tsx b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/AddRulesetTypeModal.tsx index b1d6996744..e5b20a626d 100644 --- a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/AddRulesetTypeModal.tsx +++ b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/AddRulesetTypeModal.tsx @@ -1,9 +1,9 @@ -import { FormControl, FormHelperText, FormLabel, TextField } from '@mui/material'; -import { Box } from '@mui/system'; +import { FormControl, FormHelperText, FormLabel } from '@mui/material'; import * as yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; -import { Controller, useForm } from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import NERFormModal from '../../../components/NERFormModal'; +import ReactHookTextField from '../../../components/ReactHookTextField'; import { useToast } from '../../../hooks/toasts.hooks'; interface RulesetTypeFormData { @@ -16,15 +16,6 @@ interface AddRulesetTypeModalProps { onFormSubmit: (data: RulesetTypeFormData) => Promise; } -const sectionHeaderStyle = { - fontWeight: 'bold', - color: '#ef4345', - textDecoration: 'underline', - fontSize: '1rem', - textUnderlineOffset: '5px', - marginBottom: '10px' -}; - const schema = yup.object({ name: yup.string().required('Name is required') }); @@ -77,26 +68,11 @@ const AddRulesetTypeModal: React.FC = ({ open, onHide, formId={'add-ruleset-type-form'} showCloseButton > - - - Name Ruleset: - ( - - )} - /> - {errors.name?.message} - - + + Ruleset Name + + {errors.name?.message} + ); }; diff --git a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx index e2e6520881..46eb7abb7b 100644 --- a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx +++ b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx @@ -62,7 +62,7 @@ const RulesetTypesTable: React.FC = () => { return ( <> - setShowDeleteModal(true)}> + setShowDeleteModal(true)}> {showDeleteModal && ( @@ -103,7 +103,12 @@ const RulesetTypesTable: React.FC = () => { onFormSubmit={handleAddRulesetTypeConfirm} /> From e0efa9e0d4846f3285a85714cd95432409b2886c Mon Sep 17 00:00:00 2001 From: Ciel Bellerose Date: Fri, 17 Jul 2026 22:11:56 -0400 Subject: [PATCH 4/6] #4281 delete refresh fix --- src/frontend/src/hooks/rules.hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/hooks/rules.hooks.ts b/src/frontend/src/hooks/rules.hooks.ts index b0a64a64c6..76f987a341 100644 --- a/src/frontend/src/hooks/rules.hooks.ts +++ b/src/frontend/src/hooks/rules.hooks.ts @@ -467,7 +467,7 @@ export const useDeleteRulesetType = () => { }, { onSuccess: () => { - queryClient.invalidateQueries(['rulesetTypes']); + queryClient.invalidateQueries(['rules', 'rulesetTypes']); } } ); From 2d3721a2d490232f13df1e4ec6d5c76454c01998 Mon Sep 17 00:00:00 2001 From: Ciel Bellerose Date: Mon, 20 Jul 2026 13:58:47 -0400 Subject: [PATCH 5/6] #4281 ruleset type table fixes --- .../ProjectsConfig/RulesetTypesTable.tsx | 111 ++++++++++-------- 1 file changed, 64 insertions(+), 47 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx index 46eb7abb7b..f070e3b0ee 100644 --- a/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx +++ b/src/frontend/src/pages/AdminToolsPage/ProjectsConfig/RulesetTypesTable.tsx @@ -11,21 +11,77 @@ import { Delete } from '@mui/icons-material'; import RulesetTypeDeleteModal from './RulesetTypeDeleteModal'; import AddRulesetTypeModal from './AddRulesetTypeModal'; +const handleDeleteRulesetType = async ( + rulesetTypeId: string, + name: string, + hasRevisionFiles: boolean, + deleteRulesetTypeMutation: (rulesetTypeId: string) => Promise, + toast: ReturnType, + onSuccess: () => void +) => { + if (hasRevisionFiles) { + toast.error('Cannot delete ruleset type with existing revisions'); + return; + } + + try { + await deleteRulesetTypeMutation(rulesetTypeId); + toast.success(`Ruleset Type: ${name} deleted successfully!`); + onSuccess(); + } catch (error: unknown) { + if (error instanceof Error) { + toast.error(error.message); + } + } +}; + interface RulesetTypeDeleteButtonProps { rulesetTypeId: string; name: string; - onDelete: (rulesetTypeId: string, name: string) => void; + hasRevisionFiles: boolean; + deleteRulesetTypeMutation: (rulesetTypeId: string) => Promise; + toast: ReturnType; } +const RulesetTypeDeleteButton: React.FC = ({ + rulesetTypeId, + name, + hasRevisionFiles, + deleteRulesetTypeMutation, + toast +}) => { + const [showDeleteModal, setShowDeleteModal] = useState(false); + + const handleDeleteSubmit = () => + handleDeleteRulesetType(rulesetTypeId, name, hasRevisionFiles, deleteRulesetTypeMutation, toast, () => + setShowDeleteModal(false) + ); + + return ( + <> + setShowDeleteModal(true)}> + + + {showDeleteModal && ( + setShowDeleteModal(false)} + /> + )} + + ); +}; + const RulesetTypesTable: React.FC = () => { const toast = useToast(); - const { data: rulesetTypes = [], isLoading, error } = useAllRulesetTypes(); + const { data: rulesetTypes, isLoading, isError, error } = useAllRulesetTypes(); const { mutateAsync: createRulesetType } = useCreateRulesetType(); const { mutateAsync: deleteRulesetType } = useDeleteRulesetType(); const [addRulesetTypeModalShow, setAddRulesetTypeModalShow] = useState(false); - if (error) return ; - if (isLoading) return ; + if (isError) return ; + if (!rulesetTypes || isLoading) return ; const handleAddRulesetTypeConfirm = async (data: { name: string }) => { await createRulesetType({ name: data.name }); @@ -35,49 +91,8 @@ const RulesetTypesTable: React.FC = () => { setAddRulesetTypeModalShow(false); }; - const handleDeleteRulesetType = async (rulesetTypeId: string, name: string) => { - const rulesetType = rulesetTypes.find((rt) => rt.rulesetTypeId === rulesetTypeId); - if (rulesetType && rulesetType.revisionFiles.length > 0) { - toast.error('Cannot delete ruleset type with existing revisions'); - return; - } - - try { - await deleteRulesetType(rulesetTypeId); - toast.success(`Ruleset Type: ${name} deleted successfully!`); - } catch (error: unknown) { - if (error instanceof Error) { - toast.error(error.message); - } - } - }; - - const RulesetTypeDeleteButton: React.FC = ({ rulesetTypeId, name, onDelete }) => { - const [showDeleteModal, setShowDeleteModal] = useState(false); - - const handleDeleteSubmit = () => { - onDelete(rulesetTypeId, name); - setShowDeleteModal(false); - }; - - return ( - <> - setShowDeleteModal(true)}> - - - {showDeleteModal && ( - setShowDeleteModal(false)} - /> - )} - - ); - }; - const rulesetTypeTableRows = rulesetTypes.map((rulesetType, index) => ( - + {rulesetType.name} {datePipe(rulesetType.lastUpdated)} @@ -89,7 +104,9 @@ const RulesetTypesTable: React.FC = () => { 0} + deleteRulesetTypeMutation={deleteRulesetType} + toast={toast} /> From 78f53c5cf3a4913d5ae59a6f07602fff090f09fa Mon Sep 17 00:00:00 2001 From: Ciel Bellerose Date: Mon, 20 Jul 2026 22:39:22 -0400 Subject: [PATCH 6/6] #4281 hook invalidate query update --- src/frontend/src/hooks/rules.hooks.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/frontend/src/hooks/rules.hooks.ts b/src/frontend/src/hooks/rules.hooks.ts index 76f987a341..fb15737504 100644 --- a/src/frontend/src/hooks/rules.hooks.ts +++ b/src/frontend/src/hooks/rules.hooks.ts @@ -440,6 +440,7 @@ export const useUpdateRuleset = () => { { onSuccess: () => { queryClient.invalidateQueries(['rulesets']); + queryClient.invalidateQueries(['rules', 'rulesetTypes']); } } ); @@ -454,6 +455,7 @@ export const useDeleteRuleset = () => { { onSuccess: () => { queryClient.invalidateQueries(['rulesets']); + queryClient.invalidateQueries(['rules', 'rulesetTypes']); } } ); @@ -490,6 +492,7 @@ export const useCreateRuleset = () => { { onSuccess: () => { queryClient.invalidateQueries(['rulesets']); + queryClient.invalidateQueries(['rules', 'rulesetTypes']); } } );