// todo: refactor all of this import variables from 'modules/variables'; import { PureComponent } from 'react'; import { MdSettings as Settings, MdOutlineInsertPhoto as Photos, MdOutlineFormatQuote as Quotes, MdUpload as ImportIcon, MdDownload as ExportIcon, MdArrowBack, MdDownload, MdOpenInNew, } from 'react-icons/md'; import { TextField } from '@mui/material'; import { toast } from 'react-toastify'; import SettingsItem from '../../../main/settings/SettingsItem'; import { saveFile } from 'modules/helpers/settings/modals'; import InfoTooltip from '../../../../helpers/tooltip/infoTooltip'; import Tooltip from '../../../../helpers/tooltip/Tooltip'; import FileUpload from '../../settings/FileUpload'; import '../../../welcome/welcome.scss'; export default class Create extends PureComponent { constructor() { super(); this.state = { currentTab: 1, addonMetadata: { name: '', description: '', type: '', version: '', author: '', icon_url: '', screenshot_url: '', }, addonData: '', settingsClasses: { current: 'toggle lightTheme', json: 'toggle lightTheme', }, }; } changeTab(tab, type) { if (type) { return this.setState({ currentTab: tab, addonMetadata: { type, }, }); } else { this.setState({ currentTab: tab, }); } } importSettings(input) { const data = input || localStorage; let settings = {}; const ignore = [ 'statsData', 'firstRun', 'showWelcome', 'language', 'installed', 'stats', 'backup_settings', 'showReminder', 'experimental', 'debugtimeout', 'quoteLanguage', 'birthday', 'location', 'greetingName', 'backgroundStartTime', ]; Object.keys(data).forEach((key) => { if (ignore.includes(key)) { return; } settings[key] = localStorage.getItem(key); }); this.setState({ addonData: settings, settingsClasses: { current: input ? 'toggle lightTheme active' : 'toggle lightTheme', json: input ? 'toggle lightTheme active' : 'toggle lightTheme', }, }); toast(variables.getMessage('toasts.imported')); } importQuotes() { this.setState({ addonData: JSON.parse(localStorage.getItem('customQuote')) || [], }); toast(variables.getMessage('toasts.imported')); } importPhotos() { let data = []; try { const current = JSON.parse(localStorage.getItem('customBackground')) || []; data = current.map((item) => { return { photographer: '???', location: '???', url: { default: item, }, }; }); toast(variables.getMessage('toasts.imported')); } catch (e) { console.log(e); toast(variables.getMessage('toasts.error')); } this.setState({ addonData: data, }); } downloadAddon() { saveFile( { name: this.state.addonMetadata.name, description: this.state.addonMetadata.description, type: this.state.addonMetadata.type, version: this.state.addonMetadata.version, author: this.state.addonMetadata.author, icon_url: this.state.addonMetadata.icon_url, screenshot_url: this.state.addonMetadata.screenshot_url, [this.state.addonMetadata.type]: this.state.addonData, }, this.state.addonMetadata.name + '.json', ); } render() { let tabContent; const chooseType = ( <> {/*
Help Centre Home of all docs and guides on creating addons for Mue's marketplace
*/}
this.changeTab(2, 'photos')}> {variables.getMessage('modals.main.marketplace.photo_packs')}
this.changeTab(2, 'quotes')}> {variables.getMessage('modals.main.marketplace.quote_packs')}
this.changeTab(2, 'settings')}> {variables.getMessage('modals.main.marketplace.preset_settings')}
); const nextDescriptionDisabled = !( this.state.addonMetadata.name !== undefined && this.state.addonMetadata.description !== undefined && this.state.addonMetadata.version !== undefined && this.state.addonMetadata.author !== undefined && this.state.addonMetadata.icon_url !== undefined && this.state.addonMetadata.screenshot_url !== undefined ); const setMetadata = (data, type) => { this.setState({ addonMetadata: { name: type === 'name' ? data : this.state.addonMetadata.name, description: type === 'description' ? data : this.state.addonMetadata.description, version: type === 'version' ? data : this.state.addonMetadata.version, author: type === 'author' ? data : this.state.addonMetadata.author, icon_url: type === 'icon_url' ? data : this.state.addonMetadata.icon_url, screenshot_url: type === 'screenshot_url' ? data : this.state.addonMetadata.screenshot_url, type: this.state.addonMetadata.type, }, }); }; const writeDescription = ( <>
{variables.getMessage( 'modals.main.addons.create.types.' + this.state.addonMetadata.type, ) || 'marketplace'} {variables.getMessage( 'modals.main.addons.create.descriptions.' + this.state.addonMetadata.type, ) || 'marketplace'}
setMetadata(e.target.value, 'name')} />
{variables.getMessage('modals.main.marketplace.product.version')}
setMetadata(e.target.value, 'version')} />
setMetadata(e.target.value, 'author')} /> setMetadata(e.target.value, 'icon_url')} /> setMetadata(e.target.value, 'screenshot_url')} /> setMetadata(e.target.value, 'description')} />
); // settings const nextSettingsDisabled = this.state.addonData === ''; const importSettings = ( <>
this.importSettings()} > {variables.getMessage('modals.main.addons.create.settings.current')}
document.getElementById('file-input').click()} > {variables.getMessage('modals.main.addons.create.settings.json')}
this.importSettings(JSON.parse(e))} />
); // quotes const nextQuotesDisabled = !( this.state.addonMetadata.type === 'quotes' && this.state.addonData.quotes !== '' ); const addQuotes = ( <>
this.importQuotes()} className="toggle lightTheme" style={{ width: '60%', margin: '10px 0 10px 0' }} > {variables.getMessage('modals.main.addons.create.settings.current')}
); // photos const nextPhotosDisabled = !(this.state.addonData.photos !== ''); const addPhotos = ( <>
this.importPhotos()} className="toggle lightTheme" style={{ width: '60%', margin: '10px 0 10px 0' }} > {variables.getMessage('modals.main.addons.create.settings.current')}

); const downloadAddon = ( <>
{variables.getMessage('modals.main.addons.create.publishing.title')} {variables.getMessage('modals.main.addons.create.publishing.subtitle')}
this.downloadAddon()} className="toggle lightTheme" style={{ width: '60%', margin: '10px 0 10px 0' }} > {variables.getMessage('modals.main.addons.create.finish.download')}
); switch (this.state.currentTab) { case 2: tabContent = writeDescription; break; case 'settings': tabContent = importSettings; break; case 'quotes': tabContent = addQuotes; break; case 'photos': tabContent = addPhotos; break; case 3: tabContent = downloadAddon; break; default: tabContent = chooseType; } return ( <>
{this.state.currentTab !== 1 && (
this.changeTab(1)} />
)} {variables.getMessage('modals.main.addons.create.other_title')}
{tabContent} ); } }