Merge branch 'master' into develop

This commit is contained in:
Jan Prochazka 2022-06-16 13:37:12 +02:00
commit ff4dd18c1b
4 changed files with 25 additions and 9 deletions

View File

@ -1,4 +1,9 @@
import _compact from 'lodash/compact';
import _isString from 'lodash/isString';
export interface FilterNameDefinition {
childName: string;
}
// original C# variant
// public bool Match(string value)
@ -54,17 +59,29 @@ function fuzzysearch(needle, haystack) {
return true;
}
export function filterName(filter: string, ...names: string[]) {
export function filterName(filter: string, ...names: (string | FilterNameDefinition)[]) {
if (!filter) return true;
// const camelVariants = [name.replace(/[^A-Z]/g, '')]
const tokens = filter.split(' ').map(x => x.trim());
const namesCompacted = _compact(names);
// @ts-ignore
const namesOwn: string[] = namesCompacted.filter(x => _isString(x));
// @ts-ignore
const namesChild: string[] = namesCompacted.filter(x => x.childName).map(x => x.childName);
for (const token of tokens) {
const tokenUpper = token.toUpperCase();
const found = namesCompacted.find(name => fuzzysearch(tokenUpper, name.toUpperCase()));
if (!found) return false;
if (tokenUpper.startsWith('#')) {
const tokenUpperSub = tokenUpper.substring(1);
const found = namesChild.find(name => fuzzysearch(tokenUpperSub, name.toUpperCase()));
if (!found) return false;
} else {
const found = namesOwn.find(name => fuzzysearch(tokenUpper, name.toUpperCase()));
if (!found) return false;
}
}
return true;

View File

@ -1,8 +1,8 @@
<script lang="ts" context="module">
export const extractKey = ({ schemaName, pureName }) => (schemaName ? `${schemaName}.${pureName}` : pureName);
export const createMatcher = ({ schemaName, pureName }) => filter => filterName(filter, pureName, schemaName);
export const createMatcher = ({ schemaName, pureName, columns }) => filter =>
filterName(filter, pureName, schemaName, ...(columns?.map(({ columnName }) => ({ childName: columnName })) || []));
export const createTitle = ({ pureName }) => pureName;
const electron = getElectron();
export const databaseObjectIcons = {
tables: 'img table',
@ -710,7 +710,6 @@
import uuidv1 from 'uuid/v1';
import SqlGeneratorModal from '../modals/SqlGeneratorModal.svelte';
import getConnectionLabel from '../utility/getConnectionLabel';
import getElectron from '../utility/getElectron';
import { exportQuickExportFile } from '../utility/exportFileTools';
import createQuickExportMenu from '../utility/createQuickExportMenu';
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';

View File

@ -34,12 +34,12 @@
</script>
<FormSelectField
label="Database engine"
label="Connection type"
name="engine"
isNative
disabled={isConnected}
options={[
{ label: '(select driver)', value: '' },
{ label: '(select connection type)', value: '' },
...$extensions.drivers
.filter(driver => !driver.isElectronOnly || electron)
.map(driver => ({

View File

@ -125,7 +125,7 @@
</WidgetsInnerContainer>
{:else}
<SearchBoxWrapper>
<SearchInput placeholder="Search tables or objects" bind:value={filter} />
<SearchInput placeholder="Search in tables, objects, # prefix in columns" bind:value={filter} />
<CloseSearchButton bind:filter />
<DropDownButton icon="icon plus-thick" menu={createAddMenu} />
<InlineButton on:click={handleRefreshDatabase} title="Refresh database connection and object list">