refactor(canvas): 替换自定义ID生成函数为nanoid并优化配置逻辑
- 移除自定义createId函数,统一使用nanoid库生成唯一标识符 - 将useEffectiveAiConfig Hook替换为resolveEffectiveConfig工具函数 - 直接从config store获取publicSettings避免额外的Hook依赖 - 更新所有组件中的ID生成调用以使用nanoid - 简化buildApiUrl函数中的基础URL规范化逻辑
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||
|
||||
import { parseChangelog, type ReleaseInfo } from "@/lib/release-info";
|
||||
import { App } from "antd";
|
||||
import { APP_VERSION } from "@/constant/env";
|
||||
import { parseChangelog, type ReleaseInfo } from "@/lib/release";
|
||||
|
||||
const latestVersionUrl = "https://raw.githubusercontent.com/basketikun/infinite-canvas/main/VERSION";
|
||||
const latestChangelogUrl = "https://raw.githubusercontent.com/basketikun/infinite-canvas/main/CHANGELOG.md";
|
||||
@@ -25,11 +26,14 @@ function isNewerVersion(latestVersion: string, currentVersion: string) {
|
||||
return latest.some((value, index) => value > current[index] && latest.slice(0, index).every((part, prevIndex) => part === current[prevIndex]));
|
||||
}
|
||||
|
||||
export function useVersionCheck(currentVersion: string) {
|
||||
export function useVersionCheck() {
|
||||
const currentVersion = APP_VERSION;
|
||||
const { message } = App.useApp();
|
||||
const localReleases = useMemo(readLocalReleases, []);
|
||||
const [latestVersion, setLatestVersion] = useState(currentVersion);
|
||||
const [releases, setReleases] = useState<ReleaseInfo[]>(localReleases);
|
||||
const [checking, setChecking] = useState(false);
|
||||
const [open, setOpen] = useState(false);
|
||||
const hasNewVersion = isNewerVersion(latestVersion, currentVersion);
|
||||
|
||||
const checkLatestVersion = useCallback(async () => {
|
||||
@@ -44,7 +48,7 @@ export function useVersionCheck(currentVersion: string) {
|
||||
}
|
||||
}, [currentVersion]);
|
||||
|
||||
const checkLatestRelease = useCallback(async () => {
|
||||
const checkLatestRelease = useCallback(async (showMessage = false) => {
|
||||
setChecking(true);
|
||||
try {
|
||||
const [versionResponse, changelogResponse] = await Promise.all([
|
||||
@@ -56,19 +60,35 @@ export function useVersionCheck(currentVersion: string) {
|
||||
const [version, changelog] = await Promise.all([versionResponse.text(), changelogResponse.text()]);
|
||||
setLatestVersion(version.trim() || currentVersion);
|
||||
if (changelog.trim()) setReleases(parseChangelog(changelog));
|
||||
if (showMessage) message.success("已获取最新版本信息");
|
||||
return true;
|
||||
} catch {
|
||||
setLatestVersion(currentVersion);
|
||||
setReleases(localReleases);
|
||||
if (showMessage) message.error("获取最新版本信息失败");
|
||||
return false;
|
||||
} finally {
|
||||
setChecking(false);
|
||||
}
|
||||
}, [currentVersion, localReleases]);
|
||||
}, [currentVersion, localReleases, message]);
|
||||
|
||||
useEffect(() => {
|
||||
void checkLatestVersion();
|
||||
}, [checkLatestVersion]);
|
||||
|
||||
return { latestVersion, releases, checking, hasNewVersion, checkLatestRelease };
|
||||
const openReleaseModal = useCallback(() => {
|
||||
setOpen(true);
|
||||
void checkLatestRelease();
|
||||
}, [checkLatestRelease]);
|
||||
|
||||
return {
|
||||
open,
|
||||
setOpen,
|
||||
openReleaseModal,
|
||||
latestVersion,
|
||||
releases,
|
||||
checking,
|
||||
hasNewVersion,
|
||||
checkLatestRelease,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user