Skip to content

Commit e94af69

Browse files
committed
Remove appearance service
1 parent 8183a34 commit e94af69

File tree

5 files changed

+69
-156
lines changed

5 files changed

+69
-156
lines changed

site/src/api/queries/appearance.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { QueryClient } from "@tanstack/react-query";
2+
import * as API from "api/api";
3+
import { AppearanceConfig } from "api/typesGenerated";
4+
5+
export const appearance = () => {
6+
return {
7+
queryKey: ["appearance"],
8+
queryFn: fetchAppearance,
9+
};
10+
};
11+
12+
export const updateAppearance = (queryClient: QueryClient) => {
13+
return {
14+
mutationFn: API.updateAppearance,
15+
onSuccess: (newConfig: AppearanceConfig) => {
16+
queryClient.setQueryData(["appearance"], newConfig);
17+
},
18+
};
19+
};
20+
21+
const fetchAppearance = () => {
22+
const appearance = document.querySelector("meta[property=appearance]");
23+
if (appearance) {
24+
const rawContent = appearance.getAttribute("content");
25+
try {
26+
return JSON.parse(rawContent as string);
27+
} catch (ex) {
28+
// Ignore this and fetch as normal!
29+
}
30+
}
31+
32+
return API.getAppearance();
33+
};

site/src/components/Dashboard/DashboardProvider.tsx

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useQuery } from "@tanstack/react-query";
2-
import { useMachine } from "@xstate/react";
32
import { buildInfo } from "api/queries/buildInfo";
43
import { experiments } from "api/queries/experiments";
54
import { entitlements } from "api/queries/entitlements";
@@ -10,14 +9,18 @@ import {
109
Experiments,
1110
} from "api/typesGenerated";
1211
import { FullScreenLoader } from "components/Loader/FullScreenLoader";
13-
import { createContext, FC, PropsWithChildren, useContext } from "react";
14-
import { appearanceMachine } from "xServices/appearance/appearanceXService";
12+
import {
13+
createContext,
14+
FC,
15+
PropsWithChildren,
16+
useContext,
17+
useState,
18+
} from "react";
19+
import { appearance } from "api/queries/appearance";
1520

1621
interface Appearance {
1722
config: AppearanceConfig;
18-
preview: boolean;
1923
setPreview: (config: AppearanceConfig) => void;
20-
save: (config: AppearanceConfig) => void;
2124
}
2225

2326
interface DashboardProviderValue {
@@ -35,27 +38,13 @@ export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
3538
const buildInfoQuery = useQuery(buildInfo());
3639
const entitlementsQuery = useQuery(entitlements());
3740
const experimentsQuery = useQuery(experiments());
38-
const [appearanceState, appearanceSend] = useMachine(appearanceMachine);
39-
const { appearance, preview } = appearanceState.context;
41+
const appearanceQuery = useQuery(appearance());
4042
const isLoading =
4143
!buildInfoQuery.data ||
4244
!entitlementsQuery.data ||
43-
!appearance ||
45+
!appearanceQuery.data ||
4446
!experimentsQuery.data;
45-
46-
const setAppearancePreview = (config: AppearanceConfig) => {
47-
appearanceSend({
48-
type: "SET_PREVIEW_APPEARANCE",
49-
appearance: config,
50-
});
51-
};
52-
53-
const saveAppearance = (config: AppearanceConfig) => {
54-
appearanceSend({
55-
type: "SAVE_APPEARANCE",
56-
appearance: config,
57-
});
58-
};
47+
const [configPreview, setConfigPreview] = useState<AppearanceConfig>();
5948

6049
if (isLoading) {
6150
return <FullScreenLoader />;
@@ -68,10 +57,8 @@ export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
6857
entitlements: entitlementsQuery.data,
6958
experiments: experimentsQuery.data,
7059
appearance: {
71-
preview,
72-
config: appearance,
73-
setPreview: setAppearancePreview,
74-
save: saveAppearance,
60+
config: configPreview ?? appearanceQuery.data,
61+
setPreview: setConfigPreview,
7562
},
7663
}}
7764
>

site/src/pages/DeploySettingsPage/AppearanceSettingsPage/AppearanceSettingsPage.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,23 @@ import { FC } from "react";
44
import { Helmet } from "react-helmet-async";
55
import { pageTitle } from "utils/page";
66
import { AppearanceSettingsPageView } from "./AppearanceSettingsPageView";
7+
import { useMutation, useQueryClient } from "@tanstack/react-query";
8+
import { updateAppearance } from "api/queries/appearance";
9+
import { getErrorMessage } from "api/errors";
10+
import { displayError, displaySuccess } from "components/GlobalSnackbar/utils";
711

