@tomino/dynamic-form-semantic-ui
Version:
Semantic UI form renderer based on dynamic form generation
92 lines • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const React = tslib_1.__importStar(require("react"));
const semantic_ui_react_1 = require("semantic-ui-react");
const mobx_react_1 = require("mobx-react");
const helpers_1 = require("../helpers");
const wrapper_1 = require("../wrapper");
const controlProps = [
'basic',
'button',
'className',
'clearable',
'closeOnBlur',
'closeOnChange',
'compact',
'deburr',
'defaultOpen',
'direction',
'floating',
'fluid',
'header',
'icon',
'item',
'labeled',
'lazyLoad',
'loading',
'minCharacters',
'noResultsMessage',
'onAddItem',
'onBlur',
'onChange',
'onClose',
'onClick',
'onFocus',
'onLabelClick',
'onMouseDown',
'onOpen',
'onSearchChange',
'open',
'options',
'openOnFocus',
'placeholder',
'pointing',
'scrolling',
'search',
'searchQuery',
'selectOnBlur',
'selectOnNavigation',
'selection',
'simple',
'text',
'upward',
'wrapSelection',
'value'
];
exports.DropdownView = mobx_react_1.observer((props) => {
const { handleChange, error, formElement, owner, context, value } = helpers_1.processControl(props);
const [filterSource, filterColumn, schemaSource, options, asyncOptionsHandler] = helpers_1.getValues(props, 'filterSource', 'filterColumn', 'schemaSource', 'options', 'asyncOptions');
const [loading, setLoading] = React.useState(false);
const [asyncOptions, setOptions] = React.useState([]);
let currentOptions = React.useMemo(() => {
return schemaSource
? owner.getSchema(schemaSource).$enum
: Array.isArray(options) && options.length > asyncOptions.length
? options
: asyncOptions;
}, [asyncOptions, options, owner, schemaSource]);
React.useEffect(() => {
async function load() {
if (asyncOptionsHandler) {
setLoading(true);
const options = helpers_1.simpleHandle(props, asyncOptionsHandler, context);
const opts = await options;
setOptions(opts);
setLoading(false);
}
}
load();
}, [asyncOptionsHandler, context, options, owner, props]);
const filter = filterSource ? owner.getValue(filterSource) : null;
const filteredOptions = filterSource
? currentOptions.filter((v) => v[filterColumn] === filter)
: currentOptions;
if (!formElement.elements || formElement.elements.length === 0) {
return (React.createElement(wrapper_1.DynamicComponent, Object.assign({}, props, { control: semantic_ui_react_1.Dropdown, controlProps: controlProps, error: !!error, options: filteredOptions, loading: loading, showError: true, onChange: handleChange, value: value || '' })));
}
return (React.createElement(wrapper_1.DynamicComponent, Object.assign({}, props, { control: semantic_ui_react_1.Dropdown, controlProps: controlProps }),
React.createElement(semantic_ui_react_1.Dropdown.Menu, null, formElement.elements &&
formElement.elements.map((m, i) => (React.createElement(semantic_ui_react_1.Dropdown.Item, { key: i, "data-name": m.props.name, "data-value": m.props.value }, props.catalogue.createComponent(props, m, context)))))));
});
//# sourceMappingURL=dropdown_view.js.map