@oneuptime/common 7.0.3567 → 7.0.3579
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/MonitorTest.ts +1 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1737997557974-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Services/IncidentService.ts +108 -44
- package/Server/Services/Index.ts +3 -0
- package/Types/Domain.ts +1 -1
- package/UI/Components/Forms/BasicForm.tsx +34 -2
- package/UI/Components/Forms/BasicModelForm.tsx +6 -0
- package/UI/Components/Forms/FormSummary.tsx +118 -0
- package/UI/Components/Forms/ModelForm.tsx +6 -0
- package/UI/Components/Forms/Types/Field.ts +2 -0
- package/UI/Components/Forms/Types/FormStep.ts +1 -0
- package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +84 -0
- package/build/dist/Models/DatabaseModels/MonitorTest.js +1 -0
- package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1737997557974-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1737997557974-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +85 -40
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Types/Domain.js +1 -1
- package/build/dist/Types/Domain.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +34 -17
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/FormSummary.js +64 -0
- package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -0
- package/build/dist/UI/Components/Forms/ModelForm.js +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +81 -0
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
export class MigrationName1737997557974 implements MigrationInterface {
|
|
4
|
+
public name = "MigrationName1737997557974";
|
|
5
|
+
|
|
6
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
7
|
+
await queryRunner.query(
|
|
8
|
+
`CREATE INDEX "IDX_4d5e62631b2b63aaecb00950ef" ON "MonitorTest" ("isInQueue") `,
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
13
|
+
await queryRunner.query(
|
|
14
|
+
`DROP INDEX "public"."IDX_4d5e62631b2b63aaecb00950ef"`,
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -98,6 +98,7 @@ import { MigrationName1736856662868 } from "./1736856662868-MigrationName";
|
|
|
98
98
|
import { MigrationName1737141420441 } from "./1737141420441-MigrationName";
|
|
99
99
|
import { MigrationName1737713529424 } from "./1737713529424-MigrationName";
|
|
100
100
|
import { MigrationName1737715240684 } from "./1737715240684-MigrationName";
|
|
101
|
+
import { MigrationName1737997557974 } from "./1737997557974-MigrationName";
|
|
101
102
|
|
|
102
103
|
export default [
|
|
103
104
|
InitialMigration,
|
|
@@ -200,4 +201,5 @@ export default [
|
|
|
200
201
|
MigrationName1737141420441,
|
|
201
202
|
MigrationName1737713529424,
|
|
202
203
|
MigrationName1737715240684,
|
|
204
|
+
MigrationName1737997557974,
|
|
203
205
|
];
|
|
@@ -50,6 +50,10 @@ import Semaphore, {
|
|
|
50
50
|
import IncidentFeedService from "./IncidentFeedService";
|
|
51
51
|
import { IncidentFeedEventType } from "../../Models/DatabaseModels/IncidentFeed";
|
|
52
52
|
import { Gray500, Red500 } from "../../Types/BrandColors";
|
|
53
|
+
import Label from "../../Models/DatabaseModels/Label";
|
|
54
|
+
import LabelService from "./LabelService";
|
|
55
|
+
import IncidentSeverity from "../../Models/DatabaseModels/IncidentSeverity";
|
|
56
|
+
import IncidentSeverityService from "./IncidentSeverityService";
|
|
53
57
|
|
|
54
58
|
export class Service extends DatabaseService<Model> {
|
|
55
59
|
public constructor() {
|
|
@@ -644,74 +648,134 @@ ${createdItem.remediationNotes || "No remediation notes provided."}`,
|
|
|
644
648
|
|
|
645
649
|
if (updatedItemIds.length > 0) {
|
|
646
650
|
for (const incidentId of updatedItemIds) {
|
|
651
|
+
let shouldAddIncidentFeed: boolean = false;
|
|
652
|
+
let feedInfoInMarkdown: string = "**Incident was updated.**";
|
|
653
|
+
|
|
654
|
+
const createdByUserId: ObjectID | undefined | null =
|
|
655
|
+
onUpdate.updateBy.props.userId;
|
|
656
|
+
|
|
647
657
|
if (onUpdate.updateBy.data.title) {
|
|
648
658
|
// add incident feed.
|
|
649
|
-
const createdByUserId: ObjectID | undefined | null =
|
|
650
|
-
onUpdate.updateBy.props.userId;
|
|
651
|
-
|
|
652
|
-
await IncidentFeedService.createIncidentFeed({
|
|
653
|
-
incidentId: incidentId,
|
|
654
|
-
projectId: onUpdate.updateBy.props.tenantId as ObjectID,
|
|
655
|
-
incidentFeedEventType: IncidentFeedEventType.IncidentUpdated,
|
|
656
|
-
displayColor: Gray500,
|
|
657
|
-
feedInfoInMarkdown: `**Incident title was updated.** Here's the new title.
|
|
658
659
|
|
|
660
|
+
feedInfoInMarkdown += `\n\n**Title**:
|
|
659
661
|
${onUpdate.updateBy.data.title || "No title provided."}
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
});
|
|
662
|
+
`;
|
|
663
|
+
shouldAddIncidentFeed = true;
|
|
663
664
|
}
|
|
664
665
|
|
|
665
666
|
if (onUpdate.updateBy.data.rootCause) {
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
onUpdate.updateBy.props.userId;
|
|
667
|
+
if (onUpdate.updateBy.data.title) {
|
|
668
|
+
// add incident feed.
|
|
669
669
|
|
|
670
|
-
|
|
671
|
-
incidentId: incidentId,
|
|
672
|
-
projectId: onUpdate.updateBy.props.tenantId as ObjectID,
|
|
673
|
-
incidentFeedEventType: IncidentFeedEventType.IncidentUpdated,
|
|
674
|
-
displayColor: Gray500,
|
|
675
|
-
feedInfoInMarkdown: `**Incident root cause was updated.** Here's the new root cause.
|
|
676
|
-
|
|
670
|
+
feedInfoInMarkdown += `\n\n**Root Cause**:
|
|
677
671
|
${onUpdate.updateBy.data.rootCause || "No root cause provided."}
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
}
|
|
672
|
+
`;
|
|
673
|
+
shouldAddIncidentFeed = true;
|
|
674
|
+
}
|
|
681
675
|
}
|
|
682
676
|
|
|
683
677
|
if (onUpdate.updateBy.data.description) {
|
|
684
678
|
// add incident feed.
|
|
685
|
-
const createdByUserId: ObjectID | undefined | null =
|
|
686
|
-
onUpdate.updateBy.props.userId;
|
|
687
679
|
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
displayColor: Gray500,
|
|
693
|
-
feedInfoInMarkdown: `**Incident description was updated.** Here's the new description.
|
|
694
|
-
|
|
695
|
-
${onUpdate.updateBy.data.description || "No description provided."}
|
|
696
|
-
`,
|
|
697
|
-
userId: createdByUserId || undefined,
|
|
698
|
-
});
|
|
680
|
+
feedInfoInMarkdown += `\n\n**Incident Description**:
|
|
681
|
+
${onUpdate.updateBy.data.description || "No description provided."}
|
|
682
|
+
`;
|
|
683
|
+
shouldAddIncidentFeed = true;
|
|
699
684
|
}
|
|
700
685
|
|
|
701
686
|
if (onUpdate.updateBy.data.remediationNotes) {
|
|
702
687
|
// add incident feed.
|
|
703
|
-
const createdByUserId: ObjectID | undefined | null =
|
|
704
|
-
onUpdate.updateBy.props.userId;
|
|
705
688
|
|
|
689
|
+
feedInfoInMarkdown += `\n\n**Remediation Notes**:
|
|
690
|
+
${onUpdate.updateBy.data.remediationNotes || "No remediation notes provided."}
|
|
691
|
+
`;
|
|
692
|
+
shouldAddIncidentFeed = true;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
if (
|
|
696
|
+
onUpdate.updateBy.data.labels &&
|
|
697
|
+
onUpdate.updateBy.data.labels.length > 0 &&
|
|
698
|
+
Array.isArray(onUpdate.updateBy.data.labels)
|
|
699
|
+
) {
|
|
700
|
+
const labelIds: Array<ObjectID> = (
|
|
701
|
+
onUpdate.updateBy.data.labels as any
|
|
702
|
+
)
|
|
703
|
+
.map((label: Label) => {
|
|
704
|
+
if (label._id) {
|
|
705
|
+
return new ObjectID(label._id?.toString());
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
return null;
|
|
709
|
+
})
|
|
710
|
+
.filter((labelId: ObjectID | null) => {
|
|
711
|
+
return labelId !== null;
|
|
712
|
+
});
|
|
713
|
+
|
|
714
|
+
const labels: Array<Label> = await LabelService.findBy({
|
|
715
|
+
query: {
|
|
716
|
+
_id: QueryHelper.any(labelIds),
|
|
717
|
+
},
|
|
718
|
+
select: {
|
|
719
|
+
name: true,
|
|
720
|
+
},
|
|
721
|
+
limit: LIMIT_PER_PROJECT,
|
|
722
|
+
skip: 0,
|
|
723
|
+
props: {
|
|
724
|
+
isRoot: true,
|
|
725
|
+
},
|
|
726
|
+
});
|
|
727
|
+
|
|
728
|
+
if (labels.length > 0) {
|
|
729
|
+
feedInfoInMarkdown += `\n\n**Labels**:
|
|
730
|
+
|
|
731
|
+
${labels
|
|
732
|
+
.map((label: Label) => {
|
|
733
|
+
return `- ${label.name}`;
|
|
734
|
+
})
|
|
735
|
+
.join("\n")}
|
|
736
|
+
`;
|
|
737
|
+
|
|
738
|
+
shouldAddIncidentFeed = true;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
if (
|
|
743
|
+
onUpdate.updateBy.data.incidentSeverity &&
|
|
744
|
+
(onUpdate.updateBy.data.incidentSeverity as any)._id
|
|
745
|
+
) {
|
|
746
|
+
const incidentSeverity: IncidentSeverity | null =
|
|
747
|
+
await IncidentSeverityService.findOneBy({
|
|
748
|
+
query: {
|
|
749
|
+
_id: new ObjectID(
|
|
750
|
+
(
|
|
751
|
+
onUpdate.updateBy.data.incidentSeverity as any
|
|
752
|
+
)?._id.toString(),
|
|
753
|
+
),
|
|
754
|
+
},
|
|
755
|
+
select: {
|
|
756
|
+
name: true,
|
|
757
|
+
},
|
|
758
|
+
props: {
|
|
759
|
+
isRoot: true,
|
|
760
|
+
},
|
|
761
|
+
});
|
|
762
|
+
|
|
763
|
+
if (incidentSeverity) {
|
|
764
|
+
feedInfoInMarkdown += `\n\n**Incident Severity**:
|
|
765
|
+
${incidentSeverity.name}
|
|
766
|
+
`;
|
|
767
|
+
|
|
768
|
+
shouldAddIncidentFeed = true;
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
if (shouldAddIncidentFeed) {
|
|
706
773
|
await IncidentFeedService.createIncidentFeed({
|
|
707
774
|
incidentId: incidentId,
|
|
708
775
|
projectId: onUpdate.updateBy.props.tenantId as ObjectID,
|
|
709
776
|
incidentFeedEventType: IncidentFeedEventType.IncidentUpdated,
|
|
710
777
|
displayColor: Gray500,
|
|
711
|
-
feedInfoInMarkdown:
|
|
712
|
-
|
|
713
|
-
${onUpdate.updateBy.data.remediationNotes || "No remediation notes provided."}
|
|
714
|
-
`,
|
|
778
|
+
feedInfoInMarkdown: feedInfoInMarkdown,
|
|
715
779
|
userId: createdByUserId || undefined,
|
|
716
780
|
});
|
|
717
781
|
}
|
package/Server/Services/Index.ts
CHANGED
|
@@ -151,6 +151,8 @@ import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
|
|
|
151
151
|
import AlertFeedService from "./AlertFeedService";
|
|
152
152
|
import IncidentFeedService from "./IncidentFeedService";
|
|
153
153
|
|
|
154
|
+
import MonitorTestService from "./MonitorTestService";
|
|
155
|
+
|
|
154
156
|
const services: Array<BaseService> = [
|
|
155
157
|
AcmeCertificateService,
|
|
156
158
|
PromoCodeService,
|
|
@@ -314,6 +316,7 @@ const services: Array<BaseService> = [
|
|
|
314
316
|
AlertFeedService,
|
|
315
317
|
|
|
316
318
|
TableViewService,
|
|
319
|
+
MonitorTestService,
|
|
317
320
|
];
|
|
318
321
|
|
|
319
322
|
export const AnalyticsServices: Array<
|
package/Types/Domain.ts
CHANGED
|
@@ -26,7 +26,7 @@ export default class Domain extends DatabaseProperty {
|
|
|
26
26
|
"|",
|
|
27
27
|
);
|
|
28
28
|
const secondTLDs: Array<string> =
|
|
29
|
-
"ac|academy|accountant|accountants|actor|adult|aero|ag|agency|ai|airforce|am|amsterdam|apartments|app|archi|army|art|asia|associates|at|attorney|au|auction|auto|autos|baby|band|bar|barcelona|bargains|basketball|bayern|be|beauty|beer|berlin|best|bet|bid|bike|bingo|bio|biz|biz.pl|black|blog|blue|boats|boston|boutique|broker|build|builders|business|buzz|bz|ca|cab|cafe|camera|camp|capital|car|cards|care|careers|cars|casa|cash|casino|catering|cc|center|ceo|ch|charity|chat|cheap|church|city|cl|claims|cleaning|clinic|clothing|cloud|club|cn|co|co.in|co.jp|co.kr|co.nz|co.uk|co.za|coach|codes|coffee|college|com|com.ag|com.au|com.br|com.bz|com.cn|com.co|com.es|com.ky|com.mx|com.pe|com.ph|com.pl|com.ru|com.tw|community|company|computer|condos|construction|consulting|contact|contractors|cooking|cool|country|coupons|courses|credit|creditcard|cricket|cruises|cymru|cz|dance|date|dating|de|deals|degree|delivery|democrat|dental|dentist|design|dev|diamonds|digital|direct|directory|discount|dk|doctor|dog|domains|download|earth|education|email|energy|engineer|engineering|enterprises|equipment|es|estate|eu|events|exchange|expert|exposed|express|fail|faith|family|fan|fans|farm|fashion|film|finance|financial|firm.in|fish|fishing|fit|fitness|flights|florist|fm|football|forsale|foundation|fr|fun|fund|furniture|futbol|fyi|gallery|games|garden|gay|gen.in|gg|gifts|gives|giving|glass|global|gmbh|gold|golf|graphics|gratis|green|gripe|group|gs|guide|guru|hair|haus|health|healthcare|hockey|holdings|holiday|homes|horse|hospital|host|house|idv.tw|immo|immobilien|in|inc|ind.in|industries|info|info.pl|ink|institute|insure|international|investments|io|irish|ist|istanbul|it|jetzt|jewelry|jobs|jp|kaufen|kids|kim|kitchen|kiwi|kr|ky|la|land|lat|law|lawyer|lease|legal|lgbt|life|lighting|limited|limo|live|llc|llp|loan|loans|london|love|ltd|ltda|luxury|maison|makeup|management|market|marketing|mba|me|me.uk|media|melbourne|memorial|men|menu|miami|mobi|moda|moe|money|monster|mortgage|motorcycles|movie|ms|music|mx|nagoya|name|navy|ne.kr|net|net.ag|net.au|net.br|net.bz|net.cn|net.co|net.in|net.ky|net.nz|net.pe|net.ph|net.pl|net.ru|network|news|ninja|nl|no|nom.co|nom.es|nom.pe|nrw|nyc|okinawa|one|onl|online|org|org.ag|org.au|org.cn|org.es|org.in|org.ky|org.nz|org.pe|org.ph|org.pl|org.ru|org.uk|organic|page|paris|partners|parts|party|pe|pet|ph|photography|photos|pictures|pink|pizza|pl|place|plumbing|plus|poker|porn|press|pro|productions|promo|properties|protection|pub|pw|quebec|quest|racing|re.kr|realestate|recipes|red|rehab|reise|reisen|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rich|rip|rocks|rodeo|rugby|run|ryukyu|sale|salon|sarl|school|schule|science|se|security|services|sex|sg|sh|shiksha|shoes|shop|shopping|show|singles|site|ski|skin|soccer|social|software|solar|solutions|space|storage|store|stream|studio|study|style|supplies|supply|support|surf|surgery|sydney|systems|tax|taxi|team|tech|technology|tel|tennis|theater|theatre|tickets|tienda|tips|tires|today|tokyo|tools|tours|town|toys|trade|trading|training|travel|tube|tv|tw|uk|university|uno|us|vacations|vc|vegas|ventures|vet|viajes|video|villas|vin|vip|vision|vodka|vote|voto|voyage|wales|watch|web|webcam|website|wedding|wiki|win|wine|work|works|world|ws|wtf|xxx|xyz|yachts|yoga|yokohama|zone|移动|dev|com|edu|gov|net|mil|org|nom|sch|sbs|caa|res|off|gob|int|tur|ip6|uri|urn|asn|act|nsw|qld|tas|vic|pro|biz|adm|adv|agr|arq|art|ato|bio|bmd|cim|cng|cnt|ecn|eco|emp|eng|esp|etc|eti|far|fnd|fot|fst|g12|ggf|imb|ind|inf|jor|jus|leg|lel|mat|med|mus|not|ntr|odo|ppg|psc|psi|qsl|rec|slg|srv|teo|tmp|trd|vet|zlg|web|ltd|sld|pol|fin|k12|lib|pri|aip|fie|eun|sci|prd|cci|pvt|mod|idv|rel|sex|gen|nic|abr|bas|cal|cam|emr|fvg|laz|lig|lom|mar|mol|pmn|pug|sar|sic|taa|tos|umb|vao|vda|ven|mie|北海道|和歌山|神奈川|鹿児島|ass|rep|tra|per|ngo|soc|grp|plc|its|air|and|bus|can|ddr|jfk|mad|nrw|nyc|ski|spy|tcm|ulm|usa|war|fhs|vgs|dep|eid|fet|fla|flå|gol|hof|hol|sel|vik|cri|iwi|ing|abo|fam|gok|gon|gop|gos|aid|atm|gsm|sos|elk|waw|est|aca|bar|cpa|jur|law|sec|plo|www|bir|cbg|jar|khv|msk|nov|nsk|ptz|rnd|spb|stv|tom|tsk|udm|vrn|cmw|kms|nkz|snz|pub|fhv|red|ens|nat|rns|rnu|bbs|tel|bel|kep|nhs|dni|fed|isa|nsn|gub|e12|tec|орг|обр|упр|alt|nis|jpn|mex|ath|iki|nid|gda|inc|za|ovh|lol|africa".split(
|
|
29
|
+
"ac|academy|accountant|accountants|actor|adult|aero|ag|agency|ai|airforce|am|amsterdam|apartments|app|archi|army|art|asia|associates|at|attorney|au|auction|auto|autos|baby|band|bar|barcelona|bargains|basketball|bayern|be|beauty|beer|berlin|best|bet|bid|bike|bingo|bio|biz|biz.pl|black|blog|blue|boats|boston|boutique|broker|build|builders|business|buzz|bz|ca|cab|cafe|camera|camp|capital|car|cards|care|careers|cars|casa|cash|casino|catering|cc|center|ceo|ch|charity|chat|cheap|church|city|cl|claims|cleaning|clinic|clothing|cloud|club|cn|co|co.in|co.jp|co.kr|co.nz|co.uk|co.za|coach|codes|coffee|college|com|com.ag|com.au|com.br|com.bz|com.cn|com.co|com.es|com.ky|com.mx|com.pe|com.ph|com.pl|com.ru|com.tw|community|company|computer|condos|construction|consulting|contact|contractors|cooking|cool|country|coupons|courses|credit|creditcard|cricket|cruises|cymru|cz|dance|date|dating|de|deals|degree|delivery|democrat|dental|dentist|design|dev|diamonds|digital|direct|directory|discount|dk|doctor|dog|domains|download|earth|education|email|energy|engineer|engineering|enterprises|equipment|es|estate|eu|events|exchange|expert|exposed|express|fail|faith|family|fan|fans|farm|fashion|film|finance|financial|firm.in|fish|fishing|fit|fitness|flights|florist|fm|football|forsale|foundation|fr|fun|fund|furniture|futbol|fyi|gallery|games|garden|gay|gen.in|gg|gifts|gives|giving|glass|global|gmbh|gold|golf|graphics|gratis|green|gripe|group|gs|guide|guru|hair|haus|health|healthcare|hockey|holdings|holiday|homes|horse|hospital|host|house|idv.tw|immo|immobilien|in|inc|ind.in|industries|info|info.pl|ink|institute|insure|international|investments|io|irish|ist|istanbul|it|jetzt|jewelry|jobs|jp|kaufen|kids|kim|kitchen|kiwi|kr|ky|la|land|lat|law|lawyer|lease|legal|lgbt|life|lighting|limited|limo|live|llc|llp|loan|loans|london|love|ltd|ltda|luxury|maison|makeup|management|market|marketing|mba|me|me.uk|media|melbourne|memorial|men|menu|miami|mobi|moda|moe|money|monster|mortgage|motorcycles|movie|ms|music|mx|nagoya|name|navy|ne.kr|net|net.ag|net.au|net.br|net.bz|net.cn|net.co|net.in|net.ky|net.nz|net.pe|net.ph|net.pl|net.ru|network|news|ninja|nl|no|nom.co|nom.es|nom.pe|nrw|nyc|okinawa|one|onl|online|org|org.ag|org.au|org.cn|org.es|org.in|org.ky|org.nz|org.pe|org.ph|org.pl|org.ru|org.uk|organic|page|paris|partners|parts|party|pe|pet|ph|photography|photos|pictures|pink|pizza|pl|place|plumbing|plus|poker|porn|press|pro|productions|promo|properties|protection|pub|pw|quebec|quest|racing|re.kr|realestate|recipes|red|rehab|reise|reisen|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rich|rip|rocks|rodeo|rugby|run|ryukyu|sale|salon|sarl|school|schule|science|se|security|services|sex|sg|sh|shiksha|shoes|shop|shopping|show|singles|site|ski|skin|soccer|social|software|solar|solutions|space|storage|store|stream|studio|study|style|supplies|supply|support|surf|surgery|sydney|systems|tax|taxi|team|tech|technology|tel|tennis|theater|theatre|tickets|tienda|tips|tires|today|tokyo|tools|tours|town|toys|trade|trading|training|travel|tube|tv|tw|uk|university|uno|us|vacations|vc|vegas|ventures|vet|viajes|video|villas|vin|vip|vision|vodka|vote|voto|voyage|wales|watch|web|webcam|website|wedding|wiki|win|wine|work|works|world|ws|wtf|xxx|xyz|yachts|yoga|yokohama|zone|移动|dev|com|edu|gov|net|mil|org|nom|sch|sbs|caa|res|off|gob|int|tur|ip6|uri|urn|asn|act|nsw|qld|tas|vic|pro|biz|adm|adv|agr|arq|art|ato|bio|bmd|cim|cng|cnt|ecn|eco|emp|eng|esp|etc|eti|far|fnd|fot|fst|g12|ggf|imb|ind|inf|jor|jus|leg|lel|mat|med|mus|not|ntr|odo|ppg|psc|psi|qsl|rec|slg|srv|teo|tmp|trd|vet|zlg|web|ltd|sld|pol|fin|k12|lib|pri|aip|fie|eun|sci|prd|cci|pvt|mod|idv|rel|sex|gen|nic|abr|bas|cal|cam|emr|fvg|laz|lig|lom|mar|mol|pmn|pug|sar|sic|taa|tos|umb|vao|vda|ven|mie|北海道|和歌山|神奈川|鹿児島|ass|rep|tra|per|ngo|soc|grp|plc|its|air|and|bus|can|ddr|jfk|mad|nrw|nyc|ski|spy|tcm|ulm|usa|war|fhs|vgs|dep|eid|fet|fla|flå|gol|hof|hol|sel|vik|cri|iwi|ing|abo|fam|gok|gon|gop|gos|aid|atm|gsm|sos|elk|waw|est|aca|bar|cpa|jur|law|sec|plo|www|bir|cbg|jar|khv|msk|nov|nsk|ptz|rnd|spb|stv|tom|tsk|udm|vrn|cmw|kms|nkz|snz|pub|fhv|red|ens|nat|rns|rnu|bbs|tel|bel|kep|nhs|dni|fed|isa|nsn|gub|e12|tec|орг|обр|упр|alt|nis|jpn|mex|ath|iki|nid|gda|inc|za|ovh|lol|africa|top".split(
|
|
30
30
|
"|",
|
|
31
31
|
);
|
|
32
32
|
|
|
@@ -3,9 +3,11 @@ import UiAnalytics from "../../Utils/Analytics";
|
|
|
3
3
|
import Alert, { AlertType } from "../Alerts/Alert";
|
|
4
4
|
import Button, { ButtonStyleType } from "../Button/Button";
|
|
5
5
|
import ButtonTypes from "../Button/ButtonTypes";
|
|
6
|
+
|
|
6
7
|
import { DropdownOption, DropdownValue } from "../Dropdown/Dropdown";
|
|
7
8
|
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
8
9
|
import FormField from "./Fields/FormField";
|
|
10
|
+
import FormSummary from "./FormSummary";
|
|
9
11
|
import Steps from "./Steps/Steps";
|
|
10
12
|
import Field from "./Types/Field";
|
|
11
13
|
import Fields from "./Types/Fields";
|
|
@@ -73,6 +75,11 @@ export interface BaseComponentProps<T> {
|
|
|
73
75
|
onIsLastFormStep?: undefined | ((isLastFormStep: boolean) => void);
|
|
74
76
|
onFormValidationErrorChanged?: ((hasError: boolean) => void) | undefined;
|
|
75
77
|
showSubmitButtonOnlyIfSomethingChanged?: boolean | undefined;
|
|
78
|
+
summary?:
|
|
79
|
+
| {
|
|
80
|
+
enabled?: boolean;
|
|
81
|
+
}
|
|
82
|
+
| undefined;
|
|
76
83
|
}
|
|
77
84
|
|
|
78
85
|
export interface ComponentProps<T extends GenericObject>
|
|
@@ -104,12 +111,27 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
104
111
|
setIsLoading(props.isLoading);
|
|
105
112
|
}, [props.isLoading]);
|
|
106
113
|
|
|
114
|
+
const getFormSteps: () => Array<FormStep<T>> | undefined = () => {
|
|
115
|
+
if (props.summary && props.summary.enabled) {
|
|
116
|
+
// add to last step
|
|
117
|
+
return [
|
|
118
|
+
...(props.steps || []),
|
|
119
|
+
{
|
|
120
|
+
id: "summary",
|
|
121
|
+
title: "Summary",
|
|
122
|
+
isSummaryStep: true,
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
}
|
|
126
|
+
return props.steps;
|
|
127
|
+
};
|
|
128
|
+
|
|
107
129
|
const [submitButtonText, setSubmitButtonText] = useState<string>(
|
|
108
130
|
props.submitButtonText || "Submit",
|
|
109
131
|
);
|
|
110
132
|
|
|
111
133
|
const [formSteps, setFormSteps] = useState<Array<FormStep<T>> | undefined>(
|
|
112
|
-
|
|
134
|
+
getFormSteps(),
|
|
113
135
|
);
|
|
114
136
|
|
|
115
137
|
const isInitialValuesSet: MutableRefObject<boolean> = useRef(false);
|
|
@@ -175,7 +197,7 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
175
197
|
|
|
176
198
|
useEffect(() => {
|
|
177
199
|
setFormSteps(
|
|
178
|
-
|
|
200
|
+
getFormSteps()?.filter((step: FormStep<T>) => {
|
|
179
201
|
if (!step.showIf) {
|
|
180
202
|
return true;
|
|
181
203
|
}
|
|
@@ -606,6 +628,16 @@ const BasicForm: ForwardRefExoticComponent<any> = forwardRef(
|
|
|
606
628
|
</div>
|
|
607
629
|
);
|
|
608
630
|
})}
|
|
631
|
+
|
|
632
|
+
{/* If Summary, show Model detail */}
|
|
633
|
+
|
|
634
|
+
{currentFormStepId === "summary" && (
|
|
635
|
+
<FormSummary
|
|
636
|
+
formValues={refCurrentValue.current}
|
|
637
|
+
formFields={formFields}
|
|
638
|
+
formSteps={formSteps || undefined}
|
|
639
|
+
/>
|
|
640
|
+
)}
|
|
609
641
|
</div>
|
|
610
642
|
</div>
|
|
611
643
|
|
|
@@ -46,6 +46,11 @@ export interface ComponentProps<TBaseModel extends BaseModel> {
|
|
|
46
46
|
hideSubmitButton?: undefined | boolean;
|
|
47
47
|
formRef?: undefined | MutableRefObject<FormProps<FormValues<TBaseModel>>>;
|
|
48
48
|
initialValues?: FormValues<TBaseModel> | undefined;
|
|
49
|
+
summary?:
|
|
50
|
+
| {
|
|
51
|
+
enabled?: boolean;
|
|
52
|
+
}
|
|
53
|
+
| undefined;
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
const BasicModelForm: <TBaseModel extends BaseModel>(
|
|
@@ -121,6 +126,7 @@ const BasicModelForm: <TBaseModel extends BaseModel>(
|
|
|
121
126
|
onIsLastFormStep={props.onIsLastFormStep}
|
|
122
127
|
hideSubmitButton={props.hideSubmitButton}
|
|
123
128
|
ref={props.formRef}
|
|
129
|
+
summary={props.summary}
|
|
124
130
|
></BasicForm>
|
|
125
131
|
);
|
|
126
132
|
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React, { ReactElement } from "react";
|
|
2
|
+
import Detail from "../Detail/Detail";
|
|
3
|
+
import FormValues from "./Types/FormValues";
|
|
4
|
+
import GenericObject from "../../../Types/GenericObject";
|
|
5
|
+
import Fields from "./Types/Fields";
|
|
6
|
+
import FormFieldSchemaTypeUtil from "./Utils/FormFieldSchemaTypeUtil";
|
|
7
|
+
import FormFieldSchemaType from "./Types/FormFieldSchemaType";
|
|
8
|
+
import DetailField from "../Detail/Field";
|
|
9
|
+
import Field from "./Types/Field";
|
|
10
|
+
import FieldType from "../Types/FieldType";
|
|
11
|
+
import { FormStep } from "./Types/FormStep";
|
|
12
|
+
import HorizontalRule from "../HorizontalRule/HorizontalRule";
|
|
13
|
+
|
|
14
|
+
export interface ComponentProps<T> {
|
|
15
|
+
formValues: FormValues<T>;
|
|
16
|
+
formFields: Fields<T>;
|
|
17
|
+
formSteps: FormStep<T>[] | undefined;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const FormSummary: <T extends GenericObject>(
|
|
21
|
+
props: ComponentProps<T>,
|
|
22
|
+
) => ReactElement = <T extends GenericObject>(
|
|
23
|
+
props: ComponentProps<T>,
|
|
24
|
+
): ReactElement => {
|
|
25
|
+
const { formValues, formFields } = props;
|
|
26
|
+
|
|
27
|
+
const getDetailForFormFields: <T extends GenericObject>(
|
|
28
|
+
formValues: FormValues<T>,
|
|
29
|
+
formFields: Fields<T>,
|
|
30
|
+
) => ReactElement = <T extends GenericObject>(
|
|
31
|
+
formValues: FormValues<T>,
|
|
32
|
+
formFields: Fields<T>,
|
|
33
|
+
): ReactElement => {
|
|
34
|
+
return (
|
|
35
|
+
<div>
|
|
36
|
+
<Detail
|
|
37
|
+
item={formValues as T}
|
|
38
|
+
fields={
|
|
39
|
+
formFields.map((field: Field<T>) => {
|
|
40
|
+
const detailField: DetailField<T> = {
|
|
41
|
+
title: field.title || "",
|
|
42
|
+
fieldType: field.getSummaryElement
|
|
43
|
+
? FieldType.Element
|
|
44
|
+
: FormFieldSchemaTypeUtil.toFieldType(
|
|
45
|
+
field.fieldType || FormFieldSchemaType.Text,
|
|
46
|
+
),
|
|
47
|
+
description: field.description || "",
|
|
48
|
+
getElement: field.getSummaryElement as any,
|
|
49
|
+
sideLink: field.sideLink,
|
|
50
|
+
key: (Object.keys(field.field || {})[0]?.toString() ||
|
|
51
|
+
"") as keyof T,
|
|
52
|
+
};
|
|
53
|
+
return detailField;
|
|
54
|
+
}) as DetailField<GenericObject>[]
|
|
55
|
+
}
|
|
56
|
+
/>
|
|
57
|
+
<HorizontalRule />
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const getFormStepTitle: (formStep: FormStep<T>) => ReactElement = (
|
|
63
|
+
formStep: FormStep<T>,
|
|
64
|
+
): ReactElement => {
|
|
65
|
+
return (
|
|
66
|
+
<h2 className="text-md font-medium text-gray-900 mb-3">
|
|
67
|
+
{formStep.title}
|
|
68
|
+
</h2>
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const getDetailForFormStep: (formStep: FormStep<T>) => ReactElement = (
|
|
73
|
+
formStep: FormStep<T>,
|
|
74
|
+
): ReactElement => {
|
|
75
|
+
const formFields: Fields<T> = props.formFields
|
|
76
|
+
.filter((field: Field<T>) => {
|
|
77
|
+
return formStep.id === field.stepId;
|
|
78
|
+
})
|
|
79
|
+
.filter((formField: Field<T>) => {
|
|
80
|
+
if (!formField.showIf) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return formField.showIf(formValues);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (formFields.length === 0) {
|
|
87
|
+
return <></>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
<div>
|
|
92
|
+
{getFormStepTitle(formStep)}
|
|
93
|
+
{getDetailForFormFields(formValues, formFields)}
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
if (props.formSteps && props.formSteps.length > 0) {
|
|
99
|
+
return (
|
|
100
|
+
<div>
|
|
101
|
+
{props.formSteps
|
|
102
|
+
.filter((step: FormStep<T>) => {
|
|
103
|
+
if (!step.showIf) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
return step.showIf(props.formValues);
|
|
107
|
+
})
|
|
108
|
+
.map((formStep: FormStep<T>) => {
|
|
109
|
+
return getDetailForFormStep(formStep);
|
|
110
|
+
})}
|
|
111
|
+
</div>
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return getDetailForFormFields(formValues, formFields);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export default FormSummary;
|
|
@@ -101,6 +101,11 @@ export interface ComponentProps<TBaseModel extends BaseModel> {
|
|
|
101
101
|
saveRequestOptions?: RequestOptions | undefined;
|
|
102
102
|
doNotFetchExistingModel?: boolean | undefined;
|
|
103
103
|
modelAPI?: typeof ModelAPI | undefined;
|
|
104
|
+
summary?:
|
|
105
|
+
| {
|
|
106
|
+
enabled?: boolean;
|
|
107
|
+
}
|
|
108
|
+
| undefined;
|
|
104
109
|
}
|
|
105
110
|
|
|
106
111
|
const ModelForm: <TBaseModel extends BaseModel>(
|
|
@@ -783,6 +788,7 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
783
788
|
| FormValues<TBaseModel>
|
|
784
789
|
| undefined
|
|
785
790
|
}
|
|
791
|
+
summary={props.summary}
|
|
786
792
|
></BasicModelForm>
|
|
787
793
|
</div>
|
|
788
794
|
);
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import FieldType from "../../Types/FieldType";
|
|
2
|
+
import FormFieldSchemaType from "../Types/FormFieldSchemaType";
|
|
3
|
+
|
|
4
|
+
export default class FormFieldSchemaTypeUtil {
|
|
5
|
+
public static toFieldType(
|
|
6
|
+
formFieldSchemaType: FormFieldSchemaType,
|
|
7
|
+
): FieldType {
|
|
8
|
+
switch (formFieldSchemaType) {
|
|
9
|
+
case FormFieldSchemaType.ObjectID:
|
|
10
|
+
return FieldType.ObjectID;
|
|
11
|
+
case FormFieldSchemaType.Name:
|
|
12
|
+
return FieldType.Name;
|
|
13
|
+
case FormFieldSchemaType.Hostname:
|
|
14
|
+
return FieldType.Hostname;
|
|
15
|
+
case FormFieldSchemaType.ImageFile:
|
|
16
|
+
return FieldType.ImageFile;
|
|
17
|
+
case FormFieldSchemaType.URL:
|
|
18
|
+
return FieldType.URL;
|
|
19
|
+
case FormFieldSchemaType.Route:
|
|
20
|
+
return FieldType.Route;
|
|
21
|
+
case FormFieldSchemaType.Number:
|
|
22
|
+
return FieldType.Number;
|
|
23
|
+
case FormFieldSchemaType.Password:
|
|
24
|
+
return FieldType.Password;
|
|
25
|
+
case FormFieldSchemaType.Text:
|
|
26
|
+
return FieldType.Text;
|
|
27
|
+
case FormFieldSchemaType.Time:
|
|
28
|
+
return FieldType.DateTime;
|
|
29
|
+
case FormFieldSchemaType.Email:
|
|
30
|
+
return FieldType.Email;
|
|
31
|
+
case FormFieldSchemaType.PositiveNumber:
|
|
32
|
+
return FieldType.Number;
|
|
33
|
+
case FormFieldSchemaType.Date:
|
|
34
|
+
return FieldType.Date;
|
|
35
|
+
case FormFieldSchemaType.Phone:
|
|
36
|
+
return FieldType.Phone;
|
|
37
|
+
case FormFieldSchemaType.DateTime:
|
|
38
|
+
return FieldType.DateTime;
|
|
39
|
+
case FormFieldSchemaType.Domain:
|
|
40
|
+
return FieldType.Text;
|
|
41
|
+
case FormFieldSchemaType.LongText:
|
|
42
|
+
return FieldType.LongText;
|
|
43
|
+
case FormFieldSchemaType.Color:
|
|
44
|
+
return FieldType.Color;
|
|
45
|
+
case FormFieldSchemaType.Dropdown:
|
|
46
|
+
return FieldType.Dropdown;
|
|
47
|
+
case FormFieldSchemaType.Radio:
|
|
48
|
+
return FieldType.Text;
|
|
49
|
+
case FormFieldSchemaType.File:
|
|
50
|
+
return FieldType.File;
|
|
51
|
+
case FormFieldSchemaType.MultiSelectDropdown:
|
|
52
|
+
return FieldType.MultiSelectDropdown;
|
|
53
|
+
case FormFieldSchemaType.Toggle:
|
|
54
|
+
return FieldType.Boolean;
|
|
55
|
+
case FormFieldSchemaType.Port:
|
|
56
|
+
return FieldType.Port;
|
|
57
|
+
case FormFieldSchemaType.EncryptedText:
|
|
58
|
+
return FieldType.HiddenText;
|
|
59
|
+
case FormFieldSchemaType.Markdown:
|
|
60
|
+
return FieldType.Markdown;
|
|
61
|
+
case FormFieldSchemaType.JavaScript:
|
|
62
|
+
return FieldType.JavaScript;
|
|
63
|
+
case FormFieldSchemaType.CSS:
|
|
64
|
+
return FieldType.CSS;
|
|
65
|
+
case FormFieldSchemaType.HTML:
|
|
66
|
+
return FieldType.HTML;
|
|
67
|
+
case FormFieldSchemaType.RadioButton:
|
|
68
|
+
return FieldType.Element;
|
|
69
|
+
case FormFieldSchemaType.JSON:
|
|
70
|
+
return FieldType.JSON;
|
|
71
|
+
case FormFieldSchemaType.Query:
|
|
72
|
+
return FieldType.Element;
|
|
73
|
+
case FormFieldSchemaType.CustomComponent:
|
|
74
|
+
return FieldType.Element;
|
|
75
|
+
case FormFieldSchemaType.Checkbox:
|
|
76
|
+
return FieldType.Boolean;
|
|
77
|
+
case FormFieldSchemaType.CategoryCheckbox:
|
|
78
|
+
return FieldType.Boolean;
|
|
79
|
+
|
|
80
|
+
default:
|
|
81
|
+
return FieldType.Text;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonitorTest.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/MonitorTest.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,SAAS,MAAM,uCAAuC,CAAC;AAC9D,OAAO,KAAK,MAAM,uBAAuB,CAAC;AAC1C,OAAO,mBAAmB,MAAM,wDAAwD,CAAC;AACzF,OAAO,kBAAkB,MAAM,uDAAuD,CAAC;AACvF,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,UAAU,MAAM,iCAAiC,CAAC;AACzD,OAAO,eAAe,MAAM,sCAAsC,CAAC;AACnE,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAC/D,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAC3D,OAAO,eAAe,MAAM,sCAAsC,CAAC;AACnE,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAC/D,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEvE,OAAO,KAAK,MAAM,SAAS,CAAC;AAgDb,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,SAAS;IAAnC;;QAmCN,YAAO,GAAa,SAAS,CAAC;QA8B9B,cAAS,GAAc,SAAS,CAAC;QAqCjC,kBAAa,GAAU,SAAS,CAAC;QA4BjC,oBAAe,GAAc,SAAS,CAAC;QA2BvC,kBAAa,GAAU,SAAS,CAAC;QAkBjC,oBAAe,GAAc,SAAS,CAAC;QA4BvC,gBAAW,GAAiB,SAAS,CAAC;QAiCtC,iBAAY,GAAkB,SAAS,CAAC;QAyCxC,UAAK,GAAW,SAAS,CAAC;QAmC1B,YAAO,GAAc,SAAS,CAAC;QA4B/B,aAAQ,GAAU,SAAS,CAAC;QAgC5B,6BAAwB,GAA8B,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MonitorTest.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/MonitorTest.ts"],"names":[],"mappings":"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"}
|