diff --git a/projects/demos/app/demo-app.module.ts b/projects/demos/app/demo-app.module.ts
index ef61b3805..91dd69ae1 100644
--- a/projects/demos/app/demo-app.module.ts
+++ b/projects/demos/app/demo-app.module.ts
@@ -303,13 +303,13 @@ import { ClipboardModule } from 'ngx-clipboard';
}
},
{
- path: 'group-month-view-events',
+ path: 'group-similar-events',
loadChildren: () =>
- import('./demo-modules/group-month-view-events/module').then(
+ import('./demo-modules/group-similar-events/module').then(
m => m.DemoModule
),
data: {
- label: 'Group month view events'
+ label: 'Group similar events'
}
},
{
diff --git a/projects/demos/app/demo-modules/group-month-view-events/component.ts b/projects/demos/app/demo-modules/group-month-view-events/component.ts
deleted file mode 100644
index ad280ccee..000000000
--- a/projects/demos/app/demo-modules/group-month-view-events/component.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { Component, ChangeDetectionStrategy } from '@angular/core';
-import {
- CalendarEvent,
- CalendarMonthViewDay,
- CalendarView
-} from 'angular-calendar';
-import { colors } from '../demo-utils/colors';
-
-@Component({
- selector: 'mwl-demo-component',
- changeDetection: ChangeDetectionStrategy.OnPush,
- templateUrl: 'template.html',
- styles: [
- `
- .cell-totals {
- margin: 5px;
- text-align: center;
- }
- .badge {
- margin-right: 5px;
- }
- `
- ]
-})
-export class DemoComponent {
- view: CalendarView = CalendarView.Month;
-
- viewDate: Date = new Date();
-
- events: CalendarEvent[] = [
- {
- title: 'Event 1',
- color: colors.yellow,
- start: new Date(),
- meta: {
- type: 'warning'
- }
- },
- {
- title: 'Event 2',
- color: colors.yellow,
- start: new Date(),
- meta: {
- type: 'warning'
- }
- },
- {
- title: 'Event 3',
- color: colors.blue,
- start: new Date(),
- meta: {
- type: 'info'
- }
- },
- {
- title: 'Event 4',
- color: colors.red,
- start: new Date(),
- meta: {
- type: 'danger'
- }
- },
- {
- title: 'Event 5',
- color: colors.red,
- start: new Date(),
- meta: {
- type: 'danger'
- }
- }
- ];
-
- beforeMonthViewRender({ body }: { body: CalendarMonthViewDay[] }): void {
- body.forEach(cell => {
- const groups: any = {};
- cell.events.forEach((event: CalendarEvent<{ type: string }>) => {
- groups[event.meta.type] = groups[event.meta.type] || [];
- groups[event.meta.type].push(event);
- });
- cell['eventGroups'] = Object.entries(groups);
- });
- }
-}
diff --git a/projects/demos/app/demo-modules/group-month-view-events/template.html b/projects/demos/app/demo-modules/group-month-view-events/template.html
deleted file mode 100644
index 267558cda..000000000
--- a/projects/demos/app/demo-modules/group-month-view-events/template.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
- 0"
- >{{ day.badgeTotal }}
- {{ day.date | calendarDate:'monthViewDayNumber':locale }}
-
-
-
- {{ group[1].length }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/projects/demos/app/demo-modules/group-similar-events/component.ts b/projects/demos/app/demo-modules/group-similar-events/component.ts
new file mode 100644
index 000000000..e907693f6
--- /dev/null
+++ b/projects/demos/app/demo-modules/group-similar-events/component.ts
@@ -0,0 +1,135 @@
+import { Component, ChangeDetectionStrategy, OnInit } from '@angular/core';
+import {
+ CalendarEvent,
+ CalendarMonthViewDay,
+ CalendarView
+} from 'angular-calendar';
+import { colors } from '../demo-utils/colors';
+import { isSameMinute, startOfDay } from 'date-fns';
+
+interface EventGroupMeta {
+ type: string;
+}
+
+@Component({
+ selector: 'mwl-demo-component',
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ templateUrl: './template.html',
+ styles: [
+ `
+ .cell-totals {
+ margin: 5px;
+ text-align: center;
+ }
+ .badge {
+ margin-right: 5px;
+ }
+ `
+ ]
+})
+export class DemoComponent implements OnInit {
+ view: CalendarView = CalendarView.Month;
+
+ viewDate: Date = new Date();
+
+ events: CalendarEvent[] = [
+ {
+ title: 'Event 1',
+ color: colors.yellow,
+ start: startOfDay(new Date()),
+ meta: {
+ type: 'warning'
+ }
+ },
+ {
+ title: 'Event 2',
+ color: colors.yellow,
+ start: startOfDay(new Date()),
+ meta: {
+ type: 'warning'
+ }
+ },
+ {
+ title: 'Event 3',
+ color: colors.blue,
+ start: startOfDay(new Date()),
+ meta: {
+ type: 'info'
+ }
+ },
+ {
+ title: 'Event 4',
+ color: colors.red,
+ start: startOfDay(new Date()),
+ meta: {
+ type: 'danger'
+ }
+ },
+ {
+ title: 'Event 5',
+ color: colors.red,
+ start: startOfDay(new Date()),
+ meta: {
+ type: 'danger'
+ }
+ }
+ ];
+
+ groupedSimilarEvents: CalendarEvent[] = [];
+
+ ngOnInit() {
+ // group any events together that have the same type and dates
+ // use for when you have a lot of events on the week or day view at the same time
+ this.groupedSimilarEvents = [];
+ const processedEvents = new Set();
+ this.events.forEach(event => {
+ if (processedEvents.has(event)) {
+ return;
+ }
+ const similarEvents = this.events.filter(otherEvent => {
+ return (
+ otherEvent !== event &&
+ !processedEvents.has(otherEvent) &&
+ isSameMinute(otherEvent.start, event.start) &&
+ (isSameMinute(otherEvent.end, event.end) ||
+ (!otherEvent.end && !event.end)) &&
+ otherEvent.color.primary === event.color.primary &&
+ otherEvent.color.secondary === event.color.secondary
+ );
+ });
+ processedEvents.add(event);
+ similarEvents.forEach(otherEvent => {
+ processedEvents.add(otherEvent);
+ });
+ if (similarEvents.length > 0) {
+ this.groupedSimilarEvents.push({
+ title: `${similarEvents.length + 1} events`,
+ color: event.color,
+ start: event.start,
+ end: event.end,
+ meta: {
+ groupedEvents: [event, ...similarEvents]
+ }
+ });
+ } else {
+ this.groupedSimilarEvents.push(event);
+ }
+ });
+ }
+
+ beforeMonthViewRender({
+ body
+ }: {
+ body: Array>;
+ }): void {
+ // month view has a different UX from the week and day view so we only really need to group by the type
+ body.forEach(cell => {
+ const groups = {};
+ cell.events.forEach((event: CalendarEvent) => {
+ groups[event.meta.type] = groups[event.meta.type] || [];
+ groups[event.meta.type].push(event);
+ });
+ cell['eventGroups'] = Object.entries(groups);
+ });
+ }
+}
diff --git a/projects/demos/app/demo-modules/group-month-view-events/module.ts b/projects/demos/app/demo-modules/group-similar-events/module.ts
similarity index 89%
rename from projects/demos/app/demo-modules/group-month-view-events/module.ts
rename to projects/demos/app/demo-modules/group-similar-events/module.ts
index 2e487440e..efc9575df 100644
--- a/projects/demos/app/demo-modules/group-month-view-events/module.ts
+++ b/projects/demos/app/demo-modules/group-similar-events/module.ts
@@ -5,6 +5,7 @@ import { CalendarModule, DateAdapter } from 'angular-calendar';
import { DemoUtilsModule } from '../demo-utils/module';
import { DemoComponent } from './component';
import { adapterFactory } from 'angular-calendar/date-adapters/date-fns';
+import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
@NgModule({
imports: [
@@ -13,6 +14,7 @@ import { adapterFactory } from 'angular-calendar/date-adapters/date-fns';
provide: DateAdapter,
useFactory: adapterFactory
}),
+ NgbPopoverModule,
DemoUtilsModule,
RouterModule.forChild([{ path: '', component: DemoComponent }])
],
diff --git a/projects/demos/app/demo-modules/group-month-view-events/sources.ts b/projects/demos/app/demo-modules/group-similar-events/sources.ts
similarity index 100%
rename from projects/demos/app/demo-modules/group-month-view-events/sources.ts
rename to projects/demos/app/demo-modules/group-similar-events/sources.ts
diff --git a/projects/demos/app/demo-modules/group-similar-events/template.html b/projects/demos/app/demo-modules/group-similar-events/template.html
new file mode 100644
index 000000000..062dc9095
--- /dev/null
+++ b/projects/demos/app/demo-modules/group-similar-events/template.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+ 0"
+ >{{ day.badgeTotal }}
+ {{ day.date | calendarDate:'monthViewDayNumber':locale }}
+
+
+
+ {{ group[1].length }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ &ngsp;
+
+
+
+
+
+
+
+
+
+
+
+
+
+