From 64b39d9cdecffa9c79f1bf145caff33ca550763b Mon Sep 17 00:00:00 2001 From: Zacgoose <107489668+Zacgoose@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:06:01 +0800 Subject: [PATCH] refactor(ux): move template, report and tool pages into tabbed/folder layout Reorganize existing pages into the tabbed/folder navigation pattern: - Template pages paired with their list pages via tabOptions.json tabs - SharePoint/OneDrive Sharing and Permissions reports grouped under teams-share/reports/ - Template Library, Catalog and Package Manager grouped under tools/template-tools/ - Sidebar nav, universal search and legacy-path redirects updated to match No backend or tenant Configuration-page changes; frontend navigation only. --- .../CippCards/CippUniversalSearchV2.jsx | 30 ++- frontend/src/layouts/config.jsx | 191 +++++------------- .../contacts-template/index.jsx | 8 +- .../email/administration/contacts/index.jsx | 8 +- .../administration/contacts/tabOptions.json | 12 ++ .../index.jsx | 8 +- .../tenant-allow-block-lists/index.jsx | 8 +- .../tenant-allow-block-lists/tabOptions.json | 12 ++ .../list-connectionfilter-templates/index.jsx | 8 +- .../list-connectionfilter/index.jsx | 8 +- .../list-connectionfilter/tabOptions.json | 12 ++ .../spamfilter/list-spamfilter/index.jsx | 8 +- .../list-spamfilter/tabOptions.json | 12 ++ .../email/spamfilter/list-templates/index.jsx | 8 +- .../list-connector-templates/index.jsx | 8 +- .../email/transport/list-connectors/index.jsx | 8 +- .../transport/list-connectors/tabOptions.json | 12 ++ .../email/transport/list-rules/index.jsx | 8 +- .../transport/list-rules/tabOptions.json | 12 ++ .../email/transport/list-templates/index.jsx | 8 +- .../MEM/assignment-filter-templates/index.jsx | 8 +- .../endpoint/MEM/assignment-filters/index.jsx | 8 +- .../MEM/assignment-filters/tabOptions.json | 12 ++ .../endpoint/MEM/list-policies/index.jsx | 8 +- .../MEM/list-policies/tabOptions.json | 12 ++ .../endpoint/MEM/list-templates/index.jsx | 8 +- .../MEM/reusable-settings-templates/index.jsx | 8 +- .../endpoint/MEM/reusable-settings/index.jsx | 8 +- .../MEM/reusable-settings/tabOptions.json | 12 ++ .../endpoint/applications/list/index.jsx | 8 +- .../applications/list/tabOptions.json | 12 ++ .../endpoint/applications/templates/index.jsx | 8 +- .../administration/group-templates/index.jsx | 8 +- .../identity/administration/groups/index.jsx | 8 +- .../administration/groups/tabOptions.json | 12 ++ .../jit-admin-templates/index.jsx | 8 +- .../administration/jit-admin/index.jsx | 8 +- .../administration/jit-admin/tabOptions.json | 17 ++ .../jit-role-templates/index.jsx | 8 +- .../compliance/dlp-templates/index.jsx | 8 +- .../pages/security/compliance/dlp/index.jsx | 8 +- .../security/compliance/dlp/tabOptions.json | 12 ++ .../compliance/labels-templates/index.jsx | 8 +- .../security/compliance/labels/index.jsx | 8 +- .../compliance/labels/tabOptions.json | 12 ++ .../compliance/retention-templates/index.jsx | 8 +- .../security/compliance/retention/index.jsx | 8 +- .../compliance/retention/tabOptions.json | 12 ++ .../compliance/sit-templates/index.jsx | 8 +- .../pages/security/compliance/sit/index.jsx | 8 +- .../security/compliance/sit/tabOptions.json | 12 ++ .../safelinks/safelinks-template/index.jsx | 8 +- .../security/safelinks/safelinks/index.jsx | 8 +- .../safelinks/safelinks/tabOptions.json | 12 ++ .../permissions-report/index.jsx | 28 +-- .../{ => reports}/sharing-report/index.jsx | 28 +-- .../sharepoint-templates/index.jsx | 8 +- .../pages/teams-share/sharepoint/index.jsx | 8 +- .../teams-share/sharepoint/tabOptions.json | 12 ++ .../conditional/list-policies/index.jsx | 8 +- .../conditional/list-policies/tabOptions.json | 12 ++ .../conditional/list-template/index.jsx | 8 +- .../community-repos/catalog.jsx | 10 +- .../community-repos/index.jsx | 22 +- .../community-repos/repo.jsx | 4 +- .../template-packages/index.jsx | 6 +- .../templatelib/index.jsx | 14 +- frontend/src/utils/route-redirects.js | 13 ++ 68 files changed, 648 insertions(+), 243 deletions(-) create mode 100644 frontend/src/pages/email/administration/contacts/tabOptions.json create mode 100644 frontend/src/pages/email/administration/tenant-allow-block-lists/tabOptions.json create mode 100644 frontend/src/pages/email/spamfilter/list-connectionfilter/tabOptions.json create mode 100644 frontend/src/pages/email/spamfilter/list-spamfilter/tabOptions.json create mode 100644 frontend/src/pages/email/transport/list-connectors/tabOptions.json create mode 100644 frontend/src/pages/email/transport/list-rules/tabOptions.json create mode 100644 frontend/src/pages/endpoint/MEM/assignment-filters/tabOptions.json create mode 100644 frontend/src/pages/endpoint/MEM/list-policies/tabOptions.json create mode 100644 frontend/src/pages/endpoint/MEM/reusable-settings/tabOptions.json create mode 100644 frontend/src/pages/endpoint/applications/list/tabOptions.json create mode 100644 frontend/src/pages/identity/administration/groups/tabOptions.json create mode 100644 frontend/src/pages/identity/administration/jit-admin/tabOptions.json create mode 100644 frontend/src/pages/security/compliance/dlp/tabOptions.json create mode 100644 frontend/src/pages/security/compliance/labels/tabOptions.json create mode 100644 frontend/src/pages/security/compliance/retention/tabOptions.json create mode 100644 frontend/src/pages/security/compliance/sit/tabOptions.json create mode 100644 frontend/src/pages/security/safelinks/safelinks/tabOptions.json rename frontend/src/pages/teams-share/{ => reports}/permissions-report/index.jsx (91%) rename frontend/src/pages/teams-share/{ => reports}/sharing-report/index.jsx (94%) create mode 100644 frontend/src/pages/teams-share/sharepoint/tabOptions.json create mode 100644 frontend/src/pages/tenant/conditional/list-policies/tabOptions.json rename frontend/src/pages/tools/{ => template-tools}/community-repos/catalog.jsx (84%) rename frontend/src/pages/tools/{ => template-tools}/community-repos/index.jsx (96%) rename frontend/src/pages/tools/{ => template-tools}/community-repos/repo.jsx (74%) rename frontend/src/pages/tools/{ => template-tools}/template-packages/index.jsx (75%) rename frontend/src/pages/tools/{ => template-tools}/templatelib/index.jsx (95%) diff --git a/frontend/src/components/CippCards/CippUniversalSearchV2.jsx b/frontend/src/components/CippCards/CippUniversalSearchV2.jsx index a017782e50..6b36f0f841 100644 --- a/frontend/src/components/CippCards/CippUniversalSearchV2.jsx +++ b/frontend/src/components/CippCards/CippUniversalSearchV2.jsx @@ -63,14 +63,35 @@ async function loadTabOptions() { "/tenant/gdap-management", "/tenant/gdap-management/relationships/relationship", "/cipp/settings", + // Template pages folded into their parent pages as tabs — listed here so the + // universal page search still indexes them (they are no longer nav leaves). + "/email/administration/contacts", + "/email/administration/tenant-allow-block-lists", + "/email/transport/list-rules", + "/email/transport/list-connectors", + "/email/spamfilter/list-spamfilter", + "/email/spamfilter/list-connectionfilter", + "/security/safelinks/safelinks", + "/security/compliance/dlp", + "/security/compliance/retention", + "/security/compliance/labels", + "/security/compliance/sit", + "/identity/administration/groups", + "/identity/administration/jit-admin", + "/endpoint/MEM/list-policies", + "/endpoint/MEM/reusable-settings", + "/endpoint/MEM/assignment-filters", + "/endpoint/applications/list", + "/tenant/conditional/list-policies", + "/teams-share/sharepoint", ]; const tabOptions = []; for (const basePath of tabOptionPaths) { try { - const module = await import(`../../pages${basePath}/tabOptions.json`); - const options = module.default || module; + const tabModule = await import(`../../pages${basePath}/tabOptions.json`); + const options = tabModule.default || tabModule; options.forEach((option) => { tabOptions.push({ @@ -242,6 +263,11 @@ export const CippUniversalSearchV2 = React.forwardRef( const normalizedTabPath = tab.path.replace(/\/$/, ""); const normalizedBasePath = tab.basePath?.replace(/\/$/, ""); + // A tab whose own path is a real nav leaf is already surfaced as a Page result + // (every tabOptions list starts with its parent). Skip it here so it is not listed + // twice — the same page once as "Page" and once as "Tab". + if (leafItemIndex[normalizedTabPath]) return null; + let pageItem = leafItemIndex[normalizedTabPath]; if (!pageItem && normalizedBasePath) { diff --git a/frontend/src/layouts/config.jsx b/frontend/src/layouts/config.jsx index b6872c326f..809c9207da 100644 --- a/frontend/src/layouts/config.jsx +++ b/frontend/src/layouts/config.jsx @@ -46,12 +46,6 @@ export const nativeMenuItems = [ path: '/identity/administration/groups', permissions: ['Identity.Group.*'], }, - { - title: 'Group Templates', - path: '/identity/administration/group-templates', - permissions: ['Identity.Group.*'], - scope: 'global', - }, { title: 'Devices', path: '/identity/administration/devices', @@ -72,18 +66,6 @@ export const nativeMenuItems = [ path: '/identity/administration/jit-admin', permissions: ['Identity.Role.*'], }, - { - title: 'JIT Admin Templates', - path: '/identity/administration/jit-admin-templates', - permissions: ['Identity.Role.*'], - scope: 'global', - }, - { - title: 'JIT Role Templates', - path: '/identity/administration/jit-role-templates', - permissions: ['Identity.Role.*'], - scope: 'global', - }, { title: 'Vacation Mode', path: '/identity/administration/vacation-mode', @@ -251,10 +233,9 @@ export const nativeMenuItems = [ permissions: ['Tenant.ConditionalAccess.*'], }, { - title: 'CA Templates', - path: '/tenant/conditional/list-template', + title: 'CA Vacation Mode', + path: '/tenant/conditional/deploy-vacation', permissions: ['Tenant.ConditionalAccess.*'], - scope: 'global', }, { title: 'Named Locations', @@ -406,12 +387,6 @@ export const nativeMenuItems = [ path: '/security/safelinks/safelinks', permissions: ['Security.SafeLinksPolicy.*'], }, - { - title: 'Safe Links Templates', - path: '/security/safelinks/safelinks-template', - permissions: ['Security.SafeLinksPolicy.*'], - scope: 'global', - }, ], }, { @@ -428,45 +403,21 @@ export const nativeMenuItems = [ path: '/security/compliance/dlp', permissions: ['Security.DlpCompliancePolicy.*'], }, - { - title: 'DLP Policy Templates', - path: '/security/compliance/dlp-templates', - permissions: ['Security.DlpCompliancePolicy.*'], - scope: 'global', - }, { title: 'Retention Policies', path: '/security/compliance/retention', permissions: ['Security.RetentionCompliancePolicy.*'], }, - { - title: 'Retention Policy Templates', - path: '/security/compliance/retention-templates', - permissions: ['Security.RetentionCompliancePolicy.*'], - scope: 'global', - }, { title: 'Sensitivity Labels', path: '/security/compliance/labels', permissions: ['Security.SensitivityLabel.*'], }, - { - title: 'Sensitivity Label Templates', - path: '/security/compliance/labels-templates', - permissions: ['Security.SensitivityLabel.*'], - scope: 'global', - }, { title: 'Sensitive Information Types', path: '/security/compliance/sit', permissions: ['Security.SensitiveInfoType.*'], }, - { - title: 'Sensitive Info Type Templates', - path: '/security/compliance/sit-templates', - permissions: ['Security.SensitiveInfoType.*'], - scope: 'global', - }, ], }, ], @@ -555,13 +506,6 @@ export const nativeMenuItems = [ path: '/endpoint/applications/queue', permissions: ['Endpoint.Application.*'], }, - { - title: 'Application Templates', - path: '/endpoint/applications/templates', - docsPath: 'endpoint/applications/application-templates', - permissions: ['Endpoint.Application.*'], - scope: 'global', - }, ], }, { @@ -624,39 +568,18 @@ export const nativeMenuItems = [ docsPath: 'endpoint/mem/list-appprotection-policies', permissions: ['Endpoint.MEM.*'], }, - { - title: 'Policy Templates', - path: '/endpoint/MEM/list-templates', - docsPath: 'endpoint/mem/list-templates', - permissions: ['Endpoint.MEM.*'], - scope: 'global', - }, { title: 'Reusable Settings', path: '/endpoint/MEM/reusable-settings', docsPath: 'endpoint/mem/reusable-settings', permissions: ['Endpoint.MEM.*'], }, - { - title: 'Reusable Settings Templates', - path: '/endpoint/MEM/reusable-settings-templates', - docsPath: 'endpoint/mem/reusable-settings-templates', - permissions: ['Endpoint.MEM.*'], - scope: 'global', - }, { title: 'Assignment Filters', path: '/endpoint/MEM/assignment-filters', docsPath: 'endpoint/mem/assignment-filters', permissions: ['Endpoint.MEM.*'], }, - { - title: 'Assignment Filter Templates', - path: '/endpoint/MEM/assignment-filter-templates', - docsPath: 'endpoint/mem/assignment-filter-templates', - permissions: ['Endpoint.MEM.*'], - scope: 'global', - }, { title: 'Scripts', path: '/endpoint/MEM/list-scripts', @@ -729,25 +652,28 @@ export const nativeMenuItems = [ path: '/teams-share/sharepoint', permissions: ['Sharepoint.Admin.*'], }, - { - title: 'SharePoint Templates', - path: '/teams-share/sharepoint-templates', - permissions: ['Sharepoint.Admin.*'], - }, { title: 'Deleted Sites', path: '/teams-share/deleted-sites', permissions: ['Sharepoint.Admin.*'], }, { - title: 'Sharing Report', - path: '/teams-share/sharing-report', - permissions: ['Sharepoint.Site.*'], - }, - { - title: 'Permissions Report', - path: '/teams-share/permissions-report', + title: 'Reports', permissions: ['Sharepoint.Site.*'], + items: [ + { + title: 'Sharing Report', + path: '/teams-share/reports/sharing-report', + docsPath: 'teams-share/sharing-report', + permissions: ['Sharepoint.Site.*'], + }, + { + title: 'Permissions Report', + path: '/teams-share/reports/permissions-report', + docsPath: 'teams-share/permissions-report', + permissions: ['Sharepoint.Site.*'], + }, + ], }, { title: 'External Users', @@ -828,12 +754,6 @@ export const nativeMenuItems = [ path: '/email/administration/contacts', permissions: ['Exchange.Contact.*'], }, - { - title: 'Contact Templates', - path: '/email/administration/contacts-template', - permissions: ['Exchange.Contact.*'], - scope: 'global', - }, { title: 'Quarantine', path: '/email/administration/quarantine', @@ -849,12 +769,6 @@ export const nativeMenuItems = [ path: '/email/administration/tenant-allow-block-lists', permissions: ['Exchange.SpamFilter.*'], }, - { - title: 'Allow/Block List Templates', - path: '/email/administration/tenant-allow-block-list-templates', - permissions: ['Exchange.SpamFilter.*'], - scope: 'global', - }, { title: 'Retention Policies & Tags', path: '/email/administration/exchange-retention/policies', @@ -871,23 +785,11 @@ export const nativeMenuItems = [ path: '/email/transport/list-rules', permissions: ['Exchange.TransportRule.*'], }, - { - title: 'Transport Templates', - path: '/email/transport/list-templates', - permissions: ['Exchange.TransportRule.*'], - scope: 'global', - }, { title: 'Connectors', path: '/email/transport/list-connectors', permissions: ['Exchange.Connector.*'], }, - { - title: 'Connector Templates', - path: '/email/transport/list-connector-templates', - permissions: ['Exchange.Connector.*'], - scope: 'global', - }, ], }, { @@ -899,23 +801,11 @@ export const nativeMenuItems = [ path: '/email/spamfilter/list-spamfilter', permissions: ['Exchange.SpamFilter.*'], }, - { - title: 'Spamfilter Templates', - path: '/email/spamfilter/list-templates', - permissions: ['Exchange.SpamFilter.*'], - scope: 'global', - }, { title: 'Connection Filter', path: '/email/spamfilter/list-connectionfilter', permissions: ['Exchange.ConnectionFilter.*'], }, - { - title: 'Connection Filter Templates', - path: '/email/spamfilter/list-connectionfilter-templates', - permissions: ['Exchange.ConnectionFilter.*'], - scope: 'global', - }, { title: 'Quarantine Policies', path: '/email/spamfilter/list-quarantine-policies', @@ -1158,25 +1048,34 @@ export const nativeMenuItems = [ scope: 'global', }, { - title: 'Template Library', - path: '/tools/templatelib', - roles: ['editor', 'admin', 'superadmin'], - permissions: ['CIPP.Core.*'], - scope: 'global', - }, - { - title: 'Catalog', - path: '/tools/community-repos', - roles: ['editor', 'admin', 'superadmin'], - permissions: ['CIPP.Core.*'], - scope: 'global', - }, - { - title: 'Template Package Manager', - path: '/tools/template-packages', - roles: ['editor', 'admin', 'superadmin'], - permissions: ['Tenant.ConditionalAccess.*', 'Endpoint.MEM.*'], - scope: 'global', + title: 'Template Tools', + permissions: ['CIPP.Core.*', 'Tenant.ConditionalAccess.*', 'Endpoint.MEM.*'], + items: [ + { + title: 'Template Library', + path: '/tools/template-tools/templatelib', + docsPath: 'tools/templatelib', + roles: ['editor', 'admin', 'superadmin'], + permissions: ['CIPP.Core.*'], + scope: 'global', + }, + { + title: 'Catalog', + path: '/tools/template-tools/community-repos', + docsPath: 'tools/community-repos', + roles: ['editor', 'admin', 'superadmin'], + permissions: ['CIPP.Core.*'], + scope: 'global', + }, + { + title: 'Template Package Manager', + path: '/tools/template-tools/template-packages', + docsPath: 'tools/template-packages', + roles: ['editor', 'admin', 'superadmin'], + permissions: ['Tenant.ConditionalAccess.*', 'Endpoint.MEM.*'], + scope: 'global', + }, + ], }, { title: 'Scheduler', diff --git a/frontend/src/pages/email/administration/contacts-template/index.jsx b/frontend/src/pages/email/administration/contacts-template/index.jsx index 81bedc7302..2d7f3e6890 100644 --- a/frontend/src/pages/email/administration/contacts-template/index.jsx +++ b/frontend/src/pages/email/administration/contacts-template/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../contacts/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { Button } from "@mui/material"; import Link from "next/link"; @@ -112,5 +114,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/administration/contacts/index.jsx b/frontend/src/pages/email/administration/contacts/index.jsx index 9e3d08916c..d4ebd719e9 100644 --- a/frontend/src/pages/email/administration/contacts/index.jsx +++ b/frontend/src/pages/email/administration/contacts/index.jsx @@ -1,6 +1,8 @@ import { useMemo } from "react"; import { CippIcons } from "../../../../utils/icon-registry" import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { CippAddContactDrawer } from "../../../../components/CippComponents/CippAddContactDrawer"; import { CippDeployContactTemplateDrawer } from "../../../../components/CippComponents/CippDeployContactTemplateDrawer"; @@ -106,5 +108,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/administration/contacts/tabOptions.json b/frontend/src/pages/email/administration/contacts/tabOptions.json new file mode 100644 index 0000000000..bb36cc7757 --- /dev/null +++ b/frontend/src/pages/email/administration/contacts/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Contacts", + "path": "/email/administration/contacts", + "icon": "People" + }, + { + "label": "Contact Templates", + "path": "/email/administration/contacts-template", + "icon": "Description" + } +] diff --git a/frontend/src/pages/email/administration/tenant-allow-block-list-templates/index.jsx b/frontend/src/pages/email/administration/tenant-allow-block-list-templates/index.jsx index f4f586c3f5..db4a47b09c 100644 --- a/frontend/src/pages/email/administration/tenant-allow-block-list-templates/index.jsx +++ b/frontend/src/pages/email/administration/tenant-allow-block-list-templates/index.jsx @@ -1,6 +1,8 @@ import { useState } from 'react' import { CippIcons } from '../../../../utils/icon-registry' import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from '../tenant-allow-block-lists/tabOptions.json' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import CippJsonView from '../../../../components/CippFormPages/CippJSONView' import { CippTenantAllowBlockListTemplateDrawer } from '../../../../components/CippComponents/CippTenantAllowBlockListTemplateDrawer.jsx' @@ -72,5 +74,9 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/email/administration/tenant-allow-block-lists/index.jsx b/frontend/src/pages/email/administration/tenant-allow-block-lists/index.jsx index 901c58d3ef..be32a7fd05 100644 --- a/frontend/src/pages/email/administration/tenant-allow-block-lists/index.jsx +++ b/frontend/src/pages/email/administration/tenant-allow-block-lists/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { CippAddTenantAllowBlockListDrawer } from '../../../../components/CippComponents/CippAddTenantAllowBlockListDrawer.jsx' @@ -72,6 +74,10 @@ const Page = () => { ); } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/email/administration/tenant-allow-block-lists/tabOptions.json b/frontend/src/pages/email/administration/tenant-allow-block-lists/tabOptions.json new file mode 100644 index 0000000000..f611f7fddc --- /dev/null +++ b/frontend/src/pages/email/administration/tenant-allow-block-lists/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Tenant Allow/Block Lists", + "path": "/email/administration/tenant-allow-block-lists", + "icon": "Block" + }, + { + "label": "Allow/Block List Templates", + "path": "/email/administration/tenant-allow-block-list-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/email/spamfilter/list-connectionfilter-templates/index.jsx b/frontend/src/pages/email/spamfilter/list-connectionfilter-templates/index.jsx index 0d1e9ff097..e4a5e695d5 100644 --- a/frontend/src/pages/email/spamfilter/list-connectionfilter-templates/index.jsx +++ b/frontend/src/pages/email/spamfilter/list-connectionfilter-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../list-connectionfilter/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { ApiGetCall } from "../../../../api/ApiCall"; @@ -99,5 +101,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/spamfilter/list-connectionfilter/index.jsx b/frontend/src/pages/email/spamfilter/list-connectionfilter/index.jsx index 9255ae4573..e152268c7c 100644 --- a/frontend/src/pages/email/spamfilter/list-connectionfilter/index.jsx +++ b/frontend/src/pages/email/spamfilter/list-connectionfilter/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; @@ -58,5 +60,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/spamfilter/list-connectionfilter/tabOptions.json b/frontend/src/pages/email/spamfilter/list-connectionfilter/tabOptions.json new file mode 100644 index 0000000000..5f42cda43e --- /dev/null +++ b/frontend/src/pages/email/spamfilter/list-connectionfilter/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Connection Filter", + "path": "/email/spamfilter/list-connectionfilter", + "icon": "FilterAlt" + }, + { + "label": "Connection Filter Templates", + "path": "/email/spamfilter/list-connectionfilter-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/email/spamfilter/list-spamfilter/index.jsx b/frontend/src/pages/email/spamfilter/list-spamfilter/index.jsx index 3761252308..67f453ccd6 100644 --- a/frontend/src/pages/email/spamfilter/list-spamfilter/index.jsx +++ b/frontend/src/pages/email/spamfilter/list-spamfilter/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; @@ -112,5 +114,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/spamfilter/list-spamfilter/tabOptions.json b/frontend/src/pages/email/spamfilter/list-spamfilter/tabOptions.json new file mode 100644 index 0000000000..e408134bd0 --- /dev/null +++ b/frontend/src/pages/email/spamfilter/list-spamfilter/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Spamfilter", + "path": "/email/spamfilter/list-spamfilter", + "icon": "Shield" + }, + { + "label": "Spamfilter Templates", + "path": "/email/spamfilter/list-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/email/spamfilter/list-templates/index.jsx b/frontend/src/pages/email/spamfilter/list-templates/index.jsx index 0db4af52d0..7df7f7bca1 100644 --- a/frontend/src/pages/email/spamfilter/list-templates/index.jsx +++ b/frontend/src/pages/email/spamfilter/list-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../list-spamfilter/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { ApiGetCall } from "../../../../api/ApiCall"; @@ -97,5 +99,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/transport/list-connector-templates/index.jsx b/frontend/src/pages/email/transport/list-connector-templates/index.jsx index 2c75eed0ec..1958cdb92a 100644 --- a/frontend/src/pages/email/transport/list-connector-templates/index.jsx +++ b/frontend/src/pages/email/transport/list-connector-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../list-connectors/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import ConnectorTemplateDetails from "../../../../components/CippComponents/ConnectorTemplateDetails"; @@ -92,5 +94,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/transport/list-connectors/index.jsx b/frontend/src/pages/email/transport/list-connectors/index.jsx index 360439362a..4d9e0766ac 100644 --- a/frontend/src/pages/email/transport/list-connectors/index.jsx +++ b/frontend/src/pages/email/transport/list-connectors/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { CippAddConnectorDrawer } from "../../../../components/CippComponents/CippAddConnectorDrawer"; @@ -105,5 +107,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/transport/list-connectors/tabOptions.json b/frontend/src/pages/email/transport/list-connectors/tabOptions.json new file mode 100644 index 0000000000..7d4265b6dc --- /dev/null +++ b/frontend/src/pages/email/transport/list-connectors/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Connectors", + "path": "/email/transport/list-connectors", + "icon": "SettingsEthernet" + }, + { + "label": "Connector Templates", + "path": "/email/transport/list-connector-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/email/transport/list-rules/index.jsx b/frontend/src/pages/email/transport/list-rules/index.jsx index 95aa3a761a..90f7984485 100644 --- a/frontend/src/pages/email/transport/list-rules/index.jsx +++ b/frontend/src/pages/email/transport/list-rules/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { CippAddTransportRuleDrawer } from "../../../../components/CippComponents/CippAddTransportRuleDrawer"; @@ -146,5 +148,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/email/transport/list-rules/tabOptions.json b/frontend/src/pages/email/transport/list-rules/tabOptions.json new file mode 100644 index 0000000000..e0018902b3 --- /dev/null +++ b/frontend/src/pages/email/transport/list-rules/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Transport Rules", + "path": "/email/transport/list-rules", + "icon": "Mail" + }, + { + "label": "Transport Templates", + "path": "/email/transport/list-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/email/transport/list-templates/index.jsx b/frontend/src/pages/email/transport/list-templates/index.jsx index 889f8f3227..06ff763aea 100644 --- a/frontend/src/pages/email/transport/list-templates/index.jsx +++ b/frontend/src/pages/email/transport/list-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../list-rules/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { ApiGetCall } from "../../../../api/ApiCall"; @@ -88,5 +90,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/endpoint/MEM/assignment-filter-templates/index.jsx b/frontend/src/pages/endpoint/MEM/assignment-filter-templates/index.jsx index e7ab411a2b..bf38d28f77 100644 --- a/frontend/src/pages/endpoint/MEM/assignment-filter-templates/index.jsx +++ b/frontend/src/pages/endpoint/MEM/assignment-filter-templates/index.jsx @@ -2,6 +2,8 @@ import { Button } from "@mui/material"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../assignment-filters/tabOptions.json"; import Link from "next/link"; import { ApiGetCall } from "../../../../api/ApiCall"; import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard"; @@ -129,6 +131,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/endpoint/MEM/assignment-filters/index.jsx b/frontend/src/pages/endpoint/MEM/assignment-filters/index.jsx index b88a40ddf6..1e9be7f2ae 100644 --- a/frontend/src/pages/endpoint/MEM/assignment-filters/index.jsx +++ b/frontend/src/pages/endpoint/MEM/assignment-filters/index.jsx @@ -2,6 +2,8 @@ import { Button } from "@mui/material"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import Link from "next/link"; import { Stack } from "@mui/system"; import { useCippReportDB } from "../../../../components/CippComponents/CippReportDBControls"; @@ -104,6 +106,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/endpoint/MEM/assignment-filters/tabOptions.json b/frontend/src/pages/endpoint/MEM/assignment-filters/tabOptions.json new file mode 100644 index 0000000000..f2e5cb0c84 --- /dev/null +++ b/frontend/src/pages/endpoint/MEM/assignment-filters/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Assignment Filters", + "path": "/endpoint/MEM/assignment-filters", + "icon": "FilterList" + }, + { + "label": "Assignment Filter Templates", + "path": "/endpoint/MEM/assignment-filter-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/endpoint/MEM/list-policies/index.jsx b/frontend/src/pages/endpoint/MEM/list-policies/index.jsx index 35390d845b..d0d29207a8 100644 --- a/frontend/src/pages/endpoint/MEM/list-policies/index.jsx +++ b/frontend/src/pages/endpoint/MEM/list-policies/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { PermissionButton } from '../../../../utils/permissions' import { CippPolicyDeployDrawer } from '../../../../components/CippComponents/CippPolicyDeployDrawer.jsx' @@ -80,5 +82,9 @@ const Page = () => { ); } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/endpoint/MEM/list-policies/tabOptions.json b/frontend/src/pages/endpoint/MEM/list-policies/tabOptions.json new file mode 100644 index 0000000000..724b7aed9e --- /dev/null +++ b/frontend/src/pages/endpoint/MEM/list-policies/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Configuration Policies", + "path": "/endpoint/MEM/list-policies", + "icon": "Settings" + }, + { + "label": "Policy Templates", + "path": "/endpoint/MEM/list-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/endpoint/MEM/list-templates/index.jsx b/frontend/src/pages/endpoint/MEM/list-templates/index.jsx index 584bc73d50..772b81aee8 100644 --- a/frontend/src/pages/endpoint/MEM/list-templates/index.jsx +++ b/frontend/src/pages/endpoint/MEM/list-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from '../list-policies/tabOptions.json' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import CippJsonView from '../../../../components/CippFormPages/CippJSONView' @@ -278,5 +280,9 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/endpoint/MEM/reusable-settings-templates/index.jsx b/frontend/src/pages/endpoint/MEM/reusable-settings-templates/index.jsx index a4cf637035..8827a7e3a5 100644 --- a/frontend/src/pages/endpoint/MEM/reusable-settings-templates/index.jsx +++ b/frontend/src/pages/endpoint/MEM/reusable-settings-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../reusable-settings/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import CippJsonView from "../../../../components/CippFormPages/CippJSONView"; @@ -105,5 +107,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/endpoint/MEM/reusable-settings/index.jsx b/frontend/src/pages/endpoint/MEM/reusable-settings/index.jsx index 5d0cc3e469..40480c5d20 100644 --- a/frontend/src/pages/endpoint/MEM/reusable-settings/index.jsx +++ b/frontend/src/pages/endpoint/MEM/reusable-settings/index.jsx @@ -3,6 +3,8 @@ import { CippIcons } from "../../../../utils/icon-registry" import { CippReusableSettingsDeployDrawer } from "../../../../components/CippComponents/CippReusableSettingsDeployDrawer.jsx"; import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { useSettings } from "../../../../hooks/use-settings"; import CippJsonView from "../../../../components/CippFormPages/CippJSONView"; import { Stack } from "@mui/system"; @@ -93,6 +95,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/endpoint/MEM/reusable-settings/tabOptions.json b/frontend/src/pages/endpoint/MEM/reusable-settings/tabOptions.json new file mode 100644 index 0000000000..cf18a774cd --- /dev/null +++ b/frontend/src/pages/endpoint/MEM/reusable-settings/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Reusable Settings", + "path": "/endpoint/MEM/reusable-settings", + "icon": "Tune" + }, + { + "label": "Reusable Settings Templates", + "path": "/endpoint/MEM/reusable-settings-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/endpoint/applications/list/index.jsx b/frontend/src/pages/endpoint/applications/list/index.jsx index 75892b0cb4..fc05ede350 100644 --- a/frontend/src/pages/endpoint/applications/list/index.jsx +++ b/frontend/src/pages/endpoint/applications/list/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog.jsx' @@ -408,5 +410,9 @@ const Page = () => { ); } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/endpoint/applications/list/tabOptions.json b/frontend/src/pages/endpoint/applications/list/tabOptions.json new file mode 100644 index 0000000000..8ff927a43e --- /dev/null +++ b/frontend/src/pages/endpoint/applications/list/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Applications", + "path": "/endpoint/applications/list", + "icon": "Apps" + }, + { + "label": "Application Templates", + "path": "/endpoint/applications/templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/endpoint/applications/templates/index.jsx b/frontend/src/pages/endpoint/applications/templates/index.jsx index 89ac3d1e39..6e2ea924a1 100644 --- a/frontend/src/pages/endpoint/applications/templates/index.jsx +++ b/frontend/src/pages/endpoint/applications/templates/index.jsx @@ -1,6 +1,8 @@ import { useState } from 'react' import { CippIcons } from '../../../../utils/icon-registry' import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from '../list/tabOptions.json' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { CippAppTemplateDrawer } from '../../../../components/CippComponents/CippAppTemplateDrawer' import CippJsonView from '../../../../components/CippFormPages/CippJSONView' @@ -179,5 +181,9 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/identity/administration/group-templates/index.jsx b/frontend/src/pages/identity/administration/group-templates/index.jsx index 862a86389c..df7ff621c8 100644 --- a/frontend/src/pages/identity/administration/group-templates/index.jsx +++ b/frontend/src/pages/identity/administration/group-templates/index.jsx @@ -2,6 +2,8 @@ import { Button } from "@mui/material"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../groups/tabOptions.json"; import Link from "next/link"; import { ApiGetCall } from "../../../../api/ApiCall"; import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard"; @@ -129,6 +131,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/identity/administration/groups/index.jsx b/frontend/src/pages/identity/administration/groups/index.jsx index b0d966123e..ca492a218a 100644 --- a/frontend/src/pages/identity/administration/groups/index.jsx +++ b/frontend/src/pages/identity/administration/groups/index.jsx @@ -2,6 +2,8 @@ import { Button } from '@mui/material' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import Link from 'next/link' import { Stack } from '@mui/system' import { useSettings } from '../../../../hooks/use-settings' @@ -655,6 +657,10 @@ const Page = () => { ); } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/identity/administration/groups/tabOptions.json b/frontend/src/pages/identity/administration/groups/tabOptions.json new file mode 100644 index 0000000000..28224bb376 --- /dev/null +++ b/frontend/src/pages/identity/administration/groups/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Groups", + "path": "/identity/administration/groups", + "icon": "Groups" + }, + { + "label": "Group Templates", + "path": "/identity/administration/group-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/identity/administration/jit-admin-templates/index.jsx b/frontend/src/pages/identity/administration/jit-admin-templates/index.jsx index 3ca0d84b89..9ec39e6e1a 100644 --- a/frontend/src/pages/identity/administration/jit-admin-templates/index.jsx +++ b/frontend/src/pages/identity/administration/jit-admin-templates/index.jsx @@ -2,6 +2,8 @@ import { Button } from "@mui/material"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../jit-admin/tabOptions.json"; import Link from "next/link"; import { ApiGetCall } from "../../../../api/ApiCall"; import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard"; @@ -136,6 +138,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/identity/administration/jit-admin/index.jsx b/frontend/src/pages/identity/administration/jit-admin/index.jsx index 62bb5ab167..61b6676aac 100644 --- a/frontend/src/pages/identity/administration/jit-admin/index.jsx +++ b/frontend/src/pages/identity/administration/jit-admin/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import CippTablePage from "../../../../components/CippComponents/CippTablePage"; import { Button } from "@mui/material"; @@ -48,6 +50,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/identity/administration/jit-admin/tabOptions.json b/frontend/src/pages/identity/administration/jit-admin/tabOptions.json new file mode 100644 index 0000000000..558d21283c --- /dev/null +++ b/frontend/src/pages/identity/administration/jit-admin/tabOptions.json @@ -0,0 +1,17 @@ +[ + { + "label": "JIT Admin", + "path": "/identity/administration/jit-admin", + "icon": "AdminPanelSettings" + }, + { + "label": "JIT Admin Templates", + "path": "/identity/administration/jit-admin-templates", + "icon": "Description" + }, + { + "label": "JIT Role Templates", + "path": "/identity/administration/jit-role-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/identity/administration/jit-role-templates/index.jsx b/frontend/src/pages/identity/administration/jit-role-templates/index.jsx index 2c76126ddf..686ad4b714 100644 --- a/frontend/src/pages/identity/administration/jit-role-templates/index.jsx +++ b/frontend/src/pages/identity/administration/jit-role-templates/index.jsx @@ -2,6 +2,8 @@ import { Button } from "@mui/material"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../jit-admin/tabOptions.json"; import Link from "next/link"; import { CippPropertyListCard } from "../../../../components/CippCards/CippPropertyListCard"; import { getCippTranslation } from "../../../../utils/get-cipp-translation"; @@ -73,6 +75,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/security/compliance/dlp-templates/index.jsx b/frontend/src/pages/security/compliance/dlp-templates/index.jsx index 7d8152d7d0..40eda5d543 100644 --- a/frontend/src/pages/security/compliance/dlp-templates/index.jsx +++ b/frontend/src/pages/security/compliance/dlp-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../dlp/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { ApiGetCall } from "../../../../api/ApiCall"; @@ -103,5 +105,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/security/compliance/dlp/index.jsx b/frontend/src/pages/security/compliance/dlp/index.jsx index 842282aaee..6f6b47c533 100644 --- a/frontend/src/pages/security/compliance/dlp/index.jsx +++ b/frontend/src/pages/security/compliance/dlp/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { CippDeployCompliancePolicyDrawer } from '../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx' @@ -110,5 +112,9 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/security/compliance/dlp/tabOptions.json b/frontend/src/pages/security/compliance/dlp/tabOptions.json new file mode 100644 index 0000000000..2e2eca98fd --- /dev/null +++ b/frontend/src/pages/security/compliance/dlp/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "DLP Policies", + "path": "/security/compliance/dlp", + "icon": "Policy" + }, + { + "label": "DLP Policy Templates", + "path": "/security/compliance/dlp-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/security/compliance/labels-templates/index.jsx b/frontend/src/pages/security/compliance/labels-templates/index.jsx index 4f7eb4dfd5..46284bfa9e 100644 --- a/frontend/src/pages/security/compliance/labels-templates/index.jsx +++ b/frontend/src/pages/security/compliance/labels-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../labels/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { ApiGetCall } from "../../../../api/ApiCall"; @@ -110,5 +112,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/security/compliance/labels/index.jsx b/frontend/src/pages/security/compliance/labels/index.jsx index 8a47097ae7..5167aaa5ec 100644 --- a/frontend/src/pages/security/compliance/labels/index.jsx +++ b/frontend/src/pages/security/compliance/labels/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { CippDeployCompliancePolicyDrawer } from '../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx' @@ -113,5 +115,9 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/security/compliance/labels/tabOptions.json b/frontend/src/pages/security/compliance/labels/tabOptions.json new file mode 100644 index 0000000000..a56435f1a8 --- /dev/null +++ b/frontend/src/pages/security/compliance/labels/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Sensitivity Labels", + "path": "/security/compliance/labels", + "icon": "Label" + }, + { + "label": "Sensitivity Label Templates", + "path": "/security/compliance/labels-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/security/compliance/retention-templates/index.jsx b/frontend/src/pages/security/compliance/retention-templates/index.jsx index eb3632835e..02a73994d7 100644 --- a/frontend/src/pages/security/compliance/retention-templates/index.jsx +++ b/frontend/src/pages/security/compliance/retention-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../retention/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { ApiGetCall } from "../../../../api/ApiCall"; @@ -103,5 +105,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/security/compliance/retention/index.jsx b/frontend/src/pages/security/compliance/retention/index.jsx index ccb5fecf49..17ce522992 100644 --- a/frontend/src/pages/security/compliance/retention/index.jsx +++ b/frontend/src/pages/security/compliance/retention/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { CippDeployCompliancePolicyDrawer } from '../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx' @@ -112,5 +114,9 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/security/compliance/retention/tabOptions.json b/frontend/src/pages/security/compliance/retention/tabOptions.json new file mode 100644 index 0000000000..10cb5e07d3 --- /dev/null +++ b/frontend/src/pages/security/compliance/retention/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Retention Policies", + "path": "/security/compliance/retention", + "icon": "Schedule" + }, + { + "label": "Retention Policy Templates", + "path": "/security/compliance/retention-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/security/compliance/sit-templates/index.jsx b/frontend/src/pages/security/compliance/sit-templates/index.jsx index 1b8da08203..05db58e050 100644 --- a/frontend/src/pages/security/compliance/sit-templates/index.jsx +++ b/frontend/src/pages/security/compliance/sit-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../sit/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { ApiGetCall } from "../../../../api/ApiCall"; @@ -106,5 +108,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/security/compliance/sit/index.jsx b/frontend/src/pages/security/compliance/sit/index.jsx index 4cb80026f1..7e46d2eb0e 100644 --- a/frontend/src/pages/security/compliance/sit/index.jsx +++ b/frontend/src/pages/security/compliance/sit/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../../layouts/index' +import { TabbedLayout } from '../../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippIcons } from '../../../../utils/icon-registry' import { CippTablePage } from '../../../../components/CippComponents/CippTablePage.jsx' import { CippDeployCompliancePolicyDrawer } from '../../../../components/CippComponents/CippDeployCompliancePolicyDrawer.jsx' @@ -85,5 +87,9 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/security/compliance/sit/tabOptions.json b/frontend/src/pages/security/compliance/sit/tabOptions.json new file mode 100644 index 0000000000..06f41eda7e --- /dev/null +++ b/frontend/src/pages/security/compliance/sit/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Sensitive Information Types", + "path": "/security/compliance/sit", + "icon": "Fingerprint" + }, + { + "label": "Sensitive Info Type Templates", + "path": "/security/compliance/sit-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/security/safelinks/safelinks-template/index.jsx b/frontend/src/pages/security/safelinks/safelinks-template/index.jsx index ae3eef4d04..87bfeaddfa 100644 --- a/frontend/src/pages/security/safelinks/safelinks-template/index.jsx +++ b/frontend/src/pages/security/safelinks/safelinks-template/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../safelinks/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Button } from "@mui/material"; @@ -117,5 +119,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; \ No newline at end of file diff --git a/frontend/src/pages/security/safelinks/safelinks/index.jsx b/frontend/src/pages/security/safelinks/safelinks/index.jsx index 2681dabb69..f9bd0c6481 100644 --- a/frontend/src/pages/security/safelinks/safelinks/index.jsx +++ b/frontend/src/pages/security/safelinks/safelinks/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { CippIcons } from "../../../../utils/icon-registry" import { Button } from "@mui/material"; @@ -179,5 +181,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; \ No newline at end of file diff --git a/frontend/src/pages/security/safelinks/safelinks/tabOptions.json b/frontend/src/pages/security/safelinks/safelinks/tabOptions.json new file mode 100644 index 0000000000..67e90bdb4e --- /dev/null +++ b/frontend/src/pages/security/safelinks/safelinks/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "Safe Links Policies", + "path": "/security/safelinks/safelinks", + "icon": "Link" + }, + { + "label": "Safe Links Templates", + "path": "/security/safelinks/safelinks-template", + "icon": "Description" + } +] diff --git a/frontend/src/pages/teams-share/permissions-report/index.jsx b/frontend/src/pages/teams-share/reports/permissions-report/index.jsx similarity index 91% rename from frontend/src/pages/teams-share/permissions-report/index.jsx rename to frontend/src/pages/teams-share/reports/permissions-report/index.jsx index 06a73b31c4..e8f791afbf 100644 --- a/frontend/src/pages/teams-share/permissions-report/index.jsx +++ b/frontend/src/pages/teams-share/reports/permissions-report/index.jsx @@ -1,20 +1,20 @@ import { useRef, useState } from 'react' -import { CippIcons } from '../../../utils/icon-registry' -import { Layout as DashboardLayout } from '../../../layouts/index' -import { CippInfoBar } from '../../../components/CippCards/CippInfoBar' -import { CippChartCard } from '../../../components/CippCards/CippChartCard' -import { CippImageCard } from '../../../components/CippCards/CippImageCard' -import { CippDataTable } from '../../../components/CippTable/CippDataTable' -import { CippApiDialog } from '../../../components/CippComponents/CippApiDialog' -import { CippMultiQueueTracker } from '../../../components/CippComponents/CippMultiQueueTracker' -import { CippQueryRefreshButton } from '../../../components/CippComponents/CippQueryRefreshButton' -import { PermissionsReportButton } from '../../../components/CippPdf/PermissionsReportButton' -import { useDialog } from '../../../hooks/use-dialog' -import { ApiGetCall } from '../../../api/ApiCall' -import { useSettings } from '../../../hooks/use-settings' +import { CippIcons } from '../../../../utils/icon-registry' +import { Layout as DashboardLayout } from '../../../../layouts/index' +import { CippInfoBar } from '../../../../components/CippCards/CippInfoBar' +import { CippChartCard } from '../../../../components/CippCards/CippChartCard' +import { CippImageCard } from '../../../../components/CippCards/CippImageCard' +import { CippDataTable } from '../../../../components/CippTable/CippDataTable' +import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog' +import { CippMultiQueueTracker } from '../../../../components/CippComponents/CippMultiQueueTracker' +import { CippQueryRefreshButton } from '../../../../components/CippComponents/CippQueryRefreshButton' +import { PermissionsReportButton } from '../../../../components/CippPdf/PermissionsReportButton' +import { useDialog } from '../../../../hooks/use-dialog' +import { ApiGetCall } from '../../../../api/ApiCall' +import { useSettings } from '../../../../hooks/use-settings' import { Alert, Button, Container, Stack, SvgIcon, Typography } from '@mui/material' import { Grid } from '@mui/system' -import { CippExpandableAlert } from '../../../components/CippComponents/CippExpandableAlert' +import { CippExpandableAlert } from '../../../../components/CippComponents/CippExpandableAlert' // This report is compiled from one cache, so Sync starts a single queue. const syncRows = [{ Name: 'SharePointPermissions' }] diff --git a/frontend/src/pages/teams-share/sharing-report/index.jsx b/frontend/src/pages/teams-share/reports/sharing-report/index.jsx similarity index 94% rename from frontend/src/pages/teams-share/sharing-report/index.jsx rename to frontend/src/pages/teams-share/reports/sharing-report/index.jsx index cb27cc756c..e60d721158 100644 --- a/frontend/src/pages/teams-share/sharing-report/index.jsx +++ b/frontend/src/pages/teams-share/reports/sharing-report/index.jsx @@ -1,18 +1,18 @@ import { useRef, useState } from 'react' -import { CippIcons } from '../../../utils/icon-registry' -import { Layout as DashboardLayout } from '../../../layouts/index' -import { CippInfoBar } from '../../../components/CippCards/CippInfoBar' -import { CippMultiQueueTracker } from '../../../components/CippComponents/CippMultiQueueTracker' -import { CippQueryRefreshButton } from '../../../components/CippComponents/CippQueryRefreshButton' -import { SharingReportButton } from '../../../components/CippPdf/SharingReportButton' -import { CippChartCard } from '../../../components/CippCards/CippChartCard' -import { CippImageCard } from '../../../components/CippCards/CippImageCard' -import { CippPropertyListCard } from '../../../components/CippCards/CippPropertyListCard' -import { CippDataTable } from '../../../components/CippTable/CippDataTable' -import { CippApiDialog } from '../../../components/CippComponents/CippApiDialog' -import { useDialog } from '../../../hooks/use-dialog' -import { ApiGetCall } from '../../../api/ApiCall' -import { useSettings } from '../../../hooks/use-settings' +import { CippIcons } from '../../../../utils/icon-registry' +import { Layout as DashboardLayout } from '../../../../layouts/index' +import { CippInfoBar } from '../../../../components/CippCards/CippInfoBar' +import { CippMultiQueueTracker } from '../../../../components/CippComponents/CippMultiQueueTracker' +import { CippQueryRefreshButton } from '../../../../components/CippComponents/CippQueryRefreshButton' +import { SharingReportButton } from '../../../../components/CippPdf/SharingReportButton' +import { CippChartCard } from '../../../../components/CippCards/CippChartCard' +import { CippImageCard } from '../../../../components/CippCards/CippImageCard' +import { CippPropertyListCard } from '../../../../components/CippCards/CippPropertyListCard' +import { CippDataTable } from '../../../../components/CippTable/CippDataTable' +import { CippApiDialog } from '../../../../components/CippComponents/CippApiDialog' +import { useDialog } from '../../../../hooks/use-dialog' +import { ApiGetCall } from '../../../../api/ApiCall' +import { useSettings } from '../../../../hooks/use-settings' import { Alert, Button, diff --git a/frontend/src/pages/teams-share/sharepoint-templates/index.jsx b/frontend/src/pages/teams-share/sharepoint-templates/index.jsx index ae5fe10050..e7b35c77d6 100644 --- a/frontend/src/pages/teams-share/sharepoint-templates/index.jsx +++ b/frontend/src/pages/teams-share/sharepoint-templates/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../layouts/index' +import { TabbedLayout } from '../../../layouts/TabbedLayout' +import tabOptions from '../sharepoint/tabOptions.json' import { CippIcons } from '../../../utils/icon-registry' import { CippTablePage } from '../../../components/CippComponents/CippTablePage.jsx' import { CippSharePointTemplateDeployDrawer } from '../../../components/CippComponents/CippSharePointTemplateDeployDrawer.jsx' @@ -92,6 +94,10 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/teams-share/sharepoint/index.jsx b/frontend/src/pages/teams-share/sharepoint/index.jsx index baaa56b6b5..3080043a14 100644 --- a/frontend/src/pages/teams-share/sharepoint/index.jsx +++ b/frontend/src/pages/teams-share/sharepoint/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from '../../../layouts/index' +import { TabbedLayout } from '../../../layouts/TabbedLayout' +import tabOptions from './tabOptions.json' import { CippIcons } from '../../../utils/icon-registry' import { CippTablePage } from '../../../components/CippComponents/CippTablePage.jsx' import { Alert, Button, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material' @@ -801,6 +803,10 @@ const Page = () => { ) } -Page.getLayout = (page) => {page} +Page.getLayout = (page) => ( + + {page} + +) export default Page diff --git a/frontend/src/pages/teams-share/sharepoint/tabOptions.json b/frontend/src/pages/teams-share/sharepoint/tabOptions.json new file mode 100644 index 0000000000..03c8f8f9df --- /dev/null +++ b/frontend/src/pages/teams-share/sharepoint/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "SharePoint", + "path": "/teams-share/sharepoint", + "icon": "Cloud" + }, + { + "label": "SharePoint Templates", + "path": "/teams-share/sharepoint-templates", + "icon": "Description" + } +] diff --git a/frontend/src/pages/tenant/conditional/list-policies/index.jsx b/frontend/src/pages/tenant/conditional/list-policies/index.jsx index f8b213d2c8..d70831951e 100644 --- a/frontend/src/pages/tenant/conditional/list-policies/index.jsx +++ b/frontend/src/pages/tenant/conditional/list-policies/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "./tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Box } from "@mui/material"; @@ -185,5 +187,9 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/tenant/conditional/list-policies/tabOptions.json b/frontend/src/pages/tenant/conditional/list-policies/tabOptions.json new file mode 100644 index 0000000000..e3f8e27120 --- /dev/null +++ b/frontend/src/pages/tenant/conditional/list-policies/tabOptions.json @@ -0,0 +1,12 @@ +[ + { + "label": "CA Policies", + "path": "/tenant/conditional/list-policies", + "icon": "Security" + }, + { + "label": "CA Templates", + "path": "/tenant/conditional/list-template", + "icon": "Description" + } +] diff --git a/frontend/src/pages/tenant/conditional/list-template/index.jsx b/frontend/src/pages/tenant/conditional/list-template/index.jsx index 8d74a5ab56..4a7e4903a1 100644 --- a/frontend/src/pages/tenant/conditional/list-template/index.jsx +++ b/frontend/src/pages/tenant/conditional/list-template/index.jsx @@ -1,4 +1,6 @@ import { Layout as DashboardLayout } from "../../../../layouts/index"; +import { TabbedLayout } from "../../../../layouts/TabbedLayout"; +import tabOptions from "../list-policies/tabOptions.json"; import { CippIcons } from "../../../../utils/icon-registry" import { CippTablePage } from "../../../../components/CippComponents/CippTablePage.jsx"; import { Button, Box } from "@mui/material"; @@ -180,6 +182,10 @@ const Page = () => { ); }; -Page.getLayout = (page) => {page}; +Page.getLayout = (page) => ( + + {page} + +); export default Page; diff --git a/frontend/src/pages/tools/community-repos/catalog.jsx b/frontend/src/pages/tools/template-tools/community-repos/catalog.jsx similarity index 84% rename from frontend/src/pages/tools/community-repos/catalog.jsx rename to frontend/src/pages/tools/template-tools/community-repos/catalog.jsx index ce5288606f..48fad01c85 100644 --- a/frontend/src/pages/tools/community-repos/catalog.jsx +++ b/frontend/src/pages/tools/template-tools/community-repos/catalog.jsx @@ -1,11 +1,11 @@ import { useMemo } from "react"; -import { CippIcons } from "../../../utils/icon-registry"; +import { CippIcons } from "../../../../utils/icon-registry"; import { useRouter } from "next/router"; -import { Layout as DashboardLayout } from "../../../layouts/index"; +import { Layout as DashboardLayout } from "../../../../layouts/index"; import { Box, Button, Container, Stack, Typography } from "@mui/material"; import Link from "next/link"; -import { CippHead } from "../../../components/CippComponents/CippHead"; -import { CippTemplateCatalog } from "../../../components/CippComponents/CippTemplateCatalog"; +import { CippHead } from "../../../../components/CippComponents/CippHead"; +import { CippTemplateCatalog } from "../../../../components/CippComponents/CippTemplateCatalog"; const Page = () => { const router = useRouter(); @@ -44,7 +44,7 @@ const Page = () => { variant="outlined" startIcon={} component={Link} - href="/tools/community-repos" + href="/tools/template-tools/community-repos" > Back to Sources diff --git a/frontend/src/pages/tools/community-repos/index.jsx b/frontend/src/pages/tools/template-tools/community-repos/index.jsx similarity index 96% rename from frontend/src/pages/tools/community-repos/index.jsx rename to frontend/src/pages/tools/template-tools/community-repos/index.jsx index 02b149155a..f64e0f672f 100644 --- a/frontend/src/pages/tools/community-repos/index.jsx +++ b/frontend/src/pages/tools/template-tools/community-repos/index.jsx @@ -1,8 +1,8 @@ import { useState } from "react"; -import { CippIcons } from "../../../utils/icon-registry" +import { CippIcons } from "../../../../utils/icon-registry" import { useRouter } from "next/router"; import NextLink from "next/link"; -import { Layout as DashboardLayout } from "../../../layouts/index"; +import { Layout as DashboardLayout } from "../../../../layouts/index"; import { Box, Button, @@ -29,13 +29,13 @@ import { Grid } from "@mui/system"; import ListItemIcon from "@mui/material/ListItemIcon"; import ListItemText from "@mui/material/ListItemText"; import { useForm, FormProvider } from "react-hook-form"; -import { ApiGetCall, ApiPostCall } from "../../../api/ApiCall"; -import { CippHead } from "../../../components/CippComponents/CippHead"; -import { CippApiResults } from "../../../components/CippComponents/CippApiResults"; -import CippFormComponent from "../../../components/CippComponents/CippFormComponent"; -import { CippFormCondition } from "../../../components/CippComponents/CippFormCondition"; -import { CippAutoComplete } from "../../../components/CippComponents/CippAutocomplete"; -import { getTemplateTypeLabel } from "../../../components/CippComponents/CippTemplateCatalog"; +import { ApiGetCall, ApiPostCall } from "../../../../api/ApiCall"; +import { CippHead } from "../../../../components/CippComponents/CippHead"; +import { CippApiResults } from "../../../../components/CippComponents/CippApiResults"; +import CippFormComponent from "../../../../components/CippComponents/CippFormComponent"; +import { CippFormCondition } from "../../../../components/CippComponents/CippFormCondition"; +import { CippAutoComplete } from "../../../../components/CippComponents/CippAutocomplete"; +import { getTemplateTypeLabel } from "../../../../components/CippComponents/CippTemplateCatalog"; const typeOptions = [ { label: "Intune Policy", value: "IntuneTemplate" }, @@ -147,7 +147,7 @@ const Page = () => { }; const handleOpenRepo = (repo) => { - router.push(`/tools/community-repos/catalog?Repo=${encodeURIComponent(repo.FullName)}`); + router.push(`/tools/template-tools/community-repos/catalog?Repo=${encodeURIComponent(repo.FullName)}`); }; const handleAddRepo = () => { @@ -206,7 +206,7 @@ const Page = () => { variant="outlined" startIcon={} component={NextLink} - href="/tools/community-repos/catalog" + href="/tools/template-tools/community-repos/catalog" > Browse All Templates diff --git a/frontend/src/pages/tools/community-repos/repo.jsx b/frontend/src/pages/tools/template-tools/community-repos/repo.jsx similarity index 74% rename from frontend/src/pages/tools/community-repos/repo.jsx rename to frontend/src/pages/tools/template-tools/community-repos/repo.jsx index 36d84ecac9..e231451ed7 100644 --- a/frontend/src/pages/tools/community-repos/repo.jsx +++ b/frontend/src/pages/tools/template-tools/community-repos/repo.jsx @@ -1,13 +1,13 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; -import { Layout as DashboardLayout } from "../../../layouts"; +import { Layout as DashboardLayout } from "../../../../layouts"; // The per-repo template browser has been replaced by the unified community template catalog. const Page = () => { const router = useRouter(); useEffect(() => { - router.replace("/tools/community-repos"); + router.replace("/tools/template-tools/community-repos"); }, [router]); return null; diff --git a/frontend/src/pages/tools/template-packages/index.jsx b/frontend/src/pages/tools/template-tools/template-packages/index.jsx similarity index 75% rename from frontend/src/pages/tools/template-packages/index.jsx rename to frontend/src/pages/tools/template-tools/template-packages/index.jsx index 78153b2e11..0f8428bb84 100644 --- a/frontend/src/pages/tools/template-packages/index.jsx +++ b/frontend/src/pages/tools/template-tools/template-packages/index.jsx @@ -1,7 +1,7 @@ import { Box, Container, Stack, Typography } from '@mui/material' -import { Layout as DashboardLayout } from '../../../layouts/index' -import { CippHead } from '../../../components/CippComponents/CippHead' -import { CippTemplatePackageManager } from '../../../components/CippComponents/CippTemplatePackageManager' +import { Layout as DashboardLayout } from '../../../../layouts/index' +import { CippHead } from '../../../../components/CippComponents/CippHead' +import { CippTemplatePackageManager } from '../../../../components/CippComponents/CippTemplatePackageManager' const Page = () => { return ( diff --git a/frontend/src/pages/tools/templatelib/index.jsx b/frontend/src/pages/tools/template-tools/templatelib/index.jsx similarity index 95% rename from frontend/src/pages/tools/templatelib/index.jsx rename to frontend/src/pages/tools/template-tools/templatelib/index.jsx index 63ac09f820..748a4090fb 100644 --- a/frontend/src/pages/tools/templatelib/index.jsx +++ b/frontend/src/pages/tools/template-tools/templatelib/index.jsx @@ -2,14 +2,14 @@ import { useEffect } from "react"; import { Divider, Typography, Alert, Chip, Link } from "@mui/material"; import NextLink from "next/link"; import { useForm, useWatch } from "react-hook-form"; -import { Layout as DashboardLayout } from "../../../layouts/index"; -import CippFormPage from "../../../components/CippFormPages/CippFormPage"; -import CippFormComponent from "../../../components/CippComponents/CippFormComponent"; -import { CippFormTenantSelector } from "../../../components/CippComponents/CippFormTenantSelector"; +import { Layout as DashboardLayout } from "../../../../layouts/index"; +import CippFormPage from "../../../../components/CippFormPages/CippFormPage"; +import CippFormComponent from "../../../../components/CippComponents/CippFormComponent"; +import { CippFormTenantSelector } from "../../../../components/CippComponents/CippFormTenantSelector"; import { Grid } from "@mui/system"; -import { CippFormCondition } from "../../../components/CippComponents/CippFormCondition"; -import { CippDataTable } from "../../../components/CippTable/CippDataTable"; -import { ApiGetCall } from "../../../api/ApiCall"; +import { CippFormCondition } from "../../../../components/CippComponents/CippFormCondition"; +import { CippDataTable } from "../../../../components/CippTable/CippDataTable"; +import { ApiGetCall } from "../../../../api/ApiCall"; // react-query key for the "configured template libraries" table below. Passed to CippFormPage as a // related query key so creating a new library refreshes the table without a manual reload. diff --git a/frontend/src/utils/route-redirects.js b/frontend/src/utils/route-redirects.js index e4ab3bcecd..c44787a5fd 100644 --- a/frontend/src/utils/route-redirects.js +++ b/frontend/src/utils/route-redirects.js @@ -33,6 +33,19 @@ export const routeRedirects = { // User Templates moved from Manage Tenant tabs to the Users tabbed layout. '/tenant/manage/user-defaults': '/identity/administration/users/user-defaults', + // The SharePoint/OneDrive Sharing and Permissions reports moved under a Reports group + // in the Teams & SharePoint section. + '/teams-share/sharing-report': '/teams-share/reports/sharing-report', + '/teams-share/permissions-report': + '/teams-share/reports/permissions-report', + // Template Library, Catalog and Template Package Manager moved under a Template Tools + // group in the Tools section. + '/tools/templatelib': '/tools/template-tools/templatelib', + '/tools/community-repos': '/tools/template-tools/community-repos', + '/tools/community-repos/catalog': + '/tools/template-tools/community-repos/catalog', + '/tools/community-repos/repo': '/tools/template-tools/community-repos/repo', + '/tools/template-packages': '/tools/template-tools/template-packages', } export const getRedirectTarget = (pathname) => {