mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 01:55:41 +00:00
Merge pull request #1500 from Tria-plc/freight_feature/usermanagement
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
import { api as apiClient } from '../auth/http';
|
||||
import { URL_CONSTANTS } from '@/constants/URLS';
|
||||
|
||||
export type TrainCrewRole =
|
||||
| 'TRAIN_DRIVER'
|
||||
| 'FEDERAL_POLICE'
|
||||
| 'TECHNICIAN'
|
||||
| 'REEFER_TECHNICIAN'
|
||||
| 'HAZMAT_ESCORT'
|
||||
| 'LASHING_INSPECTOR'
|
||||
| 'LIVESTOCK_HANDLER';
|
||||
|
||||
export type TrainCrewNationality = 'ETHIOPIAN' | 'DJIBOUTIAN';
|
||||
|
||||
export type TrainCrewStatus = 'ACTIVE' | 'INACTIVE' | 'SUSPENDED' | 'ON_LEAVE';
|
||||
|
||||
export interface TrainCrewMember {
|
||||
id: string;
|
||||
firstName: string;
|
||||
lastName: string;
|
||||
role: TrainCrewRole;
|
||||
nationality: TrainCrewNationality;
|
||||
status: TrainCrewStatus;
|
||||
isActive: boolean;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface TrainCrewListFilters {
|
||||
search?: string;
|
||||
role?: TrainCrewRole;
|
||||
nationality?: TrainCrewNationality;
|
||||
status?: TrainCrewStatus;
|
||||
isActive?: boolean;
|
||||
page?: number;
|
||||
limit?: number;
|
||||
sortBy?: string;
|
||||
sortOrder?: 'ASC' | 'DESC';
|
||||
}
|
||||
|
||||
/** Paginated envelope returned by GET /train-crew. */
|
||||
export interface TrainCrewListResponse {
|
||||
data: TrainCrewMember[];
|
||||
total: number;
|
||||
page: number;
|
||||
limit: number;
|
||||
}
|
||||
|
||||
export type SaveTrainCrewMemberPayload = Omit<
|
||||
TrainCrewMember,
|
||||
'id' | 'createdAt' | 'updatedAt'
|
||||
>;
|
||||
|
||||
export const trainCrewService = {
|
||||
getAll: (filters: TrainCrewListFilters = {}) => {
|
||||
const params = new URLSearchParams();
|
||||
if (filters.search) params.set('search', filters.search);
|
||||
if (filters.role) params.set('role', filters.role);
|
||||
if (filters.nationality) params.set('nationality', filters.nationality);
|
||||
if (filters.status) params.set('status', filters.status);
|
||||
if (filters.isActive !== undefined) {
|
||||
params.set('isActive', String(filters.isActive));
|
||||
}
|
||||
if (filters.page) params.set('page', String(filters.page));
|
||||
if (filters.limit) params.set('limit', String(filters.limit));
|
||||
if (filters.sortBy) params.set('sortBy', filters.sortBy);
|
||||
if (filters.sortOrder) params.set('sortOrder', filters.sortOrder);
|
||||
const qs = params.toString();
|
||||
return apiClient.get<TrainCrewListResponse>(
|
||||
`${URL_CONSTANTS.TRAIN_CREW.BASE}${qs ? `?${qs}` : ''}`,
|
||||
);
|
||||
},
|
||||
getById: (id: string) =>
|
||||
apiClient.get<TrainCrewMember>(URL_CONSTANTS.TRAIN_CREW.BY_ID(id)),
|
||||
create: (data: Partial<SaveTrainCrewMemberPayload>) =>
|
||||
apiClient.post(URL_CONSTANTS.TRAIN_CREW.BASE, data),
|
||||
update: (id: string, data: Partial<SaveTrainCrewMemberPayload>) =>
|
||||
apiClient.patch(URL_CONSTANTS.TRAIN_CREW.BY_ID(id), data),
|
||||
delete: (id: string) => apiClient.delete(URL_CONSTANTS.TRAIN_CREW.BY_ID(id)),
|
||||
};
|
||||
|
||||
export const TRAIN_CREW_ROLE_OPTIONS: Array<{ label: string; value: TrainCrewRole }> = [
|
||||
{ label: 'Train Driver', value: 'TRAIN_DRIVER' },
|
||||
{ label: 'Federal Police', value: 'FEDERAL_POLICE' },
|
||||
{ label: 'Technician', value: 'TECHNICIAN' },
|
||||
{ label: 'Reefer Technician', value: 'REEFER_TECHNICIAN' },
|
||||
{ label: 'HAZMAT Escort', value: 'HAZMAT_ESCORT' },
|
||||
{ label: 'Lashing Inspector', value: 'LASHING_INSPECTOR' },
|
||||
{ label: 'Livestock Handler', value: 'LIVESTOCK_HANDLER' },
|
||||
];
|
||||
|
||||
export const TRAIN_CREW_NATIONALITY_OPTIONS: Array<{
|
||||
label: string;
|
||||
value: TrainCrewNationality;
|
||||
}> = [
|
||||
{ label: 'Ethiopian', value: 'ETHIOPIAN' },
|
||||
{ label: 'Djiboutian', value: 'DJIBOUTIAN' },
|
||||
];
|
||||
|
||||
export const TRAIN_CREW_STATUS_OPTIONS: Array<{ label: string; value: TrainCrewStatus }> = [
|
||||
{ label: 'Active', value: 'ACTIVE' },
|
||||
{ label: 'Inactive', value: 'INACTIVE' },
|
||||
{ label: 'Suspended', value: 'SUSPENDED' },
|
||||
{ label: 'On leave', value: 'ON_LEAVE' },
|
||||
];
|
||||
|
||||
export const trainCrewRoleLabel = (role: TrainCrewRole): string =>
|
||||
TRAIN_CREW_ROLE_OPTIONS.find((o) => o.value === role)?.label ?? role;
|
||||
|
||||
export const trainCrewNationalityLabel = (n: TrainCrewNationality): string =>
|
||||
TRAIN_CREW_NATIONALITY_OPTIONS.find((o) => o.value === n)?.label ?? n;
|
||||
|
||||
export const trainCrewStatusLabel = (s: TrainCrewStatus): string =>
|
||||
TRAIN_CREW_STATUS_OPTIONS.find((o) => o.value === s)?.label ?? s;
|
||||
Reference in New Issue
Block a user