Skip to content

Commit

Permalink
feat!: support options arguments (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
dstelljes committed Dec 7, 2022
1 parent 130ac55 commit b2ac1ea
Show file tree
Hide file tree
Showing 23 changed files with 66 additions and 76 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,8 @@ Works with Angular’s [`DatePipe`][angular-datepipe]:
Transforms a DateTime into a relative time:

```
{{ date | dateTimeToRelative:'day':'long' }}
{{ date | dateTimeToRelativeCalendar:'month' }}
{{ date | dateTimeToRelative:{ unit: 'day', style: 'long' } }}
{{ date | dateTimeToRelativeCalendar:{ unit: 'month' } }}
```

The unit and style parameters are optional.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, LocaleOptions } from 'luxon';

@Pipe({
name: 'dateTimeToFormat'
})
export class DateTimeToFormatPipe implements PipeTransform {
transform <T extends DateTime | null | undefined>(value: T, format: string) {
return (value == null ? null : value.toFormat(format)) as T extends DateTime ? string : null;
transform <T extends DateTime | null | undefined>(value: T, format: string, opts?: LocaleOptions) {
return (value == null ? null : value.toFormat(format, opts)) as T extends DateTime ? string : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, ToISODateOptions } from 'luxon';

@Pipe({
name: 'dateTimeToIsoDate'
})
export class DateTimeToIsoDatePipe implements PipeTransform {
transform <T extends DateTime | null | undefined>(value: T) {
return (value == null ? null : value.toISODate()) as T extends DateTime ? string : null;
transform <T extends DateTime | null | undefined>(value: T, opts?: ToISODateOptions) {
return (value == null ? null : value.toISODate(opts)) as T extends DateTime ? string : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, ToISOTimeOptions } from 'luxon';

@Pipe({
name: 'dateTimeToIsoTime'
})
export class DateTimeToIsoTimePipe implements PipeTransform {
transform <T extends DateTime | null | undefined>(value: T) {
return (value == null ? null : value.toISOTime()) as T extends DateTime ? string : null;
transform <T extends DateTime | null | undefined>(value: T, opts?: ToISOTimeOptions) {
return (value == null ? null : value.toISOTime(opts)) as T extends DateTime ? string : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, ToISOTimeOptions } from 'luxon';

@Pipe({
name: 'dateTimeToIso'
})
export class DateTimeToIsoPipe implements PipeTransform {
transform <T extends DateTime | null | undefined>(value: T) {
return (value == null ? null : value.toISO()) as T extends DateTime ? string : null;
transform <T extends DateTime | null | undefined>(value: T, opts?: ToISOTimeOptions) {
return (value == null ? null : value.toISO(opts)) as T extends DateTime ? string : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,7 @@ import { DateTime, DateTimeFormatOptions, LocaleOptions } from 'luxon';
name: 'dateTimeToLocaleString'
})
export class DateTimeToLocaleStringPipe implements PipeTransform {
transform<T extends DateTime | null | undefined>(
value: T,
format?: DateTimeFormatOptions
) {
return (
value == null ? null : value.toLocaleString(format)
) as T extends DateTime ? string : null;
transform<T extends DateTime | null | undefined>(value: T, format?: DateTimeFormatOptions, opts?: LocaleOptions) {
return (value == null ? null : value.toLocaleString(format, opts)) as T extends DateTime ? string : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform } from '@angular/core';
import { DateTime, ToRelativeUnit } from 'luxon';
import { DateTime, ToRelativeCalendarOptions, ToRelativeUnit } from 'luxon';
import { Subscription, interval } from 'rxjs';

@Pipe({
Expand All @@ -18,7 +18,7 @@ export class DateTimeToRelativeCalendarPipe implements OnDestroy, PipeTransform
}
}

transform <T extends DateTime | null | undefined>(value: T, unit?: ToRelativeUnit) {
transform <T extends DateTime | null | undefined>(value: T, opts?: ToRelativeCalendarOptions) {
if (value == null) {
if (this.subscription) {
this.subscription.unsubscribe();
Expand All @@ -32,8 +32,6 @@ export class DateTimeToRelativeCalendarPipe implements OnDestroy, PipeTransform
this.subscription = interval(1000).subscribe(() => this.ref.markForCheck());
}

return value.toRelativeCalendar({
unit
});
return value.toRelativeCalendar(opts);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform } from '@angular/core';
import { DateTime, ToRelativeUnit } from 'luxon';
import { DateTime, ToRelativeOptions, ToRelativeUnit } from 'luxon';
import { Subscription, interval } from 'rxjs';

@Pipe({
Expand All @@ -18,7 +18,7 @@ export class DateTimeToRelativePipe implements OnDestroy, PipeTransform {
}
}

transform <T extends DateTime | null | undefined>(value: T, unit?: ToRelativeUnit, style?: 'long' | 'short' | 'narrow') {
transform <T extends DateTime | null | undefined>(value: T, opts?: ToRelativeOptions) {
if (value == null) {
if (this.subscription) {
this.subscription.unsubscribe();
Expand All @@ -32,9 +32,6 @@ export class DateTimeToRelativePipe implements OnDestroy, PipeTransform {
this.subscription = interval(1000).subscribe(() => this.ref.markForCheck());
}

return value.toRelative({
style,
unit
});
return value.toRelative(opts);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, ToSQLOptions } from 'luxon';

@Pipe({
name: 'dateTimeToSql'
})
export class DateTimeToSqlPipe implements PipeTransform {
transform <T extends DateTime | null | undefined>(value: T) {
return (value == null ? null : value.toSQL()) as T extends DateTime ? string : null;
transform <T extends DateTime | null | undefined>(value: T, opts?: ToSQLOptions) {
return (value == null ? null : value.toSQL(opts)) as T extends DateTime ? string : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Duration } from 'luxon';
name: 'durationToFormat'
})
export class DurationToFormatPipe implements PipeTransform {
transform <T extends Duration | null | undefined>(value: T, format: string) {
return (value == null ? null : value.toFormat(format)) as T extends Duration ? string : null;
transform <T extends Duration | null | undefined>(value: T, format: string, opts?: { floor?: boolean }) {
return (value == null ? null : value.toFormat(format, opts)) as T extends Duration ? string : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { Duration } from 'luxon';
import { Duration, ToHumanDurationOptions } from 'luxon';

@Pipe({
name: 'durationToHuman'
})
export class DurationToHumanPipe implements PipeTransform {
transform <T extends Duration | null | undefined>(value: T) {
return (value == null ? null : value.toHuman()) as T extends Duration ? string : null;
transform <T extends Duration | null | undefined>(value: T, opts?: ToHumanDurationOptions) {
return (value == null ? null : value.toHuman(opts)) as T extends Duration ? string : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { Duration } from 'luxon';
import { Duration, ToISOTimeDurationOptions } from 'luxon';

@Pipe({
name: 'durationToIsoTime'
})
export class DurationToIsoTimePipe implements PipeTransform {
transform <T extends Duration | null | undefined>(value: T) {
return (value == null ? null : value.toISOTime()) as T extends Duration ? string : null;
transform <T extends Duration | null | undefined>(value: T, opts?: ToISOTimeDurationOptions) {
return (value == null ? null : value.toISOTime(opts)) as T extends Duration ? string : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, DateTimeOptions } from 'luxon';

@Pipe({
name: 'dateTimeFromFormat'
})
export class DateTimeFromFormatPipe implements PipeTransform {
transform <T extends string | null | undefined>(value: T, format: string) {
return (value == null ? null : DateTime.fromFormat(value as string, format)) as T extends string ? DateTime : null;
transform <T extends string | null | undefined>(value: T, format: string, opts?: DateTimeOptions) {
return (value == null ? null : DateTime.fromFormat(value as string, format, opts)) as T extends string ? DateTime : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, DateTimeOptions } from 'luxon';

@Pipe({
name: 'dateTimeFromHttp'
})
export class DateTimeFromHttpPipe implements PipeTransform {
transform <T extends string | null | undefined>(value: T) {
return (value == null ? null : DateTime.fromHTTP(value as string)) as T extends string ? DateTime : null;
transform <T extends string | null | undefined>(value: T, opts?: DateTimeOptions) {
return (value == null ? null : DateTime.fromHTTP(value as string, opts)) as T extends string ? DateTime : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, DateTimeOptions } from 'luxon';

@Pipe({
name: 'dateTimeFromIso'
})
export class DateTimeFromIsoPipe implements PipeTransform {
transform <T extends string | null | undefined>(value: T) {
return (value == null ? null : DateTime.fromISO(value as string)) as T extends string ? DateTime : null;
transform <T extends string | null | undefined>(value: T, opts?: DateTimeOptions) {
return (value == null ? null : DateTime.fromISO(value as string, opts)) as T extends string ? DateTime : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, Zone } from 'luxon';

@Pipe({
name: 'dateTimeFromJsDate'
})
export class DateTimeFromJsDatePipe implements PipeTransform {
transform <T extends Date | null | undefined>(value: T) {
return (value == null ? null : DateTime.fromJSDate(value as Date)) as T extends Date ? DateTime : null;
transform <T extends Date | null | undefined>(value: T, opts?: { zone?: string | Zone }) {
return (value == null ? null : DateTime.fromJSDate(value as Date, opts)) as T extends Date ? DateTime : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, DateTimeJSOptions } from 'luxon';

@Pipe({
name: 'dateTimeFromMilliseconds'
})
export class DateTimeFromMillisecondsPipe implements PipeTransform {
transform <T extends number | null | undefined>(value: T) {
return (value == null ? null : DateTime.fromMillis(value as number)) as T extends number ? DateTime : null;
transform <T extends number | null | undefined>(value: T, opts?: DateTimeJSOptions) {
return (value == null ? null : DateTime.fromMillis(value as number, opts)) as T extends number ? DateTime : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, DateTimeOptions } from 'luxon';

@Pipe({
name: 'dateTimeFromRfc2822'
})
export class DateTimeFromRfc2822Pipe implements PipeTransform {
transform <T extends string | null | undefined>(value: T) {
return (value == null ? null : DateTime.fromRFC2822(value as string)) as T extends string ? DateTime : null;
transform <T extends string | null | undefined>(value: T, opts?: DateTimeOptions) {
return (value == null ? null : DateTime.fromRFC2822(value as string, opts)) as T extends string ? DateTime : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, DateTimeOptions } from 'luxon';

@Pipe({
name: 'dateTimeFromSql'
})
export class DateTimeFromSqlPipe implements PipeTransform {
transform <T extends string | null | undefined>(value: T) {
return (value == null ? null : DateTime.fromSQL(value as string)) as T extends string ? DateTime : null;
transform <T extends string | null | undefined>(value: T, opts?: DateTimeOptions) {
return (value == null ? null : DateTime.fromSQL(value as string, opts)) as T extends string ? DateTime : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { Duration } from 'luxon';
import { Duration, DurationOptions } from 'luxon';

@Pipe({
name: 'durationFromIsoTime'
})
export class DurationFromIsoTimePipe implements PipeTransform {
transform <T extends string | null | undefined>(value: T) {
return (value == null ? null : Duration.fromISOTime(value as string)) as T extends string ? Duration : null;
transform <T extends string | null | undefined>(value: T, opts?: DurationOptions) {
return (value == null ? null : Duration.fromISOTime(value as string, opts)) as T extends string ? Duration : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { Duration } from 'luxon';
import { Duration, DurationOptions } from 'luxon';

@Pipe({
name: 'durationFromIso'
})
export class DurationFromIsoPipe implements PipeTransform {
transform <T extends string | null | undefined>(value: T) {
return (value == null ? null : Duration.fromISO(value as string)) as T extends string ? Duration : null;
transform <T extends string | null | undefined>(value: T, opts?: DurationOptions) {
return (value == null ? null : Duration.fromISO(value as string, opts)) as T extends string ? Duration : null;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { Duration } from 'luxon';
import { Duration, DurationOptions } from 'luxon';

@Pipe({
name: 'durationFromMilliseconds'
})
export class DurationFromMillisecondsPipe implements PipeTransform {
transform <T extends number | null | undefined>(value: T) {
return (value == null ? null : Duration.fromMillis(value as number)) as T extends number ? Duration : null;
transform <T extends number | null | undefined>(value: T, opts?: DurationOptions) {
return (value == null ? null : Duration.fromMillis(value as number, opts)) as T extends number ? Duration : null;
}
}
6 changes: 3 additions & 3 deletions projects/luxon-angular/src/lib/zones/date-time-to-utc.pipe.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DateTime } from 'luxon';
import { DateTime, ZoneOptions } from 'luxon';

@Pipe({
name: 'dateTimeToUtc'
})
export class DateTimeToUtcPipe implements PipeTransform {
transform <T extends DateTime | null | undefined>(value: T) {
return (value == null ? null : value.toUTC()) as T extends DateTime ? DateTime : null;
transform <T extends DateTime | null | undefined>(value: T, offset?: number, opts?: ZoneOptions) {
return (value == null ? null : value.toUTC(offset, opts)) as T extends DateTime ? DateTime : null;
}
}

0 comments on commit b2ac1ea

Please sign in to comment.