From f1c8feb709b7fbead917c3c6eca02c0e8a89ec09 Mon Sep 17 00:00:00 2001 From: swve Date: Wed, 15 Mar 2023 22:45:06 +0100 Subject: [PATCH] feat: add organizations setttings panel --- .../settings/account/profile/page.tsx | 3 - front/app/_orgs/[orgslug]/settings/layout.tsx | 1 - .../settings/organization/general/page.tsx | 77 +++++++++++++++++++ .../settings/organization/roles/page.tsx | 9 +++ front/services/settings/org.ts | 15 ++++ 5 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 front/app/_orgs/[orgslug]/settings/organization/general/page.tsx create mode 100644 front/app/_orgs/[orgslug]/settings/organization/roles/page.tsx create mode 100644 front/services/settings/org.ts diff --git a/front/app/_orgs/[orgslug]/settings/account/profile/page.tsx b/front/app/_orgs/[orgslug]/settings/account/profile/page.tsx index 00ee1533..40c11323 100644 --- a/front/app/_orgs/[orgslug]/settings/account/profile/page.tsx +++ b/front/app/_orgs/[orgslug]/settings/account/profile/page.tsx @@ -5,11 +5,8 @@ import { Formik, Form, Field, ErrorMessage } from 'formik'; import { updateProfile } from '@services/settings/profile'; function SettingsProfilePage() { - const auth: any = React.useContext(AuthContext); - - return (
diff --git a/front/app/_orgs/[orgslug]/settings/layout.tsx b/front/app/_orgs/[orgslug]/settings/layout.tsx index 1e8ec138..3a9366ff 100644 --- a/front/app/_orgs/[orgslug]/settings/layout.tsx +++ b/front/app/_orgs/[orgslug]/settings/layout.tsx @@ -27,7 +27,6 @@ function SettingsLayout({ children, params }: { children: React.ReactNode, param Organization diff --git a/front/app/_orgs/[orgslug]/settings/organization/general/page.tsx b/front/app/_orgs/[orgslug]/settings/organization/general/page.tsx new file mode 100644 index 00000000..a415096b --- /dev/null +++ b/front/app/_orgs/[orgslug]/settings/organization/general/page.tsx @@ -0,0 +1,77 @@ +"use client"; +import React from 'react' +import useSWR, { mutate } from "swr"; +import { swrFetcher } from "@services/utils/requests"; +import { getAPIUrl } from '@services/config'; +import { Field, Form, Formik } from 'formik'; +import { updateOrganization } from '@services/settings/org'; + +interface OrganizationValues { + name: string; + description: string; + slug: string; + email: string; +} + +function SettingsOrganizationGeneral(params: any) { + const orgslug = params.params.orgslug; + const { data: org, error: error } = useSWR(`${getAPIUrl()}orgs/slug/${orgslug}`, swrFetcher); + + if (org) { + let orgValues: OrganizationValues = { + name: org.name, + description: org.description, + slug: org.slug, + email: org.email + } + + + const updateOrg = async (values: OrganizationValues) => { + let org_id = org.org_id; + await updateOrganization(org_id, values); + + // Sounds good, doesn't work + // TODO: Fix this + mutate(`${getAPIUrl()}orgs/slug/${values.slug}`); + } + + return ( +
+

Oganization Settings

+

+ {error &&

Failed to load

} + {!org ? ( +
Loading...
+ ) : ( + + { + setTimeout(() => { + alert(JSON.stringify(values, null, 2)); + setSubmitting(false); + updateOrg(values) + }, 400); + }} + > + {({ isSubmitting }) => ( +
+ Name
+ Description
+ Slug
+ Email
+ + + )} +
+ )} + + +
+ ) + } +} + +export default SettingsOrganizationGeneral \ No newline at end of file diff --git a/front/app/_orgs/[orgslug]/settings/organization/roles/page.tsx b/front/app/_orgs/[orgslug]/settings/organization/roles/page.tsx new file mode 100644 index 00000000..842d5e57 --- /dev/null +++ b/front/app/_orgs/[orgslug]/settings/organization/roles/page.tsx @@ -0,0 +1,9 @@ +import React from 'react' + +function SettingsOrganizationRole() { + return ( +
SettingsOrganizationRole
+ ) +} + +export default SettingsOrganizationRole \ No newline at end of file diff --git a/front/services/settings/org.ts b/front/services/settings/org.ts new file mode 100644 index 00000000..2f77ee67 --- /dev/null +++ b/front/services/settings/org.ts @@ -0,0 +1,15 @@ +import { getAPIUrl } from "@services/config"; +import { RequestBody } from "@services/utils/requests"; + +/* + This file includes only POST, PUT, DELETE requests + GET requests are called from the frontend using SWR (https://swr.vercel.app/) +*/ + +export async function updateOrganization(org_id : string, data: any) { + const result: any = await fetch(`${getAPIUrl()}orgs/` + org_id, RequestBody("PUT", data)) + .then((result) => result.json()) + .catch((error) => console.log("error", error)); + + return result; +}