diff --git a/website/src/repl/components/panel/PatternsTab.jsx b/website/src/repl/components/panel/PatternsTab.jsx index 44b280fb3..32a77c790 100644 --- a/website/src/repl/components/panel/PatternsTab.jsx +++ b/website/src/repl/components/panel/PatternsTab.jsx @@ -21,7 +21,7 @@ import cx from '@src/cx.mjs'; import { Textbox } from '@src/repl/components/panel/SettingsTab.jsx'; export function PatternLabel({ pattern } /* : { pattern: Tables<'code'> } */) { - const meta = useMemo(() => getMetadata(pattern.code), [pattern]); + const meta = pattern.meta let title = meta.title; if (title == null) { @@ -58,6 +58,11 @@ function PatternButtons({ patterns, activePattern, onClick, started }) { return (
{Object.values(patterns) + .sort((a, b) => { + const x = "" + return (b.meta.title ?? "").localeCompare(a.meta.title ?? "") + + }) .reverse() .map((pattern) => { const id = pattern.id; @@ -93,7 +98,7 @@ export function PatternsTab({ context }) { } return Object.fromEntries( Object.entries(userPatterns).filter(([_key, pattern]) => { - const meta = getMetadata(pattern.code); + const meta = pattern.meta; // Search for specific meta keys const searchLowercaseTrimmed = search.trim().toLowerCase(); diff --git a/website/src/settings.mjs b/website/src/settings.mjs index 6acf8e2e2..28228dc00 100644 --- a/website/src/settings.mjs +++ b/website/src/settings.mjs @@ -3,6 +3,7 @@ import { useStore } from '@nanostores/react'; import { register } from '@strudel/core'; import { isUdels } from './repl/util.mjs'; import { computed } from 'nanostores'; +import { getMetadata } from './metadata_parser'; export const audioEngineTargets = { webaudio: 'webaudio', @@ -71,6 +72,7 @@ export const $settings = computed(settingsMap, (state) => { Object.keys(userPatterns).forEach((key) => { const data = userPatterns[key]; data.id = data.id ?? key; + data.meta = getMetadata(data.code) userPatterns[key] = data; }); return {