From bad61f463605e12b25fa7b782ef5dc3fd9bab666 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Mon, 5 Apr 2021 12:32:17 +0200 Subject: [PATCH] add TestScreen --- src/config/app.ts | 8 ++-- src/config/routing.ts | 7 +++ src/libs/graphql/types.ts | 48 +++++-------------- .../Professions/QualificationModal.tsx | 11 ++++- src/screens/Navigation.tsx | 2 + src/screens/TestScreen/TestScreen.tsx | 42 ++++++++++++++++ src/screens/TestScreen/queries.ts | 44 +++++++++++++++++ 7 files changed, 119 insertions(+), 43 deletions(-) create mode 100644 src/screens/TestScreen/TestScreen.tsx create mode 100644 src/screens/TestScreen/queries.ts diff --git a/src/config/app.ts b/src/config/app.ts index 779db4e..3ea6ddd 100644 --- a/src/config/app.ts +++ b/src/config/app.ts @@ -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'; diff --git a/src/config/routing.ts b/src/config/routing.ts index de8169d..226a04a 100644 --- a/src/config/routing.ts +++ b/src/config/routing.ts @@ -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; }; diff --git a/src/libs/graphql/types.ts b/src/libs/graphql/types.ts index d202d09..f57bc88 100644 --- a/src/libs/graphql/types.ts +++ b/src/libs/graphql/types.ts @@ -1,7 +1,11 @@ export type Maybe = T | null; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & + { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & + { [SubKey in K]: Maybe }; /** 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; }; - export type MutationCreateProfessionArgs = { input: ProfessionInput; }; - export type MutationUpdateProfessionArgs = { id: Scalars['ID']; input: ProfessionInput; }; - export type MutationDeleteProfessionsArgs = { ids: Array; }; - export type MutationCreateQualificationArgs = { input: QualificationInput; }; - export type MutationUpdateQualificationArgs = { id: Scalars['ID']; input: QualificationInput; }; - export type MutationDeleteQualificationsArgs = { ids: Array; }; - export type MutationCreateQuestionArgs = { input: QuestionInput; }; - export type MutationUpdateQuestionArgs = { id: Scalars['ID']; input: QuestionInput; }; - export type MutationDeleteQuestionsArgs = { ids: Array; }; - export type MutationCreateUserArgs = { input: UserInput; }; - export type MutationUpdateUserArgs = { id: Scalars['ID']; input: UserInput; }; - export type MutationUpdateManyUsersArgs = { ids: Array; input: UpdateManyUsersInput; }; - export type MutationDeleteUsersArgs = { ids: Array; }; - export type MutationSignInArgs = { email: Scalars['String']; password: Scalars['String']; @@ -225,7 +212,6 @@ export type Query = { me?: Maybe; }; - export type QueryProfessionsArgs = { filter?: Maybe; limit?: Maybe; @@ -233,13 +219,11 @@ export type QueryProfessionsArgs = { sort?: Maybe>; }; - export type QueryProfessionArgs = { - id?: Maybe; + id?: Maybe; slug?: Maybe; }; - export type QueryQualificationsArgs = { filter?: Maybe; limit?: Maybe; @@ -247,7 +231,6 @@ export type QueryQualificationsArgs = { sort?: Maybe>; }; - export type QuerySimilarQualificationsArgs = { qualificationID: Scalars['ID']; limit?: Maybe; @@ -255,13 +238,11 @@ export type QuerySimilarQualificationsArgs = { sort?: Maybe>; }; - export type QueryQualificationArgs = { - id?: Maybe; + id?: Maybe; slug?: Maybe; }; - export type QueryQuestionsArgs = { filter?: Maybe; limit?: Maybe; @@ -269,13 +250,11 @@ export type QueryQuestionsArgs = { sort?: Maybe>; }; - export type QueryGenerateTestArgs = { qualificationIDs: Array; limit?: Maybe; }; - export type QueryUsersArgs = { filter?: Maybe; limit?: Maybe; @@ -283,9 +262,8 @@ export type QueryUsersArgs = { sort?: Maybe>; }; - 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; activated?: Maybe; }; - export type User = { id: Scalars['ID']; displayName: Scalars['String']; diff --git a/src/screens/HomeScreen/components/Professions/QualificationModal.tsx b/src/screens/HomeScreen/components/Professions/QualificationModal.tsx index cfdfbd2..5d8a0f9 100644 --- a/src/screens/HomeScreen/components/Professions/QualificationModal.tsx +++ b/src/screens/HomeScreen/components/Professions/QualificationModal.tsx @@ -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 { @@ -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} > diff --git a/src/screens/Navigation.tsx b/src/screens/Navigation.tsx index f845415..c922a11 100644 --- a/src/screens/Navigation.tsx +++ b/src/screens/Navigation.tsx @@ -8,6 +8,7 @@ import { NavigationContainerRef, } from '@react-navigation/native'; import HomeScreen from './HomeScreen/HomeScreen'; +import TestScreen from './TestScreen/TestScreen'; const Stack = createStackNavigator(); const AppStack = createStackNavigator(); @@ -17,6 +18,7 @@ const AppScreens = () => ( screenOptions={{ animationEnabled: false, headerShown: false }} > + ); diff --git a/src/screens/TestScreen/TestScreen.tsx b/src/screens/TestScreen/TestScreen.tsx new file mode 100644 index 0000000..7ace5cf --- /dev/null +++ b/src/screens/TestScreen/TestScreen.tsx @@ -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; +} + +type QueryGenerateTestSimilarQualificationsQualificationArgs = { + limitTest: Scalars['Int']; + qualificationID: Scalars['ID']; + limitSuggestions: Scalars['Int']; +}; + +const TestScreen = ({ route }: TestScreenProps) => { + const { data, loading } = useQuery< + Pick, + 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 ( + + +

TestScreen

+
+
+ ); +}; + +export default TestScreen; diff --git a/src/screens/TestScreen/queries.ts b/src/screens/TestScreen/queries.ts new file mode 100644 index 0000000..257ecb0 --- /dev/null +++ b/src/screens/TestScreen/queries.ts @@ -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 + } + } + } +`;