add TestScreen

This commit is contained in:
Dawid Wysokiński 2021-04-05 12:32:17 +02:00
parent bb39fa8946
commit bad61f4636
7 changed files with 119 additions and 43 deletions

View File

@ -1,8 +1,6 @@
export const AUTHOR = {
FULL_NAME: 'Dawid Wysokiński',
EMAIL: 'contact@dwysokinski.me',
CONTACT: 'https://dwysokinski.me/#contact',
};
export const WEBSITE = __DEV__
? 'http://localhost:3000'
: 'https://zdamegzaminzawodowy.pl';
export const EMAIL = 'kontakt@zdamegzaminzawodowy.pl';

View File

@ -1,7 +1,14 @@
export enum Screen {
Home = 'HomeScreen',
Test = 'TestScreen',
}
export type TestScreenParams = {
qualificationID: number;
limit: number;
};
export type AppStackParamList = {
[Screen.Home]: undefined;
[Screen.Test]: TestScreenParams;
};

View File

@ -1,7 +1,11 @@
export type Maybe<T> = T | null;
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
export type Exact<T extends { [key: string]: unknown }> = {
[K in keyof T]: T[K];
};
export type MakeOptional<T, K extends keyof T> = Omit<T, K> &
{ [SubKey in K]?: Maybe<T[SubKey]> };
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> &
{ [SubKey in K]: Maybe<T[SubKey]> };
/** All built-in and custom scalars, mapped to their actual values */
export type Scalars = {
ID: number;
@ -13,14 +17,11 @@ export type Scalars = {
Upload: any;
};
export enum Answer {
A = 'a',
B = 'b',
C = 'c',
D = 'd'
D = 'd',
}
export type Mutation = {
@ -40,77 +41,63 @@ export type Mutation = {
signIn?: Maybe<UserWithToken>;
};
export type MutationCreateProfessionArgs = {
input: ProfessionInput;
};
export type MutationUpdateProfessionArgs = {
id: Scalars['ID'];
input: ProfessionInput;
};
export type MutationDeleteProfessionsArgs = {
ids: Array<Scalars['ID']>;
};
export type MutationCreateQualificationArgs = {
input: QualificationInput;
};
export type MutationUpdateQualificationArgs = {
id: Scalars['ID'];
input: QualificationInput;
};
export type MutationDeleteQualificationsArgs = {
ids: Array<Scalars['ID']>;
};
export type MutationCreateQuestionArgs = {
input: QuestionInput;
};
export type MutationUpdateQuestionArgs = {
id: Scalars['ID'];
input: QuestionInput;
};
export type MutationDeleteQuestionsArgs = {
ids: Array<Scalars['ID']>;
};
export type MutationCreateUserArgs = {
input: UserInput;
};
export type MutationUpdateUserArgs = {
id: Scalars['ID'];
input: UserInput;
};
export type MutationUpdateManyUsersArgs = {
ids: Array<Scalars['ID']>;
input: UpdateManyUsersInput;
};
export type MutationDeleteUsersArgs = {
ids: Array<Scalars['ID']>;
};
export type MutationSignInArgs = {
email: Scalars['String'];
password: Scalars['String'];
@ -225,7 +212,6 @@ export type Query = {
me?: Maybe<User>;
};
export type QueryProfessionsArgs = {
filter?: Maybe<ProfessionFilter>;
limit?: Maybe<Scalars['Int']>;
@ -233,13 +219,11 @@ export type QueryProfessionsArgs = {
sort?: Maybe<Array<Scalars['String']>>;
};
export type QueryProfessionArgs = {
id?: Maybe<Scalars['Int']>;
id?: Maybe<Scalars['ID']>;
slug?: Maybe<Scalars['String']>;
};
export type QueryQualificationsArgs = {
filter?: Maybe<QualificationFilter>;
limit?: Maybe<Scalars['Int']>;
@ -247,7 +231,6 @@ export type QueryQualificationsArgs = {
sort?: Maybe<Array<Scalars['String']>>;
};
export type QuerySimilarQualificationsArgs = {
qualificationID: Scalars['ID'];
limit?: Maybe<Scalars['Int']>;
@ -255,13 +238,11 @@ export type QuerySimilarQualificationsArgs = {
sort?: Maybe<Array<Scalars['String']>>;
};
export type QueryQualificationArgs = {
id?: Maybe<Scalars['Int']>;
id?: Maybe<Scalars['ID']>;
slug?: Maybe<Scalars['String']>;
};
export type QueryQuestionsArgs = {
filter?: Maybe<QuestionFilter>;
limit?: Maybe<Scalars['Int']>;
@ -269,13 +250,11 @@ export type QueryQuestionsArgs = {
sort?: Maybe<Array<Scalars['String']>>;
};
export type QueryGenerateTestArgs = {
qualificationIDs: Array<Scalars['ID']>;
limit?: Maybe<Scalars['Int']>;
};
export type QueryUsersArgs = {
filter?: Maybe<UserFilter>;
limit?: Maybe<Scalars['Int']>;
@ -283,9 +262,8 @@ export type QueryUsersArgs = {
sort?: Maybe<Array<Scalars['String']>>;
};
export type QueryUserArgs = {
id: Scalars['Int'];
id: Scalars['ID'];
};
export type Question = {
@ -353,16 +331,14 @@ export type QuestionList = {
export enum Role {
Admin = 'admin',
User = 'user'
User = 'user',
}
export type UpdateManyUsersInput = {
role?: Maybe<Role>;
activated?: Maybe<Scalars['Boolean']>;
};
export type User = {
id: Scalars['ID'];
displayName: Scalars['String'];

View File

@ -1,4 +1,5 @@
import React, { useMemo } from 'react';
import { useNavigation } from '@react-navigation/native';
import { polishPlurals } from 'polish-plurals';
import { useSavedQualifications } from 'libs/savedqualifications';
import { Maybe, Qualification } from 'libs/graphql';
@ -10,13 +11,13 @@ import {
Button,
Card,
CardItem,
Left,
Text,
View,
Icon,
Right,
} from 'native-base';
import Modal, { ModalProps } from 'common/Modal/Modal';
import { Screen } from '../../../../config/routing';
export interface QualificationModalProps
extends Pick<ModalProps, 'visible' | 'onPressBackdrop'> {
@ -28,8 +29,8 @@ const QualificationModal = ({
onPressBackdrop,
visible,
}: QualificationModalProps) => {
const navigation = useNavigation();
const { savedQualifications, saveQualification } = useSavedQualifications();
const isSaved = useMemo(() => {
if (!qualification) {
return false;
@ -86,6 +87,12 @@ const QualificationModal = ({
styles.button,
index === QUESTIONS.length - 1 ? {} : styles.marginRight,
]}
onPress={() => {
navigation.navigate(Screen.Test, {
qualificationID: qualification?.id ?? 0,
limit: question,
});
}}
key={question}
>
<Text style={styles.buttonText}>

View File

@ -8,6 +8,7 @@ import {
NavigationContainerRef,
} from '@react-navigation/native';
import HomeScreen from './HomeScreen/HomeScreen';
import TestScreen from './TestScreen/TestScreen';
const Stack = createStackNavigator<AppStackParamList>();
const AppStack = createStackNavigator<AppStackParamList>();
@ -17,6 +18,7 @@ const AppScreens = () => (
screenOptions={{ animationEnabled: false, headerShown: false }}
>
<Stack.Screen name={Screen.Home} component={HomeScreen} />
<Stack.Screen name={Screen.Test} component={TestScreen} />
</AppStack.Navigator>
);

View File

@ -0,0 +1,42 @@
import React from 'react';
import { RouteProp } from '@react-navigation/native';
import { useQuery } from '@apollo/client';
import { Query, Scalars } from 'libs/graphql';
import { AppStackParamList, Screen } from 'config/routing';
import { QUERY_GENERATE_TEST_SIMILAR_QUALIFICATIONS_QUALIFICATION } from './queries';
import { Container, Content, H1 } from 'native-base';
export interface TestScreenProps {
route: RouteProp<AppStackParamList, Screen.Test>;
}
type QueryGenerateTestSimilarQualificationsQualificationArgs = {
limitTest: Scalars['Int'];
qualificationID: Scalars['ID'];
limitSuggestions: Scalars['Int'];
};
const TestScreen = ({ route }: TestScreenProps) => {
const { data, loading } = useQuery<
Pick<Query, 'qualification' | 'generateTest' | 'similarQualifications'>,
QueryGenerateTestSimilarQualificationsQualificationArgs
>(QUERY_GENERATE_TEST_SIMILAR_QUALIFICATIONS_QUALIFICATION, {
fetchPolicy: 'network-only',
variables: {
qualificationID: route.params.qualificationID,
limitTest: route.params.limit,
limitSuggestions: 6,
},
});
console.log(data);
return (
<Container>
<Content>
<H1>TestScreen</H1>
</Content>
</Container>
);
};
export default TestScreen;

View File

@ -0,0 +1,44 @@
import { gql } from '@apollo/client/core';
export const QUERY_GENERATE_TEST_SIMILAR_QUALIFICATIONS_QUALIFICATION = gql`
query generateTestAndGetSimilarQualifications(
$limitTest: Int!
$qualificationID: ID!
$limitSuggestions: Int!
) {
qualification(id: $qualificationID) {
id
slug
name
code
formula
}
generateTest(limit: $limitTest, qualificationIDs: [$qualificationID]) {
id
from
content
image
answerA
answerAImage
answerB
answerBImage
answerC
answerCImage
answerD
answerDImage
correctAnswer
updatedAt
}
similarQualifications(
limit: $limitSuggestions
qualificationID: $qualificationID
) {
items {
id
name
code
slug
}
}
}
`;