mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-10-29 08:04:53 +00:00
- Central demo-mode helper (lib/demo-mode.ts): ?demo=1 query flag plus
VITE_PUBLIC_DEMO build flag that makes every route demo for the
public Vercel showcase.
- Single demo fixture source (lib/demo-data.ts): projects, services,
builds, databases, cron, HA, security, host monitoring, templates.
Fixes cross-page ID drift that broke project navigation.
- Demo support on Projects, HA, Security, Usage, Templates, Landing,
Service detail; DemoRestricted gate on People/Settings/Audit/Admin.
- Demo-aware PlatformShell: nav filtering, env:demo, demo account menu,
?demo=1 preserved through internal links.
- TemplatesPage: selection moved into ?template= URL param for deep
links; template fixtures shared via demo-data.
- requestJson returns {} for unparseable 200 bodies (SPA fallback) so
envelope unwraps degrade instead of dereferencing null.
- Recharts ResponsiveContainer initialDimension kills -1 warnings.
- vercel.json: vite framework + SPA rewrites for direct deep links.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
18 lines
627 B
TypeScript
18 lines
627 B
TypeScript
import { useSearchParams } from 'react-router-dom';
|
|
|
|
/**
|
|
* Build-time flag for public demo deployments that ship without a backend
|
|
* (e.g. the Vercel showcase). When enabled every route behaves as if
|
|
* `?demo=1` was passed — fixtures render instead of API calls.
|
|
*/
|
|
export const PUBLIC_DEMO = (import.meta.env.VITE_PUBLIC_DEMO ?? '') === '1';
|
|
|
|
export function isDemoSearch(search: string): boolean {
|
|
return PUBLIC_DEMO || new URLSearchParams(search).get('demo') === '1';
|
|
}
|
|
|
|
export function useDemoMode(): boolean {
|
|
const [searchParams] = useSearchParams();
|
|
return PUBLIC_DEMO || searchParams.get('demo') === '1';
|
|
}
|