refactor: format code with prettier and fix quotation marks
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import {
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
DialogDescription,
|
||||
DialogFooter
|
||||
DialogFooter,
|
||||
} from "@/components/ui/dialog";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { AlertTriangle } from "lucide-react";
|
||||
@@ -21,10 +21,10 @@ export const HwidErrorDialog = () => {
|
||||
setErrorMessage(customEvent.detail);
|
||||
};
|
||||
|
||||
window.addEventListener('show-hwid-error', handleShowHwidError);
|
||||
window.addEventListener("show-hwid-error", handleShowHwidError);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('show-hwid-error', handleShowHwidError);
|
||||
window.removeEventListener("show-hwid-error", handleShowHwidError);
|
||||
};
|
||||
}, []);
|
||||
|
||||
|
||||
@@ -65,7 +65,8 @@ import {
|
||||
ListTree,
|
||||
CheckCircle,
|
||||
Infinity,
|
||||
RefreshCw, Network,
|
||||
RefreshCw,
|
||||
Network,
|
||||
} from "lucide-react";
|
||||
import { t } from "i18next";
|
||||
|
||||
@@ -299,7 +300,8 @@ export const ProfileItem = (props: Props) => {
|
||||
};
|
||||
|
||||
const MAX_NAME_LENGTH = 25;
|
||||
const truncatedName = name.length > MAX_NAME_LENGTH
|
||||
const truncatedName =
|
||||
name.length > MAX_NAME_LENGTH
|
||||
? `${name.slice(0, MAX_NAME_LENGTH)}...`
|
||||
: name;
|
||||
|
||||
@@ -344,10 +346,7 @@ export const ProfileItem = (props: Props) => {
|
||||
) : null}
|
||||
</div>
|
||||
<div className="flex items-center flex-shrink-0">
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="text-xs shadow-sm"
|
||||
>
|
||||
<Badge variant="outline" className="text-xs shadow-sm">
|
||||
{type}
|
||||
</Badge>
|
||||
</div>
|
||||
@@ -389,14 +388,13 @@ export const ProfileItem = (props: Props) => {
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center">
|
||||
<Download className="h-3 w-3 inline mr-1.5" />
|
||||
<span className="pr-5">
|
||||
{parseTraffic(download)}
|
||||
</span>
|
||||
<span className="pr-5">{parseTraffic(download)}</span>
|
||||
<Network className="h-3 w-3 inline mr-1.5" />
|
||||
{total > 0 ? (
|
||||
<span>{parseTraffic(total)}</span>
|
||||
) : <Infinity className="h-3 w-3 inline mr-1.5" />}
|
||||
|
||||
<span>{parseTraffic(total)}</span>
|
||||
) : (
|
||||
<Infinity className="h-3 w-3 inline mr-1.5" />
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -510,11 +508,11 @@ export const ProfileItem = (props: Props) => {
|
||||
)}
|
||||
|
||||
<ConfirmViewer
|
||||
open={confirmOpen}
|
||||
onOpenChange={setConfirmOpen}
|
||||
onConfirm={onDelete}
|
||||
title={t("Delete Profile", { name: truncatedName })}
|
||||
description={t("This action cannot be undone.")}
|
||||
open={confirmOpen}
|
||||
onOpenChange={setConfirmOpen}
|
||||
onConfirm={onDelete}
|
||||
title={t("Delete Profile", { name: truncatedName })}
|
||||
description={t("This action cannot be undone.")}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -12,7 +12,8 @@ import {
|
||||
createProfile,
|
||||
patchProfile,
|
||||
importProfile,
|
||||
enhanceProfiles, createProfileFromShareLink,
|
||||
enhanceProfiles,
|
||||
createProfileFromShareLink,
|
||||
} from "@/services/cmds";
|
||||
import { useProfiles } from "@/hooks/use-profiles";
|
||||
import { showNotice } from "@/services/noticeService";
|
||||
@@ -138,7 +139,9 @@ export const ProfileViewer = forwardRef<ProfileViewerRef, Props>(
|
||||
setIsCheckingUrl(true);
|
||||
|
||||
const handler = setTimeout(() => {
|
||||
const isValid = /^(https?|vmess|vless|ss|socks|trojan):\/\//.test(importUrl);
|
||||
const isValid = /^(https?|vmess|vless|ss|socks|trojan):\/\//.test(
|
||||
importUrl,
|
||||
);
|
||||
setIsUrlValid(isValid);
|
||||
setIsCheckingUrl(false);
|
||||
}, 500);
|
||||
@@ -165,23 +168,35 @@ export const ProfileViewer = forwardRef<ProfileViewerRef, Props>(
|
||||
await enhanceProfiles();
|
||||
setOpen(false);
|
||||
} catch (err: any) {
|
||||
const errorMessage = typeof err === 'string' ? err : (err.message || String(err));
|
||||
const errorMessage =
|
||||
typeof err === "string" ? err : err.message || String(err);
|
||||
const lowerErrorMessage = errorMessage.toLowerCase();
|
||||
if (lowerErrorMessage.includes('device') || lowerErrorMessage.includes('устройств')) {
|
||||
window.dispatchEvent(new CustomEvent('show-hwid-error', { detail: errorMessage }));
|
||||
if (
|
||||
lowerErrorMessage.includes("device") ||
|
||||
lowerErrorMessage.includes("устройств")
|
||||
) {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent("show-hwid-error", { detail: errorMessage }),
|
||||
);
|
||||
} else if (!isShareLink && errorMessage.includes("failed to fetch")) {
|
||||
showNotice("info", t("Import failed, retrying with Clash proxy..."));
|
||||
try {
|
||||
await importProfile(importUrl, { with_proxy: false, self_proxy: true });
|
||||
showNotice("success", t("Profile Imported with Clash proxy"));
|
||||
props.onChange();
|
||||
await enhanceProfiles();
|
||||
setOpen(false);
|
||||
} catch (retryErr: any) {
|
||||
showNotice("error", `${t("Import failed even with Clash proxy")}: ${retryErr?.message || retryErr.toString()}`);
|
||||
}
|
||||
showNotice("info", t("Import failed, retrying with Clash proxy..."));
|
||||
try {
|
||||
await importProfile(importUrl, {
|
||||
with_proxy: false,
|
||||
self_proxy: true,
|
||||
});
|
||||
showNotice("success", t("Profile Imported with Clash proxy"));
|
||||
props.onChange();
|
||||
await enhanceProfiles();
|
||||
setOpen(false);
|
||||
} catch (retryErr: any) {
|
||||
showNotice(
|
||||
"error",
|
||||
`${t("Import failed even with Clash proxy")}: ${retryErr?.message || retryErr.toString()}`,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
showNotice("error", errorMessage);
|
||||
showNotice("error", errorMessage);
|
||||
}
|
||||
} finally {
|
||||
setIsImporting(false);
|
||||
@@ -302,19 +317,26 @@ export const ProfileViewer = forwardRef<ProfileViewerRef, Props>(
|
||||
</div>
|
||||
|
||||
{/^(vmess|vless|ss|socks|trojan):\/\//.test(importUrl) && (
|
||||
<div className="space-y-2">
|
||||
<div className="space-y-2">
|
||||
<Label>{t("Template")}</Label>
|
||||
<Select value={selectedTemplate} onValueChange={setSelectedTemplate}>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Select a template..." />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="default">{t("Default Template")}</SelectItem>
|
||||
<SelectItem value="without_ru">{t("Template without RU Rules")}</SelectItem>
|
||||
</SelectContent>
|
||||
<Select
|
||||
value={selectedTemplate}
|
||||
onValueChange={setSelectedTemplate}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Select a template..." />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="default">
|
||||
{t("Default Template")}
|
||||
</SelectItem>
|
||||
<SelectItem value="without_ru">
|
||||
{t("Template without RU Rules")}
|
||||
</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<Button
|
||||
variant="outline"
|
||||
@@ -473,15 +495,15 @@ export const ProfileViewer = forwardRef<ProfileViewerRef, Props>(
|
||||
control={control}
|
||||
name="option.update_always"
|
||||
render={({ field }) => (
|
||||
<FormItem className="flex flex-row items-center justify-between">
|
||||
<FormLabel>{t("Update on Startup")}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch
|
||||
checked={field.value}
|
||||
onCheckedChange={field.onChange}
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
<FormItem className="flex flex-row items-center justify-between">
|
||||
<FormLabel>{t("Update on Startup")}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch
|
||||
checked={field.value}
|
||||
onCheckedChange={field.onChange}
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
|
||||
Reference in New Issue
Block a user