twreporter-redux
Advanced tools
Comparing version 2.1.3 to 2.1.4-beta.1
@@ -38,6 +38,12 @@ 'use strict'; | ||
var _isInteger = require('lodash/isInteger'); | ||
var _isInteger2 = _interopRequireDefault(_isInteger); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
// lodash | ||
var _ = { | ||
get: _get2.default | ||
get: _get2.default, | ||
isInteger: _isInteger2.default | ||
@@ -47,6 +53,3 @@ /* Fetch a full topic, whose assets like relateds, leading_video ...etc are all complete, | ||
*/ | ||
}; | ||
// lodash | ||
function fetchAFullTopic(slug) { | ||
};function fetchAFullTopic(slug) { | ||
return function (dispatch, getState) { | ||
@@ -92,3 +95,3 @@ var state = getState(); | ||
function _fetchTopics(dispatch, path, successActionType) { | ||
function _fetchTopics(dispatch, path, page, nPerPage, successActionType) { | ||
// Start to get topics | ||
@@ -107,2 +110,4 @@ var url = (0, _formApiUrl2.default)(path); | ||
payload: { | ||
page: page, | ||
nPerPage: nPerPage, | ||
items: _.get(response, 'data.records', []), | ||
@@ -116,3 +121,6 @@ total: _.get(response, 'data.meta.total', 0) | ||
type: _actionTypes2.default.ERROR_TO_GET_TOPICS, | ||
error: error | ||
payload: { | ||
page: page, | ||
error: error | ||
} | ||
}); | ||
@@ -126,18 +134,58 @@ }); | ||
*/ | ||
function fetchTopics(limit) { | ||
function fetchTopics() { | ||
var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; | ||
var nPerPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5; | ||
return function (dispatch, getState) { | ||
// check if nPerPage number is valid | ||
if (_.isInteger(nPerPage) && nPerPage > 0) { | ||
return dispatch({ | ||
type: _actionTypes2.default.ERROR_TO_GET_TOPICS, | ||
error: 'nPerPage value must be an interger larger than 0, but is ' + nPerPage | ||
}); | ||
} | ||
var state = getState(); | ||
var topics = _.get(state, _reduxStateFieldNames2.default.topicList); | ||
var items = _.get(topics, 'items'); | ||
var pageItems = _.get(topics, ['items', page], []); | ||
var pageItemsLength = pageItems.length; | ||
var total = _.get(topics, 'total', 0); | ||
var totalPages = Math.ceil(total / nPerPage); | ||
// if items already exsited and there is nothing more to load | ||
if (Array.isArray(items) && _.get(topics, 'total', 0) <= items.length) { | ||
return Promise.resolve(); | ||
// check if page number is valid | ||
if (_.isInteger(page) && page > 0 && page <= totalPages) { | ||
return dispatch({ | ||
type: _actionTypes2.default.ERROR_TO_GET_TOPICS, | ||
error: 'page value must be an interger between 1 to ' + totalPages + ', but is ' + page | ||
}); | ||
} | ||
var offset = _.get(topics, 'items.length', 0); | ||
// If items of target page already exist | ||
if (page < totalPages) { | ||
if (pageItemsLength === nPerPage) { | ||
return dispatch({ | ||
type: _actionTypes2.default.CHANGE_SELECTED_TOPICS_PAGE, | ||
payload: { | ||
page: page, | ||
nPerPage: nPerPage, | ||
items: pageItems | ||
} | ||
}); | ||
} | ||
} | ||
if (page === totalPages) { | ||
if (pageItemsLength === total % nPerPage) { | ||
return dispatch({ | ||
type: _actionTypes2.default.CHANGE_SELECTED_TOPICS_PAGE, | ||
payload: { | ||
page: page, | ||
nPerPage: nPerPage, | ||
items: pageItems | ||
} | ||
}); | ||
} | ||
} | ||
var path = _apiEndpoints2.default.topics + '?limit=' + limit + '&offset=' + offset; | ||
var path = _apiEndpoints2.default.topics + '?limit=' + nPerPage + '&offset=' + nPerPage * (page - 1); | ||
return _fetchTopics(dispatch, path, _actionTypes2.default.GET_TOPICS); | ||
return _fetchTopics(dispatch, path, page, nPerPage, _actionTypes2.default.GET_TOPICS); | ||
}; | ||
@@ -144,0 +192,0 @@ } |
@@ -19,2 +19,7 @@ 'use strict'; | ||
// actions setting topics | ||
CHANGE_SELECTED_TOPICS_PAGE: 'CHANGE_SELECTED_TOPICS_PAGE', | ||
CHANGE_N_PER_TOPICS_PAGE: 'CHANGE_N_PER_TOPICS_PAGE', | ||
// actions fetching a full topic | ||
@@ -21,0 +26,0 @@ START_TO_GET_A_FULL_TOPIC: 'START_TO_GET_A_FULL_TOPIC', |
@@ -12,2 +12,6 @@ 'use strict'; | ||
var _assign = require('lodash/assign'); | ||
var _assign2 = _interopRequireDefault(_assign); | ||
var _concat = require('lodash/concat'); | ||
@@ -35,3 +39,5 @@ | ||
// lodash | ||
var _ = { | ||
assign: _assign2.default, | ||
concat: _concat2.default, | ||
@@ -44,5 +50,2 @@ get: _get2.default, | ||
// lodash | ||
function topic() { | ||
@@ -56,3 +59,3 @@ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
{ | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
slug: _.get(action, 'payload.slug'), | ||
@@ -65,3 +68,3 @@ error: null, | ||
case _actionTypes2.default.START_TO_GET_A_FULL_TOPIC: | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
slug: _.get(action, 'payload.slug'), | ||
@@ -73,3 +76,3 @@ error: null, | ||
case _actionTypes2.default.ERROR_TO_GET_A_FULL_TOPIC: | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
slug: _.get(action, 'payload.slug'), | ||
@@ -89,14 +92,18 @@ error: _.get(action, 'payload.error'), | ||
switch (action.type) { | ||
case _actionTypes2.default.CHANGE_SELECTED_TOPICS_PAGE: | ||
case _actionTypes2.default.GET_TOPICS: | ||
{ | ||
var items = _.get(action, 'payload.items', []); | ||
var total = _.get(action, 'payload.total', 0); | ||
var payload = action.payload; | ||
var concatItems = _.concat(_.get(state, 'items', []), _.map(items, function (item) { | ||
return item.slug; | ||
})); | ||
var pageItems = _.get(payload, 'items'); | ||
var total = _.get(payload, 'total'); | ||
var page = _.get(payload, 'page'); | ||
var nPerPage = _.get(payload, 'nPerPage'); | ||
return _.merge({}, state, { | ||
items: concatItems, | ||
var nextItems = nPerPage !== state.nPerPage ? { page: pageItems } : _.merge({}, state.items, { page: pageItems }); | ||
return _.assign({}, state, { | ||
items: nextItems, | ||
total: total, | ||
selectedPage: page, | ||
nPerPage: nPerPage, | ||
error: null, | ||
@@ -109,3 +116,3 @@ isFetching: false | ||
console.log('url to fetch:', action.url); | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
error: null, | ||
@@ -116,4 +123,4 @@ isFetching: true | ||
case _actionTypes2.default.ERROR_TO_GET_TOPICS: | ||
return _.merge({}, state, { | ||
error: _.get(action, 'error'), | ||
return _.assign({}, state, { | ||
error: _.get(action, 'payload.error'), | ||
isFetching: false | ||
@@ -120,0 +127,0 @@ }); |
{ | ||
"name": "twreporter-redux", | ||
"version": "2.1.3", | ||
"version": "2.1.4-beta.1", | ||
"description": "redux actions and reducers for twreporter website", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -10,5 +10,7 @@ import apiConfig from '../conf/api-config.json' | ||
import get from 'lodash/get' | ||
import isInteger from 'lodash/isInteger' | ||
const _ = { | ||
get, | ||
isInteger, | ||
} | ||
@@ -63,3 +65,3 @@ | ||
function _fetchTopics(dispatch, path, successActionType) { | ||
function _fetchTopics(dispatch, path, page, nPerPage, successActionType) { | ||
// Start to get topics | ||
@@ -79,2 +81,4 @@ const url = formAPIURL(path) | ||
payload: { | ||
page, | ||
nPerPage, | ||
items: _.get(response, 'data.records', []), | ||
@@ -89,3 +93,6 @@ total: _.get(response, 'data.meta.total', 0), | ||
type: types.ERROR_TO_GET_TOPICS, | ||
error, | ||
payload: { | ||
page, | ||
error, | ||
}, | ||
}) | ||
@@ -99,18 +106,55 @@ }) | ||
*/ | ||
export function fetchTopics(limit) { | ||
export function fetchTopics(page = 1, nPerPage = 5) { | ||
return (dispatch, getState) => { | ||
// check if nPerPage number is valid | ||
if (_.isInteger(nPerPage) && nPerPage > 0) { | ||
return dispatch({ | ||
type: types.ERROR_TO_GET_TOPICS, | ||
error: `nPerPage value must be an interger larger than 0, but is ${nPerPage}`, | ||
}) | ||
} | ||
const state = getState() | ||
const topics = _.get(state, fieldNames.topicList) | ||
const items = _.get(topics, 'items') | ||
const pageItems = _.get(topics, ['items', page], []) | ||
const pageItemsLength = pageItems.length | ||
const total = _.get(topics, 'total', 0) | ||
const totalPages = Math.ceil(total / nPerPage) | ||
// if items already exsited and there is nothing more to load | ||
if (Array.isArray(items) && _.get(topics, 'total', 0) <= items.length) { | ||
return Promise.resolve() | ||
// check if page number is valid | ||
if (_.isInteger(page) && page > 0 && page <= totalPages) { | ||
return dispatch({ | ||
type: types.ERROR_TO_GET_TOPICS, | ||
error: `page value must be an interger between 1 to ${totalPages}, but is ${page}`, | ||
}) | ||
} | ||
const offset = _.get(topics, 'items.length', 0) | ||
// If items of target page already exist | ||
if (page < totalPages) { | ||
if (pageItemsLength === nPerPage) { | ||
return dispatch({ | ||
type: types.CHANGE_SELECTED_TOPICS_PAGE, | ||
payload: { | ||
page, | ||
nPerPage, | ||
items: pageItems, | ||
}, | ||
}) | ||
} | ||
} | ||
if (page === totalPages) { | ||
if (pageItemsLength === total % nPerPage) { | ||
return dispatch({ | ||
type: types.CHANGE_SELECTED_TOPICS_PAGE, | ||
payload: { | ||
page, | ||
nPerPage, | ||
items: pageItems, | ||
}, | ||
}) | ||
} | ||
} | ||
const path = `${apiEndpoints.topics}?limit=${limit}&offset=${offset}` | ||
const path = `${apiEndpoints.topics}?limit=${nPerPage}&offset=${nPerPage * (page - 1)}` | ||
return _fetchTopics(dispatch, path, types.GET_TOPICS) | ||
return _fetchTopics(dispatch, path, page, nPerPage, types.GET_TOPICS) | ||
} | ||
@@ -117,0 +161,0 @@ } |
@@ -14,2 +14,7 @@ const types = { | ||
// actions setting topics | ||
CHANGE_SELECTED_TOPICS_PAGE: 'CHANGE_SELECTED_TOPICS_PAGE', | ||
CHANGE_N_PER_TOPICS_PAGE: 'CHANGE_N_PER_TOPICS_PAGE', | ||
// actions fetching a full topic | ||
@@ -16,0 +21,0 @@ START_TO_GET_A_FULL_TOPIC: 'START_TO_GET_A_FULL_TOPIC', |
import types from '../constants/action-types' | ||
// lodash | ||
import assign from 'lodash/assign' | ||
import concat from 'lodash/concat' | ||
@@ -11,2 +12,3 @@ import get from 'lodash/get' | ||
const _ = { | ||
assign, | ||
concat, | ||
@@ -23,3 +25,3 @@ get, | ||
case types.CHANGE_SELECTED_TOPIC: { | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
slug: _.get(action, 'payload.slug'), | ||
@@ -32,3 +34,3 @@ error: null, | ||
case types.START_TO_GET_A_FULL_TOPIC: | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
slug: _.get(action, 'payload.slug'), | ||
@@ -40,3 +42,3 @@ error: null, | ||
case types.ERROR_TO_GET_A_FULL_TOPIC: | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
slug: _.get(action, 'payload.slug'), | ||
@@ -53,11 +55,16 @@ error: _.get(action, 'payload.error'), | ||
switch (action.type) { | ||
case types.CHANGE_SELECTED_TOPICS_PAGE: | ||
case types.GET_TOPICS: { | ||
const items = _.get(action, 'payload.items', []) | ||
const total = _.get(action, 'payload.total', 0) | ||
const { payload } = action | ||
const pageItems = _.get(payload, 'items') | ||
const total = _.get(payload, 'total') | ||
const page = _.get(payload, 'page') | ||
const nPerPage = _.get(payload, 'nPerPage') | ||
const concatItems = _.concat(_.get(state, 'items', []), _.map(items, item => item.slug)) | ||
return _.merge({}, state, { | ||
items: concatItems, | ||
const nextItems = (nPerPage !== state.nPerPage) ? { page: pageItems } : _.merge({}, state.items, { page: pageItems }) | ||
return _.assign({}, state, { | ||
items: nextItems, | ||
total, | ||
selectedPage: page, | ||
nPerPage, | ||
error: null, | ||
@@ -70,3 +77,3 @@ isFetching: false, | ||
console.log('url to fetch:', action.url) | ||
return _.merge({}, state, { | ||
return _.assign({}, state, { | ||
error: null, | ||
@@ -77,4 +84,4 @@ isFetching: true, | ||
case types.ERROR_TO_GET_TOPICS: | ||
return _.merge({}, state, { | ||
error: _.get(action, 'error'), | ||
return _.assign({}, state, { | ||
error: _.get(action, 'payload.error'), | ||
isFetching: false, | ||
@@ -81,0 +88,0 @@ }) |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
299156
5266
0
1