Fix coding standards for typescript-eslint 8

This commit is contained in:
Alejandro Celaya 2024-08-07 12:23:03 +02:00
parent 81ea262999
commit a8258ff2cc
16 changed files with 48 additions and 24 deletions

View file

@ -9,7 +9,7 @@ import './AppUpdateBanner.scss';
interface AppUpdateBannerProps {
isOpen: boolean;
toggle: MouseEventHandler<any>;
forceUpdate: Function;
forceUpdate: () => void;
}
export const AppUpdateBanner = forwardRef<HTMLElement, AppUpdateBannerProps>(({ isOpen, toggle, forceUpdate }, ref) => {

View file

@ -21,7 +21,9 @@ export const Home = ({ servers }: HomeProps) => {
useEffect(() => {
// Try to redirect to the first server marked as auto-connect
const autoConnectServer = serversList.find(({ autoConnect }) => autoConnect);
autoConnectServer && navigate(`/server/${autoConnectServer.id}`);
if (autoConnectServer) {
navigate(`/server/${autoConnectServer.id}`);
}
}, [serversList, navigate]);
return (

View file

@ -15,7 +15,7 @@ type MainHeaderDeps = {
ServersDropdown: FC;
};
const MainHeader: FCWithDeps<{}, MainHeaderDeps> = () => {
const MainHeader: FCWithDeps<unknown, MainHeaderDeps> = () => {
const { ServersDropdown } = useDependencies(MainHeader);
const [isNotCollapsed, toggleCollapse, , collapse] = useToggle();
const location = useLocation();

View file

@ -9,13 +9,13 @@ import { provideServices as provideSettingsServices } from '../settings/services
import { provideServices as provideUtilsServices } from '../utils/services/provideServices';
import type { ConnectDecorator } from './types';
type LazyActionMap = Record<string, Function>;
type LazyActionMap = Record<string, (...args: unknown[]) => unknown>;
const bottle = new Bottle();
export const { container } = bottle;
const lazyService = <T extends Function, K>(cont: IContainer, serviceName: string) =>
const lazyService = <T extends (...args: unknown[]) => unknown, K>(cont: IContainer, serviceName: string) =>
(...args: any[]) => (cont[serviceName] as T)(...args) as K;
const mapActionService = (map: LazyActionMap, actionName: string): LazyActionMap => ({

View file

@ -60,7 +60,11 @@ const CreateServer: FCWithDeps<CreateServerProps, CreateServerDeps> = ({ servers
({ url, apiKey }) => serverData?.url === url && serverData?.apiKey === apiKey,
);
serverExists ? toggleConfirmModal() : saveNewServer(serverData);
if (serverExists) {
toggleConfirmModal();
} else {
saveNewServer(serverData);
}
}, [saveNewServer, serverData, servers, toggleConfirmModal]);
return (

View file

@ -30,7 +30,9 @@ export const DeleteServerModal: FC<DeleteServerModalConnectProps> = (
}
deleteServer(server);
redirectHome && navigate('/');
if (redirectHome) {
navigate('/');
}
};
return (

View file

@ -31,7 +31,9 @@ const EditServer: FCWithDeps<EditServerProps, EditServerDeps> = withSelectedServ
const handleSubmit = (serverData: ServerData) => {
editServer(selectedServer.id, serverData);
reconnect === 'true' && selectServer(selectedServer.id);
if (reconnect === 'true') {
selectServer(selectedServer.id);
}
goBack();
};

View file

@ -58,8 +58,12 @@ const ImportServersBtn: FCWithDeps<ImportServersBtnConnectProps, ImportServersBt
const dupServers = newServers.filter((server) => serversInclude(existingServers, server));
const hasDuplicatedServers = !!dupServers.length;
!hasDuplicatedServers ? create(newServers) : setDuplicatedServers(dupServers);
hasDuplicatedServers && showModal();
if (!hasDuplicatedServers) {
create(newServers);
} else {
setDuplicatedServers(dupServers);
showModal();
}
})
.then(() => {
// Reset input after processing file

View file

@ -17,9 +17,11 @@ export const ServerForm: FC<ServerFormProps> = ({ onSubmit, initialValues, child
const handleSubmit = handleEventPreventingDefault(() => onSubmit({ name, url, apiKey }));
useEffect(() => {
initialValues && setName(initialValues.name);
initialValues && setUrl(initialValues.url);
initialValues && setApiKey(initialValues.apiKey);
if (initialValues) {
setName(initialValues.name);
setUrl(initialValues.url);
setApiKey(initialValues.apiKey);
}
}, [initialValues]);
return (

View file

@ -17,7 +17,7 @@ type WithSelectedServerPropsDeps = {
ServerError: FC;
};
export function withSelectedServer<T = {}>(
export function withSelectedServer<T extends object>(
WrappedComponent: FCWithDeps<WithSelectedServerProps & T, WithSelectedServerPropsDeps>,
) {
const ComponentWrapper: FCWithDeps<WithSelectedServerProps & T, WithSelectedServerPropsDeps> = (props) => {
@ -26,7 +26,9 @@ export function withSelectedServer<T = {}>(
const { selectServer, selectedServer } = props;
useEffect(() => {
params.serverId && selectServer(params.serverId);
if (params.serverId) {
selectServer(params.serverId);
}
}, [params.serverId, selectServer]);
if (!selectedServer) {

View file

@ -2,10 +2,10 @@ import type { FC } from 'react';
import { useEffect } from 'react';
interface WithoutSelectedServerProps {
resetSelectedServer: Function;
resetSelectedServer: () => unknown;
}
export function withoutSelectedServer<T = {}>(WrappedComponent: FC<WithoutSelectedServerProps & T>) {
export function withoutSelectedServer<T extends object>(WrappedComponent: FC<WithoutSelectedServerProps & T>) {
return (props: WithoutSelectedServerProps & T) => {
const { resetSelectedServer } = props;
useEffect(() => {

View file

@ -50,7 +50,7 @@ export const selectServer = (buildShlinkApiClient: ShlinkApiClientBuilder) => cr
version,
printableVersion,
};
} catch (e) {
} catch {
return { ...selectedServer, serverNotReachable: true };
}
},

View file

@ -7,8 +7,8 @@ export const migrateDeprecatedSettings = (state: Partial<ShlinkState>): Partial<
}
// The "last180Days" interval had a typo, with a lowercase d
if ((state.settings.visits?.defaultInterval as any) === 'last180days') {
state.settings.visits && (state.settings.visits.defaultInterval = 'last180Days');
if (state.settings.visits && (state.settings.visits.defaultInterval as any) === 'last180days') {
state.settings.visits.defaultInterval = 'last180Days';
}
return state;

View file

@ -38,7 +38,7 @@ export const versionMatch = (versionToMatch: SemVer | Empty, { maxVersion, minVe
const versionIsValidSemVer = memoizeWith((v) => v, (version: string): version is SemVer => {
try {
return compare(version, version, '=');
} catch (e) {
} catch {
return false;
}
});

View file

@ -32,7 +32,9 @@ describe('<DeleteServerButton />', () => {
expect(screen.getByText(/DeleteServerModal/)).toHaveTextContent(/Closed/);
expect(screen.getByText(/DeleteServerModal/)).not.toHaveTextContent(/Open/);
container.firstElementChild && await user.click(container.firstElementChild);
if (container.firstElementChild) {
await user.click(container.firstElementChild);
}
await waitFor(() => expect(screen.getByText(/DeleteServerModal/)).toHaveTextContent(/Open/));
});

View file

@ -57,7 +57,9 @@ describe('<ImportServersBtn />', () => {
const { container } = setUp();
const input = container.querySelector('[type=file]');
input && fireEvent.change(input, { target: { files: [''] } });
if (input) {
fireEvent.change(input, { target: { files: [''] } });
}
expect(importServersFromFile).toHaveBeenCalledTimes(1);
await waitFor(() => expect(createServersMock).toHaveBeenCalledTimes(1));
});
@ -73,7 +75,9 @@ describe('<ImportServersBtn />', () => {
importServersFromFile.mockResolvedValue([existingServer, newServer]);
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
input && fireEvent.change(input, { target: { files: [''] } });
if (input) {
fireEvent.change(input, { target: { files: [''] } });
}
await waitFor(() => expect(screen.getByRole('dialog')).toBeInTheDocument());
await user.click(screen.getByRole('button', { name: btnName }));