error handler improved, fixes

This commit is contained in:
Jan Prochazka
2021-03-27 10:07:36 +01:00
parent 218478c128
commit 833610c88b
5 changed files with 65 additions and 38 deletions

View File

@@ -3,9 +3,10 @@
import PluginsProvider from './plugins/PluginsProvider.svelte';
import Screen from './Screen.svelte';
import './utility/errorHandler';
import ErrorHandler from './utility/ErrorHandler.svelte';
</script>
<ErrorHandler />
<PluginsProvider />
<CommandListener />
<Screen />

View File

@@ -1,13 +1,16 @@
<script lang="ts">
import _ from 'lodash';
import FormSelectField from '../forms/FormSelectField.svelte';
import { useConnectionList } from '../utility/metadataLoaders';
$: connections = useConnectionList();
$: connectionOptions = ($connections || []).map(conn => ({
value: conn._id,
label: conn.displayName || conn.server,
}));
$: connectionOptions = _.sortBy(
($connections || []).map(conn => ({
value: conn._id,
label: conn.displayName || conn.server,
})),
'label'
);
</script>
<FormSelectField {...$$restProps} options={connectionOptions} />

View File

@@ -1,4 +1,6 @@
<script lang="ts">
import _ from 'lodash';
import { getFormContext } from '../forms/FormProviderCore.svelte';
import FormSelectField from '../forms/FormSelectField.svelte';
import { useDatabaseList } from '../utility/metadataLoaders';
@@ -8,10 +10,13 @@
const { values } = getFormContext();
$: databases = useDatabaseList({ conid: $values[conidName] });
$: databaseOptions = ($databases || []).map(db => ({
value: db.name,
label: db.name,
}));
$: databaseOptions = _.sortBy(
($databases || []).map(db => ({
value: db.name,
label: db.name,
})),
'label'
);
</script>
<FormSelectField {...$$restProps} options={databaseOptions} />

View File

@@ -0,0 +1,46 @@
<script lang="ts">
import localforage from 'localforage';
let counter = 0;
$: counterCopy = counter;
const onunhandledrejection = async e => {
console.log('Unhandler error, checking whether crashed', e);
const oldCounter = counter;
counter++;
window.setTimeout(async () => {
if (counterCopy <= oldCounter) {
console.log('CRASH DETECTED!!!');
const lastDbGateCrashJson = localStorage.getItem('lastDbGateCrash');
const lastDbGateCrash = lastDbGateCrashJson ? JSON.parse(lastDbGateCrashJson) : null;
if (lastDbGateCrash && new Date().getTime() - lastDbGateCrash < 30 * 1000) {
if (
window.confirm(
'Sorry, DbGate has crashed again.\nDo you want to clear local user data to avoid crashing after next reload?'
)
) {
localStorage.clear();
try {
await localforage.clear();
} catch (err) {
console.error('Error clearing app data', err);
}
window.location.reload();
}
} else {
if (
window.confirm(
'Sorry, DbGate has crashed.\nPress OK for reload application\nPress Cancel and inspect Console in Developer tools for error details'
)
) {
localStorage.setItem('lastDbGateCrash', JSON.stringify(new Date().getTime()));
window.location.reload();
}
}
}
}, 500);
};
</script>
<svelte:window on:unhandledrejection={onunhandledrejection} />

View File

@@ -1,28 +0,0 @@
import localforage from 'localforage';
window.onunhandledrejection = async e => {
console.log('Unhandler error, CRASH!!!', e);
const lastDbGateCrashJson = localStorage.getItem('lastDbGateCrash');
const lastDbGateCrash = lastDbGateCrashJson ? JSON.parse(lastDbGateCrashJson) : null;
if (lastDbGateCrash && new Date().getTime() - lastDbGateCrash < 30 * 1000) {
if (
window.confirm(
'Sorry, DbGate has crashed again.\nDo you want to clear local user data to avoid crashing after next reload?'
)
) {
localStorage.clear();
try {
await localforage.clear();
} catch (err) {
console.error('Error clearing app data', err);
}
window.location.reload();
}
} else {
if (window.confirm('Sorry, DbGate has crashed.\nPress OK for reload application\nPress Cancel and inspect Console in Developer tools for error details')) {
localStorage.setItem('lastDbGateCrash', JSON.stringify(new Date().getTime()));
window.location.reload();
}
}
};