@bigbinary/neeto-team-members-frontend 3.0.1 → 3.0.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/README.md CHANGED
@@ -71,6 +71,7 @@ You can learn more about the setup and usage here:
71
71
  1. [Permissions](./docs/engine/permissions.md)
72
72
  2. [Roles](./docs/engine/roles.md)
73
73
  3. [Concerns](./docs/engine/concerns.md)
74
+ 4. [Member Limit](./docs/engine/member_limits.md)
74
75
 
75
76
  ### Frontend package
76
77
 
@@ -60,7 +60,9 @@
60
60
  "role_one": "Role",
61
61
  "role_other": "Roles",
62
62
  "search_": "Search {{what}}",
63
- "takeAction": "Take action"
63
+ "takeAction": "Take action",
64
+ "pro": "Pro",
65
+ "subscriptionPlan": "Subscription plan"
64
66
  },
65
67
  "helpers": {
66
68
  "addMembersToNeetoProducts": "Add {{- emails, boldList}} to the following neeto products.",
@@ -75,7 +77,8 @@
75
77
  "selectedMembersCount_other": "{{count}} {{taxonomies.member.plural}} selected of <span>{{totalCount}}</span>",
76
78
  "singleProductInvitation": "{{- emails, boldList}} will be invited to <strong>{{product, anyCase}}</strong> with a role of <strong>{{role, anyCase}}</strong>.",
77
79
  "themeSelector": "Theme selector",
78
- "whyIsItDisabled": "Why is it disabled?"
80
+ "whyIsItDisabled": "Why is it disabled?",
81
+ "subscriptionWarning": "You will be charged <strong>{{amount}}</strong> for each newly added member on the next renewal."
79
82
  },
80
83
  "labels": {
81
84
  "addNewRole": "Add new role",
@@ -89,7 +92,8 @@
89
92
  "manageRole_other": "Manage roles",
90
93
  "neeto_": "neeto{{product, anyCase}}",
91
94
  "roleNotFound_one": "There are no role to show",
92
- "roleNotFound_other": "There are no roles to show"
95
+ "roleNotFound_other": "There are no roles to show",
96
+ "upgradeToProPlan": "Upgrade the above added members to the PRO plan"
93
97
  },
