@bigbinary/neeto-fields-frontend 1.1.2 → 1.1.4

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
@@ -163,15 +163,19 @@ default, but you can customize its behavior by passing optional props.
163
163
  shown in the dashboard table. This prop is expected when `showOwnersInMenu`
164
164
  is set to `true`.
165
165
  5. `allowedKinds`:Specifies the list of field kinds allowed to be created.
166
- 6. `paneProps`: Props to be passed to the Add/Edit pane. It accepts `children`
167
- to be rendered inside the pane and `validations` for the formik input fields
168
- in the `children`. `validations` must be provided as a map with the field
169
- name as key and the corresponding yup validation schema as the value.
170
- `initialValues` must also be provided as a map with the field name as key and
171
- the corresponding value. Prop `hideRequiredSwitch` set to `true` hides the
172
- toggle switch for `isRequried`. Also `onMutationSuccess`,a callback function
173
- which is triggered on the success of mutation functions( create, update &
174
- delete).
166
+ 6. `paneProps`: Props to be passed to the Add/Edit pane. It accepts the
167
+ following.
168
+ - `children`: The children components to be rendered inside the pane.
169
+ - `validations`: The validations for the formik input fields in the
170
+ `children`. `validations` must be provided as an object with the field name
171
+ as key and the corresponding yup validation schema as the value.
172
+ - `initialValues`: The initial values for the formik input fields in the
173
+ `children`. It is provided as an object with the field name as key and the
174
+ corresponding value.
175
+ - `hideRequiredSwitch`: A boolean value when set to `true` hides the toggle
176
+ switch for `isRequried`.
177
+ - `onMutationSuccess`: Callback function which is triggered on the success of
178
+ mutation functions (create, update & delete).
175
179
  7. `showStateFilter`: Boolean value which specifies whether to show or hide
176
180
  state filters.
177
181
  8. `fieldStatesTaxonomy`: Specifies the names to be rendered for `active` and
@@ -182,6 +186,15 @@ default, but you can customize its behavior by passing optional props.
182
186
  URL will be shown in the `NoData` screen.
183
187
  11. `nameAliases`: This property accepts alias names as key-value pairs to be
184
188
  displayed for the names of resource types in header and menubar.
189
+ 12. `headerTitle`: Specify the header title explicitly. Default is 'fields'
190
+ 13. `resources`: For owner-based field categorization, provide an array of
191
+ objects with `id` and `name` properties for each owner. For resource
192
+ type-based categorization, use an array of strings representing resource
193
+ types.
194
+
195
+ > If no resources are provided, for resource type-based categorization, the
196
+ > menu bar will fetch all resource types. For owner-based categorization, it
197
+ > will fetch and list all owners in the organization.
185
198
 
186
199
  #### Usage:
187
200
 
@@ -546,7 +559,9 @@ This is a React Query hook for creating a field.
546
559
 
547
560
  ```jsx
548
561
  const { mutate: create } = useCreateField();
549
- const payload = { field: { name, kind, resourceType, ownerId, data } };
562
+ const payload = {
563
+ field: { name, kind, resourceType, ownerId, displayOrder, data },
564
+ };
550
565
  create(payload);
551
566
  ```
552
567
 
@@ -558,7 +573,9 @@ This is a React Query hook for updating a field.
558
573
 
559
574
  ```jsx
560
575
  const { mutate: update } = useUpdateField();
561
- const payload = { field: { name, kind, resourceType, ownerId, data } };
576
+ const payload = {
577
+ field: { name, kind, resourceType, ownerId, displayOrder, data },
578
+ };
562
579
  update({ fieldId, payload });
563
580
  ```
564
581
 
package/dist/index.cjs.js CHANGED
@@ -5341,9 +5341,12 @@ var fields = {
5341
5341
  }
5342
5342
  };
5343
5343
  var messages = {
5344
- noFields: "There are no fields to show",
5344
+ noFields: "There are no {{title}} to show",
5345
5345
  confirmDelete: "Are you sure want to delete the field? This action cannot be undone.",
5346
5346
  manageFieldFor: "Manage fields for {{resource}}",
5347
+ manageTitleForResource: "Manage {{title}} for {{resource}}",
5348
+ titleForResource: "{{title}} for {{resource}}",
5349
+ stateTitleForResource: "{{state}} {{title}} for {{resource}}",
5347
5350
  invalidKind: "Invalid kind",
5348
5351
  reorderFields: "Fields are displayed from top to bottom."
5349
5352
  };
@@ -5364,7 +5367,7 @@ var tooltips = {
5364
5367
  reorder: "Fields a are displayed from top to bottom. Re-order them"
5365
5368
  };
5366
5369
  var helpTexts = {
5367
- noData: "Here is how you can use <a>fields.</a>"
5370
+ noData: "Here is how you can use <a>{{title}}.</a>"
5368
5371
  };
