@oneuptime/common 8.0.5579 → 8.0.5581
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/AlertInternalNote.ts +58 -1
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +1 -0
- package/Models/DatabaseModels/File.ts +1 -1
- package/Models/DatabaseModels/IncidentInternalNote.ts +58 -1
- package/Models/DatabaseModels/IncidentPublicNote.ts +58 -1
- package/Models/DatabaseModels/ScheduledMaintenanceInternalNote.ts +58 -1
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +58 -1
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +49 -0
- package/Server/API/AlertInternalNoteAPI.ts +96 -0
- package/Server/API/IncidentInternalNoteAPI.ts +96 -0
- package/Server/API/IncidentPublicNoteAPI.ts +96 -0
- package/Server/API/ScheduledMaintenanceInternalNoteAPI.ts +100 -0
- package/Server/API/ScheduledMaintenancePublicNoteAPI.ts +100 -0
- package/Server/API/StatusPageAPI.ts +585 -59
- package/Server/API/StatusPageAnnouncementAPI.ts +98 -0
- package/Server/API/UserAPI.ts +95 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1763471659817-MigrationName.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1763477560906-MigrationName.ts +81 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1763480947474-MigrationName.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/ProjectAuthorization.ts +3 -1
- package/Server/Services/AlertInternalNoteService.ts +75 -2
- package/Server/Services/IncidentInternalNoteService.ts +76 -2
- package/Server/Services/IncidentPublicNoteService.ts +76 -2
- package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +76 -2
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +76 -2
- package/Server/Services/ScheduledMaintenanceService.ts +10 -7
- package/Server/Services/StatusPagePrivateUserService.ts +10 -7
- package/Server/Services/StatusPageService.ts +12 -7
- package/Server/Services/StatusPageSubscriberService.ts +19 -13
- package/Server/Utils/FileAttachmentMarkdownUtil.ts +98 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +9 -1
- package/Server/Utils/Monitor/Criteria/ExceptionMonitorCriteria.ts +34 -0
- package/Server/Utils/Monitor/DataToProcess.ts +3 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +13 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +13 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +20 -0
- package/Server/Utils/Monitor/MonitorResource.ts +18 -0
- package/Server/Utils/Response.ts +13 -0
- package/Server/Utils/Telemetry.ts +15 -0
- package/Types/File/MimeType.ts +18 -0
- package/Types/Monitor/CriteriaFilter.ts +3 -0
- package/Types/Monitor/ExceptionMonitor/ExceptionMonitorResponse.ts +12 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
- package/Types/Monitor/MonitorStep.ts +30 -0
- package/Types/Monitor/MonitorStepExceptionMonitor.ts +94 -0
- package/Types/Monitor/MonitorType.ts +10 -1
- package/Types/Telemetry/TelemetryQuery.ts +2 -1
- package/Types/Telemetry/TelemetryType.ts +1 -0
- package/UI/Components/AttachmentList/EventAttachmentList.tsx +121 -0
- package/UI/Components/EventItem/EventItem.tsx +22 -0
- package/UI/Components/Feed/FeedItem.tsx +9 -16
- package/UI/Components/FilePicker/FilePicker.tsx +441 -145
- package/UI/Components/Forms/Fields/FormField.tsx +32 -15
- package/UI/Components/Forms/FormSummary.tsx +168 -1
- package/UI/Components/Forms/ModelForm.tsx +46 -24
- package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
- package/UI/Components/Icon/Icon.tsx +1 -1
- package/UI/Utils/API/RequestOptions.ts +2 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +18 -0
- package/UI/Utils/User.ts +8 -0
- package/Utils/API.ts +11 -1
- package/build/dist/Models/DatabaseModels/AlertInternalNote.js +49 -1
- package/build/dist/Models/DatabaseModels/AlertInternalNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/File.js +1 -1
- package/build/dist/Models/DatabaseModels/File.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentInternalNote.js +49 -1
- package/build/dist/Models/DatabaseModels/IncidentInternalNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +49 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceInternalNote.js +49 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceInternalNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +49 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +48 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Server/API/AlertInternalNoteAPI.js +68 -0
- package/build/dist/Server/API/AlertInternalNoteAPI.js.map +1 -0
- package/build/dist/Server/API/IncidentInternalNoteAPI.js +68 -0
- package/build/dist/Server/API/IncidentInternalNoteAPI.js.map +1 -0
- package/build/dist/Server/API/IncidentPublicNoteAPI.js +68 -0
- package/build/dist/Server/API/IncidentPublicNoteAPI.js.map +1 -0
- package/build/dist/Server/API/ScheduledMaintenanceInternalNoteAPI.js +68 -0
- package/build/dist/Server/API/ScheduledMaintenanceInternalNoteAPI.js.map +1 -0
- package/build/dist/Server/API/ScheduledMaintenancePublicNoteAPI.js +68 -0
- package/build/dist/Server/API/ScheduledMaintenancePublicNoteAPI.js.map +1 -0
- package/build/dist/Server/API/StatusPageAPI.js +488 -85
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAnnouncementAPI.js +68 -0
- package/build/dist/Server/API/StatusPageAnnouncementAPI.js.map +1 -0
- package/build/dist/Server/API/UserAPI.js +66 -0
- package/build/dist/Server/API/UserAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1763471659817-MigrationName.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1763471659817-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1763477560906-MigrationName.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1763477560906-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1763480947474-MigrationName.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1763480947474-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +4 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AlertInternalNoteService.js +54 -2
- package/build/dist/Server/Services/AlertInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentInternalNoteService.js +54 -2
- package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +54 -2
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +54 -2
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +54 -2
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +6 -5
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +6 -4
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +7 -4
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +11 -7
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Utils/FileAttachmentMarkdownUtil.js +67 -0
- package/build/dist/Server/Utils/FileAttachmentMarkdownUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +6 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ExceptionMonitorCriteria.js +34 -0
- package/build/dist/Server/Utils/Monitor/Criteria/ExceptionMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +6 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +10 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +10 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Response.js +8 -0
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +8 -1
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/File/MimeType.js +18 -0
- package/build/dist/Types/File/MimeType.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +2 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/ExceptionMonitor/ExceptionMonitorResponse.js +2 -0
- package/build/dist/Types/Monitor/ExceptionMonitor/ExceptionMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +20 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +58 -0
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +9 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Telemetry/TelemetryType.js +1 -0
- package/build/dist/Types/Telemetry/TelemetryType.js.map +1 -1
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js +42 -0
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js.map +1 -0
- package/build/dist/UI/Components/EventItem/EventItem.js +5 -1
- package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +6 -4
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/FilePicker/FilePicker.js +262 -77
- package/build/dist/UI/Components/FilePicker/FilePicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +24 -12
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/FormSummary.js +77 -1
- package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +32 -18
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +1 -1
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +30 -45
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/User.js +7 -0
- package/build/dist/UI/Utils/User.js.map +1 -1
- package/build/dist/Utils/API.js +3 -0
- package/build/dist/Utils/API.js.map +1 -1
- package/package.json +6 -6
|
@@ -167,6 +167,14 @@ const FormField: <T extends GenericObject>(
|
|
|
167
167
|
? getFieldType(props.field.fieldType)
|
|
168
168
|
: "text";
|
|
169
169
|
|
|
170
|
+
const isFileField: boolean =
|
|
171
|
+
props.field.fieldType === FormFieldSchemaType.File ||
|
|
172
|
+
props.field.fieldType === FormFieldSchemaType.ImageFile ||
|
|
173
|
+
props.field.fieldType === FormFieldSchemaType.MultipleFiles;
|
|
174
|
+
|
|
175
|
+
const isMultiFileField: boolean =
|
|
176
|
+
props.field.fieldType === FormFieldSchemaType.MultipleFiles;
|
|
177
|
+
|
|
170
178
|
if (Object.keys(props.field.field || {}).length === 0) {
|
|
171
179
|
throw new BadDataException("Object cannot be without Field");
|
|
172
180
|
}
|
|
@@ -569,49 +577,58 @@ const FormField: <T extends GenericObject>(
|
|
|
569
577
|
/>
|
|
570
578
|
)}
|
|
571
579
|
|
|
572
|
-
{
|
|
573
|
-
props.field.fieldType === FormFieldSchemaType.ImageFile) && (
|
|
580
|
+
{isFileField && (
|
|
574
581
|
<FilePicker
|
|
575
582
|
error={props.touched && props.error ? props.error : undefined}
|
|
576
583
|
tabIndex={index}
|
|
577
584
|
onChange={async (files: Array<FileModel>) => {
|
|
578
|
-
|
|
585
|
+
const strippedFiles: Array<FileModel> = files.map(
|
|
579
586
|
(i: FileModel) => {
|
|
580
587
|
const strippedModel: FileModel = new FileModel();
|
|
581
588
|
strippedModel._id = i._id!;
|
|
589
|
+
if (i.name) {
|
|
590
|
+
strippedModel.name = i.name;
|
|
591
|
+
}
|
|
592
|
+
if (i.fileType) {
|
|
593
|
+
strippedModel.fileType = i.fileType;
|
|
594
|
+
}
|
|
582
595
|
return strippedModel;
|
|
583
596
|
},
|
|
584
597
|
);
|
|
585
598
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
fileResult = fileResult[0] as FileModel;
|
|
599
|
+
let fileResult: FileModel | Array<FileModel> | null =
|
|
600
|
+
strippedFiles;
|
|
601
|
+
|
|
602
|
+
if (!isMultiFileField) {
|
|
603
|
+
if (strippedFiles.length > 0) {
|
|
604
|
+
fileResult = strippedFiles[0] as FileModel;
|
|
593
605
|
} else {
|
|
594
606
|
fileResult = null;
|
|
595
607
|
}
|
|
596
608
|
}
|
|
597
609
|
|
|
598
|
-
onChange(fileResult);
|
|
610
|
+
onChange(fileResult as any);
|
|
599
611
|
props.setFieldValue(props.fieldName, fileResult);
|
|
600
612
|
}}
|
|
601
613
|
onBlur={async () => {
|
|
602
614
|
props.setFieldTouched(props.fieldName, true);
|
|
603
615
|
}}
|
|
604
616
|
mimeTypes={
|
|
605
|
-
props.field.
|
|
606
|
-
?
|
|
607
|
-
:
|
|
617
|
+
props.field.fileTypes
|
|
618
|
+
? props.field.fileTypes
|
|
619
|
+
: props.field.fieldType === FormFieldSchemaType.ImageFile
|
|
620
|
+
? [MimeType.png, MimeType.jpeg, MimeType.jpg, MimeType.svg]
|
|
621
|
+
: []
|
|
608
622
|
}
|
|
623
|
+
isMultiFilePicker={isMultiFileField}
|
|
609
624
|
dataTestId={props.field.dataTestId}
|
|
610
625
|
initialValue={
|
|
611
626
|
props.currentValues &&
|
|
612
627
|
(props.currentValues as any)[props.fieldName]
|
|
613
628
|
? (props.currentValues as any)[props.fieldName]
|
|
614
|
-
:
|
|
629
|
+
: isMultiFileField
|
|
630
|
+
? []
|
|
631
|
+
: undefined
|
|
615
632
|
}
|
|
616
633
|
placeholder={props.field.placeholder || ""}
|
|
617
634
|
/>
|
|
@@ -11,6 +11,165 @@ import FieldType from "../Types/FieldType";
|
|
|
11
11
|
import { FormStep } from "./Types/FormStep";
|
|
12
12
|
import HorizontalRule from "../HorizontalRule/HorizontalRule";
|
|
13
13
|
|
|
14
|
+
type SummaryElementFn<T extends GenericObject> = (
|
|
15
|
+
item: FormValues<T>,
|
|
16
|
+
) => ReactElement | undefined;
|
|
17
|
+
|
|
18
|
+
type FileSummaryItem = {
|
|
19
|
+
name?: string;
|
|
20
|
+
fileName?: string;
|
|
21
|
+
slug?: string;
|
|
22
|
+
_id?: string;
|
|
23
|
+
fileType?: string;
|
|
24
|
+
isPublic?: boolean;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const getFieldName: <T extends GenericObject>(
|
|
29
|
+
field: Field<T>,
|
|
30
|
+
) => string | undefined = <T extends GenericObject>(
|
|
31
|
+
field: Field<T>,
|
|
32
|
+
): string | undefined => {
|
|
33
|
+
if (field.overrideFieldKey) {
|
|
34
|
+
return field.overrideFieldKey;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const key: string | undefined = Object.keys(field.field || {})[0];
|
|
38
|
+
return key;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const getFileSummaryElement: <T extends GenericObject>(
|
|
42
|
+
field: Field<T>,
|
|
43
|
+
) => SummaryElementFn<T> | undefined = <T extends GenericObject>(
|
|
44
|
+
field: Field<T>,
|
|
45
|
+
): SummaryElementFn<T> | undefined => {
|
|
46
|
+
if (
|
|
47
|
+
field.fieldType !== FormFieldSchemaType.File &&
|
|
48
|
+
field.fieldType !== FormFieldSchemaType.MultipleFiles
|
|
49
|
+
) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const fieldName: string | undefined = getFieldName(field);
|
|
54
|
+
|
|
55
|
+
if (!fieldName) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const formatFileName: (
|
|
60
|
+
file: FileSummaryItem | string,
|
|
61
|
+
index: number,
|
|
62
|
+
) => string = (file: FileSummaryItem | string, index: number): string => {
|
|
63
|
+
if (!file) {
|
|
64
|
+
return `File ${index + 1}`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (typeof file === "string") {
|
|
68
|
+
return file;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const fileObject: FileSummaryItem = file as FileSummaryItem;
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
fileObject.name ||
|
|
75
|
+
fileObject.fileName ||
|
|
76
|
+
fileObject.slug ||
|
|
77
|
+
fileObject._id ||
|
|
78
|
+
`File ${index + 1}`
|
|
79
|
+
);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const getFileSubtitle: (file: FileSummaryItem) => string | undefined = (
|
|
83
|
+
file: FileSummaryItem,
|
|
84
|
+
): string | undefined => {
|
|
85
|
+
const subtitleParts: Array<string> = [];
|
|
86
|
+
|
|
87
|
+
if (file.fileType && typeof file.fileType === "string") {
|
|
88
|
+
subtitleParts.push(file.fileType);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (file.slug && typeof file.slug === "string") {
|
|
92
|
+
subtitleParts.push(file.slug);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return subtitleParts.length > 0 ? subtitleParts.join(" • ") : undefined;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const getAccessLabel: (file: FileSummaryItem) => string | undefined = (
|
|
99
|
+
file: FileSummaryItem,
|
|
100
|
+
): string | undefined => {
|
|
101
|
+
if (typeof file.isPublic === "boolean") {
|
|
102
|
+
return file.isPublic ? "Public" : "Private";
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return undefined;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const renderFiles: SummaryElementFn<T> = (
|
|
109
|
+
item: FormValues<T>,
|
|
110
|
+
): ReactElement | undefined => {
|
|
111
|
+
const formValuesRecord: Record<string, unknown> =
|
|
112
|
+
(item as Record<string, unknown>) || {};
|
|
113
|
+
|
|
114
|
+
const value:
|
|
115
|
+
| FileSummaryItem
|
|
116
|
+
| Array<FileSummaryItem | string>
|
|
117
|
+
| string
|
|
118
|
+
| null =
|
|
119
|
+
(formValuesRecord[fieldName] as
|
|
120
|
+
| FileSummaryItem
|
|
121
|
+
| Array<FileSummaryItem | string>
|
|
122
|
+
| string
|
|
123
|
+
| null
|
|
124
|
+
| undefined) || null;
|
|
125
|
+
|
|
126
|
+
if (!value || (Array.isArray(value) && value.length === 0)) {
|
|
127
|
+
return <span className="text-gray-500">No files selected.</span>;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const files: Array<FileSummaryItem | string> = Array.isArray(value)
|
|
131
|
+
? (value as Array<FileSummaryItem | string>)
|
|
132
|
+
: [value as FileSummaryItem | string];
|
|
133
|
+
|
|
134
|
+
return (
|
|
135
|
+
<div className="rounded-md border border-gray-200 bg-gray-50">
|
|
136
|
+
<ul className="divide-y divide-gray-200">
|
|
137
|
+
{files.map((file: FileSummaryItem | string, index: number) => {
|
|
138
|
+
const fileObject: FileSummaryItem =
|
|
139
|
+
typeof file === "string" ? { name: file } : file;
|
|
140
|
+
|
|
141
|
+
const displayName: string = formatFileName(fileObject, index);
|
|
142
|
+
const subtitle: string | undefined = getFileSubtitle(fileObject);
|
|
143
|
+
const accessLabel: string | undefined = getAccessLabel(fileObject);
|
|
144
|
+
|
|
145
|
+
const key: string = fileObject._id || `${displayName}-${index}`;
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<li key={key} className="flex items-center gap-3 px-3 py-2">
|
|
149
|
+
<div className="min-w-0 flex-1">
|
|
150
|
+
<p className="truncate text-sm font-medium text-gray-900">
|
|
151
|
+
{displayName}
|
|
152
|
+
</p>
|
|
153
|
+
{subtitle && (
|
|
154
|
+
<p className="truncate text-xs text-gray-500">{subtitle}</p>
|
|
155
|
+
)}
|
|
156
|
+
</div>
|
|
157
|
+
{accessLabel && (
|
|
158
|
+
<span className="rounded-full border border-gray-200 bg-white px-2 py-0.5 text-xs font-medium text-gray-600">
|
|
159
|
+
{accessLabel}
|
|
160
|
+
</span>
|
|
161
|
+
)}
|
|
162
|
+
</li>
|
|
163
|
+
);
|
|
164
|
+
})}
|
|
165
|
+
</ul>
|
|
166
|
+
</div>
|
|
167
|
+
);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
return renderFiles;
|
|
171
|
+
};
|
|
172
|
+
|
|
14
173
|
export interface ComponentProps<T> {
|
|
15
174
|
formValues: FormValues<T>;
|
|
16
175
|
formFields: Fields<T>;
|
|
@@ -37,6 +196,9 @@ const FormSummary: <T extends GenericObject>(
|
|
|
37
196
|
item={formValues as T}
|
|
38
197
|
fields={
|
|
39
198
|
formFields.map((field: Field<T>) => {
|
|
199
|
+
const defaultSummaryElement: SummaryElementFn<T> | undefined =
|
|
200
|
+
getFileSummaryElement(field);
|
|
201
|
+
|
|
40
202
|
const detailField: DetailField<T> = {
|
|
41
203
|
title: field.title || "",
|
|
42
204
|
fieldType: field.getSummaryElement
|
|
@@ -45,11 +207,16 @@ const FormSummary: <T extends GenericObject>(
|
|
|
45
207
|
field.fieldType || FormFieldSchemaType.Text,
|
|
46
208
|
),
|
|
47
209
|
description: field.description || "",
|
|
48
|
-
getElement: field.getSummaryElement
|
|
210
|
+
getElement: (field.getSummaryElement ||
|
|
211
|
+
defaultSummaryElement) as any,
|
|
49
212
|
sideLink: field.sideLink,
|
|
50
213
|
key: (Object.keys(field.field || {})[0]?.toString() ||
|
|
51
214
|
"") as keyof T,
|
|
52
215
|
};
|
|
216
|
+
|
|
217
|
+
if (defaultSummaryElement && !field.getSummaryElement) {
|
|
218
|
+
detailField.fieldType = FieldType.Element;
|
|
219
|
+
}
|
|
53
220
|
return detailField;
|
|
54
221
|
}) as DetailField<GenericObject>[]
|
|
55
222
|
}
|
|
@@ -360,34 +360,56 @@ const ModelForm: <TBaseModel extends BaseModel>(
|
|
|
360
360
|
const relationSelect: Select<TBaseModel> = getRelationSelect();
|
|
361
361
|
|
|
362
362
|
for (const key in relationSelect) {
|
|
363
|
-
if (item) {
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
363
|
+
if (!item) {
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
const isFileColumn: boolean = model.isFileColumn(key);
|
|
368
|
+
|
|
369
|
+
if (Array.isArray((item as any)[key])) {
|
|
370
|
+
if (isFileColumn) {
|
|
371
|
+
(item as any)[key] = ((item as any)[key] as Array<JSONObject>).map(
|
|
372
|
+
(file: JSONObject) => {
|
|
373
|
+
return BaseModel.fromJSON(file, FileModel) as FileModel;
|
|
374
|
+
},
|
|
375
|
+
);
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const idArray: Array<string> = [];
|
|
380
|
+
let isModelArray: boolean = false;
|
|
381
|
+
|
|
382
|
+
for (const itemInArray of (item as any)[key] as Array<JSONObject>) {
|
|
383
|
+
if (typeof itemInArray === "object" && itemInArray) {
|
|
384
|
+
const id: string | undefined = itemInArray["_id"] as
|
|
385
|
+
| string
|
|
386
|
+
| undefined;
|
|
387
|
+
if (id) {
|
|
388
|
+
isModelArray = true;
|
|
389
|
+
idArray.push(id);
|
|
375
390
|
}
|
|
376
391
|
}
|
|
392
|
+
}
|
|
377
393
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
}
|
|
394
|
+
if (isModelArray) {
|
|
395
|
+
(item as any)[key] = idArray;
|
|
381
396
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
397
|
+
} else if ((item as any)[key] && typeof (item as any)[key] === "object") {
|
|
398
|
+
if (isFileColumn) {
|
|
399
|
+
(item as any)[key] = BaseModel.fromJSON(
|
|
400
|
+
(item as any)[key] as JSONObject,
|
|
401
|
+
FileModel,
|
|
402
|
+
);
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
if (!((item as any)[key] instanceof FileModel)) {
|
|
407
|
+
const id: string | undefined = ((item as any)[key] as JSONObject)[
|
|
408
|
+
"_id"
|
|
409
|
+
] as string | undefined;
|
|
410
|
+
|
|
411
|
+
if (id) {
|
|
412
|
+
(item as any)[key] = id;
|
|
391
413
|
}
|
|
392
414
|
}
|
|
393
415
|
}
|
|
@@ -1130,7 +1130,7 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
|
|
1130
1130
|
d="M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 001.5-1.5V6a1.5 1.5 0 00-1.5-1.5H3.75A1.5 1.5 0 002.25 6v12a1.5 1.5 0 001.5 1.5zm10.5-11.25h.008v.008h-.008V8.25zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z"
|
|
1131
1131
|
/>,
|
|
1132
1132
|
);
|
|
1133
|
-
} else if (icon === IconProp.TextFile) {
|
|
1133
|
+
} else if (icon === IconProp.TextFile || icon === IconProp.File) {
|
|
1134
1134
|
return getSvgWrapper(
|
|
1135
1135
|
<path
|
|
1136
1136
|
strokeLinecap="round"
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import URL from "../../../Types/API/URL";
|
|
2
|
+
import type { RequestOptions as CoreRequestOptions } from "../../../Utils/API";
|
|
2
3
|
import Dictionary from "../../../Types/Dictionary";
|
|
3
4
|
|
|
4
5
|
export default interface RequestOptions {
|
|
5
6
|
requestHeaders?: Dictionary<string> | undefined;
|
|
6
7
|
overrideRequestUrl?: URL | undefined;
|
|
8
|
+
apiRequestOptions?: CoreRequestOptions | undefined;
|
|
7
9
|
}
|
|
@@ -101,6 +101,9 @@ export default class ModelAPI {
|
|
|
101
101
|
data: data.data,
|
|
102
102
|
},
|
|
103
103
|
headers: this.getCommonHeaders(data.requestOptions),
|
|
104
|
+
...(data.requestOptions?.apiRequestOptions
|
|
105
|
+
? { options: data.requestOptions.apiRequestOptions }
|
|
106
|
+
: {}),
|
|
104
107
|
});
|
|
105
108
|
|
|
106
109
|
if (result.isSuccess()) {
|
|
@@ -156,6 +159,9 @@ export default class ModelAPI {
|
|
|
156
159
|
...this.getCommonHeaders(data.requestOptions),
|
|
157
160
|
...(data.requestOptions?.requestHeaders || {}),
|
|
158
161
|
},
|
|
162
|
+
...(data.requestOptions?.apiRequestOptions
|
|
163
|
+
? { options: data.requestOptions.apiRequestOptions }
|
|
164
|
+
: {}),
|
|
159
165
|
});
|
|
160
166
|
|
|
161
167
|
if (apiResult.isSuccess() && apiResult instanceof HTTPResponse) {
|
|
@@ -231,6 +237,9 @@ export default class ModelAPI {
|
|
|
231
237
|
limit: data.limit.toString(),
|
|
232
238
|
skip: data.skip.toString(),
|
|
233
239
|
},
|
|
240
|
+
...(data.requestOptions?.apiRequestOptions
|
|
241
|
+
? { options: data.requestOptions.apiRequestOptions }
|
|
242
|
+
: {}),
|
|
234
243
|
});
|
|
235
244
|
|
|
236
245
|
if (result.isSuccess()) {
|
|
@@ -294,6 +303,9 @@ export default class ModelAPI {
|
|
|
294
303
|
query: JSONFunctions.serialize(data.query as JSONObject),
|
|
295
304
|
},
|
|
296
305
|
headers,
|
|
306
|
+
...(data.requestOptions?.apiRequestOptions
|
|
307
|
+
? { options: data.requestOptions.apiRequestOptions }
|
|
308
|
+
: {}),
|
|
297
309
|
});
|
|
298
310
|
|
|
299
311
|
if (result.isSuccess()) {
|
|
@@ -383,6 +395,9 @@ export default class ModelAPI {
|
|
|
383
395
|
select: JSONFunctions.serialize(data.select as JSONObject) || {},
|
|
384
396
|
},
|
|
385
397
|
headers: this.getCommonHeaders(data.requestOptions),
|
|
398
|
+
...(data.requestOptions?.apiRequestOptions
|
|
399
|
+
? { options: data.requestOptions.apiRequestOptions }
|
|
400
|
+
: {}),
|
|
386
401
|
});
|
|
387
402
|
|
|
388
403
|
if (result.isSuccess()) {
|
|
@@ -426,6 +441,9 @@ export default class ModelAPI {
|
|
|
426
441
|
method: HTTPMethod.DELETE,
|
|
427
442
|
url: apiUrl,
|
|
428
443
|
headers: this.getCommonHeaders(data.requestOptions),
|
|
444
|
+
...(data.requestOptions?.apiRequestOptions
|
|
445
|
+
? { options: data.requestOptions.apiRequestOptions }
|
|
446
|
+
: {}),
|
|
429
447
|
});
|
|
430
448
|
|
|
431
449
|
if (result.isSuccess()) {
|
package/UI/Utils/User.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { IDENTITY_URL } from "../Config";
|
|
2
|
+
import { AppApiRoute } from "../../ServiceRoute";
|
|
2
3
|
import LocalStorage from "./LocalStorage";
|
|
3
4
|
import URL from "../../Types/API/URL";
|
|
5
|
+
import Route from "../../Types/API/Route";
|
|
4
6
|
import Dictionary from "../../Types/Dictionary";
|
|
5
7
|
import Email from "../../Types/Email";
|
|
6
8
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
@@ -44,6 +46,12 @@ export default class UserUtil {
|
|
|
44
46
|
);
|
|
45
47
|
}
|
|
46
48
|
|
|
49
|
+
public static getProfilePictureRoute(userId: ObjectID): Route {
|
|
50
|
+
return Route.fromString(AppApiRoute.toString())
|
|
51
|
+
.addRoute("/user/profile-picture")
|
|
52
|
+
.addRoute(`/${userId.toString()}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
47
55
|
public static isCardRegistered(): boolean {
|
|
48
56
|
return Boolean(LocalStorage.getItem("cardRegistered"));
|
|
49
57
|
}
|
package/Utils/API.ts
CHANGED
|
@@ -11,7 +11,12 @@ import URL from "../Types/API/URL";
|
|
|
11
11
|
import Dictionary from "../Types/Dictionary";
|
|
12
12
|
import APIException from "../Types/Exception/ApiException";
|
|
13
13
|
import { JSONArray, JSONObject } from "../Types/JSON";
|
|
14
|
-
import axios, {
|
|
14
|
+
import axios, {
|
|
15
|
+
AxiosError,
|
|
16
|
+
AxiosProgressEvent,
|
|
17
|
+
AxiosRequestConfig,
|
|
18
|
+
AxiosResponse,
|
|
19
|
+
} from "axios";
|
|
15
20
|
import Sleep from "../Types/Sleep";
|
|
16
21
|
import type { Agent as HttpAgent } from "http";
|
|
17
22
|
import type { Agent as HttpsAgent } from "https";
|
|
@@ -26,6 +31,7 @@ export interface RequestOptions {
|
|
|
26
31
|
httpsAgent?: HttpsAgent | undefined;
|
|
27
32
|
skipAuthRefresh?: boolean | undefined;
|
|
28
33
|
hasAttemptedAuthRefresh?: boolean | undefined;
|
|
34
|
+
onUploadProgress?: ((event: AxiosProgressEvent) => void) | undefined;
|
|
29
35
|
}
|
|
30
36
|
|
|
31
37
|
export interface APIRequestOptions {
|
|
@@ -408,6 +414,10 @@ export default class API {
|
|
|
408
414
|
options.httpsAgent;
|
|
409
415
|
}
|
|
410
416
|
|
|
417
|
+
if (options?.onUploadProgress) {
|
|
418
|
+
axiosOptions.onUploadProgress = options.onUploadProgress;
|
|
419
|
+
}
|
|
420
|
+
|
|
411
421
|
result = await axios(axiosOptions);
|
|
412
422
|
|
|
413
423
|
break;
|
|
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import Alert from "./Alert";
|
|
11
11
|
import Project from "./Project";
|
|
12
12
|
import User from "./User";
|
|
13
|
+
import File from "./File";
|
|
13
14
|
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
14
15
|
import Route from "../../Types/API/Route";
|
|
15
16
|
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
@@ -26,7 +27,7 @@ import TenantColumn from "../../Types/Database/TenantColumn";
|
|
|
26
27
|
import IconProp from "../../Types/Icon/IconProp";
|
|
27
28
|
import ObjectID from "../../Types/ObjectID";
|
|
28
29
|
import Permission from "../../Types/Permission";
|
|
29
|
-
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
30
|
+
import { Column, Entity, Index, JoinColumn, JoinTable, ManyToMany, ManyToOne, } from "typeorm";
|
|
30
31
|
let AlertInternalNote = class AlertInternalNote extends BaseModel {
|
|
31
32
|
constructor() {
|
|
32
33
|
super(...arguments);
|
|
@@ -39,6 +40,7 @@ let AlertInternalNote = class AlertInternalNote extends BaseModel {
|
|
|
39
40
|
this.deletedByUser = undefined;
|
|
40
41
|
this.deletedByUserId = undefined;
|
|
41
42
|
this.note = undefined;
|
|
43
|
+
this.attachments = undefined;
|
|
42
44
|
this.isOwnerNotified = undefined;
|
|
43
45
|
}
|
|
44
46
|
};
|
|
@@ -309,6 +311,52 @@ __decorate([
|
|
|
309
311
|
}),
|
|
310
312
|
__metadata("design:type", String)
|
|
311
313
|
], AlertInternalNote.prototype, "note", void 0);
|
|
314
|
+
__decorate([
|
|
315
|
+
ColumnAccessControl({
|
|
316
|
+
create: [
|
|
317
|
+
Permission.ProjectOwner,
|
|
318
|
+
Permission.ProjectAdmin,
|
|
319
|
+
Permission.ProjectMember,
|
|
320
|
+
Permission.CreateAlertInternalNote,
|
|
321
|
+
],
|
|
322
|
+
read: [
|
|
323
|
+
Permission.ProjectOwner,
|
|
324
|
+
Permission.ProjectAdmin,
|
|
325
|
+
Permission.ProjectMember,
|
|
326
|
+
Permission.ReadAlertInternalNote,
|
|
327
|
+
],
|
|
328
|
+
update: [
|
|
329
|
+
Permission.ProjectOwner,
|
|
330
|
+
Permission.ProjectAdmin,
|
|
331
|
+
Permission.ProjectMember,
|
|
332
|
+
Permission.EditAlertInternalNote,
|
|
333
|
+
],
|
|
334
|
+
}),
|
|
335
|
+
TableColumn({
|
|
336
|
+
type: TableColumnType.EntityArray,
|
|
337
|
+
modelType: File,
|
|
338
|
+
title: "Attachments",
|
|
339
|
+
description: "Files attached to this note",
|
|
340
|
+
required: false,
|
|
341
|
+
}),
|
|
342
|
+
ManyToMany(() => {
|
|
343
|
+
return File;
|
|
344
|
+
}, {
|
|
345
|
+
eager: false,
|
|
346
|
+
}),
|
|
347
|
+
JoinTable({
|
|
348
|
+
name: "AlertInternalNoteFile",
|
|
349
|
+
joinColumn: {
|
|
350
|
+
name: "alertInternalNoteId",
|
|
351
|
+
referencedColumnName: "_id",
|
|
352
|
+
},
|
|
353
|
+
inverseJoinColumn: {
|
|
354
|
+
name: "fileId",
|
|
355
|
+
referencedColumnName: "_id",
|
|
356
|
+
},
|
|
357
|
+
}),
|
|
358
|
+
__metadata("design:type", Array)
|
|
359
|
+
], AlertInternalNote.prototype, "attachments", void 0);
|
|
312
360
|
__decorate([
|
|
313
361
|
ColumnAccessControl({
|
|
314
362
|
create: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlertInternalNote.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/AlertInternalNote.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,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,oBAAoB,MAAM,2CAA2C,CAAC;AAC7E,OAAO,UAAU,MAAM,iCAAiC,CAAC;AACzD,OAAO,eAAe,MAAM,sCAAsC,CAAC;AACnE,OAAO,mBAAmB,MAAM,0CAA0C,CAAC;AAC3E,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,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,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"AlertInternalNote.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/AlertInternalNote.ts"],"names":[],"mappings":"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"}
|