add eslint/graphql-codegen/.babelrc/typescript configuration
This commit is contained in:
parent
292d2da3b1
commit
a7420c5a8e
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
"presets": ["next/babel"],
|
||||
"plugins": [
|
||||
[
|
||||
"babel-plugin-transform-imports",
|
||||
{
|
||||
"@material-ui/core": {
|
||||
"transform": "@material-ui/core/${member}",
|
||||
"preventFullImport": true
|
||||
},
|
||||
"@material-ui/core/styles": {
|
||||
"transform": "@material-ui/core/styles/${member}",
|
||||
"preventFullImport": true
|
||||
},
|
||||
"@material-ui/lab": {
|
||||
"transform": "@material-ui/lab/${member}",
|
||||
"preventFullImport": true
|
||||
},
|
||||
"@material-ui/icons": {
|
||||
"transform": "@material-ui/icons/${member}",
|
||||
"preventFullImport": true
|
||||
},
|
||||
"lodash": {
|
||||
"transform": "lodash/${member}",
|
||||
"preventFullImport": true
|
||||
},
|
||||
"date-fns": {
|
||||
"transform": "date-fns/${member}",
|
||||
"preventFullImport": true
|
||||
},
|
||||
"validator": {
|
||||
"transform": "validator/lib/${member}",
|
||||
"preventFullImport": true
|
||||
},
|
||||
"react-use": {
|
||||
"transform": "react-use/lib/${member}",
|
||||
"preventFullImport": true
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
|
@ -33,4 +33,6 @@ yarn-error.log*
|
|||
# vercel
|
||||
.vercel
|
||||
|
||||
remote-schema.graphql
|
||||
|
||||
.idea
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"name": "Zdam Egzamin Zawodowy",
|
||||
"schemaPath": "remote-schema.graphql",
|
||||
"extensions": {
|
||||
"endpoints": {
|
||||
"Default GraphQL Endpoint": {
|
||||
"url": "http://localhost:8080/graphql",
|
||||
"headers": {
|
||||
"user-agent": "IDE"
|
||||
},
|
||||
"introspect": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
34
README.md
34
README.md
|
@ -1,34 +0,0 @@
|
|||
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
|
||||
|
||||
## Getting Started
|
||||
|
||||
First, run the development server:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
# or
|
||||
yarn dev
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||
|
||||
You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
|
||||
|
||||
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
|
||||
|
||||
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
|
||||
|
||||
## Learn More
|
||||
|
||||
To learn more about Next.js, take a look at the following resources:
|
||||
|
||||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
||||
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
||||
|
||||
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
|
||||
|
||||
## Deploy on Vercel
|
||||
|
||||
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
||||
|
||||
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
|
|
@ -0,0 +1,12 @@
|
|||
overwrite: true
|
||||
schema: ${NEXT_PUBLIC_API_URI:http://localhost:8080/graphql}
|
||||
generates:
|
||||
src/libs/graphql/types.ts:
|
||||
plugins:
|
||||
- "typescript"
|
||||
- "typescript-operations"
|
||||
config:
|
||||
skipTypename: true
|
||||
scalars:
|
||||
ID: number
|
||||
Time: Date | string
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"extends": "react-app"
|
||||
}
|
26
package.json
26
package.json
|
@ -5,16 +5,40 @@
|
|||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start"
|
||||
"start": "next start",
|
||||
"codegen": "graphql-codegen"
|
||||
},
|
||||
"dependencies": {
|
||||
"@kichiyaki/roboto": "^1.0.0",
|
||||
"@material-ui/core": "^4.11.3",
|
||||
"@material-ui/icons": "^4.11.2",
|
||||
"@material-ui/lab": "^4.0.0-alpha.57",
|
||||
"clsx": "^1.1.1",
|
||||
"date-fns": "^2.19.0",
|
||||
"graphql": "^15.5.0",
|
||||
"lodash": "^4.17.21",
|
||||
"next": "10.0.9",
|
||||
"react": "17.0.1",
|
||||
"react-dom": "17.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@graphql-codegen/cli": "^1.21.3",
|
||||
"@graphql-codegen/typescript": "^1.21.1",
|
||||
"@graphql-codegen/typescript-operations": "^1.17.15",
|
||||
"@types/lodash": "^4.14.168",
|
||||
"@types/node": "^14.14.35",
|
||||
"@types/react": "^17.0.3",
|
||||
"@typescript-eslint/eslint-plugin": "^4.0.0",
|
||||
"@typescript-eslint/parser": "^4.0.0",
|
||||
"babel-eslint": "^10.0.0",
|
||||
"babel-plugin-transform-imports": "^2.0.0",
|
||||
"eslint": "^7.5.0",
|
||||
"eslint-config-react-app": "^6.0.0",
|
||||
"eslint-plugin-flowtype": "^5.2.0",
|
||||
"eslint-plugin-import": "^2.22.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.3.1",
|
||||
"eslint-plugin-react": "^7.20.3",
|
||||
"eslint-plugin-react-hooks": "^4.0.8",
|
||||
"prettier": "^2.2.1",
|
||||
"typescript": "^4.2.3"
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
import '../styles/globals.css'
|
||||
|
||||
function MyApp({ Component, pageProps }) {
|
||||
return <Component {...pageProps} />
|
||||
}
|
||||
|
||||
export default MyApp
|
|
@ -0,0 +1,7 @@
|
|||
import { AppProps } from 'next/app';
|
||||
|
||||
function MyApp({ Component, pageProps }: AppProps) {
|
||||
return <Component {...pageProps} />;
|
||||
}
|
||||
|
||||
export default MyApp;
|
|
@ -1,65 +0,0 @@
|
|||
import Head from 'next/head';
|
||||
import styles from '../styles/Home.module.css';
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<div className={styles.container}>
|
||||
<Head>
|
||||
<title>Create Next App</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
</Head>
|
||||
|
||||
<main className={styles.main}>
|
||||
<h1 className={styles.title}>
|
||||
Welcome to <a href="https://nextjs.org">Next.js!</a>
|
||||
</h1>
|
||||
|
||||
<p className={styles.description}>
|
||||
Get started by editing{' '}
|
||||
<code className={styles.code}>pages/index.js</code>
|
||||
</p>
|
||||
|
||||
<div className={styles.grid}>
|
||||
<a href="https://nextjs.org/docs" className={styles.card}>
|
||||
<h3>Documentation →</h3>
|
||||
<p>Find in-depth information about Next.js features and API.</p>
|
||||
</a>
|
||||
|
||||
<a href="https://nextjs.org/learn" className={styles.card}>
|
||||
<h3>Learn →</h3>
|
||||
<p>Learn about Next.js in an interactive course with quizzes!</p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://github.com/vercel/next.js/tree/master/examples"
|
||||
className={styles.card}
|
||||
>
|
||||
<h3>Examples →</h3>
|
||||
<p>Discover and deploy boilerplate example Next.js projects.</p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
|
||||
className={styles.card}
|
||||
>
|
||||
<h3>Deploy →</h3>
|
||||
<p>
|
||||
Instantly deploy your Next.js site to a public URL with Vercel.
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer className={styles.footer}>
|
||||
<a
|
||||
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Powered by{' '}
|
||||
<img src="/vercel.svg" alt="Vercel Logo" className={styles.logo} />
|
||||
</a>
|
||||
</footer>
|
||||
</div>
|
||||
);
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
export { default } from 'features/IndexPage/IndexPage';
|
Binary file not shown.
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 361 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" ?><svg data-name="Layer 1" id="Layer_1" viewBox="0 0 140 140" xmlns="http://www.w3.org/2000/svg"><defs><style>.cls-1{fill:#f0dc6a;}.cls-2{fill:#525354;}.cls-3{fill:#fff;}.cls-4{fill:#d7dadb;}.cls-5{fill:#52b1b1;}</style></defs><title/><circle class="cls-1" cx="70" cy="70" r="64"/><rect class="cls-2" height="98" rx="1" ry="1" width="64" x="39" y="22"/><rect class="cls-3" height="98" rx="1" ry="1" width="64" x="38" y="21"/><rect class="cls-2" height="4" rx="1" ry="1" width="32" x="62.9" y="32.79"/><rect class="cls-2" height="4" rx="1" ry="1" width="20" x="62.9" y="41"/><rect class="cls-4" height="8" rx="1" ry="1" width="8" x="47.68" y="34.89"/><path class="cls-5" d="M49.38,38.74l-1.52-1.52a1.09,1.09,0,0,0-1.54,0l-.91.91a1.09,1.09,0,0,0,0,1.54l4,4a1.09,1.09,0,0,0,1.54,0L52.6,42l5.35-5.35a1.09,1.09,0,0,0,0-1.54L57,34.16a1.09,1.09,0,0,0-1.54,0l-4.58,4.58A1.09,1.09,0,0,1,49.38,38.74Z"/><rect class="cls-2" height="4" rx="1" ry="1" width="32" x="62.9" y="53.46"/><rect class="cls-2" height="4" rx="1" ry="1" width="20" x="62.9" y="61.67"/><rect class="cls-4" height="8" rx="1" ry="1" width="8" x="47.68" y="55.56"/><path class="cls-5" d="M49.38,59.4l-1.52-1.52a1.09,1.09,0,0,0-1.54,0l-.91.91a1.09,1.09,0,0,0,0,1.54l4,4a1.09,1.09,0,0,0,1.54,0l1.68-1.68,5.35-5.35a1.09,1.09,0,0,0,0-1.54L57,54.83a1.09,1.09,0,0,0-1.54,0L50.92,59.4A1.09,1.09,0,0,1,49.38,59.4Z"/><rect class="cls-2" height="4" rx="1" ry="1" width="32" x="62.9" y="74.12"/><rect class="cls-2" height="4" rx="1" ry="1" width="20" x="62.9" y="82.33"/><rect class="cls-4" height="8" rx="1" ry="1" width="8" x="47.68" y="76.23"/><path class="cls-5" d="M49.38,80.07l-1.52-1.52a1.09,1.09,0,0,0-1.54,0l-.91.91a1.09,1.09,0,0,0,0,1.54l4,4a1.09,1.09,0,0,0,1.54,0l1.68-1.68,5.35-5.35a1.09,1.09,0,0,0,0-1.54L57,75.49a1.09,1.09,0,0,0-1.54,0l-4.58,4.58A1.09,1.09,0,0,1,49.38,80.07Z"/><rect class="cls-2" height="4" rx="1" ry="1" width="32" x="62.9" y="94.79"/><rect class="cls-2" height="4" rx="1" ry="1" width="20" x="62.9" y="103"/><rect class="cls-4" height="8" rx="1" ry="1" width="8" x="47.68" y="96.89"/></svg>
|
After Width: | Height: | Size: 2.0 KiB |
|
@ -1,4 +0,0 @@
|
|||
<svg width="283" height="64" viewBox="0 0 283 64" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,270 @@
|
|||
# This file was generated based on ".graphqlconfig". Do not edit manually.
|
||||
|
||||
schema {
|
||||
query: Query
|
||||
mutation: Mutation
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
createProfession(input: ProfessionInput!): Profession
|
||||
createQualification(input: QualificationInput!): Qualification
|
||||
createQuestion(input: QuestionInput!): Question
|
||||
createUser(input: UserInput!): User
|
||||
deleteProfessions(ids: [ID!]!): [Profession!]
|
||||
deleteQualifications(ids: [ID!]!): [Qualification!]
|
||||
deleteQuestions(ids: [ID!]!): [Question!]
|
||||
deleteUsers(ids: [ID!]!): [User!]
|
||||
signIn(email: String!, password: String!, staySignedIn: Boolean): UserWithToken
|
||||
updateManyUsers(ids: [ID!]!, input: UpdateManyUsersInput!): [User!]
|
||||
updateProfession(id: ID!, input: ProfessionInput!): Profession
|
||||
updateQualification(id: ID!, input: QualificationInput!): Qualification
|
||||
updateQuestion(id: ID!, input: QuestionInput!): Question
|
||||
updateUser(id: ID!, input: UserInput!): User
|
||||
}
|
||||
|
||||
type Profession {
|
||||
createdAt: Time!
|
||||
description: String
|
||||
id: ID!
|
||||
name: String!
|
||||
slug: String!
|
||||
}
|
||||
|
||||
type ProfessionList {
|
||||
items: [Profession!]
|
||||
total: Int!
|
||||
}
|
||||
|
||||
type Qualification {
|
||||
code: String!
|
||||
createdAt: Time!
|
||||
description: String
|
||||
formula: String
|
||||
id: ID!
|
||||
name: String!
|
||||
slug: String!
|
||||
}
|
||||
|
||||
type QualificationList {
|
||||
items: [Qualification!]
|
||||
total: Int!
|
||||
}
|
||||
|
||||
type Query {
|
||||
generateTest(limit: Int, qualificationIDs: [ID!]!): [Question!]
|
||||
me: User
|
||||
profession(id: Int, slug: String): Profession
|
||||
professions(filter: ProfessionFilter, limit: Int, offset: Int, sort: [String!]): ProfessionList!
|
||||
qualification(id: Int, slug: String): Qualification
|
||||
qualifications(filter: QualificationFilter, limit: Int, offset: Int, sort: [String!]): QualificationList!
|
||||
questions(filter: QuestionFilter, limit: Int, offset: Int, sort: [String!]): QuestionList!
|
||||
user(id: Int!): User
|
||||
users(filter: UserFilter, limit: Int, offset: Int, sort: [String!]): UserList!
|
||||
}
|
||||
|
||||
type Question {
|
||||
answerA: String
|
||||
answerAImage: String
|
||||
answerB: String
|
||||
answerBImage: String
|
||||
answerC: String
|
||||
answerCImage: String
|
||||
answerD: String
|
||||
answerDImage: String
|
||||
content: String!
|
||||
correctAnswer: Answer!
|
||||
createdAt: Time!
|
||||
explanation: String
|
||||
from: String
|
||||
id: ID!
|
||||
image: String
|
||||
qualification: Qualification
|
||||
updatedAt: Time!
|
||||
}
|
||||
|
||||
type QuestionList {
|
||||
items: [Question!]
|
||||
total: Int!
|
||||
}
|
||||
|
||||
type User {
|
||||
activated: Boolean!
|
||||
createdAt: Time!
|
||||
displayName: String!
|
||||
email: String!
|
||||
id: ID!
|
||||
role: Role!
|
||||
}
|
||||
|
||||
type UserList {
|
||||
items: [User!]
|
||||
total: Int!
|
||||
}
|
||||
|
||||
type UserWithToken {
|
||||
token: String!
|
||||
user: User!
|
||||
}
|
||||
|
||||
enum Answer {
|
||||
a
|
||||
b
|
||||
c
|
||||
d
|
||||
}
|
||||
|
||||
enum Role {
|
||||
admin
|
||||
user
|
||||
}
|
||||
|
||||
input ProfessionFilter {
|
||||
createdAt: Time
|
||||
createdAtGT: Time
|
||||
createdAtGTE: Time
|
||||
createdAtLT: Time
|
||||
createdAtLTE: Time
|
||||
descriptionIEQ: String
|
||||
descriptionMATCH: String
|
||||
id: [ID!]
|
||||
idNEQ: [ID!]
|
||||
name: [String!]
|
||||
nameIEQ: String
|
||||
nameMATCH: String
|
||||
nameNEQ: [String!]
|
||||
qualificationID: [ID!]
|
||||
slug: [String!]
|
||||
slugNEQ: [String!]
|
||||
}
|
||||
|
||||
input ProfessionInput {
|
||||
description: String
|
||||
name: String
|
||||
}
|
||||
|
||||
input QualificationFilter {
|
||||
code: [String!]
|
||||
codeIEQ: String
|
||||
codeMATCH: String
|
||||
codeNEQ: [String!]
|
||||
createdAt: Time
|
||||
createdAtGT: Time
|
||||
createdAtGTE: Time
|
||||
createdAtLT: Time
|
||||
createdAtLTE: Time
|
||||
descriptionIEQ: String
|
||||
descriptionMATCH: String
|
||||
formula: [String!]
|
||||
formulaNEQ: [String!]
|
||||
id: [ID!]
|
||||
idNEQ: [ID!]
|
||||
name: [String!]
|
||||
nameIEQ: String
|
||||
nameMATCH: String
|
||||
nameNEQ: [String!]
|
||||
or: QualificationFilterOr
|
||||
professionID: [Int!]
|
||||
slug: [String!]
|
||||
slugNEQ: [String!]
|
||||
}
|
||||
|
||||
input QualificationFilterOr {
|
||||
codeIEQ: String
|
||||
codeMatch: String
|
||||
nameIEQ: String
|
||||
nameMatch: String
|
||||
}
|
||||
|
||||
input QualificationInput {
|
||||
associateProfession: [Int!]
|
||||
code: String
|
||||
description: String
|
||||
dissociateProfession: [Int!]
|
||||
formula: String
|
||||
name: String
|
||||
}
|
||||
|
||||
input QuestionFilter {
|
||||
contentIEQ: String
|
||||
contentMATCH: String
|
||||
createdAt: Time
|
||||
createdAtGT: Time
|
||||
createdAtGTE: Time
|
||||
createdAtLT: Time
|
||||
createdAtLTE: Time
|
||||
from: [String!]
|
||||
id: [ID!]
|
||||
idNEQ: [ID!]
|
||||
qualificationFilter: QualificationFilter
|
||||
qualificationID: [Int!]
|
||||
qualificationIDNEQ: [Int!]
|
||||
}
|
||||
|
||||
input QuestionInput {
|
||||
answerA: String
|
||||
answerAImage: Upload
|
||||
answerB: String
|
||||
answerBImage: Upload
|
||||
answerC: String
|
||||
answerCImage: Upload
|
||||
answerD: String
|
||||
answerDImage: Upload
|
||||
content: String
|
||||
correctAnswer: Answer
|
||||
deleteAnswerAImage: Boolean
|
||||
deleteAnswerBImage: Boolean
|
||||
deleteAnswerCImage: Boolean
|
||||
deleteAnswerDImage: Boolean
|
||||
deleteImage: Boolean
|
||||
explanation: String
|
||||
from: String
|
||||
image: Upload
|
||||
qualificationID: Int
|
||||
}
|
||||
|
||||
input UpdateManyUsersInput {
|
||||
activated: Boolean
|
||||
role: Role
|
||||
}
|
||||
|
||||
input UserFilter {
|
||||
activated: Boolean
|
||||
createdAt: Time
|
||||
createdAtGT: Time
|
||||
createdAtGTE: Time
|
||||
createdAtLT: Time
|
||||
createdAtLTE: Time
|
||||
displayName: [String!]
|
||||
displayNameIEQ: String
|
||||
displayNameMATCH: String
|
||||
displayNameNEQ: [String!]
|
||||
email: [String!]
|
||||
emailIEQ: String
|
||||
emailMATCH: String
|
||||
emailNEQ: [String!]
|
||||
id: [ID!]
|
||||
idNEQ: [ID!]
|
||||
or: UserFilterOr
|
||||
role: [Role!]
|
||||
roleNEQ: [Role!]
|
||||
}
|
||||
|
||||
input UserFilterOr {
|
||||
displayNameIEQ: String
|
||||
displayNameMATCH: String
|
||||
emailIEQ: String
|
||||
emailMATCH: String
|
||||
}
|
||||
|
||||
input UserInput {
|
||||
activated: Boolean
|
||||
displayName: String
|
||||
email: String
|
||||
password: String
|
||||
role: Role
|
||||
}
|
||||
|
||||
|
||||
scalar Upload
|
||||
|
||||
scalar Time
|
|
@ -0,0 +1,5 @@
|
|||
const IndexPage = () => {
|
||||
return <div>hello?</div>;
|
||||
};
|
||||
|
||||
export default IndexPage;
|
|
@ -0,0 +1,410 @@
|
|||
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]> };
|
||||
/** All built-in and custom scalars, mapped to their actual values */
|
||||
export type Scalars = {
|
||||
ID: number;
|
||||
String: string;
|
||||
Boolean: boolean;
|
||||
Int: number;
|
||||
Float: number;
|
||||
Time: Date | string;
|
||||
Upload: any;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
export type QuestionInput = {
|
||||
content?: Maybe<Scalars['String']>;
|
||||
from?: Maybe<Scalars['String']>;
|
||||
explanation?: Maybe<Scalars['String']>;
|
||||
correctAnswer?: Maybe<Answer>;
|
||||
qualificationID?: Maybe<Scalars['Int']>;
|
||||
image?: Maybe<Scalars['Upload']>;
|
||||
deleteImage?: Maybe<Scalars['Boolean']>;
|
||||
answerA?: Maybe<Scalars['String']>;
|
||||
answerAImage?: Maybe<Scalars['Upload']>;
|
||||
deleteAnswerAImage?: Maybe<Scalars['Boolean']>;
|
||||
answerB?: Maybe<Scalars['String']>;
|
||||
answerBImage?: Maybe<Scalars['Upload']>;
|
||||
deleteAnswerBImage?: Maybe<Scalars['Boolean']>;
|
||||
answerC?: Maybe<Scalars['String']>;
|
||||
answerCImage?: Maybe<Scalars['Upload']>;
|
||||
deleteAnswerCImage?: Maybe<Scalars['Boolean']>;
|
||||
answerD?: Maybe<Scalars['String']>;
|
||||
answerDImage?: Maybe<Scalars['Upload']>;
|
||||
deleteAnswerDImage?: Maybe<Scalars['Boolean']>;
|
||||
};
|
||||
|
||||
export type QuestionFilter = {
|
||||
id?: Maybe<Array<Scalars['ID']>>;
|
||||
idNEQ?: Maybe<Array<Scalars['ID']>>;
|
||||
from?: Maybe<Array<Scalars['String']>>;
|
||||
contentIEQ?: Maybe<Scalars['String']>;
|
||||
contentMATCH?: Maybe<Scalars['String']>;
|
||||
qualificationID?: Maybe<Array<Scalars['Int']>>;
|
||||
qualificationIDNEQ?: Maybe<Array<Scalars['Int']>>;
|
||||
qualificationFilter?: Maybe<QualificationFilter>;
|
||||
createdAt?: Maybe<Scalars['Time']>;
|
||||
createdAtGT?: Maybe<Scalars['Time']>;
|
||||
createdAtGTE?: Maybe<Scalars['Time']>;
|
||||
createdAtLT?: Maybe<Scalars['Time']>;
|
||||
createdAtLTE?: Maybe<Scalars['Time']>;
|
||||
};
|
||||
|
||||
|
||||
export type Mutation = {
|
||||
createProfession?: Maybe<Profession>;
|
||||
updateProfession?: Maybe<Profession>;
|
||||
deleteProfessions?: Maybe<Array<Profession>>;
|
||||
createQualification?: Maybe<Qualification>;
|
||||
updateQualification?: Maybe<Qualification>;
|
||||
deleteQualifications?: Maybe<Array<Qualification>>;
|
||||
createQuestion?: Maybe<Question>;
|
||||
updateQuestion?: Maybe<Question>;
|
||||
deleteQuestions?: Maybe<Array<Question>>;
|
||||
createUser?: Maybe<User>;
|
||||
updateUser?: Maybe<User>;
|
||||
updateManyUsers?: Maybe<Array<User>>;
|
||||
deleteUsers?: Maybe<Array<User>>;
|
||||
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'];
|
||||
staySignedIn?: Maybe<Scalars['Boolean']>;
|
||||
};
|
||||
|
||||
export type ProfessionList = {
|
||||
total: Scalars['Int'];
|
||||
items?: Maybe<Array<Profession>>;
|
||||
};
|
||||
|
||||
export type Profession = {
|
||||
id: Scalars['ID'];
|
||||
slug: Scalars['String'];
|
||||
name: Scalars['String'];
|
||||
description?: Maybe<Scalars['String']>;
|
||||
createdAt: Scalars['Time'];
|
||||
};
|
||||
|
||||
export enum Answer {
|
||||
A = 'a',
|
||||
B = 'b',
|
||||
C = 'c',
|
||||
D = 'd'
|
||||
}
|
||||
|
||||
export type UserList = {
|
||||
total: Scalars['Int'];
|
||||
items?: Maybe<Array<User>>;
|
||||
};
|
||||
|
||||
export type Question = {
|
||||
id: Scalars['ID'];
|
||||
from?: Maybe<Scalars['String']>;
|
||||
content: Scalars['String'];
|
||||
explanation?: Maybe<Scalars['String']>;
|
||||
correctAnswer: Answer;
|
||||
image?: Maybe<Scalars['String']>;
|
||||
answerA?: Maybe<Scalars['String']>;
|
||||
answerAImage?: Maybe<Scalars['String']>;
|
||||
answerB?: Maybe<Scalars['String']>;
|
||||
answerBImage?: Maybe<Scalars['String']>;
|
||||
answerC?: Maybe<Scalars['String']>;
|
||||
answerCImage?: Maybe<Scalars['String']>;
|
||||
answerD?: Maybe<Scalars['String']>;
|
||||
answerDImage?: Maybe<Scalars['String']>;
|
||||
qualification?: Maybe<Qualification>;
|
||||
createdAt: Scalars['Time'];
|
||||
updatedAt: Scalars['Time'];
|
||||
};
|
||||
|
||||
export type UpdateManyUsersInput = {
|
||||
role?: Maybe<Role>;
|
||||
activated?: Maybe<Scalars['Boolean']>;
|
||||
};
|
||||
|
||||
export type UserFilter = {
|
||||
id?: Maybe<Array<Scalars['ID']>>;
|
||||
idNEQ?: Maybe<Array<Scalars['ID']>>;
|
||||
activated?: Maybe<Scalars['Boolean']>;
|
||||
displayName?: Maybe<Array<Scalars['String']>>;
|
||||
displayNameNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
displayNameIEQ?: Maybe<Scalars['String']>;
|
||||
displayNameMATCH?: Maybe<Scalars['String']>;
|
||||
email?: Maybe<Array<Scalars['String']>>;
|
||||
emailNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
emailIEQ?: Maybe<Scalars['String']>;
|
||||
emailMATCH?: Maybe<Scalars['String']>;
|
||||
role?: Maybe<Array<Role>>;
|
||||
roleNEQ?: Maybe<Array<Role>>;
|
||||
createdAt?: Maybe<Scalars['Time']>;
|
||||
createdAtGT?: Maybe<Scalars['Time']>;
|
||||
createdAtGTE?: Maybe<Scalars['Time']>;
|
||||
createdAtLT?: Maybe<Scalars['Time']>;
|
||||
createdAtLTE?: Maybe<Scalars['Time']>;
|
||||
or?: Maybe<UserFilterOr>;
|
||||
};
|
||||
|
||||
export type QualificationFilter = {
|
||||
id?: Maybe<Array<Scalars['ID']>>;
|
||||
idNEQ?: Maybe<Array<Scalars['ID']>>;
|
||||
slug?: Maybe<Array<Scalars['String']>>;
|
||||
slugNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
formula?: Maybe<Array<Scalars['String']>>;
|
||||
formulaNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
name?: Maybe<Array<Scalars['String']>>;
|
||||
nameNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
nameIEQ?: Maybe<Scalars['String']>;
|
||||
nameMATCH?: Maybe<Scalars['String']>;
|
||||
code?: Maybe<Array<Scalars['String']>>;
|
||||
codeNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
codeIEQ?: Maybe<Scalars['String']>;
|
||||
codeMATCH?: Maybe<Scalars['String']>;
|
||||
descriptionIEQ?: Maybe<Scalars['String']>;
|
||||
descriptionMATCH?: Maybe<Scalars['String']>;
|
||||
professionID?: Maybe<Array<Scalars['Int']>>;
|
||||
createdAt?: Maybe<Scalars['Time']>;
|
||||
createdAtGT?: Maybe<Scalars['Time']>;
|
||||
createdAtGTE?: Maybe<Scalars['Time']>;
|
||||
createdAtLT?: Maybe<Scalars['Time']>;
|
||||
createdAtLTE?: Maybe<Scalars['Time']>;
|
||||
or?: Maybe<QualificationFilterOr>;
|
||||
};
|
||||
|
||||
export type ProfessionInput = {
|
||||
name?: Maybe<Scalars['String']>;
|
||||
description?: Maybe<Scalars['String']>;
|
||||
};
|
||||
|
||||
export type ProfessionFilter = {
|
||||
id?: Maybe<Array<Scalars['ID']>>;
|
||||
idNEQ?: Maybe<Array<Scalars['ID']>>;
|
||||
slug?: Maybe<Array<Scalars['String']>>;
|
||||
slugNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
name?: Maybe<Array<Scalars['String']>>;
|
||||
nameNEQ?: Maybe<Array<Scalars['String']>>;
|
||||
nameIEQ?: Maybe<Scalars['String']>;
|
||||
nameMATCH?: Maybe<Scalars['String']>;
|
||||
descriptionIEQ?: Maybe<Scalars['String']>;
|
||||
descriptionMATCH?: Maybe<Scalars['String']>;
|
||||
qualificationID?: Maybe<Array<Scalars['ID']>>;
|
||||
createdAt?: Maybe<Scalars['Time']>;
|
||||
createdAtGT?: Maybe<Scalars['Time']>;
|
||||
createdAtGTE?: Maybe<Scalars['Time']>;
|
||||
createdAtLT?: Maybe<Scalars['Time']>;
|
||||
createdAtLTE?: Maybe<Scalars['Time']>;
|
||||
};
|
||||
|
||||
export type QuestionList = {
|
||||
total: Scalars['Int'];
|
||||
items?: Maybe<Array<Question>>;
|
||||
};
|
||||
|
||||
export enum Role {
|
||||
Admin = 'admin',
|
||||
User = 'user'
|
||||
}
|
||||
|
||||
export type UserWithToken = {
|
||||
token: Scalars['String'];
|
||||
user: User;
|
||||
};
|
||||
|
||||
|
||||
export type UserInput = {
|
||||
displayName?: Maybe<Scalars['String']>;
|
||||
password?: Maybe<Scalars['String']>;
|
||||
email?: Maybe<Scalars['String']>;
|
||||
role?: Maybe<Role>;
|
||||
activated?: Maybe<Scalars['Boolean']>;
|
||||
};
|
||||
|
||||
export type QualificationList = {
|
||||
total: Scalars['Int'];
|
||||
items?: Maybe<Array<Qualification>>;
|
||||
};
|
||||
|
||||
export type QualificationInput = {
|
||||
name?: Maybe<Scalars['String']>;
|
||||
description?: Maybe<Scalars['String']>;
|
||||
code?: Maybe<Scalars['String']>;
|
||||
formula?: Maybe<Scalars['String']>;
|
||||
associateProfession?: Maybe<Array<Scalars['Int']>>;
|
||||
dissociateProfession?: Maybe<Array<Scalars['Int']>>;
|
||||
};
|
||||
|
||||
export type QualificationFilterOr = {
|
||||
nameMatch?: Maybe<Scalars['String']>;
|
||||
nameIEQ?: Maybe<Scalars['String']>;
|
||||
codeMatch?: Maybe<Scalars['String']>;
|
||||
codeIEQ?: Maybe<Scalars['String']>;
|
||||
};
|
||||
|
||||
export type User = {
|
||||
id: Scalars['ID'];
|
||||
displayName: Scalars['String'];
|
||||
role: Role;
|
||||
email: Scalars['String'];
|
||||
activated: Scalars['Boolean'];
|
||||
createdAt: Scalars['Time'];
|
||||
};
|
||||
|
||||
export type UserFilterOr = {
|
||||
displayNameIEQ?: Maybe<Scalars['String']>;
|
||||
displayNameMATCH?: Maybe<Scalars['String']>;
|
||||
emailIEQ?: Maybe<Scalars['String']>;
|
||||
emailMATCH?: Maybe<Scalars['String']>;
|
||||
};
|
||||
|
||||
export type Qualification = {
|
||||
id: Scalars['ID'];
|
||||
slug: Scalars['String'];
|
||||
name: Scalars['String'];
|
||||
code: Scalars['String'];
|
||||
formula?: Maybe<Scalars['String']>;
|
||||
description?: Maybe<Scalars['String']>;
|
||||
createdAt: Scalars['Time'];
|
||||
};
|
||||
|
||||
export type Query = {
|
||||
professions: ProfessionList;
|
||||
profession?: Maybe<Profession>;
|
||||
qualifications: QualificationList;
|
||||
qualification?: Maybe<Qualification>;
|
||||
questions: QuestionList;
|
||||
generateTest?: Maybe<Array<Question>>;
|
||||
users: UserList;
|
||||
user?: Maybe<User>;
|
||||
me?: Maybe<User>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryProfessionsArgs = {
|
||||
filter?: Maybe<ProfessionFilter>;
|
||||
limit?: Maybe<Scalars['Int']>;
|
||||
offset?: Maybe<Scalars['Int']>;
|
||||
sort?: Maybe<Array<Scalars['String']>>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryProfessionArgs = {
|
||||
id?: Maybe<Scalars['Int']>;
|
||||
slug?: Maybe<Scalars['String']>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryQualificationsArgs = {
|
||||
filter?: Maybe<QualificationFilter>;
|
||||
limit?: Maybe<Scalars['Int']>;
|
||||
offset?: Maybe<Scalars['Int']>;
|
||||
sort?: Maybe<Array<Scalars['String']>>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryQualificationArgs = {
|
||||
id?: Maybe<Scalars['Int']>;
|
||||
slug?: Maybe<Scalars['String']>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryQuestionsArgs = {
|
||||
filter?: Maybe<QuestionFilter>;
|
||||
limit?: Maybe<Scalars['Int']>;
|
||||
offset?: Maybe<Scalars['Int']>;
|
||||
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']>;
|
||||
offset?: Maybe<Scalars['Int']>;
|
||||
sort?: Maybe<Array<Scalars['String']>>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryUserArgs = {
|
||||
id: Scalars['Int'];
|
||||
};
|
|
@ -0,0 +1,18 @@
|
|||
import { ThemeProvider as MuiThemeProvider } from '@material-ui/styles';
|
||||
import { CssBaseline } from '@material-ui/core';
|
||||
import createTheme from './createTheme';
|
||||
|
||||
interface ThemeProviderProps {
|
||||
children?: React.ReactNode;
|
||||
}
|
||||
|
||||
function ThemeProvider({ children }: ThemeProviderProps) {
|
||||
return (
|
||||
<MuiThemeProvider theme={createTheme()}>
|
||||
{children}
|
||||
<CssBaseline />
|
||||
</MuiThemeProvider>
|
||||
);
|
||||
}
|
||||
|
||||
export default ThemeProvider;
|
|
@ -0,0 +1,35 @@
|
|||
import {
|
||||
createMuiTheme,
|
||||
responsiveFontSizes,
|
||||
Theme,
|
||||
} from '@material-ui/core/styles';
|
||||
import { blue, pink } from '@material-ui/core/colors';
|
||||
|
||||
const createTheme = (): Theme => {
|
||||
return responsiveFontSizes(
|
||||
createMuiTheme({
|
||||
palette: {
|
||||
primary: {
|
||||
main: blue['A200'],
|
||||
},
|
||||
secondary: {
|
||||
main: pink['A200'],
|
||||
},
|
||||
},
|
||||
overrides: {
|
||||
MuiTableContainer: {
|
||||
root: {
|
||||
overflow: 'auto',
|
||||
},
|
||||
},
|
||||
},
|
||||
props: {
|
||||
MuiLink: {
|
||||
underline: 'none',
|
||||
},
|
||||
},
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
export default createTheme;
|
|
@ -19,9 +19,12 @@
|
|||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
"jsx": "react-jsx"
|
||||
"jsx": "preserve"
|
||||
},
|
||||
"include": [
|
||||
"src"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
]
|
||||
}
|
||||
|
|
Reference in New Issue