From 4a719326019b3b52a47163c091f1d6fff348eec1 Mon Sep 17 00:00:00 2001 From: Hazel Atkinson Date: Fri, 20 Sep 2024 17:42:24 +0100 Subject: [PATCH] add file upload while editing plugins --- packages/shelter-ui/package.json | 2 +- packages/shelter-ui/src/icons.tsx | 18 ++++++ .../src/components/PluginEditModal.tsx | 62 ++++++++++++++----- .../shelter/src/components/Plugins.tsx.scss | 16 +++++ 4 files changed, 82 insertions(+), 16 deletions(-) diff --git a/packages/shelter-ui/package.json b/packages/shelter-ui/package.json index e24a831..0f2ab48 100644 --- a/packages/shelter-ui/package.json +++ b/packages/shelter-ui/package.json @@ -1,7 +1,7 @@ { "name": "@uwu/shelter-ui", "description": "Discord components remade for shelter", - "version": "0.0.4", + "version": "0.0.5", "author": "uwu.network", "homepage": "https://shelter.uwu.network/", "repository": "github:uwu/shelter", diff --git a/packages/shelter-ui/src/icons.tsx b/packages/shelter-ui/src/icons.tsx index 4af67ac..ba221d7 100644 --- a/packages/shelter-ui/src/icons.tsx +++ b/packages/shelter-ui/src/icons.tsx @@ -106,3 +106,21 @@ export const IconUpdate: IconComponent = (props) => ( /> ); + +export const IconUpload: IconComponent = (props) => ( + + + +); diff --git a/packages/shelter/src/components/PluginEditModal.tsx b/packages/shelter/src/components/PluginEditModal.tsx index ca4b2d0..e5bec77 100644 --- a/packages/shelter/src/components/PluginEditModal.tsx +++ b/packages/shelter/src/components/PluginEditModal.tsx @@ -9,11 +9,11 @@ import { TextArea, TextBox, Space, - openConfirmationModal, openModal, showToast, + IconUpload, } from "@uwu/shelter-ui"; -import { createMemo, createSignal, Match, onCleanup, Show, Switch, untrack } from "solid-js"; +import { Component, createMemo, createSignal, Match, onCleanup, Show, Switch, untrack } from "solid-js"; import { addLocalPlugin, addRemotePlugin, @@ -24,6 +24,33 @@ import { StoredPlugin, updatePlugin, } from "../plugins"; +import { classes } from "./Plugins.tsx.scss"; + +const JsUploader: Component<{ setCode: (t: string) => void }> = (props) => { + let inp: HTMLInputElement; + + return ( + <> + { + const f = inp.files[0]; + if (f) { + const reader = new FileReader(); + reader.readAsText(f); + reader.onloadend = () => props.setCode(reader.result as string); + } + }} + /> + + + ); +}; const PluginEditModal = (props: { close(): void; @@ -63,7 +90,7 @@ const PluginEditModal = (props: { const [lAuthor, setLAuthor] = createSignal(stateInit.manifest?.author ?? ""); const [lDesc, setLDesc] = createSignal(stateInit.manifest?.description ?? ""); - const genId = createMemo(() => { + const targetId = createMemo(() => { if (props.editId) return props.editId; if (!local()) return rSrc().split("://")[1]; @@ -83,8 +110,8 @@ const PluginEditModal = (props: { if ((!lName() || !lCode() || !lAuthor()) && local()) return; - if (props.editId) return genId() == props.editId; - else return !(genId() in untrack(installedPlugins)); + if (props.editId) return targetId() == props.editId; + else return !(targetId() in untrack(installedPlugins)); }; return ( @@ -118,11 +145,15 @@ const PluginEditModal = (props: {
Description
Code
- {/* TODO: monaco */} -