feat: persist state at the org level when tab switching

This commit is contained in:
lemmyMwaura
2024-07-27 22:45:53 +03:00
parent 15749a1f52
commit ea39ef9269
4 changed files with 29 additions and 11 deletions
@@ -24,6 +24,7 @@ import {
useRevokeIdentityTokenAuthToken, useRevokeIdentityTokenAuthToken,
useRevokeIdentityUniversalAuthClientSecret} from "@app/hooks/api"; useRevokeIdentityUniversalAuthClientSecret} from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
import { TabSections } from "@app/types";
import { IdentityAuthMethodModal } from "../MembersPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModal"; import { IdentityAuthMethodModal } from "../MembersPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModal";
import { IdentityModal } from "../MembersPage/components/OrgIdentityTab/components/IdentitySection/IdentityModal"; import { IdentityModal } from "../MembersPage/components/OrgIdentityTab/components/IdentitySection/IdentityModal";
@@ -154,7 +155,7 @@ export const IdentityPage = withPermission(
type="submit" type="submit"
leftIcon={<FontAwesomeIcon icon={faChevronLeft} />} leftIcon={<FontAwesomeIcon icon={faChevronLeft} />}
onClick={() => { onClick={() => {
router.push(`/org/${orgId}/members`); router.push(`/org/${orgId}/members?selectedTab=${TabSections.Identities}`);
}} }}
className="mb-4" className="mb-4"
> >
@@ -1,23 +1,38 @@
/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-unused-vars */
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import { Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
import { OrgPermissionActions, OrgPermissionSubjects } from "@app/context"; import { OrgPermissionActions, OrgPermissionSubjects } from "@app/context";
import { withPermission } from "@app/hoc"; import { withPermission } from "@app/hoc";
import { TabSections } from "@app/types";
import { OrgIdentityTab, OrgMembersTab, OrgRoleTabSection } from "./components"; import { OrgIdentityTab, OrgMembersTab, OrgRoleTabSection } from "./components";
enum TabSections {
Member = "members",
Roles = "roles",
Identities = "identities"
}
export const MembersPage = withPermission( export const MembersPage = withPermission(
() => { () => {
const router = useRouter();
const { query } = router;
const selectedTab = query.selectedTab as string;
const [activeTab, setActiveTab] = useState<TabSections>(TabSections.Member);
useEffect(() => {
if (selectedTab && Object.values(TabSections).includes(selectedTab as TabSections)) {
setActiveTab(selectedTab as TabSections);
}
}, [selectedTab]);
const updateSelectedTab = (tab: TabSections) => {
router.push({
pathname: router.pathname,
query: { ...router.query, selectedTab: tab },
});
}
return ( return (
<div className="container mx-auto flex flex-col justify-between bg-bunker-800 text-white"> <div className="container mx-auto flex flex-col justify-between bg-bunker-800 text-white">
<div className="mx-auto mb-6 w-full max-w-7xl py-6 px-6"> <div className="mx-auto mb-6 w-full max-w-7xl py-6 px-6">
<p className="mr-4 mb-4 text-3xl font-semibold text-white">Organization Access Control</p> <p className="mr-4 mb-4 text-3xl font-semibold text-white">Organization Access Control</p>
<Tabs defaultValue={TabSections.Member}> <Tabs value={activeTab} onValueChange={updateSelectedTab}>
<TabList> <TabList>
<Tab value={TabSections.Member}>Users</Tab> <Tab value={TabSections.Member}>Users</Tab>
<Tab value={TabSections.Identities}> <Tab value={TabSections.Identities}>
@@ -25,7 +40,7 @@ export const MembersPage = withPermission(
<p>Machine Identities</p> <p>Machine Identities</p>
</div> </div>
</Tab> </Tab>
<Tab value={TabSections.Roles}>Organization Roles</Tab> <Tab value={TabSections.Roles}>Organization Roles</Tab>
</TabList> </TabList>
<TabPanel value={TabSections.Member}> <TabPanel value={TabSections.Member}>
<OrgMembersTab /> <OrgMembersTab />
+2 -1
View File
@@ -19,6 +19,7 @@ import { OrgPermissionActions, OrgPermissionSubjects, useOrganization } from "@a
import { withPermission } from "@app/hoc"; import { withPermission } from "@app/hoc";
import { useDeleteOrgRole, useGetOrgRole } from "@app/hooks/api"; import { useDeleteOrgRole, useGetOrgRole } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
import { TabSections } from "@app/types";
import { RoleDetailsSection, RoleModal, RolePermissionsSection } from "./components"; import { RoleDetailsSection, RoleModal, RolePermissionsSection } from "./components";
@@ -51,7 +52,7 @@ export const RolePage = withPermission(
}); });
handlePopUpClose("deleteOrgRole"); handlePopUpClose("deleteOrgRole");
router.push(`/org/${orgId}/members`); router.push(`/org/${orgId}/members?selectedTab=${TabSections.Roles}`);
} catch (err) { } catch (err) {
console.error(err); console.error(err);
const error = err as any; const error = err as any;
+2 -1
View File
@@ -29,6 +29,7 @@ import {
useUpdateOrgMembership useUpdateOrgMembership
} from "@app/hooks/api"; } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
import { TabSections } from "@app/types";
import { UserDetailsSection, UserOrgMembershipModal, UserProjectsSection } from "./components"; import { UserDetailsSection, UserOrgMembershipModal, UserProjectsSection } from "./components";
@@ -111,7 +112,7 @@ export const UserPage = withPermission(
type="submit" type="submit"
leftIcon={<FontAwesomeIcon icon={faChevronLeft} />} leftIcon={<FontAwesomeIcon icon={faChevronLeft} />}
onClick={() => { onClick={() => {
router.push(`/org/${orgId}/members`); router.push(`/org/${orgId}/members?selectedTab=${TabSections.Member}`);
}} }}
className="mb-4" className="mb-4"
> >