@olenbetong/synergi-react 2.2.3 → 2.3.1
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/es/components/FilePond.d.ts +8 -5
- package/es/components/FilePond.js +47 -20
- package/es/elements/ElementDamage/DamageFormButtons.d.ts +9 -0
- package/es/elements/ElementDamage/DamageFormButtons.js +7 -0
- package/es/elements/ElementDamage/DescriptionInput.d.ts +14 -0
- package/es/elements/ElementDamage/DescriptionInput.js +44 -0
- package/es/elements/{ElementDamageForm/DuplicateDamage/DuplicateElementDamageDialog.d.ts → ElementDamage/DuplicateDamage/DublicateElementDamageDialog.d.ts} +4 -3
- package/es/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.js +12 -0
- package/es/elements/ElementDamage/DuplicateDamage/index.d.ts +36 -0
- package/es/elements/ElementDamage/DuplicateDamage/index.js +40 -0
- package/es/elements/ElementDamage/ElementNumberTextField.d.ts +10 -0
- package/es/elements/ElementDamage/ElementNumberTextField.js +18 -0
- package/es/elements/ElementDamage/HiddenDamageFields.d.ts +6 -0
- package/es/elements/ElementDamage/HiddenDamageFields.js +4 -0
- package/es/elements/ElementDamage/RegisterFix.d.ts +14 -0
- package/es/elements/ElementDamage/RegisterFix.js +45 -0
- package/es/elements/ElementDamage/SubmitButtons.d.ts +20 -0
- package/es/elements/ElementDamage/SubmitButtons.js +7 -0
- package/es/elements/ElementDamage/TransportElementSelect.d.ts +7 -0
- package/es/elements/ElementDamage/TransportElementSelect.js +16 -0
- package/es/elements/ElementLookup.d.ts +20 -0
- package/es/elements/ElementLookup.js +30 -0
- package/es/elements/{AddElementDialog → ElementLookupDialog}/Manual/ManualForm.js +4 -2
- package/es/elements/{AddElementDialog → ElementLookupDialog}/getElement.d.ts +1 -0
- package/es/elements/{AddElementDialog → ElementLookupDialog}/getElement.js +1 -0
- package/es/elements/{AddElementDialog → ElementLookupDialog}/index.d.ts +5 -5
- package/es/elements/{AddElementDialog → ElementLookupDialog}/index.js +4 -1
- package/es/elements/ProjectSelect.js +9 -2
- package/es/elements/data/dsDamages.d.ts +1 -1
- package/es/elements/data/dsDamages.js +2 -2
- package/es/elements/data/dsElements.d.ts +2 -0
- package/es/elements/data/dsElements.js +11 -1
- package/es/elements/data/dsTransportElements.d.ts +10 -0
- package/es/elements/data/dsTransportElements.js +57 -0
- package/es/elements/data/index.d.ts +5 -1
- package/es/elements/data/index.js +5 -1
- package/es/elements/data/procDeleteAttachment.d.ts +2 -0
- package/es/elements/data/procDeleteAttachment.js +18 -0
- package/es/elements/data/procDeleteDamage.d.ts +2 -0
- package/es/elements/data/procDeleteDamage.js +18 -0
- package/es/elements/data/procRemoveDamageFix.d.ts +2 -0
- package/es/elements/data/procRemoveDamageFix.js +18 -0
- package/es/elements/data/procRestoreAttachments.d.ts +2 -0
- package/es/elements/data/procRestoreAttachments.js +18 -0
- package/es/elements/index.d.ts +8 -2
- package/es/elements/index.js +8 -2
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/package.json +4 -4
- package/src/components/FilePond.tsx +73 -26
- package/src/elements/ElementDamage/DamageFormButtons.tsx +35 -0
- package/src/elements/ElementDamage/DescriptionInput.tsx +111 -0
- package/src/elements/{ElementDamageForm/DuplicateDamage/DuplicateElementDamageDialog.tsx → ElementDamage/DuplicateDamage/DublicateElementDamageDialog.tsx} +24 -9
- package/src/elements/ElementDamage/DuplicateDamage/index.tsx +105 -0
- package/src/elements/ElementDamage/ElementNumberTextField.tsx +41 -0
- package/src/elements/ElementDamage/HiddenDamageFields.tsx +13 -0
- package/src/elements/ElementDamage/RegisterFix.tsx +100 -0
- package/src/elements/ElementDamage/SubmitButtons.tsx +40 -0
- package/src/elements/ElementDamage/TransportElementSelect.tsx +52 -0
- package/src/elements/ElementLookup.tsx +90 -0
- package/src/elements/{AddElementDialog → ElementLookupDialog}/Manual/ManualForm.tsx +5 -2
- package/src/elements/{AddElementDialog → ElementLookupDialog}/getElement.ts +2 -0
- package/src/elements/{AddElementDialog → ElementLookupDialog}/index.tsx +9 -5
- package/src/elements/ProjectSelect.tsx +13 -3
- package/src/elements/data/dsDamages.ts +3 -3
- package/src/elements/data/dsElements.ts +13 -1
- package/src/elements/data/dsTransportElements.ts +68 -0
- package/src/elements/data/index.ts +5 -1
- package/src/elements/data/procDeleteAttachment.ts +19 -0
- package/src/elements/data/procDeleteDamage.ts +19 -0
- package/src/elements/data/procRemoveDamageFix.ts +19 -0
- package/src/elements/data/procRestoreAttachments.ts +19 -0
- package/src/elements/index.ts +8 -3
- package/src/index.ts +1 -1
- package/es/elements/ElementDamageForm/DamageFormFields.d.ts +0 -12
- package/es/elements/ElementDamageForm/DamageFormFields.js +0 -39
- package/es/elements/ElementDamageForm/DuplicateDamage/DuplicateElementDamageDialog.js +0 -11
- package/es/elements/ElementDamageForm/index.d.ts +0 -13
- package/es/elements/ElementDamageForm/index.js +0 -219
- package/src/elements/ElementDamageForm/DamageFormFields.tsx +0 -149
- package/src/elements/ElementDamageForm/index.tsx +0 -397
- /package/es/elements/{ElementDamageForm → ElementDamage}/DuplicateDamage/DesktopView.d.ts +0 -0
- /package/es/elements/{ElementDamageForm → ElementDamage}/DuplicateDamage/DesktopView.js +0 -0
- /package/es/elements/{ElementDamageForm → ElementDamage}/DuplicateDamage/PhoneView.d.ts +0 -0
- /package/es/elements/{ElementDamageForm → ElementDamage}/DuplicateDamage/PhoneView.js +0 -0
- /package/es/elements/{ElementDamageForm → ElementDamage}/index.css +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/DeadIcon.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/DeadIcon.js +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/Error.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/Error.js +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/index.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/index.js +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/useScanner.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/useScanner.js +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/index.css +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/index.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/index.js +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/useHIDScanner.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/useHIDScanner.js +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/Manual/ManualForm.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/utils/Giai.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/utils/Giai.js +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/utils/beep.d.ts +0 -0
- /package/es/elements/{AddElementDialog → ElementLookupDialog}/utils/beep.js +0 -0
- /package/src/elements/{ElementDamageForm → ElementDamage}/DuplicateDamage/DesktopView.tsx +0 -0
- /package/src/elements/{ElementDamageForm → ElementDamage}/DuplicateDamage/PhoneView.tsx +0 -0
- /package/src/elements/{ElementDamageForm → ElementDamage}/index.css +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/DeadIcon.tsx +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/Error.tsx +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/index.tsx +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/BarcodeScanner/useScanner.ts +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/index.css +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/index.tsx +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/HIDScanner/useHIDScanner.ts +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/utils/Giai.ts +0 -0
- /package/src/elements/{AddElementDialog → ElementLookupDialog}/utils/beep.ts +0 -0
|
@@ -23,26 +23,26 @@ export type AddElement = {
|
|
|
23
23
|
|
|
24
24
|
type InitialTabProps = "camera" | "scanner" | "manual";
|
|
25
25
|
|
|
26
|
-
export type
|
|
26
|
+
export type ElementLookupDialogSharedProps = {
|
|
27
27
|
open: boolean;
|
|
28
28
|
onClose: () => void;
|
|
29
29
|
initialTab?: InitialTabProps | null;
|
|
30
30
|
useSearch?: boolean;
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
export type
|
|
33
|
+
export type ElementLookupDialogSingleModeProps = ElementLookupDialogSharedProps & {
|
|
34
34
|
mode: "single" | "search";
|
|
35
35
|
onAdd: (element: AddElement) => Promise<void>;
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
export type
|
|
38
|
+
export type ElementLookupDialogMultiModeProps = ElementLookupDialogSharedProps & {
|
|
39
39
|
mode: "multi";
|
|
40
40
|
onAdd: (element: AddElement[]) => Promise<void>;
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
export type
|
|
43
|
+
export type ElementLookupDialogProps = ElementLookupDialogSingleModeProps | ElementLookupDialogMultiModeProps;
|
|
44
44
|
|
|
45
|
-
export function
|
|
45
|
+
export function ElementLookupDialog(props: ElementLookupDialogProps) {
|
|
46
46
|
let { open, onClose, initialTab } = props;
|
|
47
47
|
let [tab, setTab] = useState<"camera" | "scanner" | "manual">("camera");
|
|
48
48
|
let [elements, setElements] = useState<Array<AddElement>>([]);
|
|
@@ -103,6 +103,10 @@ export function AddElementDialog(props: AddElementDialogProps) {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
if (tab === "manual" && props.mode === "search") {
|
|
107
|
+
tab = "camera";
|
|
108
|
+
}
|
|
109
|
+
|
|
106
110
|
return (
|
|
107
111
|
<ResponsiveDialog
|
|
108
112
|
open={open}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Autocomplete, ListItem, ListItemText, type SxProps, TextField, type Theme } from "@mui/material";
|
|
2
2
|
import { getLocalizedString } from "@olenbetong/appframe-core";
|
|
3
3
|
import { useDataWithFilter, useDebounce } from "@olenbetong/appframe-react";
|
|
4
|
-
import { useMemo, useState } from "react";
|
|
4
|
+
import { useMemo, useRef, useState } from "react";
|
|
5
5
|
import { dsProjects, type ProjectsRecord } from "./data/dsProjects";
|
|
6
6
|
import { dsReportProjects } from "./data/dsReportProjects";
|
|
7
7
|
|
|
@@ -47,7 +47,11 @@ export function ProjectSelect({
|
|
|
47
47
|
search ? `[SearchColumn] LIKE '%${search}%'` : "",
|
|
48
48
|
);
|
|
49
49
|
|
|
50
|
+
let highlightRef = useRef<Partial<ProjectsRecord | null>>(null);
|
|
51
|
+
|
|
50
52
|
function handleSelect(value: Partial<ProjectsRecord> | null) {
|
|
53
|
+
highlightRef.current = null;
|
|
54
|
+
|
|
51
55
|
if (!disabled && !readOnly) {
|
|
52
56
|
if (onChange) {
|
|
53
57
|
onChange(value);
|
|
@@ -73,6 +77,8 @@ export function ProjectSelect({
|
|
|
73
77
|
<Autocomplete<Partial<ProjectsRecord>>
|
|
74
78
|
sx={sx}
|
|
75
79
|
autoHighlight
|
|
80
|
+
autoSelect
|
|
81
|
+
clearOnEscape
|
|
76
82
|
className={className}
|
|
77
83
|
options={projects}
|
|
78
84
|
disabled={disabled}
|
|
@@ -80,7 +86,6 @@ export function ProjectSelect({
|
|
|
80
86
|
option?.ProjectID !== undefined ? `${option.ProjectID}: ${option.ProjectName}` : ""
|
|
81
87
|
}
|
|
82
88
|
isOptionEqualToValue={(option, value) => option.Domain === value.Domain && option.ProjectID === value.ProjectID}
|
|
83
|
-
clearOnEscape
|
|
84
89
|
onChange={(_, value) => handleSelect(value)}
|
|
85
90
|
onClose={() => setQuery("")}
|
|
86
91
|
value={value !== undefined ? value : selected}
|
|
@@ -90,7 +95,12 @@ export function ProjectSelect({
|
|
|
90
95
|
label={label ? label : getLocalizedString("Project ID")}
|
|
91
96
|
id={id ?? "ProjectLookup"}
|
|
92
97
|
fullWidth
|
|
93
|
-
|
|
98
|
+
slotProps={{
|
|
99
|
+
htmlInput: {
|
|
100
|
+
readOnly,
|
|
101
|
+
...params.inputProps,
|
|
102
|
+
},
|
|
103
|
+
}}
|
|
94
104
|
autoComplete="off"
|
|
95
105
|
variant="filled"
|
|
96
106
|
required={required}
|
|
@@ -32,8 +32,8 @@ export type DamagesRecord = {
|
|
|
32
32
|
Action: string | null;
|
|
33
33
|
RegisteredFix: Date | null;
|
|
34
34
|
RegisteredFixBy: string | null;
|
|
35
|
+
RegisteredFixFullName: string | null;
|
|
35
36
|
Cause: string | null;
|
|
36
|
-
FullName: string | null;
|
|
37
37
|
SearchColumn: string;
|
|
38
38
|
ElementRef: string | null;
|
|
39
39
|
};
|
|
@@ -138,12 +138,12 @@ export const dsDamages = generateApiDataObject<DamagesRecord>({
|
|
|
138
138
|
nullable: true,
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
|
-
name: "
|
|
141
|
+
name: "RegisteredFixFullName",
|
|
142
142
|
type: "string",
|
|
143
143
|
nullable: true,
|
|
144
144
|
},
|
|
145
145
|
{
|
|
146
|
-
name: "
|
|
146
|
+
name: "Cause",
|
|
147
147
|
type: "string",
|
|
148
148
|
nullable: true,
|
|
149
149
|
},
|
|
@@ -4,14 +4,16 @@ af resources generate aviw_Production_Elements_All \
|
|
|
4
4
|
--id dsElements \
|
|
5
5
|
--types \
|
|
6
6
|
--max-records 100 \
|
|
7
|
-
--fields PrimKey,ProjectID,ElementID
|
|
7
|
+
--fields PrimKey,ProjectID,ElementID,ProjectName,Name
|
|
8
8
|
*/
|
|
9
9
|
import { generateApiDataObject } from "@olenbetong/appframe-data";
|
|
10
10
|
|
|
11
11
|
export type ElementsRecord = {
|
|
12
12
|
PrimKey: string;
|
|
13
13
|
ProjectID: string;
|
|
14
|
+
ProjectName: string;
|
|
14
15
|
ElementID: string | null;
|
|
16
|
+
Name: string | null;
|
|
15
17
|
};
|
|
16
18
|
|
|
17
19
|
export const dsElements = generateApiDataObject<ElementsRecord>({
|
|
@@ -32,11 +34,21 @@ export const dsElements = generateApiDataObject<ElementsRecord>({
|
|
|
32
34
|
type: "string",
|
|
33
35
|
nullable: false,
|
|
34
36
|
},
|
|
37
|
+
{
|
|
38
|
+
name: "ProjectName",
|
|
39
|
+
type: "string",
|
|
40
|
+
nullable: false,
|
|
41
|
+
},
|
|
35
42
|
{
|
|
36
43
|
name: "ElementID",
|
|
37
44
|
type: "string",
|
|
38
45
|
nullable: true,
|
|
39
46
|
},
|
|
47
|
+
{
|
|
48
|
+
name: "Name",
|
|
49
|
+
type: "string",
|
|
50
|
+
nullable: true,
|
|
51
|
+
},
|
|
40
52
|
],
|
|
41
53
|
parameters: {
|
|
42
54
|
maxRecords: 100,
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*
|
|
2
|
+
auto-generated by CLI:
|
|
3
|
+
af resources generate aviw_Fleet_DeliveryTickets_Elements \
|
|
4
|
+
--id dsTransportElements \
|
|
5
|
+
--types \
|
|
6
|
+
--max-records 100 \
|
|
7
|
+
--fields PrimKey,DeliveryTicketID,ProjectID,ProjectName,ElementID,Name,Domain
|
|
8
|
+
*/
|
|
9
|
+
import { generateApiDataObject } from "@olenbetong/appframe-data";
|
|
10
|
+
|
|
11
|
+
export type TransportElementsRecord = {
|
|
12
|
+
PrimKey: string;
|
|
13
|
+
DeliveryTicketID: number;
|
|
14
|
+
Domain: string;
|
|
15
|
+
ProjectID: string;
|
|
16
|
+
ProjectName: string;
|
|
17
|
+
ElementID: string | null;
|
|
18
|
+
Name: string | null;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const dsTransportElements = generateApiDataObject<TransportElementsRecord>({
|
|
22
|
+
resource: "aviw_Fleet_DeliveryTickets_Elements",
|
|
23
|
+
id: "dsTransportElements",
|
|
24
|
+
allowUpdate: false,
|
|
25
|
+
allowInsert: false,
|
|
26
|
+
allowDelete: false,
|
|
27
|
+
dynamicLoading: false,
|
|
28
|
+
fields: [
|
|
29
|
+
{
|
|
30
|
+
name: "PrimKey",
|
|
31
|
+
type: "string",
|
|
32
|
+
nullable: false,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: "DeliveryTicketID",
|
|
36
|
+
type: "number",
|
|
37
|
+
nullable: false,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "Domain",
|
|
41
|
+
type: "string",
|
|
42
|
+
nullable: false,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "ProjectID",
|
|
46
|
+
type: "string",
|
|
47
|
+
nullable: false,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "ProjectName",
|
|
51
|
+
type: "string",
|
|
52
|
+
nullable: false,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "ElementID",
|
|
56
|
+
type: "string",
|
|
57
|
+
nullable: true,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "Name",
|
|
61
|
+
type: "string",
|
|
62
|
+
nullable: true,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
parameters: {
|
|
66
|
+
maxRecords: 100,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
@@ -3,5 +3,9 @@ export * from "./dsCurrentAttachment.js";
|
|
|
3
3
|
export * from "./dsDamages.js";
|
|
4
4
|
export * from "./dsDamagesDuplicateCheck.js";
|
|
5
5
|
export * from "./dsElements.js";
|
|
6
|
-
export * from "./procApproveDamage.js";
|
|
7
6
|
export * from "./dsProjects.js";
|
|
7
|
+
export * from "./procApproveDamage.js";
|
|
8
|
+
export * from "./procDeleteAttachment.js";
|
|
9
|
+
export * from "./procDeleteDamage.js";
|
|
10
|
+
export * from "./procRemoveDamageFix.js";
|
|
11
|
+
export * from "./procRestoreAttachments.js";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
auto-generated by CLI:
|
|
3
|
+
af resources generate astp_Production_ElementsDamages_DeleteAttachments \
|
|
4
|
+
--id procDeleteAttachment
|
|
5
|
+
*/
|
|
6
|
+
import { ProcedureAPI } from "@olenbetong/appframe-data";
|
|
7
|
+
|
|
8
|
+
export const procDeleteAttachment = new ProcedureAPI({
|
|
9
|
+
procedureId: "astp_Production_ElementsDamages_DeleteAttachments",
|
|
10
|
+
parameters: [
|
|
11
|
+
{
|
|
12
|
+
name: "PrimKeyList",
|
|
13
|
+
type: "string",
|
|
14
|
+
hasDefault: false,
|
|
15
|
+
required: false,
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
timeout: 30000,
|
|
19
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
auto-generated by CLI:
|
|
3
|
+
af resources generate astp_Production_ElementsDamages_Delete \
|
|
4
|
+
--id procDeleteDamage
|
|
5
|
+
*/
|
|
6
|
+
import { ProcedureAPI } from "@olenbetong/appframe-data";
|
|
7
|
+
|
|
8
|
+
export const procDeleteDamage = new ProcedureAPI({
|
|
9
|
+
procedureId: "astp_Production_ElementsDamages_Delete",
|
|
10
|
+
parameters: [
|
|
11
|
+
{
|
|
12
|
+
name: "ID",
|
|
13
|
+
type: "number",
|
|
14
|
+
hasDefault: false,
|
|
15
|
+
required: false,
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
timeout: 30000,
|
|
19
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
auto-generated by CLI:
|
|
3
|
+
af resources generate astp_Production_ElementsDamages_RemoveFix \
|
|
4
|
+
--id procRemoveDamageFix
|
|
5
|
+
*/
|
|
6
|
+
import { ProcedureAPI } from "@olenbetong/appframe-data";
|
|
7
|
+
|
|
8
|
+
export const procRemoveDamageFix = new ProcedureAPI({
|
|
9
|
+
procedureId: "astp_Production_ElementsDamages_RemoveFix",
|
|
10
|
+
parameters: [
|
|
11
|
+
{
|
|
12
|
+
name: "ID",
|
|
13
|
+
type: "number",
|
|
14
|
+
hasDefault: false,
|
|
15
|
+
required: false,
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
timeout: 30000,
|
|
19
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
auto-generated by CLI:
|
|
3
|
+
af resources generate astp_Production_ElementsDamages_RestoreAttachments \
|
|
4
|
+
--id procRestoreAttachments
|
|
5
|
+
*/
|
|
6
|
+
import { ProcedureAPI } from "@olenbetong/appframe-data";
|
|
7
|
+
|
|
8
|
+
export const procRestoreAttachments = new ProcedureAPI({
|
|
9
|
+
procedureId: "astp_Production_ElementsDamages_RestoreAttachments",
|
|
10
|
+
parameters: [
|
|
11
|
+
{
|
|
12
|
+
name: "PrimKeyList",
|
|
13
|
+
type: "string",
|
|
14
|
+
hasDefault: false,
|
|
15
|
+
required: false,
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
timeout: 30000,
|
|
19
|
+
});
|
package/src/elements/index.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export * from "./data/index.js";
|
|
2
|
-
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
2
|
+
export * from "./ElementDamage/DescriptionInput.js";
|
|
3
|
+
export * from "./ElementDamage/DuplicateDamage/index.js";
|
|
4
|
+
export * from "./ElementDamage/ElementNumberTextField.js";
|
|
5
|
+
export * from "./ElementDamage/HiddenDamageFields.js";
|
|
6
|
+
export * from "./ElementDamage/RegisterFix.js";
|
|
7
|
+
export * from "./ElementDamage/SubmitButtons.js";
|
|
8
|
+
export * from "./ElementLookup.js";
|
|
9
|
+
export * from "./ElementLookupDialog/index.js";
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { Checkbox, type CheckboxProps } from "./components/Checkbox/index.js";
|
|
2
2
|
export { CardColumn, CardDetail, CardLabel, CardStep, CardStepList, ColorCard } from "./components/ColorCard/index.js";
|
|
3
3
|
export { DateNavigator } from "./components/DateNavigator/index.js";
|
|
4
|
+
export * from "./components/FilePond.js";
|
|
4
5
|
export { Card, LinkedList, LinkedListItem } from "./components/LinkedCardList/index.js";
|
|
5
6
|
export {
|
|
6
7
|
BannerImage as PageBannerImage,
|
|
@@ -20,5 +21,4 @@ export { Sidebar, type SidebarProps } from "./components/Sidebar/index.js";
|
|
|
20
21
|
export { Spinner, type SpinnerProps } from "./components/Spinner/index.js";
|
|
21
22
|
export { SplitContainer, type SplitContainerProps } from "./components/SplitContainer/index.js";
|
|
22
23
|
export { ValueToggleGroup, type ValueToggleGroupProps } from "./components/ValueToggleGroup/index.js";
|
|
23
|
-
export { ElementDamageForm } from "./elements/ElementDamageForm/index.js";
|
|
24
24
|
export { useTranslation } from "./useTranslation/index.js";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { DamagesRecord, ElementsRecord, ProjectsRecord } from "../data";
|
|
2
|
-
type DamageFormFieldsProps = {
|
|
3
|
-
editRecord: DamagesRecord | null;
|
|
4
|
-
project: Partial<ProjectsRecord> | null;
|
|
5
|
-
elementRecord: ElementsRecord[];
|
|
6
|
-
elementID: string;
|
|
7
|
-
attachmentPrimKeys: string[];
|
|
8
|
-
handleAddElement: () => void;
|
|
9
|
-
formName: string;
|
|
10
|
-
};
|
|
11
|
-
export declare function DamageFormFields({ editRecord, project, elementRecord, elementID, attachmentPrimKeys, handleAddElement, formName, }: DamageFormFieldsProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
export {};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import AddAPhotoIcon from "@mui/icons-material/AddAPhoto";
|
|
3
|
-
import { Autocomplete, Box, Button, TextField } from "@mui/material";
|
|
4
|
-
import { getLocalizedString } from "@olenbetong/appframe-core";
|
|
5
|
-
import { useState } from "react";
|
|
6
|
-
export function DamageFormFields({ editRecord, project, elementRecord, elementID, attachmentPrimKeys, handleAddElement, formName, }) {
|
|
7
|
-
let [description, setDescription] = useState();
|
|
8
|
-
function handleCopyPreviousDamage() {
|
|
9
|
-
const form = document.forms.namedItem(formName);
|
|
10
|
-
if (form) {
|
|
11
|
-
form["Cause"].value = localStorage.getItem("ElementDamage_Cause")?.toString();
|
|
12
|
-
form["Action"].value = localStorage.getItem("ElementDamage_Action")?.toString();
|
|
13
|
-
}
|
|
14
|
-
setDescription(localStorage.getItem("ElementDamage_Description")?.toString());
|
|
15
|
-
}
|
|
16
|
-
return (_jsxs(_Fragment, { children: [_jsx("input", { type: "hidden", name: "ID", value: editRecord?.ID ?? "" }), _jsx("input", { type: "hidden", name: "PrimKey", value: editRecord?.PrimKey ?? "" }), _jsx("input", { type: "hidden", name: "ProjectID", value: project?.ProjectID ?? "" }), _jsx("input", { type: "hidden", name: "Domain", value: project?.Domain ?? "" }), _jsx("input", { type: "hidden", name: "ElementRef", value: elementRecord[0]?.PrimKey ?? "" }), _jsx("input", { type: "hidden", name: "AttachmentPrimkeys", value: attachmentPrimKeys }), _jsx(TextField, { name: "Date", type: "date", defaultValue: (editRecord?.Date ?? new Date()).toISOString().split("T")[0], id: "NewElementDamage_Date", label: getLocalizedString("Date"), fullWidth: true, required: true, slotProps: { inputLabel: { shrink: true } } }), _jsxs(Box, { display: "flex", gap: 2, justifyContent: "flex-end", children: [_jsx(Button, { variant: "contained", onClick: () => handleCopyPreviousDamage(), disabled: !localStorage.getItem("ElementDamage_Description"), children: getLocalizedString("Copy previous damage") }), _jsx(Button, { onClick: handleAddElement, endIcon: _jsx(AddAPhotoIcon, {}), variant: "contained", children: getLocalizedString("Add element") })] }), _jsx(TextField, { id: "NewElementDamage_Project", value: project ? `${project?.ProjectID}: ${project?.ProjectName}` : "", label: getLocalizedString("Project"), fullWidth: true, required: true, autoComplete: "off", slotProps: {
|
|
17
|
-
htmlInput: { readOnly: true },
|
|
18
|
-
} }), _jsx(TextField, { name: "ElementID", id: "NewElementDamage_ElementID", value: elementID, label: getLocalizedString("Element ID"), fullWidth: true, autoComplete: "off", slotProps: {
|
|
19
|
-
htmlInput: { readOnly: true },
|
|
20
|
-
} }), _jsx(TextField, { name: "ElementNumber", id: "NewElementDamage_ElementNr", defaultValue: editRecord?.ElementNumber ?? "", label: getLocalizedString("Element number"), fullWidth: true, autoComplete: "off", disabled: !!elementID }), _jsx(Autocomplete, { value: description ?? editRecord?.Description ?? "", options: [
|
|
21
|
-
getLocalizedString("Tear in element"),
|
|
22
|
-
getLocalizedString("Damage around lifting anchor"),
|
|
23
|
-
getLocalizedString("Damage on underside"),
|
|
24
|
-
], freeSolo: true, renderInput: (params) => (_jsx(TextField, { name: "Description", required: true, ...params, label: getLocalizedString("Description") })) }), _jsx(TextField, { name: "Cause", id: "NewElementDamage_Cause", defaultValue: editRecord?.Cause ?? "", label: getLocalizedString("Cause"), fullWidth: true, slotProps: {
|
|
25
|
-
inputLabel: {
|
|
26
|
-
shrink: (() => {
|
|
27
|
-
const form = document.forms.namedItem(formName);
|
|
28
|
-
return form?.["Cause"]?.value ? true : undefined;
|
|
29
|
-
})(),
|
|
30
|
-
},
|
|
31
|
-
} }), _jsx(TextField, { name: "Action", id: "NewElementDamage_Action", defaultValue: editRecord?.Action ?? "", label: getLocalizedString("Action"), fullWidth: true, slotProps: {
|
|
32
|
-
inputLabel: {
|
|
33
|
-
shrink: (() => {
|
|
34
|
-
const form = document.forms.namedItem(formName);
|
|
35
|
-
return form?.["Action"]?.value ? true : undefined;
|
|
36
|
-
})(),
|
|
37
|
-
},
|
|
38
|
-
} })] }));
|
|
39
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import Add from "@mui/icons-material/Add";
|
|
3
|
-
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, useMediaQuery } from "@mui/material";
|
|
4
|
-
import { getLocalizedString } from "@olenbetong/appframe-core";
|
|
5
|
-
import { theme } from "@olenbetong/appframe-mui";
|
|
6
|
-
import { ElementDamagesHeader, ElementDamagesItem } from "./DesktopView";
|
|
7
|
-
import { DuplicatePhoneViewItem } from "./PhoneView";
|
|
8
|
-
export function DuplicateElementDamageDialog({ open, onClose, record, fallBack }) {
|
|
9
|
-
let matches = useMediaQuery(theme.breakpoints.up("lg"));
|
|
10
|
-
return (_jsxs(Dialog, { open: open, onClose: () => onClose(false), fullWidth: true, fullScreen: !matches, children: [_jsx(DialogTitle, { sx: { backgroundColor: "#e9ebee" }, children: getLocalizedString("This element has one or more unfixed registered damage") }), _jsx(DialogContent, { sx: { backgroundColor: "#e9ebee" }, children: _jsx(Grid, { container: true, children: matches ? (_jsxs(_Fragment, { children: [_jsx(ElementDamagesHeader, {}), record.map((record) => (_jsx(ElementDamagesItem, { record: record }, record.PrimKey)))] })) : (_jsx("div", { className: "flow", style: { width: "100%" }, children: record.map((record) => (_jsx(DuplicatePhoneViewItem, { record: record }, record.PrimKey))) })) }) }), _jsxs(DialogActions, { sx: { backgroundColor: "#e9ebee" }, children: [_jsx(Button, { onClick: fallBack, children: getLocalizedString("Cancel") }), _jsx(Button, { startIcon: _jsx(Add, {}), variant: "contained", type: "submit", children: getLocalizedString("Register damage anyway") })] })] }));
|
|
11
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import "./index.css";
|
|
2
|
-
import { type DataObject } from "@olenbetong/appframe-data";
|
|
3
|
-
import { type AttachmentsRecord, type CurrentAttachmentRecord, type DamagesRecord, type ElementsRecord } from "../data";
|
|
4
|
-
type ElementDamageFormProps = {
|
|
5
|
-
editRecord: DamagesRecord | null;
|
|
6
|
-
elementsDataObject: DataObject<ElementsRecord>;
|
|
7
|
-
damagesDataObject: DataObject<DamagesRecord>;
|
|
8
|
-
attachmentsDataObject: DataObject<AttachmentsRecord>;
|
|
9
|
-
currentAttachmentDataObject: DataObject<CurrentAttachmentRecord>;
|
|
10
|
-
fallBack: () => void;
|
|
11
|
-
};
|
|
12
|
-
export declare function ElementDamageForm({ editRecord, elementsDataObject, damagesDataObject, attachmentsDataObject, currentAttachmentDataObject, fallBack, }: ElementDamageFormProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export {};
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import "./index.css";
|
|
3
|
-
import Add from "@mui/icons-material/Add";
|
|
4
|
-
import CheckIcon from "@mui/icons-material/Check";
|
|
5
|
-
import { Box, Button, Checkbox, FormControlLabel, Typography } from "@mui/material";
|
|
6
|
-
import Alert from "@mui/material/Alert";
|
|
7
|
-
import { getLocalizedString, localize } from "@olenbetong/appframe-core";
|
|
8
|
-
import { formDataToDataObjectRecord } from "@olenbetong/appframe-data";
|
|
9
|
-
import { PageContainer, PageTitle } from "@olenbetong/appframe-mui";
|
|
10
|
-
import { useDataWithFilter } from "@olenbetong/appframe-react";
|
|
11
|
-
import { useId, useRef, useState } from "react";
|
|
12
|
-
import { FilePond } from "../../components/FilePond";
|
|
13
|
-
import { AddElementDialog } from "../AddElementDialog";
|
|
14
|
-
import { dsDamagesDuplicateCheck, procApproveDamage, } from "../data";
|
|
15
|
-
import { DamageFormFields } from "./DamageFormFields";
|
|
16
|
-
import { DuplicateElementDamageDialog } from "./DuplicateDamage/DuplicateElementDamageDialog";
|
|
17
|
-
const formatter = new Intl.DateTimeFormat(af.userSession.culture, {
|
|
18
|
-
day: "numeric",
|
|
19
|
-
month: "long",
|
|
20
|
-
year: "numeric",
|
|
21
|
-
hour: "2-digit",
|
|
22
|
-
minute: "2-digit",
|
|
23
|
-
timeZone: "UTC",
|
|
24
|
-
});
|
|
25
|
-
function deleteAttachments(dataObject, primKeyArray) {
|
|
26
|
-
for (const primKey of primKeyArray) {
|
|
27
|
-
const index = dataObject.findIndex((record) => record.PrimKey === primKey);
|
|
28
|
-
if (index > -1) {
|
|
29
|
-
dataObject.deleteRow(index);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function RegisterFix({ editRecord, damageDataObject, fixedThisSession, setFixedThisSession }) {
|
|
34
|
-
const [loading, setLoading] = useState(false);
|
|
35
|
-
async function handleRegisterFix() {
|
|
36
|
-
try {
|
|
37
|
-
if (confirm(getLocalizedString("Are you sure you want to register a fix for this damage?"))) {
|
|
38
|
-
setLoading(true);
|
|
39
|
-
await procApproveDamage.execute({ ID: editRecord?.ID });
|
|
40
|
-
await damageDataObject.refreshCurrentRow();
|
|
41
|
-
setLoading(false);
|
|
42
|
-
setFixedThisSession(true);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
alert(error.message);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return (_jsxs(_Fragment, { children: [editRecord ? (_jsx(Box, { display: "flex", justifyContent: "flex-end", children: _jsx(Button, { loading: loading, loadingPosition: "end", endIcon: _jsx(CheckIcon, {}), onClick: handleRegisterFix, disabled: !!editRecord.RegisteredFix || fixedThisSession, variant: "contained", children: getLocalizedString("Register fix") }) })) : (_jsx(FormControlLabel, { control: _jsx(Checkbox, {}), label: getLocalizedString("Register fixed"), name: "RegisteredFix", id: "NewElementDamage_RegisteredFix" })), editRecord?.RegisteredFix && (_jsx(Typography, { mb: 1.5, color: "text.secondary", children: localize `Registered fix by ${editRecord.FullName ?? editRecord.RegisteredFixBy} on the ${formatter.format(editRecord.RegisteredFix)}` }))] }));
|
|
50
|
-
}
|
|
51
|
-
export function ElementDamageForm({ editRecord, elementsDataObject, damagesDataObject, attachmentsDataObject, currentAttachmentDataObject, fallBack, }) {
|
|
52
|
-
let formName = useId();
|
|
53
|
-
let formRef = useRef(null);
|
|
54
|
-
// Data object values
|
|
55
|
-
let [project, setProject] = useState(editRecord
|
|
56
|
-
? { ProjectID: editRecord.ProjectID, ProjectName: editRecord.ProjectName, Domain: editRecord.Domain }
|
|
57
|
-
: null);
|
|
58
|
-
let [elementID, setElementID] = useState(editRecord?.ElementID ?? "");
|
|
59
|
-
let [attachmentPrimKeys, setAttachmentPrimKeys] = useState([]);
|
|
60
|
-
let [duplicateRecords, setDuplicateRecords] = useState([]);
|
|
61
|
-
let damagesDuplicateRecord = useDataWithFilter(dsDamagesDuplicateCheck, "1=1", "whereClause");
|
|
62
|
-
let elementRecord = useDataWithFilter(elementsDataObject, `ProjectID = '${project?.ProjectID}' AND ElementID = '${elementID}'`, "whereClause");
|
|
63
|
-
// Event values
|
|
64
|
-
let [addElementOpen, setAddElementOpen] = useState(!editRecord); // Opens by default when form is new
|
|
65
|
-
let [loading, setLoading] = useState(false);
|
|
66
|
-
let [uploadingFile, setUploadingFile] = useState(false);
|
|
67
|
-
let [fixedThisSession, setFixedThisSession] = useState(false); // Element is registered fixed during this editing session
|
|
68
|
-
let [duplicateDialog, setDuplicateDialog] = useState(false);
|
|
69
|
-
// Error values
|
|
70
|
-
let [error, setError] = useState(null);
|
|
71
|
-
async function handleAddElement(addElement) {
|
|
72
|
-
setProject({
|
|
73
|
-
ProjectID: addElement.element.ProjectID,
|
|
74
|
-
ProjectName: addElement.element.ProjectName,
|
|
75
|
-
Domain: addElement.element.ProjectDomain,
|
|
76
|
-
});
|
|
77
|
-
setElementID(addElement.element.ElementID);
|
|
78
|
-
}
|
|
79
|
-
async function handleDelete(row) {
|
|
80
|
-
try {
|
|
81
|
-
let index = damagesDataObject.findIndex((r) => r.PrimKey === row.PrimKey);
|
|
82
|
-
if (index >= 0 && confirm(getLocalizedString("Are you sure you want to delete this item?"))) {
|
|
83
|
-
let primKeyArray = currentAttachmentDataObject.map((record) => record.PrimKey);
|
|
84
|
-
deleteAttachments(currentAttachmentDataObject, primKeyArray);
|
|
85
|
-
await damagesDataObject.deleteRow(index);
|
|
86
|
-
}
|
|
87
|
-
fallBack();
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
setError(error.message);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
async function handleCancel() {
|
|
94
|
-
// Remove the registered fix if it was registered this session
|
|
95
|
-
if (editRecord && fixedThisSession) {
|
|
96
|
-
damagesDataObject.setCurrentIndex(damagesDataObject.findIndex((record) => record.ID === editRecord.ID));
|
|
97
|
-
await damagesDataObject.refreshCurrentRow();
|
|
98
|
-
await damagesDataObject.save({
|
|
99
|
-
RegisteredFix: null,
|
|
100
|
-
RegisteredFixBy: null,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
// Remove attachments if they are not saved
|
|
104
|
-
if (attachmentPrimKeys) {
|
|
105
|
-
await attachmentsDataObject.refreshDataSource();
|
|
106
|
-
const primKeyArray = attachmentPrimKeys.toString().split(",");
|
|
107
|
-
deleteAttachments(attachmentsDataObject, primKeyArray);
|
|
108
|
-
}
|
|
109
|
-
fallBack();
|
|
110
|
-
}
|
|
111
|
-
// Returning true means a duplicate is found and confirmation dialog will open
|
|
112
|
-
function isDuplicate() {
|
|
113
|
-
// If we are editing a record, we don't need to check for duplicates
|
|
114
|
-
if (editRecord) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
const filteredRecord = damagesDuplicateRecord.filter((record) => record.ElementID === elementID && record.ProjectID === project?.ProjectID && !record.RegisteredFix);
|
|
118
|
-
if (filteredRecord.length > 0) {
|
|
119
|
-
setDuplicateRecords(filteredRecord);
|
|
120
|
-
setDuplicateDialog(true);
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
async function handleSubmit(event) {
|
|
126
|
-
event.preventDefault();
|
|
127
|
-
setLoading(true);
|
|
128
|
-
if (duplicateRecords.length <= 0) {
|
|
129
|
-
if (isDuplicate()) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
let formData = new FormData(event.currentTarget);
|
|
135
|
-
let attachmentPrimKeys = formData.get("AttachmentPrimkeys");
|
|
136
|
-
let elementID = formData.get("ElementID");
|
|
137
|
-
let elementNumber = formData.get("ElementNumber");
|
|
138
|
-
formData.delete("File");
|
|
139
|
-
formData.delete("AttachmentPrimkeys");
|
|
140
|
-
if (!elementID && !elementNumber) {
|
|
141
|
-
setError(getLocalizedString("Please fill in either Element ID or Element Number"));
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
localStorage.setItem("ElementDamage_Description", formData.get("Description")?.toString() ?? "");
|
|
145
|
-
localStorage.setItem("ElementDamage_Cause", formData.get("Cause")?.toString() ?? "");
|
|
146
|
-
localStorage.setItem("ElementDamage_Action", formData.get("Action")?.toString() ?? "");
|
|
147
|
-
let record = Object.assign({ ...formDataToDataObjectRecord(formData, damagesDataObject) });
|
|
148
|
-
if (formData.get("ID")) {
|
|
149
|
-
record.ID = undefined;
|
|
150
|
-
await damagesDataObject.dataHandler.update(record);
|
|
151
|
-
submitReturn();
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
damagesDataObject.setCurrentIndex(-1);
|
|
156
|
-
// If the RegisteredFix Control Label is checked then it will exist in the record object
|
|
157
|
-
let newJob;
|
|
158
|
-
if ("RegisteredFix" in record) {
|
|
159
|
-
newJob = await damagesDataObject.save({
|
|
160
|
-
...record,
|
|
161
|
-
RegisteredFix: new Date(),
|
|
162
|
-
RegisteredFixBy: af.userSession.login,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
newJob = await damagesDataObject.save(record);
|
|
167
|
-
}
|
|
168
|
-
await new Promise((res) => setTimeout(res, 1500));
|
|
169
|
-
if (newJob) {
|
|
170
|
-
// Update ElementDamageID in attachments table
|
|
171
|
-
if (attachmentPrimKeys) {
|
|
172
|
-
await attachmentsDataObject.refreshDataSource();
|
|
173
|
-
const primKeyArray = attachmentPrimKeys.toString().split(",");
|
|
174
|
-
for (const primKey of primKeyArray) {
|
|
175
|
-
attachmentsDataObject.setCurrentIndex(attachmentsDataObject.findIndex((record) => record.PrimKey === primKey));
|
|
176
|
-
if (attachmentsDataObject.getCurrentIndex() > -1) {
|
|
177
|
-
await attachmentsDataObject.save({
|
|
178
|
-
DamageID: newJob.ID,
|
|
179
|
-
ElementRef: newJob.ElementRef,
|
|
180
|
-
ProjectID: newJob.ProjectID,
|
|
181
|
-
ElementID: newJob.ElementID,
|
|
182
|
-
ElementNumber: newJob.ElementNumber,
|
|
183
|
-
Domain: formData.get("Domain")?.toString() ?? af.userSession.domain,
|
|
184
|
-
Damage: true,
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
submitReturn();
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
setError(getLocalizedString("No job returned when creating new job."));
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
submitReturn(error.message);
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
function submitReturn(error) {
|
|
204
|
-
if (!error) {
|
|
205
|
-
fallBack();
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
setError(error);
|
|
209
|
-
}
|
|
210
|
-
setLoading(false);
|
|
211
|
-
}
|
|
212
|
-
return (_jsxs(PageContainer, { maxWidth: "sm", children: [_jsx(PageTitle, { variant: "h1", gutterBottom: true, children: getLocalizedString("New element damage") }), _jsx(AddElementDialog, { open: addElementOpen, mode: "single", onClose: () => setAddElementOpen(false), onAdd: handleAddElement }), _jsxs("form", { name: formName, ref: formRef, method: "POST", onSubmit: handleSubmit, className: "flow", children: [_jsx(DuplicateElementDamageDialog, { open: duplicateDialog, onClose: setDuplicateDialog, record: duplicateRecords, fallBack: fallBack }), error && (_jsx(Alert, { severity: "error", variant: "filled", children: error })), _jsx(DamageFormFields, { editRecord: editRecord, project: project, elementRecord: elementRecord, attachmentPrimKeys: [], elementID: elementID, formName: formName, handleAddElement: () => setAddElementOpen(true) }), _jsxs(Box, { display: "flex", flexDirection: "column", children: [_jsx(Typography, { variant: "h3", children: getLocalizedString("Pictures") }), _jsx(FilePond, { multiple: true, dataObject: currentAttachmentDataObject, fields: {
|
|
213
|
-
DamageID: editRecord?.ID,
|
|
214
|
-
ElementID: editRecord?.ElementID,
|
|
215
|
-
ProjectID: editRecord?.ProjectID,
|
|
216
|
-
ElementRef: editRecord?.ElementRef,
|
|
217
|
-
Damage: true,
|
|
218
|
-
}, onFileStart: () => editRecord ?? setUploadingFile(true), onFileProcessed: (_error, file) => setAttachmentPrimKeys([...attachmentPrimKeys, file.serverId]), onFilesProcessed: () => setUploadingFile(false), onError: () => setUploadingFile(false) })] }), _jsx(RegisterFix, { editRecord: editRecord, damageDataObject: damagesDataObject, fixedThisSession: fixedThisSession, setFixedThisSession: setFixedThisSession }), _jsxs(Box, { display: "flex", flexWrap: "wrap", gap: 2, justifyContent: "flex-end", children: [editRecord && _jsx(Button, { onClick: () => handleDelete(editRecord), children: getLocalizedString("Delete") }), _jsx(Button, { onClick: handleCancel, children: getLocalizedString("Cancel") }), _jsx(Button, { loading: loading || uploadingFile, loadingPosition: "start", startIcon: _jsx(Add, {}), type: "submit", variant: "contained", children: editRecord ? getLocalizedString("Save changes") : getLocalizedString("Register damage") })] })] })] }));
|
|
219
|
-
}
|