diff --git a/CHANGELOG.en-US.md b/CHANGELOG.en-US.md index 1ae625626..8e536f81d 100644 --- a/CHANGELOG.en-US.md +++ b/CHANGELOG.en-US.md @@ -2,6 +2,10 @@ ## NEXT_VERSION +### Breaking Changes + +- `n-transfer`'s UI is totally refactored. The original transfer component is renamed as `n-legacy-transfer` and will be removed in next major version. + ### Fixes - `n-notification` add `keepAliveOnHover` props to control whether the notification will be closed when mouse hover, closes [#3249](https://github.com/TuSimple/naive-ui/issues/3249). @@ -20,7 +24,8 @@ - `n-checkbox-group`'s `on-update:value` prop adds trigger checkbox's value to params, closes [#3277](https://github.com/TuSimple/naive-ui/issues/3277). - `n-tree` supports RTL. - `n-input` adds `scrollTo` method, closes [#3280](https://github.com/TuSimple/naive-ui/issues/3280). -- `n-transfer` add `render-label` prop. +- `n-transfer` add `render-source-label` prop. +- `n-transfer` add `render-target-label` prop. - `n-transfer` add `render-source-list` prop. ## 2.31.0 diff --git a/CHANGELOG.zh-CN.md b/CHANGELOG.zh-CN.md index 369656c1b..6f787a6de 100644 --- a/CHANGELOG.zh-CN.md +++ b/CHANGELOG.zh-CN.md @@ -4,7 +4,7 @@ ### Breaking Changes -- `n-transfer` 的样式及代码被重构 +- `n-transfer` 的 UI 完全重构,原本的 transfer 组件被重命名为 `n-legacy-transfer`,并将在下个主版本被移除。 ### Fixes @@ -24,7 +24,8 @@ - `n-checkbox-group` 的 `on-update:value` 属性增加触发变更的 checkbox 的值到参数中,关闭 [#3277](https://github.com/TuSimple/naive-ui/issues/3277) - `n-tree` 支持 RTL - `n-input` 新增 `scrollTo` 方法,关闭 [#3280](https://github.com/TuSimple/naive-ui/issues/3280) -- `n-transfer` 新增 `render-label` 属性 +- `n-transfer` 新增 `render-source-label` 属性 +- `n-transfer` 新增 `render-target-label` 属性 - `n-transfer` 新增 `render-source-list` 属性 ## 2.31.0 diff --git a/src/components.ts b/src/components.ts index a9868972c..23e43b500 100644 --- a/src/components.ts +++ b/src/components.ts @@ -44,6 +44,7 @@ export * from './input' export * from './input-number' export * from './layout' export * from './legacy-grid' +export * from './legacy-transfer' export * from './list' export * from './loading-bar' export * from './log' diff --git a/src/config-provider/src/internal-interface.ts b/src/config-provider/src/internal-interface.ts index 71b14b12b..ddc5a2b5c 100644 --- a/src/config-provider/src/internal-interface.ts +++ b/src/config-provider/src/internal-interface.ts @@ -37,6 +37,7 @@ import type { ImageTheme } from '../../image/styles' import type { InputTheme } from '../../input/styles' import type { InputNumberTheme } from '../../input-number/styles' import type { LayoutTheme } from '../../layout/styles' +import type { LegacyTransferTheme } from '../../legacy-transfer/styles' import type { ListTheme } from '../../list/styles' import type { LoadingBarTheme } from '../../loading-bar/styles' import type { LogTheme } from '../../log/styles' @@ -134,6 +135,7 @@ export interface GlobalThemeWithoutCommon { Input?: InputTheme InputNumber?: InputNumberTheme Layout?: LayoutTheme + LegacyTransfer?: LegacyTransferTheme List?: ListTheme LoadingBar?: LoadingBarTheme Log?: LogTheme diff --git a/src/legacy-transfer/demos/enUS/basic.demo.vue b/src/legacy-transfer/demos/enUS/basic.demo.vue index 77cf02228..56abdd6ce 100644 --- a/src/legacy-transfer/demos/enUS/basic.demo.vue +++ b/src/legacy-transfer/demos/enUS/basic.demo.vue @@ -1,11 +1,11 @@ # Basic -Basic example of the Transfer component. If you have tons of data, see below for virtualised lists. +Basic example of the Transfer component. If you have tons of data, see below for virtualized list. diff --git a/src/transfer/demos/enUS/render-source-list.demo.md b/src/transfer/demos/enUS/render-source-list.demo.md deleted file mode 100644 index 95a959cbf..000000000 --- a/src/transfer/demos/enUS/render-source-list.demo.md +++ /dev/null @@ -1,70 +0,0 @@ -# Customize source list rendering - -```html - -``` - -```js -import { defineComponent, ref, h } from 'vue' -import { repeat } from 'seemly' -import { NTree } from 'naive-ui' - -function createLabel (level) { - if (level === 4) return 'Out of Tao, One is born' - if (level === 3) return 'Out of One, Two' - if (level === 2) return 'Out of Two, Three' - if (level === 1) return 'Out of Three, the created universe' - return '' -} - -function createData (level = 4, baseKey = '') { - if (!level) return undefined - return repeat(6 - level, undefined).map((_, index) => { - const value = '' + baseKey + level + index - return { - label: createLabel(level), - value, - children: createData(level - 1, value) - } - }) -} - -function flattenTree (list) { - const result = [] - function flatten (_list = []) { - _list.forEach((item) => { - result.push(item) - flatten(item.children) - }) - } - flatten(list) - return result -} - -export default defineComponent({ - setup () { - return { - options: flattenTree(createData()), - value: ref([]), - renderSourceList: function ({ onCheck, checkedOptions, pattern }) { - return h(NTree, { - keyField: 'value', - checkable: true, - data: createData(), - pattern, - checkedKeys: checkedOptions.map((i) => i.value), - onUpdateCheckedKeys: function (_, option) { - onCheck(option.map((i) => i.value)) - } - }) - } - } - } -}) -``` diff --git a/src/transfer/demos/enUS/render-source-list.demo.vue b/src/transfer/demos/enUS/render-source-list.demo.vue new file mode 100644 index 000000000..4eddb9715 --- /dev/null +++ b/src/transfer/demos/enUS/render-source-list.demo.vue @@ -0,0 +1,84 @@ + +# Custom source list + + + + + diff --git a/src/transfer/demos/zhCN/index.demo-entry.md b/src/transfer/demos/zhCN/index.demo-entry.md index 474b4e32f..d958aff04 100644 --- a/src/transfer/demos/zhCN/index.demo-entry.md +++ b/src/transfer/demos/zhCN/index.demo-entry.md @@ -1,43 +1,41 @@ # 穿梭框 Transfer - +一个更高效穿梭框。 -~~左、右、左、右...像我这么无聊的人能玩一整天。~~ - -现在的样式简洁高效,没得玩了。 +如果你需要使用原有的穿梭框,请参考 [旧版穿梭框](legacy-transfer),需要注意旧版的穿梭框会在下一个主版本被移除,不建议使用。 ## 演示 ```demo basic.vue large-data.vue -size.vue filterable.vue -render-label -render-source-list +render-label.vue +render-source-list.vue ``` ## API ### Transfer Props -| 名称 | 类型 | 默认值 | 说明 | -| --- | --- | --- | --- | -| default-value | `Array \| null` | `null` | 非受控模式下的默认值 | -| disabled | `boolean` | `true` | 是否禁用 | -| filterable | `boolean` | `false` | 是否可过滤 | -| filter | `(pattern: string, option: TransferOption, from: 'source' \| 'target') => boolean` | 一个简单的标签字符串匹配函数 | 搜索时使用的过滤函数 | -| options | `Array` | `[]` | 配置选项内容,详情见 TransferOption Type | -| render-label | `({ from, option }: { from: 'source' \| 'target', option: TransferOption }) => VNodeChild` | `undefined` | 自定义标签 | -| render-source-list | `({ onCheck, checkedOptions, pattern }: { onCheck: (checkedValueList: Array) => void, checkedOptions: Array