812
// ServiceBanner is unlike the other Deployment Settings pages because it
913
// implements a form, whereas the others are read-only. We make this
1014
// exception because the Service Banner is visual, and configuring it from
1115
// the command line would be a significantly worse user experience.
1216
const AppearanceSettingsPage: FC = () => {
1317
const { appearance, entitlements } = useDashboard();
18+
const queryClient = useQueryClient();
19+
const updateAppearanceMutation = useMutation(updateAppearance(queryClient));
1420
const isEntitled =
1521
entitlements.features["appearance"].entitlement !== "not_entitled";
1622

17-
const updateAppearance = (
23+
const onSaveAppearance = async (
1824
newConfig: Partial<UpdateAppearanceConfig>,
1925
preview: boolean,
2026
) => {
@@ -26,7 +32,14 @@ const AppearanceSettingsPage: FC = () => {
2632
appearance.setPreview(newAppearance);
2733
return;
2834
}
29-
appearance.save(newAppearance);
35+
try {
36+
await updateAppearanceMutation.mutateAsync(newAppearance);
37+
displaySuccess("Successfully updated appearance settings!");
38+
} catch (error) {
39+
displayError(
40+
getErrorMessage(error, "Failed to update appearance settings."),
41+
);
42+
}
3043
};
3144

3245
return (
@@ -38,7 +51,7 @@ const AppearanceSettingsPage: FC = () => {
3851
<AppearanceSettingsPageView
3952
appearance={appearance.config}
4053
isEntitled={isEntitled}
41-
updateAppearance={updateAppearance}
54+
onSaveAppearance={onSaveAppearance}
4255
/>
4356
</>
4457
);

site/src/pages/DeploySettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ import { colors } from "theme/colors";
2525
export type AppearanceSettingsPageViewProps = {
2626
appearance: UpdateAppearanceConfig;
2727
isEntitled: boolean;
28-
updateAppearance: (
28+
onSaveAppearance: (
2929
newConfig: Partial<UpdateAppearanceConfig>,
3030
preview: boolean,
3131
) => void;
3232
};
3333
export const AppearanceSettingsPageView = ({
3434
appearance,
3535
isEntitled,
36-
updateAppearance,
36+
onSaveAppearance,
3737
}: AppearanceSettingsPageViewProps): JSX.Element => {
3838
const styles = useStyles();
3939
const theme = useTheme();
@@ -43,7 +43,7 @@ export const AppearanceSettingsPageView = ({
4343
initialValues: {
4444
logo_url: appearance.logo_url,
4545
},
46-
onSubmit: (values) => updateAppearance(values, false),
46+
onSubmit: (values) => onSaveAppearance(values, false),
4747
});
4848
const logoFieldHelpers = getFormHelpers(logoForm);
4949

@@ -56,7 +56,7 @@ export const AppearanceSettingsPageView = ({
5656
appearance.service_banner.background_color ?? colors.blue[7],
5757
},
5858
onSubmit: (values) =>
59-
updateAppearance(
59+
onSaveAppearance(
6060
{
6161
service_banner: values,
6262
},
@@ -123,7 +123,7 @@ export const AppearanceSettingsPageView = ({
123123
!isEntitled && (
124124
<Button
125125
onClick={() => {
126-
updateAppearance(
126+
onSaveAppearance(
127127
{
128128
service_banner: {
129129
message:
@@ -162,7 +162,7 @@ export const AppearanceSettingsPageView = ({
162162
...serviceBannerForm.values,
163163
enabled: newState,
164164
};
165-
updateAppearance(
165+
onSaveAppearance(
166166
{
167167
service_banner: newBanner,
168168
},
@@ -196,7 +196,7 @@ export const AppearanceSettingsPageView = ({
196196
"background_color",
197197
color.hex,
198198
);
199-
updateAppearance(
199+
onSaveAppearance(
200200
{
201201
service_banner: {
202202
...serviceBannerForm.values,

site/src/xServices/appearance/appearanceXService.ts

Lines changed: 0 additions & 120 deletions
This file was deleted.

0 commit comments

Comments
 (0)