From d25f493c7ae2527c5abacbe27a68bb703d758be7 Mon Sep 17 00:00:00 2001 From: Daniel Luiz Alves Date: Wed, 16 Apr 2025 11:17:48 -0300 Subject: [PATCH] feat(i18n): add theme translation support for multiple languages Add theme-related translations (toggle, light, dark, system) to JSON files for all supported languages. Update the mode-toggle component to use these translations for theme switching. Also, refactor API route files to improve code consistency and readability. --- apps/app/messages/ar-SA.json | 6 ++++ apps/app/messages/de-DE.json | 6 ++++ apps/app/messages/en-US.json | 6 ++++ apps/app/messages/es-ES.json | 6 ++++ apps/app/messages/fr-FR.json | 6 ++++ apps/app/messages/hi-IN.json | 6 ++++ apps/app/messages/ja-JP.json | 6 ++++ apps/app/messages/ko-KR.json | 6 ++++ apps/app/messages/pt-BR.json | 6 ++++ apps/app/messages/ru-RU.json | 6 ++++ apps/app/messages/tr-TR.json | 6 ++++ apps/app/messages/zh-CN.json | 6 ++++ .../(download)/[objectName]/download/route.ts | 3 +- .../shares/alias/create/[shareId]/route.ts | 30 ++++++++--------- .../(proxy)/shares/alias/get/[alias]/route.ts | 30 ++++++++--------- .../app/api/(proxy)/shares/create/route.ts | 30 ++++++++--------- .../api/(proxy)/shares/delete/[id]/route.ts | 26 +++++++-------- .../(proxy)/shares/details/[shareId]/route.ts | 32 +++++++++---------- .../shares/files/add/[shareId]/route.ts | 30 ++++++++--------- .../shares/files/remove/[shareId]/route.ts | 30 ++++++++--------- .../src/app/api/(proxy)/shares/list/route.ts | 26 +++++++-------- .../shares/password/update/shareId/route.ts | 30 ++++++++--------- .../shares/recipients/add/[shareId]/route.ts | 30 ++++++++--------- .../recipients/notify/[shareId]/route.ts | 30 ++++++++--------- .../recipients/remove/[shareId]/route.ts | 30 ++++++++--------- .../app/api/(proxy)/shares/update/route.ts | 30 ++++++++--------- apps/app/src/app/layout.tsx | 1 - .../src/components/general/mode-toggle.tsx | 11 ++++--- apps/app/src/http/endpoints/shares/index.ts | 2 +- 29 files changed, 273 insertions(+), 200 deletions(-) diff --git a/apps/app/messages/ar-SA.json b/apps/app/messages/ar-SA.json index bebc32d..f087921 100644 --- a/apps/app/messages/ar-SA.json +++ b/apps/app/messages/ar-SA.json @@ -545,6 +545,12 @@ "used": "المستخدمة", "available": "المتاحة" }, + "theme": { + "toggle": "تبديل السمة", + "light": "فاتح", + "dark": "داكن", + "system": "النظام" + }, "uploadFile": { "title": "رفع الملف", "selectFile": "اضغط لاختيار ملف", diff --git a/apps/app/messages/de-DE.json b/apps/app/messages/de-DE.json index e2bf5eb..e01517c 100644 --- a/apps/app/messages/de-DE.json +++ b/apps/app/messages/de-DE.json @@ -545,6 +545,12 @@ "used": "genutzt", "available": "verfügbar" }, + "theme": { + "toggle": "Design umschalten", + "light": "Hell", + "dark": "Dunkel", + "system": "System" + }, "uploadFile": { "title": "Datei hochladen", "selectFile": "Klicken Sie, um eine Datei auszuwählen", diff --git a/apps/app/messages/en-US.json b/apps/app/messages/en-US.json index 1817283..80e4bd0 100644 --- a/apps/app/messages/en-US.json +++ b/apps/app/messages/en-US.json @@ -545,6 +545,12 @@ "used": "used", "available": "available" }, + "theme": { + "toggle": "Toggle theme", + "light": "Light", + "dark": "Dark", + "system": "System" + }, "uploadFile": { "title": "Upload File", "selectFile": "Click to select a file", diff --git a/apps/app/messages/es-ES.json b/apps/app/messages/es-ES.json index af39bbd..aea790e 100644 --- a/apps/app/messages/es-ES.json +++ b/apps/app/messages/es-ES.json @@ -545,6 +545,12 @@ "used": "usados", "available": "disponibles" }, + "theme": { + "toggle": "Cambiar tema", + "light": "Claro", + "dark": "Oscuro", + "system": "Sistema" + }, "uploadFile": { "title": "Subir archivo", "selectFile": "Haz clic para seleccionar un archivo", diff --git a/apps/app/messages/fr-FR.json b/apps/app/messages/fr-FR.json index 2b5e095..329c81c 100644 --- a/apps/app/messages/fr-FR.json +++ b/apps/app/messages/fr-FR.json @@ -544,6 +544,12 @@ "used": "utilisé", "available": "disponible" }, + "theme": { + "toggle": "Changer le thème", + "light": "Clair", + "dark": "Sombre", + "system": "Système" + }, "uploadFile": { "title": "Envoyer un Fichier", "selectFile": "Cliquez pour sélectionner un fichier", diff --git a/apps/app/messages/hi-IN.json b/apps/app/messages/hi-IN.json index 422bdf7..d601c52 100644 --- a/apps/app/messages/hi-IN.json +++ b/apps/app/messages/hi-IN.json @@ -545,6 +545,12 @@ "used": "उपयोग किया गया", "available": "उपलब्ध" }, + "theme": { + "toggle": "थीम टॉगल करें", + "light": "लाइट", + "dark": "डार्क", + "system": "सिस्टम" + }, "uploadFile": { "title": "फाइल अपलोड करें", "selectFile": "फाइल चुनने के लिए क्लिक करें", diff --git a/apps/app/messages/ja-JP.json b/apps/app/messages/ja-JP.json index 1e2c302..9478551 100644 --- a/apps/app/messages/ja-JP.json +++ b/apps/app/messages/ja-JP.json @@ -545,6 +545,12 @@ "used": "使用済み", "available": "利用可能" }, + "theme": { + "toggle": "テーマを切り替える", + "light": "ライト", + "dark": "ダーク", + "system": "システム" + }, "uploadFile": { "title": "ファイルをアップロード", "selectFile": "ファイルを選択するにはクリックしてください", diff --git a/apps/app/messages/ko-KR.json b/apps/app/messages/ko-KR.json index 26c5c09..030359b 100644 --- a/apps/app/messages/ko-KR.json +++ b/apps/app/messages/ko-KR.json @@ -545,6 +545,12 @@ "used": "사용됨", "available": "사용 가능" }, + "theme": { + "toggle": "테마 전환", + "light": "라이트", + "dark": "다크", + "system": "시스템" + }, "uploadFile": { "title": "파일 업로드", "selectFile": "파일 선택을 위해 클릭하세요", diff --git a/apps/app/messages/pt-BR.json b/apps/app/messages/pt-BR.json index f40795b..c90d1e5 100644 --- a/apps/app/messages/pt-BR.json +++ b/apps/app/messages/pt-BR.json @@ -545,6 +545,12 @@ "used": "usado", "available": "disponível" }, + "theme": { + "toggle": "Alternar tema", + "light": "Claro", + "dark": "Escuro", + "system": "Sistema" + }, "uploadFile": { "title": "Enviar Arquivo", "selectFile": "Clique para selecionar um arquivo", diff --git a/apps/app/messages/ru-RU.json b/apps/app/messages/ru-RU.json index 1eeabe9..ca62fdd 100644 --- a/apps/app/messages/ru-RU.json +++ b/apps/app/messages/ru-RU.json @@ -545,6 +545,12 @@ "used": "Использовано", "available": "Доступно" }, + "theme": { + "toggle": "Переключить тему", + "light": "Светлая", + "dark": "Тёмная", + "system": "Системная" + }, "uploadFile": { "title": "Загрузить файл", "selectFile": "Нажмите, чтобы выбрать файл", diff --git a/apps/app/messages/tr-TR.json b/apps/app/messages/tr-TR.json index 1de9f41..1bc42ec 100644 --- a/apps/app/messages/tr-TR.json +++ b/apps/app/messages/tr-TR.json @@ -545,6 +545,12 @@ "used": "kullanıldı", "available": "kullanılabilir" }, + "theme": { + "toggle": "Temayı değiştir", + "light": "Açık", + "dark": "Koyu", + "system": "Sistem" + }, "uploadFile": { "title": "Dosya Yükle", "selectFile": "Dosya seçmek için tıklayın", diff --git a/apps/app/messages/zh-CN.json b/apps/app/messages/zh-CN.json index c4d04d1..f6d4aaf 100644 --- a/apps/app/messages/zh-CN.json +++ b/apps/app/messages/zh-CN.json @@ -545,6 +545,12 @@ "used": "已使用:", "available": "可用:" }, + "theme": { + "toggle": "切换主题", + "light": "明亮", + "dark": "暗黑", + "system": "系统" + }, "uploadFile": { "title": "上传文件", "selectFile": "点击选择文件", diff --git a/apps/app/src/app/api/(proxy)/files/(download)/[objectName]/download/route.ts b/apps/app/src/app/api/(proxy)/files/(download)/[objectName]/download/route.ts index 96c6875..c3f4f62 100644 --- a/apps/app/src/app/api/(proxy)/files/(download)/[objectName]/download/route.ts +++ b/apps/app/src/app/api/(proxy)/files/(download)/[objectName]/download/route.ts @@ -1,7 +1,8 @@ import { NextRequest, NextResponse } from "next/server"; export async function GET(req: NextRequest, { params }: { params: { objectName: string } }) { - const { objectName } = params; + // Await params before destructuring + const { objectName } = await params; const cookieHeader = req.headers.get("cookie"); const url = `${process.env.API_BASE_URL}/files/${encodeURIComponent(objectName)}/download`; diff --git a/apps/app/src/app/api/(proxy)/shares/alias/create/[shareId]/route.ts b/apps/app/src/app/api/(proxy)/shares/alias/create/[shareId]/route.ts index 8337205..19ef52b 100644 --- a/apps/app/src/app/api/(proxy)/shares/alias/create/[shareId]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/alias/create/[shareId]/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { - const body = await req.text() - const cookieHeader = req.headers.get('cookie') + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/alias`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/alias/get/[alias]/route.ts b/apps/app/src/app/api/(proxy)/shares/alias/get/[alias]/route.ts index 80d3201..4e45063 100644 --- a/apps/app/src/app/api/(proxy)/shares/alias/get/[alias]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/alias/get/[alias]/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function GET(req: NextRequest, { params }: { params: { alias: string } }) { - const cookieHeader = req.headers.get('cookie') - const queryParams = new URLSearchParams(req.url.split('?')[1]) || undefined + const cookieHeader = req.headers.get("cookie"); + const queryParams = new URLSearchParams(req.url.split("?")[1]) || undefined; const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/alias/${params.alias}`, { - method: 'GET', + method: "GET", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, - redirect: 'manual', + redirect: "manual", ...(queryParams ? { params: queryParams } : {}), - }) + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/create/route.ts b/apps/app/src/app/api/(proxy)/shares/create/route.ts index df8b999..1575733 100644 --- a/apps/app/src/app/api/(proxy)/shares/create/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/create/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function POST(req: NextRequest) { - const cookieHeader = req.headers.get('cookie') - const body = await req.text() + const cookieHeader = req.headers.get("cookie"); + const body = await req.text(); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/delete/[id]/route.ts b/apps/app/src/app/api/(proxy)/shares/delete/[id]/route.ts index e61de2f..50e87c4 100644 --- a/apps/app/src/app/api/(proxy)/shares/delete/[id]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/delete/[id]/route.ts @@ -1,29 +1,29 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function DELETE(req: NextRequest, { params }: { params: { id: string } }) { - const cookieHeader = req.headers.get('cookie') + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.id}`, { - method: 'DELETE', + method: "DELETE", headers: { - cookie: cookieHeader || '', + cookie: cookieHeader || "", }, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/details/[shareId]/route.ts b/apps/app/src/app/api/(proxy)/shares/details/[shareId]/route.ts index dfeb4f1..3b4a62b 100644 --- a/apps/app/src/app/api/(proxy)/shares/details/[shareId]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/details/[shareId]/route.ts @@ -1,34 +1,34 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function GET(req: NextRequest, { params }: { params: { shareId: string } }) { - const cookieHeader = req.headers.get('cookie') - const url = new URL(req.url) - const searchParams = url.searchParams.toString() + const cookieHeader = req.headers.get("cookie"); + const url = new URL(req.url); + const searchParams = url.searchParams.toString(); const apiRes = await fetch( - `${process.env.API_BASE_URL}/shares/${params.shareId}${searchParams ? `?${searchParams}` : ''}`, + `${process.env.API_BASE_URL}/shares/${params.shareId}${searchParams ? `?${searchParams}` : ""}`, { - method: 'GET', + method: "GET", headers: { - cookie: cookieHeader || '', + cookie: cookieHeader || "", }, - redirect: 'manual', + redirect: "manual", } - ) + ); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/files/add/[shareId]/route.ts b/apps/app/src/app/api/(proxy)/shares/files/add/[shareId]/route.ts index b4ce5e8..3993705 100644 --- a/apps/app/src/app/api/(proxy)/shares/files/add/[shareId]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/files/add/[shareId]/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { - const body = await req.text() - const cookieHeader = req.headers.get('cookie') + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/files`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/files/remove/[shareId]/route.ts b/apps/app/src/app/api/(proxy)/shares/files/remove/[shareId]/route.ts index c98df03..d5516fc 100644 --- a/apps/app/src/app/api/(proxy)/shares/files/remove/[shareId]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/files/remove/[shareId]/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function DELETE(req: NextRequest, { params }: { params: { shareId: string } }) { - const body = await req.text() - const cookieHeader = req.headers.get('cookie') + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/files`, { - method: 'DELETE', + method: "DELETE", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/list/route.ts b/apps/app/src/app/api/(proxy)/shares/list/route.ts index 6f1ef1d..4a67118 100644 --- a/apps/app/src/app/api/(proxy)/shares/list/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/list/route.ts @@ -1,29 +1,29 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function GET(req: NextRequest) { - const cookieHeader = req.headers.get('cookie') + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/me`, { - method: 'GET', + method: "GET", headers: { - cookie: cookieHeader || '', + cookie: cookieHeader || "", }, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/password/update/shareId/route.ts b/apps/app/src/app/api/(proxy)/shares/password/update/shareId/route.ts index 0a50fa2..636c5d3 100644 --- a/apps/app/src/app/api/(proxy)/shares/password/update/shareId/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/password/update/shareId/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function PATCH(req: NextRequest, { params }: { params: { shareId: string } }) { - const body = await req.text() - const cookieHeader = req.headers.get('cookie') + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/password`, { - method: 'PATCH', + method: "PATCH", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/recipients/add/[shareId]/route.ts b/apps/app/src/app/api/(proxy)/shares/recipients/add/[shareId]/route.ts index 0c0adec..a8a4ea4 100644 --- a/apps/app/src/app/api/(proxy)/shares/recipients/add/[shareId]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/recipients/add/[shareId]/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { - const body = await req.text() - const cookieHeader = req.headers.get('cookie') + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/recipients`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/recipients/notify/[shareId]/route.ts b/apps/app/src/app/api/(proxy)/shares/recipients/notify/[shareId]/route.ts index e95c7f0..104fd0f 100644 --- a/apps/app/src/app/api/(proxy)/shares/recipients/notify/[shareId]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/recipients/notify/[shareId]/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { - const body = await req.text() - const cookieHeader = req.headers.get('cookie') + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/notify`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/recipients/remove/[shareId]/route.ts b/apps/app/src/app/api/(proxy)/shares/recipients/remove/[shareId]/route.ts index 0ec74ce..83c2e77 100644 --- a/apps/app/src/app/api/(proxy)/shares/recipients/remove/[shareId]/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/recipients/remove/[shareId]/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function DELETE(req: NextRequest, { params }: { params: { shareId: string } }) { - const body = await req.text() - const cookieHeader = req.headers.get('cookie') + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/recipients`, { - method: 'DELETE', + method: "DELETE", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/api/(proxy)/shares/update/route.ts b/apps/app/src/app/api/(proxy)/shares/update/route.ts index 421c7e1..691a60c 100644 --- a/apps/app/src/app/api/(proxy)/shares/update/route.ts +++ b/apps/app/src/app/api/(proxy)/shares/update/route.ts @@ -1,32 +1,32 @@ -import { NextRequest, NextResponse } from 'next/server' +import { NextRequest, NextResponse } from "next/server"; export async function PUT(req: NextRequest) { - const cookieHeader = req.headers.get('cookie') - const body = await req.text() + const cookieHeader = req.headers.get("cookie"); + const body = await req.text(); const apiRes = await fetch(`${process.env.API_BASE_URL}/shares`, { - method: 'PUT', + method: "PUT", headers: { - 'Content-Type': 'application/json', - cookie: cookieHeader || '', + "Content-Type": "application/json", + cookie: cookieHeader || "", }, body, - redirect: 'manual', - }) + redirect: "manual", + }); - const resBody = await apiRes.text() + const resBody = await apiRes.text(); const res = new NextResponse(resBody, { status: apiRes.status, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, - }) + }); - const setCookie = apiRes.headers.getSetCookie?.() || [] + const setCookie = apiRes.headers.getSetCookie?.() || []; if (setCookie.length > 0) { - res.headers.set('Set-Cookie', setCookie.join(',')) + res.headers.set("Set-Cookie", setCookie.join(",")); } - return res -} \ No newline at end of file + return res; +} diff --git a/apps/app/src/app/layout.tsx b/apps/app/src/app/layout.tsx index 70eccfc..737f108 100644 --- a/apps/app/src/app/layout.tsx +++ b/apps/app/src/app/layout.tsx @@ -23,7 +23,6 @@ const geistMono = Geist_Mono({ subsets: ["latin"], }); - export default async function RootLayout({ children, }: Readonly<{ diff --git a/apps/app/src/components/general/mode-toggle.tsx b/apps/app/src/components/general/mode-toggle.tsx index 7742e26..29df760 100644 --- a/apps/app/src/components/general/mode-toggle.tsx +++ b/apps/app/src/components/general/mode-toggle.tsx @@ -1,8 +1,8 @@ -// !!TODO: ADD TRANSLATION SUPPORT FOR THESE BUTTONS "use client"; import * as React from "react"; import { IconMoon, IconSun } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; import { useTheme } from "next-themes"; import { Button } from "@/components/ui/button"; @@ -15,6 +15,7 @@ import { export function ModeToggle() { const { setTheme } = useTheme(); + const t = useTranslations(); return ( @@ -22,13 +23,13 @@ export function ModeToggle() { - setTheme("light")}>Light - setTheme("dark")}>Dark - setTheme("system")}>System + setTheme("light")}>{t("theme.light")} + setTheme("dark")}>{t("theme.dark")} + setTheme("system")}>{t("theme.system")} ); diff --git a/apps/app/src/http/endpoints/shares/index.ts b/apps/app/src/http/endpoints/shares/index.ts index 1ce38aa..7d63bba 100644 --- a/apps/app/src/http/endpoints/shares/index.ts +++ b/apps/app/src/http/endpoints/shares/index.ts @@ -1,5 +1,6 @@ import type { AxiosRequestConfig } from "axios"; +import apiInstance from "@/config/api"; import type { AddFilesBody, AddFilesResult, @@ -26,7 +27,6 @@ import type { UpdateSharePasswordResult, UpdateShareResult, } from "./types"; -import apiInstance from "@/config/api"; /** * Create a new share