import { exportPatterns, importPatterns, patternFilterName, useActivePattern, useViewingPatternData, userPattern, } from '../../../user_pattern_utils.mjs'; import { useMemo } from 'react'; import { getMetadata } from '../../../metadata_parser.js'; import { useExamplePatterns } from '../../useExamplePatterns.jsx'; import { parseJSON, isUdels } from '../../util.mjs'; import { ButtonGroup } from './Forms.jsx'; import { settingsMap, useSettings } from '../../../settings.mjs'; function classNames(...classes) { return classes.filter(Boolean).join(' '); } export function PatternLabel({ pattern } /* : { pattern: Tables<'code'> } */) { const meta = useMemo(() => getMetadata(pattern.code), [pattern]); let title = meta.title; if (title == null) { const date = new Date(pattern.created_at); if (!isNaN(date)) { title = date.toLocaleDateString(); } } if (title == null) { title = pattern.hash; } if (title == null) { title = 'unnamed'; } return <>{`${pattern.id}: ${title} by ${Array.isArray(meta.by) ? meta.by.join(',') : 'Anonymous'}`}; } function PatternButton({ showOutline, onClick, pattern, showHiglight }) { return ( ); } function PatternButtons({ patterns, activePattern, onClick, started }) { const viewingPatternStore = useViewingPatternData(); const viewingPatternData = parseJSON(viewingPatternStore); const viewingPatternID = viewingPatternData.id; return (
{Object.values(patterns) .reverse() .map((pattern) => { const id = pattern.id; return ( onClick(id)} /> ); })}
); } function ActionButton({ children, onClick, label, labelIsHidden }) { return ( ); } export function PatternsTab({ context }) { const activePattern = useActivePattern(); const viewingPatternStore = useViewingPatternData(); const viewingPatternData = parseJSON(viewingPatternStore); const { userPatterns, patternFilter, fontFamily } = useSettings(); const examplePatterns = useExamplePatterns(); const collections = examplePatterns.collections; const updateCodeWindow = (patternData, reset = false) => { context.handleUpdate(patternData, reset); }; const viewingPatternID = viewingPatternData?.id; const autoResetPatternOnChange = !isUdels(); return (
settingsMap.setKey('patternFilter', value)} items={patternFilterName} > {patternFilter === patternFilterName.user && (
{ const { data } = userPattern.createAndAddToDB(); updateCodeWindow(data); }} /> { const { data } = userPattern.duplicate(viewingPatternData); updateCodeWindow(data); }} /> { const { data } = userPattern.delete(viewingPatternID); updateCodeWindow({ ...data, collection: userPattern.collection }); }} /> { const { data } = userPattern.clearAll(); updateCodeWindow(data); }} />
)}
{patternFilter === patternFilterName.user && ( updateCodeWindow({ ...userPatterns[id], collection: userPattern.collection }, autoResetPatternOnChange) } patterns={userPatterns} started={context.started} activePattern={activePattern} viewingPatternID={viewingPatternID} /> )} {patternFilter !== patternFilterName.user && Array.from(collections.keys()).map((collection) => { const patterns = collections.get(collection); return (

{collection}

updateCodeWindow({ ...patterns[id], collection }, autoResetPatternOnChange)} started={context.started} patterns={patterns} activePattern={activePattern} />
); })}
); }