UNPKG

@isthatuzii/create-nano-app

Version:

Desktop application scaffolding tool for the Nano Framework

161 lines (150 loc) 4.4 kB
export const createDataBrowserFunctions = ( state, setState, props ) => { // Mock data structure similar to Blender's outliner const mockData = [ { id: 'datacore', name: 'Datacore', type: 'root', children: [ { id: 'data_paks', name: 'Data.p4k', type: 'package', children: [ { id: 'localization', name: 'Localization', type: 'folder', children: [] }, { id: 'action_map', name: 'Action Map', type: 'folder', children: [] } ] }, { id: 'entities', name: 'entities', type: 'folder', children: [ { id: 'legacy_items', name: 'legacyitems', type: 'folder', children: [] }, { id: 'scitem', name: 'scitem', type: 'folder', children: [] }, { id: 'spaceships', name: 'spaceships', type: 'folder', children: [ { id: 'drak_caterpillar', name: 'drak_caterpillar', type: 'EntityClassDefinition' }, { id: 'drak_caterpillar_pirate', name: 'drak_caterpillar_pirate', type: 'EntityClassDefinition' }, { id: 'drak_caterpillar_pu_di_civ', name: 'drak_caterpillar_pu_di_civ', type: 'EntityClassDefinition' }, { id: 'drak_caterpillar_pu_di_pir', name: 'drak_caterpillar_pu_di_pir', type: 'EntityClassDefinition' }, { id: 'drak_caterpillar_hijacked', name: 'drak_caterpillar_hijacked', type: 'EntityClassDefinition' }, { id: 'drak_caterpillar_s42_civ_taba', name: 'drak_caterpillar_s42_civ_taba', type: 'EntityClassDefinition' }, { id: 'drak_caterpillar_falseprositive_la', name: 'drak_caterpillar_falseprositive_la', type: 'EntityClassDefinition' }, { id: 'drak_caterpillar_shipshowdown', name: 'drak_caterpillar_shipshowdown', type: 'EntityClassDefinition' } ] } ] }, { id: 'mission_data', name: 'missiondata', type: 'folder', children: [] }, { id: 'radar_system', name: 'radarsystem', type: 'folder', children: [] }, { id: 'tmp_palettes', name: 'tmppalettes', type: 'folder', children: [] }, { id: 'ui', name: 'ui', type: 'folder', children: [] } ] } ]; const handleItemClick = (item) => { setState(prev => ({ ...prev, selectedItem: item.id })); // Notify parent component if callback provided if (props.onItemSelect) { props.onItemSelect(item); } }; const toggleExpand = (itemId) => { setState(prev => { const newExpanded = new Set(prev.expandedItems); if (newExpanded.has(itemId)) { newExpanded.delete(itemId); } else { newExpanded.add(itemId); } return { ...prev, expandedItems: newExpanded }; }); }; const handleSearch = (term) => { setState(prev => ({ ...prev, searchTerm: term })); }; const filterItems = (items, term) => { if (!term) return items; return items.map(item => { const matchesSearch = item.name.toLowerCase().includes(term.toLowerCase()); const filteredChildren = item.children ? filterItems(item.children, term) : []; if (matchesSearch || filteredChildren.length > 0) { return { ...item, children: filteredChildren }; } return null; }).filter(Boolean); }; const getFilteredData = () => { return filterItems(mockData, state().searchTerm); }; const initialize = () => { console.log("🗂️ DataBrowser initialized"); }; return { handleItemClick, toggleExpand, handleSearch, getFilteredData, initialize }; };