35 lines
1011 B
JavaScript
35 lines
1011 B
JavaScript
Component({
|
|
properties: {
|
|
pets: { type: Array, value: [] },
|
|
selected: { type: Array, value: [] },
|
|
disabled: { type: Boolean, value: false },
|
|
},
|
|
data: { viewPets: [] },
|
|
observers: {
|
|
"pets,selected": function (pets, selected) {
|
|
this.setData({
|
|
viewPets: (pets || []).map((p) => ({
|
|
...p,
|
|
chosen: (selected || []).includes(p.id),
|
|
})),
|
|
});
|
|
},
|
|
},
|
|
methods: {
|
|
toggle(e) {
|
|
if (this.data.disabled) return;
|
|
const id = e.currentTarget.dataset.id;
|
|
const selected = this.data.selected.includes(id)
|
|
? this.data.selected.filter((x) => x !== id)
|
|
: [...this.data.selected, id];
|
|
this.triggerEvent("change", { selected });
|
|
},
|
|
selectAll() {
|
|
if (this.data.disabled) return;
|
|
const ids = this.data.pets.map((pet) => pet.id);
|
|
const allSelected = ids.every((id) => this.data.selected.includes(id));
|
|
this.triggerEvent("change", { selected: allSelected ? [] : ids });
|
|
},
|
|
},
|
|
});
|