mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-09 09:58:20 -05:00
Merge pull request #1007 from paperless-ngx/improve-date-paste-input
Feature: better date pasting
This commit is contained in:
commit
d0a6c6a2f3
@ -2,7 +2,7 @@
|
|||||||
<label class="form-label" [for]="inputId">{{title}}</label>
|
<label class="form-label" [for]="inputId">{{title}}</label>
|
||||||
<div class="input-group" [class.is-invalid]="error">
|
<div class="input-group" [class.is-invalid]="error">
|
||||||
<input class="form-control" [class.is-invalid]="error" [placeholder]="placeholder" [id]="inputId" maxlength="10"
|
<input class="form-control" [class.is-invalid]="error" [placeholder]="placeholder" [id]="inputId" maxlength="10"
|
||||||
(dateSelect)="onChange(value)" (change)="onChange(value)" (keypress)="onKeyPress($event)"
|
(dateSelect)="onChange(value)" (change)="onChange(value)" (keypress)="onKeyPress($event)" (paste)="onPaste($event)"
|
||||||
name="dp" [(ngModel)]="value" ngbDatepicker #datePicker="ngbDatepicker" #datePickerContent="ngModel">
|
name="dp" [(ngModel)]="value" ngbDatepicker #datePicker="ngbDatepicker" #datePickerContent="ngModel">
|
||||||
<button class="btn btn-outline-secondary calendar" (click)="datePicker.toggle()" type="button">
|
<button class="btn btn-outline-secondary calendar" (click)="datePicker.toggle()" type="button">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16">
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { Component, forwardRef, OnInit } from '@angular/core'
|
import { Component, forwardRef, OnInit } from '@angular/core'
|
||||||
import { NG_VALUE_ACCESSOR } from '@angular/forms'
|
import { NG_VALUE_ACCESSOR } from '@angular/forms'
|
||||||
|
import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'
|
||||||
import { SettingsService } from 'src/app/services/settings.service'
|
import { SettingsService } from 'src/app/services/settings.service'
|
||||||
|
import { LocalizedDateParserFormatter } from 'src/app/utils/ngb-date-parser-formatter'
|
||||||
import { AbstractInputComponent } from '../abstract-input'
|
import { AbstractInputComponent } from '../abstract-input'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -19,7 +21,10 @@ export class DateComponent
|
|||||||
extends AbstractInputComponent<string>
|
extends AbstractInputComponent<string>
|
||||||
implements OnInit
|
implements OnInit
|
||||||
{
|
{
|
||||||
constructor(private settings: SettingsService) {
|
constructor(
|
||||||
|
private settings: SettingsService,
|
||||||
|
private ngbDateParserFormatter: NgbDateParserFormatter
|
||||||
|
) {
|
||||||
super()
|
super()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,7 +35,20 @@ export class DateComponent
|
|||||||
|
|
||||||
placeholder: string
|
placeholder: string
|
||||||
|
|
||||||
// prevent chars other than numbers and separators
|
onPaste(event: ClipboardEvent) {
|
||||||
|
const clipboardData: DataTransfer =
|
||||||
|
event.clipboardData || window['clipboardData']
|
||||||
|
if (clipboardData) {
|
||||||
|
event.preventDefault()
|
||||||
|
let pastedText = clipboardData.getData('text')
|
||||||
|
pastedText = pastedText.replace(/[\sa-z#!$%\^&\*;:{}=\-_`~()]+/g, '')
|
||||||
|
const parsedDate = this.ngbDateParserFormatter.parse(pastedText)
|
||||||
|
const formattedDate = this.ngbDateParserFormatter.format(parsedDate)
|
||||||
|
this.writeValue(formattedDate)
|
||||||
|
this.onChange(formattedDate)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onKeyPress(event: KeyboardEvent) {
|
onKeyPress(event: KeyboardEvent) {
|
||||||
if ('Enter' !== event.key && !/[0-9,\.\/-]+/.test(event.key)) {
|
if ('Enter' !== event.key && !/[0-9,\.\/-]+/.test(event.key)) {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user