From 8c89938eafd6499d2f5e9c4e1505033b0a281180 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 8 Dec 2023 23:07:30 +0100 Subject: [PATCH] pattern json export + import --- website/src/repl/panel/PatternsTab.jsx | 25 +++++++++++++++++++------ website/src/settings.mjs | 6 ++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/website/src/repl/panel/PatternsTab.jsx b/website/src/repl/panel/PatternsTab.jsx index def6cef1..4b1dfcf1 100644 --- a/website/src/repl/panel/PatternsTab.jsx +++ b/website/src/repl/panel/PatternsTab.jsx @@ -8,8 +8,10 @@ import { deleteActivePattern, duplicateActivePattern, getUserPattern, + getUserPatterns, renameActivePattern, addUserPattern, + setUserPatterns, } from '../../settings.mjs'; import { logger } from '@strudel.cycles/core'; import { DocumentDuplicateIcon, PencilSquareIcon, TrashIcon } from '@heroicons/react/20/solid'; @@ -82,15 +84,19 @@ export function PatternsTab({ context }) { style={{ display: 'none' }} type="file" multiple - accept="text/plain" + accept="text/plain,application/json" onChange={async (e) => { const files = Array.from(e.target.files); await Promise.all( files.map(async (file, i) => { - const code = await file.text(); - const name = file.name.replace(/\.[^/.]+$/, ''); - console.log(i, name, code); - addUserPattern(name, { code }); + const content = await file.text(); + if (file.type === 'application/json') { + const userPatterns = getUserPatterns() || {}; + setUserPatterns({ ...userPatterns, ...JSON.parse(content) }); + } else if (file.type === 'text/plain') { + const name = file.name.replace(/\.[^/.]+$/, ''); + addUserPattern(name, { code: content }); + } }), ); logger(`import done!`); @@ -101,7 +107,14 @@ export function PatternsTab({ context }) {