From f4e17633d26454b753cfe66385fadc1805384c73 Mon Sep 17 00:00:00 2001 From: NavaL Date: Thu, 30 Jun 2016 13:49:35 +0200 Subject: Issue #733: cache feedback content --- web-ui/app/js/feedback/feedback_cache.js | 35 +++++++++++ web-ui/app/js/mail_view/ui/feedback_box.js | 72 ++++++++++++---------- web-ui/test/spec/feedback/feedback_cache.spec.js | 12 ++++ web-ui/test/spec/mail_view/ui/feedback_box.spec.js | 27 +++++++- 4 files changed, 109 insertions(+), 37 deletions(-) create mode 100644 web-ui/app/js/feedback/feedback_cache.js create mode 100644 web-ui/test/spec/feedback/feedback_cache.spec.js (limited to 'web-ui') diff --git a/web-ui/app/js/feedback/feedback_cache.js b/web-ui/app/js/feedback/feedback_cache.js new file mode 100644 index 00000000..a5d92266 --- /dev/null +++ b/web-ui/app/js/feedback/feedback_cache.js @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see . + */ + +define([], function() { + 'use strict'; + + return (function() { + var feedbackCache = ''; + return { + resetCache: function () { + feedbackCache = ''; + }, + setCache: function(feedback) { + feedbackCache = feedback; + }, + getCache: function() { + return feedbackCache; + } + }; + })(); +}); diff --git a/web-ui/app/js/mail_view/ui/feedback_box.js b/web-ui/app/js/mail_view/ui/feedback_box.js index eb079b5b..4e00ece8 100644 --- a/web-ui/app/js/mail_view/ui/feedback_box.js +++ b/web-ui/app/js/mail_view/ui/feedback_box.js @@ -15,51 +15,55 @@ * along with Pixelated. If not, see . */ -define(['flight/lib/component', 'views/templates', 'page/events', 'features'], - function (defineComponent, templates, events, features) { - 'use strict'; +define(['flight/lib/component', 'views/templates', 'page/events', 'features', 'feedback/feedback_cache'], + function (defineComponent, templates, events, features, feedbackCache) { + 'use strict'; - return defineComponent(function () { - this.defaultAttrs({ - 'closeButton': '.close-mail-button', - 'submitButton': '#send-button', - 'textBox': '#text-box', - }); + return defineComponent(function () { + this.defaultAttrs({ + 'closeButton': '.close-mail-button', + 'submitButton': '#send-button', + 'textBox': '#text-box', + }); - this.render = function () { - this.$node.html(templates.compose.feedback()); - }; + this.render = function () { + this.$node.html(templates.compose.feedback()); + }; - this.openFeedbackBox = function() { - var stage = this.reset('feedback-box'); - this.attachTo(stage); - this.enableFloatlabel('input.floatlabel'); - this.enableFloatlabel('textarea.floatlabel'); - }; + this.startCachingData = function () { + this.select('textBox').val(feedbackCache.getCache()); + this.select('textBox').on('change', this.cacheFeedbackData.bind(this)); + }; - this.showNoMessageSelected = function() { - this.trigger(document, events.dispatchers.rightPane.openNoMessageSelected); - }; - this.submitFeedback = function () { - var feedback = this.select('textBox').val(); - this.trigger(document, events.feedback.submit, { feedback: feedback }); - }; + this.cacheFeedbackData = function () { + feedbackCache.setCache(this.select('textBox').val()); + }; - this.showSuccessMessage = function () { - this.trigger(document, events.ui.userAlerts.displayMessage, { message: 'Thanks for your feedback!' }); - }; + this.showNoMessageSelected = function () { + this.trigger(document, events.dispatchers.rightPane.openNoMessageSelected); + }; - this.after('initialize', function () { - if (features.isEnabled('feedback')) { + this.submitFeedback = function () { + var feedback = this.select('textBox').val(); + this.trigger(document, events.feedback.submit, {feedback: feedback}); + feedbackCache.resetCache(); + }; + + this.showSuccessMessage = function () { + this.trigger(document, events.ui.userAlerts.displayMessage, {message: 'Thanks for your feedback!'}); + }; + + this.after('initialize', function () { + if (features.isEnabled('feedback')) { this.render(); - this.on(document, events.dispatchers.rightPane.openFeedbackBox, this.openFeedbackBox); + this.startCachingData(); this.on(document, events.feedback.submitted, this.showNoMessageSelected); this.on(document, events.feedback.submitted, this.showSuccessMessage); this.on(this.select('closeButton'), 'click', this.showNoMessageSelected); this.on(this.select('submitButton'), 'click', this.submitFeedback); - } - }); + } + }); + }); }); -}); diff --git a/web-ui/test/spec/feedback/feedback_cache.spec.js b/web-ui/test/spec/feedback/feedback_cache.spec.js new file mode 100644 index 00000000..f6738114 --- /dev/null +++ b/web-ui/test/spec/feedback/feedback_cache.spec.js @@ -0,0 +1,12 @@ +define(['feedback/feedback_cache'], function (feedbackCache) { + 'use strict'; + + describe('feedbackCache', function () { + it('should cache', function () { + feedbackCache.resetCache(); + expect(feedbackCache.getCache()).toEqual(''); + feedbackCache.setCache('foo bar'); + expect(feedbackCache.getCache()).toEqual('foo bar'); + }); + }); +}); diff --git a/web-ui/test/spec/mail_view/ui/feedback_box.spec.js b/web-ui/test/spec/mail_view/ui/feedback_box.spec.js index 4702672c..d40ccf51 100644 --- a/web-ui/test/spec/mail_view/ui/feedback_box.spec.js +++ b/web-ui/test/spec/mail_view/ui/feedback_box.spec.js @@ -1,14 +1,17 @@ describeComponent('mail_view/ui/feedback_box', function () { 'use strict'; + var feedbackCache; + beforeEach(function () { + feedbackCache = require('feedback/feedback_cache'); Pixelated.mockBloodhound(); this.setupComponent('
'); }); - describe('close button behavior', function() { + describe('close button behavior', function () { - it('should fire Show no message selected if the close button is clicked', function() { + it('should fire Show no message selected if the close button is clicked', function () { var spy = spyOnEvent(document, Pixelated.events.dispatchers.rightPane.openNoMessageSelected); this.component.select('closeButton').click(); expect(spy).toHaveBeenTriggeredOn(document); @@ -16,6 +19,23 @@ describeComponent('mail_view/ui/feedback_box', function () { }); + describe('caching feedback data', function () { + it('should cache textbox feedback data', function () { + this.component.select('textBox').val('Pixelated is Awesome!'); + this.component.select('textBox').trigger("change"); + expect(feedbackCache.getCache()).toEqual('Pixelated is Awesome!'); + }); + + it('should have its textbox feedback field, filled with feedbackCache value, when setup', function(){ + feedbackCache.setCache("foo bar"); + + this.setupComponent('
'); + expect(this.component.select('textBox').val()).toEqual('foo bar'); + }); + + + }); + describe('when submit feedback', function () { it('should fire submit feedback event', function () { @@ -26,11 +46,12 @@ describeComponent('mail_view/ui/feedback_box', function () { expect(spy).toHaveBeenTriggeredOnAndWith(document, {feedback: 'Pixelated is Awesome!'}); }); - it('should close feedback box after submit', function() { + it('should close feedback box after submit', function () { var spy = spyOnEvent(document, Pixelated.events.dispatchers.rightPane.openNoMessageSelected); this.component.trigger(document, Pixelated.events.feedback.submitted); expect(spy).toHaveBeenTriggeredOn(document); + expect(feedbackCache.getCache()).toEqual(''); }); it('should shows success message after submit', function () { -- cgit v1.2.3