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 (
{LocaleCode.getLanguageNativeName(language)}
); } 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 ( <>
{__('OpenSTAManager')}

{__('Benvenuto in :name!', { name: {__('OpenSTAManager')} })}

{__( 'Puoi procedere alla configurazione tecnica del software attraverso i ' + 'parametri seguenti, che potranno essere corretti secondo necessità tramite il file .env.' )}
{__( "Se necessiti supporto puoi contattarci tramite l':contactLink o tramite il nostro :forumLink.", { contactLink: ( {__('assistenza ufficiale')} ), forumLink: ( {__('forum')} ) } )}

{__('Formato date')}

{__( 'I formati sono impostabili attraverso lo standard previsto da :link.', { link: ( PHP ) } )}


{__('Database')}


{__('* Campi obbligatori')}

{__('Lingua')}

{this.languages()}

{__('Licenza')}

{__( 'OpenSTAManager è tutelato dalla licenza GPL 3.0, da accettare obbligatoriamente per poter utilizzare il gestionale.' )}

{__('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'); } }