From bf2da5a58bc9a93d5d78c7787cd5f19a8274f675 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Fri, 28 Jan 2022 16:25:37 +0900 Subject: [PATCH 1/8] Switch orgs in DB, create seed DB in Prisma, create card-deck relation --- package-lock.json | 246 +++++++++++++++++++++++++++++++++++++++++-- package.json | 9 +- prisma/schema.prisma | 21 +++- prisma/seed.ts | 52 +++++++++ tsconfig.json | 2 +- 5 files changed, 314 insertions(+), 16 deletions(-) create mode 100644 prisma/seed.ts diff --git a/package-lock.json b/package-lock.json index 266abb1..b7d98de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@types/node": "17.0.8", + "@types/node": "^17.0.8", "@types/react": "17.0.38", "autoprefixer": "^10.4.2", "eslint": "8.6.0", @@ -25,7 +25,9 @@ "postcss": "^8.4.5", "prisma": "^3.8.1", "tailwindcss": "^3.0.13", - "typescript": "4.5.4" + "ts-node": "^10.4.0", + "tslib": "^2.3.1", + "typescript": "^4.5.5" } }, "node_modules/@babel/code-frame": { @@ -642,6 +644,27 @@ "node": ">=6.9.0" } }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -1001,6 +1024,30 @@ "tslib": "^2.1.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -1643,6 +1690,12 @@ "node": ">=10" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1749,6 +1802,15 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3109,6 +3171,12 @@ "node": ">=10" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/match-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", @@ -4304,6 +4372,62 @@ "node": ">=8.0" } }, + "node_modules/ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/tsconfig-paths": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", @@ -4379,9 +4503,9 @@ } }, "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -4515,6 +4639,15 @@ "node": ">= 6" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/zod": { "version": "3.11.6", "resolved": "https://registry.npmjs.org/zod/-/zod-3.11.6.tgz", @@ -5012,6 +5145,21 @@ "to-fast-properties": "^2.0.0" } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -5217,6 +5365,30 @@ "tslib": "^2.1.0" } }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -5675,6 +5847,12 @@ "yaml": "^1.10.0" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5755,6 +5933,12 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6779,6 +6963,12 @@ "yallist": "^4.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "match-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", @@ -7586,6 +7776,40 @@ "is-number": "^7.0.0" } }, + "ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + } + } + }, "tsconfig-paths": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", @@ -7647,9 +7871,9 @@ "dev": true }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "dev": true }, "unbox-primitive": { @@ -7752,6 +7976,12 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "zod": { "version": "3.11.6", "resolved": "https://registry.npmjs.org/zod/-/zod-3.11.6.tgz", diff --git a/package.json b/package.json index ece9c42..405d9ec 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,9 @@ "start": "next start", "lint": "next lint" }, + "prisma": { + "seed": "ts-node prisma/seed.ts" + }, "dependencies": { "@prisma/client": "^3.8.1", "@trpc/next": "^9.17.0", @@ -19,7 +22,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@types/node": "17.0.8", + "@types/node": "^17.0.8", "@types/react": "17.0.38", "autoprefixer": "^10.4.2", "eslint": "8.6.0", @@ -27,6 +30,8 @@ "postcss": "^8.4.5", "prisma": "^3.8.1", "tailwindcss": "^3.0.13", - "typescript": "4.5.4" + "ts-node": "^10.4.0", + "tslib": "^2.3.1", + "typescript": "^4.5.5" } } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 933a57a..4e945f4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -12,12 +12,23 @@ generator client { previewFeatures = ["referentialIntegrity"] } -model Card { +model DxDeck { id Int @default(autoincrement()) @id createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - front String @db.VarChar(255) - back String @db.VarChar(255) - source String @db.VarChar(255) - xp Float @db.Float + type String @db.VarChar(255) + cards DxCard[] } + +model DxCard { + id Int @default(autoincrement()) @id + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + front String @db.Text + back String @db.Text + source String @db.VarChar(255) + xp Float @db.Float + cardId Int + deck DxDeck @relation(fields: [cardId], references: [id], onDelete: Cascade) + @@index([cardId]) +} \ No newline at end of file diff --git a/prisma/seed.ts b/prisma/seed.ts new file mode 100644 index 0000000..fff4dbc --- /dev/null +++ b/prisma/seed.ts @@ -0,0 +1,52 @@ +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient(); + +async function main() { + const deck = await prisma.dxDeck.create({ + data: { + type: "concept", + cards: { + create: [ + { + front: "front 1", + back: "back 1", + source: "source 1", + xp: 0.0, + }, + { + front: "front 2", + back: "back 2", + source: "source 2", + xp: 1.0, + }, + { + front: "front 3", + back: "back 3", + source: "source 3", + xp: 2.0, + }, + { + front: "front 4", + back: "back 4", + source: "source 4", + xp: 4.0, + }, + { + front: "front 5", + back: "back 5", + source: "source 5", + xp: 6.0, + }, + ], + }, + }, + }); +} + +main() + .catch((e) => { + console.log("Error! " + e); + process.exit(1); + }) + .finally(async () => await prisma.$disconnect()); diff --git a/tsconfig.json b/tsconfig.json index 2159bf4..96ccc77 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,7 @@ "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, - "module": "esnext", + "module": "commonjs", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, From f4ed1ad51df2d051522d4ac2dd84adf400981ae3 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Tue, 1 Feb 2022 21:32:53 +0900 Subject: [PATCH 2/8] Added functionality to query a deck and flip through the cards --- src/backend/router/index.ts | 6 +- src/pages/index.tsx | 173 ++++++++++++++++++++++++++++-------- 2 files changed, 137 insertions(+), 42 deletions(-) diff --git a/src/backend/router/index.ts b/src/backend/router/index.ts index ae4cd5c..444f0f9 100644 --- a/src/backend/router/index.ts +++ b/src/backend/router/index.ts @@ -3,15 +3,15 @@ import * as trpcNext from "@trpc/server/adapters/next"; import { z } from "zod"; import { prisma } from "@/backend/utils/prisma"; -export const appRouter = trpc.router().query("get-random-card", { +export const appRouter = trpc.router().query("get-deck", { input: z .object({ text: z.string().nullish(), }) .nullish(), async resolve({ input }) { - const cardFromDb = await prisma.card.findFirst(); - return { front: cardFromDb?.front }; + const cardsFromDb = await prisma.dxCard.findMany(); + return { cards: cardsFromDb }; }, }); diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 8d9676c..d5d4dc1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,45 +1,140 @@ import { trpc } from "@/utils/trpc"; +import React from "react"; export default function Home() { - const { data, isLoading } = trpc.useQuery(["get-random-card"]); + const { data, isLoading } = trpc.useQuery(["get-deck"]); - if (isLoading) - return
Loading...
; - if (data) - return ( -
-
-
- Source Material -
-
-
- Back -
-
-
-
- {data.front} -
-
-
-
- 1 -
-
-
-
-
-
-
-
-
- 12 -
-
- → + type CardProps = {}; + type CardState = { + isFront: boolean; + cardNumber: number; + bars: number; + level: number; + }; + + class Card extends React.Component { + state: CardState = { + isFront: true, + cardNumber: 0, + bars: 0, + level: 0, + }; + + componentDidMount() { + this.next(); + } + + render() { + if (data) { + return ( +
+
+
+ {data.cards[this.state.cardNumber].source + ? data.cards[this.state.cardNumber].source + : ""} +
+
+
+ Back +
+
+
{ + this.flip(); + }} + className="cursor-pointer relative flex h-4/5 w-4/5 bg-orangeweboxfordblue-primary justify-center items-center border-orangeweboxfordblue-border border-4 shadow-2xl rounded-[9rem]" + > +
+ {this.state.isFront + ? data.cards[this.state.cardNumber].front + : data.cards[this.state.cardNumber].back} +
+
+
{ + this.next(); + }} + className="cursor-pointer absolute flex w-36 h-36 bottom-[8%] right-[8%] justify-center items-center group bg-orangeweboxfordblue-tertiary border-orangeweboxfordblue-border border-4 shadow-2xl rounded-full" + > +
+ 12 +
+
+ → +
+
+
+
+ {this.state.level} +
+
+
+
+
+
+
-
-
- ); + ); + } + } + flip = () => { + this.setState((state) => ({ + isFront: !state.isFront, + })); + }; + getColorAndBorder = (row: number) => { + if (this.state.bars >= row) { + return "bg-orangeweboxfordblue-tertiary"; + } else { + return "bg-orangeweboxfordblue-quaternary border-dotted"; + } + }; + next = () => { + var nextCard = this.state.cardNumber + 1, + frontSide = true, + exp = 0, + lvl = 0, + brs = 0; + // Move the array forward to the next card + if (data && nextCard >= data.cards.length) { + nextCard = 0; + } + // Calculate info for the xp bar + exp = data ? data.cards[nextCard].xp : 0; + if (exp < 3) { + lvl = 1; + brs = exp; + } else if (exp < 6) { + lvl = 2; + brs = exp - 3; + } else { + lvl = 3; + brs = exp - 6; + if (brs > 3) brs = 3; + } + this.setState((state) => ({ + cardNumber: nextCard, + isFront: frontSide, + level: lvl, + bars: brs, + })); + }; + } + + if (isLoading) + return
Loading...
; + if (data) return ; } From ff4633adbe4d30237a9c15222e6e30ba295bc416 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Tue, 1 Feb 2022 21:50:26 +0900 Subject: [PATCH 3/8] Break out functions for re-use --- src/pages/index.tsx | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d5d4dc1..f1ae961 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -20,7 +20,7 @@ export default function Home() { }; componentDidMount() { - this.next(); + this.updateLevelsAndSide(); } render() { @@ -102,18 +102,12 @@ export default function Home() { return "bg-orangeweboxfordblue-quaternary border-dotted"; } }; - next = () => { - var nextCard = this.state.cardNumber + 1, - frontSide = true, + updateLevelsAndSide = () => { + var frontSide = true, exp = 0, lvl = 0, brs = 0; - // Move the array forward to the next card - if (data && nextCard >= data.cards.length) { - nextCard = 0; - } - // Calculate info for the xp bar - exp = data ? data.cards[nextCard].xp : 0; + exp = data ? data.cards[this.state.cardNumber].xp : 0; if (exp < 3) { lvl = 1; brs = exp; @@ -126,12 +120,22 @@ export default function Home() { if (brs > 3) brs = 3; } this.setState((state) => ({ - cardNumber: nextCard, isFront: frontSide, level: lvl, bars: brs, })); }; + next = () => { + var nextCard = this.state.cardNumber + 1; + if (data && nextCard >= data.cards.length) { + nextCard = 0; + } + // Calculate info for the xp bar + this.setState((state) => ({ + cardNumber: nextCard, + })); + this.updateLevelsAndSide(); + }; } if (isLoading) From 1edf2d0dbaee24b0b808310a86ad1b64fb045004 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Tue, 1 Feb 2022 22:44:20 +0900 Subject: [PATCH 4/8] Added timer to count down and move to the next card automatically --- src/pages/index.tsx | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index f1ae961..660a582 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -9,18 +9,27 @@ export default function Home() { cardNumber: number; bars: number; level: number; + countdown: number; }; class Card extends React.Component { + private timerID: number = 0; state: CardState = { isFront: true, cardNumber: 0, bars: 0, level: 0, + countdown: 12, }; componentDidMount() { - this.updateLevelsAndSide(); + // NOTE: This seems to reset when 'looking away' from the window + this.updateStateForCardIndex(this.state.cardNumber); + this.timerID = window.setInterval(() => this.tick(), 1000); + } + + componentWillUnmount() { + clearInterval(this.timerID); } render() { @@ -57,7 +66,7 @@ export default function Home() { className="cursor-pointer absolute flex w-36 h-36 bottom-[8%] right-[8%] justify-center items-center group bg-orangeweboxfordblue-tertiary border-orangeweboxfordblue-border border-4 shadow-2xl rounded-full" >
- 12 + {this.state.countdown}
→ @@ -90,6 +99,16 @@ export default function Home() { ); } } + tick = () => { + var newTime = this.state.countdown - 1; + if (newTime < 0) { + this.next(); + } else { + this.setState({ + countdown: newTime, + }); + } + }; flip = () => { this.setState((state) => ({ isFront: !state.isFront, @@ -102,12 +121,13 @@ export default function Home() { return "bg-orangeweboxfordblue-quaternary border-dotted"; } }; - updateLevelsAndSide = () => { + updateStateForCardIndex = (currentCard: number) => { var frontSide = true, exp = 0, lvl = 0, - brs = 0; - exp = data ? data.cards[this.state.cardNumber].xp : 0; + brs = 0, + timer = 12; + exp = data ? data.cards[currentCard].xp : 0; if (exp < 3) { lvl = 1; brs = exp; @@ -123,6 +143,8 @@ export default function Home() { isFront: frontSide, level: lvl, bars: brs, + countdown: timer, + cardNumber: currentCard, })); }; next = () => { @@ -130,11 +152,7 @@ export default function Home() { if (data && nextCard >= data.cards.length) { nextCard = 0; } - // Calculate info for the xp bar - this.setState((state) => ({ - cardNumber: nextCard, - })); - this.updateLevelsAndSide(); + this.updateStateForCardIndex(nextCard); }; } From cd8db88e1db3504bb1fc2d48c826db036a23a9e3 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Thu, 3 Feb 2022 22:24:33 +0900 Subject: [PATCH 5/8] Update seed for testing higher xp cases and fixing xp->level->bars logic --- prisma/seed.ts | 30 +++++++++++++++++++++ src/pages/index.tsx | 64 +++++++++++++++++++++++++++++++++++++-------- 2 files changed, 83 insertions(+), 11 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index fff4dbc..ce790fe 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -38,6 +38,36 @@ async function main() { source: "source 5", xp: 6.0, }, + { + front: "front 6", + back: "back 6", + source: "source 6", + xp: 7.0, + }, + { + front: "front 7", + back: "back 7", + source: "source 7", + xp: 8.0, + }, + { + front: "front 8", + back: "back 8", + source: "source 8", + xp: 9.0, + }, + { + front: "front 9", + back: "back 9", + source: "source 9", + xp: 11.0, + }, + { + front: "front 10", + back: "back 10", + source: "source 10", + xp: 15.0, + }, ], }, }, diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 660a582..80876bf 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -76,22 +76,51 @@ export default function Home() {
{this.state.level}
-
+
+ {this.state.level > 1 && ( +
+ )} + {this.state.level > 2 && ( +
+ )}
@@ -114,13 +143,26 @@ export default function Home() { isFront: !state.isFront, })); }; - getColorAndBorder = (row: number) => { + getColorAndBorder = (row: number, level: number) => { if (this.state.bars >= row) { return "bg-orangeweboxfordblue-tertiary"; + } else if (row - level === 2) { + return "bg-orangeweboxfordblue-quaternary"; } else { return "bg-orangeweboxfordblue-quaternary border-dotted"; } }; + getWidth = (level: number) => { + switch (level) { + case 1: + return "px-12"; + case 2: + return "px-9"; + case 3: + return "px-7"; + default: + } + }; updateStateForCardIndex = (currentCard: number) => { var frontSide = true, exp = 0, @@ -131,13 +173,13 @@ export default function Home() { if (exp < 3) { lvl = 1; brs = exp; - } else if (exp < 6) { + } else if (exp < 7) { lvl = 2; brs = exp - 3; } else { lvl = 3; - brs = exp - 6; - if (brs > 3) brs = 3; + brs = exp - 7; + if (brs > 5) brs = 5; } this.setState((state) => ({ isFront: frontSide, From 7fba4b2652f54b50f420b95b8b0e0f416066d785 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Thu, 10 Feb 2022 17:38:10 +0900 Subject: [PATCH 6/8] Big routing changes. Can select deck from list on home screen and then cycle through the cards in that deck in the review screen. Back button now sends back to home screen --- prisma/schema.prisma | 11 +- prisma/seed.ts | 1 + src/backend/router/index.ts | 38 ++++-- src/pages/index.tsx | 227 ++++++------------------------------ src/pages/review/[id].tsx | 225 +++++++++++++++++++++++++++++++++++ 5 files changed, 295 insertions(+), 207 deletions(-) create mode 100644 src/pages/review/[id].tsx diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 4e945f4..6187c11 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -13,22 +13,23 @@ generator client { } model DxDeck { - id Int @default(autoincrement()) @id + id String @id @default(uuid()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt type String @db.VarChar(255) + name String @db.Text cards DxCard[] } model DxCard { - id Int @default(autoincrement()) @id + id String @id @default(uuid()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt front String @db.Text back String @db.Text source String @db.VarChar(255) xp Float @db.Float - cardId Int - deck DxDeck @relation(fields: [cardId], references: [id], onDelete: Cascade) - @@index([cardId]) + deckId String + deck DxDeck @relation(fields: [deckId], references: [id], onDelete: Cascade) + @@index([deckId]) } \ No newline at end of file diff --git a/prisma/seed.ts b/prisma/seed.ts index ce790fe..c4c99a4 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -6,6 +6,7 @@ async function main() { const deck = await prisma.dxDeck.create({ data: { type: "concept", + name: "Seeded Deck 1", cards: { create: [ { diff --git a/src/backend/router/index.ts b/src/backend/router/index.ts index 444f0f9..f8cacdf 100644 --- a/src/backend/router/index.ts +++ b/src/backend/router/index.ts @@ -3,17 +3,33 @@ import * as trpcNext from "@trpc/server/adapters/next"; import { z } from "zod"; import { prisma } from "@/backend/utils/prisma"; -export const appRouter = trpc.router().query("get-deck", { - input: z - .object({ - text: z.string().nullish(), - }) - .nullish(), - async resolve({ input }) { - const cardsFromDb = await prisma.dxCard.findMany(); - return { cards: cardsFromDb }; - }, -}); +export const appRouter = trpc + .router() + .query("get-decks", { + input: z + .object({ + text: z.string().nullish(), + }) + .nullish(), + async resolve({ input }) { + const decksFromDb = await prisma.dxDeck.findMany(); + return { decks: decksFromDb }; + }, + }) + .query("get-cards-from-deck", { + input: z.object({ + id: z.string(), + }), + async resolve({ input }) { + const { id } = input; + const cardsFromDb = await prisma.dxCard.findMany({ + where: { + deckId: id, + }, + }); + return { cards: cardsFromDb }; + }, + }); // export type definition of API export type AppRouter = typeof appRouter; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 80876bf..c49e2ac 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,204 +1,49 @@ import { trpc } from "@/utils/trpc"; import React from "react"; +import Link from "next/link"; +import { DxDeck } from "@prisma/client"; + export default function Home() { - const { data, isLoading } = trpc.useQuery(["get-deck"]); + const { data, isLoading } = trpc.useQuery(["get-decks"]); - type CardProps = {}; - type CardState = { - isFront: boolean; - cardNumber: number; - bars: number; - level: number; - countdown: number; + type DeckProps = { + decks: DxDeck[]; }; + type DeckState = {}; - class Card extends React.Component { - private timerID: number = 0; - state: CardState = { - isFront: true, - cardNumber: 0, - bars: 0, - level: 0, - countdown: 12, - }; - - componentDidMount() { - // NOTE: This seems to reset when 'looking away' from the window - this.updateStateForCardIndex(this.state.cardNumber); - this.timerID = window.setInterval(() => this.tick(), 1000); - } - - componentWillUnmount() { - clearInterval(this.timerID); - } - + class Decks extends React.Component { render() { - if (data) { - return ( -
-
-
- {data.cards[this.state.cardNumber].source - ? data.cards[this.state.cardNumber].source - : ""} -
-
-
- Back -
-
-
{ - this.flip(); - }} - className="cursor-pointer relative flex h-4/5 w-4/5 bg-orangeweboxfordblue-primary justify-center items-center border-orangeweboxfordblue-border border-4 shadow-2xl rounded-[9rem]" - > -
- {this.state.isFront - ? data.cards[this.state.cardNumber].front - : data.cards[this.state.cardNumber].back} -
-
-
{ - this.next(); - }} - className="cursor-pointer absolute flex w-36 h-36 bottom-[8%] right-[8%] justify-center items-center group bg-orangeweboxfordblue-tertiary border-orangeweboxfordblue-border border-4 shadow-2xl rounded-full" - > -
- {this.state.countdown} -
-
- → -
-
-
-
- {this.state.level} -
-
-
-
-
- {this.state.level > 1 && ( -
- )} - {this.state.level > 2 && ( -
- )} -
-
+ const listItems = this.props.decks.map((deck) => ( + +
+
+
  • {deck.name}
  • - ); - } + + )); + return
      {listItems}
    ; } - tick = () => { - var newTime = this.state.countdown - 1; - if (newTime < 0) { - this.next(); - } else { - this.setState({ - countdown: newTime, - }); - } - }; - flip = () => { - this.setState((state) => ({ - isFront: !state.isFront, - })); - }; - getColorAndBorder = (row: number, level: number) => { - if (this.state.bars >= row) { - return "bg-orangeweboxfordblue-tertiary"; - } else if (row - level === 2) { - return "bg-orangeweboxfordblue-quaternary"; - } else { - return "bg-orangeweboxfordblue-quaternary border-dotted"; - } - }; - getWidth = (level: number) => { - switch (level) { - case 1: - return "px-12"; - case 2: - return "px-9"; - case 3: - return "px-7"; - default: - } - }; - updateStateForCardIndex = (currentCard: number) => { - var frontSide = true, - exp = 0, - lvl = 0, - brs = 0, - timer = 12; - exp = data ? data.cards[currentCard].xp : 0; - if (exp < 3) { - lvl = 1; - brs = exp; - } else if (exp < 7) { - lvl = 2; - brs = exp - 3; - } else { - lvl = 3; - brs = exp - 7; - if (brs > 5) brs = 5; - } - this.setState((state) => ({ - isFront: frontSide, - level: lvl, - bars: brs, - countdown: timer, - cardNumber: currentCard, - })); - }; - next = () => { - var nextCard = this.state.cardNumber + 1; - if (data && nextCard >= data.cards.length) { - nextCard = 0; - } - this.updateStateForCardIndex(nextCard); - }; } - if (isLoading) - return
    Loading...
    ; - if (data) return ; + if (isLoading || !data) { + return ( +
    +
    +
    + No Decks... +
    +
    +
    + ); + } + if (data) { + return ( +
    +
    + +
    +
    + ); + } } diff --git a/src/pages/review/[id].tsx b/src/pages/review/[id].tsx new file mode 100644 index 0000000..f5d4964 --- /dev/null +++ b/src/pages/review/[id].tsx @@ -0,0 +1,225 @@ +import { trpc } from "@/utils/trpc"; +import React from "react"; +import { useRouter } from "next/router"; +import NextError from "next/error"; +import Link from "next/link"; + +export default function Review() { + const id = useRouter().query.id as string; + const cardQuery = trpc.useQuery(["get-cards-from-deck", { id }]); + + if (cardQuery.error) { + return ( + + ); + } + + if (cardQuery.status !== "success") { + return <>Loading...; + } + const { data } = cardQuery; + console.log({ data }); + console.log({ cardQuery }); + + type CardProps = {}; + type CardState = { + isFront: boolean; + cardNumber: number; + bars: number; + level: number; + countdown: number; + }; + + class Card extends React.Component { + private timerID: number = 0; + state: CardState = { + isFront: true, + cardNumber: 0, + bars: 0, + level: 0, + countdown: 12, + }; + + componentDidMount() { + // NOTE: This seems to reset when 'looking away' from the window + this.updateStateForCardIndex(this.state.cardNumber); + this.timerID = window.setInterval(() => this.tick(), 1000); + } + + componentWillUnmount() { + clearInterval(this.timerID); + } + + render() { + if (data) { + return ( +
    +
    +
    + {data.cards[this.state.cardNumber].source + ? data.cards[this.state.cardNumber].source + : ""} +
    + +
    +
    + Back +
    +
    + +
    { + this.flip(); + }} + className="cursor-pointer relative flex h-4/5 w-4/5 bg-orangeweboxfordblue-primary justify-center items-center border-orangeweboxfordblue-border border-4 shadow-2xl rounded-[9rem]" + > +
    + {this.state.isFront + ? data.cards[this.state.cardNumber].front + : data.cards[this.state.cardNumber].back} +
    +
    +
    { + this.next(); + }} + className="cursor-pointer absolute flex w-36 h-36 bottom-[8%] right-[8%] justify-center items-center group bg-orangeweboxfordblue-tertiary border-orangeweboxfordblue-border border-4 shadow-2xl rounded-full" + > +
    + {this.state.countdown} +
    +
    + → +
    +
    +
    +
    + {this.state.level} +
    +
    +
    +
    +
    + {this.state.level > 1 && ( +
    + )} + {this.state.level > 2 && ( +
    + )} +
    +
    +
    +
    + ); + } + } + tick = () => { + var newTime = this.state.countdown - 1; + if (newTime < 0) { + this.next(); + } else { + this.setState({ + countdown: newTime, + }); + } + }; + flip = () => { + this.setState((state) => ({ + isFront: !state.isFront, + })); + }; + getColorAndBorder = (row: number, level: number) => { + if (this.state.bars >= row) { + return "bg-orangeweboxfordblue-tertiary"; + } else if (row - level === 2) { + return "bg-orangeweboxfordblue-quaternary"; + } else { + return "bg-orangeweboxfordblue-quaternary border-dotted"; + } + }; + getWidth = (level: number) => { + switch (level) { + case 1: + return "px-12"; + case 2: + return "px-9"; + case 3: + return "px-7"; + default: + } + }; + updateStateForCardIndex = (currentCard: number) => { + var frontSide = true, + exp = 0, + lvl = 0, + brs = 0, + timer = 12; + exp = data ? data.cards[currentCard].xp : 0; + if (exp < 3) { + lvl = 1; + brs = exp; + } else if (exp < 7) { + lvl = 2; + brs = exp - 3; + } else { + lvl = 3; + brs = exp - 7; + if (brs > 5) brs = 5; + } + this.setState((state) => ({ + isFront: frontSide, + level: lvl, + bars: brs, + countdown: timer, + cardNumber: currentCard, + })); + }; + next = () => { + var nextCard = this.state.cardNumber + 1; + if (data && nextCard >= data.cards.length) { + nextCard = 0; + } + this.updateStateForCardIndex(nextCard); + }; + } + + if (data) return ; +} From dcfd84273c6e12c0700ef0cab41fd495ac3f5b71 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Fri, 11 Feb 2022 10:05:29 +0900 Subject: [PATCH 7/8] No more data re-fetching --- src/pages/review/[id].tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/review/[id].tsx b/src/pages/review/[id].tsx index f5d4964..2451d0c 100644 --- a/src/pages/review/[id].tsx +++ b/src/pages/review/[id].tsx @@ -6,7 +6,9 @@ import Link from "next/link"; export default function Review() { const id = useRouter().query.id as string; - const cardQuery = trpc.useQuery(["get-cards-from-deck", { id }]); + const cardQuery = trpc.useQuery(["get-cards-from-deck", { id }], { + refetchOnWindowFocus: false, + }); if (cardQuery.error) { return ( From 589075a2bb32f1f0d01892b214e0a8262e1a3ff6 Mon Sep 17 00:00:00 2001 From: SlyPuffin Date: Tue, 15 Feb 2022 11:37:12 +0900 Subject: [PATCH 8/8] Removed deck query input, added window refocus logic to home screen, refactored DxDeck and DxCard to Deck and Card across the app --- prisma/schema.prisma | 8 ++++---- prisma/seed.ts | 2 +- src/backend/router/index.ts | 9 ++------- src/pages/index.tsx | 8 +++++--- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6187c11..acf370c 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -12,16 +12,16 @@ generator client { previewFeatures = ["referentialIntegrity"] } -model DxDeck { +model Deck { id String @id @default(uuid()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt type String @db.VarChar(255) name String @db.Text - cards DxCard[] + cards Card[] } -model DxCard { +model Card { id String @id @default(uuid()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -30,6 +30,6 @@ model DxCard { source String @db.VarChar(255) xp Float @db.Float deckId String - deck DxDeck @relation(fields: [deckId], references: [id], onDelete: Cascade) + deck Deck @relation(fields: [deckId], references: [id], onDelete: Cascade) @@index([deckId]) } \ No newline at end of file diff --git a/prisma/seed.ts b/prisma/seed.ts index c4c99a4..b3b903c 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -3,7 +3,7 @@ import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); async function main() { - const deck = await prisma.dxDeck.create({ + const deck = await prisma.deck.create({ data: { type: "concept", name: "Seeded Deck 1", diff --git a/src/backend/router/index.ts b/src/backend/router/index.ts index f8cacdf..c9354ef 100644 --- a/src/backend/router/index.ts +++ b/src/backend/router/index.ts @@ -6,13 +6,8 @@ import { prisma } from "@/backend/utils/prisma"; export const appRouter = trpc .router() .query("get-decks", { - input: z - .object({ - text: z.string().nullish(), - }) - .nullish(), async resolve({ input }) { - const decksFromDb = await prisma.dxDeck.findMany(); + const decksFromDb = await prisma.deck.findMany(); return { decks: decksFromDb }; }, }) @@ -22,7 +17,7 @@ export const appRouter = trpc }), async resolve({ input }) { const { id } = input; - const cardsFromDb = await prisma.dxCard.findMany({ + const cardsFromDb = await prisma.card.findMany({ where: { deckId: id, }, diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c49e2ac..daefdc6 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,13 +1,15 @@ import { trpc } from "@/utils/trpc"; import React from "react"; import Link from "next/link"; -import { DxDeck } from "@prisma/client"; +import { Deck } from "@prisma/client"; export default function Home() { - const { data, isLoading } = trpc.useQuery(["get-decks"]); + const { data, isLoading } = trpc.useQuery(["get-decks"], { + refetchOnWindowFocus: false, + }); type DeckProps = { - decks: DxDeck[]; + decks: Deck[]; }; type DeckState = {};