forked from PaloAltoNetworks/docusaurus-openapi-docs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.tsx
More file actions
74 lines (61 loc) · 1.87 KB
/
index.tsx
File metadata and controls
74 lines (61 loc) · 1.87 KB
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
/* ============================================================================
* Copyright (c) Palo Alto Networks
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
* ========================================================================== */
import React, { useState } from "react";
import FormFileUpload from "@theme/ApiExplorer/FormFileUpload";
import { useTypedDispatch } from "@theme/ApiItem/hooks";
import { FileContent, setFileArrayFormBody } from "../slice";
interface FileArrayFormItemProps {
id: string;
description: string | undefined;
}
export default function FileArrayFormBodyItem({
id,
description,
}: FileArrayFormItemProps): React.JSX.Element {
const dispatch = useTypedDispatch();
const [fileItems, setFileItems] = useState<
Map<number, FileContent["value"] | undefined>
>(new Map([[0, undefined]]));
const handleFileChange = (index: number, file: any) => {
const newItems = new Map(fileItems);
if (file === undefined) {
newItems.delete(index);
setFileItems(newItems);
dispatch(
setFileArrayFormBody({
key: id,
value: [...newItems.values()].filter((item) => item !== undefined),
})
);
return;
}
newItems.set(index, {
src: `/path/to/${file.name}`,
content: file,
});
newItems.set(index + 1, undefined);
setFileItems(newItems);
dispatch(
setFileArrayFormBody({
key: id,
value: [...newItems.values()].filter((item) => item !== undefined),
})
);
};
return (
<div>
{[...fileItems.keys()].map((index) => (
<div key={index}>
<FormFileUpload
placeholder={description || id}
onChange={(file: any) => handleFileChange(index, file)}
/>
</div>
))}
</div>
);
}