mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-22 02:58:32 +00:00
avoid json errors in firefox
This commit is contained in:
parent
af52ac30ba
commit
0a349e1707
@ -10,6 +10,7 @@ import {
|
|||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { getMetadata } from '../../metadata_parser';
|
import { getMetadata } from '../../metadata_parser';
|
||||||
import { useExamplePatterns } from '../useExamplePatterns';
|
import { useExamplePatterns } from '../useExamplePatterns';
|
||||||
|
import { parseJSON } from '../util.mjs';
|
||||||
|
|
||||||
function classNames(...classes) {
|
function classNames(...classes) {
|
||||||
return classes.filter(Boolean).join(' ');
|
return classes.filter(Boolean).join(' ');
|
||||||
@ -42,7 +43,7 @@ function PatternButton({ showOutline, onClick, pattern, showHiglight }) {
|
|||||||
|
|
||||||
function PatternButtons({ patterns, activePattern, onClick, started }) {
|
function PatternButtons({ patterns, activePattern, onClick, started }) {
|
||||||
const viewingPatternStore = useViewingPatternData();
|
const viewingPatternStore = useViewingPatternData();
|
||||||
const viewingPatternData = JSON.parse(viewingPatternStore);
|
const viewingPatternData = parseJSON(viewingPatternStore);
|
||||||
const viewingPatternID = viewingPatternData.id;
|
const viewingPatternID = viewingPatternData.id;
|
||||||
return (
|
return (
|
||||||
<div className="font-mono text-sm">
|
<div className="font-mono text-sm">
|
||||||
@ -76,7 +77,7 @@ function ActionButton({ children, onClick, label, labelIsHidden }) {
|
|||||||
export function PatternsTab({ context }) {
|
export function PatternsTab({ context }) {
|
||||||
const activePattern = useActivePattern();
|
const activePattern = useActivePattern();
|
||||||
const viewingPatternStore = useViewingPatternData();
|
const viewingPatternStore = useViewingPatternData();
|
||||||
const viewingPatternData = JSON.parse(viewingPatternStore);
|
const viewingPatternData = parseJSON(viewingPatternStore);
|
||||||
|
|
||||||
const { userPatterns } = useSettings();
|
const { userPatterns } = useSettings();
|
||||||
const examplePatterns = useExamplePatterns();
|
const examplePatterns = useExamplePatterns();
|
||||||
@ -164,7 +165,7 @@ export function PatternsTab({ context }) {
|
|||||||
<h2 className="text-xl mb-2">{collection}</h2>
|
<h2 className="text-xl mb-2">{collection}</h2>
|
||||||
<div className="font-mono text-sm">
|
<div className="font-mono text-sm">
|
||||||
<PatternButtons
|
<PatternButtons
|
||||||
onClick={(id) => updateCodeWindow({ ...patterns[id], collection }, true)}
|
onClick={(id) => updateCodeWindow({ ...patterns[id], collection }, false)}
|
||||||
started={context.started}
|
started={context.started}
|
||||||
patterns={patterns}
|
patterns={patterns}
|
||||||
activePattern={activePattern}
|
activePattern={activePattern}
|
||||||
|
|||||||
@ -52,6 +52,15 @@ export async function initCode() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const parseJSON = (json) => {
|
||||||
|
json = json != null && json.length ? json : '{}';
|
||||||
|
try {
|
||||||
|
return JSON.parse(json);
|
||||||
|
} catch {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export function getRandomTune() {
|
export function getRandomTune() {
|
||||||
const allTunes = Object.entries(stockPatterns);
|
const allTunes = Object.entries(stockPatterns);
|
||||||
const randomItem = (arr) => arr[Math.floor(Math.random() * arr.length)];
|
const randomItem = (arr) => arr[Math.floor(Math.random() * arr.length)];
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { useStore } from '@nanostores/react';
|
|||||||
import { logger } from '@strudel/core';
|
import { logger } from '@strudel/core';
|
||||||
import { nanoid } from 'nanoid';
|
import { nanoid } from 'nanoid';
|
||||||
import { settingsMap } from './settings.mjs';
|
import { settingsMap } from './settings.mjs';
|
||||||
import { supabase } from './repl/util.mjs';
|
import { parseJSON, supabase } from './repl/util.mjs';
|
||||||
|
|
||||||
export let $publicPatterns = atom([]);
|
export let $publicPatterns = atom([]);
|
||||||
export let $featuredPatterns = atom([]);
|
export let $featuredPatterns = atom([]);
|
||||||
@ -28,7 +28,7 @@ export let $viewingPatternData = persistentAtom(
|
|||||||
);
|
);
|
||||||
|
|
||||||
export const getViewingPatternData = () => {
|
export const getViewingPatternData = () => {
|
||||||
return JSON.parse($viewingPatternData.get());
|
return parseJSON($viewingPatternData.get());
|
||||||
};
|
};
|
||||||
export const useViewingPatternData = () => {
|
export const useViewingPatternData = () => {
|
||||||
return useStore($viewingPatternData);
|
return useStore($viewingPatternData);
|
||||||
@ -81,7 +81,7 @@ const defaultCode = '';
|
|||||||
export const userPattern = {
|
export const userPattern = {
|
||||||
collection: collectionName.user,
|
collection: collectionName.user,
|
||||||
getAll() {
|
getAll() {
|
||||||
const patterns = JSON.parse(settingsMap.get().userPatterns);
|
const patterns = parseJSON(settingsMap.get().userPatterns);
|
||||||
return patterns ?? {};
|
return patterns ?? {};
|
||||||
},
|
},
|
||||||
getPatternData(id) {
|
getPatternData(id) {
|
||||||
@ -160,7 +160,7 @@ export async function importPatterns(fileList) {
|
|||||||
const content = await file.text();
|
const content = await file.text();
|
||||||
if (file.type === 'application/json') {
|
if (file.type === 'application/json') {
|
||||||
const userPatterns = userPattern.getAll();
|
const userPatterns = userPattern.getAll();
|
||||||
setUserPatterns({ ...userPatterns, ...JSON.parse(content) });
|
setUserPatterns({ ...userPatterns, ...parseJSON(content) });
|
||||||
} else if (file.type === 'text/plain') {
|
} else if (file.type === 'text/plain') {
|
||||||
const id = file.name.replace(/\.[^/.]+$/, '');
|
const id = file.name.replace(/\.[^/.]+$/, '');
|
||||||
userPattern.update(id, { code: content });
|
userPattern.update(id, { code: content });
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user