Skip to content

Commit a1b790a

Browse files
authored
feat(bulk-import): add fields for annotations, labels and spec input (janus-idp#1950)
Signed-off-by: Yi Cai <[email protected]>
1 parent 00fbc7d commit a1b790a

File tree

6 files changed

+346
-75
lines changed

6 files changed

+346
-75
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import React, { useState } from 'react';
2+
3+
import { FormHelperText, TextField } from '@material-ui/core';
4+
5+
import { PullRequestPreview, PullRequestPreviewData } from '../../types';
6+
7+
interface KeyValueTextFieldProps {
8+
repoName: string;
9+
label: string;
10+
name: string;
11+
value: string;
12+
onChange: (
13+
event: React.FocusEvent<HTMLTextAreaElement | HTMLInputElement>,
14+
) => void;
15+
formErrors: PullRequestPreviewData;
16+
setFormErrors: (value: React.SetStateAction<PullRequestPreviewData>) => void;
17+
}
18+
19+
const validateKeyValuePairs = (value: string): string | null => {
20+
const keyValuePairs = value.split(';').map(pair => pair.trim());
21+
for (const pair of keyValuePairs) {
22+
if (pair) {
23+
const [key, val] = pair.split(':').map(part => part.trim());
24+
if (!key || !val) {
25+
return 'Each entry must have a key and a value separated by a colon.';
26+
}
27+
}
28+
}
29+
return null;
30+
};
31+
32+
const KeyValueTextField: React.FC<KeyValueTextFieldProps> = ({
33+
repoName,
34+
label,
35+
name,
36+
value,
37+
onChange,
38+
setFormErrors,
39+
formErrors,
40+
}) => {
41+
const [error, setError] = useState<string | null>(null);
42+
const fieldName = name.split('.').pop() ?? '';
43+
44+
const removeError = () => {
45+
const err = { ...formErrors };
46+
if (err[repoName]) {
47+
delete err[repoName][fieldName as keyof PullRequestPreview];
48+
}
49+
setFormErrors(err);
50+
};
51+
52+
const getUpdatedFormError = (
53+
validationError: string,
54+
): PullRequestPreviewData => {
55+
return {
56+
...formErrors,
57+
[repoName]: {
58+
...formErrors[repoName],
59+
[fieldName]: validationError,
60+
},
61+
};
62+
};
63+
64+
const handleChange = (
65+
event: React.FocusEvent<HTMLTextAreaElement | HTMLInputElement, Element>,
66+
) => {
67+
const validationError = validateKeyValuePairs(event.target.value);
68+
if (validationError) {
69+
setError(validationError);
70+
setFormErrors(getUpdatedFormError(validationError));
71+
} else {
72+
setError(null);
73+
removeError();
74+
}
75+
onChange(event);
76+
};
77+
78+
return (
79+
<div>
80+
<TextField
81+
multiline
82+
label={label}
83+
placeholder="key1: value2; key2: value2"
84+
variant="outlined"
85+
margin="normal"
86+
fullWidth
87+
name={name}
88+
value={value}
89+
onChange={handleChange}
90+
error={!!error}
91+
helperText={error}
92+
/>
93+
<FormHelperText style={{ marginLeft: '0.8rem' }}>
94+
Use semicolon to separate {label.toLowerCase()}
95+
</FormHelperText>
96+
</div>
97+
);
98+
};
99+
100+
export default KeyValueTextField;

plugins/bulk-import/src/components/PreviewFile/PreviewFile.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,14 @@ export const PreviewFileSidebar = ({
145145
{repositoryType === RepositorySelection.Repository ? (
146146
<>
147147
<Typography variant="h5">
148-
{`${data.orgName || data.organizationUrl}/${data.repoName}`}
148+
{`${data.orgName ?? data.organizationUrl}/${data.repoName}`}
149149
</Typography>
150-
<Link to={data.repoUrl || ''}>{data.repoUrl}</Link>
150+
<Link to={data.repoUrl ?? ''}>{data.repoUrl}</Link>
151151
</>
152152
) : (
153153
<>
154154
<Typography variant="h5">{`${data.orgName}`}</Typography>
155-
<Link to={data.repoUrl || ''}>{data.organizationUrl}</Link>
155+
<Link to={data.repoUrl ?? ''}>{data.organizationUrl}</Link>
156156
</>
157157
)}
158158
</div>
@@ -171,7 +171,7 @@ export const PreviewFileSidebar = ({
171171
{repositoryType === RepositorySelection.Repository &&
172172
data.catalogInfoYaml?.prTemplate && (
173173
<PreviewPullRequest
174-
repoName={data.repoName || ''}
174+
repoName={data.repoName ?? ''}
175175
pullRequest={pullRequest}
176176
setPullRequest={setPullRequest}
177177
formErrors={formErrors as PullRequestPreviewData}

0 commit comments

Comments
 (0)