'use strict'; const events = require('../events.js'); const views = require('../util/views.js'); const template = views.getTemplate('user-tokens'); class UserTokenView extends events.EventTarget { constructor(ctx) { super(); this._user = ctx.user; this._tokens = ctx.tokens; this._hostNode = ctx.hostNode; this._tokenFormNodes = []; views.replaceContent(this._hostNode, template(ctx)); views.decorateValidator(this._formNode); this._formNode.addEventListener('submit', e => this._evtSubmit(e)); this._decorateTokenForms(); this._decorateTokenNoteChangeLinks(); } _decorateTokenForms() { this._tokenFormNodes = []; for (let i = 0; i < this._tokens.length; i++) { let formNode = this._hostNode.querySelector( '.token[data-token-id=\"' + i + '\"]'); formNode.addEventListener('submit', e => this._evtDelete(e)); this._tokenFormNodes.push(formNode); } } _decorateTokenNoteChangeLinks() { for (let i = 0; i < this._tokens.length; i++) { let linkNode = this._hostNode.querySelector( '.token-change-note[data-token-id=\"' + i + '\"]'); linkNode.addEventListener( 'click', e => this._evtChangeNoteClick(e)); } } clearMessages() { views.clearMessages(this._hostNode); } showSuccess(message) { views.showSuccess(this._hostNode, message); } showError(message) { views.showError(this._hostNode, message); } enableForm() { views.enableForm(this._formNode); for (let formNode of this._tokenFormNodes) { views.enableForm(formNode); } } disableForm() { views.disableForm(this._formNode); for (let formNode of this._tokenFormNodes) { views.disableForm(formNode); } } _evtDelete(e) { e.preventDefault(); const userToken = this._tokens[parseInt( e.target.getAttribute('data-token-id'))]; this.dispatchEvent(new CustomEvent('delete', { detail: { user: this._user, userToken: userToken, }, })); } _evtSubmit(e) { e.preventDefault(); this.dispatchEvent(new CustomEvent('submit', { detail: { user: this._user, note: this._userTokenNoteInputNode ? this._userTokenNoteInputNode.value : undefined, expirationTime: (this._userTokenExpirationTimeInputNode && this._userTokenExpirationTimeInputNode.value) ? new Date(this._userTokenExpirationTimeInputNode.value) .toISOString() : undefined, }, })); } _evtChangeNoteClick(e) { e.preventDefault(); const userToken = this._tokens[ parseInt(e.target.getAttribute('data-token-id'))]; const text = window.prompt( 'Please enter the new name:', userToken.note !== null ? userToken.note : undefined); if (!text) { return; } this.dispatchEvent(new CustomEvent('update', { detail: { user: this._user, userToken: userToken, note: text ? text : undefined, }, })); } get _formNode() { return this._hostNode.querySelector('#create-token-form'); } get _userTokenNoteInputNode() { return this._formNode.querySelector('.note input'); } get _userTokenExpirationTimeInputNode() { return this._formNode.querySelector('.expirationTime input'); } } module.exports = UserTokenView;