Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(comp:table): redesign api of filter #720

Merged
merged 2 commits into from
Jan 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/components/config/src/defaultConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ const table: TableConfig = {
columnBase: {
align: 'start',
sortable: { nextTooltip: false, orders: ['ascend', 'descend'] },
filterable: { multiple: true, footer: true },
},
columnExpandable: { icon: ['plus-square', 'minus-square'] },
}
Expand Down
1 change: 1 addition & 0 deletions packages/components/config/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ export interface TableConfig {
export interface TableColumnBaseConfig {
align: TableColumnAlign
sortable: { nextTooltip: boolean; orders: TableColumnSortOrder[] }
filterable: { multiple: boolean; footer: true }
}

export interface TableColumnExpandableConfig {
Expand Down
47 changes: 46 additions & 1 deletion packages/components/dropdown/style/index.less
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
@import '../../style/motion/fade.less';

.@{dropdown-prefix} {
.reset-component();
z-index: @dropdown-overlay-zindex;
min-width: @dropdown-overlay-min-width;
background-color: @dropdown-bg-color;
border-radius: @dropdown-overlay-border-radius;
box-shadow: @dropdown-overlay-box-shadow;

&-trigger {
cursor: pointer;
Expand All @@ -12,3 +16,44 @@
color: @dropdown-background-color;
}
}

.@{menu-prefix} {

&&-dropdown {
&.@{menu-prefix}-vertical,
&.@{menu-prefix}-inline {
.@{menu-prefix}-item {

&-selected {

&::after {
transform: scaleY(0);
opacity: 0;
}
}
}
}

&.@{menu-prefix}-horizontal {
.@{menu-prefix}-item,
.@{menu-prefix}-sub {

&:hover,
&-expanded,
&-selected {
border-color: transparent;
}
}
}
}
}

.@{menu-prefix}-dropdown {
.@{menu-prefix}-item,
.@{menu-prefix}-sub-title,
.@{menu-prefix}-item-group .@{menu-prefix}-item-group-title {
height: @dropdown-menu-item-height;
line-height: @dropdown-menu-item-height;
margin: @dropdown-menu-item-margin;
}
}
1 change: 0 additions & 1 deletion packages/components/dropdown/style/themes/default.less
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
@import '../../../style/themes/default.less';
@import './default.variable.less';
@import '../index.less';
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
@import '../../../style/themes/default.less';
@import '../../../menu/style/themes/default.variable.less';

@dropdown-menu-item-height: @height-md;
@dropdown-menu-item-margin: 0;
@dropdown-background-color: @background-color-component;

@dropdown-overlay-zindex: @menu-overlay-zindex;
@dropdown-overlay-min-width: @menu-overlay-min-width;
@dropdown-bg-color: @menu-bg-color;
@dropdown-overlay-border-radius: @menu-overlay-border-radius;
@dropdown-overlay-box-shadow: @menu-overlay-box-shadow;
46 changes: 0 additions & 46 deletions packages/components/menu/style/dropdown.less

This file was deleted.

1 change: 0 additions & 1 deletion packages/components/menu/style/index.less
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
@import './menu.less';
@import './dark.less';
@import './collapsed.less';
@import './dropdown.less';

.@{menu-prefix} {
.reset-component();
Expand Down
2 changes: 0 additions & 2 deletions packages/components/menu/style/themes/default.less
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
@import '../../../style/themes/default.less';
@import '../../../dropdown/style/themes/default.variable.less';
@import '../index.less';
@import './default.variable.less';
2 changes: 2 additions & 0 deletions packages/components/menu/style/themes/default.variable.less
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@import '../../../style/themes/default.less';

@menu-text-color: @text-color;
@menu-bg-color: @background-color-component;
@menu-highlight-color: @color-primary;
Expand Down
2 changes: 1 addition & 1 deletion packages/components/table/demo/Filterable.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title:
zh: 可筛选
en: Filterable
order: 52
order: 45
---

## zh
Expand Down
34 changes: 12 additions & 22 deletions packages/components/table/demo/Filterable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,14 @@ const columns: TableColumn<Data>[] = [
sorter: (curr, next) => curr.age - next.age,
},
filterable: {
filters: [
{
text: 'over 19',
value: (age: number) => age > 19,
},
{
text: 'below 21',
value: (age: number) => age < 21,
},
menus: [
{ key: 'over', label: 'Over 19' },
{ key: 'under', label: 'Under 21' },
],
filter(currentFilterBy, record) {
return currentFilterBy.every(filterBy => filterBy(record.age))
multiple: false,
filter: (currentFilterBy, record) => {
const isOver = currentFilterBy.includes('over')
return isOver ? record.age > 19 : record.age < 21
},
},
},
Expand All @@ -53,18 +49,12 @@ const columns: TableColumn<Data>[] = [
title: 'Address',
dataKey: 'address',
filterable: {
filters: [
{
text: 'Sidney',
value: 'Sidney',
},
{
text: 'New York',
value: 'New York',
},
menus: [
{ key: 'Sidney', label: 'Sidney' },
{ key: 'New York', label: 'New York' },
],
filter(currentFilterBy, record) {
return currentFilterBy.every(filterBy => record.address.includes(filterBy))
filter: (currentFilterBy, record) => {
return currentFilterBy.some(filterBy => record.address.includes(filterBy as string))
},
},
},
Expand Down
6 changes: 3 additions & 3 deletions packages/components/table/demo/FilterableFilterBy.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
title:
zh: 受控的筛选
en: Controlled filterable
order: 53
order: 46
---

## zh

如果设置了 `filterable` 的 `filterby`,表格列的筛选将为受控状态。
如果设置了 `filterable` 的 `filterBy`,表格列的筛选将为受控状态。

## en

If `filterby` of `filterable` is set, the filtering of the column will be in a controlled state.
If `filterBy` of `filterable` is set, the filtering of the column will be in a controlled state.
50 changes: 19 additions & 31 deletions packages/components/table/demo/FilterableFilterBy.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,50 +24,38 @@ interface Data {
address: string
}

type AgeFilter = (age: number) => boolean

const ageFilterable: TableColumnFilterable<Data, AgeFilter> = reactive({
filters: [
{
text: 'over 19',
value: (age: number) => age > 19,
},
{
text: 'below 21',
value: (age: number) => age < 21,
},
const ageFilterable: TableColumnFilterable<Data> = reactive({
menus: [
{ key: 'over', label: 'Over 19' },
{ key: 'under', label: 'Under 21' },
],
filter(currentFilterBy, record) {
return currentFilterBy.every(filterBy => filterBy(record.age))
multiple: false,
filter: (currentFilterBy, record) => {
const isOver = currentFilterBy.includes('over')
return isOver ? record.age > 19 : record.age < 21
},
filterBy: [],
onChange(currentFilterBy) {
onChange: currentFilterBy => {
ageFilterable.filterBy = currentFilterBy
},
})

const addressFilterable: TableColumnFilterable<Data, string> = reactive({
filters: [
{
text: 'Sidney',
value: 'Sidney',
},
{
text: 'New York',
value: 'New York',
},
const addressFilterable: TableColumnFilterable<Data> = reactive({
menus: [
{ key: 'Sidney', label: 'Sidney' },
{ key: 'New York', label: 'New York' },
],
filter(currentFilterBy, record) {
return currentFilterBy.every(filterBy => record.address.includes(filterBy))
filter: (currentFilterBy, record) => {
return currentFilterBy.some(filterBy => record.address.includes(filterBy as string))
},
filterBy: [],
onChange(currentFilterBy) {
onChange: currentFilterBy => {
addressFilterable.filterBy = currentFilterBy
},
})

const filterByAge19 = () => {
ageFilterable.filterBy = [ageFilterable.filters[0].value]
ageFilterable.filterBy = ['over']
addressFilterable.filterBy = []
}

Expand All @@ -94,7 +82,7 @@ const columns: TableColumn<Data>[] = [
sorter: (curr, next) => curr.age - next.age,
},
filterable: ageFilterable,
} as TableColumn<Data, AgeFilter>,
},
{
title: 'Grade',
dataKey: 'grade',
Expand All @@ -103,7 +91,7 @@ const columns: TableColumn<Data>[] = [
title: 'Address',
dataKey: 'address',
filterable: addressFilterable,
} as TableColumn<Data, string>,
},
]

const data: Data[] = [
Expand Down
22 changes: 6 additions & 16 deletions packages/components/table/demo/Tree.vue
Original file line number Diff line number Diff line change
Expand Up @@ -62,24 +62,14 @@ const columns: TableColumn<Data>[] = [
return h(IxTag, { color }, { default: () => tag.toUpperCase() })
}),
},

filterable: {
filters: [
{
text: 'attack',
value: 'attack',
},
{
text: 'damage',
value: 'damage',
},
{
text: 'infiltrate',
value: 'infiltrate',
},
menus: [
{ key: 'attack', label: 'Attack' },
{ key: 'damage', label: 'Damage' },
{ key: 'infiltrate', label: 'Infiltrate' },
],
filter(tags, record) {
return tags.every(tag => record.tags.includes(tag))
filter: (tags, record) => {
return tags.some(tag => record.tags.includes(tag as string))
},
},
},
Expand Down
2 changes: 1 addition & 1 deletion packages/components/table/docs/Index.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export interface TableColumnExpandableSlots<T = any, V = any> {
// 自定义展开内容
expand?: string | ((data: { record: T; rowIndex: number }) => VNodeChild)
// 自定义展开图标
icon?: string | ((data: { expanded: boolean; record: T; onExpand: () => void }) => VNodeChild)
icon?: string | ((data: { expanded: boolean; record: T }) => VNodeChild)
}
```

Expand Down
5 changes: 3 additions & 2 deletions packages/components/table/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
import type { TableComponent } from './src/types'

import Table from './src/Table'
import { TableColumn } from './src/tableColumn'
import { TableColumn } from './src/column'
import { TABLE_TOKEN } from './src/token'

const IxTable = Table as unknown as TableComponent
const IxTableColumn = TableColumn

export { IxTable, IxTableColumn }
export { IxTable, IxTableColumn, TABLE_TOKEN }

export type {
TableInstance,
Expand Down
Loading