diff --git a/client/package-lock.json b/client/package-lock.json index 06e29e4..7b2c8ef 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -10,7 +10,8 @@ "dependencies": { "@metabase/embedding-sdk-react": "^0.54.11", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "wouter": "^3.7.0" }, "devDependencies": { "@eslint/js": "^9.13.0", @@ -7799,6 +7800,12 @@ "node": "*" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", @@ -9093,6 +9100,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regexparam": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-3.0.0.tgz", + "integrity": "sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/rehype-external-links": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-2.1.0.tgz", @@ -11067,6 +11083,20 @@ "node": ">=0.10.0" } }, + "node_modules/wouter": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/wouter/-/wouter-3.7.0.tgz", + "integrity": "sha512-ElkqESy10WgRRbdd22uQkSSO6LmG6vxI50pxPKry2TLebbdXvgtp7rJ48KafjUvsKcQQmIewxgRCGixPfk58tw==", + "license": "Unlicense", + "dependencies": { + "mitt": "^3.0.1", + "regexparam": "^3.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/client/package.json b/client/package.json index eb09381..cf5a761 100644 --- a/client/package.json +++ b/client/package.json @@ -13,7 +13,8 @@ "dependencies": { "@metabase/embedding-sdk-react": "^0.54.11", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "wouter": "^3.7.0" }, "devDependencies": { "@eslint/js": "^9.13.0", diff --git a/client/src/App.jsx b/client/src/App.jsx index cd6748a..86be579 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -4,8 +4,10 @@ import { MetabaseProvider, InteractiveQuestion, defineMetabaseAuthConfig, - defineMetabaseTheme, + defineMetabaseTheme, InteractiveDashboard, } from "@metabase/embedding-sdk-react"; +import { useMemo } from "react"; +import { Redirect, Route, Switch, useSearchParams } from "wouter" // Configuration const config = defineMetabaseAuthConfig({ @@ -13,7 +15,8 @@ const config = defineMetabaseAuthConfig({ authProviderUri: import.meta.env.VITE_AUTH_PROVIDER_URI, }); -const questionId = 24; +const defaultQuestionId = 24; +const defaultDashboardId = 1; const theme = defineMetabaseTheme({ // Specify a font to use from the set of fonts supported by Metabase. @@ -63,10 +66,22 @@ const theme = defineMetabaseTheme({ }); function App() { + const [searchParams] = useSearchParams() + + const { locale, questionId, dashboardId } = useMemo(() => ({ + locale: searchParams.get('locale') ?? null, + questionId: parseInt(searchParams.get('questionId') || defaultQuestionId), + dashboardId: parseInt(searchParams.get('dashboardId') || defaultDashboardId), + }), [searchParams]) + return (