5369
5372
  var en = {
5370
5373
  common: common,
@@ -6358,6 +6361,21 @@ var SINGULAR = {
6358
6361
  var PLURAL = {
6359
6362
  count: 2
6360
6363
  };
6364
+ var INFO_ICON_SIZE = 16;
6365
+
6366
+ var TitleWithHelpLink = function TitleWithHelpLink(_ref) {
6367
+ var title = _ref.title,
6368
+ helpUrl = _ref.helpUrl;
6369
+ return /*#__PURE__*/React__default["default"].createElement("div", {
6370
+ className: "flex items-center gap-x-1"
6371
+ }, title, helpUrl && /*#__PURE__*/React__default["default"].createElement("a", {
6372
+ href: helpUrl,
6373
+ rel: "noreferrer",
6374
+ target: "_blank"
6375
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Info, {
6376
+ size: INFO_ICON_SIZE
6377
+ })));
6378
+ };
6361
6379
 
6362
6380
  var fieldUrl = function fieldUrl(fieldId) {
6363
6381
  return utils.buildUrl(FIELD_URL, {
@@ -6799,6 +6817,7 @@ var FieldForm = function FieldForm(_ref) {
6799
6817
  className: "w-full space-y-4"
6800
6818
  }, /*#__PURE__*/React__default["default"].createElement(formik$1.Input, {
6801
6819
  required: true,
6820
+ "data-cy": "name-text-field",
6802
6821
  disabled: isSystem,
6803
6822
  label: t("labels.fieldName"),
6804
6823
  name: "name",
@@ -6811,12 +6830,15 @@ var FieldForm = function FieldForm(_ref) {
6811
6830
  options: kindSelectOptions,
6812
6831
  onChange: handleKindChange
6813
6832
  }), isAdditionalDataNeeded(chosenKind) && /*#__PURE__*/React__default["default"].createElement(AdditionalInputs, null), !hideRequiredSwitch && /*#__PURE__*/React__default["default"].createElement(neetoui.Label, {
6814
- className: "flex items-center gap-2"
6833
+ className: "flex items-center gap-2",
6834
+ "data-cy": "is-required-switch-container"
6815
6835
  }, /*#__PURE__*/React__default["default"].createElement(formik$1.Switch, {
6836
+ "data-cy": "is-required-switch",
6816
6837
  name: "isRequired"
6817
6838
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6818
6839
  className: "leading-4",
6819
6840
  component: "span",
6841
+ "data-cy": "is-required-switch-label",
6820
6842
  style: "body2"
6821
6843
  }, t("labels.isRequired"))), children));
6822
6844
  };
@@ -6856,6 +6878,7 @@ var Add = function Add(_ref) {
6856
6878
  });
6857
6879
  };
6858
6880
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6881
+ "data-cy": "add-pane-header",
6859
6882
  style: "h2"
6860
6883
  }, t("titles.addField"))), /*#__PURE__*/React__default["default"].createElement(formik$1.Form, {
6861
6884
  formikProps: {
@@ -6904,7 +6927,8 @@ var Edit = function Edit(_ref) {
6904
6927
  _useShowField$data = _useShowField.data,
6905
6928
  _useShowField$data2 = _useShowField$data === void 0 ? {} : _useShowField$data,
6906
6929
  _useShowField$data2$f = _useShowField$data2.field,
6907
- field = _useShowField$data2$f === void 0 ? {} : _useShowField$data2$f;
6930
+ field = _useShowField$data2$f === void 0 ? {} : _useShowField$data2$f,
6931
+ isLoading = _useShowField.isLoading;
6908
6932
  var _useUpdateField = useUpdateField({
6909
6933
  onSuccess: function onSuccess() {
6910
6934
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -6927,8 +6951,9 @@ var Edit = function Edit(_ref) {
6927
6951
  });
6928
6952
  };
6929
6953
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6954
+ "data-cy": "edit-pane-header",
6930
6955
  style: "h2"
6931
- }, t("titles.editField"))), /*#__PURE__*/React__default["default"].createElement(formik$1.Form, {
6956
+ }, t("titles.editField"))), isLoading ? /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null) : /*#__PURE__*/React__default["default"].createElement(formik$1.Form, {
6932
6957
  formikProps: {
6933
6958
  initialValues: _objectSpread$4(_objectSpread$4({}, initialValues), ramda.assoc("kind", FIELD_KINDS[field.kind], field)),
6934
6959
  validationSchema: generateValidationSchema(additionalValidations),
@@ -6986,17 +7011,20 @@ var buildDefaultColumns = function buildDefaultColumns(_ref) {
6986
7011
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6987
7012
  style: "body2"
6988
7013
  }, name), /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
6989
- buttonProps: {
6990
- className: "flex-shrink-0"
6991
- },
6992
7014
  buttonStyle: "text",
6993
7015
  icon: neetoIcons.MenuHorizontal,
6994
- strategy: "fixed"
7016
+ strategy: "fixed",
7017
+ buttonProps: {
7018
+ className: "flex-shrink-0",
7019
+ "data-cy": "neeto-fields-options-dropdown"
7020
+ }
6995
7021
  }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
7022
+ "data-cy": "edit-menu-item-button",
6996
7023
  onClick: function onClick() {
6997
7024
  return onEditClick(field);
6998
7025
  }
6999
7026
  }, t$1("labels.edit")), !field.isSystem && /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
