2026-03-19 03:36:46 +01:00
|
|
|
import { A, useParams } from '@solidjs/router';
|
2026-03-23 21:13:42 +01:00
|
|
|
import { createMemo, onMount } from 'solid-js';
|
|
|
|
|
import { useNavigate } from '@solidjs/router';
|
2026-03-19 03:36:46 +01:00
|
|
|
import AdminShell from '~/components/AdminShell';
|
|
|
|
|
|
|
|
|
|
function toTitle(value: string): string {
|
|
|
|
|
return value
|
|
|
|
|
.split(/[-_/]/g)
|
|
|
|
|
.filter(Boolean)
|
|
|
|
|
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
|
|
|
.join(' ');
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-23 21:13:42 +01:00
|
|
|
const LEGACY_ADMIN_ORIGIN = import.meta.env.VITE_LEGACY_ADMIN_ORIGIN || 'http://localhost:3001';
|
2026-03-19 03:36:46 +01:00
|
|
|
|
|
|
|
|
function resolveLegacyPath(modulePath: string): string {
|
|
|
|
|
switch (modulePath) {
|
|
|
|
|
case 'roles':
|
|
|
|
|
return '/roles?scope=internal';
|
2026-03-23 21:13:42 +01:00
|
|
|
case 'approval-management':
|
|
|
|
|
case 'approvals':
|
|
|
|
|
return '/approval';
|
2026-03-19 03:36:46 +01:00
|
|
|
case 'onboarding-management':
|
|
|
|
|
return '/onboarding-management';
|
|
|
|
|
case 'internal-dashboard-management':
|
|
|
|
|
return '/internal-dashboard-management';
|
|
|
|
|
case 'external-dashboard-management':
|
|
|
|
|
return '/external-dashboard-management';
|
|
|
|
|
case 'support':
|
|
|
|
|
return '/help';
|
|
|
|
|
default:
|
|
|
|
|
return `/${modulePath}`;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function LegacyModuleShellPage() {
|
|
|
|
|
const params = useParams();
|
2026-03-23 21:13:42 +01:00
|
|
|
const navigate = useNavigate();
|
2026-03-19 03:36:46 +01:00
|
|
|
const modulePath = String((params as any).module || '').trim();
|
|
|
|
|
const moduleName = createMemo(() => toTitle(modulePath || 'Management'));
|
|
|
|
|
const legacyPath = createMemo(() => resolveLegacyPath(modulePath));
|
|
|
|
|
const legacyUrl = createMemo(() => `${LEGACY_ADMIN_ORIGIN}${legacyPath()}`);
|
|
|
|
|
|
2026-03-23 21:13:42 +01:00
|
|
|
onMount(() => {
|
|
|
|
|
if (modulePath === 'approval') navigate('/admin/approval', { replace: true });
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-19 03:36:46 +01:00
|
|
|
return (
|
|
|
|
|
<AdminShell>
|
feat(admin): Phase 0 — Tailwind v4 foundation, shell rewrite, modern dashboard
- Install Tailwind CSS v4 via @tailwindcss/vite; configure vite.config.ts
- Rewrite app.css: Tailwind base, Exo 2 font, brand tokens (orange #fd6216, navy #050026), scrollbar utility; fix @import order
- Rewrite AdminShell.tsx: fixed header, fixed inset body grid (sidebar + main), session check, sub-tab system, logout, admin avatar/name/role
- Rewrite AdminSidebar.tsx: collapsible w-64/w-20, orange active rail + badge/dot, CSS filter for SVG icon tinting, min-h-0 flex fix
- Replace 84 route stub CSS classes (page-title, card, btn, table-wrap, etc.) with Tailwind equivalents via safe class-attr-only regex script
- Rewrite admin dashboard: Lucide icons in colored chip backgrounds, 4-col KPI grid, Control Plane 6-module grid, hover lift animations
- Disable SSR (ssr: false) to fix Vinxi dev manifest error; clear stale .vinxi cache
- Add lucide-solid icon library
- Add scripts/cleanup-css.mjs for class migration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 23:00:21 +01:00
|
|
|
<h1 class="text-2xl font-bold text-gray-900">{moduleName()}</h1>
|
|
|
|
|
<p class="mt-1 text-sm text-gray-500">
|
2026-03-19 03:36:46 +01:00
|
|
|
Live legacy module embedded for exact design and functionality parity during migration.
|
|
|
|
|
</p>
|
feat(admin): Phase 0 — Tailwind v4 foundation, shell rewrite, modern dashboard
- Install Tailwind CSS v4 via @tailwindcss/vite; configure vite.config.ts
- Rewrite app.css: Tailwind base, Exo 2 font, brand tokens (orange #fd6216, navy #050026), scrollbar utility; fix @import order
- Rewrite AdminShell.tsx: fixed header, fixed inset body grid (sidebar + main), session check, sub-tab system, logout, admin avatar/name/role
- Rewrite AdminSidebar.tsx: collapsible w-64/w-20, orange active rail + badge/dot, CSS filter for SVG icon tinting, min-h-0 flex fix
- Replace 84 route stub CSS classes (page-title, card, btn, table-wrap, etc.) with Tailwind equivalents via safe class-attr-only regex script
- Rewrite admin dashboard: Lucide icons in colored chip backgrounds, 4-col KPI grid, Control Plane 6-module grid, hover lift animations
- Disable SSR (ssr: false) to fix Vinxi dev manifest error; clear stale .vinxi cache
- Add lucide-solid icon library
- Add scripts/cleanup-css.mjs for class migration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 23:00:21 +01:00
|
|
|
<section class="rounded-xl border border-gray-200 bg-white shadow-sm">
|
2026-03-19 03:36:46 +01:00
|
|
|
<div class="actions">
|
feat(admin): Phase 0 — Tailwind v4 foundation, shell rewrite, modern dashboard
- Install Tailwind CSS v4 via @tailwindcss/vite; configure vite.config.ts
- Rewrite app.css: Tailwind base, Exo 2 font, brand tokens (orange #fd6216, navy #050026), scrollbar utility; fix @import order
- Rewrite AdminShell.tsx: fixed header, fixed inset body grid (sidebar + main), session check, sub-tab system, logout, admin avatar/name/role
- Rewrite AdminSidebar.tsx: collapsible w-64/w-20, orange active rail + badge/dot, CSS filter for SVG icon tinting, min-h-0 flex fix
- Replace 84 route stub CSS classes (page-title, card, btn, table-wrap, etc.) with Tailwind equivalents via safe class-attr-only regex script
- Rewrite admin dashboard: Lucide icons in colored chip backgrounds, 4-col KPI grid, Control Plane 6-module grid, hover lift animations
- Disable SSR (ssr: false) to fix Vinxi dev manifest error; clear stale .vinxi cache
- Add lucide-solid icon library
- Add scripts/cleanup-css.mjs for class migration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 23:00:21 +01:00
|
|
|
<A class="inline-flex items-center rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href={legacyUrl()} target="_blank">Open Module In New Tab</A>
|
2026-03-19 03:36:46 +01:00
|
|
|
</div>
|
|
|
|
|
<iframe
|
|
|
|
|
src={legacyUrl()}
|
|
|
|
|
title={`${moduleName()} (Legacy)`}
|
|
|
|
|
style={{ width: '100%', height: '72vh', border: '1px solid #e2e8f0', 'border-radius': '10px', 'margin-top': '10px' }}
|
|
|
|
|
/>
|
|
|
|
|
</section>
|
|
|
|
|
</AdminShell>
|
|
|
|
|
);
|
|
|
|
|
}
|