mue/src/components/widgets/navbar/Navbar.jsx

146 lines
4.4 KiB
React
Raw Normal View History

import variables from 'modules/variables';
2021-08-27 22:08:32 +00:00
import { PureComponent, createRef } from 'react';
import { MdRefresh, MdSettings } from 'react-icons/md';
2021-01-16 18:39:03 +00:00
import Notes from './Notes';
import Todo from './Todo';
import Maximise from '../background/Maximise';
2021-08-28 14:34:12 +00:00
import Tooltip from 'components/helpers/tooltip/Tooltip';
2020-11-29 14:32:08 +00:00
2021-08-28 14:34:12 +00:00
import EventBus from 'modules/helpers/eventbus';
import './scss/index.scss';
2019-11-06 19:03:17 +00:00
2021-08-14 19:10:48 +00:00
export default class Navbar extends PureComponent {
2021-08-27 22:08:32 +00:00
constructor() {
super();
this.navbarContainer = createRef();
this.state = {
classList: localStorage.getItem('widgetStyle') === 'legacy' ? 'navbar old' : 'navbar new',
refreshText: '',
2022-10-30 16:43:08 +00:00
refreshEnabled: localStorage.getItem('refresh'),
2022-11-06 11:59:59 +00:00
refreshOption: localStorage.getItem('refreshOption') || '',
};
2021-08-27 22:08:32 +00:00
}
2021-08-16 13:36:34 +00:00
setZoom() {
this.setState({
zoomFontSize: Number(((localStorage.getItem('zoomNavbar') || 100) / 100) * 1.2) + 'rem',
});
2021-08-16 13:36:34 +00:00
}
2022-10-30 16:43:08 +00:00
updateRefreshText() {
let refreshText;
switch (localStorage.getItem('refreshOption')) {
case 'background':
refreshText = variables.getMessage('modals.main.settings.sections.background.title');
break;
case 'quote':
refreshText = variables.getMessage('modals.main.settings.sections.quote.title');
break;
case 'quotebackground':
refreshText =
variables.getMessage('modals.main.settings.sections.quote.title') +
' ' +
variables.getMessage('modals.main.settings.sections.background.title');
break;
default:
refreshText = variables.getMessage(
'modals.main.settings.sections.appearance.navbar.refresh_options.page',
);
break;
}
this.setState({
refreshText,
});
}
componentDidMount() {
EventBus.on('refresh', (data) => {
if (data === 'navbar' || data === 'background') {
2022-10-30 16:43:08 +00:00
this.setState({
refreshEnabled: localStorage.getItem('refresh'),
2022-11-06 11:59:59 +00:00
refreshOption: localStorage.getItem('refreshOption'),
2022-10-30 16:43:08 +00:00
});
try {
2022-10-30 16:43:08 +00:00
this.updateRefreshText();
this.setZoom();
} catch (e) {}
}
});
2021-08-16 13:36:34 +00:00
2022-10-30 16:43:08 +00:00
this.updateRefreshText();
2021-08-16 13:36:34 +00:00
this.setZoom();
}
2022-10-30 16:43:08 +00:00
componentWillUnmount() {
EventBus.off('refresh');
}
2021-08-28 17:56:59 +00:00
refresh() {
2022-10-30 16:43:08 +00:00
switch (this.state.refreshOption) {
2021-08-28 17:56:59 +00:00
case 'background':
return EventBus.dispatch('refresh', 'backgroundrefresh');
2021-08-28 17:56:59 +00:00
case 'quote':
return EventBus.dispatch('refresh', 'quoterefresh');
2021-08-28 17:56:59 +00:00
case 'quotebackground':
EventBus.dispatch('refresh', 'quoterefresh');
return EventBus.dispatch('refresh', 'backgroundrefresh');
2021-08-28 17:56:59 +00:00
default:
window.location.reload();
}
}
render() {
const backgroundEnabled = localStorage.getItem('background') === 'true';
const navbar = (
<div className="navbar-container">
<div className={this.state.classList}>
{localStorage.getItem('view') === 'true' && backgroundEnabled ? (
<Maximise fontSize={this.state.zoomFontSize} />
) : null}
{localStorage.getItem('notesEnabled') === 'true' ? (
<Notes fontSize={this.state.zoomFontSize} />
) : null}
{localStorage.getItem('todo') === 'true' ? (
<Todo fontSize={this.state.zoomFontSize} />
) : null}
{this.refreshEnabled !== 'false' ? (
<Tooltip
title={variables.getMessage('widgets.navbar.tooltips.refresh')}
subtitle={this.state.refreshText}
>
<button onClick={() => this.refresh()} style={{ fontSize: this.state.zoomFontSize }}>
<MdRefresh className="refreshicon topicons" />
</button>
</Tooltip>
) : null}
<Tooltip
title={variables.getMessage('modals.main.navbar.settings', {
type: variables.getMessage(
'modals.main.navbar.tooltips.refresh_' + this.refreshValue,
),
})}
>
<button
onClick={() => this.props.openModal('mainModal')}
style={{ fontSize: this.state.zoomFontSize }}
>
<MdSettings className="settings-icon topicons" />
</button>
</Tooltip>
</div>
</div>
);
return localStorage.getItem('navbarHover') === 'true' ? (
<div className="navbar-hover">{navbar}</div>
) : (
navbar
);
}
}