diff --git a/app/src/components/auth/LoginPage.tsx b/app/src/components/auth/LoginPage.tsx index b2ff858..ad45793 100644 --- a/app/src/components/auth/LoginPage.tsx +++ b/app/src/components/auth/LoginPage.tsx @@ -17,14 +17,16 @@ const LoginPage: React.FC = () => { const [loading, setLoading] = useState(false); const { login } = useAuth(); - const handleSubmit = async (e: FormEvent): Promise => { + const handleSubmit = (e: FormEvent): void => { e.preventDefault(); setLoading(true); - try { - await login(email, password); - } finally { - setLoading(false); - } + login(email, password) + .catch((error) => { + console.error('Login failed:', error); + }) + .finally(() => { + setLoading(false); + }); }; return ( diff --git a/app/src/components/layout/Sidebar.tsx b/app/src/components/layout/Sidebar.tsx index cdcfe61..c491524 100644 --- a/app/src/components/layout/Sidebar.tsx +++ b/app/src/components/layout/Sidebar.tsx @@ -4,7 +4,7 @@ import FileActions from '../files/FileActions'; import FileTree from '../files/FileTree'; import { useGitOperations } from '../../hooks/useGitOperations'; import { useWorkspace } from '../../contexts/WorkspaceContext'; -import type { FileNode } from '@/types/fileApi'; +import type { FileNode } from '@/types/models'; interface SidebarProps { selectedFile: string | null; @@ -23,7 +23,7 @@ const Sidebar: React.FC = ({ const { handlePull } = useGitOperations(); useEffect(() => { - loadFileList(); + void loadFileList(); }, [loadFileList]); return ( diff --git a/app/src/components/modals/account/DeleteAccountModal.tsx b/app/src/components/modals/account/DeleteAccountModal.tsx index 0a2255c..96d56ea 100644 --- a/app/src/components/modals/account/DeleteAccountModal.tsx +++ b/app/src/components/modals/account/DeleteAccountModal.tsx @@ -50,7 +50,7 @@ const DeleteAccountModal: React.FC = ({ - + diff --git a/app/src/components/modals/file/DeleteFileModal.tsx b/app/src/components/modals/file/DeleteFileModal.tsx index c21fe26..8ba7f22 100644 --- a/app/src/components/modals/file/DeleteFileModal.tsx +++ b/app/src/components/modals/file/DeleteFileModal.tsx @@ -28,7 +28,7 @@ const DeleteFileModal: React.FC = ({ title="Delete File" centered > - Are you sure you want to delete "{selectedFile}"? + Are you sure you want to delete "{selectedFile}"? - diff --git a/app/src/components/modals/git/CommitMessageModal.tsx b/app/src/components/modals/git/CommitMessageModal.tsx index 7443705..a8df024 100644 --- a/app/src/components/modals/git/CommitMessageModal.tsx +++ b/app/src/components/modals/git/CommitMessageModal.tsx @@ -45,7 +45,7 @@ const CommitMessageModal: React.FC = ({ > Cancel - + diff --git a/app/src/components/modals/user/CreateUserModal.tsx b/app/src/components/modals/user/CreateUserModal.tsx index 0b591b5..39d0560 100644 --- a/app/src/components/modals/user/CreateUserModal.tsx +++ b/app/src/components/modals/user/CreateUserModal.tsx @@ -8,8 +8,8 @@ import { Button, Group, } from '@mantine/core'; -import type { CreateUserRequest } from '@/types/adminApi'; -import { UserRole } from '@/types/authApi'; +import type { CreateUserRequest } from '@/types/api'; +import { UserRole } from '@/types/models'; interface CreateUserModalProps { opened: boolean; @@ -85,7 +85,7 @@ const CreateUserModal: React.FC = ({ - diff --git a/app/src/components/modals/user/DeleteUserModal.tsx b/app/src/components/modals/user/DeleteUserModal.tsx index 319ab18..8870816 100644 --- a/app/src/components/modals/user/DeleteUserModal.tsx +++ b/app/src/components/modals/user/DeleteUserModal.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Modal, Text, Button, Group, Stack } from '@mantine/core'; -import type { User } from '@/types/authApi'; +import type { User } from '@/types/models'; interface DeleteUserModalProps { opened: boolean; @@ -26,14 +26,15 @@ const DeleteUserModal: React.FC = ({ > - Are you sure you want to delete user "{user?.email}"? This action cannot - be undone and all associated data will be permanently deleted. + Are you sure you want to delete user "{user?.email}"? This + action cannot be undone and all associated data will be permanently + deleted. - diff --git a/app/src/components/modals/user/EditUserModal.tsx b/app/src/components/modals/user/EditUserModal.tsx index 5665903..b270a35 100644 --- a/app/src/components/modals/user/EditUserModal.tsx +++ b/app/src/components/modals/user/EditUserModal.tsx @@ -9,9 +9,8 @@ import { PasswordInput, Text, } from '@mantine/core'; -import type { UpdateUserRequest } from '@/types/adminApi'; -import type { User} from '@/types/authApi'; -import { UserRole } from '@/types/authApi'; +import type { UpdateUserRequest } from '@/types/api'; +import { type User, UserRole } from '@/types/models'; interface EditUserModalProps { opened: boolean; @@ -114,7 +113,7 @@ const EditUserModal: React.FC = ({ - diff --git a/app/src/components/modals/workspace/CreateWorkspaceModal.tsx b/app/src/components/modals/workspace/CreateWorkspaceModal.tsx index 57b245f..1d218d5 100644 --- a/app/src/components/modals/workspace/CreateWorkspaceModal.tsx +++ b/app/src/components/modals/workspace/CreateWorkspaceModal.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { Modal, TextInput, Button, Group, Box } from '@mantine/core'; import { useModalContext } from '../../../contexts/ModalContext'; import { notifications } from '@mantine/notifications'; -import type { Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/models'; import { createWorkspace } from '@/api/workspace'; interface CreateWorkspaceModalProps { @@ -38,9 +38,9 @@ const CreateWorkspaceModal: React.FC = ({ setName(''); setCreateWorkspaceModalVisible(false); if (onWorkspaceCreated) { - onWorkspaceCreated(workspace); + await onWorkspaceCreated(workspace); } - } catch (error) { + } catch (_error) { notifications.show({ title: 'Error', message: 'Failed to create workspace', @@ -77,7 +77,7 @@ const CreateWorkspaceModal: React.FC = ({ > Cancel - diff --git a/app/src/components/modals/workspace/DeleteWorkspaceModal.tsx b/app/src/components/modals/workspace/DeleteWorkspaceModal.tsx index 8418fb1..e7e5d08 100644 --- a/app/src/components/modals/workspace/DeleteWorkspaceModal.tsx +++ b/app/src/components/modals/workspace/DeleteWorkspaceModal.tsx @@ -23,15 +23,15 @@ const DeleteWorkspaceModal: React.FC = ({ > - Are you sure you want to delete workspace "{workspaceName}"? This action - cannot be undone and all files in this workspace will be permanently - deleted. + Are you sure you want to delete workspace "{workspaceName}"? + This action cannot be undone and all files in this workspace will be + permanently deleted. - diff --git a/app/src/components/navigation/UserMenu.tsx b/app/src/components/navigation/UserMenu.tsx index 1376792..7abc889 100644 --- a/app/src/components/navigation/UserMenu.tsx +++ b/app/src/components/navigation/UserMenu.tsx @@ -26,8 +26,8 @@ const UserMenu: React.FC = () => { const [opened, setOpened] = useState(false); const { user, logout } = useAuth(); - const handleLogout = (): void => { - logout(); + const handleLogout = async (): Promise => { + await logout(); }; return ( diff --git a/app/src/components/navigation/WorkspaceSwitcher.tsx b/app/src/components/navigation/WorkspaceSwitcher.tsx index 5092875..82c1172 100644 --- a/app/src/components/navigation/WorkspaceSwitcher.tsx +++ b/app/src/components/navigation/WorkspaceSwitcher.tsx @@ -19,7 +19,7 @@ import { useWorkspace } from '../../contexts/WorkspaceContext'; import { useModalContext } from '../../contexts/ModalContext'; import { listWorkspaces } from '../../api/workspace'; import CreateWorkspaceModal from '../modals/workspace/CreateWorkspaceModal'; -import type { Workspace } from '../../types/workspace'; +import type { Workspace } from '@/types/models'; const WorkspaceSwitcher: React.FC = () => { const { currentWorkspace, switchWorkspace } = useWorkspace(); diff --git a/app/src/components/settings/account/AccountSettings.tsx b/app/src/components/settings/account/AccountSettings.tsx index f96838f..69635b5 100644 --- a/app/src/components/settings/account/AccountSettings.tsx +++ b/app/src/components/settings/account/AccountSettings.tsx @@ -16,13 +16,12 @@ import SecuritySettings from './SecuritySettings'; import ProfileSettings from './ProfileSettings'; import DangerZoneSettings from './DangerZoneSettings'; import AccordionControl from '../AccordionControl'; -import type { - UserProfileSettings, - ProfileSettingsState, - SettingsAction} from '../../../types/settings'; import { - SettingsActionType -} from '../../../types/settings'; + type UserProfileSettings, + type ProfileSettingsState, + type SettingsAction, + SettingsActionType, +} from '@/types/models'; interface AccountSettingsProps { opened: boolean; diff --git a/app/src/components/settings/account/DangerZoneSettings.tsx b/app/src/components/settings/account/DangerZoneSettings.tsx index c324c01..1636782 100644 --- a/app/src/components/settings/account/DangerZoneSettings.tsx +++ b/app/src/components/settings/account/DangerZoneSettings.tsx @@ -13,7 +13,7 @@ const DangerZoneSettings: React.FC = () => { const success = await deleteAccount(password); if (success) { setDeleteModalOpened(false); - logout(); + await logout(); } }; diff --git a/app/src/components/settings/account/ProfileSettings.tsx b/app/src/components/settings/account/ProfileSettings.tsx index 96c24b4..52851c4 100644 --- a/app/src/components/settings/account/ProfileSettings.tsx +++ b/app/src/components/settings/account/ProfileSettings.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Box, Stack, TextInput } from '@mantine/core'; -import type { UserProfileSettings } from '../../../types/settings'; +import type { UserProfileSettings } from '@/types/models'; interface ProfileSettingsProps { settings: UserProfileSettings; diff --git a/app/src/components/settings/account/SecuritySettings.tsx b/app/src/components/settings/account/SecuritySettings.tsx index 4d75db9..ea62594 100644 --- a/app/src/components/settings/account/SecuritySettings.tsx +++ b/app/src/components/settings/account/SecuritySettings.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { Box, PasswordInput, Stack, Text } from '@mantine/core'; -import type { UserProfileSettings } from '@/types/settings'; +import type { UserProfileSettings } from '@/types/models'; interface SecuritySettingsProps { settings: UserProfileSettings; @@ -66,7 +66,7 @@ const SecuritySettings: React.FC = ({ /> Password must be at least 8 characters long. Leave password fields - empty if you don't want to change it. + empty if you don't want to change it. diff --git a/app/src/components/settings/admin/AdminUsersTab.tsx b/app/src/components/settings/admin/AdminUsersTab.tsx index 881231c..82f1ed3 100644 --- a/app/src/components/settings/admin/AdminUsersTab.tsx +++ b/app/src/components/settings/admin/AdminUsersTab.tsx @@ -20,8 +20,8 @@ import { useUserAdmin } from '../../../hooks/useUserAdmin'; import CreateUserModal from '../../modals/user/CreateUserModal'; import EditUserModal from '../../modals/user/EditUserModal'; import DeleteUserModal from '../../modals/user/DeleteUserModal'; -import type { User } from '../../../types/authApi'; -import type { CreateUserRequest, UpdateUserRequest } from '../../../types/adminApi'; +import type { User } from '@/types/models'; +import type { CreateUserRequest, UpdateUserRequest } from '@/types/api'; interface AdminUsersTabProps { currentUser: User; diff --git a/app/src/components/settings/admin/AdminWorkspacesTab.tsx b/app/src/components/settings/admin/AdminWorkspacesTab.tsx index 1ef9395..094364b 100644 --- a/app/src/components/settings/admin/AdminWorkspacesTab.tsx +++ b/app/src/components/settings/admin/AdminWorkspacesTab.tsx @@ -3,7 +3,7 @@ import { Table, Group, Text, Box, LoadingOverlay, Alert } from '@mantine/core'; import { IconAlertCircle } from '@tabler/icons-react'; import { useAdminData } from '../../../hooks/useAdminData'; import { formatBytes } from '../../../utils/formatBytes'; -import type { FileCountStats, WorkspaceStats } from '../../../types/adminApi'; +import type { FileCountStats, WorkspaceStats } from '@/types/models'; const AdminWorkspacesTab: React.FC = () => { const { diff --git a/app/src/components/settings/workspace/AppearanceSettings.tsx b/app/src/components/settings/workspace/AppearanceSettings.tsx index 1d7f188..0a242a6 100644 --- a/app/src/components/settings/workspace/AppearanceSettings.tsx +++ b/app/src/components/settings/workspace/AppearanceSettings.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Text, Switch, Group, Box } from '@mantine/core'; import { useWorkspace } from '../../../contexts/WorkspaceContext'; -import { Theme } from '@/types/theme'; +import { Theme } from '@/types/models'; interface AppearanceSettingsProps { onThemeChange: (newTheme: Theme) => void; diff --git a/app/src/components/settings/workspace/GeneralSettings.tsx b/app/src/components/settings/workspace/GeneralSettings.tsx index 98a6b67..d6763e1 100644 --- a/app/src/components/settings/workspace/GeneralSettings.tsx +++ b/app/src/components/settings/workspace/GeneralSettings.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Box, TextInput, Text, Grid } from '@mantine/core'; -import type { Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/models'; interface GeneralSettingsProps { name: string; diff --git a/app/src/components/settings/workspace/GitSettings.tsx b/app/src/components/settings/workspace/GitSettings.tsx index 3656d26..b73d8eb 100644 --- a/app/src/components/settings/workspace/GitSettings.tsx +++ b/app/src/components/settings/workspace/GitSettings.tsx @@ -8,7 +8,7 @@ import { Group, Grid, } from '@mantine/core'; -import type { Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/models'; interface GitSettingsProps { gitEnabled: boolean; @@ -19,7 +19,7 @@ interface GitSettingsProps { gitCommitMsgTemplate: string; gitCommitName: string; gitCommitEmail: string; - onInputChange: (key: keyof Workspace, value: any) => void; + onInputChange: (key: keyof Workspace, value: string | boolean) => void; } const GitSettings: React.FC = ({ diff --git a/app/src/components/settings/workspace/WorkspaceSettings.tsx b/app/src/components/settings/workspace/WorkspaceSettings.tsx index 72d0a39..f4065d4 100644 --- a/app/src/components/settings/workspace/WorkspaceSettings.tsx +++ b/app/src/components/settings/workspace/WorkspaceSettings.tsx @@ -17,10 +17,12 @@ import GeneralSettings from './GeneralSettings'; import { useModalContext } from '../../../contexts/ModalContext'; import DangerZoneSettings from './DangerZoneSettings'; import AccordionControl from '../AccordionControl'; -import type { SettingsAction } from '../../../types/settings'; -import { SettingsActionType } from '../../../types/settings'; -import type { Workspace } from '../../../types/workspace'; - +import { + type Theme, + type Workspace, + type SettingsAction, + SettingsActionType, +} from '@/types/models'; // State and reducer for workspace settings interface WorkspaceSettingsState { localSettings: Partial; @@ -46,7 +48,7 @@ function settingsReducer( initialSettings: action.payload || {}, hasUnsavedChanges: false, }; - case SettingsActionType.UPDATE_LOCAL_SETTINGS: + case SettingsActionType.UPDATE_LOCAL_SETTINGS: { const newLocalSettings = { ...state.localSettings, ...action.payload }; const hasChanges = JSON.stringify(newLocalSettings) !== @@ -56,6 +58,7 @@ function settingsReducer( localSettings: newLocalSettings, hasUnsavedChanges: hasChanges, }; + } case SettingsActionType.MARK_SAVED: return { ...state, @@ -95,7 +98,7 @@ const WorkspaceSettings: React.FC = () => { }, [currentWorkspace]); const handleInputChange = useCallback( - (key: keyof Workspace, value: any): void => { + (key: K, value: Workspace[K]): void => { dispatch({ type: SettingsActionType.UPDATE_LOCAL_SETTINGS, payload: { [key]: value } as Partial, @@ -194,7 +197,7 @@ const WorkspaceSettings: React.FC = () => { - handleInputChange('theme', newTheme) + handleInputChange('theme', newTheme as Theme) } /> @@ -247,7 +250,7 @@ const WorkspaceSettings: React.FC = () => { - +