@bigbinary/neeto-filters-frontend 2.11.19 → 2.12.0
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 +29 -0
- package/dist/index.cjs.js +113 -29
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +114 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/types.d.ts +16 -0
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import React, { useContext, useState, useRef, useEffect, useCallback, useMemo } from 'react';
|
|
2
2
|
import classnames from 'classnames';
|
|
3
|
-
import { removeBy, findBy, isNotEmpty, humanize, noop as noop$2, toLabelAndValue, replaceBy, isPresent, existsBy, filterBy } from '@bigbinary/neeto-commons-frontend/pure';
|
|
3
|
+
import { capitalize as capitalize$1, removeBy, findBy, isNotEmpty, humanize, noop as noop$2, toLabelAndValue, replaceBy, isPresent, existsBy, filterBy } from '@bigbinary/neeto-commons-frontend/pure';
|
|
4
4
|
import { Tooltip, Typography, Dropdown as Dropdown$2, Button, Pane as Pane$1, Alert, Select, DatePicker, TimePicker, Input as Input$1, Accordion, Spinner } from '@bigbinary/neetoui';
|
|
5
|
-
import { groupBy, anyPass, isNil, isEmpty, any, mergeLeft, identity, omit, mergeRight, concat, pluck, either, has as has$1, toPairs, equals, pick, modify, prop, isNotNil, append, last } from 'ramda';
|
|
5
|
+
import { groupBy, anyPass, isNil, isEmpty, any, mergeLeft, identity, omit, mergeRight, concat, pluck, either, has as has$1, toPairs, equals, pick, modify, prop, isNotNil, append, last, not } from 'ramda';
|
|
6
6
|
import { useHistory, useLocation } from 'react-router-dom';
|
|
7
7
|
import { useHotKeys, useDebounce } from '@bigbinary/neeto-commons-frontend/react-utils';
|
|
8
8
|
import { Close, Search, Check, MenuHorizontal, Down, Settings } from '@bigbinary/neeto-icons';
|
|
9
|
+
import dayjs from 'dayjs';
|
|
9
10
|
import { getQueryParams, dateFormat } from '@bigbinary/neeto-commons-frontend/utils';
|
|
10
11
|
import * as yup from 'yup';
|
|
11
|
-
import dayjs from 'dayjs';
|
|
12
12
|
import timezone from 'dayjs/plugin/timezone';
|
|
13
13
|
import utc from 'dayjs/plugin/utc';
|
|
14
14
|
import weekday from 'dayjs/plugin/weekday';
|
|
@@ -3360,6 +3360,12 @@ var DATE_OPTIONS = [{
|
|
|
3360
3360
|
}, {
|
|
3361
3361
|
label: "All time",
|
|
3362
3362
|
value: "all-time"
|
|
3363
|
+
}, {
|
|
3364
|
+
label: "After",
|
|
3365
|
+
value: "after"
|
|
3366
|
+
}, {
|
|
3367
|
+
label: "Before",
|
|
3368
|
+
value: "before"
|
|
3363
3369
|
}, {
|
|
3364
3370
|
label: "Custom date range",
|
|
3365
3371
|
value: "custom-date-range"
|
|
@@ -3504,28 +3510,28 @@ var groupByGroup = groupBy(function (_ref) {
|
|
|
3504
3510
|
return group || "individual";
|
|
3505
3511
|
});
|
|
3506
3512
|
var isBoolean = function isBoolean(type) {
|
|
3507
|
-
return type === "boolean";
|
|
3513
|
+
return type === "boolean" || type === "custom.boolean";
|
|
3508
3514
|
};
|
|
3509
3515
|
var isDate = function isDate(type) {
|
|
3510
|
-
return type === "date";
|
|
3516
|
+
return type === "date" || type === "custom.date";
|
|
3511
3517
|
};
|
|
3512
3518
|
var isSingleDate = function isSingleDate(type) {
|
|
3513
|
-
return type === "single_date";
|
|
3519
|
+
return type === "single_date" || type === "custom.single_date";
|
|
3514
3520
|
};
|
|
3515
3521
|
var isSingleTime = function isSingleTime(type) {
|
|
3516
|
-
return type === "single_time";
|
|
3522
|
+
return type === "single_time" || type === "custom.single_time";
|
|
3517
3523
|
};
|
|
3518
3524
|
var isTime = function isTime(type) {
|
|
3519
|
-
return type === "time";
|
|
3525
|
+
return type === "time" || type === "custom.time";
|
|
3520
3526
|
};
|
|
3521
3527
|
var isMulti = function isMulti(type) {
|
|
3522
|
-
return type === "multi_option";
|
|
3528
|
+
return type === "multi_option" || type === "custom.multi_option";
|
|
3523
3529
|
};
|
|
3524
3530
|
var isText = function isText(type) {
|
|
3525
|
-
return type === "text";
|
|
3531
|
+
return type === "text" || type === "custom.text";
|
|
3526
3532
|
};
|
|
3527
3533
|
var isDigit = function isDigit(type) {
|
|
3528
|
-
return type === "number" || type === "decimal";
|
|
3534
|
+
return type === "number" || type === "decimal" || type === "custom.number";
|
|
3529
3535
|
};
|
|
3530
3536
|
var isCustomDateRange = function isCustomDateRange(value) {
|
|
3531
3537
|
return !pluck("value", DATE_OPTIONS).includes(value);
|
|
@@ -3586,7 +3592,7 @@ var splitFilter = function splitFilter(multiColumnFilter) {
|
|
|
3586
3592
|
var buildDateValue = function buildDateValue(_ref6) {
|
|
3587
3593
|
var value = _ref6.value;
|
|
3588
3594
|
var rule = DATE_RULES[value] || "between";
|
|
3589
|
-
var dateValue =
|
|
3595
|
+
var dateValue = ["before", "after", "custom-date-range"].includes(value) ? "" : value;
|
|
3590
3596
|
return {
|
|
3591
3597
|
value: dateValue,
|
|
3592
3598
|
rule: rule,
|
|
@@ -4038,7 +4044,47 @@ var buildUrlFromSegment = function buildUrlFromSegment(_ref19) {
|
|
|
4038
4044
|
var getKeywordValueFromUrl = function getKeywordValueFromUrl() {
|
|
4039
4045
|
return getQueryParams()["keyword"] || "";
|
|
4040
4046
|
};
|
|
4047
|
+
var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(fields) {
|
|
4048
|
+
var selectedFields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
4049
|
+
if (isEmpty(selectedFields)) {
|
|
4050
|
+
return fields.map(function (field) {
|
|
4051
|
+
var id = field.id,
|
|
4052
|
+
name = field.name,
|
|
4053
|
+
kind = field.kind;
|
|
4054
|
+
return {
|
|
4055
|
+
key: name,
|
|
4056
|
+
node: "".concat(name, ":").concat(id),
|
|
4057
|
+
label: capitalize$1(name),
|
|
4058
|
+
type: "custom.".concat(kind)
|
|
4059
|
+
};
|
|
4060
|
+
});
|
|
4061
|
+
}
|
|
4062
|
+
return fields.reduce(function (columns, field) {
|
|
4063
|
+
if (selectedFields.includes(field.name)) {
|
|
4064
|
+
var id = field.id,
|
|
4065
|
+
name = field.name,
|
|
4066
|
+
kind = field.kind;
|
|
4067
|
+
columns.push({
|
|
4068
|
+
key: name,
|
|
4069
|
+
node: "".concat(name, ":").concat(id),
|
|
4070
|
+
label: capitalize$1(name),
|
|
4071
|
+
type: "custom.".concat(kind)
|
|
4072
|
+
});
|
|
4073
|
+
}
|
|
4074
|
+
return columns;
|
|
4075
|
+
}, []);
|
|
4076
|
+
};
|
|
4041
4077
|
|
|
4078
|
+
var buildCustomDateValue = function buildCustomDateValue(value) {
|
|
4079
|
+
var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
|
|
4080
|
+
if (isBeforeOrAfter) {
|
|
4081
|
+
var currentMoment = dayjs();
|
|
4082
|
+
var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
|
|
4083
|
+
var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
|
|
4084
|
+
return diffWithStart < diffWithEnd ? "after-".concat(dateFormat.date(dayjs(value[0]).subtract(1, "day"))) : "before-".concat(dateFormat.date(dayjs(value[1]).add(1, "day")));
|
|
4085
|
+
}
|
|
4086
|
+
return value.map(dateFormat.date).join(" - ");
|
|
4087
|
+
};
|
|
4042
4088
|
var buildFilterValue = function buildFilterValue(filter) {
|
|
4043
4089
|
var _findBy2;
|
|
4044
4090
|
var _filter$defaultType = filter.defaultType,
|
|
@@ -4051,7 +4097,7 @@ var buildFilterValue = function buildFilterValue(filter) {
|
|
|
4051
4097
|
return value.toString();
|
|
4052
4098
|
}));
|
|
4053
4099
|
if (isDate(defaultType) && isCustomDateRange(value)) {
|
|
4054
|
-
return value
|
|
4100
|
+
return buildCustomDateValue(value);
|
|
4055
4101
|
} else if (isTime(defaultType) && isCustomTimeRange(value)) {
|
|
4056
4102
|
return value.map(dateFormat.time).join(" - ");
|
|
4057
4103
|
} else if (isDate(defaultType) || isTime(defaultType)) {
|
|
@@ -7101,13 +7147,6 @@ var buildDropdownValue = function buildDropdownValue(_ref) {
|
|
|
7101
7147
|
value: filter.value
|
|
7102
7148
|
}, options);
|
|
7103
7149
|
};
|
|
7104
|
-
var buildDatetimeValue = function buildDatetimeValue(filter) {
|
|
7105
|
-
var _findBy;
|
|
7106
|
-
if (!filter) return null;
|
|
7107
|
-
return (_findBy = findBy({
|
|
7108
|
-
value: filter.value
|
|
7109
|
-
}, DATE_OPTIONS)) !== null && _findBy !== void 0 ? _findBy : last(DATE_OPTIONS);
|
|
7110
|
-
};
|
|
7111
7150
|
var buildSingleTimeValue = function buildSingleTimeValue(filter) {
|
|
7112
7151
|
var _findBy2;
|
|
7113
7152
|
if (!filter) return null;
|
|
@@ -7144,6 +7183,44 @@ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
|
|
|
7144
7183
|
}
|
|
7145
7184
|
return options;
|
|
7146
7185
|
};
|
|
7186
|
+
var initializeDateRule = function initializeDateRule(filter) {
|
|
7187
|
+
return filter ? findBy({
|
|
7188
|
+
value: filter === null || filter === void 0 ? void 0 : filter.value
|
|
7189
|
+
}, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
|
|
7190
|
+
};
|
|
7191
|
+
var getDateValue = function getDateValue(value, rule) {
|
|
7192
|
+
if (isEmpty(value) || isNil(value)) {
|
|
7193
|
+
return null;
|
|
7194
|
+
}
|
|
7195
|
+
if (rule.value === "custom-date-range") {
|
|
7196
|
+
return value;
|
|
7197
|
+
}
|
|
7198
|
+
return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
|
|
7199
|
+
};
|
|
7200
|
+
var findDateOption = function findDateOption(filter, options) {
|
|
7201
|
+
var value = filter.value;
|
|
7202
|
+
var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
|
|
7203
|
+
if (not(isBeforeOrAfter)) {
|
|
7204
|
+
return last(options);
|
|
7205
|
+
}
|
|
7206
|
+
var currentMoment = dayjs();
|
|
7207
|
+
var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
|
|
7208
|
+
var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
|
|
7209
|
+
var returnOption = diffWithStart < diffWithEnd ? findBy({
|
|
7210
|
+
value: "after"
|
|
7211
|
+
}, options) : findBy({
|
|
7212
|
+
value: "before"
|
|
7213
|
+
}, options);
|
|
7214
|
+
return returnOption;
|
|
7215
|
+
};
|
|
7216
|
+
var buildDateValues = function buildDateValues(dates, selectedRule) {
|
|
7217
|
+
if (selectedRule.value === "after") {
|
|
7218
|
+
return [dates.add(1, "day"), dates.add(100, "year")];
|
|
7219
|
+
} else if (selectedRule.value === "before") {
|
|
7220
|
+
return [dates.subtract(100, "year"), dates.subtract(1, "day")];
|
|
7221
|
+
}
|
|
7222
|
+
return dates;
|
|
7223
|
+
};
|
|
7147
7224
|
|
|
7148
7225
|
var Boolean$1 = function Boolean(_ref) {
|
|
7149
7226
|
var column = _ref.column,
|
|
@@ -7199,22 +7276,27 @@ var Datetime = function Datetime(_ref) {
|
|
|
7199
7276
|
filter = _ref.filter,
|
|
7200
7277
|
handleApplyFilter = _ref.handleApplyFilter,
|
|
7201
7278
|
autoFocus = _ref.autoFocus;
|
|
7279
|
+
var _useState = useState(initializeDateRule(filter)),
|
|
7280
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
7281
|
+
selectedRule = _useState2[0],
|
|
7282
|
+
setSelectedRule = _useState2[1];
|
|
7283
|
+
var _useTranslation = useTranslation(),
|
|
7284
|
+
t = _useTranslation.t;
|
|
7202
7285
|
var key = column.key,
|
|
7203
7286
|
_column$defaultType = column.defaultType,
|
|
7204
7287
|
defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
|
|
7205
7288
|
label = column.label;
|
|
7289
|
+
var isDatePickerShown = filter && isCustomDateRange(filter.value);
|
|
7206
7290
|
var otherProps = getOtherProps(column);
|
|
7207
|
-
var value = buildDatetimeValue(filter);
|
|
7208
|
-
var isCustomDateRangeShown = filter && isCustomDateRange(filter.value);
|
|
7209
|
-
var _useTranslation = useTranslation(),
|
|
7210
|
-
t = _useTranslation.t;
|
|
7211
7291
|
var handleChange = function handleChange(option) {
|
|
7212
7292
|
if (isEmpty(option) || isNil(option)) {
|
|
7213
7293
|
handleApplyFilter({
|
|
7214
7294
|
_delete: true
|
|
7215
7295
|
});
|
|
7296
|
+
setSelectedRule({});
|
|
7216
7297
|
return;
|
|
7217
7298
|
}
|
|
7299
|
+
setSelectedRule(option);
|
|
7218
7300
|
var updatedFilter = buildUpdatedFilter({
|
|
7219
7301
|
column: column,
|
|
7220
7302
|
defaultType: defaultType,
|
|
@@ -7227,13 +7309,14 @@ var Datetime = function Datetime(_ref) {
|
|
|
7227
7309
|
handleApplyFilter({
|
|
7228
7310
|
_delete: true
|
|
7229
7311
|
});
|
|
7312
|
+
setSelectedRule({});
|
|
7230
7313
|
return;
|
|
7231
7314
|
}
|
|
7232
7315
|
var updatedFilter = buildUpdatedFilter({
|
|
7233
7316
|
column: column,
|
|
7234
7317
|
defaultType: defaultType,
|
|
7235
7318
|
option: {
|
|
7236
|
-
value: pluck("$d", dates).map(function (date) {
|
|
7319
|
+
value: pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
|
|
7237
7320
|
return date.toISOString();
|
|
7238
7321
|
})
|
|
7239
7322
|
}
|
|
@@ -7249,15 +7332,15 @@ var Datetime = function Datetime(_ref) {
|
|
|
7249
7332
|
label: label,
|
|
7250
7333
|
options: DATE_OPTIONS,
|
|
7251
7334
|
strategy: "fixed",
|
|
7252
|
-
value:
|
|
7335
|
+
value: selectedRule,
|
|
7253
7336
|
placeholder: t("messages.selectResource", {
|
|
7254
7337
|
resource: label.toLocaleLowerCase()
|
|
7255
7338
|
}),
|
|
7256
7339
|
onChange: handleChange
|
|
7257
|
-
}),
|
|
7340
|
+
}), isDatePickerShown && /*#__PURE__*/React.createElement(DatePicker, _extends$1({
|
|
7258
7341
|
"data-cy": "neeto-filters-".concat(key, "-date-range"),
|
|
7259
|
-
type: "range",
|
|
7260
|
-
value: filter.value,
|
|
7342
|
+
type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
|
|
7343
|
+
value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
|
|
7261
7344
|
onChange: handleDateRangeChange
|
|
7262
7345
|
}, otherProps)));
|
|
7263
7346
|
};
|
|
@@ -7506,7 +7589,7 @@ var Text = function Text(_ref) {
|
|
|
7506
7589
|
var ruleOptions = buildRuleOptions({
|
|
7507
7590
|
defaultType: defaultType
|
|
7508
7591
|
});
|
|
7509
|
-
var inputType = defaultType === "text" ? "text" : "number";
|
|
7592
|
+
var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
|
|
7510
7593
|
var _useState = useState(filter === null || filter === void 0 ? void 0 : filter.value),
|
|
7511
7594
|
_useState2 = _slicedToArray(_useState, 2),
|
|
7512
7595
|
inputValue = _useState2[0],
|
|
@@ -8361,5 +8444,5 @@ instance.use(initReactI18next).init({
|
|
|
8361
8444
|
}
|
|
8362
8445
|
});
|
|
8363
8446
|
|
|
8364
|
-
export { Bar, Filters, index as Segments, buildFiltersFromURL, buildSelectorsFromURL };
|
|
8447
|
+
export { Bar, Filters, index as Segments, buildFilterColumnsFromFields, buildFiltersFromURL, buildSelectorsFromURL };
|
|
8365
8448
|
//# sourceMappingURL=index.js.map
|