From 0012395cfc8638d2f709c4367497b75ff7187232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20S=C3=BCdi?= <57364372+tomitheninja@users.noreply.github.com> Date: Sun, 7 Apr 2024 18:47:45 +0200 Subject: [PATCH] Fix warnings after kir-jam (#135) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Upgrade caniuse-db * run CI on staging * Add force-dynamic to all pages Because nav-bar is different for every user (displays username) * Refactor clock component * Fix tailwind warnings * backend: Ignore dist folder * configure code style check and fix important issues * Make everything dynamic * prettier --------- Co-authored-by: Sámuel Fekete --- .eslintignore | 10 +- .github/workflows/codestyle.yml | 74 +------- .prettierrc | 2 +- packages/admin/.eslintrc.cjs | 1 + packages/backend/.eslintrc.js | 3 +- .../auth/decorators/CurrentUser.decorator.ts | 4 +- .../collection/dto/CollectionEntity.dto.ts | 5 +- packages/backend/src/links/links.module.ts | 1 - packages/backend/src/links/links.service.ts | 2 +- packages/backend/src/user/user.service.ts | 4 +- .../src/util/DeleteFileExceptionFilter.ts | 2 +- packages/backend/tsconfig.build.json | 2 +- packages/backend/tsconfig.json | 3 +- packages/client/.eslintrc.cjs | 2 + packages/client/src/app/admin/page.tsx | 3 +- .../src/app/api/favorites/[id]/route.ts | 12 +- packages/client/src/app/api/profile/route.ts | 3 + packages/client/src/app/authorized/route.ts | 1 - .../client/src/app/collections/[id]/page.tsx | 2 + packages/client/src/app/collections/page.tsx | 2 + packages/client/src/app/globals.css | 179 +++++++++--------- packages/client/src/app/layout.tsx | 2 + packages/client/src/app/links/page.tsx | 4 +- packages/client/src/app/login/page.tsx | 2 + packages/client/src/app/page.tsx | 2 + packages/client/src/app/submissions/page.tsx | 5 +- .../client/src/components/clock/clock.tsx | 42 ++-- .../client/src/components/footer/footer.tsx | 1 - .../src/components/links/LinkWidget.tsx | 1 - .../src/components/navbar/user-display.tsx | 24 ++- packages/client/src/components/ui/dialog.tsx | 1 - .../mutations/use-submission-change-status.ts | 2 +- .../client/src/hooks/queries/use-profile.ts | 8 +- packages/client/src/lib/utils.ts | 32 +++- packages/client/src/network/addFavorite.ts | 12 +- .../client/src/network/authorizedApiSetup.ts | 18 +- packages/client/src/network/deleteFavorite.ts | 12 +- packages/client/src/types/link.type.ts | 1 - yarn.lock | 6 +- 39 files changed, 223 insertions(+), 269 deletions(-) diff --git a/.eslintignore b/.eslintignore index 2b9e119..7902cbf 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,8 +3,8 @@ *.png *.jpg *.jpeg -/out/* -/dist/* -/build/* -/rules -packages/client/tailwind.config.js/ \ No newline at end of file +**/out/* +**/dist/* +**/build/* +**/rules +**/.eslintrc.js diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 57a81ff..bd583bc 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -2,12 +2,12 @@ name: Code Style Check on: push: - branches: ['master'] + branches: ['master', 'staging'] pull_request: - branches: ['master'] + branches: ['master', 'staging'] jobs: - backend-eslint: + check-code-style: name: ESLint Check runs-on: ubuntu-latest permissions: @@ -18,71 +18,11 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Install Dev Dependencies - run: | - npm install --only=dev - working-directory: './packages/backend' + - name: Install Dependencies + run: yarn install - name: Run ESLint - run: npm run lint - working-directory: './packages/backend' - - backend-prettier: - name: Prettier Check - runs-on: ubuntu-latest - permissions: - contents: read - security-events: write - actions: read - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Install Dev Dependencies - run: | - npm install --only=dev - working-directory: './packages/backend' + run: npx eslint . - name: Run Prettier - run: npm run prettier - working-directory: './packages/backend' -# -# frontend-eslint: -# name: ESLint Check -# runs-on: ubuntu-latest -# permissions: -# contents: read -# security-events: write -# actions: read -# steps: -# - name: Checkout code -# uses: actions/checkout@v3 -# -# - name: Install Dev Dependencies -# run: | -# npm install --only=dev -# working-directory: "./packages/frontend" -# -# - name: Run ESLint -# run: npm run lint -# working-directory: "./packages/frontend" -# -# frontend-prettier: -# name: Prettier Check -# runs-on: ubuntu-latest -# permissions: -# contents: read -# security-events: write -# actions: read -# steps: -# - name: Checkout code -# uses: actions/checkout@v3 -# -# - name: Install Dev Dependencies -# run: | -# npm install --only=dev -# working-directory: "./packages/frontend" -# -# - name: Run Prettier -# run: npm run prettier -# working-directory: "./packages/frontend" + run: npx prettier --check . diff --git a/.prettierrc b/.prettierrc index 78b4b49..38eecf0 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,7 +6,7 @@ "printWidth": 150, "jsxSingleQuote": true, "bracketSameLine": false, - "endOfLine": "crlf", + "endOfLine": "lf", "tabWidth": 2, "arrowParens": "avoid" } diff --git a/packages/admin/.eslintrc.cjs b/packages/admin/.eslintrc.cjs index 0f3ea95..6f0fb68 100644 --- a/packages/admin/.eslintrc.cjs +++ b/packages/admin/.eslintrc.cjs @@ -8,5 +8,6 @@ module.exports = { 'react-refresh/only-export-components': 'warn', 'simple-import-sort/imports': 'error', 'simple-import-sort/exports': 'error', + 'prettier/prettier': 'error', }, } diff --git a/packages/backend/.eslintrc.js b/packages/backend/.eslintrc.js index 032389b..a45c89a 100644 --- a/packages/backend/.eslintrc.js +++ b/packages/backend/.eslintrc.js @@ -6,13 +6,12 @@ module.exports = { sourceType: 'module', }, plugins: ['prettier'], - extends: ['prettier'], + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], root: true, env: { node: true, jest: true, }, - ignorePatterns: ['.eslintrc.js'], rules: { '@typescript-eslint/no-explicit-any': 'off', 'prettier/prettier': 'error', diff --git a/packages/backend/src/auth/decorators/CurrentUser.decorator.ts b/packages/backend/src/auth/decorators/CurrentUser.decorator.ts index 2d43bed..b32d5a1 100644 --- a/packages/backend/src/auth/decorators/CurrentUser.decorator.ts +++ b/packages/backend/src/auth/decorators/CurrentUser.decorator.ts @@ -15,7 +15,7 @@ export const CurrentUser = createParamDecorator( throw new InternalServerErrorException('CurrentUser decorator invoked without authGuard') } - if (key && !user.hasOwnProperty(key)) { + if (key && !Object.prototype.hasOwnProperty.call(user, key)) { throw new InternalServerErrorException(`Unknown key ${key} in CurrentUser decorator`) } @@ -32,7 +32,7 @@ export const CurrentUserOptional = createParamDecorator( */ (key, context: ExecutionContext) => { const user: User = context.switchToHttp().getRequest().user - if (key && !user?.hasOwnProperty(key)) { + if (key && !Object.prototype.hasOwnProperty.call(user, key)) { throw new InternalServerErrorException(`Unknown key ${key} in CurrentUser decorator`) } diff --git a/packages/backend/src/collection/dto/CollectionEntity.dto.ts b/packages/backend/src/collection/dto/CollectionEntity.dto.ts index 86c9462..c6f8cb6 100644 --- a/packages/backend/src/collection/dto/CollectionEntity.dto.ts +++ b/packages/backend/src/collection/dto/CollectionEntity.dto.ts @@ -1,7 +1,4 @@ -import { ArrayMinSize, ArrayNotEmpty, IsArray, IsNotEmpty, IsObject, IsString, IsUUID, Matches, ValidateNested } from 'class-validator' -import { Link } from 'src/links/entities/link.entity' -import { ApiProperty } from '@nestjs/swagger' -import { Type } from 'class-transformer' +import { IsNotEmpty, IsString, IsUUID, Matches } from 'class-validator' export class CollectionEntity { @IsUUID('all') diff --git a/packages/backend/src/links/links.module.ts b/packages/backend/src/links/links.module.ts index 5b5c9af..5f68b90 100644 --- a/packages/backend/src/links/links.module.ts +++ b/packages/backend/src/links/links.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common' import { PrismaModule } from 'nestjs-prisma' import { LinksController } from './links.controller' import { LinksService } from './links.service' -import { Link } from './entities/link.entity' @Module({ controllers: [LinksController], diff --git a/packages/backend/src/links/links.service.ts b/packages/backend/src/links/links.service.ts index e610065..bacde3f 100644 --- a/packages/backend/src/links/links.service.ts +++ b/packages/backend/src/links/links.service.ts @@ -97,7 +97,7 @@ export class LinksService { const oldLink = await this.prisma.link.findUnique({ where: { id } }) const newLink = await this.prisma.link.update({ where: { id }, data: { ...updateLinkDto, iconUrl: fileName } }) if (oldLink.iconUrl) { - unlink(join(process.cwd(), '/static', oldLink.iconUrl), () => {}) + unlink(join(process.cwd(), '/static', oldLink.iconUrl), () => undefined) } return newLink } else { diff --git a/packages/backend/src/user/user.service.ts b/packages/backend/src/user/user.service.ts index 885cc3e..eddf326 100644 --- a/packages/backend/src/user/user.service.ts +++ b/packages/backend/src/user/user.service.ts @@ -25,11 +25,11 @@ export class UserService { return { collections: user.collections, submissions: user.submissions, firstName: user.firstName, email: user.email, role: user.role } } async saveFavorite(id: string, user: User): Promise { - const res = await this.prisma.user.update({ where: { id: user.id }, data: { favorites: { connect: { id } } } }) + await this.prisma.user.update({ where: { id: user.id }, data: { favorites: { connect: { id } } } }) return } async removeFavorite(id: string, user: User): Promise { - const res = await this.prisma.user.update({ where: { id: user.id }, data: { favorites: { disconnect: { id } } } }) + await this.prisma.user.update({ where: { id: user.id }, data: { favorites: { disconnect: { id } } } }) } async getFavorites(user: User): Promise { const res = await this.prisma.user.findUnique({ where: { id: user.id }, include: { favorites: true } }) diff --git a/packages/backend/src/util/DeleteFileExceptionFilter.ts b/packages/backend/src/util/DeleteFileExceptionFilter.ts index 0473ad3..6020a5e 100644 --- a/packages/backend/src/util/DeleteFileExceptionFilter.ts +++ b/packages/backend/src/util/DeleteFileExceptionFilter.ts @@ -15,7 +15,7 @@ export class DeleteFileExceptionFilter extends BaseExceptionFilter { const ctx = host.switchToHttp() const request = ctx.getRequest() if (request.file) { - unlink(join(process.cwd(), '/static', request.file.filename), () => {}) + unlink(join(process.cwd(), '/static', request.file.filename), () => undefined) } super.catch(exception, host) } diff --git a/packages/backend/tsconfig.build.json b/packages/backend/tsconfig.build.json index 64f86c6..ccdfa1b 100644 --- a/packages/backend/tsconfig.build.json +++ b/packages/backend/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] + "exclude": ["node_modules", "test", "dist", "**/*spec.ts", ".eslintrc.js"] } diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json index adb614c..01a523b 100644 --- a/packages/backend/tsconfig.json +++ b/packages/backend/tsconfig.json @@ -17,5 +17,6 @@ "strictBindCallApply": false, "forceConsistentCasingInFileNames": false, "noFallthroughCasesInSwitch": false - } + }, + "exclude": ["node_modules", "dist", ".eslintrc.js"] } diff --git a/packages/client/.eslintrc.cjs b/packages/client/.eslintrc.cjs index 9b570c6..3cc9182 100644 --- a/packages/client/.eslintrc.cjs +++ b/packages/client/.eslintrc.cjs @@ -13,5 +13,7 @@ module.exports = { rules: { 'simple-import-sort/imports': 'error', 'simple-import-sort/exports': 'error', + 'prettier/prettier': 'error', + '@next/next/no-html-link-for-pages': 'off', }, } diff --git a/packages/client/src/app/admin/page.tsx b/packages/client/src/app/admin/page.tsx index 62ce957..9609df6 100644 --- a/packages/client/src/app/admin/page.tsx +++ b/packages/client/src/app/admin/page.tsx @@ -1,4 +1,3 @@ - import SubmissionCard from '@/components/submission/AdminSubmissionCard' import { getAllSubmissions } from '@/network/getAllSubmissions' @@ -14,7 +13,7 @@ export default async function Page() {

zsadmin

-
+
{submissions.map(submission => ( ))} diff --git a/packages/client/src/app/api/favorites/[id]/route.ts b/packages/client/src/app/api/favorites/[id]/route.ts index 721fccb..fe9772a 100644 --- a/packages/client/src/app/api/favorites/[id]/route.ts +++ b/packages/client/src/app/api/favorites/[id]/route.ts @@ -1,8 +1,8 @@ -import { NextResponse } from "next/server"; +import { NextResponse } from 'next/server' -import { deleteFavorite } from "@/network/deleteFavorite"; +import { deleteFavorite } from '@/network/deleteFavorite' -export async function DELETE(req: Request, { params } : { params: { id: string }} ) { - await deleteFavorite(params.id) - return NextResponse.json("Unfavorited") -} \ No newline at end of file +export async function DELETE(req: Request, { params }: { params: { id: string } }) { + await deleteFavorite(params.id) + return NextResponse.json('Unfavorited') +} diff --git a/packages/client/src/app/api/profile/route.ts b/packages/client/src/app/api/profile/route.ts index ff18e9d..6ffc088 100644 --- a/packages/client/src/app/api/profile/route.ts +++ b/packages/client/src/app/api/profile/route.ts @@ -1,8 +1,11 @@ import { NextResponse } from 'next/server' +export const dynamic = 'force-dynamic' + import { getProfile } from '@/network/getProfile' export async function GET() { const profile = await getProfile() + return NextResponse.json(profile) } diff --git a/packages/client/src/app/authorized/route.ts b/packages/client/src/app/authorized/route.ts index bdc01af..df781aa 100644 --- a/packages/client/src/app/authorized/route.ts +++ b/packages/client/src/app/authorized/route.ts @@ -15,4 +15,3 @@ export async function GET(request: NextRequest) { return NextResponse.redirect(new URL('/', request.url)) } - diff --git a/packages/client/src/app/collections/[id]/page.tsx b/packages/client/src/app/collections/[id]/page.tsx index 75b9040..69d55ee 100644 --- a/packages/client/src/app/collections/[id]/page.tsx +++ b/packages/client/src/app/collections/[id]/page.tsx @@ -1,6 +1,8 @@ import CollectionLinksContainer from '@/components/links/CollectionLinksContainer' import api from '@/network/apiSetup' +export const dynamic = 'force-dynamic' + export default async function CollectionPage({ params }: { params: { id: string } }) { const fetchData = async () => { const response = await api('/collection/' + params.id) diff --git a/packages/client/src/app/collections/page.tsx b/packages/client/src/app/collections/page.tsx index eb2f8b9..96fe5b2 100644 --- a/packages/client/src/app/collections/page.tsx +++ b/packages/client/src/app/collections/page.tsx @@ -1,6 +1,8 @@ import CollectionsContainer from '@/components/collection/CollectionsContainer' import { getCollections } from '@/network/getCollections' +export const dynamic = 'force-dynamic' + export default async function Collections() { const collectionsData = await getCollections() diff --git a/packages/client/src/app/globals.css b/packages/client/src/app/globals.css index 4570189..9ac0f11 100644 --- a/packages/client/src/app/globals.css +++ b/packages/client/src/app/globals.css @@ -5,146 +5,143 @@ @tailwind components; @tailwind utilities; -body { +@layer utilities { + /* Hide scrollbar for Chrome, Safari and Opera */ + .no-scrollbar::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + .no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + } } -@variants responsive { - /* Hide scrollbar for Chrome, Safari and Opera */ - .no-scrollbar::-webkit-scrollbar { - display: none; - } - - /* Hide scrollbar for IE, Edge and Firefox */ - .no-scrollbar { - -ms-overflow-style: none; /* IE and Edge */ - scrollbar-width: none; /* Firefox */ - } -} @layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; - --ring: 215 20.2% 65.1%; + --ring: 215 20.2% 65.1%; - --radius: 0.5rem; - } + --radius: 0.5rem; + } - .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 85.7% 97.3%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 85.7% 97.3%; - --ring: 217.2 32.6% 17.5%; - } + --ring: 217.2 32.6% 17.5%; + } } @layer base { - * { - @apply border-border; - } + * { + @apply border-border; + } - body { - @apply bg-background text-foreground; - } + body { + @apply bg-background text-foreground; + } } h1 { - font-size: 36px; - margin-top: 20px; - margin-left: 20px; - font-weight: 600; - font-family: 'Work Sans', sans-serif; + font-size: 36px; + margin-top: 20px; + margin-left: 20px; + font-weight: 600; + font-family: 'Work Sans', sans-serif; } h2 { - font-size: 24px; - font-weight: 600; - font-family: 'Work Sans', sans-serif; + font-size: 24px; + font-weight: 600; + font-family: 'Work Sans', sans-serif; } h3 { - font-size: 18px; - font-weight: 400; - font-family: 'Work Sans', sans-serif; + font-size: 18px; + font-weight: 400; + font-family: 'Work Sans', sans-serif; } h4 { - font-size: 12px; - font-family: 'Victor Mono', Consolas, serif; - color: #575757; + font-size: 12px; + font-family: 'Victor Mono', Consolas, serif; + color: #575757; } h5 { - font-size: 18px; - font-weight: 800; - font-family: 'Victor Mono', Consolas, serif; - color: #000000; + font-size: 18px; + font-weight: 800; + font-family: 'Victor Mono', Consolas, serif; + color: #000000; } h6 { - font-size: 12px; - font-weight: 800; - font-family: 'Victor Mono', Consolas, serif; - color: #000000; - margin-top: 12px; - margin-bottom: 0; - + font-size: 12px; + font-weight: 800; + font-family: 'Victor Mono', Consolas, serif; + color: #000000; + margin-top: 12px; + margin-bottom: 0; } .scrollbar-hidden { - -ms-overflow-style: none; /* IE and Edge */ - scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ } .scrollbar-hidden::-webkit-scrollbar { - width: 0; - height: 0; + width: 0; + height: 0; } diff --git a/packages/client/src/app/layout.tsx b/packages/client/src/app/layout.tsx index 7654a68..b23b17e 100644 --- a/packages/client/src/app/layout.tsx +++ b/packages/client/src/app/layout.tsx @@ -15,6 +15,8 @@ export const metadata = { description: 'Generated by create next app', } +export const dynamic = 'force-dynamic' + export default function RootLayout({ children }: { children: ReactNode }) { return ( diff --git a/packages/client/src/app/links/page.tsx b/packages/client/src/app/links/page.tsx index 7ad4259..ec21b33 100644 --- a/packages/client/src/app/links/page.tsx +++ b/packages/client/src/app/links/page.tsx @@ -8,9 +8,11 @@ import SearchField from '@/components/ui/SearchField' import { useProfile } from '@/hooks/queries/use-profile' import { useSearchLink } from '@/hooks/useSearchLink' +export const dynamic = 'force-dynamic' + export default function Links() { const profile = useProfile() - const { links, loading, searchTerm, setSearchTerm } = useSearchLink() + const { links, searchTerm, setSearchTerm } = useSearchLink() return (
diff --git a/packages/client/src/app/login/page.tsx b/packages/client/src/app/login/page.tsx index ccdd02f..a1411ac 100644 --- a/packages/client/src/app/login/page.tsx +++ b/packages/client/src/app/login/page.tsx @@ -3,6 +3,8 @@ import { redirect } from 'next/navigation' import { FormEvent } from 'react' +export const dynamic = 'force-dynamic' + export default function LoginPage() { async function handleSubmit(event: FormEvent) { event.preventDefault() diff --git a/packages/client/src/app/page.tsx b/packages/client/src/app/page.tsx index 4335b55..2074daa 100644 --- a/packages/client/src/app/page.tsx +++ b/packages/client/src/app/page.tsx @@ -2,6 +2,8 @@ import FavLinksContainer from '@/components/links/favLinksContainer' import { getFavLinks } from '@/network/getFavLinks' import { getLinks } from '@/network/getLinks' +export const dynamic = 'force-dynamic' + export default async function Home() { // const collections = await getCollections(); const links = await getLinks() diff --git a/packages/client/src/app/submissions/page.tsx b/packages/client/src/app/submissions/page.tsx index cfc27e6..bd4660e 100644 --- a/packages/client/src/app/submissions/page.tsx +++ b/packages/client/src/app/submissions/page.tsx @@ -1,11 +1,12 @@ - import SubmissionCard from '@/components/submission/SubmissionCard' import { getOwnSubmissions } from '@/network/getOwnSubmissions' +export const dynamic = 'force-dynamic' + export default async function Submissions() { const submissions = await getOwnSubmissions() return ( -
+
{submissions.map(submission => ( ))} diff --git a/packages/client/src/components/clock/clock.tsx b/packages/client/src/components/clock/clock.tsx index 5454776..ec9c9cf 100644 --- a/packages/client/src/components/clock/clock.tsx +++ b/packages/client/src/components/clock/clock.tsx @@ -1,39 +1,11 @@ 'use client' -import axios from 'axios' import { useEffect, useState } from 'react' -type funFact = { - year: number - text: string -} +import { fillWith0, FunFact, funFactOfTheDay } from '@/lib/utils' export default function Clock() { const [dateState, setDateState] = useState(new Date()) - const [onThisDayEvent, setOnThisDayEvent] = useState() - const url_base = 'https://api.wikimedia.org/feed/v1/wikipedia/en/onthisday/all/' - - const fillWith0 = (input: number, neededLength: number) => { - if (input.toString().length >= neededLength) return input.toString() - - const addedCount = neededLength - input.toString().length - let answer = '' - for (let i = 0; i < addedCount; i++) { - answer += '0' - } - answer += input.toString() - - return answer - } - const fetchOnThisDayAPI = async () => { - axios.get(`${url_base}${dateState.getMonth() + 1}/${dateState.getDate()}`).then(response => { - const chosenEvent = response.data.events[Math.floor(Math.random() * response.data.events.length)] - const separatedEvent: funFact = { - text: chosenEvent.text, - year: chosenEvent.year, - } - setOnThisDayEvent(separatedEvent) - }) - } + const [onThisDayEvent, setOnThisDayEvent] = useState() const datestr = `${dateState .toLocaleDateString('hu-HU', { @@ -47,9 +19,17 @@ export default function Clock() { minute: '2-digit', })}` + const day = dateState.getDate() + useEffect( + () => { + funFactOfTheDay(dateState).then(fact => setOnThisDayEvent(fact)) + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [day] + ) + useEffect(() => { const intervalId = setInterval(() => setDateState(new Date()), 15 * 1000) - fetchOnThisDayAPI() return () => clearInterval(intervalId) }, []) diff --git a/packages/client/src/components/footer/footer.tsx b/packages/client/src/components/footer/footer.tsx index 7a2a467..e922222 100644 --- a/packages/client/src/components/footer/footer.tsx +++ b/packages/client/src/components/footer/footer.tsx @@ -36,4 +36,3 @@ export default function Footer() { ) } - diff --git a/packages/client/src/components/links/LinkWidget.tsx b/packages/client/src/components/links/LinkWidget.tsx index a04c0a8..b467c73 100644 --- a/packages/client/src/components/links/LinkWidget.tsx +++ b/packages/client/src/components/links/LinkWidget.tsx @@ -91,4 +91,3 @@ export default function LinkWidget(props: Props) {
) } - diff --git a/packages/client/src/components/navbar/user-display.tsx b/packages/client/src/components/navbar/user-display.tsx index eb8f06f..243a59f 100644 --- a/packages/client/src/components/navbar/user-display.tsx +++ b/packages/client/src/components/navbar/user-display.tsx @@ -21,19 +21,17 @@ export function UserDisplay() { )} {profile.data && ( <> - - - - - - - Kijelentkezés - - + + + + + + + Kijelentkezés + + )} diff --git a/packages/client/src/components/ui/dialog.tsx b/packages/client/src/components/ui/dialog.tsx index 082683d..8b3b6b3 100644 --- a/packages/client/src/components/ui/dialog.tsx +++ b/packages/client/src/components/ui/dialog.tsx @@ -75,4 +75,3 @@ const DialogDescription = React.forwardRef< DialogDescription.displayName = DialogPrimitive.Description.displayName export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } - diff --git a/packages/client/src/hooks/mutations/use-submission-change-status.ts b/packages/client/src/hooks/mutations/use-submission-change-status.ts index 45f1757..da605ae 100644 --- a/packages/client/src/hooks/mutations/use-submission-change-status.ts +++ b/packages/client/src/hooks/mutations/use-submission-change-status.ts @@ -5,5 +5,5 @@ import { LinkEntity } from '@/types/link.type' import { Submission } from '@/types/submission.type' export function useSubmissionChangeStatus() { - return useSWRMutation('/api/submissions/status', axiosPatchFetcher) + return useSWRMutation('/api/submissions/status', axiosPatchFetcher) } diff --git a/packages/client/src/hooks/queries/use-profile.ts b/packages/client/src/hooks/queries/use-profile.ts index 135fa41..7833683 100644 --- a/packages/client/src/hooks/queries/use-profile.ts +++ b/packages/client/src/hooks/queries/use-profile.ts @@ -1,8 +1,8 @@ -import useSWR from "swr"; +import useSWR from 'swr' -import { axiosGetFetcher } from "@/lib/fetchers"; -import { UserProfile } from "@/types/user.type"; +import { axiosGetFetcher } from '@/lib/fetchers' +import { UserProfile } from '@/types/user.type' export function useProfile() { - return useSWR("/api/profile", axiosGetFetcher); + return useSWR('/api/profile', axiosGetFetcher) } diff --git a/packages/client/src/lib/utils.ts b/packages/client/src/lib/utils.ts index d32b0fe..37ff965 100644 --- a/packages/client/src/lib/utils.ts +++ b/packages/client/src/lib/utils.ts @@ -1,6 +1,36 @@ -import { type ClassValue, clsx } from 'clsx' +import axios from 'axios' +import { ClassValue, clsx } from 'clsx' import { twMerge } from 'tailwind-merge' export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } + +export interface FunFact { + year: number + text: string +} + +export async function funFactOfTheDay(date: Date): Promise { + const FUN_FACT_API_BASE = 'https://api.wikimedia.org/feed/v1/wikipedia/en/onthisday/all' + const response = await axios.get(`${FUN_FACT_API_BASE}/${date.getMonth() + 1}/${date.getDate()}`) + + const chosenEvent = response.data.events[Math.floor(Math.random() * response.data.events.length)] + return { + text: chosenEvent.text, + year: chosenEvent.year, + } +} + +export function fillWith0(input: number, neededLength: number) { + if (input.toString().length >= neededLength) return input.toString() + + const addedCount = neededLength - input.toString().length + let answer = '' + for (let i = 0; i < addedCount; i++) { + answer += '0' + } + answer += input.toString() + + return answer +} diff --git a/packages/client/src/network/addFavorite.ts b/packages/client/src/network/addFavorite.ts index a5344fa..0411bac 100644 --- a/packages/client/src/network/addFavorite.ts +++ b/packages/client/src/network/addFavorite.ts @@ -1,9 +1,9 @@ import authorizedApi from '@/network/authorizedApiSetup' -export async function addFavorite(id : string) { - try { - await authorizedApi.post('/user/favorites/' + id) - } catch (e) { - console.error(e) - } +export async function addFavorite(id: string) { + try { + await authorizedApi.post('/user/favorites/' + id) + } catch (e) { + console.error(e) + } } diff --git a/packages/client/src/network/authorizedApiSetup.ts b/packages/client/src/network/authorizedApiSetup.ts index ca5c63f..43b6593 100644 --- a/packages/client/src/network/authorizedApiSetup.ts +++ b/packages/client/src/network/authorizedApiSetup.ts @@ -1,14 +1,14 @@ -import axios from "axios"; -import { cookies } from "next/headers"; +import axios from 'axios' +import { cookies } from 'next/headers' const authorizedApi = axios.create({ baseURL: process.env.NEXT_PUBLIC_API_URL, -}); +}) -authorizedApi.interceptors.request.use((config) => { - const jwt = cookies().get("jwt"); - config.headers.Authorization = `Bearer ${jwt?.value}`; - return config; -}); +authorizedApi.interceptors.request.use(config => { + const jwt = cookies().get('jwt') + config.headers.Authorization = `Bearer ${jwt?.value}` + return config +}) -export default authorizedApi; +export default authorizedApi diff --git a/packages/client/src/network/deleteFavorite.ts b/packages/client/src/network/deleteFavorite.ts index ca3f813..2e872d1 100644 --- a/packages/client/src/network/deleteFavorite.ts +++ b/packages/client/src/network/deleteFavorite.ts @@ -1,9 +1,9 @@ import authorizedApi from '@/network/authorizedApiSetup' -export async function deleteFavorite(id : string) { - try { - await authorizedApi.delete('/user/favorites/' + id) - } catch (e) { - console.error(e) - } +export async function deleteFavorite(id: string) { + try { + await authorizedApi.delete('/user/favorites/' + id) + } catch (e) { + console.error(e) + } } diff --git a/packages/client/src/types/link.type.ts b/packages/client/src/types/link.type.ts index 9b550fa..bef89f0 100644 --- a/packages/client/src/types/link.type.ts +++ b/packages/client/src/types/link.type.ts @@ -14,4 +14,3 @@ export interface LinkWithVisitsEntity extends LinkEntity { } export type GetLinksDto = LinkEntity[] - diff --git a/yarn.lock b/yarn.lock index 1465ed2..f903737 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2785,9 +2785,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: - version "1.0.30001517" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz" - integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA== + version "1.0.30001606" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz" + integrity sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg== chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2"