diff --git a/Common/Types/CustomField/CustomFieldType.ts b/Common/Types/CustomField/CustomFieldType.ts index a5a2db71f0..b6655b8bca 100644 --- a/Common/Types/CustomField/CustomFieldType.ts +++ b/Common/Types/CustomField/CustomFieldType.ts @@ -1,7 +1,7 @@ enum CustomFieldType { - Text = 'Text', + Text = 'Text', Number = 'Number', - Boolean = 'Boolean' + Boolean = 'Boolean', } -export default CustomFieldType; \ No newline at end of file +export default CustomFieldType; diff --git a/Common/Types/Permission.ts b/Common/Types/Permission.ts index 017316ff07..38b7d520ed 100644 --- a/Common/Types/Permission.ts +++ b/Common/Types/Permission.ts @@ -46,46 +46,36 @@ enum Permission { CanInviteProjectTeamMembers = 'CanInviteProjectTeamMembers', CanEditProjectTeamPermissions = 'CanEditProjectTeamPermissions', - CanCreateProjectProbe = 'CanCreateProjectProbe', CanDeleteProjectProbe = 'CanDeleteProjectProbe', CanEditProjectProbe = 'CanEditProjectProbe', CanReadProjectProbe = 'CanReadProjectProbe', - - CanCreateMonitorCustomField = 'CanCreateMonitorCustomField', CanDeleteMonitorCustomField = 'CanDeleteMonitorCustomField', CanEditMonitorCustomField = 'CanEditMonitorCustomField', CanReadMonitorCustomField = 'CanReadMonitorCustomField', - CanCreateScheduledMaintenanceCustomField = 'CanCreateScheduledMaintenanceCustomField', CanDeleteScheduledMaintenanceCustomField = 'CanDeleteScheduledMaintenanceCustomField', CanEditScheduledMaintenanceCustomField = 'CanEditScheduledMaintenanceCustomField', CanReadScheduledMaintenanceCustomField = 'CanReadScheduledMaintenanceCustomField', - - CanCreateStatusPageCustomField = 'CanCreateStatusPageCustomField', CanDeleteStatusPageCustomField = 'CanDeleteStatusPageCustomField', CanEditStatusPageCustomField = 'CanEditStatusPageCustomField', CanReadStatusPageCustomField = 'CanReadStatusPageCustomField', - - CanCreateIncidentCustomField = 'CanCreateIncidentCustomField', CanDeleteIncidentCustomField = 'CanDeleteIncidentCustomField', CanEditIncidentCustomField = 'CanEditIncidentCustomField', CanReadIncidentCustomField = 'CanReadIncidentCustomField', - CanCreateProjectIncident = 'CanCreateProjectIncident', CanDeleteProjectIncident = 'CanDeleteProjectIncident', CanEditProjectIncident = 'CanEditProjectIncident', CanReadProjectIncident = 'CanReadProjectIncident', - CanCreateStatusPageSubscriber = 'CanCreateStatusPageSubscriber', CanDeleteStatusPageSubscriber = 'CanDeleteStatusPageSubscriber', CanEditStatusPageSubscriber = 'CanEditStatusPageSubscriber', @@ -96,60 +86,50 @@ enum Permission { CanEditStatusPagePrivateUser = 'CanEditStatusPagePrivateUser', CanReadStatusPagePrivateUser = 'CanReadStatusPagePrivateUser', - CanCreateProjectDomain = 'CanCreateProjectDomain', CanDeleteProjectDomain = 'CanDeleteProjectDomain', CanEditProjectDomain = 'CanEditProjectDomain', CanReadProjectDomain = 'CanReadProjectDomain', - CanCreateStatusPageHeaderLink = 'CanCreateStatusPageHeaderLink', CanDeleteStatusPageHeaderLink = 'CanDeleteStatusPageHeaderLink', CanEditStatusPageHeaderLink = 'CanEditStatusPageHeaderLink', CanReadStatusPageHeaderLink = 'CanReadStatusPageHeaderLink', - CanCreateStatusPageFooterLink = 'CanCreateStatusPageFooterLink', CanDeleteStatusPageFooterLink = 'CanDeleteStatusPageFooterLink', CanEditStatusPageFooterLink = 'CanEditStatusPageFooterLink', CanReadStatusPageFooterLink = 'CanReadStatusPageFooterLink', - CanCreateStatusPageResource = 'CanCreateStatusPageResource', CanDeleteStatusPageResource = 'CanDeleteStatusPageResource', CanEditStatusPageResource = 'CanEditStatusPageResource', CanReadStatusPageResource = 'CanReadStatusPageResource', - CanCreateWorkflow = 'CanCreateWorkflow', CanDeleteWorkflow = 'CanDeleteWorkflow', CanEditWorkflow = 'CanEditWorkflow', CanReadWorkflow = 'CanReadWorkflow', - CanDeleteProject = 'CanDeleteProject', CanEditProject = 'CanEditProject', CanReadProject = 'CanReadProject', - CanCreateWorkflowLog = 'CanCreateWorkflowLog', CanDeleteWorkflowLog = 'CanDeleteWorkflowLog', CanEditWorkflowLog = 'CanEditWorkflowLog', CanReadWorkflowLog = 'CanReadWorkflowLog', - CanCreateWorkflowVariable = 'CanCreateWorkflowVariable', CanDeleteWorkflowVariable = 'CanDeleteWorkflowVariable', CanEditWorkflowVariable = 'CanEditWorkflowVariable', CanReadWorkflowVariable = 'CanReadWorkflowVariable', - CanCreateStatusPageGroup = 'CanCreateStatusPageGroup', CanDeleteStatusPageGroup = 'CanDeleteStatusPageGroup', CanEditStatusPageGroup = 'CanEditStatusPageGroup', CanReadStatusPageGroup = 'CanReadStatusPageGroup', - CanCreateStatusPageDomain = 'CanCreateStatusPageDomain', CanDeleteStatusPageDomain = 'CanDeleteStatusPageDomain', CanEditStatusPageDomain = 'CanEditStatusPageDomain', @@ -187,7 +167,6 @@ enum Permission { CanDeleteScheduledMaintenancePublicNote = 'CanDeleteScheduledMaintenancePublicNote', CanReadScheduledMaintenancePublicNote = 'CanReadScheduledMaintenancePublicNote', - CanCreateProjectScheduledMaintenance = 'CanCreateProjectScheduledMaintenance', CanDeleteProjectScheduledMaintenance = 'CanDeleteProjectScheduledMaintenance', CanEditProjectScheduledMaintenance = 'CanEditProjectScheduledMaintenance', @@ -1444,7 +1423,6 @@ export class PermissionHelper { isAccessControlPermission: false, }, - { permission: Permission.CanCreateMonitorCustomField, title: 'Can Create Monitor Custom Field', @@ -1478,7 +1456,6 @@ export class PermissionHelper { isAccessControlPermission: false, }, - { permission: Permission.CanCreateIncidentCustomField, title: 'Can Create Incident Custom Field', @@ -1512,7 +1489,6 @@ export class PermissionHelper { isAccessControlPermission: false, }, - { permission: Permission.CanCreateStatusPageCustomField, title: 'Can Create Status Page Custom Field', @@ -1546,8 +1522,6 @@ export class PermissionHelper { isAccessControlPermission: false, }, - - { permission: Permission.CanCreateScheduledMaintenanceCustomField, title: 'Can Create Scheduled Maintenance Custom Field', @@ -1581,12 +1555,6 @@ export class PermissionHelper { isAccessControlPermission: false, }, - - - - - - { permission: Permission.CanCreateProjectIncident, title: 'Can Create Incident', diff --git a/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx b/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx index 9a28670478..8d9477e2ef 100644 --- a/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx +++ b/CommonUI/src/Components/CustomFields/CustomFieldsDetail.tsx @@ -1,9 +1,13 @@ - -import React, { FunctionComponent, ReactElement, useEffect, useState } from 'react'; +import React, { + FunctionComponent, + ReactElement, + useEffect, + useState, +} from 'react'; import ObjectID from 'Common/Types/ObjectID'; import BaseModel from 'Common/Models/BaseModel'; import Card from '../Card/Card'; -import ModelAPI from '../../Utils/ModelAPI/ModelAPI'; +import ModelAPI, { ListResult } from '../../Utils/ModelAPI/ModelAPI'; import { LIMIT_PER_PROJECT } from 'Common/Types/Database/LimitMax'; import ComponentLoader from '../ComponentLoader/ComponentLoader'; import ErrorMessage from '../ErrorMessage/ErrorMessage'; @@ -18,8 +22,8 @@ export interface ComponentProps { title: string; description: string; modelId: ObjectID; - modelType: { new(): BaseModel }; - customFieldType: { new(): BaseModel }; + modelType: { new (): BaseModel }; + customFieldType: { new (): BaseModel }; projectId: ObjectID; name: string; } @@ -27,31 +31,41 @@ export interface ComponentProps { const CustomFieldsDetail: FunctionComponent = ( props: ComponentProps ): ReactElement => { - - const [schemaList, setSchemaList] = useState>([]); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const [model, setModel] = useState(null); const [showModelForm, setShowModelForm] = useState(false); - const onLoad = async () => { - + const onLoad: Function = async (): Promise => { try { - // load schema. + // load schema. setIsLoading(true); - const schemaList = await ModelAPI.getList(props.customFieldType, { - projectId: props.projectId - } as any, LIMIT_PER_PROJECT, 0, { - name: true, - type: true, - description: true - } as any, {}, {}) + const schemaList: ListResult = + await ModelAPI.getList( + props.customFieldType, + { + projectId: props.projectId, + } as any, + LIMIT_PER_PROJECT, + 0, + { + name: true, + type: true, + description: true, + } as any, + {}, + {} + ); - const item = await ModelAPI.getItem(props.modelType, props.modelId, { - customFields: true - } as any) + const item: BaseModel | null = await ModelAPI.getItem( + props.modelType, + props.modelId, + { + customFields: true, + } as any + ); setSchemaList(schemaList.data); setModel(item); @@ -62,104 +76,112 @@ const CustomFieldsDetail: FunctionComponent = ( try { setError( (err as HTTPErrorResponse).message || - 'Server Error. Please try again' + 'Server Error. Please try again' ); } catch (e) { setError('Server Error. Please try again'); } } - } - - - const onSave = async (data: JSONObject) => { + }; + const onSave: Function = async (data: JSONObject): Promise => { try { - // load schema. + // load schema. setIsLoading(true); setShowModelForm(false); await ModelAPI.updateById(props.modelType, props.modelId, { - customFields: data + customFields: data, }); await onLoad(); - } catch (err) { setIsLoading(false); try { setError( (err as HTTPErrorResponse).message || - 'Server Error. Please try again' + 'Server Error. Please try again' ); } catch (e) { setError('Server Error. Please try again'); } } - } + }; useEffect(() => { - onLoad(); + onLoad().catch(); }, []); - - return ( { - setShowModelForm(true) + return ( + { + setShowModelForm(true); + }, + icon: IconProp.Edit, }, - icon: IconProp.Edit, + ]} + > +
+ {isLoading && !error && } + {!isLoading && !error && schemaList.length === 0 && ( + + )} + {error && } + {!model && } - } - ]} - > -
- {isLoading && !error && } - {!isLoading && !error && schemaList.length === 0 && } - {error && } - {!model && } + {!isLoading && !error && model && ( + { + return { + key: [(schemaItem as any).name], + title: (schemaItem as any).name, + description: (schemaItem as any).description, + fieldType: (schemaItem as any).type, + placeholder: 'No data entered', + }; + })} + showDetailsInNumberOfColumns={1} + /> + )} - {!isLoading && !error && model && { - return { - key: [(schemaItem as any).name], - title: (schemaItem as any).name, - description: (schemaItem as any).description, - fieldType: (schemaItem as any).type, - placeholder: "No data entered" - } - })} - showDetailsInNumberOfColumns={1} - />} - - {showModelForm && setShowModelForm(false)} - onSubmit={(data: JSONObject) => { - onSave(data); - }} - formProps={{ - initialValues: (model as any)["customFields"] || {}, - fields: schemaList.map((schemaItem: BaseModel) => { - return { - field: { - [(schemaItem as any).name]: true, - }, - title: (schemaItem as any).name, - description: (schemaItem as any).description, - fieldType: (schemaItem as any).type, - required: false, - placeholder: '' - } - }) - }} - />} -
- ) + {showModelForm && ( + { + return setShowModelForm(false); + }} + onSubmit={(data: JSONObject) => { + onSave(data).catch(); + }} + formProps={{ + initialValues: (model as any)['customFields'] || {}, + fields: schemaList.map((schemaItem: BaseModel) => { + return { + field: { + [(schemaItem as any).name]: true, + }, + title: (schemaItem as any).name, + description: (schemaItem as any) + .description, + fieldType: (schemaItem as any).type, + required: false, + placeholder: '', + }; + }), + }} + /> + )} +
+
+ ); }; export default CustomFieldsDetail; diff --git a/CommonUI/src/Components/Detail/Detail.tsx b/CommonUI/src/Components/Detail/Detail.tsx index b33a88f0a5..033700aa80 100644 --- a/CommonUI/src/Components/Detail/Detail.tsx +++ b/CommonUI/src/Components/Detail/Detail.tsx @@ -195,7 +195,9 @@ const Detail: Function = (props: ComponentProps): ReactElement => { )} {field.description && ( -

{field.description}

+

+ {field.description} +

)}
diff --git a/CommonUI/src/Components/Forms/ModelForm.tsx b/CommonUI/src/Components/Forms/ModelForm.tsx index 74114c9932..a0f7b06d66 100644 --- a/CommonUI/src/Components/Forms/ModelForm.tsx +++ b/CommonUI/src/Components/Forms/ModelForm.tsx @@ -45,13 +45,13 @@ export enum FormType { } export interface ComponentProps { - modelType: { new(): TBaseModel }; + modelType: { new (): TBaseModel }; id: string; onValidate?: - | undefined - | (( - values: FormValues - ) => FormikErrors>); + | undefined + | (( + values: FormValues + ) => FormikErrors>); fields: Fields; submitButtonText?: undefined | string; title?: undefined | string; @@ -61,8 +61,8 @@ export interface ComponentProps { onCancel?: undefined | (() => void); name: string; onSuccess?: - | undefined - | ((data: TBaseModel | JSONObjectOrArray | Array) => void); + | undefined + | ((data: TBaseModel | JSONObjectOrArray | Array) => void); cancelButtonText?: undefined | string; maxPrimaryButtonWidth?: undefined | boolean; apiUrl?: undefined | URL; @@ -75,8 +75,8 @@ export interface ComponentProps { modelIdToEdit?: ObjectID | undefined; onError?: ((error: string) => void) | undefined; onBeforeCreate?: - | ((item: TBaseModel | BaseModel) => Promise) - | undefined; + | ((item: TBaseModel | BaseModel) => Promise) + | undefined; saveRequestOptions?: RequestOptions | undefined; doNotFetchExistingModel?: boolean | undefined; } @@ -96,7 +96,6 @@ const ModelForm: Function = ( const getSelectFields: Function = (): Select => { const select: Select = {}; for (const field of props.fields) { - const key: string | null = field.field ? (Object.keys(field.field)[0] as string) : null; @@ -132,7 +131,6 @@ const ModelForm: Function = ( return populate; }; - const hasPermissionOnField: Function = (fieldName: string): boolean => { let userPermissions: Array = PermissionUtil.getGlobalPermissions()?.globalPermissions || []; @@ -164,21 +162,19 @@ const ModelForm: Function = ( } if ( - (fieldPermissions && - PermissionHelper.doesPermissionsIntersect( - userPermissions, - fieldPermissions - )) + fieldPermissions && + PermissionHelper.doesPermissionsIntersect( + userPermissions, + fieldPermissions + ) ) { - return true; + return true; } - return false; - } + return false; + }; const setFormFields: Function = async (): Promise => { - - let fieldsToSet: Fields = []; for (const field of props.fields) { @@ -187,12 +183,9 @@ const ModelForm: Function = ( if (keys.length > 0) { const key: string = keys[0] as string; - const hasPermission = hasPermissionOnField(key); + const hasPermission: boolean = hasPermissionOnField(key); - if ( - field.forceShow || - hasPermission - ) { + if (field.forceShow || hasPermission) { fieldsToSet.push(field); } } @@ -255,7 +248,7 @@ const ModelForm: Function = ( isModelArray = true; idArray.push( (itemInArray as any as JSONObject)[ - '_id' + '_id' ] as string ); } @@ -334,7 +327,7 @@ const ModelForm: Function = ( try { setError( (err as HTTPErrorResponse).message || - 'Server Error. Please try again' + 'Server Error. Please try again' ); } catch (e) { setError('Server Error. Please try again'); @@ -442,7 +435,7 @@ const ModelForm: Function = ( Array.isArray(valuesToSend[key]) && (valuesToSend[key] as Array).length > 0 && typeof (valuesToSend[key] as Array)[0] === - Typeof.String + Typeof.String ) { const arr: Array = []; for (const id of valuesToSend[key] as Array) { @@ -479,7 +472,7 @@ const ModelForm: Function = ( } catch (err) { setError( (err as HTTPErrorResponse).message || - 'Server Error. Please try again' + 'Server Error. Please try again' ); } diff --git a/CommonUI/src/Components/Forms/Types/FormFieldSchemaType.ts b/CommonUI/src/Components/Forms/Types/FormFieldSchemaType.ts index 22f80457a5..ed932470db 100644 --- a/CommonUI/src/Components/Forms/Types/FormFieldSchemaType.ts +++ b/CommonUI/src/Components/Forms/Types/FormFieldSchemaType.ts @@ -1,34 +1,34 @@ enum FormFieldSchemaType { - ObjectID = "ObjectID", - Name = "Name", - Hostname = "Hostname", - ImageFile = "ImageFile", - URL = "URL", - Route = "Route", - Number = "Number", - Password = "Password", - Text = "Text", - Email = "Email", - PositveNumber = "PositveNumber", - Date = "Date", - Phone = "Phone", - DateTime = "DateTime", - Domain = "Domain", - LongText = "LongText", - Color = "Color", - Dropdown = "Dropdown", - File = "File", - MultiSelectDropdown = "MultiSelectDropdown", - Checkbox = "Boolean", - Port = "Port", - EncryptedText = "EncryptedText", - Markdown = "Markdown", - JavaScript = "JavaScript", - CSS = "CSS", - HTML = "HTML", - RadioButton = "RadioButton", - JSON = "JSON", - Query = "Query", + ObjectID = 'ObjectID', + Name = 'Name', + Hostname = 'Hostname', + ImageFile = 'ImageFile', + URL = 'URL', + Route = 'Route', + Number = 'Number', + Password = 'Password', + Text = 'Text', + Email = 'Email', + PositveNumber = 'PositveNumber', + Date = 'Date', + Phone = 'Phone', + DateTime = 'DateTime', + Domain = 'Domain', + LongText = 'LongText', + Color = 'Color', + Dropdown = 'Dropdown', + File = 'File', + MultiSelectDropdown = 'MultiSelectDropdown', + Checkbox = 'Boolean', + Port = 'Port', + EncryptedText = 'EncryptedText', + Markdown = 'Markdown', + JavaScript = 'JavaScript', + CSS = 'CSS', + HTML = 'HTML', + RadioButton = 'RadioButton', + JSON = 'JSON', + Query = 'Query', } export default FormFieldSchemaType; diff --git a/CommonUI/src/Components/Icon/Icon.tsx b/CommonUI/src/Components/Icon/Icon.tsx index e749ef7da1..df260acefd 100644 --- a/CommonUI/src/Components/Icon/Icon.tsx +++ b/CommonUI/src/Components/Icon/Icon.tsx @@ -148,7 +148,11 @@ const Icon: FunctionComponent = ({ ); } else if (icon === IconProp.TableCells) { return getSvgWrapper( - + ); } else if (icon === IconProp.Database) { return getSvgWrapper( diff --git a/Dashboard/src/App.tsx b/Dashboard/src/App.tsx index f99c243b00..8479cd0651 100644 --- a/Dashboard/src/App.tsx +++ b/Dashboard/src/App.tsx @@ -66,7 +66,6 @@ import ScheduledMaintenanceEventPublicNote from './Pages/ScheduledMaintenanceEve import OngoingScheduledMaintenanceEvents from './Pages/ScheduledMaintenanceEvents/Ongoing'; import ScheduledMaintenanceEventsViewCustomFields from './Pages/ScheduledMaintenanceEvents/View/CustomFields'; - import Logs from './Pages/Logs/Logs'; import Navigation from 'CommonUI/src/Utils/Navigation'; import RouteMap from './Utils/RouteMap'; @@ -200,7 +199,7 @@ const App: FunctionComponent = () => { } catch (err) { setError( (err as HTTPErrorResponse).message || - 'Server Error. Please try again' + 'Server Error. Please try again' ); } @@ -285,7 +284,7 @@ const App: FunctionComponent = () => { { { { { { { { { { { { { { { { { { { { { { { { { { { } /> - { { { { { { { { { { { { { } /> - @@ -1318,27 +1327,35 @@ const App: FunctionComponent = () => { } /> - @@ -1367,7 +1384,7 @@ const App: FunctionComponent = () => { = ( ]} sideMenu={} > - = ( title: 'State Timeline', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap.INCIDENT_VIEW_STATE_TIMELINE + PageMap.INCIDENT_VIEW_STATE_TIMELINE ] as Route, props.modelId ), @@ -70,7 +70,9 @@ const DashboardSideMenu: FunctionComponent = ( link={{ title: 'Custom Fields', to: RouteUtil.populateRouteParams( - RouteMap[PageMap.INCIDENT_VIEW_CUSTOM_FIELDS] as Route, + RouteMap[ + PageMap.INCIDENT_VIEW_CUSTOM_FIELDS + ] as Route, props.modelId ), }} diff --git a/Dashboard/src/Pages/Monitor/View/CustomFields.tsx b/Dashboard/src/Pages/Monitor/View/CustomFields.tsx index 680b624312..32f9900fd2 100644 --- a/Dashboard/src/Pages/Monitor/View/CustomFields.tsx +++ b/Dashboard/src/Pages/Monitor/View/CustomFields.tsx @@ -7,7 +7,7 @@ import PageComponentProps from '../../PageComponentProps'; import SideMenu from './SideMenu'; import Navigation from 'CommonUI/src/Utils/Navigation'; import ObjectID from 'Common/Types/ObjectID'; -import CustomFieldsDetail from "CommonUI/src/Components/CustomFields/CustomFieldsDetail"; +import CustomFieldsDetail from 'CommonUI/src/Components/CustomFields/CustomFieldsDetail'; import Monitor from 'Model/Models/Monitor'; import MonitorCustomField from 'Model/Models/MonitorCustomField'; import ProjectUtil from 'CommonUI/src/Utils/Project'; @@ -52,9 +52,9 @@ const MonitorCustomFields: FunctionComponent = ( ]} sideMenu={} > - = ( title: 'Status Timeline', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap.MONITOR_VIEW_STATUS_TIMELINE + PageMap.MONITOR_VIEW_STATUS_TIMELINE ] as Route, props.modelId ), @@ -57,7 +57,9 @@ const DashboardSideMenu: FunctionComponent = ( link={{ title: 'Custom Fields', to: RouteUtil.populateRouteParams( - RouteMap[PageMap.MONITOR_VIEW_CUSTOM_FIELDS] as Route, + RouteMap[ + PageMap.MONITOR_VIEW_CUSTOM_FIELDS + ] as Route, props.modelId ), }} diff --git a/Dashboard/src/Pages/ScheduledMaintenanceEvents/View/CustomFields.tsx b/Dashboard/src/Pages/ScheduledMaintenanceEvents/View/CustomFields.tsx index c2a87cdb57..a9cddc2436 100644 --- a/Dashboard/src/Pages/ScheduledMaintenanceEvents/View/CustomFields.tsx +++ b/Dashboard/src/Pages/ScheduledMaintenanceEvents/View/CustomFields.tsx @@ -7,14 +7,14 @@ import PageComponentProps from '../../PageComponentProps'; import SideMenu from './SideMenu'; import Navigation from 'CommonUI/src/Utils/Navigation'; import ObjectID from 'Common/Types/ObjectID'; -import CustomFieldsDetail from "CommonUI/src/Components/CustomFields/CustomFieldsDetail"; +import CustomFieldsDetail from 'CommonUI/src/Components/CustomFields/CustomFieldsDetail'; import ScheduledMaintenance from 'Model/Models/ScheduledMaintenance'; import ScheduledMaintenanceCustomField from 'Model/Models/ScheduledMaintenanceCustomField'; import ProjectUtil from 'CommonUI/src/Utils/Project'; -const ScheduledMaintenanceCustomFields: FunctionComponent = ( - _props: PageComponentProps -): ReactElement => { +const ScheduledMaintenanceCustomFields: FunctionComponent< + PageComponentProps +> = (_props: PageComponentProps): ReactElement => { const modelId: ObjectID = Navigation.getLastParamAsObjectID(1); return ( @@ -45,16 +45,18 @@ const ScheduledMaintenanceCustomFields: FunctionComponent = { title: 'Custom Fields', to: RouteUtil.populateRouteParams( - RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW_CUSTOM_FIELDS] as Route, + RouteMap[ + PageMap.SCHEDULED_MAINTENANCE_VIEW_CUSTOM_FIELDS + ] as Route, modelId ), }, ]} sideMenu={} > - = ( title: 'Overview', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap.SCHEDULED_MAINTENANCE_VIEW + PageMap.SCHEDULED_MAINTENANCE_VIEW ] as Route, props.modelId ), @@ -35,8 +35,8 @@ const DashboardSideMenu: FunctionComponent = ( title: 'State Timeline', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap - .SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE + PageMap + .SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE ] as Route, props.modelId ), @@ -51,7 +51,7 @@ const DashboardSideMenu: FunctionComponent = ( title: 'Private Notes', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE + PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE ] as Route, props.modelId ), @@ -63,7 +63,7 @@ const DashboardSideMenu: FunctionComponent = ( title: 'Public Notes', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE + PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE ] as Route, props.modelId ), @@ -77,7 +77,9 @@ const DashboardSideMenu: FunctionComponent = ( link={{ title: 'Custom Fields', to: RouteUtil.populateRouteParams( - RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW_CUSTOM_FIELDS] as Route, + RouteMap[ + PageMap.SCHEDULED_MAINTENANCE_VIEW_CUSTOM_FIELDS + ] as Route, props.modelId ), }} @@ -89,7 +91,7 @@ const DashboardSideMenu: FunctionComponent = ( title: 'Delete Scheduled Maintenance', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE + PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE ] as Route, props.modelId ), diff --git a/Dashboard/src/Pages/Settings/Base/CustomFieldsPageBase.tsx b/Dashboard/src/Pages/Settings/Base/CustomFieldsPageBase.tsx index b0e8cbcfc5..b601de6e67 100644 --- a/Dashboard/src/Pages/Settings/Base/CustomFieldsPageBase.tsx +++ b/Dashboard/src/Pages/Settings/Base/CustomFieldsPageBase.tsx @@ -14,10 +14,11 @@ import Navigation from 'CommonUI/src/Utils/Navigation'; import BaseModel from 'Common/Models/BaseModel'; import CustomFieldType from 'Common/Types/CustomField/CustomFieldType'; -export interface ComponentProps extends PageComponentProps { +export interface ComponentProps + extends PageComponentProps { title: string; currentRoute: Route; - modelType: { new(): TBaseModel }; + modelType: { new (): TBaseModel }; } const CustomFieldsPageBase: Function = ( @@ -52,7 +53,7 @@ const CustomFieldsPageBase: Function = ( projectId: DashboardNavigation.getProjectId()?.toString(), }} id="custom-fields-table" - name={"Settings > " + props.title} + name={'Settings > ' + props.title} isDeleteable={true} isEditable={true} isCreateable={true} @@ -95,19 +96,19 @@ const CustomFieldsPageBase: Function = ( fieldType: FormFieldSchemaType.Dropdown, required: true, placeholder: 'Please select field type.', - dropdownOptions: Object.keys(CustomFieldType).map((item) => { - return { - label: item, - value: item + dropdownOptions: Object.keys(CustomFieldType).map( + (item: string) => { + return { + label: item, + value: item, + }; } - }) - + ), }, ]} showRefreshButton={true} showFilterButton={true} columns={[ - { field: { name: true, diff --git a/Dashboard/src/Pages/Settings/IncidentCustomFields.tsx b/Dashboard/src/Pages/Settings/IncidentCustomFields.tsx index e5338583a5..f6a2ca42a1 100644 --- a/Dashboard/src/Pages/Settings/IncidentCustomFields.tsx +++ b/Dashboard/src/Pages/Settings/IncidentCustomFields.tsx @@ -6,12 +6,11 @@ import CustomFieldsPageBase from './Base/CustomFieldsPageBase'; import Route from 'Common/Types/API/Route'; import IncidentCustomField from 'Model/Models/IncidentCustomField'; - const IncidentCustomFields: FunctionComponent = ( props: PageComponentProps ): ReactElement => { return ( - = ( props: PageComponentProps ): ReactElement => { return ( - = ( - props: PageComponentProps -): ReactElement => { +const ScheduledMaintenanceCustomFields: FunctionComponent< + PageComponentProps +> = (props: PageComponentProps): ReactElement => { return ( - diff --git a/Dashboard/src/Pages/Settings/SideMenu.tsx b/Dashboard/src/Pages/Settings/SideMenu.tsx index 5509448b64..564578fe4c 100644 --- a/Dashboard/src/Pages/Settings/SideMenu.tsx +++ b/Dashboard/src/Pages/Settings/SideMenu.tsx @@ -64,7 +64,7 @@ const DashboardSideMenu: FunctionComponent = (): ReactElement => { }} icon={IconProp.AltGlobe} /> - { /> - { title: 'Scheduled Maintenance Custom Fields', to: RouteUtil.populateRouteParams( RouteMap[ - PageMap.SETTINGS_SCHEDULED_MAINTENANCE_CUSTOM_FIELDS + PageMap + .SETTINGS_SCHEDULED_MAINTENANCE_CUSTOM_FIELDS ] as Route ), }} diff --git a/Dashboard/src/Pages/Settings/StatusPageCustomFields.tsx b/Dashboard/src/Pages/Settings/StatusPageCustomFields.tsx index 8f4dd0d0b9..2bb50688c6 100644 --- a/Dashboard/src/Pages/Settings/StatusPageCustomFields.tsx +++ b/Dashboard/src/Pages/Settings/StatusPageCustomFields.tsx @@ -6,12 +6,11 @@ import CustomFieldsPageBase from './Base/CustomFieldsPageBase'; import Route from 'Common/Types/API/Route'; import StatusPageCustomField from 'Model/Models/StatusPageCustomField'; - const StatusPageCustomFields: FunctionComponent = ( props: PageComponentProps ): ReactElement => { return ( - = ( { title: 'Custom Fields', to: RouteUtil.populateRouteParams( - RouteMap[PageMap.STATUS_PAGE_VIEW_CUSTOM_FIELDS] as Route, + RouteMap[ + PageMap.STATUS_PAGE_VIEW_CUSTOM_FIELDS + ] as Route, modelId ), }, ]} sideMenu={} > - = ( - - - = { `/dashboard/${RouteParams.ProjectID}/monitors/${RouteParams.ModelID}/custom-fields` ), - [PageMap.MONITOR_VIEW_DELETE]: new Route( `/dashboard/${RouteParams.ProjectID}/monitors/${RouteParams.ModelID}/delete` ), @@ -309,11 +308,8 @@ const RouteMap: Dictionary = { [PageMap.WORKFLOW_DELETE]: new Route( `/dashboard/${RouteParams.ProjectID}/workflows/workflow/${RouteParams.ModelID}/delete` ), - - - - /// custom fields settings. + /// custom fields settings. [PageMap.SETTINGS_MONITOR_CUSTOM_FIELDS]: new Route( `/dashboard/${RouteParams.ProjectID}/settings/monitor-custom-fields` @@ -330,10 +326,6 @@ const RouteMap: Dictionary = { `/dashboard/${RouteParams.ProjectID}/settings/status-page-custom-fields` ), - - - - // logout. [PageMap.LOGOUT]: new Route(`/dashboard/logout`), }; diff --git a/DashboardAPI/Index.ts b/DashboardAPI/Index.ts index 54ddd6e1e3..dcddc67a62 100755 --- a/DashboardAPI/Index.ts +++ b/DashboardAPI/Index.ts @@ -201,14 +201,12 @@ import StatusPageAPI from 'CommonServer/API/StatusPageAPI'; import StatusPageSubscriberAPI from 'CommonServer/API/StatusPageSubscriberAPI'; - -// Custom Fields API +// Custom Fields API import StatusPageCustomField from 'Model/Models/StatusPageCustomField'; import StatusPageCustomFieldService, { Service as StatusPageCustomFieldServiceType, } from 'CommonServer/Services/StatusPageCustomFieldService'; - import MonitorCustomField from 'Model/Models/MonitorCustomField'; import MonitorCustomFieldService, { Service as MonitorCustomFieldServiceType, @@ -224,7 +222,6 @@ import ScheduledMaintenanceCustomFieldService, { Service as ScheduledMaintenanceCustomFieldServiceType, } from 'CommonServer/Services/ScheduledMaintenanceCustomFieldService'; - const app: ExpressApplication = Express.getExpressApp(); const APP_NAME: string = 'api'; @@ -540,18 +537,17 @@ app.use( ).getRouter() ); - - app.use( `/${APP_NAME.toLocaleLowerCase()}`, - new BaseAPI( + new BaseAPI< + ScheduledMaintenanceCustomField, + ScheduledMaintenanceCustomFieldServiceType + >( ScheduledMaintenanceCustomField, ScheduledMaintenanceCustomFieldService ).getRouter() ); - - app.use( `/${APP_NAME.toLocaleLowerCase()}`, new BaseAPI( @@ -560,8 +556,6 @@ app.use( ).getRouter() ); - - app.use( `/${APP_NAME.toLocaleLowerCase()}`, new BaseAPI( @@ -570,7 +564,6 @@ app.use( ).getRouter() ); - app.use( `/${APP_NAME.toLocaleLowerCase()}`, new BaseAPI( @@ -579,8 +572,6 @@ app.use( ).getRouter() ); - - const init: Function = async (): Promise => { try { // init the app diff --git a/Model/Models/IncidentCustomField.ts b/Model/Models/IncidentCustomField.ts index e85597e306..d004423926 100644 --- a/Model/Models/IncidentCustomField.ts +++ b/Model/Models/IncidentCustomField.ts @@ -144,8 +144,6 @@ export default class IncidentCustomField extends AccessControlModel { @UniqueColumnBy('projectId') public name?: string = undefined; - - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -172,7 +170,6 @@ export default class IncidentCustomField extends AccessControlModel { }) public description?: string = undefined; - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -185,9 +182,7 @@ export default class IncidentCustomField extends AccessControlModel { Permission.ProjectMember, Permission.CanReadIncidentCustomField, ], - update: [ - - ], + update: [], }) @TableColumn({ required: false, type: TableColumnType.LongText }) @Column({ @@ -298,5 +293,4 @@ export default class IncidentCustomField extends AccessControlModel { transformer: ObjectID.getDatabaseTransformer(), }) public deletedByUserId?: ObjectID = undefined; - } diff --git a/Model/Models/MonitorCustomField.ts b/Model/Models/MonitorCustomField.ts index 4ceff6d5a0..71f1f4b2d4 100644 --- a/Model/Models/MonitorCustomField.ts +++ b/Model/Models/MonitorCustomField.ts @@ -144,8 +144,6 @@ export default class MonitorCustomField extends AccessControlModel { @UniqueColumnBy('projectId') public name?: string = undefined; - - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -172,7 +170,6 @@ export default class MonitorCustomField extends AccessControlModel { }) public description?: string = undefined; - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -185,9 +182,7 @@ export default class MonitorCustomField extends AccessControlModel { Permission.ProjectMember, Permission.CanReadMonitorCustomField, ], - update: [ - - ], + update: [], }) @TableColumn({ required: false, type: TableColumnType.LongText }) @Column({ @@ -298,5 +293,4 @@ export default class MonitorCustomField extends AccessControlModel { transformer: ObjectID.getDatabaseTransformer(), }) public deletedByUserId?: ObjectID = undefined; - } diff --git a/Model/Models/ScheduledMaintenanceCustomField.ts b/Model/Models/ScheduledMaintenanceCustomField.ts index ca375ff544..3505042e78 100644 --- a/Model/Models/ScheduledMaintenanceCustomField.ts +++ b/Model/Models/ScheduledMaintenanceCustomField.ts @@ -144,8 +144,6 @@ export default class ScheduledMaintenanceCustomField extends AccessControlModel @UniqueColumnBy('projectId') public name?: string = undefined; - - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -172,7 +170,6 @@ export default class ScheduledMaintenanceCustomField extends AccessControlModel }) public description?: string = undefined; - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -185,9 +182,7 @@ export default class ScheduledMaintenanceCustomField extends AccessControlModel Permission.ProjectMember, Permission.CanReadScheduledMaintenanceCustomField, ], - update: [ - - ], + update: [], }) @TableColumn({ required: false, type: TableColumnType.LongText }) @Column({ @@ -298,5 +293,4 @@ export default class ScheduledMaintenanceCustomField extends AccessControlModel transformer: ObjectID.getDatabaseTransformer(), }) public deletedByUserId?: ObjectID = undefined; - } diff --git a/Model/Models/StatusPageCustomField.ts b/Model/Models/StatusPageCustomField.ts index dcd9bb15be..92c0d4d0cd 100644 --- a/Model/Models/StatusPageCustomField.ts +++ b/Model/Models/StatusPageCustomField.ts @@ -144,8 +144,6 @@ export default class StatusPageCustomField extends AccessControlModel { @UniqueColumnBy('projectId') public name?: string = undefined; - - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -172,7 +170,6 @@ export default class StatusPageCustomField extends AccessControlModel { }) public description?: string = undefined; - @ColumnAccessControl({ create: [ Permission.ProjectOwner, @@ -185,9 +182,7 @@ export default class StatusPageCustomField extends AccessControlModel { Permission.ProjectMember, Permission.CanReadStatusPageCustomField, ], - update: [ - - ], + update: [], }) @TableColumn({ required: false, type: TableColumnType.LongText }) @Column({ @@ -298,5 +293,4 @@ export default class StatusPageCustomField extends AccessControlModel { transformer: ObjectID.getDatabaseTransformer(), }) public deletedByUserId?: ObjectID = undefined; - }