forked from kyma-project/btp-manager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCreateBindingForm.tsx
160 lines (135 loc) · 4.4 KB
/
CreateBindingForm.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import * as ui5 from "@ui5/webcomponents-react";
import Ok from "../shared/validator";
import {
ApiError,
ServiceInstanceBinding,
} from "../shared/models";
import { useEffect, useState } from "react";
import api from "../shared/api";
import axios from "axios";
import StatusMessage from "./StatusMessage";
import '@ui5/webcomponents/dist/features/InputElementsFormSupport.js';
function CreateBindingForm(props: any) {
const [loading, setLoading] = useState(true);
const [error, setError] = useState<ApiError>();
const [createdBinding, setCreatedBinding] = useState<ServiceInstanceBinding>(new ServiceInstanceBinding());
const [success, setSuccess] = useState("");
const handleCreate = (e: any): boolean => {
e.preventDefault();
e.stopPropagation();
if (e.nativeEvent.submitter.localName === "ui5-multi-input") {
e.preventDefault()
return false;
}
createdBinding.service_instance_id = props.instanceId ?? ""
setLoading(true)
axios
.post<ServiceInstanceBinding>(api("service-bindings"), {
name: createdBinding.name,
service_instance_id: createdBinding.service_instance_id,
secret_name: createdBinding.secret_name,
secret_namespace: createdBinding.secret_namespace
}, {
params:
{
secret_name: props.secret!!.name,
secret_namespace: props.secret!!.namespace
}
})
.then((response) => {
// propagate the created binding
props.onCreate(response.data);
// reset binding
const binding = new ServiceInstanceBinding()
binding.name = props.instanceName
binding.secret_name = props.instanceName
binding.secret_namespace = "default"
setSuccess("Item with id " + response.data.name + " created.");
setCreatedBinding(binding);
setError(undefined);
setLoading(false);
})
.catch((error: ApiError) => {
setLoading(false);
setError(error);
setSuccess("");
});
e.preventDefault();
e.stopPropagation();
return false;
}
useEffect(() => {
if (!Ok(props.instanceId)) {
return;
}
if (!Ok(props.onCreate)) {
return;
}
if (!Ok(props.secret) || !Ok(props.secret.name) || !Ok(props.secret.namespace)) {
return;
}
setLoading(true)
setLoading(false)
setError(undefined)
createdBinding.name = props.instanceName
createdBinding.secret_name = props.instanceName
createdBinding.secret_namespace = "default"
setCreatedBinding(createdBinding)
}, [createdBinding, props.instanceId, props.instanceName, props.onCreate, props.secret]);
const renderData = () => {
if (loading) {
return <ui5.BusyIndicator
active
delay={1}
size="Medium"
/>
}
return (
<ui5.Form
onSubmit={handleCreate}>
<ui5.FormItem>
<StatusMessage error={error ?? undefined} success={success} />
</ui5.FormItem>
<ui5.FormItem label={<ui5.Label required>Name</ui5.Label>}>
<ui5.Input
style={{ width: "100%" }}
required
value={createdBinding?.name ?? ''}
onChange={(e) => {
createdBinding!!.name = e.target.value
setCreatedBinding(createdBinding)
}}
/>
</ui5.FormItem>
<ui5.FormItem label={<ui5.Label required>Secret Name</ui5.Label>}>
<ui5.Input
style={{ width: "100%" }}
required
value={createdBinding?.secret_name ?? ''}
onChange={(e) => { // defaulted to service instance name
createdBinding!!.secret_name = e.target.value
setCreatedBinding(createdBinding)
}}
/>
</ui5.FormItem>
<ui5.FormItem label={<ui5.Label required>Secret Namespace</ui5.Label>}>
<ui5.Input
style={{ width: "100%" }}
required // default to "default"
value={createdBinding?.secret_namespace ?? ''}
onChange={(e) => {
createdBinding!!.secret_namespace = e.target.value
setCreatedBinding(createdBinding)
}}
/>
</ui5.FormItem>
<ui5.FormItem>
<ui5.Button type={ui5.ButtonType.Submit}>Submit</ui5.Button>
</ui5.FormItem>
</ui5.Form>
)
}
// @ts-ignore
return <>{renderData()}</>;
}
export default CreateBindingForm;