small Searchable table refactoring

Summary: export filterRowsFact so we can reuse it. it's needed in diffs above

Reviewed By: SimoneCasagranda

Differential Revision: D24445819

fbshipit-source-id: 1c9ca363419c7e34f53e65b77764a49235e259e2
This commit is contained in:
Timur Valiev
2020-10-22 13:13:35 -07:00
committed by Facebook GitHub Bot
parent d4debc4185
commit 957ae9d7ca
4 changed files with 15 additions and 67 deletions

View File

@@ -166,7 +166,10 @@ export {
SearchableProps,
default as Searchable,
} from './ui/components/searchable/Searchable';
export {default as SearchableTable} from './ui/components/searchable/SearchableTable';
export {
default as SearchableTable,
filterRowsFactory,
} from './ui/components/searchable/SearchableTable';
export {default as SearchableTable_immutable} from './ui/components/searchable/SearchableTable_immutable';
export {
ElementID,

View File

@@ -27,7 +27,7 @@ type State = {
filterRows: (row: TableBodyRow) => boolean;
};
const rowMatchesFilters = (filters: Array<Filter>, row: TableBodyRow) =>
export const rowMatchesFilters = (filters: Array<Filter>, row: TableBodyRow) =>
filters
.map((filter: Filter) => {
if (filter.type === 'enum' && row.type != null) {
@@ -56,7 +56,7 @@ const rowMatchesFilters = (filters: Array<Filter>, row: TableBodyRow) =>
})
.every((x) => x === true);
function rowMatchesRegex(values: Array<string>, regex: string): boolean {
export function rowMatchesRegex(values: Array<string>, regex: string): boolean {
try {
const re = new RegExp(regex);
return values.some((x) => re.test(x));
@@ -65,7 +65,7 @@ function rowMatchesRegex(values: Array<string>, regex: string): boolean {
}
}
function rowMatchesSearchTerm(
export function rowMatchesSearchTerm(
searchTerm: string,
isRegex: boolean,
isContentSearchEnabled: boolean,
@@ -91,7 +91,7 @@ function rowMatchesSearchTerm(
);
}
const filterRowsFactory = (
export const filterRowsFactory = (
filters: Array<Filter>,
searchTerm: string,
regexSearch: boolean,

View File

@@ -13,9 +13,9 @@ import {TableBodyRow} from '../table/types';
import Searchable, {SearchableProps} from './Searchable';
import {PureComponent} from 'react';
import ManagedTable_immutable from '../table/ManagedTable_immutable';
import textContent from '../../../utils/textContent';
import deepEqual from 'deep-equal';
import React from 'react';
import {filterRowsFactory} from './SearchableTable';
type Props = {
/** Reference to the table */
@@ -29,66 +29,6 @@ type State = {
filterRows: (row: TableBodyRow) => boolean;
};
const rowMatchesFilters = (filters: Array<Filter>, row: TableBodyRow) =>
filters
.map((filter: Filter) => {
if (filter.type === 'enum' && row.type != null) {
return filter.value.length === 0 || filter.value.indexOf(row.type) > -1;
} else if (filter.type === 'include') {
return (
textContent(row.columns[filter.key].value).toLowerCase() ===
filter.value.toLowerCase()
);
} else if (filter.type === 'exclude') {
return (
textContent(row.columns[filter.key].value).toLowerCase() !==
filter.value.toLowerCase()
);
} else {
return true;
}
})
.every((x) => x === true);
function rowMatchesRegex(values: Array<string>, regex: string): boolean {
try {
const re = new RegExp(regex);
return values.some((x) => re.test(x));
} catch (e) {
return false;
}
}
function rowMatchesSearchTerm(
searchTerm: string,
isRegex: boolean,
row: TableBodyRow,
): boolean {
if (searchTerm == null || searchTerm.length === 0) {
return true;
}
const rowValues = Object.keys(row.columns).map((key) =>
textContent(row.columns[key].value),
);
if (row.filterValue != null) {
rowValues.push(row.filterValue);
}
if (isRegex) {
return rowMatchesRegex(rowValues, searchTerm);
}
return rowValues.some((x) =>
x.toLowerCase().includes(searchTerm.toLowerCase()),
);
}
const filterRowsFactory = (
filters: Array<Filter>,
searchTerm: string,
regexSearch: boolean,
) => (row: TableBodyRow): boolean =>
rowMatchesFilters(filters, row) &&
rowMatchesSearchTerm(searchTerm, regexSearch, row);
class SearchableManagedTable_immutable extends PureComponent<Props, State> {
static defaultProps = {
defaultFilters: [],
@@ -99,6 +39,7 @@ class SearchableManagedTable_immutable extends PureComponent<Props, State> {
this.props.filters,
this.props.searchTerm,
this.props.regexEnabled || false,
this.props.contentSearchEnabled || false,
),
};
@@ -117,6 +58,7 @@ class SearchableManagedTable_immutable extends PureComponent<Props, State> {
nextProps.filters,
nextProps.searchTerm,
nextProps.regexEnabled || false,
this.props.contentSearchEnabled || false,
),
});
}

View File

@@ -142,7 +142,10 @@ export {
SearchIcon,
default as Searchable,
} from './components/searchable/Searchable';
export {default as SearchableTable} from './components/searchable/SearchableTable';
export {
default as SearchableTable,
filterRowsFactory,
} from './components/searchable/SearchableTable';
export {default as SearchableTable_immutable} from './components/searchable/SearchableTable_immutable';
export {SearchableProps} from './components/searchable/Searchable';