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