Skip to content

Commit

Permalink
more page boilerplate
Browse files Browse the repository at this point in the history
  • Loading branch information
TheAndrewJackson committed Dec 4, 2023
1 parent c549ed8 commit 5bfc8d8
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 42 deletions.
2 changes: 1 addition & 1 deletion clients/admin-ui/src/features/common/api.slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export const baseApi = createApi({
"Roles",
"User",
"Configuration Settings",
"TCF Purpose Override"
"TCF Purpose Override",
],
endpoints: () => ({}),
});
13 changes: 12 additions & 1 deletion clients/admin-ui/src/features/plus/plus.slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import {
SystemScannerStatus,
SystemScanResponse,
SystemsDiff,
TCFPurposeOverrideSchema
TCFPurposeOverrideSchema,
} from "~/types/api";
import {
DataUseDeclaration,
Expand Down Expand Up @@ -428,6 +428,16 @@ const plusApi = baseApi.injectEndpoints({
}),
providesTags: ["TCF Purpose Override"],
}),
patchTcfPurposeOverrides: build.mutation<
TCFPurposeOverrideSchema[],
TCFPurposeOverrideSchema[]
>({
query: () => ({
url: `plus/tcf/purpose_overrides`,
method: "PATCH",
}),
invalidatesTags: ["TCF Purpose Override"],
}),
}),
});

Expand Down Expand Up @@ -465,6 +475,7 @@ export const {
usePatchPlusSystemConnectionConfigsMutation,
useCreatePlusSaasConnectionConfigMutation,
useGetTcfPurposeOverridesQuery,
usePatchTcfPurposeOverridesMutation,
} = plusApi;

export const selectHealth: (state: RootState) => HealthCheck | undefined =
Expand Down
67 changes: 27 additions & 40 deletions clients/admin-ui/src/pages/management/consent.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/* eslint-disable react/no-array-index-key */
import { AddIcon } from "@chakra-ui/icons";
import {
Box,
Button,
Expand All @@ -15,43 +14,39 @@ import { SerializedError } from "@reduxjs/toolkit";
import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query";
import { FieldArray, Form, Formik, FormikHelpers } from "formik";
import type { NextPage } from "next";
import * as Yup from "yup";

import { selectPurposes } from "~/features/common/purpose.slice";
import { useAppSelector } from "~/app/hooks";
import DocsLink from "~/features/common/DocsLink";
import FormSection from "~/features/common/form/FormSection";
import { CustomTextInput } from "~/features/common/form/inputs";
import { CustomSwitch } from "~/features/common/form/inputs";
import { getErrorMessage, isErrorResult } from "~/features/common/helpers";
import Layout from "~/features/common/Layout";
import { errorToastParams, successToastParams } from "~/features/common/toast";
import { useFeatures } from "~/features/common/features";
import {
CORSOrigins,
selectApplicationConfig,
selectCORSOrigins,
useGetConfigurationSettingsQuery,
usePutConfigurationSettingsMutation,
} from "~/features/privacy-requests/privacy-requests.slice";
import { ApplicationConfig } from "~/types/api";
import { useGetTcfPurposeOverridesQuery} from "~/features/plus/plus.slice"
useGetTcfPurposeOverridesQuery,
usePatchTcfPurposeOverridesMutation,
useGetHealthQuery,
} from "~/features/plus/plus.slice";
import { TCFPurposeOverrideSchema } from "~/types/api";

type FormValues = CORSOrigins;
type FormValues = { purposeOverrides: TCFPurposeOverrideSchema[] };

const ConsentConfigPage: NextPage = () => {
const { isLoading: isLoadingGetQuery } = useGetConfigurationSettingsQuery();
const corsOrigins = useAppSelector(selectCORSOrigins());
const applicationConfig = useAppSelector(selectApplicationConfig());
const [putConfigSettingsTrigger, { isLoading: isLoadingPutMutation }] =
usePutConfigurationSettingsMutation();
const {data: tcfPurposeOverrides} = useGetTcfPurposeOverridesQuery();
const { isLoading: isHealthCheckLoading } = useGetHealthQuery();
const { tcf: isTcfEnabled } = useFeatures();
const { data: tcfPurposeOverrides } = useGetTcfPurposeOverridesQuery(
undefined,
{
skip: isHealthCheckLoading || !isTcfEnabled,
}
);
const [patchTcfPurposeOverridesTrigger] =
usePatchTcfPurposeOverridesMutation();
const purposes = useAppSelector(selectPurposes);

const toast = useToast();

const ValidationSchema = Yup.object().shape({
cors_origins: Yup.array()
.nullable()
.of(Yup.string().required().trim().url().label("URL")),
});

const handleSubmit = async (
values: FormValues,
formikHelpers: FormikHelpers<FormValues>
Expand All @@ -63,29 +58,19 @@ const ConsentConfigPage: NextPage = () => {
if (isErrorResult(result)) {
const errorMsg = getErrorMessage(
result.error,
`An unexpected error occurred while saving CORS domains. Please try again.`
`An unexpected error occurred while saving TCF Purpose Overrides. Please try again.`
);
toast(errorToastParams(errorMsg));
} else {
toast(successToastParams("CORS domains saved successfully"));
toast(successToastParams("TCF Purpose Overrides saved successfully"));
// Reset state such that isDirty will be checked again before next save
formikHelpers.resetForm({ values });
}
};

const payloadOrigins =
values.cors_origins && values.cors_origins.length > 0
? values.cors_origins
: undefined;

const payload: ApplicationConfig = {
...applicationConfig,
security: {
cors_origins: payloadOrigins,
},
};
const payload: TCFPurposeOverrideSchema[] = [...values.purposeOverrides];

const result = await putConfigSettingsTrigger(payload);
const result = await patchTcfPurposeOverridesTrigger(payload);

handleResult(result);
};
Expand All @@ -112,7 +97,9 @@ const ConsentConfigPage: NextPage = () => {
</Box>

<Box maxW="600px">
{tcfPurposeOverrides? tcfPurposeOverrides.map((tp)=> (<div>{tp.purpose} </div>)): null}
{tcfPurposeOverrides
? tcfPurposeOverrides.map((tp) => <div>{tp.purpose} </div>)
: null}
</Box>
</Box>
</Layout>
Expand Down

0 comments on commit 5bfc8d8

Please sign in to comment.