@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
77 lines (76 loc) • 2.2 kB
JavaScript
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
};