175 lines
4.6 KiB
TypeScript
175 lines
4.6 KiB
TypeScript
import { Entity, Property, RowMedia, RowValueMultiple } from "@toolctrl/db/prisma-browser";
|
|
import { RowValueWithDetails } from "../db/entities/rows.db.server";
|
|
import RowHelper from "./RowHelper";
|
|
import { RowValueMultipleDto } from "~/application/dtos/entities/RowValueMultipleDto";
|
|
import { RowValueRangeDto } from "~/application/dtos/entities/RowValueRangeDto";
|
|
import { PropertyWithDetails } from "../db/entities/entities.db.server";
|
|
|
|
function getText({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): string | undefined {
|
|
const value = RowHelper.getPropertyValue({ entity, item: row, propertyName: name });
|
|
return value?.toString();
|
|
}
|
|
function getBoolean({ entity, row, name }: { entity: Entity & { properties: Property[] }; row: { values: RowValueWithDetails[] }; name: string }): boolean {
|
|
return Boolean(RowHelper.getPropertyValue({ entity, item: row, propertyName: name }));
|
|
}
|
|
function getNumber({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): number | undefined {
|
|
const value = RowHelper.getPropertyValue({ entity, item: row, propertyName: name });
|
|
return value !== undefined && value !== null ? Number(value) : undefined;
|
|
}
|
|
function getDate({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): Date | undefined {
|
|
const value = RowHelper.getPropertyValue({ entity, item: row, propertyName: name });
|
|
if (!value) {
|
|
return undefined;
|
|
}
|
|
return value as Date;
|
|
}
|
|
function getMedia({ entity, row, name }: { entity: Entity & { properties: Property[] }; row: { values: RowValueWithDetails[] }; name: string }): RowMedia[] {
|
|
const value = (RowHelper.getPropertyValue({ entity, item: row, propertyName: name }) ?? []) as RowMedia[];
|
|
return value;
|
|
}
|
|
function getFirstMedia({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): RowMedia | undefined {
|
|
const media = getMedia({ entity, row, name });
|
|
const value = media?.length > 0 ? media[0] : undefined;
|
|
return value;
|
|
}
|
|
function getFirstMediaFile({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): string | undefined {
|
|
const media = getFirstMedia({ entity, row, name });
|
|
if (!media) {
|
|
return undefined;
|
|
}
|
|
const value = media?.publicUrl ?? media?.file;
|
|
return value;
|
|
}
|
|
function getSelected({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: PropertyWithDetails[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): { value: string; name: string | null; color: number } | undefined {
|
|
const value = RowHelper.getPropertyValue({ entity, item: row, propertyName: name });
|
|
if (!value) {
|
|
return undefined;
|
|
}
|
|
const option = entity.properties.find((i) => i.name === name)?.options.find((i) => i.value === value);
|
|
if (option) {
|
|
return { name: option.name, value: option.value, color: option.color };
|
|
} else {
|
|
return { name: null, value: value.toString(), color: 0 };
|
|
}
|
|
}
|
|
function getMultiple({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): RowValueMultipleDto[] {
|
|
const value = RowHelper.getPropertyValue({ entity, item: row, propertyName: name });
|
|
if (!value) {
|
|
return [];
|
|
}
|
|
let multiple = value as RowValueMultiple[];
|
|
return multiple ?? [];
|
|
}
|
|
function getNumberRange({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): RowValueRangeDto {
|
|
const value = RowHelper.getPropertyValue({ entity, item: row, propertyName: name });
|
|
let range = value as RowValueRangeDto;
|
|
if (!range) {
|
|
range = {
|
|
numberMin: null,
|
|
numberMax: null,
|
|
dateMin: null,
|
|
dateMax: null,
|
|
};
|
|
}
|
|
return range;
|
|
}
|
|
function getDateRange({
|
|
entity,
|
|
row,
|
|
name,
|
|
}: {
|
|
entity: Entity & { properties: Property[] };
|
|
row: { values: RowValueWithDetails[] };
|
|
name: string;
|
|
}): RowValueRangeDto {
|
|
const value = RowHelper.getPropertyValue({ entity, item: row, propertyName: name });
|
|
let range = value as RowValueRangeDto;
|
|
if (!range) {
|
|
range = {
|
|
numberMin: null,
|
|
numberMax: null,
|
|
dateMin: null,
|
|
dateMax: null,
|
|
};
|
|
}
|
|
return range;
|
|
}
|
|
|
|
export default {
|
|
getText,
|
|
getBoolean,
|
|
getNumber,
|
|
getDate,
|
|
getMedia,
|
|
getFirstMedia,
|
|
getFirstMediaFile,
|
|
getSelected,
|
|
getMultiple,
|
|
getNumberRange,
|
|
getDateRange,
|
|
};
|