diff --git a/website/src/repl/components/panel/PatternsTab.jsx b/website/src/repl/components/panel/PatternsTab.jsx index df6075eb..fd9ddb15 100644 --- a/website/src/repl/components/panel/PatternsTab.jsx +++ b/website/src/repl/components/panel/PatternsTab.jsx @@ -84,82 +84,72 @@ function ActionButton({ children, onClick, label, labelIsHidden }) { ); } -export function PatternsTab({ context }) { +const updateCodeWindow = (context, patternData, reset = false) => { + context.handleUpdate(patternData, reset); +}; + +const autoResetPatternOnChange = !isUdels(); + +function UserPatterns({ context }) { const activePattern = useActivePattern(); const viewingPatternStore = useViewingPatternData(); const viewingPatternData = parseJSON(viewingPatternStore); - const { userPatterns, patternFilter } = 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.createAndAddToDB(); + updateCodeWindow(context, data); + }} + /> + { + const { data } = userPattern.duplicate(viewingPatternData); + updateCodeWindow(context, data); + }} + /> + { + const { data } = userPattern.delete(viewingPatternID); + updateCodeWindow(context, { ...data, collection: userPattern.collection }); + }} + /> + + - { - const { data } = userPattern.clearAll(); - updateCodeWindow(data); - }} - /> -
-
- )} + { + const { data } = userPattern.clearAll(); + updateCodeWindow(context, data); + }} + /> +
-
+
{patternFilter === patternFilterName.user && ( - updateCodeWindow({ ...userPatterns[id], collection: userPattern.collection }, autoResetPatternOnChange) + updateCodeWindow( + context, + { ...userPatterns[id], collection: userPattern.collection }, + autoResetPatternOnChange, + ) } patterns={userPatterns} started={context.started} @@ -167,24 +157,47 @@ export function PatternsTab({ context }) { 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} - /> -
-
- ); - })} -
+
+
+ ); +} + +function PublicPatterns({ context }) { + const activePattern = useActivePattern(); + const examplePatterns = useExamplePatterns(); + const collections = examplePatterns.collections; + const { patternFilter } = useSettings(); + const patterns = collections.get(patternFilter) ?? collections.get(patternFilterName.public); + return ( +
+ + updateCodeWindow(context, { ...patterns[id], collection: patternFilter }, autoResetPatternOnChange) + } + started={context.started} + patterns={patterns} + activePattern={activePattern} + /> +
+ ); +} + +export function PatternsTab({ context }) { + const { patternFilter } = useSettings(); + + return ( +
+ settingsMap.setKey('patternFilter', value)} + items={patternFilterName} + > + + {patternFilter === patternFilterName.user ? ( + + ) : ( + + )}
); } diff --git a/website/src/repl/useExamplePatterns.jsx b/website/src/repl/useExamplePatterns.jsx index 08629d44..2e11fcae 100644 --- a/website/src/repl/useExamplePatterns.jsx +++ b/website/src/repl/useExamplePatterns.jsx @@ -1,4 +1,4 @@ -import { $featuredPatterns, $publicPatterns, collectionName } from '../user_pattern_utils.mjs'; +import { $featuredPatterns, $publicPatterns, patternFilterName } from '../user_pattern_utils.mjs'; import { useStore } from '@nanostores/react'; import { useMemo } from 'react'; import * as tunes from '../repl/tunes.mjs'; @@ -12,9 +12,9 @@ export const useExamplePatterns = () => { const publicPatterns = useStore($publicPatterns); const collections = useMemo(() => { const pats = new Map(); - pats.set(collectionName.featured, featuredPatterns); - pats.set(collectionName.public, publicPatterns); - // pats.set(collectionName.stock, stockPatterns); + pats.set(patternFilterName.featured, featuredPatterns); + pats.set(patternFilterName.public, publicPatterns); + // pats.set(patternFilterName.stock, stockPatterns); return pats; }, [featuredPatterns, publicPatterns]); diff --git a/website/src/user_pattern_utils.mjs b/website/src/user_pattern_utils.mjs index 866491d0..d87fbff4 100644 --- a/website/src/user_pattern_utils.mjs +++ b/website/src/user_pattern_utils.mjs @@ -8,16 +8,13 @@ import { confirmDialog, parseJSON, supabase } from './repl/util.mjs'; export let $publicPatterns = atom([]); export let $featuredPatterns = atom([]); -export const collectionName = { - user: 'user', - public: 'Last Creations', - stock: 'Stock Examples', - featured: 'Featured', -}; + export const patternFilterName = { - community: 'community', + public: 'latest', + featured: 'featured', user: 'user', + // stock: 'stock examples', }; const sessionAtom = (name, initial = undefined) => { @@ -36,7 +33,7 @@ const sessionAtom = (name, initial = undefined) => { export let $viewingPatternData = sessionAtom('viewingPatternData', { id: '', code: '', - collection: collectionName.user, + collection: patternFilterName.user, created_at: Date.now(), }); @@ -52,11 +49,11 @@ export const setViewingPatternData = (data) => { }; export function loadPublicPatterns() { - return supabase.from('code_v1').select().eq('public', true).limit(20).order('id', { ascending: false }); + return supabase.from('code_v1').select().eq('public', true).limit(40).order('id', { ascending: false }); } export function loadFeaturedPatterns() { - return supabase.from('code_v1').select().eq('featured', true).limit(20).order('id', { ascending: false }); + return supabase.from('code_v1').select().eq('featured', true).limit(40).order('id', { ascending: false }); } export async function loadDBPatterns() { @@ -92,7 +89,7 @@ export const setLatestCode = (code) => settingsMap.setKey('latestCode', code); const defaultCode = ''; export const userPattern = { - collection: collectionName.user, + collection: patternFilterName.user, getAll() { const patterns = parseJSON(settingsMap.get().userPatterns); return patterns ?? {};