@twreporter/redux 7.5.2-rc.0 → 7.6.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,28 @@
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.6.0-rc.0](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.5.2-rc.1...@twreporter/redux@7.6.0-rc.0) (2023-06-12)
7
+
8
+
9
+ ### Features
10
+
11
+ * add firstName and lastName and role for user store ([ea21518](https://github.com/twreporter/twreporter-npm-packages/commit/ea21518b60ccd1d7ae098895af1a01c94d35e846))
12
+ * add user action test ([c8d5fc8](https://github.com/twreporter/twreporter-npm-packages/commit/c8d5fc8d25eac02a245653383ddf0c72935617d8))
13
+ * add user reducer test ([28cc793](https://github.com/twreporter/twreporter-npm-packages/commit/28cc793bdf68559a4f81e44ab62e6ee62b58a1b7))
14
+ * get and set user data ([17668f3](https://github.com/twreporter/twreporter-npm-packages/commit/17668f34eee9e305fd9c27278b986c1c2d251b99))
15
+
16
+
17
+
18
+
19
+
20
+ ## [7.5.2-rc.1](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.5.2-rc.0...@twreporter/redux@7.5.2-rc.1) (2023-05-23)
21
+
22
+ **Note:** Version bump only for package @twreporter/redux
23
+
24
+
25
+
26
+
27
+
6
28
  ## [7.5.2-rc.0](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/redux@7.5.1...@twreporter/redux@7.5.2-rc.0) (2023-05-22)
7
29
 
8
30
  **Note:** Version bump only for package @twreporter/redux
@@ -23,6 +23,8 @@ var _bookmarks = require("./bookmarks");
23
23
 
24
24
  var _latest = require("./latest");
25
25
 
26
+ var _user = require("./user");
27
+
26
28
  var _default = {
27
29
  createSingleBookmark: _bookmarks.createSingleBookmark,
28
30
  deleteSingleBookmark: _bookmarks.deleteSingleBookmark,
@@ -42,6 +44,8 @@ var _default = {
42
44
  getAccessToken: _auth.getAccessToken,
43
45
  getMultipleBookmarks: _bookmarks.getMultipleBookmarks,
44
46
  getSingleBookmark: _bookmarks.getSingleBookmark,
45
- searchAuthorsIfNeeded: _authors.searchAuthorsIfNeeded
47
+ searchAuthorsIfNeeded: _authors.searchAuthorsIfNeeded,
48
+ getUserData: _user.getUserData,
49
+ setUserData: _user.setUserData
46
50
  };
47
51
  exports["default"] = _default;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getUserData = getUserData;
7
+ exports.setUserData = setUserData;
8
+
9
+ var _url = require("../utils/url");
10
+
11
+ var _apiConfig = _interopRequireDefault(require("../constants/api-config"));
12
+
13
+ var _apiEndpoints = _interopRequireDefault(require("../constants/api-endpoints"));
14
+
15
+ var _errorActionCreators = _interopRequireDefault(require("./error-action-creators"));
16
+
17
+ var _reduxStateFieldNames = _interopRequireDefault(require("../constants/redux-state-field-names"));
18
+
19
+ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
20
+
21
+ var _axios = _interopRequireDefault(require("axios"));
22
+
23
+ var _get = _interopRequireDefault(require("lodash/get"));
24
+
25
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
26
+
27
+ // lodash
28
+ var _ = {
29
+ get: _get["default"]
30
+ };
31
+ var apiTimeout = _apiConfig["default"].timeout;
32
+ /**
33
+ * @typedef {Object} userData
34
+ * @property {string} email - email of user
35
+ * @property {string} id - id of user
36
+ * @property {string} jwt - json web token issued by backend for this certain user
37
+ */
38
+
39
+ /**
40
+ * @typedef {Object} RequestAction
41
+ * @property {string} type - The type of action
42
+ * @property {string} payload.method - The HTTP request method
43
+ * @property {string} payload.url - The target to send request
44
+ * @property {Object} payload.body - The request body with POST, PUT, DELETE, or PATCH request
45
+ * @property {Object} payload.headers - The request header
46
+ */
47
+
48
+ /**
49
+ * @typedef {Object} SuccessAction
50
+ * @property {string} type - The type of action
51
+ * @property {string} payload
52
+ * @property {Object} payload.data - Response data
53
+ * @property {string} payload.statusCode - Response status code
54
+ */
55
+
56
+ /**
57
+ * @param {Object} axiosResponse
58
+ * @param {string} actionType
59
+ * @returns {SuccessAction}
60
+ */
61
+
62
+ function buildSuccessActionFromRes(axiosResponse, actionType) {
63
+ return {
64
+ type: actionType,
65
+ payload: {
66
+ data: _.get(axiosResponse, 'data'),
67
+ statusCode: _.get(axiosResponse, 'status')
68
+ }
69
+ };
70
+ }
71
+ /**
72
+ * @typedef {Object} FailAction
73
+ * @property {string} type - Action error type
74
+ * @property {string} payload
75
+ * @property {string} payload.statusCode - Response status code
76
+ * @property {string} payload.message - Error message
77
+ * @property {object} payload.error - Error object
78
+ */
79
+
80
+ /**
81
+ *
82
+ *
83
+ * @export
84
+ * @param {string} jwt - access_token granted for the user
85
+ * @param {number} userID - id of user
86
+ * @return {Function} - function will be executed in Redux Thunk middleware
87
+ */
88
+ // TODO: wait till api ready
89
+
90
+
91
+ function getUserData(jwt, userID) {
92
+ /**
93
+ * @param {Function} dispatch - Redux store dispatch function
94
+ * @param {Function} getState - Redux store getState function
95
+ * @return {Promise} resolve with success action or reject with fail action
96
+ */
97
+ // return function(dispatch, getState) {
98
+ // const state = getState()
99
+ // const apiOrigin = _.get(state, [stateFieldNames.origins, 'api'])
100
+ // const url = formURL(
101
+ // apiOrigin,
102
+ // `/v2/${apiEndpoints.users}/${userID}`,
103
+ // )
104
+ // dispatch({
105
+ // type: types.user.read.request,
106
+ // url
107
+ // })
108
+ // const axiosConfig = {
109
+ // timeout: apiTimeout,
110
+ // headers: {
111
+ // Authorization: `Bearer ${jwt}`,
112
+ // },
113
+ // }
114
+ // return axios
115
+ // .get(url, axiosConfig)
116
+ // .then(res => {
117
+ // const successAction = buildSuccessActionFromRes(
118
+ // res,
119
+ // types.user.read.success
120
+ // )
121
+ // dispatch(successAction)
122
+ // return successAction
123
+ // })
124
+ // .catch(error => {
125
+ // const failAction = failActionCreators.axios(
126
+ // error,
127
+ // types.user.read.failure
128
+ // )
129
+ // dispatch(failAction)
130
+ // return Promise.reject(failAction)
131
+ // })
132
+ // }
133
+ }
134
+ /**
135
+ *
136
+ *
137
+ * @export
138
+ * @param {string} jwt - access_token granted for the user
139
+ * @param {number} userID - id of user
140
+ * @param {string[]} readPreference - subscribed topics
141
+ * @param {string[]} maillist - subscribed mail list
142
+ * @return {Function} - function will be executed in Redux Thunk middleware
143
+ */
144
+
145
+
146
+ function setUserData(jwt, userID, readPreference, maillist) {
147
+ /**
148
+ * @param {Function} dispatch - Redux store dispatch function
149
+ * @param {Function} getState - Redux store getState function
150
+ * @return {Promise} resolve with success action or reject with fail action
151
+ */
152
+ return function (dispatch, getState) {
153
+ var state = getState();
154
+
155
+ var apiOrigin = _.get(state, [_reduxStateFieldNames["default"].origins, 'api']);
156
+
157
+ var url = (0, _url.formURL)(apiOrigin, "/v2/".concat(_apiEndpoints["default"].users, "/").concat(userID));
158
+ dispatch({
159
+ type: _actionTypes["default"].user.update.request,
160
+ url: url
161
+ });
162
+ var axiosConfig = {
163
+ timeout: apiTimeout,
164
+ headers: {
165
+ Authorization: "Bearer ".concat(jwt)
166
+ }
167
+ };
168
+ var body = {
169
+ read_preference: readPreference,
170
+ maillist: maillist
171
+ };
172
+ return _axios["default"].post(url, body, axiosConfig).then(function (res) {
173
+ var successAction = buildSuccessActionFromRes(res, _actionTypes["default"].user.update.success);
174
+ dispatch(successAction);
175
+ return successAction;
176
+ })["catch"](function (error) {
177
+ var failAction = _errorActionCreators["default"].axios(error, _actionTypes["default"].user.update.failure);
178
+
179
+ dispatch(failAction);
180
+ return Promise.reject(failAction);
181
+ });
182
+ };
183
+ }
@@ -131,6 +131,18 @@ var _default = {
131
131
  },
132
132
  dataAlreadyExists: 'data already exists',
133
133
  noMoreItemsToFetch: 'no more items to fetch',
134
- lastActionIsStillProcessing: 'last action is still processing'
134
+ lastActionIsStillProcessing: 'last action is still processing',
135
+ user: {
136
+ read: {
137
+ request: 'request to fetch single user data',
138
+ success: 'succes to fetch single user data',
139
+ failure: 'fail to fetch single user data'
140
+ },
141
+ update: {
142
+ request: 'request to update user data',
143
+ success: 'succes to update user data',
144
+ failure: 'fail to update user data'
145
+ }
146
+ }
135
147
  };
136
148
  exports["default"] = _default;
@@ -22,7 +22,8 @@ var authorsList = 'authorsList';
22
22
  var bookmarks = 'bookmarks';
23
23
  var bookmarkWidget = 'bookmarkWidget';
24
24
  var entitiesForAuthors = 'entitiesForAuthors';
25
- var searchedAuthorsList = 'searchedAuthorsList'; // sections in index_page
25
+ var searchedAuthorsList = 'searchedAuthorsList';
26
+ var user = 'user'; // sections in index_page
26
27
 
27
28
  var editorPicksSection = 'editor_picks_section';
28
29
  var infographicsSection = 'infographics_section';
@@ -100,6 +101,7 @@ var _default = {
100
101
  searchedAuthorsList: searchedAuthorsList,
101
102
  settings: settings,
102
103
  relatedPostsOf: 'relatedPostsOf',
103
- featureTopic: 'featureTopic'
104
+ featureTopic: 'featureTopic',
105
+ user: user
104
106
  };
105
107
  exports["default"] = _default;
package/lib/index.js CHANGED
@@ -41,6 +41,8 @@ var _posts = require("./reducers/posts");
41
41
 
42
42
  var _topics = require("./reducers/topics");
43
43
 
44
+ var _user = _interopRequireDefault(require("./reducers/user"));
45
+
44
46
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
45
47
 
46
48
  // actions
@@ -59,7 +61,8 @@ var _default = {
59
61
  posts: _posts.posts,
60
62
  relatedPostsOf: _relatedPostsOf["default"],
61
63
  topic: _topics.topic,
62
- topics: _topics.topics
64
+ topics: _topics.topics,
65
+ user: _user["default"]
63
66
  },
64
67
  reduxStateFields: _reduxStateFieldNames["default"],
65
68
  ReduxStoreContext: _reduxStore["default"],
@@ -39,12 +39,14 @@ var _settings = _interopRequireDefault(require("./settings"));
39
39
 
40
40
  var _latest = _interopRequireDefault(require("./latest"));
41
41
 
42
+ var _user = _interopRequireDefault(require("./user"));
43
+
42
44
  var _combineReducers;
43
45
 
44
46
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
45
47
 
46
48
  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; }
47
49
 
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));
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));
49
51
  var _default = rootReducer;
50
52
  exports["default"] = _default;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = user;
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); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { 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
+ // TODO: need add other user state after connect to getUser api
31
+ // userID: -1,
32
+ // firstName: '',
33
+ // lastName: '',
34
+ // role: MEMBER_ROLE.explorer,
35
+ // email: '',
36
+ // activated: false,
37
+ readPreference: [],
38
+ maillist: []
39
+ };
40
+
41
+ function user() {
42
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initState;
43
+ var action = arguments.length > 1 ? arguments[1] : undefined;
44
+ var payload = action.payload;
45
+
46
+ switch (action.type) {
47
+ case _actionTypes["default"].user.update.request:
48
+ {
49
+ return _.merge({}, state, {
50
+ isFetching: true,
51
+ isReady: false
52
+ });
53
+ }
54
+
55
+ case _actionTypes["default"].user.update.success:
56
+ {
57
+ var readPreference = _.get(payload, 'data.record.read_preference', []);
58
+
59
+ var maillist = _.get(payload, 'data.record.maillist', []);
60
+
61
+ state.readPreference = readPreference;
62
+ state.maillist = maillist;
63
+ return _objectSpread(_objectSpread({}, state), {}, {
64
+ error: null,
65
+ isFetching: false,
66
+ isReady: true,
67
+ maillist: maillist,
68
+ readPreference: readPreference
69
+ });
70
+ }
71
+
72
+ case _actionTypes["default"].user.update.failure:
73
+ {
74
+ return _objectSpread(_objectSpread({}, state), {}, {
75
+ error: payload.error,
76
+ isFetching: false,
77
+ isReady: false
78
+ });
79
+ }
80
+
81
+ default:
82
+ return state;
83
+ }
84
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twreporter/redux",
3
- "version": "7.5.2-rc.0",
3
+ "version": "7.6.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>",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "homepage": "https://github.com/twreporter/twreporter-redux/#readme",
27
27
  "dependencies": {
28
- "@twreporter/core": "^1.10.0-rc.0",
28
+ "@twreporter/core": "^1.10.0-rc.2",
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": "9302a1179e3e640d73d8ee73cb5596944824ba23"
47
+ "gitHead": "7f423041f31558196c12a2cb438b506619bc5f68"
48
48
  }