From 9d8a5baf3d0febb382b2062875d5a8d2e0787ad4 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Thu, 5 Jun 2025 14:18:49 -0500 Subject: [PATCH 01/46] Update translations for dashboard --- .../20250410194301_setup/migration.sql | 495 ++++++++++++++++++ db/migrations/migration_lock.toml | 3 + public/locales/en/common.json | 45 +- public/locales/es/common.json | 42 +- src/core/components/sidebar/Sidebar.tsx | 5 +- .../components/sidebar/SidebarTooltips.tsx | 4 + src/core/hooks/useSidebar.ts | 4 +- src/pages/projects/index.tsx | 7 +- .../components/widgets/AllTaskTotal.tsx | 7 +- .../components/widgets/LastProject.tsx | 13 +- .../components/widgets/MainNotification.tsx | 8 +- .../components/widgets/MainOverDueTasks.tsx | 14 +- .../components/widgets/MainUpcomingTasks.tsx | 15 +- .../components/widgets/TotalContributors.tsx | 2 +- src/widgets/components/widgets/TotalForms.tsx | 7 +- .../components/widgets/TotalInvites.tsx | 7 +- .../components/widgets/TotalProjects.tsx | 7 +- src/widgets/components/widgets/TotalRoles.tsx | 7 +- 18 files changed, 650 insertions(+), 42 deletions(-) create mode 100644 db/migrations/20250410194301_setup/migration.sql create mode 100644 db/migrations/migration_lock.toml diff --git a/db/migrations/20250410194301_setup/migration.sql b/db/migrations/20250410194301_setup/migration.sql new file mode 100644 index 00000000..361f6f84 --- /dev/null +++ b/db/migrations/20250410194301_setup/migration.sql @@ -0,0 +1,495 @@ +-- CreateEnum +CREATE TYPE "MemberPrivileges" AS ENUM ('PROJECT_MANAGER', 'CONTRIBUTOR'); + +-- CreateEnum +CREATE TYPE "Status" AS ENUM ('COMPLETED', 'NOT_COMPLETED'); + +-- CreateEnum +CREATE TYPE "CompletedAs" AS ENUM ('INDIVIDUAL', 'TEAM'); + +-- CreateEnum +CREATE TYPE "WidgetSize" AS ENUM ('SMALL', 'MEDIUM', 'LARGE'); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "hashedPassword" TEXT, + "role" TEXT NOT NULL DEFAULT 'USER', + "tos" BOOLEAN, + "orcid" TEXT, + "institution" TEXT, + "username" TEXT NOT NULL, + "firstName" TEXT, + "lastName" TEXT, + "email" TEXT NOT NULL, + "language" TEXT NOT NULL DEFAULT 'en-US', + "gravatar" TEXT, + "tooltips" BOOLEAN NOT NULL DEFAULT true, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Session" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "expiresAt" TIMESTAMP(3), + "handle" TEXT NOT NULL, + "hashedSessionToken" TEXT, + "antiCSRFToken" TEXT, + "publicData" TEXT, + "privateData" TEXT, + "userId" INTEGER, + + CONSTRAINT "Session_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Token" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "hashedToken" TEXT NOT NULL, + "type" TEXT NOT NULL, + "expiresAt" TIMESTAMP(3) NOT NULL, + "sentTo" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + + CONSTRAINT "Token_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ProjectMember" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "projectId" INTEGER NOT NULL, + "name" TEXT, + "deleted" BOOLEAN NOT NULL DEFAULT false, + "tags" JSONB, + + CONSTRAINT "ProjectMember_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ProjectPrivilege" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" SERIAL NOT NULL, + "userId" INTEGER NOT NULL, + "projectId" INTEGER NOT NULL, + "privilege" "MemberPrivileges" NOT NULL DEFAULT 'PROJECT_MANAGER', + + CONSTRAINT "ProjectPrivilege_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Invitation" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" SERIAL NOT NULL, + "projectId" INTEGER NOT NULL, + "invitationCode" TEXT NOT NULL, + "email" TEXT NOT NULL, + "privilege" "MemberPrivileges" NOT NULL DEFAULT 'CONTRIBUTOR', + "addedBy" TEXT NOT NULL, + "reassignmentFor" INTEGER, + + CONSTRAINT "Invitation_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Role" ( + "id" SERIAL NOT NULL, + "userId" INTEGER NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "taxonomy" TEXT, + "projectId" INTEGER, + + CONSTRAINT "Role_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Project" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "abstract" TEXT, + "keywords" TEXT, + "citation" TEXT, + "publisher" TEXT, + "identifier" TEXT, + "metadata" JSONB, + "formVersionId" INTEGER, + + CONSTRAINT "Project_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Task" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdById" INTEGER NOT NULL, + "deadline" TIMESTAMP(3), + "name" TEXT NOT NULL, + "description" TEXT, + "tags" JSONB, + "containerTaskOrder" INTEGER NOT NULL, + "containerId" INTEGER NOT NULL, + "projectId" INTEGER NOT NULL, + "elementId" INTEGER, + "formVersionId" INTEGER, + "status" "Status" NOT NULL DEFAULT 'NOT_COMPLETED', + + CONSTRAINT "Task_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TaskLog" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "status" "Status" NOT NULL DEFAULT 'NOT_COMPLETED', + "metadata" JSONB, + "completedAs" "CompletedAs" NOT NULL DEFAULT 'INDIVIDUAL', + "assignedToId" INTEGER NOT NULL, + "completedById" INTEGER, + "taskId" INTEGER NOT NULL, + + CONSTRAINT "TaskLog_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Comment" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "content" TEXT NOT NULL, + "taskLogId" INTEGER NOT NULL, + "authorId" INTEGER NOT NULL, + + CONSTRAINT "Comment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "KanbanBoard" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "name" TEXT NOT NULL DEFAULT 'To Do', + "containerOrder" INTEGER NOT NULL, + "projectId" INTEGER NOT NULL, + + CONSTRAINT "KanbanBoard_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Element" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "projectId" INTEGER NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "tags" JSONB, + + CONSTRAINT "Element_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Form" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "userId" INTEGER NOT NULL, + "archived" BOOLEAN NOT NULL DEFAULT false, + + CONSTRAINT "Form_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "FormVersion" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "formId" INTEGER NOT NULL, + "version" INTEGER NOT NULL, + "schema" JSONB NOT NULL, + "uiSchema" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "FormVersion_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Notification" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "message" TEXT NOT NULL, + "read" BOOLEAN NOT NULL DEFAULT false, + "announcement" BOOLEAN NOT NULL DEFAULT false, + "project_id" INTEGER, + "routeData" JSONB, + + CONSTRAINT "Notification_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Widget" ( + "id" SERIAL NOT NULL, + "userId" INTEGER NOT NULL, + "type" TEXT NOT NULL, + "show" BOOLEAN NOT NULL DEFAULT true, + "position" INTEGER NOT NULL, + "size" "WidgetSize" NOT NULL DEFAULT 'MEDIUM', + + CONSTRAINT "Widget_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ProjectWidget" ( + "id" SERIAL NOT NULL, + "userId" INTEGER NOT NULL, + "projectId" INTEGER NOT NULL, + "type" TEXT NOT NULL, + "show" BOOLEAN NOT NULL DEFAULT true, + "position" INTEGER NOT NULL, + "size" "WidgetSize" NOT NULL DEFAULT 'MEDIUM', + "privilege" "MemberPrivileges"[] DEFAULT ARRAY['CONTRIBUTOR', 'PROJECT_MANAGER']::"MemberPrivileges"[], + + CONSTRAINT "ProjectWidget_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_ProjectMemberToUser" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_AssignedTasks" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_ProjectMemberToRole" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_InvitationToRole" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_RoleToTask" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_ElementToElement" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateTable +CREATE TABLE "_UserNotifications" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_username_key" ON "User"("username"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Session_handle_key" ON "Session"("handle"); + +-- CreateIndex +CREATE UNIQUE INDEX "Token_hashedToken_type_key" ON "Token"("hashedToken", "type"); + +-- CreateIndex +CREATE INDEX "formVersionIndex" ON "FormVersion"("formId", "version"); + +-- CreateIndex +CREATE UNIQUE INDEX "Widget_userId_type_key" ON "Widget"("userId", "type"); + +-- CreateIndex +CREATE UNIQUE INDEX "ProjectWidget_userId_projectId_type_key" ON "ProjectWidget"("userId", "projectId", "type"); + +-- CreateIndex +CREATE UNIQUE INDEX "_ProjectMemberToUser_AB_unique" ON "_ProjectMemberToUser"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ProjectMemberToUser_B_index" ON "_ProjectMemberToUser"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_AssignedTasks_AB_unique" ON "_AssignedTasks"("A", "B"); + +-- CreateIndex +CREATE INDEX "_AssignedTasks_B_index" ON "_AssignedTasks"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_ProjectMemberToRole_AB_unique" ON "_ProjectMemberToRole"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ProjectMemberToRole_B_index" ON "_ProjectMemberToRole"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_InvitationToRole_AB_unique" ON "_InvitationToRole"("A", "B"); + +-- CreateIndex +CREATE INDEX "_InvitationToRole_B_index" ON "_InvitationToRole"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_RoleToTask_AB_unique" ON "_RoleToTask"("A", "B"); + +-- CreateIndex +CREATE INDEX "_RoleToTask_B_index" ON "_RoleToTask"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_ElementToElement_AB_unique" ON "_ElementToElement"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ElementToElement_B_index" ON "_ElementToElement"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_UserNotifications_AB_unique" ON "_UserNotifications"("A", "B"); + +-- CreateIndex +CREATE INDEX "_UserNotifications_B_index" ON "_UserNotifications"("B"); + +-- AddForeignKey +ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Token" ADD CONSTRAINT "Token_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ProjectMember" ADD CONSTRAINT "ProjectMember_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ProjectPrivilege" ADD CONSTRAINT "ProjectPrivilege_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ProjectPrivilege" ADD CONSTRAINT "ProjectPrivilege_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Invitation" ADD CONSTRAINT "Invitation_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Invitation" ADD CONSTRAINT "Invitation_reassignmentFor_fkey" FOREIGN KEY ("reassignmentFor") REFERENCES "ProjectMember"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Role" ADD CONSTRAINT "Role_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Role" ADD CONSTRAINT "Role_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Project" ADD CONSTRAINT "Project_formVersionId_fkey" FOREIGN KEY ("formVersionId") REFERENCES "FormVersion"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "ProjectMember"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_containerId_fkey" FOREIGN KEY ("containerId") REFERENCES "KanbanBoard"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_elementId_fkey" FOREIGN KEY ("elementId") REFERENCES "Element"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_formVersionId_fkey" FOREIGN KEY ("formVersionId") REFERENCES "FormVersion"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TaskLog" ADD CONSTRAINT "TaskLog_assignedToId_fkey" FOREIGN KEY ("assignedToId") REFERENCES "ProjectMember"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TaskLog" ADD CONSTRAINT "TaskLog_completedById_fkey" FOREIGN KEY ("completedById") REFERENCES "ProjectMember"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TaskLog" ADD CONSTRAINT "TaskLog_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_taskLogId_fkey" FOREIGN KEY ("taskLogId") REFERENCES "TaskLog"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "ProjectMember"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "KanbanBoard" ADD CONSTRAINT "KanbanBoard_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Element" ADD CONSTRAINT "Element_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Form" ADD CONSTRAINT "Form_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "FormVersion" ADD CONSTRAINT "FormVersion_formId_fkey" FOREIGN KEY ("formId") REFERENCES "Form"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Notification" ADD CONSTRAINT "Notification_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Widget" ADD CONSTRAINT "Widget_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ProjectWidget" ADD CONSTRAINT "ProjectWidget_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ProjectWidget" ADD CONSTRAINT "ProjectWidget_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ProjectMemberToUser" ADD CONSTRAINT "_ProjectMemberToUser_A_fkey" FOREIGN KEY ("A") REFERENCES "ProjectMember"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ProjectMemberToUser" ADD CONSTRAINT "_ProjectMemberToUser_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_AssignedTasks" ADD CONSTRAINT "_AssignedTasks_A_fkey" FOREIGN KEY ("A") REFERENCES "ProjectMember"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_AssignedTasks" ADD CONSTRAINT "_AssignedTasks_B_fkey" FOREIGN KEY ("B") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ProjectMemberToRole" ADD CONSTRAINT "_ProjectMemberToRole_A_fkey" FOREIGN KEY ("A") REFERENCES "ProjectMember"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ProjectMemberToRole" ADD CONSTRAINT "_ProjectMemberToRole_B_fkey" FOREIGN KEY ("B") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_InvitationToRole" ADD CONSTRAINT "_InvitationToRole_A_fkey" FOREIGN KEY ("A") REFERENCES "Invitation"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_InvitationToRole" ADD CONSTRAINT "_InvitationToRole_B_fkey" FOREIGN KEY ("B") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_RoleToTask" ADD CONSTRAINT "_RoleToTask_A_fkey" FOREIGN KEY ("A") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_RoleToTask" ADD CONSTRAINT "_RoleToTask_B_fkey" FOREIGN KEY ("B") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ElementToElement" ADD CONSTRAINT "_ElementToElement_A_fkey" FOREIGN KEY ("A") REFERENCES "Element"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ElementToElement" ADD CONSTRAINT "_ElementToElement_B_fkey" FOREIGN KEY ("B") REFERENCES "Element"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserNotifications" ADD CONSTRAINT "_UserNotifications_A_fkey" FOREIGN KEY ("A") REFERENCES "Notification"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_UserNotifications" ADD CONSTRAINT "_UserNotifications_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/db/migrations/migration_lock.toml b/db/migrations/migration_lock.toml new file mode 100644 index 00000000..fbffa92c --- /dev/null +++ b/db/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/public/locales/en/common.json b/public/locales/en/common.json index c5c924f4..15c816ec 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -11,7 +11,8 @@ "notifications": "Notifications", "roles": "Roles", "summary": "Summary", - "settings": "Settings" + "settings": "Settings", + "tags": "Tags" }, "home": { "dashboard": "Dashboard", @@ -22,13 +23,51 @@ "forms": "Forms", "roles": "Roles", "admin": "Admin", - "help": "Help" + "help": "Help", + "tooltips": { + "dashboard": "Home dashboard", + "projects": "View all projects", + "invitations": "Project invitations", + "tasks": "View all tasks", + "notifications": "View all notifications", + "forms": "Manage metadata forms", + "roles": "Manage role categories", + "help": "Get help" + } } }, "main": { "welcome": "Welcome", "dashboard": { - "totalcontributors": "Total Contributors" + "upcomingtask": "Upcoming Tasks", + "overduetask": "Overdue Tasks", + "notifications": "Notifications", + "totalcontributors": "Total Contributors", + "alltasks": "Tasks", + "projects": "Projects", + "forms": "Forms", + "invites": "Invitations", + "roles": "Roles", + "lastupdatedprojects": "Last Updated Projects", + "alltasksbutton": "All Tasks", + "allprojectsbutton": "All Projects", + "allnotificationsbutton": "All Notifications", + "tooltips": { + "upcomingtask": "Three upcoming tasks for all projects", + "overduetask": "Overdue Tasks", + "notifications": "Notifications", + "totalcontributors": "Total Contributors", + "alltasks": "Tasks", + "projects": "Projects", + "forms": "Forms", + "invites": "Invitations", + "roles": "Roles", + "lastupdatedprojects": "Last Updated Projects" + } } + }, + "projects": { + "title": "All Projects", + "createproject": "Create Project" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index de884cb3..253e56dc 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -23,13 +23,51 @@ "forms": "Formularios", "roles": "Roles", "admin": "Administración", - "help": "Ayuda" + "help": "Ayuda", + "tooltips": { + "dashboard": "Tablero de inicio", + "projects": "Ver todos los proyectos", + "invitations": "Invitaciones a proyectos", + "tasks": "Ver todas las tareas", + "notifications": "Ver todas las notificaciones", + "forms": "Gestionar formularios de metadatos", + "roles": "Gestionar categorías de roles", + "help": "Obtener ayuda" + } } }, "main": { "welcome": "Bienvenido", "dashboard": { - "totalcontributors": "Contribuidores Totales" + "upcomingtask": "Tareas Pendientes", + "overduetask": "Tareas Vencidas", + "notifications": "Notificaciones", + "totalcontributors": "Contribuidores Totales", + "alltasks": "Tareas", + "projects": "Proyectos", + "forms": "Formularios", + "invites": "Invitaciones", + "roles": "Roles", + "lastupdatedprojects": "Últimos Proyectos Actualizados", + "alltasksbutton": "Ver todas las tareas", + "allprojectsbutton": "Ver todos los proyectos", + "allnotificationsbutton": "Ver todas las notificaciones", + "tooltips": { + "upcomingtask": "Tres tareas próximas para todos los proyectos", + "overduetask": "Tres tareas vencidas para todos los proyectos", + "notifications": "Tres notificaciones recientes para todos los proyectos", + "totalcontributors": "Total de contribuidores únicos en todos los proyectos", + "alltasks": "Porcentaje de tareas completadas", + "projects": "Total de proyectos", + "forms": "Total de plantillas de metadatos", + "invites": "Total de invitaciones a proyectos", + "roles": "Total de etiquetas de roles", + "lastupdatedprojects": "Tres proyectos recientemente actualizados" + } } + }, + "projects": { + "title": "Todos los proyectos", + "createproject": "Crear proyecto" } } diff --git a/src/core/components/sidebar/Sidebar.tsx b/src/core/components/sidebar/Sidebar.tsx index 21b239f6..69bda728 100644 --- a/src/core/components/sidebar/Sidebar.tsx +++ b/src/core/components/sidebar/Sidebar.tsx @@ -5,6 +5,7 @@ import { SidebarItemProps } from "./SidebarItems" import { SidebarState } from "src/core/hooks/useSidebar" import SidebarTooltips from "./SidebarTooltips" import TooltipWrapper from "../TooltipWrapper" +import { useTranslation } from "react-i18next" export default function Sidebar({ sidebarState, @@ -20,7 +21,7 @@ export default function Sidebar({ if (!sidebarTitle) { return
Loading...
} - + const { t } = (useTranslation as any)() return (