UNPKG

@prisma-cms/front-editor

Version:
130 lines 6.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Select = void 0; const react_1 = __importDefault(require("react")); const Typography_1 = __importDefault(require("material-ui/Typography")); const Select_1 = __importDefault(require("material-ui/Select")); const MenuItem_1 = __importDefault(require("material-ui/Menu/MenuItem")); const FormControl_1 = __importDefault(require("material-ui/Form/FormControl")); const InputLabel_1 = __importDefault(require("material-ui/Input/InputLabel")); const FormHelperText_1 = __importDefault(require("material-ui/Form/FormHelperText")); const Iterable_1 = __importDefault(require("../../Connectors/Connector/ListView/Iterable")); const context_1 = require("../../../context"); class Select extends Iterable_1.default { renderPanelView(content) { return super.renderPanelView(content || react_1.default.createElement("div", { className: "editor-component--panel-icon" }, "Select")); } renderItems(items, children) { const { inEditMode } = this.getEditorContext(); const { name, helperText, label, style, fullWidth, return_text_in_default_mode, } = this.getComponentProps(this); if (!name) { if (inEditMode) { return react_1.default.createElement(Typography_1.default, { color: "error" }, "`name` property required"); } else { return null; } } return (react_1.default.createElement(context_1.EditableObjectContext.Consumer, null, (editableObjectContext) => { const { getObjectWithMutations, getEditor, inEditMode: objectInEditMode, } = editableObjectContext; if (!getObjectWithMutations) { if (inEditMode) { return (react_1.default.createElement(Typography_1.default, { color: "error" }, "editableObjectContext required")); } else { return null; } } if (!getEditor) { if (inEditMode) { return react_1.default.createElement(Typography_1.default, { color: "error" }, "getEditor required"); } else { return null; } } const value = this.getValue(name, editableObjectContext); let output = null; if (!objectInEditMode && return_text_in_default_mode) { const item = items ? items.find((n) => n.id === value) : null; if (item) { const { id: itemId, name, label } = item; output = label || name || itemId; } } else { output = getEditor({ name, value, helperText, label, fullWidth, Editor: (props) => { const { error = false, helperText, label, fullWidth } = props; return (react_1.default.createElement(FormControl_1.default, { error: error, style: style, fullWidth: fullWidth }, react_1.default.createElement(InputLabel_1.default, null, label), react_1.default.createElement(Select_1.default, { name: name, value: value || '', // eslint-disable-next-line react/jsx-no-bind onChange: (event) => { this.onSelectChange(event, editableObjectContext); }, error: error }, super.renderItems(items, children)), react_1.default.createElement(FormHelperText_1.default, null, helperText))); }, }); } return output; })); } getValue(name, editableObjectContext) { const { getObjectWithMutations } = editableObjectContext; const { [name]: value } = getObjectWithMutations() || {}; return value && typeof value === 'object' ? value.connect && typeof value.connect === 'object' ? value.connect.id : value.id !== undefined ? value.id : value : value; } onSelectChange(event, editableObjectContext) { const { updateObject } = editableObjectContext; const { new_object_connect } = this.getComponentProps(this); const { name, value } = event.target; let data; if (new_object_connect) { data = { [name]: { connect: { id: value, }, }, }; } else { data = { [name]: value, }; } return updateObject(data); } renderItem(item) { const { id, name, label } = item; return react_1.default.createElement(MenuItem_1.default, { value: id }, label || name); } } exports.Select = Select; Select.Name = 'Select'; Select.defaultProps = Object.assign(Object.assign({}, Iterable_1.default.defaultProps), { hide_wrapper_in_default_mode: true, helperText: undefined, label: undefined, style: Object.assign(Object.assign({}, Iterable_1.default.defaultProps.style), { minWidth: 200 }), fullWidth: false, /** * В обычном режиме возвращает текстовое значение, а не селект */ return_text_in_default_mode: true, /** * Если да, то при обновлении будет устанавливаться связь через {connect: {id: ...}} */ new_object_connect: false }); exports.default = Select; //# sourceMappingURL=index.js.map