import { DocumentDuplicateIcon, PencilSquareIcon, TrashIcon } from '@heroicons/react/20/solid';
import {
$featuredPatterns,
$publicPatterns,
clearUserPatterns,
deleteActivePattern,
duplicateActivePattern,
exportPatterns,
importPatterns,
useActivePattern,
useViewingPattern,
useSettings,
userPattern,
examplePattern,
} from '../../settings.mjs';
import { useMemo } from 'react';
import * as tunes from '../tunes.mjs';
import { useStore } from '@nanostores/react';
import { getMetadata } from '../../metadata_parser';
function classNames(...classes) {
return classes.filter(Boolean).join(' ');
}
function PatternButton({ showOutline, onClick, label, showHiglight }) {
return (
{label}
);
}
function PatternButtons({ patterns, activePattern, onClick, viewingPattern, started }) {
return (
{Object.entries(patterns).map(([id]) => (
onClick(id)}
/>
))}
);
}
export function PatternsTab({ context }) {
const { userPatterns } = useSettings();
const examplePatterns = useMemo(() => examplePattern.getAll(), []);
const activePattern = useActivePattern();
const viewingPattern = useViewingPattern();
const updateCodeWindow = (id, code, reset = false) => {
context.handleUpdate(id, code, reset);
};
const onPatternBtnClick = (id, isExample = false) => {
const code = isExample ? examplePatterns[id].code : userPatterns[id].code;
// display selected pattern code in the window
updateCodeWindow(id, code, isExample);
};
const isExample = examplePatterns[viewingPattern] != null;
const featuredPatterns = useStore($featuredPatterns);
const publicPatterns = useStore($publicPatterns);
const isExample = useMemo(() => activePattern && !!tunes[activePattern], [activePattern]);
return (
{viewingPattern && (
{viewingPattern}
{!isExample && (
)}
{!isExample && (
)}
)}
{featuredPatterns && (
)}
{publicPatterns && (
)}
Examples
onPatternBtnClick(id, true)}
started={context.started}
patterns={examplePatterns}
activePattern={activePattern}
viewingPattern={viewingPattern}
/>
Stock Examples
);
}
export function PatternLabel({ pattern } /* : { pattern: Tables<'code'> } */) {
const meta = useMemo(() => getMetadata(pattern.code), [pattern]);
return (
<>
{pattern.id}. {meta.title || pattern.hash} by {Array.isArray(meta.by) ? meta.by.join(',') : 'Anonymous'}
>
);
}