@bigbinary/neeto-fields-frontend 1.1.4 → 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 +107 -59
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +108 -60
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
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
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
|
-
import { values, map, isNotNil, isNil, pluck, clone as clone$1, pipe, mergeAll, omit, prop, pick,
|
|
4
|
+
import { values, map, isNotNil, isEmpty, isNil, pluck, clone as clone$1, pipe, mergeAll, omit, prop, pick, assoc, any, not, head } from 'ramda';
|
|
5
5
|
import { useFormikContext, useField, FieldArray } from 'formik';
|
|
6
|
+
import { useFuncDebounce, useDebounce, handleMetaClick } from '@bigbinary/neeto-commons-frontend/react-utils';
|
|
6
7
|
import * as yup from 'yup';
|
|
7
8
|
import { Check, Info, Delete, MenuHorizontal, Reorder } from '@bigbinary/neeto-icons';
|
|
8
9
|
import { Button, ActionBlock, Input as Input$1, Select as Select$1, Switch as Switch$1, Form } from '@bigbinary/neetoui/formik';
|
|
@@ -14,7 +15,6 @@ import SubHeader from '@bigbinary/neeto-molecules/SubHeader';
|
|
|
14
15
|
import { useQuery, useQueryClient, useMutation } from 'react-query';
|
|
15
16
|
import axios from 'axios';
|
|
16
17
|
import { buildUrl, getQueryParams } from '@bigbinary/neeto-commons-frontend/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';
|
|
@@ -5847,57 +5847,60 @@ var buildSchemaAllowingEmptyValue = function buildSchemaAllowingEmptyValue(schem
|
|
|
5847
5847
|
name: "validate-if-not-empty",
|
|
5848
5848
|
test: function test(value) {
|
|
5849
5849
|
if (isNotEmpty(value) && isNotNil(value)) {
|
|
5850
|
-
|
|
5851
|
-
|
|
5852
|
-
|
|
5853
|
-
|
|
5854
|
-
|
|
5855
|
-
|
|
5850
|
+
schema.validateSync(value);
|
|
5851
|
+
}
|
|
5852
|
+
return true;
|
|
5853
|
+
}
|
|
5854
|
+
});
|
|
5855
|
+
};
|
|
5856
|
+
var buildSchemaForRequiredInputs = function buildSchemaForRequiredInputs(schema) {
|
|
5857
|
+
return yup.mixed().test({
|
|
5858
|
+
name: "validate-required-inputs",
|
|
5859
|
+
test: function test(value) {
|
|
5860
|
+
if (isEmpty(value) || isNil(value)) {
|
|
5861
|
+
throw new yup.ValidationError(t$1("validations.thisIsRequired"));
|
|
5856
5862
|
}
|
|
5863
|
+
schema.validateSync(value);
|
|
5857
5864
|
return true;
|
|
5858
5865
|
}
|
|
5859
5866
|
});
|
|
5860
5867
|
};
|
|
5861
|
-
var
|
|
5862
|
-
var
|
|
5863
|
-
isRequired = _ref.isRequired
|
|
5864
|
-
|
|
5868
|
+
var buildSchema = function buildSchema(_ref) {
|
|
5869
|
+
var schema = _ref.schema,
|
|
5870
|
+
isRequired = _ref.isRequired;
|
|
5871
|
+
return isRequired ? buildSchemaForRequiredInputs(schema) : buildSchemaAllowingEmptyValue(schema);
|
|
5872
|
+
};
|
|
5873
|
+
var getBasicValidationSchema = function getBasicValidationSchema(_ref2) {
|
|
5874
|
+
var kind = _ref2.kind,
|
|
5875
|
+
fieldData = _ref2.fieldData;
|
|
5865
5876
|
switch (kind) {
|
|
5866
5877
|
case KINDS.singleOption:
|
|
5867
5878
|
case KINDS.text:
|
|
5868
5879
|
{
|
|
5869
|
-
|
|
5870
|
-
return isRequired ? schema.required(t$1("validations.thisIsRequired")) : schema;
|
|
5880
|
+
return yup.string().trim().nullable();
|
|
5871
5881
|
}
|
|
5872
5882
|
case KINDS.number:
|
|
5873
5883
|
case KINDS.monetary:
|
|
5874
5884
|
case KINDS.decimal:
|
|
5875
5885
|
{
|
|
5876
|
-
|
|
5877
|
-
return isRequired ? _schema.required(t$1("validations.thisIsRequired")) : _schema;
|
|
5886
|
+
return yup.number(t$1("validations.notAValidNumber")).nullable();
|
|
5878
5887
|
}
|
|
5879
5888
|
case KINDS.integer:
|
|
5880
5889
|
{
|
|
5881
|
-
|
|
5882
|
-
return isRequired ? _schema2.required(t$1("validations.thisIsRequired")) : _schema2;
|
|
5890
|
+
return yup.number().nullable().integer(t$1("validations.notAValidInteger"));
|
|
5883
5891
|
}
|
|
5884
5892
|
case KINDS.date:
|
|
5885
5893
|
case KINDS.time:
|
|
5886
5894
|
{
|
|
5887
|
-
|
|
5888
|
-
return isRequired ? _schema3.required(t$1("validations.thisIsRequired")) : _schema3;
|
|
5895
|
+
return dateSchema;
|
|
5889
5896
|
}
|
|
5890
5897
|
case KINDS.multiOption:
|
|
5891
5898
|
{
|
|
5892
|
-
|
|
5893
|
-
return isRequired ? _schema4.min(1, t$1("validations.minOneItem")).required(t$1("validations.thisIsRequired")) : _schema4;
|
|
5899
|
+
return yup.array().of(yup.string()).nullable();
|
|
5894
5900
|
}
|
|
5895
5901
|
case KINDS.dateRange:
|
|
5896
5902
|
case KINDS.timeRange:
|
|
5897
5903
|
{
|
|
5898
|
-
if (isRequired) {
|
|
5899
|
-
return yup.array().of(dateSchema).required(t$1("validations.thisIsRequired"));
|
|
5900
|
-
}
|
|
5901
5904
|
return yup.array().of(dateSchema).nullable();
|
|
5902
5905
|
}
|
|
5903
5906
|
case KINDS.checkbox:
|
|
@@ -5905,13 +5908,25 @@ var buildFieldValidationSchema = function buildFieldValidationSchema(_ref) {
|
|
|
5905
5908
|
case KINDS.regex:
|
|
5906
5909
|
{
|
|
5907
5910
|
var regexPattern = fieldData === null || fieldData === void 0 ? void 0 : fieldData.condition;
|
|
5908
|
-
|
|
5909
|
-
return isRequired ? _schema5.required(t$1("validations.thisIsRequired")) : _schema5;
|
|
5911
|
+
return yup.string().nullable().matches(cleanedRegex(regexPattern), fieldData === null || fieldData === void 0 ? void 0 : fieldData.helpMessage);
|
|
5910
5912
|
}
|
|
5911
5913
|
default:
|
|
5912
5914
|
return yup.mixed();
|
|
5913
5915
|
}
|
|
5914
5916
|
};
|
|
5917
|
+
var buildFieldValidationSchema = function buildFieldValidationSchema(_ref3) {
|
|
5918
|
+
var kind = _ref3.kind,
|
|
5919
|
+
isRequired = _ref3.isRequired,
|
|
5920
|
+
fieldData = _ref3.fieldData;
|
|
5921
|
+
var schema = getBasicValidationSchema({
|
|
5922
|
+
kind: kind,
|
|
5923
|
+
fieldData: fieldData
|
|
5924
|
+
});
|
|
5925
|
+
return buildSchema({
|
|
5926
|
+
schema: schema,
|
|
5927
|
+
isRequired: isRequired
|
|
5928
|
+
});
|
|
5929
|
+
};
|
|
5915
5930
|
var cleanedRegex = function cleanedRegex(expression) {
|
|
5916
5931
|
if (expression.startsWith("/") && expression.endsWith("/")) {
|
|
5917
5932
|
return expression.slice(1, -1);
|
|
@@ -5920,9 +5935,9 @@ var cleanedRegex = function cleanedRegex(expression) {
|
|
|
5920
5935
|
};
|
|
5921
5936
|
var buildOptionsToLabelAndValue = function buildOptionsToLabelAndValue() {
|
|
5922
5937
|
var optionObjects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
5923
|
-
return optionObjects.map(function (
|
|
5924
|
-
var label =
|
|
5925
|
-
value =
|
|
5938
|
+
return optionObjects.map(function (_ref4) {
|
|
5939
|
+
var label = _ref4.label,
|
|
5940
|
+
value = _ref4.value;
|
|
5926
5941
|
return {
|
|
5927
5942
|
label: label,
|
|
5928
5943
|
value: value || label
|
|
@@ -5933,12 +5948,12 @@ var buildArrayToLabelAndValues = function buildArrayToLabelAndValues(value) {
|
|
|
5933
5948
|
return map(toLabelAndValue, value || []);
|
|
5934
5949
|
};
|
|
5935
5950
|
var validateField = /*#__PURE__*/function () {
|
|
5936
|
-
var
|
|
5951
|
+
var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref5) {
|
|
5937
5952
|
var fieldValue, fieldName, isRequired, kind, fieldData;
|
|
5938
5953
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
5939
5954
|
while (1) switch (_context.prev = _context.next) {
|
|
5940
5955
|
case 0:
|
|
5941
|
-
fieldValue =
|
|
5956
|
+
fieldValue = _ref5.fieldValue, fieldName = _ref5.fieldName, isRequired = _ref5.isRequired, kind = _ref5.kind, fieldData = _ref5.fieldData;
|
|
5942
5957
|
_context.prev = 1;
|
|
5943
5958
|
_context.next = 4;
|
|
5944
5959
|
return yup.object().shape(_defineProperty({}, fieldName, buildFieldValidationSchema({
|
|
@@ -5959,7 +5974,7 @@ var validateField = /*#__PURE__*/function () {
|
|
|
5959
5974
|
}, _callee, null, [[1, 7]]);
|
|
5960
5975
|
}));
|
|
5961
5976
|
return function validateField(_x) {
|
|
5962
|
-
return
|
|
5977
|
+
return _ref6.apply(this, arguments);
|
|
5963
5978
|
};
|
|
5964
5979
|
}();
|
|
5965
5980
|
var dateTimeToString = function dateTimeToString(dateTime) {
|
|
@@ -5982,8 +5997,7 @@ var useFormikFields = function useFormikFields(_ref) {
|
|
|
5982
5997
|
isRequiredColumnName = _ref$isRequiredColumn === void 0 ? "isRequired" : _ref$isRequiredColumn,
|
|
5983
5998
|
props = _objectWithoutProperties(_ref, _excluded$3);
|
|
5984
5999
|
var formikContext = useFormikContext();
|
|
5985
|
-
var
|
|
5986
|
-
submitForm = formikContext.submitForm,
|
|
6000
|
+
var submitForm = formikContext.submitForm,
|
|
5987
6001
|
dirty = formikContext.dirty,
|
|
5988
6002
|
isSubmitting = formikContext.isSubmitting;
|
|
5989
6003
|
var fieldPath = escapeString("".concat(name, "-").concat(fieldId));
|
|
@@ -6010,9 +6024,10 @@ var useFormikFields = function useFormikFields(_ref) {
|
|
|
6010
6024
|
formikFieldProps = _useField2[0],
|
|
6011
6025
|
meta = _useField2[1],
|
|
6012
6026
|
helpers = _useField2[2];
|
|
6027
|
+
var debouncedSubmitForm = useFuncDebounce(submitForm, 100);
|
|
6013
6028
|
var handleSubmit = function handleSubmit(value) {
|
|
6014
|
-
isNotNil(value) &&
|
|
6015
|
-
individualSubmit &&
|
|
6029
|
+
isNotNil(value) && helpers.setValue(value);
|
|
6030
|
+
individualSubmit && debouncedSubmitForm();
|
|
6016
6031
|
};
|
|
6017
6032
|
var getValueForField = function getValueForField(value) {
|
|
6018
6033
|
if (kind === KINDS.singleOption) {
|
|
@@ -6023,17 +6038,19 @@ var useFormikFields = function useFormikFields(_ref) {
|
|
|
6023
6038
|
return value || "";
|
|
6024
6039
|
};
|
|
6025
6040
|
var isDropdown = ["single_option", "multi_option"].includes(kind);
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
|
|
6041
|
+
useEffect(function () {
|
|
6042
|
+
if (isSubmitting && !meta.touched) {
|
|
6043
|
+
helpers.setTouched(true);
|
|
6044
|
+
}
|
|
6045
|
+
}, [isSubmitting]);
|
|
6029
6046
|
return {
|
|
6047
|
+
dirty: dirty,
|
|
6030
6048
|
handleSubmit: handleSubmit,
|
|
6031
6049
|
fieldProps: _objectSpread$a(_objectSpread$a({}, formikFieldProps), {}, {
|
|
6032
6050
|
required: props[isRequiredColumnName],
|
|
6033
6051
|
error: individualSubmit ? meta.error : meta.touched && meta.error,
|
|
6034
6052
|
options: isDropdown ? buildOptionsToLabelAndValue(fieldData) : undefined,
|
|
6035
6053
|
value: getValueForField(formikFieldProps.value),
|
|
6036
|
-
dirty: dirty,
|
|
6037
6054
|
label: !individualSubmit && capitalize$1(name),
|
|
6038
6055
|
disabled: disabled
|
|
6039
6056
|
})
|
|
@@ -6099,8 +6116,9 @@ var MultiOption = function MultiOption(props) {
|
|
|
6099
6116
|
var Number$1 = function Number(props) {
|
|
6100
6117
|
var _useFormikFields = useFormikFields(props),
|
|
6101
6118
|
handleSubmit = _useFormikFields.handleSubmit,
|
|
6102
|
-
fieldProps = _useFormikFields.fieldProps
|
|
6103
|
-
|
|
6119
|
+
fieldProps = _useFormikFields.fieldProps,
|
|
6120
|
+
dirty = _useFormikFields.dirty;
|
|
6121
|
+
var showSubmitButton = props.individualSubmit && dirty;
|
|
6104
6122
|
return /*#__PURE__*/React.createElement(Input, _extends({}, fieldProps, {
|
|
6105
6123
|
type: "number",
|
|
6106
6124
|
suffix: showSubmitButton && /*#__PURE__*/React.createElement(Button, {
|
|
@@ -6121,7 +6139,11 @@ var RangePicker = function RangePicker(props) {
|
|
|
6121
6139
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
6122
6140
|
begin = _ref2[0],
|
|
6123
6141
|
end = _ref2[1];
|
|
6124
|
-
|
|
6142
|
+
if (begin && end) {
|
|
6143
|
+
handleSubmit([dateTimeToString(begin), dateTimeToString(end)]);
|
|
6144
|
+
} else {
|
|
6145
|
+
handleSubmit([]);
|
|
6146
|
+
}
|
|
6125
6147
|
};
|
|
6126
6148
|
if (props.kind === KINDS.dateRange) {
|
|
6127
6149
|
return /*#__PURE__*/React.createElement(DatePicker, _extends({}, fieldProps, {
|
|
@@ -6144,11 +6166,11 @@ var SingleOption = function SingleOption(props) {
|
|
|
6144
6166
|
handleSubmit = _useFormikFields.handleSubmit,
|
|
6145
6167
|
fieldProps = _useFormikFields.fieldProps;
|
|
6146
6168
|
return /*#__PURE__*/React.createElement(Select, _extends({
|
|
6169
|
+
isClearable: true,
|
|
6147
6170
|
isSearchable: true
|
|
6148
6171
|
}, fieldProps, {
|
|
6149
|
-
onChange: function onChange(
|
|
6150
|
-
|
|
6151
|
-
return handleSubmit(value);
|
|
6172
|
+
onChange: function onChange(option) {
|
|
6173
|
+
return handleSubmit((option === null || option === void 0 ? void 0 : option.value) || "");
|
|
6152
6174
|
}
|
|
6153
6175
|
}));
|
|
6154
6176
|
};
|
|
@@ -6156,8 +6178,9 @@ var SingleOption = function SingleOption(props) {
|
|
|
6156
6178
|
var Text = function Text(props) {
|
|
6157
6179
|
var _useFormikFields = useFormikFields(props),
|
|
6158
6180
|
handleSubmit = _useFormikFields.handleSubmit,
|
|
6159
|
-
fieldProps = _useFormikFields.fieldProps
|
|
6160
|
-
|
|
6181
|
+
fieldProps = _useFormikFields.fieldProps,
|
|
6182
|
+
dirty = _useFormikFields.dirty;
|
|
6183
|
+
var showSubmitButton = props.individualSubmit && dirty;
|
|
6161
6184
|
return /*#__PURE__*/React.createElement(Input, _extends({}, fieldProps, {
|
|
6162
6185
|
suffix: showSubmitButton && /*#__PURE__*/React.createElement(Button, {
|
|
6163
6186
|
icon: Check,
|
|
@@ -6174,8 +6197,9 @@ var TextArea = function TextArea(props) {
|
|
|
6174
6197
|
t = _useTranslation.t;
|
|
6175
6198
|
var _useFormikFields = useFormikFields(props),
|
|
6176
6199
|
handleSubmit = _useFormikFields.handleSubmit,
|
|
6177
|
-
fieldProps = _useFormikFields.fieldProps
|
|
6178
|
-
|
|
6200
|
+
fieldProps = _useFormikFields.fieldProps,
|
|
6201
|
+
dirty = _useFormikFields.dirty;
|
|
6202
|
+
var showSubmitButton = props.individualSubmit && dirty;
|
|
6179
6203
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Textarea, fieldProps), showSubmitButton && /*#__PURE__*/React.createElement(Button, {
|
|
6180
6204
|
className: "m-auto mt-2",
|
|
6181
6205
|
label: t("labels.submit"),
|
|
@@ -6242,26 +6266,46 @@ var transformValues = function transformValues(_ref2) {
|
|
|
6242
6266
|
fieldValuesAttributes: cleanedFieldValues
|
|
6243
6267
|
});
|
|
6244
6268
|
};
|
|
6245
|
-
var
|
|
6246
|
-
|
|
6269
|
+
var getDefaultInitialValue = function getDefaultInitialValue(kind) {
|
|
6270
|
+
switch (kind) {
|
|
6271
|
+
case KINDS.checkbox:
|
|
6272
|
+
return false;
|
|
6273
|
+
case KINDS.multiOption:
|
|
6274
|
+
case KINDS.dateRange:
|
|
6275
|
+
case KINDS.timeRange:
|
|
6276
|
+
return [];
|
|
6277
|
+
default:
|
|
6278
|
+
return "";
|
|
6279
|
+
}
|
|
6280
|
+
};
|
|
6281
|
+
var getInitialFieldValue = function getInitialFieldValue(_ref4) {
|
|
6282
|
+
var field = _ref4.field,
|
|
6283
|
+
_ref4$fieldValues = _ref4.fieldValues,
|
|
6284
|
+
fieldValues = _ref4$fieldValues === void 0 ? [] : _ref4$fieldValues,
|
|
6285
|
+
_ref4$isIndividualFie = _ref4.isIndividualFieldForm,
|
|
6286
|
+
isIndividualFieldForm = _ref4$isIndividualFie === void 0 ? false : _ref4$isIndividualFie;
|
|
6247
6287
|
var existingFieldValueData = findBy({
|
|
6248
6288
|
fieldId: field.id
|
|
6249
6289
|
}, fieldValues);
|
|
6290
|
+
var keyInData = field.kind === KINDS.multiOption ? "values" : "value";
|
|
6250
6291
|
var newFieldValueData = {
|
|
6251
6292
|
fieldId: field.id,
|
|
6252
|
-
data: null
|
|
6293
|
+
data: isIndividualFieldForm ? _defineProperty({}, keyInData, getDefaultInitialValue(field.kind)) : null
|
|
6253
6294
|
};
|
|
6254
6295
|
return _defineProperty({}, escapeString("".concat(field.name, "-").concat(field.id)), existingFieldValueData || newFieldValueData);
|
|
6255
6296
|
};
|
|
6256
6297
|
var getAllInitialFieldValues = function getAllInitialFieldValues(fields) {
|
|
6257
6298
|
var fieldValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
6258
6299
|
return getNonSystemFields(fields).map(function (field) {
|
|
6259
|
-
return getInitialFieldValue(
|
|
6300
|
+
return getInitialFieldValue({
|
|
6301
|
+
field: field,
|
|
6302
|
+
fieldValues: fieldValues
|
|
6303
|
+
});
|
|
6260
6304
|
});
|
|
6261
6305
|
};
|
|
6262
|
-
var mergeInitialValues = function mergeInitialValues(
|
|
6263
|
-
var initialValues =
|
|
6264
|
-
fields =
|
|
6306
|
+
var mergeInitialValues = function mergeInitialValues(_ref7) {
|
|
6307
|
+
var initialValues = _ref7.initialValues,
|
|
6308
|
+
fields = _ref7.fields;
|
|
6265
6309
|
var initialValue = mergeAll([initialValues].concat(_toConsumableArray(getAllInitialFieldValues(fields, initialValues === null || initialValues === void 0 ? void 0 : initialValues.fieldValues))));
|
|
6266
6310
|
return omit(["fieldValues"], initialValue);
|
|
6267
6311
|
};
|
|
@@ -6582,7 +6626,7 @@ var FIELD_KINDS = {
|
|
|
6582
6626
|
single_option: {
|
|
6583
6627
|
value: "single_option",
|
|
6584
6628
|
label: t$1("fields.kinds.singleOption"),
|
|
6585
|
-
group:
|
|
6629
|
+
group: 12
|
|
6586
6630
|
},
|
|
6587
6631
|
multi_option: {
|
|
6588
6632
|
value: "multi_option",
|
|
@@ -11991,7 +12035,11 @@ var FieldValueInputWrapper = function FieldValueInputWrapper(_ref) {
|
|
|
11991
12035
|
scrollToErrorField: true,
|
|
11992
12036
|
className: classnames("flex w-full", className),
|
|
11993
12037
|
formikProps: {
|
|
11994
|
-
initialValues: getInitialFieldValue(
|
|
12038
|
+
initialValues: getInitialFieldValue({
|
|
12039
|
+
field: field,
|
|
12040
|
+
fieldValues: fieldValues,
|
|
12041
|
+
isIndividualFieldForm: true
|
|
12042
|
+
}),
|
|
11995
12043
|
onSubmit: onSubmit,
|
|
11996
12044
|
enableReinitialize: true
|
|
11997
12045
|
}
|