@vuu-ui/vuu-filters 0.13.26 → 0.13.27
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/basic-column-filter/BasicColumnFilter.css.js +6 -0
- package/cjs/basic-column-filter/BasicColumnFilter.css.js.map +1 -0
- package/cjs/basic-column-filter/BasicColumnFilter.js +61 -0
- package/cjs/basic-column-filter/BasicColumnFilter.js.map +1 -0
- package/cjs/basic-column-filter/useBasicColumnFilter.js +45 -0
- package/cjs/basic-column-filter/useBasicColumnFilter.js.map +1 -0
- package/cjs/index.js +2 -0
- package/cjs/index.js.map +1 -1
- package/esm/basic-column-filter/BasicColumnFilter.css.js +4 -0
- package/esm/basic-column-filter/BasicColumnFilter.css.js.map +1 -0
- package/esm/basic-column-filter/BasicColumnFilter.js +59 -0
- package/esm/basic-column-filter/BasicColumnFilter.js.map +1 -0
- package/esm/basic-column-filter/useBasicColumnFilter.js +43 -0
- package/esm/basic-column-filter/useBasicColumnFilter.js.map +1 -0
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/package.json +11 -11
- package/types/basic-column-filter/BasicColumnFilter.d.ts +26 -0
- package/types/basic-column-filter/useBasicColumnFilter.d.ts +10 -0
- package/types/index.d.ts +1 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var basicColumnFilterCss = ".vuuBasicColumnFilter {\n border: solid 1px var(--salt-editable-borderColor);\n border-radius: 4px;\n max-width: 210px;\n\n .vuuBasicColumnFilter-edit-control {\n display: flex;\n }\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = basicColumnFilterCss;
|
|
6
|
+
//# sourceMappingURL=BasicColumnFilter.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicColumnFilter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var styles = require('@salt-ds/styles');
|
|
5
|
+
var window = require('@salt-ds/window');
|
|
6
|
+
var cx = require('clsx');
|
|
7
|
+
var vuuDataReact = require('@vuu-ui/vuu-data-react');
|
|
8
|
+
var react = require('react');
|
|
9
|
+
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
10
|
+
var useBasicColumnFilter = require('./useBasicColumnFilter.js');
|
|
11
|
+
var BasicColumnFilter$1 = require('./BasicColumnFilter.css.js');
|
|
12
|
+
|
|
13
|
+
const classBase = "vuuBasicColumnFilter";
|
|
14
|
+
const searchIcon = /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.Icon, { name: "search", size: 18 });
|
|
15
|
+
const BasicColumnFilter = react.forwardRef(function BasicColumnFilter2({
|
|
16
|
+
column,
|
|
17
|
+
className,
|
|
18
|
+
table,
|
|
19
|
+
initialValue,
|
|
20
|
+
onApplyFilter,
|
|
21
|
+
withStartAdornment = true,
|
|
22
|
+
...htmlAttributes
|
|
23
|
+
}, forwardRef2) {
|
|
24
|
+
const targetWindow = window.useWindow();
|
|
25
|
+
styles.useComponentCssInjection({
|
|
26
|
+
testId: "vuu-basic-column-filter",
|
|
27
|
+
css: BasicColumnFilter$1,
|
|
28
|
+
window: targetWindow
|
|
29
|
+
});
|
|
30
|
+
const { filterValue, onInputChange, onCommit } = useBasicColumnFilter.useBasicColumnFilter({
|
|
31
|
+
column,
|
|
32
|
+
initialValue,
|
|
33
|
+
onApplyFilter
|
|
34
|
+
});
|
|
35
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
...htmlAttributes,
|
|
39
|
+
className: cx(classBase, className),
|
|
40
|
+
ref: forwardRef2,
|
|
41
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${classBase}-edit-control`, children: [
|
|
42
|
+
withStartAdornment && searchIcon,
|
|
43
|
+
vuuDataReact.getDataItemEditControl({
|
|
44
|
+
InputProps: {
|
|
45
|
+
inputProps: {
|
|
46
|
+
placeholder: "Find",
|
|
47
|
+
value: filterValue,
|
|
48
|
+
onChange: onInputChange
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
dataDescriptor: column,
|
|
52
|
+
table,
|
|
53
|
+
onCommit
|
|
54
|
+
})
|
|
55
|
+
] })
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
exports.BasicColumnFilter = BasicColumnFilter;
|
|
61
|
+
//# sourceMappingURL=BasicColumnFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/BasicColumnFilter.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, HTMLAttributes, ReactElement } from \"react\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { FilterBarProps } from \"../filter-bar\";\nimport { useBasicColumnFilter } from \"./useBasicColumnFilter\";\n\nimport basicColumnFilterCss from \"./BasicColumnFilter.css\";\n\nexport type FilterValue = string | number;\n\nconst classBase = \"vuuBasicColumnFilter\";\nconst searchIcon = <Icon name=\"search\" size={18} />;\n\nexport interface BasicColumnFilterProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<FilterBarProps, \"onApplyFilter\"> {\n /**\n * Column Attributes.\n */\n column: ColumnDescriptor;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n /**\n * Initial filter value.\n */\n initialValue?: FilterValue;\n /**\n *Show search icon as start adornment.\n */\n withStartAdornment?: boolean;\n}\n\nexport const BasicColumnFilter = forwardRef(function BasicColumnFilter(\n {\n column,\n className,\n table,\n initialValue,\n onApplyFilter,\n withStartAdornment = true,\n ...htmlAttributes\n }: BasicColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-basic-column-filter\",\n css: basicColumnFilterCss,\n window: targetWindow,\n });\n\n const { filterValue, onInputChange, onCommit } = useBasicColumnFilter({\n column,\n initialValue,\n onApplyFilter,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n <div className={`${classBase}-edit-control`}>\n {withStartAdornment && searchIcon}\n {getDataItemEditControl({\n InputProps: {\n inputProps: {\n placeholder: \"Find\",\n value: filterValue,\n onChange: onInputChange,\n },\n },\n dataDescriptor: column,\n table,\n onCommit,\n })}\n </div>\n </div>\n );\n}) as (\n props: BasicColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<BasicColumnFilterProps>;\n"],"names":["jsx","Icon","forwardRef","BasicColumnFilter","useWindow","useComponentCssInjection","basicColumnFilterCss","useBasicColumnFilter","jsxs","getDataItemEditControl"],"mappings":";;;;;;;;;;;;AAeA,MAAM,SAAY,GAAA,sBAAA;AAClB,MAAM,6BAAcA,cAAA,CAAAC,kBAAA,EAAA,EAAK,IAAK,EAAA,QAAA,EAAS,MAAM,EAAI,EAAA,CAAA;AAuBpC,MAAA,iBAAA,GAAoBC,gBAAW,CAAA,SAASC,kBACnD,CAAA;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAqB,GAAA,IAAA;AAAA,EACrB,GAAG;AACL,CAAA,EACAD,WACA,EAAA;AACA,EAAA,MAAM,eAAeE,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,WAAA,EAAa,aAAe,EAAA,QAAA,KAAaC,yCAAqB,CAAA;AAAA,IACpE,MAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAAP,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKE,EAAAA,WAAAA;AAAA,MAEL,QAAC,kBAAAM,eAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CACzB,aAAA,CAAA,EAAA,QAAA,EAAA;AAAA,QAAsB,kBAAA,IAAA,UAAA;AAAA,QACtBC,mCAAuB,CAAA;AAAA,UACtB,UAAY,EAAA;AAAA,YACV,UAAY,EAAA;AAAA,cACV,WAAa,EAAA,MAAA;AAAA,cACb,KAAO,EAAA,WAAA;AAAA,cACP,QAAU,EAAA;AAAA;AACZ,WACF;AAAA,UACA,cAAgB,EAAA,MAAA;AAAA,UAChB,KAAA;AAAA,UACA;AAAA,SACD;AAAA,OACH,EAAA;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
+
|
|
6
|
+
const filterOp = "=";
|
|
7
|
+
const asDataSourceFilter = (filter) => {
|
|
8
|
+
if (filter) {
|
|
9
|
+
return {
|
|
10
|
+
filter: vuuUtils.filterAsQuery(filter),
|
|
11
|
+
filterStruct: filter
|
|
12
|
+
};
|
|
13
|
+
} else {
|
|
14
|
+
return vuuUtils.NoFilter;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const useBasicColumnFilter = ({
|
|
18
|
+
initialValue,
|
|
19
|
+
column,
|
|
20
|
+
onApplyFilter
|
|
21
|
+
}) => {
|
|
22
|
+
const [filterValue, setFilterValue] = react.useState(initialValue);
|
|
23
|
+
const handleInputChange = react.useCallback(
|
|
24
|
+
(e) => {
|
|
25
|
+
setFilterValue(e.target.value);
|
|
26
|
+
},
|
|
27
|
+
[]
|
|
28
|
+
);
|
|
29
|
+
const handleCommit = react.useCallback(
|
|
30
|
+
(_, value) => {
|
|
31
|
+
const filter = { column: column.name, op: filterOp, value };
|
|
32
|
+
setFilterValue((value ?? "").toString());
|
|
33
|
+
onApplyFilter?.(asDataSourceFilter(filter));
|
|
34
|
+
},
|
|
35
|
+
[column, onApplyFilter]
|
|
36
|
+
);
|
|
37
|
+
return {
|
|
38
|
+
filterValue: filterValue ?? "",
|
|
39
|
+
onInputChange: handleInputChange,
|
|
40
|
+
onCommit: handleCommit
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
exports.useBasicColumnFilter = useBasicColumnFilter;
|
|
45
|
+
//# sourceMappingURL=useBasicColumnFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/useBasicColumnFilter.ts"],"sourcesContent":["import { ChangeEventHandler, useCallback, useState } from \"react\";\nimport { BasicColumnFilterProps } from \"./BasicColumnFilter\";\nimport { CommitHandler, filterAsQuery, NoFilter } from \"@vuu-ui/vuu-utils\";\nimport { Filter, SingleValueFilterClauseOp } from \"@vuu-ui/vuu-filter-types\";\nimport { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\n\nexport type FilterValue = string | number;\n\nexport type BasicColumnFilterHookProps = Pick<\n BasicColumnFilterProps,\n \"column\" | \"onApplyFilter\" | \"initialValue\"\n>;\n\nconst filterOp: SingleValueFilterClauseOp = \"=\";\n\nconst asDataSourceFilter = (filter: Filter): DataSourceFilter => {\n if (filter) {\n return {\n filter: filterAsQuery(filter),\n filterStruct: filter,\n };\n } else {\n return NoFilter;\n }\n};\n\nexport const useBasicColumnFilter = ({\n initialValue,\n column,\n onApplyFilter,\n}: BasicColumnFilterHookProps) => {\n const [filterValue, setFilterValue] = useState(initialValue);\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n setFilterValue(e.target.value);\n },\n [],\n );\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_, value) => {\n const filter: Filter = { column: column.name, op: filterOp, value };\n setFilterValue((value ?? \"\").toString());\n onApplyFilter?.(asDataSourceFilter(filter));\n },\n [column, onApplyFilter],\n );\n\n return {\n filterValue: filterValue ?? \"\",\n onInputChange: handleInputChange,\n onCommit: handleCommit,\n };\n};\n"],"names":["filterAsQuery","NoFilter","useState","useCallback"],"mappings":";;;;;AAaA,MAAM,QAAsC,GAAA,GAAA;AAE5C,MAAM,kBAAA,GAAqB,CAAC,MAAqC,KAAA;AAC/D,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA;AAAA,MACL,MAAA,EAAQA,uBAAc,MAAM,CAAA;AAAA,MAC5B,YAAc,EAAA;AAAA,KAChB;AAAA,GACK,MAAA;AACL,IAAO,OAAAC,iBAAA;AAAA;AAEX,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,YAAY,CAAA;AAE3D,EAAA,MAAM,iBAAoB,GAAAC,iBAAA;AAAA,IACxB,CAAC,CAAM,KAAA;AACL,MAAe,cAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,KAC/B;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,GAAG,KAAU,KAAA;AACZ,MAAA,MAAM,SAAiB,EAAE,MAAA,EAAQ,OAAO,IAAM,EAAA,EAAA,EAAI,UAAU,KAAM,EAAA;AAClE,MAAgB,cAAA,CAAA,CAAA,KAAA,IAAS,EAAI,EAAA,QAAA,EAAU,CAAA;AACvC,MAAgB,aAAA,GAAA,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,KAC5C;AAAA,IACA,CAAC,QAAQ,aAAa;AAAA,GACxB;AAEA,EAAO,OAAA;AAAA,IACL,aAAa,WAAe,IAAA,EAAA;AAAA,IAC5B,aAAe,EAAA,iBAAA;AAAA,IACf,QAAU,EAAA;AAAA,GACZ;AACF;;;;"}
|
package/cjs/index.js
CHANGED
|
@@ -14,6 +14,7 @@ var filterUtils = require('./filter-utils.js');
|
|
|
14
14
|
var FilterModel = require('./FilterModel.js');
|
|
15
15
|
var InlineFilter = require('./inline-filter/InlineFilter.js');
|
|
16
16
|
var QuickFilters = require('./quick-filters/QuickFilters.js');
|
|
17
|
+
var BasicColumnFilter = require('./basic-column-filter/BasicColumnFilter.js');
|
|
17
18
|
var SavedFilterPanel = require('./saved-filters/SavedFilterPanel.js');
|
|
18
19
|
var FilterNamePrompt = require('./saved-filters/FilterNamePrompt.js');
|
|
19
20
|
|
|
@@ -55,6 +56,7 @@ exports.FilterClauseModel = FilterModel.FilterClauseModel;
|
|
|
55
56
|
exports.FilterModel = FilterModel.FilterModel;
|
|
56
57
|
exports.InlineFilter = InlineFilter.InlineFilter;
|
|
57
58
|
exports.QuickFilters = QuickFilters.QuickFilters;
|
|
59
|
+
exports.BasicColumnFilter = BasicColumnFilter.BasicColumnFilter;
|
|
58
60
|
exports.SavedFilterPanel = SavedFilterPanel.SavedFilterPanel;
|
|
59
61
|
exports.SaveFilterConfirmPrompt = FilterNamePrompt.FilterNamePrompt;
|
|
60
62
|
//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var basicColumnFilterCss = ".vuuBasicColumnFilter {\n border: solid 1px var(--salt-editable-borderColor);\n border-radius: 4px;\n max-width: 210px;\n\n .vuuBasicColumnFilter-edit-control {\n display: flex;\n }\n}\n";
|
|
2
|
+
|
|
3
|
+
export { basicColumnFilterCss as default };
|
|
4
|
+
//# sourceMappingURL=BasicColumnFilter.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicColumnFilter.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
3
|
+
import { useWindow } from '@salt-ds/window';
|
|
4
|
+
import cx from 'clsx';
|
|
5
|
+
import { getDataItemEditControl } from '@vuu-ui/vuu-data-react';
|
|
6
|
+
import { forwardRef } from 'react';
|
|
7
|
+
import { Icon } from '@vuu-ui/vuu-ui-controls';
|
|
8
|
+
import { useBasicColumnFilter } from './useBasicColumnFilter.js';
|
|
9
|
+
import basicColumnFilterCss from './BasicColumnFilter.css.js';
|
|
10
|
+
|
|
11
|
+
const classBase = "vuuBasicColumnFilter";
|
|
12
|
+
const searchIcon = /* @__PURE__ */ jsx(Icon, { name: "search", size: 18 });
|
|
13
|
+
const BasicColumnFilter = forwardRef(function BasicColumnFilter2({
|
|
14
|
+
column,
|
|
15
|
+
className,
|
|
16
|
+
table,
|
|
17
|
+
initialValue,
|
|
18
|
+
onApplyFilter,
|
|
19
|
+
withStartAdornment = true,
|
|
20
|
+
...htmlAttributes
|
|
21
|
+
}, forwardRef2) {
|
|
22
|
+
const targetWindow = useWindow();
|
|
23
|
+
useComponentCssInjection({
|
|
24
|
+
testId: "vuu-basic-column-filter",
|
|
25
|
+
css: basicColumnFilterCss,
|
|
26
|
+
window: targetWindow
|
|
27
|
+
});
|
|
28
|
+
const { filterValue, onInputChange, onCommit } = useBasicColumnFilter({
|
|
29
|
+
column,
|
|
30
|
+
initialValue,
|
|
31
|
+
onApplyFilter
|
|
32
|
+
});
|
|
33
|
+
return /* @__PURE__ */ jsx(
|
|
34
|
+
"div",
|
|
35
|
+
{
|
|
36
|
+
...htmlAttributes,
|
|
37
|
+
className: cx(classBase, className),
|
|
38
|
+
ref: forwardRef2,
|
|
39
|
+
children: /* @__PURE__ */ jsxs("div", { className: `${classBase}-edit-control`, children: [
|
|
40
|
+
withStartAdornment && searchIcon,
|
|
41
|
+
getDataItemEditControl({
|
|
42
|
+
InputProps: {
|
|
43
|
+
inputProps: {
|
|
44
|
+
placeholder: "Find",
|
|
45
|
+
value: filterValue,
|
|
46
|
+
onChange: onInputChange
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
dataDescriptor: column,
|
|
50
|
+
table,
|
|
51
|
+
onCommit
|
|
52
|
+
})
|
|
53
|
+
] })
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
export { BasicColumnFilter };
|
|
59
|
+
//# sourceMappingURL=BasicColumnFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/BasicColumnFilter.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ForwardedRef, forwardRef, HTMLAttributes, ReactElement } from \"react\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { FilterBarProps } from \"../filter-bar\";\nimport { useBasicColumnFilter } from \"./useBasicColumnFilter\";\n\nimport basicColumnFilterCss from \"./BasicColumnFilter.css\";\n\nexport type FilterValue = string | number;\n\nconst classBase = \"vuuBasicColumnFilter\";\nconst searchIcon = <Icon name=\"search\" size={18} />;\n\nexport interface BasicColumnFilterProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<FilterBarProps, \"onApplyFilter\"> {\n /**\n * Column Attributes.\n */\n column: ColumnDescriptor;\n /**\n * VuuTable is required if typeahead support is expected.\n */\n table?: VuuTable;\n /**\n * Initial filter value.\n */\n initialValue?: FilterValue;\n /**\n *Show search icon as start adornment.\n */\n withStartAdornment?: boolean;\n}\n\nexport const BasicColumnFilter = forwardRef(function BasicColumnFilter(\n {\n column,\n className,\n table,\n initialValue,\n onApplyFilter,\n withStartAdornment = true,\n ...htmlAttributes\n }: BasicColumnFilterProps,\n forwardRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-basic-column-filter\",\n css: basicColumnFilterCss,\n window: targetWindow,\n });\n\n const { filterValue, onInputChange, onCommit } = useBasicColumnFilter({\n column,\n initialValue,\n onApplyFilter,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardRef}\n >\n <div className={`${classBase}-edit-control`}>\n {withStartAdornment && searchIcon}\n {getDataItemEditControl({\n InputProps: {\n inputProps: {\n placeholder: \"Find\",\n value: filterValue,\n onChange: onInputChange,\n },\n },\n dataDescriptor: column,\n table,\n onCommit,\n })}\n </div>\n </div>\n );\n}) as (\n props: BasicColumnFilterProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement<BasicColumnFilterProps>;\n"],"names":["BasicColumnFilter","forwardRef"],"mappings":";;;;;;;;;;AAeA,MAAM,SAAY,GAAA,sBAAA;AAClB,MAAM,6BAAc,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,QAAA,EAAS,MAAM,EAAI,EAAA,CAAA;AAuBpC,MAAA,iBAAA,GAAoB,UAAW,CAAA,SAASA,kBACnD,CAAA;AAAA,EACE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAqB,GAAA,IAAA;AAAA,EACrB,GAAG;AACL,CAAA,EACAC,WACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAA,oBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,WAAA,EAAa,aAAe,EAAA,QAAA,KAAa,oBAAqB,CAAA;AAAA,IACpE,MAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAKA,EAAAA,WAAAA;AAAA,MAEL,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CACzB,aAAA,CAAA,EAAA,QAAA,EAAA;AAAA,QAAsB,kBAAA,IAAA,UAAA;AAAA,QACtB,sBAAuB,CAAA;AAAA,UACtB,UAAY,EAAA;AAAA,YACV,UAAY,EAAA;AAAA,cACV,WAAa,EAAA,MAAA;AAAA,cACb,KAAO,EAAA,WAAA;AAAA,cACP,QAAU,EAAA;AAAA;AACZ,WACF;AAAA,UACA,cAAgB,EAAA,MAAA;AAAA,UAChB,KAAA;AAAA,UACA;AAAA,SACD;AAAA,OACH,EAAA;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
2
|
+
import { filterAsQuery, NoFilter } from '@vuu-ui/vuu-utils';
|
|
3
|
+
|
|
4
|
+
const filterOp = "=";
|
|
5
|
+
const asDataSourceFilter = (filter) => {
|
|
6
|
+
if (filter) {
|
|
7
|
+
return {
|
|
8
|
+
filter: filterAsQuery(filter),
|
|
9
|
+
filterStruct: filter
|
|
10
|
+
};
|
|
11
|
+
} else {
|
|
12
|
+
return NoFilter;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const useBasicColumnFilter = ({
|
|
16
|
+
initialValue,
|
|
17
|
+
column,
|
|
18
|
+
onApplyFilter
|
|
19
|
+
}) => {
|
|
20
|
+
const [filterValue, setFilterValue] = useState(initialValue);
|
|
21
|
+
const handleInputChange = useCallback(
|
|
22
|
+
(e) => {
|
|
23
|
+
setFilterValue(e.target.value);
|
|
24
|
+
},
|
|
25
|
+
[]
|
|
26
|
+
);
|
|
27
|
+
const handleCommit = useCallback(
|
|
28
|
+
(_, value) => {
|
|
29
|
+
const filter = { column: column.name, op: filterOp, value };
|
|
30
|
+
setFilterValue((value ?? "").toString());
|
|
31
|
+
onApplyFilter?.(asDataSourceFilter(filter));
|
|
32
|
+
},
|
|
33
|
+
[column, onApplyFilter]
|
|
34
|
+
);
|
|
35
|
+
return {
|
|
36
|
+
filterValue: filterValue ?? "",
|
|
37
|
+
onInputChange: handleInputChange,
|
|
38
|
+
onCommit: handleCommit
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export { useBasicColumnFilter };
|
|
43
|
+
//# sourceMappingURL=useBasicColumnFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBasicColumnFilter.js","sources":["../../../../packages/vuu-filters/src/basic-column-filter/useBasicColumnFilter.ts"],"sourcesContent":["import { ChangeEventHandler, useCallback, useState } from \"react\";\nimport { BasicColumnFilterProps } from \"./BasicColumnFilter\";\nimport { CommitHandler, filterAsQuery, NoFilter } from \"@vuu-ui/vuu-utils\";\nimport { Filter, SingleValueFilterClauseOp } from \"@vuu-ui/vuu-filter-types\";\nimport { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\n\nexport type FilterValue = string | number;\n\nexport type BasicColumnFilterHookProps = Pick<\n BasicColumnFilterProps,\n \"column\" | \"onApplyFilter\" | \"initialValue\"\n>;\n\nconst filterOp: SingleValueFilterClauseOp = \"=\";\n\nconst asDataSourceFilter = (filter: Filter): DataSourceFilter => {\n if (filter) {\n return {\n filter: filterAsQuery(filter),\n filterStruct: filter,\n };\n } else {\n return NoFilter;\n }\n};\n\nexport const useBasicColumnFilter = ({\n initialValue,\n column,\n onApplyFilter,\n}: BasicColumnFilterHookProps) => {\n const [filterValue, setFilterValue] = useState(initialValue);\n\n const handleInputChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (e) => {\n setFilterValue(e.target.value);\n },\n [],\n );\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (_, value) => {\n const filter: Filter = { column: column.name, op: filterOp, value };\n setFilterValue((value ?? \"\").toString());\n onApplyFilter?.(asDataSourceFilter(filter));\n },\n [column, onApplyFilter],\n );\n\n return {\n filterValue: filterValue ?? \"\",\n onInputChange: handleInputChange,\n onCommit: handleCommit,\n };\n};\n"],"names":[],"mappings":";;;AAaA,MAAM,QAAsC,GAAA,GAAA;AAE5C,MAAM,kBAAA,GAAqB,CAAC,MAAqC,KAAA;AAC/D,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA;AAAA,MACL,MAAA,EAAQ,cAAc,MAAM,CAAA;AAAA,MAC5B,YAAc,EAAA;AAAA,KAChB;AAAA,GACK,MAAA;AACL,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAEO,MAAM,uBAAuB,CAAC;AAAA,EACnC,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,YAAY,CAAA;AAE3D,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,CAAM,KAAA;AACL,MAAe,cAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,KAC/B;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,GAAG,KAAU,KAAA;AACZ,MAAA,MAAM,SAAiB,EAAE,MAAA,EAAQ,OAAO,IAAM,EAAA,EAAA,EAAI,UAAU,KAAM,EAAA;AAClE,MAAgB,cAAA,CAAA,CAAA,KAAA,IAAS,EAAI,EAAA,QAAA,EAAU,CAAA;AACvC,MAAgB,aAAA,GAAA,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,KAC5C;AAAA,IACA,CAAC,QAAQ,aAAa;AAAA,GACxB;AAEA,EAAO,OAAA;AAAA,IACL,aAAa,WAAe,IAAA,EAAA;AAAA,IAC5B,aAAe,EAAA,iBAAA;AAAA,IACf,QAAU,EAAA;AAAA,GACZ;AACF;;;;"}
|
package/esm/index.js
CHANGED
|
@@ -12,6 +12,7 @@ export { AND, ENDS_WITH, EQUALS, GREATER_THAN, IN, LESS_THAN, OR, STARTS_WITH, a
|
|
|
12
12
|
export { FilterClauseModel, FilterModel } from './FilterModel.js';
|
|
13
13
|
export { InlineFilter } from './inline-filter/InlineFilter.js';
|
|
14
14
|
export { QuickFilters } from './quick-filters/QuickFilters.js';
|
|
15
|
+
export { BasicColumnFilter } from './basic-column-filter/BasicColumnFilter.js';
|
|
15
16
|
export { SavedFilterPanel } from './saved-filters/SavedFilterPanel.js';
|
|
16
17
|
export { FilterNamePrompt as SaveFilterConfirmPrompt } from './saved-filters/FilterNamePrompt.js';
|
|
17
18
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.13.
|
|
2
|
+
"version": "0.13.27",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@vuu-ui/vuu-data-types": "0.13.
|
|
8
|
-
"@vuu-ui/vuu-protocol-types": "0.13.
|
|
9
|
-
"@vuu-ui/vuu-table-types": "0.13.
|
|
10
|
-
"@vuu-ui/vuu-filter-types": "0.13.
|
|
7
|
+
"@vuu-ui/vuu-data-types": "0.13.27",
|
|
8
|
+
"@vuu-ui/vuu-protocol-types": "0.13.27",
|
|
9
|
+
"@vuu-ui/vuu-table-types": "0.13.27",
|
|
10
|
+
"@vuu-ui/vuu-filter-types": "0.13.27"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@vuu-ui/vuu-data-react": "0.13.
|
|
14
|
-
"@vuu-ui/vuu-filter-parser": "0.13.
|
|
15
|
-
"@vuu-ui/vuu-popups": "0.13.
|
|
16
|
-
"@vuu-ui/vuu-ui-controls": "0.13.
|
|
17
|
-
"@vuu-ui/vuu-table": "0.13.
|
|
18
|
-
"@vuu-ui/vuu-utils": "0.13.
|
|
13
|
+
"@vuu-ui/vuu-data-react": "0.13.27",
|
|
14
|
+
"@vuu-ui/vuu-filter-parser": "0.13.27",
|
|
15
|
+
"@vuu-ui/vuu-popups": "0.13.27",
|
|
16
|
+
"@vuu-ui/vuu-ui-controls": "0.13.27",
|
|
17
|
+
"@vuu-ui/vuu-table": "0.13.27",
|
|
18
|
+
"@vuu-ui/vuu-utils": "0.13.27",
|
|
19
19
|
"@salt-ds/core": "1.43.0",
|
|
20
20
|
"@salt-ds/styles": "0.2.1",
|
|
21
21
|
"@salt-ds/window": "0.1.1"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ForwardedRef, HTMLAttributes, ReactElement } from "react";
|
|
2
|
+
import { VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
3
|
+
import { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
4
|
+
import { FilterBarProps } from "../filter-bar";
|
|
5
|
+
export type FilterValue = string | number;
|
|
6
|
+
export interface BasicColumnFilterProps extends HTMLAttributes<HTMLDivElement>, Pick<FilterBarProps, "onApplyFilter"> {
|
|
7
|
+
/**
|
|
8
|
+
* Column Attributes.
|
|
9
|
+
*/
|
|
10
|
+
column: ColumnDescriptor;
|
|
11
|
+
/**
|
|
12
|
+
* VuuTable is required if typeahead support is expected.
|
|
13
|
+
*/
|
|
14
|
+
table?: VuuTable;
|
|
15
|
+
/**
|
|
16
|
+
* Initial filter value.
|
|
17
|
+
*/
|
|
18
|
+
initialValue?: FilterValue;
|
|
19
|
+
/**
|
|
20
|
+
*Show search icon as start adornment.
|
|
21
|
+
*/
|
|
22
|
+
withStartAdornment?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare const BasicColumnFilter: (props: BasicColumnFilterProps & {
|
|
25
|
+
ref?: ForwardedRef<HTMLDivElement>;
|
|
26
|
+
}) => ReactElement<BasicColumnFilterProps>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChangeEventHandler } from "react";
|
|
2
|
+
import { BasicColumnFilterProps } from "./BasicColumnFilter";
|
|
3
|
+
import { CommitHandler } from "@vuu-ui/vuu-utils";
|
|
4
|
+
export type FilterValue = string | number;
|
|
5
|
+
export type BasicColumnFilterHookProps = Pick<BasicColumnFilterProps, "column" | "onApplyFilter" | "initialValue">;
|
|
6
|
+
export declare const useBasicColumnFilter: ({ initialValue, column, onApplyFilter, }: BasicColumnFilterHookProps) => {
|
|
7
|
+
filterValue: string | number;
|
|
8
|
+
onInputChange: ChangeEventHandler<HTMLInputElement>;
|
|
9
|
+
onCommit: CommitHandler<HTMLElement>;
|
|
10
|
+
};
|
package/types/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from "./filter-utils";
|
|
|
9
9
|
export * from "./FilterModel";
|
|
10
10
|
export * from "./inline-filter";
|
|
11
11
|
export * from "./quick-filters";
|
|
12
|
+
export { BasicColumnFilter, type BasicColumnFilterProps, } from "./basic-column-filter/BasicColumnFilter";
|
|
12
13
|
export { SavedFilterPanel } from "./saved-filters/SavedFilterPanel";
|
|
13
14
|
export type { FilterClickHandler, FilterDescriptor, } from "./saved-filters/useSavedFilterPanel";
|
|
14
15
|
export { FilterNamePrompt as SaveFilterConfirmPrompt, type FilterNamePromptProps as SaveFilterConfirmPromptProps, } from "./saved-filters/FilterNamePrompt";
|