mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2025-01-10 20:17:32 +01:00
add ErrorView(Model) to easily report errors and submit logs from UI
This commit is contained in:
parent
bd3499056a
commit
b8bc6edbc0
44
src/domain/ErrorViewModel.ts
Normal file
44
src/domain/ErrorViewModel.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { ViewModel, Options as BaseOptions } from "./ViewModel";
|
||||||
|
import {submitLogsFromSessionToDefaultServer} from "./rageshake";
|
||||||
|
import type { Session } from "../matrix/Session";
|
||||||
|
|
||||||
|
type Options = {
|
||||||
|
error: Error
|
||||||
|
session: Session,
|
||||||
|
onClose: () => void
|
||||||
|
} & BaseOptions;
|
||||||
|
|
||||||
|
export class ErrorViewModel extends ViewModel<Options> {
|
||||||
|
get message(): string {
|
||||||
|
return this.getOption("error")?.message;
|
||||||
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
this.getOption("onClose")();
|
||||||
|
}
|
||||||
|
|
||||||
|
async submitLogs(): Promise<boolean> {
|
||||||
|
try {
|
||||||
|
await submitLogsFromSessionToDefaultServer(this.getOption("session"), this.platform);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
50
src/platform/web/ui/css/themes/element/error.css
Normal file
50
src/platform/web/ui/css/themes/element/error.css
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
.ErrorView_block {
|
||||||
|
background: var(--error-color);
|
||||||
|
color: var(--fixed-white);
|
||||||
|
margin: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ErrorView_inline {
|
||||||
|
color: var(--error-color);
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ErrorView {
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 16px;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 12px;
|
||||||
|
display: flex;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ErrorView_message {
|
||||||
|
flex-basis: 0;
|
||||||
|
flex-grow: 1;
|
||||||
|
margin: 0px;
|
||||||
|
word-break: break-all;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ErrorView_submit {
|
||||||
|
align-self: end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ErrorView_close {
|
||||||
|
align-self: start;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: contain;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ErrorView_block .ErrorView_close {
|
||||||
|
background-image: url('icons/clear.svg?primary=fixed-white');
|
||||||
|
}
|
||||||
|
|
||||||
|
.ErrorView_inline .ErrorView_close {
|
||||||
|
background-image: url('icons/clear.svg?primary=text-color');
|
||||||
|
}
|
@ -19,6 +19,7 @@ limitations under the License.
|
|||||||
@import url('inter.css');
|
@import url('inter.css');
|
||||||
@import url('timeline.css');
|
@import url('timeline.css');
|
||||||
@import url('call.css');
|
@import url('call.css');
|
||||||
|
@import url('error.css');
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
|
56
src/platform/web/ui/general/ErrorView.ts
Normal file
56
src/platform/web/ui/general/ErrorView.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {TemplateView, Builder} from "./TemplateView";
|
||||||
|
import { disableTargetCallback } from "./utils";
|
||||||
|
|
||||||
|
import type { ViewNode } from "./types";
|
||||||
|
import type {ErrorViewModel} from "../../../../domain/ErrorViewModel";
|
||||||
|
|
||||||
|
|
||||||
|
export class ErrorView extends TemplateView<ErrorViewModel> {
|
||||||
|
constructor(vm: ErrorViewModel, private readonly options: {inline: boolean} = {inline: false}) {
|
||||||
|
super(vm);
|
||||||
|
}
|
||||||
|
override render(t: Builder<ErrorViewModel>, vm: ErrorViewModel): ViewNode {
|
||||||
|
const submitLogsButton = t.button({
|
||||||
|
className: "ErrorView_submit",
|
||||||
|
onClick: disableTargetCallback(async () => {
|
||||||
|
if (await vm.submitLogs()) {
|
||||||
|
alert("Logs submitted!");
|
||||||
|
} else {
|
||||||
|
alert("Could not submit logs");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, "Submit logs");
|
||||||
|
const closeButton = t.button({
|
||||||
|
className: "ErrorView_close",
|
||||||
|
onClick: () => vm.close(),
|
||||||
|
title: "Dismiss error"
|
||||||
|
});
|
||||||
|
return t.div({
|
||||||
|
className: {
|
||||||
|
"ErrorView": true,
|
||||||
|
"ErrorView_inline": this.options.inline,
|
||||||
|
"ErrorView_block": !this.options.inline
|
||||||
|
}}, [
|
||||||
|
t.p({className: "ErrorView_message"}, vm.message),
|
||||||
|
submitLogsButton,
|
||||||
|
closeButton
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user