Files
worklenz/worklenz-frontend/src/api/home-page/home-page.api.service.ts
chamikaJ 65af5f659e refactor(build): remove Gruntfile and transition to npm scripts for build process
- Deleted Gruntfile.js to streamline the build process.
- Updated package.json to include new npm scripts for build, clean, and watch tasks.
- Added dependencies for concurrent execution and CSRF token management.
- Integrated csrf-sync for improved CSRF protection in the application.
- Refactored app and API client to utilize the new CSRF token management approach.
2025-05-30 10:56:19 +05:30

83 lines
2.7 KiB
TypeScript

import { BaseQueryFn, createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
import { API_BASE_URL } from '@/shared/constants';
import { IServerResponse } from '@/types/common.types';
import { toQueryString } from '@/utils/toQueryString';
import { IHomeTasksModel, IHomeTasksConfig } from '@/types/home/home-page.types';
import { IMyTask } from '@/types/home/my-tasks.types';
import { IProject } from '@/types/project/project.types';
import { getCsrfToken, refreshCsrfToken } from '../api-client';
import config from '@/config/env';
const rootUrl = '/home';
const api = createApi({
reducerPath: 'homePageApi',
baseQuery: fetchBaseQuery({
baseUrl: `${config.apiUrl}${API_BASE_URL}`,
prepareHeaders: async headers => {
// Get CSRF token, refresh if needed
let token = getCsrfToken();
if (!token) {
token = await refreshCsrfToken();
}
if (token) {
headers.set('X-CSRF-Token', token);
}
headers.set('Content-Type', 'application/json');
return headers;
},
credentials: 'include',
}),
tagTypes: ['personalTasks', 'projects', 'teamProjects'],
endpoints: builder => ({
getPersonalTasks: builder.query<IServerResponse<IMyTask[]>, void>({
query: () => `${rootUrl}/personal-tasks`,
}),
createPersonalTask: builder.mutation<IServerResponse<any>, IMyTask>({
query: body => ({
url: `${rootUrl}/personal-task`,
method: 'POST',
body,
}),
}),
markPersonalTaskAsDone: builder.mutation<IServerResponse<any>, string>({
query: taskId => ({
url: `${rootUrl}/update-personal-task`,
method: 'PUT',
body: { id: taskId },
}),
}),
getMyTasks: builder.query<IServerResponse<IHomeTasksModel>, IHomeTasksConfig>({
query: config => {
const { tasks_group_by, current_tab, is_calendar_view, selected_date, time_zone } = config;
const url = `${rootUrl}/tasks${toQueryString({
group_by: tasks_group_by,
current_tab,
is_calendar_view,
selected_date: selected_date?.toISOString().split('T')[0],
time_zone,
})}`;
return url;
},
}),
getProjects: builder.query<IServerResponse<IProject[]>, { view: number }>({
query: ({ view }) => `${rootUrl}/projects?view=${view}`,
}),
getProjectsByTeam: builder.query<IServerResponse<IProject[]>, void>({
query: () => `${rootUrl}/team-projects`,
}),
}),
});
export const {
useCreatePersonalTaskMutation,
useGetMyTasksQuery,
useGetPersonalTasksQuery,
useGetProjectsQuery,
useGetProjectsByTeamQuery,
useMarkPersonalTaskAsDoneMutation,
} = api;
export default api;