94
98
  "placeholders": {
95
99
  "email": "Please enter the email addresses",
package/dist/index.cjs.js CHANGED
@@ -613,6 +613,10 @@ var DATE_FORMAT_OPTIONS = [{
613
613
  label: i18next.t("neetoTeamMembers.profile.common.ddmmyy"),
614
614
  value: "%d/%m/%Y"
615
615
  }];
616
+ var SUBSCRIPTION_PLANS = Object.freeze({
617
+ PRO: "pro",
618
+ FREE: "free"
619
+ });
616
620
 
617
621
  var fetchCountries = function fetchCountries() {
618
622
  return axios__default["default"].get("".concat(BASE_URL, "/profile/countries"));
@@ -6005,7 +6009,8 @@ var renderNameColumn = function renderNameColumn(_ref) {
6005
6009
  tableData = _ref.tableData;
6006
6010
  var active = tableData.active,
6007
6011
  name = tableData.displayName,
6008
- imageUrl = tableData.profileImageUrl;
6012
+ imageUrl = tableData.profileImageUrl,
6013
+ subscriptionPlan = tableData.subscriptionPlan;
6009
6014
  return /*#__PURE__*/React__default["default"].createElement("div", {
6010
6015
  className: "ntm-members-table__wrapper"
6011
6016
  }, /*#__PURE__*/React__default["default"].createElement("div", {
@@ -6017,12 +6022,19 @@ var renderNameColumn = function renderNameColumn(_ref) {
6017
6022
  imageUrl: imageUrl
6018
6023
  }
6019
6024
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6025
+ "data-cy": "ntm-member-name-".concat(utils$3.hyphenize(name)),
6020
6026
  style: "body2"
6021
6027
  }, name), displayStatusTag && /*#__PURE__*/React__default["default"].createElement(neetoui.Tag, {
6022
6028
  "data-cy": "ntm-member-status-tag",
6023
6029
  style: active ? "primary" : "secondary",
6024
6030
  type: "outline",
6025
6031
  label: active ? i18next__default["default"].t(MEMBER_FILTER.ACTIVE.label) : i18next__default["default"].t(MEMBER_FILTER.DEACTIVATED.label)
6032
+ }), subscriptionPlan === SUBSCRIPTION_PLANS.PRO && /*#__PURE__*/React__default["default"].createElement(neetoui.Tag, {
6033
+ className: "neeto-ui-text-transform-uppercase",
6034
+ "data-cy": "ntm-member-subscription-plan-tag",
6035
+ label: i18next__default["default"].t("neetoTeamMembers.common.pro"),
6036
+ style: "info",
6037
+ type: "outline"
6026
6038
  })), renderDropdownButton({
6027
6039
  config: config,
6028
6040
  handleUpdateRole: handleUpdateRole,
@@ -6128,18 +6140,35 @@ var getDefaultColumns = function getDefaultColumns(_ref5) {
6128
6140
  sorter: true,
6129
6141
  width: 200,
6130
6142
  title: i18next__default["default"].t("neetoTeamMembers.common.role", constants.SINGULAR)
6143
+ }, {
6144
+ dataIndex: "subscriptionPlan",
6145
+ key: "subscription_plan",
6146
+ hidden: true,
6147
+ isHidable: false,
6148
+ title: ""
6131
6149
  }];
6132
6150
  };
6133
6151
  var removeExcludedRole = ramda.curry(function (excludedRoles, role) {
6134
6152
  return !(excludedRoles !== null && excludedRoles !== void 0 && excludedRoles.includes(role === null || role === void 0 ? void 0 : role.name));
6135
6153
  });
6136
- var getColumnData = function getColumnData(_ref6) {
6154
+ var getSubscriptionLabelAndValue = function getSubscriptionLabelAndValue() {
6155
+ return Object.entries(SUBSCRIPTION_PLANS).map(function (_ref6) {
6156
+ var _ref7 = _slicedToArray(_ref6, 2),
6157
+ key = _ref7[0],
6158
+ value = _ref7[1];
6159
+ return {
6160
+ label: key,
6161
+ value: value
6162
+ };
6163
+ });
6164
+ };
6165
+ var getColumnData = function getColumnData(_ref8) {
6137
6166
  var _config$otherColumns;
6138
- var config = _ref6.config,
6139
- handleUpdateRole = _ref6.handleUpdateRole,
6140
- handleUpdateStatus = _ref6.handleUpdateStatus,
6141
- memberFilter = _ref6.memberFilter,
6142
- isSize = _ref6.isSize;
6167
+ var config = _ref8.config,
6168
+ handleUpdateRole = _ref8.handleUpdateRole,
6169
+ handleUpdateStatus = _ref8.handleUpdateStatus,
6170
+ memberFilter = _ref8.memberFilter,
6171
+ isSize = _ref8.isSize;
6143
6172
  var displayStatusTag = ramda.identical(memberFilter, MEMBER_FILTER.ALL.value);
6144
6173
  var otherColumns = (_config$otherColumns = config === null || config === void 0 ? void 0 : config.otherColumns) !== null && _config$otherColumns !== void 0 ? _config$otherColumns : [];
6145
6174
  var defaultColumns = getDefaultColumns({
@@ -6151,15 +6180,15 @@ var getColumnData = function getColumnData(_ref6) {
6151
6180
  isSize: isSize
6152
6181
  });
6153
6182
  var columns = defaultColumns.map(function (column) {
6154
- var otherColumn = otherColumns.find(function (_ref7) {
6155
- var dataIndex = _ref7.dataIndex;
6183
+ var otherColumn = otherColumns.find(function (_ref9) {
6184
+ var dataIndex = _ref9.dataIndex;
6156
6185
  return ramda.identical(dataIndex, column.dataIndex);
6157
6186
  });
6158
6187
  return otherColumn || column;
6159
6188
  });
6160
6189
  otherColumns.forEach(function (otherColumn) {
6161
- var column = columns.find(function (_ref8) {
6162
- var dataIndex = _ref8.dataIndex;
6190
+ var column = columns.find(function (_ref10) {
6191
+ var dataIndex = _ref10.dataIndex;
6163
6192
  return ramda.identical(dataIndex, otherColumn.dataIndex);
6164
6193
  });
6165
6194
  if (!column) columns.push(otherColumn);
@@ -6234,20 +6263,28 @@ var defaultNeetoFiltersColumns = function defaultNeetoFiltersColumns() {
6234
6263
  node: "organization_role.name",
6235
6264
  type: "multi_option",
6236
6265
  values: []
6266
+ }, {
6267
+ key: "subscription_plan",
6268
+ label: i18next__default["default"].t("neetoTeamMembers.common.subscriptionPlan", constants.SINGULAR),
6269
+ model: "User",
6270
+ node: "subscription_plan",
6271
+ type: "single_option",
6272
+ values: []
6237
6273
  }];
6238
6274
  };
6239
- var buildFilterColumns = function buildFilterColumns(_ref9) {
6240
- var _ref9$options = _ref9.options,
6241
- _ref9$options$emails = _ref9$options.emails,
6242
- emails = _ref9$options$emails === void 0 ? [] : _ref9$options$emails,
6243
- _ref9$options$organiz = _ref9$options.organizationRoles,
6244
- organizationRoles = _ref9$options$organiz === void 0 ? [] : _ref9$options$organiz,
6245
- _ref9$emailConfig = _ref9.emailConfig,
6246
- setSearchTerm = _ref9$emailConfig.setSearchTerm,
6247
- isLoading = _ref9$emailConfig.isLoading;
6275
+ var buildFilterColumns = function buildFilterColumns(_ref11) {
6276
+ var _ref11$options = _ref11.options,
6277
+ _ref11$options$emails = _ref11$options.emails,
6278
+ emails = _ref11$options$emails === void 0 ? [] : _ref11$options$emails,
6279
+ _ref11$options$organi = _ref11$options.organizationRoles,
6280
+ organizationRoles = _ref11$options$organi === void 0 ? [] : _ref11$options$organi,
6281
+ _ref11$emailConfig = _ref11.emailConfig,
6282
+ setSearchTerm = _ref11$emailConfig.setSearchTerm,
6283
+ isLoading = _ref11$emailConfig.isLoading;
6248
6284
  var columnValues = {
6249
6285
  email: emails.map(neetoCist.toLabelAndValue),
6250
- role: organizationRoles.map(neetoCist.toLabelAndValue)
6286
+ role: organizationRoles.map(neetoCist.toLabelAndValue),
6287
+ subscription_plan: getSubscriptionLabelAndValue()
6251
6288
  };
6252
6289
  return defaultNeetoFiltersColumns().map(function (column) {
6253
6290
  var values = columnValues[column.key];
@@ -6262,8 +6299,8 @@ var buildFilterColumns = function buildFilterColumns(_ref9) {
6262
6299
  };
6263
6300
  var getValidCategory = function getValidCategory(category) {
6264
6301
  var defaultCategory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : MEMBER_FILTER.ACTIVE.value;
6265
- return Object.values(MEMBER_FILTER).some(function (_ref10) {
6266
- var value = _ref10.value;
6302
+ return Object.values(MEMBER_FILTER).some(function (_ref12) {
6303
+ var value = _ref12.value;
6267
6304
  return ramda.identical(value, category);
6268
6305
  }) ? category : defaultCategory;
6269
6306
  };
@@ -6272,9 +6309,9 @@ var getFilteredRoles = function getFilteredRoles() {
6272
6309
  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
6273
6310
  return ramda.filter(removeExcludedRole(config === null || config === void 0 ? void 0 : config.excludedRoles), roles);
6274
6311
  };
6275
- var generateNoDataContent = function generateNoDataContent(_ref11) {
6276
- var filterCategory = _ref11.filterCategory,
6277
- buttonProps = _ref11.buttonProps;
6312
+ var generateNoDataContent = function generateNoDataContent(_ref13) {
6313
+ var filterCategory = _ref13.filterCategory,
6314
+ buttonProps = _ref13.buttonProps;
6278
6315
  var disabled = buttonProps.disabled,
6279
6316
  onClick = buttonProps.onClick;
6280
6317
  var kind = MEMBER_FILTER[filterCategory].value.toLowerCase();
@@ -6677,6 +6714,9 @@ var Left = function Left(_ref) {
6677
6714
  window.location.pathname = "/";
6678
6715
  }
6679
6716
  };
6717
+ var resetSelectedRows = function resetSelectedRows() {
6718
+ return setSelectedRows(DEFAULT_SELECTED_ROWS);
6719
+ };
6680
6720
  var handleActivateMembers = function handleActivateMembers() {
6681
6721
  return bulkUpdateMember({
6682
6722
  users: {
@@ -6772,7 +6812,7 @@ var Left = function Left(_ref) {
6772
6812
  setBulkUpdateRole: setBulkUpdateRole,
6773
6813
  disabled: hasDeactivateMembers,
6774
6814
  hasUpdatePermission: isUpdatePermissionGranted
6775
- }), config === null || config === void 0 || (_config$otherBulkActi = config.otherBulkActions) === null || _config$otherBulkActi === void 0 ? void 0 : _config$otherBulkActi.call(config))))), /*#__PURE__*/React__default["default"].createElement(neetoui.Alert, {
6815
+ }), config === null || config === void 0 || (_config$otherBulkActi = config.otherBulkActions) === null || _config$otherBulkActi === void 0 ? void 0 : _config$otherBulkActi.call(config, resetSelectedRows, selectedRows))))), /*#__PURE__*/React__default["default"].createElement(neetoui.Alert, {
6776
6816
  isOpen: selectedAlert,
6777
6817
  submitButtonLabel: getButtonLabel(selectedAlert === null || selectedAlert === void 0 ? void 0 : selectedAlert.type),
6778
6818
  title: selectedAlert === null || selectedAlert === void 0 ? void 0 : selectedAlert.title,
@@ -6894,6 +6934,7 @@ var AppList = function AppList(_ref) {
6894
6934
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Checkbox, {
6895
6935
  checked: isAppListEnabled,
6896
6936
  className: "ntm-manage-members__checkbox-align-start",
6937
+ "data-cy": "ntm-manage-members-app-list-checkbox",
6897
6938
  label: /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6898
6939
  component: "span",
6899
6940
  lineHeight: "relaxed",
@@ -7079,6 +7120,7 @@ var renderInitialValues = function renderInitialValues(_ref) {
7079
7120
  lastName: "",
7080
7121
  emails: [],
7081
7122
  role: (_roles$1$name = (_roles$ = roles[1]) === null || _roles$ === void 0 ? void 0 : _roles$.name) !== null && _roles$1$name !== void 0 ? _roles$1$name : "",
7123
+ subscriptionPlan: SUBSCRIPTION_PLANS.FREE,
7082
7124
  appRoles: generateAppsRolesInitialValue(globalRoles, (_roles$2 = roles[1]) === null || _roles$2 === void 0 ? void 0 : _roles$2.name)
7083
7125
  }, additionalFieldsInitialValues);
7084
7126
  };
@@ -7339,10 +7381,45 @@ var RolesRadioGroup = function RolesRadioGroup(_ref) {
7339
7381
  }));
7340
7382
  };
7341
7383
 
7384
+ var SubscriptionPlan = function SubscriptionPlan(_ref) {
7385
+ var _subscription$plan, _subscription$plan2;
7386
+ var subscription = _ref.subscription;
7387
+ var _useFormikContext = formik.useFormikContext(),
7388
+ values = _useFormikContext.values,
7389
+ setFieldValue = _useFormikContext.setFieldValue;
7390
+ var isProPlan = (values === null || values === void 0 ? void 0 : values.subscriptionPlan) === SUBSCRIPTION_PLANS.PRO;
7391
+ var handleChange = function handleChange(event) {
7392
+ return setFieldValue("subscriptionPlan", event.target.checked ? SUBSCRIPTION_PLANS.PRO : SUBSCRIPTION_PLANS.FREE);
7393
+ };
7394
+ return /*#__PURE__*/React__default["default"].createElement("div", {
7395
+ className: "flex flex-col space-y-4"
7396
+ }, /*#__PURE__*/React__default["default"].createElement(formik$1.Checkbox, {
7397
+ label: /*#__PURE__*/React__default["default"].createElement(reactI18next.Trans, {
7398
+ i18nKey: "neetoTeamMembers.labels.upgradeToProPlan"
7399
+ }),
7400
+ name: "isSubscriptionProPlan",
7401
+ onChange: handleChange
7402
+ }), isProPlan && /*#__PURE__*/React__default["default"].createElement(neetoui.Callout, {
7403
+ icon: neetoIcons.Warning,
7404
+ style: "warning"
7405
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
7406
+ style: "body2",
7407
+ weight: "normal"
7408
+ }, /*#__PURE__*/React__default["default"].createElement(reactI18next.Trans, {
7409
+ i18nKey: "neetoTeamMembers.helpers.subscriptionWarning",
7410
+ values: {
7411
+ amount: utils$3.currencyFormat.withSymbol(subscription === null || subscription === void 0 || (_subscription$plan = subscription.plan) === null || _subscription$plan === void 0 ? void 0 : _subscription$plan.amount, subscription === null || subscription === void 0 || (_subscription$plan2 = subscription.plan) === null || _subscription$plan2 === void 0 || (_subscription$plan2 = _subscription$plan2.currency) === null || _subscription$plan2 === void 0 ? void 0 : _subscription$plan2.toUpperCase(), {
7412
+ maximumFractionDigits: 2,
7413
+ minimumFractionDigits: 0
7414
+ })
7415
+ }
7416
+ }))));
7417
+ };
7418
+
7342
7419
  function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7343
7420
  function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7344
7421
  var ManageMember = function ManageMember(_ref) {
7345
- var _manageMemberComponen, _config$additionalFie2;
7422
+ var _config$subscription, _manageMemberComponen, _config$additionalFie2;
7346
7423
  var config = _ref.config,
7347
7424
  onComplete = _ref.onComplete,
7348
7425
  _ref$roles = _ref.roles,
@@ -7377,6 +7454,7 @@ var ManageMember = function ManageMember(_ref) {
7377
7454
  var haveToFetchRoles = ramda.isEmpty(roles) && isViewPermissionGranted;
7378
7455
  var isEditForm = !!selectedMember;
7379
7456
  var isLastPage = currentPage === FORM_PAGES.CONFIRMATION || isEditForm;
7457
+ var isSubscriptionVisible = !isEditForm && ((_config$subscription = config.subscription) === null || _config$subscription === void 0 ? void 0 : _config$subscription.isActive);
7380
7458
  var _useFetchRoles = useFetchRoles({
7381
7459
  select: function select(response) {
7382
7460
  var _response$organizatio;
@@ -7476,6 +7554,9 @@ var ManageMember = function ManageMember(_ref) {
7476
7554
  emails: emails,
7477
7555
  selectedMember: selectedMember,
7478
7556
  innerRef: inputReference
7557
+ }), isSubscriptionVisible && /*#__PURE__*/React__default["default"].createElement(SubscriptionPlan, {
7558
+ handleClose: handleClose,
7559
+ subscription: config.subscription
7479
7560
  }), /*#__PURE__*/React__default["default"].createElement(RolesRadioGroup, {
7480
7561
  config: config,
7481
7562
  globalRoles: globalRoles,
@@ -7596,7 +7677,7 @@ var Menu = function Menu(_ref) {
7596
7677
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7597
7678
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7598
7679
  var TeamMembers = function TeamMembers(_ref) {
7599
- var _config$fetchApiRespo, _config$table, _config$table$onDropd;
7680
+ var _config$fetchApiRespo, _config$table, _config$table$onDropd, _config$table2;
7600
7681
  var config = _ref.config;
7601
7682
  var _useTranslation = reactI18next.useTranslation(),
7602
7683
  t = _useTranslation.t;
@@ -7688,7 +7769,7 @@ var TeamMembers = function TeamMembers(_ref) {
7688
7769
  memberFilter: filters.category,
7689
7770
  isSize: isSize
7690
7771
  });
7691
- }, [filters.category] // eslint-disable-line react-hooks/exhaustive-deps
7772
+ }, [filters.category, (_config$table2 = config.table) === null || _config$table2 === void 0 ? void 0 : _config$table2.dropdownProps] // eslint-disable-line react-hooks/exhaustive-deps
7692
7773
  );
7693
7774
 
7694
7775
  var _useHiddenColumns = Columns$1.useHiddenColumns(TEAM_MEMBERS_HIDDEN_COLUMNS),