From 9aee819c29517a0c1f704090fa36153cfd6567ff Mon Sep 17 00:00:00 2001 From: neverland Date: Sat, 16 Feb 2019 08:41:03 +0800 Subject: [PATCH] [improvement] AddressList: functional (#2757) --- packages/address-list/Item.js | 90 +++++++++++++------------- packages/address-list/index.js | 112 ++++++++++++++++++--------------- 2 files changed, 106 insertions(+), 96 deletions(-) diff --git a/packages/address-list/Item.js b/packages/address-list/Item.js index 5163a1081..55410fa3a 100644 --- a/packages/address-list/Item.js +++ b/packages/address-list/Item.js @@ -1,58 +1,60 @@ import { use } from '../utils'; +import { emit, inherit } from '../utils/functional'; import Icon from '../icon'; import Cell from '../cell'; import Radio from '../radio'; const [sfc, bem] = use('address-item'); -export default sfc({ - props: { - data: Object, - disabled: Boolean, - switchable: Boolean - }, +function AddressItem(h, props, slots, ctx) { + const { disabled, switchable } = props; - methods: { - onSelect() { - if (this.switchable) { - this.$emit('select'); - } - }, + const renderRightIcon = () => ( + { + event.stopPropagation(); + emit(ctx, 'edit'); + }} + /> + ); - onClickRightIcon(event) { - event.stopPropagation(); - this.$emit('edit'); - }, + const renderContent = () => { + const { data } = props; + const Info = [ +
{`${data.name},${data.tel}`}
, +
{data.address}
+ ]; - renderRightIcon() { - return ; - }, + return props.disabled ? Info : {Info}; + }; - renderContent() { - const { data } = this; - const Info = [ -
{`${data.name},${data.tel}`}
, -
{data.address}
- ]; - - return this.disabled ? Info : {Info}; + const onSelect = () => { + if (props.switchable) { + emit(ctx, 'select'); } - }, + }; - render(h) { - const { disabled, switchable } = this; + return ( + + ); +} - return ( - - ); - } -}); +AddressItem.props = { + data: Object, + disabled: Boolean, + switchable: Boolean +}; + +export default sfc(AddressItem); diff --git a/packages/address-list/index.js b/packages/address-list/index.js index fc2366ec4..38103511a 100644 --- a/packages/address-list/index.js +++ b/packages/address-list/index.js @@ -1,63 +1,71 @@ import { use } from '../utils'; +import { emit, inherit } from '../utils/functional'; import Button from '../button'; import RadioGroup from '../radio-group'; import AddressItem from './Item'; const [sfc, bem, t] = use('address-list'); -export default sfc({ - props: { - list: Array, - disabledList: Array, - disabledText: String, - addButtonText: String, - value: [String, Number], - switchable: { - type: Boolean, - default: true - } - }, +function AddressList(h, props, slots, ctx) { + const getList = (list, disabled) => + list.map((item, index) => ( + { + emit(ctx, disabled ? 'select-disabled' : 'select', item, index); + }} + onEdit={() => { + emit(ctx, disabled ? 'edit-disabled' : 'edit', item, index); + }} + /> + )); - render(h) { - const getList = (list, disabled) => - list.map((item, index) => ( - { - this.$emit(disabled ? 'select-disabled' : 'select', item, index); - }} - onEdit={() => { - this.$emit(disabled ? 'edit-disabled' : 'edit', item, index); - }} - /> - )); + const List = getList(props.list); + const DisabledList = getList(props.disabledList, true); - const List = getList(this.list); - const DisabledList = getList(this.disabledList, true); + return ( +
+ {slots.top && slots.top()} + { + emit(ctx, 'input', event); + }} + > + {List} + + {props.disabledText && ( +
{props.disabledText}
+ )} + {DisabledList} + {slots.default && slots.default()} +
+ ); +} - return ( -
- {this.slots('top')} - this.$emit('input', event)}> - {List} - - {this.disabledText &&
{this.disabledText}
} - {DisabledList} - {this.slots()} -
- ); +AddressList.props = { + list: Array, + disabledList: Array, + disabledText: String, + addButtonText: String, + value: [String, Number], + switchable: { + type: Boolean, + default: true } -}); +}; + +export default sfc(AddressList);