diff --git a/packages/web/src/datagrid/ColumnManager.js b/packages/web/src/datagrid/ColumnManager.js index 3dfc93b09..b308d87b7 100644 --- a/packages/web/src/datagrid/ColumnManager.js +++ b/packages/web/src/datagrid/ColumnManager.js @@ -5,6 +5,7 @@ import { filterName } from '@dbgate/datalib'; import { ExpandIcon } from '../icons'; import InlineButton from '../widgets/InlineButton'; import { ManagerInnerContainer } from './ManagerStyles'; +import SearchInput from '../widgets/SearchInput'; const Wrapper = styled.div``; @@ -29,10 +30,10 @@ const Button = styled.button` // width: 50px; `; -const Input = styled.input` - flex: 1; - min-width: 90px; -`; +// const Input = styled.input` +// flex: 1; +// min-width: 90px; +// `; // function ExpandIcon({ display, column, isHover, ...other }) { // if (column.foreignKey) { @@ -89,12 +90,7 @@ export default function ColumnManager(props) { return ( <> - setColumnFilter(e.target.value)} - /> + display.hideAllColumns()}>Hide display.showAllColumns()}>Show diff --git a/packages/web/src/datagrid/ReferenceManager.js b/packages/web/src/datagrid/ReferenceManager.js index 06e3ebd48..aaad8195a 100644 --- a/packages/web/src/datagrid/ReferenceManager.js +++ b/packages/web/src/datagrid/ReferenceManager.js @@ -2,17 +2,14 @@ import React from 'react'; import styled from 'styled-components'; import { ManagerInnerContainer } from './ManagerStyles'; import { LinkIcon, ReferenceIcon } from '../icons'; +import SearchInput from '../widgets/SearchInput'; +import { filterName } from '@dbgate/datalib'; const SearchBoxWrapper = styled.div` display: flex; margin-bottom: 5px; `; -const Input = styled.input` - flex: 1; - min-width: 90px; -`; - const Header = styled.div` font-weight: bold; `; @@ -53,53 +50,57 @@ export default function ReferenceManager(props) { return ( <> - setFilter(e.target.value)} /> + {foreignKeys && foreignKeys.length > 0 && ( <>
References tables ({foreignKeys.length})
- {foreignKeys.map((fk) => ( - - props.onReferenceClick({ - schemaName: fk.refSchemaName, - pureName: fk.refTableName, - columns: fk.columns.map((col) => ({ - baseName: col.columnName, - refName: col.refColumnName, - })), - }) - } - /> - ))} + {foreignKeys + .filter((fk) => filterName(filter, fk.refTableName)) + .map((fk) => ( + + props.onReferenceClick({ + schemaName: fk.refSchemaName, + pureName: fk.refTableName, + columns: fk.columns.map((col) => ({ + baseName: col.columnName, + refName: col.refColumnName, + })), + }) + } + /> + ))} )} {dependencies && dependencies.length > 0 && ( <>
Dependend tables ({dependencies.length})
- {dependencies.map((fk) => ( - - props.onReferenceClick({ - schemaName: fk.schemaName, - pureName: fk.pureName, - columns: fk.columns.map((col) => ({ - baseName: col.refColumnName, - refName: col.columnName, - })), - }) - } - /> - ))} + {dependencies + .filter((fk) => filterName(filter, fk.pureName)) + .map((fk) => ( + + props.onReferenceClick({ + schemaName: fk.schemaName, + pureName: fk.pureName, + columns: fk.columns.map((col) => ({ + baseName: col.refColumnName, + refName: col.columnName, + })), + }) + } + /> + ))} )}
diff --git a/packages/web/src/widgets/DatabaseWidget.js b/packages/web/src/widgets/DatabaseWidget.js index 53b95287f..5518ee07f 100644 --- a/packages/web/src/widgets/DatabaseWidget.js +++ b/packages/web/src/widgets/DatabaseWidget.js @@ -17,13 +17,13 @@ import { import { SearchBoxWrapper, WidgetsInnerContainer, - Input, WidgetsMainContainer, WidgetsOuterContainer, WidgetTitle, } from './WidgetStyles'; import axios from '../utility/axios'; import LoadingInfo from './LoadingInfo'; +import SearchInput from './SearchInput'; function SubDatabaseList({ data }) { const setDb = useSetCurrentDatabase(); @@ -64,7 +64,7 @@ function ConnectionList() { <> Connections - setFilter(e.target.value)} /> + Refresh @@ -98,12 +98,7 @@ function SqlObjectList({ conid, database }) { <> Tables, views, functions - setFilter(e.target.value)} - /> + Refresh diff --git a/packages/web/src/widgets/FilesWidget.js b/packages/web/src/widgets/FilesWidget.js index 2cfedc5b3..32ee28f21 100644 --- a/packages/web/src/widgets/FilesWidget.js +++ b/packages/web/src/widgets/FilesWidget.js @@ -8,7 +8,6 @@ import openedTabAppObject from '../appobj/openedTabAppObject'; import { SearchBoxWrapper, WidgetsInnerContainer, - Input, WidgetsMainContainer, WidgetsOuterContainer, WidgetTitle, diff --git a/packages/web/src/widgets/SearchInput.js b/packages/web/src/widgets/SearchInput.js new file mode 100644 index 000000000..89c18a12a --- /dev/null +++ b/packages/web/src/widgets/SearchInput.js @@ -0,0 +1,26 @@ +import React from 'react'; +import styled from 'styled-components'; +import keycodes from '../utility/keycodes'; + +const StyledInput = styled.input` + flex: 1; + min-width: 90px; +`; + +export default function SearchInput({ placeholder, filter, setFilter }) { + const handleKeyDown = (ev) => { + if (ev.keyCode == keycodes.escape) { + setFilter(''); + } + }; + return ( + setFilter(e.target.value)} + onFocus={(e) => e.target.select()} + onKeyDown={handleKeyDown} + /> + ); +} diff --git a/packages/web/src/widgets/WidgetStyles.js b/packages/web/src/widgets/WidgetStyles.js index 5ea454d36..ad8d9717b 100644 --- a/packages/web/src/widgets/WidgetStyles.js +++ b/packages/web/src/widgets/WidgetStyles.js @@ -43,10 +43,10 @@ export function WidgetsInnerContainer({ children }) { return {children}; } -export const Input = styled.input` - flex: 1; - min-width: 90px; -`; +// export const Input = styled.input` +// flex: 1; +// min-width: 90px; +// `; export const WidgetTitle = styled.div` padding: 5px;