diff --git a/components.d.ts b/components.d.ts index 3d65379..bbe0756 100644 --- a/components.d.ts +++ b/components.d.ts @@ -27,6 +27,7 @@ declare module 'vue' { Credit: typeof import('./src/components/icons/Credit.vue')['default'] CreditCardIcon: typeof import('./src/components/icons/CreditCardIcon.vue')['default'] DashboardLayout: typeof import('./src/components/DashboardLayout.vue')['default'] + DashboardNav: typeof import('./src/components/DashboardNav.vue')['default'] EmptyState: typeof import('./src/components/dashboard/EmptyState.vue')['default'] FloatLabel: typeof import('primevue/floatlabel')['default'] GlobalUploadIndicator: typeof import('./src/components/GlobalUploadIndicator.vue')['default'] @@ -41,12 +42,15 @@ declare module 'vue' { Message: typeof import('primevue/message')['default'] NotificationDrawer: typeof import('./src/components/NotificationDrawer.vue')['default'] PageHeader: typeof import('./src/components/dashboard/PageHeader.vue')['default'] + Paginator: typeof import('primevue/paginator')['default'] + PanelLeft: typeof import('./src/components/icons/PanelLeft.vue')['default'] Password: typeof import('primevue/password')['default'] RootLayout: typeof import('./src/components/RootLayout.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] Select: typeof import('primevue/select')['default'] SettingsIcon: typeof import('./src/components/icons/SettingsIcon.vue')['default'] + Skeleton: typeof import('primevue/skeleton')['default'] StatsCard: typeof import('./src/components/dashboard/StatsCard.vue')['default'] TestIcon: typeof import('./src/components/icons/TestIcon.vue')['default'] TrashIcon: typeof import('./src/components/icons/TrashIcon.vue')['default'] @@ -75,6 +79,7 @@ declare global { const Credit: typeof import('./src/components/icons/Credit.vue')['default'] const CreditCardIcon: typeof import('./src/components/icons/CreditCardIcon.vue')['default'] const DashboardLayout: typeof import('./src/components/DashboardLayout.vue')['default'] + const DashboardNav: typeof import('./src/components/DashboardNav.vue')['default'] const EmptyState: typeof import('./src/components/dashboard/EmptyState.vue')['default'] const FloatLabel: typeof import('primevue/floatlabel')['default'] const GlobalUploadIndicator: typeof import('./src/components/GlobalUploadIndicator.vue')['default'] @@ -89,12 +94,15 @@ declare global { const Message: typeof import('primevue/message')['default'] const NotificationDrawer: typeof import('./src/components/NotificationDrawer.vue')['default'] const PageHeader: typeof import('./src/components/dashboard/PageHeader.vue')['default'] + const Paginator: typeof import('primevue/paginator')['default'] + const PanelLeft: typeof import('./src/components/icons/PanelLeft.vue')['default'] const Password: typeof import('primevue/password')['default'] const RootLayout: typeof import('./src/components/RootLayout.vue')['default'] const RouterLink: typeof import('vue-router')['RouterLink'] const RouterView: typeof import('vue-router')['RouterView'] const Select: typeof import('primevue/select')['default'] const SettingsIcon: typeof import('./src/components/icons/SettingsIcon.vue')['default'] + const Skeleton: typeof import('primevue/skeleton')['default'] const StatsCard: typeof import('./src/components/dashboard/StatsCard.vue')['default'] const TestIcon: typeof import('./src/components/icons/TestIcon.vue')['default'] const TrashIcon: typeof import('./src/components/icons/TrashIcon.vue')['default'] diff --git a/src/api/httpClientAdapter.server.ts b/src/api/httpClientAdapter.server.ts index 7ba09fc..f14ee14 100644 --- a/src/api/httpClientAdapter.server.ts +++ b/src/api/httpClientAdapter.server.ts @@ -1,34 +1,31 @@ import { tryGetContext } from "hono/context-storage"; export const customFetch = (url: string, options: RequestInit) => { - options.credentials = "include"; - if (import.meta.env.SSR) { - const c = tryGetContext(); - if (!c) { - throw new Error("Hono context not found in SSR"); - } - // Merge headers properly - keep original options.headers and add request headers - const reqHeaders = new Headers(c.req.header()); - // Remove headers that shouldn't be forwarded - reqHeaders.delete("host"); - reqHeaders.delete("connection"); + options.credentials = "include"; + const c = tryGetContext(); + if (!c) { + throw new Error("Hono context not found in SSR"); + } + // Merge headers properly - keep original options.headers and add request headers + const reqHeaders = new Headers(c.req.header()); + // Remove headers that shouldn't be forwarded + reqHeaders.delete("host"); + reqHeaders.delete("connection"); - const mergedHeaders: Record = {}; - reqHeaders.forEach((value, key) => { - mergedHeaders[key] = value; - }); - options.headers = { - ...mergedHeaders, - ...(options.headers as Record) - }; + const mergedHeaders: Record = {}; + reqHeaders.forEach((value, key) => { + mergedHeaders[key] = value; + }); + options.headers = { + ...mergedHeaders, + ...(options.headers as Record), + }; - const apiUrl = ["https://api.pipic.fun", url.replace(/^r/, '')].join(''); - // const res = await fetch(apiUrl, options); - - // Forward response headers to client (especially Set-Cookie) - // res.headers.forEach((value, key) => { - // c.header(key, value); - // }); - return fetch(apiUrl, options) - } -} \ No newline at end of file + const apiUrl = ["https://api.pipic.fun", url.replace(/^r/, "")].join(""); + return fetch(apiUrl, options).then(async (res) => { + res.headers.getSetCookie()?.forEach((cookie) => { + c.header("Set-Cookie", cookie); + }); + return res; + }); +}; diff --git a/src/components/DashboardLayout.vue b/src/components/DashboardLayout.vue index c1cc9e3..56ffcf5 100644 --- a/src/components/DashboardLayout.vue +++ b/src/components/DashboardLayout.vue @@ -1,59 +1,13 @@