diff --git a/src/qqq/utils/qqq/ValueUtils.tsx b/src/qqq/utils/qqq/ValueUtils.tsx index c46a404..b3c446e 100644 --- a/src/qqq/utils/qqq/ValueUtils.tsx +++ b/src/qqq/utils/qqq/ValueUtils.tsx @@ -26,8 +26,9 @@ import {QInstance} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QInstan import {QRecord} from "@kingsrook/qqq-frontend-core/lib/model/QRecord"; import "datejs"; // https://github.com/datejs/Datejs import {Box, Chip, Icon} from "@mui/material"; +import Button from "@mui/material/Button"; import parse from "html-react-parser"; -import React, {Fragment} from "react"; +import React, {Fragment, useState} from "react"; import AceEditor from "react-ace"; import {Link} from "react-router-dom"; import Client from "qqq/utils/qqq/Client"; @@ -157,20 +158,9 @@ class ValueUtils mode = adornmentValues.get("languageMode"); } - if(usage === "view") + if (usage === "view") { - return (); + return (); } else { @@ -201,7 +191,7 @@ class ValueUtils *******************************************************************************/ public static getUnadornedValueForDisplay(field: QFieldMetaData, rawValue: any, displayValue: any): string | JSX.Element { - if(! displayValue && field.defaultValue) + if (!displayValue && field.defaultValue) { displayValue = field.defaultValue; } @@ -245,9 +235,9 @@ class ValueUtils public static formatDateTime(date: Date) { - if(!(date instanceof Date)) + if (!(date instanceof Date)) { - date = new Date(date) + date = new Date(date); } // @ts-ignore return (`${date.toString("yyyy-MM-dd hh:mm:ss")} ${date.getHours() < 12 ? "AM" : "PM"} ${date.getTimezone()}`); @@ -255,9 +245,9 @@ class ValueUtils public static formatTime(date: Date) { - if(!(date instanceof Date)) + if (!(date instanceof Date)) { - date = new Date(date) + date = new Date(date); } // @ts-ignore return (`${date.toString("hh:mm:ss")} ${date.getHours() < 12 ? "AM" : "PM"} ${date.getTimezone()}`); @@ -265,9 +255,9 @@ class ValueUtils public static formatDateTimeISO8601(date: Date) { - if(!(date instanceof Date)) + if (!(date instanceof Date)) { - date = new Date(date) + date = new Date(date); } // @ts-ignore return (`${date.toString("yyyy-MM-ddTHH:mm:ssZ")}`); @@ -275,9 +265,9 @@ class ValueUtils public static getFullWeekday(date: Date) { - if(!(date instanceof Date)) + if (!(date instanceof Date)) { - date = new Date(date) + date = new Date(date); } // @ts-ignore return (`${date.toString("dddd")}`); @@ -285,11 +275,11 @@ class ValueUtils public static formatBoolean(value: any) { - if(value === true) + if (value === true) { return ("Yes"); } - else if(value === false) + else if (value === false) { return ("No"); } @@ -317,7 +307,7 @@ class ValueUtils public static breakTextIntoLines(value: string): JSX.Element { - if(!value) + if (!value) { return ; } @@ -362,9 +352,9 @@ class ValueUtils const date = new Date(value); // @ts-ignore - const formattedDate = `${date.toString("yyyy-MM-ddTHH:mm")}` + const formattedDate = `${date.toString("yyyy-MM-ddTHH:mm")}`; - console.log(`Converted UTC date value string [${value}] to local time value for form [${formattedDate}]`) + console.log(`Converted UTC date value string [${value}] to local time value for form [${formattedDate}]`); return (formattedDate); } @@ -385,4 +375,71 @@ class ValueUtils } } +//////////////////////////////////////////////////////////////////////////////////////////////// +// little private component here, for rendering an AceEditor with some buttons/controls/state // +//////////////////////////////////////////////////////////////////////////////////////////////// +function CodeViewer({name, mode, code}: {name: string; mode: string; code: string;}): JSX.Element +{ + const [activeCode, setActiveCode] = useState(code); + const [isFormatted, setIsFormatted] = useState(false); + const [isExpanded, setIsExpanded] = useState(false); + const [errorMessage, setErrorMessage] = useState(null as string); + const [resetErrorTimeout, setResetErrorTimeout] = useState(null as any); + + const formatJson = () => + { + if (isFormatted) + { + setActiveCode(code); + setIsFormatted(false); + } + else + { + try + { + let formatted = JSON.stringify(JSON.parse(activeCode), null, 3); + setActiveCode(formatted); + setIsFormatted(true); + } + catch (e) + { + setErrorMessage("Error formatting json: " + e); + clearTimeout(resetErrorTimeout); + setResetErrorTimeout(setTimeout(() => + { + setErrorMessage(null); + }, 5000)); + console.log("Error formatting json: " + e); + } + } + }; + + const toggleSize = () => + { + setIsExpanded(!isExpanded); + }; + + return ( + <> + {mode == "json" && code && } + {code && } + {errorMessage} +
+ + ); +} + + + export default ValueUtils;