lbry-desktop/src/renderer/modal/modalRouter/view.jsx

175 lines
5.8 KiB
React
Raw Normal View History

import React from 'react';
import { MODALS } from 'lbry-redux';
import ModalError from 'modal/modalError';
import ModalAuthFailure from 'modal/modalAuthFailure';
import ModalDownloading from 'modal/modalDownloading';
import ModalAutoUpdateDownloaded from 'modal/modalAutoUpdateDownloaded';
import ModalAutoUpdateConfirm from 'modal/modalAutoUpdateConfirm';
import ModalUpgrade from 'modal/modalUpgrade';
import ModalWelcome from 'modal/modalWelcome';
import ModalFirstReward from 'modal/modalFirstReward';
import ModalRewardApprovalRequired from 'modal/modalRewardApprovalRequired';
import ModalCreditIntro from 'modal/modalCreditIntro';
import ModalRemoveFile from 'modal/modalRemoveFile';
import ModalTransactionFailed from 'modal/modalTransactionFailed';
import ModalFileTimeout from 'modal/modalFileTimeout';
import ModalAffirmPurchase from 'modal/modalAffirmPurchase';
import ModalRevokeClaim from 'modal/modalRevokeClaim';
import ModalEmailCollection from 'modal/modalEmailCollection';
import ModalPhoneCollection from 'modal/modalPhoneCollection';
import ModalFirstSubscription from 'modal/modalFirstSubscription';
import ModalConfirmTransaction from 'modal/modalConfirmTransaction';
2018-03-26 23:32:43 +02:00
import ModalSendTip from '../modalSendTip';
import ModalPublish from '../modalPublish';
import ModalOpenExternalLink from '../modalOpenExternalLink';
2018-04-02 18:03:12 +02:00
import ModalConfirmThumbnailUpload from 'modal/modalConfirmThumbnailUpload';
2018-04-02 18:03:12 +02:00
type Props = {
modal: string,
};
class ModalRouter extends React.PureComponent<Props> {
2017-08-26 05:21:26 +02:00
constructor(props) {
super(props);
this.state = {
lastTransitionModal: null,
lastTransitionPage: null,
};
}
componentWillMount() {
2017-08-21 05:06:26 +02:00
this.showTransitionModals(this.props);
}
componentWillReceiveProps(nextProps) {
2017-08-21 05:06:26 +02:00
this.showTransitionModals(nextProps);
}
2017-08-21 05:06:26 +02:00
showTransitionModals(props) {
2017-09-08 05:15:05 +02:00
const { modal, modalProps, openModal, page } = props;
2017-08-21 05:06:26 +02:00
if (modal) {
return;
}
2017-08-26 05:21:26 +02:00
const transitionModal = [
this.checkShowWelcome,
this.checkShowEmail,
2017-08-26 05:21:26 +02:00
this.checkShowCreditIntro,
].reduce((acc, func) => (!acc ? func.bind(this)(props) : acc), false);
2017-08-26 05:21:26 +02:00
if (
transitionModal &&
2018-04-02 18:03:12 +02:00
(transitionModal !== this.state.lastTransitionModal || page !== this.state.lastTransitionPage)
2017-08-26 05:21:26 +02:00
) {
2018-04-19 18:51:18 +02:00
openModal({ id: transitionModal });
2017-08-26 05:21:26 +02:00
this.setState({
lastTransitionModal: transitionModal,
lastTransitionPage: page,
});
}
2017-08-21 05:06:26 +02:00
}
checkShowWelcome(props) {
2017-08-26 05:21:26 +02:00
const { isWelcomeAcknowledged, user } = props;
if (!isWelcomeAcknowledged && user && !user.is_reward_approved && !user.is_identity_verified) {
return MODALS.WELCOME;
}
}
checkShowEmail(props) {
const { isEmailCollectionAcknowledged, isVerificationCandidate, user } = props;
2017-08-21 05:06:26 +02:00
if (
!isEmailCollectionAcknowledged &&
isVerificationCandidate &&
2017-08-21 05:06:26 +02:00
user &&
!user.has_verified_email
2017-08-21 05:06:26 +02:00
) {
return MODALS.EMAIL_COLLECTION;
}
}
checkShowCreditIntro(props) {
const { balance, page, isCreditIntroAcknowledged } = props;
2017-08-26 05:21:26 +02:00
if (
balance <= 0 &&
!isCreditIntroAcknowledged &&
(['send', 'publish'].includes(page) || this.isPaidShowPage(props))
) {
return MODALS.INSUFFICIENT_CREDITS;
2017-08-26 05:21:26 +02:00
}
}
isPaidShowPage(props) {
const { page, showPageCost } = props;
return page === 'show' && showPageCost > 0;
2017-08-26 05:21:26 +02:00
}
render() {
2018-04-19 18:51:18 +02:00
const { notification, notificationProps } = this.props;
2018-04-19 18:51:18 +02:00
if (!notification) {
return null;
}
2018-04-23 07:04:11 +02:00
if (notification.error) {
return <ModalError {...notification} {...notificationProps} />;
}
2018-04-19 18:51:18 +02:00
switch (notification.id) {
case MODALS.UPGRADE:
2018-04-19 18:51:18 +02:00
return <ModalUpgrade {...notificationProps} />;
case MODALS.DOWNLOADING:
2018-04-19 18:51:18 +02:00
return <ModalDownloading {...notificationProps} />;
case MODALS.AUTO_UPDATE_DOWNLOADED:
2018-04-19 18:51:18 +02:00
return <ModalAutoUpdateDownloaded {...notificationProps} />;
case MODALS.AUTO_UPDATE_CONFIRM:
2018-04-19 18:51:18 +02:00
return <ModalAutoUpdateConfirm {...notificationProps} />;
case MODALS.ERROR:
2018-04-19 18:51:18 +02:00
return <ModalError {...notificationProps} />;
case MODALS.FILE_TIMEOUT:
2018-04-19 18:51:18 +02:00
return <ModalFileTimeout {...notificationProps} />;
case MODALS.INSUFFICIENT_CREDITS:
2018-04-19 18:51:18 +02:00
return <ModalCreditIntro {...notificationProps} />;
case MODALS.WELCOME:
2018-04-19 18:51:18 +02:00
return <ModalWelcome {...notificationProps} />;
case MODALS.FIRST_REWARD:
2018-04-19 18:51:18 +02:00
return <ModalFirstReward {...notificationProps} />;
case MODALS.AUTHENTICATION_FAILURE:
2018-04-19 18:51:18 +02:00
return <ModalAuthFailure {...notificationProps} />;
case MODALS.TRANSACTION_FAILED:
2018-04-19 18:51:18 +02:00
return <ModalTransactionFailed {...notificationProps} />;
case MODALS.REWARD_APPROVAL_REQUIRED:
2018-04-19 18:51:18 +02:00
return <ModalRewardApprovalRequired {...notificationProps} />;
case MODALS.CONFIRM_FILE_REMOVE:
2018-04-19 18:51:18 +02:00
return <ModalRemoveFile {...notificationProps} />;
case MODALS.AFFIRM_PURCHASE:
2018-04-19 18:51:18 +02:00
return <ModalAffirmPurchase {...notificationProps} />;
case MODALS.CONFIRM_CLAIM_REVOKE:
2018-04-19 18:51:18 +02:00
return <ModalRevokeClaim {...notificationProps} />;
case MODALS.PHONE_COLLECTION:
2018-04-19 18:51:18 +02:00
return <ModalPhoneCollection {...notificationProps} />;
case MODALS.EMAIL_COLLECTION:
2018-04-19 18:51:18 +02:00
return <ModalEmailCollection {...notificationProps} />;
case MODALS.FIRST_SUBSCRIPTION:
2018-04-19 18:51:18 +02:00
return <ModalFirstSubscription {...notificationProps} />;
case MODALS.SEND_TIP:
2018-04-19 18:51:18 +02:00
return <ModalSendTip {...notificationProps} />;
case MODALS.PUBLISH:
2018-04-19 18:51:18 +02:00
return <ModalPublish {...notificationProps} />;
case MODALS.CONFIRM_EXTERNAL_LINK:
return <ModalOpenExternalLink {...notificationProps} />;
case MODALS.CONFIRM_TRANSACTION:
return <ModalConfirmTransaction {...notificationProps} />;
2018-04-02 18:03:12 +02:00
case MODALS.CONFIRM_THUMBNAIL_UPLOAD:
2018-06-08 06:05:45 +02:00
return <ModalConfirmThumbnailUpload {...notificationProps} />;
default:
return null;
}
}
}
export default ModalRouter;