From 9594efbb0ed1059beecb6afdb9ba6b6064b8e64d Mon Sep 17 00:00:00 2001 From: kKaskak <117831817+kKaskak@users.noreply.github.com> Date: Thu, 14 Dec 2023 15:06:06 +0100 Subject: [PATCH] refactor: created a separate component --- .../SeasonalNotification.js | 52 ++++++++++ src/common/SeasonalNotification/styles.less | 96 +++++++++++++++++++ .../useFetchNotificationData.js | 0 src/routes/Board/Board.js | 44 +-------- src/routes/Board/styles.less | 52 ---------- 5 files changed, 151 insertions(+), 93 deletions(-) create mode 100644 src/common/SeasonalNotification/SeasonalNotification.js create mode 100644 src/common/SeasonalNotification/styles.less rename src/{routes/Board => common/SeasonalNotification}/useFetchNotificationData.js (100%) diff --git a/src/common/SeasonalNotification/SeasonalNotification.js b/src/common/SeasonalNotification/SeasonalNotification.js new file mode 100644 index 000000000..1c5b7ab07 --- /dev/null +++ b/src/common/SeasonalNotification/SeasonalNotification.js @@ -0,0 +1,52 @@ +// Copyright (C) 2017-2023 Smart code 203358507 + +const React = require('react'); +const styles = require('./styles'); +const { Button, ModalDialog } = require('../../common'); +const useBinaryState = require('stremio/common/useBinaryState'); +const useFetchNotificationData = require('./useFetchNotificationData'); + +const SeasonalNotification = () => { + const { notificationModalData, isModalDataLoading } = useFetchNotificationData(); + const [isNotificationModalOpen, , closeNotificationModal] = useBinaryState(true); + + return ( + notificationModalData !== null && !isModalDataLoading && isNotificationModalOpen ? + + { + notificationModalData.imageUrl ? + + : + null + } +
+
+ { + notificationModalData.title ? +
{notificationModalData.title}
+ : + null + } + { + notificationModalData.message ? +
{notificationModalData.message}
+ : + null + } +
+ { + notificationModalData.addon.manifestUrl ? + + : + null + } +
+
+ : + null + ); +}; + +module.exports = SeasonalNotification; diff --git a/src/common/SeasonalNotification/styles.less b/src/common/SeasonalNotification/styles.less new file mode 100644 index 000000000..9acd55e3f --- /dev/null +++ b/src/common/SeasonalNotification/styles.less @@ -0,0 +1,96 @@ +// Copyright (C) 2017-2023 Smart code 203358507 + +@import (reference) '~stremio/common/screen-sizes.less'; + +:import('~stremio/common/ModalDialog/styles.less') { + modal-dialog-content: modal-dialog-content; + modal-dialog-container: modal-dialog-container; +} + +.notification-modal { + .modal-dialog-container { + overflow: visible; + max-width: 45rem; + + .modal-dialog-content { + display: flex; + flex-direction: column; + align-items: center; + overflow: visible; + + .notification-image { + width: 100%; + height: 100%; + margin-top: -10rem; + } + + .info-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 1rem 4rem; + margin-top: -7rem; + + .title-container { + .title { + color: var(--primary-foreground-color); + font-size: 1.325rem; + text-align: center; + margin-bottom: 2rem; + padding: 0 6rem; + } + + .notification-label { + color: var(--primary-foreground-color); + font-size: 1rem; + text-align: center; + opacity: 0.5; + margin-bottom: 3rem; + } + } + + + .action-button { + background-color: var(--primary-foreground-color); + border: 2px solid var(--primary-foreground-color); + padding: 0.8rem 1.5rem; + border-radius: 2rem; + + .button-label { + color: var(--primary-accent-color); + font-size: 1rem; + } + + &:hover { + background-color: transparent; + } + } + } + } + } + + @media only screen and (max-width: @minimum) { + .modal-dialog-container { + .modal-dialog-content { + .notification-image { + height: 125%; + width: 125%; + } + + .info-container { + .title-container { + .title { + padding: 0rem; + font-size: 1rem; + } + + .notification-label { + font-size: 0.875rem; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/routes/Board/useFetchNotificationData.js b/src/common/SeasonalNotification/useFetchNotificationData.js similarity index 100% rename from src/routes/Board/useFetchNotificationData.js rename to src/common/SeasonalNotification/useFetchNotificationData.js diff --git a/src/routes/Board/Board.js b/src/routes/Board/Board.js index d8c152181..b57091a3f 100644 --- a/src/routes/Board/Board.js +++ b/src/routes/Board/Board.js @@ -4,11 +4,11 @@ const React = require('react'); const classnames = require('classnames'); const debounce = require('lodash.debounce'); const { useTranslation } = require('react-i18next'); -const { MainNavBars, MetaRow, ContinueWatchingItem, MetaItem, StreamingServerWarning, useStreamingServer, withCoreSuspender, getVisibleChildrenRange, ModalDialog, Button, useBinaryState } = require('stremio/common'); +const { MainNavBars, MetaRow, ContinueWatchingItem, MetaItem, StreamingServerWarning, useStreamingServer, withCoreSuspender, getVisibleChildrenRange } = require('stremio/common'); const useBoard = require('./useBoard'); const useContinueWatchingPreview = require('./useContinueWatchingPreview'); const styles = require('./styles'); -const useFetchNotificationData = require('./useFetchNotificationData'); +const SeasonalNotification = require('stremio/common/SeasonalNotification/SeasonalNotification'); const THRESHOLD = 5; @@ -19,8 +19,6 @@ const Board = () => { const [board, loadBoardRows] = useBoard(); const boardCatalogsOffset = continueWatchingPreview.items.length > 0 ? 1 : 0; const scrollContainerRef = React.useRef(); - const { notificationModalData, isModalDataLoading } = useFetchNotificationData(); - const [isNotificationModalOpen, , closeNotificationModal] = useBinaryState(true); const onVisibleRangeChange = React.useCallback(() => { const range = getVisibleChildrenRange(scrollContainerRef.current); if (range === null) { @@ -41,43 +39,7 @@ const Board = () => { }, [board.catalogs, onVisibleRangeChange]); return (
- { - isNotificationModalOpen && notificationModalData && !isModalDataLoading ? - - { - notificationModalData.imageUrl ? - - : - null - } -
-
- { - notificationModalData.title ? -
{notificationModalData.title}
- : - null - } - { - notificationModalData.message ? -
{notificationModalData.message}
- : - null - } -
- { - notificationModalData.addon.manifestUrl ? - - : - null - } -
-
- : - null - } +
{ diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index 11f575a9b..b949d8689 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -17,58 +17,6 @@ display: flex; flex-direction: column; - .notification-modal { - .notification-image { - width: 95%; - height: 95%; - margin: -10rem auto 0; - } - - .info-container { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 1rem 4rem; - margin-top: -7rem; - - .title-container { - .title { - color: var(--primary-foreground-color); - font-size: 1.325rem; - text-align: center; - margin-bottom: 2rem; - padding: 0 4rem; - } - - .label { - color: var(--primary-foreground-color); - font-size: 1rem; - text-align: center; - opacity: 0.5; - margin-bottom: 3rem; - } - } - - - .action-button { - background-color: var(--secondary-accent-color); - border: 2px solid var(--secondary-accent-color); - padding: 0.8rem 1.5rem; - border-radius: 2rem; - - .label { - color: var(--primary-foreground-color); - font-size: 1rem; - } - - &:hover { - background-color: transparent; - } - } - } - } - .board-content-container { flex: 1; align-self: stretch;