@bigbinary/neeto-fields-frontend 1.1.9 → 1.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -7
- package/dist/index.cjs.js +54 -51
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +56 -53
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/types.d.ts +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ referred as custom fields) for the resources across neeto products.
|
|
|
12
12
|
- Frontend package exports
|
|
13
13
|
- [Components](#components)
|
|
14
14
|
- [FieldsDashBoard](#1-fieldsdashboard)
|
|
15
|
-
- [
|
|
15
|
+
- [FieldsPane](#2-fieldspane)
|
|
16
16
|
- [FieldValuesContainer](#3-fieldvaluescontainer)
|
|
17
17
|
- [FieldInputs](#4-fieldinputs)
|
|
18
18
|
- [Functions](#functions)
|
|
@@ -299,18 +299,22 @@ This is the pane which handles the Add / Edit operations of the field.
|
|
|
299
299
|
#### Usage:
|
|
300
300
|
|
|
301
301
|
```jsx
|
|
302
|
-
import {
|
|
302
|
+
import { FieldsPane } from "@biginary/neeto-fields-frontend";
|
|
303
303
|
|
|
304
|
-
|
|
304
|
+
const [fieldPaneOpen, setFieldPaneOpen] = useState(false);
|
|
305
|
+
|
|
306
|
+
<FieldsPane
|
|
307
|
+
isOpen={fieldPaneOpen}
|
|
305
308
|
allowedKinds={["text", "number"]}
|
|
306
309
|
resourceType="users"
|
|
307
310
|
additionalValidations={{
|
|
308
311
|
hostSpecificInputName: validationSchema,
|
|
309
312
|
}}
|
|
310
313
|
initialValues={{ hostSpecificInputName: initialValue }}
|
|
314
|
+
onClose={() => setFieldPaneOpen(false)}
|
|
311
315
|
>
|
|
312
316
|
<HostSpecificInputFields />
|
|
313
|
-
</
|
|
317
|
+
</FieldsPane>;
|
|
314
318
|
```
|
|
315
319
|
|
|
316
320
|
## 3. `FieldValuesContainer`
|
|
@@ -346,9 +350,9 @@ specific resource.
|
|
|
346
350
|
11. `isRequiredColumnName`: The name of column which holds the value which
|
|
347
351
|
suggests if a field value is a `required` one or not. Default is
|
|
348
352
|
`isRequired` column.
|
|
349
|
-
12. `fieldClassName`: Class names for styling the `div` containing the
|
|
350
|
-
|
|
351
|
-
|
|
353
|
+
12. `fieldClassName`: Class names for styling the `div` containing the input
|
|
354
|
+
field.
|
|
355
|
+
13. `onMutationSuccess`: The callback function which is triggered on the success
|
|
352
356
|
of mutation functions( create, update & delete).
|
|
353
357
|
|
|
354
358
|
#### Usage:
|
package/dist/index.cjs.js
CHANGED
|
@@ -5359,6 +5359,7 @@ var validations = {
|
|
|
5359
5359
|
fieldOptionIsRequired: "Field option is required",
|
|
5360
5360
|
kindIsRequired: "Kind is required",
|
|
5361
5361
|
invalidRegexPattern: "Invalid regex pattern",
|
|
5362
|
+
advancedRegexAssertionsNotSupported: "Advanced regex assertions are not supported",
|
|
5362
5363
|
notAValidNumber: "Entered number is not valid",
|
|
5363
5364
|
notAValidInteger: "Entered number is not a valid integer",
|
|
5364
5365
|
notAValid: "Entered number is not valid",
|
|
@@ -5879,6 +5880,15 @@ var dayjs_minExports = dayjs_min.exports;
|
|
|
5879
5880
|
var dayjs = /*@__PURE__*/getDefaultExportFromCjs(dayjs_minExports);
|
|
5880
5881
|
|
|
5881
5882
|
var dateSchema = yup__namespace.date().nullable();
|
|
5883
|
+
var isValueEmpty = function isValueEmpty(value) {
|
|
5884
|
+
return typeof value === "string" && ramda.isEmpty(value.trim());
|
|
5885
|
+
};
|
|
5886
|
+
var isCheckboxUnchecked = function isCheckboxUnchecked(kind, value) {
|
|
5887
|
+
return kind === KINDS.checkbox && !value;
|
|
5888
|
+
};
|
|
5889
|
+
var isArrayEmpty = function isArrayEmpty(kind, value) {
|
|
5890
|
+
return [KINDS.multiOption, KINDS.singleOption, KINDS.dateRange, KINDS.timeRange].includes(kind) && ramda.isEmpty(value);
|
|
5891
|
+
};
|
|
5882
5892
|
var buildSchemaAllowingEmptyValue = function buildSchemaAllowingEmptyValue(schema) {
|
|
5883
5893
|
return yup__namespace.mixed().test({
|
|
5884
5894
|
name: "validate-if-not-empty",
|
|
@@ -5890,11 +5900,11 @@ var buildSchemaAllowingEmptyValue = function buildSchemaAllowingEmptyValue(schem
|
|
|
5890
5900
|
}
|
|
5891
5901
|
});
|
|
5892
5902
|
};
|
|
5893
|
-
var buildSchemaForRequiredInputs = function buildSchemaForRequiredInputs(schema) {
|
|
5903
|
+
var buildSchemaForRequiredInputs = function buildSchemaForRequiredInputs(schema, kind) {
|
|
5894
5904
|
return yup__namespace.mixed().test({
|
|
5895
5905
|
name: "validate-required-inputs",
|
|
5896
5906
|
test: function test(value) {
|
|
5897
|
-
if (ramda.
|
|
5907
|
+
if (ramda.isNil(value) || isValueEmpty(value) || isArrayEmpty(kind, value) || isCheckboxUnchecked(kind, value)) {
|
|
5898
5908
|
throw new yup__namespace.ValidationError(t$1("validations.thisIsRequired"));
|
|
5899
5909
|
}
|
|
5900
5910
|
schema.validateSync(value);
|
|
@@ -5904,14 +5914,16 @@ var buildSchemaForRequiredInputs = function buildSchemaForRequiredInputs(schema)
|
|
|
5904
5914
|
};
|
|
5905
5915
|
var buildSchema = function buildSchema(_ref) {
|
|
5906
5916
|
var schema = _ref.schema,
|
|
5907
|
-
isRequired = _ref.isRequired
|
|
5908
|
-
|
|
5917
|
+
isRequired = _ref.isRequired,
|
|
5918
|
+
kind = _ref.kind;
|
|
5919
|
+
return isRequired ? buildSchemaForRequiredInputs(schema, kind) : buildSchemaAllowingEmptyValue(schema);
|
|
5909
5920
|
};
|
|
5910
5921
|
var getBasicValidationSchema = function getBasicValidationSchema(_ref2) {
|
|
5911
5922
|
var kind = _ref2.kind,
|
|
5912
5923
|
fieldData = _ref2.fieldData;
|
|
5913
5924
|
switch (kind) {
|
|
5914
5925
|
case KINDS.singleOption:
|
|
5926
|
+
case KINDS.textarea:
|
|
5915
5927
|
case KINDS.text:
|
|
5916
5928
|
{
|
|
5917
5929
|
return yup__namespace.string().trim().nullable();
|
|
@@ -5961,7 +5973,8 @@ var buildFieldValidationSchema = function buildFieldValidationSchema(_ref3) {
|
|
|
5961
5973
|
});
|
|
5962
5974
|
return buildSchema({
|
|
5963
5975
|
schema: schema,
|
|
5964
|
-
isRequired: isRequired
|
|
5976
|
+
isRequired: isRequired,
|
|
5977
|
+
kind: kind
|
|
5965
5978
|
});
|
|
5966
5979
|
};
|
|
5967
5980
|
var cleanedRegex = function cleanedRegex(regexCondition) {
|
|
@@ -6088,11 +6101,13 @@ var useFormikFields = function useFormikFields(_ref) {
|
|
|
6088
6101
|
dirty: dirty,
|
|
6089
6102
|
handleSubmit: handleSubmit,
|
|
6090
6103
|
fieldProps: _objectSpread$b(_objectSpread$b({}, formikFieldProps), {}, {
|
|
6091
|
-
required: props[isRequiredColumnName],
|
|
6092
6104
|
error: individualSubmit ? meta.error : meta.touched && meta.error,
|
|
6093
6105
|
options: isDropdown ? buildOptionsToLabelAndValue(fieldData) : undefined,
|
|
6094
6106
|
value: getValueForField(formikFieldProps.value),
|
|
6095
6107
|
label: pure.capitalize(name),
|
|
6108
|
+
labelProps: {
|
|
6109
|
+
required: props[isRequiredColumnName]
|
|
6110
|
+
},
|
|
6096
6111
|
disabled: disabled
|
|
6097
6112
|
})
|
|
6098
6113
|
};
|
|
@@ -6146,7 +6161,8 @@ var MultiOption = function MultiOption(props) {
|
|
|
6146
6161
|
fieldProps = _useFormikFields.fieldProps;
|
|
6147
6162
|
return /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
|
|
6148
6163
|
isMulti: true,
|
|
6149
|
-
isSearchable: true
|
|
6164
|
+
isSearchable: true,
|
|
6165
|
+
strategy: "fixed"
|
|
6150
6166
|
}, fieldProps, {
|
|
6151
6167
|
onChange: function onChange(selectedOptions) {
|
|
6152
6168
|
return handleSubmit(ramda.pluck("value", selectedOptions));
|
|
@@ -6208,7 +6224,8 @@ var SingleOption = function SingleOption(props) {
|
|
|
6208
6224
|
fieldProps = _useFormikFields.fieldProps;
|
|
6209
6225
|
return /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
|
|
6210
6226
|
isClearable: true,
|
|
6211
|
-
isSearchable: true
|
|
6227
|
+
isSearchable: true,
|
|
6228
|
+
strategy: "fixed"
|
|
6212
6229
|
}, fieldProps, {
|
|
6213
6230
|
onChange: function onChange(option) {
|
|
6214
6231
|
return handleSubmit((option === null || option === void 0 ? void 0 : option.value) || "");
|
|
@@ -6668,9 +6685,17 @@ var renderFormFooter = function renderFormFooter(_ref3) {
|
|
|
6668
6685
|
}));
|
|
6669
6686
|
};
|
|
6670
6687
|
|
|
6688
|
+
var PERMITTED_REGEX_PATTERN = /^\/.*\/[igmsyu]*$/;
|
|
6689
|
+
var ADVANCED_REGEX_ASSERTION_PATTERN = /\(\?=[^)]*\)|\(\?![^)]*\)|\(\?<=[^)]*\)|\(\?<![^)]*\)/;
|
|
6671
6690
|
var regexValidationSchema = yup__namespace.object().shape({
|
|
6672
|
-
condition: yup__namespace.string().required(t$1("validations.regexConditionIsRequired")).matches(
|
|
6673
|
-
name: "regex",
|
|
6691
|
+
condition: yup__namespace.string().required(t$1("validations.regexConditionIsRequired")).matches(PERMITTED_REGEX_PATTERN, t$1("validations.invalidRegexPattern")).test({
|
|
6692
|
+
name: "test-regex-is-advanced",
|
|
6693
|
+
message: t$1("validations.advancedRegexAssertionsNotSupported") || "",
|
|
6694
|
+
test: function test(value) {
|
|
6695
|
+
return !ADVANCED_REGEX_ASSERTION_PATTERN.test(value);
|
|
6696
|
+
}
|
|
6697
|
+
}).test({
|
|
6698
|
+
name: "test-regex-condition-pattern",
|
|
6674
6699
|
message: t$1("validations.invalidRegexPattern") || "",
|
|
6675
6700
|
test: function test(value) {
|
|
6676
6701
|
try {
|
|
@@ -7692,34 +7717,27 @@ var renderMenuBarItems = function renderMenuBarItems(_ref2) {
|
|
|
7692
7717
|
});
|
|
7693
7718
|
});
|
|
7694
7719
|
};
|
|
7695
|
-
var
|
|
7720
|
+
var renderStateFilterTabs = function renderStateFilterTabs(_ref3) {
|
|
7696
7721
|
var selectedState = _ref3.selectedState,
|
|
7697
7722
|
fieldStatesTaxonomy = _ref3.fieldStatesTaxonomy,
|
|
7698
7723
|
activeFieldsCount = _ref3.activeFieldsCount,
|
|
7699
7724
|
inactiveFieldsCount = _ref3.inactiveFieldsCount,
|
|
7700
7725
|
handleBlockClick = _ref3.handleBlockClick;
|
|
7701
|
-
return /*#__PURE__*/React__default["default"].createElement(
|
|
7702
|
-
|
|
7703
|
-
|
|
7704
|
-
textTransform: "uppercase",
|
|
7705
|
-
weight: "bold"
|
|
7706
|
-
}, t$1("titles.filters"))), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
|
|
7726
|
+
return /*#__PURE__*/React__default["default"].createElement(neetoui.Tab, {
|
|
7727
|
+
className: "mb-4"
|
|
7728
|
+
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Tab.Item, {
|
|
7707
7729
|
active: selectedState === FIELD_STATES.active,
|
|
7708
|
-
count: activeFieldsCount,
|
|
7709
7730
|
"data-cy": "menubar-active-block",
|
|
7710
|
-
label: fieldStatesTaxonomy.active,
|
|
7711
7731
|
onClick: handleBlockClick({
|
|
7712
7732
|
state: FIELD_STATES.active
|
|
7713
7733
|
})
|
|
7714
|
-
}), /*#__PURE__*/React__default["default"].createElement(
|
|
7734
|
+
}, fieldStatesTaxonomy.active, "(", activeFieldsCount, ")"), /*#__PURE__*/React__default["default"].createElement(neetoui.Tab.Item, {
|
|
7715
7735
|
active: selectedState === FIELD_STATES.inactive,
|
|
7716
|
-
count: inactiveFieldsCount,
|
|
7717
7736
|
"data-cy": "menubar-inactive-block",
|
|
7718
|
-
label: fieldStatesTaxonomy.inactive,
|
|
7719
7737
|
onClick: handleBlockClick({
|
|
7720
7738
|
state: FIELD_STATES.inactive
|
|
7721
7739
|
})
|
|
7722
|
-
}));
|
|
7740
|
+
}, fieldStatesTaxonomy.inactive, "(", inactiveFieldsCount, ")"));
|
|
7723
7741
|
};
|
|
7724
7742
|
var getResourceName = function getResourceName(_ref4) {
|
|
7725
7743
|
var isOwnerBased = _ref4.isOwnerBased,
|
|
@@ -7737,24 +7755,11 @@ var getResourceName = function getResourceName(_ref4) {
|
|
|
7737
7755
|
var getDashBoardTitle = function getDashBoardTitle(_ref5) {
|
|
7738
7756
|
var resourceName = _ref5.resourceName,
|
|
7739
7757
|
isSingleResource = _ref5.isSingleResource,
|
|
7740
|
-
showStateFilter = _ref5.showStateFilter,
|
|
7741
|
-
selectedState = _ref5.selectedState,
|
|
7742
7758
|
title = _ref5.title;
|
|
7743
|
-
var displayTitle = title
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
title: title,
|
|
7748
|
-
resource: resourceName
|
|
7749
|
-
});
|
|
7750
|
-
} else if (showStateFilter && isSingleResource) {
|
|
7751
|
-
displayTitle = "".concat(selectedState, " ").concat(title);
|
|
7752
|
-
} else if (!showStateFilter && !isSingleResource) {
|
|
7753
|
-
displayTitle = t$1("messages.titleForResource", {
|
|
7754
|
-
title: title,
|
|
7755
|
-
resource: resourceName
|
|
7756
|
-
});
|
|
7757
|
-
}
|
|
7759
|
+
var displayTitle = isSingleResource ? title : t$1("messages.titleForResource", {
|
|
7760
|
+
title: title,
|
|
7761
|
+
resource: resourceName
|
|
7762
|
+
});
|
|
7758
7763
|
return pure.humanize(displayTitle);
|
|
7759
7764
|
};
|
|
7760
7765
|
var renderNoDataHelpText = function renderNoDataHelpText(title, url) {
|
|
@@ -7956,7 +7961,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
|
|
|
7956
7961
|
}
|
|
7957
7962
|
};
|
|
7958
7963
|
var isScreenLoading = isFieldsLoading || isConfigsLoading;
|
|
7959
|
-
var showCountSubheader = count > 0;
|
|
7964
|
+
var showCountSubheader = count > 0 && !showStateFilter;
|
|
7960
7965
|
var searchProps = {
|
|
7961
7966
|
onChange: function onChange(e) {
|
|
7962
7967
|
return setSearchTerm(e.target.value);
|
|
@@ -7966,7 +7971,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
|
|
|
7966
7971
|
className: "w-44"
|
|
7967
7972
|
};
|
|
7968
7973
|
var isSingleResource = menuItems.length === 1;
|
|
7969
|
-
var isMenuBarNeeded =
|
|
7974
|
+
var isMenuBarNeeded = !isSingleResource && !isConfigsLoading;
|
|
7970
7975
|
var resourceName = React.useMemo(function () {
|
|
7971
7976
|
return getResourceName({
|
|
7972
7977
|
isOwnerBased: isOwnerBased,
|
|
@@ -7978,14 +7983,12 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
|
|
|
7978
7983
|
var headerDisplayTitle = React.useMemo(function () {
|
|
7979
7984
|
return getDashBoardTitle({
|
|
7980
7985
|
resourceName: resourceName,
|
|
7981
|
-
showStateFilter: showStateFilter,
|
|
7982
|
-
selectedState: state,
|
|
7983
7986
|
isSingleResource: isSingleResource,
|
|
7984
7987
|
title: title
|
|
7985
7988
|
});
|
|
7986
7989
|
}, [state, isSingleResource, resourceName]);
|
|
7987
|
-
var
|
|
7988
|
-
return
|
|
7990
|
+
var stateFilterTabs = React.useMemo(function () {
|
|
7991
|
+
return renderStateFilterTabs({
|
|
7989
7992
|
selectedState: state,
|
|
7990
7993
|
fieldStatesTaxonomy: fieldStatesTaxonomy,
|
|
7991
7994
|
activeFieldsCount: activeFieldsCount,
|
|
@@ -8034,7 +8037,7 @@ var useFieldsDashboard = function useFieldsDashboard(_ref) {
|
|
|
8034
8037
|
handleClosePane: handleClosePane,
|
|
8035
8038
|
handleReorderPaneClose: handleReorderPaneClose,
|
|
8036
8039
|
searchProps: searchProps,
|
|
8037
|
-
|
|
8040
|
+
stateFilterTabs: stateFilterTabs,
|
|
8038
8041
|
menuBarItems: menuBarItems,
|
|
8039
8042
|
allFields: allFields,
|
|
8040
8043
|
headerDisplayTitle: headerDisplayTitle
|
|
@@ -12538,7 +12541,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
|
|
|
12538
12541
|
handleClosePane = _useFieldsDashboard.handleClosePane,
|
|
12539
12542
|
handleReorderPaneClose = _useFieldsDashboard.handleReorderPaneClose,
|
|
12540
12543
|
searchProps = _useFieldsDashboard.searchProps,
|
|
12541
|
-
|
|
12544
|
+
stateFilterTabs = _useFieldsDashboard.stateFilterTabs,
|
|
12542
12545
|
menuBarItems = _useFieldsDashboard.menuBarItems,
|
|
12543
12546
|
allFields = _useFieldsDashboard.allFields,
|
|
12544
12547
|
headerDisplayTitle = _useFieldsDashboard.headerDisplayTitle;
|
|
@@ -12547,8 +12550,8 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
|
|
|
12547
12550
|
title: title
|
|
12548
12551
|
}, isConfigsLoading ? /*#__PURE__*/React__default["default"].createElement("div", {
|
|
12549
12552
|
className: "flex items-center justify-center"
|
|
12550
|
-
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null)) : menuBarItems
|
|
12551
|
-
className: "flex w-full flex-grow items-center justify-center"
|
|
12553
|
+
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null)) : menuBarItems), isScreenLoading && ramda.isEmpty(fields) ? /*#__PURE__*/React__default["default"].createElement("div", {
|
|
12554
|
+
className: "flex h-screen w-full flex-grow items-center justify-center"
|
|
12552
12555
|
}, /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null)) : /*#__PURE__*/React__default["default"].createElement(Container__default["default"], null, /*#__PURE__*/React__default["default"].createElement(Header__default["default"], _extends({}, _objectSpread$2(_objectSpread$2({
|
|
12553
12556
|
breadcrumbs: breadcrumbs
|
|
12554
12557
|
}, isMenuBarNeeded && {
|
|
@@ -12586,7 +12589,7 @@ var FieldsDashboard = function FieldsDashboard(_ref) {
|
|
|
12586
12589
|
"data-cy": "neeto-fields-subheader-text",
|
|
12587
12590
|
style: "h4"
|
|
12588
12591
|
}, "".concat(count, " "), t("titles.field", count > 1 ? PLURAL : SINGULAR).toLocaleLowerCase())
|
|
12589
|
-
}), /*#__PURE__*/React__default["default"].createElement(FieldsTable, {
|
|
12592
|
+
}), showStateFilter && stateFilterTabs, /*#__PURE__*/React__default["default"].createElement(FieldsTable, {
|
|
12590
12593
|
isLoading: isFieldsFetching || isFieldsLoading,
|
|
12591
12594
|
rowData: ramda.isEmpty(rowData) ? fields : rowData,
|
|
12592
12595
|
totalCount: count,
|