diff --git a/.cspell.json b/.cspell.json
index 48b44a18c..3377a8504 100644
--- a/.cspell.json
+++ b/.cspell.json
@@ -143,6 +143,7 @@
"apistage",
"flaticon",
"VERSONS",
+ "vertificalline",
"Tongatapu",
"Moresby",
"Pago",
@@ -300,19 +301,24 @@
"Chami",
"Mazen",
"Heinze",
+ "Kanbanboard",
+ "Kolkata",
"Holmgren",
"Jamon",
"Rickert",
"Metral",
"subsquently",
"Syle",
+ "teamtask",
"imagebutton",
"hwba",
"plasmohq",
"Proguard",
"horcrux",
"dimesions",
- "Ordereds"
+ "Ordereds",
+ "uidotdev",
+ "usehooks"
],
"useGitignore": true,
"ignorePaths": [
diff --git a/apps/web/app/[locale]/kanban/page.tsx b/apps/web/app/[locale]/kanban/page.tsx
index 0618a0f33..7d42474fb 100644
--- a/apps/web/app/[locale]/kanban/page.tsx
+++ b/apps/web/app/[locale]/kanban/page.tsx
@@ -15,6 +15,7 @@ import Image from 'next/image';
import { useState } from 'react';
import { useTranslations } from 'next-intl';
import { useParams } from 'next/navigation';
+import { OT_Member } from '@app/interfaces';
const Kanban = () => {
const { data } = useKanban();
@@ -33,7 +34,8 @@ const Kanban = () => {
];
const imageRadius = 20;
- const numberOfImagesDisplayed = 4;
+ const numberOfImagesDisplayed = 3;
+
const activeTeamMembers = activeTeam?.members ? activeTeam.members : [];
const totalLength = (activeTeamMembers.length + 1) * imageRadius;
@@ -47,32 +49,37 @@ const Kanban = () => {
08:00 ( UTC +04:30 )
-
+
- {activeTeamMembers.map((image: any, index: number) => {
- if (index < numberOfImagesDisplayed) {
+ {activeTeamMembers.filter((_:any, index: number) => {
+ return index < numberOfImagesDisplayed
+ }).map((image: OT_Member, index: number) => {
return (
-
-
+
);
- }
})}
- {activeTeamMembers.length > 4 && (
+ {activeTeamMembers.length > numberOfImagesDisplayed && (
{activeTeamMembers.length - numberOfImagesDisplayed}+
diff --git a/apps/web/app/[locale]/page.tsx b/apps/web/app/[locale]/page.tsx
index fa8e42978..ef6a39b83 100644
--- a/apps/web/app/[locale]/page.tsx
+++ b/apps/web/app/[locale]/page.tsx
@@ -23,7 +23,7 @@ import { useState } from 'react';
import { IssuesView } from '@app/constants';
import { TableCellsIcon, QueueListIcon, Squares2X2Icon } from '@heroicons/react/24/solid';
import { useNetworkState } from '@uidotdev/usehooks';
-import KanbanIcon from '@components/ui/svgs/kanaban';
+import KanbanIcon from '@components/ui/svgs/kanban';
import Offline from '@components/pages/offline';
import UserTeamTableHeader from 'lib/features/team/user-team-table/user-team-table-header';
import { useTranslations } from 'next-intl';
@@ -51,7 +51,10 @@ function MainPage({ pageProps }: AppProps
) {
const { isTeamMember, isTrackingEnabled, activeTeam } = useOrganizationTeams();
- const breadcrumb = [{title: JSON.parse(t('pages.home.BREADCRUMB')), href: '/'}, { title: activeTeam?.name || '', href:'/'}];
+ const breadcrumb = [
+ { title: JSON.parse(t('pages.home.BREADCRUMB')), href: '/' },
+ { title: activeTeam?.name || '', href: '/' }
+ ];
const [view, setView] = useState(IssuesView.CARDS);
const { online } = useNetworkState();
@@ -137,7 +140,7 @@ function MainPage({ pageProps }: AppProps) {
{
setActiveLanguageId(getActiveLanguageIdCookie());
if (user) {
- return queryCall(user.role.isSystem).then((res) => {
+ return queryCall(user.role.isSystem).then((res) => {
setLanguages(
- res?.data?.data?.items.filter((item: any) => APPLICATION_LANGUAGES_CODE.includes(item.code)) || []
+ res?.data?.items.filter((item: any) => APPLICATION_LANGUAGES_CODE.includes(item.code)) || []
);
return res;
});
diff --git a/apps/web/app/hooks/useLanguage.ts b/apps/web/app/hooks/useLanguage.ts
index ebbd89d44..78277befd 100644
--- a/apps/web/app/hooks/useLanguage.ts
+++ b/apps/web/app/hooks/useLanguage.ts
@@ -28,6 +28,7 @@ export function useLanguage() {
// Navigation to force rerender
// router.push({ pathname: router.pathname, query: router.query }, undefined, { locale: newLanguage });
}
+ // router.refresh();
},
[router, i18n]
);
diff --git a/apps/web/components/ui/svgs/kanaban.tsx b/apps/web/components/ui/svgs/kanban.tsx
similarity index 100%
rename from apps/web/components/ui/svgs/kanaban.tsx
rename to apps/web/components/ui/svgs/kanban.tsx
diff --git a/apps/web/lib/settings/personal-setting-form.tsx b/apps/web/lib/settings/personal-setting-form.tsx
index b3f236da3..5c9deb968 100644
--- a/apps/web/lib/settings/personal-setting-form.tsx
+++ b/apps/web/lib/settings/personal-setting-form.tsx
@@ -19,6 +19,7 @@ import validator from 'validator';
import { EmailResetModal } from './email-reset-modal';
import { LanguageDropDown } from './language-dropdown';
import { TimezoneDropDown } from './timezone-dropdown';
+import { useRouter } from 'next/navigation';
interface IValidation {
email: boolean;
@@ -41,6 +42,7 @@ export const PersonalSettingForm = () => {
phone: true
});
const t = useTranslations();
+ const router = useRouter();
const handleFullnameChange = useCallback(() => {
const values = getValues();
@@ -137,8 +139,10 @@ export const PersonalSettingForm = () => {
id: user.id
});
}
+
+ router.replace(`/${newLanguage}/settings/personal`);
},
- [user, setValue, updateAvatar, changeLanguage]
+ [user, setValue, updateAvatar, changeLanguage, router]
);
return (
diff --git a/apps/web/middleware.ts b/apps/web/middleware.ts
index adc4b8899..0e876aa0a 100644
--- a/apps/web/middleware.ts
+++ b/apps/web/middleware.ts
@@ -16,13 +16,14 @@ export const config = {
matcher: [
'/',
'/(en|de|ar|bg|zh|nl|de|he|it|pl|pt|ru|es|fr)/:path*',
- // '/((?!_next|_vercel|.*\\..*).*)',
+ '/((?!api|_next|_vercel|.*\\..*).*)',
'/auth/(.*)',
'/profile/:path*',
'/settings/(.*)',
'/task(.*)',
'/meet(.*)',
- '/board(.*)'
+ '/board(.*)',
+ '/kanban(.*)'
]
};
@@ -31,7 +32,7 @@ export async function middleware(request: NextRequest) {
defaultLocale: 'en',
locales: ['en', 'de', 'ar', 'bg', 'zh', 'nl', 'de', 'he', 'it', 'pl', 'pt', 'ru', 'es', 'fr'],
// pathnames,
- localePrefix: 'never'
+ localePrefix: 'as-needed'
});
// Setting cookies on the response