@prisma-cms/front-editor
Version:
130 lines • 6.01 kB
JavaScript
;
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