feat: phase 5 refactor

This commit is contained in:
2026-02-21 18:17:35 +01:00
parent 78a163a0c9
commit d70b13952a
5 changed files with 114 additions and 15 deletions

View File

@@ -4,6 +4,7 @@ import { useAppStore, PostData, MediaData, TaskProgress } from './store';
import { loadTabsForProject, saveTabsForProject } from './utils';
import { openSingletonToolTab } from './navigation/tabPolicy';
import { persistSiteValidationReport } from './navigation/siteValidationPersistence';
import { executeActivityClick } from './navigation/activityExecution';
import { ensureRendererPicoThemeStylesheet, getRendererPicoTheme } from './utils/picoTheme';
import { useI18n } from './i18n';
import './App.css';
@@ -216,13 +217,39 @@ const App: React.FC = () => {
unsubscribers.push(
window.electronAPI?.on('menu:viewPosts', () => {
setActiveView('posts');
const state = useAppStore.getState();
executeActivityClick(
{
activeView: state.activeView,
sidebarVisible: state.sidebarVisible,
tabs: state.tabs,
activeTabId: state.activeTabId,
},
'posts',
{
setActiveView: state.setActiveView,
toggleSidebar: state.toggleSidebar,
},
);
}) || (() => {})
);
unsubscribers.push(
window.electronAPI?.on('menu:viewMedia', () => {
setActiveView('media');
const state = useAppStore.getState();
executeActivityClick(
{
activeView: state.activeView,
sidebarVisible: state.sidebarVisible,
tabs: state.tabs,
activeTabId: state.activeTabId,
},
'media',
{
setActiveView: state.setActiveView,
toggleSidebar: state.toggleSidebar,
},
);
}) || (() => {})
);

View File

@@ -2,12 +2,12 @@ import React from 'react';
import { useAppStore } from '../../store';
import { useI18n } from '../../i18n';
import {
getActivityClickActions,
getActivityConfig,
isActivityActive,
type ActivityId,
type ActivitySnapshot,
} from '../../navigation/activityBehavior';
import { executeActivityClick as runActivityClick } from '../../navigation/activityExecution';
import './ActivityBar.css';
// Simple SVG icons
@@ -74,15 +74,10 @@ export const ActivityBar: React.FC = () => {
};
const executeActivityClick = (activityId: ActivityId) => {
const actions = getActivityClickActions(snapshot, activityId);
for (const action of actions) {
if (action.type === 'toggleSidebar') {
toggleSidebar();
} else if (action.type === 'setActiveView') {
setActiveView(action.view);
}
}
runActivityClick(snapshot, activityId, {
toggleSidebar,
setActiveView,
});
};
const getTitle = (activityId: ActivityId) => `${t(getActivityConfig(activityId).labelKey)} ${t('activity.toggleHint')}`;

View File

@@ -0,0 +1,34 @@
import {
getActivityClickActions,
type ActivityAction,
type ActivityId,
type ActivitySnapshot,
} from './activityBehavior';
import type { SidebarView } from './sidebarViewRegistry';
export interface ActivityExecutionHandlers {
setActiveView: (view: SidebarView) => void;
toggleSidebar: () => void;
}
export function executeActivityClickActions(
actions: ActivityAction[],
handlers: ActivityExecutionHandlers,
): void {
for (const action of actions) {
if (action.type === 'toggleSidebar') {
handlers.toggleSidebar();
continue;
}
handlers.setActiveView(action.view);
}
}
export function executeActivityClick(
snapshot: ActivitySnapshot,
activityId: ActivityId,
handlers: ActivityExecutionHandlers,
): void {
executeActivityClickActions(getActivityClickActions(snapshot, activityId), handlers);
}