fix: eslint warnings (#252)
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
'use client';
|
||||
import { createContext, useState, useEffect, useContext } from 'react';
|
||||
import { ProjectRoleType, TokenContextType, TokenType } from '@/types/user';
|
||||
import { TokenProps } from '@/types/user';
|
||||
import { useRouter, usePathname } from '@/src/i18n/routing';
|
||||
import { createContext, useState, useEffect } from 'react';
|
||||
import { addToast } from '@heroui/react';
|
||||
import {
|
||||
isSignedIn as tokenIsSinedIn,
|
||||
isAdmin as tokenIsAdmin,
|
||||
@@ -13,7 +11,10 @@ import {
|
||||
checkSignInPage as tokenCheckSignInPage,
|
||||
fetchMyRoles,
|
||||
} from './token';
|
||||
import { addToast } from '@heroui/react';
|
||||
import { logError } from './errorHandler';
|
||||
import { ProjectRoleType, TokenContextType, TokenType } from '@/types/user';
|
||||
import { TokenProps } from '@/types/user';
|
||||
import { useRouter, usePathname } from '@/src/i18n/routing';
|
||||
const LOCAL_STORAGE_KEY = 'unittcms-auth-token';
|
||||
|
||||
function storeTokenToLocalStorage(token: TokenType) {
|
||||
@@ -31,20 +32,20 @@ const defaultContext = {
|
||||
},
|
||||
isSignedIn: () => false,
|
||||
isAdmin: () => false,
|
||||
isProjectOwner: (projectId: number) => {
|
||||
isProjectOwner: () => {
|
||||
return false;
|
||||
},
|
||||
isProjectManager: (projectId: number) => {
|
||||
isProjectManager: () => {
|
||||
return false;
|
||||
},
|
||||
isProjectDeveloper: (projectId: number) => {
|
||||
isProjectDeveloper: () => {
|
||||
return false;
|
||||
},
|
||||
isProjectReporter: (projectId: number) => {
|
||||
isProjectReporter: () => {
|
||||
return false;
|
||||
},
|
||||
refreshProjectRoles: () => {},
|
||||
setToken: (token: TokenType) => {},
|
||||
setToken: () => {},
|
||||
storeTokenToLocalStorage,
|
||||
removeTokenFromLocalStorage,
|
||||
};
|
||||
@@ -94,8 +95,8 @@ const TokenProvider = ({ toastMessages, locale, children }: TokenProps) => {
|
||||
try {
|
||||
const data = await fetchMyRoles(token.access_token);
|
||||
setProjectRoles(data);
|
||||
} catch (error: any) {
|
||||
console.error('Error in effect:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching project roles', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,10 +155,12 @@ const TokenProvider = ({ toastMessages, locale, children }: TokenProps) => {
|
||||
|
||||
router.push(ret.redirectPath, { locale: locale });
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [pathname, hasRestoreFinished]);
|
||||
|
||||
useEffect(() => {
|
||||
refreshProjectRoles();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [hasRestoreFinished, token]);
|
||||
|
||||
return <TokenContext.Provider value={tokenContext}>{children}</TokenContext.Provider>;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { logError } from '@/utils/errorHandler';
|
||||
import Config from '@/config/config';
|
||||
const apiServer = Config.apiServer;
|
||||
import { CaseType } from '@/types/case';
|
||||
@@ -20,8 +21,8 @@ async function fetchCase(jwt: string, caseId: number) {
|
||||
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,8 +44,8 @@ async function fetchCases(jwt: string, folderId: number) {
|
||||
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,9 +80,8 @@ async function createCase(jwt: string, folderId: string, title: string, descript
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error creating case:', error);
|
||||
throw error;
|
||||
} catch (error: unknown) {
|
||||
logError('Error creating case', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,9 +103,8 @@ async function updateCase(jwt: string, updateCaseData: CaseType) {
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error updating project:', error);
|
||||
throw error;
|
||||
} catch (error: unknown) {
|
||||
logError('Error updating project', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,9 +125,8 @@ async function deleteCases(jwt: string, deleteCaseIds: number[], projectId: numb
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('Error deleting cases:', error);
|
||||
throw error;
|
||||
} catch (error: unknown) {
|
||||
logError('Error deleting cases', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,8 +158,8 @@ async function exportCases(jwt: string, folderId: number, type: string) {
|
||||
a.click();
|
||||
a.remove();
|
||||
window.URL.revokeObjectURL(objectUrl);
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data', error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
10
frontend/utils/errorHandler.ts
Normal file
10
frontend/utils/errorHandler.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Error handler utility for logging errors
|
||||
*/
|
||||
export const logError = (context: string, error: unknown) => {
|
||||
if (error instanceof Error) {
|
||||
console.error(`${context}:`, error.message);
|
||||
} else {
|
||||
console.error(`${context}:`, error);
|
||||
}
|
||||
};
|
||||
@@ -25,5 +25,5 @@ export const useFormGuard = (isDirty: boolean, confirmText: string) => {
|
||||
window.removeEventListener('beforeunload', handleBeforeUnload);
|
||||
window.removeEventListener('click', handleClick, true);
|
||||
};
|
||||
}, [isDirty]);
|
||||
}, [confirmText, isDirty]);
|
||||
};
|
||||
|
||||
@@ -1,32 +1,7 @@
|
||||
import { logError } from '@/utils/errorHandler';
|
||||
import Config from '@/config/config';
|
||||
const apiServer = Config.apiServer;
|
||||
|
||||
/**
|
||||
* fetch project
|
||||
*/
|
||||
async function fetchProject(jwt: string, projectId: number) {
|
||||
const url = `${apiServer}/projects/${projectId}`;
|
||||
|
||||
try {
|
||||
const response = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${jwt}`,
|
||||
},
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fetch projects (public and user own projects)
|
||||
*/
|
||||
@@ -48,8 +23,34 @@ async function fetchProjects(jwt: string) {
|
||||
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fetch project
|
||||
*/
|
||||
async function fetchProject(jwt: string, projectId: number) {
|
||||
const url = `${apiServer}/projects/${projectId}`;
|
||||
|
||||
try {
|
||||
const response = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${jwt}`,
|
||||
},
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,8 +75,8 @@ async function fetchMyProjects(jwt: string) {
|
||||
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,8 +108,8 @@ async function createProject(jwt: string, name: string, detail: string, isPublic
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error creating new project:', error);
|
||||
} catch (error: unknown) {
|
||||
logError('Error creating new project:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@@ -141,8 +142,8 @@ async function updateProject(jwt: string, projectId: number, name: string, detai
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error updating project:', error);
|
||||
} catch (error: unknown) {
|
||||
logError('Error updating project:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@@ -166,8 +167,8 @@ async function deleteProject(jwt: string, projectId: number) {
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('Error deleting project:', error);
|
||||
} catch (error: unknown) {
|
||||
logError('Error deleting project:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { logError } from '@/utils/errorHandler';
|
||||
import { ProjectRoleType, TokenType } from '@/types/user';
|
||||
import { roles, memberRoles } from '@/config/selection';
|
||||
import Config from '@/config/config';
|
||||
@@ -56,8 +57,8 @@ async function fetchMyRoles(jwt: string) {
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +166,7 @@ const isPrivatePath = (pathname: string) => {
|
||||
};
|
||||
|
||||
function checkSignInPage(token: TokenType, pathname: string) {
|
||||
let ret = {
|
||||
const ret = {
|
||||
ok: true,
|
||||
reason: '',
|
||||
redirectPath: '',
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { logError } from '@/utils/errorHandler';
|
||||
import Config from '@/config/config';
|
||||
const apiServer = Config.apiServer;
|
||||
|
||||
@@ -19,8 +20,8 @@ async function findUser(jwt: string, userId: number) {
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,8 +43,8 @@ async function searchUsers(jwt: string, projectId: number, searchText: string) {
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,8 +71,8 @@ async function updateUserRole(jwt: string, userId: number, newRole: number) {
|
||||
}
|
||||
const data = await response.json();
|
||||
return data;
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching data:', error.message);
|
||||
} catch (error: unknown) {
|
||||
logError('Error fetching data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user