Skip to content

Commit

Permalink
feat(comp:table): redesign api of filter (#720)
Browse files Browse the repository at this point in the history
* feat(comp:table): redesign api of filter

* refactor(comp:dropdown): move less variable
  • Loading branch information
danranVm authored Jan 13, 2022
1 parent 67b7d05 commit c8078ea
Show file tree
Hide file tree
Showing 36 changed files with 516 additions and 427 deletions.
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

0 comments on commit c8078ea

Please sign in to comment.