Skip to content

Commit 6d922a7

Browse files
committed
Show normal upload box when using upload button; closes pterodactyl#2294
1 parent 6139b4e commit 6d922a7

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

resources/scripts/components/server/files/UploadButton.tsx

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import axios from 'axios';
22
import getFileUploadUrl from '@/api/server/files/getFileUploadUrl';
33
import tw from 'twin.macro';
44
import Button from '@/components/elements/Button';
5-
import React, { useEffect, useState } from 'react';
5+
import React, { useEffect, useRef, useState } from 'react';
66
import styled from 'styled-components/macro';
77
import { ModalMask } from '@/components/elements/Modal';
88
import Fade from '@/components/elements/Fade';
@@ -18,6 +18,7 @@ const InnerContainer = styled.div`
1818
`;
1919

2020
export default () => {
21+
const fileUploadInput = useRef<HTMLInputElement>(null);
2122
const uuid = ServerContext.useStoreState(state => state.server.data!.uuid);
2223
const [ visible, setVisible ] = useState(false);
2324
const [ loading, setLoading ] = useState(false);
@@ -46,17 +47,9 @@ export default () => {
4647
};
4748
}, [ visible ]);
4849

49-
const onFileDrop = (e: React.DragEvent<HTMLDivElement>) => {
50-
e.preventDefault();
51-
e.stopPropagation();
52-
53-
setVisible(false);
54-
if (e.dataTransfer === undefined || e.dataTransfer === null) {
55-
return;
56-
}
57-
50+
const onFileSubmission = (files: FileList) => {
5851
const form = new FormData();
59-
Array.from(e.dataTransfer.files).forEach(file => form.append('files', file));
52+
Array.from(files).forEach(file => form.append('files', file));
6053

6154
setLoading(true);
6255
clearFlashes('files');
@@ -84,7 +77,21 @@ export default () => {
8477
key={'upload_modal_mask'}
8578
unmountOnExit
8679
>
87-
<ModalMask onClick={() => setVisible(false)} onDrop={onFileDrop} onDragOver={e => e.preventDefault()}>
80+
<ModalMask
81+
onClick={() => setVisible(false)}
82+
onDragOver={e => e.preventDefault()}
83+
onDrop={e => {
84+
e.preventDefault();
85+
e.stopPropagation();
86+
87+
setVisible(false);
88+
if (e.dataTransfer === undefined || e.dataTransfer === null) {
89+
return;
90+
}
91+
92+
onFileSubmission(e.dataTransfer.files);
93+
}}
94+
>
8895
<div css={tw`w-full flex items-center justify-center`} style={{ pointerEvents: 'none' }}>
8996
<InnerContainer>
9097
<p css={tw`text-lg text-neutral-200 text-center`}>
@@ -95,7 +102,27 @@ export default () => {
95102
</ModalMask>
96103
</Fade>
97104
<SpinnerOverlay visible={loading} size={'large'}/>
98-
<Button css={tw`mr-2`} onClick={() => setVisible(true)}>
105+
<input
106+
type={'file'}
107+
ref={fileUploadInput}
108+
css={tw`hidden`}
109+
onChange={e => {
110+
if (!e.currentTarget.files) return;
111+
112+
onFileSubmission(e.currentTarget.files);
113+
if (fileUploadInput.current) {
114+
fileUploadInput.current.files = null;
115+
}
116+
}}
117+
/>
118+
<Button
119+
css={tw`mr-2`}
120+
onClick={() => {
121+
fileUploadInput.current
122+
? fileUploadInput.current.click()
123+
: setVisible(true);
124+
}}
125+
>
99126
Upload
100127
</Button>
101128
</>

0 commit comments

Comments
 (0)