@ -9,10 +9,13 @@ import {
@@ -9,10 +9,13 @@ import {
NG_VALUE_ACCESSOR ,
ValidationErrors ,
Validator ,
ValidatorFn ,
Validators ,
} from "@angular/forms" ;
import { Subject , takeUntil } from "rxjs" ;
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service" ;
@Component ( {
selector : "sm-expiration-options" ,
templateUrl : "./expiration-options.component.html" ,
@ -46,10 +49,10 @@ export class ExpirationOptionsComponent
@@ -46,10 +49,10 @@ export class ExpirationOptionsComponent
protected form = new FormGroup ( {
expires : new FormControl ( "never" , [ Validators . required ] ) ,
expireDateTime : new FormControl ( "" , [ Validators . required ] ) ,
expireDateTime : new FormControl ( "" , [ Validators . required , this . expiresInFutureValidator ( ) ] ) ,
} ) ;
constructor ( private datePipe : DatePipe ) { }
constructor ( private datePipe : DatePipe , private i18nService : I18nService ) { }
async ngOnInit() {
this . form . valueChanges . pipe ( takeUntil ( this . destroy $ ) ) . subscribe ( ( ) = > {
@ -74,7 +77,7 @@ export class ExpirationOptionsComponent
@@ -74,7 +77,7 @@ export class ExpirationOptionsComponent
validate ( control : AbstractControl < any , any > ) : ValidationErrors {
if (
( this . form . value . expires == "custom" && this . form . value . expireDateTime ) ||
( this . form . value . expires == "custom" && ! this . form . invalid ) ||
this . form . value . expires !== "custom"
) {
return null ;
@ -111,4 +114,20 @@ export class ExpirationOptionsComponent
@@ -111,4 +114,20 @@ export class ExpirationOptionsComponent
currentDate . setDate ( currentDate . getDate ( ) + Number ( this . form . value . expires ) ) ;
return currentDate ;
}
expiresInFutureValidator ( ) : ValidatorFn {
return ( control : AbstractControl ) : ValidationErrors | null = > {
const enteredDate = new Date ( control . value ) ;
if ( enteredDate > new Date ( ) ) {
return null ;
} else {
return {
ValidationError : {
message : this.i18nService.t ( "expirationDateError" ) ,
} ,
} ;
}
} ;
}
}