Refactor WorkspaceDataContext and useFileOperations to remove settings

This commit is contained in:
2025-07-11 23:53:37 +02:00
parent e1760ccd82
commit 0b0cd9160e
6 changed files with 53 additions and 76 deletions

View File

@@ -13,21 +13,20 @@ vi.mock('@mantine/notifications', () => ({
// Mock the workspace context and git operations
const mockWorkspaceData: {
currentWorkspace: { id: number; name: string } | null;
settings: {
gitAutoCommit: boolean;
gitEnabled: boolean;
gitCommitMsgTemplate: string;
};
currentWorkspace: {
id: number;
name: string;
gitAutoCommit?: boolean;
gitEnabled?: boolean;
gitCommitMsgTemplate?: string;
} | null;
} = {
currentWorkspace: {
id: 1,
name: 'test-workspace',
},
settings: {
gitAutoCommit: false,
gitEnabled: false,
gitCommitMsgTemplate: '${action} ${filename}',
gitCommitMsgTemplate: '${action}: ${filename}',
},
};
@@ -53,8 +52,6 @@ describe('useFileOperations', () => {
mockWorkspaceData.currentWorkspace = {
id: 1,
name: 'test-workspace',
};
mockWorkspaceData.settings = {
gitAutoCommit: false,
gitEnabled: false,
gitCommitMsgTemplate: '${action} ${filename}',
@@ -155,8 +152,8 @@ describe('useFileOperations', () => {
});
// Enable auto-commit
mockWorkspaceData.settings.gitAutoCommit = true;
mockWorkspaceData.settings.gitEnabled = true;
mockWorkspaceData.currentWorkspace!.gitAutoCommit = true;
mockWorkspaceData.currentWorkspace!.gitEnabled = true;
const { result } = renderHook(() => useFileOperations());
@@ -178,9 +175,9 @@ describe('useFileOperations', () => {
});
// Enable auto-commit with custom template
mockWorkspaceData.settings.gitAutoCommit = true;
mockWorkspaceData.settings.gitEnabled = true;
mockWorkspaceData.settings.gitCommitMsgTemplate =
mockWorkspaceData.currentWorkspace!.gitAutoCommit = true;
mockWorkspaceData.currentWorkspace!.gitEnabled = true;
mockWorkspaceData.currentWorkspace!.gitCommitMsgTemplate =
'Modified ${filename} - ${action}';
const { result } = renderHook(() => useFileOperations());
@@ -264,8 +261,8 @@ describe('useFileOperations', () => {
mockDeleteFile.mockResolvedValue(undefined);
// Enable auto-commit
mockWorkspaceData.settings.gitAutoCommit = true;
mockWorkspaceData.settings.gitEnabled = true;
mockWorkspaceData.currentWorkspace!.gitAutoCommit = true;
mockWorkspaceData.currentWorkspace!.gitEnabled = true;
const { result } = renderHook(() => useFileOperations());
@@ -382,8 +379,8 @@ describe('useFileOperations', () => {
});
// Enable auto-commit
mockWorkspaceData.settings.gitAutoCommit = true;
mockWorkspaceData.settings.gitEnabled = true;
mockWorkspaceData.currentWorkspace!.gitAutoCommit = true;
mockWorkspaceData.currentWorkspace!.gitEnabled = true;
const { result } = renderHook(() => useFileOperations());
@@ -407,8 +404,8 @@ describe('useFileOperations', () => {
});
// Enable auto-commit but disable git
mockWorkspaceData.settings.gitAutoCommit = true;
mockWorkspaceData.settings.gitEnabled = false;
mockWorkspaceData.currentWorkspace!.gitAutoCommit = true;
mockWorkspaceData.currentWorkspace!.gitEnabled = false;
const { result } = renderHook(() => useFileOperations());
@@ -428,8 +425,8 @@ describe('useFileOperations', () => {
});
// Enable git but disable auto-commit
mockWorkspaceData.settings.gitAutoCommit = false;
mockWorkspaceData.settings.gitEnabled = true;
mockWorkspaceData.currentWorkspace!.gitAutoCommit = false;
mockWorkspaceData.currentWorkspace!.gitEnabled = true;
const { result } = renderHook(() => useFileOperations());
@@ -449,9 +446,10 @@ describe('useFileOperations', () => {
});
// Enable auto-commit with lowercase template
mockWorkspaceData.settings.gitAutoCommit = true;
mockWorkspaceData.settings.gitEnabled = true;
mockWorkspaceData.settings.gitCommitMsgTemplate = 'updated ${filename}';
mockWorkspaceData.currentWorkspace!.gitAutoCommit = true;
mockWorkspaceData.currentWorkspace!.gitEnabled = true;
mockWorkspaceData.currentWorkspace!.gitCommitMsgTemplate =
'updated ${filename}';
const { result } = renderHook(() => useFileOperations());
@@ -476,9 +474,9 @@ describe('useFileOperations', () => {
mockDeleteFile.mockResolvedValue(undefined);
// Enable auto-commit
mockWorkspaceData.settings.gitAutoCommit = true;
mockWorkspaceData.settings.gitEnabled = true;
mockWorkspaceData.settings.gitCommitMsgTemplate =
mockWorkspaceData.currentWorkspace!.gitAutoCommit = true;
mockWorkspaceData.currentWorkspace!.gitEnabled = true;
mockWorkspaceData.currentWorkspace!.gitCommitMsgTemplate =
'${action}: ${filename}';
const { result } = renderHook(() => useFileOperations());

View File

@@ -19,13 +19,14 @@ interface UseFileOperationsResult {
}
export const useFileOperations = (): UseFileOperationsResult => {
const { currentWorkspace, settings } = useWorkspaceData();
const { currentWorkspace } = useWorkspaceData();
const { handleCommitAndPush } = useGitOperations();
const autoCommit = useCallback(
async (filePath: string, action: FileAction): Promise<void> => {
if (settings.gitAutoCommit && settings.gitEnabled) {
let commitMessage = settings.gitCommitMsgTemplate
if (!currentWorkspace || !currentWorkspace.gitEnabled) return;
if (currentWorkspace.gitAutoCommit && currentWorkspace.gitEnabled) {
let commitMessage = currentWorkspace.gitCommitMsgTemplate
.replace('${filename}', filePath)
.replace('${action}', action);
@@ -35,7 +36,7 @@ export const useFileOperations = (): UseFileOperationsResult => {
await handleCommitAndPush(commitMessage);
}
},
[settings, handleCommitAndPush]
[currentWorkspace, handleCommitAndPush]
);
const handleSave = useCallback(
@@ -123,15 +124,6 @@ export const useFileOperations = (): UseFileOperationsResult => {
try {
// TODO: Implement your file upload API call
// Example:
// const formData = new FormData();
// Array.from(files).forEach((file, index) => {
// formData.append(`file${index}`, file);
// });
// if (targetPath) {
// formData.append('targetPath', targetPath);
// }
// await uploadFiles(currentWorkspace.name, formData);
notifications.show({
title: 'Success',
@@ -165,12 +157,6 @@ export const useFileOperations = (): UseFileOperationsResult => {
try {
// TODO: Implement your file move API call
// Example:
// await moveFiles(currentWorkspace.name, {
// sourceIds: dragIds,
// targetParentId: parentId,
// targetIndex: index
// });
notifications.show({
title: 'Success',

View File

@@ -13,14 +13,11 @@ vi.mock('@mantine/notifications', () => ({
// Mock the workspace context
const mockWorkspaceData: {
currentWorkspace: { id: number; name: string } | null;
settings: { gitEnabled: boolean };
currentWorkspace: { id: number; name: string; gitEnabled: boolean } | null;
} = {
currentWorkspace: {
id: 1,
name: 'test-workspace',
},
settings: {
gitEnabled: true,
},
};
@@ -39,8 +36,6 @@ describe('useGitOperations', () => {
mockWorkspaceData.currentWorkspace = {
id: 1,
name: 'test-workspace',
};
mockWorkspaceData.settings = {
gitEnabled: true,
};
});
@@ -114,7 +109,7 @@ describe('useGitOperations', () => {
});
it('returns false when git is disabled', async () => {
mockWorkspaceData.settings.gitEnabled = false;
mockWorkspaceData.currentWorkspace!.gitEnabled = false;
const { result } = renderHook(() => useGitOperations());
@@ -208,7 +203,7 @@ describe('useGitOperations', () => {
});
it('does nothing when git is disabled', async () => {
mockWorkspaceData.settings.gitEnabled = false;
mockWorkspaceData.currentWorkspace!.gitEnabled = false;
const { result } = renderHook(() => useGitOperations());
@@ -306,6 +301,7 @@ describe('useGitOperations', () => {
mockWorkspaceData.currentWorkspace = {
id: 2,
name: 'different-workspace',
gitEnabled: true,
};
rerender();
@@ -321,10 +317,10 @@ describe('useGitOperations', () => {
const { result, rerender } = renderHook(() => useGitOperations());
// Initially git is enabled
expect(mockWorkspaceData.settings.gitEnabled).toBe(true);
expect(mockWorkspaceData.currentWorkspace!.gitEnabled).toBe(true);
// Disable git
mockWorkspaceData.settings.gitEnabled = false;
mockWorkspaceData.currentWorkspace!.gitEnabled = false;
rerender();
let pullResult: boolean | undefined;
@@ -381,6 +377,7 @@ describe('useGitOperations', () => {
mockWorkspaceData.currentWorkspace = {
id: 1,
name: undefined!,
gitEnabled: true,
};
const { result } = renderHook(() => useGitOperations());
@@ -395,7 +392,9 @@ describe('useGitOperations', () => {
});
it('handles missing settings gracefully', async () => {
mockWorkspaceData.settings = {
mockWorkspaceData.currentWorkspace = {
id: 1,
name: 'test-workspace',
gitEnabled: undefined!,
};

View File

@@ -10,10 +10,14 @@ interface UseGitOperationsResult {
}
export const useGitOperations = (): UseGitOperationsResult => {
const { currentWorkspace, settings } = useWorkspaceData();
const { currentWorkspace } = useWorkspaceData();
const handlePull = useCallback(async (): Promise<boolean> => {
if (!currentWorkspace || !settings.gitEnabled || !currentWorkspace.name)
if (
!currentWorkspace ||
!currentWorkspace.gitEnabled ||
!currentWorkspace.name
)
return false;
try {
@@ -33,11 +37,11 @@ export const useGitOperations = (): UseGitOperationsResult => {
});
return false;
}
}, [currentWorkspace, settings.gitEnabled]);
}, [currentWorkspace]);
const handleCommitAndPush = useCallback(
async (message: string): Promise<void> => {
if (!currentWorkspace || !settings.gitEnabled) return;
if (!currentWorkspace || !currentWorkspace.gitEnabled) return;
try {
const commitHash: CommitHash = await commitAndPush(
@@ -60,7 +64,7 @@ export const useGitOperations = (): UseGitOperationsResult => {
return;
}
},
[currentWorkspace, settings.gitEnabled]
[currentWorkspace]
);
return { handlePull, handleCommitAndPush };