mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-11 13:48:23 +02:00
107 lines
3 KiB
JavaScript
107 lines
3 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* global loop:true */
|
|
|
|
var loop = loop || {};
|
|
loop.store = loop.store || {};
|
|
|
|
loop.store.FeedbackStore = (function() {
|
|
"use strict";
|
|
|
|
var sharedActions = loop.shared.actions;
|
|
var FEEDBACK_STATES = loop.store.FEEDBACK_STATES = {
|
|
// Initial state (mood selection)
|
|
INIT: "feedback-init",
|
|
// User detailed feedback form step
|
|
DETAILS: "feedback-details",
|
|
// Pending feedback data submission
|
|
PENDING: "feedback-pending",
|
|
// Feedback has been sent
|
|
SENT: "feedback-sent",
|
|
// There was an issue with the feedback API
|
|
FAILED: "feedback-failed"
|
|
};
|
|
|
|
/**
|
|
* Feedback store.
|
|
*
|
|
* @param {loop.Dispatcher} dispatcher The dispatcher for dispatching actions
|
|
* and registering to consume actions.
|
|
* @param {Object} options Options object:
|
|
* - {mozLoop} mozLoop The MozLoop API object.
|
|
* - {feedbackClient} loop.FeedbackAPIClient The feedback API client.
|
|
*/
|
|
var FeedbackStore = loop.store.createStore({
|
|
actions: [
|
|
"requireFeedbackDetails",
|
|
"sendFeedback",
|
|
"sendFeedbackError",
|
|
"feedbackComplete"
|
|
],
|
|
|
|
initialize: function(options) {
|
|
if (!options.feedbackClient) {
|
|
throw new Error("Missing option feedbackClient");
|
|
}
|
|
this._feedbackClient = options.feedbackClient;
|
|
},
|
|
|
|
/**
|
|
* Returns initial state data for this active room.
|
|
*/
|
|
getInitialStoreState: function() {
|
|
return {feedbackState: FEEDBACK_STATES.INIT};
|
|
},
|
|
|
|
/**
|
|
* Requires user detailed feedback.
|
|
*/
|
|
requireFeedbackDetails: function() {
|
|
this.setStoreState({feedbackState: FEEDBACK_STATES.DETAILS});
|
|
},
|
|
|
|
/**
|
|
* Sends feedback data to the feedback server.
|
|
*
|
|
* @param {sharedActions.SendFeedback} actionData The action data.
|
|
*/
|
|
sendFeedback: function(actionData) {
|
|
delete actionData.name;
|
|
this._feedbackClient.send(actionData, function(err) {
|
|
if (err) {
|
|
this.dispatchAction(new sharedActions.SendFeedbackError({
|
|
error: err
|
|
}));
|
|
return;
|
|
}
|
|
this.setStoreState({feedbackState: FEEDBACK_STATES.SENT});
|
|
}.bind(this));
|
|
|
|
this.setStoreState({feedbackState: FEEDBACK_STATES.PENDING});
|
|
},
|
|
|
|
/**
|
|
* Notifies a store from any error encountered while sending feedback data.
|
|
*
|
|
* @param {sharedActions.SendFeedback} actionData The action data.
|
|
*/
|
|
sendFeedbackError: function(actionData) {
|
|
this.setStoreState({
|
|
feedbackState: FEEDBACK_STATES.FAILED,
|
|
error: actionData.error
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Resets the store to its initial state as feedback has been completed,
|
|
* i.e. ready for the next round of feedback.
|
|
*/
|
|
feedbackComplete: function() {
|
|
this.resetStoreState();
|
|
}
|
|
});
|
|
|
|
return FeedbackStore;
|
|
})();
|