jiro-ui
Version:
A Mithril.js UI library based from construct-ui
80 lines (79 loc) • 4.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InputPopover = void 0;
var tslib_1 = require("tslib");
var mithril_1 = tslib_1.__importDefault(require("mithril"));
var classnames_1 = tslib_1.__importDefault(require("classnames"));
var abstract_component_1 = require("../abstract-component");
var input_1 = require("../input");
var button_1 = require("../button");
var popover_1 = require("../popover");
var text_area_1 = require("../text-area");
var _shared_1 = require("../../_shared");
var HIGHLIGHT_TIMEOUT = 25;
var InputPopover = /** @class */ (function (_super) {
tslib_1.__extends(InputPopover, _super);
function InputPopover() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.handleOnKeyDown = function (e) {
var _a = _this.attrs, type = _a.type, submitOnEnter = _a.submitOnEnter;
if (e.which === _shared_1.Keys.ENTER && type === 'input' && submitOnEnter) {
var contentEl = _shared_1.getClosest(e.target, "." + _shared_1.Classes.INPUT_POPOVER_CONTENT);
var submitBtnEl = contentEl.querySelector("." + _shared_1.Classes.POPOVER_DISSMISS);
submitBtnEl.click();
mithril_1.default.redraw();
}
e.redraw = false;
};
_this.handleOnSubmit = function (e) {
var submitButtonAttrs = _this.attrs.submitButtonAttrs;
_this.attrs.onSubmit(_this.value);
_shared_1.safeCall(submitButtonAttrs.onclick, e);
};
_this.handleOnOpened = function (content) {
var _a = _this.attrs, type = _a.type, hightlightOnOpen = _a.hightlightOnOpen, onOpened = _a.onOpened;
var inputEl = content.querySelector(type);
_this.value = _this.attrs.value || '';
if (hightlightOnOpen) {
setTimeout(function () { return inputEl.select(); }, HIGHLIGHT_TIMEOUT);
}
_shared_1.safeCall(onOpened);
};
_this.handleOnClosed = function () {
var onClosed = _this.attrs.onClosed;
_this.value = '';
_shared_1.safeCall(onClosed);
};
return _this;
}
InputPopover.prototype.getDefaultAttrs = function () {
return {
contentAttrs: {},
inputAttrs: {},
submitButtonAttrs: {},
submitButtonLabel: 'Submit',
type: 'input'
};
};
InputPopover.prototype.oninit = function (vnode) {
_super.prototype.oninit.call(this, vnode);
this.value = vnode.attrs.value || '';
};
InputPopover.prototype.view = function () {
var _a = this.attrs, className = _a.class, value = _a.value, header = _a.header, contentAttrs = _a.contentAttrs, footer = _a.footer, inputAttrs = _a.inputAttrs, onSubmit = _a.onSubmit, submitButtonAttrs = _a.submitButtonAttrs, submitButtonLabel = _a.submitButtonLabel, placeholder = _a.placeholder, type = _a.type, popoverAttrs = tslib_1.__rest(_a, ["class", "value", "header", "contentAttrs", "footer", "inputAttrs", "onSubmit", "submitButtonAttrs", "submitButtonLabel", "placeholder", "type"]);
return mithril_1.default(popover_1.Popover, tslib_1.__assign(tslib_1.__assign({ class: classnames_1.default(_shared_1.Classes.INPUT_POPOVER, className), autofocus: true }, popoverAttrs), { content: mithril_1.default("." + _shared_1.Classes.INPUT_POPOVER_CONTENT, tslib_1.__assign(tslib_1.__assign({}, contentAttrs), { onkeydown: this.handleOnKeyDown }), [
header,
this.renderInput(),
mithril_1.default(button_1.Button, tslib_1.__assign({ class: _shared_1.Classes.POPOVER_DISSMISS, fluid: true, intent: 'primary', label: submitButtonLabel, onclick: this.handleOnSubmit }, submitButtonAttrs)),
footer
]), onClosed: this.handleOnClosed, onOpened: this.handleOnOpened }));
};
InputPopover.prototype.renderInput = function () {
var _this = this;
var _a = this.attrs, type = _a.type, inputAttrs = _a.inputAttrs, placeholder = _a.placeholder;
var component = type === 'textarea' ? text_area_1.TextArea : input_1.Input;
return mithril_1.default(component, tslib_1.__assign({ autofocus: true, rows: 5, fluid: true, value: this.value, onkeyup: function (e) { return _this.value = e.target.value; }, placeholder: placeholder }, inputAttrs));
};
return InputPopover;
}(abstract_component_1.AbstractComponent));
exports.InputPopover = InputPopover;