UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

77 lines (76 loc) 2.2 kB
import { jsx } from "react/jsx-runtime"; import { memo } from "react"; import { useQueryBuilderContext } from "../../Context.js"; import { defaultRendererKey } from "../../types.js"; import { EmptyValue } from "./EmptyValue/EmptyValue.js"; import { TextValue } from "./TextValue/TextValue.js"; import { DateTimeValue } from "./DateTimeValue/DateTimeValue.js"; import { NumericValue } from "./NumericValue/NumericValue.js"; import { BooleanValue } from "./BooleanValue/BooleanValue.js"; const getRenderer = (renderer, operator) => ( // 1. Custom renderer typeof renderer === "function" && renderer || // 2. Custom operator renderer typeof renderer === "object" && operator && renderer[operator] || // 3. Custom DEFAULT renderer typeof renderer === "object" && renderer[defaultRendererKey] ); const Value = ({ id, attribute, operator, value: valueProp }) => { const { attributes, initialTouched, renderers, emptyRenderer } = useQueryBuilderContext(); const attrType = attributes?.[attribute]?.type; if (emptyRenderer?.find((op) => op === operator)) { return /* @__PURE__ */ jsx(EmptyValue, { id }); } if (attrType && renderers?.[attrType]) { const Renderer = getRenderer(renderers[attrType], operator) || getRenderer(renderers[defaultRendererKey], operator) || void 0; if (Renderer) { return /* @__PURE__ */ jsx( Renderer, { id, attribute, operator, value: valueProp } ); } } switch (attrType) { case "boolean": { return /* @__PURE__ */ jsx(BooleanValue, { id, value: !!valueProp }); } case "numeric": { return /* @__PURE__ */ jsx( NumericValue, { id, operator, value: valueProp, initialTouched } ); } case "dateandtime": { return /* @__PURE__ */ jsx( DateTimeValue, { id, operator, value: valueProp, initialTouched } ); } case "text": case "textarea": default: return /* @__PURE__ */ jsx(TextValue, { id, value: valueProp, initialTouched }); } }; memo(Value); export { Value };