|
5 | 5 | :collapsible="collapsible" |
6 | 6 | :multiple="multiple" |
7 | 7 | :animation-duration="animationDuration" |
8 | | - v-model:selected-items="selectedItems" |
| 8 | + v-model:selected-items="selectedCompanies" |
9 | 9 | id="accordion-container" |
10 | 10 | item-title-template="itemTitle" |
11 | 11 | > |
|
49 | 49 | <span class="caption">Selected Items</span> |
50 | 50 | <DxTagBox |
51 | 51 | :data-source="companies" |
52 | | - v-model:value="selectedItems" |
| 52 | + v-model:value="selectedCompaniesIds" |
53 | 53 | :input-attr="{ 'aria-label': 'Company' }" |
54 | 54 | :disabled="!multiple" |
55 | 55 | display-expr="CompanyName" |
| 56 | + value-expr="ID" |
56 | 57 | /> |
57 | 58 | </div> |
58 | 59 | </div> |
59 | 60 | </div> |
60 | 61 | </template> |
| 62 | + |
61 | 63 | <script setup lang="ts"> |
62 | | -import { ref } from 'vue'; |
| 64 | +import { ref, computed } from 'vue'; |
63 | 65 | import DxAccordion from 'devextreme-vue/accordion'; |
64 | 66 | import DxTagBox from 'devextreme-vue/tag-box'; |
65 | 67 | import DxCheckBox from 'devextreme-vue/check-box'; |
66 | 68 | import DxSlider, { DxTooltip, DxLabel } from 'devextreme-vue/slider'; |
67 | 69 | import CustomTitle from './CustomTitle.vue'; |
68 | 70 | import CustomItem from './CustomItem.vue'; |
| 71 | +import { type CompanyData } from './data.ts'; |
69 | 72 | import service from './data.ts'; |
70 | 73 |
|
71 | | -const companies = service.getCompanies(); |
72 | | -const selectedItems = ref([companies[0]]); |
73 | 74 | const multiple = ref(false); |
74 | 75 | const collapsible = ref(false); |
75 | 76 | const animationDuration = ref(300); |
| 77 | +const companies = service.getCompanies(); |
| 78 | +const selectedCompaniesIds = ref([companies[0].ID]); |
| 79 | +
|
| 80 | +const getCompaniesBySelectedIds = () => { |
| 81 | + const selectedIds = new Set(selectedCompaniesIds.value); |
| 82 | + return companies.filter((company: CompanyData) => selectedIds.has(company.ID)); |
| 83 | +}; |
| 84 | +const setSelectedCompanies = (companies: CompanyData[]) => { |
| 85 | + selectedCompaniesIds.value = companies.map((item) => item.ID); |
| 86 | +}; |
| 87 | +const selectedCompanies = computed({ |
| 88 | + get: getCompaniesBySelectedIds, |
| 89 | + set: setSelectedCompanies, |
| 90 | +}); |
| 91 | +
|
76 | 92 | </script> |
77 | 93 | <style scoped> |
78 | 94 | #accordion { |
|
0 commit comments