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,
|
SearchableProps,
|
||||||
default as Searchable,
|
default as Searchable,
|
||||||
} from './ui/components/searchable/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 {default as SearchableTable_immutable} from './ui/components/searchable/SearchableTable_immutable';
|
||||||
export {
|
export {
|
||||||
ElementID,
|
ElementID,
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ type State = {
|
|||||||
filterRows: (row: TableBodyRow) => boolean;
|
filterRows: (row: TableBodyRow) => boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
const rowMatchesFilters = (filters: Array<Filter>, row: TableBodyRow) =>
|
export const rowMatchesFilters = (filters: Array<Filter>, row: TableBodyRow) =>
|
||||||
filters
|
filters
|
||||||
.map((filter: Filter) => {
|
.map((filter: Filter) => {
|
||||||
if (filter.type === 'enum' && row.type != null) {
|
if (filter.type === 'enum' && row.type != null) {
|
||||||
@@ -56,7 +56,7 @@ const rowMatchesFilters = (filters: Array<Filter>, row: TableBodyRow) =>
|
|||||||
})
|
})
|
||||||
.every((x) => x === true);
|
.every((x) => x === true);
|
||||||
|
|
||||||
function rowMatchesRegex(values: Array<string>, regex: string): boolean {
|
export function rowMatchesRegex(values: Array<string>, regex: string): boolean {
|
||||||
try {
|
try {
|
||||||
const re = new RegExp(regex);
|
const re = new RegExp(regex);
|
||||||
return values.some((x) => re.test(x));
|
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,
|
searchTerm: string,
|
||||||
isRegex: boolean,
|
isRegex: boolean,
|
||||||
isContentSearchEnabled: boolean,
|
isContentSearchEnabled: boolean,
|
||||||
@@ -91,7 +91,7 @@ function rowMatchesSearchTerm(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const filterRowsFactory = (
|
export const filterRowsFactory = (
|
||||||
filters: Array<Filter>,
|
filters: Array<Filter>,
|
||||||
searchTerm: string,
|
searchTerm: string,
|
||||||
regexSearch: boolean,
|
regexSearch: boolean,
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import {TableBodyRow} from '../table/types';
|
|||||||
import Searchable, {SearchableProps} from './Searchable';
|
import Searchable, {SearchableProps} from './Searchable';
|
||||||
import {PureComponent} from 'react';
|
import {PureComponent} from 'react';
|
||||||
import ManagedTable_immutable from '../table/ManagedTable_immutable';
|
import ManagedTable_immutable from '../table/ManagedTable_immutable';
|
||||||
import textContent from '../../../utils/textContent';
|
|
||||||
import deepEqual from 'deep-equal';
|
import deepEqual from 'deep-equal';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import {filterRowsFactory} from './SearchableTable';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
/** Reference to the table */
|
/** Reference to the table */
|
||||||
@@ -29,66 +29,6 @@ type State = {
|
|||||||
filterRows: (row: TableBodyRow) => boolean;
|
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> {
|
class SearchableManagedTable_immutable extends PureComponent<Props, State> {
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
defaultFilters: [],
|
defaultFilters: [],
|
||||||
@@ -99,6 +39,7 @@ class SearchableManagedTable_immutable extends PureComponent<Props, State> {
|
|||||||
this.props.filters,
|
this.props.filters,
|
||||||
this.props.searchTerm,
|
this.props.searchTerm,
|
||||||
this.props.regexEnabled || false,
|
this.props.regexEnabled || false,
|
||||||
|
this.props.contentSearchEnabled || false,
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -117,6 +58,7 @@ class SearchableManagedTable_immutable extends PureComponent<Props, State> {
|
|||||||
nextProps.filters,
|
nextProps.filters,
|
||||||
nextProps.searchTerm,
|
nextProps.searchTerm,
|
||||||
nextProps.regexEnabled || false,
|
nextProps.regexEnabled || false,
|
||||||
|
this.props.contentSearchEnabled || false,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,7 +142,10 @@ export {
|
|||||||
SearchIcon,
|
SearchIcon,
|
||||||
default as Searchable,
|
default as Searchable,
|
||||||
} from './components/searchable/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 {default as SearchableTable_immutable} from './components/searchable/SearchableTable_immutable';
|
||||||
export {SearchableProps} from './components/searchable/Searchable';
|
export {SearchableProps} from './components/searchable/Searchable';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user