@vuu-ui/vuu-filters 0.8.14-debug → 0.8.15-debug
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/cjs/index.js +521 -127
- package/cjs/index.js.map +4 -4
- package/esm/index.js +514 -109
- package/esm/index.js.map +4 -4
- package/index.css +16 -18
- package/index.css.map +2 -2
- package/package.json +10 -10
- package/types/vuu-data/src/array-data-source/aggregate-utils.d.ts +8 -0
- package/types/vuu-data/src/array-data-source/array-data-source.d.ts +84 -0
- package/types/vuu-data/src/array-data-source/array-data-utils.d.ts +5 -0
- package/types/vuu-data/src/array-data-source/group-utils.d.ts +10 -0
- package/types/vuu-data/src/array-data-source/sort-utils.d.ts +4 -0
- package/types/vuu-data/src/authenticate.d.ts +1 -0
- package/types/vuu-data/src/connection-manager.d.ts +50 -0
- package/types/vuu-data/src/connectionTypes.d.ts +5 -0
- package/types/vuu-data/src/constants.d.ts +41 -0
- package/types/vuu-data/src/data-source.d.ts +237 -0
- package/types/vuu-data/src/index.d.ts +10 -0
- package/types/vuu-data/src/inlined-worker.d.ts +1 -0
- package/types/vuu-data/src/json-data-source.d.ts +56 -0
- package/types/vuu-data/src/message-utils.d.ts +28 -0
- package/types/vuu-data/src/remote-data-source.d.ts +65 -0
- package/types/vuu-data/src/server-proxy/messages.d.ts +38 -0
- package/types/vuu-data/src/vuuUIMessageTypes.d.ts +228 -0
- package/types/vuu-data/src/websocket-connection.d.ts +25 -0
- package/types/vuu-filters/src/filter-bar/FilterBarMenu.d.ts +2 -0
- package/types/{filter-bar → vuu-filters/src/filter-bar}/useFilterBar.d.ts +10 -5
- package/types/vuu-filters/src/filter-bar/useFilterBarMenu.d.ts +5 -0
- package/types/{filter-bar → vuu-filters/src/filter-bar}/useFilters.d.ts +3 -1
- package/types/{filter-builder-menu → vuu-filters/src/filter-builder-menu}/FilterBuilderMenu.d.ts +3 -1
- package/types/{filter-clause → vuu-filters/src/filter-clause}/FilterClauseEditor.d.ts +6 -2
- package/types/{filter-clause → vuu-filters/src/filter-clause}/TextInput.d.ts +1 -0
- package/types/{filter-clause → vuu-filters/src/filter-clause}/filterClauseTypes.d.ts +4 -1
- package/types/{filter-clause → vuu-filters/src/filter-clause}/useFilterClauseEditor.d.ts +9 -3
- package/types/{filter-pill → vuu-filters/src/filter-pill}/FilterPill.d.ts +1 -1
- package/types/vuu-filters/src/filter-pill/filterAsReactNode.d.ts +3 -0
- package/types/{filter-utils.d.ts → vuu-filters/src/filter-utils.d.ts} +2 -1
- /package/types/{column-filter → vuu-filters/src/column-filter}/utils.d.ts +0 -0
- /package/types/{filter-bar → vuu-filters/src/filter-bar}/FilterBar.d.ts +0 -0
- /package/types/{filter-bar → vuu-filters/src/filter-bar}/index.d.ts +0 -0
- /package/types/{filter-builder-menu → vuu-filters/src/filter-builder-menu}/index.d.ts +0 -0
- /package/types/{filter-clause → vuu-filters/src/filter-clause}/ExpandoCombobox.d.ts +0 -0
- /package/types/{filter-clause → vuu-filters/src/filter-clause}/FilterMenu.d.ts +0 -0
- /package/types/{filter-clause → vuu-filters/src/filter-clause}/FilterMenuOptions.d.ts +0 -0
- /package/types/{filter-clause → vuu-filters/src/filter-clause}/NumericInput.d.ts +0 -0
- /package/types/{filter-clause → vuu-filters/src/filter-clause}/index.d.ts +0 -0
- /package/types/{filter-clause → vuu-filters/src/filter-clause}/operator-utils.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/FilterInput.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/FilterLanguage.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/filterInfo.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/highlighting.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/index.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/theme.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/useCodeMirrorEditor.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/useFilterAutoComplete.d.ts +0 -0
- /package/types/{filter-input → vuu-filters/src/filter-input}/useFilterSuggestionProvider.d.ts +0 -0
- /package/types/{filter-pill → vuu-filters/src/filter-pill}/index.d.ts +0 -0
- /package/types/{filter-pill-menu → vuu-filters/src/filter-pill-menu}/FilterPillMenu.d.ts +0 -0
- /package/types/{filter-pill-menu → vuu-filters/src/filter-pill-menu}/FilterPillMenuOptions.d.ts +0 -0
- /package/types/{filter-pill-menu → vuu-filters/src/filter-pill-menu}/index.d.ts +0 -0
- /package/types/{index.d.ts → vuu-filters/src/index.d.ts} +0 -0
- /package/types/{local-config.d.ts → vuu-filters/src/local-config.d.ts} +0 -0
- /package/types/{use-filter-config.d.ts → vuu-filters/src/use-filter-config.d.ts} +0 -0
- /package/types/{use-rest-config.d.ts → vuu-filters/src/use-rest-config.d.ts} +0 -0
package/cjs/index.js
CHANGED
|
@@ -128,6 +128,7 @@ __export(src_exports, {
|
|
|
128
128
|
getTypeaheadFilter: () => getTypeaheadFilter,
|
|
129
129
|
overrideColName: () => overrideColName,
|
|
130
130
|
removeFilter: () => removeFilter,
|
|
131
|
+
removeLastClause: () => removeLastClause,
|
|
131
132
|
replaceClause: () => replaceClause,
|
|
132
133
|
saveLocalEntity: () => saveLocalEntity,
|
|
133
134
|
splitFilterOnColumn: () => splitFilterOnColumn,
|
|
@@ -2081,7 +2082,7 @@ var View = (0, import_react32.forwardRef)(function View2(props, forwardedRef) {
|
|
|
2081
2082
|
title: titleProp,
|
|
2082
2083
|
...restProps
|
|
2083
2084
|
} = props;
|
|
2084
|
-
const id = (
|
|
2085
|
+
const id = useId(idProp);
|
|
2085
2086
|
const rootRef = (0, import_react32.useRef)(null);
|
|
2086
2087
|
const mainRef = (0, import_react32.useRef)(null);
|
|
2087
2088
|
const [componentProps, _setComponentProps] = (0, import_react32.useState)();
|
|
@@ -2352,7 +2353,7 @@ var LocalLayoutPersistenceManager = class {
|
|
|
2352
2353
|
const newMetadata = {
|
|
2353
2354
|
...metadata,
|
|
2354
2355
|
id,
|
|
2355
|
-
created: (0, import_vuu_utils9.formatDate)(/* @__PURE__ */ new Date()
|
|
2356
|
+
created: (0, import_vuu_utils9.formatDate)("dd.mm.yyyy")(/* @__PURE__ */ new Date())
|
|
2356
2357
|
};
|
|
2357
2358
|
this.saveLayoutsWithMetadata(
|
|
2358
2359
|
[...existingLayouts, { id, json: layout }],
|
|
@@ -2618,6 +2619,7 @@ var import_react42 = __toESM(require("react"));
|
|
|
2618
2619
|
var import_vuu_popups2 = require("@vuu-ui/vuu-popups");
|
|
2619
2620
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2620
2621
|
var LayoutManagementContext = import_react42.default.createContext({
|
|
2622
|
+
getApplicationSettings: () => void 0,
|
|
2621
2623
|
layoutMetadata: [],
|
|
2622
2624
|
saveLayout: () => void 0,
|
|
2623
2625
|
// The default Application JSON will be served if no LayoutManagementProvider
|
|
@@ -2626,6 +2628,7 @@ var LayoutManagementContext = import_react42.default.createContext({
|
|
|
2626
2628
|
saveApplicationSettings: () => void 0,
|
|
2627
2629
|
loadLayoutById: () => void 0
|
|
2628
2630
|
});
|
|
2631
|
+
var useLayoutManager = () => (0, import_react42.useContext)(LayoutManagementContext);
|
|
2629
2632
|
|
|
2630
2633
|
// ../vuu-shell/src/layout-management/LayoutList.tsx
|
|
2631
2634
|
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
@@ -3712,7 +3715,7 @@ var PaletteItem = (0, import_react59.memo)(
|
|
|
3712
3715
|
);
|
|
3713
3716
|
PaletteItem.displayName = "PaletteItem";
|
|
3714
3717
|
var Palette = ({
|
|
3715
|
-
ListProps:
|
|
3718
|
+
ListProps: ListProps3,
|
|
3716
3719
|
ViewProps: ViewProps4,
|
|
3717
3720
|
children,
|
|
3718
3721
|
className,
|
|
@@ -3771,7 +3774,7 @@ var Palette = ({
|
|
|
3771
3774
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
3772
3775
|
import_vuu_ui_controls7.List,
|
|
3773
3776
|
{
|
|
3774
|
-
...
|
|
3777
|
+
...ListProps3,
|
|
3775
3778
|
...props,
|
|
3776
3779
|
className: (0, import_classnames24.default)(classBase21, className, `${classBase21}-${orientation}`),
|
|
3777
3780
|
itemHeight,
|
|
@@ -3792,7 +3795,7 @@ var import_vuu_ui_controls8 = require("@vuu-ui/vuu-ui-controls");
|
|
|
3792
3795
|
var import_classnames25 = __toESM(require_classnames());
|
|
3793
3796
|
var import_react60 = __toESM(require("react"));
|
|
3794
3797
|
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
3795
|
-
var classBase12 = "
|
|
3798
|
+
var classBase12 = "vuuTabs";
|
|
3796
3799
|
var getDefaultTabIcon = () => void 0;
|
|
3797
3800
|
var getChildElements = (children) => {
|
|
3798
3801
|
const elements = [];
|
|
@@ -4632,10 +4635,10 @@ var import_vuu_ui_controls11 = require("@vuu-ui/vuu-ui-controls");
|
|
|
4632
4635
|
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
4633
4636
|
|
|
4634
4637
|
// src/filter-bar/FilterBar.tsx
|
|
4635
|
-
var
|
|
4638
|
+
var import_vuu_popups8 = require("@vuu-ui/vuu-popups");
|
|
4636
4639
|
var import_core19 = require("@salt-ds/core");
|
|
4637
4640
|
var import_classnames32 = __toESM(require_classnames(), 1);
|
|
4638
|
-
var
|
|
4641
|
+
var import_react79 = require("react");
|
|
4639
4642
|
|
|
4640
4643
|
// src/filter-builder-menu/FilterBuilderMenu.tsx
|
|
4641
4644
|
var import_react68 = require("react");
|
|
@@ -4643,7 +4646,10 @@ var import_vuu_popups5 = require("@vuu-ui/vuu-popups");
|
|
|
4643
4646
|
var import_vuu_ui_controls12 = require("@vuu-ui/vuu-ui-controls");
|
|
4644
4647
|
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
4645
4648
|
var classBase14 = "vuuFilterBuilderMenu";
|
|
4646
|
-
var FilterBuilderMenu = ({
|
|
4649
|
+
var FilterBuilderMenu = ({
|
|
4650
|
+
ListProps: ListProps3,
|
|
4651
|
+
onMenuAction
|
|
4652
|
+
}) => {
|
|
4647
4653
|
const ref = (0, import_react68.useRef)(null);
|
|
4648
4654
|
const listRef = (0, import_react68.useCallback)((el) => {
|
|
4649
4655
|
if (el) {
|
|
@@ -4666,15 +4672,16 @@ var FilterBuilderMenu = ({ onMenuAction }) => {
|
|
|
4666
4672
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_vuu_popups5.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_vuu_popups5.PopupComponent, { anchorElement: ref, placement: "right", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
4667
4673
|
import_vuu_ui_controls12.List,
|
|
4668
4674
|
{
|
|
4675
|
+
...ListProps3,
|
|
4669
4676
|
className: `${classBase14}List`,
|
|
4670
|
-
defaultHighlightedIndex:
|
|
4677
|
+
defaultHighlightedIndex: 0,
|
|
4671
4678
|
itemHeight: 22,
|
|
4672
4679
|
ref: listRef,
|
|
4673
4680
|
onSelect: handleSelect,
|
|
4674
4681
|
style: { position: "relative" },
|
|
4675
4682
|
width: 100,
|
|
4676
4683
|
children: [
|
|
4677
|
-
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_vuu_ui_controls12.ListItem, { "data-action": "apply-save", className: "vuuMenuButton", children: "APPLY AND SAVE" }),
|
|
4684
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_vuu_ui_controls12.ListItem, { "data-action": "apply-save", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "vuuMenuButton", children: "APPLY AND SAVE" }) }),
|
|
4678
4685
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_vuu_ui_controls12.ListItem, { "data-action": "and-clause", children: "AND" }),
|
|
4679
4686
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_vuu_ui_controls12.ListItem, { "data-action": "or-clause", children: "OR" })
|
|
4680
4687
|
]
|
|
@@ -4702,7 +4709,6 @@ var ExpandoCombobox = (0, import_react69.forwardRef)(function ExpandoCombobox2({
|
|
|
4702
4709
|
value = "",
|
|
4703
4710
|
...props
|
|
4704
4711
|
}, forwardedRef) {
|
|
4705
|
-
var _a;
|
|
4706
4712
|
const [text, setText] = (0, import_react69.useState)(value);
|
|
4707
4713
|
const { itemToString = import_vuu_utils23.itemToString } = props;
|
|
4708
4714
|
const initialValue = (0, import_react69.useRef)(value);
|
|
@@ -4720,7 +4726,6 @@ var ExpandoCombobox = (0, import_react69.forwardRef)(function ExpandoCombobox2({
|
|
|
4720
4726
|
const handleInputChange = (0, import_react69.useCallback)(
|
|
4721
4727
|
(evt) => {
|
|
4722
4728
|
const { value: value2 } = evt.target;
|
|
4723
|
-
console.log(`onInputChange ${value2}`);
|
|
4724
4729
|
setText(value2);
|
|
4725
4730
|
onInputChange == null ? void 0 : onInputChange(evt);
|
|
4726
4731
|
},
|
|
@@ -4729,7 +4734,7 @@ var ExpandoCombobox = (0, import_react69.forwardRef)(function ExpandoCombobox2({
|
|
|
4729
4734
|
const handleSetSelectedText = (0, import_react69.useCallback)((text2) => {
|
|
4730
4735
|
setText(text2);
|
|
4731
4736
|
}, []);
|
|
4732
|
-
const [InputProps,
|
|
4737
|
+
const [InputProps, ListProps3] = (0, import_react69.useMemo)(() => {
|
|
4733
4738
|
const { inputProps, ...restInputProps } = InputPropsProp;
|
|
4734
4739
|
return [
|
|
4735
4740
|
{
|
|
@@ -4776,7 +4781,7 @@ var ExpandoCombobox = (0, import_react69.forwardRef)(function ExpandoCombobox2({
|
|
|
4776
4781
|
const popupProps = {
|
|
4777
4782
|
minWidth: "fit-content"
|
|
4778
4783
|
};
|
|
4779
|
-
return
|
|
4784
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
4780
4785
|
"div",
|
|
4781
4786
|
{
|
|
4782
4787
|
className: (0, import_classnames28.default)(classBase15, classNameProp),
|
|
@@ -4790,7 +4795,7 @@ var ExpandoCombobox = (0, import_react69.forwardRef)(function ExpandoCombobox2({
|
|
|
4790
4795
|
PopupProps: popupProps,
|
|
4791
4796
|
defaultValue: initialValue.current,
|
|
4792
4797
|
fullWidth: true,
|
|
4793
|
-
ListProps:
|
|
4798
|
+
ListProps: ListProps3,
|
|
4794
4799
|
InputProps,
|
|
4795
4800
|
itemsToString,
|
|
4796
4801
|
onSelectionChange: handleSelectionChange,
|
|
@@ -4875,10 +4880,14 @@ var import_react71 = require("react");
|
|
|
4875
4880
|
var import_vuu_data_react = require("@vuu-ui/vuu-data-react");
|
|
4876
4881
|
var import_vuu_ui_controls15 = require("@vuu-ui/vuu-ui-controls");
|
|
4877
4882
|
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
4883
|
+
var selectionKeys = ["Enter", " "];
|
|
4884
|
+
var NO_DATA_MATCH = ["No matching data"];
|
|
4878
4885
|
var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
4879
4886
|
InputProps: InputPropsProp = {},
|
|
4880
4887
|
className,
|
|
4881
4888
|
column,
|
|
4889
|
+
"data-field": dataField,
|
|
4890
|
+
onDeselect,
|
|
4882
4891
|
onInputComplete,
|
|
4883
4892
|
operator,
|
|
4884
4893
|
suggestionProvider = import_vuu_data_react.useTypeaheadSuggestions,
|
|
@@ -4908,7 +4917,11 @@ var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
|
4908
4917
|
if (table) {
|
|
4909
4918
|
const params = valueInputValue ? [table, column.name, valueInputValue] : [table, column.name];
|
|
4910
4919
|
getSuggestions(params).then((suggestions) => {
|
|
4911
|
-
|
|
4920
|
+
if (suggestions.length === 0 && valueInputValue) {
|
|
4921
|
+
setTypeaheadValues(NO_DATA_MATCH);
|
|
4922
|
+
} else {
|
|
4923
|
+
setTypeaheadValues(suggestions);
|
|
4924
|
+
}
|
|
4912
4925
|
}).catch((err) => {
|
|
4913
4926
|
console.error("Error getting suggestions", err);
|
|
4914
4927
|
});
|
|
@@ -4942,6 +4955,9 @@ var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
|
4942
4955
|
}
|
|
4943
4956
|
}, [InputPropsProp, onInputComplete, operator, valueInputValue]);
|
|
4944
4957
|
const getValueInputField = (0, import_react71.useCallback)(() => {
|
|
4958
|
+
if (typeaheadValues.length === 0) {
|
|
4959
|
+
return null;
|
|
4960
|
+
}
|
|
4945
4961
|
switch (operator) {
|
|
4946
4962
|
case "in":
|
|
4947
4963
|
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
@@ -4949,16 +4965,18 @@ var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
|
4949
4965
|
{
|
|
4950
4966
|
InputProps,
|
|
4951
4967
|
className,
|
|
4968
|
+
"data-field": dataField,
|
|
4952
4969
|
initialHighlightedIndex: 0,
|
|
4953
4970
|
source: typeaheadValues,
|
|
4954
4971
|
onInputChange: handleInputChange,
|
|
4955
4972
|
onSelectionChange: handleMultiValueSelectionChange,
|
|
4956
4973
|
ref: forwardedRef,
|
|
4957
4974
|
selectionStrategy: "multiple",
|
|
4975
|
+
selectionKeys,
|
|
4958
4976
|
value
|
|
4959
4977
|
}
|
|
4960
4978
|
);
|
|
4961
|
-
case "starts":
|
|
4979
|
+
case "starts": {
|
|
4962
4980
|
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
4963
4981
|
ExpandoCombobox,
|
|
4964
4982
|
{
|
|
@@ -4969,7 +4987,9 @@ var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
|
4969
4987
|
},
|
|
4970
4988
|
allowFreeText: true,
|
|
4971
4989
|
className,
|
|
4990
|
+
"data-field": dataField,
|
|
4972
4991
|
initialHighlightedIndex: 0,
|
|
4992
|
+
disableFilter: typeaheadValues === NO_DATA_MATCH && (valueInputValue == null ? void 0 : valueInputValue.length) > 0,
|
|
4973
4993
|
source: typeaheadValues,
|
|
4974
4994
|
onInputChange: handleInputChange,
|
|
4975
4995
|
onSelectionChange: handleSingleValueSelectionChange,
|
|
@@ -4977,12 +4997,14 @@ var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
|
4977
4997
|
value
|
|
4978
4998
|
}
|
|
4979
4999
|
);
|
|
5000
|
+
}
|
|
4980
5001
|
case "ends":
|
|
4981
5002
|
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
4982
5003
|
import_vuu_ui_controls15.ExpandoInput,
|
|
4983
5004
|
{
|
|
4984
5005
|
...InputProps,
|
|
4985
5006
|
className,
|
|
5007
|
+
"data-field": dataField,
|
|
4986
5008
|
value: valueInputValue,
|
|
4987
5009
|
ref: forwardedRef,
|
|
4988
5010
|
onChange: handleInputChange
|
|
@@ -4993,11 +5015,14 @@ var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
|
4993
5015
|
ExpandoCombobox,
|
|
4994
5016
|
{
|
|
4995
5017
|
InputProps,
|
|
5018
|
+
allowBackspaceClearsSelection: true,
|
|
4996
5019
|
className,
|
|
5020
|
+
"data-field": dataField,
|
|
4997
5021
|
initialHighlightedIndex: 0,
|
|
4998
5022
|
source: typeaheadValues,
|
|
4999
5023
|
title: "value",
|
|
5000
5024
|
onInputChange: handleInputChange,
|
|
5025
|
+
onDeselect,
|
|
5001
5026
|
onSelectionChange: handleSingleValueSelectionChange,
|
|
5002
5027
|
ref: forwardedRef,
|
|
5003
5028
|
value
|
|
@@ -5008,13 +5033,15 @@ var TextInput = (0, import_react71.forwardRef)(function TextInput2({
|
|
|
5008
5033
|
operator,
|
|
5009
5034
|
InputProps,
|
|
5010
5035
|
className,
|
|
5036
|
+
dataField,
|
|
5011
5037
|
typeaheadValues,
|
|
5012
5038
|
handleInputChange,
|
|
5013
5039
|
handleMultiValueSelectionChange,
|
|
5014
5040
|
forwardedRef,
|
|
5015
5041
|
value,
|
|
5016
|
-
|
|
5017
|
-
|
|
5042
|
+
valueInputValue,
|
|
5043
|
+
onDeselect,
|
|
5044
|
+
handleSingleValueSelectionChange
|
|
5018
5045
|
]);
|
|
5019
5046
|
return getValueInputField();
|
|
5020
5047
|
});
|
|
@@ -5027,29 +5054,44 @@ var cursorAtTextStart = (input) => input.selectionStart === 0;
|
|
|
5027
5054
|
var cursorAtTextEnd = (input) => input.selectionStart === input.value.length;
|
|
5028
5055
|
var getFieldName = (field) => (field == null ? void 0 : field.classList.contains("vuuFilterClauseColumn")) ? "column" : (field == null ? void 0 : field.classList.contains("vuuFilterClauseOperator")) ? "operator" : "value";
|
|
5029
5056
|
var getFocusedField = () => {
|
|
5030
|
-
|
|
5031
|
-
|
|
5057
|
+
const activeElement = document.activeElement;
|
|
5058
|
+
if (activeElement == null ? void 0 : activeElement.classList.contains("vuuFilterClause-clearButton")) {
|
|
5059
|
+
return activeElement;
|
|
5060
|
+
} else {
|
|
5061
|
+
return activeElement == null ? void 0 : activeElement.closest(".vuuFilterClauseField");
|
|
5062
|
+
}
|
|
5032
5063
|
};
|
|
5033
5064
|
var focusNextFocusableElement = (direction = "fwd") => {
|
|
5034
5065
|
var _a;
|
|
5035
5066
|
const activeField = getFocusedField();
|
|
5036
5067
|
const filterClause = activeField == null ? void 0 : activeField.closest(".vuuFilterClause");
|
|
5037
|
-
if ((filterClause == null ? void 0 : filterClause.lastChild) === activeField) {
|
|
5068
|
+
if (direction === "fwd" && (filterClause == null ? void 0 : filterClause.lastChild) === activeField) {
|
|
5038
5069
|
requestAnimationFrame(() => {
|
|
5039
5070
|
focusNextFocusableElement();
|
|
5040
5071
|
});
|
|
5041
5072
|
} else {
|
|
5042
|
-
const nextField = direction === "fwd" ? activeField.nextElementSibling : activeField.previousElementSibling;
|
|
5073
|
+
const nextField = direction === "fwd" ? activeField == null ? void 0 : activeField.nextElementSibling : activeField == null ? void 0 : activeField.previousElementSibling;
|
|
5043
5074
|
(_a = nextField == null ? void 0 : nextField.querySelector("input")) == null ? void 0 : _a.focus();
|
|
5044
5075
|
}
|
|
5045
5076
|
};
|
|
5077
|
+
var clauseIsNotFirst = (el) => {
|
|
5078
|
+
var _a;
|
|
5079
|
+
const clause = el.closest("[data-index]");
|
|
5080
|
+
if (clause) {
|
|
5081
|
+
const index = clause.dataset.index;
|
|
5082
|
+
const previousClause = (_a = clause == null ? void 0 : clause.parentElement) == null ? void 0 : _a.querySelector(
|
|
5083
|
+
`[data-index]:has(.vuuFilterClause):has(+[data-index="${index}"])`
|
|
5084
|
+
);
|
|
5085
|
+
return previousClause !== null;
|
|
5086
|
+
}
|
|
5087
|
+
};
|
|
5046
5088
|
var focusNextElement = () => {
|
|
5047
5089
|
const filterClauseField = getFocusedField();
|
|
5048
5090
|
const filterClause = filterClauseField == null ? void 0 : filterClauseField.closest(".vuuFilterClause");
|
|
5049
5091
|
if (filterClause && filterClauseField) {
|
|
5050
5092
|
if (filterClauseField.classList.contains("vuuFilterClauseValue")) {
|
|
5051
5093
|
const clearButton = filterClause.querySelector(
|
|
5052
|
-
".vuuFilterClause-
|
|
5094
|
+
".vuuFilterClause-clearButton"
|
|
5053
5095
|
);
|
|
5054
5096
|
clearButton == null ? void 0 : clearButton.focus();
|
|
5055
5097
|
} else {
|
|
@@ -5108,6 +5150,7 @@ var getFilterClauseValue = (filterClause) => {
|
|
|
5108
5150
|
};
|
|
5109
5151
|
var useFilterClauseEditor = ({
|
|
5110
5152
|
filterClause,
|
|
5153
|
+
onCancel,
|
|
5111
5154
|
onChange,
|
|
5112
5155
|
tableSchema
|
|
5113
5156
|
}) => {
|
|
@@ -5118,6 +5161,10 @@ var useFilterClauseEditor = ({
|
|
|
5118
5161
|
const [operator, _setOperator] = (0, import_react72.useState)(
|
|
5119
5162
|
filterClause.op
|
|
5120
5163
|
);
|
|
5164
|
+
const findColumn = (0, import_react72.useCallback)(
|
|
5165
|
+
(columnName) => tableSchema.columns.find((col) => col.name === columnName),
|
|
5166
|
+
[tableSchema.columns]
|
|
5167
|
+
);
|
|
5121
5168
|
const setOperator = (0, import_react72.useCallback)((op) => {
|
|
5122
5169
|
_setOperator(op);
|
|
5123
5170
|
}, []);
|
|
@@ -5129,10 +5176,43 @@ var useFilterClauseEditor = ({
|
|
|
5129
5176
|
setSelectedColumn(column != null ? column : void 0);
|
|
5130
5177
|
setOperator(void 0);
|
|
5131
5178
|
setValue(void 0);
|
|
5132
|
-
|
|
5179
|
+
setTimeout(() => {
|
|
5180
|
+
focusNextElement();
|
|
5181
|
+
}, 100);
|
|
5133
5182
|
},
|
|
5134
5183
|
[setOperator]
|
|
5135
5184
|
);
|
|
5185
|
+
const removeAndNavigateToNextInputIfAtBoundary = (0, import_react72.useCallback)(
|
|
5186
|
+
(evt) => {
|
|
5187
|
+
var _a;
|
|
5188
|
+
const input = evt.target;
|
|
5189
|
+
if (input.value === "") {
|
|
5190
|
+
const field = input.closest(
|
|
5191
|
+
".vuuFilterClauseField,[data-field]"
|
|
5192
|
+
);
|
|
5193
|
+
switch ((_a = field == null ? void 0 : field.dataset) == null ? void 0 : _a.field) {
|
|
5194
|
+
case "operator": {
|
|
5195
|
+
setOperator(void 0);
|
|
5196
|
+
setSelectedColumn(void 0);
|
|
5197
|
+
focusNextFocusableElement("bwd");
|
|
5198
|
+
break;
|
|
5199
|
+
}
|
|
5200
|
+
case "value": {
|
|
5201
|
+
setOperator(void 0);
|
|
5202
|
+
focusNextFocusableElement("bwd");
|
|
5203
|
+
break;
|
|
5204
|
+
}
|
|
5205
|
+
case "column": {
|
|
5206
|
+
if (clauseIsNotFirst(input)) {
|
|
5207
|
+
console.log("This is NOT the first clause");
|
|
5208
|
+
onCancel == null ? void 0 : onCancel("Backspace");
|
|
5209
|
+
}
|
|
5210
|
+
}
|
|
5211
|
+
}
|
|
5212
|
+
}
|
|
5213
|
+
},
|
|
5214
|
+
[onCancel, setOperator]
|
|
5215
|
+
);
|
|
5136
5216
|
const handleSelectionChangeOperator = (0, import_react72.useCallback)(
|
|
5137
5217
|
(evt, selected) => {
|
|
5138
5218
|
const op = selected;
|
|
@@ -5164,27 +5244,75 @@ var useFilterClauseEditor = ({
|
|
|
5164
5244
|
value: value2
|
|
5165
5245
|
});
|
|
5166
5246
|
}
|
|
5167
|
-
requestAnimationFrame(() => {
|
|
5168
|
-
focusNextElement();
|
|
5169
|
-
});
|
|
5170
5247
|
}
|
|
5171
5248
|
},
|
|
5172
5249
|
[onChange, operator, selectedColumn == null ? void 0 : selectedColumn.name]
|
|
5173
5250
|
);
|
|
5251
|
+
const handleDeselectValue = (0, import_react72.useCallback)(() => {
|
|
5252
|
+
setValue(void 0);
|
|
5253
|
+
}, []);
|
|
5174
5254
|
const handleKeyDownInput = (0, import_react72.useCallback)(
|
|
5175
5255
|
(evt) => {
|
|
5176
5256
|
if (["ArrowLeft", "ArrowRight"].includes(evt.key)) {
|
|
5177
5257
|
navigateToNextInputIfAtBoundary(evt);
|
|
5178
|
-
} else if (
|
|
5179
|
-
|
|
5258
|
+
} else if (evt.key === "Backspace") {
|
|
5259
|
+
removeAndNavigateToNextInputIfAtBoundary(evt);
|
|
5260
|
+
} else if (evt.key === "Enter") {
|
|
5261
|
+
const input = evt.target;
|
|
5262
|
+
const field = input.closest("[data-field]");
|
|
5263
|
+
if (field.dataset.field === "column") {
|
|
5264
|
+
const column = findColumn(input.value);
|
|
5265
|
+
if (column) {
|
|
5266
|
+
setSelectedColumn(column);
|
|
5267
|
+
focusNextElement();
|
|
5268
|
+
}
|
|
5269
|
+
} else if (field.dataset.field === "value") {
|
|
5270
|
+
if (operator === "starts") {
|
|
5271
|
+
evt.stopPropagation();
|
|
5272
|
+
const newValue = input.value;
|
|
5273
|
+
setValue(newValue);
|
|
5274
|
+
onChange({
|
|
5275
|
+
column: selectedColumn == null ? void 0 : selectedColumn.name,
|
|
5276
|
+
op: operator,
|
|
5277
|
+
value: newValue
|
|
5278
|
+
});
|
|
5279
|
+
}
|
|
5280
|
+
}
|
|
5180
5281
|
}
|
|
5181
5282
|
},
|
|
5182
|
-
[
|
|
5283
|
+
[
|
|
5284
|
+
findColumn,
|
|
5285
|
+
onChange,
|
|
5286
|
+
operator,
|
|
5287
|
+
removeAndNavigateToNextInputIfAtBoundary,
|
|
5288
|
+
selectedColumn == null ? void 0 : selectedColumn.name
|
|
5289
|
+
]
|
|
5290
|
+
);
|
|
5291
|
+
const handleClear = (0, import_react72.useCallback)(
|
|
5292
|
+
(e) => {
|
|
5293
|
+
var _a;
|
|
5294
|
+
const button = e.target;
|
|
5295
|
+
const firstInput = (_a = button.closest(".vuuFilterClause")) == null ? void 0 : _a.querySelector("input");
|
|
5296
|
+
setSelectedColumn(void 0);
|
|
5297
|
+
setOperator(void 0);
|
|
5298
|
+
setValue(void 0);
|
|
5299
|
+
setTimeout(() => {
|
|
5300
|
+
firstInput.select();
|
|
5301
|
+
firstInput == null ? void 0 : firstInput.focus();
|
|
5302
|
+
}, 100);
|
|
5303
|
+
},
|
|
5304
|
+
[setOperator]
|
|
5183
5305
|
);
|
|
5306
|
+
const handleClearKeyDown = (0, import_react72.useCallback)((e) => {
|
|
5307
|
+
e.stopPropagation();
|
|
5308
|
+
if (e.key === "Backspace") {
|
|
5309
|
+
focusNextFocusableElement("bwd");
|
|
5310
|
+
}
|
|
5311
|
+
}, []);
|
|
5184
5312
|
const InputProps = (0, import_react72.useMemo)(
|
|
5185
5313
|
() => ({
|
|
5186
5314
|
inputProps: {
|
|
5187
|
-
|
|
5315
|
+
onKeyDownCapture: handleKeyDownInput
|
|
5188
5316
|
}
|
|
5189
5317
|
}),
|
|
5190
5318
|
[handleKeyDownInput]
|
|
@@ -5198,6 +5326,9 @@ var useFilterClauseEditor = ({
|
|
|
5198
5326
|
InputProps,
|
|
5199
5327
|
columnRef,
|
|
5200
5328
|
onChangeValue: handleChangeValue,
|
|
5329
|
+
onClear: handleClear,
|
|
5330
|
+
onClearKeyDown: handleClearKeyDown,
|
|
5331
|
+
onDeselectValue: handleDeselectValue,
|
|
5201
5332
|
onSelectionChangeColumn: handleSelectionChangeColumn,
|
|
5202
5333
|
onSelectionChangeOperator: handleSelectionChangeOperator,
|
|
5203
5334
|
operator,
|
|
@@ -5214,8 +5345,10 @@ var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
|
5214
5345
|
var classBase16 = "vuuFilterClause";
|
|
5215
5346
|
var FilterClauseEditor = ({
|
|
5216
5347
|
className,
|
|
5348
|
+
onCancel,
|
|
5217
5349
|
onChange,
|
|
5218
|
-
|
|
5350
|
+
onDropdownClose,
|
|
5351
|
+
onDropdownOpen,
|
|
5219
5352
|
filterClause,
|
|
5220
5353
|
suggestionProvider,
|
|
5221
5354
|
tableSchema,
|
|
@@ -5227,6 +5360,9 @@ var FilterClauseEditor = ({
|
|
|
5227
5360
|
InputProps,
|
|
5228
5361
|
columnRef,
|
|
5229
5362
|
onChangeValue,
|
|
5363
|
+
onClear,
|
|
5364
|
+
onClearKeyDown,
|
|
5365
|
+
onDeselectValue,
|
|
5230
5366
|
onSelectionChangeColumn,
|
|
5231
5367
|
onSelectionChangeOperator,
|
|
5232
5368
|
operator,
|
|
@@ -5236,6 +5372,7 @@ var FilterClauseEditor = ({
|
|
|
5236
5372
|
valueRef
|
|
5237
5373
|
} = useFilterClauseEditor({
|
|
5238
5374
|
filterClause,
|
|
5375
|
+
onCancel,
|
|
5239
5376
|
onChange,
|
|
5240
5377
|
tableSchema
|
|
5241
5378
|
});
|
|
@@ -5252,7 +5389,9 @@ var FilterClauseEditor = ({
|
|
|
5252
5389
|
InputProps,
|
|
5253
5390
|
className: (0, import_classnames29.default)(`${classBase16}Field`, `${classBase16}Value`),
|
|
5254
5391
|
column: selectedColumn,
|
|
5392
|
+
"data-field": "value",
|
|
5255
5393
|
filterClause,
|
|
5394
|
+
onDeselect: onDeselectValue,
|
|
5256
5395
|
onInputComplete: onChangeValue,
|
|
5257
5396
|
operator,
|
|
5258
5397
|
ref: valueRef,
|
|
@@ -5298,29 +5437,33 @@ var FilterClauseEditor = ({
|
|
|
5298
5437
|
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
5299
5438
|
ExpandoCombobox,
|
|
5300
5439
|
{
|
|
5301
|
-
title: "column",
|
|
5302
5440
|
InputProps,
|
|
5441
|
+
allowBackspaceClearsSelection: true,
|
|
5303
5442
|
className: (0, import_classnames29.default)(`${classBase16}Field`, `${classBase16}Column`),
|
|
5443
|
+
"data-field": "column",
|
|
5304
5444
|
initialHighlightedIndex: 0,
|
|
5305
5445
|
itemToString: (column) => column.name,
|
|
5446
|
+
onSelectionChange: onSelectionChangeColumn,
|
|
5306
5447
|
ref: columnRef,
|
|
5307
5448
|
source: columns,
|
|
5308
|
-
|
|
5449
|
+
title: "column",
|
|
5309
5450
|
value: (_a = selectedColumn == null ? void 0 : selectedColumn.name) != null ? _a : ""
|
|
5310
5451
|
}
|
|
5311
5452
|
),
|
|
5312
5453
|
(selectedColumn == null ? void 0 : selectedColumn.name) ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
5313
5454
|
ExpandoCombobox,
|
|
5314
5455
|
{
|
|
5315
|
-
title: "operator",
|
|
5316
5456
|
InputProps,
|
|
5457
|
+
allowBackspaceClearsSelection: true,
|
|
5317
5458
|
className: (0, import_classnames29.default)(`${classBase16}Field`, `${classBase16}Operator`, {
|
|
5318
5459
|
[`${classBase16}Operator-hidden`]: selectedColumn === null
|
|
5319
5460
|
}),
|
|
5461
|
+
"data-field": "operator",
|
|
5320
5462
|
initialHighlightedIndex: 0,
|
|
5463
|
+
onSelectionChange: onSelectionChangeOperator,
|
|
5321
5464
|
ref: operatorRef,
|
|
5322
5465
|
source: getOperators(selectedColumn),
|
|
5323
|
-
|
|
5466
|
+
title: "operator",
|
|
5324
5467
|
value: operator != null ? operator : ""
|
|
5325
5468
|
}
|
|
5326
5469
|
) : null,
|
|
@@ -5328,8 +5471,9 @@ var FilterClauseEditor = ({
|
|
|
5328
5471
|
value !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
5329
5472
|
import_core18.Button,
|
|
5330
5473
|
{
|
|
5331
|
-
className: `${classBase16}-
|
|
5332
|
-
onClick:
|
|
5474
|
+
className: `${classBase16}-clearButton`,
|
|
5475
|
+
onClick: onClear,
|
|
5476
|
+
onKeyDown: onClearKeyDown,
|
|
5333
5477
|
"data-icon": "close"
|
|
5334
5478
|
}
|
|
5335
5479
|
) : null
|
|
@@ -5337,8 +5481,9 @@ var FilterClauseEditor = ({
|
|
|
5337
5481
|
};
|
|
5338
5482
|
|
|
5339
5483
|
// src/filter-pill/FilterPill.tsx
|
|
5484
|
+
var import_src = require("@vuu-ui/vuu-popups/src");
|
|
5340
5485
|
var import_vuu_ui_controls16 = require("@vuu-ui/vuu-ui-controls");
|
|
5341
|
-
var
|
|
5486
|
+
var import_vuu_utils29 = require("@vuu-ui/vuu-utils");
|
|
5342
5487
|
var import_classnames31 = __toESM(require_classnames(), 1);
|
|
5343
5488
|
var import_react75 = require("react");
|
|
5344
5489
|
|
|
@@ -5447,18 +5592,25 @@ var filterClauses = (filter, clauses = []) => {
|
|
|
5447
5592
|
var DEFAULT_ADD_FILTER_OPTS = {
|
|
5448
5593
|
combineWith: "and"
|
|
5449
5594
|
};
|
|
5595
|
+
var removeLastClause = (filter) => {
|
|
5596
|
+
const { filters } = filter;
|
|
5597
|
+
if (filters.length > 2) {
|
|
5598
|
+
return {
|
|
5599
|
+
...filter,
|
|
5600
|
+
filters: filter.filters.slice(0, -1)
|
|
5601
|
+
};
|
|
5602
|
+
} else {
|
|
5603
|
+
return filter.filters[0];
|
|
5604
|
+
}
|
|
5605
|
+
};
|
|
5450
5606
|
var addClause = (existingFilter, clause, { combineWith = AND } = DEFAULT_ADD_FILTER_OPTS) => {
|
|
5451
5607
|
if ((0, import_vuu_utils27.isMultiClauseFilter)(existingFilter) && existingFilter.op === combineWith) {
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5457
|
-
}
|
|
5458
|
-
throw Error(
|
|
5459
|
-
"filter-utils, replaceFilter, only a valid clause can be added to a filter"
|
|
5460
|
-
);
|
|
5461
|
-
}
|
|
5608
|
+
return {
|
|
5609
|
+
...existingFilter,
|
|
5610
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
5611
|
+
// @ts-ignore
|
|
5612
|
+
filters: existingFilter.filters.concat(clause)
|
|
5613
|
+
};
|
|
5462
5614
|
} else {
|
|
5463
5615
|
return {
|
|
5464
5616
|
op: combineWith,
|
|
@@ -5737,23 +5889,44 @@ var getNumericFilter = (column, op, value) => {
|
|
|
5737
5889
|
return { column, op, value };
|
|
5738
5890
|
};
|
|
5739
5891
|
|
|
5740
|
-
// src/filter-pill/
|
|
5892
|
+
// src/filter-pill/filterAsReactNode.tsx
|
|
5893
|
+
var import_vuu_utils28 = require("@vuu-ui/vuu-utils");
|
|
5741
5894
|
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
5895
|
+
var filterAsReactNode = (f) => {
|
|
5896
|
+
if ((0, import_vuu_utils28.isMultiClauseFilter)(f)) {
|
|
5897
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { children: [
|
|
5898
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { children: "Match all ..." }),
|
|
5899
|
+
f.filters.map((f2, i) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { children: filterAsReactNode(f2) }, i))
|
|
5900
|
+
] });
|
|
5901
|
+
} else if ((0, import_vuu_utils28.isMultiValueFilter)(f)) {
|
|
5902
|
+
if (f.values.length > 3) {
|
|
5903
|
+
return `${f.column} ${f.op} [${f.values.slice(0, 3).map(import_vuu_utils28.quotedStrings).join(",")} ...]`;
|
|
5904
|
+
} else {
|
|
5905
|
+
return `${f.column} ${f.op} [${f.values.map(import_vuu_utils28.quotedStrings).join(",")}]`;
|
|
5906
|
+
}
|
|
5907
|
+
} else {
|
|
5908
|
+
return `${f.column} ${f.op} ${(0, import_vuu_utils28.filterValue)(f.value)}`;
|
|
5909
|
+
}
|
|
5910
|
+
};
|
|
5911
|
+
|
|
5912
|
+
// src/filter-pill/FilterPill.tsx
|
|
5913
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
5742
5914
|
var classBase18 = "vuuFilterPill";
|
|
5743
5915
|
var getFilterLabel = (filter) => {
|
|
5744
5916
|
if (filter.name) {
|
|
5745
5917
|
return filter.name;
|
|
5746
|
-
} else if ((0,
|
|
5918
|
+
} else if ((0, import_vuu_utils29.isMultiClauseFilter)(filter)) {
|
|
5747
5919
|
const [firstClause] = filterClauses(filter);
|
|
5748
|
-
return `${(0,
|
|
5920
|
+
return `${(0, import_vuu_utils29.filterAsQuery)(firstClause)} ${filter.op} ...`;
|
|
5749
5921
|
} else {
|
|
5750
|
-
return (0,
|
|
5922
|
+
return (0, import_vuu_utils29.filterAsQuery)(filter);
|
|
5751
5923
|
}
|
|
5752
5924
|
};
|
|
5753
5925
|
var FilterPill = ({
|
|
5926
|
+
className: classNameProp,
|
|
5754
5927
|
editable = true,
|
|
5755
5928
|
filter,
|
|
5756
|
-
|
|
5929
|
+
id: idProp,
|
|
5757
5930
|
onBeginEdit,
|
|
5758
5931
|
onExitEditMode,
|
|
5759
5932
|
onMenuAction,
|
|
@@ -5765,6 +5938,7 @@ var FilterPill = ({
|
|
|
5765
5938
|
onBeginEdit == null ? void 0 : onBeginEdit(filter);
|
|
5766
5939
|
}, [filter, onBeginEdit]);
|
|
5767
5940
|
const label = getFilterLabel(filter);
|
|
5941
|
+
const id = useId(idProp);
|
|
5768
5942
|
const handleMenuClose = (0, import_react75.useCallback)((reason) => {
|
|
5769
5943
|
if ((reason == null ? void 0 : reason.type) === "escape") {
|
|
5770
5944
|
requestAnimationFrame(() => {
|
|
@@ -5774,15 +5948,21 @@ var FilterPill = ({
|
|
|
5774
5948
|
});
|
|
5775
5949
|
}
|
|
5776
5950
|
}, []);
|
|
5777
|
-
|
|
5951
|
+
const { anchorProps, tooltipProps } = (0, import_src.useTooltip)({
|
|
5952
|
+
id,
|
|
5953
|
+
placement: "below",
|
|
5954
|
+
tooltipContent: filterAsReactNode(filter)
|
|
5955
|
+
});
|
|
5956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
|
|
5778
5957
|
"div",
|
|
5779
5958
|
{
|
|
5959
|
+
...anchorProps,
|
|
5780
5960
|
...htmlAttributes,
|
|
5781
5961
|
className: (0, import_classnames31.default)(classBase18, classNameProp),
|
|
5782
5962
|
"data-text": label,
|
|
5783
5963
|
ref: rootRef,
|
|
5784
5964
|
children: [
|
|
5785
|
-
editable && onExitEditMode ? /* @__PURE__ */ (0,
|
|
5965
|
+
editable && onExitEditMode ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
5786
5966
|
import_vuu_ui_controls16.EditableLabel,
|
|
5787
5967
|
{
|
|
5788
5968
|
defaultValue: label,
|
|
@@ -5790,14 +5970,20 @@ var FilterPill = ({
|
|
|
5790
5970
|
onExitEditMode
|
|
5791
5971
|
},
|
|
5792
5972
|
label
|
|
5793
|
-
) : /* @__PURE__ */ (0,
|
|
5794
|
-
showMenu && onMenuAction ? /* @__PURE__ */ (0,
|
|
5973
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: `${classBase18}-label`, children: label }),
|
|
5974
|
+
showMenu && onMenuAction ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
5795
5975
|
FilterPillMenu,
|
|
5796
5976
|
{
|
|
5797
5977
|
filter,
|
|
5798
5978
|
onMenuAction,
|
|
5799
5979
|
onMenuClose: handleMenuClose
|
|
5800
5980
|
}
|
|
5981
|
+
) : null,
|
|
5982
|
+
tooltipProps ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
5983
|
+
import_src.Tooltip,
|
|
5984
|
+
{
|
|
5985
|
+
...tooltipProps
|
|
5986
|
+
}
|
|
5801
5987
|
) : null
|
|
5802
5988
|
]
|
|
5803
5989
|
}
|
|
@@ -5805,7 +5991,7 @@ var FilterPill = ({
|
|
|
5805
5991
|
};
|
|
5806
5992
|
|
|
5807
5993
|
// src/filter-bar/useFilterBar.ts
|
|
5808
|
-
var
|
|
5994
|
+
var import_vuu_utils30 = require("@vuu-ui/vuu-utils");
|
|
5809
5995
|
var import_react77 = require("react");
|
|
5810
5996
|
|
|
5811
5997
|
// src/filter-bar/useFilters.ts
|
|
@@ -5814,7 +6000,8 @@ var import_react76 = require("react");
|
|
|
5814
6000
|
var useFilters = ({
|
|
5815
6001
|
defaultFilters,
|
|
5816
6002
|
filters: filtersProp,
|
|
5817
|
-
onFiltersChanged
|
|
6003
|
+
onFiltersChanged,
|
|
6004
|
+
tableSchema
|
|
5818
6005
|
}) => {
|
|
5819
6006
|
const [filters, setFilters] = (0, import_vuu_ui_controls17.useControlled)({
|
|
5820
6007
|
controlled: filtersProp,
|
|
@@ -5822,6 +6009,77 @@ var useFilters = ({
|
|
|
5822
6009
|
name: "useFilters",
|
|
5823
6010
|
state: "Filters"
|
|
5824
6011
|
});
|
|
6012
|
+
const { getApplicationSettings, saveApplicationSettings } = useLayoutManager();
|
|
6013
|
+
const hasFilter = (filters2, name) => filters2.findIndex((f) => f.name === name) !== -1;
|
|
6014
|
+
const saveFilterToSettings = (0, import_react76.useCallback)(
|
|
6015
|
+
(filter, name) => {
|
|
6016
|
+
if (tableSchema && name) {
|
|
6017
|
+
const savedFilters = getApplicationSettings(
|
|
6018
|
+
"filters"
|
|
6019
|
+
);
|
|
6020
|
+
let newFilters = savedFilters;
|
|
6021
|
+
const { module: module2, table } = tableSchema.table;
|
|
6022
|
+
const key = `${module2}:${table}`;
|
|
6023
|
+
if (savedFilters) {
|
|
6024
|
+
if (savedFilters[key]) {
|
|
6025
|
+
if (hasFilter(savedFilters[key], name)) {
|
|
6026
|
+
newFilters = {
|
|
6027
|
+
...savedFilters,
|
|
6028
|
+
[key]: savedFilters[key].map(
|
|
6029
|
+
(f) => f.name === name ? { ...filter, name } : f
|
|
6030
|
+
)
|
|
6031
|
+
};
|
|
6032
|
+
} else if ((filter == null ? void 0 : filter.name) && (filter == null ? void 0 : filter.name) !== name && hasFilter(savedFilters[key], filter.name)) {
|
|
6033
|
+
newFilters = {
|
|
6034
|
+
...savedFilters,
|
|
6035
|
+
[key]: savedFilters[key].map(
|
|
6036
|
+
(f) => f.name === filter.name ? { ...filter, name } : f
|
|
6037
|
+
)
|
|
6038
|
+
};
|
|
6039
|
+
} else {
|
|
6040
|
+
newFilters = {
|
|
6041
|
+
...savedFilters,
|
|
6042
|
+
[key]: savedFilters[key].concat({ ...filter, name })
|
|
6043
|
+
};
|
|
6044
|
+
}
|
|
6045
|
+
} else {
|
|
6046
|
+
newFilters = {
|
|
6047
|
+
...savedFilters,
|
|
6048
|
+
[key]: [{ ...filter, name }]
|
|
6049
|
+
};
|
|
6050
|
+
}
|
|
6051
|
+
} else {
|
|
6052
|
+
newFilters = {
|
|
6053
|
+
[key]: [{ ...filter, name }]
|
|
6054
|
+
};
|
|
6055
|
+
}
|
|
6056
|
+
if (newFilters !== savedFilters) {
|
|
6057
|
+
saveApplicationSettings(newFilters, "filters");
|
|
6058
|
+
}
|
|
6059
|
+
}
|
|
6060
|
+
},
|
|
6061
|
+
[getApplicationSettings, saveApplicationSettings, tableSchema]
|
|
6062
|
+
);
|
|
6063
|
+
const removeFilterFromSettings = (0, import_react76.useCallback)(
|
|
6064
|
+
(filter) => {
|
|
6065
|
+
var _a;
|
|
6066
|
+
if (tableSchema && filter.name) {
|
|
6067
|
+
const savedFilters = getApplicationSettings(
|
|
6068
|
+
"filters"
|
|
6069
|
+
);
|
|
6070
|
+
const { module: module2, table } = tableSchema.table;
|
|
6071
|
+
const key = `${module2}:${table}`;
|
|
6072
|
+
if (((_a = savedFilters[key]) == null ? void 0 : _a.findIndex((f) => f.name === filter.name)) !== -1) {
|
|
6073
|
+
const newSavedFilters = {
|
|
6074
|
+
...savedFilters,
|
|
6075
|
+
[key]: savedFilters[key].filter((f) => f.name !== filter.name)
|
|
6076
|
+
};
|
|
6077
|
+
saveApplicationSettings(newSavedFilters, "filters");
|
|
6078
|
+
}
|
|
6079
|
+
}
|
|
6080
|
+
},
|
|
6081
|
+
[getApplicationSettings, saveApplicationSettings, tableSchema]
|
|
6082
|
+
);
|
|
5825
6083
|
const handleAddFilter = (0, import_react76.useCallback)(
|
|
5826
6084
|
(filter) => {
|
|
5827
6085
|
const index = filters.length;
|
|
@@ -5834,6 +6092,9 @@ var useFilters = ({
|
|
|
5834
6092
|
);
|
|
5835
6093
|
const handleDeleteFilter = (0, import_react76.useCallback)(
|
|
5836
6094
|
(filter) => {
|
|
6095
|
+
console.log(`handleDeleteFilter`, {
|
|
6096
|
+
filter
|
|
6097
|
+
});
|
|
5837
6098
|
let index = -1;
|
|
5838
6099
|
const newFilters = filters.filter((f, i) => {
|
|
5839
6100
|
if (f !== filter) {
|
|
@@ -5845,9 +6106,10 @@ var useFilters = ({
|
|
|
5845
6106
|
});
|
|
5846
6107
|
setFilters(newFilters);
|
|
5847
6108
|
onFiltersChanged == null ? void 0 : onFiltersChanged(newFilters);
|
|
6109
|
+
removeFilterFromSettings(filter);
|
|
5848
6110
|
return index;
|
|
5849
6111
|
},
|
|
5850
|
-
[filters, onFiltersChanged, setFilters]
|
|
6112
|
+
[filters, onFiltersChanged, removeFilterFromSettings, setFilters]
|
|
5851
6113
|
);
|
|
5852
6114
|
const handleRenameFilter = (0, import_react76.useCallback)(
|
|
5853
6115
|
(filter, name) => {
|
|
@@ -5862,9 +6124,10 @@ var useFilters = ({
|
|
|
5862
6124
|
});
|
|
5863
6125
|
setFilters(newFilters);
|
|
5864
6126
|
onFiltersChanged == null ? void 0 : onFiltersChanged(newFilters);
|
|
6127
|
+
saveFilterToSettings(filter, name);
|
|
5865
6128
|
return index;
|
|
5866
6129
|
},
|
|
5867
|
-
[filters, onFiltersChanged, setFilters]
|
|
6130
|
+
[filters, onFiltersChanged, saveFilterToSettings, setFilters]
|
|
5868
6131
|
);
|
|
5869
6132
|
const handleChangeFilter = (0, import_react76.useCallback)(
|
|
5870
6133
|
(filter) => {
|
|
@@ -5901,7 +6164,8 @@ var useFilterBar = ({
|
|
|
5901
6164
|
onApplyFilter,
|
|
5902
6165
|
onChangeActiveFilterIndex: onChangeActiveFilterIndexProp,
|
|
5903
6166
|
onFiltersChanged,
|
|
5904
|
-
showMenu: showMenuProp
|
|
6167
|
+
showMenu: showMenuProp,
|
|
6168
|
+
tableSchema
|
|
5905
6169
|
}) => {
|
|
5906
6170
|
const addButtonRef = (0, import_react77.useRef)(null);
|
|
5907
6171
|
const editingFilter = (0, import_react77.useRef)();
|
|
@@ -5917,7 +6181,8 @@ var useFilterBar = ({
|
|
|
5917
6181
|
onRenameFilter
|
|
5918
6182
|
} = useFilters({
|
|
5919
6183
|
filters: filtersProp,
|
|
5920
|
-
onFiltersChanged
|
|
6184
|
+
onFiltersChanged,
|
|
6185
|
+
tableSchema
|
|
5921
6186
|
});
|
|
5922
6187
|
const editPillLabel = (0, import_react77.useCallback)(
|
|
5923
6188
|
(index) => {
|
|
@@ -5931,7 +6196,7 @@ var useFilterBar = ({
|
|
|
5931
6196
|
".vuuEditableLabel"
|
|
5932
6197
|
);
|
|
5933
6198
|
if (editableLabel) {
|
|
5934
|
-
(0,
|
|
6199
|
+
(0, import_vuu_utils30.dispatchMouseEvent)(editableLabel, "dblclick");
|
|
5935
6200
|
}
|
|
5936
6201
|
}
|
|
5937
6202
|
});
|
|
@@ -5970,7 +6235,7 @@ var useFilterBar = ({
|
|
|
5970
6235
|
);
|
|
5971
6236
|
const applyFilter = (0, import_react77.useCallback)(
|
|
5972
6237
|
(filter) => {
|
|
5973
|
-
const filterQuery = filter ? (0,
|
|
6238
|
+
const filterQuery = filter ? (0, import_vuu_utils30.filterAsQuery)(filter) : "";
|
|
5974
6239
|
onApplyFilter({
|
|
5975
6240
|
filter: filterQuery,
|
|
5976
6241
|
filterStruct: filter
|
|
@@ -6093,12 +6358,16 @@ var useFilterBar = ({
|
|
|
6093
6358
|
setShowMenu(false);
|
|
6094
6359
|
return true;
|
|
6095
6360
|
}
|
|
6096
|
-
case "and-clause":
|
|
6097
|
-
|
|
6098
|
-
|
|
6361
|
+
case "and-clause": {
|
|
6362
|
+
const newFilter = addClause(
|
|
6363
|
+
editFilter,
|
|
6364
|
+
EMPTY_FILTER_CLAUSE
|
|
6099
6365
|
);
|
|
6366
|
+
console.log({ newFilter });
|
|
6367
|
+
setEditFilter(newFilter);
|
|
6100
6368
|
setShowMenu(false);
|
|
6101
6369
|
return true;
|
|
6370
|
+
}
|
|
6102
6371
|
case "or-clause":
|
|
6103
6372
|
setEditFilter(
|
|
6104
6373
|
(filter) => addClause(filter, {}, { combineWith: "or" })
|
|
@@ -6138,7 +6407,7 @@ var useFilterBar = ({
|
|
|
6138
6407
|
);
|
|
6139
6408
|
const handleClickAddFilter = (0, import_react77.useCallback)(() => {
|
|
6140
6409
|
setEditFilter({});
|
|
6141
|
-
}, []);
|
|
6410
|
+
}, [setEditFilter]);
|
|
6142
6411
|
const handleClickRemoveFilter = (0, import_react77.useCallback)(() => {
|
|
6143
6412
|
setEditFilter(void 0);
|
|
6144
6413
|
}, []);
|
|
@@ -6147,13 +6416,43 @@ var useFilterBar = ({
|
|
|
6147
6416
|
onMenuAction: handlePillMenuAction,
|
|
6148
6417
|
onExitEditMode: handleExitEditFilterName
|
|
6149
6418
|
};
|
|
6150
|
-
const handleChangeFilterClause = (
|
|
6151
|
-
|
|
6152
|
-
|
|
6153
|
-
|
|
6419
|
+
const handleChangeFilterClause = (0, import_react77.useCallback)(
|
|
6420
|
+
(filterClause) => {
|
|
6421
|
+
console.log(`handleCHangeFilterClause ${JSON.stringify(filterClause)}`);
|
|
6422
|
+
if (filterClause !== void 0) {
|
|
6423
|
+
const newFilter = replaceClause(editFilter, filterClause);
|
|
6424
|
+
setEditFilter(newFilter);
|
|
6425
|
+
setShowMenu(true);
|
|
6426
|
+
}
|
|
6427
|
+
},
|
|
6428
|
+
[editFilter]
|
|
6429
|
+
);
|
|
6430
|
+
const handleCancelFilterClause = (0, import_react77.useCallback)(
|
|
6431
|
+
(reason) => {
|
|
6432
|
+
if (reason === "Backspace" && (0, import_vuu_utils30.isMultiClauseFilter)(editFilter)) {
|
|
6433
|
+
setEditFilter(removeLastClause(editFilter));
|
|
6434
|
+
}
|
|
6435
|
+
},
|
|
6436
|
+
[editFilter]
|
|
6437
|
+
);
|
|
6438
|
+
const handleBlurFilterClause = (0, import_react77.useCallback)((e) => {
|
|
6439
|
+
const target = e.target;
|
|
6440
|
+
const relatedTarget = e.relatedTarget;
|
|
6441
|
+
const filterClause = target.closest(".vuuFilterClause");
|
|
6442
|
+
if (filterClause == null ? void 0 : filterClause.contains(relatedTarget)) {
|
|
6443
|
+
} else {
|
|
6444
|
+
const dropdownId = target.getAttribute("aria-owns");
|
|
6445
|
+
const dropDown = dropdownId ? document.getElementById(dropdownId) : null;
|
|
6446
|
+
if (dropDown == null ? void 0 : dropDown.contains(relatedTarget)) {
|
|
6447
|
+
} else {
|
|
6448
|
+
setShowMenu(true);
|
|
6449
|
+
}
|
|
6154
6450
|
}
|
|
6155
|
-
};
|
|
6156
|
-
const
|
|
6451
|
+
}, []);
|
|
6452
|
+
const handleFocusFilterClause = (0, import_react77.useCallback)(() => {
|
|
6453
|
+
setShowMenu(false);
|
|
6454
|
+
}, []);
|
|
6455
|
+
const handleKeyDownFilterbar = (0, import_react77.useCallback)(
|
|
6157
6456
|
(evt) => {
|
|
6158
6457
|
if (evt.key === "Escape" && editFilter !== void 0) {
|
|
6159
6458
|
setEditFilter(void 0);
|
|
@@ -6163,6 +6462,39 @@ var useFilterBar = ({
|
|
|
6163
6462
|
},
|
|
6164
6463
|
[editFilter]
|
|
6165
6464
|
);
|
|
6465
|
+
const handleKeyDownMenu = (0, import_react77.useCallback)(
|
|
6466
|
+
(evt) => {
|
|
6467
|
+
var _a;
|
|
6468
|
+
console.log(`keydown from List ${evt.key}`);
|
|
6469
|
+
const { current: container } = containerRef;
|
|
6470
|
+
if (evt.key === "Backspace" && container) {
|
|
6471
|
+
evt.preventDefault();
|
|
6472
|
+
const fields = Array.from(
|
|
6473
|
+
container.querySelectorAll(".vuuFilterClauseField")
|
|
6474
|
+
);
|
|
6475
|
+
if (fields.length > 0) {
|
|
6476
|
+
const field = fields.at(-1);
|
|
6477
|
+
(_a = field == null ? void 0 : field.querySelector("input")) == null ? void 0 : _a.focus();
|
|
6478
|
+
}
|
|
6479
|
+
setShowMenu(false);
|
|
6480
|
+
} else if (evt.key === "Tab") {
|
|
6481
|
+
if (evt.shiftKey && container) {
|
|
6482
|
+
const clearButtons = Array.from(
|
|
6483
|
+
container.querySelectorAll(".vuuFilterClause-clearButton")
|
|
6484
|
+
);
|
|
6485
|
+
if (clearButtons.length > 0) {
|
|
6486
|
+
const clearButton = clearButtons.at(-1);
|
|
6487
|
+
setTimeout(() => {
|
|
6488
|
+
clearButton.focus();
|
|
6489
|
+
}, 100);
|
|
6490
|
+
}
|
|
6491
|
+
} else {
|
|
6492
|
+
console.log("apply current selection");
|
|
6493
|
+
}
|
|
6494
|
+
}
|
|
6495
|
+
},
|
|
6496
|
+
[containerRef]
|
|
6497
|
+
);
|
|
6166
6498
|
const handleAddButtonKeyDown = (0, import_react77.useCallback)((evt) => {
|
|
6167
6499
|
if (evt.key === "ArrowLeft") {
|
|
6168
6500
|
console.log("navgiate to the Toolbar");
|
|
@@ -6183,11 +6515,15 @@ var useFilterBar = ({
|
|
|
6183
6515
|
addButtonProps,
|
|
6184
6516
|
editFilter,
|
|
6185
6517
|
filters,
|
|
6518
|
+
onBlurFilterClause: handleBlurFilterClause,
|
|
6519
|
+
onCancelFilterClause: handleCancelFilterClause,
|
|
6186
6520
|
onChangeActiveFilterIndex: handleChangeActiveFilterIndex,
|
|
6187
6521
|
onClickAddFilter: handleClickAddFilter,
|
|
6188
6522
|
onClickRemoveFilter: handleClickRemoveFilter,
|
|
6189
6523
|
onChangeFilterClause: handleChangeFilterClause,
|
|
6190
|
-
|
|
6524
|
+
onFocusFilterClause: handleFocusFilterClause,
|
|
6525
|
+
onKeyDownFilterbar: handleKeyDownFilterbar,
|
|
6526
|
+
onKeyDownMenu: handleKeyDownMenu,
|
|
6191
6527
|
onMenuAction: handleMenuAction,
|
|
6192
6528
|
onNavigateOutOfBounds: handlePillNavigationOutOfBounds,
|
|
6193
6529
|
pillProps,
|
|
@@ -6196,9 +6532,54 @@ var useFilterBar = ({
|
|
|
6196
6532
|
};
|
|
6197
6533
|
};
|
|
6198
6534
|
|
|
6535
|
+
// src/filter-bar/FilterBarMenu.tsx
|
|
6536
|
+
var import_vuu_popups7 = require("@vuu-ui/vuu-popups");
|
|
6537
|
+
|
|
6538
|
+
// src/filter-bar/useFilterBarMenu.ts
|
|
6539
|
+
var import_react78 = require("react");
|
|
6540
|
+
var useFilterBarMenu = () => {
|
|
6541
|
+
const menuBuilder = (0, import_react78.useCallback)(() => {
|
|
6542
|
+
return [
|
|
6543
|
+
{
|
|
6544
|
+
label: `You have no saved filters for this table`,
|
|
6545
|
+
action: `no-action`
|
|
6546
|
+
}
|
|
6547
|
+
];
|
|
6548
|
+
}, []);
|
|
6549
|
+
const menuActionHandler = (0, import_react78.useMemo)(
|
|
6550
|
+
() => (action) => {
|
|
6551
|
+
console.log(`invoke menuId `, {
|
|
6552
|
+
action
|
|
6553
|
+
});
|
|
6554
|
+
return false;
|
|
6555
|
+
},
|
|
6556
|
+
[]
|
|
6557
|
+
);
|
|
6558
|
+
return {
|
|
6559
|
+
menuBuilder,
|
|
6560
|
+
menuActionHandler
|
|
6561
|
+
};
|
|
6562
|
+
};
|
|
6563
|
+
|
|
6564
|
+
// src/filter-bar/FilterBarMenu.tsx
|
|
6565
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
6566
|
+
var FilterBarMenu = () => {
|
|
6567
|
+
const classBase21 = "vuuFilterBarMenu";
|
|
6568
|
+
const { menuBuilder, menuActionHandler } = useFilterBarMenu();
|
|
6569
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: classBase21, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
6570
|
+
import_vuu_popups7.PopupMenu,
|
|
6571
|
+
{
|
|
6572
|
+
icon: "tune",
|
|
6573
|
+
menuBuilder,
|
|
6574
|
+
menuActionHandler,
|
|
6575
|
+
tabIndex: -1
|
|
6576
|
+
}
|
|
6577
|
+
) });
|
|
6578
|
+
};
|
|
6579
|
+
|
|
6199
6580
|
// src/filter-bar/FilterBar.tsx
|
|
6200
|
-
var
|
|
6201
|
-
var
|
|
6581
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
6582
|
+
var import_react80 = require("react");
|
|
6202
6583
|
var classBase19 = "vuuFilterBar";
|
|
6203
6584
|
var FilterBar = ({
|
|
6204
6585
|
activeFilterIndex: activeFilterIndexProp = [],
|
|
@@ -6212,18 +6593,22 @@ var FilterBar = ({
|
|
|
6212
6593
|
tableSchema,
|
|
6213
6594
|
...htmlAttributes
|
|
6214
6595
|
}) => {
|
|
6215
|
-
const rootRef = (0,
|
|
6596
|
+
const rootRef = (0, import_react79.useRef)(null);
|
|
6216
6597
|
const {
|
|
6217
6598
|
activeFilterIndex,
|
|
6218
6599
|
addButtonProps,
|
|
6219
6600
|
editFilter,
|
|
6220
6601
|
filters,
|
|
6602
|
+
onBlurFilterClause,
|
|
6603
|
+
onCancelFilterClause,
|
|
6221
6604
|
onClickAddFilter,
|
|
6222
6605
|
onClickRemoveFilter,
|
|
6223
6606
|
onChangeFilterClause,
|
|
6224
6607
|
onChangeActiveFilterIndex,
|
|
6608
|
+
onFocusFilterClause,
|
|
6225
6609
|
onNavigateOutOfBounds,
|
|
6226
|
-
|
|
6610
|
+
onKeyDownFilterbar,
|
|
6611
|
+
onKeyDownMenu,
|
|
6227
6612
|
onMenuAction,
|
|
6228
6613
|
pillProps,
|
|
6229
6614
|
promptProps,
|
|
@@ -6235,19 +6620,19 @@ var FilterBar = ({
|
|
|
6235
6620
|
onApplyFilter,
|
|
6236
6621
|
onChangeActiveFilterIndex: onChangeActiveFilterIndexProp,
|
|
6237
6622
|
onFiltersChanged,
|
|
6238
|
-
showMenu: showMenuProp
|
|
6623
|
+
showMenu: showMenuProp,
|
|
6624
|
+
tableSchema
|
|
6239
6625
|
});
|
|
6240
6626
|
const className = (0, import_classnames32.default)(classBase19, classNameProp, {
|
|
6241
6627
|
[`${classBase19}-display`]: editFilter === void 0,
|
|
6242
6628
|
[`${classBase19}-edit`]: editFilter !== void 0
|
|
6243
6629
|
});
|
|
6244
|
-
const onClose = () => console.log("Closing filter component");
|
|
6245
6630
|
const getChildren2 = () => {
|
|
6246
6631
|
const items = [];
|
|
6247
6632
|
if (editFilter === void 0) {
|
|
6248
6633
|
filters.forEach((filter, i) => {
|
|
6249
6634
|
items.push(
|
|
6250
|
-
/* @__PURE__ */ (0,
|
|
6635
|
+
/* @__PURE__ */ (0, import_react80.createElement)(FilterPill, { ...pillProps, filter, key: `filter-${i}` })
|
|
6251
6636
|
);
|
|
6252
6637
|
});
|
|
6253
6638
|
return items;
|
|
@@ -6255,14 +6640,16 @@ var FilterBar = ({
|
|
|
6255
6640
|
const filterClauses2 = filterClauses(editFilter);
|
|
6256
6641
|
filterClauses2.forEach((filterClause, i) => {
|
|
6257
6642
|
items.push(
|
|
6258
|
-
/* @__PURE__ */ (0,
|
|
6643
|
+
/* @__PURE__ */ (0, import_react80.createElement)(
|
|
6259
6644
|
FilterClauseEditor,
|
|
6260
6645
|
{
|
|
6261
6646
|
...FilterClauseEditorProps2,
|
|
6262
6647
|
filterClause,
|
|
6263
6648
|
key: `editor-${i}`,
|
|
6649
|
+
onCancel: onCancelFilterClause,
|
|
6264
6650
|
onChange: onChangeFilterClause,
|
|
6265
|
-
|
|
6651
|
+
onBlur: onBlurFilterClause,
|
|
6652
|
+
onFocus: onFocusFilterClause,
|
|
6266
6653
|
tableSchema
|
|
6267
6654
|
}
|
|
6268
6655
|
)
|
|
@@ -6270,11 +6657,18 @@ var FilterBar = ({
|
|
|
6270
6657
|
});
|
|
6271
6658
|
if (showMenu) {
|
|
6272
6659
|
items.push(
|
|
6273
|
-
/* @__PURE__ */ (0,
|
|
6660
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
6661
|
+
FilterBuilderMenu,
|
|
6662
|
+
{
|
|
6663
|
+
onMenuAction,
|
|
6664
|
+
ListProps: { onKeyDownCapture: onKeyDownMenu }
|
|
6665
|
+
},
|
|
6666
|
+
"menu"
|
|
6667
|
+
)
|
|
6274
6668
|
);
|
|
6275
6669
|
}
|
|
6276
6670
|
items.push(
|
|
6277
|
-
/* @__PURE__ */ (0,
|
|
6671
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
6278
6672
|
import_core19.Button,
|
|
6279
6673
|
{
|
|
6280
6674
|
className: `${classBase19}-remove`,
|
|
@@ -6289,16 +6683,16 @@ var FilterBar = ({
|
|
|
6289
6683
|
return items;
|
|
6290
6684
|
}
|
|
6291
6685
|
};
|
|
6292
|
-
return /* @__PURE__ */ (0,
|
|
6686
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
|
|
6293
6687
|
"div",
|
|
6294
6688
|
{
|
|
6295
6689
|
...htmlAttributes,
|
|
6296
6690
|
className,
|
|
6297
|
-
onKeyDown,
|
|
6691
|
+
onKeyDown: onKeyDownFilterbar,
|
|
6298
6692
|
ref: rootRef,
|
|
6299
6693
|
children: [
|
|
6300
|
-
/* @__PURE__ */ (0,
|
|
6301
|
-
/* @__PURE__ */ (0,
|
|
6694
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(FilterBarMenu, {}),
|
|
6695
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
6302
6696
|
Toolbar,
|
|
6303
6697
|
{
|
|
6304
6698
|
activeItemIndex: activeFilterIndex,
|
|
@@ -6309,7 +6703,7 @@ var FilterBar = ({
|
|
|
6309
6703
|
children: getChildren2()
|
|
6310
6704
|
}
|
|
6311
6705
|
),
|
|
6312
|
-
editFilter === void 0 ? /* @__PURE__ */ (0,
|
|
6706
|
+
editFilter === void 0 ? /* @__PURE__ */ (0, import_react80.createElement)(
|
|
6313
6707
|
import_core19.Button,
|
|
6314
6708
|
{
|
|
6315
6709
|
...addButtonProps,
|
|
@@ -6322,8 +6716,8 @@ var FilterBar = ({
|
|
|
6322
6716
|
variant: "primary"
|
|
6323
6717
|
}
|
|
6324
6718
|
) : null,
|
|
6325
|
-
promptProps ? /* @__PURE__ */ (0,
|
|
6326
|
-
|
|
6719
|
+
promptProps ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
6720
|
+
import_vuu_popups8.Prompt,
|
|
6327
6721
|
{
|
|
6328
6722
|
...promptProps,
|
|
6329
6723
|
PopupProps: {
|
|
@@ -9329,14 +9723,14 @@ var parser = LRParser.deserialize({
|
|
|
9329
9723
|
});
|
|
9330
9724
|
|
|
9331
9725
|
// ../vuu-filter-parser/src/FilterTreeWalker.ts
|
|
9332
|
-
var
|
|
9726
|
+
var import_vuu_utils31 = require("@vuu-ui/vuu-utils");
|
|
9333
9727
|
var _filter;
|
|
9334
9728
|
var FilterExpression = class {
|
|
9335
9729
|
constructor() {
|
|
9336
9730
|
__privateAdd(this, _filter, void 0);
|
|
9337
9731
|
}
|
|
9338
9732
|
setFilterCombinatorOp(op, filter = __privateGet(this, _filter)) {
|
|
9339
|
-
if ((0,
|
|
9733
|
+
if ((0, import_vuu_utils31.isMultiClauseFilter)(filter) && filter.op === op) {
|
|
9340
9734
|
return;
|
|
9341
9735
|
} else {
|
|
9342
9736
|
__privateSet(this, _filter, {
|
|
@@ -9348,14 +9742,14 @@ var FilterExpression = class {
|
|
|
9348
9742
|
add(filter) {
|
|
9349
9743
|
if (__privateGet(this, _filter) === void 0) {
|
|
9350
9744
|
__privateSet(this, _filter, filter);
|
|
9351
|
-
} else if ((0,
|
|
9745
|
+
} else if ((0, import_vuu_utils31.isMultiClauseFilter)(__privateGet(this, _filter))) {
|
|
9352
9746
|
__privateGet(this, _filter).filters.push(filter);
|
|
9353
9747
|
} else {
|
|
9354
9748
|
throw Error(`Invalid filter passed to FilterExpression`);
|
|
9355
9749
|
}
|
|
9356
9750
|
}
|
|
9357
9751
|
setColumn(column, filter = __privateGet(this, _filter)) {
|
|
9358
|
-
if ((0,
|
|
9752
|
+
if ((0, import_vuu_utils31.isMultiClauseFilter)(filter)) {
|
|
9359
9753
|
const target = filter.filters.at(-1);
|
|
9360
9754
|
if (target) {
|
|
9361
9755
|
this.setColumn(column, target);
|
|
@@ -9365,7 +9759,7 @@ var FilterExpression = class {
|
|
|
9365
9759
|
}
|
|
9366
9760
|
}
|
|
9367
9761
|
setOp(value, filter = __privateGet(this, _filter)) {
|
|
9368
|
-
if ((0,
|
|
9762
|
+
if ((0, import_vuu_utils31.isMultiClauseFilter)(filter)) {
|
|
9369
9763
|
const target = filter.filters.at(-1);
|
|
9370
9764
|
if (target) {
|
|
9371
9765
|
this.setOp(value, target);
|
|
@@ -9376,15 +9770,15 @@ var FilterExpression = class {
|
|
|
9376
9770
|
}
|
|
9377
9771
|
setValue(value, filter = __privateGet(this, _filter)) {
|
|
9378
9772
|
var _a;
|
|
9379
|
-
if ((0,
|
|
9773
|
+
if ((0, import_vuu_utils31.isMultiClauseFilter)(filter)) {
|
|
9380
9774
|
const target = filter.filters.at(-1);
|
|
9381
9775
|
if (target) {
|
|
9382
9776
|
this.setValue(value, target);
|
|
9383
9777
|
}
|
|
9384
|
-
} else if ((0,
|
|
9778
|
+
} else if ((0, import_vuu_utils31.isMultiValueFilter)(filter)) {
|
|
9385
9779
|
(_a = filter.values) != null ? _a : filter.values = [];
|
|
9386
9780
|
filter.values.push(value);
|
|
9387
|
-
} else if ((0,
|
|
9781
|
+
} else if ((0, import_vuu_utils31.isSingleValueFilter)(filter)) {
|
|
9388
9782
|
filter.value = value;
|
|
9389
9783
|
}
|
|
9390
9784
|
}
|
|
@@ -9448,7 +9842,7 @@ var strictParser = parser.configure({ strict: true });
|
|
|
9448
9842
|
|
|
9449
9843
|
// src/filter-input/useCodeMirrorEditor.ts
|
|
9450
9844
|
var import_classnames33 = __toESM(require_classnames(), 1);
|
|
9451
|
-
var
|
|
9845
|
+
var import_react82 = require("react");
|
|
9452
9846
|
|
|
9453
9847
|
// src/filter-input/FilterLanguage.ts
|
|
9454
9848
|
var import_vuu_codemirror = require("@vuu-ui/vuu-codemirror");
|
|
@@ -9554,7 +9948,7 @@ var vuuTheme = import_vuu_codemirror3.EditorView.theme(
|
|
|
9554
9948
|
|
|
9555
9949
|
// src/filter-input/useFilterAutoComplete.ts
|
|
9556
9950
|
var import_vuu_codemirror4 = require("@vuu-ui/vuu-codemirror");
|
|
9557
|
-
var
|
|
9951
|
+
var import_react81 = require("react");
|
|
9558
9952
|
var getOperator = (node, state) => {
|
|
9559
9953
|
let maybeColumnNode = node.prevSibling || node.parent;
|
|
9560
9954
|
while (maybeColumnNode && !["Column", "Operator", "In"].includes(maybeColumnNode.name)) {
|
|
@@ -9624,7 +10018,7 @@ var getSetValues = (node, state) => {
|
|
|
9624
10018
|
return values;
|
|
9625
10019
|
};
|
|
9626
10020
|
var useAutoComplete = (suggestionProvider, onSubmit, existingFilter) => {
|
|
9627
|
-
const makeSuggestions = (0,
|
|
10021
|
+
const makeSuggestions = (0, import_react81.useCallback)(
|
|
9628
10022
|
async (context, suggestionType, optionalArgs = {}) => {
|
|
9629
10023
|
const { startsWith = "" } = optionalArgs;
|
|
9630
10024
|
const options = await suggestionProvider.getSuggestions(
|
|
@@ -9635,7 +10029,7 @@ var useAutoComplete = (suggestionProvider, onSubmit, existingFilter) => {
|
|
|
9635
10029
|
},
|
|
9636
10030
|
[suggestionProvider]
|
|
9637
10031
|
);
|
|
9638
|
-
return (0,
|
|
10032
|
+
return (0, import_react81.useCallback)(
|
|
9639
10033
|
async (context) => {
|
|
9640
10034
|
var _a, _b;
|
|
9641
10035
|
const { state, pos } = context;
|
|
@@ -9819,15 +10213,15 @@ var useCodeMirrorEditor = ({
|
|
|
9819
10213
|
onSubmitFilter,
|
|
9820
10214
|
suggestionProvider
|
|
9821
10215
|
}) => {
|
|
9822
|
-
const editorRef = (0,
|
|
9823
|
-
const onSubmit = (0,
|
|
9824
|
-
const viewRef = (0,
|
|
10216
|
+
const editorRef = (0, import_react82.useRef)(null);
|
|
10217
|
+
const onSubmit = (0, import_react82.useRef)(noop);
|
|
10218
|
+
const viewRef = (0, import_react82.useRef)();
|
|
9825
10219
|
const completionFn = useAutoComplete(
|
|
9826
10220
|
suggestionProvider,
|
|
9827
10221
|
onSubmit,
|
|
9828
10222
|
existingFilter
|
|
9829
10223
|
);
|
|
9830
|
-
const [createState, clearInput] = (0,
|
|
10224
|
+
const [createState, clearInput] = (0, import_react82.useMemo)(() => {
|
|
9831
10225
|
const parseFilter2 = () => {
|
|
9832
10226
|
const view = getView(viewRef);
|
|
9833
10227
|
const source = view.state.doc.toString();
|
|
@@ -9902,7 +10296,7 @@ var useCodeMirrorEditor = ({
|
|
|
9902
10296
|
};
|
|
9903
10297
|
return [createState2, clearInput2];
|
|
9904
10298
|
}, [completionFn, onSubmitFilter]);
|
|
9905
|
-
(0,
|
|
10299
|
+
(0, import_react82.useEffect)(() => {
|
|
9906
10300
|
if (!editorRef.current) {
|
|
9907
10301
|
throw Error("editor not in dom");
|
|
9908
10302
|
}
|
|
@@ -9919,7 +10313,7 @@ var useCodeMirrorEditor = ({
|
|
|
9919
10313
|
};
|
|
9920
10314
|
|
|
9921
10315
|
// src/filter-input/FilterInput.tsx
|
|
9922
|
-
var
|
|
10316
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
9923
10317
|
var classBase20 = "vuuFilterInput";
|
|
9924
10318
|
var FilterInput = ({
|
|
9925
10319
|
existingFilter,
|
|
@@ -9934,8 +10328,8 @@ var FilterInput = ({
|
|
|
9934
10328
|
onSubmitFilter,
|
|
9935
10329
|
suggestionProvider
|
|
9936
10330
|
});
|
|
9937
|
-
return /* @__PURE__ */ (0,
|
|
9938
|
-
/* @__PURE__ */ (0,
|
|
10331
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { ...props, className: classBase20, children: [
|
|
10332
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
9939
10333
|
import_core20.Button,
|
|
9940
10334
|
{
|
|
9941
10335
|
className: `${classBase20}-FilterButton`,
|
|
@@ -9943,8 +10337,8 @@ var FilterInput = ({
|
|
|
9943
10337
|
tabIndex: -1
|
|
9944
10338
|
}
|
|
9945
10339
|
),
|
|
9946
|
-
/* @__PURE__ */ (0,
|
|
9947
|
-
/* @__PURE__ */ (0,
|
|
10340
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: `${classBase20}-Editor`, ref: editorRef }),
|
|
10341
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
9948
10342
|
import_core20.Button,
|
|
9949
10343
|
{
|
|
9950
10344
|
className: `${classBase20}-ClearButton`,
|
|
@@ -9958,16 +10352,16 @@ var FilterInput = ({
|
|
|
9958
10352
|
// src/filter-input/useFilterSuggestionProvider.ts
|
|
9959
10353
|
var import_vuu_codemirror6 = require("@vuu-ui/vuu-codemirror");
|
|
9960
10354
|
var import_vuu_data_react2 = require("@vuu-ui/vuu-data-react");
|
|
9961
|
-
var
|
|
10355
|
+
var import_react83 = require("react");
|
|
9962
10356
|
|
|
9963
10357
|
// src/filter-input/filterInfo.ts
|
|
9964
|
-
var
|
|
10358
|
+
var import_vuu_utils32 = require("@vuu-ui/vuu-utils");
|
|
9965
10359
|
var filterInfo = (filterName, filterQuery) => {
|
|
9966
|
-
const rootElement = (0,
|
|
9967
|
-
const headingElement = (0,
|
|
9968
|
-
const nameElement = (0,
|
|
10360
|
+
const rootElement = (0, import_vuu_utils32.createEl)("div", "vuuFunctionDoc");
|
|
10361
|
+
const headingElement = (0, import_vuu_utils32.createEl)("div", "function-heading");
|
|
10362
|
+
const nameElement = (0, import_vuu_utils32.createEl)("span", "function-name", filterName);
|
|
9969
10363
|
headingElement.appendChild(nameElement);
|
|
9970
|
-
const child2 = (0,
|
|
10364
|
+
const child2 = (0, import_vuu_utils32.createEl)("p", void 0, filterQuery);
|
|
9971
10365
|
rootElement.appendChild(headingElement);
|
|
9972
10366
|
rootElement.appendChild(child2);
|
|
9973
10367
|
return rootElement;
|
|
@@ -10054,9 +10448,9 @@ var useFilterSuggestionProvider = ({
|
|
|
10054
10448
|
table,
|
|
10055
10449
|
typeaheadHook: useTypeahead = import_vuu_data_react2.useTypeaheadSuggestions
|
|
10056
10450
|
}) => {
|
|
10057
|
-
const latestSuggestionsRef = (0,
|
|
10451
|
+
const latestSuggestionsRef = (0, import_react83.useRef)();
|
|
10058
10452
|
const getTypeaheadSuggestions = useTypeahead();
|
|
10059
|
-
const getSuggestions = (0,
|
|
10453
|
+
const getSuggestions = (0, import_react83.useCallback)(
|
|
10060
10454
|
async (suggestionType, options = NONE) => {
|
|
10061
10455
|
const {
|
|
10062
10456
|
columnName,
|
|
@@ -10146,7 +10540,7 @@ var useFilterSuggestionProvider = ({
|
|
|
10146
10540
|
},
|
|
10147
10541
|
[columns, getTypeaheadSuggestions, namedFilters, saveOptions, table]
|
|
10148
10542
|
);
|
|
10149
|
-
const isPartialMatch = (0,
|
|
10543
|
+
const isPartialMatch = (0, import_react83.useCallback)(
|
|
10150
10544
|
async (valueType, columnName, pattern) => {
|
|
10151
10545
|
const suggestions = (
|
|
10152
10546
|
// latestSuggestions && latestSuggestions.length > 0
|