Skip to content
This repository was archived by the owner on Jun 4, 2024. It is now read-only.

Commit 8fa2125

Browse files
committed
Filter case gui
1 parent aa313da commit 8fa2125

File tree

5 files changed

+300
-224
lines changed

5 files changed

+300
-224
lines changed

src/dash-table/components/Filter/Column.tsx

+38-3
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
1+
import * as R from 'ramda';
12
import React, { CSSProperties, PureComponent } from 'react';
23

34
import IsolatedInput from 'core/components/IsolatedInput';
45

5-
import { ColumnId } from 'dash-table/components/Table/props';
6+
import { ColumnId, Case, SetProps, IColumn } from 'dash-table/components/Table/props';
67

78
type SetFilter = (ev: any) => void;
89

910
interface IColumnFilterProps {
1011
classes: string;
1112
columnId: ColumnId;
13+
columns: IColumn[];
1214
isValid: boolean;
1315
setFilter: SetFilter;
16+
setProps: SetProps;
1417
style?: CSSProperties;
1518
value?: string;
19+
globalFilterCase?: Case;
20+
columnFilterCaseSensitive?: boolean;
21+
columnFilterCaseInsensitive?: boolean;
1622
}
1723

1824
interface IState {
@@ -40,22 +46,51 @@ export default class ColumnFilter extends PureComponent<IColumnFilterProps, ISta
4046
const {
4147
classes,
4248
columnId,
49+
columns,
4350
isValid,
4451
style,
45-
value
52+
value,
53+
globalFilterCase,
54+
columnFilterCaseSensitive,
55+
columnFilterCaseInsensitive,
56+
setProps
4657
} = this.props;
4758

59+
const filterCaseClass: string =
60+
(globalFilterCase !== Case.Insensitive && !columnFilterCaseInsensitive) ?
61+
'dash-filter--case--sensitive' : 'dash-filter--case--insensitive';
62+
63+
function setColumnCase() {
64+
const cols: IColumn[] = R.clone(columns);
65+
const inx: number = R.findIndex(R.propEq('id', columnId))(cols);
66+
67+
cols[inx].filter_case_sensitive = !columnFilterCaseSensitive &&
68+
globalFilterCase === Case.Insensitive;
69+
cols[inx].filter_case_insensitive = !columnFilterCaseInsensitive &&
70+
(globalFilterCase === Case.Sensitive || globalFilterCase === Case.Default);
71+
72+
setProps({ columns: cols });
73+
}
74+
4875
return (<th
4976
className={classes + (isValid ? '' : ' invalid')}
5077
data-dash-column={columnId}
5178
style={style}
5279
>
5380
<IsolatedInput
5481
value={value}
55-
placeholder={`filter data...`}
82+
placeholder='filter data...'
5683
stopPropagation={true}
5784
submit={this.submit}
5885
/>
86+
<div>
87+
<input
88+
type='button'
89+
className={'dash-filter--case ' + filterCaseClass}
90+
onClick={setColumnCase}
91+
value='Aa'
92+
/>
93+
</div>
5994
</th>);
6095
}
6196
}

src/dash-table/components/FilterFactory.tsx

+13-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import memoizerCache from 'core/cache/memoizer';
77
import { memoizeOne } from 'core/memoizer';
88

99
import ColumnFilter from 'dash-table/components/Filter/Column';
10-
import { ColumnId, IColumn, TableAction, IFilterFactoryProps, SetFilter, Case } from 'dash-table/components/Table/props';
10+
import { ColumnId, IColumn, TableAction, IFilterFactoryProps, SetFilter, Case, SetProps } from 'dash-table/components/Table/props';
1111
import derivedFilterStyles, { derivedFilterOpStyles } from 'dash-table/derived/filter/wrapperStyles';
1212
import derivedHeaderOperations from 'dash-table/derived/header/operations';
1313
import { derivedRelevantFilterStyles } from 'dash-table/derived/style';
@@ -42,9 +42,11 @@ export default class FilterFactory {
4242

4343
private filter = memoizerCache<[ColumnId, number]>()((
4444
column: IColumn,
45+
columns: IColumn[],
4546
index: number,
4647
map: Map<string, SingleColumnSyntaxTree>,
4748
setFilter: SetFilter,
49+
setProps: SetProps,
4850
filter_case: Case
4951
) => {
5052
const ast = map.get(column.id.toString());
@@ -53,9 +55,14 @@ export default class FilterFactory {
5355
key={`column-${index}`}
5456
classes={`dash-filter column-${index}`}
5557
columnId={column.id}
58+
columns={columns}
5659
isValid={!ast || ast.isValid}
5760
setFilter={this.onChange.bind(this, column, map, setFilter, filter_case)}
61+
setProps={setProps}
5862
value={ast && ast.query}
63+
globalFilterCase={filter_case}
64+
columnFilterCaseSensitive={column.filter_case_sensitive}
65+
columnFilterCaseInsensitive={column.filter_case_insensitive}
5966
/>);
6067
});
6168

@@ -64,7 +71,7 @@ export default class FilterFactory {
6471
edges: IEdgesMatrices | undefined
6572
) => arrayMap(
6673
styles,
67-
(s, j) => R.merge(
74+
(s, j) => R.mergeRight(
6875
s,
6976
edges && edges.getStyle(0, j)
7077
)
@@ -75,11 +82,13 @@ export default class FilterFactory {
7582
filterOpEdges: IEdgesMatrices | undefined
7683
) {
7784
const {
85+
columns,
7886
filter_action,
7987
map,
8088
row_deletable,
8189
row_selectable,
8290
setFilter,
91+
setProps,
8392
style_cell,
8493
style_cell_conditional,
8594
style_filter,
@@ -113,9 +122,11 @@ export default class FilterFactory {
113122
const filters = R.addIndex<IColumn, JSX.Element>(R.map)((column, index) => {
114123
return this.filter.get(column.id, index)(
115124
column,
125+
columns,
116126
index,
117127
map,
118128
setFilter,
129+
setProps,
119130
filter_case
120131
);
121132
}, visibleColumns);

0 commit comments

Comments
 (0)