]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
More precise date for jobs
authorChocobozzz <me@florianbigard.com>
Wed, 10 Aug 2022 08:26:20 +0000 (10:26 +0200)
committerChocobozzz <me@florianbigard.com>
Wed, 10 Aug 2022 08:26:20 +0000 (10:26 +0200)
client/src/app/+admin/system/jobs/job.service.ts
client/src/app/+admin/system/jobs/jobs.component.html
client/src/app/core/rest/rest-extractor.service.ts
client/src/app/helpers/utils/date.ts
client/tsconfig.json

index 6c4a07469f8b65f96952d5d45250a8a67c0d67c7..ef8ddd3b497293d713d4b7bc84d7b60085aff018 100644 (file)
@@ -34,9 +34,7 @@ export class JobService {
 
     return this.authHttp.get<ResultList<Job>>(JobService.BASE_JOB_URL + `/${jobState || ''}`, { params })
                .pipe(
-                 map(res => {
-                   return this.restExtractor.convertResultListDateToHuman(res, [ 'createdAt', 'processedOn', 'finishedOn' ])
-                 }),
+                 map(res => this.restExtractor.convertResultListDateToHuman(res, [ 'createdAt', 'processedOn', 'finishedOn' ], 'precise')),
                  map(res => this.restExtractor.applyToResultListData(res, this.prettyPrintData)),
                  map(res => this.restExtractor.applyToResultListData(res, this.buildUniqId)),
                  catchError(err => this.restExtractor.handleError(err))
index b53fafeba19c99f5e784206b75cbfa09ec979060..a5266bde5115a8a9b32e3b57adbbdc90413ce502 100644 (file)
@@ -69,7 +69,7 @@
         <ng-container *ngIf="hasProgress(job)">{{ getProgress(job) }}</ng-container>
       </td>
 
-      <td class="job-date c-hand" [pRowToggler]="job">{{ job.createdAt | date: 'short' }}</td>
+      <td class="job-date c-hand" [pRowToggler]="job">{{ job.createdAt }}</td>
     </tr>
   </ng-template>
 
index 8a297456334b1fae3ed37e27176ca7583e5d3f8c..7eec2eca62047901005dfc00a102b123f9e26dc4 100644 (file)
@@ -1,14 +1,17 @@
 import { throwError as observableThrowError } from 'rxjs'
-import { Injectable } from '@angular/core'
+import { Inject, Injectable, LOCALE_ID } from '@angular/core'
 import { Router } from '@angular/router'
-import { dateToHuman } from '@app/helpers'
-import { HttpStatusCode, ResultList } from '@shared/models'
+import { DateFormat, dateToHuman } from '@app/helpers'
 import { logger } from '@root-helpers/logger'
+import { HttpStatusCode, ResultList } from '@shared/models'
 
 @Injectable()
 export class RestExtractor {
 
-  constructor (private router: Router) { }
+  constructor (
+    @Inject(LOCALE_ID) private localeId: string,
+    private router: Router
+  ) { }
 
   applyToResultListData <T, A, U> (
     result: ResultList<T>,
@@ -23,13 +26,17 @@ export class RestExtractor {
     }
   }
 
-  convertResultListDateToHuman <T> (result: ResultList<T>, fieldsToConvert: string[] = [ 'createdAt' ]): ResultList<T> {
-    return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ])
+  convertResultListDateToHuman <T> (
+    result: ResultList<T>,
+    fieldsToConvert: string[] = [ 'createdAt' ],
+    format?: DateFormat
+  ): ResultList<T> {
+    return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert, format ])
   }
 
-  convertDateToHuman (target: any, fieldsToConvert: string[]) {
+  convertDateToHuman (target: any, fieldsToConvert: string[], format?: DateFormat) {
     fieldsToConvert.forEach(field => {
-      target[field] = dateToHuman(target[field])
+      target[field] = dateToHuman(this.localeId, new Date(target[field]), format)
     })
 
     return target
index 012b959ea28f9abff0980ba722347f3bed722a20..75363cc8197d78440498e151838398b9b4f4eb24 100644 (file)
@@ -1,8 +1,29 @@
 import { DatePipe } from '@angular/common'
 
-const datePipe = new DatePipe('en')
-function dateToHuman (date: string) {
-  return datePipe.transform(date, 'medium')
+let datePipe: DatePipe
+let intl: Intl.DateTimeFormat
+
+type DateFormat = 'medium' | 'precise'
+
+function dateToHuman (localeId: string, date: Date, format: 'medium' | 'precise' = 'medium') {
+  if (!datePipe) {
+    datePipe = new DatePipe(localeId)
+  }
+
+  if (!intl) {
+    intl = new Intl.DateTimeFormat(localeId, {
+      hour: 'numeric',
+      minute: 'numeric',
+      second: 'numeric',
+      year: '2-digit',
+      month: 'numeric',
+      day: 'numeric',
+      fractionalSecondDigits: 3
+    })
+  }
+
+  if (format === 'medium') return datePipe.transform(date, format)
+  if (format === 'precise') return intl.format(date)
 }
 
 function durationToString (duration: number) {
@@ -20,6 +41,8 @@ function durationToString (duration: number) {
 }
 
 export {
+  DateFormat,
+
   durationToString,
   dateToHuman
 }
index 7a0584d5c1b5e694ebca583f0c40f8ce59c13807..2345ca289b2314e31b0cf1c568dc4a5fba1d9e1e 100644 (file)
@@ -20,7 +20,7 @@
       "node_modules/@types"
     ],
     "lib": [
-      "ES2020.Intl",
+      "ES2021.Intl",
       "es2018",
       "es2017",
       "es2016",