From 95f48ea57559ea17f40d581796aaca2c53450525 Mon Sep 17 00:00:00 2001 From: Oscar Beaumont Date: Mon, 30 Oct 2023 11:43:18 +1100 Subject: [PATCH] [ENG-1367] TypeError: null is not an object (#1698) strickter types pog --- core/src/job/report.rs | 8 +++++++- interface/hooks/useIsLocationIndexing.ts | 6 +++++- interface/hooks/useRedirectToNewLocation.ts | 2 +- packages/client/src/core.ts | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/core/src/job/report.rs b/core/src/job/report.rs index db99e6df0..b261a17b8 100644 --- a/core/src/job/report.rs +++ b/core/src/job/report.rs @@ -4,7 +4,10 @@ use crate::{ util::db::{maybe_missing, MissingFieldError}, }; -use std::fmt::{Display, Formatter}; +use std::{ + collections::HashMap, + fmt::{Display, Formatter}, +}; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; @@ -44,6 +47,9 @@ pub struct JobReport { pub name: String, pub action: Option, pub data: Option>, + // In Typescript `any | null` is just `any` so we don't get prompted for null checks + // TODO(@Oscar): This will be fixed + #[specta(type = Option>)] pub metadata: Option, pub is_background: bool, pub errors_text: Vec, diff --git a/interface/hooks/useIsLocationIndexing.ts b/interface/hooks/useIsLocationIndexing.ts index 416715225..45c7cbd1e 100644 --- a/interface/hooks/useIsLocationIndexing.ts +++ b/interface/hooks/useIsLocationIndexing.ts @@ -14,7 +14,11 @@ export const useIsLocationIndexing = (locationId: number): boolean => { const isLocationIndexing = jobGroups?.some((group) => group.jobs.some((job) => { - if (job.name === 'indexer' && job.metadata.location.id === locationId && (job.status === 'Running' || job.status === 'Queued')) { + if ( + job.name === 'indexer' && + job.metadata?.location.id === locationId && + (job.status === 'Running' || job.status === 'Queued') + ) { return job.completed_task_count === 0; } }) diff --git a/interface/hooks/useRedirectToNewLocation.ts b/interface/hooks/useRedirectToNewLocation.ts index 90a21c5d1..2b3fe8a42 100644 --- a/interface/hooks/useRedirectToNewLocation.ts +++ b/interface/hooks/useRedirectToNewLocation.ts @@ -25,7 +25,7 @@ export const useRedirectToNewLocation = () => { .some( (j) => j.name === 'indexer' && - j.metadata.location.id === newLocation && + j.metadata?.location.id === newLocation && (j.completed_task_count > 0 || j.completed_at != null) ); diff --git a/packages/client/src/core.ts b/packages/client/src/core.ts index cf8a6d654..e87f4602a 100644 --- a/packages/client/src/core.ts +++ b/packages/client/src/core.ts @@ -243,7 +243,7 @@ export type JobGroup = { id: string; action: string | null; status: JobStatus; c export type JobProgressEvent = { id: string; library_id: string; task_count: number; completed_task_count: number; phase: string; message: string; estimated_completion: string } -export type JobReport = { id: string; name: string; action: string | null; data: number[] | null; metadata: any | null; is_background: boolean; errors_text: string[]; created_at: string | null; started_at: string | null; completed_at: string | null; parent_id: string | null; status: JobStatus; task_count: number; completed_task_count: number; phase: string; message: string; estimated_completion: string } +export type JobReport = { id: string; name: string; action: string | null; data: number[] | null; metadata: { [key: string]: any } | null; is_background: boolean; errors_text: string[]; created_at: string | null; started_at: string | null; completed_at: string | null; parent_id: string | null; status: JobStatus; task_count: number; completed_task_count: number; phase: string; message: string; estimated_completion: string } export type JobStatus = "Queued" | "Running" | "Completed" | "Canceled" | "Failed" | "Paused" | "CompletedWithErrors"