120 lines
5.5 KiB
TypeScript
120 lines
5.5 KiB
TypeScript
import { ApiClient } from '../../api/ApiClient';
|
|
import type {
|
|
ActionCategory,
|
|
ActionType,
|
|
ActionCategoryFormData,
|
|
ActionTypeFormData,
|
|
FieldDefinition,
|
|
FieldDefinitionFormData,
|
|
ActionSubmissionPayload,
|
|
} from './ActionBuilderTypes';
|
|
|
|
// ─── Action Category Endpoints ───────────────────────────────────────────────
|
|
|
|
export function getActionCategories(page?: number, limit?: number): Promise<ActionCategory[]> {
|
|
const query = page !== undefined && limit !== undefined ? `?page=${page}&limit=${limit}` : '';
|
|
return ApiClient.get<any, ActionCategory[]>(`/master-data/action-categories${query}`);
|
|
}
|
|
|
|
export function getActionCategory(id: string): Promise<ActionCategory> {
|
|
return ApiClient.get<any, ActionCategory>(`/master-data/action-categories/${id}`);
|
|
}
|
|
|
|
export function createActionCategory(payload: ActionCategoryFormData): Promise<ActionCategory> {
|
|
return ApiClient.post<any, ActionCategory>('/master-data/action-categories', payload);
|
|
}
|
|
|
|
export function updateActionCategory(id: string, payload: Partial<ActionCategoryFormData>): Promise<ActionCategory> {
|
|
return ApiClient.put<any, ActionCategory>(`/master-data/action-categories/${id}`, payload);
|
|
}
|
|
|
|
export function deleteActionCategory(id: string): Promise<void> {
|
|
return ApiClient.delete<any, void>(`/master-data/action-categories/${id}`);
|
|
}
|
|
|
|
// ─── Action Type Endpoints ───────────────────────────────────────────────────
|
|
|
|
export function getActionTypes(page?: number, limit?: number): Promise<ActionType[]> {
|
|
const query = page !== undefined && limit !== undefined ? `?page=${page}&limit=${limit}` : '';
|
|
return ApiClient.get<any, ActionType[]>(`/master-data/action-types${query}`);
|
|
}
|
|
|
|
export function getActionTypesByCategory(categoryId: string, page?: number, limit?: number): Promise<ActionType[]> {
|
|
const query = page !== undefined && limit !== undefined ? `?page=${page}&limit=${limit}` : '';
|
|
return ApiClient.get<any, ActionType[]>(`/master-data/action-types/category-id/${categoryId}${query}`);
|
|
}
|
|
|
|
export function getActionTypesByCategoryCode(code: string, page?: number, limit?: number): Promise<ActionType[]> {
|
|
const query = page !== undefined && limit !== undefined ? `?page=${page}&limit=${limit}` : '';
|
|
return ApiClient.get<any, ActionType[]>(`/master-data/action-types/category/${code}${query}`);
|
|
}
|
|
|
|
export function getActionType(id: string): Promise<ActionType> {
|
|
return ApiClient.get<any, ActionType>(`/master-data/action-types/${id}`);
|
|
}
|
|
|
|
export function createActionType(payload: ActionTypeFormData): Promise<ActionType> {
|
|
return ApiClient.post<any, ActionType>('/master-data/action-types', payload);
|
|
}
|
|
|
|
export function updateActionType(id: string, payload: Partial<ActionTypeFormData>): Promise<ActionType> {
|
|
return ApiClient.put<any, ActionType>(`/master-data/action-types/${id}`, payload);
|
|
}
|
|
|
|
export function deleteActionType(id: string): Promise<void> {
|
|
return ApiClient.delete<any, void>(`/master-data/action-types/${id}`);
|
|
}
|
|
|
|
// ─── Field Definition Endpoints ──────────────────────────────────────────────
|
|
|
|
export function getFieldDefinitions(actionTypeId: string): Promise<FieldDefinition[]> {
|
|
return ApiClient.get<any, FieldDefinition[]>(`/master-data/action-types/${actionTypeId}/fields`)
|
|
.then(res => Array.isArray(res) ? res.sort((a, b) => (a.displayOrder ?? 0) - (b.displayOrder ?? 0)) : []);
|
|
}
|
|
|
|
export function createFieldDefinition(actionTypeId: string, payload: FieldDefinitionFormData): Promise<FieldDefinition> {
|
|
return ApiClient.post<any, FieldDefinition>(`/master-data/action-types/${actionTypeId}/fields`, {
|
|
...payload,
|
|
actionTypeId,
|
|
});
|
|
}
|
|
|
|
export function updateFieldDefinition(fieldId: string, payload: Partial<FieldDefinitionFormData>): Promise<FieldDefinition> {
|
|
return ApiClient.patch<any, FieldDefinition>(`/master-data/fields/${fieldId}`, payload);
|
|
}
|
|
|
|
export function deleteFieldDefinition(fieldId: string): Promise<void> {
|
|
return ApiClient.delete<any, void>(`/master-data/fields/${fieldId}`);
|
|
}
|
|
|
|
export function reorderFieldDefinitions(actionTypeId: string, fieldIds: string[]): Promise<FieldDefinition[]> {
|
|
return ApiClient.post<any, FieldDefinition[]>(`/master-data/action-types/${actionTypeId}/fields/reorder`, { fieldIds });
|
|
}
|
|
|
|
// ─── Action Payload Submission ───────────────────────────────────────────────
|
|
|
|
export function submitActionPayload(payload: ActionSubmissionPayload): Promise<any> {
|
|
return ApiClient.post<any, any>('/master-data/actions', payload);
|
|
}
|
|
|
|
// ─── Master Data Options Loader ──────────────────────────────────────────────
|
|
|
|
export function getMasterDataOptions(categoryCode: string): Promise<{ label: string; value: string; id?: string }[]> {
|
|
return ApiClient.get<any, any[]>(`/master-data/${categoryCode}`)
|
|
.then((res) => {
|
|
if (Array.isArray(res)) {
|
|
return res.map((item) => {
|
|
const val = item.id || item.value || item.code || item.label || item.name || '';
|
|
const lbl = item.label || item.name || item.value || item.code || '';
|
|
return {
|
|
label: lbl,
|
|
value: val,
|
|
id: item.id || val,
|
|
};
|
|
});
|
|
}
|
|
return [];
|
|
})
|
|
.catch(() => []);
|
|
}
|