From c75c3f1ab1cf63ad72df0f835eb5e4a1a779b84e Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 24 Aug 2023 11:55:21 +0200 Subject: [PATCH] basic pattern add function --- website/src/repl/panel/PatternsTab.jsx | 31 ++++++++++++++++++++++-- website/src/settings.mjs | 33 ++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/website/src/repl/panel/PatternsTab.jsx b/website/src/repl/panel/PatternsTab.jsx index 2c4d8038..4a4a3930 100644 --- a/website/src/repl/panel/PatternsTab.jsx +++ b/website/src/repl/panel/PatternsTab.jsx @@ -1,10 +1,29 @@ -import { cx } from '@strudel.cycles/react'; import React from 'react'; import * as tunes from '../tunes.mjs'; +import { useSettings, clearUserPatterns, newUserPattern } from '../../settings.mjs'; export function PatternsTab({ context }) { + const { userPatterns } = useSettings(); return ( -
+
+

My Patterns

+
+ + +
+ {Object.entries(userPatterns).map(([key, up]) => ( + { + const { code } = up; + console.log('clikkk', code); + context.handleUpdate(code); + }} + > + {key} + + ))}

Examples

{Object.entries(tunes).map(([key, tune]) => ( ); } + +/* +selectable examples +if example selected + type character -> create new user pattern with exampleName_n + even if +clicking (+) opens the "new" example with same behavior as above +*/ diff --git a/website/src/settings.mjs b/website/src/settings.mjs index 036c5509..2bb0ac14 100644 --- a/website/src/settings.mjs +++ b/website/src/settings.mjs @@ -15,6 +15,7 @@ export const defaultSettings = { isZen: false, soundsFilter: 'all', panelPosition: 'bottom', + userPatterns: '{}', }; export const settingsMap = persistentMap('strudel-settings', defaultSettings); @@ -29,6 +30,7 @@ export function useSettings() { isLineWrappingEnabled: [true, 'true'].includes(state.isLineWrappingEnabled) ? true : false, fontSize: Number(state.fontSize), panelPosition: state.activeFooter !== '' ? state.panelPosition : 'bottom', + userPatterns: JSON.parse(state.userPatterns), }; } @@ -51,3 +53,34 @@ export const fontFamily = patternSetting('fontFamily'); export const fontSize = patternSetting('fontSize'); export const settingPatterns = { theme, fontFamily, fontSize }; + +function getUserPatterns() { + return JSON.parse(settingsMap.get().userPatterns); +} +function setUserPatterns(obj) { + settingsMap.setKey('userPatterns', JSON.stringify(obj)); +} + +export function addUserPattern(name, config) { + if (typeof config !== 'object') { + throw new Error('addUserPattern expected object as second param'); + } + if (!config.code) { + throw new Error('addUserPattern expected code as property of second param'); + } + const userPatterns = getUserPatterns(); + setUserPatterns({ ...userPatterns, [name]: config }); +} + +export function newUserPattern() { + const userPatterns = getUserPatterns(); + const date = new Date().toISOString().split('T')[0]; + const todays = Object.entries(userPatterns).filter(([name]) => name.startsWith(date)); + const num = String(todays.length + 1).padStart(3, '0'); + const defaultNewPattern = 's("hh")'; + addUserPattern(date + '_' + num, { code: defaultNewPattern }); +} + +export function clearUserPatterns() { + setUserPatterns({}); +}