UNPKG

@wordpress/components

Version:
62 lines (61 loc) 1.95 kB
// packages/components/src/tree-select/index.tsx import { useMemo } from "@wordpress/element"; import { decodeEntities } from "@wordpress/html-entities"; import { SelectControl } from "../select-control"; import { useDeprecated36pxDefaultSizeProp } from "../utils/use-deprecated-props"; import { ContextSystemProvider } from "../context"; import { maybeWarnDeprecated36pxSize } from "../utils/deprecated-36px-size"; import { jsx as _jsx } from "react/jsx-runtime"; var CONTEXT_VALUE = { BaseControl: { // Temporary during deprecation grace period: Overrides the underlying `__associatedWPComponentName` // via the context system to override the value set by SelectControl. _overrides: { __associatedWPComponentName: "TreeSelect" } } }; function getSelectOptions(tree, level = 0) { return tree.flatMap((treeNode) => [{ value: treeNode.id, label: "\xA0".repeat(level * 3) + decodeEntities(treeNode.name) }, ...getSelectOptions(treeNode.children || [], level + 1)]); } function TreeSelect(props) { const { label, noOptionLabel, onChange, selectedId, tree = [], ...restProps } = useDeprecated36pxDefaultSizeProp(props); const options = useMemo(() => { return [noOptionLabel && { value: "", label: noOptionLabel }, ...getSelectOptions(tree)].filter((option) => !!option); }, [noOptionLabel, tree]); maybeWarnDeprecated36pxSize({ componentName: "TreeSelect", size: restProps.size, __next40pxDefaultSize: restProps.__next40pxDefaultSize }); return /* @__PURE__ */ _jsx(ContextSystemProvider, { value: CONTEXT_VALUE, children: /* @__PURE__ */ _jsx(SelectControl, { __shouldNotWarnDeprecated36pxSize: true, label, options, onChange, value: selectedId, ...restProps }) }); } var tree_select_default = TreeSelect; export { TreeSelect, tree_select_default as default }; //# sourceMappingURL=index.js.map