From d60204195fb93bd4cb30fb86ee701ed6e367f099 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 15:27:05 +0000 Subject: [PATCH 1/6] feat(#123): add Settings view, consolidate header icons to 6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create Settings.jsx with five sections: Utseende (theme toggle + body map preview), Konto (email + logout), Om appen (version + changelog), Kontakt, Språk (placeholder) - Remove theme toggle and logout from PageShell header; replace with EventSchedule (placeholder) and Settings nav icons - Remove version footer button and ChangelogModal from PageShell - Add onShowSettings to NavContext and "settings" view in App.jsx Closes #123 https://claude.ai/code/session_01NSBiZxpgCv2kUVt9MUcWkH --- app/src/App.jsx | 4 + app/src/components/PageShell.jsx | 44 ++-------- app/src/components/Settings.jsx | 136 +++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 38 deletions(-) create mode 100644 app/src/components/Settings.jsx diff --git a/app/src/App.jsx b/app/src/App.jsx index 467a923..75e0832 100644 --- a/app/src/App.jsx +++ b/app/src/App.jsx @@ -9,6 +9,7 @@ import Report from "./components/Report"; import Bibliotek from "./components/Bibliotek"; import TemplatePicker from "./components/TemplatePicker"; import TemplateSessionEditor from "./components/TemplateSessionEditor"; +import Settings from "./components/Settings"; function App() { const [session, setSession] = useState(undefined); @@ -40,6 +41,7 @@ function App() { onShowHistoryWithDate: (dateStr) => { setHistoryInitialDate(dateStr); setView("history"); }, onShowTemplatePicker: () => setView("template-picker"), onShowReportWithPrefill: (prefill) => { setReportPrefill(prefill); setView("report"); }, + onShowSettings: () => setView("settings"), }; let content; @@ -66,6 +68,8 @@ function App() { setView("template-editor"); }} />; + else if (view === "settings") + content = ; else if (view === "template-editor" && templateEditorState) content = @@ -171,41 +164,16 @@ export default function PageShell({ children }) { - setTheme(theme === "g10" ? "g100" : "g10")}> - {theme === "g10" ? : } + + - supabase.auth.signOut()}> - + + {children} - - - - setChangelogOpen(false)} /> ); diff --git a/app/src/components/Settings.jsx b/app/src/components/Settings.jsx new file mode 100644 index 0000000..c26dccf --- /dev/null +++ b/app/src/components/Settings.jsx @@ -0,0 +1,136 @@ +import { useEffect, useState } from "react"; +import { Toggle, Button } from "@carbon/react"; +import PageShell, { SectionLabel, PageHeading } from "./PageShell"; +import BodyPanel from "./BodyPanel"; +import ChangelogModal from "./ChangelogModal"; +import { useTheme } from "../theme"; +import { supabase } from "../lib/supabase"; +import { version } from "../../package.json"; + +const PREVIEW_PRIMARY = ["chest", "quads", "lats"]; +const PREVIEW_SECONDARY = ["shoulders_front", "hamstrings", "triceps"]; + +const cardStyle = { + background: "var(--cds-layer-01)", + border: "1px solid var(--cds-border-subtle-01)", + borderRadius: "var(--r-card)", + padding: 16, + marginBottom: 16, +}; + +export default function Settings() { + const { theme, setTheme } = useTheme(); + const [changelogOpen, setChangelogOpen] = useState(false); + const [userEmail, setUserEmail] = useState(""); + + useEffect(() => { + supabase.auth.getUser().then(({ data: { user } }) => { + if (user?.email) setUserEmail(user.email); + }); + }, []); + + return ( + + Innstillinger + + Utseende +
+
+ setTheme(checked ? "g100" : "g10")} + /> +
+ +
+ + Konto +
+
+

+ {userEmail} +

+ +
+
+ + Om appen +
+
+

+ v{version} +

+ +
+
+ + Kontakt +
+
+

+ Har du tilbakemeldinger eller fant en feil? Ta gjerne kontakt. +

+
+ + +
+
+
+ + Språk +
+
+

+ Kommer snart +

+
+
+ + setChangelogOpen(false)} /> +
+ ); +} From 30d9a42d39f687097f2bde65e78d39850ee7b4a6 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 15:34:24 +0000 Subject: [PATCH 2/6] fix: remove invalid as="a" prop from Carbon Button Carbon Button renders as automatically when href is provided. https://claude.ai/code/session_01NSBiZxpgCv2kUVt9MUcWkH --- app/src/components/Settings.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/components/Settings.jsx b/app/src/components/Settings.jsx index c26dccf..3e3730a 100644 --- a/app/src/components/Settings.jsx +++ b/app/src/components/Settings.jsx @@ -99,7 +99,7 @@ export default function Settings() { Har du tilbakemeldinger eller fant en feil? Ta gjerne kontakt.

- From 9425053f68e64c43931edc16c631e29ec152857e Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 15:54:42 +0000 Subject: [PATCH 3/6] ci: trigger staging deploy after freeing SWA slot https://claude.ai/code/session_01NSBiZxpgCv2kUVt9MUcWkH From a77b0c1b76d9f4532fbfd9a76cbe108d37441481 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 16:31:04 +0000 Subject: [PATCH 4/6] ci: re-trigger after staging slot freed https://claude.ai/code/session_01NSBiZxpgCv2kUVt9MUcWkH From 97a0632a75b440e32d018714045e7b2734223c8d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 16:39:28 +0000 Subject: [PATCH 5/6] ci: separate close PR job into own workflow without paths filter Staging envs were not being cleaned up when PRs were closed because the close_pull_request_job was gated by the app/** paths filter. Moving it to a dedicated workflow that fires on all PR closes targeting master or dev, regardless of which files changed. https://claude.ai/code/session_01NSBiZxpgCv2kUVt9MUcWkH --- .../azure-static-web-apps-close-pr.yml | 19 +++++++++++++++++++ ...static-web-apps-white-island-090dfd003.yml | 12 ------------ 2 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/azure-static-web-apps-close-pr.yml diff --git a/.github/workflows/azure-static-web-apps-close-pr.yml b/.github/workflows/azure-static-web-apps-close-pr.yml new file mode 100644 index 0000000..168e81c --- /dev/null +++ b/.github/workflows/azure-static-web-apps-close-pr.yml @@ -0,0 +1,19 @@ +name: Azure Static Web Apps — Close PR + +on: + pull_request: + types: [closed] + branches: + - master + - dev + +jobs: + close_pull_request_job: + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_WHITE_ISLAND_090DFD003 }} + action: "close" diff --git a/.github/workflows/azure-static-web-apps-white-island-090dfd003.yml b/.github/workflows/azure-static-web-apps-white-island-090dfd003.yml index f7944a3..3da2c10 100644 --- a/.github/workflows/azure-static-web-apps-white-island-090dfd003.yml +++ b/.github/workflows/azure-static-web-apps-white-island-090dfd003.yml @@ -78,15 +78,3 @@ jobs: app_location: "app/dist" api_location: "app/api" output_location: "." - - close_pull_request_job: - if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: ubuntu-latest - name: Close Pull Request Job - steps: - - name: Close Pull Request - id: closepullrequest - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_WHITE_ISLAND_090DFD003 }} - action: "close" From b991a9d61586dd989571ed5a856cb5c720ac5281 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 5 May 2026 16:41:03 +0000 Subject: [PATCH 6/6] ci: trigger deploy after clearing staging slots https://claude.ai/code/session_01NSBiZxpgCv2kUVt9MUcWkH