Skip to content

Commit cb53a18

Browse files
authored
doc(transfer): docs & selectedKeys (#4717)
* refactor(transfer): docs & selectedKeys * docs: update snapshot
1 parent 5a9d718 commit cb53a18

13 files changed

+451
-128
lines changed

components/transfer/__tests__/__snapshots__/demo.test.js.snap

+223-82
Large diffs are not rendered by default.

components/transfer/demo/advanced.vue

+19-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<docs>
22
---
3-
order: 2
3+
order: 3
44
title:
55
zh-CN: 高级用法
66
en-US: Advanced
@@ -18,19 +18,34 @@ You can customize the labels of the transfer buttons, the width and height of th
1818

1919
<template>
2020
<a-transfer
21+
v-model:target-keys="targetKeys"
2122
:data-source="mockData"
2223
show-search
2324
:list-style="{
2425
width: '250px',
2526
height: '300px',
2627
}"
2728
:operations="['to right', 'to left']"
28-
:target-keys="targetKeys"
2929
:render="item => `${item.title}-${item.description}`"
3030
@change="handleChange"
3131
>
32-
<template #footer>
33-
<a-button size="small" style="float: right; margin: 5px" @click="getMock">reload</a-button>
32+
<template #footer="{ direction }">
33+
<a-button
34+
v-if="direction === 'left'"
35+
size="small"
36+
style="float: left; margin: 5px"
37+
@click="getMock"
38+
>
39+
left reload
40+
</a-button>
41+
<a-button
42+
v-else-if="direction === 'right'"
43+
size="small"
44+
style="float: right; margin: 5px"
45+
@click="getMock"
46+
>
47+
right reload
48+
</a-button>
3449
</template>
3550
<template #notFoundContent>
3651
<span>没数据</span>
@@ -72,7 +87,6 @@ export default defineComponent({
7287
targetKeys.value = keys;
7388
};
7489
const handleChange = (keys: string[], direction: string, moveKeys: string[]) => {
75-
targetKeys.value = keys;
7690
console.log(keys, direction, moveKeys);
7791
};
7892
return {

components/transfer/demo/basic.vue

+2-4
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ The most basic usage of `Transfer` involves providing the source data and target
1919
<template>
2020
<div>
2121
<a-transfer
22+
v-model:target-keys="targetKeys"
23+
v-model:selected-keys="selectedKeys"
2224
:data-source="mockData"
2325
:titles="['Source', 'Target']"
24-
:target-keys="targetKeys"
25-
:selected-keys="selectedKeys"
2626
:render="item => item.title"
2727
:disabled="disabled"
2828
@change="handleChange"
@@ -65,13 +65,11 @@ export default defineComponent({
6565
const selectedKeys = ref<string[]>(['1', '4']);
6666
6767
const handleChange = (nextTargetKeys: string[], direction: string, moveKeys: string[]) => {
68-
targetKeys.value = nextTargetKeys;
6968
console.log('targetKeys: ', nextTargetKeys);
7069
console.log('direction: ', direction);
7170
console.log('moveKeys: ', moveKeys);
7271
};
7372
const handleSelectChange = (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => {
74-
selectedKeys.value = [...sourceSelectedKeys, ...targetSelectedKeys];
7573
console.log('sourceSelectedKeys: ', sourceSelectedKeys);
7674
console.log('targetSelectedKeys: ', targetSelectedKeys);
7775
};

components/transfer/demo/custom-item.vue

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<docs>
22
---
3-
order: 3
3+
order: 4
44
title:
55
zh-CN: 自定义渲染行数据
66
en-US: Custom datasource
@@ -18,12 +18,12 @@ Custom each Transfer Item, and in this way you can render a complex datasource.
1818

1919
<template>
2020
<a-transfer
21+
v-model:target-keys="targetKeys"
2122
:data-source="mockData"
2223
:list-style="{
2324
width: '300px',
2425
height: '300px',
2526
}"
26-
:target-keys="targetKeys"
2727
@change="handleChange"
2828
>
2929
<template #render="item">
@@ -66,7 +66,6 @@ export default defineComponent({
6666
targetKeys.value = keys;
6767
};
6868
const handleChange = (keys: string[], direction: string, moveKeys: string[]) => {
69-
targetKeys.value = keys;
7069
console.log(keys, direction, moveKeys);
7170
};
7271
return {

components/transfer/demo/index.vue

+6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
<template>
22
<demo-sort :cols="1">
33
<basic />
4+
<oneway />
45
<search />
56
<advanced />
67
<custom-item />
8+
<pagination />
79
<table-transfer />
810
<tree-transfer />
911
</demo-sort>
1012
</template>
1113
<script lang="ts">
1214
import Basic from './basic.vue';
15+
import Oneway from './oneway.vue';
1316
import Search from './search.vue';
1417
import Advanced from './advanced.vue';
1518
import CustomItem from './custom-item.vue';
1619
import TableTransfer from './table-transfer.vue';
1720
import TreeTransfer from './tree-transfer.vue';
21+
import Pagination from './pagination.vue';
1822
import CN from '../index.zh-CN.md';
1923
import US from '../index.en-US.md';
2024
import { defineComponent } from 'vue';
@@ -24,9 +28,11 @@ export default defineComponent({
2428
US,
2529
components: {
2630
Basic,
31+
Oneway,
2732
Search,
2833
Advanced,
2934
CustomItem,
35+
Pagination,
3036
TableTransfer,
3137
TreeTransfer,
3238
},

components/transfer/demo/oneway.vue

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<docs>
2+
---
3+
order: 1
4+
title:
5+
zh-CN: 单向样式
6+
en-US: One Way
7+
---
8+
9+
## zh-CN
10+
11+
通过 `oneWay` 将 Transfer 转为单向样式。
12+
13+
## en-US
14+
15+
Use `oneWay` to makes Transfer to one way style.
16+
17+
</docs>
18+
19+
<template>
20+
<div>
21+
<a-transfer
22+
v-model:target-keys="targetKeys"
23+
v-model:selected-keys="selectedKeys"
24+
:data-source="mockData"
25+
:one-way="true"
26+
:titles="['Source', 'Target']"
27+
:render="item => item.title"
28+
:disabled="disabled"
29+
@change="handleChange"
30+
@selectChange="handleSelectChange"
31+
@scroll="handleScroll"
32+
/>
33+
<a-switch
34+
v-model:checked="disabled"
35+
un-checked-children="enabled"
36+
checked-children="disabled"
37+
style="margin-top: 16px"
38+
/>
39+
</div>
40+
</template>
41+
<script lang="ts">
42+
import { defineComponent, ref } from 'vue';
43+
interface MockData {
44+
key: string;
45+
title: string;
46+
description: string;
47+
disabled: boolean;
48+
}
49+
const mockData: MockData[] = [];
50+
for (let i = 0; i < 20; i++) {
51+
mockData.push({
52+
key: i.toString(),
53+
title: `content${i + 1}`,
54+
description: `description of content${i + 1}`,
55+
disabled: i % 3 < 1,
56+
});
57+
}
58+
59+
export default defineComponent({
60+
data() {
61+
const disabled = ref<boolean>(false);
62+
63+
const targetKeys = ref<string[]>([]);
64+
65+
const selectedKeys = ref<string[]>(['1', '4']);
66+
67+
const handleChange = (nextTargetKeys: string[], direction: string, moveKeys: string[]) => {
68+
console.log('targetKeys: ', nextTargetKeys);
69+
console.log('direction: ', direction);
70+
console.log('moveKeys: ', moveKeys);
71+
};
72+
const handleSelectChange = (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => {
73+
console.log('sourceSelectedKeys: ', sourceSelectedKeys);
74+
console.log('targetSelectedKeys: ', targetSelectedKeys);
75+
};
76+
const handleScroll = (direction: string, e: Event) => {
77+
console.log('direction:', direction);
78+
console.log('target:', e.target);
79+
};
80+
81+
return {
82+
mockData,
83+
targetKeys,
84+
selectedKeys,
85+
disabled,
86+
handleChange,
87+
handleSelectChange,
88+
handleScroll,
89+
};
90+
},
91+
});
92+
</script>
+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<docs>
2+
---
3+
order: 5
4+
title:
5+
zh-CN: 分页
6+
en-US: Pagination
7+
---
8+
9+
## zh-CN
10+
11+
大数据下使用分页。
12+
13+
## en-US
14+
15+
large count of items with pagination.
16+
17+
</docs>
18+
19+
<template>
20+
<div>
21+
<a-transfer
22+
v-model:target-keys="targetKeys"
23+
:data-source="mockData"
24+
:render="item => item.title"
25+
:disabled="disabled"
26+
pagination
27+
@change="handleChange"
28+
/>
29+
<a-switch
30+
v-model:checked="disabled"
31+
un-checked-children="enabled"
32+
checked-children="disabled"
33+
style="margin-top: 16px"
34+
/>
35+
</div>
36+
</template>
37+
<script lang="ts">
38+
import { defineComponent, ref } from 'vue';
39+
interface MockData {
40+
key: string;
41+
title: string;
42+
description: string;
43+
}
44+
const mockData: MockData[] = [];
45+
for (let i = 0; i < 200; i++) {
46+
mockData.push({
47+
key: i.toString(),
48+
title: `content${i + 1}`,
49+
description: `description of content${i + 1}`,
50+
});
51+
}
52+
53+
const oriTargetKeys = mockData.filter(item => +item.key % 3 > 1).map(item => item.key);
54+
export default defineComponent({
55+
data() {
56+
const disabled = ref<boolean>(false);
57+
58+
const targetKeys = ref<string[]>(oriTargetKeys);
59+
60+
const handleChange = (nextTargetKeys: string[], direction: string, moveKeys: string[]) => {
61+
console.log('targetKeys: ', nextTargetKeys);
62+
console.log('direction: ', direction);
63+
console.log('moveKeys: ', moveKeys);
64+
};
65+
66+
return {
67+
mockData,
68+
targetKeys,
69+
disabled,
70+
handleChange,
71+
};
72+
},
73+
});
74+
</script>

components/transfer/demo/search.vue

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<docs>
22
---
3-
order: 1
3+
order: 2
44
title:
55
zh-CN: 带搜索框
66
en-US: Search
@@ -18,10 +18,10 @@ Transfer with a search box.
1818

1919
<template>
2020
<a-transfer
21+
v-model:target-keys="targetKeys"
2122
:data-source="mockData"
2223
show-search
2324
:filter-option="filterOption"
24-
:target-keys="targetKeys"
2525
:render="item => item.title"
2626
@change="handleChange"
2727
@search="handleSearch"
@@ -66,7 +66,6 @@ export default defineComponent({
6666
};
6767
const handleChange = (keys: string[], direction: string, moveKeys: string[]) => {
6868
console.log(keys, direction, moveKeys);
69-
targetKeys.value = keys;
7069
};
7170
7271
const handleSearch = (dir: string, value: string) => {

components/transfer/demo/table-transfer.vue

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<docs>
22
---
3-
order: 4
3+
order: 6
44
title:
55
zh-CN: 表格穿梭框
66
en-US: Table Transfer
@@ -19,8 +19,8 @@ Customize render list with Table component.
1919
<template>
2020
<div>
2121
<a-transfer
22+
v-model:target-keys="targetKeys"
2223
:data-source="mockData"
23-
:target-keys="targetKeys"
2424
:disabled="disabled"
2525
:show-search="showSearch"
2626
:filter-option="(inputValue, item) => item.title.indexOf(inputValue) !== -1"
@@ -76,7 +76,6 @@ Customize render list with Table component.
7676
</div>
7777
</template>
7878
<script lang="ts">
79-
import { difference } from 'lodash-es';
8079
import { defineComponent, ref } from 'vue';
8180
interface MockData {
8281
key: string;
@@ -86,7 +85,7 @@ interface MockData {
8685
}
8786
type tableColumn = Record<string, string>;
8887
const mockData: MockData[] = [];
89-
for (let i = 0; i < 20; i++) {
88+
for (let i = 0; i < 10; i++) {
9089
mockData.push({
9190
key: i.toString(),
9291
title: `content${i + 1}`,
@@ -123,7 +122,7 @@ export default defineComponent({
123122
const rightColumns = ref<tableColumn[]>(rightTableColumns);
124123
125124
const onChange = (nextTargetKeys: string[]) => {
126-
targetKeys.value = nextTargetKeys;
125+
console.log('nextTargetKeys', nextTargetKeys);
127126
};
128127
129128
const getRowSelection = ({
@@ -140,10 +139,7 @@ export default defineComponent({
140139
const treeSelectedKeys = selectedRows
141140
.filter(item => !item.disabled)
142141
.map(({ key }) => key);
143-
const diffKeys = selected
144-
? difference(treeSelectedKeys, selectedKeys)
145-
: difference(selectedKeys, treeSelectedKeys);
146-
onItemSelectAll(diffKeys, selected);
142+
onItemSelectAll(treeSelectedKeys, selected);
147143
},
148144
onSelect({ key }: Record<string, string>, selected: boolean) {
149145
onItemSelect(key, selected);

0 commit comments

Comments
 (0)