Skip to content

Commit bddd853

Browse files
committed
feat: make theme color configurable
1 parent dff0f77 commit bddd853

File tree

12 files changed

+34
-14
lines changed

12 files changed

+34
-14
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ web_modules/
140140
.yarn-integrity
141141

142142
# dotenv environment variable files
143-
.env
144143
.env.development.local
145144
.env.test.local
146145
.env.production.local

apps/frontend/.docker/entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ set -xe
33

44
: "${API_URL?Define the api endpoint}"
55

6-
sed -i "s|//REPLACE_WITH_API_URL|$API_URL|g" /usr/share/nginx/html/index.html
6+
envsubst < /usr/share/nginx/html/index.template.html > /usr/share/nginx/html/index.html
77

88
exec "$@"

apps/frontend/.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
VITE_API_URL=http://localhost:3000
2+
VITE_THEME_COLOR=quassel

apps/frontend/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
FROM docker.io/nginx:stable-alpine
22

33
COPY dist/ /usr/share/nginx/html/
4+
RUN cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.template.html
45
COPY ./.docker/nginx.conf /etc/nginx/conf.d/default.conf
56
COPY ./.docker/entrypoint.sh /
67

apps/frontend/index.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
</style>
2323
<script type="text/javascript">
2424
window.env = {
25-
apiUrl: '//REPLACE_WITH_API_URL'
25+
apiUrl: '$API_URL',
26+
themeColor: '$THEME_COLOR'
2627
};
2728
</script>
2829
</head>

apps/frontend/src/configuration.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
function getEnv(key: keyof Exclude<typeof window.env, undefined>) {
22
if (window.env === undefined) return;
3-
if (window.env[key]?.startsWith("//")) return;
3+
if (window.env[key]?.startsWith("$")) return;
44

55
return window.env[key];
66
}
77

88
export const C = {
99
env: {
10-
apiUrl: getEnv("apiUrl") || "http://localhost:3000",
10+
apiUrl: getEnv("apiUrl") || import.meta.env.VITE_API_URL,
11+
themeColor: getEnv("themeColor") || import.meta.env.VITE_THEME_COLOR,
1112
},
1213
ui: {
1314
maxDropdownHeight: 800,

apps/frontend/src/main.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import React, { StrictMode } from "react";
22
import { createRoot } from "react-dom/client";
33
import "@quassel/ui/style.css";
4-
import { ThemeProvider } from "@quassel/ui";
4+
import { ThemeProvider, defaultTheme, mergeThemeOverrides } from "@quassel/ui";
55
import { RouterProvider, createRouter } from "@tanstack/react-router";
66
import { routeTree } from "./routeTree.gen.ts";
77
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
8+
import { C } from "./configuration.ts";
89

910
const queryClient = new QueryClient();
1011
const router = createRouter({ routeTree, context: { queryClient }, defaultPreload: "intent", defaultPreloadStaleTime: 0 });
@@ -23,10 +24,12 @@ declare module "@tanstack/react-router" {
2324
}
2425
}
2526

27+
const currentTheme = mergeThemeOverrides(defaultTheme, { primaryColor: C.env.themeColor });
28+
2629
createRoot(document.getElementById("root")!).render(
2730
<StrictMode>
2831
<QueryClientProvider client={queryClient}>
29-
<ThemeProvider>
32+
<ThemeProvider theme={currentTheme}>
3033
<RouterProvider router={router} notFoundMode="root" />
3134
<TanStackRouterDevtools router={router} position="bottom-right" />
3235
</ThemeProvider>

apps/frontend/src/types.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ declare global {
2525
interface Window {
2626
env?: {
2727
apiUrl?: string;
28+
themeColor?: string;
2829
};
2930
}
3031
}

apps/frontend/src/vite-env.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,11 @@
11
/// <reference types="vite/client" />
22
/// <reference types="vite-plugin-pwa/pwa-assets" />
3+
4+
interface ImportMetaEnv {
5+
readonly VITE_API_URL: string;
6+
readonly VITE_THEME_COLOR: string;
7+
}
8+
9+
interface ImportMeta {
10+
readonly env: ImportMetaEnv;
11+
}

examples/public/docker-compose.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ services:
7575
restart: unless-stopped
7676
environment:
7777
API_URL: https://api.test.example.com
78+
THEME_COLOR: uzhGold
7879
labels:
7980
- "com.centurylinklabs.watchtower.enable=true"
8081
- "traefik.enable=true"

0 commit comments

Comments
 (0)