From 76eb315b9d174f93ef45a6fa46fb14cbff10bebb Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 6 Feb 2025 00:40:41 +0200 Subject: [PATCH] added private app name and logo --- src/components/Apps/AppsHomeDesktop.tsx | 56 ++++++++++++++++++-- src/components/Apps/SortablePinnedApps.tsx | 6 +-- src/components/Apps/TabComponent.tsx | 4 +- src/components/Apps/useHandlePrivateApps.tsx | 16 ++++-- 4 files changed, 69 insertions(+), 13 deletions(-) diff --git a/src/components/Apps/AppsHomeDesktop.tsx b/src/components/Apps/AppsHomeDesktop.tsx index 2b2ea00..76cffb2 100644 --- a/src/components/Apps/AppsHomeDesktop.tsx +++ b/src/components/Apps/AppsHomeDesktop.tsx @@ -9,7 +9,7 @@ import { PublishQAppChoseFile, PublishQAppInfo, } from "./Apps-styles"; -import { Avatar, Box, Button, ButtonBase, Dialog, DialogActions, DialogContent, DialogTitle, Input, MenuItem, Select, Tab, Tabs } from "@mui/material"; +import { Avatar, Box, Button, ButtonBase, Dialog, DialogActions, DialogContent, DialogTitle, Input, MenuItem, Select, Tab, Tabs, Typography } from "@mui/material"; import { Add } from "@mui/icons-material"; import { getBaseApiReact, isMobile, MyContext } from "../../App"; import LogoSelected from "../../assets/svgs/LogoSelected.svg"; @@ -25,6 +25,9 @@ import { saveToLocalStorage } from "./AppsNavBarDesktop"; import { Label } from "../Group/AddGroup"; import { useHandlePrivateApps } from "./useHandlePrivateApps"; import { useDropzone } from "react-dropzone"; +import ImageUploader from "../../common/ImageUploader"; +import { base64ToBlobUrl, fileToBase64 } from "../../utils/fileReading"; +import { objectToBase64 } from "../../qdn/encryption/group-encryption"; const maxFileSize = 50 * 1024 * 1024 ; // 50MB or 400MB @@ -37,6 +40,7 @@ export const AppsHomeDesktop = ({ }) => { const {openApp} = useHandlePrivateApps() const [file, setFile] = useState(null) + const [logo, setLogo] = useState(null) const { getRootProps, getInputProps } = useDropzone({ accept: { "application/zip": [".zip"], // Only accept zip files @@ -91,7 +95,8 @@ const [myGroupsWhereIAmAdmin, setMyGroupsWhereIAmAdmin] = useRecoilState( const [newPrivateAppValues, setNewPrivateAppValues] = useState({ service: 'DOCUMENT', - identifier: '' + identifier: '', + name: '', }) const addPrivateApp = async ()=> { @@ -114,23 +119,35 @@ const [myGroupsWhereIAmAdmin, setMyGroupsWhereIAmAdmin] = useRecoilState( }) setNewPrivateAppValues({ service: 'DOCUMENT', - identifier: '' + identifier: '', + name: '' }) setFile(null) setValueTabPrivateApp(0) - setSelectedGroup(null) + setSelectedGroup(0) + setLogo(null) } const publishPrivateApp = async ()=> { try { if(selectedGroup === 0) return + if(!logo) throw new Error('Please select an image for a logo') if(!myName) throw new Error('You need a Qortal name to publish') + if(!newPrivateAppValues?.name) throw new Error('Your app needs a name') + const base64Logo = await fileToBase64(logo) + const base64App = await fileToBase64(file) + const objectToSave = { + app: base64App, + logo: base64Logo, + name: newPrivateAppValues.name + } + const object64 = await objectToBase64(objectToSave); const decryptedData = await window.sendMessage( "ENCRYPT_QORTAL_GROUP_DATA", { - file: file, + base64: object64, groupId: selectedGroup, } ); @@ -598,6 +615,35 @@ service: 'DOCUMENT', })} /> + + + + setNewPrivateAppValues((prev)=> { + return { + ...prev, + name: e.target.value + } + })} + /> + + + + setLogo(file)}> + + + {logo?.name} + +