Skip to content

Commit 030292e

Browse files
committed
When one clicks the Organization Member button on the Dashboard page, navigate to the Members page and trigger the AddMemberDialog to display
1 parent 08371af commit 030292e

File tree

5 files changed

+38
-6
lines changed

5 files changed

+38
-6
lines changed

src/app/organizations/[id]/members/page.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use client";
22

3-
import { use, useEffect } from "react";
3+
import { use, useEffect, useState } from "react";
4+
import { useSearchParams } from "next/navigation";
45
import { Card, CardContent } from "@/components/ui/card";
56
import { useAuthStore } from "@/lib/providers/auth-store-provider";
67
import { useCoachingRelationshipList } from "@/lib/api/coaching-relationships";
@@ -14,6 +15,11 @@ export default function MembersPage({
1415
}: {
1516
params: Promise<{ id: Id }>;
1617
}) {
18+
const searchParams = useSearchParams();
19+
const [openAddMemberDialog] = useState(
20+
searchParams.get("addMember") === "true"
21+
);
22+
1723
const organizationId = use(params).id;
1824
const setCurrentOrganizationId = useOrganizationStateStore(
1925
(state) => state.setCurrentOrganizationId
@@ -67,6 +73,7 @@ export default function MembersPage({
6773
userSession={userSession}
6874
onRefresh={handleRefresh}
6975
isLoading={isRelationshipsLoading || isUsersLoading}
76+
openAddMemberDialog={openAddMemberDialog}
7077
/>
7178
</div>
7279
);

src/components/ui/dashboard/add-member-button.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@
33
import { useState } from "react";
44
import { Plus, Users } from "lucide-react";
55
import { cn } from "@/components/lib/utils";
6+
import { useOrganizationStateStore } from "@/lib/providers/organization-state-store-provider";
7+
import { useRouter } from "next/navigation";
68

79
interface AddMemberButtonProps {
810
onClick?: () => void;
911
}
1012

1113
export function AddMemberButton({ onClick }: AddMemberButtonProps) {
14+
const router = useRouter();
15+
const { currentOrganizationId } = useOrganizationStateStore((state) => state);
1216
const [hoveredItem, setHoveredItem] = useState<string | null>(null);
1317

1418
const handleMouseEnter = (item: string) => {
@@ -28,7 +32,13 @@ export function AddMemberButton({ onClick }: AddMemberButtonProps) {
2832
)}
2933
onMouseEnter={() => handleMouseEnter("member")}
3034
onMouseLeave={handleMouseLeave}
31-
onClick={onClick}
35+
onClick={() => {
36+
// Navigate to the Members page and display the AddMemberDialog
37+
router.push(
38+
`/organizations/${currentOrganizationId}/members?addMember=true`
39+
);
40+
onClick;
41+
}}
3242
>
3343
<div className="flex h-16 w-16 items-center justify-center rounded-md bg-primary/10">
3444
<Users className="h-8 w-8 text-primary" />

src/components/ui/members/add-member-button.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
"use client";
22

3-
import { useState } from "react";
3+
import { useEffect, useState } from "react";
44
import { Button } from "@/components/ui/button";
55
import { Plus } from "lucide-react";
66
import { AddMemberDialog } from "./add-member-dialog";
77

88
interface AddMemberButtonProps {
99
onMemberAdded: () => void;
10+
/// Force the AddMemberDialog to open
11+
openAddMemberDialog: boolean;
1012
}
1113

12-
export function AddMemberButton({ onMemberAdded }: AddMemberButtonProps) {
14+
export function AddMemberButton({
15+
onMemberAdded,
16+
openAddMemberDialog,
17+
}: AddMemberButtonProps) {
1318
const [open, setOpen] = useState(false);
1419

20+
useEffect(() => {
21+
setOpen(openAddMemberDialog);
22+
}, [openAddMemberDialog]);
23+
1524
return (
1625
<>
1726
<Button onClick={() => setOpen(true)}>

src/components/ui/members/add-member-dialog.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
import { Label } from "@/components/ui/label";
1414
import { Input } from "@/components/ui/input";
1515
import { useUserMutation } from "@/lib/api/organizations/users";
16-
import { User, NewUser } from "@/types/user";
16+
import { NewUser } from "@/types/user";
1717
import { useOrganizationStateStore } from "@/lib/providers/organization-state-store-provider";
1818

1919
interface AddMemberDialogProps {

src/components/ui/members/member-container.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface MemberContainerProps {
1010
userSession: UserSession;
1111
onRefresh: () => void;
1212
isLoading: boolean;
13+
openAddMemberDialog: boolean;
1314
}
1415

1516
export function MemberContainer({
@@ -18,6 +19,8 @@ export function MemberContainer({
1819
userSession,
1920
onRefresh,
2021
isLoading,
22+
/// Force the AddMemberDialog to open
23+
openAddMemberDialog,
2124
}: MemberContainerProps) {
2225
// Find relationships where current user is either coach or coachee
2326
const userRelationships = relationships.filter(
@@ -45,7 +48,10 @@ export function MemberContainer({
4548
<div className="space-y-6">
4649
<div className="flex justify-between items-center">
4750
<h2 className="text-2xl font-semibold">Members</h2>
48-
<AddMemberButton onMemberAdded={onRefresh} />
51+
<AddMemberButton
52+
onMemberAdded={onRefresh}
53+
openAddMemberDialog={openAddMemberDialog}
54+
/>
4955
</div>
5056
<MemberList users={associatedUsers} />
5157
</div>

0 commit comments

Comments
 (0)