mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
94 lines
1.9 KiB
TypeScript
94 lines
1.9 KiB
TypeScript
import { use } from '../utils';
|
||
import { emit, inherit } from '../utils/functional';
|
||
import Icon from '../icon';
|
||
import Cell from '../cell';
|
||
import Radio from '../radio';
|
||
|
||
// Types
|
||
import { CreateElement, RenderContext } from 'vue/types';
|
||
import { DefaultSlots } from '../utils/use/sfc';
|
||
|
||
export type AddressItemData = {
|
||
id: string | number;
|
||
tel: string | number;
|
||
name: string;
|
||
address: string;
|
||
};
|
||
|
||
export type AddressItemProps = {
|
||
data: AddressItemData;
|
||
disabled?: boolean;
|
||
switchable?: boolean;
|
||
};
|
||
|
||
export type AddressItemEvents = {
|
||
onEdit(): void;
|
||
onSelect(): void;
|
||
};
|
||
|
||
const [sfc, bem] = use('address-item');
|
||
|
||
function AddressItem(
|
||
h: CreateElement,
|
||
props: AddressItemProps,
|
||
slots: DefaultSlots,
|
||
ctx: RenderContext<AddressItemProps>
|
||
) {
|
||
const { disabled, switchable } = props;
|
||
|
||
function onSelect() {
|
||
if (switchable) {
|
||
emit(ctx, 'select');
|
||
}
|
||
}
|
||
|
||
const renderRightIcon = () => (
|
||
<Icon
|
||
name="edit"
|
||
class={bem('edit')}
|
||
onClick={(event: Event) => {
|
||
event.stopPropagation();
|
||
emit(ctx, 'edit');
|
||
}}
|
||
/>
|
||
);
|
||
|
||
const renderContent = () => {
|
||
const { data } = props;
|
||
const Info = [
|
||
<div class={bem('name')}>{`${data.name},${data.tel}`}</div>,
|
||
<div class={bem('address')}>{data.address}</div>
|
||
];
|
||
|
||
return switchable && !disabled ? (
|
||
<Radio name={data.id}>
|
||
{Info}
|
||
</Radio>
|
||
) : (
|
||
Info
|
||
);
|
||
};
|
||
|
||
return (
|
||
<Cell
|
||
class={bem({ disabled, unswitchable: !switchable })}
|
||
valueClass={bem('value')}
|
||
clickable={switchable && !disabled}
|
||
scopedSlots={{
|
||
default: renderContent,
|
||
'right-icon': renderRightIcon
|
||
}}
|
||
onClick={onSelect}
|
||
{...inherit(ctx)}
|
||
/>
|
||
);
|
||
}
|
||
|
||
AddressItem.props = {
|
||
data: Object,
|
||
disabled: Boolean,
|
||
switchable: Boolean
|
||
};
|
||
|
||
export default sfc<AddressItemProps, AddressItemEvents>(AddressItem);
|