Skip to content

Commit ee3a717

Browse files
authored
Feat Tag CheckableTag (#2400)
* feat: update Tag CheckableTag * fix: merge event handler * fix: merge event handler * fix: delete dubugger * fix: configProvider inject
1 parent 237d55a commit ee3a717

File tree

4 files changed

+22
-30
lines changed

4 files changed

+22
-30
lines changed

components/tag/CheckableTag.jsx

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1+
import { inject } from 'vue';
12
import PropTypes from '../_util/vue-types';
23
import { ConfigConsumerProps } from '../config-provider';
34

45
export default {
56
name: 'ACheckableTag',
6-
model: {
7-
prop: 'checked',
8-
},
97
props: {
108
prefixCls: PropTypes.string,
11-
checked: Boolean,
9+
checked: PropTypes.bool,
1210
},
13-
inject: {
14-
configProvider: { default: () => ConfigConsumerProps },
11+
setup() {
12+
return {
13+
configProvider: inject('configProvider', ConfigConsumerProps),
14+
};
1515
},
1616
computed: {
1717
classes() {
@@ -28,15 +28,15 @@ export default {
2828
methods: {
2929
handleClick() {
3030
const { checked } = this;
31-
this.$emit('input', !checked);
31+
this.$emit('update:checked', !checked);
3232
this.$emit('change', !checked);
3333
},
3434
},
3535
render() {
3636
const { classes, handleClick, $slots } = this;
3737
return (
3838
<div class={classes} onClick={handleClick}>
39-
{$slots.default}
39+
{$slots.default && $slots.default()}
4040
</div>
4141
);
4242
},

components/tag/Tag.jsx

+9-17
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { Transition } from 'vue';
1+
import { Transition, inject } from 'vue';
22
import CloseOutlined from '@ant-design/icons-vue/CloseOutlined';
33
import PropTypes from '../_util/vue-types';
44
import getTransitionProps from '../_util/getTransitionProps';
5-
import omit from 'omit.js';
65
import Wave from '../_util/wave';
7-
import { hasProp, getListeners, getOptionProps } from '../_util/props-util';
6+
import { hasProp, getOptionProps } from '../_util/props-util';
87
import BaseMixin from '../_util/BaseMixin';
98
import { ConfigConsumerProps } from '../config-provider';
109
import warning from '../_util/warning';
@@ -29,19 +28,17 @@ const PresetColorRegex = new RegExp(`^(${PresetColorTypes.join('|')})(-inverse)?
2928
export default {
3029
name: 'ATag',
3130
mixins: [BaseMixin],
32-
model: {
33-
prop: 'visible',
34-
event: 'close.visible',
35-
},
3631
props: {
3732
prefixCls: PropTypes.string,
3833
color: PropTypes.string,
3934
closable: PropTypes.bool.def(false),
4035
visible: PropTypes.bool,
4136
afterClose: PropTypes.func,
4237
},
43-
inject: {
44-
configProvider: { default: () => ConfigConsumerProps },
38+
setup() {
39+
return {
40+
configProvider: inject('configProvider', ConfigConsumerProps),
41+
};
4542
},
4643
data() {
4744
let _visible = true;
@@ -68,7 +65,7 @@ export default {
6865
methods: {
6966
setVisible(visible, e) {
7067
this.$emit('close', e);
71-
this.$emit('close.visible', false);
68+
this.$emit('update:visible', false);
7269
const afterClose = this.afterClose;
7370
if (afterClose) {
7471
// next version remove.
@@ -120,16 +117,11 @@ export default {
120117

121118
render() {
122119
const { prefixCls: customizePrefixCls } = this.$props;
123-
const getPrefixCls = this.configProvider().getPrefixCls;
120+
const getPrefixCls = this.configProvider.getPrefixCls;
124121
const prefixCls = getPrefixCls('tag', customizePrefixCls);
125122
const { _visible: visible } = this.$data;
126123
const tag = (
127-
<span
128-
v-show={visible}
129-
{...{ on: omit(getListeners(this), ['close']) }}
130-
class={this.getTagClassName(prefixCls)}
131-
style={this.getTagStyle()}
132-
>
124+
<span v-show={visible} class={this.getTagClassName(prefixCls)} style={this.getTagStyle()}>
133125
{this.$slots.default()}
134126
{this.renderCloseIcon()}
135127
</span>

components/tag/index.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import Tag from './Tag';
22
import CheckableTag from './CheckableTag';
3-
import Base from '../base';
43

54
Tag.CheckableTag = CheckableTag;
65

76
/* istanbul ignore next */
8-
Tag.install = function(Vue) {
9-
Vue.use(Base);
10-
Vue.component(Tag.name, Tag);
11-
Vue.component(Tag.CheckableTag.name, Tag.CheckableTag);
7+
Tag.install = function(app) {
8+
app.component(Tag.name, Tag);
9+
app.component(Tag.CheckableTag.name, Tag.CheckableTag);
1210
};
1311

1412
export default Tag;

examples/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import Col from 'ant-design-vue/col';
2121
import Row from 'ant-design-vue/row';
2222
import Tooltip from 'ant-design-vue/tooltip';
2323
import Descriptions from 'ant-design-vue/descriptions';
24+
import Tag from 'ant-design-vue/tag';
2425
import 'ant-design-vue/style.js';
2526

2627
createApp(App)
@@ -44,4 +45,5 @@ createApp(App)
4445
.use(Row)
4546
.use(Tooltip)
4647
.use(Descriptions)
48+
.use(Tag)
4749
.mount('#app');

0 commit comments

Comments
 (0)