diff --git a/apps/web/app/[locale]/error.tsx b/apps/web/app/[locale]/error.tsx index 782e52190..3188a6b90 100644 --- a/apps/web/app/[locale]/error.tsx +++ b/apps/web/app/[locale]/error.tsx @@ -1,7 +1,13 @@ 'use client'; -const Error = () => { - return <>Error Page...; +import ErrorPage from '@components/pages/error'; + +const Error = ({ error, reset }: { error: Error & { digest?: string }; reset: () => void }) => { + return ( + <> + + + ); }; export default Error; diff --git a/apps/web/app/[locale]/layout.tsx b/apps/web/app/[locale]/layout.tsx index bafe18d98..82250a510 100644 --- a/apps/web/app/[locale]/layout.tsx +++ b/apps/web/app/[locale]/layout.tsx @@ -13,6 +13,8 @@ import '../../styles/globals.css'; import { ThemeProvider } from 'next-themes'; import { JitsuRoot } from 'lib/settings/JitsuRoot'; import { JitsuOptions } from '@jitsu/jitsu-react/dist/useJitsu'; +import { useCheckAPI } from '@app/hooks/useCheckAPI'; +import Maintenance from '@components/pages/maintenance'; const locales = ['en', 'de', 'ar', 'bg', 'zh', 'nl', 'de', 'he', 'it', 'pl', 'pt', 'ru', 'es', 'fr']; @@ -43,6 +45,7 @@ interface Props { const LocaleLayout = ({ children, params: { locale }, pageProps }: Props) => { // Validate that the incoming `locale` parameter is valid if (!locales.includes(locale as any)) notFound(); + const { isApiWork } = useCheckAPI(); // Enable static rendering // unstable_setRequestLocale(locale); @@ -70,8 +73,14 @@ const LocaleLayout = ({ children, params: { locale }, pageProps }: Props) => { - - {children} + {isApiWork ? ( + <> + + {children} + + ) : ( + + )} diff --git a/apps/web/app/api/route.ts b/apps/web/app/api/route.ts new file mode 100644 index 000000000..e93a0560d --- /dev/null +++ b/apps/web/app/api/route.ts @@ -0,0 +1,6 @@ +import { getDefaultRequest } from '@app/services/server/requests/default'; +import { NextResponse } from 'next/server'; + +export async function GET() { + return NextResponse.json(await getDefaultRequest()); +} diff --git a/apps/web/app/api/tasks/employee/[employeeId]/route.ts b/apps/web/app/api/tasks/employee/[employeeId]/route.ts index 4f2b8eb82..6fcf221e1 100644 --- a/apps/web/app/api/tasks/employee/[employeeId]/route.ts +++ b/apps/web/app/api/tasks/employee/[employeeId]/route.ts @@ -1,15 +1,37 @@ import { authenticatedGuard } from '@app/services/server/guards/authenticated-guard-app'; -import { deleteEmployeeFromTasksRequest } from '@app/services/server/requests'; +import { deleteEmployeeFromTasksRequest, getEmployeeTasksRequest } from '@app/services/server/requests'; import { NextResponse } from 'next/server'; -export async function DELETE(req: Request, { params }: { params: { employeeId: string } }) { +export async function GET(req: Request, { params }: { params: { employeeId: string } }) { const res = new NextResponse(); const { $res, user, tenantId, access_token: bearer_token } = await authenticatedGuard(req, res); if (!user) return $res('Unauthorized'); const { searchParams } = new URL(req.url); - const { employeeId} = params + const { employeeId } = params; + const { organizationTeamId } = searchParams as unknown as { + organizationTeamId: string; + }; + + return $res( + await getEmployeeTasksRequest({ + tenantId, + employeeId, + organizationTeamId, + bearer_token + }) + ); +} + +export async function DELETE(req: Request, { params }: { params: { employeeId: string } }) { + const res = new NextResponse(); + const { $res, user, tenantId, access_token: bearer_token } = await authenticatedGuard(req, res); + if (!user) return $res('Unauthorized'); + + const { searchParams } = new URL(req.url); + + const { employeeId } = params; const { organizationTeamId } = searchParams as unknown as { organizationTeamId: string; }; diff --git a/apps/web/app/hooks/features/useTeamTasks.ts b/apps/web/app/hooks/features/useTeamTasks.ts index ca3d5a180..b1eb8c86d 100644 --- a/apps/web/app/hooks/features/useTeamTasks.ts +++ b/apps/web/app/hooks/features/useTeamTasks.ts @@ -14,9 +14,16 @@ import { getTeamTasksAPI, updateTaskAPI, deleteEmployeeFromTasksAPI, - getTasksByIdAPI + getTasksByIdAPI, + getTasksByEmployeeIdAPI } from '@app/services/client/api'; -import { activeTeamState, detailedTaskState, memberActiveTaskIdState, userState } from '@app/stores'; +import { + activeTeamState, + detailedTaskState, + // employeeTasksState, + memberActiveTaskIdState, + userState +} from '@app/stores'; import { activeTeamTaskState, tasksByTeamState, tasksFetchingState, teamTasksState } from '@app/stores'; import isEqual from 'lodash/isEqual'; import { useCallback, useEffect } from 'react'; @@ -40,6 +47,7 @@ export function useTeamTasks() { const [tasksFetching, setTasksFetching] = useRecoilState(tasksFetchingState); const authUser = useSyncRef(useRecoilValue(userState)); const memberActiveTaskId = useRecoilValue(memberActiveTaskIdState); + // const [employeeState, setEmployeeState] = useRecoilState(employeeTasksState); const activeTeam = useRecoilValue(activeTeamState); const activeTeamRef = useSyncRef(activeTeam); @@ -51,6 +59,8 @@ export function useTeamTasks() { // Queries hooks const { queryCall, loading, loadingRef } = useQuery(getTeamTasksAPI); const { queryCall: getTasksByIdQueryCall, loading: getTasksByIdLoading } = useQuery(getTasksByIdAPI); + const { queryCall: getTasksByEmployeeIdQueryCall, loading: getTasksByEmployeeIdLoading } = + useQuery(getTasksByEmployeeIdAPI); const { queryCall: deleteQueryCall, loading: deleteLoading } = useQuery(deleteTaskAPI); @@ -71,6 +81,16 @@ export function useTeamTasks() { [getTasksByIdQueryCall, setDetailedTask] ); + const getTasksByEmployeeId = useCallback( + (employeeId: string, organizationTeamId: string) => { + return getTasksByEmployeeIdQueryCall(employeeId, organizationTeamId).then((res) => { + // setEmployeeState(res?.data || []); + return res.data; + }); + }, + [getTasksByEmployeeIdQueryCall] + ); + const deepCheckAndUpdateTasks = useCallback( (responseTasks: ITeamTask[], deepCheck?: boolean) => { if (responseTasks && responseTasks.length) { @@ -398,6 +418,9 @@ export function useTeamTasks() { updateDescription, updatePublicity, handleStatusUpdate, + // employeeState, + getTasksByEmployeeId, + getTasksByEmployeeIdLoading, activeTeam, activeTeamId: activeTeam?.id, setAllTasks, diff --git a/apps/web/app/hooks/features/useUserProfilePage.ts b/apps/web/app/hooks/features/useUserProfilePage.ts index 3986bb16d..9a67841bd 100644 --- a/apps/web/app/hooks/features/useUserProfilePage.ts +++ b/apps/web/app/hooks/features/useUserProfilePage.ts @@ -8,20 +8,17 @@ import { useAuthTeamTasks } from './useAuthTeamTasks'; import { useOrganizationTeams } from './useOrganizationTeams'; import { useTaskStatistics } from './useTaskStatistics'; import { useTeamTasks } from './useTeamTasks'; -import { useRecoilValue } from 'recoil'; -import { activityTypeState } from '@app/stores/activity-type'; export function useUserProfilePage() { const { activeTeam } = useOrganizationTeams(); const { activeTeamTask, updateTask } = useTeamTasks(); - const activityFilter = useRecoilValue(activityTypeState); const { user: auth } = useAuthenticateUser(); const { getTasksStatsData } = useTaskStatistics(); const params = useParams(); const memberId: string = useMemo(() => { - return (params?.memberId ?? activityFilter.member?.id ?? '') as string; + return (params?.memberId ?? '') as string; // eslint-disable-next-line react-hooks/exhaustive-deps }, [params]); diff --git a/apps/web/app/hooks/features/useUserSelectedPage.ts b/apps/web/app/hooks/features/useUserSelectedPage.ts new file mode 100644 index 000000000..dd70d5e5b --- /dev/null +++ b/apps/web/app/hooks/features/useUserSelectedPage.ts @@ -0,0 +1,68 @@ +'use client'; + +import { ITeamTask } from '@app/interfaces'; +import { useCallback, useEffect } from 'react'; +import { useAuthenticateUser } from './useAuthenticateUser'; +import { useAuthTeamTasks } from './useAuthTeamTasks'; +import { useOrganizationTeams } from './useOrganizationTeams'; +import { useTaskStatistics } from './useTaskStatistics'; +import { useTeamTasks } from './useTeamTasks'; + +export function useUserSelectedPage(id?: string) { + const { activeTeam } = useOrganizationTeams(); + const { activeTeamTask, updateTask } = useTeamTasks(); + + const { user: auth } = useAuthenticateUser(); + const { getTasksStatsData } = useTaskStatistics(); + + const memberId: string = id || ''; + + const members = activeTeam?.members || []; + + const matchUser = members.find((m) => { + return m.employee.userId === memberId; + }); + + const isAuthUser = auth?.employee?.userId === memberId; + + const activeUserTeamTask = isAuthUser ? activeTeamTask : matchUser?.lastWorkedTask; + + const userProfile = isAuthUser ? auth : matchUser?.employee.user; + + const employeeId = isAuthUser ? auth?.employee?.id : matchUser?.employeeId; + + /* Filtering the tasks */ + const tasksGrouped = useAuthTeamTasks(userProfile); + + useEffect(() => { + if (employeeId) { + getTasksStatsData(employeeId); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [employeeId]); + + const assignTask = useCallback( + (task: ITeamTask) => { + if (!matchUser?.employeeId) { + return Promise.resolve(); + } + + return updateTask({ + ...task, + members: [...task.members, (matchUser?.employeeId ? { id: matchUser?.employeeId } : {}) as any] + }); + }, + [updateTask, matchUser] + ); + + return { + isAuthUser, + activeUserTeamTask, + userProfile, + tasksGrouped, + member: matchUser, + assignTask + }; +} + +export type I_UserProfilePage = ReturnType; diff --git a/apps/web/app/hooks/useCheckAPI.ts b/apps/web/app/hooks/useCheckAPI.ts new file mode 100644 index 000000000..738b2cfea --- /dev/null +++ b/apps/web/app/hooks/useCheckAPI.ts @@ -0,0 +1,28 @@ +'use client'; + +import React, { useCallback, useEffect } from 'react'; +import { useQuery } from './useQuery'; +import { getDefaultAPI } from '@app/services/client/api'; + +export function useCheckAPI() { + const { queryCall } = useQuery(getDefaultAPI); + const [isApiWork, setIsApiWork] = React.useState(true); + + const checkAPI = useCallback(() => { + queryCall() + .then(() => { + setIsApiWork(true); + }) + .catch(() => { + setIsApiWork(false); + }); + }, [queryCall]); + + useEffect(() => { + checkAPI(); + }, [checkAPI]); + + return { + isApiWork + }; +} diff --git a/apps/web/app/services/client/api/default.ts b/apps/web/app/services/client/api/default.ts new file mode 100644 index 000000000..152751a65 --- /dev/null +++ b/apps/web/app/services/client/api/default.ts @@ -0,0 +1,5 @@ +import api from '../axios'; + +export function getDefaultAPI() { + return api.get(`/`); +} diff --git a/apps/web/app/services/client/api/index.ts b/apps/web/app/services/client/api/index.ts index 29584d0ee..b98e1c2f1 100644 --- a/apps/web/app/services/client/api/index.ts +++ b/apps/web/app/services/client/api/index.ts @@ -32,3 +32,4 @@ export * from './organization-projects'; export * from './activity/time-slots'; export * from './activity/activity'; +export * from './default'; diff --git a/apps/web/app/services/client/api/tasks.ts b/apps/web/app/services/client/api/tasks.ts index d2f5c5d46..1698725df 100644 --- a/apps/web/app/services/client/api/tasks.ts +++ b/apps/web/app/services/client/api/tasks.ts @@ -157,3 +157,7 @@ export function allTaskTimesheetStatisticsAPI() { export function deleteEmployeeFromTasksAPI(employeeId: string, organizationTeamId: string) { return api.delete(`/tasks/employee/${employeeId}?organizationTeamId=${organizationTeamId}`); } + +export function getTasksByEmployeeIdAPI(employeeId: string, organizationTeamId: string) { + return api.get(`/tasks/employee/${employeeId}?organizationTeamId=${organizationTeamId}`); +} diff --git a/apps/web/app/services/server/requests/default.ts b/apps/web/app/services/server/requests/default.ts new file mode 100644 index 000000000..a63482dae --- /dev/null +++ b/apps/web/app/services/server/requests/default.ts @@ -0,0 +1,8 @@ +import { serverFetch } from '../fetch'; + +export function getDefaultRequest() { + return serverFetch({ + path: `/`, + method: 'GET' + }); +} diff --git a/apps/web/app/services/server/requests/index.ts b/apps/web/app/services/server/requests/index.ts index 9e5fc704e..3226b849d 100644 --- a/apps/web/app/services/server/requests/index.ts +++ b/apps/web/app/services/server/requests/index.ts @@ -34,3 +34,4 @@ export * from './integrations/integration-tenant'; export * from './integrations/types'; export * from './organization-projects'; +export * from './default'; diff --git a/apps/web/app/services/server/requests/tasks.ts b/apps/web/app/services/server/requests/tasks.ts index a255518fe..076c7fa1a 100644 --- a/apps/web/app/services/server/requests/tasks.ts +++ b/apps/web/app/services/server/requests/tasks.ts @@ -161,3 +161,22 @@ export function deleteEmployeeFromTasksRequest({ tenantId }); } + +export function getEmployeeTasksRequest({ + tenantId, + employeeId, + organizationTeamId, + bearer_token +}: { + tenantId: string; + employeeId: string; + organizationTeamId: string; + bearer_token: string; +}) { + return serverFetch({ + path: `/tasks/employee/${employeeId}?organizationTeamId=${organizationTeamId}`, + method: 'GET', + bearer_token, + tenantId + }); +} diff --git a/apps/web/app/stores/team-tasks.ts b/apps/web/app/stores/team-tasks.ts index cdcd41cdc..27161efe4 100644 --- a/apps/web/app/stores/team-tasks.ts +++ b/apps/web/app/stores/team-tasks.ts @@ -23,6 +23,11 @@ export const detailedTaskState = atom({ default: null }); +// export const employeeTasksState = atom({ +// key: 'employeeTasksState', +// default: null +// }); + export const tasksByTeamState = selector({ key: 'tasksByTeamState', get: ({ get }) => { @@ -30,7 +35,7 @@ export const tasksByTeamState = selector({ return tasks .filter(() => { - return true + return true; }) .sort((a, b) => moment(b.createdAt).diff(a.createdAt)); } diff --git a/apps/web/components/pages/error/index.tsx b/apps/web/components/pages/error/index.tsx new file mode 100644 index 000000000..137a40f15 --- /dev/null +++ b/apps/web/components/pages/error/index.tsx @@ -0,0 +1,41 @@ +'use client'; + +import SadCry from '@components/ui/svgs/sad-cry'; +import { Text } from 'lib/components'; +import { useTranslations } from 'next-intl'; +import React from 'react'; + +function ErrorPage({ error, reset }: { error: Error & { digest?: string }; reset: () => void }) { + const t = useTranslations(); + + React.useEffect(() => { + console.error(error); + }, [error]); + + return ( +
+
+ + {t('pages.error.TITLE')} +
+ + + {t('pages.error.HEADING_TITLE')} + +
+ + {t('pages.error.HEADING_DESCRIPTION')} + + +
+ +
+

{JSON.stringify(error.cause)}

+

{error.message}

+

{error.stack}

+
+
+ ); +} + +export default ErrorPage; diff --git a/apps/web/components/pages/maintenance/index.tsx b/apps/web/components/pages/maintenance/index.tsx new file mode 100644 index 000000000..86eadab68 --- /dev/null +++ b/apps/web/components/pages/maintenance/index.tsx @@ -0,0 +1,25 @@ +'use client'; +import { RocketIcon } from '@radix-ui/react-icons'; +import { Text } from 'lib/components'; +import { useTranslations } from 'next-intl'; +function Maintenance() { + const t = useTranslations(); + return ( +
+ +
+ Maintenance +
+ + + {t('pages.maintenance.HEADING_TITLE')} + + + + {t('pages.maintenance.HEADING_DESCRIPTION')} + +
+ ); +} + +export default Maintenance; diff --git a/apps/web/components/pages/task/task-details-aside.tsx b/apps/web/components/pages/task/task-details-aside.tsx index 48611407c..122e90866 100644 --- a/apps/web/components/pages/task/task-details-aside.tsx +++ b/apps/web/components/pages/task/task-details-aside.tsx @@ -19,26 +19,6 @@ const TaskDetailsAside = () => {
{t('common.DETAILS')}
- - {/* TODO */} - {/* Commented icon temporary, will be enable it in future once dynamic implementation done */} - {/*
- printer - download - more -
*/} diff --git a/apps/web/components/ui/svgs/rocket.tsx b/apps/web/components/ui/svgs/rocket.tsx new file mode 100644 index 000000000..b96b5884b --- /dev/null +++ b/apps/web/components/ui/svgs/rocket.tsx @@ -0,0 +1,29 @@ +export const RocketIcon = ({ + width, + height, + fill = '#8C7AE4', + className +}: { + width: number; + height: number; + fill?: string; + className?: string; +}) => { + return ( + + + + ); +}; diff --git a/apps/web/lib/features/activity/user-worked-task.tsx b/apps/web/lib/features/activity/user-worked-task.tsx new file mode 100644 index 000000000..f34300099 --- /dev/null +++ b/apps/web/lib/features/activity/user-worked-task.tsx @@ -0,0 +1,76 @@ +import { OT_Member } from '@app/interfaces'; +import { memo } from 'react'; +import { TaskCard } from '../task/task-card'; +import { useUserSelectedPage } from '@app/hooks/features/useUserSelectedPage'; +import { useTaskFilter } from '../task/task-filters'; +import { Divider, Text } from 'lib/components'; +import { useTranslations } from 'next-intl'; +import { useAuthenticateUser } from '@app/hooks'; + +const UserWorkedTaskTab = ({ member }: { member?: OT_Member }) => { + const profile = useUserSelectedPage(member?.employee?.userId); + const hook = useTaskFilter(profile); + const { user } = useAuthenticateUser(); + + const t = useTranslations(); + + const tasks = hook.tasksFiltered; + const canSeeActivity = profile.userProfile?.id === user?.id || user?.role?.name?.toUpperCase() == 'MANAGER'; + const otherTasks = tasks.filter((t) => + profile.member?.running == true ? t.id !== profile.activeUserTeamTask?.id : t + ); + + return ( +
+ {profile.activeUserTeamTask && canSeeActivity && ( + + )} + + {otherTasks.length > 0 && canSeeActivity && ( +
+ + {t('common.LAST_24_HOURS')} ({otherTasks.length}) + + +
+ )} + +
    + {canSeeActivity && + otherTasks.map((task) => { + return ( +
  • + +
  • + ); + })} +
+
+ ); +}; + +export default memo(UserWorkedTaskTab); diff --git a/apps/web/lib/features/team/user-team-card/index.tsx b/apps/web/lib/features/team/user-team-card/index.tsx index c4ed39c43..aeeddd508 100644 --- a/apps/web/lib/features/team/user-team-card/index.tsx +++ b/apps/web/lib/features/team/user-team-card/index.tsx @@ -188,7 +188,7 @@ export function UserTeamCard({ {/* Card menu */}
{menu}
- + { +const UserTeamActivity = ({ showActivity, member }: { showActivity: boolean; member?: OT_Member }) => { const { timeSlots } = useTimeSlots(true); - const profile = useUserProfilePage(); - const hook = useTaskFilter(profile); const t = useTranslations(); @@ -67,8 +63,7 @@ const UserTeamActivity = ({ showActivity }: { showActivity: boolean }) => { - - {/* */} + @@ -88,4 +83,4 @@ const UserTeamActivity = ({ showActivity }: { showActivity: boolean }) => { ); }; -export default UserTeamActivity; +export default React.memo(UserTeamActivity); diff --git a/apps/web/lib/features/user-activity-tasks.tsx b/apps/web/lib/features/user-activity-tasks.tsx new file mode 100644 index 000000000..56987adf4 --- /dev/null +++ b/apps/web/lib/features/user-activity-tasks.tsx @@ -0,0 +1,47 @@ +import { I_UserProfilePage } from '@app/hooks'; +import { TaskCard } from './task/task-card'; +import { I_TaskFilter } from './task/task-filters'; + +type Props = { + tabFiltered: I_TaskFilter; + profile: I_UserProfilePage; +}; + +/** + * It renders a list of tasks, with the first task being the active task, and the rest being the last + * 24 hours of tasks + * @param - `profile` - The user profile page data. + * @returns A component that displays a user's profile page. + */ +export function UserProfileTask({ profile, tabFiltered }: Props) { + const tasks = tabFiltered.tasksFiltered; + const otherTasks = tasks.filter((t) => + profile.member?.running == true ? t.id !== profile.activeUserTeamTask?.id : t + ); + + return ( +
+
    + {otherTasks.map((task) => { + return ( +
  • + +
  • + ); + })} +
+
+ ); +} diff --git a/apps/web/messages/ar.json b/apps/web/messages/ar.json index 68f22bb5e..73adf78a1 100644 --- a/apps/web/messages/ar.json +++ b/apps/web/messages/ar.json @@ -430,6 +430,15 @@ "offline": { "HEADING_TITLE": "انقطاع الشبكة!", "HEADING_DESCRIPTION": "أنت غير متصل حاليًا، يرجى التحقق من اتصالك بالإنترنت..." + }, + "error": { + "TITLE": "خطأ", + "HEADING_TITLE": "هناك خطأ ما ", + "HEADING_DESCRIPTION": "إذا استمرت المشكلة، قم بإرسال إشارة استغاثة إلى فريق الدعم لدينا." + }, + "maintenance": { + "HEADING_TITLE": "نحن تحت الصيانة", + "HEADING_DESCRIPTION": "نقوم حاليًا بتحديث موقعنا الإلكتروني لخدمتك بشكل أفضل. يرجى التحقق مرة أخرى في وقت لاحق." } }, diff --git a/apps/web/messages/bg.json b/apps/web/messages/bg.json index 0df026cbe..45f9162bb 100644 --- a/apps/web/messages/bg.json +++ b/apps/web/messages/bg.json @@ -433,6 +433,15 @@ "offline": { "HEADING_TITLE": "Мрежата е прекъсната!", "HEADING_DESCRIPTION": "В момента сте извън линия, моля, проверете интернет връзката си..." + }, + "error": { + "TITLE": "грешка!", + "HEADING_TITLE": "Нещо се обърка !", + "HEADING_DESCRIPTION": "Ако проблемът продължава, изпратете сигнал за помощ до нашия екип за поддръжка." + }, + "maintenance": { + "HEADING_TITLE": "Ние сме в процес на поддръжка", + "HEADING_DESCRIPTION": "В момента актуализираме нашия уебсайт, за да ви служим по-добре. Моля, проверете отново по-късно." } }, diff --git a/apps/web/messages/de.json b/apps/web/messages/de.json index fdc439a42..57ce15e08 100644 --- a/apps/web/messages/de.json +++ b/apps/web/messages/de.json @@ -426,6 +426,15 @@ "offline": { "HEADING_TITLE": "Netzwerk getrennt!", "HEADING_DESCRIPTION": "Sie sind derzeit offline, bitte überprüfen Sie Ihre Internetverbindung..." + }, + "error": { + "TITLE": "Error !", + "HEADING_TITLE": "Something went wrong !", + "HEADING_DESCRIPTION": "If the problem persists, send a distress signal to our support team." + }, + "maintenance": { + "HEADING_TITLE": "We zijn in onderhoud ", + "HEADING_DESCRIPTION": "Momenteel zijn wij onze website aan het vernieuwen om u nog beter van dienst te kunnen zijn. Kom later nog eens terug." } }, "timer": { diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 6e2144a63..399ed42a2 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -429,6 +429,15 @@ "offline": { "HEADING_TITLE": "Network Disconnected!", "HEADING_DESCRIPTION": "You are currently Offline, please check your internet connection..." + }, + "error": { + "TITLE": "Error !", + "HEADING_TITLE": "Something went wrong !", + "HEADING_DESCRIPTION": "If the problem persists, send a distress signal to our support team." + }, + "maintenance": { + "HEADING_TITLE": "We are Under Maintenance", + "HEADING_DESCRIPTION": "We are currently updating our website to serve you better. Please check back later." } }, diff --git a/apps/web/messages/es.json b/apps/web/messages/es.json index 0a0b07061..c5948e717 100644 --- a/apps/web/messages/es.json +++ b/apps/web/messages/es.json @@ -404,6 +404,15 @@ "offline": { "HEADING_TITLE": "¡Red Desconectada!", "HEADING_DESCRIPTION": "Actualmente estás desconectado, por favor verifica tu conexión a Internet..." + }, + "error": { + "TITLE": "Error !", + "HEADING_TITLE": "Algo salió mal !", + "HEADING_DESCRIPTION": "Si el problema persiste, envíe una señal de socorro a nuestro equipo de soporte." + }, + "maintenance": { + "HEADING_TITLE": "Estamos en Mantenimiento", + "HEADING_DESCRIPTION": "Actualmente estamos actualizando nuestro sitio web para brindarle un mejor servicio. Por favor, vuelva más tarde." } }, "timer": { diff --git a/apps/web/messages/fr.json b/apps/web/messages/fr.json index 17cf5f901..72e08f8e4 100644 --- a/apps/web/messages/fr.json +++ b/apps/web/messages/fr.json @@ -421,6 +421,15 @@ "offline": { "HEADING_TITLE": "Réseau déconnecté !", "HEADING_DESCRIPTION": "Vous êtes actuellement hors ligne, veuillez vérifier votre connexion Internet..." + }, + "error": { + "TITLE": "Erreur !", + "HEADING_TITLE": "Quelque chose s'est mal passé !", + "HEADING_DESCRIPTION": "Si le problème persiste, envoyez un signal de détresse à notre équipe d'assistance." + }, + "maintenance": { + "HEADING_TITLE": "Nous sommes en cours de maintenance", + "HEADING_DESCRIPTION": "Nous mettons actuellement à jour notre site Web pour mieux vous servir. Veuillez revenir plus tard." } }, diff --git a/apps/web/messages/he.json b/apps/web/messages/he.json index a5c59e886..35497a8cf 100644 --- a/apps/web/messages/he.json +++ b/apps/web/messages/he.json @@ -421,6 +421,15 @@ "offline": { "HEADING_TITLE": "רשת מנותקת!", "HEADING_DESCRIPTION": "אתה לא מחובר כרגע, בבקשה בדוק את חיבור האינטרנט שלך..." + }, + "error": { + "TITLE": "שגיאה", + "HEADING_TITLE": "משהו השתבש", + "HEADING_DESCRIPTION": "אם הבעיה נמשכת, שלח אות מצוקה לצוות התמיכה שלנו" + }, + "maintenance": { + "HEADING_TITLE": "אנחנו בשלבי תחזוקה ", + "HEADING_DESCRIPTION": "אנו מעדכנים כעת את האתר שלנו כדי לשרת אותך טוב יותר. אנא בדוק שוב מאוחר יותר." } }, "timer": { diff --git a/apps/web/messages/it.json b/apps/web/messages/it.json index 3ac31914c..e8c0a64cb 100644 --- a/apps/web/messages/it.json +++ b/apps/web/messages/it.json @@ -425,6 +425,15 @@ "offline": { "HEADING_TITLE": "Rete Disconnessa!", "HEADING_DESCRIPTION": "Attualmente sei offline, controlla la tua connessione Internet..." + }, + "error": { + "TITLE": "Errore!", + "HEADING_TITLE": "Qualcosa è andato storto !", + "HEADING_DESCRIPTION": "Se il problema persiste, invia un segnale di soccorso al nostro team di supporto." + }, + "maintenance": { + "HEADING_TITLE": "Siamo in manutenzione", + "HEADING_DESCRIPTION": "Stiamo attualmente aggiornando il nostro sito web per servirti meglio. Per favore controllare più tardi." } }, diff --git a/apps/web/messages/nl.json b/apps/web/messages/nl.json index 1bd684dfe..04684b954 100644 --- a/apps/web/messages/nl.json +++ b/apps/web/messages/nl.json @@ -423,6 +423,15 @@ "offline": { "HEADING_TITLE": "Netwerk Verbroken!", "HEADING_DESCRIPTION": "U bent momenteel offline, controleer uw internetverbinding..." + }, + "error": { + "TITLE": "Fout !", + "HEADING_TITLE": "Er is iets fout gegaan !", + "HEADING_DESCRIPTION": "Als het probleem aanhoudt, stuur dan een noodsignaal naar ons ondersteuningsteam." + }, + "maintenance": { + "HEADING_TITLE": "Wij zijn in onderhoud", + "HEADING_DESCRIPTION": "Momenteel zijn wij onze website aan het vernieuwen om u nog beter van dienst te kunnen zijn. Kom later nog eens terug." } }, diff --git a/apps/web/messages/pl.json b/apps/web/messages/pl.json index 99e7f79f6..30d961ea4 100644 --- a/apps/web/messages/pl.json +++ b/apps/web/messages/pl.json @@ -425,6 +425,15 @@ "offline": { "HEADING_TITLE": "Rozłączono sieć!", "HEADING_DESCRIPTION": "Jesteś obecnie offline, sprawdź swoje połączenie z internetem..." + }, + "error": { + "TITLE": "Błąd !", + "HEADING_TITLE": "Coś poszło nie tak !", + "HEADING_DESCRIPTION": "Jeśli problem będzie się powtarzał, wyślij sygnał o niebezpieczeństwie do naszego zespołu wsparcia." + }, + "maintenance": { + "HEADING_TITLE": "Jesteśmy w trakcie konserwacji", + "HEADING_DESCRIPTION": "Obecnie aktualizujemy naszą stronę internetową, aby lepiej Ci służyć. Sprawdź ponownie później." } }, diff --git a/apps/web/messages/pt.json b/apps/web/messages/pt.json index 04e5615ea..5e2a5ddd8 100644 --- a/apps/web/messages/pt.json +++ b/apps/web/messages/pt.json @@ -425,6 +425,15 @@ "offline": { "HEADING_TITLE": "Rede Desconectada!", "HEADING_DESCRIPTION": "Você está atualmente offline, por favor, verifique sua conexão com a Internet..." + }, + "error": { + "TITLE": "Erro!", + "HEADING_TITLE": "Algo deu errado!", + "HEADING_DESCRIPTION": "Se o problema persistir, envie um sinal de socorro à nossa equipe de suporte." + }, + "maintenance": { + "HEADING_TITLE": "Estamos em manutenção", + "HEADING_DESCRIPTION": "Estamos atualizando nosso site para melhor atendê-lo. Por favor, volte mais tarde." } }, diff --git a/apps/web/messages/ru.json b/apps/web/messages/ru.json index 71b1d7766..ea18ec5d1 100644 --- a/apps/web/messages/ru.json +++ b/apps/web/messages/ru.json @@ -425,6 +425,15 @@ "offline": { "HEADING_TITLE": "Сеть отключена!", "HEADING_DESCRIPTION": "В настоящее время вы не подключены к Интернету, проверьте ваше соединение..." + }, + "error": { + "TITLE": "Ошибка !", + "HEADING_TITLE": "Что-то пошло не так !", + "HEADING_DESCRIPTION": "Если проблема не устранена, отправьте сигнал бедствия в нашу службу поддержки." + }, + "maintenance": { + "HEADING_TITLE": "Мы на обслуживании ", + "HEADING_DESCRIPTION": "В настоящее время мы обновляем наш веб-сайт, чтобы лучше обслуживать вас. Пожалуйста, зайдите позже." } }, diff --git a/apps/web/messages/zh.json b/apps/web/messages/zh.json index 4e7c40ad4..e123c980d 100644 --- a/apps/web/messages/zh.json +++ b/apps/web/messages/zh.json @@ -400,6 +400,15 @@ "offline": { "HEADING_TITLE": "网络断开连接!", "HEADING_DESCRIPTION": "您目前处于离线状态,请检查您的互联网连接..." + }, + "error": { + "TITLE": "錯誤 !", + "HEADING_TITLE": "出了點問題 !", + "HEADING_DESCRIPTION": "如果問題仍然存在,請向我們的支援團隊發送求救訊號。" + }, + "maintenance": { + "HEADING_TITLE": "我們正在維護中", + "HEADING_DESCRIPTION": "目前,我們正在更新我們的網站,以便更好地為您服務。請稍後再回來查看。" } }, diff --git a/apps/web/public/locales/ar/common.json b/apps/web/public/locales/ar/common.json index 916f6581b..43af67417 100644 --- a/apps/web/public/locales/ar/common.json +++ b/apps/web/public/locales/ar/common.json @@ -430,6 +430,15 @@ "offline": { "HEADING_TITLE": "انقطاع الشبكة!", "HEADING_DESCRIPTION": "أنت غير متصل حاليًا، يرجى التحقق من اتصالك بالإنترنت..." + }, + "error": { + "TITLE": "خطأ", + "HEADING_TITLE": "هناك خطأ ما ", + "HEADING_DESCRIPTION": "إذا استمرت المشكلة، قم بإرسال إشارة استغاثة إلى فريق الدعم لدينا." + }, + "maintenance": { + "HEADING_TITLE": "نحن تحت الصيانة", + "HEADING_DESCRIPTION": "نقوم حاليًا بتحديث موقعنا الإلكتروني لخدمتك بشكل أفضل. يرجى التحقق مرة أخرى في وقت لاحق." } }, diff --git a/apps/web/public/locales/bg/common.json b/apps/web/public/locales/bg/common.json index 374f637f8..34063e44e 100644 --- a/apps/web/public/locales/bg/common.json +++ b/apps/web/public/locales/bg/common.json @@ -435,6 +435,15 @@ "offline": { "HEADING_TITLE": "Мрежата е прекъсната!", "HEADING_DESCRIPTION": "В момента сте извън линия, моля, проверете интернет връзката си..." + }, + "error": { + "TITLE": "грешка!", + "HEADING_TITLE": "Нещо се обърка !", + "HEADING_DESCRIPTION": "Ако проблемът продължава, изпратете сигнал за помощ до нашия екип за поддръжка." + }, + "maintenance": { + "HEADING_TITLE": "Ние сме в процес на поддръжка", + "HEADING_DESCRIPTION": "В момента актуализираме нашия уебсайт, за да ви служим по-добре. Моля, проверете отново по-късно." } }, diff --git a/apps/web/public/locales/de/common.json b/apps/web/public/locales/de/common.json index 6f4c5e03a..551cac721 100644 --- a/apps/web/public/locales/de/common.json +++ b/apps/web/public/locales/de/common.json @@ -426,6 +426,15 @@ "offline": { "HEADING_TITLE": "Netzwerk getrennt!", "HEADING_DESCRIPTION": "Sie sind derzeit offline, bitte überprüfen Sie Ihre Internetverbindung..." + }, + "error": { + "TITLE": "Error !", + "HEADING_TITLE": "Something went wrong !", + "HEADING_DESCRIPTION": "If the problem persists, send a distress signal to our support team." + }, + "maintenance": { + "HEADING_TITLE": "我們正在維護中", + "HEADING_DESCRIPTION": "目前,我們正在更新我們的網站,以便更好地為您服務。請稍後再回來查看。" } }, "timer": { diff --git a/apps/web/public/locales/en/common.json b/apps/web/public/locales/en/common.json index 849a42b33..7ae8476eb 100644 --- a/apps/web/public/locales/en/common.json +++ b/apps/web/public/locales/en/common.json @@ -429,6 +429,15 @@ "offline": { "HEADING_TITLE": "Network Disconnected!", "HEADING_DESCRIPTION": "You are currently Offline, please check your internet connection..." + }, + "error": { + "TITLE": "Error !", + "HEADING_TITLE": "Something went wrong !", + "HEADING_DESCRIPTION": "If the problem persists, send a distress signal to our support team." + }, + "maintenance": { + "HEADING_TITLE": "We are Under Maintenance", + "HEADING_DESCRIPTION": "We are currently updating our website to serve you better. Please check back later." } }, diff --git a/apps/web/public/locales/es/common.json b/apps/web/public/locales/es/common.json index 8ba68a55c..75c2afb26 100644 --- a/apps/web/public/locales/es/common.json +++ b/apps/web/public/locales/es/common.json @@ -410,6 +410,15 @@ "offline": { "HEADING_TITLE": "¡Red Desconectada!", "HEADING_DESCRIPTION": "Actualmente estás desconectado, por favor verifica tu conexión a Internet..." + }, + "error": { + "TITLE": "Error !", + "HEADING_TITLE": "Algo salió mal !", + "HEADING_DESCRIPTION": "Si el problema persiste, envíe una señal de socorro a nuestro equipo de soporte." + }, + "maintenance": { + "HEADING_TITLE": "Estamos en Mantenimiento", + "HEADING_DESCRIPTION": "Actualmente estamos actualizando nuestro sitio web para brindarle un mejor servicio. Por favor, vuelva más tarde." } }, "timer": { diff --git a/apps/web/public/locales/fr/common.json b/apps/web/public/locales/fr/common.json index fc3c29fc4..67102f9eb 100644 --- a/apps/web/public/locales/fr/common.json +++ b/apps/web/public/locales/fr/common.json @@ -421,6 +421,15 @@ "offline": { "HEADING_TITLE": "Réseau déconnecté !", "HEADING_DESCRIPTION": "Vous êtes actuellement hors ligne, veuillez vérifier votre connexion Internet..." + }, + "error": { + "TITLE": "Erreur !", + "HEADING_TITLE": "Quelque chose s'est mal passé !", + "HEADING_DESCRIPTION": "Si le problème persiste, envoyez un signal de détresse à notre équipe d'assistance." + }, + "maintenance": { + "HEADING_TITLE": "Nous sommes en cours de maintenance", + "HEADING_DESCRIPTION": "Nous mettons actuellement à jour notre site Web pour mieux vous servir. Veuillez revenir plus tard." } }, diff --git a/apps/web/public/locales/he/common.json b/apps/web/public/locales/he/common.json index eb9ea356d..19da9f2d2 100644 --- a/apps/web/public/locales/he/common.json +++ b/apps/web/public/locales/he/common.json @@ -421,6 +421,15 @@ "offline": { "HEADING_TITLE": "רשת מנותקת!", "HEADING_DESCRIPTION": "אתה לא מחובר כרגע, בבקשה בדוק את חיבור האינטרנט שלך..." + }, + "error": { + "TITLE": "שגיאה", + "HEADING_TITLE": "משהו השתבש", + "HEADING_DESCRIPTION": "אם הבעיה נמשכת, שלח אות מצוקה לצוות התמיכה שלנו" + }, + "maintenance": { + "HEADING_TITLE": "אנחנו בשלבי תחזוקה ", + "HEADING_DESCRIPTION": "אנו מעדכנים כעת את האתר שלנו כדי לשרת אותך טוב יותר. אנא בדוק שוב מאוחר יותר." } }, "timer": { diff --git a/apps/web/public/locales/it/common.json b/apps/web/public/locales/it/common.json index 0b106c770..78ced5d84 100644 --- a/apps/web/public/locales/it/common.json +++ b/apps/web/public/locales/it/common.json @@ -425,6 +425,15 @@ "offline": { "HEADING_TITLE": "Rete Disconnessa!", "HEADING_DESCRIPTION": "Attualmente sei offline, controlla la tua connessione Internet..." + }, + "error": { + "TITLE": "Errore !", + "HEADING_TITLE": "Qualcosa è andato storto !", + "HEADING_DESCRIPTION": "Se il problema persiste, invia un segnale di soccorso al nostro team di supporto." + }, + "maintenance": { + "HEADING_TITLE": "Siamo in manutenzione", + "HEADING_DESCRIPTION": "Stiamo attualmente aggiornando il nostro sito web per servirti meglio. Per favore controllare più tardi." } }, diff --git a/apps/web/public/locales/nl/common.json b/apps/web/public/locales/nl/common.json index 5599dc2ea..7a1bb0209 100644 --- a/apps/web/public/locales/nl/common.json +++ b/apps/web/public/locales/nl/common.json @@ -423,6 +423,15 @@ "offline": { "HEADING_TITLE": "Netwerk Verbroken!", "HEADING_DESCRIPTION": "U bent momenteel offline, controleer uw internetverbinding..." + }, + "error": { + "TITLE": "Fout !", + "HEADING_TITLE": "Er is iets fout gegaan !", + "HEADING_DESCRIPTION": "Als het probleem aanhoudt, stuur dan een noodsignaal naar ons ondersteuningsteam." + }, + "maintenance": { + "HEADING_TITLE": "Wij zijn in onderhoud", + "HEADING_DESCRIPTION": "Momenteel zijn wij onze website aan het vernieuwen om u nog beter van dienst te kunnen zijn. Kom later nog eens terug." } }, diff --git a/apps/web/public/locales/pl/common.json b/apps/web/public/locales/pl/common.json index 81275d72b..119fbfc26 100644 --- a/apps/web/public/locales/pl/common.json +++ b/apps/web/public/locales/pl/common.json @@ -425,6 +425,15 @@ "offline": { "HEADING_TITLE": "Rozłączono sieć!", "HEADING_DESCRIPTION": "Jesteś obecnie offline, sprawdź swoje połączenie z internetem..." + }, + "error": { + "TITLE": "Błąd !", + "HEADING_TITLE": "Coś poszło nie tak !", + "HEADING_DESCRIPTION": "Jeśli problem będzie się powtarzał, wyślij sygnał o niebezpieczeństwie do naszego zespołu wsparcia." + }, + "maintenance": { + "HEADING_TITLE": "Jesteśmy w trakcie konserwacji", + "HEADING_DESCRIPTION": "Obecnie aktualizujemy naszą stronę internetową, aby lepiej Ci służyć. Sprawdź ponownie później." } }, diff --git a/apps/web/public/locales/pt/common.json b/apps/web/public/locales/pt/common.json index 7280a9411..9117cfaaf 100644 --- a/apps/web/public/locales/pt/common.json +++ b/apps/web/public/locales/pt/common.json @@ -425,6 +425,15 @@ "offline": { "HEADING_TITLE": "Rede Desconectada!", "HEADING_DESCRIPTION": "Você está atualmente offline, por favor, verifique sua conexão com a Internet..." + }, + "error": { + "TITLE": "Erro!", + "HEADING_TITLE": "Algo deu errado!", + "HEADING_DESCRIPTION": "Se o problema persistir, envie um sinal de socorro à nossa equipe de suporte." + }, + "maintenance": { + "HEADING_TITLE": "Estamos em manutenção", + "HEADING_DESCRIPTION": "Estamos atualizando nosso site para melhor atendê-lo. Por favor, volte mais tarde." } }, diff --git a/apps/web/public/locales/ru/common.json b/apps/web/public/locales/ru/common.json index 749a209a7..4d594e3a6 100644 --- a/apps/web/public/locales/ru/common.json +++ b/apps/web/public/locales/ru/common.json @@ -424,6 +424,15 @@ "offline": { "HEADING_TITLE": "Сеть отключена!", "HEADING_DESCRIPTION": "В настоящее время вы не подключены к Интернету, проверьте ваше соединение..." + }, + "error": { + "TITLE": "Ошибка !", + "HEADING_TITLE": "Что-то пошло не так !", + "HEADING_DESCRIPTION": "Если проблема не устранена, отправьте сигнал бедствия в нашу службу поддержки." + }, + "maintenance": { + "HEADING_TITLE": "Мы на обслуживании ", + "HEADING_DESCRIPTION": "В настоящее время мы обновляем наш веб-сайт, чтобы лучше обслуживать вас. Пожалуйста, зайдите позже." } }, diff --git a/apps/web/public/locales/zh/common.json b/apps/web/public/locales/zh/common.json index 8396e0bb8..ec79e3a88 100644 --- a/apps/web/public/locales/zh/common.json +++ b/apps/web/public/locales/zh/common.json @@ -400,6 +400,15 @@ "offline": { "HEADING_TITLE": "网络断开连接!", "HEADING_DESCRIPTION": "您目前处于离线状态,请检查您的互联网连接..." + }, + "error": { + "TITLE": "錯誤 !", + "HEADING_TITLE": "出了點問題 !", + "HEADING_DESCRIPTION": "如果問題仍然存在,請向我們的支援團隊發送求救訊號。" + }, + "maintenance": { + "HEADING_TITLE": "我們正在維護中", + "HEADING_DESCRIPTION": "目前,我們正在更新我們的網站,以便更好地為您服務。請稍後再回來查看。" } },