@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/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import React, { useContext, useState, useRef, useEffect, useMemo, useLayoutEffect, useCallback, createContext, memo, useReducer } from 'react';
2
2
  import { Switch, TimePicker, DatePicker, Select, Input, Textarea, Typography, Pane, Label, Button as Button$1, Dropdown, NoData, Table, Spinner, Alert } from '@bigbinary/neetoui';
3
- import { toLabelAndValue, isNotEmpty, capitalize as capitalize$1, filterBy, findBy, humanize, countBy, existsBy, noop as noop$2 } from '@bigbinary/neeto-commons-frontend/pure';
3
+ import { toLabelAndValue, isNotEmpty, capitalize as capitalize$1, filterBy, findBy, slugify, humanize, countBy, existsBy, noop as noop$2 } from '@bigbinary/neeto-commons-frontend/pure';
4
4
  import { values, map, isNotNil, isNil, pluck, clone as clone$1, pipe, mergeAll, omit, prop, pick, isEmpty, assoc, any, not, head } from 'ramda';
5
5
  import { useFormikContext, useField, FieldArray } from 'formik';
6
6
  import * as yup from 'yup';
7
- import { Check, Delete, MenuHorizontal, Reorder } from '@bigbinary/neeto-icons';
7
+ import { Check, Info, Delete, MenuHorizontal, Reorder } from '@bigbinary/neeto-icons';
8
8
  import { Button, ActionBlock, Input as Input$1, Select as Select$1, Switch as Switch$1, Form } from '@bigbinary/neetoui/formik';
9
9
  import Container from '@bigbinary/neeto-molecules/Container';
10
10
  import Header from '@bigbinary/neeto-molecules/Header';
@@ -5306,9 +5306,12 @@ var fields = {
5306
5306
  }
5307
5307
  };
5308
5308
  var messages = {
5309
- noFields: "There are no fields to show",
5309
+ noFields: "There are no {{title}} to show",
5310
5310
  confirmDelete: "Are you sure want to delete the field? This action cannot be undone.",
5311
5311
  manageFieldFor: "Manage fields for {{resource}}",
5312
+ manageTitleForResource: "Manage {{title}} for {{resource}}",
5313
+ titleForResource: "{{title}} for {{resource}}",
5314
+ stateTitleForResource: "{{state}} {{title}} for {{resource}}",
5312
5315
  invalidKind: "Invalid kind",
5313
5316
  reorderFields: "Fields are displayed from top to bottom."
5314
5317
  };
@@ -5329,7 +5332,7 @@ var tooltips = {
5329
5332
  reorder: "Fields a are displayed from top to bottom. Re-order them"
5330
5333
  };
5331
5334
  var helpTexts = {
5332
- noData: "Here is how you can use <a>fields.</a>"
5335
+ noData: "Here is how you can use <a>{{title}}.</a>"
5333
5336
  };
