diff --git a/src/common/animations.less b/src/common/animations.less
index 6ca879343..00653433d 100644
--- a/src/common/animations.less
+++ b/src/common/animations.less
@@ -51,4 +51,35 @@
.slide-left-exit {
transform: translateX(100%);
+}
+
+.slide-up-enter {
+ transform: translateY(100%);
+}
+
+.slide-up-active {
+ transform: translateY(0%);
+ transition: transform 0.3s cubic-bezier(0.32, 0, 0.67, 0);
+}
+
+.slide-up-exit {
+ transform: translateY(100%);
+}
+
+@keyframes fade-in-no-motion {
+ 0% {
+ opacity: 0;
+ }
+
+ 40% {
+ opacity: 0;
+ }
+
+ 70% {
+ opacity: 0.6;
+ }
+
+ 100% {
+ opacity: 1;
+ }
}
\ No newline at end of file
diff --git a/src/routes/Board/Board.js b/src/routes/Board/Board.js
index a9ed6b553..d405ece67 100644
--- a/src/routes/Board/Board.js
+++ b/src/routes/Board/Board.js
@@ -5,11 +5,11 @@ const classnames = require('classnames');
const debounce = require('lodash.debounce');
const { useTranslation } = require('react-i18next');
const { useStreamingServer, useNotifications, withCoreSuspender, getVisibleChildrenRange } = require('stremio/common');
-const { ContinueWatchingItem, EventModal, MainNavBars, MetaItem, MetaRow } = require('stremio/components');
-const StreamingServerWarning = require('./StreamingServerWarning');
+const { ContinueWatchingItem, EventModal, MainNavBars, MetaItem, MetaRow, Transition } = require('stremio/components');
const useBoard = require('./useBoard');
const useContinueWatchingPreview = require('./useContinueWatchingPreview');
const styles = require('./styles');
+const { default: StreamingServerWarning } = require('./StreamingServerWarning');
const THRESHOLD = 5;
@@ -21,6 +21,7 @@ const Board = () => {
const notifications = useNotifications();
const boardCatalogsOffset = continueWatchingPreview.items.length > 0 ? 1 : 0;
const scrollContainerRef = React.useRef();
+ const streamingServerWarningOpen = React.useMemo(() => streamingServer.settings !== null && streamingServer.settings.type === 'Err', [streamingServer.settings]);
const onVisibleRangeChange = React.useCallback(() => {
const range = getVisibleChildrenRange(scrollContainerRef.current);
if (range === null) {
@@ -94,12 +95,9 @@ const Board = () => {
})}
- {
- streamingServer.settings !== null && streamingServer.settings.type === 'Err' ?
-
- :
- null
- }
+
+
+
);
};
diff --git a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.js b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.js
deleted file mode 100644
index 61a70dff3..000000000
--- a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2017-2023 Smart code 203358507
-
-const React = require('react');
-const { useServices } = require('stremio/services');
-const PropTypes = require('prop-types');
-const classnames = require('classnames');
-const { useTranslation } = require('react-i18next');
-const { Button } = require('stremio/components');
-const useProfile = require('stremio/common/useProfile');
-const { withCoreSuspender } = require('stremio/common/CoreSuspender');
-const styles = require('./styles');
-
-const StreamingServerWarning = ({ className }) => {
- const { t } = useTranslation();
- const { core } = useServices();
- const profile = useProfile();
- const onLaterClick = React.useCallback(() => {
- const streamingServerWarningDismissed = new Date();
- streamingServerWarningDismissed.setMonth(streamingServerWarningDismissed.getMonth() + 1);
- core.transport.dispatch({
- action: 'Ctx',
- args: {
- action: 'UpdateSettings',
- args: {
- ...profile.settings,
- streamingServerWarningDismissed
- }
- }
- });
- }, [profile.settings]);
- const onDismissClick = React.useCallback(() => {
- const streamingServerWarningDismissed = new Date();
- streamingServerWarningDismissed.setFullYear(streamingServerWarningDismissed.getFullYear() + 50);
- core.transport.dispatch({
- action: 'Ctx',
- args: {
- action: 'UpdateSettings',
- args: {
- ...profile.settings,
- streamingServerWarningDismissed
- }
- }
- });
- }, [profile.settings]);
-
- if (!isNaN(profile.settings.streamingServerWarningDismissed.getTime()) &&
- profile.settings.streamingServerWarningDismissed.getTime() > Date.now()) {
- return null;
- }
-
- return (
-
- );
-};
-
-StreamingServerWarning.propTypes = {
- className: PropTypes.string
-};
-
-module.exports = withCoreSuspender(StreamingServerWarning);
diff --git a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx
new file mode 100644
index 000000000..5b2218bf0
--- /dev/null
+++ b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx
@@ -0,0 +1,93 @@
+import React, { useCallback } from 'react';
+import { useTranslation } from 'react-i18next';
+import classnames from 'classnames';
+import { useServices } from 'stremio/services';
+import { Button } from 'stremio/components';
+import useProfile from 'stremio/common/useProfile';
+import { withCoreSuspender } from 'stremio/common/CoreSuspender';
+import styles from './styles.less';
+
+type Props = {
+ className?: string;
+};
+
+const StreamingServerWarning = ({ className }: Props) => {
+ const { t } = useTranslation();
+ const { core } = useServices();
+ const profile = useProfile();
+
+ const createDate = (months: number, years: number): Date => {
+ const date = new Date();
+ if (months) date.setMonth(date.getMonth() + months);
+ if (years) date.setFullYear(date.getFullYear() + years);
+ return date;
+ };
+
+ const updateSettings = useCallback((warningDismissed: Date) => {
+ core.transport.dispatch({
+ action: 'Ctx',
+ args: {
+ action: 'UpdateSettings',
+ args: {
+ ...profile.settings,
+ warningDismissed
+ }
+ }
+ });
+ }, [profile.settings]);
+
+ const onLater = useCallback(() => {
+ updateSettings(createDate(1, 0));
+ }, [updateSettings]);
+
+ const onDismiss = useCallback(() => {
+ updateSettings(createDate(0, 50));
+ }, [updateSettings]);
+
+ return (
+
+
+ {t('SETTINGS_SERVER_UNAVAILABLE')}
+
+
+
+ );
+};
+
+export default withCoreSuspender(StreamingServerWarning);
diff --git a/src/routes/Board/StreamingServerWarning/index.js b/src/routes/Board/StreamingServerWarning/index.js
deleted file mode 100644
index 6e3f26596..000000000
--- a/src/routes/Board/StreamingServerWarning/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (C) 2017-2023 Smart code 203358507
-
-const StreamingServerWarning = require('./StreamingServerWarning');
-
-module.exports = StreamingServerWarning;
diff --git a/src/routes/Board/StreamingServerWarning/index.ts b/src/routes/Board/StreamingServerWarning/index.ts
new file mode 100644
index 000000000..f623704a5
--- /dev/null
+++ b/src/routes/Board/StreamingServerWarning/index.ts
@@ -0,0 +1,5 @@
+// Copyright (C) 2017-2024 Smart code 203358507
+
+import StreamingServerWarning from './StreamingServerWarning';
+
+export default StreamingServerWarning;
diff --git a/src/routes/Board/StreamingServerWarning/styles.less b/src/routes/Board/StreamingServerWarning/styles.less
index 42ab6bb4b..434c19e9c 100644
--- a/src/routes/Board/StreamingServerWarning/styles.less
+++ b/src/routes/Board/StreamingServerWarning/styles.less
@@ -1,6 +1,7 @@
// Copyright (C) 2017-2023 Smart code 203358507
@import (reference) '~@stremio/stremio-colors/less/stremio-colors.less';
+@import (reference) '~stremio/common/screen-sizes.less';
.warning-container {
display: flex;
@@ -8,53 +9,52 @@
align-items: center;
padding: 1rem;
background-color: @color-accent5-dark3;
+ border-radius: 0.5rem 0.5rem 0 0;
+ margin: 0 0.5rem;
+ box-shadow: 0px 0.25rem 1rem rgba(0, 0, 0, 0.48), 0px 0.5rem 3rem rgba(0, 0, 0, 0.64);
.warning-statement {
flex: 1;
- margin-right: 1rem;
font-size: 1.2rem;
max-height: 2.4em;
color: @color-surface-light5-90;
}
- .warning-button {
- flex: none;
- margin-left: 1rem;
- color: @color-surface-light5-90;
+ .actions {
+ display: flex;
+ gap: 1rem;
- &:first-child {
- margin-left: 0;
- }
-
- &:hover {
- .warning-label {
- text-decoration: underline;
+ .action {
+ flex: none;
+ color: @color-surface-light5-90;
+
+ &:first-child {
+ margin-left: 0;
+ }
+
+ .label {
+ font-size: 1.2rem;
+ max-height: 1.2em;
+ color: @color-surface-light5-90;
+ }
+
+ &:hover {
+ .label {
+ text-decoration: underline;
+ }
}
}
-
- .warning-label {
- font-size: 1.2rem;
- max-height: 1.2em;
- color: @color-surface-light5-90;
- }
- }
-
- .warning-button:hover {
- text-decoration: underline;
}
}
-@media only screen and (max-width: 500px) {
+@media only screen and (max-width: @minimum) {
.warning-container {
- display: block;
- height: auto !important;
+ flex-direction: column;
text-align: center;
- .warning-statement {
- margin-bottom: 0.5rem;
- margin-right: 0;
- }
- .warning-button {
- display: inline-block;
+ padding: 1rem 0.5rem;
+
+ .actions {
+ justify-content: space-around;
}
}
}
diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less
index 403e75869..00542559d 100644
--- a/src/routes/Board/styles.less
+++ b/src/routes/Board/styles.less
@@ -220,7 +220,7 @@
left: 0;
right: 0;
bottom: calc(var(--vertical-nav-bar-size) + var(--calculated-bottom-safe-inset, 0rem));
- height: 4rem;
+ height: 6rem;
margin-bottom: 0rem;
}
}