DNDGamePlayer: Electron редактор сцен, презентация, упаковка electron-builder

Made-with: Cursor
This commit is contained in:
Ivan Fontosh
2026-04-19 14:16:54 +08:00
commit a6cbcc273e
82 changed files with 22195 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
import { useEffect, useState } from 'react';
import { ipcChannels } from '../../shared/ipc/contracts';
import type { AssetId } from '../../shared/types';
import { getDndApi } from './dndApi';
/**
* Возвращает `file://` URL для превью изображения. Пока загрузка или сменился id — `null`.
*/
export function useAssetUrl(assetId: AssetId | null | undefined): string | null {
const id = assetId ?? null;
const [entry, setEntry] = useState<{ assetId: AssetId; url: string | null } | null>(null);
useEffect(() => {
if (id === null) {
return undefined;
}
let cancelled = false;
void getDndApi()
.invoke(ipcChannels.project.assetFileUrl, { assetId: id })
.then((r) => {
if (!cancelled) setEntry({ assetId: id, url: r.url });
});
return () => {
cancelled = true;
};
}, [id]);
if (id === null) {
return null;
}
if (entry?.assetId !== id) {
return null;
}
return entry.url;
}
/** @deprecated use `useAssetUrl` */
export function useAssetImageUrl(assetId: AssetId | null | undefined): string | null {
return useAssetUrl(assetId);
}