twreporter-redux
Version:
redux actions and reducers for twreporter website
208 lines (171 loc) • 6.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.createBookmark = createBookmark;
exports.getBookmarks = getBookmarks;
exports.getCurrentBookmark = getCurrentBookmark;
exports.deleteBookmark = deleteBookmark;
var _dateStringToTimestamp = require('../utils/date-string-to-timestamp');
var _dateStringToTimestamp2 = _interopRequireDefault(_dateStringToTimestamp);
var _apiConfig = require('../conf/api-config.json');
var _apiConfig2 = _interopRequireDefault(_apiConfig);
var _apiEndpoints = require('../constants/api-endpoints');
var _apiEndpoints2 = _interopRequireDefault(_apiEndpoints);
var _axios = require('axios');
var _axios2 = _interopRequireDefault(_axios);
var _findIndex = require('lodash/findIndex');
var _findIndex2 = _interopRequireDefault(_findIndex);
var _formApiUrl = require('../utils/form-api-url');
var _formApiUrl2 = _interopRequireDefault(_formApiUrl);
var _get = require('lodash/get');
var _get2 = _interopRequireDefault(_get);
var _localStorageManager = require('../utils/local-storage-manager');
var _actionTypes = require('../constants/action-types');
var _actionTypes2 = _interopRequireDefault(_actionTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _ = {
get: _get2.default,
findIndex: _findIndex2.default
};
var getAxiosInstance = function getAxiosInstance(token) {
return _axios2.default.create({
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + token
}
});
};
var errorHandler = function errorHandler(error) {
return {
type: _actionTypes2.default.RECORD_BOOKMARK_ERROR,
payload: {
error: error
}
};
};
var deleteSingleBookmarkSuc = function deleteSingleBookmarkSuc(target_index) {
return {
type: _actionTypes2.default.DELETE_SINGLE_BOOKMARK,
payload: {
index: target_index
}
};
};
var getMultipleBookmarksSuc = function getMultipleBookmarksSuc(offset, data, total) {
return {
type: _actionTypes2.default.GET_MULTIPLE_BOOKMARKS,
payload: {
offset: offset,
data: data,
total: total
}
};
};
var createSingleBookmarkSuc = function createSingleBookmarkSuc(bookmark) {
return {
type: _actionTypes2.default.CREATE_SINGLE_BOOKMARK,
payload: {
bookmark: bookmark
}
};
};
function createBookmark(_ref) {
var slug = _ref.slug,
host = _ref.host,
is_external = _ref.is_external,
title = _ref.title,
desc = _ref.desc,
thumbnail = _ref.thumbnail,
category = _ref.category,
published_date = _ref.published_date,
authors = _ref.authors;
return function (dispatch) {
var _getNecessaryInfo = (0, _localStorageManager.getNecessaryInfo)(),
token = _getNecessaryInfo.token,
userId = _getNecessaryInfo.userId;
var axiosInstance = getAxiosInstance(token);
var path = _apiEndpoints2.default.users + '/' + userId + '/' + _apiEndpoints2.default.bookmarks;
var url = (0, _formApiUrl2.default)(path);
var bookmark = {
slug: slug,
host: host,
is_external: is_external,
title: title,
desc: desc,
thumbnail: thumbnail,
category: category,
published_date: (0, _dateStringToTimestamp2.default)(published_date),
authors: authors
};
return axiosInstance.post(url, bookmark).then(function (res) {
var id = _.get(res, 'data.record.id', 0);
dispatch(createSingleBookmarkSuc(_extends({}, bookmark, { id: id })));
return id;
}).catch(function (error) {
dispatch(errorHandler(error));
throw error;
});
};
}
function getBookmarks(offset, limit, sort) {
return function (dispatch) {
var _getNecessaryInfo2 = (0, _localStorageManager.getNecessaryInfo)(),
token = _getNecessaryInfo2.token,
userId = _getNecessaryInfo2.userId;
var axiosInstance = getAxiosInstance(token);
var path = _apiEndpoints2.default.users + '/' + userId + '/' + _apiEndpoints2.default.bookmarks + '?offset=' + offset + '&limit=' + limit + '&sort=' + sort;
var url = (0, _formApiUrl2.default)(path);
return axiosInstance.get(url).then(function (res) {
var data = _.get(res, 'data.records', []);
var total = _.get(res, 'data.meta.total', 0);
if (data && total) {
dispatch(getMultipleBookmarksSuc(offset, data, total));
}
return { data: data, total: total };
}).catch(function (error) {
dispatch(errorHandler(error));
throw error;
});
};
}
function getCurrentBookmark(bookmarkSlug, host) {
return function (dispatch) {
var _getNecessaryInfo3 = (0, _localStorageManager.getNecessaryInfo)(),
token = _getNecessaryInfo3.token,
userId = _getNecessaryInfo3.userId;
var axiosInstance = getAxiosInstance(token);
var path = _apiEndpoints2.default.users + '/' + userId + '/' + _apiEndpoints2.default.bookmarks + '/' + bookmarkSlug + '?host=' + host;
var url = (0, _formApiUrl2.default)(path);
return axiosInstance.get(url).then(function (res) {
return _.get(res, 'data.record.id', 0);
}).catch(function (error) {
dispatch(errorHandler(error));
throw error;
});
};
}
function deleteBookmark(bookmarkID) {
return function (dispatch, getState) {
var state = getState();
var data = _.get(state, ['bookmarks', 'data'], []);
var target_index = _.findIndex(data, function (obj) {
return obj.id === bookmarkID;
});
var _getNecessaryInfo4 = (0, _localStorageManager.getNecessaryInfo)(),
token = _getNecessaryInfo4.token,
userId = _getNecessaryInfo4.userId;
var axiosInstance = getAxiosInstance(token);
var path = _apiEndpoints2.default.users + '/' + userId + '/' + _apiEndpoints2.default.bookmarks + '/' + bookmarkID;
var url = (0, _formApiUrl2.default)(path);
return axiosInstance.delete(url, {
timeout: _apiConfig2.default.API_TIME_OUT
}).then(function () {
dispatch(deleteSingleBookmarkSuc(target_index));
}).catch(function (error) {
dispatch(errorHandler(error));
throw error;
});
};
}