"use strict"; (self["webpackChunkatk"] = self["webpackChunkatk"] || []).push([["atk-vue-inline-edit"],{ /***/ "./src/vue-components/inline-edit.component.js": /*!*****************************************************!*\ !*** ./src/vue-components/inline-edit.component.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var external_jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! external/jquery */ "external/jquery"); /* harmony import */ var external_jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(external_jquery__WEBPACK_IMPORTED_MODULE_0__); /** * Allow user to edit a db record inline and send * changes to server. * * Properties need for this component are: * * context: string, a jQuery selector where the 'loading' class will be apply by Fomantic-UI - default to the requesting element. * url: string, the URL to call. * value: array, array of value to send to server. */ const template = `
`; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'atk-inline-edit', template: template, props: { url: String, initValue: String, saveOnBlur: Boolean, options: Object }, data: function () { return { value: this.initValue, temp: this.initValue, hasError: false }; }, computed: { isDirty: function () { return this.temp !== this.value; } }, methods: { onFocus: function () { if (this.hasError) { this.clearError(); } else { this.temp = this.value; } }, onKeyup: function (e) { const key = e.keyCode; this.clearError(); if (key === 13) { this.onEnter(e); } else if (key === 27) { this.onEscape(); } }, onBlur: function () { if (this.isDirty && this.saveOnBlur) { this.update(); } else { this.value = this.temp; // TODO will not save the value on 2nd edit and submit via enter } }, onEscape: function () { this.value = this.temp; this.$el.querySelector('input').blur(); }, onEnter: function (e) { if (this.isDirty) { this.update(); } }, clearError: function () { this.hasError = false; }, flashError: function () { let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 4; if (count === 0) { this.hasError = false; return; } this.hasError = !this.hasError; setTimeout(() => { this.flashError(count - 1); }, 300); }, update: function () { const that = this; external_jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$el).api({ on: 'now', url: this.url, data: { value: this.value }, method: 'POST', onComplete: function (r, e) { if (r.hasValidationError) { that.hasError = true; } else { that.temp = that.value; } } }); } } }); /***/ }) }]); //# sourceMappingURL=atk-vue-inline-edit.js.map