mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-04-21 03:22:11 +00:00
fix: cycle dependency with useRouteFocused
This commit is contained in:
parent
3c5e75431b
commit
90d54017c1
21 changed files with 46 additions and 49 deletions
|
|
@ -5,7 +5,7 @@ const throttle = require('lodash.throttle');
|
|||
const isEqual = require('lodash.isequal');
|
||||
const intersection = require('lodash.intersection');
|
||||
const { useCoreSuspender } = require('stremio/common/CoreSuspender');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { useServices } = require('stremio/services');
|
||||
|
||||
const useModelState = ({ action, ...args }) => {
|
||||
|
|
|
|||
24
src/common/useRouteFocused.ts
Normal file
24
src/common/useRouteFocused.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright (C) 2017-2025 Smart code 203358507
|
||||
|
||||
import React from 'react';
|
||||
|
||||
const useRouteFocused = () => {
|
||||
const [isFocused, setIsFocused] = React.useState(document.hasFocus());
|
||||
|
||||
React.useEffect(() => {
|
||||
const handleFocus = () => setIsFocused(true);
|
||||
const handleBlur = () => setIsFocused(false);
|
||||
|
||||
window.addEventListener('focus', handleFocus);
|
||||
window.addEventListener('blur', handleBlur);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('focus', handleFocus);
|
||||
window.removeEventListener('blur', handleBlur);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return isFocused;
|
||||
};
|
||||
|
||||
export default useRouteFocused;
|
||||
|
|
@ -3,7 +3,8 @@
|
|||
const React = require('react');
|
||||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const { useRouteFocused, useModalsContainer } = require('stremio-router');
|
||||
const { useModalsContainer } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { default: Button } = require('stremio/components/Button');
|
||||
const { default: Icon } = require('@stremio/stremio-icons/react');
|
||||
const { Modal } = require('stremio-router');
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
const React = require('react');
|
||||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const Popup = require('stremio/components/Popup');
|
||||
const useBinaryState = require('stremio/common/useBinaryState');
|
||||
const NavMenuContent = require('./NavMenuContent');
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ const classnames = require('classnames');
|
|||
const debounce = require('lodash.debounce');
|
||||
const { useTranslation } = require('react-i18next');
|
||||
const { default: Icon } = require('@stremio/stremio-icons/react');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const Button = require('stremio/components/Button').default;
|
||||
const TextInput = require('stremio/components/TextInput').default;
|
||||
const useTorrent = require('stremio/common/useTorrent');
|
||||
|
|
|
|||
|
|
@ -4,8 +4,9 @@ const React = require('react');
|
|||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const { default: Icon } = require('@stremio/stremio-icons/react');
|
||||
const { Button, Image } = require('stremio/components');
|
||||
const { Image } = require('stremio/components');
|
||||
const styles = require('./styles');
|
||||
const { Link } = require('react-router-dom');
|
||||
|
||||
const NavTabButton = ({ className, logo, icon, label, href, selected, onClick }) => {
|
||||
const renderLogoFallback = React.useCallback(() => (
|
||||
|
|
@ -24,7 +25,7 @@ const NavTabButton = ({ className, logo, icon, label, href, selected, onClick })
|
|||
});
|
||||
};
|
||||
return (
|
||||
<Button className={classnames(className, styles['nav-tab-button-container'], { 'selected': selected })} title={label} tabIndex={-1} href={href} onClick={onClick} onDoubleClick={onDoubleClick}>
|
||||
<Link className={classnames(className, styles['nav-tab-button-container'], { 'selected': selected })} title={label} tabIndex={-1} to={href} onClick={onClick} onDoubleClick={onDoubleClick}>
|
||||
{
|
||||
typeof logo === 'string' && logo.length > 0 ?
|
||||
<Image
|
||||
|
|
@ -45,7 +46,7 @@ const NavTabButton = ({ className, logo, icon, label, href, selected, onClick })
|
|||
:
|
||||
null
|
||||
}
|
||||
</Button>
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const React = require('react');
|
|||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const FocusLock = require('react-focus-lock').default;
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const styles = require('./styles');
|
||||
|
||||
const getAnchorElement = (element) => {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const PropTypes = require('prop-types');
|
|||
const classnames = require('classnames');
|
||||
const { useTranslation } = require('react-i18next');
|
||||
const { default: Icon } = require('@stremio/stremio-icons/react');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { Button } = require('stremio/components');
|
||||
const { default: TextInput } = require('stremio/components/TextInput');
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
const React = require('react');
|
||||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const useAnimationFrame = require('stremio/common/useAnimationFrame');
|
||||
const useLiveRef = require('stremio/common/useLiveRef');
|
||||
const styles = require('./styles');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const React = require('react');
|
|||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const { t } = require('i18next');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { default: Icon } = require('@stremio/stremio-icons/react');
|
||||
const { Button, Image, Popup } = require('stremio/components');
|
||||
const useBinaryState = require('stremio/common/useBinaryState');
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
// Copyright (C) 2017-2023 Smart code 203358507
|
||||
|
||||
const React = require('react');
|
||||
|
||||
const RouteFocusedContext = React.createContext(true);
|
||||
|
||||
RouteFocusedContext.displayName = 'RouteFocusedContext';
|
||||
|
||||
module.exports = RouteFocusedContext;
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
// Copyright (C) 2017-2023 Smart code 203358507
|
||||
|
||||
const RouteFocusedContext = require('./RouteFocusedContext');
|
||||
const useRouteFocused = require('./useRouteFocused');
|
||||
|
||||
module.exports = {
|
||||
RouteFocusedProvider: RouteFocusedContext.Provider,
|
||||
useRouteFocused
|
||||
};
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
// Copyright (C) 2017-2023 Smart code 203358507
|
||||
|
||||
const React = require('react');
|
||||
const RouteFocusedContext = require('./RouteFocusedContext');
|
||||
|
||||
const useRouteFocused = () => {
|
||||
return React.useContext(RouteFocusedContext);
|
||||
};
|
||||
|
||||
module.exports = useRouteFocused;
|
||||
|
|
@ -1,12 +1,10 @@
|
|||
// Copyright (C) 2017-2023 Smart code 203358507
|
||||
|
||||
const { useRouteFocused } = require('./RouteFocusedContext');
|
||||
const { useModalsContainer } = require('./ModalsContainerContext');
|
||||
const Modal = require('./Modal');
|
||||
const Router = require('./Router');
|
||||
|
||||
module.exports = {
|
||||
useRouteFocused,
|
||||
useModalsContainer,
|
||||
Modal,
|
||||
Router
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@ const { useTranslation } = require('react-i18next');
|
|||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const { default: Icon } = require('@stremio/stremio-icons/react');
|
||||
const { Modal, useRouteFocused } = require('stremio-router');
|
||||
const { Modal } = require('stremio-router');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { useBinaryState } = require('stremio/common');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { Button, Image, Checkbox } = require('stremio/components');
|
||||
const CredentialsTextInput = require('./CredentialsTextInput');
|
||||
const PasswordResetModal = require('./PasswordResetModal');
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
const React = require('react');
|
||||
const PropTypes = require('prop-types');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { usePlatform } = require('stremio/common');
|
||||
const { ModalDialog } = require('stremio/components');
|
||||
const CredentialsTextInput = require('../CredentialsTextInput');
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ const { t } = require('i18next');
|
|||
const { useProfile, usePlatform, useToast, useBinaryState } = require('stremio/common');
|
||||
const { Button, Image, Popup } = require('stremio/components');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const StreamPlaceholder = require('./StreamPlaceholder');
|
||||
const styles = require('./styles');
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const React = require('react');
|
|||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const debounce = require('lodash.debounce');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { useBinaryState } = require('stremio/common');
|
||||
const { Button, Slider } = require('stremio/components');
|
||||
const formatTime = require('./formatTime');
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ const React = require('react');
|
|||
const PropTypes = require('prop-types');
|
||||
const classnames = require('classnames');
|
||||
const debounce = require('lodash.debounce');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { Slider } = require('stremio/components');
|
||||
const styles = require('./styles');
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ const classnames = require('classnames');
|
|||
const debounce = require('lodash.debounce');
|
||||
const langs = require('langs');
|
||||
const { useTranslation } = require('react-i18next');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { onFileDrop, useSettings, useFullscreen, useBinaryState, useToast, useStreamingServer, withCoreSuspender, CONSTANTS, useShell } = require('stremio/common');
|
||||
const { HorizontalNavBar, Transition, ContextMenu } = require('stremio/components');
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const classnames = require('classnames');
|
|||
const throttle = require('lodash.throttle');
|
||||
const { useTranslation } = require('react-i18next');
|
||||
const { default: Icon } = require('@stremio/stremio-icons/react');
|
||||
const { useRouteFocused } = require('stremio-router');
|
||||
const { default: useRouteFocused } = require('stremio/common/useRouteFocused');
|
||||
const { useServices } = require('stremio/services');
|
||||
const { useProfile, usePlatform, useStreamingServer, withCoreSuspender, useToast } = require('stremio/common');
|
||||
const { Button, ColorInput, MainNavBars, Multiselect, Toggle } = require('stremio/components');
|
||||
|
|
@ -23,7 +23,7 @@ const SHORTCUTS_SECTION = 'shortcuts';
|
|||
const Settings = () => {
|
||||
const { t } = useTranslation();
|
||||
const { core, shell } = useServices();
|
||||
const { routeFocused } = useRouteFocused();
|
||||
const routeFocused = useRouteFocused();
|
||||
const profile = useProfile();
|
||||
const [dataExport, loadDataExport] = useDataExport();
|
||||
const streamingServer = useStreamingServer();
|
||||
|
|
|
|||
Loading…
Reference in a new issue