/* --------------------------------------------------------------
user_configuration_service.js 2016-02-23
Gambio GmbH
http://www.gambio.de
Copyright (c) 2016 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
jse.libs.user_configuration_service = jse.libs.user_configuration_service || {};
/**
* ## User Configuration Library
*
* This library is an adapter for the UserConfigurationService of the shop's backend codebase. It will
* perform AJAX requests for getting/setting user config data that is a robust way to store information
* about a specific user.
*
*```js
* var options= {
* data: {
* userId: 1, // Current user ID
* configurationKey: 'recent_search_area', // Configuration key
* configurationValue: '', // Configuration value (only for posting)
* },
*
* onSuccess: function (data) {}, // Callback function, that will be executed on successful request,
* // contains the response as argument.
*
* onError: function (data) {}, // Callback function, that will be executed on failed request.
* }
*
* jse.libs.user_configuration_service.set(options); // Set values
*
* jse.libs.user_configuration_service.get(options); // Get values
* ```
*
* @module JSE/Libs/user_configuration_service
* @exports jse.libs.user_configuration_service
*/
(function (exports) {
'use strict';
// ------------------------------------------------------------------------
// DEFAULTS
// ------------------------------------------------------------------------
/**
* Default Library Settings
*
* @type {object}
*/
var defaults = {
// URL
baseUrl: 'admin.php?do=UserConfiguration',
urlSet: '/set',
urlGet: '/get'
};
// ------------------------------------------------------------------------
// PRIVATE METHODS
// ------------------------------------------------------------------------
/**
* Performs AJAX request
*
* @param {object} params Contains the request parameters.
* @param {string} params.type - type of request
* @param {function} params.onSuccess - callback on success
* @param {function} params.onError - callback on success
* @param {object} params.data - request parameter
*
* @throws Error
*
* @private
*/
var _request = function (params) {
$.ajax({
url: [
defaults.baseUrl,
(params.type === 'set' ? defaults.urlSet : defaults.urlGet)
].join(''),
dataType: 'json',
data: params.data,
method: (params.type === 'set' ? 'post' : 'get'),
success: function (data) {
if (params.type === 'get') { // GET
_handleSuccess(data, params);
} else { // POST
if (data.success) {
_handleSuccess({}, params);
} else if (typeof params.onError === 'function') {
params.onError(data);
}
}
},
error: function (data) {
if (typeof params.onError === 'function') {
params.onError(data);
}
}
});
};
/**
* Handles success requests.
*
* @param {object} data - Data returned from server
* @param {object} params - Parameters
*
* @private
*/
var _handleSuccess = function (data, params) {
var response = {};
if (data.success && data.configurationValue) {
response = data;
}
if (typeof params.onSuccess === 'function') {
params.onSuccess(response);
}
};
// ------------------------------------------------------------------------
// PUBLIC METHODS
// ------------------------------------------------------------------------
/**
* Returns the user configuration value.
*
* @param {object} options
* @param {function} options.onSuccess - callback on success
* @param {function} options.onError - callback on success
* @param {object} options.data - request parameter
*/
exports.get = function (options) {
options.type = 'get';
_request(options);
};
/**
* Sets the user configuration value.
*
* @param {object} options
* @param {function} options.onSuccess - callback on success
* @param {function} options.onError - callback on success
* @param {object} options.data - request parameter
*/
exports.set = function (options) {
options.type = 'set';
_request(options);
};
})(jse.libs.user_configuration_service);