dinocollab-core 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -487
- package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/dist/api-context/alert-global.js +1 -165
- package/dist/api-context/alert-global.js.map +1 -1
- package/dist/api-context/drawer-global.js +1 -111
- package/dist/api-context/drawer-global.js.map +1 -1
- package/dist/api-context/global-modal.js +1 -94
- package/dist/api-context/global-modal.js.map +1 -1
- package/dist/api-context/popover-global.js +1 -109
- package/dist/api-context/popover-global.js.map +1 -1
- package/dist/api-context/popover.js +1 -93
- package/dist/api-context/popover.js.map +1 -1
- package/dist/api-context/ui.units.js +1 -22
- package/dist/api-context/ui.units.js.map +1 -1
- package/dist/components/breadcrumbs.js +1 -64
- package/dist/components/breadcrumbs.js.map +1 -1
- package/dist/components/copy-to-clipboard.js +1 -111
- package/dist/components/copy-to-clipboard.js.map +1 -1
- package/dist/components/create.multi-select-dropdown.js +2 -0
- package/dist/components/create.multi-select-dropdown.js.map +1 -0
- package/dist/components/help-tooltip.js +1 -103
- package/dist/components/help-tooltip.js.map +1 -1
- package/dist/components/image-with-fallback.js +1 -50
- package/dist/components/image-with-fallback.js.map +1 -1
- package/dist/components/text-editor.js +1 -117
- package/dist/components/text-editor.js.map +1 -1
- package/dist/components/text-editor.preview.js +1 -26
- package/dist/components/text-editor.preview.js.map +1 -1
- package/dist/filter-bar/base.js +2 -0
- package/dist/filter-bar/base.js.map +1 -0
- package/dist/filter-bar/create.filter-bar.js +2 -0
- package/dist/filter-bar/create.filter-bar.js.map +1 -0
- package/dist/filter-bar/create.filter-menu.js +2 -0
- package/dist/filter-bar/create.filter-menu.js.map +1 -0
- package/dist/filter-bar/create.filter-panel.js +2 -0
- package/dist/filter-bar/create.filter-panel.js.map +1 -0
- package/dist/filter-bar/create.filtered.js +2 -0
- package/dist/filter-bar/create.filtered.js.map +1 -0
- package/dist/filter-bar/create.sort-menu.js +2 -0
- package/dist/filter-bar/create.sort-menu.js.map +1 -0
- package/dist/filter-bar/demo.js +2 -0
- package/dist/filter-bar/demo.js.map +1 -0
- package/dist/filter-bar/types.js +2 -0
- package/dist/filter-bar/types.js.map +1 -0
- package/dist/filter-bar/ui.units.js +2 -0
- package/dist/filter-bar/ui.units.js.map +1 -0
- package/dist/form/create.autocomplete.chips.js +1 -227
- package/dist/form/create.autocomplete.chips.js.map +1 -1
- package/dist/form/create.date-expired.js +1 -210
- package/dist/form/create.date-expired.js.map +1 -1
- package/dist/form/create.date-picker.js +1 -127
- package/dist/form/create.date-picker.js.map +1 -1
- package/dist/form/create.form-base.js +1 -140
- package/dist/form/create.form-base.js.map +1 -1
- package/dist/form/create.form-comfirm.js +1 -130
- package/dist/form/create.form-comfirm.js.map +1 -1
- package/dist/form/create.form-grid-layout.js +1 -187
- package/dist/form/create.form-grid-layout.js.map +1 -1
- package/dist/form/create.form-grid-layout.units.js +1 -41
- package/dist/form/create.form-grid-layout.units.js.map +1 -1
- package/dist/form/create.input.file.js +1 -78
- package/dist/form/create.input.file.js.map +1 -1
- package/dist/form/create.input.js +1 -275
- package/dist/form/create.input.js.map +1 -1
- package/dist/form/create.select-simple.js +1 -113
- package/dist/form/create.select-simple.js.map +1 -1
- package/dist/form/create.select-with-api.js +1 -276
- package/dist/form/create.select-with-api.js.map +1 -1
- package/dist/form/create.text-editor.js +1 -180
- package/dist/form/create.text-editor.js.map +1 -1
- package/dist/form/dino-form.js +1 -40
- package/dist/form/dino-form.js.map +1 -1
- package/dist/form/helper.js +1 -156
- package/dist/form/helper.js.map +1 -1
- package/dist/form/modal-wrapper.js +1 -81
- package/dist/form/modal-wrapper.js.map +1 -1
- package/dist/form/validator.js +1 -189
- package/dist/form/validator.js.map +1 -1
- package/dist/hooks/index.js +1 -47
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +1 -32
- package/dist/index.js.map +1 -1
- package/dist/redux/create.hoc-lazy.js +1 -70
- package/dist/redux/create.hoc-lazy.js.map +1 -1
- package/dist/redux/dino.js +1 -10
- package/dist/redux/dino.js.map +1 -1
- package/dist/redux/types.js +1 -8
- package/dist/redux/types.js.map +1 -1
- package/dist/redux/ui.error-page.js +1 -88
- package/dist/redux/ui.error-page.js.map +1 -1
- package/dist/redux/vector-404.webp.js +1 -3
- package/dist/redux/vector-404.webp.js.map +1 -1
- package/dist/table/context.js +1 -14
- package/dist/table/context.js.map +1 -1
- package/dist/table/create.action-row.js +1 -143
- package/dist/table/create.action-row.js.map +1 -1
- package/dist/table/create.table.js +1 -245
- package/dist/table/create.table.js.map +1 -1
- package/dist/table/custom.filter-operators.js +1 -88
- package/dist/table/custom.filter-operators.js.map +1 -1
- package/dist/table/dino.js +1 -135
- package/dist/table/dino.js.map +1 -1
- package/dist/table/helpers.js +1 -114
- package/dist/table/helpers.js.map +1 -1
- package/dist/table/model-filter.js +1 -22
- package/dist/table/model-filter.js.map +1 -1
- package/dist/table/toolbar-pannel.js +1 -142
- package/dist/table/toolbar-pannel.js.map +1 -1
- package/dist/table/ui.buttons.js +1 -66
- package/dist/table/ui.buttons.js.map +1 -1
- package/dist/table/ui.units.js +1 -247
- package/dist/table/ui.units.js.map +1 -1
- package/dist/table-grid/create.table-grid.js +2 -0
- package/dist/table-grid/create.table-grid.js.map +1 -0
- package/dist/table-grid/dino.js +2 -0
- package/dist/table-grid/dino.js.map +1 -0
- package/dist/table-grid/helpers.js +2 -0
- package/dist/table-grid/helpers.js.map +1 -0
- package/dist/table-grid/item-actions.js +2 -0
- package/dist/table-grid/item-actions.js.map +1 -0
- package/dist/table-grid/toolbar-pannel.js +2 -0
- package/dist/table-grid/toolbar-pannel.js.map +1 -0
- package/dist/types/{lab → components}/create.multi-select-dropdown.d.ts +5 -5
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/lab/{create.select-mul-with-api/index.d.ts → select-mul-with-api/create.select-mul-with-api.d.ts} +1 -1
- package/dist/types/lab/select-mul-with-api/index.d.ts +2 -0
- package/dist/types/lab/{create.select-mul-with-api → select-mul-with-api}/types.d.ts +1 -1
- package/dist/types/{lab/table-grid → table-grid}/item-actions.d.ts +1 -1
- package/dist/types/{lab/table-grid → table-grid}/toolbar-pannel.d.ts +1 -1
- package/dist/types/{lab/table-grid → table-grid}/types.d.ts +1 -1
- package/dist/utils/dayjs-config.js +1 -11
- package/dist/utils/dayjs-config.js.map +1 -1
- package/dist/utils/helpers.js +1 -198
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/json-object.js +1 -37
- package/dist/utils/json-object.js.map +1 -1
- package/dist/utils/query-param.js +1 -171
- package/dist/utils/query-param.js.map +1 -1
- package/package.json +3 -8
- package/dist/index.d.ts +0 -928
- /package/dist/types/{lab/filter-bar → filter-bar}/base.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/create.filter-bar.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/create.filter-menu.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/create.filter-panel.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/create.filtered.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/create.sort-menu.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/demo.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/index.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/types.d.ts +0 -0
- /package/dist/types/{lab/filter-bar → filter-bar}/ui.units.d.ts +0 -0
- /package/dist/types/lab/{create.select-mul-with-api → select-mul-with-api}/table-custom.d.ts +0 -0
- /package/dist/types/lab/{create.select-mul-with-api → select-mul-with-api}/ui.units.d.ts +0 -0
- /package/dist/types/{lab/table-grid → table-grid}/create.table-grid.d.ts +0 -0
- /package/dist/types/{lab/table-grid → table-grid}/demo.d.ts +0 -0
- /package/dist/types/{lab/table-grid → table-grid}/dino.d.ts +0 -0
- /package/dist/types/{lab/table-grid → table-grid}/helpers.d.ts +0 -0
- /package/dist/types/{lab/table-grid → table-grid}/index.d.ts +0 -0
|
@@ -1,118 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { Component } from 'react';
|
|
4
|
-
import { styled, Box } from '@mui/material';
|
|
5
|
-
import ReactQuill from 'react-quill';
|
|
6
|
-
import 'react-quill/dist/quill.snow.css';
|
|
7
|
-
|
|
8
|
-
var textEditorClasses = {
|
|
9
|
-
root: 'DinoTextEditor-root',
|
|
10
|
-
fullscreen: 'DinoTextEditor-fullscreen'
|
|
11
|
-
};
|
|
12
|
-
var EditorToolbar = {};
|
|
13
|
-
EditorToolbar.formats = ['header', 'bold', 'italic', 'underline', 'strike', 'blockquote', 'list', 'bullet', 'indent', 'link', 'image', 'align', 'color', 'background'];
|
|
14
|
-
EditorToolbar.modules = {
|
|
15
|
-
toolbar: [[{
|
|
16
|
-
header: [1, 2, 3, 4, 5, 6, false]
|
|
17
|
-
}], ['bold', 'italic', 'underline', 'strike', 'blockquote'], [{
|
|
18
|
-
align: ''
|
|
19
|
-
}, {
|
|
20
|
-
align: 'center'
|
|
21
|
-
}, {
|
|
22
|
-
align: 'right'
|
|
23
|
-
}, {
|
|
24
|
-
align: 'justify'
|
|
25
|
-
}], [{
|
|
26
|
-
list: 'ordered'
|
|
27
|
-
}, {
|
|
28
|
-
list: 'bullet'
|
|
29
|
-
}, {
|
|
30
|
-
indent: '-1'
|
|
31
|
-
}, {
|
|
32
|
-
indent: '+1'
|
|
33
|
-
}], [{
|
|
34
|
-
color: []
|
|
35
|
-
}, {
|
|
36
|
-
background: []
|
|
37
|
-
}], ['link', 'image'], ['clean']]
|
|
38
|
-
};
|
|
39
|
-
var TextEditor = /*#__PURE__*/function (_Component) {
|
|
40
|
-
function TextEditor(props) {
|
|
41
|
-
var _props$defautValue;
|
|
42
|
-
var _this;
|
|
43
|
-
_classCallCheck(this, TextEditor);
|
|
44
|
-
_this = _callSuper(this, TextEditor, [props]);
|
|
45
|
-
_defineProperty(_this, "handleChange", function (value) {
|
|
46
|
-
var str = value;
|
|
47
|
-
if (value === '<p><br></p>') str = '';
|
|
48
|
-
_this.setState({
|
|
49
|
-
value: str
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
_defineProperty(_this, "id", 0);
|
|
53
|
-
_this.state = {
|
|
54
|
-
value: (_props$defautValue = props.defautValue) !== null && _props$defautValue !== void 0 ? _props$defautValue : ''
|
|
55
|
-
};
|
|
56
|
-
return _this;
|
|
57
|
-
}
|
|
58
|
-
_inherits(TextEditor, _Component);
|
|
59
|
-
return _createClass(TextEditor, [{
|
|
60
|
-
key: "render",
|
|
61
|
-
value: function render() {
|
|
62
|
-
var classes = [textEditorClasses.root];
|
|
63
|
-
if (this.props.error) classes.push('error');
|
|
64
|
-
return jsxs(Wrapper, {
|
|
65
|
-
id: this.props.id,
|
|
66
|
-
sx: this.props.sx,
|
|
67
|
-
className: classes.join(' '),
|
|
68
|
-
children: [!this.props.readOnly && jsx("input", {
|
|
69
|
-
name: this.props.name,
|
|
70
|
-
defaultValue: this.state.value,
|
|
71
|
-
hidden: true
|
|
72
|
-
}, ++this.id), jsx(ReactQuill, {
|
|
73
|
-
readOnly: this.props.readOnly,
|
|
74
|
-
placeholder: 'Enter the message',
|
|
75
|
-
value: this.state.value,
|
|
76
|
-
modules: EditorToolbar.modules,
|
|
77
|
-
formats: EditorToolbar.formats,
|
|
78
|
-
onChange: this.handleChange,
|
|
79
|
-
onBlur: this.props.onBlur
|
|
80
|
-
})]
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}]);
|
|
84
|
-
}(Component);
|
|
85
|
-
var borderColor = '#d32f2f';
|
|
86
|
-
var Wrapper = styled(Box)({
|
|
87
|
-
margin: 0,
|
|
88
|
-
minHeight: '450px',
|
|
89
|
-
display: 'flex',
|
|
90
|
-
'& .quill': {
|
|
91
|
-
flex: 1
|
|
92
|
-
},
|
|
93
|
-
'& .ql-container': {
|
|
94
|
-
height: 'calc(100% - 42px)',
|
|
95
|
-
borderBottomLeftRadius: '6px',
|
|
96
|
-
borderBottomRightRadius: '6px'
|
|
97
|
-
},
|
|
98
|
-
'& .ql-toolbar': {
|
|
99
|
-
borderTopLeftRadius: '6px',
|
|
100
|
-
borderTopRightRadius: '6px'
|
|
101
|
-
},
|
|
102
|
-
'&.error .ql-toolbar': {
|
|
103
|
-
borderTopColor: borderColor,
|
|
104
|
-
borderLeftColor: borderColor,
|
|
105
|
-
borderRightColor: borderColor
|
|
106
|
-
},
|
|
107
|
-
'&.error .ql-container': {
|
|
108
|
-
borderBottomColor: borderColor,
|
|
109
|
-
borderLeftColor: borderColor,
|
|
110
|
-
borderRightColor: borderColor
|
|
111
|
-
},
|
|
112
|
-
'&.error .ql-editor.ql-blank::before': {
|
|
113
|
-
color: borderColor
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
export { TextEditor as default, textEditorClasses };
|
|
1
|
+
import{inherits as r,createClass as e,classCallCheck as o,callSuper as t,defineProperty as l}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as i,jsx as a}from"react/jsx-runtime";import{Component as n}from"react";import{styled as s,Box as d}from"@mui/material";import u from"react-quill";import"react-quill/dist/quill.snow.css";var p={root:"DinoTextEditor-root",fullscreen:"DinoTextEditor-fullscreen"},h={formats:["header","bold","italic","underline","strike","blockquote","list","bullet","indent","link","image","align","color","background"],modules:{toolbar:[[{header:[1,2,3,4,5,6,!1]}],["bold","italic","underline","strike","blockquote"],[{align:""},{align:"center"},{align:"right"},{align:"justify"}],[{list:"ordered"},{list:"bullet"},{indent:"-1"},{indent:"+1"}],[{color:[]},{background:[]}],["link","image"],["clean"]]}},c=function(){function s(r){var e,i;return o(this,s),i=t(this,s,[r]),l(i,"handleChange",(function(r){var e=r;"<p><br></p>"===r&&(e=""),i.setState({value:e})})),l(i,"id",0),i.state={value:null!==(e=r.defautValue)&&void 0!==e?e:""},i}return r(s,n),e(s,[{key:"render",value:function(){var r=[p.root];return this.props.error&&r.push("error"),i(f,{id:this.props.id,sx:this.props.sx,className:r.join(" "),children:[!this.props.readOnly&&a("input",{name:this.props.name,defaultValue:this.state.value,hidden:!0},++this.id),a(u,{readOnly:this.props.readOnly,placeholder:"Enter the message",value:this.state.value,modules:h.modules,formats:h.formats,onChange:this.handleChange,onBlur:this.props.onBlur})]})}}])}(),m="#d32f2f",f=s(d)({margin:0,minHeight:"450px",display:"flex","& .quill":{flex:1},"& .ql-container":{height:"calc(100% - 42px)",borderBottomLeftRadius:"6px",borderBottomRightRadius:"6px"},"& .ql-toolbar":{borderTopLeftRadius:"6px",borderTopRightRadius:"6px"},"&.error .ql-toolbar":{borderTopColor:m,borderLeftColor:m,borderRightColor:m},"&.error .ql-container":{borderBottomColor:m,borderLeftColor:m,borderRightColor:m},"&.error .ql-editor.ql-blank::before":{color:m}});export{c as default,p as textEditorClasses};
|
|
118
2
|
//# sourceMappingURL=text-editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor.js","sources":["../../src/components/text-editor.tsx"],"sourcesContent":["// /* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { Component } from 'react'\r\nimport { Box, styled, SxProps, Theme } from '@mui/material'\r\n/**\r\n * yarn add react-quill@2.0.0\r\n */\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\n\r\nexport const textEditorClasses = {\r\n root: 'DinoTextEditor-root',\r\n fullscreen: 'DinoTextEditor-fullscreen'\r\n}\r\n\r\nconst EditorToolbar: any = {}\r\n\r\nEditorToolbar.formats = [\r\n 'header',\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strike',\r\n 'blockquote',\r\n 'list',\r\n 'bullet',\r\n 'indent',\r\n 'link',\r\n 'image',\r\n 'align',\r\n 'color',\r\n 'background'\r\n]\r\n\r\nEditorToolbar.modules = {\r\n toolbar: [\r\n [{ header: [1, 2, 3, 4, 5, 6, false] }],\r\n ['bold', 'italic', 'underline', 'strike', 'blockquote'],\r\n [{ align: '' }, { align: 'center' }, { align: 'right' }, { align: 'justify' }],\r\n [{ list: 'ordered' }, { list: 'bullet' }, { indent: '-1' }, { indent: '+1' }],\r\n [{ color: [] }, { background: [] }],\r\n ['link', 'image'],\r\n ['clean']\r\n ]\r\n}\r\n\r\nexport interface ITextEditorProps {\r\n id?: string\r\n name: string\r\n sx?: SxProps<Theme>\r\n readOnly?: boolean\r\n defautValue?: string\r\n error?: boolean\r\n onBlur?: () => void\r\n}\r\n\r\nexport interface ITextEditorState {\r\n value: string\r\n}\r\n\r\nclass TextEditor extends Component<ITextEditorProps, ITextEditorState> {\r\n constructor(props: ITextEditorProps) {\r\n super(props)\r\n this.state = { value: props.defautValue ?? '' }\r\n }\r\n handleChange = (value: string) => {\r\n let str = value\r\n if (value === '<p><br></p>') str = ''\r\n this.setState({ value: str })\r\n }\r\n\r\n id = 0\r\n render() {\r\n const classes = [textEditorClasses.root]\r\n if (this.props.error) classes.push('error')\r\n return (\r\n <Wrapper id={this.props.id} sx={this.props.sx} className={classes.join(' ')}>\r\n {!this.props.readOnly && <input key={++this.id} name={this.props.name} defaultValue={this.state.value} hidden />}\r\n <ReactQuill\r\n readOnly={this.props.readOnly}\r\n placeholder='Enter the message'\r\n value={this.state.value}\r\n modules={EditorToolbar.modules}\r\n formats={EditorToolbar.formats}\r\n onChange={this.handleChange}\r\n onBlur={this.props.onBlur}\r\n />\r\n </Wrapper>\r\n )\r\n }\r\n}\r\n\r\nexport default TextEditor\r\n\r\nconst borderColor = '#d32f2f'\r\n\r\nconst Wrapper = styled(Box)({\r\n margin: 0,\r\n minHeight: '450px',\r\n display: 'flex',\r\n '& .quill': { flex: 1 },\r\n '& .ql-container': {\r\n height: 'calc(100% - 42px)',\r\n borderBottomLeftRadius: '6px',\r\n borderBottomRightRadius: '6px'\r\n },\r\n '& .ql-toolbar': {\r\n borderTopLeftRadius: '6px',\r\n borderTopRightRadius: '6px'\r\n },\r\n '&.error .ql-toolbar': {\r\n borderTopColor: borderColor,\r\n borderLeftColor: borderColor,\r\n borderRightColor: borderColor\r\n },\r\n '&.error .ql-container': {\r\n borderBottomColor: borderColor,\r\n borderLeftColor: borderColor,\r\n borderRightColor: borderColor\r\n },\r\n '&.error .ql-editor.ql-blank::before': {\r\n color: borderColor\r\n }\r\n})\r\n"],"names":["textEditorClasses","root","fullscreen","EditorToolbar","
|
|
1
|
+
{"version":3,"file":"text-editor.js","sources":["../../src/components/text-editor.tsx"],"sourcesContent":["// /* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { Component } from 'react'\r\nimport { Box, styled, SxProps, Theme } from '@mui/material'\r\n/**\r\n * yarn add react-quill@2.0.0\r\n */\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\n\r\nexport const textEditorClasses = {\r\n root: 'DinoTextEditor-root',\r\n fullscreen: 'DinoTextEditor-fullscreen'\r\n}\r\n\r\nconst EditorToolbar: any = {}\r\n\r\nEditorToolbar.formats = [\r\n 'header',\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strike',\r\n 'blockquote',\r\n 'list',\r\n 'bullet',\r\n 'indent',\r\n 'link',\r\n 'image',\r\n 'align',\r\n 'color',\r\n 'background'\r\n]\r\n\r\nEditorToolbar.modules = {\r\n toolbar: [\r\n [{ header: [1, 2, 3, 4, 5, 6, false] }],\r\n ['bold', 'italic', 'underline', 'strike', 'blockquote'],\r\n [{ align: '' }, { align: 'center' }, { align: 'right' }, { align: 'justify' }],\r\n [{ list: 'ordered' }, { list: 'bullet' }, { indent: '-1' }, { indent: '+1' }],\r\n [{ color: [] }, { background: [] }],\r\n ['link', 'image'],\r\n ['clean']\r\n ]\r\n}\r\n\r\nexport interface ITextEditorProps {\r\n id?: string\r\n name: string\r\n sx?: SxProps<Theme>\r\n readOnly?: boolean\r\n defautValue?: string\r\n error?: boolean\r\n onBlur?: () => void\r\n}\r\n\r\nexport interface ITextEditorState {\r\n value: string\r\n}\r\n\r\nclass TextEditor extends Component<ITextEditorProps, ITextEditorState> {\r\n constructor(props: ITextEditorProps) {\r\n super(props)\r\n this.state = { value: props.defautValue ?? '' }\r\n }\r\n handleChange = (value: string) => {\r\n let str = value\r\n if (value === '<p><br></p>') str = ''\r\n this.setState({ value: str })\r\n }\r\n\r\n id = 0\r\n render() {\r\n const classes = [textEditorClasses.root]\r\n if (this.props.error) classes.push('error')\r\n return (\r\n <Wrapper id={this.props.id} sx={this.props.sx} className={classes.join(' ')}>\r\n {!this.props.readOnly && <input key={++this.id} name={this.props.name} defaultValue={this.state.value} hidden />}\r\n <ReactQuill\r\n readOnly={this.props.readOnly}\r\n placeholder='Enter the message'\r\n value={this.state.value}\r\n modules={EditorToolbar.modules}\r\n formats={EditorToolbar.formats}\r\n onChange={this.handleChange}\r\n onBlur={this.props.onBlur}\r\n />\r\n </Wrapper>\r\n )\r\n }\r\n}\r\n\r\nexport default TextEditor\r\n\r\nconst borderColor = '#d32f2f'\r\n\r\nconst Wrapper = styled(Box)({\r\n margin: 0,\r\n minHeight: '450px',\r\n display: 'flex',\r\n '& .quill': { flex: 1 },\r\n '& .ql-container': {\r\n height: 'calc(100% - 42px)',\r\n borderBottomLeftRadius: '6px',\r\n borderBottomRightRadius: '6px'\r\n },\r\n '& .ql-toolbar': {\r\n borderTopLeftRadius: '6px',\r\n borderTopRightRadius: '6px'\r\n },\r\n '&.error .ql-toolbar': {\r\n borderTopColor: borderColor,\r\n borderLeftColor: borderColor,\r\n borderRightColor: borderColor\r\n },\r\n '&.error .ql-container': {\r\n borderBottomColor: borderColor,\r\n borderLeftColor: borderColor,\r\n borderRightColor: borderColor\r\n },\r\n '&.error .ql-editor.ql-blank::before': {\r\n color: borderColor\r\n }\r\n})\r\n"],"names":["textEditorClasses","root","fullscreen","EditorToolbar","toolbar","header","align","list","indent","color","background","TextEditor","props","_props$defautValue","_this","_classCallCheck","_callSuper","_defineProperty","value","str","setState","state","defautValue","_inherits","Component","_createClass","key","classes","this","error","push","_jsxs","Wrapper","id","sx","className","join","children","readOnly","_jsx","name","defaultValue","hidden","ReactQuill","placeholder","modules","formats","onChange","handleChange","onBlur","borderColor","styled","Box","margin","minHeight","display","flex","height","borderBottomLeftRadius","borderBottomRightRadius","borderTopLeftRadius","borderTopRightRadius","borderTopColor","borderLeftColor","borderRightColor","borderBottomColor"],"mappings":"mVASO,IAAMA,EAAoB,CAC/BC,KAAM,sBACNC,WAAY,6BAGRC,EAAqB,CAE3BA,QAAwB,CACtB,SACA,OACA,SACA,YACA,SACA,aACA,OACA,SACA,SACA,OACA,QACA,QACA,QACA,cAGFA,QAAwB,CACtBC,QAAS,CACP,CAAC,CAAEC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAG,KAC9B,CAAC,OAAQ,SAAU,YAAa,SAAU,cAC1C,CAAC,CAAEC,MAAO,IAAM,CAAEA,MAAO,UAAY,CAAEA,MAAO,SAAW,CAAEA,MAAO,YAClE,CAAC,CAAEC,KAAM,WAAa,CAAEA,KAAM,UAAY,CAAEC,OAAQ,MAAQ,CAAEA,OAAQ,OACtE,CAAC,CAAEC,MAAO,IAAM,CAAEC,WAAY,KAC9B,CAAC,OAAQ,SACT,CAAC,YAkBCC,aACJ,SAAAA,EAAYC,GAAuB,IAAAC,EAAAC,EAEc,OAFdC,OAAAJ,GACjCG,EAAAE,EAAAL,KAAAA,GAAMC,IAAMK,EAAAH,EAGC,gBAAA,SAACI,GACd,IAAIC,EAAMD,EACI,gBAAVA,IAAyBC,EAAM,IACnCL,EAAKM,SAAS,CAAEF,MAAOC,OACxBF,EAAAH,EAAA,KAEI,GARHA,EAAKO,MAAQ,CAAEH,MAAwBL,QAAnBA,EAAED,EAAMU,mBAAWT,IAAAA,EAAAA,EAAI,IAAIC,CACjD,CAAC,OAAAS,EAAAZ,EAJsBa,GAItBC,EAAAd,EAAA,CAAA,CAAAe,IAAA,SAAAR,MAQD,WACE,IAAMS,EAAU,CAAC3B,EAAkBC,MAEnC,OADI2B,KAAKhB,MAAMiB,OAAOF,EAAQG,KAAK,SAEjCC,EAACC,EAAQ,CAAAC,GAAIL,KAAKhB,MAAMqB,GAAIC,GAAIN,KAAKhB,MAAMsB,GAAIC,UAAWR,EAAQS,KAAK,KACpEC,SAAA,EAACT,KAAKhB,MAAM0B,UAAYC,EAAA,QAAA,CAAuBC,KAAMZ,KAAKhB,MAAM4B,KAAMC,aAAcb,KAAKP,MAAMH,MAAOwB,QAAlE,KAAEd,KAAKK,IAC5CM,EAACI,GACCL,SAAUV,KAAKhB,MAAM0B,SACrBM,YAAY,oBACZ1B,MAAOU,KAAKP,MAAMH,MAClB2B,QAAS1C,EAAc0C,QACvBC,QAAS3C,EAAc2C,QACvBC,SAAUnB,KAAKoB,aACfC,OAAQrB,KAAKhB,MAAMqC,WAI3B,IAAC,IAKGC,EAAc,UAEdlB,EAAUmB,EAAOC,EAAPD,CAAY,CAC1BE,OAAQ,EACRC,UAAW,QACXC,QAAS,OACT,WAAY,CAAEC,KAAM,GACpB,kBAAmB,CACjBC,OAAQ,oBACRC,uBAAwB,MACxBC,wBAAyB,OAE3B,gBAAiB,CACfC,oBAAqB,MACrBC,qBAAsB,OAExB,sBAAuB,CACrBC,eAAgBZ,EAChBa,gBAAiBb,EACjBc,iBAAkBd,GAEpB,wBAAyB,CACvBe,kBAAmBf,EACnBa,gBAAiBb,EACjBc,iBAAkBd,GAEpB,sCAAuC,CACrCzC,MAAOyC"}
|
|
@@ -1,27 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
|
-
var TextEditorPreview = function TextEditorPreview(props) {
|
|
5
|
-
var contentRef = React.useRef(null);
|
|
6
|
-
React.useEffect(function () {
|
|
7
|
-
// Lấy phần tử template
|
|
8
|
-
var template = document.createElement('template');
|
|
9
|
-
template.innerHTML = "\n <link rel=\"stylesheet\" href=\"css/quill.snow.css\">\n <div class='ql-editor'>".concat(props.children, "</div>\n ");
|
|
10
|
-
// Tạo shadow DOM và chèn nội dung từ template
|
|
11
|
-
if (contentRef.current) {
|
|
12
|
-
var shadowRoot = contentRef.current.shadowRoot || contentRef.current.attachShadow({
|
|
13
|
-
mode: 'open'
|
|
14
|
-
});
|
|
15
|
-
shadowRoot.innerHTML = ''; // Reset nội dung cũ
|
|
16
|
-
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
17
|
-
}
|
|
18
|
-
}, [props.children]);
|
|
19
|
-
return jsx(Fragment, {
|
|
20
|
-
children: jsx("div", {
|
|
21
|
-
ref: contentRef
|
|
22
|
-
})
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export { TextEditorPreview as default };
|
|
1
|
+
import{jsx as e,Fragment as n}from"react/jsx-runtime";import r from"react";var t=function(t){var c=r.useRef(null);return r.useEffect((function(){var e=document.createElement("template");if(e.innerHTML='\n <link rel="stylesheet" href="css/quill.snow.css">\n <div class=\'ql-editor\'>'.concat(t.children,"</div>\n "),c.current){var n=c.current.shadowRoot||c.current.attachShadow({mode:"open"});n.innerHTML="",n.appendChild(e.content.cloneNode(!0))}}),[t.children]),e(n,{children:e("div",{ref:c})})};export{t as default};
|
|
27
2
|
//# sourceMappingURL=text-editor.preview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor.preview.js","sources":["../../src/components/text-editor.preview.tsx"],"sourcesContent":["import React, { FC } from 'react'\r\n\r\nconst TextEditorPreview: FC<{ children: string }> = (props) => {\r\n const contentRef = React.useRef<HTMLDivElement | null>(null)\r\n\r\n React.useEffect(() => {\r\n // Lấy phần tử template\r\n const template = document.createElement('template')\r\n template.innerHTML = `\r\n <link rel=\"stylesheet\" href=\"css/quill.snow.css\">\r\n <div class='ql-editor'>${props.children}</div>\r\n `\r\n\r\n // Tạo shadow DOM và chèn nội dung từ template\r\n if (contentRef.current) {\r\n const shadowRoot = contentRef.current.shadowRoot || contentRef.current.attachShadow({ mode: 'open' })\r\n\r\n shadowRoot.innerHTML = '' // Reset nội dung cũ\r\n shadowRoot.appendChild(template.content.cloneNode(true))\r\n }\r\n }, [props.children])\r\n\r\n return (\r\n <>\r\n <div ref={contentRef}></div>\r\n </>\r\n )\r\n}\r\n\r\nexport default TextEditorPreview\r\n"],"names":["TextEditorPreview","props","contentRef","React","useRef","useEffect","template","document","createElement","innerHTML","concat","children","current","shadowRoot","attachShadow","mode","appendChild","content","cloneNode","_jsx","ref"],"mappings":"
|
|
1
|
+
{"version":3,"file":"text-editor.preview.js","sources":["../../src/components/text-editor.preview.tsx"],"sourcesContent":["import React, { FC } from 'react'\r\n\r\nconst TextEditorPreview: FC<{ children: string }> = (props) => {\r\n const contentRef = React.useRef<HTMLDivElement | null>(null)\r\n\r\n React.useEffect(() => {\r\n // Lấy phần tử template\r\n const template = document.createElement('template')\r\n template.innerHTML = `\r\n <link rel=\"stylesheet\" href=\"css/quill.snow.css\">\r\n <div class='ql-editor'>${props.children}</div>\r\n `\r\n\r\n // Tạo shadow DOM và chèn nội dung từ template\r\n if (contentRef.current) {\r\n const shadowRoot = contentRef.current.shadowRoot || contentRef.current.attachShadow({ mode: 'open' })\r\n\r\n shadowRoot.innerHTML = '' // Reset nội dung cũ\r\n shadowRoot.appendChild(template.content.cloneNode(true))\r\n }\r\n }, [props.children])\r\n\r\n return (\r\n <>\r\n <div ref={contentRef}></div>\r\n </>\r\n )\r\n}\r\n\r\nexport default TextEditorPreview\r\n"],"names":["TextEditorPreview","props","contentRef","React","useRef","useEffect","template","document","createElement","innerHTML","concat","children","current","shadowRoot","attachShadow","mode","appendChild","content","cloneNode","_jsx","ref"],"mappings":"2EAEA,IAAMA,EAA8C,SAACC,GACnD,IAAMC,EAAaC,EAAMC,OAA8B,MAmBvD,OAjBAD,EAAME,WAAU,WAEd,IAAMC,EAAWC,SAASC,cAAc,YAOxC,GANAF,EAASG,UAASC,6FAAAA,OAEST,EAAMU,SAChC,gBAGGT,EAAWU,QAAS,CACtB,IAAMC,EAAaX,EAAWU,QAAQC,YAAcX,EAAWU,QAAQE,aAAa,CAAEC,KAAM,SAE5FF,EAAWJ,UAAY,GACvBI,EAAWG,YAAYV,EAASW,QAAQC,WAAU,GACnD,CACH,GAAG,CAACjB,EAAMU,WAGRQ,cACEA,EAAK,MAAA,CAAAC,IAAKlB,KAGhB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{inherits as e,createClass as r,classCallCheck as t,callSuper as i,defineProperty as a,toConsumableArray as n,objectSpread2 as l,createForOfIteratorHelper as u}from"../_virtual/_rollupPluginBabelHelpers.js";import{Component as o}from"react";import{ESearchMatch as s,EFieldValidate as c}from"./types.js";var f={root:"FilterPanel-root",list:"FilterPanel-list",item:"FilterPanel-item"},v=function(){function f(){var e;t(this,f);for(var r=arguments.length,o=new Array(r),v=0;v<r;v++)o[v]=arguments[v];return e=i(this,f,[].concat(o)),a(e,"mergeFilter",(function(e,r){var t,i,a=null!==(t=null==r?void 0:r.filter)&&void 0!==t?t:{};if(null!=e&&e.filter){var l=function(){var r,t,i=u,l=null!==(r=a[i])&&void 0!==r?r:[],o=null!==(t=null==e?void 0:e.filter[i])&&void 0!==t?t:[],s=new Set(l.map((function(e){return e.value}))),c=[].concat(n(l),n(o.filter((function(e){return!s.has(e.value)}))));c.length>0&&(a[i]=c)};for(var u in null==e?void 0:e.filter)l()}return{filter:Object.keys(a).length?a:{},details:null!==(i=null==r?void 0:r.details)&&void 0!==i?i:null==e?void 0:e.details}})),a(e,"patchFilterWithKey",(function(e,r,t){var i,a=l({},e.filter||{}),u=null!==(i=a[r])&&void 0!==i?i:[],o=!u.map((function(e){return e.value})).includes(t.value);return o&&(u=[].concat(n(u),[t])),a[r]=u,{isChanged:o,filterState:l(l({},e),{},{filter:a})}})),a(e,"deleteFilterWithKey",(function(e,r){var t=l({},e.filter||{}),i=r in t;return i&&delete t[r],{isChanged:i,filterState:l(l({},e),{},{filter:t})}})),a(e,"isFilterEmpty",(function(e){var r,t=Object.values(null!==(r=e.filter)&&void 0!==r?r:{});return t.length<1||t.every((function(e){return e.length<1}))})),a(e,"isYoutubeLink",(function(e){return/^https?:\/\/(www\.)?(youtube\.com|youtu\.be)\//.test(e)})),a(e,"isGenericLink",(function(e){return/^https?:\/\/[^ ]+$/.test(e)})),a(e,"isGuid",(function(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)})),a(e,"getFieldsMatches",(function(r,t,i){var a=t.trim().toLowerCase();if(!a)return r;var n={};for(var l in r){var o=l,c=r[o];if(c){var f,v=Array.isArray(c.searchMatches)?c.searchMatches:c.searchMatches?[c.searchMatches]:[],d=!1,h=u(v);try{for(h.s();!(f=h.n()).done;){var b=f.value;switch(b.rule){case s.AlwaysVisible:d=!0;break;case s.MatchOnly:"function"==typeof b.match&&b.match(a)&&(d=!0);break;case s.LinkYoutube:e.isYoutubeLink(a)&&(d=!0);break;case s.Link:e.isGenericLink(a)&&(d=!0);break;case s.Guid:e.isGuid(a)&&(d=!0)}if(d)break}}catch(e){h.e(e)}finally{h.f()}d&&(n[o]=c)}}return 0===Object.keys(n).length?i?r:{}:n})),a(e,"validated",(function(r,t,i){var a,n=r.trim().toLowerCase();if(!n)return{error:!0,message:"The ".concat(t.toString()," is required ")};var l,o=Array.isArray(null==i?void 0:i.validate)?null!==(a=null==i?void 0:i.validate)&&void 0!==a?a:[]:null!=i&&i.validate?[i.validate]:[],s={error:!1},f=u(o);try{for(f.s();!(l=f.n()).done;){var v=l.value;switch(v.rule){case c.LinkYoutube:var d;if(!e.isYoutubeLink(n))s.error=!0,s.message="The ".concat(null!==(d=null==i?void 0:i.label)&&void 0!==d?d:t.toString()," must be a valid YouTube link");break;case c.Link:var h;if(!e.isGenericLink(n))s.error=!0,s.message="The ".concat(null!==(h=null==i?void 0:i.label)&&void 0!==h?h:t.toString()," must be a valid URL link");break;case c.Custom:var b;if("function"==typeof v.custom&&!v.custom(n))s.error=!0,s.message="The ".concat(null!==(b=null==i?void 0:i.label)&&void 0!==b?b:t.toString()," is invalid")}if(s.error)break}}catch(e){f.e(e)}finally{f.f()}return s})),a(e,"getSortFields",(function(e){return Object.keys(e).reduce((function(r,t){var i=e[t];return!1!==(null==i?void 0:i.sortable)&&(r[t]=i),r}),{})})),e}return e(f,o),r(f)}();export{v as default,f as filterPanelClasses};
|
|
2
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../../src/filter-bar/base.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { EFieldValidate, ESearchMatch, IFilterField, IFilterFields, IFilterItemModel, IFilterModel, IFilterState } from './types'\r\n\r\nexport const filterPanelClasses = {\r\n root: 'FilterPanel-root',\r\n list: 'FilterPanel-list',\r\n item: 'FilterPanel-item'\r\n}\r\n\r\nexport default class FilterBarBase<P, S, T = any> extends Component<P, S> {\r\n //#region Filter\r\n mergeFilter = (f1?: IFilterState<T>, f2?: IFilterState<T>): IFilterState<T> => {\r\n const mergedFilter: IFilterModel<T> = f2?.filter ?? {}\r\n\r\n if (f1?.filter) {\r\n for (const key in f1?.filter) {\r\n const fieldKey = key as keyof T\r\n const existingItems = mergedFilter[fieldKey] ?? []\r\n const newItems = f1?.filter[fieldKey] ?? []\r\n\r\n const existingValues = new Set(existingItems.map((item) => item.value))\r\n\r\n const mergedItems = [...existingItems, ...newItems.filter((item) => !existingValues.has(item.value))]\r\n\r\n if (mergedItems.length > 0) {\r\n mergedFilter[fieldKey] = mergedItems\r\n }\r\n }\r\n }\r\n\r\n const result: IFilterState<T> = {\r\n filter: Object.keys(mergedFilter).length ? mergedFilter : {},\r\n details: f2?.details ?? f1?.details\r\n }\r\n\r\n return result\r\n }\r\n\r\n patchFilterWithKey = (filterState: IFilterState<T>, key: keyof IFilterModel<T>, value: IFilterItemModel) => {\r\n const clonedFilter: IFilterModel<T> = { ...(filterState.filter || {}) }\r\n let filter = clonedFilter[key] ?? []\r\n const isChanged = !filter.map((x) => x.value).includes(value.value)\r\n if (isChanged) filter = [...filter, value]\r\n clonedFilter[key] = filter\r\n return { isChanged, filterState: { ...filterState, filter: clonedFilter } }\r\n }\r\n\r\n deleteFilterWithKey = (filterState: IFilterState<T>, key: keyof IFilterModel<T>) => {\r\n const clonedFilter: IFilterModel<T> = { ...(filterState.filter || {}) }\r\n const isChanged = key in clonedFilter\r\n if (isChanged) delete clonedFilter[key]\r\n return { isChanged, filterState: { ...filterState, filter: clonedFilter } }\r\n }\r\n\r\n isFilterEmpty = (filterState: IFilterState<T>) => {\r\n const values = Object.values(filterState.filter ?? {})\r\n return values.length < 1 || values.every((x) => x.length < 1)\r\n }\r\n //#endregion\r\n\r\n //#region Field\r\n isYoutubeLink = (val: string) => /^https?:\\/\\/(www\\.)?(youtube\\.com|youtu\\.be)\\//.test(val)\r\n\r\n isGenericLink = (val: string) => /^https?:\\/\\/[^ ]+$/.test(val)\r\n\r\n isGuid = (val: string) => /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val)\r\n\r\n getFieldsMatches = (fields: IFilterFields<T>, keyword: string, showAll?: boolean): IFilterFields<T> => {\r\n const trimmed = keyword.trim().toLowerCase()\r\n if (!trimmed) return fields\r\n\r\n const matched: IFilterFields<T> = {}\r\n\r\n for (const key in fields) {\r\n const field = key as keyof IFilterFields<T>\r\n const config = fields[field]\r\n if (!config) continue\r\n\r\n const matches = Array.isArray(config.searchMatches) ? config.searchMatches : config.searchMatches ? [config.searchMatches] : []\r\n\r\n let visible = false\r\n\r\n for (const matchObj of matches) {\r\n switch (matchObj.rule) {\r\n case ESearchMatch.AlwaysVisible:\r\n visible = true\r\n break\r\n case ESearchMatch.MatchOnly:\r\n if (typeof matchObj.match === 'function') {\r\n if (matchObj.match(trimmed)) visible = true\r\n }\r\n break\r\n case ESearchMatch.LinkYoutube:\r\n if (this.isYoutubeLink(trimmed)) visible = true\r\n break\r\n case ESearchMatch.Link:\r\n if (this.isGenericLink(trimmed)) visible = true\r\n break\r\n case ESearchMatch.Guid:\r\n if (this.isGuid(trimmed)) visible = true\r\n break\r\n default:\r\n break\r\n }\r\n\r\n if (visible) break\r\n }\r\n\r\n if (visible) matched[field] = config\r\n }\r\n return Object.keys(matched).length === 0 ? (showAll ? fields : {}) : matched\r\n }\r\n\r\n validated = (value: string, fieldKey: keyof IFilterModel<T>, filterField?: IFilterField): { error: boolean; message?: string } => {\r\n const trimmed = value.trim().toLowerCase()\r\n if (!trimmed) return { error: true, message: `The ${fieldKey.toString()} is required ` }\r\n const validate = Array.isArray(filterField?.validate) ? (filterField?.validate ?? []) : filterField?.validate ? [filterField.validate] : []\r\n const obj: { error: boolean; message?: string } = { error: false }\r\n for (const validateObj of validate) {\r\n switch (validateObj.rule) {\r\n case EFieldValidate.LinkYoutube:\r\n if (!this.isYoutubeLink(trimmed)) {\r\n obj.error = true\r\n obj.message = `The ${filterField?.label ?? fieldKey.toString()} must be a valid YouTube link`\r\n }\r\n break\r\n\r\n case EFieldValidate.Link:\r\n if (!this.isGenericLink(trimmed)) {\r\n obj.error = true\r\n obj.message = `The ${filterField?.label ?? fieldKey.toString()} must be a valid URL link`\r\n }\r\n break\r\n\r\n case EFieldValidate.Custom:\r\n if (typeof validateObj.custom === 'function' && !validateObj.custom(trimmed)) {\r\n obj.error = true\r\n obj.message = `The ${filterField?.label ?? fieldKey.toString()} is invalid`\r\n }\r\n break\r\n default:\r\n break\r\n }\r\n if (obj.error) break\r\n }\r\n return obj\r\n }\r\n //#endregion\r\n\r\n //#region Sort\r\n getSortFields = (fields: IFilterFields<T>) => {\r\n const keys = Object.keys(fields) as (keyof IFilterFields<T>)[]\r\n return keys.reduce<IFilterFields<T>>((a, b) => {\r\n const item = fields[b]\r\n if (item?.sortable !== false) {\r\n a[b] = item\r\n }\r\n return a\r\n }, {})\r\n }\r\n //#endregion\r\n}\r\n"],"names":["filterPanelClasses","root","list","item","FilterBarBase","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","f1","f2","_f2$filter","_f2$details","mergedFilter","filter","_loop","_mergedFilter$fieldKe","_f1$filter$fieldKey","fieldKey","key","existingItems","newItems","existingValues","Set","map","value","mergedItems","_toConsumableArray","has","Object","keys","details","filterState","_clonedFilter$key","clonedFilter","_objectSpread","isChanged","x","includes","_filterState$filter","values","every","val","test","fields","keyword","showAll","trimmed","trim","toLowerCase","matched","field","config","_step","matches","isArray","searchMatches","visible","_iterator","_createForOfIteratorHelper","s","n","done","matchObj","rule","ESearchMatch","AlwaysVisible","MatchOnly","match","LinkYoutube","isYoutubeLink","Link","isGenericLink","Guid","isGuid","err","e","f","filterField","_filterField$validate","error","message","toString","_step2","validate","obj","_iterator2","validateObj","EFieldValidate","_filterField$label","label","_filterField$label2","Custom","_filterField$label3","custom","reduce","a","b","sortable","_inherits","Component","_createClass"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{inherits as e,createClass as t,objectSpread2 as r,classCallCheck as l,callSuper as a,defineProperty as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,jsxs as o}from"react/jsx-runtime";import{styled as s,Box as f,ClickAwayListener as u,IconButton as d,InputBase as h}from"@mui/material";import p from"@mui/icons-material/FilterList";import{ButtonClear as c,FilterHelpNotes as S}from"./ui.units.js";import m from"./create.filter-panel.js";import v from"./base.js";import g from"./create.filtered.js";function y(s){var y=m({fields:s.fields}),w=g();return function(){function m(e){var t;return l(this,m),t=a(this,m,[e]),i(t,"defaultState",{keyword:"",panelState:{anchorEl:null}}),i(t,"filterStateStore",{filter:{}}),i(t,"setFilterState",(function(e){t.props.value||(t.filterStateStore=e),t.props.onChange&&t.props.onChange(e)})),i(t,"refFilterButton",null),i(t,"refSortButton",null),i(t,"refInput",null),i(t,"refBeforeInput",null),i(t,"renderTextField",(function(){return o(f,{component:"label",htmlFor:t.configs.id,sx:{flex:1,display:"flex",alignItems:"flex-end"},children:[n(f,{ref:function(e){return t.refBeforeInput=e},sx:{height:"100%"}}),n(h,{id:t.configs.id,placeholder:t.configs.placeholder,fullWidth:!0,autoComplete:"off",inputRef:function(e){return t.refInput=e},onChange:function(e){return t.setState({keyword:e.target.value})},value:t.state.keyword,onFocus:function(){return t.showPanel("searchInput")},onKeyDown:t.handleKeyDown})]})})),i(t,"handleKeyDown",(function(e){var r=e.keyCode;if(13===r){if(!t.state.keyword)return;var l,a=t.patchFilterWithKey(t.filterState,"Search",{value:t.state.keyword});if(a.filterState.details="add",a.isChanged)null===(l=t.refInput)||void 0===l||l.blur(),t.setFilterState(a.filterState),t.setState(t.defaultState)}else if(27===r){var i;null===(i=t.refInput)||void 0===i||i.blur(),t.setState(t.defaultState)}})),i(t,"handleAdd",(function(e,r){var l,a=t.patchFilterWithKey(t.filterState,e,r);(a.filterState.details="add",a.isChanged)&&(null===(l=t.refInput)||void 0===l||l.blur(),t.setFilterState(a.filterState),t.setState(t.defaultState))})),i(t,"handleRemove",(function(e){var r,l=t.deleteFilterWithKey(t.filterState,e);(l.filterState.details="remove",l.isChanged)&&(null===(r=t.refInput)||void 0===r||r.blur(),t.setFilterState(l.filterState),t.forceUpdate())})),i(t,"handleClear",(function(){t.setFilterState({filter:{},details:"remove"}),t.setState(t.defaultState)})),i(t,"showPanel",(function(e){var r=null;switch(e){case"searchInput":r=t.refBeforeInput;break;case"filterButton":r=t.refFilterButton;break;case"sortButton":r=t.refSortButton}t.setState({panelState:{anchorEl:r,reason:e}})})),i(t,"closePanel",(function(){return t.setState({panelState:{anchorEl:null}})})),t.state=t.defaultState,t}return e(m,v),t(m,[{key:"filterState",get:function(){var e;return null!==(e=this.props.value)&&void 0!==e?e:this.filterStateStore}},{key:"configs",get:function(){var e,t,r,l;return{id:null!==(e=null!==(t=this.props.id)&&void 0!==t?t:s.id)&&void 0!==e?e:(new Date).getTime().toString(),placeholder:null!==(r=null!==(l=this.props.placeholder)&&void 0!==l?l:s.placeholder)&&void 0!==r?r:"Filter",helpNotes:s.helpNotes}}},{key:"render",value:function(){var e=this;return n(u,{onClickAway:this.closePanel,children:o(k,{children:[n(d,{ref:function(t){return e.refFilterButton=t},onClick:function(){return e.showPanel("filterButton")},children:n(p,{})}),o(C,{children:[n(w,{fields:s.fields,filterState:this.filterState,onRemove:this.handleRemove}),this.renderTextField()]}),n(c,{visibled:!this.isFilterEmpty(this.filterState),onClick:this.handleClear}),n(S,r({},this.configs.helpNotes)),n(y,r(r({},this.state.panelState),{},{keyword:this.state.keyword,onSubmit:this.handleAdd,onClose:this.closePanel}))]})})}}])}()}var k=s(f)({display:"flex",gap:"8px",width:"100%",borderRadius:"6px",transition:"all linear 0.2s",padding:"2px",backgroundColor:"#fafafa","&:hover":{backgroundColor:"#ededed"}}),C=s(f)({flex:1,minHeight:"40px",display:"flex",flexWrap:"wrap",alignItems:"center",gap:"6px"});export{y as default};
|
|
2
|
+
//# sourceMappingURL=create.filter-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.filter-bar.js","sources":["../../src/filter-bar/create.filter-bar.tsx"],"sourcesContent":["import React from 'react'\r\nimport { Box, ClickAwayListener, IconButton, InputBase, styled } from '@mui/material'\r\nimport FilterListIcon from '@mui/icons-material/FilterList'\r\nimport { ButtonClear, FilterHelpNotes, FilterHelpNotesProps } from './ui.units'\r\nimport { IFilterFields, IFilterItemModel, IFilterModel, FilterReason, IFilterState } from './types'\r\nimport CreateFilterPanel, { FilterPanelState } from './create.filter-panel'\r\nimport FilterBarBase from './base'\r\nimport CreateFiltered from './create.filtered'\r\n\r\nexport interface FilterBarParams<T> {\r\n fields: IFilterFields<T>\r\n id?: string\r\n placeholder?: string\r\n helpNotes?: FilterHelpNotesProps\r\n}\r\n\r\ninterface IProps<T> {\r\n id?: string\r\n placeholder?: string\r\n value?: IFilterState<T>\r\n onChange?: (value: IFilterState<T>) => void\r\n}\r\n\r\ninterface IState {\r\n panelState: FilterPanelState\r\n keyword: string\r\n}\r\n\r\nfunction CreateFilterBar<T>(params: FilterBarParams<T>) {\r\n const FilterPanelInstance = CreateFilterPanel<T>({ fields: params.fields })\r\n const FilteredInstance = CreateFiltered<T>()\r\n\r\n class FilterBar extends FilterBarBase<IProps<T>, IState, T> {\r\n defaultState: IState = { keyword: '', panelState: { anchorEl: null } }\r\n constructor(props: IProps<T>) {\r\n super(props)\r\n this.state = this.defaultState\r\n }\r\n\r\n filterStateStore: IFilterState<T> = { filter: {} }\r\n get filterState(): IFilterState<T> {\r\n return this.props.value ?? this.filterStateStore\r\n }\r\n\r\n setFilterState = (filterState: IFilterState<T>) => {\r\n if (!this.props.value) {\r\n this.filterStateStore = filterState\r\n }\r\n this.props.onChange && this.props.onChange(filterState)\r\n }\r\n\r\n get configs() {\r\n return {\r\n id: this.props.id ?? params.id ?? new Date().getTime().toString(),\r\n placeholder: this.props.placeholder ?? params.placeholder ?? 'Filter',\r\n helpNotes: params.helpNotes\r\n }\r\n }\r\n\r\n refFilterButton: HTMLButtonElement | null = null\r\n refSortButton: HTMLButtonElement | null = null\r\n render() {\r\n return (\r\n <ClickAwayListener onClickAway={this.closePanel}>\r\n <Wrapper>\r\n <IconButton ref={(ref) => (this.refFilterButton = ref)} onClick={() => this.showPanel('filterButton')}>\r\n <FilterListIcon />\r\n </IconButton>\r\n <Content>\r\n <FilteredInstance fields={params.fields} filterState={this.filterState} onRemove={this.handleRemove} />\r\n {this.renderTextField()}\r\n </Content>\r\n <ButtonClear visibled={!this.isFilterEmpty(this.filterState)} onClick={this.handleClear} />\r\n {/* <IconButton ref={(ref) => (this.refSortButton = ref)} onClick={() => this.showPanel('sortButton')}>\r\n <SwapVertIcon />\r\n </IconButton> */}\r\n <FilterHelpNotes {...this.configs.helpNotes} />\r\n <FilterPanelInstance {...this.state.panelState} keyword={this.state.keyword} onSubmit={this.handleAdd} onClose={this.closePanel} />\r\n </Wrapper>\r\n </ClickAwayListener>\r\n )\r\n }\r\n\r\n refInput: HTMLInputElement | null = null\r\n refBeforeInput: HTMLElement | null = null\r\n renderTextField = () => (\r\n <Box component='label' htmlFor={this.configs.id} sx={{ flex: 1, display: 'flex', alignItems: 'flex-end' }}>\r\n <Box ref={(ref: HTMLElement) => (this.refBeforeInput = ref)} sx={{ height: '100%' }} />\r\n <InputBase\r\n id={this.configs.id}\r\n placeholder={this.configs.placeholder}\r\n fullWidth\r\n autoComplete='off'\r\n inputRef={(ref: HTMLInputElement) => (this.refInput = ref)}\r\n onChange={(event) => this.setState({ keyword: event.target.value })}\r\n value={this.state.keyword}\r\n onFocus={() => this.showPanel('searchInput')}\r\n onKeyDown={this.handleKeyDown}\r\n />\r\n </Box>\r\n )\r\n\r\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\r\n const keyCode: number = event.keyCode\r\n if (keyCode === 13) {\r\n if (!this.state.keyword) return\r\n const temp = this.patchFilterWithKey(this.filterState, 'Search', { value: this.state.keyword })\r\n temp.filterState.details = 'add'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.setState(this.defaultState)\r\n }\r\n } else if (keyCode === 27) {\r\n this.refInput?.blur()\r\n this.setState(this.defaultState)\r\n }\r\n }\r\n\r\n handleAdd = (key: keyof IFilterModel<T>, value: IFilterItemModel) => {\r\n const temp = this.patchFilterWithKey(this.filterState, key, value)\r\n temp.filterState.details = 'add'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.setState(this.defaultState)\r\n }\r\n }\r\n\r\n handleRemove = (key: keyof IFilterModel<T>) => {\r\n const temp = this.deleteFilterWithKey(this.filterState, key)\r\n temp.filterState.details = 'remove'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n handleClear = () => {\r\n this.setFilterState({ filter: {}, details: 'remove' })\r\n this.setState(this.defaultState)\r\n }\r\n\r\n showPanel = (reason: FilterReason) => {\r\n let anchorEl = null\r\n switch (reason) {\r\n case 'searchInput':\r\n anchorEl = this.refBeforeInput\r\n break\r\n case 'filterButton':\r\n anchorEl = this.refFilterButton\r\n break\r\n case 'sortButton':\r\n anchorEl = this.refSortButton\r\n break\r\n default:\r\n break\r\n }\r\n this.setState({ panelState: { anchorEl, reason } })\r\n }\r\n\r\n closePanel = () => this.setState({ panelState: { anchorEl: null } })\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nexport default CreateFilterBar\r\n\r\nconst Wrapper = styled(Box)({\r\n display: 'flex',\r\n gap: '8px',\r\n width: '100%',\r\n borderRadius: '6px',\r\n transition: 'all linear 0.2s',\r\n padding: '2px',\r\n backgroundColor: '#fafafa',\r\n '&:hover': { backgroundColor: '#ededed' }\r\n})\r\n\r\nconst Content = styled(Box)({\r\n flex: 1,\r\n minHeight: '40px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: '6px'\r\n})\r\n"],"names":["CreateFilterBar","params","FilterPanelInstance","CreateFilterPanel","fields","FilteredInstance","CreateFiltered","FilterBar","props","_this","_classCallCheck","_callSuper","_defineProperty","keyword","panelState","anchorEl","filter","filterState","value","filterStateStore","onChange","_jsxs","Box","component","htmlFor","configs","id","sx","flex","display","alignItems","children","_jsx","ref","refBeforeInput","height","InputBase","placeholder","fullWidth","autoComplete","inputRef","refInput","event","setState","target","state","onFocus","showPanel","onKeyDown","handleKeyDown","keyCode","_this$refInput","temp","patchFilterWithKey","details","isChanged","blur","setFilterState","defaultState","_this$refInput2","key","_this$refInput3","_this$refInput4","deleteFilterWithKey","forceUpdate","reason","refFilterButton","refSortButton","_inherits","FilterBarBase","_createClass","get","_this$props$value","this","_ref2","_this$props$id","_ref3","_this$props$placehold","Date","getTime","toString","helpNotes","_this2","ClickAwayListener","onClickAway","closePanel","Wrapper","IconButton","onClick","FilterListIcon","Content","onRemove","handleRemove","renderTextField","ButtonClear","visibled","isFilterEmpty","handleClear","FilterHelpNotes","_objectSpread","onSubmit","handleAdd","onClose","styled","gap","width","borderRadius","transition","padding","backgroundColor","minHeight","flexWrap"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{inherits as e,createClass as r,classCallCheck as t,callSuper as o,defineProperty as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,jsxs as l}from"react/jsx-runtime";import{Fragment as a}from"react";import{styled as s,Box as u,RadioGroup as d,MenuList as c,MenuItem as m,Typography as f,Divider as p,Button as v,TextField as h,FormControlLabel as g,Radio as b}from"@mui/material";import S,{filterPanelClasses as x}from"./base.js";import"../form/validator.js";import"../form/dino-form.js";import{convertFormDataToJson as y}from"../form/helper.js";function C(s){return function(){function d(e){var r;return t(this,d),r=o(this,d,[e]),i(r,"renderFrom",(function(e){var t,o=s.fields[e],i=null!==(t=null==o?void 0:o.label)&&void 0!==t?t:e.toString();return n("form",{onSubmit:function(t){return r.handleSubmit(e,t)},children:l(j,{children:[n(u,{className:"top-bar",children:n(f,{variant:"subtitle2",children:i})}),n(u,{className:"content",children:r.renderWithMode(e)}),"select"===(null==o?void 0:o.type)&&n(p,{variant:"middle"}),l(u,{className:"actions",children:[n(v,{size:"small",color:"inherit",onClick:r.props.onCancel,children:"Cancel"}),n(v,{size:"small",color:"primary",type:"submit",sx:{fontWeight:700},children:"Apply"})]})]})})})),i(r,"renderWithMode",(function(e){var t=s.fields[e],o=r.state.messageError;return"select"===(null==t?void 0:t.type)?n(k,{name:e.toString(),className:o?"error":"",onChange:function(){return r.setState({messageError:void 0})},children:t.options.map((function(e,r){var t;return n(g,{value:e.value,control:n(b,{}),label:null!==(t=e.label)&&void 0!==t?t:e.value},e.value.toString()+r)}))}):n(h,{autoFocus:!0,name:e.toString(),size:"small",error:!!o,helperText:o})})),i(r,"handleSubmit",(function(e,t){var o;t.preventDefault(),t.stopPropagation();var i=new FormData(t.currentTarget),n=null===(o=y(i)[e])||void 0===o?void 0:o.toString(),l=s.fields[e],a=r.validated(null!=n?n:"",e,l);if(a.error)r.setState({messageError:a.message});else{var u,d=void 0;if("select"===(null==l?void 0:l.type))d=null===(u=l.options.find((function(e){return e.value===n})))||void 0===u?void 0:u.label;r.props.onSubmit&&r.props.onSubmit(e,d?{value:n,label:d}:{value:n})}})),r.state={fieldSelected:null},r}return e(d,S),r(d,[{key:"render",value:function(){var e=this,r=this.state.fieldSelected;if(r)return this.renderFrom(r);var t=Object.keys(s.fields).filter((function(e){return!!e}));return n(c,{className:x.list,sx:{minWidth:"200px"},children:t.map((function(r,t){var o,i=s.fields[r];return i?n(m,{className:x.item,onClick:function(){return e.setState({fieldSelected:r,messageError:void 0})},children:null!==(o=null==i?void 0:i.label)&&void 0!==o?o:r.toString()},r.toString()+t):n(a,{},r.toString()+t)}))})}}])}()}var j=s(u)({minWidth:"200px",borderRadius:"4px",overflow:"hidden",".top-bar":{background:"#000",padding:"8px",".MuiTypography-root":{color:"#fff"}},".content":{padding:"8px"},".actions":{display:"flex",alignItems:"center",justifyContent:"flex-end",padding:"8px"}}),k=s(d)({marginLeft:"-8px",marginRight:"-8px","&.error .MuiRadio-root":{color:"#d32f2f"},".MuiFormControlLabel-root":{margin:0},".MuiFormControlLabel-root:hover":{backgroundColor:"rgba(25, 118, 210, 0.04)"}});export{C as default};
|
|
2
|
+
//# sourceMappingURL=create.filter-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.filter-menu.js","sources":["../../src/filter-bar/create.filter-menu.tsx"],"sourcesContent":["import React, { Fragment } from 'react'\r\nimport { Box, Button, ButtonProps, Divider } from '@mui/material'\r\nimport { FormControlLabel, MenuItem, MenuList, Radio, RadioGroup, styled, TextField, Typography } from '@mui/material'\r\nimport FilterBarBase, { filterPanelClasses } from './base'\r\nimport { IFilterModel, IFilterPanelParams, IFilterPannelSubmitFunc } from './types'\r\nimport { convertFormDataToJson } from '../form'\r\n\r\ninterface IProps<T> {\r\n onSubmit?: IFilterPannelSubmitFunc<T>\r\n onCancel?: ButtonProps['onClick']\r\n}\r\n\r\ninterface IState<T> {\r\n fieldSelected: keyof IFilterModel<T> | null\r\n messageError?: string\r\n}\r\n\r\nfunction CreateFilterMenu<T>(params: IFilterPanelParams<T>) {\r\n class FilterMenu extends FilterBarBase<IProps<T>, IState<T>, T> {\r\n constructor(props: IProps<T>) {\r\n super(props)\r\n this.state = { fieldSelected: null }\r\n }\r\n\r\n render() {\r\n const { fieldSelected } = this.state\r\n if (!!fieldSelected) return this.renderFrom(fieldSelected)\r\n const keys = Object.keys(params.fields).filter((x) => !!x) as (keyof IFilterModel<T>)[]\r\n return (\r\n <MenuList className={filterPanelClasses.list} sx={{ minWidth: '200px' }}>\r\n {keys.map((x, i) => {\r\n const item = params.fields[x]\r\n if (!item) return <Fragment key={x.toString() + i} />\r\n return (\r\n <MenuItem\r\n key={x.toString() + i}\r\n className={filterPanelClasses.item}\r\n onClick={() => this.setState({ fieldSelected: x, messageError: undefined })}\r\n >\r\n {item?.label ?? x.toString()}\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuList>\r\n )\r\n }\r\n\r\n renderFrom = (fieldSelected: keyof IFilterModel<T>) => {\r\n const fieldConfig = params.fields[fieldSelected]\r\n const label = fieldConfig?.label ?? fieldSelected.toString()\r\n return (\r\n <form onSubmit={(e) => this.handleSubmit(fieldSelected, e)}>\r\n <WrapPanelFilterMode>\r\n <Box className='top-bar'>\r\n <Typography variant='subtitle2'>{label}</Typography>\r\n </Box>\r\n <Box className='content'>{this.renderWithMode(fieldSelected)}</Box>\r\n {fieldConfig?.type === 'select' && <Divider variant='middle' />}\r\n <Box className='actions'>\r\n <Button size='small' color='inherit' onClick={this.props.onCancel}>\r\n Cancel\r\n </Button>\r\n <Button size='small' color='primary' type='submit' sx={{ fontWeight: 700 }}>\r\n Apply\r\n </Button>\r\n </Box>\r\n </WrapPanelFilterMode>\r\n </form>\r\n )\r\n }\r\n\r\n renderWithMode = (fieldSelected: keyof IFilterModel<T>) => {\r\n const fieldConfig = params.fields[fieldSelected]\r\n const { messageError } = this.state\r\n switch (fieldConfig?.type) {\r\n case 'select':\r\n return (\r\n <CustomRadioGroup\r\n name={fieldSelected.toString()}\r\n className={messageError ? 'error' : ''}\r\n onChange={() => this.setState({ messageError: undefined })}\r\n >\r\n {fieldConfig.options.map((x, i) => (\r\n <FormControlLabel key={x.value.toString() + i} value={x.value} control={<Radio />} label={x.label ?? x.value} />\r\n ))}\r\n </CustomRadioGroup>\r\n )\r\n case 'string':\r\n default:\r\n return <TextField autoFocus name={fieldSelected.toString()} size='small' error={!!messageError} helperText={messageError} />\r\n }\r\n }\r\n\r\n handleSubmit = (fieldSelected: keyof IFilterModel<T>, event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n const formData = new FormData(event.currentTarget as HTMLFormElement)\r\n const obj = convertFormDataToJson<T>(formData)\r\n const value = obj[fieldSelected as keyof T]?.toString()\r\n\r\n const fieldConfig = params.fields[fieldSelected]\r\n const validate = this.validated(value ?? '', fieldSelected, fieldConfig)\r\n if (validate.error) {\r\n this.setState({ messageError: validate.message })\r\n return\r\n }\r\n\r\n let label: string | undefined = undefined\r\n if (fieldConfig?.type === 'select') {\r\n label = fieldConfig.options.find((x) => x.value === value)?.label\r\n }\r\n\r\n this.props.onSubmit && this.props.onSubmit(fieldSelected, label ? { value, label } : { value })\r\n }\r\n }\r\n\r\n return FilterMenu\r\n}\r\n\r\nexport default CreateFilterMenu\r\n\r\nconst WrapPanelFilterMode = styled(Box)({\r\n minWidth: '200px',\r\n borderRadius: '4px',\r\n overflow: 'hidden',\r\n '.top-bar': {\r\n background: '#000',\r\n padding: '8px',\r\n '.MuiTypography-root': {\r\n color: '#fff'\r\n }\r\n },\r\n '.content': {\r\n padding: '8px'\r\n },\r\n '.actions': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '8px'\r\n }\r\n})\r\n\r\nconst CustomRadioGroup = styled(RadioGroup)({\r\n marginLeft: '-8px',\r\n marginRight: '-8px',\r\n '&.error .MuiRadio-root': {\r\n color: '#d32f2f'\r\n },\r\n '.MuiFormControlLabel-root': {\r\n margin: 0\r\n },\r\n '.MuiFormControlLabel-root:hover': {\r\n backgroundColor: 'rgba(25, 118, 210, 0.04)'\r\n }\r\n})\r\n"],"names":["CreateFilterMenu","params","FilterMenu","props","_this","_classCallCheck","_callSuper","_defineProperty","fieldSelected","_fieldConfig$label","fieldConfig","fields","label","toString","_jsx","onSubmit","e","handleSubmit","children","_jsxs","WrapPanelFilterMode","Box","className","Typography","variant","renderWithMode","type","Divider","Button","size","color","onClick","onCancel","sx","fontWeight","messageError","state","CustomRadioGroup","name","onChange","setState","undefined","options","map","x","i","_x$label","FormControlLabel","value","control","Radio","TextField","autoFocus","error","helperText","event","_obj$fieldSelected","preventDefault","stopPropagation","formData","FormData","currentTarget","convertFormDataToJson","validate","validated","message","_fieldConfig$options$","find","_inherits","FilterBarBase","_createClass","key","_this2","this","renderFrom","keys","Object","filter","MenuList","filterPanelClasses","list","minWidth","_item$label","item","MenuItem","Fragment","styled","borderRadius","overflow","background","padding","display","alignItems","justifyContent","RadioGroup","marginLeft","marginRight","margin","backgroundColor"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{inherits as r,createClass as e,objectSpread2 as n,classCallCheck as o,callSuper as t,defineProperty as s}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a,Fragment as i,jsxs as p}from"react/jsx-runtime";import{styled as l,Box as c,Popper as u,Fade as d,MenuList as h,MenuItem as m}from"@mui/material";import f,{filterPanelClasses as b}from"./base.js";import k from"./create.filter-menu.js";import v from"./create.sort-menu.js";function C(l){var c=k(l),C=v(),x=function(){function k(){var r;o(this,k);for(var e=arguments.length,n=new Array(e),u=0;u<e;u++)n[u]=arguments[u];return r=t(this,k,[].concat(n)),s(r,"renderContent",(function(){switch(r.props.reason){case"searchInput":return r.renderSearchInput();case"filterButton":return a(c,{onCancel:r.props.onClose,onSubmit:function(e,n){r.props.onSubmit&&r.props.onSubmit(e,n),r.props.onClose&&r.props.onClose()}});case"sortButton":return a(C,{})}})),s(r,"renderSearchInput",(function(){var e;if("searchInput"!==r.props.reason)return a(i,{});var n=r.getFieldsMatches(l.fields,null!==(e=r.props.keyword)&&void 0!==e?e:""),o=Object.keys(n).filter((function(r){return!!r}));return p(h,{className:b.list,children:[o.map((function(e,n){var o,t=l.fields[e];return p(m,{className:b.item,onClick:function(){return r.handleClick(e)},children:[null!==(o=null==t?void 0:t.label)&&void 0!==o?o:e.toString(),' "',r.props.keyword,'"']},e.toString()+n)})),r.props.keyword&&p(m,{className:b.item,onClick:function(){return r.handleClick("Search")},children:['Search "',r.props.keyword,'"']})]})})),s(r,"handleClick",(function(e){r.props.onSubmit&&r.props.onSubmit(e,{value:r.props.keyword})})),r}return r(k,f),e(k,[{key:"render",value:function(){var r=this,e=Boolean(this.props.anchorEl)&&(!!this.props.keyword||"searchInput"!==this.props.reason);return a(u,{anchorEl:this.props.anchorEl,open:e,placement:"bottom-start",transition:!0,sx:{zIndex:1350},children:function(e){var o=e.TransitionProps;return a(d,n(n({},o),{},{timeout:0,children:a(S,{className:b.root,children:r.renderContent()})}))}})}}])}();return x}var S=l(c)({borderRadius:"4px",boxShadow:"rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px",backgroundColor:"#fff"});export{C as default};
|
|
2
|
+
//# sourceMappingURL=create.filter-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.filter-panel.js","sources":["../../src/filter-bar/create.filter-panel.tsx"],"sourcesContent":["import React, { PropsWithChildren } from 'react'\r\nimport { Popper, Fade, Box, styled, MenuList, MenuItem } from '@mui/material'\r\nimport { IFilterModel, FilterReason, IFilterPanelParams, IFilterPannelSubmitFunc } from './types'\r\nimport FilterBarBase, { filterPanelClasses } from './base'\r\nimport CreateFilterMenu from './create.filter-menu'\r\nimport CreateFilterSort from './create.sort-menu'\r\n\r\nexport interface FilterPanelState {\r\n anchorEl: HTMLElement | null\r\n reason?: FilterReason\r\n}\r\n\r\ninterface IProps<T> extends FilterPanelState, PropsWithChildren {\r\n keyword?: string\r\n onSubmit?: IFilterPannelSubmitFunc<T>\r\n onClose?: () => void\r\n}\r\n\r\nfunction CreateFilterPanel<T>(params: IFilterPanelParams<T>) {\r\n const FilterMenuInstance = CreateFilterMenu<T>(params)\r\n const SortMenuInstance = CreateFilterSort<T>(params)\r\n\r\n class FilterPanel extends FilterBarBase<IProps<T>, {}, T> {\r\n render() {\r\n const isOpen = Boolean(this.props.anchorEl) && (!!this.props.keyword || this.props.reason !== 'searchInput')\r\n return (\r\n <Popper anchorEl={this.props.anchorEl} open={isOpen} placement='bottom-start' transition sx={{ zIndex: 1350 }}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={0}>\r\n <Wrapper className={filterPanelClasses.root}>{this.renderContent()}</Wrapper>\r\n </Fade>\r\n )}\r\n </Popper>\r\n )\r\n }\r\n\r\n renderContent = () => {\r\n switch (this.props.reason) {\r\n case 'searchInput':\r\n return this.renderSearchInput()\r\n case 'filterButton':\r\n return (\r\n <FilterMenuInstance\r\n onCancel={this.props.onClose}\r\n onSubmit={(f, v) => {\r\n this.props.onSubmit && this.props.onSubmit(f, v)\r\n this.props.onClose && this.props.onClose()\r\n }}\r\n />\r\n )\r\n case 'sortButton':\r\n return <SortMenuInstance />\r\n default:\r\n break\r\n }\r\n }\r\n\r\n renderSearchInput = () => {\r\n if (this.props.reason !== 'searchInput') return <></>\r\n const fields = this.getFieldsMatches(params.fields, this.props.keyword ?? '')\r\n const keys = Object.keys(fields).filter((x) => !!x) as (keyof IFilterModel<T>)[]\r\n return (\r\n <MenuList className={filterPanelClasses.list}>\r\n {keys.map((x, i) => {\r\n const item = params.fields[x]\r\n return (\r\n <MenuItem key={x.toString() + i} className={filterPanelClasses.item} onClick={() => this.handleClick(x)}>\r\n {item?.label ?? x.toString()} \"{this.props.keyword}\"\r\n </MenuItem>\r\n )\r\n })}\r\n {this.props.keyword && (\r\n <MenuItem className={filterPanelClasses.item} onClick={() => this.handleClick('Search')}>\r\n Search \"{this.props.keyword}\"{/* <FilterHelpNotes title='The quick search includes' items={[]} /> */}\r\n </MenuItem>\r\n )}\r\n </MenuList>\r\n )\r\n }\r\n handleClick = (key: keyof IFilterModel<T>) => {\r\n if (!this.props.onSubmit) return\r\n this.props.onSubmit(key, { value: this.props.keyword })\r\n }\r\n }\r\n return FilterPanel\r\n}\r\n\r\nexport default CreateFilterPanel\r\n\r\nconst Wrapper = styled(Box)({\r\n borderRadius: '4px',\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: '#fff'\r\n})\r\n"],"names":["CreateFilterPanel","params","FilterMenuInstance","CreateFilterMenu","SortMenuInstance","CreateFilterSort","FilterPanel","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","props","reason","renderSearchInput","_jsx","onCancel","onClose","onSubmit","f","v","_this$props$keyword","fields","getFieldsMatches","keyword","keys","Object","filter","x","_jsxs","MenuList","className","filterPanelClasses","list","map","i","_item$label","item","MenuItem","onClick","handleClick","children","label","toString","key","value","_inherits","FilterBarBase","_createClass","_this2","isOpen","Boolean","anchorEl","Popper","open","placement","transition","sx","zIndex","TransitionProps","_ref","Fade","_objectSpread","timeout","Wrapper","root","renderContent","styled","Box","borderRadius","boxShadow","backgroundColor"],"mappings":"+bAkBA,SAASA,EAAqBC,GAC5B,IAAMC,EAAqBC,EAAoBF,GACzCG,EAAmBC,IAEnBC,aAAY,SAAAA,IAAA,IAAAC,EAAAC,OAAAF,GAAA,IAAA,IAAAG,EAAAC,UAAAC,OAAAC,EAAAC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GA4Df,OA5DeP,EAAAQ,EAAAC,KAAAV,EAAAW,GAAAA,OAAAL,IAAAM,EAAAX,EAAA,iBAcA,WACd,OAAQA,EAAKY,MAAMC,QACjB,IAAK,cACH,OAAOb,EAAKc,oBACd,IAAK,eACH,OACEC,EAACpB,GACCqB,SAAUhB,EAAKY,MAAMK,QACrBC,SAAU,SAACC,EAAGC,GACZpB,EAAKY,MAAMM,UAAYlB,EAAKY,MAAMM,SAASC,EAAGC,GAC9CpB,EAAKY,MAAMK,SAAWjB,EAAKY,MAAMK,SACnC,IAGN,IAAK,aACH,OAAOF,EAAClB,EAAgB,QAI7Bc,EAAAX,EAAA,qBAEmB,WAAK,IAAAqB,EACvB,GAA0B,gBAAtBrB,EAAKY,MAAMC,OAA0B,OAAOE,QAChD,IAAMO,EAAStB,EAAKuB,iBAAiB7B,EAAO4B,OAA0B,QAApBD,EAAErB,EAAKY,MAAMY,eAAOH,IAAAA,EAAAA,EAAI,IACpEI,EAAOC,OAAOD,KAAKH,GAAQK,QAAO,SAACC,GAAC,QAAOA,KACjD,OACEC,EAACC,GAASC,UAAWC,EAAmBC,eACrCR,EAAKS,KAAI,SAACN,EAAGO,GAAK,IAAAC,EACXC,EAAO3C,EAAO4B,OAAOM,GAC3B,OACEC,EAACS,EAAQ,CAAwBP,UAAWC,EAAmBK,KAAME,QAAS,WAAF,OAAQvC,EAAKwC,YAAYZ,EAAE,EAAAa,SAAA,CACzF,QADyFL,EACpGC,aAAI,EAAJA,EAAMK,aAAKN,IAAAA,EAAAA,EAAIR,EAAEe,WAAU,KAAI3C,EAAKY,MAAMY,QAAO,MADrCI,EAAEe,WAAaR,EAIjC,IACAnC,EAAKY,MAAMY,SACVK,EAACS,EAAS,CAAAP,UAAWC,EAAmBK,KAAME,QAAS,WAAF,OAAQvC,EAAKwC,YAAY,SAAS,EAAAC,SAAA,CAAA,WAC5EzC,EAAKY,MAAMY,qBAK7Bb,EAAAX,EACa,eAAA,SAAC4C,GACR5C,EAAKY,MAAMM,UAChBlB,EAAKY,MAAMM,SAAS0B,EAAK,CAAEC,MAAO7C,EAAKY,MAAMY,aAC9CxB,CAAA,CAAA,OAAA8C,EAAA/C,EA5DuBgD,GA4DvBC,EAAAjD,EAAA,CAAA,CAAA6C,IAAA,SAAAC,MA3DD,WAAM,IAAAI,EAAAxC,KACEyC,EAASC,QAAQ1C,KAAKG,MAAMwC,cAAgB3C,KAAKG,MAAMY,SAAiC,gBAAtBf,KAAKG,MAAMC,QACnF,OACEE,EAACsC,EAAM,CAACD,SAAU3C,KAAKG,MAAMwC,SAAUE,KAAMJ,EAAQK,UAAU,eAAeC,YAAW,EAAAC,GAAI,CAAEC,OAAQ,eACpG,gBAAGC,EAAeC,EAAfD,gBAAe,OACjB5C,EAAC8C,EAAIC,EAAAA,KAAKH,GAAe,GAAA,CAAEI,QAAS,WAClChD,EAACiD,EAAQ,CAAAjC,UAAWC,EAAmBiC,cAAOhB,EAAKiB,oBAC9C,GAIf,IAAC,IAkDH,OAAOnE,CACT,CAIA,IAAMiE,EAAUG,EAAOC,EAAPD,CAAY,CAC1BE,aAAc,MACdC,UAAW,0EACXC,gBAAiB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{inherits as e,createClass as r,classCallCheck as n,callSuper as t,defineProperty as l}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,jsxs as a}from"react/jsx-runtime";import{Component as i}from"react";import{Chip as u,Typography as s}from"@mui/material";function c(){var c=function(){function c(){var e;n(this,c);for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];return e=t(this,c,[].concat(o)),l(e,"handleRemove",(function(r){e.props.onRemove&&e.props.onRemove(r)})),e}return e(c,i),r(c,[{key:"render",value:function(){var e,r=this;return Object.keys(null!==(e=this.props.filterState.filter)&&void 0!==e?e:{}).map((function(e,n){var t,l,i,c=null===(t=r.props.filterState.filter)||void 0===t?void 0:t[e],p=r.props.fields[e];return o(u,{onDelete:function(){return r.handleRemove(e)},size:"small",label:a(s,{component:"span",variant:"caption",children:[null!==(l=null!==(i=null==p?void 0:p.label)&&void 0!==i?i:null==e?void 0:e.toString())&&void 0!==l?l:"Search"," ",null==c?void 0:c.map((function(e){var r;return'"'.concat(null!==(r=e.label)&&void 0!==r?r:e.value,'"')})).join(" ")]})},"".concat(null==e?void 0:e.toString()).concat(n))}))}}])}();return c}export{c as default};
|
|
2
|
+
//# sourceMappingURL=create.filtered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.filtered.js","sources":["../../src/filter-bar/create.filtered.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { Chip, Typography } from '@mui/material'\r\nimport { IFilterFields, IFilterModel, IFilterState } from './types'\r\n\r\ninterface IProps<T> {\r\n fields: IFilterFields<T>\r\n filterState: IFilterState<T>\r\n onRemove?: (key: keyof IFilterModel<T>) => void\r\n}\r\n\r\nfunction CreateFiltered<T>() {\r\n class Filtered extends Component<IProps<T>> {\r\n render() {\r\n const keys = Object.keys(this.props.filterState.filter ?? {}) as (keyof IFilterModel<T>)[]\r\n return keys.map((key, i) => {\r\n const item = this.props.filterState.filter?.[key]\r\n const config = this.props.fields[key]\r\n return (\r\n <Chip\r\n key={`${key?.toString()}${i}`}\r\n onDelete={() => this.handleRemove(key)}\r\n size='small'\r\n label={\r\n <Typography component='span' variant='caption'>\r\n {config?.label ?? key?.toString() ?? 'Search'} {item?.map((x) => `\"${x.label ?? x.value}\"`).join(' ')}\r\n </Typography>\r\n }\r\n />\r\n )\r\n })\r\n }\r\n\r\n handleRemove = (key: keyof IFilterModel<T>) => {\r\n if (!this.props.onRemove) return\r\n this.props.onRemove(key)\r\n }\r\n }\r\n return Filtered\r\n}\r\n\r\nexport default CreateFiltered\r\n"],"names":["CreateFiltered","Filtered","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","key","props","onRemove","_inherits","Component","_createClass","value","_this$props$filterSta","_this2","Object","keys","filterState","filter","map","i","_this2$props$filterSt","_ref","_config$label","item","config","fields","_jsx","Chip","onDelete","handleRemove","size","label","_jsxs","Typography","component","variant","children","toString","x","_x$label","join"],"mappings":"qRAUA,SAASA,IAAc,IACfC,aAAS,SAAAA,IAAA,IAAAC,EAAAC,OAAAF,GAAA,IAAA,IAAAG,EAAAC,UAAAC,OAAAC,EAAAC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAwBZ,OAxBYP,EAAAQ,EAAAC,KAAAV,EAAAW,GAAAA,OAAAL,IAAAM,EAAAX,EAqBE,gBAAA,SAACY,GACTZ,EAAKa,MAAMC,UAChBd,EAAKa,MAAMC,SAASF,MACrBZ,CAAA,CAAA,OAAAe,EAAAhB,EAxBoBiB,GAwBpBC,EAAAlB,EAAA,CAAA,CAAAa,IAAA,SAAAM,MAvBD,WAAM,IAAAC,EAAAC,EAAAX,KAEJ,OADaY,OAAOC,KAAkCH,QAA9BA,EAACV,KAAKI,MAAMU,YAAYC,kBAAML,EAAAA,EAAI,CAAA,GAC9CM,KAAI,SAACb,EAAKc,GAAK,IAAAC,EAAAC,EAAAC,EACnBC,EAAoCH,QAAhCA,EAAGP,EAAKP,MAAMU,YAAYC,kBAAMG,SAA7BA,EAAgCf,GACvCmB,EAASX,EAAKP,MAAMmB,OAAOpB,GACjC,OACEqB,EAACC,EAEC,CAAAC,SAAU,WAAF,OAAQf,EAAKgB,aAAaxB,EAAI,EACtCyB,KAAK,QACLC,MACEC,EAACC,EAAW,CAAAC,UAAU,OAAOC,QAAQ,UAClCC,SAAA,CAAgC,QAAhCf,UAAAC,EAAAE,aAAM,EAANA,EAAQO,aAAK,IAAAT,EAAAA,EAAIjB,aAAG,EAAHA,EAAKgC,kBAAUhB,IAAAA,EAAAA,EAAI,SAAW,IAAAE,aAAI,EAAJA,EAAML,KAAI,SAACoB,GAAC,IAAAC,EAAA,MAAA,IAAApC,OAAgBoC,QAAhBA,EAASD,EAAEP,aAAKQ,IAAAA,EAAAA,EAAID,EAAE3B,MAAK,IAAA,IAAK6B,KAAK,YALhGrC,OAAGE,aAAAA,EAAAA,EAAKgC,YAAUlC,OAAGgB,GAUhC,GACF,IAAC,IAOH,OAAO3B,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{inherits as r,createClass as e,classCallCheck as i,callSuper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as l,jsx as t}from"react/jsx-runtime";import{List as a,ListItem as c,ListItemButton as s,ListItemText as d}from"@mui/material";import h from"./base.js";function m(m){var u=function(){function m(){return i(this,m),n(this,m,arguments)}return r(m,h),e(m,[{key:"render",value:function(){return l(a,{disablePadding:!0,children:[t(c,{children:t(s,{children:t(d,{children:"Item 1"})})}),t(c,{children:t(s,{children:"Item 2"})}),t(c,{children:t(s,{children:"Item 3"})}),t(c,{children:t(s,{children:"Item 4"})}),t(c,{children:t(s,{children:"Item 5"})})]})}}])}();return u}export{m as default};
|
|
2
|
+
//# sourceMappingURL=create.sort-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.sort-menu.js","sources":["../../src/filter-bar/create.sort-menu.tsx"],"sourcesContent":["import { List, ListItem, ListItemButton, ListItemText } from '@mui/material'\r\nimport FilterBarBase from './base'\r\nimport { IFilterPanelParams, IFilterPannelSubmitFunc } from './types'\r\n\r\ninterface IProps<T> {\r\n onSubmit?: IFilterPannelSubmitFunc<T>\r\n}\r\n\r\ninterface IState<T> {}\r\n\r\nfunction CreateFilterSort<T>(params: IFilterPanelParams<T>): React.ComponentType<IProps<T>> {\r\n class FilterSort extends FilterBarBase<IProps<T>, IState<T>, T> {\r\n render() {\r\n // const sortFields = this.getSortFields(params.fields)\r\n // const keys = Object.keys(sortFields) as (keyof FilterFields<T>)[]\r\n return (\r\n <List disablePadding>\r\n <ListItem>\r\n <ListItemButton>\r\n <ListItemText>Item 1</ListItemText>\r\n </ListItemButton>\r\n </ListItem>\r\n <ListItem>\r\n <ListItemButton>Item 2</ListItemButton>\r\n </ListItem>\r\n <ListItem>\r\n <ListItemButton>Item 3</ListItemButton>\r\n </ListItem>\r\n <ListItem>\r\n <ListItemButton>Item 4</ListItemButton>\r\n </ListItem>\r\n <ListItem>\r\n <ListItemButton>Item 5</ListItemButton>\r\n </ListItem>\r\n </List>\r\n )\r\n }\r\n }\r\n\r\n return FilterSort\r\n}\r\n\r\nexport default CreateFilterSort\r\n"],"names":["CreateFilterSort","params","FilterSort","_classCallCheck","_callSuper","this","arguments","_inherits","FilterBarBase","_createClass","key","value","_jsxs","List","disablePadding","children","_jsx","ListItem","ListItemButton","ListItemText"],"mappings":"4RAUA,SAASA,EAAoBC,GAA6B,IAClDC,aAAW,SAAAA,IAAA,OAAAC,OAAAD,GAAAE,EAAAC,KAAAH,EAAAI,UAAA,CAAA,OAAAC,EAAAL,EAAQM,GAARC,EAAAP,EAAA,CAAA,CAAAQ,IAAA,SAAAC,MACf,WAGE,OACEC,EAACC,EAAI,CAACC,gBACJ,EAAAC,SAAA,CAAAC,EAACC,EAAQ,CAAAF,SACPC,EAACE,YACCF,EAACG,EAAkC,CAAAJ,SAAA,eAGvCC,EAACC,EAAQ,CAAAF,SACPC,EAACE,EAAsC,CAAAH,SAAA,aAEzCC,EAACC,EACC,CAAAF,SAAAC,EAACE,EAAc,CAAAH,SAAA,aAEjBC,EAACC,EAAQ,CAAAF,SACPC,EAACE,yBAEHF,EAACC,EACC,CAAAF,SAAAC,EAACE,EAAsC,CAAAH,SAAA,eAI/C,IAAC,IAGH,OAAOb,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"react/jsx-runtime";import"@mui/material";import{EFieldValidate as e,ESearchMatch as t}from"./types.js";import l from"./create.filter-bar.js";var a;!function(e){e.Val1="Val1",e.Val2="Val2",e.Val3="Val3"}(a||(a={})),l({helpNotes:{items:["Id","Title","Asset Id"]},fields:{Id:{type:"string",searchMatches:{rule:t.Guid}},Title:{type:"string",searchMatches:{rule:t.AlwaysVisible}},AssetId:{type:"string",label:"Asset ID"},Link:{type:"string",searchMatches:{rule:t.Link},validate:{rule:e.Link}},YoutubeLink:{type:"string",label:"Youtube",searchMatches:{rule:t.LinkYoutube},validate:{rule:e.LinkYoutube}},Enum:{type:"select",label:"Enum Field",options:[{value:a.Val1},{value:a.Val2},{value:a.Val3,label:"Value 3"}]}}});
|
|
2
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sources":["../../src/filter-bar/demo.tsx"],"sourcesContent":["import { FC } from 'react'\r\nimport { Container } from '@mui/material'\r\nimport { EFieldValidate, ESearchMatch } from './types'\r\nimport CreateFilterBar from './create.filter-bar'\r\n\r\nenum EDataEnum {\r\n 'Val1' = 'Val1',\r\n 'Val2' = 'Val2',\r\n 'Val3' = 'Val3'\r\n}\r\n\r\ninterface Data {\r\n Id: string\r\n Title: string\r\n AssetId: string\r\n YoutubeLink: string\r\n Link: string\r\n Enum: EDataEnum\r\n}\r\n\r\nconst FilterBarInstance = CreateFilterBar<Data>({\r\n helpNotes: { items: ['Id', 'Title', 'Asset Id'] },\r\n fields: {\r\n Id: { type: 'string', searchMatches: { rule: ESearchMatch.Guid } },\r\n Title: { type: 'string', searchMatches: { rule: ESearchMatch.AlwaysVisible } },\r\n AssetId: { type: 'string', label: 'Asset ID' },\r\n Link: { type: 'string', searchMatches: { rule: ESearchMatch.Link }, validate: { rule: EFieldValidate.Link } },\r\n YoutubeLink: {\r\n type: 'string',\r\n label: 'Youtube',\r\n searchMatches: { rule: ESearchMatch.LinkYoutube },\r\n validate: { rule: EFieldValidate.LinkYoutube }\r\n },\r\n Enum: {\r\n type: 'select',\r\n label: 'Enum Field',\r\n options: [{ value: EDataEnum.Val1 }, { value: EDataEnum.Val2 }, { value: EDataEnum.Val3, label: 'Value 3' }]\r\n }\r\n }\r\n})\r\n\r\nconst FilterBarDemo: FC = () => {\r\n return (\r\n <Container maxWidth='xl' sx={{ padding: '50px 0' }}>\r\n <FilterBarInstance />\r\n </Container>\r\n )\r\n}\r\n\r\nexport default FilterBarDemo\r\n"],"names":["EDataEnum","CreateFilterBar","helpNotes","items","fields","Id","type","searchMatches","rule","ESearchMatch","Guid","Title","AlwaysVisible","AssetId","label","Link","validate","EFieldValidate","YoutubeLink","LinkYoutube","Enum","options","value","Val1","Val2","Val3"],"mappings":"oJAKA,IAAKA,GAAL,SAAKA,GACHA,EAAA,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,KAAA,MACD,CAJD,CAAKA,IAAAA,EAIJ,CAAA,IAWyBC,EAAsB,CAC9CC,UAAW,CAAEC,MAAO,CAAC,KAAM,QAAS,aACpCC,OAAQ,CACNC,GAAI,CAAEC,KAAM,SAAUC,cAAe,CAAEC,KAAMC,EAAaC,OAC1DC,MAAO,CAAEL,KAAM,SAAUC,cAAe,CAAEC,KAAMC,EAAaG,gBAC7DC,QAAS,CAAEP,KAAM,SAAUQ,MAAO,YAClCC,KAAM,CAAET,KAAM,SAAUC,cAAe,CAAEC,KAAMC,EAAaM,MAAQC,SAAU,CAAER,KAAMS,EAAeF,OACrGG,YAAa,CACXZ,KAAM,SACNQ,MAAO,UACPP,cAAe,CAAEC,KAAMC,EAAaU,aACpCH,SAAU,CAAER,KAAMS,EAAeE,cAEnCC,KAAM,CACJd,KAAM,SACNQ,MAAO,aACPO,QAAS,CAAC,CAAEC,MAAOtB,EAAUuB,MAAQ,CAAED,MAAOtB,EAAUwB,MAAQ,CAAEF,MAAOtB,EAAUyB,KAAMX,MAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var i,n;!function(i){i.AlwaysVisible="AlwaysVisible",i.MatchOnly="MatchOnly",i.LinkYoutube="LinkYoutube",i.Link="Link",i.Guid="Guid"}(i||(i={})),function(i){i.LinkYoutube="LinkYoutube",i.Link="Link",i.Custom="Custom"}(n||(n={}));export{n as EFieldValidate,i as ESearchMatch};
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../src/filter-bar/types.ts"],"sourcesContent":["export type FilterReason = 'searchInput' | 'filterButton' | 'sortButton'\r\n\r\ntype Dictionary<T, V, E = any> = {\r\n [key in keyof T | keyof E]?: V\r\n}\r\n\r\ntype SingleOrArray<T> = T | T[]\r\n\r\n//#region Search Match\r\nexport enum ESearchMatch {\r\n AlwaysVisible = 'AlwaysVisible',\r\n MatchOnly = 'MatchOnly',\r\n LinkYoutube = 'LinkYoutube',\r\n Link = 'Link',\r\n Guid = 'Guid'\r\n}\r\n\r\ninterface ISearchMatchBase {\r\n rule: ESearchMatch\r\n}\r\n\r\ninterface ISearchMatchMatchOnly extends ISearchMatchBase {\r\n rule: ESearchMatch.MatchOnly\r\n match: (value: string) => boolean\r\n}\r\n\r\ninterface ISearchMatchQuickly extends ISearchMatchBase {\r\n rule: ESearchMatch.AlwaysVisible | ESearchMatch.LinkYoutube | ESearchMatch.Link | ESearchMatch.Guid\r\n}\r\n\r\ntype IFieldSearchMatch = ISearchMatchMatchOnly | ISearchMatchQuickly\r\n//#endregion\r\n\r\n//#region Sort\r\n// interface SortModel<T> {\r\n// value: 'asc' | 'desc'\r\n// }\r\n//\r\n\r\n//#region Validate\r\nexport enum EFieldValidate {\r\n LinkYoutube = 'LinkYoutube',\r\n Link = 'Link',\r\n Custom = 'Custom'\r\n}\r\n\r\ninterface IFieldValidateBase {\r\n rule: EFieldValidate\r\n}\r\ninterface IFieldValidateCustom extends IFieldValidateBase {\r\n rule: EFieldValidate.Custom\r\n custom: (value: string) => boolean\r\n}\r\n\r\ninterface IFieldValidateQuickly extends IFieldValidateBase {\r\n rule: EFieldValidate.Link | EFieldValidate.LinkYoutube\r\n}\r\n\r\ntype IFieldValidate = IFieldValidateQuickly | IFieldValidateCustom\r\n//#endregion\r\n\r\n//#region Filter Field\r\ninterface IFilterFieldBase {\r\n label?: string\r\n /** @default string */\r\n type?: 'string' | 'select'\r\n searchMatches?: SingleOrArray<IFieldSearchMatch>\r\n /** @default true */\r\n sortable?: boolean\r\n /** @default Required */\r\n validate?: SingleOrArray<IFieldValidate>\r\n}\r\n\r\nexport interface IFilterFieldString extends IFilterFieldBase {\r\n type?: 'string'\r\n}\r\n\r\nexport interface IFilterFieldSelect extends IFilterFieldBase {\r\n type: 'select'\r\n options: { value: string; label?: string }[]\r\n}\r\n\r\nexport type IFilterField = IFilterFieldString | IFilterFieldSelect\r\n\r\nexport type IFilterFields<T> = Dictionary<T, IFilterField, { Search?: string }>\r\n\r\nexport interface IFilterItemModel {\r\n value?: string | number | boolean\r\n label?: string\r\n /** @default true */\r\n sortable?: boolean\r\n}\r\n\r\nexport type IFilterModel<T> = Dictionary<T, IFilterItemModel[], { Search?: string }>\r\n\r\nexport interface IFilterState<T> {\r\n filter?: IFilterModel<T>\r\n details?: 'add' | 'remove'\r\n}\r\n//#endregion\r\nexport interface IFilterPanelParams<T> {\r\n fields: IFilterFields<T>\r\n}\r\n\r\nexport type IFilterPannelSubmitFunc<T> = (filed: keyof IFilterModel<T>, value: IFilterItemModel) => void\r\n"],"names":["ESearchMatch","EFieldValidate"],"mappings":"IASYA,EA+BAC,GA/BZ,SAAYD,GACVA,EAAA,cAAA,gBACAA,EAAA,UAAA,YACAA,EAAA,YAAA,cACAA,EAAA,KAAA,OACAA,EAAA,KAAA,MACD,CAND,CAAYA,IAAAA,EAMX,CAAA,IAyBD,SAAYC,GACVA,EAAA,YAAA,cACAA,EAAA,KAAA,OACAA,EAAA,OAAA,QACD,CAJD,CAAYA,IAAAA,EAIX,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as t,Fragment as i}from"react/jsx-runtime";import{styled as e,Box as n,Tooltip as l,Fade as o,IconButton as r,Typography as m}from"@mui/material";import a from"@mui/icons-material/Close";import c from"../components/help-tooltip.js";var s=function(i){return t(u,{children:t(l,{title:"Remove filter",children:t(o,{in:i.visibled,unmountOnExit:!0,children:t(r,{size:"small",onClick:i.onClick,children:t(a,{fontSize:"small"})})})})})},p=function(e){var n;return!e.items||e.items.length<1?t(i,{}):t(u,{children:t(c,{small:!0,title:null!==(n=e.title)&&void 0!==n?n:"The search includes",children:t(d,{children:e.items.map((function(i,e){return t(m,{component:"li",variant:"body2",children:i},e)}))})})})},u=e(n)({display:"flex",flex:"0 0 auto",width:"40px",height:"40px",justifyContent:"center",alignItems:"center"}),d=e("ul")({paddingLeft:"1.7rem",marginBottom:0,li:{position:"relative",textAlign:"justify","&::before":{content:'"►"',display:"block",position:"absolute",top:"50%",right:"calc(100% + 6px)",transform:"translateY(-50%)",fontSize:"0.9em"}}});export{s as ButtonClear,p as FilterHelpNotes};
|
|
2
|
+
//# sourceMappingURL=ui.units.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.units.js","sources":["../../src/filter-bar/ui.units.tsx"],"sourcesContent":["import React, { FC } from 'react'\r\nimport { Box, Fade, IconButton, IconButtonProps, styled, Tooltip, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport HelpTooltip from '../components/help-tooltip'\r\n\r\ninterface ButtonClearProps {\r\n visibled?: boolean\r\n onClick: IconButtonProps['onClick']\r\n}\r\n\r\nexport const ButtonClear: FC<ButtonClearProps> = (props) => (\r\n <WrapIcon>\r\n <Tooltip title='Remove filter'>\r\n <Fade in={props.visibled} unmountOnExit>\r\n <IconButton size='small' onClick={props.onClick}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Fade>\r\n </Tooltip>\r\n </WrapIcon>\r\n)\r\n\r\nexport interface FilterHelpNotesProps {\r\n title?: string\r\n items?: string[]\r\n}\r\n\r\nexport const FilterHelpNotes: FC<FilterHelpNotesProps> = (props) => {\r\n if (!props.items || props.items.length < 1) return <></>\r\n return (\r\n <WrapIcon>\r\n <HelpTooltip small title={props.title ?? 'The search includes'}>\r\n <WrapList>\r\n {props.items.map((item, index) => (\r\n <Typography key={index} component='li' variant='body2'>\r\n {item}\r\n </Typography>\r\n ))}\r\n </WrapList>\r\n </HelpTooltip>\r\n </WrapIcon>\r\n )\r\n}\r\n\r\nconst WrapIcon = styled(Box)({\r\n display: 'flex',\r\n flex: '0 0 auto',\r\n width: '40px',\r\n height: '40px',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n})\r\n\r\nconst WrapList = styled('ul')({\r\n paddingLeft: '1.7rem',\r\n marginBottom: 0,\r\n li: {\r\n position: 'relative',\r\n textAlign: 'justify',\r\n '&::before': {\r\n content: '\"►\"',\r\n display: 'block',\r\n position: 'absolute',\r\n top: '50%',\r\n right: 'calc(100% + 6px)',\r\n transform: 'translateY(-50%)',\r\n fontSize: '0.9em'\r\n }\r\n }\r\n})\r\n"],"names":["ButtonClear","props","_jsx","WrapIcon","children","Tooltip","title","Fade","in","visibled","unmountOnExit","IconButton","size","onClick","CloseIcon","fontSize","FilterHelpNotes","_props$title","items","length","HelpTooltip","small","WrapList","map","item","index","Typography","component","variant","styled","Box","display","flex","width","height","justifyContent","alignItems","paddingLeft","marginBottom","li","position","textAlign","content","top","right","transform"],"mappings":"uPAUaA,EAAoC,SAACC,GAAK,OACrDC,EAACC,EAAQ,CAAAC,SACPF,EAACG,EAAO,CAACC,MAAM,gBAAeF,SAC5BF,EAACK,EAAK,CAAAC,GAAIP,EAAMQ,SAAUC,eAAa,EAAAN,SACrCF,EAACS,EAAW,CAAAC,KAAK,QAAQC,QAASZ,EAAMY,iBACtCX,EAACY,EAAU,CAAAC,SAAS,iBAIjB,EAQAC,EAA4C,SAACf,GAAS,IAAAgB,EACjE,OAAKhB,EAAMiB,OAASjB,EAAMiB,MAAMC,OAAS,EAAUjB,QAEjDA,EAACC,EACC,CAAAC,SAAAF,EAACkB,EAAY,CAAAC,OAAM,EAAAf,MAAkB,QAAbW,EAAEhB,EAAMK,aAAK,IAAAW,EAAAA,EAAI,sBAAqBb,SAC5DF,EAACoB,EACE,CAAAlB,SAAAH,EAAMiB,MAAMK,KAAI,SAACC,EAAMC,GAAK,OAC3BvB,EAACwB,EAAuB,CAAAC,UAAU,KAAKC,QAAQ,QAAOxB,SACnDoB,GADcC,EAGlB,SAKX,EAEMtB,EAAW0B,EAAOC,EAAPD,CAAY,CAC3BE,QAAS,OACTC,KAAM,WACNC,MAAO,OACPC,OAAQ,OACRC,eAAgB,SAChBC,WAAY,WAGRd,EAAWO,EAAO,KAAPA,CAAa,CAC5BQ,YAAa,SACbC,aAAc,EACdC,GAAI,CACFC,SAAU,WACVC,UAAW,UACX,YAAa,CACXC,QAAS,MACTX,QAAS,QACTS,SAAU,WACVG,IAAK,MACLC,MAAO,mBACPC,UAAW,mBACX9B,SAAU"}
|