feat(project-ratecard-member): ratecard member handle backend and frontend and all update fix bug
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import apiClient from '@api/api-client';
|
||||
import { API_BASE_URL } from '@/shared/constants';
|
||||
import { IServerResponse } from '@/types/common.types';
|
||||
import { IJobType } from '@/types/project/ratecard.types';
|
||||
import { IJobType, JobRoleType } from '@/types/project/ratecard.types';
|
||||
|
||||
const rootUrl = `${API_BASE_URL}/project-rate-cards`;
|
||||
|
||||
@@ -54,6 +54,19 @@ export const projectRateCardApiService = {
|
||||
return response.data;
|
||||
},
|
||||
|
||||
// Update project member rate card role
|
||||
async updateMemberRateCardRole(
|
||||
project_id: string,
|
||||
member_id: string,
|
||||
project_rate_card_role_id: string
|
||||
): Promise<IServerResponse<JobRoleType>> {
|
||||
const response = await apiClient.put<IServerResponse<JobRoleType>>(
|
||||
`${rootUrl}/project/${project_id}/members/${member_id}/rate-card-role`,
|
||||
{ project_rate_card_role_id }
|
||||
);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
// Delete a single role by id
|
||||
async deleteFromId(id: string): Promise<IServerResponse<IProjectRateCardRole>> {
|
||||
const response = await apiClient.delete<IServerResponse<IProjectRateCardRole>>(`${rootUrl}/${id}`);
|
||||
|
||||
@@ -121,6 +121,14 @@ export const deleteProjectRateCardRoleById = createAsyncThunk(
|
||||
}
|
||||
);
|
||||
|
||||
export const assignMemberToRateCardRole = createAsyncThunk(
|
||||
'projectFinance/assignMemberToRateCardRole',
|
||||
async ({ project_id, member_id, project_rate_card_role_id }: { project_id: string; member_id: string; project_rate_card_role_id: string }) => {
|
||||
const response = await projectRateCardApiService.updateMemberRateCardRole(project_id, member_id, project_rate_card_role_id);
|
||||
return response.body;
|
||||
}
|
||||
);
|
||||
|
||||
export const deleteProjectRateCardRolesByProjectId = createAsyncThunk(
|
||||
'projectFinance/deleteByProjectId',
|
||||
async (project_id: string, { rejectWithValue }) => {
|
||||
|
||||
@@ -7,6 +7,7 @@ import { useAppDispatch } from '../../../../../../hooks/useAppDispatch';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { JobRoleType, IJobType, RatecardType } from '@/types/project/ratecard.types';
|
||||
import {
|
||||
assignMemberToRateCardRole,
|
||||
deleteProjectRateCardRoleById,
|
||||
fetchProjectRateCardRoles,
|
||||
insertProjectRateCardRole,
|
||||
@@ -150,27 +151,28 @@ const RatecardTable: React.FC = () => {
|
||||
};
|
||||
|
||||
// Handle member change
|
||||
const handleMemberChange = (memberId: string, rowIndex: number, record: JobRoleType) => {
|
||||
if (!projectId && !memberId) return;
|
||||
setRoles((prev) =>
|
||||
prev.map((role, idx) => {
|
||||
if (idx !== rowIndex) return role;
|
||||
const members = Array.isArray(role.members) ? [...role.members] : [];
|
||||
const memberIdx = members.indexOf(memberId);
|
||||
if (memberIdx > -1) {
|
||||
members.splice(memberIdx, 1); // Remove if exists
|
||||
} else {
|
||||
members.push(memberId); // Add if not exists
|
||||
}
|
||||
return { ...role, members };
|
||||
})
|
||||
);
|
||||
// Log the required values
|
||||
console.log({
|
||||
project_id: projectId,
|
||||
id: memberId,
|
||||
project_rate_card_role_id: record.id,
|
||||
});
|
||||
const handleMemberChange = async (memberId: string, rowIndex: number, record: JobRoleType) => {
|
||||
if (!projectId || !record.id) return; // Ensure required IDs are present
|
||||
try {
|
||||
const resultAction = await dispatch(
|
||||
assignMemberToRateCardRole({
|
||||
project_id: projectId,
|
||||
member_id: memberId,
|
||||
project_rate_card_role_id: record.id,
|
||||
})
|
||||
);
|
||||
if (assignMemberToRateCardRole.fulfilled.match(resultAction)) {
|
||||
const updatedMembers = resultAction.payload; // Array of member IDs
|
||||
setRoles((prev) =>
|
||||
prev.map((role, idx) => {
|
||||
if (idx !== rowIndex) return role;
|
||||
return { ...role, members: updatedMembers?.members || [] };
|
||||
})
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error assigning member:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// Columns
|
||||
|
||||
Reference in New Issue
Block a user