Skip to content

Commit

Permalink
feat(datepicker): NgbDateNativeUTCAdapter
Browse files Browse the repository at this point in the history
Closes #2631
Closes #2659
  • Loading branch information
divdavem authored and maxokorokov committed Aug 30, 2018
1 parent a20959c commit f847791
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/datepicker/adapters/ngb-date-native-utc-adapter.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import {NgbDateNativeUTCAdapter} from './ngb-date-native-utc-adapter';

describe('ngb-date-native-utc model adapter', () => {
let adapter: NgbDateNativeUTCAdapter;

beforeEach(() => { adapter = new NgbDateNativeUTCAdapter(); });

describe('fromModel', () => {

it('should convert invalid and incomplete values to null', () => {
expect(adapter.fromModel(null)).toBeNull();
expect(adapter.fromModel(undefined)).toBeNull();
expect(adapter.fromModel(<any>'')).toBeNull();
expect(adapter.fromModel(<any>'s')).toBeNull();
expect(adapter.fromModel(<any>2)).toBeNull();
expect(adapter.fromModel(<any>{})).toBeNull();
expect(adapter.fromModel(<any>{year: 2017, month: 10})).toBeNull();
});

it('should convert valid date',
() => { expect(adapter.fromModel(new Date(Date.UTC(2016, 4, 1)))).toEqual({year: 2016, month: 5, day: 1}); });
});

describe('toModel', () => {

it('should convert invalid and incomplete values to null', () => {
expect(adapter.toModel(null)).toBeNull();
expect(adapter.toModel(undefined)).toBeNull();
expect(adapter.toModel(<any>'')).toBeNull();
expect(adapter.toModel(<any>'s')).toBeNull();
expect(adapter.toModel(<any>2)).toBeNull();
expect(adapter.toModel(<any>{})).toBeNull();
expect(adapter.toModel(<any>new Date())).toBeNull();
});

it('should convert a valid date',
() => { expect(adapter.toModel({year: 2016, month: 10, day: 15})).toEqual(new Date(Date.UTC(2016, 9, 15))); });
});

});
16 changes: 16 additions & 0 deletions src/datepicker/adapters/ngb-date-native-utc-adapter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import {Injectable} from '@angular/core';
import {NgbDateAdapter} from './ngb-date-adapter';
import {NgbDateStruct} from '../ngb-date-struct';

@Injectable()
export class NgbDateNativeUTCAdapter extends NgbDateAdapter<Date> {
fromModel(date: Date): NgbDateStruct {
return (date && date.getUTCFullYear) ?
{year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate()} :
null;
}

toModel(date: NgbDateStruct): Date {
return date && date.year && date.month ? new Date(Date.UTC(date.year, date.month - 1, date.day)) : null;
}
}
1 change: 1 addition & 0 deletions src/datepicker/datepicker.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ export {NgbDateStruct} from './ngb-date-struct';
export {NgbDate} from './ngb-date';
export {NgbDateAdapter} from './adapters/ngb-date-adapter';
export {NgbDateNativeAdapter} from './adapters/ngb-date-native-adapter';
export {NgbDateNativeUTCAdapter} from './adapters/ngb-date-native-utc-adapter';
export {NgbDateParserFormatter} from './ngb-date-parser-formatter';

@NgModule({
Expand Down
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export {
NgbDateParserFormatter,
NgbDateAdapter,
NgbDateNativeAdapter,
NgbDateNativeUTCAdapter,
NgbDatepicker,
NgbInputDatepicker
} from './datepicker/datepicker.module';
Expand Down

0 comments on commit f847791

Please sign in to comment.