GithubHelp home page GithubHelp logo

megafetis / vue3-treeselect Goto Github PK

View Code? Open in Web Editor NEW
95.0 8.0 116.0 1.23 MB

tree select component for vue 3 (next)

Home Page: https://megafetis.github.io/vue3-treeselect-demo/

License: MIT License

Vue 30.72% JavaScript 49.67% Less 19.61%
vue3 tree select tree-select

vue3-treeselect's Introduction

vue3-treeselect

npm Coverage npm monthly downloads Known vulnerabilities License

A multi-select component with nested options support for Vue 3. Thank to riophae and his sources and library for vue 2 taken as basis.

Breaking changes from his library:

  • property value => modelValue
  • event input => updated:modelValue
  • Now use slots with <template>

Vue-Treeselect Screenshot

Features

  • Single & multiple select with nested options support
  • Fuzzy matching
  • Async searching
  • Delayed loading (load data of deep level options only when needed)
  • Keyboard support (navigate using Arrow Up & Arrow Down keys, select option using Enter key, etc.)
  • Rich options & highly customizable
  • Supports a wide range of browsers (see below)
  • RTL support

Requires Vue 3.0+

Getting Started

It's recommended to install vue3-treeselect via npm, and build your app using a bundler like webpack.

npm install --save vue3-treeselect

This example shows how to integrate vue3-treeselect with your Vue SFCs.

<!-- Vue SFC -->
<template>
  <div id="app">
    <treeselect v-model="value" :multiple="true" :options="options" />
  </div>
</template>

<script>
  // import the component
  import Treeselect from 'vue3-treeselect'
  // import the styles
  import 'vue3-treeselect/dist/vue3-treeselect.css'

  export default {
    // register the component
    components: { Treeselect },
    data() {
      return {
        // define the default value
        value: null,
        // define options
        options: [ {
          id: 'a',
          label: 'a',
          children: [ {
            id: 'aa',
            label: 'aa',
          }, {
            id: 'ab',
            label: 'ab',
          } ],
        }, {
          id: 'b',
          label: 'b',
        }, {
          id: 'c',
          label: 'c',
        } ],
      }
    },
  }
</script>

If you just don't want to use webpack or any other bundlers, you can simply include the standalone UMD build in your page. In this way, make sure Vue as a dependency is included before vue3-treeselect.

<html>
  <head>
    <!-- include Vue 2.x -->
    <script src="https://cdn.jsdelivr.net/npm/vue@next"></script>
    <!-- include vue-treeselect & its styles. you can change the version tag to better suit your needs. -->
    <script src="https://cdn.jsdelivr.net/npm/vue3-treeselect@^0.1.0/dist/vue3-treeselect.umd.min.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vue3-treeselect@^0.1.0/dist/vue3-treeselect.min.css">
  </head>
  <body>
    <div id="app">
      <treeselect v-model="value" :multiple="true" :options="options" />
    </div>
  </body>
  <script>
      createApp({
          data: {
            // define the default value
            value: null,
            // define options
            options: [ {
            id: 'a',
            label: 'a',
            children: [ {
                id: 'aa',
                label: 'aa',
            }, {
                id: 'ab',
                label: 'ab',
            } ],
            }, {
            id: 'b',
            label: 'b',
            }, {
            id: 'c',
            label: 'c',
            } ],
        },
      })
        .component('treeselect', VueTreeselect.Treeselect)
        .mount('#app')

  </script>
</html>

Documentation for vue 2 & Live Demo. Be careful with breaking changes above.

Visit the website

Note: please use a desktop browser since the website hasn't been optimized for mobile devices.

Browser Compatibility

  • Chrome
  • Edge
  • Firefox
  • Safari

It should function well on IE9, but the style can be slightly broken due to the lack of support of some relatively new CSS features, such as transition and animation. Nevertheless it should look 90% same as on modern browsers.

Bugs

You can open an issue.

Contributing

  1. Fork & clone the repo
  2. Install dependencies by yarn or npm install
  3. Check out a new branch
  4. npm run dev & hack
  5. Make sure npm test passes
  6. Push your changes & file a pull request

Credits

This project is inspired by vue-treeselect. Special thanks go to their respective authors!

Some icons used in this project:

License

Released under the MIT License.

vue3-treeselect's People

Contributors

megafetis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue3-treeselect's Issues

Vue warning after install

Getting vue warning after install.
runtime-core.esm-bundler.js?5c40:38 [Vue warn]: destroyed has been renamed to unmounted.
runtime-core.esm-bundler.js?5c40:38 [Vue warn]: Property "$createElement" was accessed during render but is not defined on instance.
runtime-core.esm-bundler.js?5c40:38 [Vue warn]: Failed to resolve component: transition-group

[Vue warn]: Property "$createElement" was accessed during render but is not defined on instance.

[Vue warn]: Property "$createElement" was accessed during render but is not defined on instance.
at
at <VueTreeselect class="tree-wrapper" modelValue=null onUpdate:modelValue=fn ... >
at
at <ProductSort onVnodeUnmounted=fn ref=Ref< undefined > key=null ... >

[Vue warn]: Property "$createElement" was accessed during render but is not defined on instance.
at
at
at
at <VueTreeselect class="tree-wrapper" modelValue=null onUpdate:modelValue=fn ... >

[Vue warn]: Property "$createElement" was accessed during render but is not defined on instance.
at
at <VueTreeselect class="tree-wrapper" modelValue=null onUpdate:modelValue=fn ... >

Vue3-treeslelect displays too many warnings. What is the problem? How to fix it?

multiple select : v-model init value not working

Hi,

If multiple = true, the v-model value can not be initialized with a value other than null in setup/data function. For example:

<template>
  <treeselect v-model="value" multiple :options="options" />
</template>
<script>
export default {
  data() {
    return {
        value: ['b'],
        options: [ {
          id: 'a',
          label: 'a',
          children: [ {
            id: 'aa',
            label: 'aa',
          }, {
            id: 'ab',
            label: 'ab',
          } ],
        }, {
          id: 'b',
          label: 'b',
        }, {
          id: 'c',
          label: 'c',
        } ],
      }
  }
}
</script>

does not work and throws the following error :
Uncaught (in promise) TypeError: Cannot read property 'id' of undefined
at Proxy.isSelected (vue3-treeselect.common.js:5559)

Checking for null in the isSelected function seems to be enough to fix this :

    isSelected: function isSelected(node) {
      // whether a node is selected (single-select mode) or fully-checked (multi-select mode)
      return node && this.forest.selectedNodeMap[node.id] === true;
    },

Can you fix it please ?

Thanks in advance.

Failed to resolve component: transition-group

When I run my program, the console shows some warn messages as followings:

[Vue warn]: Failed to resolve component: transition
at
at <VueTreeselect multiple=true options= (1) [Proxy] noResultsText="No results..." ... >
at
at <Home onVnodeUnmounted=fn ref=Ref< undefined > >
at
at
[Vue warn]: Failed to resolve component: transition-group
at
at
at <VueTreeselect multiple=true options= (1) [Proxy] noResultsText="No results..." ... >
at
at <Home onVnodeUnmounted=fn ref=Ref< Proxy {_: , $: , $el: , $data: , $props: , โ€ฆ} > >
at
at

How can I fix it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.