Skip to content

Commit 35ae95a

Browse files
author
Matt Lewis
committed
feat: allow calendar-utils functions to be overridden
BREAKING CHANGE: if not using `CalendarModule.forRoot()` you must explicitly add the `CalendarUtils` provider to your module declaration Closes #199
1 parent 423a7f6 commit 35ae95a

16 files changed

+138
-25
lines changed

demos/demo-app.module.ts

+8
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import * as customTemplates from './demo-modules/custom-templates';
4242
import * as groupMonthViewEvents from './demo-modules/group-month-view-events';
4343
import * as contextMenu from './demo-modules/context-menu';
4444
import * as weekViewMinutePrecision from './demo-modules/week-view-minute-precision';
45+
import * as extraMonthViewWeeks from './demo-modules/extra-month-view-weeks';
4546

4647
@NgModule({
4748
declarations: [DemoAppComponent],
@@ -81,6 +82,7 @@ import * as weekViewMinutePrecision from './demo-modules/week-view-minute-precis
8182
groupMonthViewEvents.DemoModule,
8283
contextMenu.DemoModule,
8384
weekViewMinutePrecision.DemoModule,
85+
extraMonthViewWeeks.DemoModule,
8486
RouterModule.forRoot([{
8587
path: 'kitchen-sink',
8688
component: kitchenSink.DemoComponent,
@@ -261,6 +263,12 @@ import * as weekViewMinutePrecision from './demo-modules/week-view-minute-precis
261263
data: {
262264
label: 'Week view minute precision'
263265
}
266+
}, {
267+
path: 'extra-month-view-weeks',
268+
component: extraMonthViewWeeks.DemoComponent,
269+
data: {
270+
label: 'Extra month view weeks'
271+
}
264272
}, {
265273
path: '**',
266274
redirectTo: 'kitchen-sink'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Component, ChangeDetectionStrategy } from '@angular/core';
2+
import { CalendarEvent, CalendarUtils } from 'angular-calendar';
3+
import { addDays, addHours, startOfDay, subWeeks, startOfMonth, endOfMonth, addWeeks } from 'date-fns';
4+
import { GetMonthViewArgs, MonthView, getMonthView } from 'calendar-utils';
5+
6+
class MyCalendarUtils extends CalendarUtils {
7+
getMonthView(args: GetMonthViewArgs): MonthView {
8+
args.viewStart = subWeeks(startOfMonth(args.viewDate), 1);
9+
args.viewEnd = addWeeks(endOfMonth(args.viewDate), 1);
10+
return getMonthView(args);
11+
}
12+
}
13+
14+
@Component({
15+
selector: 'mwl-demo-component',
16+
changeDetection: ChangeDetectionStrategy.OnPush,
17+
templateUrl: 'template.html',
18+
providers: [{
19+
provide: CalendarUtils,
20+
useClass: MyCalendarUtils
21+
}]
22+
})
23+
export class DemoComponent {
24+
25+
viewDate: Date = new Date();
26+
27+
events: CalendarEvent[] = [];
28+
29+
}
30+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './module';
2+
export * from './component';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { NgModule } from '@angular/core';
2+
import { CommonModule } from '@angular/common';
3+
import { CalendarModule } from 'angular-calendar';
4+
import { DemoUtilsModule } from '../demo-utils/module';
5+
import { DemoComponent } from './component';
6+
7+
@NgModule({
8+
imports: [
9+
CommonModule,
10+
CalendarModule.forRoot(),
11+
DemoUtilsModule
12+
],
13+
declarations: [
14+
DemoComponent
15+
],
16+
exports: [
17+
DemoComponent
18+
]
19+
})
20+
export class DemoModule {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<mwl-calendar-month-view
2+
[viewDate]="viewDate"
3+
[events]="events">
4+
</mwl-calendar-month-view>

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@
144144
"dependencies": {
145145
"angular-draggable-droppable": "^1.0.1",
146146
"angular-resizable-element": "^1.0.0",
147-
"calendar-utils": "0.0.47",
147+
"calendar-utils": "0.0.48",
148148
"date-fns": "^1.15.1",
149149
"positioning": "^1.0.4"
150150
}

src/calendar.module.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { CalendarDatePipe } from './pipes/calendarDate.pipe';
2424
import { CalendarEventTitlePipe } from './pipes/calendarEventTitle.pipe';
2525
import { CalendarEventTitleFormatter } from './providers/calendarEventTitleFormatter.provider';
2626
import { CalendarDateFormatter } from './providers/calendarDateFormatter.provider';
27+
import { CalendarUtils } from './providers/calendarUtils.provider';
2728

2829
/**
2930
* The main module of this library. Example usage:
@@ -105,7 +106,8 @@ export class CalendarModule {
105106
providers: [
106107
CalendarEventTitleFormatter,
107108
CalendarDateFormatter,
108-
DraggableHelper
109+
DraggableHelper,
110+
CalendarUtils
109111
]
110112
};
111113

src/components/day/calendarDayView.component.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import {
1212
TemplateRef
1313
} from '@angular/core';
1414
import {
15-
getDayView,
16-
getDayViewHourGrid,
1715
CalendarEvent,
1816
DayView,
1917
DayViewHour,
@@ -27,6 +25,7 @@ import addMinutes from 'date-fns/add_minutes';
2725
import { CalendarDragHelper } from '../../providers/calendarDragHelper.provider';
2826
import { CalendarResizeHelper } from '../../providers/calendarResizeHelper.provider';
2927
import { CalendarEventTimesChangedEvent } from '../../interfaces/calendarEventTimesChangedEvent.interface';
28+
import { CalendarUtils } from '../../providers/calendarUtils.provider';
3029

3130
/**
3231
* @hidden
@@ -248,7 +247,7 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
248247
/**
249248
* @hidden
250249
*/
251-
constructor(private cdr: ChangeDetectorRef, @Inject(LOCALE_ID) locale: string) {
250+
constructor(private cdr: ChangeDetectorRef, private utils: CalendarUtils, @Inject(LOCALE_ID) locale: string) {
252251
this.locale = locale;
253252
}
254253

@@ -373,7 +372,7 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
373372
}
374373

375374
private refreshHourGrid(): void {
376-
this.hours = getDayViewHourGrid({
375+
this.hours = this.utils.getDayViewHourGrid({
377376
viewDate: this.viewDate,
378377
hourSegments: this.hourSegments,
379378
dayStart: {
@@ -393,7 +392,7 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
393392
}
394393

395394
private refreshView(): void {
396-
this.view = getDayView({
395+
this.view = this.utils.getDayView({
397396
events: this.events,
398397
viewDate: this.viewDate,
399398
hourSegments: this.hourSegments,

src/components/month/calendarMonthView.component.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ import {
1515
CalendarEvent,
1616
WeekDay,
1717
MonthView,
18-
getWeekViewHeader,
19-
getMonthView,
2018
MonthViewDay
2119
} from 'calendar-utils';
2220
import { Subject } from 'rxjs/Subject';
@@ -31,6 +29,7 @@ import getYear from 'date-fns/get_year';
3129
import differenceInSeconds from 'date-fns/difference_in_seconds';
3230
import addSeconds from 'date-fns/add_seconds';
3331
import { CalendarEventTimesChangedEvent } from '../../interfaces/calendarEventTimesChangedEvent.interface';
32+
import { CalendarUtils } from '../../providers/calendarUtils.provider';
3433

3534
/**
3635
* Shows all events on a given month. Example usage:
@@ -189,7 +188,7 @@ export class CalendarMonthViewComponent implements OnChanges, OnInit, OnDestroy
189188
/**
190189
* @hidden
191190
*/
192-
constructor(private cdr: ChangeDetectorRef, @Inject(LOCALE_ID) locale: string) {
191+
constructor(private cdr: ChangeDetectorRef, private utils: CalendarUtils, @Inject(LOCALE_ID) locale: string) {
193192
this.locale = locale;
194193
}
195194

@@ -262,15 +261,15 @@ export class CalendarMonthViewComponent implements OnChanges, OnInit, OnDestroy
262261
}
263262

264263
private refreshHeader(): void {
265-
this.columnHeaders = getWeekViewHeader({
264+
this.columnHeaders = this.utils.getWeekViewHeader({
266265
viewDate: this.viewDate,
267266
weekStartsOn: this.weekStartsOn,
268267
excluded: this.excludeDays
269268
});
270269
}
271270

272271
private refreshBody(): void {
273-
this.view = getMonthView({
272+
this.view = this.utils.getMonthView({
274273
events: this.events,
275274
viewDate: this.viewDate,
276275
weekStartsOn: this.weekStartsOn,

src/components/week/calendarWeekView.component.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@ import {
1717
WeekDay,
1818
CalendarEvent,
1919
WeekViewEvent,
20-
WeekViewEventRow,
21-
getWeekViewHeader,
22-
getWeekView
20+
WeekViewEventRow
2321
} from 'calendar-utils';
2422
import { ResizeEvent } from 'angular-resizable-element';
2523
import addDays from 'date-fns/add_days';
2624
import { CalendarDragHelper } from '../../providers/calendarDragHelper.provider';
2725
import { CalendarResizeHelper } from '../../providers/calendarResizeHelper.provider';
2826
import { CalendarEventTimesChangedEvent } from '../../interfaces/calendarEventTimesChangedEvent.interface';
27+
import { CalendarUtils } from '../../providers/calendarUtils.provider';
2928

3029
/**
3130
* Shows all events on a given week. Example usage:
@@ -185,7 +184,7 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
185184
/**
186185
* @hidden
187186
*/
188-
constructor(private cdr: ChangeDetectorRef, @Inject(LOCALE_ID) locale: string) {
187+
constructor(private cdr: ChangeDetectorRef, private utils: CalendarUtils, @Inject(LOCALE_ID) locale: string) {
189188
this.locale = locale;
190189
}
191190

@@ -314,15 +313,15 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
314313
}
315314

316315
private refreshHeader(): void {
317-
this.days = getWeekViewHeader({
316+
this.days = this.utils.getWeekViewHeader({
318317
viewDate: this.viewDate,
319318
weekStartsOn: this.weekStartsOn,
320319
excluded: this.excludeDays
321320
});
322321
}
323322

324323
private refreshBody(): void {
325-
this.eventRows = getWeekView({
324+
this.eventRows = this.utils.getWeekView({
326325
events: this.events,
327326
viewDate: this.viewDate,
328327
weekStartsOn: this.weekStartsOn,

src/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ export * from './providers/calendarEventTitleFormatter.provider';
22
export * from './providers/calendarMomentDateFormatter.provider';
33
export * from './providers/calendarNativeDateFormatter.provider';
44
export * from './providers/calendarDateFormatter.provider';
5+
export * from './providers/calendarUtils.provider';
56
export * from './interfaces/calendarDateFormatter.interface';
67
export * from './interfaces/calendarEventTimesChangedEvent.interface';
78
export * from './calendar.module';
89
export * from './components/day/calendarDayView.component';
910
export * from './components/month/calendarMonthView.component';
1011
export * from './components/week/calendarWeekView.component';
11-
export {CalendarEvent, EventAction as CalendarEventAction, MonthViewDay as CalendarMonthViewDay} from 'calendar-utils';
12+
export { CalendarEvent, EventAction as CalendarEventAction, MonthViewDay as CalendarMonthViewDay } from 'calendar-utils';
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Injectable } from '@angular/core';
2+
import {
3+
getMonthView,
4+
GetMonthViewArgs,
5+
MonthView,
6+
getWeekViewHeader,
7+
GetWeekViewHeaderArgs,
8+
WeekDay,
9+
getWeekView,
10+
GetWeekViewArgs,
11+
WeekViewEventRow,
12+
getDayView,
13+
GetDayViewArgs,
14+
DayView,
15+
getDayViewHourGrid,
16+
GetDayViewHourGridArgs,
17+
DayViewHour
18+
} from 'calendar-utils';
19+
20+
@Injectable()
21+
export class CalendarUtils {
22+
23+
getMonthView(args: GetMonthViewArgs): MonthView {
24+
return getMonthView(args);
25+
}
26+
27+
getWeekViewHeader(args: GetWeekViewHeaderArgs): WeekDay[] {
28+
return getWeekViewHeader(args);
29+
}
30+
31+
getWeekView(args: GetWeekViewArgs): WeekViewEventRow[] {
32+
return getWeekView(args);
33+
}
34+
35+
getDayView(args: GetDayViewArgs): DayView {
36+
return getDayView(args);
37+
}
38+
39+
getDayViewHourGrid(args: GetDayViewHourGridArgs): DayViewHour[] {
40+
return getDayViewHourGrid(args);
41+
}
42+
43+
}

test/calendarDayView.component.spec.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import {
1515
CalendarDateFormatter,
1616
CalendarModule,
1717
MOMENT,
18-
CalendarEventTimesChangedEvent
18+
CalendarEventTimesChangedEvent,
19+
CalendarUtils
1920
} from './../src';
2021
import { CalendarDayViewComponent } from './../src/components/day/calendarDayView.component';
2122
import { Subject } from 'rxjs/Rx';
@@ -34,6 +35,7 @@ describe('CalendarDayViewComponent component', () => {
3435
ExternalEventComponent
3536
],
3637
providers: [
38+
CalendarUtils,
3739
DraggableHelper,
3840
CalendarEventTitleFormatter,
3941
{provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter},

test/calendarMonthView.component.spec.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import {
1414
CalendarMomentDateFormatter,
1515
CalendarDateFormatter,
1616
CalendarModule,
17-
MOMENT
17+
MOMENT,
18+
CalendarUtils
1819
} from './../src';
1920
import { CalendarMonthViewComponent } from './../src/components/month/calendarMonthView.component';
2021
import { Subject } from 'rxjs/Subject';
@@ -27,6 +28,7 @@ describe('calendarMonthView component', () => {
2728
TestBed.configureTestingModule({
2829
imports: [BrowserAnimationsModule, CalendarModule],
2930
providers: [
31+
CalendarUtils,
3032
DraggableHelper,
3133
CalendarEventTitleFormatter,
3234
{provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter},

test/calendarWeekView.component.spec.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
CalendarDateFormatter,
1313
CalendarModule,
1414
MOMENT,
15-
CalendarEventTimesChangedEvent
15+
CalendarEventTimesChangedEvent,
16+
CalendarUtils
1617
} from '../src';
1718
import { CalendarWeekViewComponent } from '../src/components/week/calendarWeekView.component';
1819
import { DraggableHelper, DragAndDropModule } from 'angular-draggable-droppable';
@@ -32,6 +33,7 @@ describe('calendarWeekView component', () => {
3233
ExternalEventComponent
3334
],
3435
providers: [
36+
CalendarUtils,
3537
CalendarEventTitleFormatter,
3638
DraggableHelper,
3739
{provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter},

yarn.lock

+3-3
Original file line numberDiff line numberDiff line change
@@ -778,9 +778,9 @@ cachedir@^1.1.0:
778778
dependencies:
779779
os-homedir "^1.0.1"
780780

781-
782-
version "0.0.47"
783-
resolved "https://registry.yarnpkg.com/calendar-utils/-/calendar-utils-0.0.47.tgz#5e0ca2a0a74afb838c4303ada111cb62dcabbe1c"
781+
782+
version "0.0.48"
783+
resolved "https://registry.yarnpkg.com/calendar-utils/-/calendar-utils-0.0.48.tgz#10c17ac0bab4a2f95700d99cef328baf85fe846d"
784784

785785
786786
version "1.0.0"

0 commit comments

Comments
 (0)