From 3a4bf0f9db39bd003e4093735c879aaf960641bc Mon Sep 17 00:00:00 2001 From: Carla Martinez Date: Fri, 14 Feb 2025 11:57:34 +0100 Subject: [PATCH 1/4] Create 'BasicSelector' component To prevent setting the functionality for the `Selector` component from PatternFly, the `BasicSelector` component must contain and isolate that functionality, as well as providing a reusable way of using it. Signed-off-by: Carla Martinez --- src/components/layouts/BasicSelector.tsx | 77 ++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/components/layouts/BasicSelector.tsx diff --git a/src/components/layouts/BasicSelector.tsx b/src/components/layouts/BasicSelector.tsx new file mode 100644 index 00000000..f7445afd --- /dev/null +++ b/src/components/layouts/BasicSelector.tsx @@ -0,0 +1,77 @@ +import React from "react"; +// Patternfly +import { + MenuToggle, + MenuToggleElement, + Select, + SelectList, + SelectOption, + SelectOptionProps, +} from "@patternfly/react-core"; + +interface PropsToBasicSelector { + id: string; + selected: string; + options: SelectOptionProps[]; + onSelectedChange: (selected: string) => void; + ariaLabel?: string; +} + +const BasicSelector = (props: PropsToBasicSelector) => { + const [isOpen, setIsOpen] = React.useState(false); + const [selected, setSelected] = React.useState(props.selected); + + const onToggleClick = () => { + setIsOpen(!isOpen); + }; + + const onSelect = ( + _event: React.MouseEvent | undefined, + value: string | number | undefined + ) => { + props.onSelectedChange(value as string); + setSelected(value as string); + setIsOpen(false); + }; + + const toggle = (toggleRef: React.Ref) => ( + + {selected} + + ); + + return ( + + ); +}; + +export default BasicSelector; From 8778c1e8fb05fbad6d9c9ae2adefb47f9c5ff7c8 Mon Sep 17 00:00:00 2001 From: Carla Martinez Date: Fri, 14 Feb 2025 15:37:46 +0100 Subject: [PATCH 2/4] Fix Automember table links The `AutomemberUserRules` component can be used equally in 'User group rules' and 'Host group rules' pages. Based on that, the links to access the 'Settings' page should be different depending on which page is being accessed to. Signed-off-by: Carla Martinez --- src/pages/AutoMemHostRules/AutoMemHostRules.tsx | 1 + src/pages/AutoMemUserRules/AutoMemUserRules.tsx | 1 + src/pages/AutoMemUserRules/AutomemUserRulesTable.tsx | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/AutoMemHostRules/AutoMemHostRules.tsx b/src/pages/AutoMemHostRules/AutoMemHostRules.tsx index 01f685fd..43e6738c 100644 --- a/src/pages/AutoMemHostRules/AutoMemHostRules.tsx +++ b/src/pages/AutoMemHostRules/AutoMemHostRules.tsx @@ -624,6 +624,7 @@ const AutoMemHostRules = () => { buttonsData={automembersTableButtonsData} paginationData={selectedPerPageData} searchValue={searchValue} + automemberType="host-group" /> )} diff --git a/src/pages/AutoMemUserRules/AutoMemUserRules.tsx b/src/pages/AutoMemUserRules/AutoMemUserRules.tsx index c3700e31..532f9eab 100644 --- a/src/pages/AutoMemUserRules/AutoMemUserRules.tsx +++ b/src/pages/AutoMemUserRules/AutoMemUserRules.tsx @@ -624,6 +624,7 @@ const AutoMemUserRules = () => { buttonsData={automembersTableButtonsData} paginationData={selectedPerPageData} searchValue={searchValue} + automemberType="user-group" /> )} diff --git a/src/pages/AutoMemUserRules/AutomemUserRulesTable.tsx b/src/pages/AutoMemUserRules/AutomemUserRulesTable.tsx index 1ebf9fc1..ec2d0cdd 100644 --- a/src/pages/AutoMemUserRules/AutomemUserRulesTable.tsx +++ b/src/pages/AutoMemUserRules/AutomemUserRulesTable.tsx @@ -39,6 +39,7 @@ export interface PropsToTable { buttonsData: ButtonsData; paginationData: PaginationData; searchValue: string; + automemberType: "user-group" | "host-group"; } const MainTable = (props: PropsToTable) => { @@ -207,7 +208,7 @@ const MainTable = (props: PropsToTable) => { {element.automemberRule} From 13d3f4d66233fec8071a3c29b44ecf16b0d99d69 Mon Sep 17 00:00:00 2001 From: Carla Martinez Date: Fri, 14 Feb 2025 16:02:32 +0100 Subject: [PATCH 3/4] Add 'Host group rules' settings page The 'Host group rules' > 'Settings' page should show the information of a given automember entry. Signed-off-by: Carla Martinez --- src/navigation/AppRoutes.tsx | 11 +++++++++++ src/pages/AutoMemUserRules/AutoMemSettings.tsx | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/navigation/AppRoutes.tsx b/src/navigation/AppRoutes.tsx index 171e17e8..b94c15fb 100644 --- a/src/navigation/AppRoutes.tsx +++ b/src/navigation/AppRoutes.tsx @@ -315,6 +315,17 @@ export const AppRoutes = ({ isInitialDataLoaded }): React.ReactElement => { } /> + + + } + /> + } /> diff --git a/src/pages/AutoMemUserRules/AutoMemSettings.tsx b/src/pages/AutoMemUserRules/AutoMemSettings.tsx index 74566ec7..0ca249ba 100644 --- a/src/pages/AutoMemUserRules/AutoMemSettings.tsx +++ b/src/pages/AutoMemUserRules/AutoMemSettings.tsx @@ -55,8 +55,12 @@ const AutoMemSettings = (props: PropsToSettings) => { // RPC calls const [saveAutomember] = useSaveAutomemberMutation(); + // Infer pathname from automemberType + const pathname = + props.automemberType === "group" ? "user-group-rules" : "host-group-rules"; + // Update current route data to Redux and highlight the current page in the Nav bar - useUpdateRoute({ pathname: "user-group-rules", noBreadcrumb: true }); + useUpdateRoute({ pathname: pathname, noBreadcrumb: true }); // Get 'ipaObject' and 'recordOnChange' to use in 'IpaTextInput' const { ipaObject, recordOnChange } = asRecord( From fa34d9095c4e47cd753184581c96e40b7192a204 Mon Sep 17 00:00:00 2001 From: Carla Martinez Date: Fri, 14 Feb 2025 16:20:55 +0100 Subject: [PATCH 4/4] Change name to general-use components As some components related to the automember section has multiple reusable components that can be used indistictively for `User group rules` and `Host group rules`, those can have a more generalistic name. Signed-off-by: Carla Martinez --- src/navigation/AppRoutes.tsx | 6 +++--- src/pages/AutoMemHostRules/AutoMemHostRules.tsx | 2 +- .../{AutoMemUserRulesTabs.tsx => AutoMemRulesTabs.tsx} | 0 src/pages/AutoMemUserRules/AutoMemUserRules.tsx | 2 +- .../{AutomemUserRulesTable.tsx => AutomemRulesTable.tsx} | 0 5 files changed, 5 insertions(+), 5 deletions(-) rename src/pages/AutoMemUserRules/{AutoMemUserRulesTabs.tsx => AutoMemRulesTabs.tsx} (100%) rename src/pages/AutoMemUserRules/{AutomemUserRulesTable.tsx => AutomemRulesTable.tsx} (100%) diff --git a/src/navigation/AppRoutes.tsx b/src/navigation/AppRoutes.tsx index b94c15fb..97dfd27f 100644 --- a/src/navigation/AppRoutes.tsx +++ b/src/navigation/AppRoutes.tsx @@ -25,7 +25,7 @@ import ServicesTabs from "src/pages/Services/ServicesTabs"; import IDViews from "src/pages/IDViews/IDViews"; import AutoMemHostRules from "src/pages/AutoMemHostRules/AutoMemHostRules"; import AutoMemUserRules from "src/pages/AutoMemUserRules/AutoMemUserRules"; -import AutoMemUserRulesTabs from "src/pages/AutoMemUserRules/AutoMemUserRulesTabs"; +import AutoMemRulesTabs from "src/pages/AutoMemUserRules/AutoMemRulesTabs"; import HBACRules from "src/pages/HBACRules/HBACRules"; import HBACServices from "src/pages/HBACServices/HBACServices"; import HBACServiceGroups from "src/pages/HBACServiceGroups/HBACServiceGroups"; @@ -305,7 +305,7 @@ export const AppRoutes = ({ isInitialDataLoaded }): React.ReactElement => { @@ -319,7 +319,7 @@ export const AppRoutes = ({ isInitialDataLoaded }): React.ReactElement => { diff --git a/src/pages/AutoMemHostRules/AutoMemHostRules.tsx b/src/pages/AutoMemHostRules/AutoMemHostRules.tsx index 43e6738c..4874166d 100644 --- a/src/pages/AutoMemHostRules/AutoMemHostRules.tsx +++ b/src/pages/AutoMemHostRules/AutoMemHostRules.tsx @@ -26,7 +26,7 @@ import ToolbarLayout, { } from "src/components/layouts/ToolbarLayout"; import SearchInputLayout from "src/components/layouts/SearchInputLayout"; // Tables -import MainTable from "../AutoMemUserRules/AutomemUserRulesTable"; +import MainTable from "../AutoMemUserRules/AutomemRulesTable"; // Components import PaginationLayout from "../../components/layouts/PaginationLayout"; import BulkSelectorPrep from "src/components/BulkSelectorPrep"; diff --git a/src/pages/AutoMemUserRules/AutoMemUserRulesTabs.tsx b/src/pages/AutoMemUserRules/AutoMemRulesTabs.tsx similarity index 100% rename from src/pages/AutoMemUserRules/AutoMemUserRulesTabs.tsx rename to src/pages/AutoMemUserRules/AutoMemRulesTabs.tsx diff --git a/src/pages/AutoMemUserRules/AutoMemUserRules.tsx b/src/pages/AutoMemUserRules/AutoMemUserRules.tsx index 532f9eab..978ae440 100644 --- a/src/pages/AutoMemUserRules/AutoMemUserRules.tsx +++ b/src/pages/AutoMemUserRules/AutoMemUserRules.tsx @@ -26,7 +26,7 @@ import ToolbarLayout, { } from "src/components/layouts/ToolbarLayout"; import SearchInputLayout from "src/components/layouts/SearchInputLayout"; // Tables -import MainTable from "./AutomemUserRulesTable"; +import MainTable from "./AutomemRulesTable"; // Components import PaginationLayout from "../../components/layouts/PaginationLayout"; import BulkSelectorPrep from "src/components/BulkSelectorPrep"; diff --git a/src/pages/AutoMemUserRules/AutomemUserRulesTable.tsx b/src/pages/AutoMemUserRules/AutomemRulesTable.tsx similarity index 100% rename from src/pages/AutoMemUserRules/AutomemUserRulesTable.tsx rename to src/pages/AutoMemUserRules/AutomemRulesTable.tsx