import { Input } from '@gitroom/react/form/input'; import { ChangeEventHandler, useCallback, useMemo, useState } from 'react'; import useSWR from 'swr'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { useUser } from '@gitroom/frontend/components/layout/user.context'; import { Select } from '@gitroom/react/form/select'; import { pricing } from '@gitroom/nestjs-libraries/database/prisma/subscriptions/pricing'; import { deleteDialog } from '@gitroom/react/helpers/delete.dialog'; export const Subscription = () => { const fetch = useFetch(); const addSubscription: ChangeEventHandler = useCallback( async (e) => { const value = e.target.value; if ( await deleteDialog( 'Are you sure you want to add a user subscription?', 'Add' ) ) { await fetch('/billing/add-subscription', { method: 'POST', body: JSON.stringify({ subscription: value }), }); window.location.reload(); } }, [] ); return ( ); }; export const Impersonate = () => { const fetch = useFetch(); const [name, setName] = useState(''); const user = useUser(); const load = useCallback(async () => { if (!name) { return []; } const value = await (await fetch(`/user/impersonate?name=${name}`)).json(); return value; }, [name]); const stopImpersonating = useCallback(async () => { await fetch(`/user/impersonate`, { method: 'POST', body: JSON.stringify({ id: '' }), }); window.location.reload(); }, []); const setUser = useCallback( (userId: string) => async () => { await fetch(`/user/impersonate`, { method: 'POST', body: JSON.stringify({ id: userId }), }); window.location.reload(); }, [] ); const { data } = useSWR(`/impersonate-${name}`, load, { refreshWhenHidden: false, revalidateOnMount: true, revalidateOnReconnect: false, revalidateOnFocus: false, refreshWhenOffline: false, revalidateIfStale: false, refreshInterval: 0, }); const mapData = useMemo(() => { return data?.map( (curr: any) => ({ id: curr.id, name: curr.user.name, email: curr.user.email, }), [] ); }, [data]); return (
{user?.impersonate ? (
Currently Impersonating
X
{user?.tier?.current === 'FREE' && }
) : ( setName(e.target.value)} /> )}
{!!data?.length && ( <>
setName('')} />
{mapData?.map((user: any) => (
user: {user.id.split('-').at(-1)} - {user.name} -{' '} {user.email}
))}
)}
); };