/* eslint-disable prefer-const, comma-dangle, max-len, no-useless-return, object-curly-spacing, no-param-reassign, max-len */ /* global Api */ /*= require ../blob/template_selector */ ((global) => { class IssuableTemplateSelector extends gl.TemplateSelector { constructor(...args) { super(...args); this.projectPath = this.dropdown.data('project-path'); this.namespacePath = this.dropdown.data('namespace-path'); this.issuableType = this.wrapper.data('issuable-type'); this.titleInput = $(`#${this.issuableType}_title`); let initialQuery = { name: this.dropdown.data('selected') }; if (initialQuery.name) this.requestFile(initialQuery); $('.reset-template', this.dropdown.parent()).on('click', () => { this.setInputValueToTemplateContent(); }); $('.no-template', this.dropdown.parent()).on('click', () => { this.currentTemplate = ''; this.setInputValueToTemplateContent(); $('.dropdown-toggle-text', this.dropdown).text('Choose a template'); }); } requestFile(query) { this.startLoadingSpinner(); Api.issueTemplate(this.namespacePath, this.projectPath, query.name, this.issuableType, (err, currentTemplate) => { this.currentTemplate = currentTemplate; if (err) return; // Error handled by global AJAX error handler this.stopLoadingSpinner(); this.setInputValueToTemplateContent(); }); return; } setInputValueToTemplateContent() { // `this.requestFileSuccess` sets the value of the description input field // to the content of the template selected. if (this.titleInput.val() === '') { // If the title has not yet been set, focus the title input and // skip focusing the description input by setting `true` as the // `skipFocus` option to `requestFileSuccess`. this.requestFileSuccess(this.currentTemplate, {skipFocus: true}); this.titleInput.focus(); } else { this.requestFileSuccess(this.currentTemplate, {skipFocus: false}); } return; } } global.IssuableTemplateSelector = IssuableTemplateSelector; })(window.gl || (window.gl = {}));