mue/src/features/modals/welcome/Welcome.jsx

170 lines
4.9 KiB
JavaScript

import variables from 'config/variables';
import { PureComponent } from 'react';
import { MdArrowBackIosNew, MdArrowForwardIos, MdOutlinePreview } from 'react-icons/md';
import EventBus from 'utils/eventbus';
import { ProgressBar } from './components/Elements';
import { Button } from 'components/Elements';
import { Wrapper, Panel } from './components/Layout';
import './welcome.scss';
import {
Intro,
ChooseLanguage,
ImportSettings,
ThemeSelection,
StyleSelection,
PrivacyOptions,
Final,
} from './Sections';
class WelcomeModal extends PureComponent {
constructor() {
super();
this.state = {
image: '/src/assets/icons/undraw_celebration.svg',
currentTab: 0,
finalTab: 5,
buttonText: variables.getMessage('modals.welcome.buttons.next'),
};
this.images = [
'/src/assets/icons/undraw_celebration.svg',
'/src/assets/icons/undraw_around_the_world_modified.svg',
'/src/assets/icons/undraw_add_files_modified.svg',
'/src/assets/icons/undraw_dark_mode.svg',
'/src/assets/icons/undraw_making_art.svg',
'/src/assets/icons/undraw_private_data_modified.svg',
'/src/assets/icons/undraw_upgrade_modified.svg',
];
}
changeTab(minus) {
localStorage.setItem('bgtransition', true);
localStorage.removeItem('welcomeTab');
if (minus) {
return this.setState({
currentTab: this.state.currentTab - 1,
image: this.images[this.state.currentTab - 1],
buttonText: variables.getMessage('modals.welcome.buttons.next'),
});
}
if (this.state.buttonText === variables.getMessage('modals.welcome.buttons.finish')) {
return this.props.modalClose();
}
this.setState({
currentTab: this.state.currentTab + 1,
image: this.images[this.state.currentTab + 1],
buttonText:
this.state.currentTab !== this.state.finalTab
? variables.getMessage('modals.welcome.buttons.next')
: variables.getMessage('modals.welcome.buttons.finish'),
});
}
// specific
switchTab(tab) {
this.setState({
currentTab: tab,
image: this.images[tab],
buttonText:
tab !== this.state.finalTab + 1
? variables.getMessage('modals.welcome.buttons.next')
: variables.getMessage('modals.welcome.buttons.finish'),
});
localStorage.setItem('bgtransition', true);
localStorage.removeItem('welcomeTab');
}
componentDidMount() {
const welcomeTab = localStorage.getItem('welcomeTab');
if (welcomeTab) {
this.setState({
currentTab: Number(welcomeTab),
image: this.images[Number(welcomeTab)],
buttonText:
Number(welcomeTab) !== this.state.finalTab + 1
? variables.getMessage('modals.welcome.buttons.next')
: variables.getMessage('modals.welcome.buttons.finish'),
});
}
EventBus.on('refresh', (data) => {
if (data === 'welcomeLanguage') {
localStorage.setItem('welcomeTab', this.state.currentTab);
localStorage.setItem('bgtransition', false);
window.location.reload();
}
});
}
componentWillUnmount() {
EventBus.off('refresh');
}
render() {
const tabComponents = {
0: <Intro />,
1: <ChooseLanguage />,
2: <ImportSettings switchTab={(tab) => this.switchTab(tab)} />,
3: <ThemeSelection />,
4: <StyleSelection />,
5: <PrivacyOptions />,
6: <Final currentTab={this.state.currentTab} switchTab={(tab) => this.switchTab(tab)} />,
};
let CurrentSection = tabComponents[this.state.currentTab] || <Intro />;
return (
<Wrapper>
<Panel type="aside">
<img
className="showcaseimg"
alt="sidebar icon"
draggable={false}
src={this.state.image}
/>
<ProgressBar
count={this.images}
currentTab={this.state.currentTab}
switchTab={(tab) => this.switchTab(tab)}
/>
</Panel>
<Panel type="content">
{CurrentSection}
<div className="welcomeButtons">
{this.state.currentTab !== 0 ? (
<Button
type="settings"
onClick={() => this.changeTab(true)}
icon={<MdArrowBackIosNew />}
label={variables.getMessage('modals.welcome.buttons.previous')}
/>
) : (
<Button
type="settings"
onClick={() => this.props.modalSkip()}
icon={<MdOutlinePreview />}
label={variables.getMessage('modals.welcome.buttons.preview')}
/>
)}
<Button
type="settings"
onClick={() => this.changeTab()}
icon={<MdArrowForwardIos />}
label={this.state.buttonText}
iconPlacement={'right'}
/>
</div>
</Panel>
</Wrapper>
);
}
}
export default WelcomeModal;