Skip to content

feat: unify organization and deployment management settings #13602

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Jul 1, 2024
Prev Previous commit
Next Next commit
🧼
  • Loading branch information
aslilac committed Jun 27, 2024
commit bb49eb64e819e5971c6fa36fe02200963205ffa5
25 changes: 8 additions & 17 deletions site/src/pages/ManagementSettingsPage/CreateOrganizationPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,8 @@ import type { FC } from "react";
import { useMutation, useQueryClient } from "react-query";
import { useNavigate } from "react-router-dom";
import { createOrganization } from "api/queries/organizations";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { displaySuccess } from "components/GlobalSnackbar/utils";
import { Stack } from "components/Stack/Stack";
import { CreateOrganizationPageView } from "./CreateOrganizationPageView";
import { isApiValidationError } from "api/errors";

const CreateOrganizationPage: FC = () => {
const navigate = useNavigate();
Expand All @@ -19,20 +16,14 @@ const CreateOrganizationPage: FC = () => {
const error = createOrganizationMutation.error;

return (
<Stack>
{Boolean(error) && !isApiValidationError(error) && (
<ErrorAlert error={error} />
)}

<CreateOrganizationPageView
error={error}
onSubmit={async (values) => {
await createOrganizationMutation.mutateAsync(values);
displaySuccess("Organization created.");
navigate(`/organizations/${values.name}`);
}}
/>
</Stack>
<CreateOrganizationPageView
error={error}
onSubmit={async (values) => {
await createOrganizationMutation.mutateAsync(values);
displaySuccess("Organization created.");
navigate(`/organizations/${values.name}`);
}}
/>
);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { Meta, StoryObj } from "@storybook/react";
import { mockApiError } from "testHelpers/entities";
import { CreateOrganizationPageView } from "./CreateOrganizationPageView";

const meta: Meta<typeof CreateOrganizationPageView> = {
Expand All @@ -10,3 +11,21 @@ export default meta;
type Story = StoryObj<typeof CreateOrganizationPageView>;

export const Example: Story = {};

export const Error: Story = {
args: { error: "Oh no!" },
};

export const InvalidName: Story = {
args: {
error: mockApiError({
message: "Display name is bad",
validations: [
{
field: "display_name",
detail: "That display name is terrible. What were you thinking?",
},
],
}),
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ import TextField from "@mui/material/TextField";
import { useFormik } from "formik";
import type { FC } from "react";
import * as Yup from "yup";
import { isApiValidationError } from "api/errors";
import type { CreateOrganizationRequest } from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import {
FormFields,
FormSection,
Expand Down Expand Up @@ -56,6 +58,12 @@ export const CreateOrganizationPageView: FC<
<PageHeaderTitle>Organization settings</PageHeaderTitle>
</PageHeader>

{Boolean(error) && !isApiValidationError(error) && (
<div css={{ marginBottom: 32 }}>
<ErrorAlert error={error} />
</div>
)}

<HorizontalForm
onSubmit={form.handleSubmit}
aria-label="Organization settings form"
Expand Down
43 changes: 17 additions & 26 deletions site/src/pages/ManagementSettingsPage/OrganizationSettingsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,10 @@ import {
updateOrganization,
deleteOrganization,
} from "api/queries/organizations";
import { isApiValidationError } from "api/errors";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { EmptyState } from "components/EmptyState/EmptyState";
import { displaySuccess } from "components/GlobalSnackbar/utils";
import { Stack } from "components/Stack/Stack";
import { useOrganizationSettings } from "./ManagementSettingsLayout";
import { OrganizationSettingsPageView } from "./OrganizationSettingsPageView";
import { EmptyState } from "components/EmptyState/EmptyState";

const OrganizationSettingsPage: FC = () => {
const navigate = useNavigate();
Expand All @@ -36,28 +33,22 @@ const OrganizationSettingsPage: FC = () => {
}

return (
<Stack>
{Boolean(error) && !isApiValidationError(error) && (
<ErrorAlert error={error} />
)}

<OrganizationSettingsPageView
organization={org}
error={error}
onSubmit={async (values) => {
await updateOrganizationMutation.mutateAsync({
orgId: org.id,
req: values,
});
displaySuccess("Organization settings updated.");
}}
onDeleteOrganization={() => {
deleteOrganizationMutation.mutate(org.id);
displaySuccess("Organization deleted.");
navigate("/organizations");
}}
/>
</Stack>
<OrganizationSettingsPageView
organization={org}
error={error}
onSubmit={async (values) => {
await updateOrganizationMutation.mutateAsync({
orgId: org.id,
req: values,
});
displaySuccess("Organization settings updated.");
}}
onDeleteOrganization={() => {
deleteOrganizationMutation.mutate(org.id);
displaySuccess("Organization deleted.");
navigate("/organizations");
}}
/>
);
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import TextField from "@mui/material/TextField";
import { useFormik } from "formik";
import { type FC, useState } from "react";
import * as Yup from "yup";
import { isApiValidationError } from "api/errors";
import type {
Organization,
UpdateOrganizationRequest,
} from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { DeleteDialog } from "components/Dialogs/DeleteDialog/DeleteDialog";
import {
FormFields,
Expand Down Expand Up @@ -68,6 +70,12 @@ export const OrganizationSettingsPageView: FC<
<PageHeaderTitle>Organization settings</PageHeaderTitle>
</PageHeader>

{Boolean(error) && !isApiValidationError(error) && (
<div css={{ marginBottom: 32 }}>
<ErrorAlert error={error} />
</div>
)}

<HorizontalForm
onSubmit={form.handleSubmit}
aria-label="Organization settings form"
Expand Down
2 changes: 1 addition & 1 deletion site/src/pages/ManagementSettingsPage/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ const classNames = {

display: block;
font-size: 13px;
margin-left: 42px;
margin-left: 44px;
padding: 4px 12px;
border-radius: 4px;
transition: background-color 0.15s ease-in-out;
Expand Down
Loading