jevstrudel.git / website / src / repl / useExamplePatterns.jsx
useExamplePatterns.jsx26 lines · 977 B · raw
1import { $featuredPatterns, $publicPatterns, patternFilterName } from '../user_pattern_utils.mjs';
2import { useStore } from '@nanostores/react';
3import { useMemo } from 'react';
4import * as tunes from '../repl/tunes.mjs';
5
6export const stockPatterns = Object.fromEntries(
7  Object.entries(tunes).map(([key, code], i) => [i, { id: i, code, collection: 'Stock Examples' }]),
8);
9
10export const useExamplePatterns = () => {
11  const featuredPatterns = useStore($featuredPatterns);
12  const publicPatterns = useStore($publicPatterns);
13  const collections = useMemo(() => {
14    const pats = new Map();
15    pats.set(patternFilterName.featured, featuredPatterns);
16    pats.set(patternFilterName.public, publicPatterns);
17    // pats.set(patternFilterName.stock, stockPatterns);
18    return pats;
19  }, [featuredPatterns, publicPatterns]);
20
21  const patterns = useMemo(() => {
22    return Object.assign({}, ...collections.values());
23  }, [collections]);
24
25  return { patterns, collections };
26};