mirror of https://github.com/mue/mue.git
255 lines
8.3 KiB
JavaScript
255 lines
8.3 KiB
JavaScript
import variables from 'modules/variables';
|
|
import { PureComponent, Fragment } from 'react';
|
|
import Tooltip from '../../../helpers/tooltip/Tooltip';
|
|
import { toast } from 'react-toastify';
|
|
import {
|
|
MdArrowBack,
|
|
MdIosShare,
|
|
MdFlag,
|
|
MdWarning,
|
|
MdAccountCircle,
|
|
MdBugReport,
|
|
MdFormatQuote,
|
|
MdImage,
|
|
MdTranslate,
|
|
MdKeyboardArrowDown,
|
|
MdKeyboardArrowUp,
|
|
} from 'react-icons/md';
|
|
import Modal from 'react-modal';
|
|
|
|
import { install, uninstall } from 'modules/helpers/marketplace';
|
|
|
|
import ShareModal from '../../../helpers/sharemodal/ShareModal';
|
|
|
|
export default class Item extends PureComponent {
|
|
constructor(props) {
|
|
super(props);
|
|
this.state = {
|
|
showLightbox: false,
|
|
showUpdateButton:
|
|
this.props.addonInstalled === true &&
|
|
this.props.addonInstalledVersion !== this.props.data.version,
|
|
showMore: false,
|
|
shareModal: false,
|
|
};
|
|
}
|
|
|
|
updateAddon() {
|
|
uninstall(this.props.data.type, this.props.data.display_name);
|
|
install(this.props.data.type, this.props.data);
|
|
toast(variables.language.getMessage(variables.languagecode, 'toasts.updated'));
|
|
this.setState({
|
|
showUpdateButton: false,
|
|
});
|
|
}
|
|
|
|
toggleShowMore() {
|
|
if (this.state.showMore === true) {
|
|
this.setState({ showMore: false });
|
|
} else {
|
|
this.setState({ showMore: true });
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const getMessage = (text) => variables.language.getMessage(variables.languagecode, text);
|
|
|
|
if (!this.props.data.display_name) {
|
|
return null;
|
|
}
|
|
|
|
let warningHTML;
|
|
if (this.props.data.quote_api) {
|
|
warningHTML = (
|
|
<div className="itemWarning">
|
|
<div className="topRow">
|
|
<MdWarning />
|
|
<div className="title">
|
|
{getMessage('modals.main.marketplace.product.quote_warning.title')}
|
|
</div>
|
|
</div>
|
|
<div className="subtitle">
|
|
{getMessage('modals.main.marketplace.product.quote_warning.description')}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
// prevent console error
|
|
let iconsrc = variables.constants.DDG_IMAGE_PROXY + this.props.data.icon;
|
|
if (!this.props.data.icon) {
|
|
iconsrc = null;
|
|
}
|
|
|
|
let updateButton;
|
|
if (this.state.showUpdateButton) {
|
|
updateButton = (
|
|
<Fragment key="update">
|
|
<button className="removeFromMue" onClick={() => this.updateAddon()}>
|
|
{getMessage('modals.main.addons.product.buttons.update_addon')}
|
|
</button>
|
|
</Fragment>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div id="item">
|
|
<Modal
|
|
closeTimeoutMS={300}
|
|
isOpen={this.state.shareModal}
|
|
className="Modal mainModal"
|
|
overlayClassName="Overlay"
|
|
ariaHideApp={false}
|
|
onRequestClose={() => this.setState({ shareModal: false })}
|
|
>
|
|
<ShareModal
|
|
data={this.props.data}
|
|
modalClose={() => this.setState({ shareModal: false })}
|
|
/>
|
|
</Modal>
|
|
<div className="flexTopMarketplace">
|
|
<div className="returnButton">
|
|
<Tooltip title="back" key="backArrow">
|
|
<MdArrowBack className="backArrow" onClick={this.props.toggleFunction} />
|
|
</Tooltip>
|
|
</div>
|
|
<span className="mainTitle">Marketplace</span>
|
|
</div>
|
|
<div className="itemPage">
|
|
<div className="itemShowcase">
|
|
<div className="titleTop">
|
|
<span className="itemTitle">{this.props.data.display_name}</span>
|
|
<span className="subtitle">{this.props.data.author}</span>
|
|
</div>
|
|
<img
|
|
alt="product"
|
|
draggable="false"
|
|
src={iconsrc}
|
|
onClick={() => this.setState({ showLightbox: true })}
|
|
/>
|
|
<span className="title">Description</span>
|
|
<span
|
|
className={this.state.showMore ? 'description' : 'description truncate'}
|
|
dangerouslySetInnerHTML={{ __html: this.props.data.description }}
|
|
/>
|
|
{this.props.data.description.length > 100 ? (
|
|
<div className="showMore" onClick={() => this.toggleShowMore()}>
|
|
{this.state.showMore === true ? (
|
|
<>
|
|
<span>Show Less</span>
|
|
<MdKeyboardArrowDown />
|
|
</>
|
|
) : (
|
|
<>
|
|
<span>Show More</span>
|
|
<MdKeyboardArrowUp />
|
|
</>
|
|
)}
|
|
</div>
|
|
) : null}
|
|
<div className="moreInfo">
|
|
<div className="infoItem">
|
|
<MdBugReport />
|
|
<div className="text">
|
|
<span className="header">
|
|
{getMessage('modals.main.marketplace.product.version')}
|
|
</span>
|
|
{updateButton ? (
|
|
<span>
|
|
{this.props.data.version} (Installed: {this.props.data.addonInstalledVersion})
|
|
</span>
|
|
) : (
|
|
<span>{this.props.data.version}</span>
|
|
)}
|
|
</div>
|
|
</div>
|
|
<div className="infoItem">
|
|
<MdAccountCircle />
|
|
<div className="text">
|
|
<span className="header">
|
|
{getMessage('modals.main.marketplace.product.author')}
|
|
</span>
|
|
<span>{this.props.data.author}</span>
|
|
</div>
|
|
</div>
|
|
{this.props.data.data.quotes ? (
|
|
<div className="infoItem">
|
|
<MdFormatQuote />
|
|
<div className="text">
|
|
<span className="header">No. Quotes</span>
|
|
<span>{this.props.data.data.quotes.length}</span>
|
|
</div>
|
|
</div>
|
|
) : null}
|
|
{this.props.data.data.photos ? (
|
|
<div className="infoItem">
|
|
<MdImage />
|
|
<div className="text">
|
|
<span className="header">No. Images</span>
|
|
<span>{this.props.data.data.photos.length}</span>
|
|
</div>
|
|
</div>
|
|
) : null}
|
|
{!this.props.data.data.photos ? (
|
|
<div className="infoItem">
|
|
<MdTranslate />
|
|
<div className="text">
|
|
<span className="header">Language</span>
|
|
<span>{this.props.data.data.language}</span>
|
|
</div>
|
|
</div>
|
|
) : null}
|
|
<div className="infoItem">
|
|
<MdIosShare />
|
|
<div className="text">
|
|
<span className="header">Shares</span>
|
|
<span>324</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="itemInfo">
|
|
<img
|
|
alt="icon"
|
|
draggable="false"
|
|
src={variables.constants.DDG_IMAGE_PROXY + this.props.data.data.icon_url}
|
|
/>
|
|
{this.props.button}
|
|
<div className="iconButtons">
|
|
<Tooltip title="Share" key="share">
|
|
<MdIosShare onClick={() => this.setState({ shareModal: true })} />
|
|
</Tooltip>
|
|
<Tooltip title="Report" key="report">
|
|
<MdFlag
|
|
onClick={() =>
|
|
window.open(
|
|
variables.constants.REPORT_ITEM +
|
|
this.props.data.display_name.split(' ').join('+'),
|
|
'_blank',
|
|
)
|
|
}
|
|
/>
|
|
</Tooltip>
|
|
</div>
|
|
{this.props.data.data.collection ? (
|
|
<div className="inCollection">
|
|
<span className="subtitle">Part of</span>
|
|
<span className="title">Red Dead Collection</span>
|
|
<button>Explore</button>
|
|
</div>
|
|
) : null}
|
|
{warningHTML}
|
|
{/*<div className="itemWarning">
|
|
<div className="topRow">
|
|
<NewReleasesRounded />
|
|
<div className="title">Update</div>
|
|
</div>
|
|
<div className="subtitle">React > Vue</div>
|
|
</div>*/}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|