'use client';
import { ReactNode, useCallback } from 'react';
import { FetchWrapperComponent } from '@gitroom/helpers/utils/custom.fetch';
import { deleteDialog } from '@gitroom/react/helpers/delete.dialog';
import { useReturnUrl } from '@gitroom/frontend/app/(app)/auth/return.url.component';
import { useVariables } from '@gitroom/react/helpers/variable.context';
export default function LayoutContext(params: { children: ReactNode }) {
if (params?.children) {
// eslint-disable-next-line react/no-children-prop
return ;
}
return <>>;
}
export function setCookie(cname: string, cvalue: string, exdays: number) {
if (typeof document === 'undefined') {
return;
}
const d = new Date();
d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
const expires = 'expires=' + d.toUTCString();
document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';
}
function LayoutContextInner(params: { children: ReactNode }) {
const returnUrl = useReturnUrl();
const { backendUrl, isGeneral, isSecured } = useVariables();
const afterRequest = useCallback(
async (url: string, options: RequestInit, response: Response) => {
if (
typeof window !== 'undefined' &&
window.location.href.includes('/p/')
) {
return true;
}
const headerAuth =
response?.headers?.get('auth') || response?.headers?.get('Auth');
const showOrg =
response?.headers?.get('showorg') || response?.headers?.get('Showorg');
const impersonate =
response?.headers?.get('impersonate') ||
response?.headers?.get('Impersonate');
const logout =
response?.headers?.get('logout') || response?.headers?.get('Logout');
if (headerAuth) {
setCookie('auth', headerAuth, 365);
}
if (showOrg) {
setCookie('showorg', showOrg, 365);
}
if (impersonate) {
setCookie('impersonate', impersonate, 365);
}
if (logout && !isSecured) {
setCookie('auth', '', -10);
setCookie('showorg', '', -10);
setCookie('impersonate', '', -10);
window.location.href = '/';
return true;
}
const reloadOrOnboarding =
response?.headers?.get('reload') ||
response?.headers?.get('onboarding');
if (reloadOrOnboarding) {
const getAndClear = returnUrl.getAndClear();
if (getAndClear) {
window.location.href = getAndClear;
return true;
}
}
if (response?.headers?.get('onboarding')) {
window.location.href = isGeneral
? '/launches?onboarding=true'
: '/analytics?onboarding=true';
return true;
}
if (response?.headers?.get('reload')) {
window.location.reload();
return true;
}
if (response.status === 401) {
if (!isSecured) {
setCookie('auth', '', -10);
setCookie('showorg', '', -10);
setCookie('impersonate', '', -10);
}
window.location.href = '/';
}
if (response.status === 402) {
if (
await deleteDialog(
(
await response.json()
).message,
'Move to billing',
'Payment Required'
)
) {
window.open('/billing', '_blank');
return false;
}
return true;
}
return true;
},
[]
);
return (
{params?.children || <>>}
);
}