diff options
author | Starfall <us@starfall.systems> | 2023-04-14 19:22:47 -0500 |
---|---|---|
committer | Starfall <us@starfall.systems> | 2023-04-14 19:22:47 -0500 |
commit | 4fe1689de43f4404eb9530fcfbcbfb26d6c1c13a (patch) | |
tree | 6811b845bb7f4966b10dcefa3dea404246f161c7 /app/javascript/flavours/glitch/features/ui/components/modal_root.js | |
parent | 65c1e53a32cabcdbb7bca57002bb0f6acdebe07e (diff) | |
parent | bed63f6dae0879ac840066b031229e0d139089cd (diff) |
Diffstat (limited to 'app/javascript/flavours/glitch/features/ui/components/modal_root.js')
-rw-r--r-- | app/javascript/flavours/glitch/features/ui/components/modal_root.js | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.js b/app/javascript/flavours/glitch/features/ui/components/modal_root.js deleted file mode 100644 index 379f57cbb..000000000 --- a/app/javascript/flavours/glitch/features/ui/components/modal_root.js +++ /dev/null @@ -1,144 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { getScrollbarWidth } from 'flavours/glitch/utils/scrollbar'; -import Base from 'flavours/glitch/components/modal_root'; -import BundleContainer from '../containers/bundle_container'; -import BundleModalError from './bundle_modal_error'; -import ModalLoading from './modal_loading'; -import ActionsModal from './actions_modal'; -import MediaModal from './media_modal'; -import VideoModal from './video_modal'; -import BoostModal from './boost_modal'; -import FavouriteModal from './favourite_modal'; -import AudioModal from './audio_modal'; -import DoodleModal from './doodle_modal'; -import ConfirmationModal from './confirmation_modal'; -import FocalPointModal from './focal_point_modal'; -import DeprecatedSettingsModal from './deprecated_settings_modal'; -import ImageModal from './image_modal'; -import { - OnboardingModal, - MuteModal, - BlockModal, - ReportModal, - SettingsModal, - EmbedModal, - ListEditor, - ListAdder, - PinnedAccountsEditor, - CompareHistoryModal, - FilterModal, - InteractionModal, - SubscribedLanguagesModal, - ClosedRegistrationsModal, -} from 'flavours/glitch/features/ui/util/async-components'; -import { Helmet } from 'react-helmet'; - -const MODAL_COMPONENTS = { - 'MEDIA': () => Promise.resolve({ default: MediaModal }), - 'ONBOARDING': OnboardingModal, - 'VIDEO': () => Promise.resolve({ default: VideoModal }), - 'AUDIO': () => Promise.resolve({ default: AudioModal }), - 'IMAGE': () => Promise.resolve({ default: ImageModal }), - 'BOOST': () => Promise.resolve({ default: BoostModal }), - 'FAVOURITE': () => Promise.resolve({ default: FavouriteModal }), - 'DOODLE': () => Promise.resolve({ default: DoodleModal }), - 'CONFIRM': () => Promise.resolve({ default: ConfirmationModal }), - 'MUTE': MuteModal, - 'BLOCK': BlockModal, - 'REPORT': ReportModal, - 'SETTINGS': SettingsModal, - 'DEPRECATED_SETTINGS': () => Promise.resolve({ default: DeprecatedSettingsModal }), - 'ACTIONS': () => Promise.resolve({ default: ActionsModal }), - 'EMBED': EmbedModal, - 'LIST_EDITOR': ListEditor, - 'FOCAL_POINT': () => Promise.resolve({ default: FocalPointModal }), - 'LIST_ADDER': ListAdder, - 'PINNED_ACCOUNTS_EDITOR': PinnedAccountsEditor, - 'COMPARE_HISTORY': CompareHistoryModal, - 'FILTER': FilterModal, - 'SUBSCRIBED_LANGUAGES': SubscribedLanguagesModal, - 'INTERACTION': InteractionModal, - 'CLOSED_REGISTRATIONS': ClosedRegistrationsModal, -}; - -export default class ModalRoot extends React.PureComponent { - - static propTypes = { - type: PropTypes.string, - props: PropTypes.object, - onClose: PropTypes.func.isRequired, - ignoreFocus: PropTypes.bool, - }; - - state = { - backgroundColor: null, - }; - - componentDidUpdate () { - if (!!this.props.type) { - document.body.classList.add('with-modals--active'); - document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; - } else { - document.body.classList.remove('with-modals--active'); - document.documentElement.style.marginRight = 0; - } - } - - setBackgroundColor = color => { - this.setState({ backgroundColor: color }); - } - - renderLoading = modalId => () => { - return ['MEDIA', 'VIDEO', 'BOOST', 'FAVOURITE', 'DOODLE', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null; - } - - renderError = (props) => { - const { onClose } = this.props; - - return <BundleModalError {...props} onClose={onClose} />; - } - - handleClose = (ignoreFocus = false) => { - const { onClose } = this.props; - let message = null; - try { - message = this._modal?.getWrappedInstance?.().getCloseConfirmationMessage?.(); - } catch (_) { - // injectIntl defines `getWrappedInstance` but errors out if `withRef` - // isn't set. - // This would be much smoother with react-intl 3+ and `forwardRef`. - } - onClose(message, ignoreFocus); - } - - setModalRef = (c) => { - this._modal = c; - } - - // prevent closing of modal when clicking the overlay - noop = () => {} - - render () { - const { type, props, ignoreFocus } = this.props; - const { backgroundColor } = this.state; - const visible = !!type; - - return ( - <Base backgroundColor={backgroundColor} onClose={props && props.noClose ? this.noop : this.handleClose} noEsc={props ? props.noEsc : false} ignoreFocus={ignoreFocus}> - {visible && ( - <> - <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}> - {(SpecificComponent) => <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={this.setModalRef} />} - </BundleContainer> - - <Helmet> - <meta name='robots' content='noindex' /> - </Helmet> - </> - )} - </Base> - ); - } - -} |