Skip to content

Commit 06cdfe2

Browse files
committed
wip org management ui
1 parent f149279 commit 06cdfe2

File tree

7 files changed

+90
-1
lines changed

7 files changed

+90
-1
lines changed

site/src/api/api.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,14 @@ class ApiMethods {
505505
return response.data;
506506
};
507507

508+
createOrganization = async (params: TypesGen.CreateOrganizationRequest) => {
509+
const response = await this.axios.post<TypesGen.Organization>(
510+
"/api/v2/organizations",
511+
params,
512+
);
513+
return response.data;
514+
};
515+
508516
getOrganization = async (
509517
organizationId: string,
510518
): Promise<TypesGen.Organization> => {

site/src/api/queries/organizations.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { QueryClient } from "react-query";
2+
import { API } from "api/api";
3+
import type { CreateOrganizationRequest } from "api/typesGenerated";
4+
import { meKey, myOrganizationsKey } from "./users";
5+
6+
export const createOrganization = (queryClient: QueryClient) => {
7+
return {
8+
mutationFn: (params: CreateOrganizationRequest) =>
9+
API.createOrganization(params),
10+
11+
onSuccess: async () => {
12+
await queryClient.invalidateQueries(meKey);
13+
await queryClient.invalidateQueries(myOrganizationsKey);
14+
},
15+
};
16+
};

site/src/api/queries/users.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ export const authMethods = () => {
124124
};
125125
};
126126

127-
const meKey = ["me"];
127+
export const meKey = ["me"];
128128

129129
export const me = (metadata: MetadataState<User>) => {
130130
return cachedQuery({
@@ -249,3 +249,12 @@ export const updateAppearanceSettings = (
249249
},
250250
};
251251
};
252+
253+
export const myOrganizationsKey = ["organizations", "me"] as const;
254+
255+
export const myOrganizations = () => {
256+
return {
257+
queryKey: myOrganizationsKey,
258+
queryFn: () => API.getOrganizations(),
259+
};
260+
};

site/src/api/typesGenerated.ts

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

site/src/pages/DeploySettingsPage/Sidebar.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
Sidebar as BaseSidebar,
1313
SidebarNavItem,
1414
} from "components/Sidebar/Sidebar";
15+
import TeamsIcon from "@mui/icons-material/Groups";
1516

1617
export const Sidebar: FC = () => {
1718
return (
@@ -22,6 +23,9 @@ export const Sidebar: FC = () => {
2223
<SidebarNavItem href="licenses" icon={ApprovalIcon}>
2324
Licenses
2425
</SidebarNavItem>
26+
<SidebarNavItem href="teams" icon={TeamsIcon}>
27+
Teams
28+
</SidebarNavItem>
2529
<SidebarNavItem href="appearance" icon={Brush}>
2630
Appearance
2731
</SidebarNavItem>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import Button from "@mui/material/Button";
2+
import { type FC, useState } from "react";
3+
import { useMutation, useQuery, useQueryClient } from "react-query";
4+
import { createOrganization } from "api/queries/organizations";
5+
import { myOrganizations } from "api/queries/users";
6+
import { TextField } from "@mui/material";
7+
8+
const TeamsSettingsPage: FC = () => {
9+
const queryClient = useQueryClient();
10+
const addTeamMutation = useMutation(createOrganization(queryClient));
11+
const organizationsQuery = useQuery(myOrganizations());
12+
const [newOrgName, setNewOrgName] = useState("");
13+
return (
14+
<>
15+
<TextField
16+
label="New organization name"
17+
onChange={(event) => setNewOrgName(event.target.value)}
18+
/>
19+
<p>{String(addTeamMutation.error)}</p>
20+
<Button onClick={() => addTeamMutation.mutate({ name: newOrgName })}>
21+
add new team
22+
</Button>
23+
24+
{organizationsQuery.data?.map((org) => (
25+
<div key={org.id}>
26+
{org.name}{" "}
27+
<Button
28+
onClick={() =>
29+
console.log(
30+
"I tried to delete an org and all I got was this log message",
31+
)
32+
}
33+
>
34+
Delete
35+
</Button>
36+
</div>
37+
))}
38+
</>
39+
);
40+
};
41+
42+
export default TeamsSettingsPage;

site/src/router.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ const AddNewLicensePage = lazy(
220220
() =>
221221
import("./pages/DeploySettingsPage/LicensesSettingsPage/AddNewLicensePage"),
222222
);
223+
const TeamsSettingsPage = lazy(
224+
() =>
225+
import("./pages/DeploySettingsPage/TeamsSettingsPage/TeamsSettingsPage"),
226+
);
223227
const TemplateEmbedPage = lazy(
224228
() => import("./pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPage"),
225229
);
@@ -329,6 +333,7 @@ export const router = createBrowserRouter(
329333
<Route path="general" element={<GeneralSettingsPage />} />
330334
<Route path="licenses" element={<LicensesSettingsPage />} />
331335
<Route path="licenses/add" element={<AddNewLicensePage />} />
336+
<Route path="teams" element={<TeamsSettingsPage />} />
332337
<Route path="security" element={<SecuritySettingsPage />} />
333338
<Route
334339
path="observability"

0 commit comments

Comments
 (0)