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 '../WebComponents/TextArea';
import '../WebComponents/TextField';
import '../WebComponents/Select';
import type {Dialog as MWCDialog} from '@material/mwc-dialog';
import type CSS from 'csstype';
import LocaleCode from 'locale-code';
import type {Vnode, VnodeDOM} from 'mithril';
import redaxios, {Response} from 'redaxios';
// @ts-ignore
// eslint-disable-next-line import/no-absolute-path
import logoUrl from '/images/logo_completo.png';
import {Alert} from '../Components';
import Mdi from '../Components/Mdi';
import Page from '../Components/Page';
import {getFormData, showSnackbar} from '../utils';
function getFlag(language: string, slot: string = 'graphic', styles: CSS.Properties = {}) {
if (!styles.display) {
styles.display = 'flex';
}
return (
);
}
export default class SetupPage extends Page {
languages() {
const listItems: Vnode[] = [];
for (const lang of this.page.props.languages) {
const language = lang as string;
const attributes = {
selected: this.page.props.locale === lang
};
const langCode = language.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() {
const examplesTexts: Record = {};
for (const example of ['localhost', 'root', 'mysql', 'openstamanager']) {
examplesTexts[example] = __('Esempio: :example', {
example
});
}
return (
<>
{__('Connessione al database riuscita')}
>
);
}
oncreate(vnode: VnodeDOM) {
super.oncreate(vnode);
$('mwc-fab#contrast-switcher').on('click', function (this: HTMLElement) {
$(this).toggleClass('contrast-light').toggleClass('contrast-dark');
$('body').toggleClass('mdc-high-contrast');
});
$('#language-select').on('action', (event: Event) => this.onLanguageSelected(event as Event & {detail: {index: number}}));
}
async onTestButtonClicked() {
await this.testDatabase();
}
async onSaveButtonClicked(event: Event) {
const form = $(event.target as HTMLElement)
.closest('form');
await this.save(getFormData(form));
}
onLanguageSelected(event: Event & {detail: {index: number}}) {
const {detail, target: select} = event;
const selected: HTMLImageElement | null = (select as HTMLElement).querySelector(
`mwc-list-item:nth-child(${detail.index + 1}) [slot="graphic"] img`
);
const selectIcon: HTMLImageElement | null = (select as HTMLElement).querySelector('[slot="icon"] img');
if (selected && selectIcon) {
selectIcon.src = selected.src;
}
window.location.href = route('app.language', {
language: (select as HTMLInputElement).value
});
}
async testDatabase(silentSuccess = false, silentError = false): Promise {
const form = $('form');
try {
await redaxios.options(route('setup.test'), {
data: getFormData(form)
});
} catch (error: any) {
if (!silentError) {
const alert = this.element.querySelector('#test-connection-alert-error');
if (alert) {
const content = alert.querySelector('.content');
if (content) {
content.textContent = __(
'Si è verificato un errore durante la connessione al'
+ ' database: :error',
{
error: (error as Response<{error: string}>).data.error
}
);
}
(alert as MWCDialog).show();
}
}
return false;
}
if (!silentSuccess) {
const alert = document.querySelector('#test-connection-alert-success');
if (alert) {
(alert as MWCDialog).show();
}
}
return true;
}
async save(data: {}) {
const test = await this.testDatabase(true);
if (!test) {
return;
}
try {
await redaxios.put(route('setup.save'), data);
} catch (error: any) {
await showSnackbar((error as Response<{error_description: string}>).data.error_description);
return;
}
await showSnackbar(__('Impostazioni salvate correttamente'));
window.location.href = route('setup.admin');
}
}