98 lines
3.5 KiB
TypeScript
98 lines
3.5 KiB
TypeScript
import { z } from "zod";
|
|
|
|
export const createCircuitSchema = z.object({
|
|
sectionId: z.string().min(1),
|
|
equipmentIdentifier: z.string().min(1),
|
|
displayName: z.string().optional(),
|
|
sortOrder: z.number(),
|
|
protectionType: z.string().optional(),
|
|
protectionRatedCurrent: z.number().min(0).optional(),
|
|
protectionCharacteristic: z.string().optional(),
|
|
cableType: z.string().optional(),
|
|
cableCrossSection: z.string().optional(),
|
|
cableLength: z.number().min(0).optional(),
|
|
rcdAssignment: z.string().optional(),
|
|
terminalDesignation: z.string().optional(),
|
|
voltage: z.number().positive().optional(),
|
|
controlRequirement: z.string().optional(),
|
|
status: z.string().optional(),
|
|
isReserve: z.boolean().optional(),
|
|
remark: z.string().optional(),
|
|
});
|
|
|
|
export const createCircuitDeviceRowSchema = z.object({
|
|
linkedProjectDeviceId: z.string().min(1).optional(),
|
|
name: z.string().min(1),
|
|
displayName: z.string().min(1),
|
|
phaseType: z.string().optional(),
|
|
connectionKind: z.string().optional(),
|
|
costGroup: z.string().optional(),
|
|
category: z.string().optional(),
|
|
level: z.string().optional(),
|
|
roomId: z.string().min(1).optional(),
|
|
roomNumberSnapshot: z.string().optional(),
|
|
roomNameSnapshot: z.string().optional(),
|
|
quantity: z.number().min(0),
|
|
powerPerUnit: z.number().min(0),
|
|
simultaneityFactor: z.number().min(0),
|
|
cosPhi: z.number().positive().optional(),
|
|
remark: z.string().optional(),
|
|
overriddenFields: z.string().optional(),
|
|
sortOrder: z.number().optional(),
|
|
});
|
|
|
|
export const createCircuitWithDeviceRowsSchema = z.object({
|
|
circuit: createCircuitSchema,
|
|
deviceRows: z.array(createCircuitDeviceRowSchema).min(1),
|
|
});
|
|
|
|
export const moveCircuitDeviceRowSchema = z
|
|
.object({
|
|
targetCircuitId: z.string().min(1).optional(),
|
|
targetSectionId: z.string().min(1).optional(),
|
|
createNewCircuit: z.boolean().optional(),
|
|
})
|
|
.refine(
|
|
(value) =>
|
|
Boolean(value.targetCircuitId) ||
|
|
(Boolean(value.targetSectionId) && value.createNewCircuit === true),
|
|
{ message: "Either targetCircuitId or targetSectionId+createNewCircuit=true is required." }
|
|
);
|
|
|
|
export const moveCircuitDeviceRowsBulkSchema = z
|
|
.object({
|
|
rowIds: z.array(z.string().min(1)).min(1),
|
|
targetCircuitId: z.string().min(1).optional(),
|
|
targetSectionId: z.string().min(1).optional(),
|
|
createNewCircuit: z.boolean().optional(),
|
|
})
|
|
.refine(
|
|
(value) =>
|
|
Boolean(value.targetCircuitId) ||
|
|
(Boolean(value.targetSectionId) && value.createNewCircuit === true),
|
|
{ message: "Either targetCircuitId or targetSectionId+createNewCircuit=true is required." }
|
|
);
|
|
|
|
export const reorderSectionCircuitsSchema = z.object({
|
|
orderedCircuitIds: z.array(z.string().min(1)).min(1),
|
|
});
|
|
|
|
export const updateSectionEquipmentIdentifiersSchema = z.object({
|
|
identifiers: z
|
|
.array(
|
|
z.object({
|
|
circuitId: z.string().min(1),
|
|
equipmentIdentifier: z.string().min(1),
|
|
})
|
|
)
|
|
.min(1),
|
|
});
|
|
|
|
export type CreateCircuitInput = z.infer<typeof createCircuitSchema>;
|
|
export type CreateCircuitDeviceRowInput = z.infer<typeof createCircuitDeviceRowSchema>;
|
|
export type CreateCircuitWithDeviceRowsInput = z.infer<typeof createCircuitWithDeviceRowsSchema>;
|
|
export type MoveCircuitDeviceRowInput = z.infer<typeof moveCircuitDeviceRowSchema>;
|
|
export type MoveCircuitDeviceRowsBulkInput = z.infer<typeof moveCircuitDeviceRowsBulkSchema>;
|
|
export type ReorderSectionCircuitsInput = z.infer<typeof reorderSectionCircuitsSchema>;
|
|
export type UpdateSectionEquipmentIdentifiersInput = z.infer<typeof updateSectionEquipmentIdentifiersSchema>;
|