diff --git a/src/common/EventModal/EventModal.js b/src/common/EventModal/EventModal.js index 3b648767d..03fff5b83 100644 --- a/src/common/EventModal/EventModal.js +++ b/src/common/EventModal/EventModal.js @@ -2,41 +2,55 @@ const React = require('react'); const styles = require('./styles'); -const { Button, ModalDialog } = require('..'); -const useBinaryState = require('stremio/common/useBinaryState'); -const useFetchNotificationData = require('./useFetchNotificationData'); +const Button = require('stremio/common/Button'); +const ModalDialog = require('stremio/common/ModalDialog'); +const useEvents = require('./useEvents'); const EventModal = () => { - const { notificationModalData, isModalDataLoading } = useFetchNotificationData(); - const [isNotificationModalOpen, , closeNotificationModal] = useBinaryState(true); + const { events, pullEvents, dismissEvent } = useEvents(); + + const modal = React.useMemo(() => { + return events?.modal?.type === 'Ready' ? + events.modal.content + : + null; + }, [events]); + + const onCloseRequest = React.useCallback(() => { + modal?.id && dismissEvent(modal.id); + }, [modal]); + + React.useEffect(() => { + pullEvents(); + }, []); return ( - notificationModalData !== null && !isModalDataLoading && isNotificationModalOpen ? - + modal !== null ? + { - notificationModalData.imageUrl ? - + modal.imageUrl ? + : null }
{ - notificationModalData.title ? -
{notificationModalData.title}
+ modal.title ? +
{modal.title}
: null } { - notificationModalData.message ? -
{notificationModalData.message}
+ modal.message ? +
{modal.message}
: null }
{ - notificationModalData.addon.manifestUrl ? - : diff --git a/src/common/EventModal/useEvents.js b/src/common/EventModal/useEvents.js new file mode 100644 index 000000000..f5efaa79e --- /dev/null +++ b/src/common/EventModal/useEvents.js @@ -0,0 +1,36 @@ +// Copyright (C) 2017-2023 Smart code 203358507 + +const useModelState = require('stremio/common/useModelState'); +const { useServices } = require('stremio/services'); + +const map = (ctx) => ({ + ...ctx.events, +}); + +const useEvents = () => { + const { core } = useServices(); + + const pullEvents = () => { + core.transport.dispatch({ + action: 'Ctx', + args: { + action: 'GetEvents', + }, + }); + }; + + const dismissEvent = (id) => { + core.transport.dispatch({ + action: 'Ctx', + args: { + action: 'DismissEvent', + args: id, + }, + }); + }; + + const events = useModelState({ model: 'ctx', map }); + return { events, pullEvents, dismissEvent }; +}; + +module.exports = useEvents; diff --git a/src/common/EventModal/useFetchNotificationData.js b/src/common/EventModal/useFetchNotificationData.js deleted file mode 100644 index 022243a94..000000000 --- a/src/common/EventModal/useFetchNotificationData.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2017-2023 Smart code 203358507 - -const React = require('react'); - -const useFetchNotificationData = () => { - const [notificationModalData, setNotificationModalData] = React.useState(null); - const [isLoading, setIsLoading] = React.useState(false); - - React.useEffect(() => { - const fetchData = async () => { - setIsLoading(true); - try { - const response = await fetch('https://api.strem.io/api/getModal', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ date: new Date() }) - }); - - if (!response.ok) { - throw new Error('Network response was not ok'); - } - - const jsonData = await response.json(); - const data = jsonData.result; - setNotificationModalData(data); - } catch (err) { - throw new Error(err.message); - } finally { - setIsLoading(false); - } - }; - - fetchData(); - }, []); - - return { notificationModalData, isLoading }; -}; - -module.exports = useFetchNotificationData;