Skip to content

Commit 2a39d44

Browse files
committed
limit per calendar
1 parent 88e247a commit 2a39d44

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/card.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,10 @@ export class WeekPlannerCard extends LitElement {
794794
if (calendarSorting < this._calendarEvents[eventKey].calendarSorting) {
795795
this._calendarEvents[eventKey].calendarSorting = calendarSorting;
796796
}
797+
if (calendar.maxEvents > 0 && this._calendarEvents[eventKey].calendarMaxEvents < calendar.maxEvents) {
798+
this._calendarEvents[eventKey].calendarMaxEvents = calendar.maxEvents;
799+
this._calendarEvents[eventKey].calendarMaxEventsCalendar = calendar.name;
800+
}
797801
} else {
798802
this._calendarEvents[eventKey] = {
799803
summary: this._filterEventSummary(title ?? null, calendar),
@@ -809,6 +813,8 @@ export class WeekPlannerCard extends LitElement {
809813
calendars: [calendar.entity],
810814
calendarSorting: calendarSorting,
811815
calendarNames: [calendar.name],
816+
calendarMaxEvents: calendar.maxEvents ?? 0,
817+
calendarMaxEventsCalendar: calendar.name,
812818
class: this._getEventClass(startDate, endDate, fullDay)
813819
}
814820
this._events[dateKey].push(eventKey);
@@ -926,7 +932,24 @@ export class WeekPlannerCard extends LitElement {
926932
return this._calendarEvents[event1].start > this._calendarEvents[event2].start ? 1 : -1;
927933
});
928934

929-
const previousNumberOfEvents = numberOfEvents;
935+
let matchingEventsCount = {};
936+
events = events.filter((event, index, self) => {
937+
let limit = this._calendarEvents[event].calendarMaxEvents;
938+
if (limit === 0) {
939+
return true; // no limit set
940+
}
941+
942+
let limitingCalendar = this._calendarEvents[event].calendarMaxEventsCalendar;
943+
if (!(limitingCalendar in matchingEventsCount)) {
944+
matchingEventsCount[limitingCalendar] = 0;
945+
}
946+
if (matchingEventsCount[limitingCalendar] < limit) {
947+
matchingEventsCount[limitingCalendar]++;
948+
return true;
949+
}
950+
return false;
951+
});
952+
930953
numberOfEvents += events.length;
931954

932955
if (this._maxEvents > 0 && numberOfEvents > this._maxEvents) {

src/editor.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class WeekPlannerCardEditor extends LitElement {
5050
${this.addTextField('calendars.' + index + '.filter', 'Filter events (regex)')}
5151
${this.addTextField('calendars.' + index + '.filterText', 'Filter event text (regex)')}
5252
${this.addBooleanField('calendars.' + index + '.hideInLegend', 'Hide in legend')}
53+
${this.addTextField('calendars.' + index + '.maxEvents', 'Maximum number of events from this calendar (0 is no maximum)', 'number', 0)}
5354
${this.addButton('Remove calendar', 'mdi:trash-can', () => {
5455
const config = JSON.parse(JSON.stringify(this._config));
5556
if (config.calendars.length === 1) {

0 commit comments

Comments
 (0)