This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
mobile-app/src/screens/TestScreen/TestScreen.tsx

83 lines
2.6 KiB
TypeScript
Raw Normal View History

2021-04-05 10:32:17 +00:00
import React from 'react';
2021-04-05 15:49:24 +00:00
import { polishPlurals } from 'polish-plurals';
2021-04-05 15:02:05 +00:00
import { NetworkStatus, useQuery } from '@apollo/client';
2021-04-05 15:49:24 +00:00
import { RouteProp } from '@react-navigation/native';
2021-04-05 15:02:05 +00:00
import { useVariables } from 'libs/native-base';
2021-04-05 10:32:17 +00:00
import { Query, Scalars } from 'libs/graphql';
import { AppStackParamList, Screen } from 'config/routing';
import { QUERY_GENERATE_TEST_SIMILAR_QUALIFICATIONS_QUALIFICATION } from './queries';
import { StyleSheet } from 'react-native';
import { Container, Spinner } from 'native-base';
2021-04-05 15:02:05 +00:00
import QualificationNotFound from './components/QualificationNotFound/QualificationNotFound';
import Header from './components/Header/Header';
2021-04-05 15:49:24 +00:00
import Suggestions from './components/Suggestions/Suggestions';
import Test from './components/Test/Test';
import Content from './components/Content/Content';
2021-04-05 10:32:17 +00:00
export interface TestScreenProps {
route: RouteProp<AppStackParamList, Screen.Test>;
}
type QueryGenerateTestSimilarQualificationsQualificationArgs = {
limitTest: Scalars['Int'];
qualificationID: Scalars['ID'];
limitSuggestions: Scalars['Int'];
};
const TestScreen = ({ route }: TestScreenProps) => {
2021-04-05 15:02:05 +00:00
const variables = useVariables();
2021-04-10 08:35:25 +00:00
const { data, loading, networkStatus, refetch } = useQuery<
2021-04-05 10:32:17 +00:00
Pick<Query, 'qualification' | 'generateTest' | 'similarQualifications'>,
QueryGenerateTestSimilarQualificationsQualificationArgs
>(QUERY_GENERATE_TEST_SIMILAR_QUALIFICATIONS_QUALIFICATION, {
fetchPolicy: 'network-only',
variables: {
qualificationID: route.params.qualificationID,
limitTest: route.params.limit,
2021-04-05 15:49:24 +00:00
limitSuggestions: 12,
2021-04-05 10:32:17 +00:00
},
2021-04-05 15:02:05 +00:00
notifyOnNetworkStatusChange: true,
2021-04-05 10:32:17 +00:00
});
2021-04-05 15:02:05 +00:00
2021-04-05 10:32:17 +00:00
return (
<Container>
2021-04-05 15:02:05 +00:00
<Header
title={`Test ${route.params.limit} ${polishPlurals(
'pytanie',
'pytania',
'pytań',
route.params.limit,
)}`}
/>
{loading || networkStatus === NetworkStatus.refetch ? (
<Content contentContainerStyle={styles.spinnerWrapper}>
<Spinner color={variables.brandPrimary} size="large" />
</Content>
) : data?.qualification ? (
data?.generateTest?.length ? (
2021-04-10 08:35:25 +00:00
<Test
2021-04-13 04:03:40 +00:00
qualification={data.qualification}
2021-04-10 08:35:25 +00:00
questions={data.generateTest}
onReset={refetch}
2021-04-10 08:35:25 +00:00
/>
) : (
2021-04-05 15:49:24 +00:00
<Suggestions
qualifications={data?.similarQualifications.items ?? []}
/>
)
) : (
<QualificationNotFound />
)}
2021-04-05 10:32:17 +00:00
</Container>
);
};
const styles = StyleSheet.create({
spinnerWrapper: {
justifyContent: 'center',
},
});
2021-04-05 10:32:17 +00:00
export default TestScreen;