) {
if (changedProperties.has("value")) {
this.loadFromValue();
}
}
private loadFromValue() {
// Always reset all days first
this.days = this.days.map((d) => ({ ...d, selected: false }));
// If no value, we're done
if (!this.value || this.value.length === 0) return;
// Load from value
for (const meeting of this.value) {
const dayIndex = this.days.findIndex((d) => d.day === meeting.day);
if (dayIndex !== -1) {
this.days = this.days.map((d, i) =>
i === dayIndex ? { ...d, selected: true } : d,
);
}
}
}
private toggleDay(index: number) {
this.days = this.days.map((d, i) =>
i === index ? { ...d, selected: !d.selected } : d,
);
this.dispatchChange();
}
private dispatchChange() {
const selectedDays = this.days
.filter((d) => d.selected)
.map((d) => ({
day: d.day,
startTime: "",
endTime: "",
label: d.day,
}));
this.dispatchEvent(
new CustomEvent("change", {
detail: selectedDays,
bubbles: true,
composed: true,
}),
);
}
override render() {
return html`
${this.days.map(
(day, index) => html`
`,
)}
Click on days to select when this class meets
`;
}
}