From ac80c64fdd93af2fa39417e25fedc42fe19760c4 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Wed, 6 Sep 2023 11:43:32 +0700 Subject: [PATCH 01/16] add failure message when create a task error --- src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/libs/actions/Task.js | 6 +++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index af7957e1a560..2c9801b7a4fe 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1504,6 +1504,7 @@ export default { markAsDone: 'Mark as done', markAsIncomplete: 'Mark as incomplete', assigneeError: 'There was an error assigning this task, please try another assignee.', + genericCreateTaskFailureMessage: 'Unexpected error create task, please try again later', }, statementPage: { generatingPDF: "We're generating your PDF right now. Please come back later!", diff --git a/src/languages/es.ts b/src/languages/es.ts index f950733b005c..83c7ed1f9418 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1534,6 +1534,7 @@ export default { markAsDone: 'Marcar como completada', markAsIncomplete: 'Marcar como incompleta', assigneeError: 'Hubo un error al asignar esta tarea, inténtalo con otro usuario.', + genericCreateTaskFailureMessage: 'Error inesperado al crear la tarea, Por favor, inténtalo más tarde.', }, statementPage: { generatingPDF: 'Estamos generando tu PDF ahora mismo. ¡Por favor, vuelve más tarde!', diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 6227686b3f45..5fa614a0e019 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -184,7 +184,11 @@ function createTaskAndNavigate(parentReportID, title, description, assigneeEmail failureData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID}`, - value: {[optimisticAddCommentReport.reportAction.reportActionID]: {pendingAction: null}}, + value: { + [optimisticAddCommentReport.reportAction.reportActionID]: { + errors: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), + }, + }, }); API.write( From 445b4e09aeb8bbe3c96dfda8b8d82a6be59a20a8 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Wed, 6 Sep 2023 23:15:32 +0700 Subject: [PATCH 02/16] fix minor --- src/languages/en.ts | 2 +- src/languages/es.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 2c9801b7a4fe..6fff0c5ff58c 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1504,7 +1504,7 @@ export default { markAsDone: 'Mark as done', markAsIncomplete: 'Mark as incomplete', assigneeError: 'There was an error assigning this task, please try another assignee.', - genericCreateTaskFailureMessage: 'Unexpected error create task, please try again later', + genericCreateTaskFailureMessage: 'Unexpected error create task, please try again later.', }, statementPage: { generatingPDF: "We're generating your PDF right now. Please come back later!", diff --git a/src/languages/es.ts b/src/languages/es.ts index 83c7ed1f9418..a73b5045cf62 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1534,7 +1534,7 @@ export default { markAsDone: 'Marcar como completada', markAsIncomplete: 'Marcar como incompleta', assigneeError: 'Hubo un error al asignar esta tarea, inténtalo con otro usuario.', - genericCreateTaskFailureMessage: 'Error inesperado al crear la tarea, Por favor, inténtalo más tarde.', + genericCreateTaskFailureMessage: 'Error inesperado al crear la tarea, por favor, inténtalo más tarde.', }, statementPage: { generatingPDF: 'Estamos generando tu PDF ahora mismo. ¡Por favor, vuelve más tarde!', From 0ca6752ad0cef8f6c4c8cd2baa1ca4d2380b00ef Mon Sep 17 00:00:00 2001 From: Nam Le Date: Mon, 11 Sep 2023 19:24:14 +0700 Subject: [PATCH 03/16] add error for report thread --- src/libs/actions/Task.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 5fa614a0e019..5dec7cd3bf9e 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -133,7 +133,11 @@ function createTaskAndNavigate(parentReportID, title, description, assigneeEmail { onyxMethod: Onyx.METHOD.SET, key: `${ONYXKEYS.COLLECTION.REPORT}${optimisticTaskReport.reportID}`, - value: null, + value: { + errorFields: { + errors: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), + }, + } }, { onyxMethod: Onyx.METHOD.MERGE, From b88e4db601032d674dc5b81d49a75d3e33d98878 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Mon, 11 Sep 2023 19:28:16 +0700 Subject: [PATCH 04/16] fix key --- src/libs/actions/Task.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 5dec7cd3bf9e..3c3648f9a7bb 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -135,7 +135,7 @@ function createTaskAndNavigate(parentReportID, title, description, assigneeEmail key: `${ONYXKEYS.COLLECTION.REPORT}${optimisticTaskReport.reportID}`, value: { errorFields: { - errors: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), + createChat: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), }, } }, From abff47b52699998243fdc533127d63056af33bb9 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Mon, 11 Sep 2023 19:31:40 +0700 Subject: [PATCH 05/16] fix lint --- src/libs/actions/Task.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 3c3648f9a7bb..9e0572e76a7c 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -137,7 +137,7 @@ function createTaskAndNavigate(parentReportID, title, description, assigneeEmail errorFields: { createChat: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), }, - } + }, }, { onyxMethod: Onyx.METHOD.MERGE, From 3b1f752eca3524dbc744077ec5823f6a6c7bf9e0 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Mon, 11 Sep 2023 19:35:20 +0700 Subject: [PATCH 06/16] fix translate --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index a73b5045cf62..0e49eb8fa0c0 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1534,7 +1534,7 @@ export default { markAsDone: 'Marcar como completada', markAsIncomplete: 'Marcar como incompleta', assigneeError: 'Hubo un error al asignar esta tarea, inténtalo con otro usuario.', - genericCreateTaskFailureMessage: 'Error inesperado al crear la tarea, por favor, inténtalo más tarde.', + genericCreateTaskFailureMessage: 'Error inesperado al crear el tarea, por favor, inténtalo más tarde.', }, statementPage: { generatingPDF: 'Estamos generando tu PDF ahora mismo. ¡Por favor, vuelve más tarde!', From a63d988d57839b974293f9cb0e70dd6ad01f761a Mon Sep 17 00:00:00 2001 From: Nam Le Date: Wed, 25 Oct 2023 00:20:48 +0700 Subject: [PATCH 07/16] fix close error task --- src/components/ReportActionItem/TaskView.js | 4 ++-- src/libs/actions/ReportActions.ts | 3 +++ src/libs/actions/Task.js | 20 ++++++++++++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/components/ReportActionItem/TaskView.js b/src/components/ReportActionItem/TaskView.js index 7cddc7a969dc..80bf408f284c 100644 --- a/src/components/ReportActionItem/TaskView.js +++ b/src/components/ReportActionItem/TaskView.js @@ -56,8 +56,8 @@ function TaskView(props) { Task.clearEditTaskErrors(props.report.reportID)} + errors={lodashGet(props, 'report.errorFields.editTask') || lodashGet(props, 'report.errorFields.createTask')} + onClose={() => Task.clearTaskErrors(props.report.reportID)} errorRowStyles={styles.ph5} > diff --git a/src/libs/actions/ReportActions.ts b/src/libs/actions/ReportActions.ts index 3faa1dbe3574..19883bddb0b8 100644 --- a/src/libs/actions/ReportActions.ts +++ b/src/libs/actions/ReportActions.ts @@ -24,6 +24,9 @@ function clearReportActionErrors(reportID: string, reportAction: ReportAction) { Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${linkedTransactionID}`, null); } + if (ReportUtils.isThreadParent(reportAction)) { + Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${reportAction.childReportID}`, null); + } return; } diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index d9987da42c3d..3c08cca8d6fa 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -133,11 +133,11 @@ function createTaskAndNavigate(parentReportID, title, description, assigneeEmail // FOR TASK REPORT const failureData = [ { - onyxMethod: Onyx.METHOD.SET, + onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT}${optimisticTaskReport.reportID}`, value: { errorFields: { - createChat: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), + createTask: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), }, }, }, @@ -913,7 +913,19 @@ function canModifyTask(taskReport, sessionAccountID) { /** * @param {String} reportID */ -function clearEditTaskErrors(reportID) { +function clearTaskErrors(reportID) { + const report = ReportUtils.getReport(reportID); + if (lodashGet(report, 'pendingFields.createChat') === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) { + Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.parentReportID}`, { + [report.parentReportActionID]: null + }); + + Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, null); + + Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report.parentReportID)); + return; + } + Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, { pendingFields: null, errorFields: null, @@ -968,7 +980,7 @@ export { cancelTask, dismissModalAndClearOutTaskInfo, getTaskAssigneeAccountID, - clearEditTaskErrors, + clearTaskErrors, canModifyTask, getTaskReportActionMessage, }; From 07dbcc4f022317f6e6961e15abed8f71fafafb1c Mon Sep 17 00:00:00 2001 From: Nam Le Date: Wed, 25 Oct 2023 00:21:27 +0700 Subject: [PATCH 08/16] fix prettier --- src/libs/actions/Task.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 3c08cca8d6fa..4b2af0791264 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -917,7 +917,7 @@ function clearTaskErrors(reportID) { const report = ReportUtils.getReport(reportID); if (lodashGet(report, 'pendingFields.createChat') === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) { Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.parentReportID}`, { - [report.parentReportActionID]: null + [report.parentReportActionID]: null, }); Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, null); From a5027338d28bb00d409d604101d56a42853aefa0 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Thu, 26 Oct 2023 17:07:54 +0700 Subject: [PATCH 09/16] add comment and fix minor --- src/components/ReportActionItem/TaskView.js | 2 +- src/libs/actions/ReportActions.ts | 1 + src/libs/actions/Task.js | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/TaskView.js b/src/components/ReportActionItem/TaskView.js index 80bf408f284c..6123aa7be54f 100644 --- a/src/components/ReportActionItem/TaskView.js +++ b/src/components/ReportActionItem/TaskView.js @@ -56,7 +56,7 @@ function TaskView(props) { Task.clearTaskErrors(props.report.reportID)} errorRowStyles={styles.ph5} > diff --git a/src/libs/actions/ReportActions.ts b/src/libs/actions/ReportActions.ts index 19883bddb0b8..467535ad368e 100644 --- a/src/libs/actions/ReportActions.ts +++ b/src/libs/actions/ReportActions.ts @@ -24,6 +24,7 @@ function clearReportActionErrors(reportID: string, reportAction: ReportAction) { Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${linkedTransactionID}`, null); } + // Delete the failed task report too if (ReportUtils.isThreadParent(reportAction)) { Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${reportAction.childReportID}`, null); } diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 4b2af0791264..88b09ba18c84 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -137,7 +137,7 @@ function createTaskAndNavigate(parentReportID, title, description, assigneeEmail key: `${ONYXKEYS.COLLECTION.REPORT}${optimisticTaskReport.reportID}`, value: { errorFields: { - createTask: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), + createChat: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), }, }, }, @@ -915,6 +915,8 @@ function canModifyTask(taskReport, sessionAccountID) { */ function clearTaskErrors(reportID) { const report = ReportUtils.getReport(reportID); + + // Delete the task preview in the parent report if (lodashGet(report, 'pendingFields.createChat') === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) { Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.parentReportID}`, { [report.parentReportActionID]: null, From 6159d2d201b5c1f13461807a22eec167bd2527da Mon Sep 17 00:00:00 2001 From: Nam Le Date: Tue, 31 Oct 2023 19:37:19 +0700 Subject: [PATCH 10/16] update navigate after delete --- src/libs/actions/ReportActions.ts | 6 ++++-- src/libs/actions/Task.js | 5 ++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libs/actions/ReportActions.ts b/src/libs/actions/ReportActions.ts index 467535ad368e..794b5aab81d9 100644 --- a/src/libs/actions/ReportActions.ts +++ b/src/libs/actions/ReportActions.ts @@ -3,6 +3,8 @@ import ONYXKEYS from '../../ONYXKEYS'; import CONST from '../../CONST'; import * as ReportActionUtils from '../ReportActionsUtils'; import * as ReportUtils from '../ReportUtils'; +import * as Report from './Report'; + import ReportAction from '../../types/onyx/ReportAction'; function clearReportActionErrors(reportID: string, reportAction: ReportAction) { @@ -25,8 +27,8 @@ function clearReportActionErrors(reportID: string, reportAction: ReportAction) { } // Delete the failed task report too - if (ReportUtils.isThreadParent(reportAction)) { - Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${reportAction.childReportID}`, null); + if (reportAction.childReportID) { + Report.deleteReport(reportAction.childReportID) } return; } diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 88b09ba18c84..3ebf88e7b38f 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -14,6 +14,7 @@ import * as ReportActionsUtils from '../ReportActionsUtils'; import * as Expensicons from '../../components/Icon/Expensicons'; import * as LocalePhoneNumber from '../LocalePhoneNumber'; import * as Localize from '../Localize'; +import * as Report from './Report'; let currentUserEmail; let currentUserAccountID; @@ -922,9 +923,7 @@ function clearTaskErrors(reportID) { [report.parentReportActionID]: null, }); - Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, null); - - Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report.parentReportID)); + Report.navigateToConciergeChatAndDeleteReport(reportID); return; } From 20319e11973dde8ef48418e818920a858a8c1162 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Tue, 31 Oct 2023 19:38:19 +0700 Subject: [PATCH 11/16] fix prettier --- src/libs/actions/ReportActions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/ReportActions.ts b/src/libs/actions/ReportActions.ts index 794b5aab81d9..36b290f71cf4 100644 --- a/src/libs/actions/ReportActions.ts +++ b/src/libs/actions/ReportActions.ts @@ -28,7 +28,7 @@ function clearReportActionErrors(reportID: string, reportAction: ReportAction) { // Delete the failed task report too if (reportAction.childReportID) { - Report.deleteReport(reportAction.childReportID) + Report.deleteReport(reportAction.childReportID); } return; } From b2e99ad3812e7e05cd40404f6fa2e5342b2873b1 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Tue, 31 Oct 2023 20:03:42 +0700 Subject: [PATCH 12/16] fix lint --- src/libs/actions/ReportActions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/ReportActions.ts b/src/libs/actions/ReportActions.ts index 2297203a36dd..64e69def0583 100644 --- a/src/libs/actions/ReportActions.ts +++ b/src/libs/actions/ReportActions.ts @@ -4,7 +4,7 @@ import * as ReportUtils from '@libs/ReportUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ReportAction from '@src/types/onyx/ReportAction'; -import * as Report from '@libs/actions/Report'; +import * as Report from './Report'; function clearReportActionErrors(reportID: string, reportAction: ReportAction) { const originalReportID = ReportUtils.getOriginalReportID(reportID, reportAction); From 4d6c1830966ca3a460f5b2285a344696ca1cd97f Mon Sep 17 00:00:00 2001 From: Nam Le Date: Tue, 31 Oct 2023 20:24:39 +0700 Subject: [PATCH 13/16] fix lint --- src/libs/actions/Task.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index bc543123514f..96ff2ec040f6 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -15,7 +15,7 @@ import * as UserUtils from '@libs/UserUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import * as Report from '@libs/actions/Report'; +import * as Report from './Report'; let currentUserEmail; let currentUserAccountID; From fd3351601787b8b358226c1cae3d5f40018c5e8f Mon Sep 17 00:00:00 2001 From: Nam Le Date: Thu, 2 Nov 2023 00:29:41 +0700 Subject: [PATCH 14/16] update key create task error --- src/components/ReportActionItem/TaskView.js | 2 +- src/libs/actions/Task.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/TaskView.js b/src/components/ReportActionItem/TaskView.js index c50d99a0d18c..b12d6ae32128 100644 --- a/src/components/ReportActionItem/TaskView.js +++ b/src/components/ReportActionItem/TaskView.js @@ -58,7 +58,7 @@ function TaskView(props) { Task.clearTaskErrors(props.report.reportID)} errorRowStyles={styles.ph5} > diff --git a/src/libs/actions/Task.js b/src/libs/actions/Task.js index 96ff2ec040f6..0c9caf9a3136 100644 --- a/src/libs/actions/Task.js +++ b/src/libs/actions/Task.js @@ -139,7 +139,7 @@ function createTaskAndNavigate(parentReportID, title, description, assigneeEmail key: `${ONYXKEYS.COLLECTION.REPORT}${optimisticTaskReport.reportID}`, value: { errorFields: { - createChat: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), + createTask: ErrorUtils.getMicroSecondOnyxError('task.genericCreateTaskFailureMessage'), }, }, }, From 8d2d2f2806ba0752db5e27cbbf1e81cb572cb8c1 Mon Sep 17 00:00:00 2001 From: Nam Le Date: Mon, 6 Nov 2023 22:31:27 +0700 Subject: [PATCH 15/16] fix use taskReportId --- src/libs/actions/ReportActions.ts | 5 +++-- src/types/onyx/ReportAction.ts | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/ReportActions.ts b/src/libs/actions/ReportActions.ts index 64e69def0583..d7ff96fc6c2e 100644 --- a/src/libs/actions/ReportActions.ts +++ b/src/libs/actions/ReportActions.ts @@ -26,8 +26,9 @@ function clearReportActionErrors(reportID: string, reportAction: ReportAction) { } // Delete the failed task report too - if (reportAction.childReportID) { - Report.deleteReport(reportAction.childReportID); + const taskReportID = reportAction.message?.[0]?.taskReportID; + if (taskReportID) { + Report.deleteReport(taskReportID); } return; } diff --git a/src/types/onyx/ReportAction.ts b/src/types/onyx/ReportAction.ts index 19908273ad3d..842898c1a2bd 100644 --- a/src/types/onyx/ReportAction.ts +++ b/src/types/onyx/ReportAction.ts @@ -43,6 +43,9 @@ type Message = { moderationDecision?: Decision; translationKey?: string; + + /** ID of a task report */ + taskReportID?: string }; type Person = { From ce5e88f9c25ba0bec12c1e8e73035df1817a4adc Mon Sep 17 00:00:00 2001 From: Nam Le Date: Mon, 6 Nov 2023 22:36:31 +0700 Subject: [PATCH 16/16] fix lint --- src/types/onyx/ReportAction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/onyx/ReportAction.ts b/src/types/onyx/ReportAction.ts index 842898c1a2bd..66622f4b29ea 100644 --- a/src/types/onyx/ReportAction.ts +++ b/src/types/onyx/ReportAction.ts @@ -45,7 +45,7 @@ type Message = { translationKey?: string; /** ID of a task report */ - taskReportID?: string + taskReportID?: string; }; type Person = {