Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to Vue 3 #432

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .babelrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module.exports = api => {
[ '@babel/preset-env', { modules: false } ],
]
const plugins = [
'transform-vue-jsx',
'@vue/babel-plugin-jsx',
'@babel/plugin-transform-runtime',
]

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ dist
gh-pages

test/unit/coverage
nbproject
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
- Supports a wide range of browsers (see [below](#browser-compatibility))
- RTL support

*Requires Vue 2.2+*
*Requires Vue 3.0+*

### Getting Started

Expand Down Expand Up @@ -80,8 +80,8 @@ If you just don't want to use webpack or any other bundlers, you can simply incl
```html
<html>
<head>
<!-- include Vue 2.x -->
<script src="https://cdn.jsdelivr.net/npm/vue@^2"></script>
<!-- include Vue 3.x -->
<script src="https://cdn.jsdelivr.net/npm/vue@^3"></script>
<!-- include vue-treeselect & its styles. you can change the version tag to better suit your needs. -->
<script src="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@^0.4.0/dist/vue-treeselect.umd.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@^0.4.0/dist/vue-treeselect.min.css">
Expand Down
3 changes: 0 additions & 3 deletions build/webpack-configs/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ module.exports = {
resolve: {
extensions: [ '.js', '.json', '.vue' ],
alias: {
// use the full development build of Vue
// see: https://vuejs.org/v2/guide/installation.html#Explanation-of-Different-Builds
'vue$': 'vue/dist/vue',
// for consistent docs
'@riophae/vue-treeselect': utils.resolve('src'),
// for shorter import path in tests
Expand Down
2 changes: 1 addition & 1 deletion docs/components/DocEvents.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
attributes: makeArgNameList([ 'value', 'instanceId' ]),
description: 'Emitted when the menu closes.',
}, {
name: 'input',
name: 'update:modelValue',
attributes: makeArgNameList([ 'value', 'instanceId' ]),
description: 'Emitted after value changes.',
}, {
Expand Down
10 changes: 5 additions & 5 deletions docs/components/DocProps.vue
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,11 @@
type: 'Number',
defaultValue: code('300'),
description: `Sets ${code('maxHeight')} style value of the menu.`,
}, {
name: 'modelValue',
type: `${code('id')} | ${code('node')} | ${code('id[]')} | ${code('node[]')}`,
defaultValue: NO_DEFAULT_VALUE,
description: `The value of the control. <br>Should be ${code('id')} or ${code('node')} object when ${code(':multiple="false"')}, or an array of ${code('id')} or ${code('node')} object when ${code(':multiple="true"')}. Its format depends on the ${code('valueFormat')} prop. <br>For most cases, just use ${code('v-model')} instead.`,
}, {
name: 'multiple',
type: 'Boolean',
Expand Down Expand Up @@ -332,11 +337,6 @@
type: 'Number',
defaultValue: code('0'),
description: 'Tab index of the control.',
}, {
name: 'value',
type: `${code('id')} | ${code('node')} | ${code('id[]')} | ${code('node[]')}`,
defaultValue: NO_DEFAULT_VALUE,
description: `The value of the control. <br>Should be ${code('id')} or ${code('node')} object when ${code(':multiple="false"')}, or an array of ${code('id')} or ${code('node')} object when ${code(':multiple="true"')}. Its format depends on the ${code('valueFormat')} prop. <br>For most cases, just use ${code('v-model')} instead.`,
}, {
name: 'valueConsistsOf',
type: 'String',
Expand Down
2 changes: 1 addition & 1 deletion docs/components/VuexSupport.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
:options="options"
:value="value"
:searchable="false"
@input="updateValue"
@update:modelValue="updateValue"
/>
<treeselect-value :value="value" />
</div>
Expand Down
4 changes: 2 additions & 2 deletions docs/partials/getting-started.pug
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ section
```html
<html>
<head>
<!-- include Vue 2.x -->
<script src="https://cdn.jsdelivr.net/npm/vue@^2"></script>
<!-- include Vue 3.x -->
<script src="https://cdn.jsdelivr.net/npm/vue@^3"></script>
<!-- include vue-treeselect & its styles. you can change the version tag to better suit your needs. -->
<script src="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@^0.4.0/dist/vue-treeselect.umd.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@^0.4.0/dist/vue-treeselect.min.css">
Expand Down
4 changes: 2 additions & 2 deletions docs/partials/guides.pug
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@

+subsection('Vuex Support')
:markdown-it
In all previous examples, we used `v-model` to sync value between application state and vue-treeselect, a.k.a two-way data binding. If you are using Vuex, we could make use of `:value` and `@input`, since `v-model` is just a syntax sugar for them in Vue 2.
In all previous examples, we used `v-model` to sync value between application state and vue-treeselect, a.k.a two-way data binding. If you are using Vuex, we could make use of `:modelValue` and `@update:modelValue`, since `v-model` is just a syntax sugar for them in Vue 3.

Concretely speaking, we can bind `getter` to `:value` to make vue-treeselect reflect any changes in your Vuex state, and bind `action` or `mutation` to `@input` to update your Vuex state whenever the value changes.
Concretely speaking, we can bind `getter` to `:modelValue` to make vue-treeselect reflect any changes in your Vuex state, and bind `action` or `mutation` to `@update:modelValue` to update your Vuex state whenever the value changes.
+demo('VuexSupport')
2 changes: 1 addition & 1 deletion docs/partials/introduction.pug
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ section
- Rich options & highly customizable
- Supports [a wide range of browsers](https://github.com/riophae/vue-treeselect#browser-compatibility)

*Requires Vue 2.2+*
*Requires Vue 3.0+*
16 changes: 7 additions & 9 deletions package.json
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"pre-commit": "lint",
"dependencies": {
"@babel/runtime": "^7.3.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
"easings-css": "^1.0.0",
"fuzzysearch": "^1.0.3",
"is-promise": "^2.1.0",
Expand All @@ -43,16 +43,16 @@
},
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/plugin-syntax-jsx": "^7.0.0",
"@babel/plugin-transform-runtime": "^7.0.0",
"@babel/preset-env": "^7.3.1",
"@size-limit/preset-big-lib": "^2.0.2",
"@vue/babel-plugin-jsx": "^1.0.2",
"@vue/compiler-sfc": "^3.0.5",
"@vue/test-utils": "1.0.0-beta.16",
"autoprefixer": "^9.4.6",
"babel-eslint": "^10.0.1",
"babel-loader": "^8.0.0",
"babel-plugin-istanbul": "^5.0.1",
"babel-plugin-transform-vue-jsx": "^4.0.1",
"cache-loader": "^4.0.1",
"chalk": "^2.3.2",
"codecov": "^3.0.0",
Expand Down Expand Up @@ -110,11 +110,9 @@
"terser-webpack-plugin": "^2.1.0",
"url-loader": "^2.0.1",
"vodal": "^2.3.3",
"vue": "^2.2.0",
"vue-loader": "^15.6.0",
"vue-style-loader": "^4.0.2",
"vue-template-compiler": "^2.4.4",
"vuex": "^3.0.1",
"vue": "^3.0.0",
"vue-loader": "^16.1.2",
"vuex": "^4.0.0-0",
"webpack": "^4.6.0",
"webpack-bundle-analyzer": "^3.0.2",
"webpack-cdn-plugin": "^3.1.4",
Expand All @@ -125,7 +123,7 @@
"yaku": "^0.19.3"
},
"peerDependencies": {
"vue": "^2.2.0"
"vue": "^3.0.0"
},
"keywords": [
"vue",
Expand Down
2 changes: 1 addition & 1 deletion src/components/HiddenFields.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
functional: true,

render(_, context) {
const { instance } = context.injections
const instance = this.instance

if (!instance.name || instance.disabled || !instance.hasValue) return null

Expand Down
6 changes: 3 additions & 3 deletions src/components/Menu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
if (instance.menu.isOpen) this.$nextTick(this.onMenuOpen)
},

destroyed() {
unmounted() {
this.onMenuClose()
},

Expand All @@ -80,7 +80,7 @@

renderBeforeList() {
const { instance } = this
const beforeListRenderer = instance.$scopedSlots['before-list']
const beforeListRenderer = instance.$slots['before-list']

return beforeListRenderer
? beforeListRenderer()
Expand All @@ -89,7 +89,7 @@

renderAfterList() {
const { instance } = this
const afterListRenderer = instance.$scopedSlots['after-list']
const afterListRenderer = instance.$slots['after-list']

return afterListRenderer
? afterListRenderer()
Expand Down
2 changes: 1 addition & 1 deletion src/components/MenuPortal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
)
},

destroyed() {
unmounted() {
this.removeHandlers()
},
}
Expand Down
2 changes: 1 addition & 1 deletion src/components/MultiValueItem.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
'vue-treeselect__multi-value-item-disabled': node.isDisabled,
'vue-treeselect__multi-value-item-new': node.isNew,
}
const customValueLabelRenderer = instance.$scopedSlots['value-label']
const customValueLabelRenderer = instance.$slots['value-label']
const labelRenderer = customValueLabelRenderer ? customValueLabelRenderer({ node }) : node.label

return (
Expand Down
2 changes: 1 addition & 1 deletion src/components/Option.vue
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@
: NaN
const labelClassName = 'vue-treeselect__label'
const countClassName = 'vue-treeselect__count'
const customLabelRenderer = instance.$scopedSlots['option-label']
const customLabelRenderer = instance.$slots['option-label']

if (customLabelRenderer) return customLabelRenderer({
node,
Expand Down
2 changes: 1 addition & 1 deletion src/components/SingleValue.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
const { instance } = this
const node = instance.selectedNodes[0]

const customValueLabelRenderer = instance.$scopedSlots['value-label']
const customValueLabelRenderer = instance.$slots['value-label']
return customValueLabelRenderer
? customValueLabelRenderer({ node })
: node.label
Expand Down
32 changes: 16 additions & 16 deletions src/components/Treeselect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,22 @@
mixins: [ treeselectMixin ],

computed: {
wrapperClass() {
return {
'vue-treeselect': true,
'vue-treeselect--single': this.single,
'vue-treeselect--multi': this.multiple,
'vue-treeselect--searchable': this.searchable,
'vue-treeselect--disabled': this.disabled,
'vue-treeselect--focused': this.trigger.isFocused,
'vue-treeselect--has-value': this.hasValue,
'vue-treeselect--open': this.menu.isOpen,
'vue-treeselect--open-above': this.menu.placement === 'top',
'vue-treeselect--open-below': this.menu.placement === 'bottom',
'vue-treeselect--branch-nodes-disabled': this.disableBranchNodes,
'vue-treeselect--append-to-body': this.appendToBody,
}
},
wrapperClass() {
return {
'vue-treeselect': true,
'vue-treeselect--single': this.single,
'vue-treeselect--multi': this.multiple,
'vue-treeselect--searchable': this.searchable,
'vue-treeselect--disabled': this.disabled,
'vue-treeselect--focused': this.trigger.isFocused,
'vue-treeselect--has-value': this.hasValue,
'vue-treeselect--open': this.menu.isOpen,
'vue-treeselect--open-above': this.menu.placement === 'top',
'vue-treeselect--open-below': this.menu.placement === 'bottom',
'vue-treeselect--branch-nodes-disabled': this.disableBranchNodes,
'vue-treeselect--append-to-body': this.appendToBody,
}
},
},

render() {
Expand Down
Loading