diff --git a/app/src/api/admin.ts b/app/src/api/admin.ts index 672145a..3b7d655 100644 --- a/app/src/api/admin.ts +++ b/app/src/api/admin.ts @@ -1,12 +1,15 @@ import { apiCall } from './api'; -import { API_BASE_URL, isUser, User } from '../types/authApi'; -import { +import type { User } from '../types/authApi'; +import { API_BASE_URL, isUser } from '../types/authApi'; +import type { CreateUserRequest, - isSystemStats, SystemStats, - UpdateUserRequest, + UpdateUserRequest} from '@/types/adminApi'; +import { + isSystemStats } from '@/types/adminApi'; -import { isWorkspace, Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/workspace'; +import { isWorkspace } from '@/types/workspace'; const ADMIN_BASE_URL = `${API_BASE_URL}/admin`; @@ -28,7 +31,7 @@ export const getUsers = async (): Promise => { if (!isUser(user)) { throw new Error('Invalid user object received from API'); } - return user as User; + return user; }); }; @@ -50,7 +53,7 @@ export const createUser = async ( if (!isUser(data)) { throw new Error('Invalid user object received from API'); } - return data as User; + return data; }; /** @@ -89,7 +92,7 @@ export const updateUser = async ( if (!isUser(data)) { throw new Error('Invalid user object received from API'); } - return data as User; + return data; }; // Workspace Management @@ -109,7 +112,7 @@ export const getWorkspaces = async (): Promise => { if (!isWorkspace(workspace)) { throw new Error('Invalid workspace object received from API'); } - return workspace as Workspace; + return workspace; }); }; @@ -126,5 +129,5 @@ export const getSystemStats = async (): Promise => { if (!isSystemStats(data)) { throw new Error('Invalid system stats response received from API'); } - return data as SystemStats; + return data; }; diff --git a/app/src/api/auth.ts b/app/src/api/auth.ts index 3fb3ff5..3aefe78 100644 --- a/app/src/api/auth.ts +++ b/app/src/api/auth.ts @@ -1,4 +1,5 @@ -import { API_BASE_URL, User, LoginRequest, isUser } from '../types/authApi'; +import type { User, LoginRequest} from '../types/authApi'; +import { API_BASE_URL, isUser } from '../types/authApi'; import { apiCall } from './api'; /** diff --git a/app/src/api/file.ts b/app/src/api/file.ts index cdfe123..4782bdb 100644 --- a/app/src/api/file.ts +++ b/app/src/api/file.ts @@ -1,12 +1,13 @@ import { API_BASE_URL } from '@/types/authApi'; import { apiCall } from './api'; -import { +import type { FileNode, + LookupResponse, + SaveFileResponse} from '@/types/fileApi'; +import { isFileNode, isLookupResponse, - isSaveFileResponse, - LookupResponse, - SaveFileResponse, + isSaveFileResponse } from '@/types/fileApi'; /** @@ -27,7 +28,7 @@ export const listFiles = async (workspaceName: string): Promise => { if (!isFileNode(file)) { throw new Error('Invalid file object received from API'); } - return file as FileNode; + return file; }); }; @@ -51,7 +52,7 @@ export const lookupFileByName = async ( if (!isLookupResponse(data)) { throw new Error('Invalid lookup response received from API'); } - const lookupResponse = data as LookupResponse; + const lookupResponse = data; return lookupResponse.paths; }; @@ -103,7 +104,7 @@ export const saveFile = async ( if (!isSaveFileResponse(data)) { throw new Error('Invalid save file response received from API'); } - return data as SaveFileResponse; + return data; }; /** diff --git a/app/src/api/git.ts b/app/src/api/git.ts index eb8cbe0..8227adf 100644 --- a/app/src/api/git.ts +++ b/app/src/api/git.ts @@ -1,6 +1,6 @@ import { API_BASE_URL } from '@/types/authApi'; import { apiCall } from './api'; -import { CommitHash } from '@/types/git'; +import type { CommitHash } from '@/types/git'; /** * pullChanges fetches the latest changes from the remote repository diff --git a/app/src/api/user.ts b/app/src/api/user.ts index a8747a2..41f09f8 100644 --- a/app/src/api/user.ts +++ b/app/src/api/user.ts @@ -1,6 +1,7 @@ -import { API_BASE_URL, isUser, User } from '@/types/authApi'; +import type { User } from '@/types/authApi'; +import { API_BASE_URL, isUser } from '@/types/authApi'; import { apiCall } from './api'; -import { UpdateProfileRequest } from '@/types/userApi'; +import type { UpdateProfileRequest } from '@/types/userApi'; /** * updateProfile updates the user's profile information. diff --git a/app/src/api/workspace.ts b/app/src/api/workspace.ts index 318523b..301ff48 100644 --- a/app/src/api/workspace.ts +++ b/app/src/api/workspace.ts @@ -1,6 +1,7 @@ import { API_BASE_URL } from '@/types/authApi'; import { apiCall } from './api'; -import { isWorkspace, Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/workspace'; +import { isWorkspace } from '@/types/workspace'; /** * listWorkspaces fetches the list of workspaces @@ -17,7 +18,7 @@ export const listWorkspaces = async (): Promise => { if (!isWorkspace(workspace)) { throw new Error('Invalid workspace object received from API'); } - return workspace as Workspace; + return workspace; }); }; @@ -39,7 +40,7 @@ export const createWorkspace = async (name: string): Promise => { if (!isWorkspace(data)) { throw new Error('Invalid workspace object received from API'); } - return data as Workspace; + return data; }; /** diff --git a/app/src/components/auth/LoginPage.tsx b/app/src/components/auth/LoginPage.tsx index 5e0d878..16370f9 100644 --- a/app/src/components/auth/LoginPage.tsx +++ b/app/src/components/auth/LoginPage.tsx @@ -1,4 +1,5 @@ -import React, { FormEvent, useState } from 'react'; +import type { FormEvent} from 'react'; +import React, { useState } from 'react'; import { TextInput, PasswordInput, diff --git a/app/src/components/editor/MarkdownPreview.tsx b/app/src/components/editor/MarkdownPreview.tsx index 9e8e2be..42adb58 100644 --- a/app/src/components/editor/MarkdownPreview.tsx +++ b/app/src/components/editor/MarkdownPreview.tsx @@ -1,4 +1,5 @@ -import React, { useState, useEffect, useMemo, ReactNode } from 'react'; +import type { ReactNode } from 'react'; +import React, { useState, useEffect, useMemo } from 'react'; import { unified } from 'unified'; import remarkParse from 'remark-parse'; import remarkMath from 'remark-math'; diff --git a/app/src/components/files/FileTree.tsx b/app/src/components/files/FileTree.tsx index ec5c4fe..85c87b0 100644 --- a/app/src/components/files/FileTree.tsx +++ b/app/src/components/files/FileTree.tsx @@ -1,9 +1,10 @@ import React, { useRef, useState, useLayoutEffect } from 'react'; -import { Tree, NodeApi } from 'react-arborist'; +import type { NodeApi } from 'react-arborist'; +import { Tree } from 'react-arborist'; import { IconFile, IconFolder, IconFolderOpen } from '@tabler/icons-react'; import { Tooltip } from '@mantine/core'; import useResizeObserver from '@react-hook/resize-observer'; -import { FileNode } from '../../types/fileApi'; +import type { FileNode } from '../../types/fileApi'; interface Size { width: number; @@ -48,7 +49,7 @@ function Node(props: any) { if (node.isInternal) { node.toggle(); } else { - const treeProps = node.tree.props as any; + const treeProps = node.tree.props; if (typeof treeProps.onNodeClick === 'function') { treeProps.onNodeClick(node); } @@ -124,7 +125,7 @@ const FileTree: React.FC = ({ {...({ // Use a spread with type assertion to add onNodeClick onNodeClick: (node: NodeApi) => { - const fileNode = node.data as FileNode; + const fileNode = node.data; if (!node.isInternal) { handleFileSelect(fileNode.path); } diff --git a/app/src/components/layout/MainContent.tsx b/app/src/components/layout/MainContent.tsx index a9366ae..a6bfc87 100644 --- a/app/src/components/layout/MainContent.tsx +++ b/app/src/components/layout/MainContent.tsx @@ -42,7 +42,7 @@ const MainContent: React.FC = ({ const handleSaveFile = useCallback( async (filePath: string, fileContent: string): Promise => { - let success = await handleSave(filePath, fileContent); + const success = await handleSave(filePath, fileContent); if (success) { setHasUnsavedChanges(false); } diff --git a/app/src/components/layout/Sidebar.tsx b/app/src/components/layout/Sidebar.tsx index cada4d4..cdcfe61 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 { FileNode } from '@/types/fileApi'; +import type { FileNode } from '@/types/fileApi'; interface SidebarProps { selectedFile: string | null; diff --git a/app/src/components/modals/user/CreateUserModal.tsx b/app/src/components/modals/user/CreateUserModal.tsx index 7a6dafe..0b591b5 100644 --- a/app/src/components/modals/user/CreateUserModal.tsx +++ b/app/src/components/modals/user/CreateUserModal.tsx @@ -8,7 +8,7 @@ import { Button, Group, } from '@mantine/core'; -import { CreateUserRequest } from '@/types/adminApi'; +import type { CreateUserRequest } from '@/types/adminApi'; import { UserRole } from '@/types/authApi'; interface CreateUserModalProps { diff --git a/app/src/components/modals/user/DeleteUserModal.tsx b/app/src/components/modals/user/DeleteUserModal.tsx index d3f549b..319ab18 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 { User } from '@/types/authApi'; +import type { User } from '@/types/authApi'; interface DeleteUserModalProps { opened: boolean; diff --git a/app/src/components/modals/user/EditUserModal.tsx b/app/src/components/modals/user/EditUserModal.tsx index db2f129..5665903 100644 --- a/app/src/components/modals/user/EditUserModal.tsx +++ b/app/src/components/modals/user/EditUserModal.tsx @@ -9,8 +9,9 @@ import { PasswordInput, Text, } from '@mantine/core'; -import { UpdateUserRequest } from '@/types/adminApi'; -import { User, UserRole } from '@/types/authApi'; +import type { UpdateUserRequest } from '@/types/adminApi'; +import type { User} from '@/types/authApi'; +import { UserRole } from '@/types/authApi'; interface EditUserModalProps { opened: boolean; diff --git a/app/src/components/modals/workspace/CreateWorkspaceModal.tsx b/app/src/components/modals/workspace/CreateWorkspaceModal.tsx index 3cbbea3..57b245f 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 { Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/workspace'; import { createWorkspace } from '@/api/workspace'; interface CreateWorkspaceModalProps { diff --git a/app/src/components/navigation/WorkspaceSwitcher.tsx b/app/src/components/navigation/WorkspaceSwitcher.tsx index 1bcc8ce..5092875 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 { Workspace } from '../../types/workspace'; +import type { Workspace } from '../../types/workspace'; 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 adccf46..f96838f 100644 --- a/app/src/components/settings/account/AccountSettings.tsx +++ b/app/src/components/settings/account/AccountSettings.tsx @@ -16,11 +16,12 @@ import SecuritySettings from './SecuritySettings'; import ProfileSettings from './ProfileSettings'; import DangerZoneSettings from './DangerZoneSettings'; import AccordionControl from '../AccordionControl'; -import { - SettingsActionType, +import type { UserProfileSettings, ProfileSettingsState, - SettingsAction, + SettingsAction} from '../../../types/settings'; +import { + SettingsActionType } from '../../../types/settings'; interface AccountSettingsProps { diff --git a/app/src/components/settings/account/ProfileSettings.tsx b/app/src/components/settings/account/ProfileSettings.tsx index c8434b6..96c24b4 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 { UserProfileSettings } from '../../../types/settings'; +import type { UserProfileSettings } from '../../../types/settings'; interface ProfileSettingsProps { settings: UserProfileSettings; diff --git a/app/src/components/settings/account/SecuritySettings.tsx b/app/src/components/settings/account/SecuritySettings.tsx index c11b1e1..4d75db9 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 { UserProfileSettings } from '@/types/settings'; +import type { UserProfileSettings } from '@/types/settings'; interface SecuritySettingsProps { settings: UserProfileSettings; diff --git a/app/src/components/settings/admin/AdminUsersTab.tsx b/app/src/components/settings/admin/AdminUsersTab.tsx index a7e7558..881231c 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 { User } from '../../../types/authApi'; -import { CreateUserRequest, UpdateUserRequest } from '../../../types/adminApi'; +import type { User } from '../../../types/authApi'; +import type { CreateUserRequest, UpdateUserRequest } from '../../../types/adminApi'; interface AdminUsersTabProps { currentUser: User; diff --git a/app/src/components/settings/admin/AdminWorkspacesTab.tsx b/app/src/components/settings/admin/AdminWorkspacesTab.tsx index 5b64db3..1ef9395 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 { FileCountStats, WorkspaceStats } from '../../../types/adminApi'; +import type { FileCountStats, WorkspaceStats } from '../../../types/adminApi'; const AdminWorkspacesTab: React.FC = () => { const { diff --git a/app/src/components/settings/workspace/GeneralSettings.tsx b/app/src/components/settings/workspace/GeneralSettings.tsx index 83b4a8a..98a6b67 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 { Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/workspace'; interface GeneralSettingsProps { name: string; diff --git a/app/src/components/settings/workspace/GitSettings.tsx b/app/src/components/settings/workspace/GitSettings.tsx index 214beb5..3656d26 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 { Workspace } from '@/types/workspace'; +import type { Workspace } from '@/types/workspace'; interface GitSettingsProps { gitEnabled: boolean; diff --git a/app/src/components/settings/workspace/WorkspaceSettings.tsx b/app/src/components/settings/workspace/WorkspaceSettings.tsx index 01aadd2..72d0a39 100644 --- a/app/src/components/settings/workspace/WorkspaceSettings.tsx +++ b/app/src/components/settings/workspace/WorkspaceSettings.tsx @@ -17,8 +17,9 @@ import GeneralSettings from './GeneralSettings'; import { useModalContext } from '../../../contexts/ModalContext'; import DangerZoneSettings from './DangerZoneSettings'; import AccordionControl from '../AccordionControl'; -import { SettingsActionType, SettingsAction } from '../../../types/settings'; -import { Workspace } from '../../../types/workspace'; +import type { SettingsAction } from '../../../types/settings'; +import { SettingsActionType } from '../../../types/settings'; +import type { Workspace } from '../../../types/workspace'; // State and reducer for workspace settings interface WorkspaceSettingsState { diff --git a/app/src/contexts/AuthContext.tsx b/app/src/contexts/AuthContext.tsx index 42c771e..3e8cdf4 100644 --- a/app/src/contexts/AuthContext.tsx +++ b/app/src/contexts/AuthContext.tsx @@ -12,7 +12,7 @@ import { refreshToken as apiRefreshToken, getCurrentUser, } from '@/api/auth'; -import { User } from '@/types/authApi'; +import type { User } from '@/types/authApi'; interface AuthContextType { user: User | null; diff --git a/app/src/contexts/ModalContext.tsx b/app/src/contexts/ModalContext.tsx index bd2c813..30a4be4 100644 --- a/app/src/contexts/ModalContext.tsx +++ b/app/src/contexts/ModalContext.tsx @@ -1,4 +1,5 @@ -import React, { createContext, useContext, useState, ReactNode } from 'react'; +import type { ReactNode } from 'react'; +import React, { createContext, useContext, useState } from 'react'; interface ModalContextType { newFileModalVisible: boolean; diff --git a/app/src/contexts/WorkspaceContext.tsx b/app/src/contexts/WorkspaceContext.tsx index ce0f417..a16a89e 100644 --- a/app/src/contexts/WorkspaceContext.tsx +++ b/app/src/contexts/WorkspaceContext.tsx @@ -1,12 +1,14 @@ +import type { + ReactNode} from 'react'; import React, { createContext, useContext, useState, useEffect, - useCallback, - ReactNode, + useCallback } from 'react'; -import { MantineColorScheme, useMantineColorScheme } from '@mantine/core'; +import type { MantineColorScheme} from '@mantine/core'; +import { useMantineColorScheme } from '@mantine/core'; import { notifications } from '@mantine/notifications'; import { getLastWorkspaceName, @@ -16,7 +18,8 @@ import { deleteWorkspace, listWorkspaces, } from '@/api/workspace'; -import { Workspace, DEFAULT_WORKSPACE_SETTINGS } from '@/types/workspace'; +import type { Workspace} from '@/types/workspace'; +import { DEFAULT_WORKSPACE_SETTINGS } from '@/types/workspace'; interface WorkspaceContextType { currentWorkspace: Workspace | null; diff --git a/app/src/hooks/useAdminData.ts b/app/src/hooks/useAdminData.ts index c4d44ae..4620637 100644 --- a/app/src/hooks/useAdminData.ts +++ b/app/src/hooks/useAdminData.ts @@ -1,8 +1,8 @@ import { useState, useEffect } from 'react'; import { notifications } from '@mantine/notifications'; import { getUsers, getWorkspaces, getSystemStats } from '@/api/admin'; -import { SystemStats, WorkspaceStats } from '@/types/adminApi'; -import { User } from '@/types/authApi'; +import type { SystemStats, WorkspaceStats } from '@/types/adminApi'; +import type { User } from '@/types/authApi'; // Possible types of admin data type AdminDataType = 'stats' | 'workspaces' | 'users'; diff --git a/app/src/hooks/useFileList.ts b/app/src/hooks/useFileList.ts index 093da84..9d0b2ed 100644 --- a/app/src/hooks/useFileList.ts +++ b/app/src/hooks/useFileList.ts @@ -1,7 +1,7 @@ import { useState, useCallback } from 'react'; import { listFiles } from '../api/file'; import { useWorkspace } from '../contexts/WorkspaceContext'; -import { FileNode } from '../types/fileApi'; +import type { FileNode } from '../types/fileApi'; interface UseFileListResult { files: FileNode[]; diff --git a/app/src/hooks/useGitOperations.ts b/app/src/hooks/useGitOperations.ts index 5f97613..8f79c85 100644 --- a/app/src/hooks/useGitOperations.ts +++ b/app/src/hooks/useGitOperations.ts @@ -2,7 +2,7 @@ import { useCallback } from 'react'; import { notifications } from '@mantine/notifications'; import { pullChanges, commitAndPush } from '../api/git'; import { useWorkspace } from '../contexts/WorkspaceContext'; -import { CommitHash } from '@/types/git'; +import type { CommitHash } from '@/types/git'; interface UseGitOperationsResult { handlePull: () => Promise; diff --git a/app/src/hooks/useProfileSettings.ts b/app/src/hooks/useProfileSettings.ts index fd9ecc4..b8ed528 100644 --- a/app/src/hooks/useProfileSettings.ts +++ b/app/src/hooks/useProfileSettings.ts @@ -1,8 +1,8 @@ import { useState, useCallback } from 'react'; import { notifications } from '@mantine/notifications'; import { updateProfile, deleteUser } from '../api/user'; -import { User } from '../types/authApi'; -import { UpdateProfileRequest } from '../types/userApi'; +import type { User } from '../types/authApi'; +import type { UpdateProfileRequest } from '../types/userApi'; interface UseProfileSettingsResult { loading: boolean; diff --git a/app/src/hooks/useUserAdmin.ts b/app/src/hooks/useUserAdmin.ts index e6d6413..d536723 100644 --- a/app/src/hooks/useUserAdmin.ts +++ b/app/src/hooks/useUserAdmin.ts @@ -5,8 +5,8 @@ import { deleteUser as adminDeleteUser, } from '../api/admin'; import { notifications } from '@mantine/notifications'; -import { User } from '../types/authApi'; -import { CreateUserRequest, UpdateUserRequest } from '../types/adminApi'; +import type { User } from '../types/authApi'; +import type { CreateUserRequest, UpdateUserRequest } from '../types/adminApi'; interface UseUserAdminResult { users: User[]; diff --git a/app/src/types/adminApi.ts b/app/src/types/adminApi.ts index b70f3c0..32a9b2e 100644 --- a/app/src/types/adminApi.ts +++ b/app/src/types/adminApi.ts @@ -1,4 +1,4 @@ -import { UserRole } from './authApi'; +import type { UserRole } from './authApi'; // CreateUserRequest holds the request fields for creating a new user export interface CreateUserRequest { diff --git a/app/src/utils/remarkWikiLinks.ts b/app/src/utils/remarkWikiLinks.ts index 3a48518..9ed5fe0 100644 --- a/app/src/utils/remarkWikiLinks.ts +++ b/app/src/utils/remarkWikiLinks.ts @@ -1,8 +1,8 @@ import { visit } from 'unist-util-visit'; import { InlineContainerType, MARKDOWN_REGEX } from '../types/markdown'; -import { Node } from 'unist'; -import { Parent } from 'unist'; -import { Text } from 'mdast'; +import type { Node } from 'unist'; +import type { Parent } from 'unist'; +import type { Text } from 'mdast'; import { lookupFileByName } from '@/api/file'; import { getFileUrl } from './fileHelpers';