@bigbinary/neeto-fields-frontend 1.1.3 → 1.1.5

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.cjs.js CHANGED
@@ -7,6 +7,7 @@ var neetoui = require('@bigbinary/neetoui');
7
7
  var pure = require('@bigbinary/neeto-commons-frontend/pure');
8
8
  var ramda = require('ramda');
9
9
  var formik = require('formik');
10
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
10
11
  var yup = require('yup');
11
12
  var neetoIcons = require('@bigbinary/neeto-icons');
12
13
  var formik$1 = require('@bigbinary/neetoui/formik');
@@ -18,7 +19,6 @@ var SubHeader = require('@bigbinary/neeto-molecules/SubHeader');
18
19
  var reactQuery = require('react-query');
19
20
  var axios = require('axios');
20
21
  var utils = require('@bigbinary/neeto-commons-frontend/utils');
21
- var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
22
22
  var reactRouterDom = require('react-router-dom');
23
23
  var TableWrapper = require('@bigbinary/neeto-molecules/TableWrapper');
24
24
  var reactDom = require('react-dom');
@@ -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,
@@ -5879,57 +5882,60 @@ var buildSchemaAllowingEmptyValue = function buildSchemaAllowingEmptyValue(schem
5879
5882
  name: "validate-if-not-empty",
5880
5883
  test: function test(value) {
5881
5884
  if (pure.isNotEmpty(value) && ramda.isNotNil(value)) {
5882
- try {
5883
- schema.validateSync(value);
5884
- return true;
5885
- } catch (_unused) {
5886
- return false;
5887
- }
5885
+ schema.validateSync(value);
5886
+ }
5887
+ return true;
5888
+ }
5889
+ });
5890
+ };
5891
+ var buildSchemaForRequiredInputs = function buildSchemaForRequiredInputs(schema) {
5892
+ return yup__namespace.mixed().test({
5893
+ name: "validate-required-inputs",
5894
+ test: function test(value) {
5895
+ if (ramda.isEmpty(value) || ramda.isNil(value)) {
5896
+ throw new yup__namespace.ValidationError(t$1("validations.thisIsRequired"));
5888
5897
  }
5898
+ schema.validateSync(value);
5889
5899
  return true;
5890
5900
  }
5891
5901
  });
5892
5902
  };
