mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
fix lint
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -58,4 +58,6 @@ settings.json
|
||||
|
||||
GoSDK/tester/
|
||||
|
||||
.gitconfig
|
||||
.gitconfig
|
||||
|
||||
secret.env
|
||||
@@ -1,2 +1,2 @@
|
||||
NODE_ENV=development
|
||||
IS_SAAS_SERVICE=false
|
||||
IS_SAAS_SERVICE=false
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
export default (columnName: string, totalItems: number, errorMessage: string) => {
|
||||
export default (
|
||||
columnName: string,
|
||||
totalItems: number,
|
||||
errorMessage: string
|
||||
) => {
|
||||
return (ctr: Function) => {
|
||||
ctr.prototype.totalItemsByColumnnName = columnName;
|
||||
ctr.prototype.totalItemsNumber = totalItems;
|
||||
|
||||
@@ -80,7 +80,6 @@ enum Permission {
|
||||
CanEditStatusPageHeaderLink = 'CanEditStatusPageHeaderLink',
|
||||
CanReadStatusPageHeaderLink = 'CanReadStatusPageHeaderLink',
|
||||
|
||||
|
||||
// Probe Permissions (Owner Permission)
|
||||
CanCreateStatusPageFooterLink = 'CanCreateStatusPageFooterLink',
|
||||
CanDeleteStatusPageFooterLink = 'CanDeleteStatusPageFooterLink',
|
||||
@@ -111,11 +110,6 @@ enum Permission {
|
||||
CanReadProjectLabel = 'CanReadProjectLabel',
|
||||
CanDeleteProjectLabel = 'CanDeleteProjectLabel',
|
||||
CanAddLabelsToProjectResources = 'CanAddLabelsToProjectResources',
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Scheduled Maintenance
|
||||
|
||||
@@ -131,7 +125,6 @@ enum Permission {
|
||||
CanReadScheduledMaintenanceStateTimeline = 'CanReadScheduledMaintenanceStateTimeline',
|
||||
CanDeleteScheduledMaintenanceStateTimeline = 'CanDeleteScheduledMaintenanceStateTimeline',
|
||||
|
||||
|
||||
// Resource Permissions (Team Permission)
|
||||
CanCreateScheduledMaintenanceInternalNote = 'CanCreateScheduledMaintenanceInternalNote',
|
||||
CanEditScheduledMaintenanceInternalNote = 'CanEditScheduledMaintenanceInternalNote',
|
||||
@@ -143,14 +136,11 @@ enum Permission {
|
||||
CanDeleteScheduledMaintenancePublicNote = 'CanDeleteScheduledMaintenancePublicNote',
|
||||
CanReadScheduledMaintenancePublicNote = 'CanReadScheduledMaintenancePublicNote',
|
||||
|
||||
|
||||
// Probe Permissions (Owner Permission)
|
||||
CanCreateProjectScheduledMaintenance = 'CanCreateProjectScheduledMaintenance',
|
||||
CanDeleteProjectScheduledMaintenance = 'CanDeleteProjectScheduledMaintenance',
|
||||
CanEditProjectScheduledMaintenance = 'CanEditProjectScheduledMaintenance',
|
||||
CanReadProjectScheduledMaintenance = 'CanReadProjectScheduledMaintenance',
|
||||
|
||||
|
||||
// Probe Permissions (Owner Permission)
|
||||
CanCreateProjectScheduledMaintenance = 'CanCreateProjectScheduledMaintenance',
|
||||
CanDeleteProjectScheduledMaintenance = 'CanDeleteProjectScheduledMaintenance',
|
||||
CanEditProjectScheduledMaintenance = 'CanEditProjectScheduledMaintenance',
|
||||
CanReadProjectScheduledMaintenance = 'CanReadProjectScheduledMaintenance',
|
||||
|
||||
// Incident Status Permissions (Owner + Admin Permission by default)
|
||||
CanCreateIncidentState = 'CanCreateIncidentState',
|
||||
@@ -700,7 +690,6 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
permission: Permission.CanCreateStatusPageHeaderLink,
|
||||
title: 'Can Create Header Link',
|
||||
@@ -734,7 +723,6 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
permission: Permission.CanCreateStatusPageFooterLink,
|
||||
title: 'Can Create Footer Link',
|
||||
@@ -768,8 +756,6 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
|
||||
|
||||
|
||||
{
|
||||
permission: Permission.CanCreateStatusPageResource,
|
||||
title: 'Can Create Status Page Resource',
|
||||
@@ -1281,25 +1267,7 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Scheduled Maintenance Permissions.
|
||||
|
||||
// Scheduled Maintenance Permissions.
|
||||
|
||||
{
|
||||
permission: Permission.CanCreateScheduledMaintenanceState,
|
||||
@@ -1334,7 +1302,6 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
permission: Permission.CanCreateProjectScheduledMaintenance,
|
||||
title: 'Can Create Scheduled Maintenance',
|
||||
@@ -1369,7 +1336,8 @@ export class PermissionHelper {
|
||||
},
|
||||
|
||||
{
|
||||
permission: Permission.CanCreateScheduledMaintenanceStateTimeline,
|
||||
permission:
|
||||
Permission.CanCreateScheduledMaintenanceStateTimeline,
|
||||
title: 'Can Create Scheduled Maintenance State Timeline',
|
||||
description:
|
||||
'A user assigned this permission can create Scheduled Maintenance state history of an Scheduled Maintenance in this project.',
|
||||
@@ -1377,7 +1345,8 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
{
|
||||
permission: Permission.CanDeleteScheduledMaintenanceStateTimeline,
|
||||
permission:
|
||||
Permission.CanDeleteScheduledMaintenanceStateTimeline,
|
||||
title: 'Can Delete Scheduled Maintenance State Timeline',
|
||||
description:
|
||||
'A user assigned this permission can delete Scheduled Maintenance state history of an Scheduled Maintenance in this project.',
|
||||
@@ -1401,9 +1370,9 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
permission: Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
permission:
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
title: 'Can Create Scheduled Maintenance Internal Note',
|
||||
description:
|
||||
'A user assigned this permission can create Scheduled Maintenance Internal Note this project.',
|
||||
@@ -1411,7 +1380,8 @@ export class PermissionHelper {
|
||||
isAccessControlPermission: false,
|
||||
},
|
||||
{
|
||||
permission: Permission.CanDeleteScheduledMaintenanceInternalNote,
|
||||
permission:
|
||||
Permission.CanDeleteScheduledMaintenanceInternalNote,
|
||||
title: 'Can Delete Scheduled Maintenance Internal Note',
|
||||
description:
|
||||
'A user assigned this permission can delete Scheduled Maintenance Internal Note of this project.',
|
||||
|
||||
@@ -6,7 +6,11 @@ import StatusPageService, {
|
||||
} from '../Services/StatusPageService';
|
||||
import Populate from '../Types/Database/Populate';
|
||||
import Select from '../Types/Database/Select';
|
||||
import { ExpressRequest, ExpressResponse, NextFunction } from '../Utils/Express';
|
||||
import {
|
||||
ExpressRequest,
|
||||
ExpressResponse,
|
||||
NextFunction,
|
||||
} from '../Utils/Express';
|
||||
import BaseAPI from './BaseAPI';
|
||||
import Response from '../Utils/Response';
|
||||
import NotAuthorizedException from 'Common/Types/Exception/NotAuthorizedException';
|
||||
@@ -19,12 +23,15 @@ import StatusPageHeaderLinkService from '../Services/StatusPageHeaderLinkService
|
||||
import StatusPageHeaderLink from 'Model/Models/StatusPageHeaderLink';
|
||||
import StatusPageDomain from 'Model/Models/StatusPageDomain';
|
||||
import StatusPageDomainService from '../Services/StatusPageDomainService';
|
||||
import { JSONObject } from 'Common/Types/JSON';
|
||||
|
||||
export default class StatusPageAPI extends BaseAPI<StatusPage, StatusPageServiceType> {
|
||||
export default class StatusPageAPI extends BaseAPI<
|
||||
StatusPage,
|
||||
StatusPageServiceType
|
||||
> {
|
||||
public constructor() {
|
||||
super(StatusPage, StatusPageService);
|
||||
|
||||
|
||||
this.router.post(
|
||||
`/${new this.entityType().getCrudApiPath()?.toString()}/domain`,
|
||||
UserMiddleware.getUserMiddleware,
|
||||
@@ -34,49 +41,62 @@ export default class StatusPageAPI extends BaseAPI<StatusPage, StatusPageService
|
||||
next: NextFunction
|
||||
) => {
|
||||
try {
|
||||
|
||||
if (req.body["domain"]) {
|
||||
throw new BadDataException("domain is required in request body");
|
||||
if (req.body['domain']) {
|
||||
throw new BadDataException(
|
||||
'domain is required in request body'
|
||||
);
|
||||
}
|
||||
|
||||
const domain: string = req.body["domain"] as string;
|
||||
const domain: string = req.body['domain'] as string;
|
||||
|
||||
const statusPageDomain: StatusPageDomain | null = await StatusPageDomainService.findOneBy({
|
||||
query: {
|
||||
fullDomain: domain,
|
||||
domain: {
|
||||
isVerified: true
|
||||
} as any
|
||||
},
|
||||
select: {
|
||||
statusPageId: true
|
||||
},
|
||||
props: {
|
||||
isRoot: true,
|
||||
}
|
||||
});
|
||||
const statusPageDomain: StatusPageDomain | null =
|
||||
await StatusPageDomainService.findOneBy({
|
||||
query: {
|
||||
fullDomain: domain,
|
||||
domain: {
|
||||
isVerified: true,
|
||||
} as any,
|
||||
},
|
||||
select: {
|
||||
statusPageId: true,
|
||||
},
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (!statusPageDomain) {
|
||||
throw new BadDataException("No status page found with this domain");
|
||||
}
|
||||
|
||||
const objectId: ObjectID = statusPageDomain.statusPageId!
|
||||
|
||||
if (!await this.service.hasReadAccess(objectId, this.getDatabaseCommonInteractionProps(req))) {
|
||||
throw new NotAuthorizedException("You are not authorize to access this status page");
|
||||
throw new BadDataException(
|
||||
'No status page found with this domain'
|
||||
);
|
||||
}
|
||||
|
||||
return Response.sendJsonObjectResponse(req, res, {statusPageId: objectId.toString()});
|
||||
const objectId: ObjectID = statusPageDomain.statusPageId!;
|
||||
|
||||
if (
|
||||
!(await this.service.hasReadAccess(
|
||||
objectId,
|
||||
this.getDatabaseCommonInteractionProps(req)
|
||||
))
|
||||
) {
|
||||
throw new NotAuthorizedException(
|
||||
'You are not authorize to access this status page'
|
||||
);
|
||||
}
|
||||
|
||||
return Response.sendJsonObjectResponse(req, res, {
|
||||
statusPageId: objectId.toString(),
|
||||
});
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
this.router.post(
|
||||
`/${new this.entityType().getCrudApiPath()?.toString()}/master-page/:id`,
|
||||
`/${new this.entityType()
|
||||
.getCrudApiPath()
|
||||
?.toString()}/master-page/:id`,
|
||||
UserMiddleware.getUserMiddleware,
|
||||
async (
|
||||
req: ExpressRequest,
|
||||
@@ -84,109 +104,125 @@ export default class StatusPageAPI extends BaseAPI<StatusPage, StatusPageService
|
||||
next: NextFunction
|
||||
) => {
|
||||
try {
|
||||
const objectId: ObjectID = new ObjectID(req.params['id'] as string);
|
||||
const objectId: ObjectID = new ObjectID(
|
||||
req.params['id'] as string
|
||||
);
|
||||
|
||||
if (!await this.service.hasReadAccess(objectId, this.getDatabaseCommonInteractionProps(req))) {
|
||||
throw new NotAuthorizedException("You are not authorize to access this status page");
|
||||
if (
|
||||
!(await this.service.hasReadAccess(
|
||||
objectId,
|
||||
this.getDatabaseCommonInteractionProps(req)
|
||||
))
|
||||
) {
|
||||
throw new NotAuthorizedException(
|
||||
'You are not authorize to access this status page'
|
||||
);
|
||||
}
|
||||
|
||||
let select: Select<StatusPage> = {
|
||||
_id: true,
|
||||
const select: Select<StatusPage> = {
|
||||
_id: true,
|
||||
slug: true,
|
||||
coverImageFileId: true,
|
||||
logoFileId: true,
|
||||
showAnouncementsPage: true,
|
||||
showFooter: true,
|
||||
showHeader: true,
|
||||
showIncidentsPage: true,
|
||||
showNavbar: true,
|
||||
showOverviewPage: true,
|
||||
showRssPage: true,
|
||||
showScheduledMaintenancePage: true,
|
||||
pageTextColor: true,
|
||||
coverImageFileId: true,
|
||||
logoFileId: true,
|
||||
showAnouncementsPage: true,
|
||||
showFooter: true,
|
||||
showHeader: true,
|
||||
showIncidentsPage: true,
|
||||
showNavbar: true,
|
||||
showOverviewPage: true,
|
||||
showRssPage: true,
|
||||
showScheduledMaintenancePage: true,
|
||||
pageTextColor: true,
|
||||
footerTextColor: true,
|
||||
headerTextColor: true,
|
||||
navBarTextColor: true,
|
||||
pageTitle: true,
|
||||
pageDescription: true,
|
||||
pageBackgroundColor: true,
|
||||
navBarTextColor: true,
|
||||
pageTitle: true,
|
||||
pageDescription: true,
|
||||
pageBackgroundColor: true,
|
||||
bannerBackgroundColor: true,
|
||||
footerBackgroundColor: true,
|
||||
headerBackgroundColor: true,
|
||||
navBarBackgroundColor: true,
|
||||
copyrightText: true,
|
||||
customCSS: true,
|
||||
customJavaScript: true,
|
||||
headerHTML: true,
|
||||
footerHTML: true,
|
||||
enableSubscribers: true
|
||||
footerBackgroundColor: true,
|
||||
headerBackgroundColor: true,
|
||||
navBarBackgroundColor: true,
|
||||
copyrightText: true,
|
||||
customCSS: true,
|
||||
customJavaScript: true,
|
||||
headerHTML: true,
|
||||
footerHTML: true,
|
||||
enableSubscribers: true,
|
||||
};
|
||||
|
||||
let populate: Populate<StatusPage> = {};
|
||||
|
||||
const item: StatusPage | null = await this.service.findOneById({
|
||||
id: objectId,
|
||||
select,
|
||||
populate,
|
||||
props: this.getDatabaseCommonInteractionProps(req),
|
||||
});
|
||||
const populate: Populate<StatusPage> = {};
|
||||
|
||||
const item: StatusPage | null =
|
||||
await this.service.findOneById({
|
||||
id: objectId,
|
||||
select,
|
||||
populate,
|
||||
props: this.getDatabaseCommonInteractionProps(req),
|
||||
});
|
||||
|
||||
if (!item) {
|
||||
throw new BadDataException("Status Page not found");
|
||||
throw new BadDataException('Status Page not found');
|
||||
}
|
||||
|
||||
const footerLinks: Array<StatusPageFooterLink> =
|
||||
await StatusPageFooterLinkService.findBy({
|
||||
query: {
|
||||
statusPageId: objectId,
|
||||
},
|
||||
select: {
|
||||
_id: true,
|
||||
link: true,
|
||||
title: true,
|
||||
},
|
||||
populate: {},
|
||||
limit: LIMIT_PER_PROJECT,
|
||||
skip: 0,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
const footerLinks = await StatusPageFooterLinkService.findBy({
|
||||
query: {
|
||||
statusPageId: objectId,
|
||||
},
|
||||
select: {
|
||||
_id: true,
|
||||
link: true,
|
||||
title: true
|
||||
},
|
||||
populate: {},
|
||||
limit: LIMIT_PER_PROJECT,
|
||||
skip: 0,
|
||||
props: {
|
||||
isRoot: true
|
||||
}
|
||||
});
|
||||
const headerLinks: Array<StatusPageHeaderLink> =
|
||||
await StatusPageHeaderLinkService.findBy({
|
||||
query: {
|
||||
statusPageId: objectId,
|
||||
},
|
||||
select: {
|
||||
_id: true,
|
||||
link: true,
|
||||
title: true,
|
||||
},
|
||||
limit: LIMIT_PER_PROJECT,
|
||||
skip: 0,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
const headerLinks = await StatusPageHeaderLinkService.findBy({
|
||||
query: {
|
||||
statusPageId: objectId,
|
||||
},
|
||||
select: {
|
||||
_id: true,
|
||||
link: true,
|
||||
title: true
|
||||
},
|
||||
limit: LIMIT_PER_PROJECT,
|
||||
skip: 0,
|
||||
props: {
|
||||
isRoot: true
|
||||
}
|
||||
});
|
||||
|
||||
const response = {
|
||||
const response: JSONObject = {
|
||||
statusPage: BaseModel.toJSON(item, StatusPage),
|
||||
footerLinks: BaseModel.toJSONArray(footerLinks, StatusPageFooterLink),
|
||||
headerLinks: BaseModel.toJSONArray(headerLinks, StatusPageHeaderLink),
|
||||
}
|
||||
|
||||
return Response.sendJsonObjectResponse(req, res, response);
|
||||
footerLinks: BaseModel.toJSONArray(
|
||||
footerLinks,
|
||||
StatusPageFooterLink
|
||||
),
|
||||
headerLinks: BaseModel.toJSONArray(
|
||||
headerLinks,
|
||||
StatusPageHeaderLink
|
||||
),
|
||||
};
|
||||
|
||||
return Response.sendJsonObjectResponse(req, res, response);
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
this.router.post(
|
||||
`/${new this.entityType().getCrudApiPath()?.toString()}/overview/:id`,
|
||||
`/${new this.entityType()
|
||||
.getCrudApiPath()
|
||||
?.toString()}/overview/:id`,
|
||||
UserMiddleware.getUserMiddleware,
|
||||
async (
|
||||
req: ExpressRequest,
|
||||
@@ -194,108 +230,28 @@ export default class StatusPageAPI extends BaseAPI<StatusPage, StatusPageService
|
||||
next: NextFunction
|
||||
) => {
|
||||
try {
|
||||
const objectId: ObjectID = new ObjectID(req.params['id'] as string);
|
||||
const objectId: ObjectID = new ObjectID(
|
||||
req.params['id'] as string
|
||||
);
|
||||
|
||||
if (!await this.service.hasReadAccess(objectId, this.getDatabaseCommonInteractionProps(req))) {
|
||||
throw new NotAuthorizedException("You are not authorize to access this status page");
|
||||
if (
|
||||
!(await this.service.hasReadAccess(
|
||||
objectId,
|
||||
this.getDatabaseCommonInteractionProps(req)
|
||||
))
|
||||
) {
|
||||
throw new NotAuthorizedException(
|
||||
'You are not authorize to access this status page'
|
||||
);
|
||||
}
|
||||
|
||||
let select: Select<StatusPage> = {
|
||||
_id: true,
|
||||
slug: true,
|
||||
coverImageFileId: true,
|
||||
logoFileId: true,
|
||||
showAnouncementsPage: true,
|
||||
showFooter: true,
|
||||
showHeader: true,
|
||||
showIncidentsPage: true,
|
||||
showNavbar: true,
|
||||
showOverviewPage: true,
|
||||
showRssPage: true,
|
||||
showScheduledMaintenancePage: true,
|
||||
pageTextColor: true,
|
||||
footerTextColor: true,
|
||||
headerTextColor: true,
|
||||
navBarTextColor: true,
|
||||
pageTitle: true,
|
||||
pageDescription: true,
|
||||
pageBackgroundColor: true,
|
||||
bannerBackgroundColor: true,
|
||||
footerBackgroundColor: true,
|
||||
headerBackgroundColor: true,
|
||||
navBarBackgroundColor: true,
|
||||
copyrightText: true,
|
||||
customCSS: true,
|
||||
customJavaScript: true,
|
||||
headerHTML: true,
|
||||
footerHTML: true,
|
||||
enableSubscribers: true
|
||||
};
|
||||
const response: JSONObject = {};
|
||||
|
||||
let populate: Populate<StatusPage> = {};
|
||||
|
||||
const item: StatusPage | null = await this.service.findOneById({
|
||||
id: objectId,
|
||||
select,
|
||||
populate,
|
||||
props: this.getDatabaseCommonInteractionProps(req),
|
||||
});
|
||||
|
||||
if (!item) {
|
||||
throw new BadDataException("Status Page not found");
|
||||
}
|
||||
|
||||
|
||||
const footerLinks = await StatusPageFooterLinkService.findBy({
|
||||
query: {
|
||||
statusPageId: objectId,
|
||||
},
|
||||
select: {
|
||||
_id: true,
|
||||
link: true,
|
||||
title: true
|
||||
},
|
||||
populate: {},
|
||||
limit: LIMIT_PER_PROJECT,
|
||||
skip: 0,
|
||||
props: {
|
||||
isRoot: true
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
const headerLinks = await StatusPageHeaderLinkService.findBy({
|
||||
query: {
|
||||
statusPageId: objectId,
|
||||
},
|
||||
select: {
|
||||
_id: true,
|
||||
link: true,
|
||||
title: true
|
||||
},
|
||||
limit: LIMIT_PER_PROJECT,
|
||||
skip: 0,
|
||||
props: {
|
||||
isRoot: true
|
||||
}
|
||||
});
|
||||
|
||||
const response = {
|
||||
statusPage: BaseModel.toJSON(item, StatusPage),
|
||||
footerLinks: BaseModel.toJSONArray(footerLinks, StatusPageFooterLink),
|
||||
headerLinks: BaseModel.toJSONArray(headerLinks, StatusPageHeaderLink),
|
||||
}
|
||||
|
||||
return Response.sendJsonObjectResponse(req, res, response);
|
||||
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -476,9 +476,9 @@ class DatabaseService<TBaseModel extends BaseModel> {
|
||||
throw new BadDataException('Data is not valid');
|
||||
}
|
||||
|
||||
// check total items by.
|
||||
// check total items by.
|
||||
|
||||
await this.checkTotalItemsBy(_createdBy)
|
||||
await this.checkTotalItemsBy(_createdBy);
|
||||
|
||||
// Encrypt data
|
||||
data = this.encrypt(data);
|
||||
@@ -519,27 +519,36 @@ class DatabaseService<TBaseModel extends BaseModel> {
|
||||
}
|
||||
}
|
||||
|
||||
private async checkTotalItemsBy(
|
||||
createdBy: CreateBy<TBaseModel>
|
||||
): Promise<void> {
|
||||
const totalItemsColumnName: string | null =
|
||||
this.model.getTotalItemsByColumnName();
|
||||
const totalItemsNumber: number | null =
|
||||
this.model.getTotalItemsNumber();
|
||||
const errorMessage: string | null =
|
||||
this.model.getTotalItemsByErrorMessage();
|
||||
|
||||
private async checkTotalItemsBy(createdBy: CreateBy<TBaseModel>): Promise<void> {
|
||||
|
||||
const totalItemsColumnName = this.model.getTotalItemsByColumnName();
|
||||
const totalItemsNumber = this.model.getTotalItemsNumber();
|
||||
const errorMessage = this.model.getTotalItemsByErrorMessage();
|
||||
|
||||
if (totalItemsColumnName && totalItemsNumber && errorMessage && createdBy.data.getColumnValue(totalItemsColumnName)) {
|
||||
const count = await this.countBy({
|
||||
if (
|
||||
totalItemsColumnName &&
|
||||
totalItemsNumber &&
|
||||
errorMessage &&
|
||||
createdBy.data.getColumnValue(totalItemsColumnName)
|
||||
) {
|
||||
const count: PositiveNumber = await this.countBy({
|
||||
query: {
|
||||
[totalItemsColumnName]: createdBy.data.getColumnValue(totalItemsColumnName)
|
||||
[totalItemsColumnName]:
|
||||
createdBy.data.getColumnValue(totalItemsColumnName),
|
||||
} as FindWhere<TBaseModel>,
|
||||
|
||||
|
||||
skip: 0,
|
||||
limit: LIMIT_MAX,
|
||||
props: {
|
||||
isRoot: true
|
||||
}
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (count.positiveNumber > totalItemsNumber - 1) {
|
||||
if (count.positiveNumber > totalItemsNumber - 1) {
|
||||
throw new BadDataException(errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,9 +81,11 @@ export class Service extends DatabaseService<Model> {
|
||||
return Promise.resolve({ createBy: data, carryForward: null });
|
||||
}
|
||||
|
||||
|
||||
private async addDefaultScheduledMaintenanceState(createdItem: Model): Promise<Model> {
|
||||
let createdScheduledMaintenanceState: ScheduledMaintenanceState = new ScheduledMaintenanceState();
|
||||
private async addDefaultScheduledMaintenanceState(
|
||||
createdItem: Model
|
||||
): Promise<Model> {
|
||||
let createdScheduledMaintenanceState: ScheduledMaintenanceState =
|
||||
new ScheduledMaintenanceState();
|
||||
createdScheduledMaintenanceState.name = 'Scheduled';
|
||||
createdScheduledMaintenanceState.description =
|
||||
'When an event is scheduled, it belongs to this state';
|
||||
@@ -92,14 +94,16 @@ export class Service extends DatabaseService<Model> {
|
||||
createdScheduledMaintenanceState.projectId = createdItem.id!;
|
||||
createdScheduledMaintenanceState.order = 1;
|
||||
|
||||
createdScheduledMaintenanceState = await ScheduledMaintenanceStateService.create({
|
||||
data: createdScheduledMaintenanceState,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
createdScheduledMaintenanceState =
|
||||
await ScheduledMaintenanceStateService.create({
|
||||
data: createdScheduledMaintenanceState,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
let ongoingScheduledMaintenanceState: ScheduledMaintenanceState = new ScheduledMaintenanceState();
|
||||
let ongoingScheduledMaintenanceState: ScheduledMaintenanceState =
|
||||
new ScheduledMaintenanceState();
|
||||
ongoingScheduledMaintenanceState.name = 'Ongoing';
|
||||
ongoingScheduledMaintenanceState.description =
|
||||
'When an event is ongoing, it belongs to this state.';
|
||||
@@ -108,14 +112,16 @@ export class Service extends DatabaseService<Model> {
|
||||
ongoingScheduledMaintenanceState.projectId = createdItem.id!;
|
||||
ongoingScheduledMaintenanceState.order = 2;
|
||||
|
||||
ongoingScheduledMaintenanceState = await ScheduledMaintenanceStateService.create({
|
||||
data: ongoingScheduledMaintenanceState,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
ongoingScheduledMaintenanceState =
|
||||
await ScheduledMaintenanceStateService.create({
|
||||
data: ongoingScheduledMaintenanceState,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
let completedScheduledMaintenanceState: ScheduledMaintenanceState = new ScheduledMaintenanceState();
|
||||
let completedScheduledMaintenanceState: ScheduledMaintenanceState =
|
||||
new ScheduledMaintenanceState();
|
||||
completedScheduledMaintenanceState.name = 'Completed';
|
||||
completedScheduledMaintenanceState.description =
|
||||
'When an event is completed, it belongs to this state.';
|
||||
@@ -124,18 +130,17 @@ export class Service extends DatabaseService<Model> {
|
||||
completedScheduledMaintenanceState.projectId = createdItem.id!;
|
||||
completedScheduledMaintenanceState.order = 3;
|
||||
|
||||
completedScheduledMaintenanceState = await ScheduledMaintenanceStateService.create({
|
||||
data: completedScheduledMaintenanceState,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
completedScheduledMaintenanceState =
|
||||
await ScheduledMaintenanceStateService.create({
|
||||
data: completedScheduledMaintenanceState,
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
return createdItem;
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected override async onCreateSuccess(
|
||||
_onCreate: OnCreate<Model>,
|
||||
createdItem: Model
|
||||
@@ -143,7 +148,9 @@ export class Service extends DatabaseService<Model> {
|
||||
createdItem = await this.addDefaultProjectTeams(createdItem);
|
||||
createdItem = await this.addDefaultMonitorStatus(createdItem);
|
||||
createdItem = await this.addDefaultIncidentState(createdItem);
|
||||
createdItem = await this.addDefaultScheduledMaintenanceState(createdItem);
|
||||
createdItem = await this.addDefaultScheduledMaintenanceState(
|
||||
createdItem
|
||||
);
|
||||
createdItem = await this.addDefaultIncidentSeverity(createdItem);
|
||||
|
||||
return createdItem;
|
||||
|
||||
@@ -44,7 +44,8 @@ export class Service extends DatabaseService<Model> {
|
||||
);
|
||||
}
|
||||
|
||||
createBy.data.currentScheduledMaintenanceStateId = scheduledMaintenanceState.id;
|
||||
createBy.data.currentScheduledMaintenanceStateId =
|
||||
scheduledMaintenanceState.id;
|
||||
|
||||
return { createBy, carryForward: null };
|
||||
}
|
||||
@@ -80,24 +81,25 @@ export class Service extends DatabaseService<Model> {
|
||||
scheduledMaintenanceStateId: ObjectID,
|
||||
props: DatabaseCommonInteractionProps
|
||||
): Promise<void> {
|
||||
|
||||
await this.updateBy({
|
||||
data: {
|
||||
currentScheduledMaintenanceStateId: scheduledMaintenanceStateId.id
|
||||
currentScheduledMaintenanceStateId:
|
||||
scheduledMaintenanceStateId.id,
|
||||
},
|
||||
query: {
|
||||
_id: scheduledMaintenanceId.toString()!
|
||||
_id: scheduledMaintenanceId.toString()!,
|
||||
},
|
||||
props: {
|
||||
isRoot: true
|
||||
}
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
const statusTimeline: ScheduledMaintenanceStateTimeline =
|
||||
new ScheduledMaintenanceStateTimeline();
|
||||
|
||||
statusTimeline.scheduledMaintenanceId = scheduledMaintenanceId;
|
||||
statusTimeline.scheduledMaintenanceStateId = scheduledMaintenanceStateId;
|
||||
statusTimeline.scheduledMaintenanceStateId =
|
||||
scheduledMaintenanceStateId;
|
||||
statusTimeline.projectId = projectId;
|
||||
|
||||
await ScheduledMaintenanceStateTimelineService.create({
|
||||
|
||||
@@ -30,7 +30,8 @@ export class Service extends DatabaseService<ScheduledMaintenanceStateTimeline>
|
||||
_id: createdItem.scheduledMaintenanceId?.toString(),
|
||||
},
|
||||
data: {
|
||||
currentScheduledMaintenanceStateId: createdItem.scheduledMaintenanceStateId,
|
||||
currentScheduledMaintenanceStateId:
|
||||
createdItem.scheduledMaintenanceStateId,
|
||||
},
|
||||
props: onCreate.createBy.props,
|
||||
});
|
||||
@@ -86,7 +87,8 @@ export class Service extends DatabaseService<ScheduledMaintenanceStateTimeline>
|
||||
): Promise<OnDelete<ScheduledMaintenanceStateTimeline>> {
|
||||
if (onDelete.carryForward) {
|
||||
// this is scheduledMaintenanceId.
|
||||
const scheduledMaintenanceId: ObjectID = onDelete.carryForward as ObjectID;
|
||||
const scheduledMaintenanceId: ObjectID =
|
||||
onDelete.carryForward as ObjectID;
|
||||
|
||||
// get last status of this monitor.
|
||||
const scheduledMaintenanceStateTimeline: ScheduledMaintenanceStateTimeline | null =
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import PostgresDatabase from '../Infrastructure/PostgresDatabase';
|
||||
import Model from 'Model/Models/StatusPageFooterLink';
|
||||
import DatabaseService, { OnCreate, OnDelete, OnUpdate } from './DatabaseService';
|
||||
import DatabaseService, {
|
||||
OnCreate,
|
||||
OnDelete,
|
||||
OnUpdate,
|
||||
} from './DatabaseService';
|
||||
import CreateBy from '../Types/Database/CreateBy';
|
||||
import BadDataException from 'Common/Types/Exception/BadDataException';
|
||||
import Query from '../Types/Database/Query';
|
||||
@@ -21,9 +25,7 @@ export class Service extends DatabaseService<Model> {
|
||||
createBy: CreateBy<Model>
|
||||
): Promise<OnCreate<Model>> {
|
||||
if (!createBy.data.statusPageId) {
|
||||
throw new BadDataException(
|
||||
'statusPageId is required'
|
||||
);
|
||||
throw new BadDataException('statusPageId is required');
|
||||
}
|
||||
|
||||
if (!createBy.data.order) {
|
||||
@@ -31,7 +33,6 @@ export class Service extends DatabaseService<Model> {
|
||||
statusPageId: createBy.data.statusPageId,
|
||||
};
|
||||
|
||||
|
||||
const count: PositiveNumber = await this.countBy({
|
||||
query: query,
|
||||
props: {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import PostgresDatabase from '../Infrastructure/PostgresDatabase';
|
||||
import Model from 'Model/Models/StatusPageHeaderLink';
|
||||
import DatabaseService, { OnCreate, OnDelete, OnUpdate } from './DatabaseService';
|
||||
import DatabaseService, {
|
||||
OnCreate,
|
||||
OnDelete,
|
||||
OnUpdate,
|
||||
} from './DatabaseService';
|
||||
import CreateBy from '../Types/Database/CreateBy';
|
||||
import BadDataException from 'Common/Types/Exception/BadDataException';
|
||||
import Query from '../Types/Database/Query';
|
||||
@@ -17,14 +21,11 @@ export class Service extends DatabaseService<Model> {
|
||||
super(Model, postgresDatabase);
|
||||
}
|
||||
|
||||
|
||||
protected override async onBeforeCreate(
|
||||
createBy: CreateBy<Model>
|
||||
): Promise<OnCreate<Model>> {
|
||||
if (!createBy.data.statusPageId) {
|
||||
throw new BadDataException(
|
||||
'statusPageId is required'
|
||||
);
|
||||
throw new BadDataException('statusPageId is required');
|
||||
}
|
||||
|
||||
if (!createBy.data.order) {
|
||||
@@ -32,7 +33,6 @@ export class Service extends DatabaseService<Model> {
|
||||
statusPageId: createBy.data.statusPageId,
|
||||
};
|
||||
|
||||
|
||||
const count: PositiveNumber = await this.countBy({
|
||||
query: query,
|
||||
props: {
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
import PostgresDatabase from '../Infrastructure/PostgresDatabase';
|
||||
import Model from 'Model/Models/StatusPage';
|
||||
import DatabaseService from './DatabaseService';
|
||||
import DatabaseCommonInteractionProps from 'Common/Types/Database/DatabaseCommonInteractionProps';
|
||||
import ObjectID from 'Common/Types/ObjectID';
|
||||
import PositiveNumber from 'Common/Types/PositiveNumber';
|
||||
import StatusPage from 'Model/Models/StatusPage';
|
||||
|
||||
export class Service extends DatabaseService<Model> {
|
||||
export class Service extends DatabaseService<StatusPage> {
|
||||
public constructor(postgresDatabase?: PostgresDatabase) {
|
||||
super(Model, postgresDatabase);
|
||||
super(StatusPage, postgresDatabase);
|
||||
}
|
||||
|
||||
public async hasReadAccess(statusPageId: ObjectID, props: DatabaseCommonInteractionProps): Promise<boolean> {
|
||||
|
||||
|
||||
const count = await this.countBy({
|
||||
public async hasReadAccess(
|
||||
statusPageId: ObjectID,
|
||||
props: DatabaseCommonInteractionProps
|
||||
): Promise<boolean> {
|
||||
const count: PositiveNumber = await this.countBy({
|
||||
query: {
|
||||
_id: statusPageId.toString(),
|
||||
isPublicStatusPage: true,
|
||||
@@ -20,25 +22,26 @@ export class Service extends DatabaseService<Model> {
|
||||
skip: 0,
|
||||
limit: 1,
|
||||
props: {
|
||||
isRoot: true
|
||||
}
|
||||
|
||||
})
|
||||
isRoot: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (count.positiveNumber > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// if it does not have public access, check if this user has access.
|
||||
// if it does not have public access, check if this user has access.
|
||||
|
||||
const items = await this.findBy({
|
||||
const items: Array<StatusPage> = await this.findBy({
|
||||
query: {
|
||||
_id: statusPageId.toString(),
|
||||
},
|
||||
select: {
|
||||
_id: true,
|
||||
},
|
||||
skip: 0, limit: 1, props: props
|
||||
skip: 0,
|
||||
limit: 1,
|
||||
props: props,
|
||||
});
|
||||
|
||||
if (items.length > 0) {
|
||||
@@ -46,7 +49,6 @@ export class Service extends DatabaseService<Model> {
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
export default new Service();
|
||||
|
||||
@@ -26,9 +26,14 @@ const Detail: Function = (props: ComponentProps): ReactElement => {
|
||||
return <MarkdownViewer text={text} />;
|
||||
};
|
||||
|
||||
|
||||
const getColorField: Function = (color: Color): ReactElement => {
|
||||
return <Input disabled={true} leftCircleColor={color} value={color.toString()} />
|
||||
const getColorField: Function = (color: Color): ReactElement => {
|
||||
return (
|
||||
<Input
|
||||
disabled={true}
|
||||
leftCircleColor={color}
|
||||
value={color.toString()}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const getField: Function = (field: Field, index: number): ReactElement => {
|
||||
@@ -116,10 +121,11 @@ const Detail: Function = (props: ComponentProps): ReactElement => {
|
||||
);
|
||||
}
|
||||
|
||||
if (data && (
|
||||
(field.fieldType === FieldType.HTML) ||
|
||||
field.fieldType === FieldType.CSS ||
|
||||
field.fieldType === FieldType.JavaScript)
|
||||
if (
|
||||
data &&
|
||||
(field.fieldType === FieldType.HTML ||
|
||||
field.fieldType === FieldType.CSS ||
|
||||
field.fieldType === FieldType.JavaScript)
|
||||
) {
|
||||
let codeType: CodeType = CodeType.HTML;
|
||||
|
||||
@@ -153,10 +159,10 @@ const Detail: Function = (props: ComponentProps): ReactElement => {
|
||||
style={
|
||||
props.showDetailsInNumberOfColumns
|
||||
? {
|
||||
width:
|
||||
100 / props.showDetailsInNumberOfColumns +
|
||||
'%',
|
||||
}
|
||||
width:
|
||||
100 / props.showDetailsInNumberOfColumns +
|
||||
'%',
|
||||
}
|
||||
: {}
|
||||
}
|
||||
>
|
||||
@@ -198,10 +204,11 @@ const Detail: Function = (props: ComponentProps): ReactElement => {
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`${props.showDetailsInNumberOfColumns
|
||||
className={`${
|
||||
props.showDetailsInNumberOfColumns
|
||||
? `justify-space-between`
|
||||
: ``
|
||||
}`}
|
||||
}`}
|
||||
>
|
||||
{props.fields &&
|
||||
props.fields.length > 0 &&
|
||||
|
||||
@@ -34,7 +34,9 @@ const Footer: FunctionComponent<ComponentProps> = (
|
||||
<UILink
|
||||
className="ms-1 underline-on-hover"
|
||||
to={link.to}
|
||||
openInNewTab={link.openInNewTab}
|
||||
openInNewTab={
|
||||
link.openInNewTab
|
||||
}
|
||||
>
|
||||
{link.title}
|
||||
</UILink>
|
||||
|
||||
@@ -123,7 +123,7 @@ const BasicForm: Function = <T extends Object>(
|
||||
if (props.showAsColumns && props.showAsColumns > 2) {
|
||||
throw new BadDataException(
|
||||
'showAsCOlumns should be <= 2. It is currently ' +
|
||||
props.showAsColumns
|
||||
props.showAsColumns
|
||||
);
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ const BasicForm: Function = <T extends Object>(
|
||||
placeholder={field.placeholder || ''}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[fieldName]
|
||||
: ''
|
||||
}
|
||||
@@ -194,53 +194,53 @@ const BasicForm: Function = <T extends Object>(
|
||||
|
||||
{(field.fieldType === FormFieldSchemaType.Dropdown ||
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.MultiSelectDropdown) && (
|
||||
<Field name={fieldName}>
|
||||
{({ form }: any) => {
|
||||
return (
|
||||
<Dropdown
|
||||
tabIndex={index}
|
||||
onChange={async (
|
||||
value:
|
||||
| DropdownValue
|
||||
| Array<DropdownValue>
|
||||
| null
|
||||
) => {
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
[fieldName]: value,
|
||||
});
|
||||
field.onChange &&
|
||||
field.onChange(value, form);
|
||||
await form.setFieldValue(
|
||||
fieldName,
|
||||
value,
|
||||
true
|
||||
);
|
||||
}}
|
||||
onBlur={async () => {
|
||||
await form.setFieldTouched(
|
||||
fieldName,
|
||||
true
|
||||
);
|
||||
}}
|
||||
isMultiSelect={
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.MultiSelectDropdown
|
||||
}
|
||||
options={field.dropdownOptions || []}
|
||||
placeholder={field.placeholder || ''}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[fieldName]
|
||||
: ''
|
||||
}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
FormFieldSchemaType.MultiSelectDropdown) && (
|
||||
<Field name={fieldName}>
|
||||
{({ form }: any) => {
|
||||
return (
|
||||
<Dropdown
|
||||
tabIndex={index}
|
||||
onChange={async (
|
||||
value:
|
||||
| DropdownValue
|
||||
| Array<DropdownValue>
|
||||
| null
|
||||
) => {
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
[fieldName]: value,
|
||||
});
|
||||
field.onChange &&
|
||||
field.onChange(value, form);
|
||||
await form.setFieldValue(
|
||||
fieldName,
|
||||
value,
|
||||
true
|
||||
);
|
||||
}}
|
||||
onBlur={async () => {
|
||||
await form.setFieldTouched(
|
||||
fieldName,
|
||||
true
|
||||
);
|
||||
}}
|
||||
isMultiSelect={
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.MultiSelectDropdown
|
||||
}
|
||||
options={field.dropdownOptions || []}
|
||||
placeholder={field.placeholder || ''}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[fieldName]
|
||||
: ''
|
||||
}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
|
||||
{field.fieldType === FormFieldSchemaType.LongText && (
|
||||
<Field name={fieldName}>
|
||||
@@ -270,10 +270,10 @@ const BasicForm: Function = <T extends Object>(
|
||||
}}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
fieldName
|
||||
]
|
||||
: ''
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
@@ -312,10 +312,10 @@ const BasicForm: Function = <T extends Object>(
|
||||
}}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
fieldName
|
||||
]
|
||||
: ''
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
@@ -329,143 +329,143 @@ const BasicForm: Function = <T extends Object>(
|
||||
{(field.fieldType === FormFieldSchemaType.HTML ||
|
||||
field.fieldType === FormFieldSchemaType.CSS ||
|
||||
field.fieldType === FormFieldSchemaType.JavaScript) && (
|
||||
<Field name={fieldName}>
|
||||
{({ form }: any) => {
|
||||
let codeType: CodeType = CodeType.HTML;
|
||||
<Field name={fieldName}>
|
||||
{({ form }: any) => {
|
||||
let codeType: CodeType = CodeType.HTML;
|
||||
|
||||
if (field.fieldType === FormFieldSchemaType.CSS) {
|
||||
codeType = CodeType.CSS;
|
||||
}
|
||||
if (field.fieldType === FormFieldSchemaType.CSS) {
|
||||
codeType = CodeType.CSS;
|
||||
}
|
||||
|
||||
if (
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.JavaScript
|
||||
) {
|
||||
codeType = CodeType.JavaScript;
|
||||
}
|
||||
if (
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.JavaScript
|
||||
) {
|
||||
codeType = CodeType.JavaScript;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<CodeEditor
|
||||
tabIndex={index}
|
||||
onChange={async (value: string) => {
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
[fieldName]: value,
|
||||
});
|
||||
field.onChange &&
|
||||
field.onChange(value, form);
|
||||
await form.setFieldValue(
|
||||
fieldName,
|
||||
value,
|
||||
true
|
||||
);
|
||||
}}
|
||||
className="form-control"
|
||||
onBlur={async () => {
|
||||
await form.setFieldTouched(
|
||||
fieldName,
|
||||
true
|
||||
);
|
||||
}}
|
||||
type={codeType}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
: ''
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
return (
|
||||
<>
|
||||
<CodeEditor
|
||||
tabIndex={index}
|
||||
onChange={async (value: string) => {
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
[fieldName]: value,
|
||||
});
|
||||
field.onChange &&
|
||||
field.onChange(value, form);
|
||||
await form.setFieldValue(
|
||||
fieldName,
|
||||
value,
|
||||
true
|
||||
);
|
||||
}}
|
||||
className="form-control"
|
||||
onBlur={async () => {
|
||||
await form.setFieldTouched(
|
||||
fieldName,
|
||||
true
|
||||
);
|
||||
}}
|
||||
type={codeType}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
: ''
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
|
||||
{(field.fieldType === FormFieldSchemaType.File ||
|
||||
field.fieldType === FormFieldSchemaType.ImageFile) && (
|
||||
<Field name={fieldName}>
|
||||
{({ form }: any) => {
|
||||
return (
|
||||
<>
|
||||
<FilePicker
|
||||
tabIndex={index}
|
||||
onChange={async (
|
||||
files: Array<FileModel>
|
||||
) => {
|
||||
let fileResult:
|
||||
| FileModel
|
||||
| Array<FileModel>
|
||||
| null = files.map(
|
||||
(i: FileModel) => {
|
||||
const strippedModel: FileModel =
|
||||
new FileModel();
|
||||
strippedModel._id = i._id!;
|
||||
return strippedModel;
|
||||
}
|
||||
);
|
||||
|
||||
if (
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.File &&
|
||||
Array.isArray(fileResult)
|
||||
) {
|
||||
if (fileResult.length > 0) {
|
||||
fileResult =
|
||||
fileResult[0] as FileModel;
|
||||
} else {
|
||||
fileResult = null;
|
||||
}
|
||||
<Field name={fieldName}>
|
||||
{({ form }: any) => {
|
||||
return (
|
||||
<>
|
||||
<FilePicker
|
||||
tabIndex={index}
|
||||
onChange={async (
|
||||
files: Array<FileModel>
|
||||
) => {
|
||||
let fileResult:
|
||||
| FileModel
|
||||
| Array<FileModel>
|
||||
| null = files.map(
|
||||
(i: FileModel) => {
|
||||
const strippedModel: FileModel =
|
||||
new FileModel();
|
||||
strippedModel._id = i._id!;
|
||||
return strippedModel;
|
||||
}
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
fieldName: fileResult,
|
||||
});
|
||||
field.onChange &&
|
||||
field.onChange(
|
||||
fileResult,
|
||||
form
|
||||
);
|
||||
await form.setFieldValue(
|
||||
fieldName,
|
||||
fileResult,
|
||||
true
|
||||
);
|
||||
}}
|
||||
onBlur={async () => {
|
||||
await form.setFieldTouched(
|
||||
fieldName,
|
||||
true
|
||||
);
|
||||
}}
|
||||
mimeTypes={
|
||||
);
|
||||
|
||||
if (
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.ImageFile
|
||||
? [
|
||||
MimeType.png,
|
||||
MimeType.jpeg,
|
||||
MimeType.jpg,
|
||||
]
|
||||
: []
|
||||
FormFieldSchemaType.File &&
|
||||
Array.isArray(fileResult)
|
||||
) {
|
||||
if (fileResult.length > 0) {
|
||||
fileResult =
|
||||
fileResult[0] as FileModel;
|
||||
} else {
|
||||
fileResult = null;
|
||||
}
|
||||
}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
: []
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
fieldName: fileResult,
|
||||
});
|
||||
field.onChange &&
|
||||
field.onChange(
|
||||
fileResult,
|
||||
form
|
||||
);
|
||||
await form.setFieldValue(
|
||||
fieldName,
|
||||
fileResult,
|
||||
true
|
||||
);
|
||||
}}
|
||||
onBlur={async () => {
|
||||
await form.setFieldTouched(
|
||||
fieldName,
|
||||
true
|
||||
);
|
||||
}}
|
||||
mimeTypes={
|
||||
field.fieldType ===
|
||||
FormFieldSchemaType.ImageFile
|
||||
? [
|
||||
MimeType.png,
|
||||
MimeType.jpeg,
|
||||
MimeType.jpg,
|
||||
]
|
||||
: []
|
||||
}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
: []
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
|
||||
{field.fieldType === FormFieldSchemaType.Checkbox && (
|
||||
<Field name={fieldName}>
|
||||
@@ -494,10 +494,16 @@ const BasicForm: Function = <T extends Object>(
|
||||
}}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
((initialValues as any)[fieldName] && ((initialValues as any)[fieldName] === true || (initialValues as any)[fieldName] === false))
|
||||
? (initialValues as any)[
|
||||
(initialValues as any)[fieldName] &&
|
||||
((initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
] === true ||
|
||||
(initialValues as any)[
|
||||
fieldName
|
||||
] === false)
|
||||
? (initialValues as any)[
|
||||
fieldName
|
||||
]
|
||||
: field.defaultValue || false
|
||||
}
|
||||
/>
|
||||
@@ -523,47 +529,47 @@ const BasicForm: Function = <T extends Object>(
|
||||
field.fieldType === FormFieldSchemaType.Phone ||
|
||||
field.fieldType === FormFieldSchemaType.Domain ||
|
||||
field.fieldType === FormFieldSchemaType.PositveNumber) && (
|
||||
<Field
|
||||
tabIndex={index + 1}
|
||||
name={fieldName}
|
||||
disabled={isDisabled || field.disabled}
|
||||
>
|
||||
{({ form }: FieldProps) => {
|
||||
return (
|
||||
<Input
|
||||
tabIndex={index}
|
||||
dataTestId={fieldType}
|
||||
className="form-control"
|
||||
type={fieldType as InputType}
|
||||
onChange={(value: string) => {
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
[fieldName]: value,
|
||||
});
|
||||
form.setFieldValue(
|
||||
fieldName,
|
||||
value,
|
||||
true
|
||||
);
|
||||
}}
|
||||
onEnterPress={() => {
|
||||
form.submitForm();
|
||||
}}
|
||||
onBlur={() => {
|
||||
form.setFieldTouched(fieldName, true);
|
||||
}}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[fieldName]
|
||||
: field.defaultValue || ''
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
<Field
|
||||
tabIndex={index + 1}
|
||||
name={fieldName}
|
||||
disabled={isDisabled || field.disabled}
|
||||
>
|
||||
{({ form }: FieldProps) => {
|
||||
return (
|
||||
<Input
|
||||
tabIndex={index}
|
||||
dataTestId={fieldType}
|
||||
className="form-control"
|
||||
type={fieldType as InputType}
|
||||
onChange={(value: string) => {
|
||||
setCurrentValue({
|
||||
...currentValue,
|
||||
[fieldName]: value,
|
||||
});
|
||||
form.setFieldValue(
|
||||
fieldName,
|
||||
value,
|
||||
true
|
||||
);
|
||||
}}
|
||||
onEnterPress={async () => {
|
||||
await form.submitForm();
|
||||
}}
|
||||
onBlur={() => {
|
||||
form.setFieldTouched(fieldName, true);
|
||||
}}
|
||||
initialValue={
|
||||
initialValues &&
|
||||
(initialValues as any)[fieldName]
|
||||
? (initialValues as any)[fieldName]
|
||||
: field.defaultValue || ''
|
||||
}
|
||||
placeholder={field.placeholder || ''}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
</Field>
|
||||
)}
|
||||
|
||||
<ErrorMessage
|
||||
className="mt-1 text-danger"
|
||||
@@ -586,15 +592,17 @@ const BasicForm: Function = <T extends Object>(
|
||||
if (field.validation) {
|
||||
if (field.validation.minLength) {
|
||||
if (content.trim().length < field.validation?.minLength) {
|
||||
return `${field.title || name} cannot be less than ${field.validation.minLength
|
||||
} characters.`;
|
||||
return `${field.title || name} cannot be less than ${
|
||||
field.validation.minLength
|
||||
} characters.`;
|
||||
}
|
||||
}
|
||||
|
||||
if (field.validation.maxLength) {
|
||||
if (content.trim().length > field.validation?.maxLength) {
|
||||
return `${field.title || name} cannot be more than ${field.validation.maxLength
|
||||
} characters.`;
|
||||
return `${field.title || name} cannot be more than ${
|
||||
field.validation.maxLength
|
||||
} characters.`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,15 +644,17 @@ const BasicForm: Function = <T extends Object>(
|
||||
|
||||
if (field.validation.maxValue) {
|
||||
if (content > field.validation?.maxValue) {
|
||||
return `${field.title || name} should not be more than ${field.validation?.maxValue
|
||||
}.`;
|
||||
return `${field.title || name} should not be more than ${
|
||||
field.validation?.maxValue
|
||||
}.`;
|
||||
}
|
||||
}
|
||||
|
||||
if (field.validation.minValue) {
|
||||
if (content < field.validation?.minValue) {
|
||||
return `${field.title || name} should not be less than ${field.validation?.minValue
|
||||
}.`;
|
||||
return `${field.title || name} should not be less than ${
|
||||
field.validation?.minValue
|
||||
}.`;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -766,79 +776,79 @@ const BasicForm: Function = <T extends Object>(
|
||||
values: FormValues<T>
|
||||
) => void | object | Promise<FormikErrors<FormValues<T>>>) &
|
||||
Function = (values: FormValues<T>): FormikErrors<FormValues<T>> => {
|
||||
const errors: JSONObject = {};
|
||||
const entries: JSONObject = { ...values } as JSONObject;
|
||||
const errors: JSONObject = {};
|
||||
const entries: JSONObject = { ...values } as JSONObject;
|
||||
|
||||
for (const field of props.fields) {
|
||||
const name: string = field.overideFieldKey
|
||||
? field.overideFieldKey
|
||||
: (Object.keys(field.field)[0] as string);
|
||||
for (const field of props.fields) {
|
||||
const name: string = field.overideFieldKey
|
||||
? field.overideFieldKey
|
||||
: (Object.keys(field.field)[0] as string);
|
||||
|
||||
if (name in entries) {
|
||||
const content: string | undefined = entries[name]?.toString();
|
||||
if (name in entries) {
|
||||
const content: string | undefined = entries[name]?.toString();
|
||||
|
||||
// Check Required fields.
|
||||
const resultRequired: string | null = validateRequired(
|
||||
content,
|
||||
field
|
||||
);
|
||||
if (resultRequired) {
|
||||
errors[name] = resultRequired;
|
||||
}
|
||||
|
||||
// Check for valid email data.
|
||||
const resultValidateData: string | null = validateData(
|
||||
content,
|
||||
field
|
||||
);
|
||||
if (resultValidateData) {
|
||||
errors[name] = resultValidateData;
|
||||
}
|
||||
|
||||
const resultMatch: string | null = validateMatchField(
|
||||
content,
|
||||
field,
|
||||
entries
|
||||
);
|
||||
|
||||
if (resultMatch) {
|
||||
errors[name] = resultMatch;
|
||||
}
|
||||
|
||||
// check for length of content
|
||||
const result: string | null = validateLength(content, field);
|
||||
if (result) {
|
||||
errors[name] = result;
|
||||
}
|
||||
|
||||
// check for date
|
||||
const resultDate: string | null = validateDate(content, field);
|
||||
if (resultDate) {
|
||||
errors[name] = resultDate;
|
||||
}
|
||||
|
||||
// check for length of content
|
||||
const resultMaxMinValue: string | null =
|
||||
validateMaxValueAndMinValue(content, field);
|
||||
|
||||
if (resultMaxMinValue) {
|
||||
errors[name] = resultMaxMinValue;
|
||||
}
|
||||
} else if (field.required) {
|
||||
errors[name] = `${field.title || name} is required.`;
|
||||
// Check Required fields.
|
||||
const resultRequired: string | null = validateRequired(
|
||||
content,
|
||||
field
|
||||
);
|
||||
if (resultRequired) {
|
||||
errors[name] = resultRequired;
|
||||
}
|
||||
|
||||
// Check for valid email data.
|
||||
const resultValidateData: string | null = validateData(
|
||||
content,
|
||||
field
|
||||
);
|
||||
if (resultValidateData) {
|
||||
errors[name] = resultValidateData;
|
||||
}
|
||||
|
||||
const resultMatch: string | null = validateMatchField(
|
||||
content,
|
||||
field,
|
||||
entries
|
||||
);
|
||||
|
||||
if (resultMatch) {
|
||||
errors[name] = resultMatch;
|
||||
}
|
||||
|
||||
// check for length of content
|
||||
const result: string | null = validateLength(content, field);
|
||||
if (result) {
|
||||
errors[name] = result;
|
||||
}
|
||||
|
||||
// check for date
|
||||
const resultDate: string | null = validateDate(content, field);
|
||||
if (resultDate) {
|
||||
errors[name] = resultDate;
|
||||
}
|
||||
|
||||
// check for length of content
|
||||
const resultMaxMinValue: string | null =
|
||||
validateMaxValueAndMinValue(content, field);
|
||||
|
||||
if (resultMaxMinValue) {
|
||||
errors[name] = resultMaxMinValue;
|
||||
}
|
||||
} else if (field.required) {
|
||||
errors[name] = `${field.title || name} is required.`;
|
||||
}
|
||||
}
|
||||
|
||||
let customValidateResult: JSONObject = {};
|
||||
let customValidateResult: JSONObject = {};
|
||||
|
||||
if (props.onValidate) {
|
||||
customValidateResult = props.onValidate(values);
|
||||
}
|
||||
if (props.onValidate) {
|
||||
customValidateResult = props.onValidate(values);
|
||||
}
|
||||
|
||||
return { ...errors, ...customValidateResult } as FormikErrors<
|
||||
FormValues<T>
|
||||
>;
|
||||
};
|
||||
return { ...errors, ...customValidateResult } as FormikErrors<
|
||||
FormValues<T>
|
||||
>;
|
||||
};
|
||||
|
||||
const formRef: any = useRef<any>(null);
|
||||
|
||||
@@ -925,7 +935,7 @@ const BasicForm: Function = <T extends Object>(
|
||||
if (
|
||||
(values as any)[fieldName] &&
|
||||
typeof (values as any)[fieldName] ===
|
||||
Typeof.String
|
||||
Typeof.String
|
||||
) {
|
||||
(values as any)[fieldName] =
|
||||
new HashedString(
|
||||
@@ -956,19 +966,21 @@ const BasicForm: Function = <T extends Object>(
|
||||
|
||||
<div className={`col-lg-12 flex`}>
|
||||
<div
|
||||
className={`col-lg-${12 / (props.showAsColumns || 1)
|
||||
} ${(props.showAsColumns || 1) > 1
|
||||
className={`col-lg-${
|
||||
12 / (props.showAsColumns || 1)
|
||||
} ${
|
||||
(props.showAsColumns || 1) > 1
|
||||
? 'pr-10'
|
||||
: ''
|
||||
}`}
|
||||
}`}
|
||||
>
|
||||
{props.fields &&
|
||||
props.fields.map(
|
||||
(field: DataField<T>, i: number) => {
|
||||
if (
|
||||
i %
|
||||
(props.showAsColumns ||
|
||||
1) ===
|
||||
(props.showAsColumns ||
|
||||
1) ===
|
||||
0
|
||||
) {
|
||||
return getFormField(
|
||||
@@ -985,11 +997,13 @@ const BasicForm: Function = <T extends Object>(
|
||||
</div>
|
||||
{(props.showAsColumns || 1) > 1 && (
|
||||
<div
|
||||
className={`col-lg-${12 / (props.showAsColumns || 1)
|
||||
} ${(props.showAsColumns || 1) > 1
|
||||
className={`col-lg-${
|
||||
12 / (props.showAsColumns || 1)
|
||||
} ${
|
||||
(props.showAsColumns || 1) > 1
|
||||
? 'pl-10'
|
||||
: ''
|
||||
}`}
|
||||
}`}
|
||||
>
|
||||
{props.fields &&
|
||||
props.fields.map(
|
||||
@@ -999,8 +1013,8 @@ const BasicForm: Function = <T extends Object>(
|
||||
) => {
|
||||
if (
|
||||
i %
|
||||
(props.showAsColumns ||
|
||||
1) !==
|
||||
(props.showAsColumns ||
|
||||
1) !==
|
||||
0
|
||||
) {
|
||||
return getFormField(
|
||||
|
||||
@@ -33,7 +33,7 @@ const ColorPicker: FunctionComponent<ComponentProps> = (
|
||||
const handleChange: Function = (color: string): void => {
|
||||
setColor(color);
|
||||
if (!color) {
|
||||
return props.onChange(null);
|
||||
return props.onChange(null);
|
||||
}
|
||||
props.onChange(new Color(color));
|
||||
};
|
||||
|
||||
@@ -136,7 +136,7 @@ export enum IconProp {
|
||||
ExternalLink,
|
||||
Link,
|
||||
Layers,
|
||||
Clock
|
||||
Clock,
|
||||
}
|
||||
|
||||
export interface ComponentProps {
|
||||
@@ -172,175 +172,175 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Home
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.More && (
|
||||
<Grid
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Activity && (
|
||||
<Activity
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Alert && (
|
||||
<AlertOctagon
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Call && (
|
||||
<PhoneCall
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Settings && (
|
||||
<Settings
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Notification && (
|
||||
<Bell
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.CheckCircle && (
|
||||
<CheckCircle
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Search && (
|
||||
<Search
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Help && (
|
||||
<HelpCircle
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any as any}
|
||||
color={color ? color.toString() : (undefined as any as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Logout && (
|
||||
<Power
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Billing && (
|
||||
<CreditCard
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.User && (
|
||||
<User
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.ChevronDown && (
|
||||
<ChevronDown
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.ChevronLeft && (
|
||||
<ChevronLeft
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.ChevronRight && (
|
||||
<ChevronRight
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.ChevronUp && (
|
||||
<ChevronUp
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Email && (
|
||||
<Mail
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Slack && (
|
||||
<Slack
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Time && (
|
||||
<Clock
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Terminal && (
|
||||
<Terminal
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Error && (
|
||||
<AlertTriangle
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Code && (
|
||||
<Code
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Report && (
|
||||
<PieChart
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Team && (
|
||||
<Users
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -348,7 +348,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Lock
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -356,7 +356,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Key
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -364,7 +364,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Folder
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -372,7 +372,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Share2
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -380,105 +380,105 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<MessageSquare
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Info && (
|
||||
<Info
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Success && (
|
||||
<Check
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Trash && (
|
||||
<Trash
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Close && (
|
||||
<X
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Add && (
|
||||
<Plus
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Label && (
|
||||
<Tag
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Refresh && (
|
||||
<RefreshCcw
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Filter && (
|
||||
<Filter
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Edit && (
|
||||
<Edit2
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Hide && (
|
||||
<EyeOff
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Check && (
|
||||
<Check
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.True && (
|
||||
<Check
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.False && (
|
||||
<X
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.List && (
|
||||
<List
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -486,7 +486,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<User
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -494,7 +494,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Circle
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -502,7 +502,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<BarChart2
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -510,7 +510,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Globe
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -518,7 +518,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Image
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -526,7 +526,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Type
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -534,7 +534,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<MoreVertical
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -542,7 +542,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Link2
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -550,7 +550,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Link2
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -558,7 +558,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Send
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -566,7 +566,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Disc
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -574,7 +574,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<FileText
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -582,7 +582,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<ExternalLink
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -590,24 +590,23 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
||||
<Rss
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Layers && (
|
||||
<Layers
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
{icon === IconProp.Clock && (
|
||||
<Clock
|
||||
size={size}
|
||||
strokeWidth={thick ? thick : ''}
|
||||
color={color ? color.toString(): undefined as any}
|
||||
color={color ? color.toString() : (undefined as any)}
|
||||
/>
|
||||
)}
|
||||
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -49,7 +49,7 @@ const Input: FunctionComponent<ComponentProps> = (
|
||||
if (props.leftCircleColor) {
|
||||
setColor(props.leftCircleColor.toString());
|
||||
}
|
||||
}, [props.leftCircleColor])
|
||||
}, [props.leftCircleColor]);
|
||||
|
||||
useEffect(() => {
|
||||
if (props.type === 'date' || props.type === 'datetime-local') {
|
||||
@@ -110,7 +110,7 @@ const Input: FunctionComponent<ComponentProps> = (
|
||||
borderRadius: '300px',
|
||||
boxShadow: 'rgb(149 157 165 / 20%) 0px 8px 24px',
|
||||
marginRight: '7px',
|
||||
borderStyle: "solid"
|
||||
borderStyle: 'solid',
|
||||
}}
|
||||
></div>
|
||||
)}
|
||||
@@ -140,11 +140,15 @@ const Input: FunctionComponent<ComponentProps> = (
|
||||
}
|
||||
}}
|
||||
tabIndex={props.tabIndex}
|
||||
onKeyDown={props.onEnterPress ? (event: any) => {
|
||||
if (event.key === 'Enter') {
|
||||
props.onEnterPress && props.onEnterPress();
|
||||
}
|
||||
} : undefined}
|
||||
onKeyDown={
|
||||
props.onEnterPress
|
||||
? (event: any) => {
|
||||
if (event.key === 'Enter') {
|
||||
props.onEnterPress && props.onEnterPress();
|
||||
}
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
readOnly={props.readOnly || props.disabled || false}
|
||||
type={props.type || 'text'}
|
||||
placeholder={props.placeholder}
|
||||
@@ -159,13 +163,19 @@ const Input: FunctionComponent<ComponentProps> = (
|
||||
}
|
||||
}}
|
||||
/>
|
||||
{color && !props.disabled && (<Icon icon={IconProp.Close} color={Grey} onClick={() => {
|
||||
setValue('');
|
||||
setColor('#000000')
|
||||
if (props.onChange) {
|
||||
props.onChange('');
|
||||
}
|
||||
}} />)}
|
||||
{color && !props.disabled && (
|
||||
<Icon
|
||||
icon={IconProp.Close}
|
||||
color={Grey}
|
||||
onClick={() => {
|
||||
setValue('');
|
||||
setColor('#000000');
|
||||
if (props.onChange) {
|
||||
props.onChange('');
|
||||
}
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -36,7 +36,9 @@ const MasterPage: FunctionComponent<ComponentProps> = (
|
||||
<div id="layout-wrapper">
|
||||
{props.header && props.header}
|
||||
{props.navBar && props.navBar}
|
||||
<div className="main-content" style={props.mainContentStyle}>{props.children}</div>
|
||||
<div className="main-content" style={props.mainContentStyle}>
|
||||
{props.children}
|
||||
</div>
|
||||
{props.footer && props.footer}
|
||||
</div>
|
||||
</React.Fragment>
|
||||
|
||||
@@ -21,7 +21,7 @@ export interface ComponentProps<TBaseModel extends BaseModel> {
|
||||
cardProps: CardProps;
|
||||
modelDetailProps: ModeDetailProps<TBaseModel>;
|
||||
isEditable?: undefined | boolean;
|
||||
editButtonText?: undefined | string;
|
||||
editButtonText?: undefined | string;
|
||||
formFields?: undefined | Fields<TBaseModel>;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,13 +12,19 @@ const Navbar: FunctionComponent<ComponentProps> = (
|
||||
): ReactElement => {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<div className="topnav active" style={{
|
||||
zIndex: 1000,
|
||||
...props.navBarStyle
|
||||
}}>
|
||||
<div className="container-fluid active" style={{
|
||||
maxWidth: props.maxWidth
|
||||
}}>
|
||||
<div
|
||||
className="topnav active"
|
||||
style={{
|
||||
zIndex: 1000,
|
||||
...props.navBarStyle,
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className="container-fluid active"
|
||||
style={{
|
||||
maxWidth: props.maxWidth,
|
||||
}}
|
||||
>
|
||||
<nav
|
||||
className="navbar navbar-light navbar-expand-lg topnav-menu active"
|
||||
id="navigation"
|
||||
|
||||
@@ -35,7 +35,11 @@ const SideMenuItem: FunctionComponent<ComponentProps> = (
|
||||
<Icon
|
||||
icon={props.icon}
|
||||
thick={ThickProp.LessThick}
|
||||
color={Navigation.isOnThisPage(props.link.to) ? Black : null}
|
||||
color={
|
||||
Navigation.isOnThisPage(props.link.to)
|
||||
? Black
|
||||
: null
|
||||
}
|
||||
/>
|
||||
</>
|
||||
) : (
|
||||
|
||||
@@ -44,7 +44,6 @@ import IncidentInternalNote from './Pages/Incidents/View/InternalNote';
|
||||
import IncidentPublicNote from './Pages/Incidents/View/PublicNote';
|
||||
import UnresolvedIncidents from './Pages/Incidents/Unresolved';
|
||||
|
||||
|
||||
import ScheduledMaintenanceEvents from './Pages/ScheduledMaintenanceEvents/ScheduledMaintenanceEvents';
|
||||
import ScheduledMaintenanceEventView from './Pages/ScheduledMaintenanceEvents/View/Index';
|
||||
import ScheduledMaintenanceEventViewDelete from './Pages/ScheduledMaintenanceEvents/View/Delete';
|
||||
@@ -156,7 +155,7 @@ const App: FunctionComponent = () => {
|
||||
} catch (err) {
|
||||
setError(
|
||||
(err as HTTPErrorResponse).message ||
|
||||
'Server Error. Please try again'
|
||||
'Server Error. Please try again'
|
||||
);
|
||||
}
|
||||
|
||||
@@ -241,7 +240,11 @@ const App: FunctionComponent = () => {
|
||||
]?.toString()}
|
||||
element={
|
||||
<NotOperationalMonitors
|
||||
pageRoute={RouteMap[PageMap.HOME_NOT_OPERATIONAL_MONITORS] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.HOME_NOT_OPERATIONAL_MONITORS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
}
|
||||
@@ -253,7 +256,12 @@ const App: FunctionComponent = () => {
|
||||
]?.toString()}
|
||||
element={
|
||||
<OngoingScheduledEvents
|
||||
pageRoute={RouteMap[PageMap.HOME_ONGOING_SCHEDULED_MAINTENANCE_EVENTS] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap
|
||||
.HOME_ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
}
|
||||
@@ -276,7 +284,7 @@ const App: FunctionComponent = () => {
|
||||
<MonitorInoperational
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.MONITORS_INOPERATIONAL
|
||||
PageMap.MONITORS_INOPERATIONAL
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -314,7 +322,7 @@ const App: FunctionComponent = () => {
|
||||
<MonitorViewStatusTimeline
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.MONITOR_VIEW_STATUS_TIMELINE
|
||||
PageMap.MONITOR_VIEW_STATUS_TIMELINE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -328,7 +336,7 @@ const App: FunctionComponent = () => {
|
||||
<MonitorIncidents
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.MONITOR_VIEW_INCIDENTS
|
||||
PageMap.MONITOR_VIEW_INCIDENTS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -378,7 +386,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewDelete
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_DELETE
|
||||
PageMap.STATUS_PAGE_VIEW_DELETE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -394,7 +402,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewBranding
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_BRANDING
|
||||
PageMap.STATUS_PAGE_VIEW_BRANDING
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -410,7 +418,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewCustomHtmlCss
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_CUSTOM_HTML_CSS
|
||||
PageMap.STATUS_PAGE_VIEW_CUSTOM_HTML_CSS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -426,7 +434,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewAdvancedOptions
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_ADVANCED_OPTIONS
|
||||
PageMap.STATUS_PAGE_VIEW_ADVANCED_OPTIONS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -442,7 +450,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewEmailSubscribers
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_EMAIL_SUBSCRIBERS
|
||||
PageMap.STATUS_PAGE_VIEW_EMAIL_SUBSCRIBERS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -458,7 +466,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewSMSSubscribers
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_SMS_SUBSCRIBERS
|
||||
PageMap.STATUS_PAGE_VIEW_SMS_SUBSCRIBERS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -474,7 +482,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewHeaderStyle
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_HEADER_STYLE
|
||||
PageMap.STATUS_PAGE_VIEW_HEADER_STYLE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -490,7 +498,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewFooterStyle
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_FOOTER_STYLE
|
||||
PageMap.STATUS_PAGE_VIEW_FOOTER_STYLE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -498,7 +506,6 @@ const App: FunctionComponent = () => {
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_NAVBAR_STYLE
|
||||
@@ -507,7 +514,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewNavBarStyle
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_NAVBAR_STYLE
|
||||
PageMap.STATUS_PAGE_VIEW_NAVBAR_STYLE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -523,7 +530,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewWebhookSubscribers
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_WEBHOOK_SUBSCRIBERS
|
||||
PageMap.STATUS_PAGE_VIEW_WEBHOOK_SUBSCRIBERS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -539,7 +546,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewEmbedded
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_EMBEDDED
|
||||
PageMap.STATUS_PAGE_VIEW_EMBEDDED
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -555,7 +562,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewResources
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_RESOURCES
|
||||
PageMap.STATUS_PAGE_VIEW_RESOURCES
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -571,7 +578,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewDomains
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_DOMAINS
|
||||
PageMap.STATUS_PAGE_VIEW_DOMAINS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -585,7 +592,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewGroups
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_GROUPS
|
||||
PageMap.STATUS_PAGE_VIEW_GROUPS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -601,7 +608,7 @@ const App: FunctionComponent = () => {
|
||||
<StatusPagesViewAnnouncement
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_ANNOUNCEMENTS
|
||||
PageMap.STATUS_PAGE_VIEW_ANNOUNCEMENTS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -663,7 +670,7 @@ const App: FunctionComponent = () => {
|
||||
<IncidentViewStateTimeline
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.INCIDENT_VIEW_STATE_TIMELINE
|
||||
PageMap.INCIDENT_VIEW_STATE_TIMELINE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -677,7 +684,7 @@ const App: FunctionComponent = () => {
|
||||
<IncidentInternalNote
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.INCIDENT_INTERNAL_NOTE
|
||||
PageMap.INCIDENT_INTERNAL_NOTE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -697,33 +704,18 @@ const App: FunctionComponent = () => {
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
{/* Scheduled Events */}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_EVENTS
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledMaintenanceEvents
|
||||
pageRoute={RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS]?.toString()}
|
||||
element={
|
||||
<OngoingScheduledMaintenanceEvents
|
||||
pageRoute={
|
||||
RouteMap[PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS] as Route
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
@@ -731,21 +723,47 @@ const App: FunctionComponent = () => {
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledMaintenanceEventView
|
||||
pageRoute={RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW] as Route}
|
||||
<OngoingScheduledMaintenanceEvents
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledMaintenanceEventView
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledMaintenanceEventViewDelete
|
||||
pageRoute={
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE] as Route
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
@@ -760,7 +778,8 @@ const App: FunctionComponent = () => {
|
||||
<ScheduledMaintenanceEventViewStateTimeline
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE
|
||||
PageMap
|
||||
.SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -769,12 +788,14 @@ const App: FunctionComponent = () => {
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledMaintenanceEventInternalNote
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE
|
||||
PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -783,19 +804,21 @@ const App: FunctionComponent = () => {
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledMaintenanceEventPublicNote
|
||||
pageRoute={
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE] as Route
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
{/* Logs */}
|
||||
|
||||
<PageRoute
|
||||
@@ -846,7 +869,7 @@ const App: FunctionComponent = () => {
|
||||
<SettingsMonitors
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SETTINGS_MONITORS_STATUS
|
||||
PageMap.SETTINGS_MONITORS_STATUS
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -862,7 +885,7 @@ const App: FunctionComponent = () => {
|
||||
<SettingsIncidents
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SETTINGS_INCIDENTS_STATE
|
||||
PageMap.SETTINGS_INCIDENTS_STATE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -878,7 +901,7 @@ const App: FunctionComponent = () => {
|
||||
<SettingsScheduledMaintenanceState
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SETTINGS_SCHEDULED_MAINTENANCE_STATE
|
||||
PageMap.SETTINGS_SCHEDULED_MAINTENANCE_STATE
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
@@ -894,7 +917,7 @@ const App: FunctionComponent = () => {
|
||||
<SettingsIncidentSeverity
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SETTINGS_INCIDENTS_SEVERITY
|
||||
PageMap.SETTINGS_INCIDENTS_SEVERITY
|
||||
] as Route
|
||||
}
|
||||
currentProject={selectedProject}
|
||||
|
||||
@@ -17,7 +17,9 @@ const Logo: FunctionComponent<ComponentProps> = (
|
||||
onClick={() => {
|
||||
props.onClick && props.onClick();
|
||||
}}
|
||||
imageUrl={Route.fromString(`/dashboard/public/${OneUptimeLogo}`)}
|
||||
imageUrl={Route.fromString(
|
||||
`/dashboard/public/${OneUptimeLogo}`
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -64,8 +64,6 @@ const DashboardNavbar: FunctionComponent<ComponentProps> = (
|
||||
icon={IconProp.Clock}
|
||||
></NavBarItem>
|
||||
|
||||
|
||||
|
||||
<NavBarItem
|
||||
title="Status Pages"
|
||||
icon={IconProp.CheckCircle}
|
||||
|
||||
@@ -34,9 +34,8 @@ const ChangeScheduledMaintenanceState: FunctionComponent<ComponentProps> = (
|
||||
props: ComponentProps
|
||||
): ReactElement => {
|
||||
const [isLoading, setIsLaoding] = useState<boolean>(false);
|
||||
const [scheduledMaintenanceTimeline, setScheduledMaintenanceTimeline] = useState<
|
||||
ScheduledMaintenanceStateTimeline | undefined
|
||||
>(undefined);
|
||||
const [scheduledMaintenanceTimeline, setScheduledMaintenanceTimeline] =
|
||||
useState<ScheduledMaintenanceStateTimeline | undefined>(undefined);
|
||||
|
||||
useEffect(() => {
|
||||
for (const event of props.scheduledMaintenanceTimeline) {
|
||||
@@ -68,7 +67,9 @@ const ChangeScheduledMaintenanceState: FunctionComponent<ComponentProps> = (
|
||||
) {
|
||||
return (
|
||||
<div>
|
||||
<UserElement user={scheduledMaintenanceTimeline.createdByUser} />
|
||||
<UserElement
|
||||
user={scheduledMaintenanceTimeline.createdByUser}
|
||||
/>
|
||||
{OneUptimeDate.getDateAsLocalFormattedString(
|
||||
scheduledMaintenanceTimeline.createdAt
|
||||
)}
|
||||
@@ -143,14 +144,18 @@ const ChangeScheduledMaintenanceState: FunctionComponent<ComponentProps> = (
|
||||
}
|
||||
|
||||
if (!stateId) {
|
||||
throw new BadDataException('Scheduled Maintenance State not found.');
|
||||
throw new BadDataException(
|
||||
'Scheduled Maintenance State not found.'
|
||||
);
|
||||
}
|
||||
|
||||
const scheduledMaintenanceStateTimeline: ScheduledMaintenanceStateTimeline =
|
||||
new ScheduledMaintenanceStateTimeline();
|
||||
scheduledMaintenanceStateTimeline.projectId = projectId;
|
||||
scheduledMaintenanceStateTimeline.scheduledMaintenanceId = props.scheduledMaintenanceId;
|
||||
scheduledMaintenanceStateTimeline.scheduledMaintenanceStateId = stateId;
|
||||
scheduledMaintenanceStateTimeline.scheduledMaintenanceId =
|
||||
props.scheduledMaintenanceId;
|
||||
scheduledMaintenanceStateTimeline.scheduledMaintenanceStateId =
|
||||
stateId;
|
||||
|
||||
await ModelAPI.create(
|
||||
scheduledMaintenanceStateTimeline,
|
||||
|
||||
@@ -47,7 +47,9 @@ const ScheduledMaintenancesTable: FunctionComponent<ComponentProps> = (
|
||||
props.description ||
|
||||
'Here is a list of scheduled maintenance events for this project.',
|
||||
}}
|
||||
noItemsMessage={props.noItemsMessage || 'No scheduled Maintenance Event found.'}
|
||||
noItemsMessage={
|
||||
props.noItemsMessage || 'No scheduled Maintenance Event found.'
|
||||
}
|
||||
formFields={[
|
||||
{
|
||||
field: {
|
||||
@@ -95,7 +97,8 @@ const ScheduledMaintenancesTable: FunctionComponent<ComponentProps> = (
|
||||
monitors: true,
|
||||
},
|
||||
title: 'Monitors affected (Optional)',
|
||||
description: 'Select monitors affected by this scheduled maintenance.',
|
||||
description:
|
||||
'Select monitors affected by this scheduled maintenance.',
|
||||
fieldType: FormFieldSchemaType.MultiSelectDropdown,
|
||||
dropdownModal: {
|
||||
type: Monitor,
|
||||
@@ -216,7 +219,7 @@ const ScheduledMaintenancesTable: FunctionComponent<ComponentProps> = (
|
||||
return <></>;
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
field: {
|
||||
monitors: {
|
||||
@@ -273,7 +276,8 @@ const ScheduledMaintenancesTable: FunctionComponent<ComponentProps> = (
|
||||
<StatusPagesElement
|
||||
statusPages={
|
||||
StatusPage.fromJSON(
|
||||
(item['statusPages'] as JSONArray) || [],
|
||||
(item['statusPages'] as JSONArray) ||
|
||||
[],
|
||||
StatusPage
|
||||
) as Array<StatusPage>
|
||||
}
|
||||
|
||||
@@ -25,13 +25,17 @@ const ScheduledMaintenancesPage: FunctionComponent<PageComponentProps> = (
|
||||
},
|
||||
{
|
||||
title: 'Ongoing Scheduled Maintenance',
|
||||
to: RouteMap[PageMap.HOME_ONGOING_SCHEDULED_MAINTENANCE_EVENTS] as Route,
|
||||
to: RouteMap[
|
||||
PageMap.HOME_ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route,
|
||||
},
|
||||
]}
|
||||
>
|
||||
<ScheduledMaintenanceTable
|
||||
currentProject={props.currentProject || undefined}
|
||||
viewPageRoute={RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route}
|
||||
viewPageRoute={
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route
|
||||
}
|
||||
query={{
|
||||
projectId: props.currentProject?._id,
|
||||
currentScheduledMaintenanceState: {
|
||||
|
||||
@@ -39,10 +39,8 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
},
|
||||
}}
|
||||
/>
|
||||
|
||||
</SideMenuSection>
|
||||
<SideMenuSection title="Monitors">
|
||||
|
||||
<SideMenuItem<Monitor>
|
||||
link={{
|
||||
title: 'Inoperational Monitors',
|
||||
@@ -64,13 +62,13 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
/>
|
||||
</SideMenuSection>
|
||||
<SideMenuSection title="Scheduled Maintenance">
|
||||
|
||||
<SideMenuItem<Monitor>
|
||||
link={{
|
||||
title: 'Ongoing Events',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.HOME_ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
PageMap
|
||||
.HOME_ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route
|
||||
),
|
||||
}}
|
||||
|
||||
@@ -25,13 +25,17 @@ const ScheduledMaintenancesPage: FunctionComponent<PageComponentProps> = (
|
||||
},
|
||||
{
|
||||
title: 'Ongoing Scheduled Maintenance',
|
||||
to: RouteMap[PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS] as Route,
|
||||
to: RouteMap[
|
||||
PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route,
|
||||
},
|
||||
]}
|
||||
>
|
||||
<ScheduledMaintenanceTable
|
||||
currentProject={props.currentProject || undefined}
|
||||
viewPageRoute={RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route}
|
||||
viewPageRoute={
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route
|
||||
}
|
||||
query={{
|
||||
projectId: props.currentProject?._id,
|
||||
currentScheduledMaintenanceState: {
|
||||
|
||||
@@ -25,7 +25,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'All Events',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route
|
||||
),
|
||||
}}
|
||||
icon={IconProp.List}
|
||||
@@ -35,7 +37,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Ongoing Events',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS] as Route
|
||||
RouteMap[
|
||||
PageMap.ONGOING_SCHEDULED_MAINTENANCE_EVENTS
|
||||
] as Route
|
||||
),
|
||||
}}
|
||||
icon={IconProp.Clock}
|
||||
|
||||
@@ -45,7 +45,9 @@ const IncidentDelete: FunctionComponent<PageComponentProps> = (
|
||||
{
|
||||
title: 'Delete Scheduled Maintenance',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE
|
||||
] as Route,
|
||||
modelId
|
||||
),
|
||||
},
|
||||
@@ -56,7 +58,9 @@ const IncidentDelete: FunctionComponent<PageComponentProps> = (
|
||||
modelType={ScheduledMaintenance}
|
||||
modelId={modelId}
|
||||
onDeleteSuccess={() => {
|
||||
Navigation.navigate(RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route);
|
||||
Navigation.navigate(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_EVENTS] as Route
|
||||
);
|
||||
}}
|
||||
/>
|
||||
</Page>
|
||||
|
||||
@@ -119,7 +119,8 @@ const ScheduledMaintenanceView: FunctionComponent<PageComponentProps> = (
|
||||
monitors: true,
|
||||
},
|
||||
title: 'Monitors affected (Optional)',
|
||||
description: 'Select monitors affected by this scheduled maintenance.',
|
||||
description:
|
||||
'Select monitors affected by this scheduled maintenance.',
|
||||
fieldType: FormFieldSchemaType.MultiSelectDropdown,
|
||||
dropdownModal: {
|
||||
type: Monitor,
|
||||
@@ -134,7 +135,8 @@ const ScheduledMaintenanceView: FunctionComponent<PageComponentProps> = (
|
||||
statusPages: true,
|
||||
},
|
||||
title: 'Show event on these status pages (Optional)',
|
||||
description: 'Select status pages to show this event on',
|
||||
description:
|
||||
'Select status pages to show this event on',
|
||||
fieldType: FormFieldSchemaType.MultiSelectDropdown,
|
||||
dropdownModal: {
|
||||
type: StatusPage,
|
||||
@@ -188,7 +190,7 @@ const ScheduledMaintenanceView: FunctionComponent<PageComponentProps> = (
|
||||
name: true,
|
||||
isResolvedState: true,
|
||||
isOngoingState: true,
|
||||
isScheduledState: true
|
||||
isScheduledState: true,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
@@ -28,7 +28,7 @@ const ScheduledMaintenanceDelete: FunctionComponent<PageComponentProps> = (
|
||||
|
||||
return (
|
||||
<Page
|
||||
title={'Scheduled Maintenance Event'}
|
||||
title={'Scheduled Maintenance Event'}
|
||||
breadcrumbLinks={[
|
||||
{
|
||||
title: 'Project',
|
||||
@@ -54,7 +54,9 @@ const ScheduledMaintenanceDelete: FunctionComponent<PageComponentProps> = (
|
||||
{
|
||||
title: 'Private Notes',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE
|
||||
] as Route,
|
||||
modelId
|
||||
),
|
||||
},
|
||||
@@ -85,7 +87,8 @@ const ScheduledMaintenanceDelete: FunctionComponent<PageComponentProps> = (
|
||||
cardProps={{
|
||||
icon: IconProp.Lock,
|
||||
title: 'Private Notes',
|
||||
description: 'Here are private notes for this scheduled maintenance.',
|
||||
description:
|
||||
'Here are private notes for this scheduled maintenance.',
|
||||
}}
|
||||
noItemsMessage={
|
||||
'No private notes created for this scheduled maintenance so far.'
|
||||
|
||||
@@ -28,7 +28,7 @@ const PublicNote: FunctionComponent<PageComponentProps> = (
|
||||
|
||||
return (
|
||||
<Page
|
||||
title={'Scheduled Maintenance Event'}
|
||||
title={'Scheduled Maintenance Event'}
|
||||
breadcrumbLinks={[
|
||||
{
|
||||
title: 'Project',
|
||||
@@ -54,7 +54,9 @@ const PublicNote: FunctionComponent<PageComponentProps> = (
|
||||
{
|
||||
title: 'Public Notes',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE
|
||||
] as Route,
|
||||
modelId
|
||||
),
|
||||
},
|
||||
|
||||
@@ -22,7 +22,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Overview',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
}}
|
||||
@@ -33,7 +35,8 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'State Timeline',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE
|
||||
PageMap
|
||||
.SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -47,7 +50,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Private Notes',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_INTERNAL_NOTE
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
}}
|
||||
@@ -57,7 +62,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Public Notes',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_PUBLIC_NOTE
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
}}
|
||||
@@ -70,7 +77,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Delete Scheduled Maintenance',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
}}
|
||||
|
||||
@@ -53,7 +53,9 @@ const ScheduledMaintenanceDelete: FunctionComponent<PageComponentProps> = (
|
||||
{
|
||||
title: 'Status Timeline',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE] as Route,
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_MAINTENANCE_VIEW_STATE_TIMELINE
|
||||
] as Route,
|
||||
modelId
|
||||
),
|
||||
},
|
||||
@@ -129,14 +131,18 @@ const ScheduledMaintenanceDelete: FunctionComponent<PageComponentProps> = (
|
||||
return (
|
||||
<Pill
|
||||
color={
|
||||
(item['scheduledMaintenanceState'] as JSONObject)[
|
||||
'color'
|
||||
] as Color
|
||||
(
|
||||
item[
|
||||
'scheduledMaintenanceState'
|
||||
] as JSONObject
|
||||
)['color'] as Color
|
||||
}
|
||||
text={
|
||||
(item['scheduledMaintenanceState'] as JSONObject)[
|
||||
'name'
|
||||
] as string
|
||||
(
|
||||
item[
|
||||
'scheduledMaintenanceState'
|
||||
] as JSONObject
|
||||
)['name'] as string
|
||||
}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -35,7 +35,9 @@ const ScheduledMaintenancesPage: FunctionComponent<PageComponentProps> = (
|
||||
},
|
||||
{
|
||||
title: 'Scheduled Maintenance State',
|
||||
to: RouteMap[PageMap.SETTINGS_SCHEDULED_MAINTENANCE_STATE] as Route,
|
||||
to: RouteMap[
|
||||
PageMap.SETTINGS_SCHEDULED_MAINTENANCE_STATE
|
||||
] as Route,
|
||||
},
|
||||
]}
|
||||
sideMenu={<DashboardSideMenu />}
|
||||
|
||||
@@ -98,7 +98,9 @@ const DashboardSideMenu: FunctionComponent = (): ReactElement => {
|
||||
link={{
|
||||
title: 'Event State',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.SETTINGS_SCHEDULED_MAINTENANCE_STATE] as Route
|
||||
RouteMap[
|
||||
PageMap.SETTINGS_SCHEDULED_MAINTENANCE_STATE
|
||||
] as Route
|
||||
),
|
||||
}}
|
||||
icon={IconProp.Clock}
|
||||
|
||||
@@ -120,7 +120,6 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
isEditable={true}
|
||||
editButtonText={'Edit Favicon'}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
faviconFile: true,
|
||||
@@ -152,17 +151,16 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Page Colors',
|
||||
description: 'Page background color and text colors for your status page',
|
||||
description:
|
||||
'Page background color and text colors for your status page',
|
||||
icon: IconProp.Layers,
|
||||
}}
|
||||
editButtonText={'Edit Colors'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
pageBackgroundColor: true,
|
||||
@@ -189,7 +187,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
pageBackgroundColor: true
|
||||
pageBackgroundColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Page Background Color',
|
||||
@@ -197,7 +195,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
},
|
||||
{
|
||||
field: {
|
||||
pageTextColor: true
|
||||
pageTextColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Page Text Color',
|
||||
@@ -207,13 +205,6 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -53,7 +53,9 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
{
|
||||
title: 'Footer',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.STATUS_PAGE_VIEW_FOOTER_STYLE] as Route,
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_FOOTER_STYLE
|
||||
] as Route,
|
||||
modelId
|
||||
),
|
||||
},
|
||||
@@ -79,7 +81,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fieldType: FormFieldSchemaType.Text,
|
||||
required: false,
|
||||
placeholder: 'Acme, Inc.',
|
||||
}
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
showDetailsInNumberOfColumns: 1,
|
||||
@@ -93,13 +95,12 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fieldType: FieldType.Text,
|
||||
title: 'Copyright Info',
|
||||
placeholder: 'No copyright info entered so far.',
|
||||
}
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
<ModelTable<StatusPageFooterLink>
|
||||
modelType={StatusPageFooterLink}
|
||||
id="status-page-Footer-link"
|
||||
@@ -127,12 +128,9 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
cardProps={{
|
||||
icon: IconProp.Link,
|
||||
title: 'Footer Links',
|
||||
description:
|
||||
'Footer Links for your status page',
|
||||
description: 'Footer Links for your status page',
|
||||
}}
|
||||
noItemsMessage={
|
||||
'No status footer link for this status page.'
|
||||
}
|
||||
noItemsMessage={'No status footer link for this status page.'}
|
||||
formFields={[
|
||||
{
|
||||
field: {
|
||||
@@ -176,17 +174,16 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
]}
|
||||
/>
|
||||
|
||||
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Footer Colors',
|
||||
description: 'Footer background color and text colors for your status page',
|
||||
description:
|
||||
'Footer background color and text colors for your status page',
|
||||
icon: IconProp.Layers,
|
||||
}}
|
||||
editButtonText={'Edit Colors'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
footerBackgroundColor: true,
|
||||
@@ -213,7 +210,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
footerBackgroundColor: true
|
||||
footerBackgroundColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Footer Background Color',
|
||||
@@ -221,7 +218,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
},
|
||||
{
|
||||
field: {
|
||||
footerTextColor: true
|
||||
footerTextColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Footer Text Color',
|
||||
@@ -235,13 +232,13 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Advanced Footer Settings',
|
||||
description: 'Advanced settings for your status page footer',
|
||||
description:
|
||||
'Advanced settings for your status page footer',
|
||||
icon: IconProp.Settings,
|
||||
}}
|
||||
editButtonText={'Edit Settings'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
showFooter: true,
|
||||
@@ -249,7 +246,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
title: 'Show Footer on Status Page',
|
||||
fieldType: FormFieldSchemaType.Checkbox,
|
||||
required: false,
|
||||
}
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
showDetailsInNumberOfColumns: 1,
|
||||
@@ -258,16 +255,15 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
showFooter: true
|
||||
showFooter: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Show Footer on Status Page',
|
||||
}
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -53,7 +53,9 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
{
|
||||
title: 'Header',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.STATUS_PAGE_VIEW_HEADER_STYLE] as Route,
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_HEADER_STYLE
|
||||
] as Route,
|
||||
modelId
|
||||
),
|
||||
},
|
||||
@@ -62,9 +64,6 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
>
|
||||
<StatusPagePreviewLink modelId={modelId} />
|
||||
|
||||
|
||||
|
||||
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Logo, Cover and Favicon',
|
||||
@@ -91,7 +90,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fieldType: FormFieldSchemaType.ImageFile,
|
||||
required: false,
|
||||
placeholder: 'Please cover logo here.',
|
||||
}
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
showDetailsInNumberOfColumns: 1,
|
||||
@@ -119,13 +118,12 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fieldType: FieldType.ImageFile,
|
||||
title: 'Cover Image',
|
||||
placeholder: 'No cover uploaded.',
|
||||
}
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
<ModelTable<StatusPageHeaderLink>
|
||||
modelType={StatusPageHeaderLink}
|
||||
id="status-page-header-link"
|
||||
@@ -153,12 +151,9 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
cardProps={{
|
||||
icon: IconProp.Link,
|
||||
title: 'Header Links',
|
||||
description:
|
||||
'Header Links for your status page',
|
||||
description: 'Header Links for your status page',
|
||||
}}
|
||||
noItemsMessage={
|
||||
'No status header link for this status page.'
|
||||
}
|
||||
noItemsMessage={'No status header link for this status page.'}
|
||||
formFields={[
|
||||
{
|
||||
field: {
|
||||
@@ -202,18 +197,16 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
]}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Header Colors',
|
||||
description: 'Header background color and text colors for your status page',
|
||||
description:
|
||||
'Header background color and text colors for your status page',
|
||||
icon: IconProp.Layers,
|
||||
}}
|
||||
editButtonText={'Edit Colors'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
headerBackgroundColor: true,
|
||||
@@ -240,7 +233,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
headerBackgroundColor: true
|
||||
headerBackgroundColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Header Background Color',
|
||||
@@ -248,7 +241,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
},
|
||||
{
|
||||
field: {
|
||||
headerTextColor: true
|
||||
headerTextColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Header Text Color',
|
||||
@@ -262,13 +255,13 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Cover Image Colors',
|
||||
description: 'Banner background color color for your status page',
|
||||
description:
|
||||
'Banner background color color for your status page',
|
||||
icon: IconProp.Layers,
|
||||
}}
|
||||
editButtonText={'Edit Colors'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
bannerBackgroundColor: true,
|
||||
@@ -277,7 +270,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fieldType: FormFieldSchemaType.Color,
|
||||
required: false,
|
||||
placeholder: '#ffffff',
|
||||
}
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
showDetailsInNumberOfColumns: 1,
|
||||
@@ -286,12 +279,12 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
bannerBackgroundColor: true
|
||||
bannerBackgroundColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Cover Image Background Color',
|
||||
placeholder: '#ffffff',
|
||||
}
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
@@ -300,13 +293,13 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Advanced Header Settings',
|
||||
description: 'Advanced settings for your status page header',
|
||||
description:
|
||||
'Advanced settings for your status page header',
|
||||
icon: IconProp.Settings,
|
||||
}}
|
||||
editButtonText={'Edit Settings'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
showHeader: true,
|
||||
@@ -314,7 +307,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
title: 'Show Header on Status Page',
|
||||
fieldType: FormFieldSchemaType.Checkbox,
|
||||
required: false,
|
||||
}
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
showDetailsInNumberOfColumns: 1,
|
||||
@@ -323,17 +316,15 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
showHeader: true
|
||||
showHeader: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Show Header on Status Page',
|
||||
}
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -49,7 +49,9 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
{
|
||||
title: 'Navbar',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.STATUS_PAGE_VIEW_NAVBAR_STYLE] as Route,
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_NAVBAR_STYLE
|
||||
] as Route,
|
||||
modelId
|
||||
),
|
||||
},
|
||||
@@ -57,19 +59,17 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
sideMenu={<SideMenu modelId={modelId} />}
|
||||
>
|
||||
<StatusPagePreviewLink modelId={modelId} />
|
||||
|
||||
|
||||
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Navigation Menu Colors',
|
||||
description: 'Navigation Menu background color and text colors for your status page',
|
||||
description:
|
||||
'Navigation Menu background color and text colors for your status page',
|
||||
icon: IconProp.Layers,
|
||||
}}
|
||||
editButtonText={'Edit Colors'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
navBarBackgroundColor: true,
|
||||
@@ -96,7 +96,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
navBarBackgroundColor: true
|
||||
navBarBackgroundColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Navigation Menu Background Color',
|
||||
@@ -104,7 +104,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
},
|
||||
{
|
||||
field: {
|
||||
navBarTextColor: true
|
||||
navBarTextColor: true,
|
||||
},
|
||||
fieldType: FieldType.Color,
|
||||
title: 'Header Text Color',
|
||||
@@ -115,8 +115,6 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Page Settings',
|
||||
@@ -126,7 +124,6 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
editButtonText={'Edit Page Settings'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
showOverviewPage: true,
|
||||
@@ -175,7 +172,6 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fieldType: FormFieldSchemaType.Checkbox,
|
||||
required: false,
|
||||
},
|
||||
|
||||
]}
|
||||
modelDetailProps={{
|
||||
showDetailsInNumberOfColumns: 1,
|
||||
@@ -184,47 +180,46 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
showOverviewPage: true
|
||||
showOverviewPage: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Show Overview Page',
|
||||
},
|
||||
{
|
||||
field: {
|
||||
showIncidentsPage: true
|
||||
showIncidentsPage: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Show Incidents Page',
|
||||
},
|
||||
{
|
||||
field: {
|
||||
showScheduledMaintenancePage: true
|
||||
showScheduledMaintenancePage: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Show Scheduled Maintenance Page',
|
||||
},
|
||||
{
|
||||
field: {
|
||||
showAnouncementsPage: true
|
||||
showAnouncementsPage: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Show Announcements Page',
|
||||
},
|
||||
{
|
||||
field: {
|
||||
enableSubscribers: true
|
||||
enableSubscribers: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Enable Subscribers',
|
||||
},
|
||||
{
|
||||
field: {
|
||||
showRssPage: true
|
||||
showRssPage: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Enable RSS',
|
||||
},
|
||||
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
@@ -233,13 +228,13 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
<CardModelDetail<StatusPage>
|
||||
cardProps={{
|
||||
title: 'Advanced Navigation Menu Settings',
|
||||
description: 'Advanced settings for your status page navigation menu.',
|
||||
description:
|
||||
'Advanced settings for your status page navigation menu.',
|
||||
icon: IconProp.Settings,
|
||||
}}
|
||||
editButtonText={'Edit Settings'}
|
||||
isEditable={true}
|
||||
formFields={[
|
||||
|
||||
{
|
||||
field: {
|
||||
showNavbar: true,
|
||||
@@ -247,7 +242,7 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
title: 'Show Navigation Menu on Status Page',
|
||||
fieldType: FormFieldSchemaType.Checkbox,
|
||||
required: false,
|
||||
}
|
||||
},
|
||||
]}
|
||||
modelDetailProps={{
|
||||
showDetailsInNumberOfColumns: 1,
|
||||
@@ -256,16 +251,15 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fields: [
|
||||
{
|
||||
field: {
|
||||
showNavbar: true
|
||||
showNavbar: true,
|
||||
},
|
||||
fieldType: FieldType.Boolean,
|
||||
title: 'Show Navigation Menu on Status Page',
|
||||
}
|
||||
},
|
||||
],
|
||||
modelId: modelId,
|
||||
}}
|
||||
/>
|
||||
|
||||
</Page>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -178,7 +178,8 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
title: 'Tooltip (Optional)',
|
||||
fieldType: FormFieldSchemaType.LongText,
|
||||
required: false,
|
||||
description: 'This will show up as tooltip beside the resource on your status page.',
|
||||
description:
|
||||
'This will show up as tooltip beside the resource on your status page.',
|
||||
placeholder: 'Tooltip',
|
||||
},
|
||||
{
|
||||
@@ -189,7 +190,8 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
fieldType: FormFieldSchemaType.Checkbox,
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
description: 'Current Resource Status will be shown beside this resource on your status page.',
|
||||
description:
|
||||
'Current Resource Status will be shown beside this resource on your status page.',
|
||||
},
|
||||
{
|
||||
field: {
|
||||
@@ -198,8 +200,9 @@ const StatusPageDelete: FunctionComponent<PageComponentProps> = (
|
||||
title: 'Show Status History Chart',
|
||||
fieldType: FormFieldSchemaType.Checkbox,
|
||||
required: false,
|
||||
description: 'Show resource status history for the past 90 days. ',
|
||||
defaultValue: true
|
||||
description:
|
||||
'Show resource status history for the past 90 days. ',
|
||||
defaultValue: true,
|
||||
},
|
||||
]}
|
||||
showRefreshButton={true}
|
||||
|
||||
@@ -34,7 +34,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Annoucements',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_ANNOUNCEMENTS
|
||||
PageMap.STATUS_PAGE_VIEW_ANNOUNCEMENTS
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -49,7 +49,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Monitors',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_RESOURCES
|
||||
PageMap.STATUS_PAGE_VIEW_RESOURCES
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -74,7 +74,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Email Subscribers',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_EMAIL_SUBSCRIBERS
|
||||
PageMap.STATUS_PAGE_VIEW_EMAIL_SUBSCRIBERS
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -86,7 +86,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'SMS Subscribers',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_SMS_SUBSCRIBERS
|
||||
PageMap.STATUS_PAGE_VIEW_SMS_SUBSCRIBERS
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -99,7 +99,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Webhook Subscribers',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_WEBHOOK_SUBSCRIBERS
|
||||
PageMap.STATUS_PAGE_VIEW_WEBHOOK_SUBSCRIBERS
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -112,7 +112,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Subscriber Settings',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_SUBSCRIBER_SETTINGS
|
||||
PageMap.STATUS_PAGE_VIEW_SUBSCRIBER_SETTINGS
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -127,7 +127,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Essential Branding',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_BRANDING
|
||||
PageMap.STATUS_PAGE_VIEW_BRANDING
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -140,7 +140,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Embedded Status Page',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_EMBEDDED
|
||||
PageMap.STATUS_PAGE_VIEW_EMBEDDED
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -153,7 +153,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'HTML, CSS & JavaScript',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_CUSTOM_HTML_CSS
|
||||
PageMap.STATUS_PAGE_VIEW_CUSTOM_HTML_CSS
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
@@ -176,7 +176,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Header',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.STATUS_PAGE_VIEW_HEADER_STYLE] as Route,
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_HEADER_STYLE
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
}}
|
||||
@@ -187,7 +189,9 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Footer',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.STATUS_PAGE_VIEW_FOOTER_STYLE] as Route,
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_FOOTER_STYLE
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
}}
|
||||
@@ -198,13 +202,14 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
link={{
|
||||
title: 'Navigation Menu',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[PageMap.STATUS_PAGE_VIEW_NAVBAR_STYLE] as Route,
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_NAVBAR_STYLE
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
}}
|
||||
icon={IconProp.Layers}
|
||||
/>
|
||||
|
||||
</SideMenuSection>
|
||||
|
||||
<SideMenuSection title="Advanced">
|
||||
@@ -213,7 +218,7 @@ const DashboardSideMenu: FunctionComponent<ComponentProps> = (
|
||||
title: 'Advanced Settings',
|
||||
to: RouteUtil.populateRouteParams(
|
||||
RouteMap[
|
||||
PageMap.STATUS_PAGE_VIEW_ADVANCED_OPTIONS
|
||||
PageMap.STATUS_PAGE_VIEW_ADVANCED_OPTIONS
|
||||
] as Route,
|
||||
props.modelId
|
||||
),
|
||||
|
||||
@@ -74,7 +74,6 @@ enum PageMap {
|
||||
SETTINGS_INCIDENTS_STATE = 'SETTINGS_INCIDENTS_STATE',
|
||||
SETTINGS_INCIDENTS_SEVERITY = 'SETTINGS_INCIDENTS_SEVERITY',
|
||||
|
||||
|
||||
// monitors
|
||||
SETTINGS_MONITORS_STATUS = 'SETTINGS_MONITORS_STATUS',
|
||||
|
||||
|
||||
@@ -41,8 +41,6 @@ const RouteMap: Dictionary<Route> = {
|
||||
`/dashboard/${RouteParams.ProjectID}/incidents/${RouteParams.ModelID}/state-timeline`
|
||||
),
|
||||
|
||||
|
||||
|
||||
[PageMap.INCIDENT_VIEW_DELETE]: new Route(
|
||||
`/dashboard/${RouteParams.ProjectID}/incidents/${RouteParams.ModelID}/delete`
|
||||
),
|
||||
@@ -55,8 +53,6 @@ const RouteMap: Dictionary<Route> = {
|
||||
`/dashboard/${RouteParams.ProjectID}/incidents/${RouteParams.ModelID}/public-notes`
|
||||
),
|
||||
|
||||
|
||||
|
||||
[PageMap.SCHEDULED_MAINTENANCE_EVENTS]: new Route(
|
||||
`/dashboard/${RouteParams.ProjectID}/scheduled-maintenance-events`
|
||||
),
|
||||
@@ -73,8 +69,6 @@ const RouteMap: Dictionary<Route> = {
|
||||
`/dashboard/${RouteParams.ProjectID}/scheduled-maintenance-events/${RouteParams.ModelID}/state-timeline`
|
||||
),
|
||||
|
||||
|
||||
|
||||
[PageMap.SCHEDULED_MAINTENANCE_VIEW_DELETE]: new Route(
|
||||
`/dashboard/${RouteParams.ProjectID}/scheduled-maintenance-events/${RouteParams.ModelID}/delete`
|
||||
),
|
||||
@@ -87,7 +81,6 @@ const RouteMap: Dictionary<Route> = {
|
||||
`/dashboard/${RouteParams.ProjectID}/scheduled-maintenance-events/${RouteParams.ModelID}/public-notes`
|
||||
),
|
||||
|
||||
|
||||
[PageMap.STATUS_PAGES]: new Route(
|
||||
`/dashboard/${RouteParams.ProjectID}/status-pages`
|
||||
),
|
||||
|
||||
@@ -26,26 +26,21 @@ import StatusPageSubscriberService, {
|
||||
Service as StatusPageSubscriberServiceType,
|
||||
} from 'CommonServer/Services/StatusPageSubscriberService';
|
||||
|
||||
|
||||
import StatusPageFooterLink from 'Model/Models/StatusPageFooterLink';
|
||||
import StatusPageFooterLinkService, {
|
||||
Service as StatusPageFooterLinkServiceType,
|
||||
} from 'CommonServer/Services/StatusPageFooterLinkService';
|
||||
|
||||
|
||||
import StatusPageHeaderLink from 'Model/Models/StatusPageHeaderLink';
|
||||
import StatusPageHeaderLinkService, {
|
||||
Service as StatusPageHeaderLinkServiceType,
|
||||
} from 'CommonServer/Services/StatusPageHeaderLinkService';
|
||||
|
||||
|
||||
import StatusPageAnnouncement from 'Model/Models/StatusPageAnnouncement';
|
||||
import StatusPageAnnouncementService, {
|
||||
Service as StatusPageAnnouncementServiceType,
|
||||
} from 'CommonServer/Services/StatusPageAnnouncementService';
|
||||
|
||||
|
||||
|
||||
import EmailVerificationToken from 'Model/Models/EmailVerificationToken';
|
||||
import EmailVerificationTokenService, {
|
||||
Service as EmailVerificationTokenServiceType,
|
||||
@@ -136,7 +131,6 @@ import ScheduledMaintenancePublicNoteService, {
|
||||
Service as ScheduledMaintenancePublicNoteServiceType,
|
||||
} from 'CommonServer/Services/ScheduledMaintenancePublicNoteService';
|
||||
|
||||
|
||||
import IncidentState from 'Model/Models/IncidentState';
|
||||
import IncidentStateService, {
|
||||
Service as IncidentStateServiceType,
|
||||
@@ -162,7 +156,6 @@ import IncidentPublicNoteService, {
|
||||
Service as IncidentPublicNoteServiceType,
|
||||
} from 'CommonServer/Services/IncidentPublicNoteService';
|
||||
|
||||
|
||||
import Domain from 'Model/Models/Domain';
|
||||
import DomainService, {
|
||||
Service as DomainServiceType,
|
||||
@@ -240,10 +233,10 @@ app.use(
|
||||
);
|
||||
|
||||
app.use(
|
||||
new BaseAPI<ScheduledMaintenanceState, ScheduledMaintenanceStateServiceType>(
|
||||
new BaseAPI<
|
||||
ScheduledMaintenanceState,
|
||||
ScheduledMaintenanceStateService
|
||||
).getRouter()
|
||||
ScheduledMaintenanceStateServiceType
|
||||
>(ScheduledMaintenanceState, ScheduledMaintenanceStateService).getRouter()
|
||||
);
|
||||
|
||||
app.use(
|
||||
@@ -279,7 +272,10 @@ app.use(
|
||||
);
|
||||
|
||||
app.use(
|
||||
new BaseAPI<ScheduledMaintenanceStateTimeline, ScheduledMaintenanceStateTimelineServiceType>(
|
||||
new BaseAPI<
|
||||
ScheduledMaintenanceStateTimeline,
|
||||
ScheduledMaintenanceStateTimelineServiceType
|
||||
>(
|
||||
ScheduledMaintenanceStateTimeline,
|
||||
ScheduledMaintenanceStateTimelineService
|
||||
).getRouter()
|
||||
@@ -316,17 +312,20 @@ app.use(
|
||||
).getRouter()
|
||||
);
|
||||
|
||||
|
||||
app.use(
|
||||
new BaseAPI<StatusPageHeaderLink, StatusPageHeaderLinkServiceType>(StatusPageHeaderLink, StatusPageHeaderLinkService).getRouter()
|
||||
new BaseAPI<StatusPageHeaderLink, StatusPageHeaderLinkServiceType>(
|
||||
StatusPageHeaderLink,
|
||||
StatusPageHeaderLinkService
|
||||
).getRouter()
|
||||
);
|
||||
|
||||
app.use(
|
||||
new BaseAPI<StatusPageFooterLink, StatusPageFooterLinkServiceType>(StatusPageFooterLink, StatusPageFooterLinkService).getRouter()
|
||||
new BaseAPI<StatusPageFooterLink, StatusPageFooterLinkServiceType>(
|
||||
StatusPageFooterLink,
|
||||
StatusPageFooterLinkService
|
||||
).getRouter()
|
||||
);
|
||||
|
||||
|
||||
|
||||
app.use(
|
||||
new BaseAPI<ApiKey, ApiKeyServiceType>(ApiKey, ApiKeyService).getRouter()
|
||||
);
|
||||
@@ -337,8 +336,6 @@ app.use(
|
||||
).getRouter()
|
||||
);
|
||||
|
||||
|
||||
|
||||
app.use(
|
||||
new BaseAPI<IncidentSeverity, IncidentSeverityServiceType>(
|
||||
IncidentSeverity,
|
||||
@@ -384,20 +381,25 @@ app.use(
|
||||
);
|
||||
|
||||
app.use(
|
||||
new BaseAPI<ScheduledMaintenancePublicNote, ScheduledMaintenancePublicNoteServiceType>(
|
||||
new BaseAPI<
|
||||
ScheduledMaintenancePublicNote,
|
||||
ScheduledMaintenancePublicNoteServiceType
|
||||
>(
|
||||
ScheduledMaintenancePublicNote,
|
||||
ScheduledMaintenancePublicNoteService
|
||||
).getRouter()
|
||||
);
|
||||
|
||||
app.use(
|
||||
new BaseAPI<ScheduledMaintenanceInternalNote, ScheduledMaintenanceInternalNoteServiceType>(
|
||||
new BaseAPI<
|
||||
ScheduledMaintenanceInternalNote,
|
||||
ScheduledMaintenanceInternalNoteServiceType
|
||||
>(
|
||||
ScheduledMaintenanceInternalNote,
|
||||
ScheduledMaintenanceInternalNoteService
|
||||
).getRouter()
|
||||
);
|
||||
|
||||
|
||||
app.use(
|
||||
new BaseAPI<IncidentPublicNote, IncidentPublicNoteServiceType>(
|
||||
IncidentPublicNote,
|
||||
|
||||
@@ -64,7 +64,11 @@ export default class ApiKey extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -120,7 +120,11 @@ export default class APIKeyPermission extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -62,7 +62,11 @@ export default class Domain extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -77,7 +77,11 @@ export default class Incident extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -66,7 +66,11 @@ export default class IncidentInternalNote extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -66,7 +66,11 @@ export default class IncidentPublicNote extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -62,7 +62,11 @@ export default class IncidentSeverity extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -62,7 +62,11 @@ export default class IncidentState extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -79,7 +79,11 @@ export default class IncidentStateTimeline extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -25,7 +25,6 @@ import StatusPageSubscriber from './StatusPageSubscriber';
|
||||
import StatusPageFooterLink from './StatusPageFooterLink';
|
||||
import StatusPageHeaderLink from './StatusPageHeaderLink';
|
||||
|
||||
|
||||
// On Call Duty
|
||||
import OnCallDuty from './OnCallDuty';
|
||||
|
||||
@@ -42,7 +41,6 @@ import IncidentPublicNote from './IncidentPublicNote';
|
||||
import IncidentInternalNote from './IncidentInternalNote';
|
||||
import IncidentSeverity from './IncidentSeverity';
|
||||
|
||||
|
||||
// ScheduledMaintenances
|
||||
import ScheduledMaintenance from './ScheduledMaintenance';
|
||||
import ScheduledMaintenanceState from './ScheduledMaintenanceState';
|
||||
|
||||
@@ -62,7 +62,11 @@ export default class Label extends AccessControlModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -68,7 +68,11 @@ export default class MonitorStatus extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -63,7 +63,11 @@ export default class MonitorStatusTimeline extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -77,7 +77,11 @@ export default class OnCallDuty extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -172,7 +172,11 @@ export default class Probe extends BaseModel {
|
||||
read: [Permission.Public],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: true,
|
||||
|
||||
@@ -71,7 +71,11 @@ export default class ProjectSmtpConfig extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -35,21 +35,42 @@ import StatusPage from './StatusPage';
|
||||
@MultiTenentQueryAllowed(true)
|
||||
@TenantColumn('projectId')
|
||||
@TableAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
delete: [Permission.ProjectOwner, Permission.CanDeleteProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
delete: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanDeleteProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@CrudApiEndpoint(new Route('/scheduled-maintenance'))
|
||||
@SlugifyColumn('name', 'slug')
|
||||
@Entity({
|
||||
name: 'ScheduledMaintenance',
|
||||
})
|
||||
@SingularPluralName('Scheduled Maintenance Event', 'Scheduled Maintenance Events')
|
||||
@SingularPluralName(
|
||||
'Scheduled Maintenance Event',
|
||||
'Scheduled Maintenance Events'
|
||||
)
|
||||
export default class ScheduledMaintenance extends BaseModel {
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -72,12 +93,22 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public project?: Project = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -86,9 +117,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public projectId?: ObjectID = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({
|
||||
@@ -104,9 +144,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public title?: string = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@TableColumn({ required: false, type: TableColumnType.LongText })
|
||||
@Column({
|
||||
@@ -118,8 +167,14 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
|
||||
@Index()
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ required: true, unique: true, type: TableColumnType.Slug })
|
||||
@@ -132,8 +187,14 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public slug?: string = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -156,8 +217,14 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public createdByUser?: User = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ type: TableColumnType.ObjectID })
|
||||
@@ -206,9 +273,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public deletedByUserId?: ObjectID = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
required: false,
|
||||
@@ -234,11 +310,19 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
})
|
||||
public monitors?: Array<Monitor> = undefined; // monitors affected by this scheduledMaintenance.
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
required: false,
|
||||
@@ -262,13 +346,21 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
referencedColumnName: '_id',
|
||||
},
|
||||
})
|
||||
public statusPages?: Array<StatusPage> = undefined; // visible on which status page?
|
||||
|
||||
public statusPages?: Array<StatusPage> = undefined; // visible on which status page?
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
required: false,
|
||||
@@ -295,9 +387,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public labels?: Array<Label> = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
manyToOneRelationColumn: 'currentScheduledMaintenanceStateId',
|
||||
@@ -318,9 +419,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public currentScheduledMaintenanceState?: ScheduledMaintenanceState = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true })
|
||||
@@ -332,8 +442,14 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public currentScheduledMaintenanceStateId?: ObjectID = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -355,9 +471,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
public changeMonitorStatusTo?: MonitorStatus = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: false })
|
||||
@@ -374,9 +499,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
required: true,
|
||||
})
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@Column({
|
||||
nullable: false,
|
||||
@@ -390,9 +524,18 @@ export default class ScheduledMaintenance extends BaseModel {
|
||||
required: true,
|
||||
})
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateProjectScheduledMaintenance],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectScheduledMaintenance],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectScheduledMaintenance],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateProjectScheduledMaintenance,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadProjectScheduledMaintenance,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditProjectScheduledMaintenance,
|
||||
],
|
||||
})
|
||||
@Column({
|
||||
nullable: false,
|
||||
|
||||
@@ -19,10 +19,22 @@ import CanAccessIfCanReadOn from 'Common/Types/Database/CanAccessIfCanReadOn';
|
||||
@CanAccessIfCanReadOn('scheduledMaintenance')
|
||||
@TenantColumn('projectId')
|
||||
@TableAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceInternalNote],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
delete: [Permission.ProjectOwner, Permission.CanDeleteScheduledMaintenanceInternalNote],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceInternalNote],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
delete: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanDeleteScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceInternalNote,
|
||||
],
|
||||
})
|
||||
@CrudApiEndpoint(new Route('/scheduled-maintenance-internal-note'))
|
||||
@Entity({
|
||||
@@ -35,7 +47,10 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -62,11 +77,18 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -79,7 +101,10 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -106,7 +131,10 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@@ -123,7 +151,10 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -150,7 +181,10 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ type: TableColumnType.ObjectID })
|
||||
@@ -203,7 +237,10 @@ export default class ScheduledMaintenanceInternalNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceInternalNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceInternalNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceInternalNote,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceInternalNote,
|
||||
|
||||
@@ -19,10 +19,22 @@ import CanAccessIfCanReadOn from 'Common/Types/Database/CanAccessIfCanReadOn';
|
||||
@CanAccessIfCanReadOn('scheduledMaintenance')
|
||||
@TenantColumn('projectId')
|
||||
@TableAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenancePublicNote],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
delete: [Permission.ProjectOwner, Permission.CanDeleteScheduledMaintenancePublicNote],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenancePublicNote],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
delete: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanDeleteScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenancePublicNote,
|
||||
],
|
||||
})
|
||||
@CrudApiEndpoint(new Route('/scheduled-maintenance-public-note'))
|
||||
@Entity({
|
||||
@@ -35,7 +47,10 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -62,11 +77,18 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -79,7 +101,10 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -106,7 +131,10 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@@ -123,7 +151,10 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -150,7 +181,10 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ type: TableColumnType.ObjectID })
|
||||
@@ -203,8 +237,14 @@ export default class ScheduledMaintenancePublicNote extends BaseModel {
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenancePublicNote,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenancePublicNote],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenancePublicNote],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenancePublicNote,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenancePublicNote,
|
||||
],
|
||||
})
|
||||
@TableColumn({ type: TableColumnType.Markdown })
|
||||
@Column({
|
||||
|
||||
@@ -20,10 +20,22 @@ import SingularPluralName from 'Common/Types/Database/SingularPluralName';
|
||||
|
||||
@TenantColumn('projectId')
|
||||
@TableAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
delete: [Permission.ProjectOwner, Permission.CanDeleteScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
delete: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanDeleteScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@CrudApiEndpoint(new Route('/scheduled-maintenance-state'))
|
||||
@SlugifyColumn('name', 'slug')
|
||||
@@ -33,8 +45,14 @@ import SingularPluralName from 'Common/Types/Database/SingularPluralName';
|
||||
})
|
||||
export default class ScheduledMaintenanceState extends BaseModel {
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -57,12 +75,22 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public project?: Project = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -71,9 +99,18 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public projectId?: ObjectID = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
required: true,
|
||||
@@ -90,7 +127,10 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ required: true, unique: true, type: TableColumnType.Slug })
|
||||
@@ -102,9 +142,18 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public slug?: string = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@TableColumn({ required: false, type: TableColumnType.LongText })
|
||||
@Column({
|
||||
@@ -115,8 +164,14 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public description?: string = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -139,8 +194,14 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public createdByUser?: User = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ type: TableColumnType.ObjectID })
|
||||
@@ -153,7 +214,10 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({
|
||||
@@ -177,7 +241,10 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [],
|
||||
})
|
||||
@TableColumn({ type: TableColumnType.ObjectID })
|
||||
@@ -189,9 +256,18 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public deletedByUserId?: ObjectID = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
title: 'Color',
|
||||
@@ -210,9 +286,18 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public color?: Color = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
isDefaultValueColumn: false,
|
||||
@@ -226,9 +311,18 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public isScheduledState?: boolean = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
isDefaultValueColumn: false,
|
||||
@@ -242,9 +336,18 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
public isOngoingState?: boolean = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
isDefaultValueColumn: false,
|
||||
@@ -259,9 +362,18 @@ export default class ScheduledMaintenanceState extends BaseModel {
|
||||
|
||||
@UniqueColumnBy('projectId')
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateScheduledMaintenanceState],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceState],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceState],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceState,
|
||||
],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceState,
|
||||
],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceState,
|
||||
],
|
||||
})
|
||||
@TableColumn({
|
||||
isDefaultValueColumn: false,
|
||||
|
||||
@@ -24,18 +24,27 @@ import CanAccessIfCanReadOn from 'Common/Types/Database/CanAccessIfCanReadOn';
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateScheduledMaintenanceStateTimeline,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadScheduledMaintenanceStateTimeline],
|
||||
read: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanReadScheduledMaintenanceStateTimeline,
|
||||
],
|
||||
delete: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanDeleteScheduledMaintenanceStateTimeline,
|
||||
],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditScheduledMaintenanceStateTimeline],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditScheduledMaintenanceStateTimeline,
|
||||
],
|
||||
})
|
||||
@CrudApiEndpoint(new Route('/scheduled-maintenance-state-timeline'))
|
||||
@Entity({
|
||||
name: 'ScheduledMaintenanceStateTimeline',
|
||||
})
|
||||
@SingularPluralName('ScheduledMaintenance State Tiemline', 'ScheduledMaintenance State Timelines')
|
||||
@SingularPluralName(
|
||||
'ScheduledMaintenance State Tiemline',
|
||||
'ScheduledMaintenance State Timelines'
|
||||
)
|
||||
export default class ScheduledMaintenanceStateTimeline extends BaseModel {
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
@@ -79,7 +88,11 @@ export default class ScheduledMaintenanceStateTimeline extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -79,7 +79,11 @@ export default class StatusPage extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -519,11 +523,10 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public bannerBackgroundColor?: Color = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -536,11 +539,10 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public headerBackgroundColor?: Color = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -553,11 +555,10 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public headerTextColor?: Color = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -570,7 +571,7 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public footerBackgroundColor?: Color = undefined;
|
||||
|
||||
@@ -586,7 +587,7 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public footerTextColor?: Color = undefined;
|
||||
|
||||
@@ -602,7 +603,7 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public pageBackgroundColor?: Color = undefined;
|
||||
|
||||
@@ -618,11 +619,10 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public pageTextColor?: Color = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -635,7 +635,7 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public navBarTextColor?: Color = undefined;
|
||||
|
||||
@@ -651,7 +651,7 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public navBarBackgroundColor?: Color = undefined;
|
||||
|
||||
@@ -667,7 +667,7 @@ export default class StatusPage extends BaseModel {
|
||||
@Column({
|
||||
type: ColumnType.Color,
|
||||
nullable: true,
|
||||
transformer: Color.getDatabaseTransformer()
|
||||
transformer: Color.getDatabaseTransformer(),
|
||||
})
|
||||
public pageDescriptionText?: Color = undefined;
|
||||
|
||||
@@ -701,7 +701,6 @@ export default class StatusPage extends BaseModel {
|
||||
})
|
||||
public showFooter?: boolean = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -710,14 +709,16 @@ export default class StatusPage extends BaseModel {
|
||||
read: [Permission.ProjectOwner, Permission.CanReadProjectStatusPage],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditProjectStatusPage],
|
||||
})
|
||||
@TableColumn({ isDefaultValueColumn: false, type: TableColumnType.ShortText })
|
||||
@TableColumn({
|
||||
isDefaultValueColumn: false,
|
||||
type: TableColumnType.ShortText,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ShortText,
|
||||
nullable: true
|
||||
nullable: true,
|
||||
})
|
||||
public copyrightText?: string = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -733,7 +734,6 @@ export default class StatusPage extends BaseModel {
|
||||
})
|
||||
public showNavbar?: boolean = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -749,7 +749,6 @@ export default class StatusPage extends BaseModel {
|
||||
})
|
||||
public showOverviewPage?: boolean = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -780,7 +779,6 @@ export default class StatusPage extends BaseModel {
|
||||
})
|
||||
public showRssPage?: boolean = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -796,7 +794,6 @@ export default class StatusPage extends BaseModel {
|
||||
})
|
||||
public showAnouncementsPage?: boolean = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -811,5 +808,4 @@ export default class StatusPage extends BaseModel {
|
||||
default: true,
|
||||
})
|
||||
public showScheduledMaintenancePage?: boolean = undefined;
|
||||
|
||||
}
|
||||
|
||||
@@ -89,7 +89,11 @@ export default class StatusPageAnnouncement extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -63,7 +63,11 @@ export default class StatusPageDomain extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -32,10 +32,17 @@ import TotalItemsBy from 'Common/Types/Database/TotalItemsBy';
|
||||
@Entity({
|
||||
name: 'StatusPageFooterLink',
|
||||
})
|
||||
@TotalItemsBy("statusPageId", 3, "This status page cannot have more than 3 footer links")
|
||||
@TotalItemsBy(
|
||||
'statusPageId',
|
||||
3,
|
||||
'This status page cannot have more than 3 footer links'
|
||||
)
|
||||
export default class StatusPageFooterLink extends BaseModel {
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -59,12 +66,19 @@ export default class StatusPageFooterLink extends BaseModel {
|
||||
public project?: Project = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -72,9 +86,11 @@ export default class StatusPageFooterLink extends BaseModel {
|
||||
})
|
||||
public projectId?: ObjectID = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -98,7 +114,10 @@ export default class StatusPageFooterLink extends BaseModel {
|
||||
public statusPage?: StatusPage = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -112,9 +131,15 @@ export default class StatusPageFooterLink extends BaseModel {
|
||||
public statusPageId?: ObjectID = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditStatusPageFooterLink],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditStatusPageFooterLink,
|
||||
],
|
||||
})
|
||||
@TableColumn({ required: true, type: TableColumnType.ShortText })
|
||||
@Column({
|
||||
@@ -125,21 +150,30 @@ export default class StatusPageFooterLink extends BaseModel {
|
||||
public title?: string = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditStatusPageFooterLink],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditStatusPageFooterLink,
|
||||
],
|
||||
})
|
||||
@TableColumn({ required: true, type: TableColumnType.ShortURL })
|
||||
@Column({
|
||||
nullable: false,
|
||||
type: ColumnType.ShortURL,
|
||||
length: ColumnLength.ShortURL,
|
||||
transformer: URL.getDatabaseTransformer()
|
||||
transformer: URL.getDatabaseTransformer(),
|
||||
})
|
||||
public link?: URL = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -163,7 +197,10 @@ export default class StatusPageFooterLink extends BaseModel {
|
||||
public createdByUser?: User = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -200,9 +237,15 @@ export default class StatusPageFooterLink extends BaseModel {
|
||||
public deletedByUser?: User = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageFooterLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageFooterLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageFooterLink],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditStatusPageFooterLink],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditStatusPageFooterLink,
|
||||
],
|
||||
})
|
||||
@TableColumn({ isDefaultValueColumn: false, type: TableColumnType.Number })
|
||||
@Column({
|
||||
|
||||
@@ -64,7 +64,11 @@ export default class StatusPageGroup extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -32,10 +32,17 @@ import URL from 'Common/Types/API/URL';
|
||||
@Entity({
|
||||
name: 'StatusPageHeaderLink',
|
||||
})
|
||||
@TotalItemsBy("statusPageId", 3, "This status page cannot have more than 3 header links")
|
||||
@TotalItemsBy(
|
||||
'statusPageId',
|
||||
3,
|
||||
'This status page cannot have more than 3 header links'
|
||||
)
|
||||
export default class StatusPageHeaderLink extends BaseModel {
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -59,12 +66,19 @@ export default class StatusPageHeaderLink extends BaseModel {
|
||||
public project?: Project = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -72,9 +86,11 @@ export default class StatusPageHeaderLink extends BaseModel {
|
||||
})
|
||||
public projectId?: ObjectID = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -98,7 +114,10 @@ export default class StatusPageHeaderLink extends BaseModel {
|
||||
public statusPage?: StatusPage = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -112,9 +131,15 @@ export default class StatusPageHeaderLink extends BaseModel {
|
||||
public statusPageId?: ObjectID = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditStatusPageHeaderLink],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditStatusPageHeaderLink,
|
||||
],
|
||||
})
|
||||
@TableColumn({ required: true, type: TableColumnType.ShortText })
|
||||
@Column({
|
||||
@@ -125,21 +150,30 @@ export default class StatusPageHeaderLink extends BaseModel {
|
||||
public title?: string = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditStatusPageHeaderLink],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditStatusPageHeaderLink,
|
||||
],
|
||||
})
|
||||
@TableColumn({ required: true, type: TableColumnType.ShortURL })
|
||||
@Column({
|
||||
nullable: false,
|
||||
type: ColumnType.ShortURL,
|
||||
length: ColumnLength.ShortURL,
|
||||
transformer: URL.getDatabaseTransformer()
|
||||
transformer: URL.getDatabaseTransformer(),
|
||||
})
|
||||
public link?: URL = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -163,7 +197,10 @@ export default class StatusPageHeaderLink extends BaseModel {
|
||||
public createdByUser?: User = undefined;
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [],
|
||||
})
|
||||
@@ -199,11 +236,16 @@ export default class StatusPageHeaderLink extends BaseModel {
|
||||
@JoinColumn({ name: 'deletedByUserId' })
|
||||
public deletedByUser?: User = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [Permission.ProjectOwner, Permission.CanCreateStatusPageHeaderLink],
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanCreateStatusPageHeaderLink,
|
||||
],
|
||||
read: [Permission.ProjectOwner, Permission.CanReadStatusPageHeaderLink],
|
||||
update: [Permission.ProjectOwner, Permission.CanEditStatusPageHeaderLink],
|
||||
update: [
|
||||
Permission.ProjectOwner,
|
||||
Permission.CanEditStatusPageHeaderLink,
|
||||
],
|
||||
})
|
||||
@TableColumn({ isDefaultValueColumn: false, type: TableColumnType.Number })
|
||||
@Column({
|
||||
|
||||
@@ -71,7 +71,11 @@ export default class StatusPageResource extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
@@ -259,7 +263,6 @@ export default class StatusPageResource extends BaseModel {
|
||||
})
|
||||
public displayTooltip?: string = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
@@ -275,7 +278,6 @@ export default class StatusPageResource extends BaseModel {
|
||||
})
|
||||
public showCurrentStatus?: boolean = undefined;
|
||||
|
||||
|
||||
@ColumnAccessControl({
|
||||
create: [
|
||||
Permission.ProjectOwner,
|
||||
|
||||
@@ -72,7 +72,11 @@ export default class StatusPageSubscriber extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -65,7 +65,11 @@ export default class Team extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -152,7 +152,11 @@ export default class TeamMember extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -117,7 +117,11 @@ export default class TeamPermission extends BaseModel {
|
||||
update: [],
|
||||
})
|
||||
@Index()
|
||||
@TableColumn({ type: TableColumnType.ObjectID, required: true, canReadOnPopulate: true})
|
||||
@TableColumn({
|
||||
type: TableColumnType.ObjectID,
|
||||
required: true,
|
||||
canReadOnPopulate: true,
|
||||
})
|
||||
@Column({
|
||||
type: ColumnType.ObjectID,
|
||||
nullable: false,
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
import React, { FunctionComponent } from 'react';
|
||||
import Route from 'Common/Types/API/Route';
|
||||
import { Routes, Route as PageRoute, useNavigate, useLocation, useParams } from 'react-router-dom';
|
||||
import {
|
||||
Routes,
|
||||
Route as PageRoute,
|
||||
useNavigate,
|
||||
useLocation,
|
||||
useParams,
|
||||
} from 'react-router-dom';
|
||||
import MasterPage from './Components/MasterPage/MasterPage';
|
||||
|
||||
import PageNotFound from './Pages/NotFound/PageNotFound';
|
||||
@@ -20,7 +26,6 @@ import 'CommonUI/src/Styles/theme.scss';
|
||||
import Navigation from 'CommonUI/src/Utils/Navigation';
|
||||
|
||||
const App: FunctionComponent = () => {
|
||||
|
||||
Navigation.setNavigateHook(useNavigate());
|
||||
Navigation.setLocation(useLocation());
|
||||
Navigation.setParams(useParams());
|
||||
@@ -28,7 +33,6 @@ const App: FunctionComponent = () => {
|
||||
return (
|
||||
<MasterPage>
|
||||
<Routes>
|
||||
|
||||
{/* Live */}
|
||||
|
||||
<PageRoute
|
||||
@@ -44,7 +48,11 @@ const App: FunctionComponent = () => {
|
||||
path={RouteMap[PageMap.SCHEDULED_EVENT_DETAIL]?.toString()}
|
||||
element={
|
||||
<ScheduledEventDetail
|
||||
pageRoute={RouteMap[PageMap.SCHEDULED_EVENT_DETAIL] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.SCHEDULED_EVENT_DETAIL
|
||||
] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -53,7 +61,9 @@ const App: FunctionComponent = () => {
|
||||
path={RouteMap[PageMap.SCHEDULED_EVENT_LIST]?.toString()}
|
||||
element={
|
||||
<ScheduledEventList
|
||||
pageRoute={RouteMap[PageMap.SCHEDULED_EVENT_LIST] as Route}
|
||||
pageRoute={
|
||||
RouteMap[PageMap.SCHEDULED_EVENT_LIST] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -62,7 +72,9 @@ const App: FunctionComponent = () => {
|
||||
path={RouteMap[PageMap.INCIDENT_DETAIL]?.toString()}
|
||||
element={
|
||||
<IncidentDetail
|
||||
pageRoute={RouteMap[PageMap.INCIDENT_DETAIL] as Route}
|
||||
pageRoute={
|
||||
RouteMap[PageMap.INCIDENT_DETAIL] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -80,17 +92,20 @@ const App: FunctionComponent = () => {
|
||||
path={RouteMap[PageMap.ANNOUNCEMENT_DETAIL]?.toString()}
|
||||
element={
|
||||
<AnnouncementDetail
|
||||
pageRoute={RouteMap[PageMap.ANNOUNCEMENT_DETAIL] as Route}
|
||||
pageRoute={
|
||||
RouteMap[PageMap.ANNOUNCEMENT_DETAIL] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.ANNOUNCEMENT_LIST]?.toString()}
|
||||
element={
|
||||
<AnnouncementList
|
||||
pageRoute={RouteMap[PageMap.ANNOUNCEMENT_LIST] as Route}
|
||||
pageRoute={
|
||||
RouteMap[PageMap.ANNOUNCEMENT_LIST] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -104,15 +119,15 @@ const App: FunctionComponent = () => {
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
{/* Preview */}
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.PREVIEW_OVERVIEW]?.toString()}
|
||||
element={
|
||||
<Overview
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_OVERVIEW] as Route}
|
||||
pageRoute={
|
||||
RouteMap[PageMap.PREVIEW_OVERVIEW] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -121,25 +136,39 @@ const App: FunctionComponent = () => {
|
||||
path={RouteMap[PageMap.PREVIEW_SUBSCRIBE]?.toString()}
|
||||
element={
|
||||
<Subscribe
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_SUBSCRIBE] as Route}
|
||||
pageRoute={
|
||||
RouteMap[PageMap.PREVIEW_SUBSCRIBE] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.PREVIEW_SCHEDULED_EVENT_DETAIL]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.PREVIEW_SCHEDULED_EVENT_DETAIL
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledEventDetail
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_SCHEDULED_EVENT_DETAIL] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.PREVIEW_SCHEDULED_EVENT_DETAIL
|
||||
] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.PREVIEW_SCHEDULED_EVENT_LIST]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.PREVIEW_SCHEDULED_EVENT_LIST
|
||||
]?.toString()}
|
||||
element={
|
||||
<ScheduledEventList
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_SCHEDULED_EVENT_LIST] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.PREVIEW_SCHEDULED_EVENT_LIST
|
||||
] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -148,7 +177,11 @@ const App: FunctionComponent = () => {
|
||||
path={RouteMap[PageMap.PREVIEW_INCIDENT_DETAIL]?.toString()}
|
||||
element={
|
||||
<IncidentDetail
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_INCIDENT_DETAIL] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.PREVIEW_INCIDENT_DETAIL
|
||||
] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -157,33 +190,43 @@ const App: FunctionComponent = () => {
|
||||
path={RouteMap[PageMap.PREVIEW_INCIDENT_LIST]?.toString()}
|
||||
element={
|
||||
<IncidentList
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_INCIDENT_LIST] as Route}
|
||||
pageRoute={
|
||||
RouteMap[PageMap.PREVIEW_INCIDENT_LIST] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.PREVIEW_ANNOUNCEMENT_DETAIL]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.PREVIEW_ANNOUNCEMENT_DETAIL
|
||||
]?.toString()}
|
||||
element={
|
||||
<AnnouncementDetail
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_ANNOUNCEMENT_DETAIL] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.PREVIEW_ANNOUNCEMENT_DETAIL
|
||||
] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
<PageRoute
|
||||
path={RouteMap[PageMap.PREVIEW_ANNOUNCEMENT_LIST]?.toString()}
|
||||
path={RouteMap[
|
||||
PageMap.PREVIEW_ANNOUNCEMENT_LIST
|
||||
]?.toString()}
|
||||
element={
|
||||
<AnnouncementList
|
||||
pageRoute={RouteMap[PageMap.PREVIEW_ANNOUNCEMENT_LIST] as Route}
|
||||
pageRoute={
|
||||
RouteMap[
|
||||
PageMap.PREVIEW_ANNOUNCEMENT_LIST
|
||||
] as Route
|
||||
}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
|
||||
{/* 👇️ only match this when no other routes match */}
|
||||
|
||||
<PageRoute
|
||||
|
||||
@@ -16,10 +16,12 @@ const Banner: FunctionComponent<ComponentProps> = (
|
||||
onClick={() => {
|
||||
props.onClick && props.onClick();
|
||||
}}
|
||||
imageUrl={Route.fromString(`/status-page/public/${PlaceholderBanner}`)}
|
||||
imageUrl={Route.fromString(
|
||||
`/status-page/public/${PlaceholderBanner}`
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Banner;
|
||||
export default Banner;
|
||||
|
||||
@@ -18,7 +18,7 @@ const StatusPageFooter: FunctionComponent = () => {
|
||||
{
|
||||
title: 'Powered by OneUptime',
|
||||
to: URL.fromString('https://oneuptime.com'),
|
||||
openInNewTab: true
|
||||
openInNewTab: true,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -3,27 +3,31 @@ import Banner from '../Banner/Banner';
|
||||
import Logo from '../Logo/Logo';
|
||||
|
||||
const StatusPageHeader: FunctionComponent = (): ReactElement => {
|
||||
|
||||
return (<header id="page-topbar" style={{
|
||||
maxWidth: "880px",
|
||||
paddingLeft: "5px",
|
||||
margin: "auto",
|
||||
zIndex: 0,
|
||||
position: "unset"
|
||||
}}>
|
||||
<Banner />
|
||||
<div className="navbar-header" style={{
|
||||
padding: "0px",
|
||||
margin: "5px",
|
||||
|
||||
}}>
|
||||
<div className="d-flex"><Logo onClick={() => {
|
||||
|
||||
}} /></div>
|
||||
|
||||
</div>
|
||||
</header>)
|
||||
|
||||
return (
|
||||
<header
|
||||
id="page-topbar"
|
||||
style={{
|
||||
maxWidth: '880px',
|
||||
paddingLeft: '5px',
|
||||
margin: 'auto',
|
||||
zIndex: 0,
|
||||
position: 'unset',
|
||||
}}
|
||||
>
|
||||
<Banner />
|
||||
<div
|
||||
className="navbar-header"
|
||||
style={{
|
||||
padding: '0px',
|
||||
margin: '5px',
|
||||
}}
|
||||
>
|
||||
<div className="d-flex">
|
||||
<Logo onClick={() => {}} />
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
};
|
||||
|
||||
export default StatusPageHeader;
|
||||
|
||||
@@ -17,7 +17,9 @@ const Logo: FunctionComponent<ComponentProps> = (
|
||||
onClick={() => {
|
||||
props.onClick && props.onClick();
|
||||
}}
|
||||
imageUrl={Route.fromString(`/status-page/public/${OneUptimeLogo}`)}
|
||||
imageUrl={Route.fromString(
|
||||
`/status-page/public/${OneUptimeLogo}`
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -21,11 +21,11 @@ const DashboardMasterPage: FunctionComponent<ComponentProps> = (
|
||||
isLoading={props.isLoading || false}
|
||||
error={props.error || ''}
|
||||
mainContentStyle={{
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
margin: "auto",
|
||||
maxWidth: "880px",
|
||||
marginLeft: "auto !important"
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
margin: 'auto',
|
||||
maxWidth: '880px',
|
||||
marginLeft: 'auto !important',
|
||||
}}
|
||||
>
|
||||
{props.children}
|
||||
|
||||
@@ -14,7 +14,6 @@ export interface ComponentProps {
|
||||
const DashboardNavbar: FunctionComponent<ComponentProps> = (
|
||||
props: ComponentProps
|
||||
): ReactElement => {
|
||||
|
||||
if (!props.show) {
|
||||
return <></>;
|
||||
}
|
||||
@@ -22,8 +21,8 @@ const DashboardNavbar: FunctionComponent<ComponentProps> = (
|
||||
return (
|
||||
<NavBar
|
||||
navBarStyle={{
|
||||
marginTop: "0px",
|
||||
position: "unset"
|
||||
marginTop: '0px',
|
||||
position: 'unset',
|
||||
}}
|
||||
rightContent={
|
||||
<>
|
||||
@@ -31,14 +30,18 @@ const DashboardNavbar: FunctionComponent<ComponentProps> = (
|
||||
title="Subscribe"
|
||||
icon={IconProp.Email}
|
||||
route={RouteUtil.populateRouteParams(
|
||||
props.isPreview ? RouteMap[PageMap.PREVIEW_SUBSCRIBE] as Route : RouteMap[PageMap.SUBSCRIBE] as Route
|
||||
props.isPreview
|
||||
? (RouteMap[PageMap.PREVIEW_SUBSCRIBE] as Route)
|
||||
: (RouteMap[PageMap.SUBSCRIBE] as Route)
|
||||
)}
|
||||
></NavBarItem>
|
||||
<NavBarItem
|
||||
title="RSS"
|
||||
icon={IconProp.RSS}
|
||||
route={RouteUtil.populateRouteParams(
|
||||
props.isPreview ? RouteMap[PageMap.PREVIEW_RSS] as Route : RouteMap[PageMap.RSS] as Route
|
||||
props.isPreview
|
||||
? (RouteMap[PageMap.PREVIEW_RSS] as Route)
|
||||
: (RouteMap[PageMap.RSS] as Route)
|
||||
)}
|
||||
></NavBarItem>
|
||||
</>
|
||||
@@ -48,31 +51,40 @@ const DashboardNavbar: FunctionComponent<ComponentProps> = (
|
||||
<NavBarItem
|
||||
title="Overview"
|
||||
route={RouteUtil.populateRouteParams(
|
||||
props.isPreview ? RouteMap[PageMap.PREVIEW_OVERVIEW] as Route : RouteMap[PageMap.OVERVIEW] as Route
|
||||
props.isPreview
|
||||
? (RouteMap[PageMap.PREVIEW_OVERVIEW] as Route)
|
||||
: (RouteMap[PageMap.OVERVIEW] as Route)
|
||||
)}
|
||||
></NavBarItem>
|
||||
|
||||
<NavBarItem
|
||||
title="Incidents"
|
||||
route={RouteUtil.populateRouteParams(
|
||||
props.isPreview ? RouteMap[PageMap.PREVIEW_INCIDENT_LIST] as Route : RouteMap[PageMap.INCIDENT_LIST] as Route
|
||||
props.isPreview
|
||||
? (RouteMap[PageMap.PREVIEW_INCIDENT_LIST] as Route)
|
||||
: (RouteMap[PageMap.INCIDENT_LIST] as Route)
|
||||
)}
|
||||
></NavBarItem>
|
||||
|
||||
<NavBarItem
|
||||
title="Announcements"
|
||||
route={RouteUtil.populateRouteParams(
|
||||
props.isPreview ? RouteMap[PageMap.PREVIEW_ANNOUNCEMENT_LIST] as Route : RouteMap[PageMap.ANNOUNCEMENT_LIST] as Route
|
||||
props.isPreview
|
||||
? (RouteMap[PageMap.PREVIEW_ANNOUNCEMENT_LIST] as Route)
|
||||
: (RouteMap[PageMap.ANNOUNCEMENT_LIST] as Route)
|
||||
)}
|
||||
></NavBarItem>
|
||||
|
||||
<NavBarItem
|
||||
title="Scheduled Maintenance"
|
||||
route={RouteUtil.populateRouteParams(
|
||||
props.isPreview ? RouteMap[PageMap.PREVIEW_SCHEDULED_EVENT_LIST] as Route : RouteMap[PageMap.SCHEDULED_EVENT_LIST] as Route
|
||||
props.isPreview
|
||||
? (RouteMap[
|
||||
PageMap.PREVIEW_SCHEDULED_EVENT_LIST
|
||||
] as Route)
|
||||
: (RouteMap[PageMap.SCHEDULED_EVENT_LIST] as Route)
|
||||
)}
|
||||
></NavBarItem>
|
||||
|
||||
</NavBar>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -9,15 +9,21 @@ const Page: FunctionComponent<ComponentProps> = (
|
||||
props: ComponentProps
|
||||
): ReactElement => {
|
||||
return (
|
||||
<div className="page-content" style={{
|
||||
marginLeft: "0px",
|
||||
paddingLeft: "5px",
|
||||
marginTop: "0px"
|
||||
}}>
|
||||
<div className="container-fluid" style={{
|
||||
margin: "0px",
|
||||
padding: "0px"
|
||||
}}>
|
||||
<div
|
||||
className="page-content"
|
||||
style={{
|
||||
marginLeft: '0px',
|
||||
paddingLeft: '5px',
|
||||
marginTop: '0px',
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className="container-fluid"
|
||||
style={{
|
||||
margin: '0px',
|
||||
padding: '0px',
|
||||
}}
|
||||
>
|
||||
<div className="row">
|
||||
<div className="col-12">
|
||||
<div className="page-title-box d-sm-flex align-items-center justify-content-between">
|
||||
|
||||
@@ -19,7 +19,7 @@ enum PageMap {
|
||||
PREVIEW_SCHEDULED_EVENT_LIST = 'PREVIEW_SCHEDULED_EVENT_LIST',
|
||||
PREVIEW_SCHEDULED_EVENT_DETAIL = 'PREVIEW_SCHEDULED_EVENT_DETAIL',
|
||||
PREVIEW_RSS = 'RSS',
|
||||
PREVIEW_SUBSCRIBE = 'PREVIEW_SUBSCRIBE'
|
||||
PREVIEW_SUBSCRIBE = 'PREVIEW_SUBSCRIBE',
|
||||
}
|
||||
|
||||
export default PageMap;
|
||||
|
||||
@@ -15,15 +15,33 @@ const RouteMap: Dictionary<Route> = {
|
||||
[PageMap.RSS]: new Route(`/rss`),
|
||||
[PageMap.SUBSCRIBE]: new Route(`/subscribe`),
|
||||
|
||||
[PageMap.PREVIEW_OVERVIEW]: new Route(`/status-page/${RouteParams.StatusPageId}`),
|
||||
[PageMap.PREVIEW_INCIDENT_LIST]: new Route(`/status-page/${RouteParams.StatusPageId}/incidents`),
|
||||
[PageMap.PREVIEW_INCIDENT_DETAIL]: new Route(`/status-page/${RouteParams.StatusPageId}/incidents/:id`),
|
||||
[PageMap.PREVIEW_ANNOUNCEMENT_DETAIL]: new Route(`/status-page/${RouteParams.StatusPageId}/announcements/:id`),
|
||||
[PageMap.PREVIEW_ANNOUNCEMENT_LIST]: new Route(`/status-page/${RouteParams.StatusPageId}/announcements`),
|
||||
[PageMap.PREVIEW_SCHEDULED_EVENT_LIST]: new Route(`/status-page/${RouteParams.StatusPageId}/scheduled-events`),
|
||||
[PageMap.PREVIEW_SCHEDULED_EVENT_DETAIL]: new Route(`/status-page/${RouteParams.StatusPageId}/scheduled-events/:id`),
|
||||
[PageMap.PREVIEW_RSS]: new Route(`/status-page/${RouteParams.StatusPageId}/rss`),
|
||||
[PageMap.PREVIEW_SUBSCRIBE]: new Route(`/status-page/${RouteParams.StatusPageId}/subscribe`),
|
||||
[PageMap.PREVIEW_OVERVIEW]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}`
|
||||
),
|
||||
[PageMap.PREVIEW_INCIDENT_LIST]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/incidents`
|
||||
),
|
||||
[PageMap.PREVIEW_INCIDENT_DETAIL]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/incidents/:id`
|
||||
),
|
||||
[PageMap.PREVIEW_ANNOUNCEMENT_DETAIL]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/announcements/:id`
|
||||
),
|
||||
[PageMap.PREVIEW_ANNOUNCEMENT_LIST]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/announcements`
|
||||
),
|
||||
[PageMap.PREVIEW_SCHEDULED_EVENT_LIST]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/scheduled-events`
|
||||
),
|
||||
[PageMap.PREVIEW_SCHEDULED_EVENT_DETAIL]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/scheduled-events/:id`
|
||||
),
|
||||
[PageMap.PREVIEW_RSS]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/rss`
|
||||
),
|
||||
[PageMap.PREVIEW_SUBSCRIBE]: new Route(
|
||||
`/status-page/${RouteParams.StatusPageId}/subscribe`
|
||||
),
|
||||
|
||||
[PageMap.NOT_FOUND]: new Route(`status-page/not-found`),
|
||||
};
|
||||
|
||||
@@ -3,8 +3,7 @@ import Redis from 'CommonServer/Infrastructure/Redis';
|
||||
import logger from 'CommonServer/Utils/Logger';
|
||||
import App from 'CommonServer/Utils/StartServer';
|
||||
|
||||
|
||||
// Worker import.
|
||||
// Worker import.
|
||||
import './Jobs/ScheduledMaintenance/ChangeStateToOngoing';
|
||||
|
||||
const APP_NAME: string = 'workers';
|
||||
@@ -26,4 +25,4 @@ const init: Function = async (): Promise<void> => {
|
||||
}
|
||||
};
|
||||
|
||||
init();
|
||||
init();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import logger from 'CommonServer/Utils/Logger';
|
||||
import cron from 'node-cron';
|
||||
import { EVERY_MINUTE } from '../../Utils/CronTime';
|
||||
import ScheduledMaintenanceService from 'CommonServer/Services/ScheduledMaintenanceService'
|
||||
import ScheduledMaintenanceService from 'CommonServer/Services/ScheduledMaintenanceService';
|
||||
import QueryHelper from 'CommonServer/Types/Database/QueryHelper';
|
||||
import OneUptimeDate from 'Common/Types/Date';
|
||||
import LIMIT_MAX from 'Common/Types/Database/LimitMax';
|
||||
@@ -11,31 +11,33 @@ import ScheduledMaintenanceStateService from 'CommonServer/Services/ScheduledMai
|
||||
|
||||
cron.schedule(EVERY_MINUTE, async () => {
|
||||
try {
|
||||
|
||||
// get all scheduled events of all the projects.
|
||||
const events: Array<ScheduledMaintenance> = await ScheduledMaintenanceService.findBy({
|
||||
query: {
|
||||
currentScheduledMaintenanceState: {
|
||||
isScheduledState: true,
|
||||
} as any,
|
||||
startsAt: QueryHelper.lessThan(OneUptimeDate.getCurrentDate())
|
||||
},
|
||||
props: {
|
||||
isRoot: true
|
||||
},
|
||||
limit: LIMIT_MAX,
|
||||
skip: 0,
|
||||
select: {
|
||||
_id: true,
|
||||
projectId: true,
|
||||
changeMonitorStatusToId: true
|
||||
},
|
||||
populate: {
|
||||
monitors: {
|
||||
_id: true
|
||||
}
|
||||
}
|
||||
});
|
||||
// get all scheduled events of all the projects.
|
||||
const events: Array<ScheduledMaintenance> =
|
||||
await ScheduledMaintenanceService.findBy({
|
||||
query: {
|
||||
currentScheduledMaintenanceState: {
|
||||
isScheduledState: true,
|
||||
} as any,
|
||||
startsAt: QueryHelper.lessThan(
|
||||
OneUptimeDate.getCurrentDate()
|
||||
),
|
||||
},
|
||||
props: {
|
||||
isRoot: true,
|
||||
},
|
||||
limit: LIMIT_MAX,
|
||||
skip: 0,
|
||||
select: {
|
||||
_id: true,
|
||||
projectId: true,
|
||||
changeMonitorStatusToId: true,
|
||||
},
|
||||
populate: {
|
||||
monitors: {
|
||||
_id: true,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// change their state to Ongoing.
|
||||
|
||||
@@ -58,16 +60,22 @@ cron.schedule(EVERY_MINUTE, async () => {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
await ScheduledMaintenanceService.changeScheduledMaintenanceState(event.projectId!, event.id!, scheduledMaintenanceState.id, {
|
||||
isRoot: true
|
||||
})
|
||||
await ScheduledMaintenanceService.changeScheduledMaintenanceState(
|
||||
event.projectId!,
|
||||
event.id!,
|
||||
scheduledMaintenanceState.id,
|
||||
{
|
||||
isRoot: true,
|
||||
}
|
||||
);
|
||||
|
||||
// change attached monitor states.
|
||||
await ScheduledMaintenanceService.changeAttachedMonitorStates(event, { isRoot: true })
|
||||
await ScheduledMaintenanceService.changeAttachedMonitorStates(
|
||||
event,
|
||||
{ isRoot: true }
|
||||
);
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
logger.error(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1 +1 @@
|
||||
export const EVERY_MINUTE: string = '* * * * *';
|
||||
export const EVERY_MINUTE: string = '* * * * *';
|
||||
|
||||
@@ -24,7 +24,9 @@ services:
|
||||
- 8443:8443
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./SAML/.env
|
||||
volumes:
|
||||
- ./saml/users.php:/var/www/simplesamlphp/config/authsources.php
|
||||
@@ -45,7 +47,9 @@ services:
|
||||
dockerfile: ./DashboardAPI/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./DashboardAPI/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -60,7 +64,9 @@ services:
|
||||
dockerfile: ./Workers/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Workers/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -75,7 +81,9 @@ services:
|
||||
dockerfile: ./File/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./File/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -90,7 +98,9 @@ services:
|
||||
dockerfile: ./Identity/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Identity/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -106,7 +116,9 @@ services:
|
||||
dockerfile: ./Alert/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Alert/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -121,7 +133,9 @@ services:
|
||||
dockerfile: ./Integration/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Integration/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -136,6 +150,7 @@ services:
|
||||
dockerfile: ./Accounts/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Accounts/.env
|
||||
environment: *common-variables
|
||||
@@ -150,6 +165,7 @@ services:
|
||||
dockerfile: ./Dashboard/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Dashboard/.env
|
||||
environment: *common-variables
|
||||
@@ -165,6 +181,7 @@ services:
|
||||
dockerfile: ./StatusPage/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Dashboard/.env
|
||||
environment: *common-variables
|
||||
@@ -177,6 +194,7 @@ services:
|
||||
- '1444:1444'
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Home/.env
|
||||
environment: *common-variables
|
||||
@@ -192,6 +210,7 @@ services:
|
||||
dockerfile: ./AdminDashboard/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./AdminDashboard/.env
|
||||
environment: *common-variables
|
||||
@@ -204,6 +223,7 @@ services:
|
||||
- '3010:3010'
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./HttpTestServer/.env
|
||||
environment: *common-variables
|
||||
@@ -216,7 +236,9 @@ services:
|
||||
- '3004:3004'
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Licensing/.env
|
||||
environment: *common-variables
|
||||
build:
|
||||
@@ -231,7 +253,9 @@ services:
|
||||
dockerfile: ./Realtime/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Realtime/.env
|
||||
environment: *common-variables
|
||||
|
||||
@@ -243,7 +267,9 @@ services:
|
||||
dockerfile: ./HelmChart/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./HelmChart/.env
|
||||
environment: *common-variables
|
||||
|
||||
@@ -255,7 +281,9 @@ services:
|
||||
dockerfile: ./ProbeAPI/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./ProbeAPI/.env
|
||||
environment: *common-variables
|
||||
|
||||
@@ -266,7 +294,9 @@ services:
|
||||
dockerfile: ./Probe/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Probe/.env
|
||||
environment:
|
||||
<<: *common-variables
|
||||
@@ -281,7 +311,9 @@ services:
|
||||
dockerfile: ./Probe/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Probe/.env
|
||||
environment:
|
||||
<<: *common-variables
|
||||
@@ -298,6 +330,7 @@ services:
|
||||
dockerfile: ./ApiDocs/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./ApiDocs/.env
|
||||
environment: *common-variables
|
||||
@@ -321,7 +354,9 @@ services:
|
||||
dockerfile: ./Mail/Dockerfile
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Mail/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
|
||||
@@ -41,7 +41,9 @@ services:
|
||||
dockerfile: ./Mail/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Mail/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -68,7 +70,9 @@ services:
|
||||
- 8443:8443
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./SAML/.env
|
||||
volumes:
|
||||
- ./SAML/users.php:/var/www/simplesamlphp/config/authsources.php
|
||||
@@ -92,6 +96,7 @@ services:
|
||||
dockerfile: ./Accounts/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Accounts/.env
|
||||
environment: *common-variables
|
||||
@@ -120,6 +125,7 @@ services:
|
||||
dockerfile: ./Dashboard/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Accounts/.env
|
||||
environment: *common-variables
|
||||
@@ -148,6 +154,7 @@ services:
|
||||
dockerfile: ./StatusPage/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./StatusPage/.env
|
||||
environment: *common-variables
|
||||
@@ -176,7 +183,9 @@ services:
|
||||
dockerfile: ./DashboardAPI/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./DashboardAPI/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -213,7 +222,9 @@ services:
|
||||
dockerfile: ./Workers/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Workers/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -250,7 +261,9 @@ services:
|
||||
dockerfile: ./Identity/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Identity/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -286,7 +299,9 @@ services:
|
||||
dockerfile: ./File/Dockerfile.dev
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./File/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -314,7 +329,9 @@ services:
|
||||
- '9235:9229' # Debugging port.
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Home/.env
|
||||
environment: *common-variables
|
||||
build:
|
||||
|
||||
@@ -41,7 +41,9 @@ services:
|
||||
image: oneuptime/dashboard-api:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./DashboardAPI/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -54,7 +56,9 @@ services:
|
||||
image: oneuptime/identity:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Identity/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -68,7 +72,9 @@ services:
|
||||
image: oneuptime/alert:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Alert/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -81,7 +87,9 @@ services:
|
||||
image: oneuptime/integration:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Integration/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
@@ -94,6 +102,7 @@ services:
|
||||
image: oneuptime/accounts:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Accounts/.env
|
||||
environment: *common-variables
|
||||
@@ -106,6 +115,7 @@ services:
|
||||
image: oneuptime/dashboard:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Dashboard/.env
|
||||
environment: *common-variables
|
||||
@@ -117,6 +127,7 @@ services:
|
||||
- '1444:1444'
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./Home/.env
|
||||
environment: *common-variables
|
||||
@@ -128,6 +139,7 @@ services:
|
||||
image: oneuptime/status-page:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./StatusPage/.env
|
||||
environment: *common-variables
|
||||
@@ -142,6 +154,7 @@ services:
|
||||
image: oneuptime/admin-dashboard:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./AdminDashboard/.env
|
||||
environment: *common-variables
|
||||
@@ -154,7 +167,9 @@ services:
|
||||
- '3010:3010'
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./HttpTestServer/.env
|
||||
environment: *common-variables
|
||||
image: oneuptime/http-test-server:latest
|
||||
@@ -164,7 +179,9 @@ services:
|
||||
- '3004:3004'
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Licensing/.env
|
||||
environment: *common-variables
|
||||
image: oneuptime/licensing:latest
|
||||
@@ -176,7 +193,9 @@ services:
|
||||
image: oneuptime/realtime:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Realtime/.env
|
||||
environment: *common-variables
|
||||
|
||||
@@ -187,7 +206,9 @@ services:
|
||||
image: oneuptime/helmchart:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./HelmChart/.env
|
||||
environment: *common-variables
|
||||
|
||||
@@ -198,7 +219,9 @@ services:
|
||||
image: oneuptime/probe-api:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./ProbeAPI/.env
|
||||
environment: *common-variables
|
||||
|
||||
@@ -206,7 +229,9 @@ services:
|
||||
image: oneuptime/probe:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Probe/.env
|
||||
environment:
|
||||
<<: *common-variables
|
||||
@@ -219,7 +244,9 @@ services:
|
||||
image: oneuptime/probe:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Probe/.env
|
||||
environment:
|
||||
<<: *common-variables
|
||||
@@ -234,6 +261,7 @@ services:
|
||||
image: oneuptime/api-docs:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonUI/.env
|
||||
- ./ApiDocs/.env
|
||||
environment: *common-variables
|
||||
@@ -253,7 +281,9 @@ services:
|
||||
image: oneuptime/mail:latest
|
||||
env_file:
|
||||
- ./Common/.env
|
||||
- ./Common/secret.env
|
||||
- ./CommonServer/.env
|
||||
- ./CommonServer/secret.env
|
||||
- ./Mail/.env
|
||||
environment: *common-variables
|
||||
depends_on:
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"uninstall": "docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)",
|
||||
"delete-all-local-branches": "git branch | grep -v 'master' | xargs git branch -D",
|
||||
"lint": "ejslint home/views/*.ejs && eslint '**/*.ts*' -c .eslintrc.json --ignore-path .eslintignore ",
|
||||
"fix-lint": " node --max_old_space_size=8192 ./node_modules/.bin/eslint '**/*.ts*' -c .eslintrc.json --ignore-path .eslintignore --fix ",
|
||||
"fix-lint": " node --max_old_space_size=18192 ./node_modules/.bin/eslint '**/*.ts*' -c .eslintrc.json --ignore-path .eslintignore --fix ",
|
||||
"fix": "npm run fix-lint",
|
||||
"build": "docker-compose --env-file ./docker-enterprise.env build",
|
||||
"build-ci": "docker-compose --env-file ./docker-enterprise.env -f docker-compose.ci.yml build $npm_config_services",
|
||||
|
||||
Reference in New Issue
Block a user