@nu-art/db-api-generator
Version:
db-api-generator
52 lines (51 loc) • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenericDropDown = void 0;
const frontend_1 = require("@nu-art/thunderstorm/frontend");
const ts_common_1 = require("@nu-art/ts-common");
const React = require("react");
// const defaultQueryFilter = () => true;
class GenericDropDown extends frontend_1.ComponentSync {
deriveStateFromProps(nextProps) {
var _a, _b, _c;
const state = {};
const items = ((_b = (_a = this.props).itemResolver) === null || _b === void 0 ? void 0 : _b.call(_a)) || nextProps.module.cache.allMutable();
if (!nextProps.queryFilter)
state.items = items;
else {
state.items = items.filter(nextProps.queryFilter);
if (state.items.length === 0 && nextProps.ifNoneShowAll === true)
state.items = items;
}
//Sort Items by sort function or object keys
if (nextProps.sortBy) {
if (typeof nextProps.sortBy === 'function')
state.items = (0, ts_common_1.sortArray)(state.items, nextProps.sortBy);
else
state.items = ((_c = nextProps.sortBy) === null || _c === void 0 ? void 0 : _c.reduce((toRet, sortKey) => {
return (0, ts_common_1.sortArray)(toRet, item => item[sortKey]);
}, state.items)) || state.items;
}
//Set selected item
state.selected = this.getSelected(nextProps.module, nextProps.selected);
state.filter = new ts_common_1.Filter(nextProps.mapper);
state.adapter = (0, frontend_1.SimpleListAdapter)(state.items, props => nextProps.renderer(props.item));
return state;
}
getSelected(module, selectMethod) {
switch (typeof selectMethod) {
case 'string':
return module.cache.unique(selectMethod);
case 'function':
return selectMethod();
case 'object':
if (!Array.isArray(selectMethod))
return selectMethod;
}
return undefined;
}
render() {
return React.createElement(frontend_1.TS_DropDown, { className: this.props.className, placeholder: this.props.placeholder || 'Choose one', inputValue: this.props.inputValue, adapter: this.state.adapter, filter: this.state.filter, selected: this.state.selected, onNoMatchingSelectionForString: this.props.onNoMatchingSelectionForString, onSelected: this.props.onSelected, caret: this.props.caret, boundingParentSelector: this.props.boundingParentSelector, renderSearch: this.props.renderSearch, limitItems: this.props.limitItems, canUnselect: this.props.canUnselect, disabled: this.props.disabled });
}
}
exports.GenericDropDown = GenericDropDown;