diff --git a/website/src/repl/components/panel/PatternsTab.jsx b/website/src/repl/components/panel/PatternsTab.jsx
index 3423c57a..44b280fb 100644
--- a/website/src/repl/components/panel/PatternsTab.jsx
+++ b/website/src/repl/components/panel/PatternsTab.jsx
@@ -53,8 +53,7 @@ function PatternButton({ showOutline, onClick, pattern, showHiglight }) {
}
function PatternButtons({ patterns, activePattern, onClick, started }) {
- const viewingPatternStore = useViewingPatternData();
- const viewingPatternData = parseJSON(viewingPatternStore);
+ const viewingPatternData = useViewingPatternData();
const viewingPatternID = viewingPatternData.id;
return (
@@ -83,8 +82,8 @@ const updateCodeWindow = (context, patternData, reset = false) => {
export function PatternsTab({ context }) {
const [search, setSearch] = useState('');
const activePattern = useActivePattern();
- const viewingPatternStore = useViewingPatternData();
- const viewingPatternData = parseJSON(viewingPatternStore);
+ const viewingPatternData = useViewingPatternData();
+
const { userPatterns, patternAutoStart } = useSettings();
const viewingPatternID = viewingPatternData?.id;
@@ -121,7 +120,7 @@ export function PatternsTab({ context }) {
);
}),
);
- }, [search, viewingPatternStore]);
+ }, [search, userPatterns]);
const importRef = useRef();
return (
diff --git a/website/src/user_pattern_utils.mjs b/website/src/user_pattern_utils.mjs
index f087c69e..8c452ee8 100644
--- a/website/src/user_pattern_utils.mjs
+++ b/website/src/user_pattern_utils.mjs
@@ -1,4 +1,4 @@
-import { atom } from 'nanostores';
+import { atom, computed } from 'nanostores';
import { useStore } from '@nanostores/react';
import { logger } from '@strudel/core';
import { nanoid } from 'nanoid';
@@ -36,12 +36,9 @@ export let $viewingPatternData = sessionAtom('viewingPatternData', {
created_at: Date.now(),
});
-export const getViewingPatternData = () => {
- return parseJSON($viewingPatternData.get());
-};
-export const useViewingPatternData = () => {
- return useStore($viewingPatternData);
-};
+const $viewingPatterns = computed($viewingPatternData, (state) => parseJSON(state));
+export const useViewingPatternData = () => useStore($viewingPatterns);
+export const getViewingPatternData = () => $viewingPatterns.get();
export const setViewingPatternData = (data) => {
$viewingPatternData.set(JSON.stringify(data));