diff --git a/package-lock.json b/package-lock.json
index d26f521e2..717748233 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -32,6 +32,7 @@
"react-dom": "^18.2.0",
"react-helmet-async": "^1.3.0",
"react-i18next": "^11.16.7",
+ "react-icons": "^4.4.0",
"react-lazy-load-image-component": "^1.5.4",
"react-player": "^2.10.0",
"react-query": "^4.0.0-beta.23",
@@ -44,7 +45,6 @@
"react-window": "^1.8.7",
"react-window-infinite-loader": "^1.0.8",
"styled-components": "^5.3.5",
- "tabler-icons-react": "^1.46.0",
"zustand": "^4.0.0-rc.1"
},
"devDependencies": {
@@ -17056,6 +17056,14 @@
}
}
},
+ "node_modules/react-icons": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz",
+ "integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -20970,14 +20978,6 @@
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
- "node_modules/tabler-icons-react": {
- "version": "1.46.0",
- "resolved": "https://registry.npmjs.org/tabler-icons-react/-/tabler-icons-react-1.46.0.tgz",
- "integrity": "sha512-tQt686DPfGRXxdCMg63gEO7KP1mcmx0JvzgAq5HKkD3ts9HSL9AAaGAGpa/IJdD0tLaoviegdpv6MOp8DsAr9Q==",
- "peerDependencies": {
- "react": ">= 16.8.0"
- }
- },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -36382,6 +36382,12 @@
"html-parse-stringify": "^3.0.1"
}
},
+ "react-icons": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz",
+ "integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==",
+ "requires": {}
+ },
"react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -39457,12 +39463,6 @@
}
}
},
- "tabler-icons-react": {
- "version": "1.46.0",
- "resolved": "https://registry.npmjs.org/tabler-icons-react/-/tabler-icons-react-1.46.0.tgz",
- "integrity": "sha512-tQt686DPfGRXxdCMg63gEO7KP1mcmx0JvzgAq5HKkD3ts9HSL9AAaGAGpa/IJdD0tLaoviegdpv6MOp8DsAr9Q==",
- "requires": {}
- },
"tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
diff --git a/package.json b/package.json
index 5264dec28..80925a417 100644
--- a/package.json
+++ b/package.json
@@ -270,6 +270,7 @@
"react-dom": "^18.2.0",
"react-helmet-async": "^1.3.0",
"react-i18next": "^11.16.7",
+ "react-icons": "^4.4.0",
"react-lazy-load-image-component": "^1.5.4",
"react-player": "^2.10.0",
"react-query": "^4.0.0-beta.23",
@@ -282,7 +283,6 @@
"react-window": "^1.8.7",
"react-window-infinite-loader": "^1.0.8",
"styled-components": "^5.3.5",
- "tabler-icons-react": "^1.46.0",
"zustand": "^4.0.0-rc.1"
},
"resolutions": {
diff --git a/src/renderer/features/auth/queries/useLogin.ts b/src/renderer/features/auth/queries/login.ts
similarity index 74%
rename from src/renderer/features/auth/queries/useLogin.ts
rename to src/renderer/features/auth/queries/login.ts
index b0eda13cc..fd30e499f 100644
--- a/src/renderer/features/auth/queries/useLogin.ts
+++ b/src/renderer/features/auth/queries/login.ts
@@ -1,7 +1,8 @@
import md5 from 'md5';
import { nanoid } from 'nanoid';
-import { useMutation } from 'react-query';
+import { useMutation, useQuery } from 'react-query';
import { authApi } from 'renderer/api/authApi';
+import { queryKeys } from 'renderer/api/queryKeys';
import { useAuthStore } from 'renderer/store';
export const useLogin = (
@@ -36,3 +37,12 @@ export const useLogin = (
},
});
};
+
+export const usePingServer = (server: string) => {
+ return useQuery({
+ enabled: !!server,
+ queryFn: () => authApi.ping(server),
+ queryKey: queryKeys.ping(server),
+ retry: false,
+ });
+};
diff --git a/src/renderer/features/auth/routes/LoginRoute.tsx b/src/renderer/features/auth/routes/LoginRoute.tsx
index 556c955d6..5befd229e 100644
--- a/src/renderer/features/auth/routes/LoginRoute.tsx
+++ b/src/renderer/features/auth/routes/LoginRoute.tsx
@@ -10,11 +10,10 @@ import {
} from '@mantine/core';
import { useDebouncedValue } from '@mantine/hooks';
import { useTranslation } from 'react-i18next';
+import { RiCheckboxCircleFill } from 'react-icons/ri';
import { useSearchParams } from 'react-router-dom';
-import { AlertCircle, CircleCheck } from 'tabler-icons-react';
import { normalizeServerUrl } from 'renderer/utils';
-import { useLogin } from '../queries/useLogin';
-import { usePingServer } from '../queries/usePingServer';
+import { useLogin, usePingServer } from '../queries/login';
import styles from './LoginRoute.module.scss';
export const LoginRoute = () => {
@@ -66,7 +65,7 @@ export const LoginRoute = () => {
isCheckingServer ? (
) : isValidServer ? (
-
+
) : null
}
value={server}
@@ -105,7 +104,7 @@ export const LoginRoute = () => {
Login
{isError && (
- } variant="outline">
+
{t('Invalid username or password.')}
)}
diff --git a/src/renderer/features/library/components/ViewTypeButton.tsx b/src/renderer/features/library/components/ViewTypeButton.tsx
index 511cb3d6c..8ccf205dc 100644
--- a/src/renderer/features/library/components/ViewTypeButton.tsx
+++ b/src/renderer/features/library/components/ViewTypeButton.tsx
@@ -1,6 +1,6 @@
import { Dispatch } from 'react';
import { ActionIcon, Menu, MenuProps } from '@mantine/core';
-import { LayoutGrid, LayoutList, Table } from 'tabler-icons-react';
+import { RiLayoutGridFill, RiLayoutTopFill } from 'react-icons/ri';
export enum ViewType {
Detail = 'detail',
@@ -23,30 +23,18 @@ export const ViewTypeButton = ({