@twreporter/redux 7.8.3-rc.2 → 7.9.0-rc.0

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,20 @@
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.9.0-rc.0](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.8.3-rc.2...@twreporter/redux@7.9.0-rc.0) (2023-12-26)
7
+
8
+
9
+ ### Features
10
+
11
+ * **redux/src/actions/__test__/analytics.test:** add 400 error test case ([0aa8530](https://github.com/twreporter/twreporter-npm-packages/commit/0aa853077bf87edd24e02508ae0b2b15ab7a04bf))
12
+ * analytics action & test ([f303c78](https://github.com/twreporter/twreporter-npm-packages/commit/f303c780d1f65cdbb856560e7481d6238e9675f8))
13
+ * analytics reducer & test ([d63f9b4](https://github.com/twreporter/twreporter-npm-packages/commit/d63f9b4388f113416bd9132cb7001f62441fd3bc))
14
+ * get analytics data from getUser ([45570fc](https://github.com/twreporter/twreporter-npm-packages/commit/45570fc2a8d081cf92bc52cf86230bfb3f752742))
15
+
16
+
17
+
18
+
19
+
6
20
  ## [7.8.3-rc.2](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.8.3-rc.1...@twreporter/redux@7.8.3-rc.2) (2023-12-26)
7
21
 
8
22
  **Note:** Version bump only for package @twreporter/redux
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setUserAnalyticsData = setUserAnalyticsData;
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 _reduxStateFieldNames = _interopRequireDefault(require("../constants/redux-state-field-names"));
15
+
16
+ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
17
+
18
+ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
19
+
20
+ var _get = _interopRequireDefault(require("lodash/get"));
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
+
24
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25
+
26
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
27
+
28
+ 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; }
29
+
30
+ var _ = {
31
+ get: _get["default"]
32
+ };
33
+ var apiTimeout = _apiConfig["default"].timeout;
34
+ /**
35
+ * @typedef {Object} RequestAction
36
+ * @property {string} type - The type of action
37
+ * @property {string} payload.method - The HTTP request method
38
+ * @property {string} payload.url - The target to send request
39
+ * @property {Object} payload.body - The request body with POST, PUT, DELETE, or PATCH request
40
+ * @property {Object} payload.headers - The request header
41
+ */
42
+
43
+ /**
44
+ * @typedef {Object} SuccessAction
45
+ * @property {string} type - The type of action
46
+ * @property {string} payload
47
+ * @property {Object} payload.data - Response data
48
+ * @property {string} payload.statusCode - Response status code
49
+ */
50
+
51
+ /**
52
+ * @param {Object} fetchResponse
53
+ * @param {string} actionType
54
+ * @returns {SuccessAction}
55
+ */
56
+
57
+ function buildSuccessActionFromRes(fetchResponse, actionType) {
58
+ return {
59
+ type: actionType,
60
+ payload: {
61
+ data: _.get(fetchResponse, 'data'),
62
+ statusCode: _.get(fetchResponse, 'status')
63
+ }
64
+ };
65
+ }
66
+ /**
67
+ * @typedef {Object} FailAction
68
+ * @property {string} type - Action error type
69
+ * @property {string} payload
70
+ * @property {string} payload.statusCode - Response status code
71
+ * @property {string} payload.message - Error message
72
+ * @property {object} payload.error - Error object
73
+ */
74
+
75
+ /**
76
+ * @export
77
+ * @param {string} jwt - access_token granted for the user
78
+ * @param {number} userID - id of user
79
+ * @param {string} postID - id of post
80
+ * @param {object} readPostStatus - read post record
81
+ * @param {boolean} readPostStatus.readPostCount - read post or not
82
+ * @param {number} readPostStatus.readPostSec - read post second
83
+ * @return {Function} - function will be executed in Redux Thunk middleware
84
+ */
85
+
86
+
87
+ function setUserAnalyticsData(jwt, userID, postID, _ref) {
88
+ var readPostCount = _ref.readPostCount,
89
+ readPostSec = _ref.readPostSec;
90
+
91
+ /**
92
+ * @param {Function} dispatch - Redux store dispatch function
93
+ * @param {Function} getState - Redux store getState function
94
+ * @return {Promise} resolve with success action or reject with fail action
95
+ */
96
+ return function (dispatch, getState) {
97
+ var state = getState();
98
+
99
+ var apiOrigin = _.get(state, [_reduxStateFieldNames["default"].origins, 'api']);
100
+
101
+ var url = (0, _url.formURL)(apiOrigin, "/v2/".concat(_apiEndpoints["default"].users, "/").concat(userID, "/analytics"));
102
+ dispatch({
103
+ type: _actionTypes["default"].analytics.update.request,
104
+ url: url
105
+ });
106
+ var fetchConfig = {
107
+ keepalive: true,
108
+ method: 'POST',
109
+ timeout: apiTimeout,
110
+ headers: {
111
+ Authorization: "Bearer ".concat(jwt)
112
+ }
113
+ };
114
+ var body = {
115
+ post_id: postID,
116
+ read_posts_count: readPostCount,
117
+ read_posts_sec: readPostSec
118
+ };
119
+ return (0, _nodeFetch["default"])(url, _objectSpread(_objectSpread({}, fetchConfig), {}, {
120
+ body: JSON.stringify(body)
121
+ })).then(function (response) {
122
+ return response.json().then(function (data) {
123
+ return {
124
+ status: response.status,
125
+ body: data
126
+ };
127
+ });
128
+ }).then(function (res) {
129
+ var successAction = buildSuccessActionFromRes({
130
+ data: res.body,
131
+ status: res.status
132
+ }, _actionTypes["default"].analytics.update.success);
133
+ dispatch(successAction);
134
+ return successAction;
135
+ })["catch"](function (error) {
136
+ var failAction = {
137
+ type: _actionTypes["default"].analytics.update.failure,
138
+ payload: {
139
+ error: error
140
+ }
141
+ };
142
+ dispatch(failAction);
143
+ return Promise.reject(failAction);
144
+ });
145
+ };
146
+ }
@@ -25,6 +25,8 @@ var _latest = require("./latest");
25
25
 
26
26
  var _user = require("./user");
27
27
 
28
+ var _analytics = require("./analytics");
29
+
28
30
  var _default = {
29
31
  createSingleBookmark: _bookmarks.createSingleBookmark,
30
32
  deleteSingleBookmark: _bookmarks.deleteSingleBookmark,
@@ -47,6 +49,7 @@ var _default = {
47
49
  searchAuthorsIfNeeded: _authors.searchAuthorsIfNeeded,
48
50
  getUserData: _user.getUserData,
49
51
  setUserData: _user.setUserData,
50
- onboarding: _user.onboarding
52
+ onboarding: _user.onboarding,
53
+ setUserAnalyticsData: _analytics.setUserAnalyticsData
51
54
  };
52
55
  exports["default"] = _default;
@@ -143,6 +143,13 @@ var _default = {
143
143
  success: 'succes to update user data',
144
144
  failure: 'fail to update user data'
145
145
  }
146
+ },
147
+ analytics: {
148
+ update: {
149
+ request: 'request to update user analytics data',
150
+ success: 'succes to update user analytics data',
151
+ failure: 'fail to update user analytics data'
152
+ }
146
153
  }
147
154
  };
148
155
  exports["default"] = _default;
@@ -21,7 +21,8 @@ var bookmarks = 'bookmarks';
21
21
  var bookmarkWidget = 'bookmarkWidget';
22
22
  var entitiesForAuthors = 'entitiesForAuthors';
23
23
  var searchedAuthorsList = 'searchedAuthorsList';
24
- var user = 'user'; // sections in index_page
24
+ var user = 'user';
25
+ var analytics = 'analytics'; // sections in index_page
25
26
 
26
27
  var editorPicksSection = 'editor_picks_section';
27
28
  var infographicsSection = 'infographics_section';
@@ -86,6 +87,7 @@ var _default = {
86
87
  settings: settings,
87
88
  relatedPostsOf: 'relatedPostsOf',
88
89
  featureTopic: 'featureTopic',
89
- user: user
90
+ user: user,
91
+ analytics: analytics
90
92
  };
91
93
  exports["default"] = _default;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = analytics;
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
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
+
20
+ 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; }
21
+
22
+ var _ = {
23
+ get: _get["default"],
24
+ merge: _merge["default"]
25
+ };
26
+ var initState = {
27
+ error: null,
28
+ isFetching: false,
29
+ isReady: false,
30
+ userID: -1,
31
+ postID: '',
32
+ readPostsCount: false,
33
+ readPostsSec: 0
34
+ };
35
+
36
+ function analytics() {
37
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initState;
38
+ var action = arguments.length > 1 ? arguments[1] : undefined;
39
+ var payload = action.payload;
40
+
41
+ switch (action.type) {
42
+ case _actionTypes["default"].analytics.update.request:
43
+ {
44
+ return _.merge({}, state, {
45
+ isFetching: true,
46
+ isReady: false
47
+ });
48
+ }
49
+
50
+ case _actionTypes["default"].analytics.update.success:
51
+ {
52
+ var userID = _.get(payload, 'data.user_id');
53
+
54
+ var postID = _.get(payload, 'data.post_id');
55
+
56
+ var readPostsCount = _.get(payload, 'data.read_posts_count');
57
+
58
+ var readPostsSec = _.get(payload, 'data.read_posts_sec');
59
+
60
+ return _objectSpread(_objectSpread({}, state), {}, {
61
+ error: null,
62
+ isFetching: false,
63
+ isReady: true,
64
+ userID: userID,
65
+ postID: postID,
66
+ readPostsCount: readPostsCount,
67
+ readPostsSec: readPostsSec
68
+ });
69
+ }
70
+
71
+ case _actionTypes["default"].analytics.update.failure:
72
+ {
73
+ return _objectSpread(_objectSpread({}, state), {}, {
74
+ error: payload.error,
75
+ isFetching: false,
76
+ isReady: false
77
+ });
78
+ }
79
+
80
+ default:
81
+ return state;
82
+ }
83
+ }
@@ -41,12 +41,14 @@ var _latest = _interopRequireDefault(require("./latest"));
41
41
 
42
42
  var _user = _interopRequireDefault(require("./user"));
43
43
 
44
+ var _analytics = _interopRequireDefault(require("./analytics"));
45
+
44
46
  var _combineReducers;
45
47
 
46
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
47
49
 
48
50
  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; }
49
51
 
50
- 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"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].user, _user["default"]), _combineReducers));
52
+ 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"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].user, _user["default"]), _defineProperty(_combineReducers, _reduxStateFieldNames["default"].analytics, _analytics["default"]), _combineReducers));
51
53
  var _default = rootReducer;
52
54
  exports["default"] = _default;
@@ -35,7 +35,10 @@ var initState = {
35
35
  registrationDate: '',
36
36
  activated: false,
37
37
  readPreference: [],
38
- maillist: []
38
+ maillist: [],
39
+ agreeDataCollection: true,
40
+ readPostsCount: 0,
41
+ readPostsSec: 0
39
42
  };
40
43
 
41
44
  function user() {
@@ -72,6 +75,12 @@ function user() {
72
75
 
73
76
  var maillist = _.get(payload, 'data.data.maillist');
74
77
 
78
+ var agreeDataCollection = _.get(payload, 'data.data.agree_data_collection');
79
+
80
+ var readPostsCount = _.get(payload, 'data.data.read_posts_count');
81
+
82
+ var readPostsSec = _.get(payload, 'data.data.read_posts_sec');
83
+
75
84
  return _objectSpread(_objectSpread({}, state), {}, {
76
85
  error: null,
77
86
  isFetching: false,
@@ -84,7 +93,10 @@ function user() {
84
93
  registrationDate: registrationDate,
85
94
  activated: activated,
86
95
  readPreference: readPreference,
87
- maillist: maillist
96
+ maillist: maillist,
97
+ agreeDataCollection: agreeDataCollection,
98
+ readPostsCount: readPostsCount,
99
+ readPostsSec: readPostsSec
88
100
  });
89
101
  }
90
102
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twreporter/redux",
3
- "version": "7.8.3-rc.2",
3
+ "version": "7.9.0-rc.0",
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>",
@@ -38,11 +38,11 @@
38
38
  "redux-thunk": "^2.3.0"
39
39
  },
40
40
  "devDependencies": {
41
- "nock": "10.0.6",
41
+ "nock": "^13.4.0",
42
42
  "redux-mock-store": "^1.2.3"
43
43
  },
44
44
  "files": [
45
45
  "lib"
46
46
  ],
47
- "gitHead": "93053f2487a052dce9e04f4acfdb1aa747a11439"
47
+ "gitHead": "2790482023d97249c159feeff8afe2e65b26813a"
48
48
  }