@twreporter/redux 7.4.2 → 7.5.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,37 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.5.0-rc.2](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.5.0-rc.1...@twreporter/redux@7.5.0-rc.2) (2023-02-13)
7
+
8
+ **Note:** Version bump only for package @twreporter/redux
9
+
10
+
11
+
12
+
13
+
14
+ # [7.5.0-rc.1](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.5.0-rc.0...@twreporter/redux@7.5.0-rc.1) (2023-01-17)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * add `LATEST_LIST_ID` constant ([48b4ceb](https://github.com/twreporter/twreporter-npm-packages/commit/48b4ceb507897aed4202acc954bbf101cb7b8332))
20
+ * add missing latest constant file ([9646ef6](https://github.com/twreporter/twreporter-npm-packages/commit/9646ef611a7b6d205010ffa2254b404bc7260855))
21
+
22
+
23
+
24
+
25
+
26
+ # [7.5.0-rc.0](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.4.2...@twreporter/redux@7.5.0-rc.0) (2023-01-12)
27
+
28
+
29
+ ### Features
30
+
31
+ * add latest page action & reducer ([d56ff04](https://github.com/twreporter/twreporter-npm-packages/commit/d56ff044d46e7073784e9487efb7e0243e7e0d03))
32
+
33
+
34
+
35
+
36
+
6
37
  ## [7.4.2](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.4.2-rc.2...@twreporter/redux@7.4.2) (2023-01-06)
7
38
 
8
39
  **Note:** Version bump only for package @twreporter/redux
@@ -21,6 +21,8 @@ var _topics = require("./topics");
21
21
 
22
22
  var _bookmarks = require("./bookmarks");
23
23
 
24
+ var _latest = require("./latest");
25
+
24
26
  var _default = {
25
27
  createSingleBookmark: _bookmarks.createSingleBookmark,
26
28
  deleteSingleBookmark: _bookmarks.deleteSingleBookmark,
@@ -30,11 +32,13 @@ var _default = {
30
32
  fetchAuthorDetails: _authorDetails.fetchAuthorDetails,
31
33
  fetchFeatureTopic: _topics.fetchFeatureTopic,
32
34
  fetchIndexPageContent: _indexPage.fetchIndexPageContent,
35
+ fetchLatestPosts: _posts.fetchLatestPosts,
33
36
  fetchPostsByCategoryListId: _posts.fetchPostsByCategoryListId,
34
37
  fetchPostsByTagListId: _posts.fetchPostsByTagListId,
35
38
  fetchPostsByCategorySetListId: _posts.fetchPostsByCategorySetListId,
36
39
  fetchRelatedPostsOfAnEntity: _posts.fetchRelatedPostsOfAnEntity,
37
40
  fetchTopics: _topics.fetchTopics,
41
+ fetchLatestTags: _latest.fetchLatestTags,
38
42
  getAccessToken: _auth.getAccessToken,
39
43
  getMultipleBookmarks: _bookmarks.getMultipleBookmarks,
40
44
  getSingleBookmark: _bookmarks.getSingleBookmark,
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fetchLatestTags = fetchLatestTags;
7
+
8
+ var _url = require("../utils/url");
9
+
10
+ var _apiConfig = _interopRequireDefault(require("../constants/api-config"));
11
+
12
+ var _apiEndpoints = _interopRequireDefault(require("../constants/api-endpoints"));
13
+
14
+ var _axios = _interopRequireDefault(require("axios"));
15
+
16
+ var _errorActionCreators = _interopRequireDefault(require("./error-action-creators"));
17
+
18
+ var _reduxStateFieldNames = _interopRequireDefault(require("../constants/redux-state-field-names"));
19
+
20
+ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
21
+
22
+ var _get = _interopRequireDefault(require("lodash/get"));
23
+
24
+ var _values = _interopRequireDefault(require("lodash/values"));
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
27
+
28
+ // lodash
29
+ var _ = {
30
+ get: _get["default"],
31
+ values: _values["default"]
32
+ };
33
+ /**
34
+ * @param {Function} dispatch - dispatch of redux
35
+ * @param {string} origin - URL origin
36
+ * @param {string} path - URL path
37
+ * @param {number} timeout - request timeout to api
38
+ * @return {Promise} resolve with success action or reject with fail action
39
+ **/
40
+
41
+ function _fetch(dispatch, origin, path, params, timeout) {
42
+ var url = (0, _url.formURL)(origin, path, params); // Start to get content
43
+
44
+ dispatch({
45
+ type: _actionTypes["default"].latest.read.request,
46
+ url: url
47
+ });
48
+ return _axios["default"].get(url, {
49
+ timeout: timeout
50
+ }) // Get content successfully
51
+ .then(function (response) {
52
+ var tags = _.get(response, 'data.data.records', []);
53
+
54
+ var successAction = {
55
+ type: _actionTypes["default"].latest.read.success,
56
+ payload: {
57
+ tags: tags
58
+ }
59
+ }; // dispatch content for each sections
60
+
61
+ dispatch(successAction);
62
+ return successAction;
63
+ })["catch"](function (error) {
64
+ var failAction = _errorActionCreators["default"].axios(error, _actionTypes["default"].latest.read.failure);
65
+
66
+ dispatch(failAction);
67
+ return Promise.reject(failAction);
68
+ });
69
+ }
70
+ /**
71
+ * fetchLatestTags
72
+ *
73
+ * @param {number} [timeout=apiConfig.timeout] - request api timeout
74
+ * @return {import('../typedef').Thunk} async action creator
75
+ */
76
+
77
+
78
+ function fetchLatestTags() {
79
+ var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _apiConfig["default"].timeout;
80
+ return function (dispatch, getState) {
81
+ /** @type {import('../typedef').ReduxState} */
82
+ var state = getState();
83
+
84
+ var latestPage = _.get(state, _reduxStateFieldNames["default"].latest, {});
85
+
86
+ var isContentReady = _.get(latestPage, 'isReady', false);
87
+
88
+ if (isContentReady) {
89
+ var action = {
90
+ type: _actionTypes["default"].latest.read.alreadyExists
91
+ };
92
+ dispatch(action);
93
+ return Promise.resolve(action);
94
+ }
95
+
96
+ var apiOrigin = _.get(state, [_reduxStateFieldNames["default"].origins, 'api']);
97
+
98
+ return _fetch(dispatch, apiOrigin, "/v2/".concat(_apiEndpoints["default"].tags), {
99
+ latest_order: 1
100
+ }, timeout);
101
+ };
102
+ }
@@ -8,6 +8,7 @@ exports.fetchRelatedPostsOfAnEntity = fetchRelatedPostsOfAnEntity;
8
8
  exports.fetchPostsByCategoryListId = fetchPostsByCategoryListId;
9
9
  exports.fetchPostsByTagListId = fetchPostsByTagListId;
10
10
  exports.fetchPostsByCategorySetListId = fetchPostsByCategorySetListId;
11
+ exports.fetchLatestPosts = fetchLatestPosts;
11
12
 
12
13
  var _url = require("../utils/url");
13
14
 
@@ -23,6 +24,8 @@ var _reduxStateFieldNames = _interopRequireDefault(require("../constants/redux-s
23
24
 
24
25
  var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
25
26
 
27
+ var _latest = require("../constants/latest");
28
+
26
29
  var _filter = _interopRequireDefault(require("lodash/filter"));
27
30
 
28
31
  var _get = _interopRequireDefault(require("lodash/get"));
@@ -310,7 +313,9 @@ function fetchPostsByListId(listId, listType) {
310
313
  offset: offset
311
314
  };
312
315
 
313
- if (listType === 'category_set_id') {
316
+ if (listType === 'latest') {
317
+ params.sort = '-published_date';
318
+ } else if (listType === 'category_set_id') {
314
319
  var _$split = _.split(listId, '_'),
315
320
  _$split2 = _slicedToArray(_$split, 2),
316
321
  categoryId = _$split2[0],
@@ -390,4 +395,22 @@ function fetchPostsByCategorySetListId(listId) {
390
395
  return function (dispatch, getState) {
391
396
  return fetchPostsByListId(listId, 'category_set_id', limit, page, timeout)(dispatch, getState);
392
397
  };
398
+ }
399
+ /**
400
+ * Fetch latest posts(only containing meta properties) sorted by published date.
401
+ * @param {number} [limit=10] - the number of posts you want to get in one request
402
+ * @param {number} [page=1] - page is used to calculate `offset`, which indicates how many posts we should skip
403
+ * @param {number} [timeout=apiConfig.timeout] - request api timeout
404
+ * @return {import('../typedef').Thunk} async action creator
405
+ *
406
+ */
407
+
408
+
409
+ function fetchLatestPosts() {
410
+ var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
411
+ var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
412
+ var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _apiConfig["default"].timeout;
413
+ return function (dispatch, getState) {
414
+ return fetchPostsByListId(_latest.LATEST_LIST_ID, 'latest', limit, page, timeout)(dispatch, getState);
415
+ };
393
416
  }
@@ -67,6 +67,14 @@ var _default = {
67
67
  alreadyExists: 'posts by list id to fetch are already existed'
68
68
  }
69
69
  },
70
+ latest: {
71
+ read: {
72
+ request: 'request to fetch latest tags',
73
+ success: 'success to fetch latest tags',
74
+ failure: 'fail to fetch latest tags',
75
+ alreadyExists: 'latest tags to fetch are already existed'
76
+ }
77
+ },
70
78
  singleBookmark: {
71
79
  read: {
72
80
  request: 'request to fetch single bookmark',
@@ -10,6 +10,7 @@ var _default = {
10
10
  indexPageCategories: 'index_page_categories',
11
11
  posts: 'posts',
12
12
  users: 'users',
13
- authors: 'authors'
13
+ authors: 'authors',
14
+ tags: 'tags'
14
15
  };
15
16
  exports["default"] = _default;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LATEST_LIST_ID = void 0;
7
+ var LATEST_LIST_ID = 'latest';
8
+ exports.LATEST_LIST_ID = LATEST_LIST_ID;
@@ -11,6 +11,7 @@ var _categorySet = require("@twreporter/core/lib/constants/category-set");
11
11
 
12
12
  var entities = 'entities';
13
13
  var indexPage = 'index_page';
14
+ var latest = 'latest';
14
15
  var lists = 'lists';
15
16
  var topicList = 'topic_list';
16
17
  var selectedPost = 'selected_post';
@@ -82,6 +83,7 @@ var _default = {
82
83
  selectedTopic: selectedTopic,
83
84
  entities: entities,
84
85
  indexPage: indexPage,
86
+ latest: latest,
85
87
  lists: lists,
86
88
  topicList: topicList,
87
89
  postsInEntities: postsInEntities,
package/lib/index.js CHANGED
@@ -17,6 +17,8 @@ var _pagination = _interopRequireDefault(require("./utils/pagination"));
17
17
 
18
18
  var _reduxStateFieldNames = _interopRequireDefault(require("./constants/redux-state-field-names"));
19
19
 
20
+ var _latest = require("./constants/latest");
21
+
20
22
  var _reduxStore = _interopRequireDefault(require("./context/redux-store"));
21
23
 
22
24
  var _provider = _interopRequireDefault(require("./component/provider"));
@@ -67,6 +69,7 @@ var _default = {
67
69
  denormalizeTopics: _denormalizeAsset.denormalizeTopics,
68
70
  formURL: _url.formURL,
69
71
  pagination: _pagination["default"]
70
- }
72
+ },
73
+ LATEST_LIST_ID: _latest.LATEST_LIST_ID
71
74
  };
72
75
  exports["default"] = _default;
@@ -37,12 +37,14 @@ var _relatedPostsOf = _interopRequireDefault(require("./related-posts-of"));
37
37
 
38
38
  var _settings = _interopRequireDefault(require("./settings"));
39
39
 
40
+ var _latest = _interopRequireDefault(require("./latest"));
41
+
40
42
  var _combineReducers;
41
43
 
42
44
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
43
45
 
44
46
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
45
47
 
46
- var rootReducer = (0, _redux.combineReducers)((_combineReducers = {}, _defineProperty(_combineReducers, _reduxStateFieldNames["default"].articlesByAuthor, _authorArticles.articlesByAuthor), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].auth, _auth["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].authorsList, _authors.authorsList), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].bookmarks, _bookmarks["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].bookmarkWidget, _bookmarkWidget["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].entities, _entities["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].indexPage, _indexPage["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].lists, _posts.posts), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].searchedAuthorsList, _authors.searchedAuthorsList), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].selectedPost, _posts.post), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].selectedTopic, _topics.topic), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].topicList, _topics.topics), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].relatedPostsOf, _relatedPostsOf["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].featureTopic, _featureTopic["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].entitiesForAuthors, _entitiesForAuthors["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].origins, _origins["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].settings, _settings["default"]), _combineReducers));
48
+ var rootReducer = (0, _redux.combineReducers)((_combineReducers = {}, _defineProperty(_combineReducers, _reduxStateFieldNames["default"].articlesByAuthor, _authorArticles.articlesByAuthor), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].auth, _auth["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].authorsList, _authors.authorsList), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].bookmarks, _bookmarks["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].bookmarkWidget, _bookmarkWidget["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].entities, _entities["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].indexPage, _indexPage["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].lists, _posts.posts), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].searchedAuthorsList, _authors.searchedAuthorsList), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].selectedPost, _posts.post), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].selectedTopic, _topics.topic), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].topicList, _topics.topics), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].relatedPostsOf, _relatedPostsOf["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].featureTopic, _featureTopic["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].entitiesForAuthors, _entitiesForAuthors["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].origins, _origins["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].settings, _settings["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].latest, _latest["default"]), _combineReducers));
47
49
  var _default = rootReducer;
48
50
  exports["default"] = _default;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
9
+
10
+ var _get = _interopRequireDefault(require("lodash/get"));
11
+
12
+ var _merge = _interopRequireDefault(require("lodash/merge"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
+
16
+ // lodash
17
+ var _ = {
18
+ get: _get["default"],
19
+ merge: _merge["default"]
20
+ };
21
+ var initialState = {
22
+ error: null,
23
+ isFetching: false,
24
+ isReady: false
25
+ };
26
+
27
+ function latestPage() {
28
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
29
+ var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
30
+ var payload = action.payload;
31
+
32
+ switch (action.type) {
33
+ case _actionTypes["default"].latest.read.success:
34
+ {
35
+ var rtn = {
36
+ latestTag: _.get(payload, 'tags', [])
37
+ };
38
+ return _.merge({}, state, rtn, {
39
+ error: null,
40
+ isFetching: false,
41
+ isReady: true
42
+ });
43
+ }
44
+
45
+ case _actionTypes["default"].latest.read.request:
46
+ {
47
+ return _.merge({}, state, {
48
+ isFetching: true,
49
+ isReady: false
50
+ });
51
+ }
52
+
53
+ case _actionTypes["default"].latest.read.failure:
54
+ {
55
+ return _.merge({}, state, {
56
+ error: payload.error,
57
+ isFetching: false,
58
+ isReady: false
59
+ });
60
+ }
61
+
62
+ default:
63
+ return state;
64
+ }
65
+ }
66
+
67
+ var _default = latestPage;
68
+ exports["default"] = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twreporter/redux",
3
- "version": "7.4.2",
3
+ "version": "7.5.0-rc.2",
4
4
  "description": "redux actions and reducers for twreporter website",
5
5
  "repository": "https://github.com/twreporter/twreporter-npm-packages.git",
6
6
  "author": "twreporter <developer@twreporter.org>",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "homepage": "https://github.com/twreporter/twreporter-redux/#readme",
27
27
  "dependencies": {
28
- "@twreporter/core": "^1.8.1",
28
+ "@twreporter/core": "^1.8.2-rc.1",
29
29
  "axios": "^0.19.0",
30
30
  "es6-error": "^4.0.2",
31
31
  "humps": "^0.6.0",
@@ -44,5 +44,5 @@
44
44
  "files": [
45
45
  "lib"
46
46
  ],
47
- "gitHead": "6743e0935126f9ed7cabb7be5a9a4dfa6742a3f7"
47
+ "gitHead": "1ebf9eeda3976aad554b576bf974c2718752ef4e"
48
48
  }