seach improvement

This commit is contained in:
Jan Prochazka
2020-05-10 21:17:15 +02:00
parent c82f332c42
commit 125ba3b0c8
6 changed files with 82 additions and 65 deletions

View File

@@ -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 (
<>
<SearchBoxWrapper>
<Input
type="text"
placeholder="Search"
value={columnFilter}
onChange={(e) => setColumnFilter(e.target.value)}
/>
<SearchInput placeholder="Search" filter={columnFilter} setFilter={setColumnFilter} />
<InlineButton onClick={() => display.hideAllColumns()}>Hide</InlineButton>
<InlineButton onClick={() => display.showAllColumns()}>Show</InlineButton>
</SearchBoxWrapper>

View File

@@ -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 (
<>
<SearchBoxWrapper>
<Input type="text" placeholder="Search" value={filter} onChange={(e) => setFilter(e.target.value)} />
<SearchInput placeholder="Search" filter={filter} setFilter={setFilter} />
</SearchBoxWrapper>
<ManagerInnerContainer>
{foreignKeys && foreignKeys.length > 0 && (
<>
<Header>References tables ({foreignKeys.length})</Header>
{foreignKeys.map((fk) => (
<ManagerRow
key={fk.constraintName}
Icon={LinkIcon}
tableName={fk.refTableName}
columns={fk.columns}
onClick={() =>
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) => (
<ManagerRow
key={fk.constraintName}
Icon={LinkIcon}
tableName={fk.refTableName}
columns={fk.columns}
onClick={() =>
props.onReferenceClick({
schemaName: fk.refSchemaName,
pureName: fk.refTableName,
columns: fk.columns.map((col) => ({
baseName: col.columnName,
refName: col.refColumnName,
})),
})
}
/>
))}
</>
)}
{dependencies && dependencies.length > 0 && (
<>
<Header>Dependend tables ({dependencies.length})</Header>
{dependencies.map((fk) => (
<ManagerRow
key={fk.constraintName}
Icon={ReferenceIcon}
tableName={fk.pureName}
columns={fk.columns}
onClick={() =>
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) => (
<ManagerRow
key={fk.constraintName}
Icon={ReferenceIcon}
tableName={fk.pureName}
columns={fk.columns}
onClick={() =>
props.onReferenceClick({
schemaName: fk.schemaName,
pureName: fk.pureName,
columns: fk.columns.map((col) => ({
baseName: col.refColumnName,
refName: col.columnName,
})),
})
}
/>
))}
</>
)}
</ManagerInnerContainer>

View File

@@ -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() {
<>
<WidgetTitle>Connections</WidgetTitle>
<SearchBoxWrapper>
<Input type="text" placeholder="Search connection" value={filter} onChange={(e) => setFilter(e.target.value)} />
<SearchInput placeholder="Search connection" filter={filter} setFilter={setFilter} />
<InlineButton onClick={handleRefreshConnections}>Refresh</InlineButton>
</SearchBoxWrapper>
@@ -98,12 +98,7 @@ function SqlObjectList({ conid, database }) {
<>
<WidgetTitle>Tables, views, functions</WidgetTitle>
<SearchBoxWrapper>
<Input
type="text"
placeholder="Search tables or objects"
value={filter}
onChange={(e) => setFilter(e.target.value)}
/>
<SearchInput placeholder="Search tables or objects" filter={filter} setFilter={setFilter} />
<InlineButton onClick={handleRefreshDatabase}>Refresh</InlineButton>
</SearchBoxWrapper>
<WidgetsInnerContainer>

View File

@@ -8,7 +8,6 @@ import openedTabAppObject from '../appobj/openedTabAppObject';
import {
SearchBoxWrapper,
WidgetsInnerContainer,
Input,
WidgetsMainContainer,
WidgetsOuterContainer,
WidgetTitle,

View File

@@ -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 (
<StyledInput
type="text"
placeholder={placeholder}
value={filter}
onChange={(e) => setFilter(e.target.value)}
onFocus={(e) => e.target.select()}
onKeyDown={handleKeyDown}
/>
);
}

View File

@@ -43,10 +43,10 @@ export function WidgetsInnerContainer({ children }) {
return <StyledWidgetsInnerContainer leftPanelWidth={leftPanelWidth}>{children}</StyledWidgetsInnerContainer>;
}
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;