From e370dd118d74e124ba1390dcfe21981f760d4cc9 Mon Sep 17 00:00:00 2001 From: Simon Larsen Date: Thu, 10 Aug 2023 19:00:27 +0100 Subject: [PATCH] fix Function types --- ApiReference/Index.ts | 4 +- .../Utils/Probe/ProbeMonitorResponse.ts | 6 +- .../CustomFields/CustomFieldsDetail.tsx | 12 +- CommonUI/src/Components/Detail/Detail.tsx | 19 +- .../src/Components/Forms/Fields/FormField.tsx | 28 +-- .../Components/ModelDetail/ModelDetail.tsx | 9 +- CommonUI/src/Components/Page/ModelPage.tsx | 7 +- .../Workflow/DocumentationViewer.tsx | 12 +- Dashboard/Serve.ts | 4 +- Dashboard/src/App.tsx | 6 +- .../Components/Form/Monitor/MonitorSteps.tsx | 218 +++++++++--------- .../MonitorSteps/MonitorCriteriaIncident.tsx | 1 - .../Monitor/MonitorSteps/MonitorSteps.tsx | 143 ++++++------ Dashboard/src/Pages/Monitor/View/Criteria.tsx | 12 +- Dashboard/src/Pages/Monitor/View/Interval.tsx | 12 +- Dashboard/src/Pages/Monitor/View/Probes.tsx | 12 +- Dashboard/src/Pages/Monitor/View/Settings.tsx | 12 +- Dashboard/src/Pages/Settings/Billing.tsx | 4 +- Dashboard/src/Pages/Workflow/View/Builder.tsx | 12 +- DashboardAPI/Index.ts | 4 +- File/Index.ts | 4 +- Identity/Index.ts | 4 +- LinkShortener/Index.ts | 4 +- Notification/Index.ts | 4 +- Probe/Index.ts | 4 +- ProbeAPI/Index.ts | 4 +- Scripts/Install/MergeEnvTemplate.ts | 5 +- Scripts/Install/ReplaceValueInConfig.ts | 5 +- StatusPage/Serve.ts | 4 +- TestServer/Index.ts | 4 +- Workers/Index.ts | 4 +- Workflow/Index.ts | 4 +- 32 files changed, 295 insertions(+), 292 deletions(-) diff --git a/ApiReference/Index.ts b/ApiReference/Index.ts index f737b55bfc..0007b6efff 100755 --- a/ApiReference/Index.ts +++ b/ApiReference/Index.ts @@ -96,6 +96,8 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); export default app; diff --git a/CommonServer/Utils/Probe/ProbeMonitorResponse.ts b/CommonServer/Utils/Probe/ProbeMonitorResponse.ts index 2c9d5f640a..9c93868bb3 100644 --- a/CommonServer/Utils/Probe/ProbeMonitorResponse.ts +++ b/CommonServer/Utils/Probe/ProbeMonitorResponse.ts @@ -614,8 +614,10 @@ export default class ProbeMonitorResponseService { input.probeApiIngestResponse.rootCause = rootCause + ' ' + - ((input.dataToProcess as ProbeMonitorResponse) - .failureCause || '').replace("Error:", ""); + ( + (input.dataToProcess as ProbeMonitorResponse) + .failureCause || '' + ).replace('Error:', ''); break; } } diff --git a/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx b/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx index fdc32f3ad7..f27d94bdc4 100644 --- a/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx +++ b/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx @@ -1,9 +1,4 @@ -import React, { - FunctionComponent, - ReactElement, - useEffect, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; import ObjectID from 'Common/Types/ObjectID'; import BaseModel from 'Common/Models/BaseModel'; import Card from '../Card/Card'; @@ -17,6 +12,7 @@ import { JSONObject } from 'Common/Types/JSON'; import { ButtonStyleType } from '../Button/Button'; import IconProp from 'Common/Types/Icon/IconProp'; import API from '../../Utils/API/API'; +import useAsyncEffect from 'use-async-effect'; export interface ComponentProps { title: string; @@ -93,8 +89,8 @@ const CustomFieldsDetail: FunctionComponent = ( } }; - useEffect(() => { - onLoad().catch(); + useAsyncEffect(async () => { + await onLoad(); }, []); return ( diff --git a/CommonUI/src/Components/Detail/Detail.tsx b/CommonUI/src/Components/Detail/Detail.tsx index 7d228d98e1..46c44743b6 100644 --- a/CommonUI/src/Components/Detail/Detail.tsx +++ b/CommonUI/src/Components/Detail/Detail.tsx @@ -29,8 +29,6 @@ export interface ComponentProps { const Detail: (props: ComponentProps) => ReactElement = ( props: ComponentProps ): ReactElement => { - - const getMarkdownViewer: Function = (text: string): ReactElement | null => { if (!text) { return null; @@ -90,7 +88,6 @@ const Detail: (props: ComponentProps) => ReactElement = ( }; const getField: Function = (field: Field, index: number): ReactElement => { - const fieldKey: string = field.key; if (!props.item) { @@ -258,10 +255,10 @@ const Detail: (props: ComponentProps) => ReactElement = ( style={ props.showDetailsInNumberOfColumns ? { - width: - 100 / props.showDetailsInNumberOfColumns + - '%', - } + width: + 100 / props.showDetailsInNumberOfColumns + + '%', + } : { width: '100%' } } > @@ -285,14 +282,13 @@ const Detail: (props: ComponentProps) => ReactElement = ( ); - }; - return (
{props.fields && props.fields.length > 0 && @@ -301,7 +297,6 @@ const Detail: (props: ComponentProps) => ReactElement = ( })}
); - }; export default Detail; diff --git a/CommonUI/src/Components/Forms/Fields/FormField.tsx b/CommonUI/src/Components/Forms/Fields/FormField.tsx index 5cf9aff42e..aba3544fb2 100644 --- a/CommonUI/src/Components/Forms/Fields/FormField.tsx +++ b/CommonUI/src/Components/Forms/Fields/FormField.tsx @@ -1,4 +1,4 @@ -import React, { ReactElement, useEffect } from 'react'; +import React, { ReactElement } from 'react'; import BadDataException from 'Common/Types/Exception/BadDataException'; import FormFieldSchemaType from '../Types/FormFieldSchemaType'; @@ -22,6 +22,7 @@ import FieldLabelElement from '../Fields/FieldLabel'; import FormValues from '../Types/FormValues'; import { JSONValue } from 'Common/Types/JSON'; import ComponentLoader from '../../ComponentLoader/ComponentLoader'; +import useAsyncEffect from 'use-async-effect'; export interface ComponentProps { field: Field; @@ -47,22 +48,23 @@ const FormField: ( >(props.field.dropdownOptions || []); const [isFieldLoading, setIsFieldLoading] = React.useState(false); - const fetchDropdownOptions: () => Promise = async (): Promise => { - if (!props.field.fetchDropdownOptions) { - return; - } + const fetchDropdownOptions: () => Promise = + async (): Promise => { + if (!props.field.fetchDropdownOptions) { + return; + } - setIsFieldLoading(true); + setIsFieldLoading(true); - const options: Array = - await props.field.fetchDropdownOptions(); + const options: Array = + await props.field.fetchDropdownOptions(); - setDropdownOptions(options); - setIsFieldLoading(false); - }; + setDropdownOptions(options); + setIsFieldLoading(false); + }; - useEffect(() => { - fetchDropdownOptions().catch(); + useAsyncEffect(async () => { + await fetchDropdownOptions(); }, [props.field]); const getFieldType: Function = (fieldType: FormFieldSchemaType): string => { diff --git a/CommonUI/src/Components/ModelDetail/ModelDetail.tsx b/CommonUI/src/Components/ModelDetail/ModelDetail.tsx index 78416ff4a4..e5e39c5c64 100644 --- a/CommonUI/src/Components/ModelDetail/ModelDetail.tsx +++ b/CommonUI/src/Components/ModelDetail/ModelDetail.tsx @@ -16,6 +16,7 @@ import Detail from '../Detail/Detail'; import API from '../../Utils/API/API'; import JSONFunctions from 'Common/Types/JSONFunctions'; import ErrorMessage from '../ErrorMessage/ErrorMessage'; +import { useAsyncEffect } from 'use-async-effect'; export interface ComponentProps { modelType: { new (): TBaseModel }; @@ -202,9 +203,9 @@ const ModelDetail: ( props.onLoadingChange && props.onLoadingChange(false); }; - useEffect(() => { + useAsyncEffect(async () => { if (props.modelId && props.modelType) { - fetchItem(); + await fetchItem(); } }, [props.modelId, props.refresher, props.modelType]); @@ -237,8 +238,8 @@ const ModelDetail: ( > {error}
{' '} { - fetchItem(); + onClick={async () => { + await fetchItem(); }} className="underline primary-on-hover" > diff --git a/CommonUI/src/Components/Page/ModelPage.tsx b/CommonUI/src/Components/Page/ModelPage.tsx index d186fe5b21..13b2aa4bbf 100644 --- a/CommonUI/src/Components/Page/ModelPage.tsx +++ b/CommonUI/src/Components/Page/ModelPage.tsx @@ -1,10 +1,11 @@ import Link from 'Common/Types/Link'; -import React, { ReactElement, useEffect, useState } from 'react'; +import React, { ReactElement, useState } from 'react'; import ObjectID from 'Common/Types/ObjectID'; import BaseModel from 'Common/Models/BaseModel'; import Page from './Page'; import ModelAPI from '../../Utils/ModelAPI/ModelAPI'; import API from '../../Utils/API/API'; +import useAsyncEffect from 'use-async-effect'; export interface ComponentProps { title?: string | undefined; @@ -66,9 +67,9 @@ const ModelPage: ( const [title, setTitle] = useState(props.title); - useEffect(() => { + useAsyncEffect(async () => { // fetch the model - fetchItem(); + await fetchItem(); }, []); return ( diff --git a/CommonUI/src/Components/Workflow/DocumentationViewer.tsx b/CommonUI/src/Components/Workflow/DocumentationViewer.tsx index 015381dd75..1689e53dd2 100644 --- a/CommonUI/src/Components/Workflow/DocumentationViewer.tsx +++ b/CommonUI/src/Components/Workflow/DocumentationViewer.tsx @@ -1,9 +1,4 @@ -import React, { - FunctionComponent, - ReactElement, - useEffect, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; import ErrorMessage from '../ErrorMessage/ErrorMessage'; import API from '../../Utils/API/API'; import ComponentLoader from '../ComponentLoader/ComponentLoader'; @@ -13,6 +8,7 @@ import URL from 'Common/Types/API/URL'; import { DOMAIN, HOME_URL, HTTP_PROTOCOL } from '../../Config'; import ObjectID from 'Common/Types/ObjectID'; import HTTPResponse from 'Common/Types/API/HTTPResponse'; +import useAsyncEffect from 'use-async-effect'; export interface ComponentProps { documentationLink: Route; @@ -56,8 +52,8 @@ const DocumentationViewer: FunctionComponent = ( } }; - useEffect(() => { - loadDocs(); + useAsyncEffect(async () => { + await loadDocs(); }, [props.documentationLink]); return ( diff --git a/Dashboard/Serve.ts b/Dashboard/Serve.ts index 02d03710a1..a5bf09f425 100755 --- a/Dashboard/Serve.ts +++ b/Dashboard/Serve.ts @@ -16,6 +16,8 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); export default app; diff --git a/Dashboard/src/App.tsx b/Dashboard/src/App.tsx index 76b2a957a5..941e64a1f1 100644 --- a/Dashboard/src/App.tsx +++ b/Dashboard/src/App.tsx @@ -282,7 +282,7 @@ const App: () => JSX.Element = () => { }; useAsyncEffect(async () => { - fetchProjects(); + await fetchProjects(); }, []); const commonPageProps: PageComponentProps = { @@ -1553,10 +1553,10 @@ const App: () => JSX.Element = () => { } element={ { + onProjectDeleted={async () => { setSelectedProject(null); setProjects([]); - fetchProjects(); + await fetchProjects(); Navigation.navigate(RouteMap[PageMap.INIT]!); }} {...commonPageProps} diff --git a/Dashboard/src/Components/Form/Monitor/MonitorSteps.tsx b/Dashboard/src/Components/Form/Monitor/MonitorSteps.tsx index 1a42af2457..95d1559dd6 100644 --- a/Dashboard/src/Components/Form/Monitor/MonitorSteps.tsx +++ b/Dashboard/src/Components/Form/Monitor/MonitorSteps.tsx @@ -19,6 +19,7 @@ import FieldLabelElement from 'CommonUI/src/Components/Forms/Fields/FieldLabel'; import ObjectID from 'Common/Types/ObjectID'; import SortOrder from 'Common/Types/Database/SortOrder'; import OnCallDutyPolicy from 'Model/Models/OnCallDutyPolicy'; +import useAsyncEffect from 'use-async-effect'; export interface ComponentProps extends CustomElementProps { error?: string | undefined; @@ -49,119 +50,120 @@ const MonitorStepsElement: FunctionComponent = ( setError(props.error); }, [props.error]); - const fetchDropdownOptions: () => Promise = async (): Promise => { - setIsLoading(true); + const fetchDropdownOptions: () => Promise = + async (): Promise => { + setIsLoading(true); - try { - const monitorStatusList: ListResult = - await ModelAPI.getList( - MonitorStatus, - {}, - LIMIT_PER_PROJECT, - 0, - { - name: true, - isOperationalState: true, - isOfflineState: true, - }, + try { + const monitorStatusList: ListResult = + await ModelAPI.getList( + MonitorStatus, + {}, + LIMIT_PER_PROJECT, + 0, + { + name: true, + isOperationalState: true, + isOfflineState: true, + }, - {} - ); + {} + ); - if (monitorStatusList.data) { - setMonitorStatusDropdownOptions( - monitorStatusList.data.map((i: MonitorStatus) => { - return { - value: i._id!, - label: i.name!, - }; - }) - ); + if (monitorStatusList.data) { + setMonitorStatusDropdownOptions( + monitorStatusList.data.map((i: MonitorStatus) => { + return { + value: i._id!, + label: i.name!, + }; + }) + ); + } + + const incidentSeverityList: ListResult = + await ModelAPI.getList( + IncidentSeverity, + {}, + LIMIT_PER_PROJECT, + 0, + { + name: true, + order: true, + }, + { + order: SortOrder.Ascending, + } + ); + + const onCallPolicyList: ListResult = + await ModelAPI.getList( + OnCallDutyPolicy, + {}, + LIMIT_PER_PROJECT, + 0, + { + name: true, + }, + {} + ); + + if (incidentSeverityList.data) { + setIncidentSeverityDropdownOptions( + incidentSeverityList.data.map((i: IncidentSeverity) => { + return { + value: i._id!, + label: i.name!, + }; + }) + ); + } + + if (onCallPolicyList.data) { + setOnCallPolicyDropdownOptions( + onCallPolicyList.data.map((i: OnCallDutyPolicy) => { + return { + value: i._id!, + label: i.name!, + }; + }) + ); + } + + // if there is no initial value then.... + + if (!monitorSteps) { + setMonitorSteps( + MonitorSteps.getDefaultMonitorSteps({ + monitorType: props.monitorType, + defaultMonitorStatusId: monitorStatusList.data.find( + (i: MonitorStatus) => { + return i.isOperationalState; + } + )!.id!, + onlineMonitorStatusId: monitorStatusList.data.find( + (i: MonitorStatus) => { + return i.isOperationalState; + } + )!.id!, + offlineMonitorStatusId: monitorStatusList.data.find( + (i: MonitorStatus) => { + return i.isOfflineState; + } + )!.id!, + defaultIncidentSeverityId: + incidentSeverityList.data[0]!.id!, + }) + ); + } + } catch (err) { + setError(API.getFriendlyMessage(err)); } - const incidentSeverityList: ListResult = - await ModelAPI.getList( - IncidentSeverity, - {}, - LIMIT_PER_PROJECT, - 0, - { - name: true, - order: true, - }, - { - order: SortOrder.Ascending, - } - ); - - const onCallPolicyList: ListResult = - await ModelAPI.getList( - OnCallDutyPolicy, - {}, - LIMIT_PER_PROJECT, - 0, - { - name: true, - }, - {} - ); - - if (incidentSeverityList.data) { - setIncidentSeverityDropdownOptions( - incidentSeverityList.data.map((i: IncidentSeverity) => { - return { - value: i._id!, - label: i.name!, - }; - }) - ); - } - - if (onCallPolicyList.data) { - setOnCallPolicyDropdownOptions( - onCallPolicyList.data.map((i: OnCallDutyPolicy) => { - return { - value: i._id!, - label: i.name!, - }; - }) - ); - } - - // if there is no initial value then.... - - if (!monitorSteps) { - setMonitorSteps( - MonitorSteps.getDefaultMonitorSteps({ - monitorType: props.monitorType, - defaultMonitorStatusId: monitorStatusList.data.find( - (i: MonitorStatus) => { - return i.isOperationalState; - } - )!.id!, - onlineMonitorStatusId: monitorStatusList.data.find( - (i: MonitorStatus) => { - return i.isOperationalState; - } - )!.id!, - offlineMonitorStatusId: monitorStatusList.data.find( - (i: MonitorStatus) => { - return i.isOfflineState; - } - )!.id!, - defaultIncidentSeverityId: - incidentSeverityList.data[0]!.id!, - }) - ); - } - } catch (err) { - setError(API.getFriendlyMessage(err)); - } - - setIsLoading(false); - }; - useEffect(() => { - fetchDropdownOptions().catch(); + setIsLoading(false); + }; + useAsyncEffect(async () => { + await fetchDropdownOptions(); }, []); const [monitorSteps, setMonitorSteps] = React.useState< diff --git a/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaIncident.tsx b/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaIncident.tsx index 34515e7a80..d12848e797 100644 --- a/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaIncident.tsx +++ b/Dashboard/src/Components/Monitor/MonitorSteps/MonitorCriteriaIncident.tsx @@ -20,7 +20,6 @@ export interface ComponentProps { const MonitorCriteriaIncidentForm: FunctionComponent = ( props: ComponentProps ): ReactElement => { - return (
= ( MonitorStatus | undefined >(undefined); - const fetchDropdownOptions: () => Promise = async (): Promise => { - setIsLoading(true); + const fetchDropdownOptions: () => Promise = + async (): Promise => { + setIsLoading(true); - try { - const monitorStatusList: ListResult = - await ModelAPI.getList( - MonitorStatus, - {}, - LIMIT_PER_PROJECT, - 0, - { - name: true, - color: true, - isOperationalState: true, - }, - {} - ); + try { + const monitorStatusList: ListResult = + await ModelAPI.getList( + MonitorStatus, + {}, + LIMIT_PER_PROJECT, + 0, + { + name: true, + color: true, + isOperationalState: true, + }, + {} + ); - if (monitorStatusList.data) { - setMonitorStatusOptions(monitorStatusList.data); - setDefaultMonitorStatus( - monitorStatusList.data.find((status: MonitorStatus) => { - return status?.isOperationalState; - }) - ); + if (monitorStatusList.data) { + setMonitorStatusOptions(monitorStatusList.data); + setDefaultMonitorStatus( + monitorStatusList.data.find((status: MonitorStatus) => { + return status?.isOperationalState; + }) + ); + } + + const incidentSeverityList: ListResult = + await ModelAPI.getList( + IncidentSeverity, + {}, + LIMIT_PER_PROJECT, + 0, + { + name: true, + color: true, + }, + {} + ); + + const onCallPolicyList: ListResult = + await ModelAPI.getList( + OnCallDutyPolicy, + {}, + LIMIT_PER_PROJECT, + 0, + { + name: true, + }, + {} + ); + + if (incidentSeverityList.data) { + setIncidentSeverityOptions( + incidentSeverityList.data as Array + ); + } + + if (onCallPolicyList.data) { + setOnCallPolicyOptions( + onCallPolicyList.data as Array + ); + } + } catch (err) { + setError(API.getFriendlyMessage(err)); } - const incidentSeverityList: ListResult = - await ModelAPI.getList( - IncidentSeverity, - {}, - LIMIT_PER_PROJECT, - 0, - { - name: true, - color: true, - }, - {} - ); - - const onCallPolicyList: ListResult = - await ModelAPI.getList( - OnCallDutyPolicy, - {}, - LIMIT_PER_PROJECT, - 0, - { - name: true, - }, - {} - ); - - if (incidentSeverityList.data) { - setIncidentSeverityOptions( - incidentSeverityList.data as Array - ); - } - - if (onCallPolicyList.data) { - setOnCallPolicyOptions( - onCallPolicyList.data as Array - ); - } - } catch (err) { - setError(API.getFriendlyMessage(err)); - } - - setIsLoading(false); - }; - useEffect(() => { - fetchDropdownOptions().catch(); + setIsLoading(false); + }; + useAsyncEffect(async () => { + await fetchDropdownOptions(); }, []); if (isLoading) { diff --git a/Dashboard/src/Pages/Monitor/View/Criteria.tsx b/Dashboard/src/Pages/Monitor/View/Criteria.tsx index b5bca9a65e..b91b2d1d5e 100644 --- a/Dashboard/src/Pages/Monitor/View/Criteria.tsx +++ b/Dashboard/src/Pages/Monitor/View/Criteria.tsx @@ -1,11 +1,6 @@ import Route from 'Common/Types/API/Route'; import ModelPage from 'CommonUI/src/Components/Page/ModelPage'; -import React, { - FunctionComponent, - ReactElement, - useEffect, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; import PageMap from '../../../Utils/PageMap'; import RouteMap, { RouteUtil } from '../../../Utils/RouteMap'; import PageComponentProps from '../../PageComponentProps'; @@ -33,6 +28,7 @@ import ComponentLoader from 'CommonUI/src/Components/ComponentLoader/ComponentLo import ErrorMessage from 'CommonUI/src/Components/ErrorMessage/ErrorMessage'; import EmptyState from 'CommonUI/src/Components/EmptyState/EmptyState'; import DisabledWarning from '../../../Components/Monitor/DisabledWarning'; +import { useAsyncEffect } from 'use-async-effect'; const MonitorCriteria: FunctionComponent = ( _props: PageComponentProps @@ -75,9 +71,9 @@ const MonitorCriteria: FunctionComponent = ( undefined ); - useEffect(() => { + useAsyncEffect(async () => { // fetch the model - fetchItem(); + await fetchItem(); }, []); const getPageContent: Function = (): ReactElement => { diff --git a/Dashboard/src/Pages/Monitor/View/Interval.tsx b/Dashboard/src/Pages/Monitor/View/Interval.tsx index 05f25fa988..b22730c11c 100644 --- a/Dashboard/src/Pages/Monitor/View/Interval.tsx +++ b/Dashboard/src/Pages/Monitor/View/Interval.tsx @@ -1,11 +1,6 @@ import Route from 'Common/Types/API/Route'; import ModelPage from 'CommonUI/src/Components/Page/ModelPage'; -import React, { - FunctionComponent, - ReactElement, - useEffect, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; import PageMap from '../../../Utils/PageMap'; import RouteMap, { RouteUtil } from '../../../Utils/RouteMap'; import PageComponentProps from '../../PageComponentProps'; @@ -26,6 +21,7 @@ import ComponentLoader from 'CommonUI/src/Components/ComponentLoader/ComponentLo import ErrorMessage from 'CommonUI/src/Components/ErrorMessage/ErrorMessage'; import EmptyState from 'CommonUI/src/Components/EmptyState/EmptyState'; import DisabledWarning from '../../../Components/Monitor/DisabledWarning'; +import useAsyncEffect from 'use-async-effect'; const MonitorCriteria: FunctionComponent = ( _props: PageComponentProps @@ -68,9 +64,9 @@ const MonitorCriteria: FunctionComponent = ( undefined ); - useEffect(() => { + useAsyncEffect(async () => { // fetch the model - fetchItem(); + await fetchItem(); }, []); const getPageContent: Function = (): ReactElement => { diff --git a/Dashboard/src/Pages/Monitor/View/Probes.tsx b/Dashboard/src/Pages/Monitor/View/Probes.tsx index 9648443223..9b80953830 100644 --- a/Dashboard/src/Pages/Monitor/View/Probes.tsx +++ b/Dashboard/src/Pages/Monitor/View/Probes.tsx @@ -1,11 +1,6 @@ import Route from 'Common/Types/API/Route'; import ModelPage from 'CommonUI/src/Components/Page/ModelPage'; -import React, { - FunctionComponent, - ReactElement, - useEffect, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; import PageMap from '../../../Utils/PageMap'; import RouteMap, { RouteUtil } from '../../../Utils/RouteMap'; import PageComponentProps from '../../PageComponentProps'; @@ -35,6 +30,7 @@ import DisabledWarning from '../../../Components/Monitor/DisabledWarning'; import { ButtonStyleType } from 'CommonUI/src/Components/Button/Button'; import Modal, { ModalWidth } from 'CommonUI/src/Components/Modal/Modal'; import BadDataException from 'Common/Types/Exception/BadDataException'; +import useAsyncEffect from 'use-async-effect'; const MonitorProbes: FunctionComponent = ( _props: PageComponentProps @@ -113,9 +109,9 @@ const MonitorProbes: FunctionComponent = ( undefined ); - useEffect(() => { + useAsyncEffect(() => { // fetch the model - fetchItem(); + await fetchItem(); }, []); const getPageContent: Function = (): ReactElement => { diff --git a/Dashboard/src/Pages/Monitor/View/Settings.tsx b/Dashboard/src/Pages/Monitor/View/Settings.tsx index 75dc7e1571..4d68a4ea86 100644 --- a/Dashboard/src/Pages/Monitor/View/Settings.tsx +++ b/Dashboard/src/Pages/Monitor/View/Settings.tsx @@ -1,11 +1,6 @@ import Route from 'Common/Types/API/Route'; import ModelPage from 'CommonUI/src/Components/Page/ModelPage'; -import React, { - FunctionComponent, - ReactElement, - useEffect, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; import PageMap from '../../../Utils/PageMap'; import RouteMap, { RouteUtil } from '../../../Utils/RouteMap'; import PageComponentProps from '../../PageComponentProps'; @@ -24,6 +19,7 @@ import ErrorMessage from 'CommonUI/src/Components/ErrorMessage/ErrorMessage'; import EmptyState from 'CommonUI/src/Components/EmptyState/EmptyState'; import FieldType from 'CommonUI/src/Components/Types/FieldType'; import DisabledWarning from '../../../Components/Monitor/DisabledWarning'; +import useAsyncEffect from 'use-async-effect'; const MonitorCriteria: FunctionComponent = ( _props: PageComponentProps @@ -69,9 +65,9 @@ const MonitorCriteria: FunctionComponent = ( undefined ); - useEffect(() => { + useAsyncEffect(async () => { // fetch the model - fetchItem(); + await fetchItem(); }, []); const getPageContent: Function = (): ReactElement => { diff --git a/Dashboard/src/Pages/Settings/Billing.tsx b/Dashboard/src/Pages/Settings/Billing.tsx index 9e709f8d83..4e859b02d1 100644 --- a/Dashboard/src/Pages/Settings/Billing.tsx +++ b/Dashboard/src/Pages/Settings/Billing.tsx @@ -320,9 +320,9 @@ const Settings: FunctionComponent = ( { title: 'Add Payment Method', icon: IconProp.Add, - onClick: () => { - fetchSetupIntent(); + onClick: async () => { setShowPaymentMethodModal(true); + await fetchSetupIntent(); }, buttonStyle: ButtonStyleType.NORMAL, }, diff --git a/Dashboard/src/Pages/Workflow/View/Builder.tsx b/Dashboard/src/Pages/Workflow/View/Builder.tsx index 52f8191697..3c1d81d788 100644 --- a/Dashboard/src/Pages/Workflow/View/Builder.tsx +++ b/Dashboard/src/Pages/Workflow/View/Builder.tsx @@ -1,11 +1,6 @@ import Route from 'Common/Types/API/Route'; import ModelPage from 'CommonUI/src/Components/Page/ModelPage'; -import React, { - FunctionComponent, - ReactElement, - useEffect, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement, useState } from 'react'; import PageMap from '../../../Utils/PageMap'; import RouteMap, { RouteUtil } from '../../../Utils/RouteMap'; import PageComponentProps from '../../PageComponentProps'; @@ -38,6 +33,7 @@ import API from 'CommonUI/src/Utils/API/API'; import { WORKFLOW_URL } from 'CommonUI/src/Config'; import URL from 'Common/Types/API/URL'; import Banner from 'CommonUI/src/Components/Banner/Banner'; +import { useAsyncEffect } from 'use-async-effect'; const Delete: FunctionComponent = ( _props: PageComponentProps @@ -257,8 +253,8 @@ const Delete: FunctionComponent = ( ); }; - useEffect(() => { - loadGraph().catch(); + useAsyncEffect(async () => { + await loadGraph(); }, []); return ( diff --git a/DashboardAPI/Index.ts b/DashboardAPI/Index.ts index 881dfa3547..d1ef870b9c 100755 --- a/DashboardAPI/Index.ts +++ b/DashboardAPI/Index.ts @@ -973,4 +973,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/File/Index.ts b/File/Index.ts index d828edac73..7fbf9bc3e6 100644 --- a/File/Index.ts +++ b/File/Index.ts @@ -40,4 +40,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/Identity/Index.ts b/Identity/Index.ts index 76b9d48ecf..4829b2228f 100644 --- a/Identity/Index.ts +++ b/Identity/Index.ts @@ -41,4 +41,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/LinkShortener/Index.ts b/LinkShortener/Index.ts index 3905173b29..35789e2f0a 100644 --- a/LinkShortener/Index.ts +++ b/LinkShortener/Index.ts @@ -25,6 +25,8 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); export default app; diff --git a/Notification/Index.ts b/Notification/Index.ts index 3336d805ff..1658e83528 100644 --- a/Notification/Index.ts +++ b/Notification/Index.ts @@ -39,4 +39,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/Probe/Index.ts b/Probe/Index.ts index 6fc278abf6..f43e624617 100644 --- a/Probe/Index.ts +++ b/Probe/Index.ts @@ -52,4 +52,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/ProbeAPI/Index.ts b/ProbeAPI/Index.ts index 75cb3e1ad9..aa82b197da 100644 --- a/ProbeAPI/Index.ts +++ b/ProbeAPI/Index.ts @@ -38,4 +38,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/Scripts/Install/MergeEnvTemplate.ts b/Scripts/Install/MergeEnvTemplate.ts index e81b7fee2d..6649cb5f04 100644 --- a/Scripts/Install/MergeEnvTemplate.ts +++ b/Scripts/Install/MergeEnvTemplate.ts @@ -1,5 +1,6 @@ // This script merges config.env.tpl to config.env +import logger from 'CommonServer/Utils/Logger'; import fs from 'fs'; const init: Function = (): void => { @@ -39,4 +40,6 @@ const init: Function = (): void => { fs.writeFileSync('./config.env', linesInEnv.join('\n')); }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/Scripts/Install/ReplaceValueInConfig.ts b/Scripts/Install/ReplaceValueInConfig.ts index 11bd0df1ce..f898bd439f 100644 --- a/Scripts/Install/ReplaceValueInConfig.ts +++ b/Scripts/Install/ReplaceValueInConfig.ts @@ -1,5 +1,6 @@ // This script merges config.env.tpl to config.env +import logger from 'CommonServer/Utils/Logger'; import fs from 'fs'; const init: Function = (): void => { @@ -50,4 +51,6 @@ const init: Function = (): void => { fs.writeFileSync('./config.env', linesToRender.join('\n')); }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/StatusPage/Serve.ts b/StatusPage/Serve.ts index 1d95237c07..606948808b 100644 --- a/StatusPage/Serve.ts +++ b/StatusPage/Serve.ts @@ -21,6 +21,8 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); export default app; diff --git a/TestServer/Index.ts b/TestServer/Index.ts index d6bbed1527..cca20009e2 100644 --- a/TestServer/Index.ts +++ b/TestServer/Index.ts @@ -22,4 +22,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/Workers/Index.ts b/Workers/Index.ts index accf1debe5..3a04b5b8a5 100644 --- a/Workers/Index.ts +++ b/Workers/Index.ts @@ -114,4 +114,6 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); diff --git a/Workflow/Index.ts b/Workflow/Index.ts index c1398261fb..76e9e04c23 100644 --- a/Workflow/Index.ts +++ b/Workflow/Index.ts @@ -71,6 +71,8 @@ const init: () => Promise = async (): Promise => { } }; -init(); +init().catch((err: Error) => { + logger.error(err); +}); export default app;