UNPKG

vue-multi-select

Version:

A multi/single select component made in vue

235 lines (232 loc) 5.86 kB
// eslint-disable-next-line import 'spectre.css/dist/spectre.min.css'; // eslint-disable-next-line import 'spectre.css/dist/spectre-icons.min.css'; // eslint-disable-next-line import 'spectre.css/dist/spectre-exp.min.css'; import vueMultiSelect from '@/components/vueMultiSelect/vue-multi-select.vue'; export default { name: 'doc', components: { vueMultiSelect }, data() { return { string: 'string', example1: { btnLabel: (values) => `A simple vue multi select (${values.length})`, selectOptions: [{ name: 'first group', list: [ { name: '0' }, { name: '2' }, { name: '3' }, { name: '8' }, { name: '9' }, { name: '11' }, { name: '13' }, { name: '14' }, { name: '15' }, { name: '18' }, ], }, { name: 'second group', list: [ { name: '21' }, { name: '22' }, { name: '24' }, { name: '27' }, { name: '28' }, { name: '29' }, { name: '31' }, { name: '33' }, { name: '35' }, { name: '39' }, ], }], filters: [ { nameAll: 'Select all', nameNotAll: 'Deselect all', func() { return true; }, }, { nameAll: 'select <= 10', nameNotAll: 'Deselect <= 10', func(elem) { return elem.name <= 10; }, }, { nameAll: 'Select contains 2', nameNotAll: 'Deselect contains 2', func(elem) { return elem.name.indexOf('2') !== -1; }, }, ], options: { multi: true, groups: true, }, values: [], isActive: 'code', }, example2: { btnLabel: (values) => (values.length > 0 ? values[0].name : 'Select...'), selectOptions: [ { name: '0' }, { name: '2' }, { name: '3' }, { name: '8' }, { name: '9' }, { name: '11' }, { name: '13' }, { name: '14' }, { name: '15' }, { name: '18' }, ], options: { }, values: [], isActive: 'code', }, example3: { selectOptions: [{ title: 'part one', elements: [ { label: '0', disabled: true }, { label: '2' }, { label: '3' }, { label: '8' }, { label: '9' }, { label: '11' }, { label: '13' }, { label: '14' }, { label: '15' }, { label: '18' }, ], }, { title: 'part two', elements: [ { label: '23' }, { label: '25' }, { label: '31' }, { label: '42' }, { label: '56' }, { label: '76' }, { label: '82' }, { label: '42' }, { label: '13' }, { label: '21' }, ], }], filters: [{ nameAll: 'Select all', nameNotAll: 'Deselect all', func() { return true; }, }], options: { multi: true, groups: true, labelName: 'label', labelList: 'elements', groupName: 'title', labelHtml: 'labelHtml', cssSelected: (option) => (option.selected ? { 'background-color': '#5764c6' } : ''), }, values: [ { label: '2' }, { label: '3' }, ], isActive: 'code', }, example4: { selectOptions: [{ title: 'part one', elements: [ '0', '2', '3', '8', '9', '11', '13', '14', '15', '18', ], }, { title: 'part two', elements: [ '23', '25', '31', '42', '56', '76', '82', '42', '13', '21', ], }], filters: [{ nameAll: 'Select all', nameNotAll: 'Deselect all', func() { return true; }, }], options: { multi: true, groups: true, labelList: 'elements', groupName: 'title', cssSelected: (option) => (option.selected ? { 'background-color': '#5764c6' } : ''), }, position: 'top-right', values: ['0', '2'], isActive: 'code', }, }; }, methods: { openManually() { this.$refs.multiSelect.openMultiSelect(); }, open() { // eslint-disable-next-line console.log('open'); }, close() { // eslint-disable-next-line console.log('close'); }, setActive(e, label) { e.isActive = label; }, reloadFunction3() { this.example3.values = [ { label: '2' }, { label: '3' }, ]; }, reloadFunction4() { this.example4.values = ['0', '2']; }, randomize(e) { const list = e.options.labelList || 'list'; const name = e.options.labelName || 'name'; for (let i = 0; i < e.selectOptions.length; i += 1) { if (e.selectOptions[i][list]) { for (let j = 0; j < e.selectOptions[i][list].length; j += 1) { e.selectOptions[i][list][j][name] = String(Math.floor(Math.random() * 100) + 1); } } else { e.selectOptions[i][name] = String(Math.floor(Math.random() * 100) + 1); } } }, }, };