/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
import { createRoot, createSignal, createState, createEffect } from 'solid-js';
function createLocalState(initState) {
const [state, setState] = createState(initState);
if (localStorage.odoodockerssh) { setState(JSON.parse(localStorage.odoodockerssh)); }
createEffect(() => localStorage.odoodockerssh = JSON.stringify(state));
return [state, setState];
}
const initialState = {
address: '', port: '', username: '', key: '', database: '',
databases: [], modules: '', serverlog: '', connected: false, stop: false
};
const [isConnected, setIsConnected] = createSignal(false);
const OdooDockerSshAdminConfig = () => {
const [state, setState] = createLocalState(initialState);
const [passphrase, setPassphrase] = createSignal('');
const valueSet = ({target}) => setState(target.name, target.value);
let cantConnect = !(state.address && state.username && state.key && state.port);
const connect = () => {
fetch('/connect',
{method: 'POST',
body: JSON.stringify({
address: state.address,
port: state.port,
username: state.username,
key: state.key,
password: passphrase()
}),
headers:{ 'Content-Type': 'application/json'}})
.then(response => {
setIsConnected(response.status == 200);
return response.json();
})
.then(body => humane.log(body))
};
const disconnect = () => {
fetch ('/disconnect')
.then(response => {
setIsConnected(!(response.status == 200));
return response.json();
})
.then(body => humane.log(body))
};
return
đ Configuration
<$ when={(isConnected())}>đ”$>
<$ when={(!isConnected())}>đŽ$>
};
const OdooDockerSshAdminDatabases = () => {
const [state, setState] = createLocalState(initialState);
const valueSet = ({target}) => setState(target.name, target.value);
const add = (e) => {
e.preventDefault();
if (state.database) {
let database = {name: state.database, checked: false};
setState(['databases', [...state.databases, database]], ['database', '']);
}
};
const inverseCheck = () => {
let databases = state.databases.map((db) => Object.assign({}, db));
setState('databases', databases.map((db) => Object.assign(db, {checked: !db.checked})));
};
const allCheck = () => {
let databases = state.databases.map((db) => Object.assign({}, db));
setState('databases', databases.map((db) => Object.assign(db, {checked: true})));
};
const noCheck = () => {
let databases = state.databases.map((db) => Object.assign({}, db));
setState('databases', databases.map((db) => Object.assign(db, {checked: false})));
};
const toggle = ({target: {checked}}, name) => {
setState('databases', db => db.name === name, {name: name, checked: checked});
};
const remove = (name) => {
setState('databases', state.databases.filter(db => db.name !== name));
};
return
đ Bases de donnĂ©es
Merci de renseigner toutes les bases de votre domaine ici. Pour effectuer une installation ou mise à jour de module, sélectionnez les bases sur lesquelles agir.
};
const OdooDockerSshAdminActions = () => {
const [state, setState] = createLocalState(initialState);
const cmdFetch = (cmd) => {
return () => {
if (!isConnected()) {
humane.log('Non connecté : impossible de lancer une commande.');
} else {
humane.log('Commande lancée, veuillez patienter.');
fetch('/cmd/' + cmd)
.then(response => response.json())
.then(body => {
humane.log('Commande terminée.');
setState('serverlog', state.serverlog + body);
})
}
};
};
const webStart = cmdFetch('webstart');
const webStop = cmdFetch('webstop');
const webRestart = cmdFetch('webrestart');
const odooStart = cmdFetch('odoostart');
const stop = cmdFetch('odoostop');
const odooRestart = cmdFetch('odoorestart');
const dbStart = cmdFetch('dbstart');
const dbStop = cmdFetch('dbstop');
const dbRestart = cmdFetch('dbrestart');
return
đ© Actions
};
const OdooDockerSshAdminModules = () => {
const [state, setState] = createLocalState(initialState);
const valueSet = ({target}) => setState(target.name, target.value);
const checkedDatabases = (databases) => {
let names = databases.filter((db) => db.checked).map((db) => db.name);
return names.length ? names.join(', ') : 'Aucune base sélectionnée';
};
const odooCmd = (action) => {
return () => {
if (!isConnected()) {
humane.log('Non connecté : impossible de lancer une commande Odoo.');
} else {
humane.log('Commande lancée, veuillez patienter.');
fetch('/odooaction', {
method: 'POST',
body: JSON.stringify({
stop: state.stop,
databases: state.databases.filter((db) => db.checked).map((db) => db.name),
modules: state.modules,
action: action
}),
headers: {'Content-Type': 'application/json'}
})
.then(response => {
if (response.status != 200) { humane.log('Erreur : voyez le retour serveur'); }
return response.json();
})
.then(body => {
humane.log('Commande terminée.');
setState('serverlog', state.serverlog + body);
})
}
};
};
return
đ Modules
};
const OdooDockerSshAdminServerLog = () => {
const [state, setState] = createLocalState(initialState);
const serverlogClean = () => setState('serverlog', '');
return
đ„ Retour serveur
};
const OdooDockerSshAdmin = () => {
const [visibleTab, setVisibleTab] = createSignal('configuration');
const getClassName = (name) => visibleTab() === name ? 'active' : '';
return <>
Odoo Docker SSH Admin
<$ when={(visibleTab() === 'configuration')}>$>
<$ when={(visibleTab() === 'databases')}>$>
<$ when={(visibleTab() === 'modules')}>$>
<$ when={(visibleTab() === 'actions')}>$>
<$ when={(visibleTab() === 'serverlog')}>$>
>
}
createRoot(() => document.body.appendChild());