mirror of https://github.com/apache/superset.git
feat: list view filters for Query History (#11702)
This commit is contained in:
parent
3cd94d6da9
commit
011724750f
|
@ -58,9 +58,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -19527,9 +19527,9 @@
|
|||
"integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8="
|
||||
},
|
||||
"antd": {
|
||||
"version": "4.6.6",
|
||||
"resolved": "https://registry.npmjs.org/antd/-/antd-4.6.6.tgz",
|
||||
"integrity": "sha512-ruqzFFyohjEEp+Qg5VzBzFgDjqdj0FoPt3V/bGtLjeuQXPqFrPs+y4WWWmqi3ydGmN4VPIGBwd3CybQDrZAN3g==",
|
||||
"version": "4.8.2",
|
||||
"resolved": "https://registry.npmjs.org/antd/-/antd-4.8.2.tgz",
|
||||
"integrity": "sha512-qxagKsiPVO+2rcAdX8WA3TPqiv5TS4FDGoaETVgCCln3x7ap1nqHkBC+Fr3CSNg8MxwQ+6m5BSBLcs5uDQg0Qw==",
|
||||
"requires": {
|
||||
"@ant-design/colors": "^4.0.5",
|
||||
"@ant-design/css-animation": "^1.7.2",
|
||||
|
@ -19547,30 +19547,30 @@
|
|||
"rc-cascader": "~1.4.0",
|
||||
"rc-checkbox": "~2.3.0",
|
||||
"rc-collapse": "~2.0.0",
|
||||
"rc-dialog": "~8.2.1",
|
||||
"rc-dialog": "~8.4.0",
|
||||
"rc-drawer": "~4.1.0",
|
||||
"rc-dropdown": "~3.2.0",
|
||||
"rc-field-form": "~1.10.0",
|
||||
"rc-image": "~3.0.6",
|
||||
"rc-input-number": "~6.0.0",
|
||||
"rc-field-form": "~1.13.0",
|
||||
"rc-image": "~4.0.0",
|
||||
"rc-input-number": "~6.1.0",
|
||||
"rc-mentions": "~1.5.0",
|
||||
"rc-menu": "~8.7.1",
|
||||
"rc-motion": "^2.0.0",
|
||||
"rc-notification": "~4.4.0",
|
||||
"rc-pagination": "~3.0.3",
|
||||
"rc-picker": "~2.1.0",
|
||||
"rc-menu": "~8.8.2",
|
||||
"rc-motion": "^2.2.0",
|
||||
"rc-notification": "~4.5.2",
|
||||
"rc-pagination": "~3.1.0",
|
||||
"rc-picker": "~2.3.0",
|
||||
"rc-progress": "~3.1.0",
|
||||
"rc-rate": "~2.8.2",
|
||||
"rc-rate": "~2.9.0",
|
||||
"rc-resize-observer": "^0.2.3",
|
||||
"rc-select": "~11.3.2",
|
||||
"rc-slider": "~9.5.1",
|
||||
"rc-select": "~11.4.0",
|
||||
"rc-slider": "~9.6.1",
|
||||
"rc-steps": "~4.1.0",
|
||||
"rc-switch": "~3.2.0",
|
||||
"rc-table": "~7.9.2",
|
||||
"rc-tabs": "~11.6.0",
|
||||
"rc-table": "~7.11.0",
|
||||
"rc-tabs": "~11.7.0",
|
||||
"rc-textarea": "~0.3.0",
|
||||
"rc-tooltip": "~5.0.0",
|
||||
"rc-tree": "~3.10.0",
|
||||
"rc-tree": "~3.11.0",
|
||||
"rc-tree-select": "~4.1.1",
|
||||
"rc-trigger": "~5.0.3",
|
||||
"rc-upload": "~3.3.1",
|
||||
|
@ -19588,22 +19588,17 @@
|
|||
}
|
||||
},
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.29.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz",
|
||||
"integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==",
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
|
@ -20098,9 +20093,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"async-validator": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.4.0.tgz",
|
||||
"integrity": "sha512-VrFk4eYiJAWKskEz115iiuCf9O0ftnMMPXrOFMqyzGH2KxO7YwncKyn/FgOOP+0MDHMfXL7gLExagCutaZGigA=="
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.0.tgz",
|
||||
"integrity": "sha512-jMDcDHrH618eznoO4/3afJG5+I4HE/ipQd7y4mhPJmCaoHCSPOJfjpWgjFoxma2h8irL+zGe+qwyptDrR37Vhg=="
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
|
@ -24388,9 +24383,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"dayjs": {
|
||||
"version": "1.9.4",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.4.tgz",
|
||||
"integrity": "sha512-ABSF3alrldf7nM9sQ2U+Ln67NRwmzlLOqG7kK03kck0mw3wlSSEKv/XhKGGxUjQcS57QeiCyNdrFgtj9nWlrng=="
|
||||
"version": "1.9.6",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.6.tgz",
|
||||
"integrity": "sha512-HngNLtPEBWRo8EFVmHFmSXAjtCX8rGNqeXQI0Gh7wCTSqwaKgPIDqu9m07wABVopNwzvOeCb+2711vQhDlcIXw=="
|
||||
},
|
||||
"de-indent": {
|
||||
"version": "1.0.2",
|
||||
|
@ -35168,9 +35163,9 @@
|
|||
}
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.23.0",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz",
|
||||
"integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA=="
|
||||
"version": "2.29.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
|
||||
},
|
||||
"moo": {
|
||||
"version": "0.4.3",
|
||||
|
@ -39360,9 +39355,9 @@
|
|||
}
|
||||
},
|
||||
"rc-align": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.8.tgz",
|
||||
"integrity": "sha512-2sRUkmB8z4UEXzaS+lDHzXMoR8HrtKH9nn2yHlHVNyUTnaucjMFbdEoCk+hO1g7cpIgW0MphG8i0EH2scSesfw==",
|
||||
"version": "4.0.9",
|
||||
"resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.9.tgz",
|
||||
"integrity": "sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "2.x",
|
||||
|
@ -39372,17 +39367,17 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz",
|
||||
"integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==",
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
|
@ -39456,9 +39451,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39478,9 +39473,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"rc-util": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz",
|
||||
"integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==",
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
|
@ -39494,19 +39489,20 @@
|
|||
}
|
||||
},
|
||||
"rc-dialog": {
|
||||
"version": "8.2.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.2.2.tgz",
|
||||
"integrity": "sha512-U4jR5bE7XpIbMC20JAIv91254b+vQ8LODd8Kxco0XvkL+eJ1aCYkOfRqevJ1ipOIzF3s6F08jSH8YvJqxvpAvA==",
|
||||
"version": "8.4.3",
|
||||
"resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.4.3.tgz",
|
||||
"integrity": "sha512-LHsWXb+2Cy4vEOeJcPvk9M0WSr80Gi438ov5rXt3E6XB4j+53Z+vMFRr+TagnVuOVQRCLmmzT4qutfm2U1OK6w==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"rc-animate": "3.x",
|
||||
"classnames": "^2.2.6",
|
||||
"rc-motion": "^2.3.0",
|
||||
"rc-util": "^5.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39524,9 +39520,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39544,9 +39540,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39554,9 +39550,9 @@
|
|||
}
|
||||
},
|
||||
"rc-field-form": {
|
||||
"version": "1.10.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.10.1.tgz",
|
||||
"integrity": "sha512-aosTtNTqLYX2jsG5GyCv7axe+b57XH73T7TmmrX/cmhemhtFjvNE6RkRkmtP9VOJnZg5YGC5HfK172cnJ1Ij7Q==",
|
||||
"version": "1.13.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.13.2.tgz",
|
||||
"integrity": "sha512-sskFsJkEmK6wUXNVxVaXRq4jYhKFKQyVrKxHQkvCI0l2ENg8ujjT8oOV2X4aa7+tLV0FNJLKdD+LuHlnTxEeSg==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.8.4",
|
||||
"async-validator": "^3.0.3",
|
||||
|
@ -39564,9 +39560,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39574,21 +39570,21 @@
|
|||
}
|
||||
},
|
||||
"rc-image": {
|
||||
"version": "3.0.6",
|
||||
"resolved": "https://registry.npmjs.org/rc-image/-/rc-image-3.0.6.tgz",
|
||||
"integrity": "sha512-Dn8mTSlcgKJko417OX8+6yyNIL9+DEa81aexBfT78qWlEpcxtR4GgdsU0+zJLNqa2rnGZyjaBLFtaPw9tUuxYA==",
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-image/-/rc-image-4.0.1.tgz",
|
||||
"integrity": "sha512-1GxjwgtONtJjlvd7sM9VSLTAlDQhkqHI0wl72YSDpdm24w5zmDsTYLgTNh/vToFa9qAml10Gaidy03qpkTAQ+A==",
|
||||
"requires": {
|
||||
"@ant-design/icons": "^4.2.2",
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"classnames": "^2.2.6",
|
||||
"rc-dialog": "~8.2.2",
|
||||
"rc-dialog": "~8.4.0",
|
||||
"rc-util": "^5.0.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39596,9 +39592,9 @@
|
|||
}
|
||||
},
|
||||
"rc-input-number": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-6.0.1.tgz",
|
||||
"integrity": "sha512-cS1k6IB/V84VUQd5qWzGFrLHvZjWGHGmYbrvR0QP/C1Ju1SlBqlhqhOBTc6w+dpPs84PCH5caZtNzsHeWZ1zYA==",
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-6.1.1.tgz",
|
||||
"integrity": "sha512-9t2xf1G0YEism7FAXAvF1huBk7ZNABPBf6NL+3/aDL123WiT/vhhod4cldiDWTM1Yb2EDKR//ZIa546ScdsUaA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.5",
|
||||
|
@ -39606,9 +39602,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39629,9 +39625,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39639,9 +39635,9 @@
|
|||
}
|
||||
},
|
||||
"rc-menu": {
|
||||
"version": "8.7.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.7.1.tgz",
|
||||
"integrity": "sha512-CuuJ9oS1oPAfenqAMa3CZZE7RrPcPTHV3310cf6RO2uJgE9ztqasRFMEBwtruH16OexTr0igTCXySm+e2/TBQg==",
|
||||
"version": "8.8.3",
|
||||
"resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.8.3.tgz",
|
||||
"integrity": "sha512-C9sT0SBXmUbVWRUseXASousacRVPnOm5aXdyJR569WIvZwbs2IncpGNmAcft1R5ZuFE3Y+SZZ5FYvtGtbCzkIQ==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "2.x",
|
||||
|
@ -39655,9 +39651,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39675,17 +39671,17 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz",
|
||||
"integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==",
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
|
@ -39699,20 +39695,20 @@
|
|||
}
|
||||
},
|
||||
"rc-notification": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.4.0.tgz",
|
||||
"integrity": "sha512-IDeNAFGVeOsy1tv4zNVqMAXB9tianR80ewQbtObaAQfjwAjWfONdqdyjFkEU6nc6UQhSUYA5OcTGb7kwwbnh0g==",
|
||||
"version": "4.5.4",
|
||||
"resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.5.4.tgz",
|
||||
"integrity": "sha512-VsN0ouF4uglE5g3C9oDsXLNYX0Sz++ZNUFYCswkxhpImYJ9u6nJOpyA71uOYDVCu6bAF54Y5Hi/b+EcnMzkepg==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "2.x",
|
||||
"rc-animate": "3.x",
|
||||
"rc-motion": "^2.2.0",
|
||||
"rc-util": "^5.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39720,18 +39716,18 @@
|
|||
}
|
||||
},
|
||||
"rc-pagination": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.0.4.tgz",
|
||||
"integrity": "sha512-9v9mmB7FTWS4kWRLFfWafm6LtvB+xdNi+pTIwUODSevzImrlrmMOIhDrOB3u2tEXiy8LyqvCnoyPYt5jQBapxA==",
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.1.2.tgz",
|
||||
"integrity": "sha512-KbJvkTvRiD51vTIAi0oTARPUHNb0iV6njbDBe8yLkc3PWYDJaszASfuss6YJ98EIxEeGzuEk6xsUAEKWRJgz2g==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39739,9 +39735,9 @@
|
|||
}
|
||||
},
|
||||
"rc-picker": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.1.0.tgz",
|
||||
"integrity": "sha512-Tu8+yR0qnBVND4v+eta8GRkLu4OvTUaxlk7ZHDAkVFm1RHLAl1GzA6Foni9vcpkMnFMFD6EzpaOlkArI0ryuDA==",
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.3.4.tgz",
|
||||
"integrity": "sha512-UdeqTzR9E5KHOGMjWfsMpE3VU+3VR3J5/wMrwuIRmL8orv9Tm+Gew3NPfs7djcuTrfnu+hL+lwCWp7VftZcSng==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.1",
|
||||
|
@ -39749,22 +39745,31 @@
|
|||
"dayjs": "^1.8.30",
|
||||
"moment": "^2.24.0",
|
||||
"rc-trigger": "^5.0.4",
|
||||
"rc-util": "^5.0.1",
|
||||
"rc-util": "^5.4.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.29.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
|
||||
"rc-util": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"react-is": {
|
||||
"version": "16.13.1",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -39778,9 +39783,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39788,9 +39793,9 @@
|
|||
}
|
||||
},
|
||||
"rc-rate": {
|
||||
"version": "2.8.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.8.2.tgz",
|
||||
"integrity": "sha512-f9T/D+ZwWQrWHkpidpQbnXpnVMGMC4eSRAkwuu88a8Qv1C/9LNc4AErazoh8tpnZBFqq19F3j0Glv+sDgkfEig==",
|
||||
"version": "2.9.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.0.tgz",
|
||||
"integrity": "sha512-DqXWWpA3+oQfHVBYfk5Myhl1YoNYYX9roYYIF7mLiDBI5SCErOYpLaCV8PdZ3IUN+F0AtejXxy4fuHgp1cDtwQ==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.5",
|
||||
|
@ -39798,9 +39803,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39819,9 +39824,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39829,23 +39834,23 @@
|
|||
}
|
||||
},
|
||||
"rc-select": {
|
||||
"version": "11.3.3",
|
||||
"resolved": "https://registry.npmjs.org/rc-select/-/rc-select-11.3.3.tgz",
|
||||
"integrity": "sha512-YMsGVEZxXctj15nIZKlFCkiOxMe0PNBeACN6nHqDozDYKR/aqP8J3XZqZ5Gw/fcgS4bI50zPVMieJKlY8/6Wfw==",
|
||||
"version": "11.4.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-select/-/rc-select-11.4.2.tgz",
|
||||
"integrity": "sha512-DQHYwMcvAajnnlahKkYIW47AVTXgxpGj9CWbe+juXgvxawQRFUdd8T8L2Q05aOkMy02UTG0Qrs7EZfHmn5QHbA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "2.x",
|
||||
"rc-motion": "^2.0.1",
|
||||
"rc-trigger": "^5.0.4",
|
||||
"rc-util": "^5.0.1",
|
||||
"rc-virtual-list": "^3.0.3",
|
||||
"rc-virtual-list": "^3.2.0",
|
||||
"warning": "^4.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39861,9 +39866,9 @@
|
|||
}
|
||||
},
|
||||
"rc-slider": {
|
||||
"version": "9.5.4",
|
||||
"resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.5.4.tgz",
|
||||
"integrity": "sha512-24goJnWhmWi0ojNZMoPSMni2wh73IPqEK0TJh7rWn10hPLLKgG8x3KRR0g4uUdCS9APHyosqxGXUIJKGydJXVg==",
|
||||
"version": "9.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.6.2.tgz",
|
||||
"integrity": "sha512-uctdE1768ZmSjCcRmx6ffm/uoW/zl/SOvanvoilWyZ1NRlwkZCa1R20AIJlU9VDJo/FswWnqXqt6iDp2CnDVig==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.5",
|
||||
|
@ -39873,9 +39878,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39893,9 +39898,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39913,9 +39918,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39923,32 +39928,45 @@
|
|||
}
|
||||
},
|
||||
"rc-table": {
|
||||
"version": "7.9.10",
|
||||
"resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.9.10.tgz",
|
||||
"integrity": "sha512-WtPBxYsBU/a5MIglilbMlVkiXkPKXpUM/CPCFaqA2veh1b7J40mbTGQmU8VT6S0FClkI5jm0QBtSp6LstPkOMQ==",
|
||||
"version": "7.11.1",
|
||||
"resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.11.1.tgz",
|
||||
"integrity": "sha512-Xq7ibC/a2kj8ywLeKhGcv689JZaldjPxxe15h89qGho6/sR9YkIUD07KjLCGFaJ0LkhGBNY1XYv2VOUFGOQuYg==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "^2.2.5",
|
||||
"raf": "^3.4.1",
|
||||
"rc-resize-observer": "^0.2.0",
|
||||
"rc-util": "^5.0.4",
|
||||
"rc-util": "^5.4.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"react-is": {
|
||||
"version": "16.13.1",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"rc-tabs": {
|
||||
"version": "11.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.6.2.tgz",
|
||||
"integrity": "sha512-7Z5Lg+nP/H4V7dIlewrOC0+aogRVH3ASjTy4VIletYOeStGPWYSfwBnUTBdcCXcUuWuyyKnNkYrUD0yaRqUCIA==",
|
||||
"version": "11.7.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.7.0.tgz",
|
||||
"integrity": "sha512-nYwQcgML2drM0iau4aa6HI4qyyZSW0WpspCAtO5KGjXwHzUJcvv3qgLVuoQOWQaDDHXkI9Jj8U7Y/Hcrdyj1Kw==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"classnames": "2.x",
|
||||
|
@ -39960,9 +39978,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -39981,9 +39999,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -40000,9 +40018,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -40010,9 +40028,9 @@
|
|||
}
|
||||
},
|
||||
"rc-tree": {
|
||||
"version": "3.10.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-3.10.0.tgz",
|
||||
"integrity": "sha512-kf7J/f2E2T8Kfta3/1BIg65AzTmXOgOjn0KOpvD3KI/gqkfKMRKUS1ybkxW39JUPpKwdeOHFnYH+nFFMq7tkfg==",
|
||||
"version": "3.11.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-3.11.0.tgz",
|
||||
"integrity": "sha512-3RxA6fckbzX7WOk7g4gvO6AOad0znc8QW2nsv1IXSiljQaIMiyx1AK0zhzIEtABgWKbIs9QkhnBvIAHS4Rn9LA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.10.1",
|
||||
"classnames": "2.x",
|
||||
|
@ -40022,9 +40040,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -40044,9 +40062,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
|
@ -40066,17 +40084,17 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz",
|
||||
"integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==",
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
|
@ -40100,17 +40118,17 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
|
||||
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
|
||||
"version": "7.12.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
|
||||
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"rc-util": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz",
|
||||
"integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==",
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
|
@ -40150,9 +40168,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"rc-util": {
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz",
|
||||
"integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==",
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.5.0.tgz",
|
||||
"integrity": "sha512-YJB+zZGvCll/bhxXRVLAekr7lOvTgqMlRIhgINoINfUek7wQvi5sft46NOi3yYUYhocpuW4k8+5okW46sBsZAQ==",
|
||||
"requires": {
|
||||
"react-is": "^16.12.0",
|
||||
"shallowequal": "^1.1.0"
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
"@superset-ui/preset-chart-xy": "^0.15.13",
|
||||
"@vx/responsive": "^0.0.195",
|
||||
"abortcontroller-polyfill": "^1.1.9",
|
||||
"antd": "^4.6.6",
|
||||
"antd": "^4.8.2",
|
||||
"array-move": "^2.2.1",
|
||||
"bootstrap": "^3.4.1",
|
||||
"bootstrap-slider": "^10.0.0",
|
||||
|
@ -121,7 +121,7 @@
|
|||
"lodash-es": "^4.17.14",
|
||||
"mathjs": "^8.0.1",
|
||||
"memoize-one": "^5.1.1",
|
||||
"moment": "^2.20.1",
|
||||
"moment": "^2.26.0",
|
||||
"mousetrap": "^1.6.1",
|
||||
"mustache": "^2.2.1",
|
||||
"omnibar": "^2.1.1",
|
||||
|
|
|
@ -46,6 +46,19 @@ const g = global as any;
|
|||
g.window = g.window || {};
|
||||
g.window.location = { href: 'about:blank' };
|
||||
g.window.performance = { now: () => new Date().getTime() };
|
||||
Object.defineProperty(window, 'matchMedia', {
|
||||
writable: true,
|
||||
value: jest.fn().mockImplementation(query => ({
|
||||
matches: false,
|
||||
media: query,
|
||||
onchange: null,
|
||||
addListener: jest.fn(), // Deprecated
|
||||
removeListener: jest.fn(), // Deprecated
|
||||
addEventListener: jest.fn(),
|
||||
removeEventListener: jest.fn(),
|
||||
dispatchEvent: jest.fn(),
|
||||
})),
|
||||
});
|
||||
|
||||
g.$ = jQuery(g.window);
|
||||
|
||||
|
|
|
@ -62,6 +62,10 @@ const mockedProps = {
|
|||
accessor: 'name',
|
||||
Header: 'Name',
|
||||
},
|
||||
{
|
||||
accessor: 'time',
|
||||
Header: 'Time',
|
||||
},
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
|
@ -85,10 +89,16 @@ const mockedProps = {
|
|||
paginate: true,
|
||||
operator: 'eq',
|
||||
},
|
||||
{
|
||||
Header: 'Time',
|
||||
id: 'time',
|
||||
input: 'datetime_range',
|
||||
operator: 'between',
|
||||
},
|
||||
],
|
||||
data: [
|
||||
{ id: 1, name: 'data 1' },
|
||||
{ id: 2, name: 'data 2' },
|
||||
{ id: 1, name: 'data 1', age: 10, time: '2020-11-18T07:53:45.354Z' },
|
||||
{ id: 2, name: 'data 2', age: 1, time: '2020-11-18T07:53:45.354Z' },
|
||||
],
|
||||
count: 2,
|
||||
pageSize: 1,
|
||||
|
@ -221,15 +231,17 @@ describe('ListView', () => {
|
|||
|
||||
expect(mockedProps.bulkActions[0].onSelect.mock.calls[0])
|
||||
.toMatchInlineSnapshot(`
|
||||
Array [
|
||||
Array [
|
||||
Object {
|
||||
"id": 1,
|
||||
"name": "data 1",
|
||||
},
|
||||
],
|
||||
]
|
||||
`);
|
||||
Array [
|
||||
Array [
|
||||
Object {
|
||||
"age": 10,
|
||||
"id": 1,
|
||||
"name": "data 1",
|
||||
"time": "2020-11-18T07:53:45.354Z",
|
||||
},
|
||||
],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
it('handles bulk actions on all rows', () => {
|
||||
|
@ -250,19 +262,23 @@ describe('ListView', () => {
|
|||
|
||||
expect(mockedProps.bulkActions[0].onSelect.mock.calls[0])
|
||||
.toMatchInlineSnapshot(`
|
||||
Array [
|
||||
Array [
|
||||
Object {
|
||||
"id": 1,
|
||||
"name": "data 1",
|
||||
},
|
||||
Object {
|
||||
"id": 2,
|
||||
"name": "data 2",
|
||||
},
|
||||
],
|
||||
]
|
||||
`);
|
||||
Array [
|
||||
Array [
|
||||
Object {
|
||||
"age": 10,
|
||||
"id": 1,
|
||||
"name": "data 1",
|
||||
"time": "2020-11-18T07:53:45.354Z",
|
||||
},
|
||||
Object {
|
||||
"age": 1,
|
||||
"id": 2,
|
||||
"name": "data 2",
|
||||
"time": "2020-11-18T07:53:45.354Z",
|
||||
},
|
||||
],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
it('allows deselecting all', async () => {
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import { ReactNode } from 'react';
|
||||
import { styled } from '@superset-ui/core';
|
||||
|
||||
export interface BaseFilter {
|
||||
Header: ReactNode;
|
||||
initialValue: any;
|
||||
}
|
||||
|
||||
export const FilterContainer = styled.div`
|
||||
display: inline-flex;
|
||||
margin-right: 2em;
|
||||
font-size: ${({ theme }) => theme.typography.sizes.s}px;
|
||||
`;
|
||||
|
||||
export const FilterTitle = styled.label`
|
||||
font-weight: bold;
|
||||
line-height: 27px;
|
||||
margin: 0 0.4em 0 0;
|
||||
`;
|
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import React, { useState, useMemo } from 'react';
|
||||
import moment, { Moment } from 'moment';
|
||||
import { styled } from '@superset-ui/core';
|
||||
import { RangePicker as AntRangePicker } from 'src/common/components/DatePicker';
|
||||
import { FilterContainer, BaseFilter, FilterTitle } from './Base';
|
||||
|
||||
interface DateRangeFilterProps extends BaseFilter {
|
||||
onSubmit: (val: number[]) => void;
|
||||
name: string;
|
||||
}
|
||||
|
||||
type ValueState = [number, number];
|
||||
|
||||
const RangePicker = styled(AntRangePicker)`
|
||||
padding: 0 11px;
|
||||
transform: translateX(-7px);
|
||||
`;
|
||||
|
||||
const RangeFilterContainer = styled(FilterContainer)`
|
||||
margin-right: 1em;
|
||||
`;
|
||||
|
||||
export default function DateRangeFilter({
|
||||
Header,
|
||||
initialValue,
|
||||
onSubmit,
|
||||
}: DateRangeFilterProps) {
|
||||
const [value, setValue] = useState<ValueState | null>(initialValue ?? null);
|
||||
const momentValue = useMemo((): [Moment, Moment] | null => {
|
||||
if (!value || (Array.isArray(value) && !value.length)) return null;
|
||||
return [moment(value[0]), moment(value[1])];
|
||||
}, [value]);
|
||||
|
||||
return (
|
||||
<RangeFilterContainer>
|
||||
<FilterTitle>{Header}:</FilterTitle>
|
||||
<RangePicker
|
||||
showTime
|
||||
bordered={false}
|
||||
value={momentValue}
|
||||
onChange={momentRange => {
|
||||
if (!momentRange) {
|
||||
setValue(null);
|
||||
onSubmit([]);
|
||||
return;
|
||||
}
|
||||
const changeValue = [
|
||||
momentRange[0]?.valueOf() ?? 0,
|
||||
momentRange[1]?.valueOf() ?? 0,
|
||||
] as ValueState;
|
||||
setValue(changeValue);
|
||||
onSubmit(changeValue);
|
||||
}}
|
||||
/>
|
||||
</RangeFilterContainer>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import React, { useState } from 'react';
|
||||
import SearchInput from 'src/components/SearchInput';
|
||||
import { FilterContainer, BaseFilter } from './Base';
|
||||
|
||||
interface SearchHeaderProps extends BaseFilter {
|
||||
Header: string;
|
||||
onSubmit: (val: string) => void;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export default function SearchFilter({
|
||||
Header,
|
||||
name,
|
||||
initialValue,
|
||||
onSubmit,
|
||||
}: SearchHeaderProps) {
|
||||
const [value, setValue] = useState(initialValue || '');
|
||||
const handleSubmit = () => {
|
||||
if (value) {
|
||||
onSubmit(value);
|
||||
}
|
||||
};
|
||||
const onClear = () => {
|
||||
setValue('');
|
||||
onSubmit('');
|
||||
};
|
||||
|
||||
return (
|
||||
<FilterContainer>
|
||||
<SearchInput
|
||||
data-test="filters-search"
|
||||
placeholder={Header}
|
||||
name={name}
|
||||
value={value}
|
||||
onChange={e => {
|
||||
setValue(e.currentTarget.value);
|
||||
}}
|
||||
onSubmit={handleSubmit}
|
||||
onClear={onClear}
|
||||
/>
|
||||
</FilterContainer>
|
||||
);
|
||||
}
|
|
@ -16,29 +16,17 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import React, { useState, ReactNode } from 'react';
|
||||
import { styled, withTheme, SupersetThemeProps } from '@superset-ui/core';
|
||||
|
||||
import React, { useState } from 'react';
|
||||
import { withTheme, SupersetThemeProps } from '@superset-ui/core';
|
||||
import {
|
||||
Select,
|
||||
PaginatedSelect,
|
||||
PartialThemeConfig,
|
||||
} from 'src/components/Select';
|
||||
import { Filter, SelectOption } from 'src/components/ListView/types';
|
||||
import { filterSelectStyles } from 'src/components/ListView/utils';
|
||||
import { FilterContainer, BaseFilter, FilterTitle } from './Base';
|
||||
|
||||
import SearchInput from 'src/components/SearchInput';
|
||||
import {
|
||||
Filter,
|
||||
FilterValue,
|
||||
Filters,
|
||||
InternalFilter,
|
||||
SelectOption,
|
||||
} from './types';
|
||||
import { filterSelectStyles } from './utils';
|
||||
|
||||
interface BaseFilter {
|
||||
Header: ReactNode;
|
||||
initialValue: any;
|
||||
}
|
||||
interface SelectFilterProps extends BaseFilter {
|
||||
emptyLabel?: string;
|
||||
fetchSelects?: Filter['fetchSelects'];
|
||||
|
@ -49,18 +37,6 @@ interface SelectFilterProps extends BaseFilter {
|
|||
theme: SupersetThemeProps['theme'];
|
||||
}
|
||||
|
||||
const FilterContainer = styled.div`
|
||||
display: inline-flex;
|
||||
margin-right: 2em;
|
||||
font-size: ${({ theme }) => theme.typography.sizes.s}px;
|
||||
`;
|
||||
|
||||
const FilterTitle = styled.label`
|
||||
font-weight: bold;
|
||||
line-height: 27px;
|
||||
margin: 0 0.4em 0 0;
|
||||
`;
|
||||
|
||||
const CLEAR_SELECT_FILTER_VALUE = 'CLEAR_SELECT_FILTER_VALUE';
|
||||
|
||||
function SelectFilter({
|
||||
|
@ -174,108 +150,4 @@ function SelectFilter({
|
|||
</FilterContainer>
|
||||
);
|
||||
}
|
||||
const StyledSelectFilter = withTheme(SelectFilter);
|
||||
|
||||
interface SearchHeaderProps extends BaseFilter {
|
||||
Header: string;
|
||||
onSubmit: (val: string) => void;
|
||||
name: string;
|
||||
}
|
||||
|
||||
function SearchFilter({
|
||||
Header,
|
||||
name,
|
||||
initialValue,
|
||||
onSubmit,
|
||||
}: SearchHeaderProps) {
|
||||
const [value, setValue] = useState(initialValue || '');
|
||||
const handleSubmit = () => onSubmit(value);
|
||||
const onClear = () => {
|
||||
setValue('');
|
||||
onSubmit('');
|
||||
};
|
||||
|
||||
return (
|
||||
<FilterContainer>
|
||||
<SearchInput
|
||||
data-test="filters-search"
|
||||
placeholder={Header}
|
||||
name={name}
|
||||
value={value}
|
||||
onChange={e => {
|
||||
setValue(e.currentTarget.value);
|
||||
}}
|
||||
onSubmit={handleSubmit}
|
||||
onClear={onClear}
|
||||
/>
|
||||
</FilterContainer>
|
||||
);
|
||||
}
|
||||
|
||||
interface UIFiltersProps {
|
||||
filters: Filters;
|
||||
internalFilters: InternalFilter[];
|
||||
updateFilterValue: (id: number, value: FilterValue['value']) => void;
|
||||
}
|
||||
|
||||
const FilterWrapper = styled.div`
|
||||
display: inline-block;
|
||||
padding: 0 0 ${({ theme }) => theme.gridUnit * 8}px;
|
||||
`;
|
||||
|
||||
function UIFilters({
|
||||
filters,
|
||||
internalFilters = [],
|
||||
updateFilterValue,
|
||||
}: UIFiltersProps) {
|
||||
return (
|
||||
<FilterWrapper>
|
||||
{filters.map(
|
||||
(
|
||||
{
|
||||
Header,
|
||||
fetchSelects,
|
||||
id,
|
||||
input,
|
||||
paginate,
|
||||
selects,
|
||||
unfilteredLabel,
|
||||
},
|
||||
index,
|
||||
) => {
|
||||
const initialValue =
|
||||
internalFilters[index] && internalFilters[index].value;
|
||||
if (input === 'select') {
|
||||
return (
|
||||
<StyledSelectFilter
|
||||
Header={Header}
|
||||
emptyLabel={unfilteredLabel}
|
||||
fetchSelects={fetchSelects}
|
||||
initialValue={initialValue}
|
||||
key={id}
|
||||
name={id}
|
||||
onSelect={(value: any) => updateFilterValue(index, value)}
|
||||
paginate={paginate}
|
||||
selects={selects}
|
||||
/>
|
||||
);
|
||||
}
|
||||
if (input === 'search' && typeof Header === 'string') {
|
||||
return (
|
||||
<SearchFilter
|
||||
Header={Header}
|
||||
initialValue={initialValue}
|
||||
key={id}
|
||||
name={id}
|
||||
onSubmit={(value: string) => updateFilterValue(index, value)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
},
|
||||
)}
|
||||
</FilterWrapper>
|
||||
);
|
||||
}
|
||||
|
||||
export default withTheme(UIFilters);
|
||||
export default withTheme(SelectFilter);
|
|
@ -0,0 +1,108 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import React from 'react';
|
||||
import { styled, withTheme } from '@superset-ui/core';
|
||||
|
||||
import {
|
||||
FilterValue,
|
||||
Filters,
|
||||
InternalFilter,
|
||||
} from 'src/components/ListView/types';
|
||||
import SearchFilter from './Search';
|
||||
import SelectFilter from './Select';
|
||||
import DateRangeFilter from './DateRange';
|
||||
|
||||
interface UIFiltersProps {
|
||||
filters: Filters;
|
||||
internalFilters: InternalFilter[];
|
||||
updateFilterValue: (id: number, value: FilterValue['value']) => void;
|
||||
}
|
||||
|
||||
const FilterWrapper = styled.div`
|
||||
display: inline-block;
|
||||
padding: 0 0 ${({ theme }) => theme.gridUnit * 8}px;
|
||||
`;
|
||||
|
||||
function UIFilters({
|
||||
filters,
|
||||
internalFilters = [],
|
||||
updateFilterValue,
|
||||
}: UIFiltersProps) {
|
||||
return (
|
||||
<FilterWrapper>
|
||||
{filters.map(
|
||||
(
|
||||
{
|
||||
Header,
|
||||
fetchSelects,
|
||||
id,
|
||||
input,
|
||||
paginate,
|
||||
selects,
|
||||
unfilteredLabel,
|
||||
},
|
||||
index,
|
||||
) => {
|
||||
const initialValue =
|
||||
internalFilters[index] && internalFilters[index].value;
|
||||
if (input === 'select') {
|
||||
return (
|
||||
<SelectFilter
|
||||
Header={Header}
|
||||
emptyLabel={unfilteredLabel}
|
||||
fetchSelects={fetchSelects}
|
||||
initialValue={initialValue}
|
||||
key={id}
|
||||
name={id}
|
||||
onSelect={(value: any) => updateFilterValue(index, value)}
|
||||
paginate={paginate}
|
||||
selects={selects}
|
||||
/>
|
||||
);
|
||||
}
|
||||
if (input === 'search' && typeof Header === 'string') {
|
||||
return (
|
||||
<SearchFilter
|
||||
Header={Header}
|
||||
initialValue={initialValue}
|
||||
key={id}
|
||||
name={id}
|
||||
onSubmit={(value: string) => updateFilterValue(index, value)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
if (input === 'datetime_range') {
|
||||
return (
|
||||
<DateRangeFilter
|
||||
Header={Header}
|
||||
initialValue={initialValue}
|
||||
key={id}
|
||||
name={id}
|
||||
onSubmit={value => updateFilterValue(index, value)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
},
|
||||
)}
|
||||
</FilterWrapper>
|
||||
);
|
||||
}
|
||||
|
||||
export default withTheme(UIFilters);
|
|
@ -37,27 +37,37 @@ export interface CardSortSelectOption {
|
|||
value: any;
|
||||
}
|
||||
|
||||
type FilterOperator =
|
||||
| 'sw'
|
||||
| 'ew'
|
||||
| 'ct'
|
||||
| 'eq'
|
||||
| 'nsw'
|
||||
| 'new'
|
||||
| 'nct'
|
||||
| 'neq'
|
||||
| 'gt'
|
||||
| 'lt'
|
||||
| 'rel_m_m'
|
||||
| 'rel_o_m'
|
||||
| 'title_or_slug'
|
||||
| 'name_or_description'
|
||||
| 'all_text'
|
||||
| 'chart_all_text'
|
||||
| 'dataset_is_null_or_empty'
|
||||
| 'between';
|
||||
|
||||
export interface Filter {
|
||||
Header: ReactNode;
|
||||
id: string;
|
||||
operators?: SelectOption[];
|
||||
operator?:
|
||||
| 'sw'
|
||||
| 'ew'
|
||||
| 'ct'
|
||||
| 'eq'
|
||||
| 'nsw'
|
||||
| 'new'
|
||||
| 'nct'
|
||||
| 'neq'
|
||||
| 'rel_m_m'
|
||||
| 'rel_o_m'
|
||||
| 'title_or_slug'
|
||||
| 'name_or_description'
|
||||
| 'all_text'
|
||||
| 'chart_all_text'
|
||||
| 'dataset_is_null_or_empty';
|
||||
input?: 'text' | 'textarea' | 'select' | 'checkbox' | 'search';
|
||||
operator?: FilterOperator;
|
||||
input?:
|
||||
| 'text'
|
||||
| 'textarea'
|
||||
| 'select'
|
||||
| 'checkbox'
|
||||
| 'search'
|
||||
| 'datetime_range';
|
||||
unfilteredLabel?: string;
|
||||
selects?: SelectOption[];
|
||||
onFilterOpen?: () => void;
|
||||
|
@ -76,7 +86,7 @@ export type ViewModeType = 'card' | 'table';
|
|||
export interface FilterValue {
|
||||
id: string;
|
||||
operator?: string;
|
||||
value: string | boolean | number | null | undefined;
|
||||
value: string | boolean | number | null | undefined | string[] | number[];
|
||||
}
|
||||
|
||||
export interface FetchDataConfig {
|
||||
|
@ -89,3 +99,24 @@ export interface FetchDataConfig {
|
|||
export interface InternalFilter extends FilterValue {
|
||||
Header?: string;
|
||||
}
|
||||
|
||||
export enum FilterOperators {
|
||||
startsWith = 'sw',
|
||||
endsWith = 'ew',
|
||||
contains = 'ct',
|
||||
equals = 'eq',
|
||||
notStartsWith = 'nsw',
|
||||
notEndsWith = 'new',
|
||||
notContains = 'nct',
|
||||
notEquals = 'neq',
|
||||
greaterThan = 'gt',
|
||||
lessThan = 'lt',
|
||||
relationManyMany = 'rel_m_m',
|
||||
relationOneMany = 'rel_o_m',
|
||||
titleOrSlug = 'title_or_slug',
|
||||
nameOrDescription = 'name_or_description',
|
||||
allText = 'all_text',
|
||||
chartAllText = 'chart_all_text',
|
||||
datasetIsNullOrEmpty = 'dataset_is_null_or_empty',
|
||||
between = 'between',
|
||||
}
|
||||
|
|
|
@ -26,7 +26,12 @@ import {
|
|||
useTable,
|
||||
} from 'react-table';
|
||||
|
||||
import { NumberParam, StringParam, useQueryParams } from 'use-query-params';
|
||||
import {
|
||||
NumberParam,
|
||||
StringParam,
|
||||
useQueryParams,
|
||||
QueryParamConfig,
|
||||
} from 'use-query-params';
|
||||
|
||||
import rison from 'rison';
|
||||
import { isEqual } from 'lodash';
|
||||
|
@ -41,11 +46,13 @@ import {
|
|||
} from './types';
|
||||
|
||||
// Define custom RisonParam for proper encoding/decoding
|
||||
const RisonParam = {
|
||||
encode: (data: any | null | undefined) =>
|
||||
const RisonParam: QueryParamConfig<string, any> = {
|
||||
encode: (data?: any | null) =>
|
||||
data === undefined ? undefined : rison.encode(data),
|
||||
decode: (dataStr: string | undefined) =>
|
||||
dataStr === undefined ? undefined : rison.decode(dataStr),
|
||||
decode: (dataStr?: string | string[]) =>
|
||||
dataStr === undefined || Array.isArray(dataStr)
|
||||
? undefined
|
||||
: rison.decode(dataStr),
|
||||
};
|
||||
|
||||
export class ListViewError extends Error {
|
||||
|
@ -68,7 +75,11 @@ function updateInList(list: any[], index: number, update: any): any[] {
|
|||
];
|
||||
}
|
||||
|
||||
function mergeCreateFilterValues(list: Filter[], updateObj: any) {
|
||||
type QueryFilterState = {
|
||||
[id: string]: FilterValue['value'];
|
||||
};
|
||||
|
||||
function mergeCreateFilterValues(list: Filter[], updateObj: QueryFilterState) {
|
||||
return list.map(({ id, operator }) => {
|
||||
const update = updateObj[id];
|
||||
|
||||
|
@ -79,8 +90,36 @@ function mergeCreateFilterValues(list: Filter[], updateObj: any) {
|
|||
// convert filters from UI objects to data objects
|
||||
export function convertFilters(fts: InternalFilter[]): FilterValue[] {
|
||||
return fts
|
||||
.filter(f => typeof f.value !== 'undefined')
|
||||
.map(({ value, operator, id }) => ({ value, operator, id }));
|
||||
.filter(
|
||||
f =>
|
||||
!(
|
||||
typeof f.value === 'undefined' ||
|
||||
(Array.isArray(f.value) && !f.value.length)
|
||||
),
|
||||
)
|
||||
.map(({ value, operator, id }) => {
|
||||
// handle between filter using 2 api filters
|
||||
if (operator === 'between' && Array.isArray(value)) {
|
||||
return [
|
||||
{
|
||||
value: value[0],
|
||||
operator: 'gt',
|
||||
id,
|
||||
},
|
||||
{
|
||||
value: value[1],
|
||||
operator: 'lt',
|
||||
id,
|
||||
},
|
||||
];
|
||||
}
|
||||
return {
|
||||
value,
|
||||
operator,
|
||||
id,
|
||||
};
|
||||
})
|
||||
.flat();
|
||||
}
|
||||
|
||||
// convertFilters but to handle new decoded rison format
|
||||
|
@ -125,13 +164,6 @@ export function extractInputValue(inputType: Filter['input'], event: any) {
|
|||
return null;
|
||||
}
|
||||
|
||||
export function getDefaultFilterOperator(filter: Filter): string {
|
||||
if (filter?.operator) return filter.operator;
|
||||
if (filter?.operators?.length) {
|
||||
return filter.operators[0].value;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
interface UseListViewConfig {
|
||||
fetchData: (conf: FetchDataConfig) => any;
|
||||
columns: any[];
|
||||
|
|
|
@ -291,7 +291,6 @@ const AnnotationModal: FunctionComponent<AnnotationModalProps> = ({
|
|||
onChange={onDateChange}
|
||||
showTime={{ format: 'hh:mm a' }}
|
||||
use12Hours
|
||||
// @ts-ignore
|
||||
value={
|
||||
currentAnnotation &&
|
||||
(currentAnnotation?.start_dttm.length ||
|
||||
|
|
|
@ -29,6 +29,7 @@ import QueryList from 'src/views/CRUD/data/query/QueryList';
|
|||
import QueryPreviewModal from 'src/views/CRUD/data/query/QueryPreviewModal';
|
||||
import { QueryObject } from 'src/views/CRUD/types';
|
||||
import ListView from 'src/components/ListView';
|
||||
import Filters from 'src/components/ListView/Filters';
|
||||
import SyntaxHighlighter from 'react-syntax-highlighter/dist/cjs/light';
|
||||
|
||||
// store needed for withToasts
|
||||
|
@ -71,6 +72,19 @@ fetchMock.get(queriesEndpoint, {
|
|||
chart_count: 3,
|
||||
});
|
||||
|
||||
fetchMock.get('glob:*/api/v1/query/related/user*', {
|
||||
result: [],
|
||||
count: 0,
|
||||
});
|
||||
fetchMock.get('glob:*/api/v1/query/related/database*', {
|
||||
result: [],
|
||||
count: 0,
|
||||
});
|
||||
fetchMock.get('glob:*/api/v1/query/disting/status*', {
|
||||
result: [],
|
||||
count: 0,
|
||||
});
|
||||
|
||||
describe('QueryList', () => {
|
||||
const mockedProps = {};
|
||||
const wrapper = mount(<QueryList {...mockedProps} />, {
|
||||
|
@ -94,7 +108,7 @@ describe('QueryList', () => {
|
|||
const callsD = fetchMock.calls(/query\/\?q/);
|
||||
expect(callsD).toHaveLength(1);
|
||||
expect(callsD[0][0]).toMatchInlineSnapshot(
|
||||
`"http://localhost/api/v1/query/?q=(order_column:changed_on,order_direction:desc,page:0,page_size:25)"`,
|
||||
`"http://localhost/api/v1/query/?q=(order_column:start_time,order_direction:desc,page:0,page_size:25)"`,
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -114,4 +128,17 @@ describe('QueryList', () => {
|
|||
|
||||
expect(wrapper.find(QueryPreviewModal)).toExist();
|
||||
});
|
||||
|
||||
it('searches', async () => {
|
||||
const filtersWrapper = wrapper.find(Filters);
|
||||
act(() => {
|
||||
const props = filtersWrapper.find('[name="sql"]').first().props();
|
||||
// @ts-ignore
|
||||
if (props.onSubmit) props.onSubmit('fooo');
|
||||
});
|
||||
await waitForComponentToPaint(wrapper);
|
||||
expect((fetchMock.lastCall() ?? [])[0]).toMatchInlineSnapshot(
|
||||
`"http://localhost/api/v1/query/?q=(filters:!((col:sql,opr:ct,value:fooo)),order_column:start_time,order_direction:desc,page:0,page_size:25)"`,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -19,21 +19,29 @@
|
|||
import React, { useMemo, useState, useCallback } from 'react';
|
||||
import { SupersetClient, t, styled } from '@superset-ui/core';
|
||||
import moment from 'moment';
|
||||
|
||||
import { createErrorHandler, shortenSQL } from 'src/views/CRUD/utils';
|
||||
import {
|
||||
createFetchRelated,
|
||||
createFetchDistinct,
|
||||
createErrorHandler,
|
||||
shortenSQL,
|
||||
} from 'src/views/CRUD/utils';
|
||||
import withToasts from 'src/messageToasts/enhancers/withToasts';
|
||||
import { useListViewResource } from 'src/views/CRUD/hooks';
|
||||
import SubMenu, { SubMenuProps } from 'src/components/Menu/SubMenu';
|
||||
import { Popover } from 'src/common/components';
|
||||
import { commonMenuData } from 'src/views/CRUD/data/common';
|
||||
import ListView, { Filters, ListViewProps } from 'src/components/ListView';
|
||||
import ListView, {
|
||||
Filters,
|
||||
FilterOperators,
|
||||
ListViewProps,
|
||||
} from 'src/components/ListView';
|
||||
import Icon, { IconName } from 'src/components/Icon';
|
||||
import { Tooltip } from 'src/common/components/Tooltip';
|
||||
import SyntaxHighlighter from 'react-syntax-highlighter/dist/cjs/light';
|
||||
import sql from 'react-syntax-highlighter/dist/cjs/languages/hljs/sql';
|
||||
import github from 'react-syntax-highlighter/dist/cjs/styles/hljs/github';
|
||||
import { DATETIME_WITH_TIME_ZONE, TIME_WITH_MS } from 'src/constants';
|
||||
import { QueryObject } from 'src/views/CRUD/types';
|
||||
import { QueryObject, QueryObjectColumns } from 'src/views/CRUD/types';
|
||||
|
||||
import QueryPreviewModal from './QueryPreviewModal';
|
||||
|
||||
|
@ -49,7 +57,7 @@ const TopAlignedListView = styled(ListView)<ListViewProps<QueryObject>>`
|
|||
SyntaxHighlighter.registerLanguage('sql', sql);
|
||||
const StyledSyntaxHighlighter = styled(SyntaxHighlighter)`
|
||||
height: ${({ theme }) => theme.gridUnit * 26}px;
|
||||
overflow-x: hidden !important; /* needed to override inline styles */
|
||||
overflow: hidden !important; /* needed to override inline styles */
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
`;
|
||||
|
@ -121,7 +129,7 @@ function QueryList({ addDangerToast, addSuccessToast }: QueryListProps) {
|
|||
...commonMenuData,
|
||||
};
|
||||
|
||||
const initialSort = [{ id: 'changed_on', desc: true }];
|
||||
const initialSort = [{ id: QueryObjectColumns.start_time, desc: true }];
|
||||
const columns = useMemo(
|
||||
() => [
|
||||
{
|
||||
|
@ -171,12 +179,12 @@ function QueryList({ addDangerToast, addSuccessToast }: QueryListProps) {
|
|||
</Tooltip>
|
||||
);
|
||||
},
|
||||
accessor: 'status',
|
||||
accessor: QueryObjectColumns.status,
|
||||
size: 'xs',
|
||||
disableSortBy: true,
|
||||
},
|
||||
{
|
||||
accessor: 'start_time',
|
||||
accessor: QueryObjectColumns.start_time,
|
||||
Header: t('Time'),
|
||||
size: 'lg',
|
||||
Cell: ({
|
||||
|
@ -212,17 +220,21 @@ function QueryList({ addDangerToast, addSuccessToast }: QueryListProps) {
|
|||
},
|
||||
},
|
||||
{
|
||||
accessor: 'tab_name',
|
||||
accessor: QueryObjectColumns.tab_name,
|
||||
Header: t('Tab Name'),
|
||||
size: 'lg',
|
||||
},
|
||||
{
|
||||
accessor: 'database.database_name',
|
||||
accessor: QueryObjectColumns.database_name,
|
||||
Header: t('Database'),
|
||||
size: 'lg',
|
||||
},
|
||||
{
|
||||
accessor: 'schema',
|
||||
accessor: QueryObjectColumns.database,
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
accessor: QueryObjectColumns.schema,
|
||||
Header: t('Schema'),
|
||||
size: 'lg',
|
||||
},
|
||||
|
@ -259,13 +271,13 @@ function QueryList({ addDangerToast, addSuccessToast }: QueryListProps) {
|
|||
|
||||
return main;
|
||||
},
|
||||
accessor: 'sql_tables',
|
||||
accessor: QueryObjectColumns.sql_tables,
|
||||
Header: t('Tables'),
|
||||
size: 'lg',
|
||||
disableSortBy: true,
|
||||
},
|
||||
{
|
||||
accessor: 'user.first_name',
|
||||
accessor: QueryObjectColumns.user,
|
||||
Header: t('User'),
|
||||
size: 'lg',
|
||||
Cell: ({
|
||||
|
@ -275,12 +287,12 @@ function QueryList({ addDangerToast, addSuccessToast }: QueryListProps) {
|
|||
}: any) => `${user.first_name} ${user.last_name}`,
|
||||
},
|
||||
{
|
||||
accessor: 'rows',
|
||||
accessor: QueryObjectColumns.rows,
|
||||
Header: t('Rows'),
|
||||
size: 'md',
|
||||
},
|
||||
{
|
||||
accessor: 'sql',
|
||||
accessor: QueryObjectColumns.sql,
|
||||
Header: t('SQL'),
|
||||
Cell: ({ row: { original, id } }: any) => {
|
||||
return (
|
||||
|
@ -319,7 +331,74 @@ function QueryList({ addDangerToast, addSuccessToast }: QueryListProps) {
|
|||
[],
|
||||
);
|
||||
|
||||
const filters: Filters = useMemo(() => [], []);
|
||||
const filters: Filters = useMemo(
|
||||
() => [
|
||||
{
|
||||
Header: t('Database'),
|
||||
id: 'database',
|
||||
input: 'select',
|
||||
operator: FilterOperators.relationOneMany,
|
||||
unfilteredLabel: 'All',
|
||||
fetchSelects: createFetchRelated(
|
||||
'query',
|
||||
'database',
|
||||
createErrorHandler(errMsg =>
|
||||
addDangerToast(
|
||||
t('An error occurred while fetching database values: %s', errMsg),
|
||||
),
|
||||
),
|
||||
),
|
||||
paginate: true,
|
||||
},
|
||||
{
|
||||
Header: t('State'),
|
||||
id: 'status',
|
||||
input: 'select',
|
||||
operator: FilterOperators.equals,
|
||||
unfilteredLabel: 'All',
|
||||
fetchSelects: createFetchDistinct(
|
||||
'query',
|
||||
'status',
|
||||
createErrorHandler(errMsg =>
|
||||
addDangerToast(
|
||||
t('An error occurred while fetching schema values: %s', errMsg),
|
||||
),
|
||||
),
|
||||
),
|
||||
paginate: true,
|
||||
},
|
||||
{
|
||||
Header: t('User'),
|
||||
id: 'user',
|
||||
input: 'select',
|
||||
operator: FilterOperators.relationOneMany,
|
||||
unfilteredLabel: 'All',
|
||||
fetchSelects: createFetchRelated(
|
||||
'query',
|
||||
'user',
|
||||
createErrorHandler(errMsg =>
|
||||
addDangerToast(
|
||||
t('An error occurred while fetching database values: %s', errMsg),
|
||||
),
|
||||
),
|
||||
),
|
||||
paginate: true,
|
||||
},
|
||||
{
|
||||
Header: t('Time Range'),
|
||||
id: 'start_time',
|
||||
input: 'datetime_range',
|
||||
operator: FilterOperators.between,
|
||||
},
|
||||
{
|
||||
Header: t('Search by query text'),
|
||||
id: 'sql',
|
||||
input: 'search',
|
||||
operator: FilterOperators.contains,
|
||||
},
|
||||
],
|
||||
[addDangerToast],
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
|
@ -91,3 +91,22 @@ export interface QueryObject {
|
|||
tmp_table_name: string;
|
||||
tracking_url: string;
|
||||
}
|
||||
|
||||
export enum QueryObjectColumns {
|
||||
id = 'id',
|
||||
changed_on = 'changed_on',
|
||||
database = 'database',
|
||||
database_name = 'database.database_name',
|
||||
schema = 'schema',
|
||||
sql = 'sql',
|
||||
executed_sql = 'exceuted_sql',
|
||||
sql_tables = 'sql_tables',
|
||||
status = 'status',
|
||||
tab_name = 'tab_name',
|
||||
user = 'user',
|
||||
start_time = 'start_time',
|
||||
end_time = 'end_time',
|
||||
rows = 'rows',
|
||||
tmp_table_name = 'tmp_table_name',
|
||||
tracking_url = 'tracking_url',
|
||||
}
|
||||
|
|
|
@ -34,7 +34,12 @@ class QueryRestApi(BaseSupersetModelRestApi):
|
|||
|
||||
resource_name = "query"
|
||||
allow_browser_login = True
|
||||
include_route_methods = {RouteMethod.GET, RouteMethod.GET_LIST, RouteMethod.RELATED}
|
||||
include_route_methods = {
|
||||
RouteMethod.GET,
|
||||
RouteMethod.GET_LIST,
|
||||
RouteMethod.RELATED,
|
||||
RouteMethod.DISTINCT,
|
||||
}
|
||||
|
||||
class_permission_name = "QueryView"
|
||||
list_columns = [
|
||||
|
@ -105,7 +110,8 @@ class QueryRestApi(BaseSupersetModelRestApi):
|
|||
"created_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
|
||||
}
|
||||
|
||||
search_columns = ["changed_on", "database", "sql", "status", "user"]
|
||||
search_columns = ["changed_on", "database", "sql", "status", "user", "start_time"]
|
||||
|
||||
filter_rel_fields = {"database": [["id", DatabaseFilter, lambda: []]]}
|
||||
allowed_rel_fields = {"database", "user"}
|
||||
allowed_distinct_fields = {"status"}
|
||||
|
|
Loading…
Reference in New Issue