Files
protocol/sites/dev0x-portal/app/routes/_dashboard.apps.create-app.tsx
2023-03-30 10:45:09 +02:00

50 lines
1.8 KiB
TypeScript

import { Form, Outlet, useSubmit } from '@remix-run/react';
import type { ActionArgs } from '@remix-run/server-runtime';
import { redirect } from '@remix-run/server-runtime';
import { createContext, useCallback, useRef } from 'react';
import { sessionStorage } from '../auth.server';
import * as Drawer from '../components/Drawer';
import type { CreateAppFlowType } from '../types';
import { makeMultipageHandler } from '../utils/utils.server';
export async function action({ request }: ActionArgs) {
const session = await sessionStorage.getSession(request.headers.get('Cookie'));
const sessionHandler = makeMultipageHandler<CreateAppFlowType>({ session, namespace: 'create-app' });
sessionHandler.deleteAll();
throw redirect('/apps', { headers: { 'Set-Cookie': await sessionStorage.commitSession(session) } });
}
export const CloseContext = createContext<() => void>(() => {});
export default function AppApiKey() {
const ref = useRef<HTMLFormElement>(null);
const submit = useSubmit();
const flushCookieSession = useCallback(() => {
if (ref.current) {
submit(ref.current);
}
}, [ref, submit]);
return (
<CloseContext.Provider value={flushCookieSession}>
<Drawer.Root
open={true}
onOpenChange={(open) => {
if (!open) {
flushCookieSession();
}
}}
>
<Drawer.Content position="right" className="w-[694px]">
<Outlet />
<Form method="post" ref={ref} hidden>
{/* to ensure that we can flush the cookie cache on close */}
</Form>
</Drawer.Content>
</Drawer.Root>
</CloseContext.Provider>
);
}