refactor: modularize application domains
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
import type { fetchMonitoring } from '../api';
|
||||
import type { MileageSourceGroup } from '../types';
|
||||
|
||||
export type MonitoringRequestParams = NonNullable<Parameters<typeof fetchMonitoring>[0]>;
|
||||
|
||||
export interface MonitoringQueryModel {
|
||||
sortBy: 'today' | 'total' | 'statisticTime';
|
||||
sortOrder: 'asc' | 'desc';
|
||||
searchTerm: string;
|
||||
department: string;
|
||||
customer: string;
|
||||
project: string;
|
||||
entity: string;
|
||||
rentStatus: string;
|
||||
platePrefix: string;
|
||||
targetNames: string[];
|
||||
region: string;
|
||||
plates: string[];
|
||||
mileageRange: { min: string; max: string };
|
||||
rangeStart: string;
|
||||
rangeEnd: string;
|
||||
brands: string[];
|
||||
sourcePriority: MileageSourceGroup[];
|
||||
}
|
||||
|
||||
function optionalValue(value: string): string | undefined {
|
||||
return value || undefined;
|
||||
}
|
||||
|
||||
function selectedValue(value: string): string | undefined {
|
||||
return value !== 'All' ? value : undefined;
|
||||
}
|
||||
|
||||
function buildSharedQuery(
|
||||
model: MonitoringQueryModel,
|
||||
limit: number,
|
||||
page: number,
|
||||
): MonitoringRequestParams {
|
||||
return {
|
||||
sortBy: model.sortBy,
|
||||
sortOrder: model.sortOrder,
|
||||
limit,
|
||||
page,
|
||||
search: optionalValue(model.searchTerm),
|
||||
dept: selectedValue(model.department),
|
||||
customer: selectedValue(model.customer),
|
||||
rentStatus: selectedValue(model.rentStatus),
|
||||
platePrefix: selectedValue(model.platePrefix),
|
||||
targetNames: model.targetNames.length > 0 ? model.targetNames : undefined,
|
||||
region: selectedValue(model.region),
|
||||
plate: model.plates.length > 0 ? model.plates.join(',') : undefined,
|
||||
startDate: optionalValue(model.rangeStart),
|
||||
endDate: optionalValue(model.rangeEnd),
|
||||
brands: model.brands.length > 0 ? model.brands : undefined,
|
||||
sourcePriority: model.sourcePriority,
|
||||
};
|
||||
}
|
||||
|
||||
function buildPagedQuery(
|
||||
model: MonitoringQueryModel,
|
||||
limit: number,
|
||||
page: number,
|
||||
): MonitoringRequestParams {
|
||||
return {
|
||||
...buildSharedQuery(model, limit, page),
|
||||
project: selectedValue(model.project),
|
||||
entity: selectedValue(model.entity),
|
||||
mileageMin: optionalValue(model.mileageRange.min),
|
||||
mileageMax: optionalValue(model.mileageRange.max),
|
||||
};
|
||||
}
|
||||
|
||||
export function buildInitialMonitoringQuery(
|
||||
model: MonitoringQueryModel,
|
||||
pageSize: number,
|
||||
): MonitoringRequestParams {
|
||||
return buildPagedQuery(model, pageSize, 1);
|
||||
}
|
||||
|
||||
export function buildNextPageMonitoringQuery(
|
||||
model: MonitoringQueryModel,
|
||||
pageSize: number,
|
||||
page: number,
|
||||
): MonitoringRequestParams {
|
||||
return buildPagedQuery(model, pageSize, page);
|
||||
}
|
||||
|
||||
export function buildExportMonitoringQuery(model: MonitoringQueryModel): MonitoringRequestParams {
|
||||
return buildPagedQuery(model, 9999, 1);
|
||||
}
|
||||
|
||||
export function buildFullscreenMonitoringQuery(model: MonitoringQueryModel): MonitoringRequestParams {
|
||||
// Characterization boundary: fullscreen historically omits these four filters.
|
||||
// Keep project, entity, mileageMin and mileageMax out until a separate bug fix is approved.
|
||||
return buildSharedQuery(model, 9999, 1);
|
||||
}
|
||||
Reference in New Issue
Block a user