5334
5337
  var en = {
5335
5338
  common: common,
@@ -6323,6 +6326,21 @@ var SINGULAR = {
6323
6326
  var PLURAL = {
6324
6327
  count: 2
6325
6328
  };
6329
+ var INFO_ICON_SIZE = 16;
6330
+
6331
+ var TitleWithHelpLink = function TitleWithHelpLink(_ref) {
6332
+ var title = _ref.title,
6333
+ helpUrl = _ref.helpUrl;
6334
+ return /*#__PURE__*/React.createElement("div", {
6335
+ className: "flex items-center gap-x-1"
6336
+ }, title, helpUrl && /*#__PURE__*/React.createElement("a", {
6337
+ href: helpUrl,
6338
+ rel: "noreferrer",
6339
+ target: "_blank"
6340
+ }, /*#__PURE__*/React.createElement(Info, {
6341
+ size: INFO_ICON_SIZE
6342
+ })));
6343
+ };
6326
6344
 
6327
6345
  var fieldUrl = function fieldUrl(fieldId) {
6328
6346
  return buildUrl(FIELD_URL, {
@@ -6764,6 +6782,7 @@ var FieldForm = function FieldForm(_ref) {
6764
6782
  className: "w-full space-y-4"
6765
6783
  }, /*#__PURE__*/React.createElement(Input$1, {
6766
6784
  required: true,
6785
+ "data-cy": "name-text-field",
6767
6786
  disabled: isSystem,
6768
6787
  label: t("labels.fieldName"),
6769
6788
  name: "name",
@@ -6776,12 +6795,15 @@ var FieldForm = function FieldForm(_ref) {
6776
6795
  options: kindSelectOptions,
6777
6796
  onChange: handleKindChange
6778
6797
  }), isAdditionalDataNeeded(chosenKind) && /*#__PURE__*/React.createElement(AdditionalInputs, null), !hideRequiredSwitch && /*#__PURE__*/React.createElement(Label, {
6779
- className: "flex items-center gap-2"
6798
+ className: "flex items-center gap-2",
6799
+ "data-cy": "is-required-switch-container"
6780
6800
  }, /*#__PURE__*/React.createElement(Switch$1, {
6801
+ "data-cy": "is-required-switch",
6781
6802
  name: "isRequired"
6782
6803
  }), /*#__PURE__*/React.createElement(Typography, {
6783
6804
  className: "leading-4",
6784
6805
  component: "span",
6806
+ "data-cy": "is-required-switch-label",
6785
6807
  style: "body2"
6786
6808
  }, t("labels.isRequired"))), children));
6787
6809
  };
@@ -6821,6 +6843,7 @@ var Add = function Add(_ref) {
6821
6843
  });
6822
6844
  };
6823
6845
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Pane.Header, null, /*#__PURE__*/React.createElement(Typography, {
6846
+ "data-cy": "add-pane-header",
6824
6847
  style: "h2"
6825
6848
  }, t("titles.addField"))), /*#__PURE__*/React.createElement(Form, {
6826
6849
  formikProps: {
@@ -6869,7 +6892,8 @@ var Edit = function Edit(_ref) {
6869
6892
  _useShowField$data = _useShowField.data,
6870
6893
  _useShowField$data2 = _useShowField$data === void 0 ? {} : _useShowField$data,
6871
6894
  _useShowField$data2$f = _useShowField$data2.field,
6872
- field = _useShowField$data2$f === void 0 ? {} : _useShowField$data2$f;
6895
+ field = _useShowField$data2$f === void 0 ? {} : _useShowField$data2$f,
6896
+ isLoading = _useShowField.isLoading;
6873
6897
  var _useUpdateField = useUpdateField({
6874
6898
  onSuccess: function onSuccess() {
6875
6899
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -6892,8 +6916,9 @@ var Edit = function Edit(_ref) {
6892
6916
  });
6893
6917
  };
6894
6918
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Pane.Header, null, /*#__PURE__*/React.createElement(Typography, {
6919
+ "data-cy": "edit-pane-header",
6895
6920
  style: "h2"
6896
- }, t("titles.editField"))), /*#__PURE__*/React.createElement(Form, {
6921
+ }, t("titles.editField"))), isLoading ? /*#__PURE__*/React.createElement(PageLoader, null) : /*#__PURE__*/React.createElement(Form, {
6897
6922
  formikProps: {
6898
6923
  initialValues: _objectSpread$4(_objectSpread$4({}, initialValues), assoc("kind", FIELD_KINDS[field.kind], field)),
6899
6924
  validationSchema: generateValidationSchema(additionalValidations),
@@ -6951,17 +6976,20 @@ var buildDefaultColumns = function buildDefaultColumns(_ref) {
6951
6976
  }, /*#__PURE__*/React.createElement(Typography, {
6952
6977
  style: "body2"
6953
6978
  }, name), /*#__PURE__*/React.createElement(Dropdown, {
6954
- buttonProps: {
6955
- className: "flex-shrink-0"
6956
- },
6957
6979
  buttonStyle: "text",
6958
6980
  icon: MenuHorizontal,
6959
- strategy: "fixed"
6981
+ strategy: "fixed",
6982
+ buttonProps: {
6983
+ className: "flex-shrink-0",
6984
+ "data-cy": "neeto-fields-options-dropdown"
6985
+ }
6960
6986
  }, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement(MenuItem.Button, {
6987
+ "data-cy": "edit-menu-item-button",
6961
6988
  onClick: function onClick() {
6962
6989
  return onEditClick(field);
6963
6990
  }
6964
6991
  }, t$1("labels.edit")), !field.isSystem && /*#__PURE__*/React.createElement(MenuItem.Button, {
6992
+ "data-cy": "delete-menu-item-button",
6965
6993
  onClick: function onClick() {
6966
6994
  return onDeleteClick(field);
6967
6995
  }
@@ -6988,14 +7016,18 @@ var renderMenuBarItems = function renderMenuBarItems(_ref2) {
6988
7016
  isOwnerBased = _ref2.isOwnerBased,
6989
7017
  selectedMenu = _ref2.selectedMenu,
6990
7018
  handleBlockClick = _ref2.handleBlockClick,
6991
- nameAliases = _ref2.nameAliases;
7019
+ nameAliases = _ref2.nameAliases,
7020
+ title = _ref2.title;
7021
+ title = title.toLocaleLowerCase();
6992
7022
  if (isOwnerBased) {
6993
7023
  return items.map(function (item) {
6994
7024
  return /*#__PURE__*/React.createElement(MenuBar.Item, {
6995
7025
  active: selectedMenu === item.id,
7026
+ "data-cy": "menubar-".concat(slugify(item.name), "-menu-item"),
6996
7027
  key: item.id,
6997
7028
  label: humanize(item.name),
6998
- description: t$1("messages.manageFieldFor", {
7029
+ description: t$1("messages.manageTitleForResource", {
7030
+ title: title,
6999
7031
  resource: humanize(item.name).toLocaleLowerCase()
7000
7032
  }),
7001
7033
  onClick: handleBlockClick({
@@ -7005,11 +7037,14 @@ var renderMenuBarItems = function renderMenuBarItems(_ref2) {
7005
7037
  });
7006
7038
  }
7007
7039
  return items.length > 1 && items.map(function (item) {
7040
+ var label = nameAliases[item] || humanize(item);
7008
7041
  return /*#__PURE__*/React.createElement(MenuBar.Item, {
7009
7042
  active: selectedMenu === item,
7043
+ "data-cy": "neeto-fields-".concat(slugify(label), "-menu-item"),
7010
7044
  key: item,
7011
- label: nameAliases[item] || humanize(item),
7012
- description: t$1("messages.manageFieldFor", {
7045
+ label: label,
7046
+ description: t$1("messages.manageTitleForResource", {
7047
+ title: title,
7013
7048
  resource: humanize(item).toLocaleLowerCase()
7014
7049
  }),
7015
7050
  onClick: handleBlockClick({
@@ -7025,12 +7060,14 @@ var renderMenuBarFilters = function renderMenuBarFilters(_ref3) {
7025
7060
  inactiveFieldsCount = _ref3.inactiveFieldsCount,
7026
7061
  handleBlockClick = _ref3.handleBlockClick;
7027
7062
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MenuBar.SubTitle, null, /*#__PURE__*/React.createElement(Typography, {
7063
+ "data-cy": "menubar-subtitle",
7028
7064
  style: "h5",
7029
7065
  textTransform: "uppercase",
7030
7066
  weight: "bold"
7031
7067
  }, t$1("titles.filters"))), /*#__PURE__*/React.createElement(MenuBar.Block, {
7032
7068
  active: selectedState === FIELD_STATES.active,
7033
7069
  count: activeFieldsCount,
7070
+ "data-cy": "menubar-active-block",
7034
7071
  label: fieldStatesTaxonomy.active,
7035
7072
  onClick: handleBlockClick({
7036
7073
  state: FIELD_STATES.active
@@ -7038,6 +7075,7 @@ var renderMenuBarFilters = function renderMenuBarFilters(_ref3) {
7038
7075
  }), /*#__PURE__*/React.createElement(MenuBar.Block, {
7039
7076
  active: selectedState === FIELD_STATES.inactive,
7040
7077
  count: inactiveFieldsCount,
7078
+ "data-cy": "menubar-inactive-block",
7041
7079
  label: fieldStatesTaxonomy.inactive,
7042
7080
  onClick: handleBlockClick({
7043
7081
  state: FIELD_STATES.inactive
@@ -7049,19 +7087,41 @@ var getDashBoardTitle = function getDashBoardTitle(_ref4) {
7049
7087
  var isOwnerBased = _ref4.isOwnerBased,
7050
7088
  owners = _ref4.owners,
7051
7089
  selectedVal = _ref4.selectedVal,
7052
- nameAliases = _ref4.nameAliases;
7053
- return t$1("messages.manageFieldFor", {
7054
- resource: isOwnerBased ? (_findBy = findBy({
7055
- id: selectedVal
7056
- }, owners)) === null || _findBy === void 0 ? void 0 : _findBy.name : nameAliases[selectedVal] || selectedVal
7057
- });
7090
+ nameAliases = _ref4.nameAliases,
7091
+ isSingleResource = _ref4.isSingleResource,
7092
+ showStateFilter = _ref4.showStateFilter,
7093
+ selectedState = _ref4.selectedState,
7094
+ title = _ref4.title;
7095
+ var resource = isOwnerBased ? (_findBy = findBy({
7096
+ id: selectedVal
7097
+ }, owners)) === null || _findBy === void 0 ? void 0 : _findBy.name : nameAliases[selectedVal] || selectedVal;
7098
+ var displayTitle = title;
7099
+ if (showStateFilter && !isSingleResource) {
7100
+ displayTitle = t$1("messages.stateTitleForResource", {
7101
+ state: selectedState,
7102
+ title: title,
7103
+ resource: resource
7104
+ });
7105
+ } else if (showStateFilter && isSingleResource) {
7106
+ displayTitle = "".concat(selectedState, " ").concat(title);
7107
+ } else if (!showStateFilter && !isSingleResource) {
7108
+ displayTitle = t$1("messages.titleForResource", {
7109
+ title: title,
7110
+ resource: resource
7111
+ });
7112
+ }
7113
+ return humanize(displayTitle);
7058
7114
  };
7059
- var renderNoDataHelpText = function renderNoDataHelpText(url) {
7115
+ var renderNoDataHelpText = function renderNoDataHelpText(title, url) {
7060
7116
  return /*#__PURE__*/React.createElement(Trans, {
7061
7117
  i18nKey: "helpTexts.noData",
7118
+ values: {
7119
+ title: title
7120
+ },
7062
7121
  components: {
7063
7122
  a: /*#__PURE__*/React.createElement(Link, {
7064
7123
  className: "neeto-ui-text-primary-600 underline",
7124
+ "data-cy": "no-data-help-text-link",
7065
7125
  target: "_blank",
7066
7126
  to: {
7067
7127
  pathname: url
@@ -7090,9 +7150,12 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
7090
7150
  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; }
7091
7151
  var useFieldsDashboard = function useFieldsDashboard(_ref) {
7092
7152
  var buildColumnData = _ref.buildColumnData,
7093
- showOwnersInMenu = _ref.showOwnersInMenu,
7153
+ isOwnerBased = _ref.isOwnerBased,
7094
7154
  fieldStatesTaxonomy = _ref.fieldStatesTaxonomy,
7095
- nameAliases = _ref.nameAliases;
7155
+ nameAliases = _ref.nameAliases,
7156
+ title = _ref.title,
7157
+ resources = _ref.resources,
7158
+ showStateFilter = _ref.showStateFilter;
7096
7159
  var _useState = useState(false),
7097
7160
  _useState2 = _slicedToArray(_useState, 2),
7098
7161
  isPaneOpen = _useState2[0],
@@ -7117,15 +7180,17 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7117
7180
  _useState12 = _slicedToArray(_useState11, 2),
7118
7181
  searchTerm = _useState12[0],
7119
7182
  setSearchTerm = _useState12[1];
7120
- var _getQueryParams = getQueryParams(),
7121
- resource = _getQueryParams.resource,
7122
- state = _getQueryParams.state;
7123
- var ownerId = showOwnersInMenu ? resource : undefined;
7124
7183
  var debouncedSearchTerm = useDebounce(searchTerm.trim());
7125
7184
  var history = useHistory();
7126
7185
  var _useTranslation = useTranslation(),
7127
7186
  t = _useTranslation.t;
7128
- var _useFetchConfigs = useFetchConfigs(),
7187
+ var _getQueryParams = getQueryParams(),
7188
+ resource = _getQueryParams.resource,
7189
+ state = _getQueryParams.state;
7190
+ var ownerId = isOwnerBased ? resource : undefined;
7191
+ var _useFetchConfigs = useFetchConfigs({
7192
+ enabled: !resources
7193
+ }),
7129
7194
  _useFetchConfigs$data = _useFetchConfigs.data,
7130
7195
  _useFetchConfigs$data2 = _useFetchConfigs$data === void 0 ? {} : _useFetchConfigs$data,
7131
7196
  _useFetchConfigs$data3 = _useFetchConfigs$data2.owners,
@@ -7134,7 +7199,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7134
7199
  resourceTypes = _useFetchConfigs$data4 === void 0 ? [] : _useFetchConfigs$data4,
7135
7200
  isConfigsLoading = _useFetchConfigs.isLoading;
7136
7201
  var fieldParams = {
7137
- resourceType: !showOwnersInMenu ? resource : undefined,
7202
+ resourceType: !isOwnerBased ? resource : undefined,
7138
7203
  ownerId: ownerId,
7139
7204
  state: state || FIELD_STATES.active,
7140
7205
  searchTerm: debouncedSearchTerm
@@ -7210,14 +7275,15 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7210
7275
  state: state
7211
7276
  }, params)));
7212
7277
  };
7278
+ var menuItems = resources || (isOwnerBased ? owners : resourceTypes);
7213
7279
  var handleURLWithDefaultValues = function handleURLWithDefaultValues() {
7214
7280
  var queryParams = {
7215
7281
  resource: resource,
7216
7282
  state: state
7217
7283
  };
7218
7284
  if (!isConfigsLoading && isNil(resource)) {
7219
- var _owners$;
7220
- queryParams.resource = showOwnersInMenu ? (_owners$ = owners[0]) === null || _owners$ === void 0 ? void 0 : _owners$.id : resourceTypes[0];
7285
+ var _menuItems$;
7286
+ 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];
7221
7287
  }
7222
7288
  if (!isConfigsLoading && isNil(state)) {
7223
7289
  queryParams.state = FIELD_STATES.active;
@@ -7226,7 +7292,6 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7226
7292
  history.replace(buildUrl("", queryParams));
7227
7293
  }
7228
7294
  };
7229
- var menuItems = showOwnersInMenu ? owners : resourceTypes;
7230
7295
  var isScreenLoading = isFieldsLoading || isConfigsLoading;
7231
7296
  var showCountSubheader = count > 0;
7232
7297
  var searchProps = {
@@ -7236,6 +7301,20 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7236
7301
  value: searchTerm,
7237
7302
  placeholder: t("placeholders.searchFields")
7238
7303
  };
7304
+ var isSingleResource = menuItems.length === 1;
7305
+ var isMenuBarNeeded = showStateFilter || !isSingleResource;
7306
+ var headerDisplayTitle = useMemo(function () {
7307
+ return getDashBoardTitle({
7308
+ isOwnerBased: isOwnerBased,
7309
+ owners: menuItems,
7310
+ selectedVal: resource,
7311
+ nameAliases: nameAliases,
7312
+ showStateFilter: showStateFilter,
7313
+ selectedState: state,
7314
+ isSingleResource: isSingleResource,
7315
+ title: title
7316
+ });
7317
+ }, [resource, state, isSingleResource, menuItems]);
7239
7318
  var menuBarFilters = useMemo(function () {
7240
7319
  return renderMenuBarFilters({
7241
7320
  selectedState: state,
@@ -7244,19 +7323,20 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7244
7323
  inactiveFieldsCount: inactiveFieldsCount,
7245
7324
  handleBlockClick: handleBlockClick
7246
7325
  });
7247
- }, [activeFieldsCount, inactiveFieldsCount, state]);
7326
+ }, [activeFieldsCount, inactiveFieldsCount]);
7248
7327
  var menuBarItems = useMemo(function () {
7249
7328
  return renderMenuBarItems({
7250
- isOwnerBased: showOwnersInMenu,
7329
+ isOwnerBased: isOwnerBased,
7251
7330
  items: menuItems,
7252
7331
  selectedMenu: resource,
7253
7332
  handleBlockClick: handleBlockClick,
7254
- nameAliases: nameAliases
7333
+ nameAliases: nameAliases,
7334
+ title: title
7255
7335
  });
7256
7336
  }, [menuItems, resource]);
7257
7337
  useEffect(function () {
7258
7338
  handleURLWithDefaultValues();
7259
- }, [isConfigsLoading]);
7339
+ }, [isConfigsLoading, resources]);
7260
7340
  return {
7261
7341
  isPaneOpen: isPaneOpen,
7262
7342
  setIsPaneOpen: setIsPaneOpen,
@@ -7266,9 +7346,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7266
7346
  isReorderPaneOpen: isReorderPaneOpen,
7267
7347
  setIsReorderPaneOpen: setIsReorderPaneOpen,
7268
7348
  fields: fields,
7269
- owners: owners,
7270
7349
  count: count,
7271
- menuItems: menuItems,
7272
7350
  columnData: columnData,
7273
7351
  selectedField: selectedField,
7274
7352
  selectedState: state,
@@ -7279,6 +7357,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7279
7357
  isDeleting: isDeleting,
7280
7358
  isScreenLoading: isScreenLoading,
7281
7359
  isConfigsLoading: isConfigsLoading,
7360
+ isMenuBarNeeded: isMenuBarNeeded,
7282
7361
  showCountSubheader: showCountSubheader,
7283
7362
  handleDelete: handleDelete,
7284
7363
  handleAlertClose: handleAlertClose,
@@ -7287,7 +7366,8 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7287
7366
  searchProps: searchProps,
7288
7367
  menuBarFilters: menuBarFilters,
7289
7368
  menuBarItems: menuBarItems,
7290
- allFields: allFields
7369
+ allFields: allFields,
7370
+ headerDisplayTitle: headerDisplayTitle
7291
7371
  };
7292
7372
  };
7293
7373
 
@@ -7297,16 +7377,20 @@ var FieldsTable = function FieldsTable(_ref) {
7297
7377
  rowData = _ref.rowData,
7298
7378
  columnData = _ref.columnData,
7299
7379
  setIsPaneOpen = _ref.setIsPaneOpen,
7300
- helpDocUrl = _ref.helpDocUrl;
7380
+ helpDocUrl = _ref.helpDocUrl,
7381
+ title = _ref.title;
7301
7382
  var _useTranslation = useTranslation(),
7302
7383
  t = _useTranslation.t;
7303
7384
  var showNoDataScreen = !isLoading && isEmpty(rowData);
7385
+ title = title.toLocaleLowerCase();
7304
7386
  return /*#__PURE__*/React.createElement(TableWrapper, null, showNoDataScreen ? /*#__PURE__*/React.createElement("div", {
7305
7387
  className: "flex h-full w-full items-center justify-center"
7306
7388
  }, /*#__PURE__*/React.createElement(NoData, _extends({}, helpDocUrl && {
7307
- helpText: renderNoDataHelpText(helpDocUrl)
7389
+ helpText: renderNoDataHelpText(title, helpDocUrl)
7308
7390
  }, {
7309
- title: t("messages.noFields"),
7391
+ title: t("messages.noFields", {
7392
+ title: title
7393
+ }),
7310
7394
  primaryButtonProps: {
7311
7395
  label: t("labels.addField"),
7312
7396
  onClick: function onClick() {
@@ -11581,12 +11665,15 @@ var FieldBlock = function FieldBlock(_ref) {
11581
11665
  ref: setNodeRef,
11582
11666
  style: style
11583
11667
  }, attributes, listeners, {
11584
- className: "neeto-ui-text-gray-800 mb-3 flex items-center space-x-4 font-medium"
11668
+ className: "neeto-ui-text-gray-800 mb-3 flex items-center space-x-4 font-medium",
11669
+ "data-cy": "reorder-field-block"
11585
11670
  }), /*#__PURE__*/React.createElement("div", {
11586
11671
  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"
11587
11672
  }, index - systemFieldsCount + 1), /*#__PURE__*/React.createElement("div", {
11588
11673
  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"
11589
- }, /*#__PURE__*/React.createElement(Reorder, null), /*#__PURE__*/React.createElement("div", null, field.name)));
11674
+ }, /*#__PURE__*/React.createElement(Reorder, null), /*#__PURE__*/React.createElement("div", {
11675
+ "data-cy": "reorder-field-block-name"
11676
+ }, field.name)));
11590
11677
  };
11591
11678
  var FieldBlock$1 = /*#__PURE__*/React.memo(FieldBlock);
11592
11679
 
@@ -11637,10 +11724,12 @@ var ReorderPane = function ReorderPane(_ref) {
11637
11724
  isOpen: isOpen,
11638
11725
  onClose: onClose
11639
11726
  }, /*#__PURE__*/React.createElement(Pane.Header, null, /*#__PURE__*/React.createElement(Typography, {
11727
+ "data-cy": "reorder-pane-header",
11640
11728
  style: "h2",
11641
11729
  weight: "semibold"
11642
11730
  }, t("titles.reorderFields"))), /*#__PURE__*/React.createElement(Pane.Body, null, /*#__PURE__*/React.createElement(Typography, {
11643
11731
  className: "mb-3",
11732
+ "data-cy": "reorder-pane-message",
11644
11733
  style: "body2"
11645
11734
  }, t("messages.reorderFields")), /*#__PURE__*/React.createElement("div", {
11646
11735
  className: "flex flex-col items-center"
@@ -11661,11 +11750,13 @@ var ReorderPane = function ReorderPane(_ref) {
11661
11750
  }))))), /*#__PURE__*/React.createElement(Pane.Footer, {
11662
11751
  className: "flex items-center space-x-2"
11663
11752
  }, /*#__PURE__*/React.createElement(Button$1, {
11753
+ "data-cy": "save-changes-button",
11664
11754
  disabled: initialStateRef.current === fields,
11665
11755
  label: t("labels.saveChanges"),
11666
11756
  loading: isSubmitting,
11667
11757
  onClick: handleReorderSave
11668
11758
  }), /*#__PURE__*/React.createElement(Button$1, {
11759
+ "data-cy": "cancel-button",
11669
11760
  label: t("labels.cancel"),
11670
11761
  style: "text",
11671
11762
  onClick: onClose
@@ -11678,7 +11769,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11678
11769
  var _ref$rowData = _ref.rowData,
11679
11770
  rowData = _ref$rowData === void 0 ? [] : _ref$rowData,
11680
11771
  _ref$showOwnersInMenu = _ref.showOwnersInMenu,
11681
- showOwnersInMenu = _ref$showOwnersInMenu === void 0 ? false : _ref$showOwnersInMenu,
11772
+ isOwnerBased = _ref$showOwnersInMenu === void 0 ? false : _ref$showOwnersInMenu,
11682
11773
  _ref$resourceType = _ref.resourceType,
11683
11774
  resourceType = _ref$resourceType === void 0 ? "" : _ref$resourceType,
11684
11775
  _ref$allowedKinds = _ref.allowedKinds,
@@ -11698,14 +11789,20 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11698
11789
  fieldStatesTaxonomy = _ref$fieldStatesTaxon === void 0 ? DEFAULT_FIELD_STATE_TAXONOMY : _ref$fieldStatesTaxon,
11699
11790
  helpDocUrl = _ref.helpDocUrl,
11700
11791
  _ref$nameAliases = _ref.nameAliases,
11701
- nameAliases = _ref$nameAliases === void 0 ? {} : _ref$nameAliases;
11792
+ nameAliases = _ref$nameAliases === void 0 ? {} : _ref$nameAliases,
11793
+ headerTitle = _ref.headerTitle,
11794
+ resources = _ref.resources;
11702
11795
  var _useTranslation = useTranslation(),
11703
11796
  t = _useTranslation.t;
11797
+ var title = capitalize$1(headerTitle || t("titles.field", PLURAL));
11704
11798
  var _useFieldsDashboard = useFieldsDashboard({
11705
11799
  buildColumnData: buildColumnData,
11706
- showOwnersInMenu: showOwnersInMenu,
11800
+ isOwnerBased: isOwnerBased,
11707
11801
  fieldStatesTaxonomy: fieldStatesTaxonomy,
11708
- nameAliases: nameAliases
11802
+ nameAliases: nameAliases,
11803
+ title: title,
11804
+ resources: resources,
11805
+ showStateFilter: showStateFilter
11709
11806
  }),
11710
11807
  isPaneOpen = _useFieldsDashboard.isPaneOpen,
11711
11808
  setIsPaneOpen = _useFieldsDashboard.setIsPaneOpen,
@@ -11715,9 +11812,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11715
11812
  isReorderPaneOpen = _useFieldsDashboard.isReorderPaneOpen,
11716
11813
  setIsReorderPaneOpen = _useFieldsDashboard.setIsReorderPaneOpen,
11717
11814
  fields = _useFieldsDashboard.fields,
11718
- owners = _useFieldsDashboard.owners,
11719
11815
  count = _useFieldsDashboard.count,
11720
- menuItems = _useFieldsDashboard.menuItems,
11721
11816
  columnData = _useFieldsDashboard.columnData,
11722
11817
  selectedField = _useFieldsDashboard.selectedField,
11723
11818
  selectedState = _useFieldsDashboard.selectedState,
@@ -11727,6 +11822,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11727
11822
  isDeleting = _useFieldsDashboard.isDeleting,
11728
11823
  isScreenLoading = _useFieldsDashboard.isScreenLoading,
11729
11824
  isConfigsLoading = _useFieldsDashboard.isConfigsLoading,
11825
+ isMenuBarNeeded = _useFieldsDashboard.isMenuBarNeeded,
11730
11826
  showCountSubheader = _useFieldsDashboard.showCountSubheader,
11731
11827
  handleDelete = _useFieldsDashboard.handleDelete,
11732
11828
  handleAlertClose = _useFieldsDashboard.handleAlertClose,
@@ -11735,11 +11831,11 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11735
11831
  searchProps = _useFieldsDashboard.searchProps,
11736
11832
  menuBarFilters = _useFieldsDashboard.menuBarFilters,
11737
11833
  menuBarItems = _useFieldsDashboard.menuBarItems,
11738
- allFields = _useFieldsDashboard.allFields;
11739
- var isMenuBarNeeded = showStateFilter || menuItems.length > 1;
11834
+ allFields = _useFieldsDashboard.allFields,
11835
+ headerDisplayTitle = _useFieldsDashboard.headerDisplayTitle;
11740
11836
  return /*#__PURE__*/React.createElement(React.Fragment, null, isMenuBarNeeded && /*#__PURE__*/React.createElement(MenuBar, {
11741
11837
  showMenu: isMenuBarOpen,
11742
- title: t("titles.field", PLURAL)
11838
+ title: title
11743
11839
  }, isConfigsLoading ? /*#__PURE__*/React.createElement("div", {
11744
11840
  className: "flex items-center justify-center"
11745
11841
  }, /*#__PURE__*/React.createElement(Spinner, null)) : menuBarItems, showStateFilter && menuBarFilters), isScreenLoading && isEmpty(fields) ? /*#__PURE__*/React.createElement("div", {
@@ -11752,6 +11848,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11752
11848
  }
11753
11849
  }, {
11754
11850
  actionBlock: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button$1, {
11851
+ "data-cy": "neeto-fields-reorder-button",
11755
11852
  label: t("labels.reorder"),
11756
11853
  style: "secondary",
11757
11854
  disabled: selectedState === FIELD_STATES.inactive || !existsBy({
@@ -11762,45 +11859,46 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11762
11859
  return setIsReorderPaneOpen(true);
11763
11860
  }
11764
11861
  }), /*#__PURE__*/React.createElement(Button$1, {
11862
+ "data-cy": "neeto-fields-add-button",
11765
11863
  label: t("labels.addField"),
11766
11864
  onClick: function onClick() {
11767
11865
  return setIsPaneOpen(true);
11768
11866
  }
11769
- }), /*#__PURE__*/React.createElement(FieldsPane, {
11770
- additionalValidations: paneProps === null || paneProps === void 0 ? void 0 : paneProps.validations,
11771
- allowedKinds: allowedKinds,
11772
- hideRequiredSwitch: paneProps === null || paneProps === void 0 ? void 0 : paneProps.hideRequiredSwitch,
11773
- initialValues: paneProps === null || paneProps === void 0 ? void 0 : paneProps.initialValues,
11774
- isOpen: isPaneOpen,
11775
- ownerId: showOwnersInMenu ? selectedMenu : "",
11776
- resourceType: showOwnersInMenu ? resourceType : selectedMenu //Currently we support only one resource type when fields are classified based on owners
11777
- ,
11778
- selectedField: selectedField,
11779
- onClose: handleClosePane,
11780
- onMutationSuccess: paneProps === null || paneProps === void 0 ? void 0 : paneProps.onMutationSuccess
11781
- }, paneProps === null || paneProps === void 0 ? void 0 : paneProps.children)),
11867
+ })),
11782
11868
  searchProps: searchProps,
11783
- title: humanize(getDashBoardTitle({
11784
- isOwnerBased: showOwnersInMenu,
11785
- owners: owners,
11786
- selectedVal: selectedMenu,
11787
- nameAliases: nameAliases
11788
- }))
11869
+ title: /*#__PURE__*/React.createElement(TitleWithHelpLink, {
11870
+ helpUrl: helpDocUrl,
11871
+ title: headerDisplayTitle
11872
+ })
11789
11873
  })), showCountSubheader && /*#__PURE__*/React.createElement(SubHeader, {
11790
11874
  leftActionBlock: /*#__PURE__*/React.createElement(Typography, {
11791
11875
  className: "mr-4 font-semibold",
11876
+ "data-cy": "neeto-fields-subheader-text",
11792
11877
  style: "h4"
11793
- }, count, " ", selectedState, " ", t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11878
+ }, "".concat(count, " "), t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11794
11879
  }), /*#__PURE__*/React.createElement(FieldsTable, {
11795
11880
  columnData: columnData,
11796
11881
  helpDocUrl: helpDocUrl,
11797
11882
  isLoading: isFieldsFetching || isFieldsLoading,
11798
11883
  rowData: isEmpty(rowData) ? fields : rowData,
11799
11884
  setIsPaneOpen: setIsPaneOpen,
11800
- totalCount: count
11801
- })), /*#__PURE__*/React.createElement(ReorderPane, {
11885
+ totalCount: count,
11886
+ title: title
11887
+ }), /*#__PURE__*/React.createElement(FieldsPane, {
11888
+ additionalValidations: paneProps === null || paneProps === void 0 ? void 0 : paneProps.validations,
11889
+ allowedKinds: allowedKinds,
11890
+ hideRequiredSwitch: paneProps === null || paneProps === void 0 ? void 0 : paneProps.hideRequiredSwitch,
11891
+ initialValues: paneProps === null || paneProps === void 0 ? void 0 : paneProps.initialValues,
11892
+ isOpen: isPaneOpen,
11893
+ ownerId: isOwnerBased ? selectedMenu : "",
11894
+ resourceType: isOwnerBased ? resourceType : selectedMenu //Currently we support only one resource type when fields are classified based on owners
11895
+ ,
11896
+ selectedField: selectedField,
11897
+ onClose: handleClosePane,
11898
+ onMutationSuccess: paneProps === null || paneProps === void 0 ? void 0 : paneProps.onMutationSuccess
11899
+ }, paneProps === null || paneProps === void 0 ? void 0 : paneProps.children)), /*#__PURE__*/React.createElement(ReorderPane, {
11802
11900
  isOpen: isReorderPaneOpen,
11803
- ownerId: showOwnersInMenu ? selectedMenu : "",
11901
+ ownerId: isOwnerBased ? selectedMenu : "",
11804
11902
  onClose: handleReorderPaneClose,
11805
11903
  allFields: allFields
11806
11904
  }), /*#__PURE__*/React.createElement(Alert, {