Files
aeroresolve_frontend/src/app/configuration/actionBuilder/ActionBuilderApi.ts
T

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(() => []);
}