From 596c9b1d274d0d89ece5772b4c8efce233f1ab0d Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Thu, 4 May 2023 22:33:13 +0800 Subject: [PATCH] feat: close #887 import masks --- app/components/mask.tsx | 24 +++++++++++++++++++++--- app/utils.ts | 20 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/app/components/mask.tsx b/app/components/mask.tsx index c980c48c..106418e8 100644 --- a/app/components/mask.tsx +++ b/app/components/mask.tsx @@ -21,7 +21,7 @@ import { useNavigate } from "react-router-dom"; import chatStyle from "./chat.module.scss"; import { useEffect, useState } from "react"; -import { downloadAs } from "../utils"; +import { downloadAs, readFromFile } from "../utils"; import { Updater } from "../api/openai/typing"; import { ModelConfigList } from "./model-config"; import { FileName, Path } from "../constant"; @@ -222,6 +222,21 @@ export function MaskPage() { downloadAs(JSON.stringify(masks), FileName.Masks); }; + const importFromFile = () => { + readFromFile().then((content) => { + try { + const importMasks = JSON.parse(content); + if (Array.isArray(importMasks)) { + for (const mask of importMasks) { + if (mask.name) { + maskStore.create(mask); + } + } + } + } catch {} + }); + }; + return (
@@ -247,7 +262,7 @@ export function MaskPage() { } bordered - onClick={() => showToast(Locale.WIP)} + onClick={() => importFromFile()} />
@@ -371,7 +386,10 @@ export function MaskPage() { key="export" bordered onClick={() => - downloadAs(JSON.stringify(editingMask), "mask.json") + downloadAs( + JSON.stringify(editingMask), + `${editingMask.name}.json`, + ) } />, ((res, rej) => { + const fileInput = document.createElement("input"); + fileInput.type = "file"; + fileInput.accept = "application/json"; + + fileInput.onchange = (event: any) => { + const file = event.target.files[0]; + const fileReader = new FileReader(); + fileReader.onload = (e: any) => { + res(e.target.result); + }; + fileReader.onerror = (e) => rej(e); + fileReader.readAsText(file); + }; + + fileInput.click(); + }); +} + export function isIOS() { const userAgent = navigator.userAgent.toLowerCase(); return /iphone|ipad|ipod/.test(userAgent);