import '@maicol07/mwc-card';
import '@maicol07/mwc-layout-grid';
import '@material/mwc-button';
import '@material/mwc-checkbox';
import '@material/mwc-fab';
import '@material/mwc-formfield';
import '@material/mwc-list/mwc-list-item';
import '@material/mwc-select';
import '@material/mwc-textarea';
import '../WebComponents/TextField';
import '../WebComponents/Select';
import collect from 'collect.js';
import LocaleCode from 'locale-code';
import Mithril from 'mithril';
import redaxios from 'redaxios';
// eslint-disable-next-line import/no-absolute-path
import logoUrl from '/images/logo_completo.png';
import {Alert} from '../Components';
import Mdi from '../Components/Mdi.jsx';
import Page from '../Components/Page.jsx';
import {
getFormData,
showSnackbar
} from '../utils';
function getFlag(language: string, slot: string = 'graphic', styles: {...} = {}) {
if (!styles.display) {
styles.display = 'flex';
}
return (
);
}
export default class SetupPage extends Page {
languages() {
const listItems: Mithril.Vnode[] = [];
for (const lang of this.page.props.languages) {
const attributes = {
selected: this.page.props.locale === lang
};
const langCode = lang.replace('_', '-');
listItems.push(
{getFlag(langCode)}
{LocaleCode.getLanguageNativeName(langCode)}
);
if (attributes.selected) {
listItems.push(getFlag(langCode, 'icon', {display: 'block', width: '24px', lineHeight: '22px'}));
}
}
return listItems;
}
view(vnode) {
const examplesTexts = collect();
for (const example of ['localhost', 'root', 'mysql', 'openstamanager']) {
examplesTexts.put(example, __('Esempio: :example', {example}));
}
return (
<>
{__('Connessione al database riuscita')}
>
);
}
oncreate(vnode: Mithril.VnodeDOM) {
super.oncreate(vnode);
$('mwc-fab#contrast-switcher')
.on('click', function () {
$(this)
.toggleClass('contrast-light')
.toggleClass('contrast-dark');
$('body')
.toggleClass('mdc-high-contrast');
});
$('#language-select').on('action', this.onLanguageSelected);
}
onTestButtonClicked(event: Event) {
this.testDatabase();
}
onSaveButtonClicked(event: Event) {
const form = $(event.target).closest('form');
this.save(getFormData(form));
}
onLanguageSelected(event: Event) {
const {detail, target: select} = event;
const selected = $(select).find(`mwc-list-item:nth-child(${detail.index + 1}) [slot="graphic"] img`);
$(select).find('[slot="icon"] img').attr('src', selected.attr('src'));
window.location.href = window.route('app.language', {language: select.value});
}
async testDatabase(silentSuccess = false, silentError = false): boolean {
const form = $('form');
try {
await redaxios.options(window.route('setup.test'), {data: getFormData(form)});
} catch (error) {
if (!silentError) {
const alert = $('#test-connection-alert-error');
alert.find('.content').text(__('Si è verificato un errore durante la connessione al'
+ ' database: :error', {error: error.data.error}));
alert.get(0).show();
}
return false;
}
if (!silentSuccess) {
document.querySelector('#test-connection-alert-success')
.show();
}
return true;
}
async save(data: {...}) {
const test = this.testDatabase(true);
if (!test) {
return;
}
try {
await redaxios.put(window.route('setup.save'), data);
} catch (error) {
await showSnackbar(error.data.error_description);
return;
}
await showSnackbar(__('Impostazioni salvate correttamente'));
window.location.href = window.route('auth.login');
}
}