import { createEffect, onCleanup } from 'solid-js'; import { invoke } from '@tauri-apps/api/core'; import { DisplayView } from './display-view'; import { DisplayListContainer } from './display-list-container'; import { displayStore, setDisplayStore } from '../../stores/display.store'; import { LedStripConfigContainer } from '../../models/led-strip-config'; import { setLedStripStore } from '../../stores/led-strip.store'; import { listen } from '@tauri-apps/api/event'; import { LedStripPartsSorter } from './led-strip-parts-sorter'; import { LedCountControlPanel } from './led-count-control-panel'; import { createStore } from 'solid-js/store'; import { LedStripConfigurationContext, LedStripConfigurationContextType, } from '../../contexts/led-strip-configuration.context'; import { useLanguage } from '../../i18n/index'; export const LedStripConfiguration = () => { const { t } = useLanguage(); createEffect(() => { invoke('list_display_info').then((displays) => { const parsedDisplays = JSON.parse(displays); setDisplayStore({ displays: parsedDisplays, }); }).catch((error) => { console.error('Failed to load displays:', error); }); invoke('read_led_strip_configs').then((configs) => { setLedStripStore(configs); }).catch((error) => { console.error('Failed to load LED strip configs:', error); }); }); // listen to config_changed event createEffect(() => { const unlisten = listen('config_changed', (event) => { const { strips, mappers } = event.payload as LedStripConfigContainer; setLedStripStore({ strips, mappers, }); }); onCleanup(() => { unlisten.then((unlisten) => unlisten()); }); }); // listen to led_colors_changed event createEffect(() => { const unlisten = listen('led_colors_changed', (event) => { if (!window.document.hidden) { const colors = event.payload; setLedStripStore({ colors, }); } }); onCleanup(() => { unlisten.then((unlisten) => unlisten()); }); }); // listen to led_sorted_colors_changed event createEffect(() => { const unlisten = listen('led_sorted_colors_changed', (event) => { if (!window.document.hidden) { const sortedColors = event.payload; setLedStripStore({ sortedColors, }); } }); onCleanup(() => { unlisten.then((unlisten) => unlisten()); }); }); const [ledStripConfiguration, setLedStripConfiguration] = createStore< LedStripConfigurationContextType[0] >({ selectedStripPart: null, hoveredStripPart: null, }); const ledStripConfigurationContextValue: LedStripConfigurationContextType = [ ledStripConfiguration, { setSelectedStripPart: (v) => { setLedStripConfiguration({ selectedStripPart: v, }); }, setHoveredStripPart: (v) => { setLedStripConfiguration({ hoveredStripPart: v, }); }, }, ]; return (

{t('ledConfig.title')}

{t('displays.displayCount')}
{displayStore.displays.length}
{/* LED Strip Sorter Panel */}
{t('ledConfig.stripSorting')}
{t('ledConfig.realtimePreview')}
💡 {t('ledConfig.sortingTip')}
{/* Display Configuration Panel - Auto height based on content */}
{t('ledConfig.displayConfiguration')}
{t('ledConfig.visualEditor')}
{displayStore.displays.map((display) => ( ))}
💡 {t('ledConfig.displayTip')}
{/* LED Count Control Panels */}

{t('ledConfig.ledCountControl')}

{t('ledConfig.realtimeAdjustment')}
{displayStore.displays.map((display) => ( ))}
); };