UNPKG

@etsoo/materialui

Version:

TypeScript Material-UI Implementation

140 lines (139 loc) 5.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomFieldViewUI = CustomFieldViewUI; const jsx_runtime_1 = require("react/jsx-runtime"); const shared_1 = require("@etsoo/shared"); const material_1 = require("@mui/material"); const ViewContainer_1 = require("../ViewContainer"); const ReactApp_1 = require("../app/ReactApp"); /** * Transform custom field space * @param space Space * @returns Result */ function transformSize(space) { if (space == null) return undefined; switch (space) { case "full": return true; case "quater": return "medium"; case "five": return { xs: 12, sm: 12, md: 5, lg: 4, xl: 3 }; case "seven": return { xs: 12, sm: 12, md: 7, lg: 6, xl: 5 }; default: return false; } } /** * Custom field view UI * @param props Props * @returns Component */ function CustomFieldViewUI(props) { // Destruct const { fields, ...rest } = props; // App const app = (0, ReactApp_1.useRequiredAppContext)(); // Mapping const mappedFields = fields.map((f) => { const type = f.type; const label = f.label ? (app.get(f.label) ?? f.label) : undefined; const singleRow = transformSize(f.space); const name = f.name ?? ""; let item; switch (type) { case "amountlabel": const currency = f.mainSlotProps?.currency; const symbol = currency ? shared_1.NumberUtils.getCurrencySymbol(currency) : ""; item = { label: "", singleRow, data: label ? () => `${symbol}${app.formatNumber(parseFloat(label))}` : () => "" }; break; case "checkbox": case "combobox": case "radio": case "select": item = { label, singleRow, data: (data) => { const value = data[name]; if (value == null) return undefined; const values = Array.isArray(value) ? value : [value]; const options = f.options ?? []; const selectedOptions = options.filter((o) => values.includes(o.id)); return selectedOptions .map((o) => { const label = shared_1.DataTypes.getListItemLabel(o); return app.get(label) ?? label; }) .join(", "); } }; break; case "date": item = { label, singleRow, data: (data) => { const value = data[name]; if (value == null) return undefined; return typeof value === "string" ? (shared_1.DateUtils.parse(value)?.toLocaleDateString() ?? value) : value instanceof Date ? value.toLocaleDateString() : `${value}`; } }; break; case "divider": item = { label, singleRow, data: () => (0, jsx_runtime_1.jsx)(material_1.Divider, {}) }; break; case "json": item = { label, singleRow, data: (data) => { const value = data[name]; if (value == null) return undefined; return JSON.stringify(value, null, 2); } }; break; case "number": const numberCurrency = f.mainSlotProps?.currency; const numberSymbol = numberCurrency ? shared_1.NumberUtils.getCurrencySymbol(numberCurrency) : ""; item = { label: numberCurrency ? `${label} (${numberCurrency})` : label, singleRow, data: (data) => { const value = shared_1.NumberUtils.parse(data[name]); return value == null ? undefined : `${numberSymbol}${app.formatNumber(value)}`; } }; break; default: item = { label, singleRow, data: name }; } return item; }); return (0, jsx_runtime_1.jsx)(ViewContainer_1.ViewContainer, { fields: mappedFields, ...rest }); }