add TestScreen
This commit is contained in:
parent
bb39fa8946
commit
bad61f4636
|
@ -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';
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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'];
|
||||
|
|
|
@ -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}>
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
|
||||
|
|
|
@ -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;
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
Reference in New Issue