import '@maicol07/material-web-additions/layout-grid/layout-grid.js'; import { mdiAccountOutline, mdiDatabaseOutline, mdiFormTextboxPassword, mdiPowerPlugOutline, mdiServerNetwork, mdiTestTube } from '@mdi/js'; import collect from 'collect.js'; import { Children, Vnode } from 'mithril'; import Form from 'mithril-utilities'; import Request, {RequestError} from 'mithril-utilities'; import Stream from 'mithril/stream'; import '~/Components/m3/FilledTextField'; import MdIcon from '~/Components/MdIcon'; import {VnodeCollectionItem} from '~/typings/jsx'; import {showSnackbar} from '~/utils/misc'; import { SetupStep, SetupStepAttributes, SetupSteps } from './SetupStep'; export default class DatabaseStep extends SetupStep { previousStep = SetupSteps.RegionalSettings; nextStep = SetupSteps.AdminUser; database = { driver: Stream('mysql'), host: Stream(''), username: Stream(''), password: Stream(''), database_name: Stream(''), port: Stream('3306') }; contents() { return (

{__('Database')}

{__('Inserisci le informazioni per connetterti al database MySQL. I campi sono già compilati con un esempio. Se non sai come procedere, contatta il tuo fornitore di hosting.')}

{this.fields().toArray()}
{__('* Campi obbligatori')}
); } fields() { return collect({ // TODO: Autocomplete/Select with possible drivers driver: ( ), host: ( ), username: ( ), password: ( ), database_name: ( ), port: ( ) }); } middleButton(vnode: Vnode): Children { return ( ); } async onTestButtonClicked() { await this.testDatabase(); } async testDatabase(silentSuccess = false, silentError = false): Promise { try { await Request.post(route('setup.test'), this.data); } catch (error: any) { if (!silentError) { void showSnackbar(__('Si è verificato un errore durante la connessione al database: :error', { error: (error as RequestError).response.message })); } return false; } if (!silentSuccess) { void showSnackbar(__('Connessione al database riuscita')); } return true; } async onNextButtonClicked(vnode: Vnode) { const testResult = await this.testDatabase(); if (testResult) { return super.onNextButtonClicked(vnode); } } get data(): Record { return { database_driver: this.database.driver(), database_host: this.database.host(), database_username: this.database.username(), database_password: this.database.password(), database_name: this.database.database_name(), database_port: this.database.port() }; } }