mirror of
https://github.com/NanmiCoder/claude-code-haha.git
synced 2026-10-10 20:03:13 +08:00
Remove mistaken memory project actions
The memory resource tree should keep the project/file hierarchy, but the extra project action surface was not wanted for this page. This removes the pinning state, Finder action, and matching tests/i18n while leaving the tree layout intact. Constraint: Preserve the existing memory directory tree changes. Rejected: Revert the whole memory tree redesign | the user explicitly asked to keep the original directory tree work. Confidence: high Scope-risk: narrow Tested: cd desktop && bun run test -- src/__tests__/memorySettings.test.tsx Tested: cd desktop && bun run lint
This commit is contained in:
@@ -8,38 +8,19 @@ import { useSessionStore } from '../stores/sessionStore'
|
||||
import { useSettingsStore } from '../stores/settingsStore'
|
||||
import { useUIStore } from '../stores/uiStore'
|
||||
|
||||
const { memoryApiMock, openTargetStoreMock } = vi.hoisted(() => ({
|
||||
const { memoryApiMock } = vi.hoisted(() => ({
|
||||
memoryApiMock: {
|
||||
listProjects: vi.fn(),
|
||||
listFiles: vi.fn(),
|
||||
readFile: vi.fn(),
|
||||
saveFile: vi.fn(),
|
||||
},
|
||||
openTargetStoreMock: {
|
||||
targets: [{ id: 'finder', kind: 'file_manager', label: 'Finder', icon: 'finder', platform: 'darwin' }],
|
||||
platform: 'darwin',
|
||||
primaryTargetId: 'finder',
|
||||
lastSuccessfulTargetId: null,
|
||||
loading: false,
|
||||
error: null,
|
||||
fetchedAt: 1,
|
||||
ensureTargets: vi.fn(),
|
||||
refreshTargets: vi.fn(),
|
||||
openTarget: vi.fn(),
|
||||
},
|
||||
}))
|
||||
|
||||
vi.mock('../api/memory', () => ({
|
||||
memoryApi: memoryApiMock,
|
||||
}))
|
||||
|
||||
vi.mock('../stores/openTargetStore', () => ({
|
||||
useOpenTargetStore: Object.assign(
|
||||
(selector: (state: typeof openTargetStoreMock) => unknown) => selector(openTargetStoreMock),
|
||||
{ getState: () => openTargetStoreMock },
|
||||
),
|
||||
}))
|
||||
|
||||
vi.mock('../components/markdown/MarkdownRenderer', () => ({
|
||||
MarkdownRenderer: ({ content }: { content: string }) => (
|
||||
<div data-testid="markdown-preview">{content}</div>
|
||||
@@ -49,11 +30,6 @@ vi.mock('../components/markdown/MarkdownRenderer', () => ({
|
||||
describe('MemorySettings', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
window.localStorage.removeItem('cc-haha-memory-pinned-projects')
|
||||
openTargetStoreMock.targets = [{ id: 'finder', kind: 'file_manager', label: 'Finder', icon: 'finder', platform: 'darwin' }]
|
||||
openTargetStoreMock.primaryTargetId = 'finder'
|
||||
openTargetStoreMock.ensureTargets.mockResolvedValue(undefined)
|
||||
openTargetStoreMock.openTarget.mockResolvedValue(undefined)
|
||||
useSettingsStore.setState({ locale: 'en' })
|
||||
useSessionStore.setState({
|
||||
sessions: [
|
||||
@@ -201,56 +177,6 @@ describe('MemorySettings', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('pins projects above the regular project list from the project menu', async () => {
|
||||
memoryApiMock.listProjects.mockResolvedValue({
|
||||
projects: [
|
||||
{
|
||||
id: '-workspace-alpha',
|
||||
label: '/workspace/alpha',
|
||||
memoryDir: '/tmp/claude/projects/-workspace-alpha/memory',
|
||||
exists: true,
|
||||
fileCount: 1,
|
||||
isCurrent: true,
|
||||
},
|
||||
{
|
||||
id: '-workspace-beta',
|
||||
label: '/workspace/beta',
|
||||
memoryDir: '/tmp/claude/projects/-workspace-beta/memory',
|
||||
exists: true,
|
||||
fileCount: 2,
|
||||
isCurrent: false,
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
render(<MemorySettings />)
|
||||
|
||||
expect(await screen.findAllByText('workspace/alpha')).not.toHaveLength(0)
|
||||
expect(await screen.findByText('workspace/beta')).toBeInTheDocument()
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Project actions for workspace/beta' }))
|
||||
fireEvent.click(await screen.findByRole('menuitem', { name: 'Pin project' }))
|
||||
|
||||
expect(screen.getByText('Pinned projects')).toBeInTheDocument()
|
||||
const projectRows = screen.getAllByTestId('memory-project-row')
|
||||
expect(projectRows[0]).toHaveTextContent('workspace/beta')
|
||||
expect(window.localStorage.getItem('cc-haha-memory-pinned-projects')).toContain('-workspace-beta')
|
||||
})
|
||||
|
||||
it('opens a memory project in Finder through the existing open target flow', async () => {
|
||||
render(<MemorySettings />)
|
||||
|
||||
expect(await screen.findAllByText('workspace/demo')).not.toHaveLength(0)
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Project actions for workspace/demo' }))
|
||||
fireEvent.click(await screen.findByRole('menuitem', { name: 'Open in Finder' }))
|
||||
|
||||
await waitFor(() => {
|
||||
expect(openTargetStoreMock.ensureTargets).toHaveBeenCalled()
|
||||
expect(openTargetStoreMock.openTarget).toHaveBeenCalledWith('finder', '/workspace/demo')
|
||||
})
|
||||
})
|
||||
|
||||
it('renders nested memory files as a collapsible resource tree', async () => {
|
||||
memoryApiMock.listFiles.mockResolvedValue({
|
||||
files: [
|
||||
|
||||
@@ -556,7 +556,6 @@ export const en = {
|
||||
'settings.memory.refresh': 'Refresh',
|
||||
'settings.memory.projects': 'Projects',
|
||||
'settings.memory.files': 'Memory files',
|
||||
'settings.memory.pinnedProjects': 'Pinned projects',
|
||||
'settings.memory.resourceManager': 'Resource manager',
|
||||
'settings.memory.editor': 'Editor',
|
||||
'settings.memory.preview': 'Preview',
|
||||
@@ -580,12 +579,6 @@ export const en = {
|
||||
'settings.memory.noFileMatches': 'No memory files match this search.',
|
||||
'settings.memory.clearSearch': 'Clear search',
|
||||
'settings.memory.toggleFolder': 'Toggle {name}',
|
||||
'settings.memory.projectActions': 'Project actions for {name}',
|
||||
'settings.memory.pinProject': 'Pin project',
|
||||
'settings.memory.unpinProject': 'Unpin project',
|
||||
'settings.memory.openInFinder': 'Open in Finder',
|
||||
'settings.memory.openInFinderFailed': 'Could not open the project in Finder.',
|
||||
'settings.memory.openInFinderUnavailable': 'No file manager is available.',
|
||||
|
||||
// Settings > Plugins
|
||||
'settings.plugins.title': 'Installed Plugins',
|
||||
|
||||
@@ -558,7 +558,6 @@ export const zh: Record<TranslationKey, string> = {
|
||||
'settings.memory.refresh': '刷新',
|
||||
'settings.memory.projects': '项目',
|
||||
'settings.memory.files': '记忆文件',
|
||||
'settings.memory.pinnedProjects': '置顶项目',
|
||||
'settings.memory.resourceManager': '资源管理器',
|
||||
'settings.memory.editor': '编辑',
|
||||
'settings.memory.preview': '预览',
|
||||
@@ -582,12 +581,6 @@ export const zh: Record<TranslationKey, string> = {
|
||||
'settings.memory.noFileMatches': '没有匹配的记忆文件。',
|
||||
'settings.memory.clearSearch': '清空搜索',
|
||||
'settings.memory.toggleFolder': '展开或折叠 {name}',
|
||||
'settings.memory.projectActions': '{name} 的项目操作',
|
||||
'settings.memory.pinProject': '置顶项目',
|
||||
'settings.memory.unpinProject': '取消置顶',
|
||||
'settings.memory.openInFinder': '在“访达”中打开',
|
||||
'settings.memory.openInFinderFailed': '无法在访达中打开项目。',
|
||||
'settings.memory.openInFinderUnavailable': '没有可用的文件管理器。',
|
||||
|
||||
// Settings > Plugins
|
||||
'settings.plugins.title': '已安装插件',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user