feat: phase 5 refactor
This commit is contained in:
@@ -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,
|
||||
},
|
||||
);
|
||||
}) || (() => {})
|
||||
);
|
||||
|
||||
|
||||
@@ -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')}`;
|
||||
|
||||
34
src/renderer/navigation/activityExecution.ts
Normal file
34
src/renderer/navigation/activityExecution.ts
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user