From b9432fa5e07c98cda1db96c565e8a3c0ade16f69 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 7 Jun 2025 15:48:28 +0300 Subject: [PATCH] fix useResources --- src/hooks/useResourceStatus.tsx | 16 +++++++++++++++- src/index.ts | 3 ++- src/utils/events.ts | 11 +++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/utils/events.ts diff --git a/src/hooks/useResourceStatus.tsx b/src/hooks/useResourceStatus.tsx index 21dff16..13b7a9b 100644 --- a/src/hooks/useResourceStatus.tsx +++ b/src/hooks/useResourceStatus.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useMemo, useRef } from "react"; -import { usePublishStore } from "../state/publishes"; +import { ResourceStatus, usePublishStore } from "../state/publishes"; import { QortalGetMetadata } from "../types/interfaces/resources"; interface PropsUseResourceStatus { @@ -15,9 +15,23 @@ export const useResourceStatus = ({ const intervalRef = useRef(null) const timeoutRef = useRef(null) const setResourceStatus = usePublishStore((state) => state.setResourceStatus); + const statusRef = useRef(null) + + useEffect(()=> { + statusRef.current = status + }, [status]) const downloadResource = useCallback( ({ service, name, identifier }: QortalGetMetadata, build?: boolean) => { try { + if(statusRef.current && statusRef.current?.status === 'READY'){ + if (intervalRef.current) { + clearInterval(intervalRef.current); + } + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + return + } setResourceStatus( { service, name, identifier }, { diff --git a/src/index.ts b/src/index.ts index a18ac1d..0d61bdb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,9 +3,10 @@ export { useResourceStatus } from './hooks/useResourceStatus'; export { Spacer } from './common/Spacer'; export { useModal } from './hooks/useModal'; -export { AudioPlayerControls , OnTrackChangeMeta, AudioPlayerProps} from './components/AudioPlayer/AudioPlayerControls'; +export { AudioPlayerControls , OnTrackChangeMeta, AudioPlayerProps, AudioPlayerHandle} from './components/AudioPlayer/AudioPlayerControls'; export { useAudioPlayerHotkeys } from './components/AudioPlayer/useAudioPlayerHotkeys'; import './index.css' +export { executeEvent, subscribeToEvent, unsubscribeFromEvent } from './utils/events'; export { formatBytes, formatDuration } from './utils/numbers'; export { createQortalLink } from './utils/qortal'; export { IndexCategory } from './state/indexes'; diff --git a/src/utils/events.ts b/src/utils/events.ts new file mode 100644 index 0000000..94d1c31 --- /dev/null +++ b/src/utils/events.ts @@ -0,0 +1,11 @@ +export const executeEvent = (eventName: string, data: any)=> { + const event = new CustomEvent(eventName, {detail: data}) + document.dispatchEvent(event) +} +export const subscribeToEvent = (eventName: string, listener: any)=> { + document.addEventListener(eventName, listener) +} + +export const unsubscribeFromEvent = (eventName: string, listener: any)=> { + document.removeEventListener(eventName, listener) +} \ No newline at end of file