Compare commits

...
Author SHA1 Message Date
FredApps 7655ee8fae libs/components: mark fire-and-forget promises with void
Resolves SonarCloud typescript:S9383 in the shared frontend component libraries.
2026-11-10 12:08:32 +01:00
41 changed files with 66 additions and 66 deletions
@@ -948,7 +948,7 @@ export const GalleryModal = React.memo(
// couldn't see it — making the library button appear broken.
galleryModalDraggingUnder.value = false;
let cancelled = false;
(async () => {
void (async () => {
setUsernameError(false);
const name = await fetchCurrentUsername();
if (cancelled) return;
@@ -90,7 +90,7 @@ export function useMediaPromptTokens(
const key = [...new Set(cleaned)].sort().join(",");
useEffect(() => {
if (key.length > 0) fetchMissing(key.split(","));
if (key.length > 0) void fetchMissing(key.split(","));
}, [key]);
const result = new Map<string, string>();
@@ -63,7 +63,7 @@ export function usePrompts(
const key = [...new Set(cleaned)].sort().join(",");
useEffect(() => {
if (key.length > 0) fetchMissing(key.split(","));
if (key.length > 0) void fetchMissing(key.split(","));
}, [key]);
const result = new Map<string, Prompts>();
@@ -42,7 +42,7 @@ const NewsView = ({ onBack }: { onBack: () => void }) => {
console.warn("Failed to fetch news feed, using bundled content.", e);
}
};
fetchNews();
void fetchNews();
}, []);
const selectedPost = useMemo(
@@ -312,7 +312,7 @@ export function HelpMenuButton({
});
};
run();
void run();
return () => {
if (progressTimerRef.current) {
@@ -179,7 +179,7 @@ export function LightboxModal({
audioPlayerRef.current = null;
};
audioPlayerRef.current = audio;
audio.play();
void audio.play();
setPlayingAudioToken(token);
}
},
@@ -83,7 +83,7 @@ export function TagsSection({
useEffect(() => {
if (currentUsername !== undefined) return;
let cancelled = false;
resolveSessionUsername().then((username) => {
void resolveSessionUsername().then((username) => {
if (!cancelled) setResolvedUsername(username);
});
return () => {
@@ -133,7 +133,7 @@ export function TagsSection({
}
ownTagsLoadedRef.current = true;
let cancelled = false;
(async () => {
void (async () => {
const all: TagDetails[] = [];
let cursor: string | undefined = undefined;
for (let page = 0; page < 50; page++) {
@@ -1040,7 +1040,7 @@ const PageDraw = ({
await tryFit();
};
autoFitCanvas();
void autoFitCanvas();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [baseImageBitmap, baseImageInfo?.isBlankCanvas]);
@@ -1501,7 +1501,7 @@ export const PaintSurface = ({
// Load the checkboard image for transparency background
useEffect(() => {
loadImageFromUrl(checkerboard).then(setCheckerImage);
void loadImageFromUrl(checkerboard).then(setCheckerImage);
}, []);
// Separate function to render transformers on their own layer
@@ -1167,7 +1167,7 @@ export const useSceneStore = create<SceneState>((set, get, store) => ({
console.error("Failed to restore image:", error);
}
};
loadImage();
void loadImage();
}
return node;
@@ -387,7 +387,7 @@ export const Stage3DBody = ({
useEffect(() => {
const handler = onImageDrop(
(item: GalleryItem, position: { x: number; y: number }) => {
(async () => {
void (async () => {
if (!editor) {
console.warn("Cannot drop asset: editor engine not ready");
return;
@@ -14,7 +14,7 @@ export function toggleObjectVisibility(editor: Editor, uuid: string): void {
if (!obj) return;
const before = obj.visible;
editor.bus.emit(new OutlinerItemVisibilityToggledEvent(uuid));
editor.sceneManager?.hideObject(uuid);
void editor.sceneManager?.hideObject(uuid);
editor.history.record(
new VisibilityAction(editor, uuid, before, !before),
);
@@ -190,7 +190,7 @@ class Editor {
// Ammo.js WASM is a global side-effect script the physics path
// depends on. The singleton ensures it's appended to document.body
// exactly once, even across Editor re-construction.
ensureAmmoLoaded();
void ensureAmmoLoaded();
// Version and name.
this.version = 2.0;
@@ -667,9 +667,9 @@ class Editor {
};
if (!this.utils.isEmpty(cacheJson)) {
this.save_manager.loadCache(cacheJson).then(applyIfLoaded);
void this.save_manager.loadCache(cacheJson).then(applyIfLoaded);
} else if (!this.utils.isEmpty(sceneToken)) {
this.save_manager.loadScene(sceneToken).then(applyIfLoaded);
void this.save_manager.loadScene(sceneToken).then(applyIfLoaded);
} else {
this.adapter.onSceneTitleChange?.({
title: "Untitled New Scene",
@@ -1065,7 +1065,7 @@ class Editor {
}
this.lastFrameTime = frameTime;
this.renderSingleFrame();
void this.renderSingleFrame();
}
startRenderLoop() {
@@ -151,7 +151,7 @@ export class ModalTransformController {
}
}
this.target.position.copy(this.startPos).add(delta);
this.editor.renderScene();
void this.editor.renderScene();
}
private axisVector(axis: "x" | "y" | "z"): THREE.Vector3 {
@@ -190,7 +190,7 @@ export class ModalTransformController {
private cancel() {
if (this.target) this.target.position.copy(this.startPos);
this.editor.renderScene();
void this.editor.renderScene();
this.cleanup();
}
@@ -77,7 +77,7 @@ export class LoadingPlaceHolderManager {
if (result === undefined) {
return;
}
result.destroyWithScene(this.scene);
void result.destroyWithScene(this.scene);
this.messages.delete(id);
}
@@ -112,7 +112,7 @@ class Scene {
initialize() {
this.scene = new THREE.Scene();
this.placeholder_manager = new LoadingPlaceHolderManager(this.scene);
this.placeholder_manager.initialize();
void this.placeholder_manager.initialize();
this._createGrid();
this._create_base_lighting();
@@ -170,7 +170,7 @@ export function useCurrency(): UseCurrencyResult {
useEffect(() => {
let cancelled = false;
fetchRates().then((r) => {
void fetchRates().then((r) => {
if (!cancelled) {
setRates(r);
setRatesLoaded(true);
@@ -102,7 +102,7 @@ const AudioRefTile = ({
el.volume = 0.2;
audioRef.current = el;
el.onended = () => setIsPlaying(false);
el.play();
void el.play();
setIsPlaying(true);
}
},
@@ -347,7 +347,7 @@ export const PromptBox2D = ({
const isSubmitCombo = enterToGenerate && !e.shiftKey;
if (isSubmitCombo) {
e.preventDefault();
handleGenerate();
void handleGenerate();
}
};
@@ -543,7 +543,7 @@ export const PromptBox3D = ({
const isSubmitCombo = enterToGenerate && !e.shiftKey;
if (isSubmitCombo) {
e.preventDefault();
handleEnqueue();
void handleEnqueue();
}
};
@@ -352,7 +352,7 @@ export const PromptBoxAudio = ({
if (e.key !== "Enter") return;
if (enterToGenerate && !e.shiftKey) {
e.preventDefault();
handleEnqueue();
void handleEnqueue();
}
};
@@ -461,7 +461,7 @@ export const PromptBoxImage = ({
const isSubmitCombo = enterToGenerate && !e.shiftKey;
if (isSubmitCombo) {
e.preventDefault();
handleEnqueue();
void handleEnqueue();
}
};
@@ -1231,7 +1231,7 @@ export const PromptBoxVideo = ({
console.error("PromptBoxVideo - enqueue failed", failure.reason);
toast.error(commandErrorMessage(failure.reason, "Failed to start video generation. Please try again."));
}
if (acceptedIds.length) onEnqueuePressed?.(prompt, acceptedIds);
if (acceptedIds.length) void onEnqueuePressed?.(prompt, acceptedIds);
setIsEnqueueing(false);
};
@@ -1282,7 +1282,7 @@ export const PromptBoxVideo = ({
return;
}
handleEnqueue();
void handleEnqueue();
}
};
@@ -1392,7 +1392,7 @@ export const PromptBoxVideo = ({
)
return;
if (!prompt.trim()) return;
handleEnqueue();
void handleEnqueue();
}
}}
onFocus={() => setIsFocused(true)}
@@ -68,7 +68,7 @@ export const DeckCard = ({
el.volume = 0.2;
audioRef.current = el;
el.onended = () => setIsPlaying(false);
el.play();
void el.play();
setIsPlaying(true);
}
}, [isPlaying, item.url, stopAudio]);
@@ -516,8 +516,8 @@ export function useDeckMedia<
);
if (images.length > 0) processImageFiles(images, "start");
if (videos.length > 0 && setReferenceVideos) processVideoFiles(videos);
if (audios.length > 0 && setReferenceAudios) processAudioFiles(audios);
if (videos.length > 0 && setReferenceVideos) void processVideoFiles(videos);
if (audios.length > 0 && setReferenceAudios) void processAudioFiles(audios);
};
// maxImages of 0 means the page's model takes no image refs at all.
@@ -92,7 +92,7 @@ export function ProviderSetupModal({
icon={ArrowRightIcon}
iconFlip={true}
onClick={() => {
buttonOnClick();
void buttonOnClick();
}}
>
{modalButtonText}
@@ -27,7 +27,7 @@ export const AboutSettingsPane = (args: AboutSettingsPaneProps) => {
const prefs = await GetAppInfo();
setAppInfo(prefs.payload);
};
fetchData();
void fetchData();
}, []);
const handleVersionClick = () => {
@@ -40,7 +40,7 @@ export const ArtcraftAccountBlock = ({
setIsCheckingArtcraftSession(false);
}
};
fetchSession();
void fetchSession();
}, []);
const handleArtcraftButton = async () => {
@@ -24,11 +24,11 @@ export const GrokAccountBlock = () => {
};
useEffect(() => {
fetchSession();
void fetchSession();
}, []);
useRefreshAccountStateEvent(async (event: RefreshAccountStateEvent) => {
fetchSession();
void fetchSession();
});
const clearState = async() => {
@@ -24,11 +24,11 @@ export const MidjourneyAccountBlock = () => {
};
useEffect(() => {
fetchSession();
void fetchSession();
}, []);
useRefreshAccountStateEvent(async (event: RefreshAccountStateEvent) => {
fetchSession();
void fetchSession();
});
const clearState = async() => {
@@ -28,7 +28,7 @@ export const OpenAIApiKeyBlock = () => {
setIsCheckingOpenAIApiKey(false);
}
};
fetchKey();
void fetchKey();
}, []);
const syncOpenAIApiKey = async (key: string) => {
@@ -23,7 +23,7 @@ export const AudioSettingsPane = (args: AudioSettingsPaneProps) => {
const prefs = await GetAppPreferences();
setPreferences(prefs.preferences);
};
fetchData();
void fetchData();
}, []);
const playSounds = preferences?.play_sounds || false;
@@ -221,7 +221,7 @@ export const DownloadsSettingsPane = () => {
if (value === "custom") {
setFilenameMode("custom");
} else {
saveFilenamePreference("artcraft_convention");
void saveFilenamePreference("artcraft_convention");
}
}}
/>
@@ -139,7 +139,7 @@ export const ProviderPrioritySettingsPane = () => {
setItems(items);
};
fetchData();
void fetchData();
}, []);
const sensors = useSensors(
@@ -178,7 +178,7 @@ export const ProviderPrioritySettingsPane = () => {
const newOrder = arrayMove(prevItems, oldIndex, newIndex);
// Send update to backend
updateProviderPriorityOnBackend(newOrder);
void updateProviderPriorityOnBackend(newOrder);
return newOrder;
});
@@ -270,7 +270,7 @@ export const UploadFiles3D = ({
// B's key.
useEffect(() => {
if (previewStatus.type === "OK" && canvasRef.current) {
snapshotCanvasAsThumbnail({
void snapshotCanvasAsThumbnail({
targetNode: canvasRef.current,
resultCallback: (blob) => {
const currentFile = fileEntries[previewIndex]?.file;
@@ -503,7 +503,7 @@ export const UploadFiles3D = ({
// can only ever be a clean single-file submission; the excludedCount
// check makes that invariant explicit rather than incidental.
if (excludedCount === 0 && files.length === 1 && fileEntries.length === 1) {
upload3DObjects({
void upload3DObjects({
title: files[0].name.slice(0, files[0].name.lastIndexOf(".")),
assetFile: files[0],
engineCategory,
@@ -521,7 +521,7 @@ export const UploadFiles3D = ({
setIsUploading(true);
setOverallProgress({ current: 0, total: files.length });
upload3DObjectsBatch({
void upload3DObjectsBatch({
files,
thumbnails: pendingThumbnails,
engineCategory,
@@ -581,7 +581,7 @@ export const UploadFiles3D = ({
setIsUploading(true);
setOverallProgress({ current: 0, total: failedFiles.length });
upload3DObjectsBatch({
void upload3DObjectsBatch({
files: failedFiles,
thumbnails: failedThumbnails,
engineCategory,
@@ -742,7 +742,7 @@ export const UploadFiles3D = ({
className="hidden items-center text-xs text-white/60 transition-colors hover:text-white group-hover:inline-flex"
onClick={(e) => {
e.stopPropagation();
retrySingleFile(i);
void retrySingleFile(i);
}}
title="Retry"
>
@@ -117,7 +117,7 @@ export const UploadFilesImage = ({
.filter((i) => i !== -1);
if (files.length === 1 && fileEntries.length === 1) {
uploadImage({
void uploadImage({
title: files[0].name.slice(0, files[0].name.lastIndexOf(".")),
assetFile: files[0],
progressCallback: onUploadProgress,
@@ -128,7 +128,7 @@ export const UploadFilesImage = ({
setIsUploading(true);
setOverallProgress({ current: 0, total: files.length });
uploadImagesBatch({
void uploadImagesBatch({
files,
onFileStatusChange: (batchIndex, status, errorMessage) =>
updateFileStatus(originalIndices[batchIndex], status, errorMessage),
@@ -159,7 +159,7 @@ export const UploadFilesImage = ({
setIsUploading(true);
setOverallProgress({ current: 0, total: failedFiles.length });
uploadImagesBatch({
void uploadImagesBatch({
files: failedFiles,
onFileStatusChange: (batchIndex, status, errorMessage) =>
updateFileStatus(failedIndices[batchIndex], status, errorMessage),
@@ -248,7 +248,7 @@ export const UploadFilesImage = ({
className="hidden group-hover:inline-flex items-center text-xs text-white/60 hover:text-white transition-colors"
onClick={(e) => {
e.stopPropagation();
retrySingleFile(i);
void retrySingleFile(i);
}}
title="Retry"
>
@@ -127,7 +127,7 @@ export const UploadFilesSplat = ({
const canvas = canvasRef.current;
const currentFile = fileEntries[previewIndex]?.file;
const rafId = requestAnimationFrame(() => {
snapshotCanvasAsThumbnail({
void snapshotCanvasAsThumbnail({
targetNode: canvas,
resultCallback: (blob) => {
if (blob && currentFile) {
@@ -222,7 +222,7 @@ export const UploadFilesSplat = ({
);
if (files.length === 1 && fileEntries.length === 1) {
upload3DObjects({
void upload3DObjects({
title: files[0].name.slice(0, files[0].name.lastIndexOf(".")),
assetFile: files[0],
engineCategory,
@@ -236,7 +236,7 @@ export const UploadFilesSplat = ({
setIsUploading(true);
setOverallProgress({ current: 0, total: files.length });
upload3DObjectsBatch({
void upload3DObjectsBatch({
files,
thumbnails: pendingThumbnails,
engineCategory,
@@ -277,7 +277,7 @@ export const UploadFilesSplat = ({
setIsUploading(true);
setOverallProgress({ current: 0, total: failedFiles.length });
upload3DObjectsBatch({
void upload3DObjectsBatch({
files: failedFiles,
thumbnails: failedThumbnails,
engineCategory,
@@ -375,7 +375,7 @@ export const UploadFilesSplat = ({
className="hidden group-hover:inline-flex items-center text-xs text-white/60 hover:text-white transition-colors"
onClick={(e) => {
e.stopPropagation();
retrySingleFile(i);
void retrySingleFile(i);
}}
title="Retry"
>
@@ -441,7 +441,7 @@ export function useEditorActions() {
useActionHandler(
"toggle-bookmark",
() => {
editor.scenes.toggleBookmark({ time: editor.playback.getCurrentTime() });
void editor.scenes.toggleBookmark({ time: editor.playback.getCurrentTime() });
},
undefined,
);
@@ -21,7 +21,7 @@ export function useFontAtlas({ open }: { open: boolean }) {
if (!open || atlas) return;
setStatus("loading");
loadFontAtlas().then((data) => {
void loadFontAtlas().then((data) => {
if (data) {
setAtlas(data);
setStatus("idle");
@@ -34,7 +34,7 @@ export function useFontAtlas({ open }: { open: boolean }) {
const retry = useCallback(() => {
clearFontAtlasCache();
setStatus("loading");
loadFontAtlas().then((data) => {
void loadFontAtlas().then((data) => {
if (data) {
setAtlas(data);
setStatus("idle");
@@ -20,7 +20,7 @@ export function useFullscreen({
const toggleFullscreen = useCallback(() => {
if (!containerRef.current) return;
if (document.fullscreenElement) {
document.exitFullscreen();
void document.exitFullscreen();
} else {
containerRef.current.requestFullscreen();
}
@@ -313,7 +313,7 @@ function BookmarkPopoverContent({
}, [bookmark.color]);
const handleRemove = () => {
editor.scenes.removeBookmark({ time });
void editor.scenes.removeBookmark({ time });
onPopoverClose();
};
@@ -334,7 +334,7 @@ function BookmarkPopoverContent({
updates.duration = duration;
}
if (Object.keys(updates).length === 0) return;
editor.scenes.updateBookmark({ time, updates });
void editor.scenes.updateBookmark({ time, updates });
};
const maxDuration = mediaTimeToSeconds({
time:
@@ -240,7 +240,7 @@ export function useBookmarkDrag({
const clampedTime =
dragState.currentTime > duration ? duration : dragState.currentTime;
editor.scenes.moveBookmark({
void editor.scenes.moveBookmark({
fromTime: dragState.bookmarkTime,
toTime: clampedTime,
});