pattern json export + import

This commit is contained in:
Felix Roos 2023-12-08 23:07:30 +01:00
parent 5116bf74ad
commit 8c89938eaf
2 changed files with 23 additions and 8 deletions

View File

@ -8,8 +8,10 @@ import {
deleteActivePattern, deleteActivePattern,
duplicateActivePattern, duplicateActivePattern,
getUserPattern, getUserPattern,
getUserPatterns,
renameActivePattern, renameActivePattern,
addUserPattern, addUserPattern,
setUserPatterns,
} from '../../settings.mjs'; } from '../../settings.mjs';
import { logger } from '@strudel.cycles/core'; import { logger } from '@strudel.cycles/core';
import { DocumentDuplicateIcon, PencilSquareIcon, TrashIcon } from '@heroicons/react/20/solid'; import { DocumentDuplicateIcon, PencilSquareIcon, TrashIcon } from '@heroicons/react/20/solid';
@ -82,15 +84,19 @@ export function PatternsTab({ context }) {
style={{ display: 'none' }} style={{ display: 'none' }}
type="file" type="file"
multiple multiple
accept="text/plain" accept="text/plain,application/json"
onChange={async (e) => { onChange={async (e) => {
const files = Array.from(e.target.files); const files = Array.from(e.target.files);
await Promise.all( await Promise.all(
files.map(async (file, i) => { files.map(async (file, i) => {
const code = await file.text(); const content = await file.text();
const name = file.name.replace(/\.[^/.]+$/, ''); if (file.type === 'application/json') {
console.log(i, name, code); const userPatterns = getUserPatterns() || {};
addUserPattern(name, { code }); setUserPatterns({ ...userPatterns, ...JSON.parse(content) });
} else if (file.type === 'text/plain') {
const name = file.name.replace(/\.[^/.]+$/, '');
addUserPattern(name, { code: content });
}
}), }),
); );
logger(`import done!`); logger(`import done!`);
@ -101,7 +107,14 @@ export function PatternsTab({ context }) {
<button <button
className="hover:opacity-50" className="hover:opacity-50"
onClick={() => { onClick={() => {
console.log('export'); const blob = new Blob([JSON.stringify(userPatterns)], { type: 'application/json' });
const downloadLink = document.createElement('a');
downloadLink.href = window.URL.createObjectURL(blob);
const date = new Date().toISOString().split('T')[0];
downloadLink.download = `strudel_patterns_${date}.json`;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}} }}
> >
export export

View File

@ -62,14 +62,14 @@ export const fontSize = patternSetting('fontSize');
export const settingPatterns = { theme, fontFamily, fontSize }; export const settingPatterns = { theme, fontFamily, fontSize };
function getUserPatterns() { export function getUserPatterns() {
return JSON.parse(settingsMap.get().userPatterns); return JSON.parse(settingsMap.get().userPatterns);
} }
function getSetting(key) { function getSetting(key) {
return settingsMap.get()[key]; return settingsMap.get()[key];
} }
function setUserPatterns(obj) { export function setUserPatterns(obj) {
settingsMap.setKey('userPatterns', JSON.stringify(obj)); settingsMap.setKey('userPatterns', JSON.stringify(obj));
} }
@ -193,3 +193,5 @@ export function duplicateActivePattern() {
export function setActivePattern(key) { export function setActivePattern(key) {
settingsMap.setKey('activePattern', key); settingsMap.setKey('activePattern', key);
} }
export function importUserPatternJSON(jsonString) {}