5893
- var buildFieldValidationSchema = function buildFieldValidationSchema(_ref) {
5894
- var kind = _ref.kind,
5895
- isRequired = _ref.isRequired,
5896
- fieldData = _ref.fieldData;
5903
+ var buildSchema = function buildSchema(_ref) {
5904
+ var schema = _ref.schema,
5905
+ isRequired = _ref.isRequired;
5906
+ return isRequired ? buildSchemaForRequiredInputs(schema) : buildSchemaAllowingEmptyValue(schema);
5907
+ };
5908
+ var getBasicValidationSchema = function getBasicValidationSchema(_ref2) {
5909
+ var kind = _ref2.kind,
5910
+ fieldData = _ref2.fieldData;
5897
5911
  switch (kind) {
5898
5912
  case KINDS.singleOption:
5899
5913
  case KINDS.text:
5900
5914
  {
5901
- var schema = yup__namespace.string().trim().nullable();
5902
- return isRequired ? schema.required(t$1("validations.thisIsRequired")) : schema;
5915
+ return yup__namespace.string().trim().nullable();
5903
5916
  }
5904
5917
  case KINDS.number:
5905
5918
  case KINDS.monetary:
5906
5919
  case KINDS.decimal:
5907
5920
  {
5908
- var _schema = buildSchemaAllowingEmptyValue(yup__namespace.number().typeError(t$1("validations.notAValidNumber")));
5909
- return isRequired ? _schema.required(t$1("validations.thisIsRequired")) : _schema;
5921
+ return yup__namespace.number(t$1("validations.notAValidNumber")).nullable();
5910
5922
  }
5911
5923
  case KINDS.integer:
5912
5924
  {
5913
- var _schema2 = buildSchemaAllowingEmptyValue(yup__namespace.number().nullable().integer().typeError(t$1("validations.notAValidInteger")));
5914
- return isRequired ? _schema2.required(t$1("validations.thisIsRequired")) : _schema2;
5925
+ return yup__namespace.number().nullable().integer(t$1("validations.notAValidInteger"));
5915
5926
  }
5916
5927
  case KINDS.date:
5917
5928
  case KINDS.time:
5918
5929
  {
5919
- var _schema3 = buildSchemaAllowingEmptyValue(dateSchema);
5920
- return isRequired ? _schema3.required(t$1("validations.thisIsRequired")) : _schema3;
5930
+ return dateSchema;
5921
5931
  }
5922
5932
  case KINDS.multiOption:
5923
5933
  {
5924
- var _schema4 = yup__namespace.array().of(yup__namespace.string()).nullable();
5925
- return isRequired ? _schema4.min(1, t$1("validations.minOneItem")).required(t$1("validations.thisIsRequired")) : _schema4;
5934
+ return yup__namespace.array().of(yup__namespace.string()).nullable();
5926
5935
  }
5927
5936
  case KINDS.dateRange:
5928
5937
  case KINDS.timeRange:
5929
5938
  {
5930
- if (isRequired) {
5931
- return yup__namespace.array().of(dateSchema).required(t$1("validations.thisIsRequired"));
5932
- }
5933
5939
  return yup__namespace.array().of(dateSchema).nullable();
5934
5940
  }
5935
5941
  case KINDS.checkbox:
@@ -5937,13 +5943,25 @@ var buildFieldValidationSchema = function buildFieldValidationSchema(_ref) {
5937
5943
  case KINDS.regex:
5938
5944
  {
5939
5945
  var regexPattern = fieldData === null || fieldData === void 0 ? void 0 : fieldData.condition;
5940
- var _schema5 = buildSchemaAllowingEmptyValue(yup__namespace.string().nullable().matches(cleanedRegex(regexPattern), fieldData === null || fieldData === void 0 ? void 0 : fieldData.helpMessage));
5941
- return isRequired ? _schema5.required(t$1("validations.thisIsRequired")) : _schema5;
5946
+ return yup__namespace.string().nullable().matches(cleanedRegex(regexPattern), fieldData === null || fieldData === void 0 ? void 0 : fieldData.helpMessage);
5942
5947
  }
5943
5948
  default:
5944
5949
  return yup__namespace.mixed();
5945
5950
  }
5946
5951
  };
5952
+ var buildFieldValidationSchema = function buildFieldValidationSchema(_ref3) {
5953
+ var kind = _ref3.kind,
5954
+ isRequired = _ref3.isRequired,
5955
+ fieldData = _ref3.fieldData;
5956
+ var schema = getBasicValidationSchema({
5957
+ kind: kind,
5958
+ fieldData: fieldData
5959
+ });
5960
+ return buildSchema({
5961
+ schema: schema,
5962
+ isRequired: isRequired
5963
+ });
5964
+ };
5947
5965
  var cleanedRegex = function cleanedRegex(expression) {
5948
5966
  if (expression.startsWith("/") && expression.endsWith("/")) {
5949
5967
  return expression.slice(1, -1);
@@ -5952,9 +5970,9 @@ var cleanedRegex = function cleanedRegex(expression) {
5952
5970
  };
5953
5971
  var buildOptionsToLabelAndValue = function buildOptionsToLabelAndValue() {
5954
5972
  var optionObjects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5955
- return optionObjects.map(function (_ref2) {
5956
- var label = _ref2.label,
5957
- value = _ref2.value;
5973
+ return optionObjects.map(function (_ref4) {
5974
+ var label = _ref4.label,
5975
+ value = _ref4.value;
5958
5976
  return {
5959
5977
  label: label,
5960
5978
  value: value || label
@@ -5965,12 +5983,12 @@ var buildArrayToLabelAndValues = function buildArrayToLabelAndValues(value) {
5965
5983
  return ramda.map(pure.toLabelAndValue, value || []);
5966
5984
  };
5967
5985
  var validateField = /*#__PURE__*/function () {
5968
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref3) {
5986
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref5) {
5969
5987
  var fieldValue, fieldName, isRequired, kind, fieldData;
5970
5988
  return _regeneratorRuntime.wrap(function _callee$(_context) {
5971
5989
  while (1) switch (_context.prev = _context.next) {
5972
5990
  case 0:
5973
- fieldValue = _ref3.fieldValue, fieldName = _ref3.fieldName, isRequired = _ref3.isRequired, kind = _ref3.kind, fieldData = _ref3.fieldData;
5991
+ fieldValue = _ref5.fieldValue, fieldName = _ref5.fieldName, isRequired = _ref5.isRequired, kind = _ref5.kind, fieldData = _ref5.fieldData;
5974
5992
  _context.prev = 1;
5975
5993
  _context.next = 4;
5976
5994
  return yup__namespace.object().shape(_defineProperty({}, fieldName, buildFieldValidationSchema({
@@ -5991,7 +6009,7 @@ var validateField = /*#__PURE__*/function () {
5991
6009
  }, _callee, null, [[1, 7]]);
5992
6010
  }));
5993
6011
  return function validateField(_x) {
5994
- return _ref4.apply(this, arguments);
6012
+ return _ref6.apply(this, arguments);
5995
6013
  };
5996
6014
  }();
5997
6015
  var dateTimeToString = function dateTimeToString(dateTime) {
@@ -6014,8 +6032,7 @@ var useFormikFields = function useFormikFields(_ref) {
6014
6032
  isRequiredColumnName = _ref$isRequiredColumn === void 0 ? "isRequired" : _ref$isRequiredColumn,
6015
6033
  props = _objectWithoutProperties(_ref, _excluded$3);
6016
6034
  var formikContext = formik.useFormikContext();
6017
- var setFieldValue = formikContext.setFieldValue,
6018
- submitForm = formikContext.submitForm,
6035
+ var submitForm = formikContext.submitForm,
6019
6036
  dirty = formikContext.dirty,
6020
6037
  isSubmitting = formikContext.isSubmitting;
6021
6038
  var fieldPath = escapeString("".concat(name, "-").concat(fieldId));
@@ -6042,9 +6059,10 @@ var useFormikFields = function useFormikFields(_ref) {
6042
6059
  formikFieldProps = _useField2[0],
6043
6060
  meta = _useField2[1],
6044
6061
  helpers = _useField2[2];
6062
+ var debouncedSubmitForm = reactUtils.useFuncDebounce(submitForm, 100);
6045
6063
  var handleSubmit = function handleSubmit(value) {
6046
- ramda.isNotNil(value) && setFieldValue(fieldValuePath, value);
6047
- individualSubmit && submitForm();
6064
+ ramda.isNotNil(value) && helpers.setValue(value);
6065
+ individualSubmit && debouncedSubmitForm();
6048
6066
  };
6049
6067
  var getValueForField = function getValueForField(value) {
6050
6068
  if (kind === KINDS.singleOption) {
@@ -6055,17 +6073,19 @@ var useFormikFields = function useFormikFields(_ref) {
6055
6073
  return value || "";
6056
6074
  };
6057
6075
  var isDropdown = ["single_option", "multi_option"].includes(kind);
6058
- if (isSubmitting && !meta.touched) {
6059
- helpers.setTouched(true);
6060
- }
6076
+ React.useEffect(function () {
6077
+ if (isSubmitting && !meta.touched) {
6078
+ helpers.setTouched(true);
6079
+ }
6080
+ }, [isSubmitting]);
6061
6081
  return {
6082
+ dirty: dirty,
6062
6083
  handleSubmit: handleSubmit,
6063
6084
  fieldProps: _objectSpread$a(_objectSpread$a({}, formikFieldProps), {}, {
6064
6085
  required: props[isRequiredColumnName],
6065
6086
  error: individualSubmit ? meta.error : meta.touched && meta.error,
6066
6087
  options: isDropdown ? buildOptionsToLabelAndValue(fieldData) : undefined,
6067
6088
  value: getValueForField(formikFieldProps.value),
6068
- dirty: dirty,
6069
6089
  label: !individualSubmit && pure.capitalize(name),
6070
6090
  disabled: disabled
6071
6091
  })
@@ -6131,8 +6151,9 @@ var MultiOption = function MultiOption(props) {
6131
6151
  var Number$1 = function Number(props) {
6132
6152
  var _useFormikFields = useFormikFields(props),
6133
6153
  handleSubmit = _useFormikFields.handleSubmit,
6134
- fieldProps = _useFormikFields.fieldProps;
6135
- var showSubmitButton = props.individualSubmit && fieldProps.dirty;
6154
+ fieldProps = _useFormikFields.fieldProps,
6155
+ dirty = _useFormikFields.dirty;
6156
+ var showSubmitButton = props.individualSubmit && dirty;
6136
6157
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Input, _extends({}, fieldProps, {
6137
6158
  type: "number",
6138
6159
  suffix: showSubmitButton && /*#__PURE__*/React__default["default"].createElement(formik$1.Button, {
@@ -6153,7 +6174,11 @@ var RangePicker = function RangePicker(props) {
6153
6174
  var _ref2 = _slicedToArray(_ref, 2),
6154
6175
  begin = _ref2[0],
6155
6176
  end = _ref2[1];
6156
- return handleSubmit([dateTimeToString(begin), dateTimeToString(end)]);
6177
+ if (begin && end) {
6178
+ handleSubmit([dateTimeToString(begin), dateTimeToString(end)]);
6179
+ } else {
6180
+ handleSubmit([]);
6181
+ }
6157
6182
  };
6158
6183
  if (props.kind === KINDS.dateRange) {
6159
6184
  return /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({}, fieldProps, {
@@ -6176,11 +6201,11 @@ var SingleOption = function SingleOption(props) {
6176
6201
  handleSubmit = _useFormikFields.handleSubmit,
6177
6202
  fieldProps = _useFormikFields.fieldProps;
6178
6203
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
6204
+ isClearable: true,
6179
6205
  isSearchable: true
6180
6206
  }, fieldProps, {
6181
- onChange: function onChange(_ref) {
6182
- var value = _ref.value;
6183
- return handleSubmit(value);
6207
+ onChange: function onChange(option) {
6208
+ return handleSubmit((option === null || option === void 0 ? void 0 : option.value) || "");
6184
6209
  }
6185
6210
  }));
6186
6211
  };
@@ -6188,8 +6213,9 @@ var SingleOption = function SingleOption(props) {
6188
6213
  var Text = function Text(props) {
6189
6214
  var _useFormikFields = useFormikFields(props),
6190
6215
  handleSubmit = _useFormikFields.handleSubmit,
6191
- fieldProps = _useFormikFields.fieldProps;
6192
- var showSubmitButton = props.individualSubmit && fieldProps.dirty;
6216
+ fieldProps = _useFormikFields.fieldProps,
6217
+ dirty = _useFormikFields.dirty;
6218
+ var showSubmitButton = props.individualSubmit && dirty;
6193
6219
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Input, _extends({}, fieldProps, {
6194
6220
  suffix: showSubmitButton && /*#__PURE__*/React__default["default"].createElement(formik$1.Button, {
6195
6221
  icon: neetoIcons.Check,
@@ -6206,8 +6232,9 @@ var TextArea = function TextArea(props) {
6206
6232
  t = _useTranslation.t;
6207
6233
  var _useFormikFields = useFormikFields(props),
6208
6234
  handleSubmit = _useFormikFields.handleSubmit,
6209
- fieldProps = _useFormikFields.fieldProps;
6210
- var showSubmitButton = props.individualSubmit && fieldProps.dirty;
6235
+ fieldProps = _useFormikFields.fieldProps,
6236
+ dirty = _useFormikFields.dirty;
6237
+ var showSubmitButton = props.individualSubmit && dirty;
6211
6238
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Textarea, fieldProps), showSubmitButton && /*#__PURE__*/React__default["default"].createElement(formik$1.Button, {
6212
6239
  className: "m-auto mt-2",
6213
6240
  label: t("labels.submit"),
@@ -6274,26 +6301,46 @@ var transformValues = function transformValues(_ref2) {
6274
6301
  fieldValuesAttributes: cleanedFieldValues
6275
6302
  });
6276
6303
  };
6277
- var getInitialFieldValue = function getInitialFieldValue(field) {
6278
- var fieldValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
6304
+ var getDefaultInitialValue = function getDefaultInitialValue(kind) {
6305
+ switch (kind) {
6306
+ case KINDS.checkbox:
6307
+ return false;
6308
+ case KINDS.multiOption:
6309
+ case KINDS.dateRange:
6310
+ case KINDS.timeRange:
6311
+ return [];
6312
+ default:
6313
+ return "";
6314
+ }
6315
+ };
6316
+ var getInitialFieldValue = function getInitialFieldValue(_ref4) {
6317
+ var field = _ref4.field,
6318
+ _ref4$fieldValues = _ref4.fieldValues,
6319
+ fieldValues = _ref4$fieldValues === void 0 ? [] : _ref4$fieldValues,
6320
+ _ref4$isIndividualFie = _ref4.isIndividualFieldForm,
6321
+ isIndividualFieldForm = _ref4$isIndividualFie === void 0 ? false : _ref4$isIndividualFie;
6279
6322
  var existingFieldValueData = pure.findBy({
6280
6323
  fieldId: field.id
6281
6324
  }, fieldValues);
6325
+ var keyInData = field.kind === KINDS.multiOption ? "values" : "value";
6282
6326
  var newFieldValueData = {
6283
6327
  fieldId: field.id,
6284
- data: null
6328
+ data: isIndividualFieldForm ? _defineProperty({}, keyInData, getDefaultInitialValue(field.kind)) : null
6285
6329
  };
6286
6330
  return _defineProperty({}, escapeString("".concat(field.name, "-").concat(field.id)), existingFieldValueData || newFieldValueData);
6287
6331
  };
6288
6332
  var getAllInitialFieldValues = function getAllInitialFieldValues(fields) {
6289
6333
  var fieldValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
6290
6334
  return getNonSystemFields(fields).map(function (field) {
6291
- return getInitialFieldValue(field, fieldValues);
6335
+ return getInitialFieldValue({
6336
+ field: field,
6337
+ fieldValues: fieldValues
6338
+ });
6292
6339
  });
6293
6340
  };
6294
- var mergeInitialValues = function mergeInitialValues(_ref5) {
6295
- var initialValues = _ref5.initialValues,
6296
- fields = _ref5.fields;
6341
+ var mergeInitialValues = function mergeInitialValues(_ref7) {
6342
+ var initialValues = _ref7.initialValues,
6343
+ fields = _ref7.fields;
6297
6344
  var initialValue = ramda.mergeAll([initialValues].concat(_toConsumableArray(getAllInitialFieldValues(fields, initialValues === null || initialValues === void 0 ? void 0 : initialValues.fieldValues))));
6298
6345
  return ramda.omit(["fieldValues"], initialValue);
6299
6346
  };
@@ -6358,6 +6405,21 @@ var SINGULAR = {
6358
6405
  var PLURAL = {
6359
6406
  count: 2
6360
6407
  };
6408
+ var INFO_ICON_SIZE = 16;
6409
+
6410
+ var TitleWithHelpLink = function TitleWithHelpLink(_ref) {
6411
+ var title = _ref.title,
6412
+ helpUrl = _ref.helpUrl;
6413
+ return /*#__PURE__*/React__default["default"].createElement("div", {
6414
+ className: "flex items-center gap-x-1"
6415
+ }, title, helpUrl && /*#__PURE__*/React__default["default"].createElement("a", {
6416
+ href: helpUrl,
6417
+ rel: "noreferrer",
6418
+ target: "_blank"
6419
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Info, {
6420
+ size: INFO_ICON_SIZE
6421
+ })));
6422
+ };
6361
6423
 
6362
6424
  var fieldUrl = function fieldUrl(fieldId) {
6363
6425
  return utils.buildUrl(FIELD_URL, {
@@ -6599,7 +6661,7 @@ var FIELD_KINDS = {
6599
6661
  single_option: {
6600
6662
  value: "single_option",
6601
6663
  label: t$1("fields.kinds.singleOption"),
6602
- group: 3
6664
+ group: 12
6603
6665
  },
6604
6666
  multi_option: {
6605
6667
  value: "multi_option",
@@ -6799,6 +6861,7 @@ var FieldForm = function FieldForm(_ref) {
6799
6861
  className: "w-full space-y-4"
6800
6862
  }, /*#__PURE__*/React__default["default"].createElement(formik$1.Input, {
6801
6863
  required: true,
6864
+ "data-cy": "name-text-field",
6802
6865
  disabled: isSystem,
6803
6866
  label: t("labels.fieldName"),
6804
6867
  name: "name",
@@ -6811,12 +6874,15 @@ var FieldForm = function FieldForm(_ref) {
6811
6874
  options: kindSelectOptions,
6812
6875
  onChange: handleKindChange
6813
6876
  }), isAdditionalDataNeeded(chosenKind) && /*#__PURE__*/React__default["default"].createElement(AdditionalInputs, null), !hideRequiredSwitch && /*#__PURE__*/React__default["default"].createElement(neetoui.Label, {
6814
- className: "flex items-center gap-2"
6877
+ className: "flex items-center gap-2",
6878
+ "data-cy": "is-required-switch-container"
6815
6879
  }, /*#__PURE__*/React__default["default"].createElement(formik$1.Switch, {
6880
+ "data-cy": "is-required-switch",
6816
6881
  name: "isRequired"
6817
6882
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6818
6883
  className: "leading-4",
6819
6884
  component: "span",
6885
+ "data-cy": "is-required-switch-label",
6820
6886
  style: "body2"
6821
6887
  }, t("labels.isRequired"))), children));
6822
6888
  };
@@ -6856,6 +6922,7 @@ var Add = function Add(_ref) {
6856
6922
  });
6857
6923
  };
6858
6924
  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, {
6925
+ "data-cy": "add-pane-header",
6859
6926
  style: "h2"
6860
6927
  }, t("titles.addField"))), /*#__PURE__*/React__default["default"].createElement(formik$1.Form, {
6861
6928
  formikProps: {
@@ -6928,6 +6995,7 @@ var Edit = function Edit(_ref) {
6928
6995
  });
6929
6996
  };
6930
6997
  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, {
6998
+ "data-cy": "edit-pane-header",
6931
6999
  style: "h2"
6932
7000
  }, t("titles.editField"))), isLoading ? /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null) : /*#__PURE__*/React__default["default"].createElement(formik$1.Form, {
6933
7001
  formikProps: {
@@ -6987,17 +7055,20 @@ var buildDefaultColumns = function buildDefaultColumns(_ref) {
6987
7055
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6988
7056
  style: "body2"
6989
7057
  }, name), /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
6990
- buttonProps: {
6991
- className: "flex-shrink-0"
6992
- },
6993
7058
  buttonStyle: "text",
6994
7059
  icon: neetoIcons.MenuHorizontal,
6995
- strategy: "fixed"
7060
+ strategy: "fixed",
7061
+ buttonProps: {
7062
+ className: "flex-shrink-0",
7063
+ "data-cy": "neeto-fields-options-dropdown"
7064
+ }
6996
7065
  }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
7066
+ "data-cy": "edit-menu-item-button",
6997
7067
  onClick: function onClick() {
6998
7068
  return onEditClick(field);
6999
7069
  }
7000
7070
  }, t$1("labels.edit")), !field.isSystem && /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
7071
+ "data-cy": "delete-menu-item-button",
7001
7072
  onClick: function onClick() {
7002
7073
  return onDeleteClick(field);
7003
7074
  }
@@ -7024,14 +7095,18 @@ var renderMenuBarItems = function renderMenuBarItems(_ref2) {
7024
7095
  isOwnerBased = _ref2.isOwnerBased,
7025
7096
  selectedMenu = _ref2.selectedMenu,
7026
7097
  handleBlockClick = _ref2.handleBlockClick,
7027
- nameAliases = _ref2.nameAliases;
7098
+ nameAliases = _ref2.nameAliases,
7099
+ title = _ref2.title;
7100
+ title = title.toLocaleLowerCase();
7028
7101
  if (isOwnerBased) {
7029
7102
  return items.map(function (item) {
7030
7103
  return /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Item, {
7031
7104
  active: selectedMenu === item.id,
7105
+ "data-cy": "menubar-".concat(pure.slugify(item.name), "-menu-item"),
7032
7106
  key: item.id,
7033
7107
  label: pure.humanize(item.name),
7034
- description: t$1("messages.manageFieldFor", {
7108
+ description: t$1("messages.manageTitleForResource", {
7109
+ title: title,
7035
7110
  resource: pure.humanize(item.name).toLocaleLowerCase()
7036
7111
  }),
7037
7112
  onClick: handleBlockClick({
@@ -7041,11 +7116,14 @@ var renderMenuBarItems = function renderMenuBarItems(_ref2) {
7041
7116
  });
7042
7117
  }
7043
7118
  return items.length > 1 && items.map(function (item) {
7119
+ var label = nameAliases[item] || pure.humanize(item);
7044
7120
  return /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Item, {
7045
7121
  active: selectedMenu === item,
7122
+ "data-cy": "neeto-fields-".concat(pure.slugify(label), "-menu-item"),
7046
7123
  key: item,
7047
- label: nameAliases[item] || pure.humanize(item),
7048
- description: t$1("messages.manageFieldFor", {
7124
+ label: label,
7125
+ description: t$1("messages.manageTitleForResource", {
7126
+ title: title,
7049
7127
  resource: pure.humanize(item).toLocaleLowerCase()
7050
7128
  }),
7051
7129
  onClick: handleBlockClick({
@@ -7061,12 +7139,14 @@ var renderMenuBarFilters = function renderMenuBarFilters(_ref3) {
7061
7139
  inactiveFieldsCount = _ref3.inactiveFieldsCount,
7062
7140
  handleBlockClick = _ref3.handleBlockClick;
7063
7141
  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, {
7142
+ "data-cy": "menubar-subtitle",
7064
7143
  style: "h5",
7065
7144
  textTransform: "uppercase",
7066
7145
  weight: "bold"
7067
7146
  }, t$1("titles.filters"))), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
7068
7147
  active: selectedState === FIELD_STATES.active,
7069
7148
  count: activeFieldsCount,
7149
+ "data-cy": "menubar-active-block",
7070
7150
  label: fieldStatesTaxonomy.active,
7071
7151
  onClick: handleBlockClick({
7072
7152
  state: FIELD_STATES.active
@@ -7074,6 +7154,7 @@ var renderMenuBarFilters = function renderMenuBarFilters(_ref3) {
7074
7154
  }), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
7075
7155
  active: selectedState === FIELD_STATES.inactive,
7076
7156
  count: inactiveFieldsCount,
7157
+ "data-cy": "menubar-inactive-block",
7077
7158
  label: fieldStatesTaxonomy.inactive,
7078
7159
  onClick: handleBlockClick({
7079
7160
  state: FIELD_STATES.inactive
@@ -7085,19 +7166,41 @@ var getDashBoardTitle = function getDashBoardTitle(_ref4) {
7085
7166
  var isOwnerBased = _ref4.isOwnerBased,
7086
7167
  owners = _ref4.owners,
7087
7168
  selectedVal = _ref4.selectedVal,
7088
- nameAliases = _ref4.nameAliases;
7089
- return t$1("messages.manageFieldFor", {
7090
- resource: isOwnerBased ? (_findBy = pure.findBy({
7091
- id: selectedVal
7092
- }, owners)) === null || _findBy === void 0 ? void 0 : _findBy.name : nameAliases[selectedVal] || selectedVal
7093
- });
7169
+ nameAliases = _ref4.nameAliases,
7170
+ isSingleResource = _ref4.isSingleResource,
7171
+ showStateFilter = _ref4.showStateFilter,
7172
+ selectedState = _ref4.selectedState,
7173
+ title = _ref4.title;
7174
+ var resource = isOwnerBased ? (_findBy = pure.findBy({
7175
+ id: selectedVal
7176
+ }, owners)) === null || _findBy === void 0 ? void 0 : _findBy.name : nameAliases[selectedVal] || selectedVal;
7177
+ var displayTitle = title;
7178
+ if (showStateFilter && !isSingleResource) {
7179
+ displayTitle = t$1("messages.stateTitleForResource", {
7180
+ state: selectedState,
7181
+ title: title,
7182
+ resource: resource
7183
+ });
7184
+ } else if (showStateFilter && isSingleResource) {
7185
+ displayTitle = "".concat(selectedState, " ").concat(title);
7186
+ } else if (!showStateFilter && !isSingleResource) {
7187
+ displayTitle = t$1("messages.titleForResource", {
7188
+ title: title,
7189
+ resource: resource
7190
+ });
7191
+ }
7192
+ return pure.humanize(displayTitle);
7094
7193
  };
7095
- var renderNoDataHelpText = function renderNoDataHelpText(url) {
7194
+ var renderNoDataHelpText = function renderNoDataHelpText(title, url) {
7096
7195
  return /*#__PURE__*/React__default["default"].createElement(Trans, {
7097
7196
  i18nKey: "helpTexts.noData",
7197
+ values: {
7198
+ title: title
7199
+ },
7098
7200
  components: {
7099
7201
  a: /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Link, {
7100
7202
  className: "neeto-ui-text-primary-600 underline",
7203
+ "data-cy": "no-data-help-text-link",
7101
7204
  target: "_blank",
7102
7205
  to: {
7103
7206
  pathname: url
@@ -7126,9 +7229,12 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
7126
7229
  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; }
7127
7230
  var useFieldsDashboard = function useFieldsDashboard(_ref) {
7128
7231
  var buildColumnData = _ref.buildColumnData,
7129
- showOwnersInMenu = _ref.showOwnersInMenu,
7232
+ isOwnerBased = _ref.isOwnerBased,
7130
7233
  fieldStatesTaxonomy = _ref.fieldStatesTaxonomy,
7131
- nameAliases = _ref.nameAliases;
7234
+ nameAliases = _ref.nameAliases,
7235
+ title = _ref.title,
7236
+ resources = _ref.resources,
7237
+ showStateFilter = _ref.showStateFilter;
7132
7238
  var _useState = React.useState(false),
7133
7239
  _useState2 = _slicedToArray(_useState, 2),
7134
7240
  isPaneOpen = _useState2[0],
@@ -7153,15 +7259,17 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7153
7259
  _useState12 = _slicedToArray(_useState11, 2),
7154
7260
  searchTerm = _useState12[0],
7155
7261
  setSearchTerm = _useState12[1];
7156
- var _getQueryParams = utils.getQueryParams(),
7157
- resource = _getQueryParams.resource,
7158
- state = _getQueryParams.state;
7159
- var ownerId = showOwnersInMenu ? resource : undefined;
7160
7262
  var debouncedSearchTerm = reactUtils.useDebounce(searchTerm.trim());
7161
7263
  var history = reactRouterDom.useHistory();
7162
7264
  var _useTranslation = useTranslation(),
7163
7265
  t = _useTranslation.t;
7164
- var _useFetchConfigs = useFetchConfigs(),
7266
+ var _getQueryParams = utils.getQueryParams(),
7267
+ resource = _getQueryParams.resource,
7268
+ state = _getQueryParams.state;
7269
+ var ownerId = isOwnerBased ? resource : undefined;
7270
+ var _useFetchConfigs = useFetchConfigs({
7271
+ enabled: !resources
7272
+ }),
7165
7273
  _useFetchConfigs$data = _useFetchConfigs.data,
7166
7274
  _useFetchConfigs$data2 = _useFetchConfigs$data === void 0 ? {} : _useFetchConfigs$data,
7167
7275
  _useFetchConfigs$data3 = _useFetchConfigs$data2.owners,
@@ -7170,7 +7278,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7170
7278
  resourceTypes = _useFetchConfigs$data4 === void 0 ? [] : _useFetchConfigs$data4,
7171
7279
  isConfigsLoading = _useFetchConfigs.isLoading;
7172
7280
  var fieldParams = {
7173
- resourceType: !showOwnersInMenu ? resource : undefined,
7281
+ resourceType: !isOwnerBased ? resource : undefined,
7174
7282
  ownerId: ownerId,
7175
7283
  state: state || FIELD_STATES.active,
7176
7284
  searchTerm: debouncedSearchTerm
@@ -7246,14 +7354,15 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7246
7354
  state: state
7247
7355
  }, params)));
7248
7356
  };
7357
+ var menuItems = resources || (isOwnerBased ? owners : resourceTypes);
7249
7358
  var handleURLWithDefaultValues = function handleURLWithDefaultValues() {
7250
7359
  var queryParams = {
7251
7360
  resource: resource,
7252
7361
  state: state
7253
7362
  };
7254
7363
  if (!isConfigsLoading && ramda.isNil(resource)) {
7255
- var _owners$;
7256
- queryParams.resource = showOwnersInMenu ? (_owners$ = owners[0]) === null || _owners$ === void 0 ? void 0 : _owners$.id : resourceTypes[0];
7364
+ var _menuItems$;
7365
+ 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];
7257
7366
  }
7258
7367
  if (!isConfigsLoading && ramda.isNil(state)) {
7259
7368
  queryParams.state = FIELD_STATES.active;
@@ -7262,7 +7371,6 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7262
7371
  history.replace(utils.buildUrl("", queryParams));
7263
7372
  }
7264
7373
  };
7265
- var menuItems = showOwnersInMenu ? owners : resourceTypes;
7266
7374
  var isScreenLoading = isFieldsLoading || isConfigsLoading;
7267
7375
  var showCountSubheader = count > 0;
7268
7376
  var searchProps = {
@@ -7272,6 +7380,20 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7272
7380
  value: searchTerm,
7273
7381
  placeholder: t("placeholders.searchFields")
7274
7382
  };
7383
+ var isSingleResource = menuItems.length === 1;
7384
+ var isMenuBarNeeded = showStateFilter || !isSingleResource;
7385
+ var headerDisplayTitle = React.useMemo(function () {
7386
+ return getDashBoardTitle({
7387
+ isOwnerBased: isOwnerBased,
7388
+ owners: menuItems,
7389
+ selectedVal: resource,
7390
+ nameAliases: nameAliases,
7391
+ showStateFilter: showStateFilter,
7392
+ selectedState: state,
7393
+ isSingleResource: isSingleResource,
7394
+ title: title
7395
+ });
7396
+ }, [resource, state, isSingleResource, menuItems]);
7275
7397
  var menuBarFilters = React.useMemo(function () {
7276
7398
  return renderMenuBarFilters({
7277
7399
  selectedState: state,
@@ -7280,19 +7402,20 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7280
7402
  inactiveFieldsCount: inactiveFieldsCount,
7281
7403
  handleBlockClick: handleBlockClick
7282
7404
  });
7283
- }, [activeFieldsCount, inactiveFieldsCount, state]);
7405
+ }, [activeFieldsCount, inactiveFieldsCount]);
7284
7406
  var menuBarItems = React.useMemo(function () {
7285
7407
  return renderMenuBarItems({
7286
- isOwnerBased: showOwnersInMenu,
7408
+ isOwnerBased: isOwnerBased,
7287
7409
  items: menuItems,
7288
7410
  selectedMenu: resource,
7289
7411
  handleBlockClick: handleBlockClick,
7290
- nameAliases: nameAliases
7412
+ nameAliases: nameAliases,
7413
+ title: title
7291
7414
  });
7292
7415
  }, [menuItems, resource]);
7293
7416
  React.useEffect(function () {
7294
7417
  handleURLWithDefaultValues();
7295
- }, [isConfigsLoading]);
7418
+ }, [isConfigsLoading, resources]);
7296
7419
  return {
7297
7420
  isPaneOpen: isPaneOpen,
7298
7421
  setIsPaneOpen: setIsPaneOpen,
@@ -7302,9 +7425,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7302
7425
  isReorderPaneOpen: isReorderPaneOpen,
7303
7426
  setIsReorderPaneOpen: setIsReorderPaneOpen,
7304
7427
  fields: fields,
7305
- owners: owners,
7306
7428
  count: count,
7307
- menuItems: menuItems,
7308
7429
  columnData: columnData,
7309
7430
  selectedField: selectedField,
7310
7431
  selectedState: state,
@@ -7315,6 +7436,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7315
7436
  isDeleting: isDeleting,
7316
7437
  isScreenLoading: isScreenLoading,
7317
7438
  isConfigsLoading: isConfigsLoading,
7439
+ isMenuBarNeeded: isMenuBarNeeded,
7318
7440
  showCountSubheader: showCountSubheader,
7319
7441
  handleDelete: handleDelete,
7320
7442
  handleAlertClose: handleAlertClose,
@@ -7323,7 +7445,8 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7323
7445
  searchProps: searchProps,
7324
7446
  menuBarFilters: menuBarFilters,
7325
7447
  menuBarItems: menuBarItems,
7326
- allFields: allFields
7448
+ allFields: allFields,
7449
+ headerDisplayTitle: headerDisplayTitle
7327
7450
  };
7328
7451
  };
7329
7452
 
@@ -7333,16 +7456,20 @@ var FieldsTable = function FieldsTable(_ref) {
7333
7456
  rowData = _ref.rowData,
7334
7457
  columnData = _ref.columnData,
7335
7458
  setIsPaneOpen = _ref.setIsPaneOpen,
7336
- helpDocUrl = _ref.helpDocUrl;
7459
+ helpDocUrl = _ref.helpDocUrl,
7460
+ title = _ref.title;
7337
7461
  var _useTranslation = useTranslation(),
7338
7462
  t = _useTranslation.t;
7339
7463
  var showNoDataScreen = !isLoading && ramda.isEmpty(rowData);
7464
+ title = title.toLocaleLowerCase();
7340
7465
  return /*#__PURE__*/React__default["default"].createElement(TableWrapper__default["default"], null, showNoDataScreen ? /*#__PURE__*/React__default["default"].createElement("div", {
7341
7466
  className: "flex h-full w-full items-center justify-center"
7342
7467
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.NoData, _extends({}, helpDocUrl && {
7343
- helpText: renderNoDataHelpText(helpDocUrl)
7468
+ helpText: renderNoDataHelpText(title, helpDocUrl)
7344
7469
  }, {
7345
- title: t("messages.noFields"),
7470
+ title: t("messages.noFields", {
7471
+ title: title
7472
+ }),
7346
7473
  primaryButtonProps: {
7347
7474
  label: t("labels.addField"),
7348
7475
  onClick: function onClick() {
@@ -11617,12 +11744,15 @@ var FieldBlock = function FieldBlock(_ref) {
11617
11744
  ref: setNodeRef,
11618
11745
  style: style
11619
11746
  }, attributes, listeners, {
11620
- className: "neeto-ui-text-gray-800 mb-3 flex items-center space-x-4 font-medium"
11747
+ className: "neeto-ui-text-gray-800 mb-3 flex items-center space-x-4 font-medium",
11748
+ "data-cy": "reorder-field-block"
11621
11749
  }), /*#__PURE__*/React__default["default"].createElement("div", {
11622
11750
  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"
11623
11751
  }, index - systemFieldsCount + 1), /*#__PURE__*/React__default["default"].createElement("div", {
11624
11752
  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"
11625
- }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Reorder, null), /*#__PURE__*/React__default["default"].createElement("div", null, field.name)));
11753
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Reorder, null), /*#__PURE__*/React__default["default"].createElement("div", {
11754
+ "data-cy": "reorder-field-block-name"
11755
+ }, field.name)));
11626
11756
  };
11627
11757
  var FieldBlock$1 = /*#__PURE__*/React__default["default"].memo(FieldBlock);
11628
11758
 
@@ -11673,10 +11803,12 @@ var ReorderPane = function ReorderPane(_ref) {
11673
11803
  isOpen: isOpen,
11674
11804
  onClose: onClose
11675
11805
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
11806
+ "data-cy": "reorder-pane-header",
11676
11807
  style: "h2",
11677
11808
  weight: "semibold"
11678
11809
  }, t("titles.reorderFields"))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
11679
11810
  className: "mb-3",
11811
+ "data-cy": "reorder-pane-message",
11680
11812
  style: "body2"
11681
11813
  }, t("messages.reorderFields")), /*#__PURE__*/React__default["default"].createElement("div", {
11682
11814
  className: "flex flex-col items-center"
@@ -11697,11 +11829,13 @@ var ReorderPane = function ReorderPane(_ref) {
11697
11829
  }))))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Footer, {
11698
11830
  className: "flex items-center space-x-2"
11699
11831
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11832
+ "data-cy": "save-changes-button",
11700
11833
  disabled: initialStateRef.current === fields,
11701
11834
  label: t("labels.saveChanges"),
11702
11835
  loading: isSubmitting,
11703
11836
  onClick: handleReorderSave
11704
11837
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11838
+ "data-cy": "cancel-button",
11705
11839
  label: t("labels.cancel"),
11706
11840
  style: "text",
11707
11841
  onClick: onClose
@@ -11714,7 +11848,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11714
11848
  var _ref$rowData = _ref.rowData,
11715
11849
  rowData = _ref$rowData === void 0 ? [] : _ref$rowData,
11716
11850
  _ref$showOwnersInMenu = _ref.showOwnersInMenu,
11717
- showOwnersInMenu = _ref$showOwnersInMenu === void 0 ? false : _ref$showOwnersInMenu,
11851
+ isOwnerBased = _ref$showOwnersInMenu === void 0 ? false : _ref$showOwnersInMenu,
11718
11852
  _ref$resourceType = _ref.resourceType,
11719
11853
  resourceType = _ref$resourceType === void 0 ? "" : _ref$resourceType,
11720
11854
  _ref$allowedKinds = _ref.allowedKinds,
@@ -11734,14 +11868,20 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11734
11868
  fieldStatesTaxonomy = _ref$fieldStatesTaxon === void 0 ? DEFAULT_FIELD_STATE_TAXONOMY : _ref$fieldStatesTaxon,
11735
11869
  helpDocUrl = _ref.helpDocUrl,
11736
11870
  _ref$nameAliases = _ref.nameAliases,
11737
- nameAliases = _ref$nameAliases === void 0 ? {} : _ref$nameAliases;
11871
+ nameAliases = _ref$nameAliases === void 0 ? {} : _ref$nameAliases,
11872
+ headerTitle = _ref.headerTitle,
11873
+ resources = _ref.resources;
11738
11874
  var _useTranslation = useTranslation(),
11739
11875
  t = _useTranslation.t;
11876
+ var title = pure.capitalize(headerTitle || t("titles.field", PLURAL));
11740
11877
  var _useFieldsDashboard = useFieldsDashboard({
11741
11878
  buildColumnData: buildColumnData,
11742
- showOwnersInMenu: showOwnersInMenu,
11879
+ isOwnerBased: isOwnerBased,
11743
11880
  fieldStatesTaxonomy: fieldStatesTaxonomy,
11744
- nameAliases: nameAliases
11881
+ nameAliases: nameAliases,
11882
+ title: title,
11883
+ resources: resources,
11884
+ showStateFilter: showStateFilter
11745
11885
  }),
11746
11886
  isPaneOpen = _useFieldsDashboard.isPaneOpen,
11747
11887
  setIsPaneOpen = _useFieldsDashboard.setIsPaneOpen,
@@ -11751,9 +11891,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11751
11891
  isReorderPaneOpen = _useFieldsDashboard.isReorderPaneOpen,
11752
11892
  setIsReorderPaneOpen = _useFieldsDashboard.setIsReorderPaneOpen,
11753
11893
  fields = _useFieldsDashboard.fields,
11754
- owners = _useFieldsDashboard.owners,
11755
11894
  count = _useFieldsDashboard.count,
11756
- menuItems = _useFieldsDashboard.menuItems,
11757
11895
  columnData = _useFieldsDashboard.columnData,
11758
11896
  selectedField = _useFieldsDashboard.selectedField,
11759
11897
  selectedState = _useFieldsDashboard.selectedState,
@@ -11763,6 +11901,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11763
11901
  isDeleting = _useFieldsDashboard.isDeleting,
11764
11902
  isScreenLoading = _useFieldsDashboard.isScreenLoading,
11765
11903
  isConfigsLoading = _useFieldsDashboard.isConfigsLoading,
11904
+ isMenuBarNeeded = _useFieldsDashboard.isMenuBarNeeded,
11766
11905
  showCountSubheader = _useFieldsDashboard.showCountSubheader,
11767
11906
  handleDelete = _useFieldsDashboard.handleDelete,
11768
11907
  handleAlertClose = _useFieldsDashboard.handleAlertClose,
@@ -11771,11 +11910,11 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11771
11910
  searchProps = _useFieldsDashboard.searchProps,
11772
11911
  menuBarFilters = _useFieldsDashboard.menuBarFilters,
11773
11912
  menuBarItems = _useFieldsDashboard.menuBarItems,
11774
- allFields = _useFieldsDashboard.allFields;
11775
- var isMenuBarNeeded = showStateFilter || menuItems.length > 1;
11913
+ allFields = _useFieldsDashboard.allFields,
11914
+ headerDisplayTitle = _useFieldsDashboard.headerDisplayTitle;
11776
11915
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, isMenuBarNeeded && /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"], {
11777
11916
  showMenu: isMenuBarOpen,
11778
- title: t("titles.field", PLURAL)
11917
+ title: title
11779
11918
  }, isConfigsLoading ? /*#__PURE__*/React__default["default"].createElement("div", {
11780
11919
  className: "flex items-center justify-center"
11781
11920
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null)) : menuBarItems, showStateFilter && menuBarFilters), isScreenLoading && ramda.isEmpty(fields) ? /*#__PURE__*/React__default["default"].createElement("div", {
@@ -11788,6 +11927,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11788
11927
  }
11789
11928
  }, {
11790
11929
  actionBlock: /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11930
+ "data-cy": "neeto-fields-reorder-button",
11791
11931
  label: t("labels.reorder"),
11792
11932
  style: "secondary",
11793
11933
  disabled: selectedState === FIELD_STATES.inactive || !pure.existsBy({
@@ -11798,45 +11938,46 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11798
11938
  return setIsReorderPaneOpen(true);
11799
11939
  }
11800
11940
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
11941
+ "data-cy": "neeto-fields-add-button",
11801
11942
  label: t("labels.addField"),
11802
11943
  onClick: function onClick() {
11803
11944
  return setIsPaneOpen(true);
11804
11945
  }
11805
11946
  })),
11806
11947
  searchProps: searchProps,
11807
- title: pure.humanize(getDashBoardTitle({
11808
- isOwnerBased: showOwnersInMenu,
11809
- owners: owners,
11810
- selectedVal: selectedMenu,
11811
- nameAliases: nameAliases
11812
- }))
11948
+ title: /*#__PURE__*/React__default["default"].createElement(TitleWithHelpLink, {
11949
+ helpUrl: helpDocUrl,
11950
+ title: headerDisplayTitle
11951
+ })
11813
11952
  })), showCountSubheader && /*#__PURE__*/React__default["default"].createElement(SubHeader__default["default"], {
11814
11953
  leftActionBlock: /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
11815
11954
  className: "mr-4 font-semibold",
11955
+ "data-cy": "neeto-fields-subheader-text",
11816
11956
  style: "h4"
11817
- }, count, " ", selectedState, " ", t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11957
+ }, "".concat(count, " "), t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11818
11958
  }), /*#__PURE__*/React__default["default"].createElement(FieldsTable, {
11819
11959
  columnData: columnData,
11820
11960
  helpDocUrl: helpDocUrl,
11821
11961
  isLoading: isFieldsFetching || isFieldsLoading,
11822
11962
  rowData: ramda.isEmpty(rowData) ? fields : rowData,
11823
11963
  setIsPaneOpen: setIsPaneOpen,
11824
- totalCount: count
11964
+ totalCount: count,
11965
+ title: title
11825
11966
  }), /*#__PURE__*/React__default["default"].createElement(FieldsPane, {
11826
11967
  additionalValidations: paneProps === null || paneProps === void 0 ? void 0 : paneProps.validations,
11827
11968
  allowedKinds: allowedKinds,
11828
11969
  hideRequiredSwitch: paneProps === null || paneProps === void 0 ? void 0 : paneProps.hideRequiredSwitch,
11829
11970
  initialValues: paneProps === null || paneProps === void 0 ? void 0 : paneProps.initialValues,
11830
11971
  isOpen: isPaneOpen,
11831
- ownerId: showOwnersInMenu ? selectedMenu : "",
11832
- resourceType: showOwnersInMenu ? resourceType : selectedMenu //Currently we support only one resource type when fields are classified based on owners
11972
+ ownerId: isOwnerBased ? selectedMenu : "",
11973
+ resourceType: isOwnerBased ? resourceType : selectedMenu //Currently we support only one resource type when fields are classified based on owners
11833
11974
  ,
11834
11975
  selectedField: selectedField,
11835
11976
  onClose: handleClosePane,
11836
11977
  onMutationSuccess: paneProps === null || paneProps === void 0 ? void 0 : paneProps.onMutationSuccess
11837
11978
  }, paneProps === null || paneProps === void 0 ? void 0 : paneProps.children)), /*#__PURE__*/React__default["default"].createElement(ReorderPane, {
11838
11979
  isOpen: isReorderPaneOpen,
11839
- ownerId: showOwnersInMenu ? selectedMenu : "",
11980
+ ownerId: isOwnerBased ? selectedMenu : "",
11840
11981
  onClose: handleReorderPaneClose,
11841
11982
  allFields: allFields
11842
11983
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Alert, {
@@ -11929,7 +12070,11 @@ var FieldValueInputWrapper = function FieldValueInputWrapper(_ref) {
11929
12070
  scrollToErrorField: true,
11930
12071
  className: classnames__default["default"]("flex w-full", className),
11931
12072
  formikProps: {
11932
- initialValues: getInitialFieldValue(field, fieldValues),
12073
+ initialValues: getInitialFieldValue({
12074
+ field: field,
12075
+ fieldValues: fieldValues,
12076
+ isIndividualFieldForm: true
12077
+ }),
11933
12078
  onSubmit: onSubmit,
11934
12079
  enableReinitialize: true
11935
12080
  }