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:
committed by
Facebook GitHub Bot
parent
d4debc4185
commit
957ae9d7ca
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user