72 lines
1.8 KiB
JavaScript

import { gql, useApolloClient, useMutation } from "@apollo/client";
import ButtonSubmit from "device-agnostic-ui/ButtonSubmit.mjs";
import Code from "device-agnostic-ui/Code.mjs";
import Fieldset from "device-agnostic-ui/Fieldset.mjs";
import Textbox from "device-agnostic-ui/Textbox.mjs";
import { createElement as h, Fragment, useState } from "react";
const SINGLE_UPLOAD_MUTATION = gql`
mutation singleUpload($file: Upload!) {
singleUpload(file: $file) {
id
}
}
`;
export function UploadBlob() {
const [name, setName] = useState("");
const [content, setContent] = useState("");
const [singleUploadMutation, { loading }] = useMutation(
SINGLE_UPLOAD_MUTATION
);
const apolloClient = useApolloClient();
const onNameChange = ({ target: { value } }) => setName(value);
const onContentChange = ({ target: { value } }) => setContent(value);
const onSubmit = (event) => {
event.preventDefault();
const file = new Blob([content], { type: "text/plain" });
file.name = `${name}.txt`;
singleUploadMutation({ variables: { file } }).then(() => {
apolloClient.resetStore();
});
};
return h(
"form",
{ onSubmit },
h(
Fieldset,
{
legend: h(
Fragment,
null,
"File name (without ",
h(Code, null, ".txt"),
")"
),
},
h(Textbox, {
placeholder: "Name",
required: true,
value: name,
onChange: onNameChange,
})
),
h(
Fieldset,
{ legend: "File content" },
h(Textbox, {
type: "textarea",
placeholder: "Content",
required: true,
value: content,
onChange: onContentChange,
})
),
h(ButtonSubmit, { loading }, "Upload")
);
}