Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/utils/helpers/RowValueHelper.ts
T

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,
};