preferences-reducer.js 2.42 KB
/*
 * ADOBE CONFIDENTIAL
 *
 * Copyright 2016 Adobe Systems Incorporated
 * All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and may be covered by U.S. and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 */

define('screens/player/firmware/preferences/impl/preferences-reducer', [
    'underscore',
    'screens/player/shared/util',
    'screens/player/firmware/preferences/preferences'
], function(_, Util, Preferences) {
    'use strict';

    function sanitizeServerUrl(payload) {
        if (payload && payload.server) {
            payload.server = Util.trimTrailingSlash(payload.server);
        }
        return payload;
    }

    function preferencesReducer(preferences, action) {
        switch (action.type) {
            case Preferences.ACTIONS.SAVING:
                return _.assign({}, preferences, {
                    status: Preferences.STATES.SAVING,
                    status_error: ''
                });
            case Preferences.ACTIONS.SAVING_DONE:
                return _.assign({}, preferences, {
                    status: Preferences.STATES.READY
                }, sanitizeServerUrl(action.payload));
            case Preferences.ACTIONS.SAVING_ERROR:
                return _.assign({}, preferences, {
                    status: Preferences.STATES.READY,
                    status_error: action.payload
                });
            default: return preferences || {
                status: Preferences.STATES.READY,
                status_error: ''
            };
        }
    }

    return preferencesReducer;
});

/* istanbul ignore next */
require([
    'screens/player/firmware/preferences/impl/preferences-reducer',
    'screens/player/shared/serviceadmin',
    'screens/player/store/store',
    'screens/player/firmware/preferences/preferences'
], function(reducer, ServiceAdmin, Store, Preferences) {
    'use strict';

    ServiceAdmin.onServiceHighestRankedStart(Store.serviceName, function(store) {
        store.addReducer(reducer, Preferences.NAMESPACE);
    });
});