@times-components/user-state 0.4.2 → 0.4.3

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,17 @@
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
+ ## [0.4.3](https://github.com/newsuk/times-components/compare/@times-components/user-state@0.4.2...@times-components/user-state@0.4.3) (2022-10-18)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **TDP-2612:** UserState refactor ([#3167](https://github.com/newsuk/times-components/issues/3167)) ([acb908b](https://github.com/newsuk/times-components/commit/acb908ba9827284f9d91b02c1246f4578716c559))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [0.4.2](https://github.com/newsuk/times-components/compare/@times-components/user-state@0.4.1...@times-components/user-state@0.4.2) (2022-10-14)
7
18
 
8
19
  **Note:** Version bump only for package @times-components/user-state
package/README.md CHANGED
@@ -37,17 +37,6 @@ The `state` property is simply a matcher function that gets passed the current u
37
37
  state and returns true/false to decide whether to return the children or
38
38
  the fallback.
39
39
 
40
- `UserState` also provides a number of preset matchers which you can use.
41
-
42
- - `loggedIn`: Is the user logged in at all (subscriber, RA, RA Expired)
43
- - `meteredExpired`: Is the user RA Expired
44
- - `metered`: Is the user RA or RA Expired
45
- - `shared`: Is the user viewing with a shareToken
46
- - `nonExpiredUser`: Is the user logged in with access (subscriber, RA)
47
- - `fullArticle`: Does the user have access to the full article (subscriber, RA, share token)
48
- - `subscriber`: Is the user a subscriber
49
- - `loggedInOrShared`: Is the user logged in or on a share token (subscriber, RA, RA Expired, share token)
50
-
51
40
  ```js
52
41
  // In the test file
53
42
  import { mockUserState } from "@times-components/user-state";
package/dist/matchers.js CHANGED
@@ -3,58 +3,69 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isLoggedInOrShared = exports.shouldShowFullArticle = exports.isNonMeteredExpiredUser = exports.isSubscriber = exports.isMetered = exports.isShared = exports.isMeteredExpired = exports.hasAccess = exports.isLoggedIn = void 0;
6
+ exports.showJoinTheConversationDialog = exports.showCommentingModule = exports.showTokenisedEmailShare = exports.showArticleSaveButton = exports.showTopicTags = exports.showArticleExtras = exports.showSaveAndShareBar = void 0;
7
7
 
8
- var isLoggedIn = function isLoggedIn(userState) {
9
- return userState.isLoggedIn;
8
+ /* User states */
9
+ var isMeteredUser = function isMeteredUser(userState) {
10
+ return userState.isMetered || userState.isLightPackUser;
10
11
  };
11
12
 
12
- exports.isLoggedIn = isLoggedIn;
13
+ var isLightPackExpired = function isLightPackExpired(userState) {
14
+ return userState.isLightPackUser && userState.viewsRemaining === 0;
15
+ };
13
16
 
14
- var hasAccess = function hasAccess(userState) {
15
- return userState.hasAccess;
17
+ var isMeteredExpiredUser = function isMeteredExpiredUser(userState) {
18
+ return userState.isMeteredExpired || isLightPackExpired(userState);
16
19
  };
17
20
 
18
- exports.hasAccess = hasAccess;
21
+ var isLoggedInWithAccess = function isLoggedInWithAccess(userState) {
22
+ return userState.isLoggedIn && !isMeteredExpiredUser(userState);
23
+ };
19
24
 
20
- var isMeteredExpired = function isMeteredExpired(userState) {
21
- return isLoggedIn(userState) && userState.isMeteredExpired;
25
+ var isSubscriber = function isSubscriber(userState) {
26
+ return userState.isLoggedIn && !isMeteredUser(userState);
22
27
  };
28
+ /* Entitlements */
23
29
 
24
- exports.isMeteredExpired = isMeteredExpired;
25
30
 
26
- var isShared = function isShared(userState) {
27
- return userState.isShared;
31
+ var showSaveAndShareBar = function showSaveAndShareBar(userState) {
32
+ return userState.isLoggedIn || userState.isShared;
28
33
  };
29
34
 
30
- exports.isShared = isShared;
35
+ exports.showSaveAndShareBar = showSaveAndShareBar;
31
36
 
32
- var isMetered = function isMetered(userState) {
33
- return isLoggedIn(userState) && userState.isMetered;
37
+ var showArticleExtras = function showArticleExtras(userState) {
38
+ return isLoggedInWithAccess(userState) || userState.isShared;
34
39
  };
35
40
 
36
- exports.isMetered = isMetered;
41
+ exports.showArticleExtras = showArticleExtras;
37
42
 
38
- var isSubscriber = function isSubscriber(userState) {
39
- return isLoggedIn(userState) && !userState.isMetered && !userState.isMeteredExpired;
43
+ var showTopicTags = function showTopicTags(userState) {
44
+ return userState.isLoggedIn || userState.isShared;
45
+ };
46
+
47
+ exports.showTopicTags = showTopicTags;
48
+
49
+ var showArticleSaveButton = function showArticleSaveButton(userState) {
50
+ return userState.isLoggedIn;
40
51
  };
41
52
 
42
- exports.isSubscriber = isSubscriber;
53
+ exports.showArticleSaveButton = showArticleSaveButton;
43
54
 
44
- var isNonMeteredExpiredUser = function isNonMeteredExpiredUser(user) {
45
- return isLoggedIn(user) && !isMeteredExpired(user);
55
+ var showTokenisedEmailShare = function showTokenisedEmailShare(userState) {
56
+ return isSubscriber(userState);
46
57
  };
47
58
 
48
- exports.isNonMeteredExpiredUser = isNonMeteredExpiredUser;
59
+ exports.showTokenisedEmailShare = showTokenisedEmailShare;
49
60
 
50
- var shouldShowFullArticle = function shouldShowFullArticle(user) {
51
- return isShared(user) || isNonMeteredExpiredUser(user) || hasAccess(user);
61
+ var showCommentingModule = function showCommentingModule(userState) {
62
+ return isSubscriber(userState);
52
63
  };
53
64
 
54
- exports.shouldShowFullArticle = shouldShowFullArticle;
65
+ exports.showCommentingModule = showCommentingModule;
55
66
 
56
- var isLoggedInOrShared = function isLoggedInOrShared(user) {
57
- return isShared(user) || isLoggedIn(user);
67
+ var showJoinTheConversationDialog = function showJoinTheConversationDialog(userState) {
68
+ return userState.isLoggedIn && isMeteredUser(userState);
58
69
  };
59
70
 
60
- exports.isLoggedInOrShared = isLoggedInOrShared;
71
+ exports.showJoinTheConversationDialog = showJoinTheConversationDialog;
@@ -27,7 +27,7 @@ function mockUserState() {
27
27
  }, MockUserState);
28
28
 
29
29
  MockUserState.mockReset = function () {
30
- MockUserState.mockStates = [RealUserState.fullArticle, RealUserState.loggedIn, RealUserState.loggedInOrShared, RealUserState.subscriber];
30
+ MockUserState.mockStates = [RealUserState.showSaveAndShareBar, RealUserState.showArticleExtras, RealUserState.showArticleSaveButton, RealUserState.showCommentingModule];
31
31
  };
32
32
 
33
33
  MockUserState.mockReset();
@@ -63,15 +63,13 @@ function UserState(_ref) {
63
63
  });
64
64
  }
65
65
 
66
- UserState.loggedIn = _matchers.isLoggedIn;
67
- UserState.meteredExpired = _matchers.isMeteredExpired;
68
- UserState.metered = _matchers.isMetered;
69
- UserState.shared = _matchers.isShared;
70
- UserState.nonMeteredExpiredUser = _matchers.isNonMeteredExpiredUser;
71
- UserState.fullArticle = _matchers.shouldShowFullArticle;
72
- UserState.subscriber = _matchers.isSubscriber;
73
- UserState.loggedInOrShared = _matchers.isLoggedInOrShared;
74
- UserState.hasAccess = _matchers.hasAccess;
66
+ UserState.showSaveAndShareBar = _matchers.showSaveAndShareBar;
67
+ UserState.showArticleExtras = _matchers.showArticleExtras;
68
+ UserState.showTopicTags = _matchers.showTopicTags;
69
+ UserState.showArticleSaveButton = _matchers.showArticleSaveButton;
70
+ UserState.showTokenisedEmailShare = _matchers.showTokenisedEmailShare;
71
+ UserState.showCommentingModule = _matchers.showCommentingModule;
72
+ UserState.showJoinTheConversationDialog = _matchers.showJoinTheConversationDialog;
75
73
  UserState.propTypes = {
76
74
  state: _propTypes["default"].func.isRequired,
77
75
  children: _propTypes["default"].node,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@times-components/user-state",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Selectively render react components based on current user state",
5
5
  "main": "dist/user-state",
6
6
  "dev": "src/user-state",
@@ -32,15 +32,15 @@
32
32
  "homepage": "https://github.com/newsuk/times-components#readme",
33
33
  "dependencies": {
34
34
  "@storybook/addon-knobs": "5.3.18",
35
- "@times-components/context": "1.10.1",
36
- "@times-components/utils": "6.15.1",
35
+ "@times-components/context": "1.10.2",
36
+ "@times-components/utils": "6.15.2",
37
37
  "prop-types": "15.7.2"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@babel/core": "7.4.4",
41
41
  "@times-components/eslint-config-thetimes": "0.8.18",
42
42
  "@times-components/jest-configurator-web": "0.8.0",
43
- "@times-components/jest-serializer": "3.4.1",
43
+ "@times-components/jest-serializer": "3.4.2",
44
44
  "@times-components/webpack-configurator": "2.1.0",
45
45
  "babel-jest": "24.8.0",
46
46
  "babel-loader": "8.0.5",
@@ -63,5 +63,5 @@
63
63
  "publishConfig": {
64
64
  "access": "public"
65
65
  },
66
- "gitHead": "1da4d8169d316fe83739814ab4ba16ce195709c9"
66
+ "gitHead": "0d8c91264a62f72c627c89b0953e66f4128c20ed"
67
67
  }
package/rnw.js CHANGED
@@ -1 +1 @@
1
- module.exports=function(e){var r={};function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(r){return e[r]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=7)}([function(e,r){e.exports=require("react")},function(e,r){e.exports=require("@storybook/addon-knobs/react")},function(e,r){e.exports=require("prop-types")},function(e,r){e.exports=require("@times-components/context/rnw")},function(e,r){e.exports=require("@times-components/utils/rnw")},function(e,r){function t(e){var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}t.keys=function(){return[]},t.resolve=t,e.exports=t,t.id=5},function(e,r){e.exports=require("@times-components/user-state/rnw")},function(e,r,t){"use strict";t.r(r);var n=t(0),o=t.n(n),u=(t(2),t(3)),i=t.n(u),c=t(4);function s(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function f(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?s(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var l=function(e){var r=e.children,t=e.serverRender,n=void 0===t||t;return o.a.createElement(i.a.Consumer,null,(function(e){var t=e.user;return o.a.createElement(c.ServerClientRender,{client:function(){var e=window.nuk,n=(void 0===e?{}:e).user||{};return r({user:f(f({},t),n)})},server:n?function(){return r({user:t})}:null})}))},d=function(e){return e.isLoggedIn},b=function(e){return e.hasAccess},p=function(e){return d(e)&&e.isMeteredExpired},O=function(e){return e.isShared},v=function(e){return d(e)&&!p(e)};var g,y=function(){jest.mock("@times-components/user-state",(function(){var e=t(5).requireActual("@times-components/user-state").default;function r(e){var t=e.state,n=e.children,o=void 0===n?null:n,u=e.fallback,i=void 0===u?null:u;return r.mockStates.find((function(e){return e===t}))?o:i}return Object.keys(e).reduce((function(r,t){return r[t]=e[t],r}),r),r.mockReset=function(){r.mockStates=[e.fullArticle,e.loggedIn,e.loggedInOrShared,e.subscriber]},r.mockReset(),r}));var e=t(6);return beforeEach((function(){e.mockReset()})),e},m="Registered Access",j="Registered Access (Expired)",S={SUBSCRIBER:"Subscriber",RA:m,RA_EXPIRED:j,GUEST:"Guest"},w=t(1);function P(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function h(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?P(Object(t),!0).forEach((function(r){E(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):P(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function E(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var x=(E(g={},"Subscriber",["isLoggedIn"]),E(g,m,["isLoggedIn","isMetered"]),E(g,j,["isLoggedIn","isMetered","isMeteredExpired"]),E(g,"Guest",[]),g),k=["Subscriber",m,j,"Guest"];var R=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Subscriber";window.nuk=window.nuk||{},Object.defineProperty(window.nuk,"user",{enumerable:!0,configurable:!0,get:function(){var r=Object(w.select)("Current User State",k,e,"User State"),t=Object(w.boolean)("Is Shared",!1,"User State"),n=x[r].reduce((function(e,r){return h(h({},e),{},E({},r,!0))}),{});return h({isLoggedIn:!1,isMetered:!1,isMeteredExpired:!1,isShared:t},n)}})};function M(e){var r=e.state,t=e.children,n=e.fallback,u=e.serverRender;return o.a.createElement(l,{serverRender:u},(function(e){var o=e.user;return r(o)?t:n}))}t.d(r,"mockUserState",(function(){return y})),t.d(r,"USER_STATES",(function(){return S})),t.d(r,"addUserStateKnobs",(function(){return R})),M.loggedIn=d,M.meteredExpired=p,M.metered=function(e){return d(e)&&e.isMetered},M.shared=O,M.nonMeteredExpiredUser=v,M.fullArticle=function(e){return O(e)||v(e)||b(e)},M.subscriber=function(e){return d(e)&&!e.isMetered&&!e.isMeteredExpired},M.loggedInOrShared=function(e){return O(e)||d(e)},M.hasAccess=b,M.defaultProps={children:null,serverRender:!0,fallback:null};r.default=M}]);
1
+ module.exports=function(e){var r={};function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(r){return e[r]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=7)}([function(e,r){e.exports=require("react")},function(e,r){e.exports=require("@storybook/addon-knobs/react")},function(e,r){e.exports=require("prop-types")},function(e,r){e.exports=require("@times-components/context/rnw")},function(e,r){e.exports=require("@times-components/utils/rnw")},function(e,r){function t(e){var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}t.keys=function(){return[]},t.resolve=t,e.exports=t,t.id=5},function(e,r){e.exports=require("@times-components/user-state/rnw")},function(e,r,t){"use strict";t.r(r);var n=t(0),o=t.n(n),i=(t(2),t(3)),u=t.n(i),c=t(4);function s(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?s(Object(t),!0).forEach((function(r){f(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function f(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var l=function(e){var r=e.children,t=e.serverRender,n=void 0===t||t;return o.a.createElement(u.a.Consumer,null,(function(e){var t=e.user;return o.a.createElement(c.ServerClientRender,{client:function(){var e=window.nuk,n=(void 0===e?{}:e).user||{};return r({user:a(a({},t),n)})},server:n?function(){return r({user:t})}:null})}))},d=function(e){return e.isMetered||e.isLightPackUser},b=function(e){return e.isLoggedIn&&!d(e)};var p,g=function(){jest.mock("@times-components/user-state",(function(){var e=t(5).requireActual("@times-components/user-state").default;function r(e){var t=e.state,n=e.children,o=void 0===n?null:n,i=e.fallback,u=void 0===i?null:i;return r.mockStates.find((function(e){return e===t}))?o:u}return Object.keys(e).reduce((function(r,t){return r[t]=e[t],r}),r),r.mockReset=function(){r.mockStates=[e.showSaveAndShareBar,e.showArticleExtras,e.showArticleSaveButton,e.showCommentingModule]},r.mockReset(),r}));var e=t(6);return beforeEach((function(){e.mockReset()})),e},v="Registered Access",O="Registered Access (Expired)",m={SUBSCRIBER:"Subscriber",RA:v,RA_EXPIRED:O,GUEST:"Guest"},y=t(1);function w(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function S(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?w(Object(t),!0).forEach((function(r){h(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):w(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function h(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var j=(h(p={},"Subscriber",["isLoggedIn"]),h(p,v,["isLoggedIn","isMetered"]),h(p,O,["isLoggedIn","isMetered","isMeteredExpired"]),h(p,"Guest",[]),p),P=["Subscriber",v,O,"Guest"];var k=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Subscriber";window.nuk=window.nuk||{},Object.defineProperty(window.nuk,"user",{enumerable:!0,configurable:!0,get:function(){var r=Object(y.select)("Current User State",P,e,"User State"),t=Object(y.boolean)("Is Shared",!1,"User State"),n=j[r].reduce((function(e,r){return S(S({},e),{},h({},r,!0))}),{});return S({isLoggedIn:!1,isMetered:!1,isMeteredExpired:!1,isShared:t},n)}})};function E(e){var r=e.state,t=e.children,n=e.fallback,i=e.serverRender;return o.a.createElement(l,{serverRender:i},(function(e){var o=e.user;return r(o)?t:n}))}t.d(r,"mockUserState",(function(){return g})),t.d(r,"USER_STATES",(function(){return m})),t.d(r,"addUserStateKnobs",(function(){return k})),E.showSaveAndShareBar=function(e){return e.isLoggedIn||e.isShared},E.showArticleExtras=function(e){return function(e){return e.isLoggedIn&&!function(e){return e.isMeteredExpired||function(e){return e.isLightPackUser&&0===e.viewsRemaining}(e)}(e)}(e)||e.isShared},E.showTopicTags=function(e){return e.isLoggedIn||e.isShared},E.showArticleSaveButton=function(e){return e.isLoggedIn},E.showTokenisedEmailShare=function(e){return b(e)},E.showCommentingModule=function(e){return b(e)},E.showJoinTheConversationDialog=function(e){return e.isLoggedIn&&d(e)},E.defaultProps={children:null,serverRender:!0,fallback:null};r.default=E}]);