@teselagen/ui 0.5.21-beta.4 → 0.5.21-beta.6

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/index.cjs.js CHANGED
@@ -46742,12 +46742,14 @@ const FilterAndSortMenu = /* @__PURE__ */ __name(({
46742
46742
  );
46743
46743
  const [filterValue, setFilterValue] = React$1.useState("");
46744
46744
  const handleFilterChange = /* @__PURE__ */ __name((selectedFilter2) => {
46745
- if (filterValue && !Array.isArray(filterValue) && filterTypesDictionary[selectedFilter2] === "list") {
46746
- setFilterValue((filterValue == null ? void 0 : filterValue.split(" ")) || []);
46747
- } else if (filterTypesDictionary[selectedFilter2] === "text" && Array.isArray(filterValue)) {
46748
- setFilterValue(filterValue.join(" "));
46749
- }
46750
- setSelectedFilter(camelCase(selectedFilter2));
46745
+ require$$2$1.flushSync(() => {
46746
+ if (filterValue && !Array.isArray(filterValue) && filterTypesDictionary[selectedFilter2] === "list") {
46747
+ setFilterValue((filterValue == null ? void 0 : filterValue.split(" ")) || []);
46748
+ } else if (filterTypesDictionary[selectedFilter2] === "text" && Array.isArray(filterValue)) {
46749
+ setFilterValue(filterValue.join(" "));
46750
+ }
46751
+ setSelectedFilter(camelCase(selectedFilter2));
46752
+ });
46751
46753
  }, "handleFilterChange");
46752
46754
  const handleFilterValueChange = /* @__PURE__ */ __name((filterValue2) => setFilterValue(filterValue2), "handleFilterValueChange");
46753
46755
  const handleFilterSubmit = /* @__PURE__ */ __name(() => {
@@ -47057,7 +47059,7 @@ const ColumnFilterMenu = /* @__PURE__ */ __name(({
47057
47059
  {
47058
47060
  style: { marginLeft: 5 },
47059
47061
  icon: "filter",
47060
- iconSize: extraCompact ? 14 : void 0,
47062
+ size: extraCompact ? 14 : void 0,
47061
47063
  onClick: () => setColumnFilterMenuOpen((prev) => !prev),
47062
47064
  className: classNames("tg-filter-menu-button", {
47063
47065
  "tg-active-filter": !!filterActiveForColumn
@@ -48395,57 +48397,81 @@ const DataTable = /* @__PURE__ */ __name((_G) => {
48395
48397
  reduxFormSearchInput,
48396
48398
  urlConnected
48397
48399
  ]);
48398
- if (!isTableParamsConnected) {
48399
- const updateSearch = /* @__PURE__ */ __name((val) => {
48400
- change("reduxFormSearchInput", val || "");
48401
- }, "updateSearch");
48402
- const setNewParams2 = /* @__PURE__ */ __name((newParams) => {
48403
- urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
48404
- change("reduxFormQueryParams", newParams);
48405
- }, "setNewParams2");
48406
- const bindThese = makeDataTableHandlers({
48407
- setNewParams: setNewParams2,
48408
- updateSearch,
48409
- defaults: props.defaults,
48410
- onlyOneFilter: props.onlyOneFilter
48411
- });
48412
- const boundDispatchProps = {};
48413
- Object.keys(bindThese).forEach(function(key) {
48414
- const action = bindThese[key];
48415
- boundDispatchProps[key] = function(...args) {
48416
- action(...args, currentParams);
48417
- };
48418
- });
48419
- const changeFormValue = /* @__PURE__ */ __name((...args) => change(...args), "changeFormValue");
48420
- props.tableParams = __spreadProps(__spreadValues(__spreadValues(__spreadValues({
48421
- changeFormValue,
48422
- selectedEntities
48423
- }, _tableParams), props), boundDispatchProps), {
48424
- isTableParamsConnected: true
48425
- //let the table know not to do local sorting/filtering etc.
48426
- });
48427
- }
48428
- props = __spreadValues(__spreadValues({}, props), props.tableParams);
48429
- if (!isTableParamsConnected) {
48430
- const additionalFilterToUse = typeof props.additionalFilter === "function" ? props.additionalFilter.bind(void 0, ownProps) : () => props.additionalFilter;
48431
- const additionalOrFilterToUse = typeof props.additionalOrFilter === "function" ? props.additionalOrFilter.bind(void 0, ownProps) : () => props.additionalOrFilter;
48432
- props = __spreadValues(__spreadValues({}, props), getQueryParams({
48433
- doNotCoercePageSize,
48434
- currentParams,
48435
- entities: props.entities,
48436
- // for local table
48437
- urlConnected,
48438
- defaults: props.defaults,
48439
- schema: convertedSchema,
48440
- isInfinite,
48441
- isLocalCall,
48442
- additionalFilter: additionalFilterToUse,
48443
- additionalOrFilter: additionalOrFilterToUse,
48444
- noOrderError: props.noOrderError,
48445
- isCodeModel: props.isCodeModel,
48446
- ownProps: props
48447
- }));
48448
- }
48400
+ const tableParams = React$1.useMemo(() => {
48401
+ if (!isTableParamsConnected) {
48402
+ const updateSearch = /* @__PURE__ */ __name((val) => {
48403
+ change("reduxFormSearchInput", val || "");
48404
+ }, "updateSearch");
48405
+ const setNewParams2 = /* @__PURE__ */ __name((newParams) => {
48406
+ urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
48407
+ change("reduxFormQueryParams", newParams);
48408
+ }, "setNewParams2");
48409
+ const bindThese = makeDataTableHandlers({
48410
+ setNewParams: setNewParams2,
48411
+ updateSearch,
48412
+ defaults: props.defaults,
48413
+ onlyOneFilter: props.onlyOneFilter
48414
+ });
48415
+ const boundDispatchProps = {};
48416
+ Object.keys(bindThese).forEach(function(key) {
48417
+ const action = bindThese[key];
48418
+ boundDispatchProps[key] = function(...args) {
48419
+ action(...args, currentParams);
48420
+ };
48421
+ });
48422
+ const changeFormValue = /* @__PURE__ */ __name((...args) => change(...args), "changeFormValue");
48423
+ return __spreadProps(__spreadValues(__spreadValues(__spreadValues({
48424
+ changeFormValue,
48425
+ selectedEntities
48426
+ }, _tableParams), props), boundDispatchProps), {
48427
+ isTableParamsConnected: true
48428
+ //let the table know not to do local sorting/filtering etc.
48429
+ });
48430
+ }
48431
+ return _tableParams;
48432
+ }, [
48433
+ _tableParams,
48434
+ change,
48435
+ currentParams,
48436
+ history.replace,
48437
+ isTableParamsConnected,
48438
+ props,
48439
+ selectedEntities,
48440
+ urlConnected
48441
+ ]);
48442
+ props = __spreadValues(__spreadValues({}, props), tableParams);
48443
+ const queryParams = React$1.useMemo(() => {
48444
+ if (!isTableParamsConnected) {
48445
+ const additionalFilterToUse = typeof props.additionalFilter === "function" ? props.additionalFilter.bind(void 0, ownProps) : () => props.additionalFilter;
48446
+ const additionalOrFilterToUse = typeof props.additionalOrFilter === "function" ? props.additionalOrFilter.bind(void 0, ownProps) : () => props.additionalOrFilter;
48447
+ return getQueryParams({
48448
+ doNotCoercePageSize,
48449
+ currentParams,
48450
+ entities: props.entities,
48451
+ // for local table
48452
+ urlConnected,
48453
+ defaults: props.defaults,
48454
+ schema: convertedSchema,
48455
+ isInfinite,
48456
+ isLocalCall,
48457
+ additionalFilter: additionalFilterToUse,
48458
+ additionalOrFilter: additionalOrFilterToUse,
48459
+ noOrderError: props.noOrderError,
48460
+ isCodeModel: props.isCodeModel,
48461
+ ownProps: props
48462
+ });
48463
+ }
48464
+ return {};
48465
+ }, [
48466
+ convertedSchema,
48467
+ currentParams,
48468
+ doNotCoercePageSize,
48469
+ isInfinite,
48470
+ isLocalCall,
48471
+ isTableParamsConnected,
48472
+ urlConnected
48473
+ ]);
48474
+ props = __spreadValues(__spreadValues({}, props), queryParams);
48449
48475
  const {
48450
48476
  addFilters = noop$3,
48451
48477
  additionalFilters,
@@ -63264,11 +63290,13 @@ const Uploader = /* @__PURE__ */ __name(({
63264
63290
  const [loading, setLoading] = React$1.useState(false);
63265
63291
  const filesToClean = React$1.useRef([]);
63266
63292
  const onChange = /* @__PURE__ */ __name((val) => {
63267
- if (noRedux) {
63268
- return _onChange(val);
63269
- }
63270
- dispatch(reduxForm.touch(formName, name));
63271
- return dispatch(reduxForm.change(formName, name, val));
63293
+ require$$2$1.flushSync(() => {
63294
+ if (noRedux) {
63295
+ return _onChange(val);
63296
+ }
63297
+ dispatch(reduxForm.touch(formName, name));
63298
+ dispatch(reduxForm.change(formName, name, val));
63299
+ });
63272
63300
  }, "onChange");
63273
63301
  const handleSecondHalfOfUpload = /* @__PURE__ */ __name((_0) => __async(exports, [_0], function* ({
63274
63302
  acceptedFiles,
@@ -64431,22 +64459,13 @@ function withTableParams(compOrOpts, pTopLevelOpts) {
64431
64459
  const mergedOpts = getMergedOpts(topLevelOptions, ownProps);
64432
64460
  const { formName, urlConnected, history, defaults: defaults2, onlyOneFilter } = mergedOpts;
64433
64461
  function updateSearch(val) {
64434
- setTimeout(function() {
64435
- dispatch(reduxForm.change(formName, "reduxFormSearchInput", val || ""));
64436
- });
64462
+ dispatch(reduxForm.change(formName, "reduxFormSearchInput", val || ""));
64437
64463
  }
64438
64464
  __name(updateSearch, "updateSearch");
64439
- let setNewParams;
64440
- if (urlConnected) {
64441
- setNewParams = /* @__PURE__ */ __name(function(newParams) {
64442
- setCurrentParamsOnUrl(newParams, history.replace);
64443
- dispatch(reduxForm.change(formName, "reduxFormQueryParams", newParams));
64444
- }, "setNewParams");
64445
- } else {
64446
- setNewParams = /* @__PURE__ */ __name(function(newParams) {
64447
- dispatch(reduxForm.change(formName, "reduxFormQueryParams", newParams));
64448
- }, "setNewParams");
64449
- }
64465
+ const setNewParams = /* @__PURE__ */ __name((newParams) => {
64466
+ urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
64467
+ dispatch(reduxForm.change(formName, "reduxFormQueryParams", newParams));
64468
+ }, "setNewParams");
64450
64469
  return {
64451
64470
  bindThese: makeDataTableHandlers({
64452
64471
  setNewParams,
package/index.es.js CHANGED
@@ -60,7 +60,7 @@ import * as React$1 from "react";
60
60
  import React__default, { useState, useEffect, forwardRef, useImperativeHandle, Fragment, useMemo, useRef, useReducer, useCallback, createElement, Component, useLayoutEffect, createContext, memo, useContext, isValidElement, PureComponent, createPortal as createPortal$1 } from "react";
61
61
  import { Icon, Classes, Button, Intent, Keys, MenuItem, Tag, Popover, Tooltip, Spinner, InputGroup, Checkbox, Switch, TextArea, EditableText, NumericInput, RadioGroup, Position, FormGroup, Menu, Toaster, MenuDivider, useHotkeys, ContextMenu, Callout, Dialog, Card, Tabs, Tab, Colors, Overlay, KeyCombo, ProgressBar } from "@blueprintjs/core";
62
62
  import { formValueSelector, Field, change, reduxForm, SubmissionError, destroy, initialize, touch, FormName, Fields } from "redux-form";
63
- import require$$2$1, { unstable_batchedUpdates, createPortal } from "react-dom";
63
+ import require$$2$1, { unstable_batchedUpdates, createPortal, flushSync } from "react-dom";
64
64
  import { connect, useDispatch, useSelector, useStore } from "react-redux";
65
65
  import { DateInput, DateRangeInput } from "@blueprintjs/datetime";
66
66
  import { getCreateNewItem, MultiSelect, Suggest } from "@blueprintjs/select";
@@ -46724,12 +46724,14 @@ const FilterAndSortMenu = /* @__PURE__ */ __name(({
46724
46724
  );
46725
46725
  const [filterValue, setFilterValue] = useState("");
46726
46726
  const handleFilterChange = /* @__PURE__ */ __name((selectedFilter2) => {
46727
- if (filterValue && !Array.isArray(filterValue) && filterTypesDictionary[selectedFilter2] === "list") {
46728
- setFilterValue((filterValue == null ? void 0 : filterValue.split(" ")) || []);
46729
- } else if (filterTypesDictionary[selectedFilter2] === "text" && Array.isArray(filterValue)) {
46730
- setFilterValue(filterValue.join(" "));
46731
- }
46732
- setSelectedFilter(camelCase(selectedFilter2));
46727
+ flushSync(() => {
46728
+ if (filterValue && !Array.isArray(filterValue) && filterTypesDictionary[selectedFilter2] === "list") {
46729
+ setFilterValue((filterValue == null ? void 0 : filterValue.split(" ")) || []);
46730
+ } else if (filterTypesDictionary[selectedFilter2] === "text" && Array.isArray(filterValue)) {
46731
+ setFilterValue(filterValue.join(" "));
46732
+ }
46733
+ setSelectedFilter(camelCase(selectedFilter2));
46734
+ });
46733
46735
  }, "handleFilterChange");
46734
46736
  const handleFilterValueChange = /* @__PURE__ */ __name((filterValue2) => setFilterValue(filterValue2), "handleFilterValueChange");
46735
46737
  const handleFilterSubmit = /* @__PURE__ */ __name(() => {
@@ -47039,7 +47041,7 @@ const ColumnFilterMenu = /* @__PURE__ */ __name(({
47039
47041
  {
47040
47042
  style: { marginLeft: 5 },
47041
47043
  icon: "filter",
47042
- iconSize: extraCompact ? 14 : void 0,
47044
+ size: extraCompact ? 14 : void 0,
47043
47045
  onClick: () => setColumnFilterMenuOpen((prev) => !prev),
47044
47046
  className: classNames("tg-filter-menu-button", {
47045
47047
  "tg-active-filter": !!filterActiveForColumn
@@ -48377,57 +48379,81 @@ const DataTable = /* @__PURE__ */ __name((_G) => {
48377
48379
  reduxFormSearchInput,
48378
48380
  urlConnected
48379
48381
  ]);
48380
- if (!isTableParamsConnected) {
48381
- const updateSearch = /* @__PURE__ */ __name((val) => {
48382
- change2("reduxFormSearchInput", val || "");
48383
- }, "updateSearch");
48384
- const setNewParams2 = /* @__PURE__ */ __name((newParams) => {
48385
- urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
48386
- change2("reduxFormQueryParams", newParams);
48387
- }, "setNewParams2");
48388
- const bindThese = makeDataTableHandlers({
48389
- setNewParams: setNewParams2,
48390
- updateSearch,
48391
- defaults: props.defaults,
48392
- onlyOneFilter: props.onlyOneFilter
48393
- });
48394
- const boundDispatchProps = {};
48395
- Object.keys(bindThese).forEach(function(key) {
48396
- const action = bindThese[key];
48397
- boundDispatchProps[key] = function(...args) {
48398
- action(...args, currentParams);
48399
- };
48400
- });
48401
- const changeFormValue = /* @__PURE__ */ __name((...args) => change2(...args), "changeFormValue");
48402
- props.tableParams = __spreadProps(__spreadValues(__spreadValues(__spreadValues({
48403
- changeFormValue,
48404
- selectedEntities
48405
- }, _tableParams), props), boundDispatchProps), {
48406
- isTableParamsConnected: true
48407
- //let the table know not to do local sorting/filtering etc.
48408
- });
48409
- }
48410
- props = __spreadValues(__spreadValues({}, props), props.tableParams);
48411
- if (!isTableParamsConnected) {
48412
- const additionalFilterToUse = typeof props.additionalFilter === "function" ? props.additionalFilter.bind(void 0, ownProps) : () => props.additionalFilter;
48413
- const additionalOrFilterToUse = typeof props.additionalOrFilter === "function" ? props.additionalOrFilter.bind(void 0, ownProps) : () => props.additionalOrFilter;
48414
- props = __spreadValues(__spreadValues({}, props), getQueryParams({
48415
- doNotCoercePageSize,
48416
- currentParams,
48417
- entities: props.entities,
48418
- // for local table
48419
- urlConnected,
48420
- defaults: props.defaults,
48421
- schema: convertedSchema,
48422
- isInfinite,
48423
- isLocalCall,
48424
- additionalFilter: additionalFilterToUse,
48425
- additionalOrFilter: additionalOrFilterToUse,
48426
- noOrderError: props.noOrderError,
48427
- isCodeModel: props.isCodeModel,
48428
- ownProps: props
48429
- }));
48430
- }
48382
+ const tableParams = useMemo(() => {
48383
+ if (!isTableParamsConnected) {
48384
+ const updateSearch = /* @__PURE__ */ __name((val) => {
48385
+ change2("reduxFormSearchInput", val || "");
48386
+ }, "updateSearch");
48387
+ const setNewParams2 = /* @__PURE__ */ __name((newParams) => {
48388
+ urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
48389
+ change2("reduxFormQueryParams", newParams);
48390
+ }, "setNewParams2");
48391
+ const bindThese = makeDataTableHandlers({
48392
+ setNewParams: setNewParams2,
48393
+ updateSearch,
48394
+ defaults: props.defaults,
48395
+ onlyOneFilter: props.onlyOneFilter
48396
+ });
48397
+ const boundDispatchProps = {};
48398
+ Object.keys(bindThese).forEach(function(key) {
48399
+ const action = bindThese[key];
48400
+ boundDispatchProps[key] = function(...args) {
48401
+ action(...args, currentParams);
48402
+ };
48403
+ });
48404
+ const changeFormValue = /* @__PURE__ */ __name((...args) => change2(...args), "changeFormValue");
48405
+ return __spreadProps(__spreadValues(__spreadValues(__spreadValues({
48406
+ changeFormValue,
48407
+ selectedEntities
48408
+ }, _tableParams), props), boundDispatchProps), {
48409
+ isTableParamsConnected: true
48410
+ //let the table know not to do local sorting/filtering etc.
48411
+ });
48412
+ }
48413
+ return _tableParams;
48414
+ }, [
48415
+ _tableParams,
48416
+ change2,
48417
+ currentParams,
48418
+ history.replace,
48419
+ isTableParamsConnected,
48420
+ props,
48421
+ selectedEntities,
48422
+ urlConnected
48423
+ ]);
48424
+ props = __spreadValues(__spreadValues({}, props), tableParams);
48425
+ const queryParams = useMemo(() => {
48426
+ if (!isTableParamsConnected) {
48427
+ const additionalFilterToUse = typeof props.additionalFilter === "function" ? props.additionalFilter.bind(void 0, ownProps) : () => props.additionalFilter;
48428
+ const additionalOrFilterToUse = typeof props.additionalOrFilter === "function" ? props.additionalOrFilter.bind(void 0, ownProps) : () => props.additionalOrFilter;
48429
+ return getQueryParams({
48430
+ doNotCoercePageSize,
48431
+ currentParams,
48432
+ entities: props.entities,
48433
+ // for local table
48434
+ urlConnected,
48435
+ defaults: props.defaults,
48436
+ schema: convertedSchema,
48437
+ isInfinite,
48438
+ isLocalCall,
48439
+ additionalFilter: additionalFilterToUse,
48440
+ additionalOrFilter: additionalOrFilterToUse,
48441
+ noOrderError: props.noOrderError,
48442
+ isCodeModel: props.isCodeModel,
48443
+ ownProps: props
48444
+ });
48445
+ }
48446
+ return {};
48447
+ }, [
48448
+ convertedSchema,
48449
+ currentParams,
48450
+ doNotCoercePageSize,
48451
+ isInfinite,
48452
+ isLocalCall,
48453
+ isTableParamsConnected,
48454
+ urlConnected
48455
+ ]);
48456
+ props = __spreadValues(__spreadValues({}, props), queryParams);
48431
48457
  const {
48432
48458
  addFilters = noop$3,
48433
48459
  additionalFilters,
@@ -63246,11 +63272,13 @@ const Uploader = /* @__PURE__ */ __name(({
63246
63272
  const [loading, setLoading] = useState(false);
63247
63273
  const filesToClean = useRef([]);
63248
63274
  const onChange = /* @__PURE__ */ __name((val) => {
63249
- if (noRedux) {
63250
- return _onChange(val);
63251
- }
63252
- dispatch(touch(formName, name));
63253
- return dispatch(change(formName, name, val));
63275
+ flushSync(() => {
63276
+ if (noRedux) {
63277
+ return _onChange(val);
63278
+ }
63279
+ dispatch(touch(formName, name));
63280
+ dispatch(change(formName, name, val));
63281
+ });
63254
63282
  }, "onChange");
63255
63283
  const handleSecondHalfOfUpload = /* @__PURE__ */ __name((_0) => __async(void 0, [_0], function* ({
63256
63284
  acceptedFiles,
@@ -64413,22 +64441,13 @@ function withTableParams(compOrOpts, pTopLevelOpts) {
64413
64441
  const mergedOpts = getMergedOpts(topLevelOptions, ownProps);
64414
64442
  const { formName, urlConnected, history, defaults: defaults2, onlyOneFilter } = mergedOpts;
64415
64443
  function updateSearch(val) {
64416
- setTimeout(function() {
64417
- dispatch(change(formName, "reduxFormSearchInput", val || ""));
64418
- });
64444
+ dispatch(change(formName, "reduxFormSearchInput", val || ""));
64419
64445
  }
64420
64446
  __name(updateSearch, "updateSearch");
64421
- let setNewParams;
64422
- if (urlConnected) {
64423
- setNewParams = /* @__PURE__ */ __name(function(newParams) {
64424
- setCurrentParamsOnUrl(newParams, history.replace);
64425
- dispatch(change(formName, "reduxFormQueryParams", newParams));
64426
- }, "setNewParams");
64427
- } else {
64428
- setNewParams = /* @__PURE__ */ __name(function(newParams) {
64429
- dispatch(change(formName, "reduxFormQueryParams", newParams));
64430
- }, "setNewParams");
64431
- }
64447
+ const setNewParams = /* @__PURE__ */ __name((newParams) => {
64448
+ urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
64449
+ dispatch(change(formName, "reduxFormQueryParams", newParams));
64450
+ }, "setNewParams");
64432
64451
  return {
64433
64452
  bindThese: makeDataTableHandlers({
64434
64453
  setNewParams,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/ui",
3
- "version": "0.5.21-beta.4",
3
+ "version": "0.5.21-beta.6",
4
4
  "main": "./src/index.js",
5
5
  "exports": {
6
6
  ".": {
@@ -49,7 +49,7 @@ export const ColumnFilterMenu = ({
49
49
  <Icon
50
50
  style={{ marginLeft: 5 }}
51
51
  icon="filter"
52
- iconSize={extraCompact ? 14 : undefined}
52
+ size={extraCompact ? 14 : undefined}
53
53
  onClick={() => setColumnFilterMenuOpen(prev => !prev)}
54
54
  className={classNames("tg-filter-menu-button", {
55
55
  "tg-active-filter": !!filterActiveForColumn
@@ -1,4 +1,5 @@
1
1
  import React, { useState } from "react";
2
+ import { flushSync } from "react-dom";
2
3
  import { DateInput, DateRangeInput } from "@blueprintjs/datetime";
3
4
  import { camelCase } from "lodash-es";
4
5
  import classNames from "classnames";
@@ -68,19 +69,21 @@ const FilterAndSortMenu = ({
68
69
  const [filterValue, setFilterValue] = useState("");
69
70
 
70
71
  const handleFilterChange = selectedFilter => {
71
- if (
72
- filterValue &&
73
- !Array.isArray(filterValue) &&
74
- filterTypesDictionary[selectedFilter] === "list"
75
- ) {
76
- setFilterValue(filterValue?.split(" ") || []);
77
- } else if (
78
- filterTypesDictionary[selectedFilter] === "text" &&
79
- Array.isArray(filterValue)
80
- ) {
81
- setFilterValue(filterValue.join(" "));
82
- }
83
- setSelectedFilter(camelCase(selectedFilter));
72
+ flushSync(() => {
73
+ if (
74
+ filterValue &&
75
+ !Array.isArray(filterValue) &&
76
+ filterTypesDictionary[selectedFilter] === "list"
77
+ ) {
78
+ setFilterValue(filterValue?.split(" ") || []);
79
+ } else if (
80
+ filterTypesDictionary[selectedFilter] === "text" &&
81
+ Array.isArray(filterValue)
82
+ ) {
83
+ setFilterValue(filterValue.join(" "));
84
+ }
85
+ setSelectedFilter(camelCase(selectedFilter));
86
+ });
84
87
  };
85
88
 
86
89
  const handleFilterValueChange = filterValue => setFilterValue(filterValue);
@@ -278,63 +278,74 @@ const DataTable = ({
278
278
  urlConnected
279
279
  ]);
280
280
 
281
- if (!isTableParamsConnected) {
282
- const updateSearch = val => {
283
- change("reduxFormSearchInput", val || "");
284
- };
281
+ const tableParams = useMemo(() => {
282
+ if (!isTableParamsConnected) {
283
+ const updateSearch = val => {
284
+ change("reduxFormSearchInput", val || "");
285
+ };
285
286
 
286
- const setNewParams = newParams => {
287
- urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
288
- change("reduxFormQueryParams", newParams); //we always will update the redux params as a workaround for withRouter not always working if inside a redux-connected container https://github.com/ReactTraining/react-router/issues/5037
289
- };
287
+ const setNewParams = newParams => {
288
+ urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
289
+ change("reduxFormQueryParams", newParams); //we always will update the redux params as a workaround for withRouter not always working if inside a redux-connected container https://github.com/ReactTraining/react-router/issues/5037
290
+ };
290
291
 
291
- const bindThese = makeDataTableHandlers({
292
- setNewParams,
293
- updateSearch,
294
- defaults: props.defaults,
295
- onlyOneFilter: props.onlyOneFilter
296
- });
292
+ const bindThese = makeDataTableHandlers({
293
+ setNewParams,
294
+ updateSearch,
295
+ defaults: props.defaults,
296
+ onlyOneFilter: props.onlyOneFilter
297
+ });
297
298
 
298
- const boundDispatchProps = {};
299
- //bind currentParams to actions
300
- Object.keys(bindThese).forEach(function (key) {
301
- const action = bindThese[key];
302
- boundDispatchProps[key] = function (...args) {
303
- action(...args, currentParams);
304
- };
305
- });
299
+ const boundDispatchProps = {};
300
+ //bind currentParams to actions
301
+ Object.keys(bindThese).forEach(function (key) {
302
+ const action = bindThese[key];
303
+ boundDispatchProps[key] = function (...args) {
304
+ action(...args, currentParams);
305
+ };
306
+ });
306
307
 
307
- const changeFormValue = (...args) => change(...args);
308
+ const changeFormValue = (...args) => change(...args);
308
309
 
309
- props.tableParams = {
310
- changeFormValue,
311
- selectedEntities,
312
- ..._tableParams,
313
- ...props,
314
- ...boundDispatchProps,
315
- isTableParamsConnected: true //let the table know not to do local sorting/filtering etc.
316
- };
317
- }
310
+ return {
311
+ changeFormValue,
312
+ selectedEntities,
313
+ ..._tableParams,
314
+ ...props,
315
+ ...boundDispatchProps,
316
+ isTableParamsConnected: true //let the table know not to do local sorting/filtering etc.
317
+ };
318
+ }
319
+ return _tableParams;
320
+ }, [
321
+ _tableParams,
322
+ change,
323
+ currentParams,
324
+ history.replace,
325
+ isTableParamsConnected,
326
+ props,
327
+ selectedEntities,
328
+ urlConnected
329
+ ]);
318
330
 
319
331
  props = {
320
332
  ...props,
321
- ...props.tableParams
333
+ ...tableParams
322
334
  };
323
335
 
324
- if (!isTableParamsConnected) {
325
- const additionalFilterToUse =
326
- typeof props.additionalFilter === "function"
327
- ? props.additionalFilter.bind(this, ownProps)
328
- : () => props.additionalFilter;
336
+ const queryParams = useMemo(() => {
337
+ if (!isTableParamsConnected) {
338
+ const additionalFilterToUse =
339
+ typeof props.additionalFilter === "function"
340
+ ? props.additionalFilter.bind(this, ownProps)
341
+ : () => props.additionalFilter;
329
342
 
330
- const additionalOrFilterToUse =
331
- typeof props.additionalOrFilter === "function"
332
- ? props.additionalOrFilter.bind(this, ownProps)
333
- : () => props.additionalOrFilter;
343
+ const additionalOrFilterToUse =
344
+ typeof props.additionalOrFilter === "function"
345
+ ? props.additionalOrFilter.bind(this, ownProps)
346
+ : () => props.additionalOrFilter;
334
347
 
335
- props = {
336
- ...props,
337
- ...getQueryParams({
348
+ return getQueryParams({
338
349
  doNotCoercePageSize,
339
350
  currentParams,
340
351
  entities: props.entities, // for local table
@@ -348,9 +359,24 @@ const DataTable = ({
348
359
  noOrderError: props.noOrderError,
349
360
  isCodeModel: props.isCodeModel,
350
361
  ownProps: props
351
- })
352
- };
353
- }
362
+ });
363
+ }
364
+ return {};
365
+ // eslint-disable-next-line react-hooks/exhaustive-deps
366
+ }, [
367
+ convertedSchema,
368
+ currentParams,
369
+ doNotCoercePageSize,
370
+ isInfinite,
371
+ isLocalCall,
372
+ isTableParamsConnected,
373
+ urlConnected
374
+ ]);
375
+
376
+ props = {
377
+ ...props,
378
+ ...queryParams
379
+ };
354
380
 
355
381
  const {
356
382
  addFilters = noop,
@@ -182,22 +182,13 @@ export default function withTableParams(compOrOpts, pTopLevelOpts) {
182
182
  mergedOpts;
183
183
 
184
184
  function updateSearch(val) {
185
- setTimeout(function () {
186
- dispatch(change(formName, "reduxFormSearchInput", val || ""));
187
- });
185
+ dispatch(change(formName, "reduxFormSearchInput", val || ""));
188
186
  }
189
187
 
190
- let setNewParams;
191
- if (urlConnected) {
192
- setNewParams = function (newParams) {
193
- setCurrentParamsOnUrl(newParams, history.replace);
194
- dispatch(change(formName, "reduxFormQueryParams", newParams)); //we always will update the redux params as a workaround for withRouter not always working if inside a redux-connected container https://github.com/ReactTraining/react-router/issues/5037
195
- };
196
- } else {
197
- setNewParams = function (newParams) {
198
- dispatch(change(formName, "reduxFormQueryParams", newParams));
199
- };
200
- }
188
+ const setNewParams = newParams => {
189
+ urlConnected && setCurrentParamsOnUrl(newParams, history.replace);
190
+ dispatch(change(formName, "reduxFormQueryParams", newParams)); //we always will update the redux params as a workaround for withRouter not always working if inside a redux-connected container https://github.com/ReactTraining/react-router/issues/5037
191
+ };
201
192
  return {
202
193
  bindThese: makeDataTableHandlers({
203
194
  setNewParams,
@@ -41,6 +41,7 @@ import classNames from "classnames";
41
41
  import convertSchema from "../DataTable/utils/convertSchema";
42
42
  import { LoadingDots } from "./LoadingDots";
43
43
  import { useDispatch } from "react-redux";
44
+ import { flushSync } from "react-dom";
44
45
 
45
46
  const manualEnterMessage = "Build CSV File";
46
47
  const manualEnterSubMessage = "Paste or type data to build a CSV file";
@@ -249,11 +250,13 @@ const Uploader = ({
249
250
  // onChange received from redux-form is not working anymore,
250
251
  // so we need to overwrite it for redux to works.
251
252
  const onChange = val => {
252
- if (noRedux) {
253
- return _onChange(val);
254
- }
255
- dispatch(touch(formName, name));
256
- return dispatch(change(formName, name, val));
253
+ flushSync(() => {
254
+ if (noRedux) {
255
+ return _onChange(val);
256
+ }
257
+ dispatch(touch(formName, name));
258
+ dispatch(change(formName, name, val));
259
+ });
257
260
  };
258
261
 
259
262
  const handleSecondHalfOfUpload = async ({