7027
+ "data-cy": "delete-menu-item-button",
7000
7028
  onClick: function onClick() {
7001
7029
  return onDeleteClick(field);
7002
7030
  }
@@ -7023,14 +7051,18 @@ var renderMenuBarItems = function renderMenuBarItems(_ref2) {
7023
7051
  isOwnerBased = _ref2.isOwnerBased,
7024
7052
  selectedMenu = _ref2.selectedMenu,
7025
7053
  handleBlockClick = _ref2.handleBlockClick,
7026
- nameAliases = _ref2.nameAliases;
7054
+ nameAliases = _ref2.nameAliases,
7055
+ title = _ref2.title;
7056
+ title = title.toLocaleLowerCase();
7027
7057
  if (isOwnerBased) {
7028
7058
  return items.map(function (item) {
7029
7059
  return /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Item, {
7030
7060
  active: selectedMenu === item.id,
7061
+ "data-cy": "menubar-".concat(pure.slugify(item.name), "-menu-item"),
7031
7062
  key: item.id,
7032
7063
  label: pure.humanize(item.name),
7033
- description: t$1("messages.manageFieldFor", {
7064
+ description: t$1("messages.manageTitleForResource", {
7065
+ title: title,
7034
7066
  resource: pure.humanize(item.name).toLocaleLowerCase()
7035
7067
  }),
7036
7068
  onClick: handleBlockClick({
@@ -7040,11 +7072,14 @@ var renderMenuBarItems = function renderMenuBarItems(_ref2) {
7040
7072
  });
7041
7073
  }
7042
7074
  return items.length > 1 && items.map(function (item) {
7075
+ var label = nameAliases[item] || pure.humanize(item);
7043
7076
  return /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Item, {
7044
7077
  active: selectedMenu === item,
7078
+ "data-cy": "neeto-fields-".concat(pure.slugify(label), "-menu-item"),
7045
7079
  key: item,
7046
- label: nameAliases[item] || pure.humanize(item),
7047
- description: t$1("messages.manageFieldFor", {
7080
+ label: label,
7081
+ description: t$1("messages.manageTitleForResource", {
7082
+ title: title,
7048
7083
  resource: pure.humanize(item).toLocaleLowerCase()
7049
7084
  }),
7050
7085
  onClick: handleBlockClick({
@@ -7060,12 +7095,14 @@ var renderMenuBarFilters = function renderMenuBarFilters(_ref3) {
7060
7095
  inactiveFieldsCount = _ref3.inactiveFieldsCount,
7061
7096
  handleBlockClick = _ref3.handleBlockClick;
7062
7097
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].SubTitle, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
7098
+ "data-cy": "menubar-subtitle",
7063
7099
  style: "h5",
7064
7100
  textTransform: "uppercase",
7065
7101
  weight: "bold"
7066
7102
  }, t$1("titles.filters"))), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
7067
7103
  active: selectedState === FIELD_STATES.active,
7068
7104
  count: activeFieldsCount,
7105
+ "data-cy": "menubar-active-block",
7069
7106
  label: fieldStatesTaxonomy.active,
7070
7107
  onClick: handleBlockClick({
7071
7108
  state: FIELD_STATES.active
@@ -7073,6 +7110,7 @@ var renderMenuBarFilters = function renderMenuBarFilters(_ref3) {
7073
7110
  }), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
7074
7111
  active: selectedState === FIELD_STATES.inactive,
7075
7112
  count: inactiveFieldsCount,
7113
+ "data-cy": "menubar-inactive-block",
7076
7114
  label: fieldStatesTaxonomy.inactive,
7077
7115
  onClick: handleBlockClick({
7078
7116
  state: FIELD_STATES.inactive
@@ -7084,19 +7122,41 @@ var getDashBoardTitle = function getDashBoardTitle(_ref4) {
7084
7122
  var isOwnerBased = _ref4.isOwnerBased,
7085
7123
  owners = _ref4.owners,
7086
7124
  selectedVal = _ref4.selectedVal,
7087
- nameAliases = _ref4.nameAliases;
7088
- return t$1("messages.manageFieldFor", {
7089
- resource: isOwnerBased ? (_findBy = pure.findBy({
7090
- id: selectedVal
7091
- }, owners)) === null || _findBy === void 0 ? void 0 : _findBy.name : nameAliases[selectedVal] || selectedVal
7092
- });
7125
+ nameAliases = _ref4.nameAliases,
7126
+ isSingleResource = _ref4.isSingleResource,
7127
+ showStateFilter = _ref4.showStateFilter,
7128
+ selectedState = _ref4.selectedState,
7129
+ title = _ref4.title;
7130
+ var resource = isOwnerBased ? (_findBy = pure.findBy({
7131
+ id: selectedVal
7132
+ }, owners)) === null || _findBy === void 0 ? void 0 : _findBy.name : nameAliases[selectedVal] || selectedVal;
7133
+ var displayTitle = title;
7134
+ if (showStateFilter && !isSingleResource) {
7135
+ displayTitle = t$1("messages.stateTitleForResource", {
7136
+ state: selectedState,
7137
+ title: title,
7138
+ resource: resource
7139
+ });
7140
+ } else if (showStateFilter && isSingleResource) {
7141
+ displayTitle = "".concat(selectedState, " ").concat(title);
7142
+ } else if (!showStateFilter && !isSingleResource) {
7143
+ displayTitle = t$1("messages.titleForResource", {
7144
+ title: title,
7145
+ resource: resource
7146
+ });
7147
+ }
7148
+ return pure.humanize(displayTitle);
7093
7149
  };
7094
- var renderNoDataHelpText = function renderNoDataHelpText(url) {
7150
+ var renderNoDataHelpText = function renderNoDataHelpText(title, url) {
7095
7151
  return /*#__PURE__*/React__default["default"].createElement(Trans, {
7096
7152
  i18nKey: "helpTexts.noData",
7153
+ values: {
7154
+ title: title
7155
+ },
7097
7156
  components: {
7098
7157
  a: /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Link, {
7099
7158
  className: "neeto-ui-text-primary-600 underline",
7159
+ "data-cy": "no-data-help-text-link",
7100
7160
  target: "_blank",
7101
7161
  to: {
7102
7162
  pathname: url
@@ -7125,9 +7185,12 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
7125
7185
  function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7126
7186
  var useFieldsDashboard = function useFieldsDashboard(_ref) {
7127
7187
  var buildColumnData = _ref.buildColumnData,
7128
- showOwnersInMenu = _ref.showOwnersInMenu,
7188
+ isOwnerBased = _ref.isOwnerBased,
7129
7189
  fieldStatesTaxonomy = _ref.fieldStatesTaxonomy,
7130
- nameAliases = _ref.nameAliases;
7190
+ nameAliases = _ref.nameAliases,
7191
+ title = _ref.title,
7192
+ resources = _ref.resources,
7193
+ showStateFilter = _ref.showStateFilter;
7131
7194
  var _useState = React.useState(false),
7132
7195
  _useState2 = _slicedToArray(_useState, 2),
7133
7196
  isPaneOpen = _useState2[0],
@@ -7152,15 +7215,17 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7152
7215
  _useState12 = _slicedToArray(_useState11, 2),
7153
7216
  searchTerm = _useState12[0],
7154
7217
  setSearchTerm = _useState12[1];
7155
- var _getQueryParams = utils.getQueryParams(),
7156
- resource = _getQueryParams.resource,
7157
- state = _getQueryParams.state;
7158
- var ownerId = showOwnersInMenu ? resource : undefined;
7159
7218
  var debouncedSearchTerm = reactUtils.useDebounce(searchTerm.trim());
7160
7219
  var history = reactRouterDom.useHistory();
7161
7220
  var _useTranslation = useTranslation(),
7162
7221
  t = _useTranslation.t;
7163
- var _useFetchConfigs = useFetchConfigs(),
7222
+ var _getQueryParams = utils.getQueryParams(),
7223
+ resource = _getQueryParams.resource,
7224
+ state = _getQueryParams.state;
7225
+ var ownerId = isOwnerBased ? resource : undefined;
7226
+ var _useFetchConfigs = useFetchConfigs({
7227
+ enabled: !resources
7228
+ }),
7164
7229
  _useFetchConfigs$data = _useFetchConfigs.data,
7165
7230
  _useFetchConfigs$data2 = _useFetchConfigs$data === void 0 ? {} : _useFetchConfigs$data,
7166
7231
  _useFetchConfigs$data3 = _useFetchConfigs$data2.owners,
@@ -7169,7 +7234,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7169
7234
  resourceTypes = _useFetchConfigs$data4 === void 0 ? [] : _useFetchConfigs$data4,
7170
7235
  isConfigsLoading = _useFetchConfigs.isLoading;
7171
7236
  var fieldParams = {
7172
- resourceType: !showOwnersInMenu ? resource : undefined,
7237
+ resourceType: !isOwnerBased ? resource : undefined,
7173
7238
  ownerId: ownerId,
7174
7239
  state: state || FIELD_STATES.active,
7175
7240
  searchTerm: debouncedSearchTerm
@@ -7245,14 +7310,15 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7245
7310
  state: state
7246
7311
  }, params)));
7247
7312
  };
7313
+ var menuItems = resources || (isOwnerBased ? owners : resourceTypes);
7248
7314
  var handleURLWithDefaultValues = function handleURLWithDefaultValues() {
7249
7315
  var queryParams = {
7250
7316
  resource: resource,
7251
7317
  state: state
7252
7318
  };
7253
7319
  if (!isConfigsLoading && ramda.isNil(resource)) {
7254
- var _owners$;
7255
- queryParams.resource = showOwnersInMenu ? (_owners$ = owners[0]) === null || _owners$ === void 0 ? void 0 : _owners$.id : resourceTypes[0];
7320
+ var _menuItems$;
7321
+ queryParams.resource = isOwnerBased ? menuItems === null || menuItems === void 0 ? void 0 : (_menuItems$ = menuItems[0]) === null || _menuItems$ === void 0 ? void 0 : _menuItems$.id : menuItems === null || menuItems === void 0 ? void 0 : menuItems[0];
7256
7322
  }
7257
7323
  if (!isConfigsLoading && ramda.isNil(state)) {
7258
7324
  queryParams.state = FIELD_STATES.active;
@@ -7261,7 +7327,6 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7261
7327
  history.replace(utils.buildUrl("", queryParams));
7262
7328
  }
7263
7329
  };
7264
- var menuItems = showOwnersInMenu ? owners : resourceTypes;
7265
7330
  var isScreenLoading = isFieldsLoading || isConfigsLoading;
7266
7331
  var showCountSubheader = count > 0;
7267
7332
  var searchProps = {
@@ -7271,6 +7336,20 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7271
7336
  value: searchTerm,
7272
7337
  placeholder: t("placeholders.searchFields")
7273
7338
  };
7339
+ var isSingleResource = menuItems.length === 1;
7340
+ var isMenuBarNeeded = showStateFilter || !isSingleResource;
7341
+ var headerDisplayTitle = React.useMemo(function () {
7342
+ return getDashBoardTitle({
7343
+ isOwnerBased: isOwnerBased,
7344
+ owners: menuItems,
7345
+ selectedVal: resource,
7346
+ nameAliases: nameAliases,
7347
+ showStateFilter: showStateFilter,
7348
+ selectedState: state,
7349
+ isSingleResource: isSingleResource,
7350
+ title: title
7351
+ });
7352
+ }, [resource, state, isSingleResource, menuItems]);
7274
7353
  var menuBarFilters = React.useMemo(function () {
7275
7354
  return renderMenuBarFilters({
7276
7355
  selectedState: state,
@@ -7279,19 +7358,20 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7279
7358
  inactiveFieldsCount: inactiveFieldsCount,
7280
7359
  handleBlockClick: handleBlockClick
7281
7360
  });
7282
- }, [activeFieldsCount, inactiveFieldsCount, state]);
7361
+ }, [activeFieldsCount, inactiveFieldsCount]);
7283
7362
  var menuBarItems = React.useMemo(function () {
7284
7363
  return renderMenuBarItems({
7285
- isOwnerBased: showOwnersInMenu,
7364
+ isOwnerBased: isOwnerBased,
7286
7365
  items: menuItems,
7287
7366
  selectedMenu: resource,
7288
7367
  handleBlockClick: handleBlockClick,
7289
- nameAliases: nameAliases
7368
+ nameAliases: nameAliases,
7369
+ title: title
7290
7370
  });
7291
7371
  }, [menuItems, resource]);
7292
7372
  React.useEffect(function () {
7293
7373
  handleURLWithDefaultValues();
7294
- }, [isConfigsLoading]);
7374
+ }, [isConfigsLoading, resources]);
7295
7375
  return {
7296
7376
  isPaneOpen: isPaneOpen,
7297
7377
  setIsPaneOpen: setIsPaneOpen,
@@ -7301,9 +7381,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7301
7381
  isReorderPaneOpen: isReorderPaneOpen,
7302
7382
  setIsReorderPaneOpen: setIsReorderPaneOpen,
7303
7383
  fields: fields,
7304
- owners: owners,
7305
7384
  count: count,
7306
- menuItems: menuItems,
7307
7385
  columnData: columnData,
7308
7386
  selectedField: selectedField,
7309
7387
  selectedState: state,
@@ -7314,6 +7392,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7314
7392
  isDeleting: isDeleting,
7315
7393
  isScreenLoading: isScreenLoading,
7316
7394
  isConfigsLoading: isConfigsLoading,
7395
+ isMenuBarNeeded: isMenuBarNeeded,
7317
7396
  showCountSubheader: showCountSubheader,
7318
7397
  handleDelete: handleDelete,
7319
7398
  handleAlertClose: handleAlertClose,
@@ -7322,7 +7401,8 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7322
7401
  searchProps: searchProps,
7323
7402
  menuBarFilters: menuBarFilters,
7324
7403
  menuBarItems: menuBarItems,
7325
- allFields: allFields
7404
+ allFields: allFields,
7405
+ headerDisplayTitle: headerDisplayTitle
7326
7406
  };
7327
7407
  };
7328
7408
 
@@ -7332,16 +7412,20 @@ var FieldsTable = function FieldsTable(_ref) {
7332
7412
  rowData = _ref.rowData,
7333
7413
  columnData = _ref.columnData,
7334
7414
  setIsPaneOpen = _ref.setIsPaneOpen,
7335
- helpDocUrl = _ref.helpDocUrl;
7415
+ helpDocUrl = _ref.helpDocUrl,
7416
+ title = _ref.title;
7336
7417
  var _useTranslation = useTranslation(),
7337
7418
  t = _useTranslation.t;
7338
7419
  var showNoDataScreen = !isLoading && ramda.isEmpty(rowData);
7420
+ title = title.toLocaleLowerCase();
7339
7421
  return /*#__PURE__*/React__default["default"].createElement(TableWrapper__default["default"], null, showNoDataScreen ? /*#__PURE__*/React__default["default"].createElement("div", {
7340
7422
  className: "flex h-full w-full items-center justify-center"
7341
7423
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.NoData, _extends({}, helpDocUrl && {
7342
- helpText: renderNoDataHelpText(helpDocUrl)
7424
+ helpText: renderNoDataHelpText(title, helpDocUrl)
7343
7425
  }, {
7344
- title: t("messages.noFields"),
7426
+ title: t("messages.noFields", {
7427
+ title: title
7428
+ }),
7345
7429
  primaryButtonProps: {
7346
7430
  label: t("labels.addField"),
7347
7431
  onClick: function onClick() {
@@ -11616,12 +11700,15 @@ var FieldBlock = function FieldBlock(_ref) {
11616
11700
  ref: setNodeRef,
11617
11701
  style: style
11618
11702
  }, attributes, listeners, {
11619
- className: "neeto-ui-text-gray-800 mb-3 flex items-center space-x-4 font-medium"
11703
+ className: "neeto-ui-text-gray-800 mb-3 flex items-center space-x-4 font-medium",
11704
+ "data-cy": "reorder-field-block"
11620
11705
  }), /*#__PURE__*/React__default["default"].createElement("div", {
11621
11706
  className: "neeto-ui-bg-gray-100 neeto-ui-text-gray-700 neeto-ui-rounded-sm flex h-6 w-6 flex-shrink-0 items-center justify-center p-1"
11622
11707
  }, index - systemFieldsCount + 1), /*#__PURE__*/React__default["default"].createElement("div", {
11623
11708
  className: "neeto-ui-border-gray-400 neeto-ui-bg-white neeto-ui-rounded neeto-ui-shadow-xs flex w-96 items-center space-x-4 border border-solid p-3"
11624
- }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Reorder, null), /*#__PURE__*/React__default["default"].createElement("div", null, field.name)));
11709
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Reorder, null), /*#__PURE__*/React__default["default"].createElement("div", {
11710
+ "data-cy": "reorder-field-block-name"
11711
+ }, field.name)));
11625
11712
  };
11626
11713
  var FieldBlock$1 = /*#__PURE__*/React__default["default"].memo(FieldBlock);
11627
11714
 
@@ -11672,10 +11759,12 @@ var ReorderPane = function ReorderPane(_ref) {
11672
11759
  isOpen: isOpen,
11673
11760
  onClose: onClose
11674
11761
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
11762
+ "data-cy": "reorder-pane-header",
11675
11763
  style: "h2",
11676
11764
  weight: "semibold"
11677
11765
  }, t("titles.reorderFields"))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
11678
11766
  className: "mb-3",
11767
+ "data-cy": "reorder-pane-message",
11679
11768
  style: "body2"
11680
11769
  }, t("messages.reorderFields")), /*#__PURE__*/React__default["default"].createElement("div", {
11681
11770
  className: "flex flex-col items-center"
@@ -11696,11 +11785,13 @@ var ReorderPane = function ReorderPane(_ref) {
11696
11785
  }))))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Footer, {
11697
11786
  className: "flex items-center space-x-2"
11698
11787
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11788
+ "data-cy": "save-changes-button",
11699
11789
  disabled: initialStateRef.current === fields,
11700
11790
  label: t("labels.saveChanges"),
11701
11791
  loading: isSubmitting,
11702
11792
  onClick: handleReorderSave
11703
11793
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11794
+ "data-cy": "cancel-button",
11704
11795
  label: t("labels.cancel"),
11705
11796
  style: "text",
11706
11797
  onClick: onClose
@@ -11713,7 +11804,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11713
11804
  var _ref$rowData = _ref.rowData,
11714
11805
  rowData = _ref$rowData === void 0 ? [] : _ref$rowData,
11715
11806
  _ref$showOwnersInMenu = _ref.showOwnersInMenu,
11716
- showOwnersInMenu = _ref$showOwnersInMenu === void 0 ? false : _ref$showOwnersInMenu,
11807
+ isOwnerBased = _ref$showOwnersInMenu === void 0 ? false : _ref$showOwnersInMenu,
11717
11808
  _ref$resourceType = _ref.resourceType,
11718
11809
  resourceType = _ref$resourceType === void 0 ? "" : _ref$resourceType,
11719
11810
  _ref$allowedKinds = _ref.allowedKinds,
@@ -11733,14 +11824,20 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11733
11824
  fieldStatesTaxonomy = _ref$fieldStatesTaxon === void 0 ? DEFAULT_FIELD_STATE_TAXONOMY : _ref$fieldStatesTaxon,
11734
11825
  helpDocUrl = _ref.helpDocUrl,
11735
11826
  _ref$nameAliases = _ref.nameAliases,
11736
- nameAliases = _ref$nameAliases === void 0 ? {} : _ref$nameAliases;
11827
+ nameAliases = _ref$nameAliases === void 0 ? {} : _ref$nameAliases,
11828
+ headerTitle = _ref.headerTitle,
11829
+ resources = _ref.resources;
11737
11830
  var _useTranslation = useTranslation(),
11738
11831
  t = _useTranslation.t;
11832
+ var title = pure.capitalize(headerTitle || t("titles.field", PLURAL));
11739
11833
  var _useFieldsDashboard = useFieldsDashboard({
11740
11834
  buildColumnData: buildColumnData,
11741
- showOwnersInMenu: showOwnersInMenu,
11835
+ isOwnerBased: isOwnerBased,
11742
11836
  fieldStatesTaxonomy: fieldStatesTaxonomy,
11743
- nameAliases: nameAliases
11837
+ nameAliases: nameAliases,
11838
+ title: title,
11839
+ resources: resources,
11840
+ showStateFilter: showStateFilter
11744
11841
  }),
11745
11842
  isPaneOpen = _useFieldsDashboard.isPaneOpen,
11746
11843
  setIsPaneOpen = _useFieldsDashboard.setIsPaneOpen,
@@ -11750,9 +11847,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11750
11847
  isReorderPaneOpen = _useFieldsDashboard.isReorderPaneOpen,
11751
11848
  setIsReorderPaneOpen = _useFieldsDashboard.setIsReorderPaneOpen,
11752
11849
  fields = _useFieldsDashboard.fields,
11753
- owners = _useFieldsDashboard.owners,
11754
11850
  count = _useFieldsDashboard.count,
11755
- menuItems = _useFieldsDashboard.menuItems,
11756
11851
  columnData = _useFieldsDashboard.columnData,
11757
11852
  selectedField = _useFieldsDashboard.selectedField,
11758
11853
  selectedState = _useFieldsDashboard.selectedState,
@@ -11762,6 +11857,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11762
11857
  isDeleting = _useFieldsDashboard.isDeleting,
11763
11858
  isScreenLoading = _useFieldsDashboard.isScreenLoading,
11764
11859
  isConfigsLoading = _useFieldsDashboard.isConfigsLoading,
11860
+ isMenuBarNeeded = _useFieldsDashboard.isMenuBarNeeded,
11765
11861
  showCountSubheader = _useFieldsDashboard.showCountSubheader,
11766
11862
  handleDelete = _useFieldsDashboard.handleDelete,
11767
11863
  handleAlertClose = _useFieldsDashboard.handleAlertClose,
@@ -11770,11 +11866,11 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11770
11866
  searchProps = _useFieldsDashboard.searchProps,
11771
11867
  menuBarFilters = _useFieldsDashboard.menuBarFilters,
11772
11868
  menuBarItems = _useFieldsDashboard.menuBarItems,
11773
- allFields = _useFieldsDashboard.allFields;
11774
- var isMenuBarNeeded = showStateFilter || menuItems.length > 1;
11869
+ allFields = _useFieldsDashboard.allFields,
11870
+ headerDisplayTitle = _useFieldsDashboard.headerDisplayTitle;
11775
11871
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, isMenuBarNeeded && /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"], {
11776
11872
  showMenu: isMenuBarOpen,
11777
- title: t("titles.field", PLURAL)
11873
+ title: title
11778
11874
  }, isConfigsLoading ? /*#__PURE__*/React__default["default"].createElement("div", {
11779
11875
  className: "flex items-center justify-center"
11780
11876
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null)) : menuBarItems, showStateFilter && menuBarFilters), isScreenLoading && ramda.isEmpty(fields) ? /*#__PURE__*/React__default["default"].createElement("div", {
@@ -11787,6 +11883,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11787
11883
  }
11788
11884
  }, {
11789
11885
  actionBlock: /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11886
+ "data-cy": "neeto-fields-reorder-button",
11790
11887
  label: t("labels.reorder"),
11791
11888
  style: "secondary",
11792
11889
  disabled: selectedState === FIELD_STATES.inactive || !pure.existsBy({
@@ -11797,45 +11894,46 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11797
11894
  return setIsReorderPaneOpen(true);
11798
11895
  }
11799
11896
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11897
+ "data-cy": "neeto-fields-add-button",
11800
11898
  label: t("labels.addField"),
11801
11899
  onClick: function onClick() {
11802
11900
  return setIsPaneOpen(true);
11803
11901
  }
11804
- }), /*#__PURE__*/React__default["default"].createElement(FieldsPane, {
11805
- additionalValidations: paneProps === null || paneProps === void 0 ? void 0 : paneProps.validations,
11806
- allowedKinds: allowedKinds,
11807
- hideRequiredSwitch: paneProps === null || paneProps === void 0 ? void 0 : paneProps.hideRequiredSwitch,
11808
- initialValues: paneProps === null || paneProps === void 0 ? void 0 : paneProps.initialValues,
11809
- isOpen: isPaneOpen,
11810
- ownerId: showOwnersInMenu ? selectedMenu : "",
11811
- resourceType: showOwnersInMenu ? resourceType : selectedMenu //Currently we support only one resource type when fields are classified based on owners
11812
- ,
11813
- selectedField: selectedField,
11814
- onClose: handleClosePane,
11815
- onMutationSuccess: paneProps === null || paneProps === void 0 ? void 0 : paneProps.onMutationSuccess
11816
- }, paneProps === null || paneProps === void 0 ? void 0 : paneProps.children)),
11902
+ })),
11817
11903
  searchProps: searchProps,
11818
- title: pure.humanize(getDashBoardTitle({
11819
- isOwnerBased: showOwnersInMenu,
11820
- owners: owners,
11821
- selectedVal: selectedMenu,
11822
- nameAliases: nameAliases
11823
- }))
11904
+ title: /*#__PURE__*/React__default["default"].createElement(TitleWithHelpLink, {
11905
+ helpUrl: helpDocUrl,
11906
+ title: headerDisplayTitle
11907
+ })
11824
11908
  })), showCountSubheader && /*#__PURE__*/React__default["default"].createElement(SubHeader__default["default"], {
11825
11909
  leftActionBlock: /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
11826
11910
  className: "mr-4 font-semibold",
11911
+ "data-cy": "neeto-fields-subheader-text",
11827
11912
  style: "h4"
11828
- }, count, " ", selectedState, " ", t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11913
+ }, "".concat(count, " "), t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11829
11914
  }), /*#__PURE__*/React__default["default"].createElement(FieldsTable, {
11830
11915
  columnData: columnData,
11831
11916
  helpDocUrl: helpDocUrl,
11832
11917
  isLoading: isFieldsFetching || isFieldsLoading,
11833
11918
  rowData: ramda.isEmpty(rowData) ? fields : rowData,
11834
11919
  setIsPaneOpen: setIsPaneOpen,
11835
- totalCount: count
11836
- })), /*#__PURE__*/React__default["default"].createElement(ReorderPane, {
11920
+ totalCount: count,
11921
+ title: title
11922
+ }), /*#__PURE__*/React__default["default"].createElement(FieldsPane, {
11923
+ additionalValidations: paneProps === null || paneProps === void 0 ? void 0 : paneProps.validations,
11924
+ allowedKinds: allowedKinds,
11925
+ hideRequiredSwitch: paneProps === null || paneProps === void 0 ? void 0 : paneProps.hideRequiredSwitch,
11926
+ initialValues: paneProps === null || paneProps === void 0 ? void 0 : paneProps.initialValues,
11927
+ isOpen: isPaneOpen,
11928
+ ownerId: isOwnerBased ? selectedMenu : "",
11929
+ resourceType: isOwnerBased ? resourceType : selectedMenu //Currently we support only one resource type when fields are classified based on owners
11930
+ ,
11931
+ selectedField: selectedField,
11932
+ onClose: handleClosePane,
11933
+ onMutationSuccess: paneProps === null || paneProps === void 0 ? void 0 : paneProps.onMutationSuccess
11934
+ }, paneProps === null || paneProps === void 0 ? void 0 : paneProps.children)), /*#__PURE__*/React__default["default"].createElement(ReorderPane, {
11837
11935
  isOpen: isReorderPaneOpen,
11838
- ownerId: showOwnersInMenu ? selectedMenu : "",
11936
+ ownerId: isOwnerBased ? selectedMenu : "",
11839
11937
  onClose: handleReorderPaneClose,
11840
11938
  allFields: allFields
11841
11939
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Alert, {