88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
import { getUser } from '@/api/user/query';
|
|
import initializeApollo from '@/apollo/client';
|
|
import * as Calculation from '@/Components/Calculation';
|
|
import { Error } from '@/Components/Common/Error';
|
|
import { Grid } from '@/Components/Layout/Page';
|
|
import Output from '@/Components/Output';
|
|
import { defaultRoles } from '@/config/users';
|
|
import * as CRMTypes from '@/graphql/crm.types';
|
|
import * as hooks from '@/process/hooks';
|
|
import { dehydrate, QueryClient } from '@tanstack/react-query';
|
|
import Head from 'next/head';
|
|
|
|
export default function Home(props) {
|
|
hooks.useSentryScope();
|
|
hooks.useMainData();
|
|
hooks.useInsuranceData();
|
|
hooks.useReactions();
|
|
|
|
if (props.statusCode !== 200) return <Error {...props} />;
|
|
|
|
return (
|
|
<Grid>
|
|
<Head>
|
|
<title>Лизинговый калькулятор - Эволюция</title>
|
|
</Head>
|
|
<Calculation.Form prune={['unlimited']} />
|
|
<Calculation.Settings />
|
|
<Output />
|
|
</Grid>
|
|
);
|
|
}
|
|
export const makeGetServerSideProps = ({ roles }) =>
|
|
/** @type {import('next').GetServerSideProps} */
|
|
(
|
|
async function ({ req }) {
|
|
const { cookie = '' } = req.headers;
|
|
|
|
const queryClient = new QueryClient();
|
|
|
|
const user = await queryClient.fetchQuery(['user'], ({ signal }) =>
|
|
getUser({
|
|
headers: {
|
|
cookie,
|
|
},
|
|
signal,
|
|
})
|
|
);
|
|
|
|
const apolloClient = initializeApollo();
|
|
|
|
try {
|
|
const {
|
|
data: { systemuser },
|
|
} = await apolloClient.query({
|
|
fetchPolicy: 'network-only',
|
|
query: CRMTypes.GetSystemUserDocument,
|
|
variables: {
|
|
domainname: user.domainName,
|
|
},
|
|
});
|
|
|
|
if (!systemuser?.roles?.some((x) => x?.name && roles.includes(x.name))) {
|
|
return {
|
|
props: { statusCode: 403 },
|
|
};
|
|
}
|
|
|
|
return {
|
|
props: {
|
|
calculation: {},
|
|
initialApolloState: apolloClient.cache.extract(),
|
|
initialQueryState: dehydrate(queryClient),
|
|
statusCode: 200,
|
|
},
|
|
};
|
|
} catch (error) {
|
|
return {
|
|
props: {
|
|
error: JSON.stringify(error),
|
|
statusCode: 500,
|
|
},
|
|
};
|
|
}
|
|
}
|
|
);
|
|
|
|
export const getServerSideProps = makeGetServerSideProps({ roles: defaultRoles });
|