@bigbinary/neeto-fields-frontend 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import React, { useContext, useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback, createContext, memo, useReducer } from 'react';
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
3
  import { toLabelAndValue, isNotEmpty, capitalize as capitalize$1, filterBy, findBy, 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';
@@ -14,7 +14,7 @@ import SubHeader from '@bigbinary/neeto-molecules/SubHeader';
14
14
  import { useQuery, useQueryClient, useMutation } from 'react-query';
15
15
  import axios from 'axios';
16
16
  import { buildUrl, getQueryParams } from '@bigbinary/neeto-commons-frontend/utils';
17
- import { handleMetaClick } from '@bigbinary/neeto-commons-frontend/react-utils';
17
+ import { useDebounce, handleMetaClick } from '@bigbinary/neeto-commons-frontend/react-utils';
18
18
  import { Link, useHistory } from 'react-router-dom';
19
19
  import TableWrapper from '@bigbinary/neeto-molecules/TableWrapper';
20
20
  import { unstable_batchedUpdates, createPortal } from 'react-dom';
@@ -5251,8 +5251,8 @@ var titles = {
5251
5251
  addField: "Add new field",
5252
5252
  editField: "Edit field",
5253
5253
  deleteField: "Delete field ?",
5254
- name: "Name",
5255
- kind: "Kind",
5254
+ fieldName: "Field name",
5255
+ fieldKind: "Field type",
5256
5256
  required: "Required",
5257
5257
  dropdownOptions: "Dropdown options",
5258
5258
  regexOptions: "Regex options",
@@ -5264,7 +5264,7 @@ var labels = {
5264
5264
  edit: "Edit",
5265
5265
  "delete": "Delete",
5266
5266
  fieldName: "Field name",
5267
- fieldKind: "Field kind",
5267
+ fieldKind: "Field type",
5268
5268
  createField: "Create field",
5269
5269
  updateField: "Update field",
5270
5270
  addMoreOption: "Add more option",
@@ -5281,7 +5281,8 @@ var placeholders = {
5281
5281
  enterFieldName: "Enter field name",
5282
5282
  enterAnOption: "Enter an option",
5283
5283
  regexExample: "Example: /^[0-9]{5}$/",
5284
- enterErrorMessage: "Message to show on error"
5284
+ enterErrorMessage: "Message to show on error",
5285
+ searchFields: "Search fields"
5285
5286
  };
5286
5287
  var fields = {
5287
5288
  kinds: {
@@ -5947,7 +5948,7 @@ var validateField = /*#__PURE__*/function () {
5947
5948
  case 7:
5948
5949
  _context.prev = 7;
5949
5950
  _context.t0 = _context["catch"](1);
5950
- return _context.abrupt("return", _context.t0.errors);
5951
+ return _context.abrupt("return", _context.t0.errors[0]);
5951
5952
  case 10:
5952
5953
  case "end":
5953
5954
  return _context.stop();
@@ -6026,7 +6027,7 @@ var useFormikFields = function useFormikFields(_ref) {
6026
6027
  handleSubmit: handleSubmit,
6027
6028
  fieldProps: _objectSpread$a(_objectSpread$a({}, formikFieldProps), {}, {
6028
6029
  required: props[isRequiredColumnName],
6029
- error: meta.touched && meta.error,
6030
+ error: individualSubmit ? meta.error : meta.touched && meta.error,
6030
6031
  options: isDropdown ? buildOptionsToLabelAndValue(fieldData) : undefined,
6031
6032
  value: getValueForField(formikFieldProps.value),
6032
6033
  dirty: dirty,
@@ -6331,12 +6332,14 @@ var fieldUrl = function fieldUrl(fieldId) {
6331
6332
  var fetch$1 = function fetch(_ref) {
6332
6333
  var resourceType = _ref.resourceType,
6333
6334
  ownerId = _ref.ownerId,
6334
- state = _ref.state;
6335
+ state = _ref.state,
6336
+ searchTerm = _ref.searchTerm;
6335
6337
  return axios.get(FIELDS_URL, {
6336
6338
  params: {
6337
6339
  resourceType: resourceType,
6338
6340
  ownerId: ownerId,
6339
- state: state
6341
+ state: state,
6342
+ searchTerm: searchTerm
6340
6343
  }
6341
6344
  });
6342
6345
  };
@@ -6393,12 +6396,14 @@ var useFetchFields = function useFetchFields(_ref, options) {
6393
6396
  ownerId = _ref.ownerId,
6394
6397
  state = _ref.state,
6395
6398
  _ref$prefixQueryKeys = _ref.prefixQueryKeys,
6396
- prefixQueryKeys = _ref$prefixQueryKeys === void 0 ? [] : _ref$prefixQueryKeys;
6397
- return useQuery([FIELDS].concat(_toConsumableArray(prefixQueryKeys), [resourceType, ownerId, state]), function () {
6399
+ prefixQueryKeys = _ref$prefixQueryKeys === void 0 ? [] : _ref$prefixQueryKeys,
6400
+ searchTerm = _ref.searchTerm;
6401
+ return useQuery([FIELDS].concat(_toConsumableArray(prefixQueryKeys), [resourceType, ownerId, state, searchTerm]), function () {
6398
6402
  return fieldsApi.fetch({
6399
6403
  resourceType: resourceType,
6400
6404
  ownerId: ownerId,
6401
- state: state
6405
+ state: state,
6406
+ searchTerm: searchTerm
6402
6407
  });
6403
6408
  }, _objectSpread$7({
6404
6409
  staleTime: DEFAULT_STALE_TIME
@@ -6639,7 +6644,7 @@ var DEFAULT_OPTION = {
6639
6644
  };
6640
6645
  var DEFAULT_OPTIONS_DATA = [DEFAULT_OPTION];
6641
6646
  var DEFAULT_REGEX_DATA = {
6642
- regex: "",
6647
+ condition: "",
6643
6648
  helpMessage: ""
6644
6649
  };
6645
6650
  var BASIC_FIELD_FORM_VALIDATIONS = {
@@ -6939,7 +6944,7 @@ var buildDefaultColumns = function buildDefaultColumns(_ref) {
6939
6944
  return [{
6940
6945
  key: "name",
6941
6946
  dataIndex: "name",
6942
- title: t$1("titles.name"),
6947
+ title: t$1("titles.fieldName"),
6943
6948
  render: function render(name, field) {
6944
6949
  return /*#__PURE__*/React.createElement("div", {
6945
6950
  className: "flex items-center justify-between gap-x-3"
@@ -6965,7 +6970,7 @@ var buildDefaultColumns = function buildDefaultColumns(_ref) {
6965
6970
  }, {
6966
6971
  key: "kind",
6967
6972
  dataIndex: "kind",
6968
- title: t$1("titles.kind"),
6973
+ title: t$1("titles.fieldKind"),
6969
6974
  render: function render(kind) {
6970
6975
  return DISPLAY_KINDS[kind];
6971
6976
  }
@@ -7085,7 +7090,9 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
7085
7090
  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; }
7086
7091
  var useFieldsDashboard = function useFieldsDashboard(_ref) {
7087
7092
  var buildColumnData = _ref.buildColumnData,
7088
- showOwnersInMenu = _ref.showOwnersInMenu;
7093
+ showOwnersInMenu = _ref.showOwnersInMenu,
7094
+ fieldStatesTaxonomy = _ref.fieldStatesTaxonomy,
7095
+ nameAliases = _ref.nameAliases;
7089
7096
  var _useState = useState(false),
7090
7097
  _useState2 = _slicedToArray(_useState, 2),
7091
7098
  isPaneOpen = _useState2[0],
@@ -7106,11 +7113,18 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7106
7113
  _useState10 = _slicedToArray(_useState9, 2),
7107
7114
  selectedField = _useState10[0],
7108
7115
  setSelectedField = _useState10[1];
7116
+ var _useState11 = useState(""),
7117
+ _useState12 = _slicedToArray(_useState11, 2),
7118
+ searchTerm = _useState12[0],
7119
+ setSearchTerm = _useState12[1];
7109
7120
  var _getQueryParams = getQueryParams(),
7110
7121
  resource = _getQueryParams.resource,
7111
7122
  state = _getQueryParams.state;
7112
7123
  var ownerId = showOwnersInMenu ? resource : undefined;
7124
+ var debouncedSearchTerm = useDebounce(searchTerm.trim());
7113
7125
  var history = useHistory();
7126
+ var _useTranslation = useTranslation(),
7127
+ t = _useTranslation.t;
7114
7128
  var _useFetchConfigs = useFetchConfigs(),
7115
7129
  _useFetchConfigs$data = _useFetchConfigs.data,
7116
7130
  _useFetchConfigs$data2 = _useFetchConfigs$data === void 0 ? {} : _useFetchConfigs$data,
@@ -7122,10 +7136,12 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7122
7136
  var fieldParams = {
7123
7137
  resourceType: !showOwnersInMenu ? resource : undefined,
7124
7138
  ownerId: ownerId,
7125
- state: state || FIELD_STATES.active
7139
+ state: state || FIELD_STATES.active,
7140
+ searchTerm: debouncedSearchTerm
7126
7141
  };
7127
7142
  var _useFetchFields = useFetchFields(fieldParams, {
7128
- enabled: !!resource
7143
+ enabled: !!resource,
7144
+ keepPreviousData: true
7129
7145
  }),
7130
7146
  _useFetchFields$data = _useFetchFields.data,
7131
7147
  _useFetchFields$data2 = _useFetchFields$data === void 0 ? {} : _useFetchFields$data,
@@ -7136,6 +7152,16 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7136
7152
  inactiveFieldsCount = _useFetchFields$data2.inactiveFieldsCount,
7137
7153
  isFieldsLoading = _useFetchFields.isLoading,
7138
7154
  isFieldsFetching = _useFetchFields.isFetching;
7155
+ var _useFetchFields2 = useFetchFields(_objectSpread$2(_objectSpread$2({}, fieldParams), {}, {
7156
+ state: FIELD_STATES.active,
7157
+ searchTerm: ""
7158
+ }), {
7159
+ enabled: !!resource
7160
+ }),
7161
+ _useFetchFields2$data = _useFetchFields2.data,
7162
+ _useFetchFields2$data2 = _useFetchFields2$data === void 0 ? {} : _useFetchFields2$data,
7163
+ _useFetchFields2$data3 = _useFetchFields2$data2.fields,
7164
+ allFields = _useFetchFields2$data3 === void 0 ? [] : _useFetchFields2$data3;
7139
7165
  var _useDestroyField = useDestroyField({
7140
7166
  onSuccess: function onSuccess() {
7141
7167
  setIsDeleteAlertOpen(false);
@@ -7203,6 +7229,31 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7203
7229
  var menuItems = showOwnersInMenu ? owners : resourceTypes;
7204
7230
  var isScreenLoading = isFieldsLoading || isConfigsLoading;
7205
7231
  var showCountSubheader = count > 0;
7232
+ var searchProps = {
7233
+ onChange: function onChange(e) {
7234
+ return setSearchTerm(e.target.value);
7235
+ },
7236
+ value: searchTerm,
7237
+ placeholder: t("placeholders.searchFields")
7238
+ };
7239
+ var menuBarFilters = useMemo(function () {
7240
+ return renderMenuBarFilters({
7241
+ selectedState: state,
7242
+ fieldStatesTaxonomy: fieldStatesTaxonomy,
7243
+ activeFieldsCount: activeFieldsCount,
7244
+ inactiveFieldsCount: inactiveFieldsCount,
7245
+ handleBlockClick: handleBlockClick
7246
+ });
7247
+ }, [activeFieldsCount, inactiveFieldsCount, state]);
7248
+ var menuBarItems = useMemo(function () {
7249
+ return renderMenuBarItems({
7250
+ isOwnerBased: showOwnersInMenu,
7251
+ items: menuItems,
7252
+ selectedMenu: resource,
7253
+ handleBlockClick: handleBlockClick,
7254
+ nameAliases: nameAliases
7255
+ });
7256
+ }, [menuItems, resource]);
7206
7257
  useEffect(function () {
7207
7258
  handleURLWithDefaultValues();
7208
7259
  }, [isConfigsLoading]);
@@ -7217,8 +7268,6 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7217
7268
  fields: fields,
7218
7269
  owners: owners,
7219
7270
  count: count,
7220
- activeFieldsCount: activeFieldsCount,
7221
- inactiveFieldsCount: inactiveFieldsCount,
7222
7271
  menuItems: menuItems,
7223
7272
  columnData: columnData,
7224
7273
  selectedField: selectedField,
@@ -7235,7 +7284,10 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
7235
7284
  handleAlertClose: handleAlertClose,
7236
7285
  handleClosePane: handleClosePane,
7237
7286
  handleReorderPaneClose: handleReorderPaneClose,
7238
- handleBlockClick: handleBlockClick
7287
+ searchProps: searchProps,
7288
+ menuBarFilters: menuBarFilters,
7289
+ menuBarItems: menuBarItems,
7290
+ allFields: allFields
7239
7291
  };
7240
7292
  };
7241
7293
 
@@ -11651,7 +11703,9 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11651
11703
  t = _useTranslation.t;
11652
11704
  var _useFieldsDashboard = useFieldsDashboard({
11653
11705
  buildColumnData: buildColumnData,
11654
- showOwnersInMenu: showOwnersInMenu
11706
+ showOwnersInMenu: showOwnersInMenu,
11707
+ fieldStatesTaxonomy: fieldStatesTaxonomy,
11708
+ nameAliases: nameAliases
11655
11709
  }),
11656
11710
  isPaneOpen = _useFieldsDashboard.isPaneOpen,
11657
11711
  setIsPaneOpen = _useFieldsDashboard.setIsPaneOpen,
@@ -11663,8 +11717,6 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11663
11717
  fields = _useFieldsDashboard.fields,
11664
11718
  owners = _useFieldsDashboard.owners,
11665
11719
  count = _useFieldsDashboard.count,
11666
- activeFieldsCount = _useFieldsDashboard.activeFieldsCount,
11667
- inactiveFieldsCount = _useFieldsDashboard.inactiveFieldsCount,
11668
11720
  menuItems = _useFieldsDashboard.menuItems,
11669
11721
  columnData = _useFieldsDashboard.columnData,
11670
11722
  selectedField = _useFieldsDashboard.selectedField,
@@ -11680,26 +11732,17 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11680
11732
  handleAlertClose = _useFieldsDashboard.handleAlertClose,
11681
11733
  handleClosePane = _useFieldsDashboard.handleClosePane,
11682
11734
  handleReorderPaneClose = _useFieldsDashboard.handleReorderPaneClose,
11683
- handleBlockClick = _useFieldsDashboard.handleBlockClick;
11735
+ searchProps = _useFieldsDashboard.searchProps,
11736
+ menuBarFilters = _useFieldsDashboard.menuBarFilters,
11737
+ menuBarItems = _useFieldsDashboard.menuBarItems,
11738
+ allFields = _useFieldsDashboard.allFields;
11684
11739
  var isMenuBarNeeded = showStateFilter || menuItems.length > 1;
11685
11740
  return /*#__PURE__*/React.createElement(React.Fragment, null, isMenuBarNeeded && /*#__PURE__*/React.createElement(MenuBar, {
11686
11741
  showMenu: isMenuBarOpen,
11687
11742
  title: t("titles.field", PLURAL)
11688
11743
  }, isConfigsLoading ? /*#__PURE__*/React.createElement("div", {
11689
11744
  className: "flex items-center justify-center"
11690
- }, /*#__PURE__*/React.createElement(Spinner, null)) : renderMenuBarItems({
11691
- isOwnerBased: showOwnersInMenu,
11692
- items: menuItems,
11693
- selectedMenu: selectedMenu,
11694
- handleBlockClick: handleBlockClick,
11695
- nameAliases: nameAliases
11696
- }), showStateFilter && renderMenuBarFilters({
11697
- selectedState: selectedState,
11698
- fieldStatesTaxonomy: fieldStatesTaxonomy,
11699
- activeFieldsCount: activeFieldsCount,
11700
- inactiveFieldsCount: inactiveFieldsCount,
11701
- handleBlockClick: handleBlockClick
11702
- })), isScreenLoading ? /*#__PURE__*/React.createElement("div", {
11745
+ }, /*#__PURE__*/React.createElement(Spinner, null)) : menuBarItems, showStateFilter && menuBarFilters), isScreenLoading && isEmpty(fields) ? /*#__PURE__*/React.createElement("div", {
11703
11746
  className: "flex w-full flex-grow items-center justify-center"
11704
11747
  }, /*#__PURE__*/React.createElement(PageLoader, null)) : /*#__PURE__*/React.createElement(Container, null, /*#__PURE__*/React.createElement(Header, _extends({
11705
11748
  breadcrumbs: breadcrumbs
@@ -11711,10 +11754,10 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11711
11754
  actionBlock: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button$1, {
11712
11755
  label: t("labels.reorder"),
11713
11756
  style: "secondary",
11714
- disabled: !existsBy({
11757
+ disabled: selectedState === FIELD_STATES.inactive || !existsBy({
11715
11758
  isSystem: false,
11716
11759
  state: "active"
11717
- }, fields),
11760
+ }, allFields),
11718
11761
  onClick: function onClick() {
11719
11762
  return setIsReorderPaneOpen(true);
11720
11763
  }
@@ -11736,6 +11779,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11736
11779
  onClose: handleClosePane,
11737
11780
  onMutationSuccess: paneProps === null || paneProps === void 0 ? void 0 : paneProps.onMutationSuccess
11738
11781
  }, paneProps === null || paneProps === void 0 ? void 0 : paneProps.children)),
11782
+ searchProps: searchProps,
11739
11783
  title: humanize(getDashBoardTitle({
11740
11784
  isOwnerBased: showOwnersInMenu,
11741
11785
  owners: owners,
@@ -11746,7 +11790,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11746
11790
  leftActionBlock: /*#__PURE__*/React.createElement(Typography, {
11747
11791
  className: "mr-4 font-semibold",
11748
11792
  style: "h4"
11749
- }, "".concat(count, " "), t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11793
+ }, count, " ", selectedState, " ", t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
11750
11794
  }), /*#__PURE__*/React.createElement(FieldsTable, {
11751
11795
  columnData: columnData,
11752
11796
  helpDocUrl: helpDocUrl,
@@ -11755,10 +11799,10 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
11755
11799
  setIsPaneOpen: setIsPaneOpen,
11756
11800
  totalCount: count
11757
11801
  })), /*#__PURE__*/React.createElement(ReorderPane, {
11758
- allFields: fields,
11759
11802
  isOpen: isReorderPaneOpen,
11760
11803
  ownerId: showOwnersInMenu ? selectedMenu : "",
11761
- onClose: handleReorderPaneClose
11804
+ onClose: handleReorderPaneClose,
11805
+ allFields: allFields
11762
11806
  }), /*#__PURE__*/React.createElement(Alert, {
11763
11807
  isOpen: isDeleteAlertOpen,
11764
11808
  isSubmitting: isDeleting,
@@ -11846,6 +11890,7 @@ var FieldValueInputWrapper = function FieldValueInputWrapper(_ref) {
11846
11890
  _ref$className = _ref.className,
11847
11891
  className = _ref$className === void 0 ? "" : _ref$className;
11848
11892
  return /*#__PURE__*/React.createElement(Form, {
11893
+ scrollToErrorField: true,
11849
11894
  className: classnames("flex w-full", className),
11850
11895
  formikProps: {
11851
11896
  initialValues: getInitialFieldValue(field, fieldValues),