mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-06 16:04:23 +00:00
Fix various eslint issues
This commit is contained in:
@@ -17,14 +17,16 @@ const LoginPage: React.FC = () => {
|
||||
const [loading, setLoading] = useState<boolean>(false);
|
||||
const { login } = useAuth();
|
||||
|
||||
const handleSubmit = async (e: FormEvent<HTMLElement>): Promise<void> => {
|
||||
const handleSubmit = (e: FormEvent<HTMLElement>): 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 (
|
||||
|
||||
@@ -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<SidebarProps> = ({
|
||||
const { handlePull } = useGitOperations();
|
||||
|
||||
useEffect(() => {
|
||||
loadFileList();
|
||||
void loadFileList();
|
||||
}, [loadFileList]);
|
||||
|
||||
return (
|
||||
|
||||
@@ -50,7 +50,7 @@ const DeleteAccountModal: React.FC<DeleteAccountModalProps> = ({
|
||||
<Button
|
||||
color="red"
|
||||
onClick={() => {
|
||||
onConfirm(password);
|
||||
void onConfirm(password);
|
||||
setPassword('');
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -48,7 +48,7 @@ const EmailPasswordModal: React.FC<EmailPasswordModalProps> = ({
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
onConfirm(password);
|
||||
void onConfirm(password);
|
||||
setPassword('');
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -42,7 +42,7 @@ const CreateFileModal: React.FC<CreateFileModalProps> = ({ onCreateFile }) => {
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button onClick={handleSubmit}>Create</Button>
|
||||
<Button onClick={() => void handleSubmit()}>Create</Button>
|
||||
</Group>
|
||||
</Box>
|
||||
</Modal>
|
||||
|
||||
@@ -28,7 +28,7 @@ const DeleteFileModal: React.FC<DeleteFileModalProps> = ({
|
||||
title="Delete File"
|
||||
centered
|
||||
>
|
||||
<Text>Are you sure you want to delete "{selectedFile}"?</Text>
|
||||
<Text>Are you sure you want to delete "{selectedFile}"?</Text>
|
||||
<Group justify="flex-end" mt="xl">
|
||||
<Button
|
||||
variant="default"
|
||||
@@ -36,7 +36,7 @@ const DeleteFileModal: React.FC<DeleteFileModalProps> = ({
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button color="red" onClick={handleConfirm}>
|
||||
<Button color="red" onClick={() => void handleConfirm()}>
|
||||
Delete
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
@@ -45,7 +45,7 @@ const CommitMessageModal: React.FC<CommitMessageModalProps> = ({
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button onClick={handleSubmit}>Commit</Button>
|
||||
<Button onClick={() => void handleSubmit()}>Commit</Button>
|
||||
</Group>
|
||||
</Box>
|
||||
</Modal>
|
||||
|
||||
@@ -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<CreateUserModalProps> = ({
|
||||
<Button variant="default" onClick={onClose}>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button onClick={handleSubmit} loading={loading}>
|
||||
<Button onClick={() => void handleSubmit} loading={loading}>
|
||||
Create User
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
@@ -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<DeleteUserModalProps> = ({
|
||||
>
|
||||
<Stack>
|
||||
<Text>
|
||||
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.
|
||||
</Text>
|
||||
<Group justify="flex-end" mt="xl">
|
||||
<Button variant="default" onClick={onClose}>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button color="red" onClick={onConfirm} loading={loading}>
|
||||
<Button color="red" onClick={() => void onConfirm()} loading={loading}>
|
||||
Delete User
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
@@ -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<EditUserModalProps> = ({
|
||||
<Button variant="default" onClick={onClose}>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button onClick={handleSubmit} loading={loading}>
|
||||
<Button onClick={() => void handleSubmit} loading={loading}>
|
||||
Save Changes
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
@@ -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<CreateWorkspaceModalProps> = ({
|
||||
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<CreateWorkspaceModalProps> = ({
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button onClick={handleSubmit} loading={loading}>
|
||||
<Button onClick={() => void handleSubmit} loading={loading}>
|
||||
Create
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
@@ -23,15 +23,15 @@ const DeleteWorkspaceModal: React.FC<DeleteUserModalProps> = ({
|
||||
>
|
||||
<Stack>
|
||||
<Text>
|
||||
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.
|
||||
</Text>
|
||||
<Group justify="flex-end" mt="xl">
|
||||
<Button variant="default" onClick={onClose}>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button color="red" onClick={onConfirm}>
|
||||
<Button color="red" onClick={() => void onConfirm}>
|
||||
Delete Workspace
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
@@ -26,8 +26,8 @@ const UserMenu: React.FC = () => {
|
||||
const [opened, setOpened] = useState<boolean>(false);
|
||||
const { user, logout } = useAuth();
|
||||
|
||||
const handleLogout = (): void => {
|
||||
logout();
|
||||
const handleLogout = async (): Promise<void> => {
|
||||
await logout();
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -13,7 +13,7 @@ const DangerZoneSettings: React.FC = () => {
|
||||
const success = await deleteAccount(password);
|
||||
if (success) {
|
||||
setDeleteModalOpened(false);
|
||||
logout();
|
||||
await logout();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<SecuritySettingsProps> = ({
|
||||
/>
|
||||
<Text size="xs" c="dimmed">
|
||||
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.
|
||||
</Text>
|
||||
</Stack>
|
||||
</Box>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<GitSettingsProps> = ({
|
||||
|
||||
@@ -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<Workspace>;
|
||||
@@ -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 => {
|
||||
<K extends keyof Workspace>(key: K, value: Workspace[K]): void => {
|
||||
dispatch({
|
||||
type: SettingsActionType.UPDATE_LOCAL_SETTINGS,
|
||||
payload: { [key]: value } as Partial<Workspace>,
|
||||
@@ -194,7 +197,7 @@ const WorkspaceSettings: React.FC = () => {
|
||||
<Accordion.Panel>
|
||||
<AppearanceSettings
|
||||
onThemeChange={(newTheme: string) =>
|
||||
handleInputChange('theme', newTheme)
|
||||
handleInputChange('theme', newTheme as Theme)
|
||||
}
|
||||
/>
|
||||
</Accordion.Panel>
|
||||
@@ -247,7 +250,7 @@ const WorkspaceSettings: React.FC = () => {
|
||||
<Button variant="default" onClick={handleClose}>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button onClick={handleSubmit}>Save Changes</Button>
|
||||
<Button onClick={() => void handleSubmit}>Save Changes</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Modal>
|
||||
|
||||
Reference in New Issue
Block a user