Some minor and major bugfixing
parent
f0ca5ff83f
commit
d1661b9409
|
@ -1,6 +1,8 @@
|
||||||
# Changelog:
|
# Changelog:
|
||||||
* **11.06.20**
|
* **11.06.20**
|
||||||
- Fixed channel tree deletions
|
- Fixed channel tree deletions
|
||||||
|
- Removed layout recalculate bottleneck on connection handler switching
|
||||||
|
- Fixed empty channel tree on tab change, if the tree has some scroll offset
|
||||||
|
|
||||||
* **10.06.20**
|
* **10.06.20**
|
||||||
- Finalize the channel file explorer
|
- Finalize the channel file explorer
|
||||||
|
|
|
@ -65,6 +65,10 @@
|
||||||
background-color: rgba(0, 0, 0, 0.13);
|
background-color: rgba(0, 0, 0, 0.13);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.sub-menu {
|
.sub-menu {
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
display: none;
|
display: none;
|
||||||
|
|
|
@ -32,7 +32,6 @@ import * as top_menu from "tc-shared/ui/frames/MenuBar";
|
||||||
import {EventHandler, Registry} from "tc-shared/events";
|
import {EventHandler, Registry} from "tc-shared/events";
|
||||||
import {FileManager} from "tc-shared/file/FileManager";
|
import {FileManager} from "tc-shared/file/FileManager";
|
||||||
import {FileTransferState, TransferProvider} from "tc-shared/file/Transfer";
|
import {FileTransferState, TransferProvider} from "tc-shared/file/Transfer";
|
||||||
import {guid} from "tc-shared/crypto/uid";
|
|
||||||
import {traj} from "tc-shared/i18n/localize";
|
import {traj} from "tc-shared/i18n/localize";
|
||||||
import {md5} from "tc-shared/crypto/md5";
|
import {md5} from "tc-shared/crypto/md5";
|
||||||
|
|
||||||
|
@ -1069,5 +1068,10 @@ export interface ConnectionEvents {
|
||||||
notify_connection_state_changed: {
|
notify_connection_state_changed: {
|
||||||
old_state: ConnectionState,
|
old_state: ConnectionState,
|
||||||
new_state: ConnectionState
|
new_state: ConnectionState
|
||||||
|
},
|
||||||
|
|
||||||
|
/* the handler has become visible/invisible for the client */
|
||||||
|
notify_visibility_changed: {
|
||||||
|
visible: boolean
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -92,6 +92,7 @@ namespace html {
|
||||||
private _label: string;
|
private _label: string;
|
||||||
private _callback_click: () => any;
|
private _callback_click: () => any;
|
||||||
|
|
||||||
|
private visible_: boolean = true;
|
||||||
|
|
||||||
constructor(label: string, mode: "side" | "down") {
|
constructor(label: string, mode: "side" | "down") {
|
||||||
this._label = label;
|
this._label = label;
|
||||||
|
@ -167,9 +168,9 @@ namespace html {
|
||||||
|
|
||||||
visible(value?: boolean): boolean {
|
visible(value?: boolean): boolean {
|
||||||
if(typeof(value) === "undefined")
|
if(typeof(value) === "undefined")
|
||||||
return this.html_tag.is(':visible'); //FIXME!
|
return this.visible_;
|
||||||
|
|
||||||
this.html_tag.toggle(!!value);
|
this.html_tag.toggleClass("hidden", this.visible_ = !!value);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,15 +68,6 @@ export class ConnectionManager {
|
||||||
handler.initialize_client_state(this.active_handler);
|
handler.initialize_client_state(this.active_handler);
|
||||||
this.connection_handlers.push(handler);
|
this.connection_handlers.push(handler);
|
||||||
|
|
||||||
//FIXME: Load last status from last connection or via global variables!
|
|
||||||
/*
|
|
||||||
handler.set_away_status(this.default_server_state.away, false);
|
|
||||||
handler.client_status.input_muted = this.default_server_state.microphone_disabled;
|
|
||||||
handler.client_status.output_muted = this.default_server_state.speaker_disabled;
|
|
||||||
if(!this.default_server_state.microphone_disabled)
|
|
||||||
handler.acquire_recorder(default_recorder, true);
|
|
||||||
*/
|
|
||||||
|
|
||||||
handler.tag_connection_handler.appendTo(this._tag_connection_entries);
|
handler.tag_connection_handler.appendTo(this._tag_connection_entries);
|
||||||
this._tag.toggleClass("shown", this.connection_handlers.length > 1);
|
this._tag.toggleClass("shown", this.connection_handlers.length > 1);
|
||||||
this._update_scroll();
|
this._update_scroll();
|
||||||
|
@ -142,6 +133,9 @@ export class ConnectionManager {
|
||||||
old_handler: old_handler,
|
old_handler: old_handler,
|
||||||
new_handler: handler
|
new_handler: handler
|
||||||
});
|
});
|
||||||
|
old_handler?.events().fire("notify_visibility_changed", { visible: false });
|
||||||
|
handler?.events().fire("notify_visibility_changed", { visible: true });
|
||||||
|
|
||||||
top_menu.update_state(); //FIXME: Top menu should listen to our events!
|
top_menu.update_state(); //FIXME: Top menu should listen to our events!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,18 +10,6 @@ html:root {
|
||||||
--channel-tree-entry-marker-unread: rgba(168, 20, 20, 0.5);
|
--channel-tree-entry-marker-unread: rgba(168, 20, 20, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@if 0 {
|
|
||||||
/* the channel tree */
|
|
||||||
.channel-tree {
|
|
||||||
|
|
||||||
.tree-entry {
|
|
||||||
&.client {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.channelTree {
|
.channelTree {
|
||||||
@include user-select(none);
|
@include user-select(none);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -109,8 +97,6 @@ html:root {
|
||||||
.channelTreeContainer {
|
.channelTreeContainer {
|
||||||
@include chat-scrollbar-vertical();
|
@include chat-scrollbar-vertical();
|
||||||
|
|
||||||
scroll-behavior: smooth;
|
|
||||||
|
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
|
@ -119,4 +105,8 @@ html:root {
|
||||||
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
||||||
|
&.smoothScroll {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -19,6 +19,7 @@ import {ServerEntry} from "tc-shared/ui/server";
|
||||||
import {ClientEntry, ClientType} from "tc-shared/ui/client";
|
import {ClientEntry, ClientType} from "tc-shared/ui/client";
|
||||||
import * as log from "tc-shared/log";
|
import * as log from "tc-shared/log";
|
||||||
import {LogCategory} from "tc-shared/log";
|
import {LogCategory} from "tc-shared/log";
|
||||||
|
import {ConnectionEvents} from "tc-shared/ConnectionHandler";
|
||||||
|
|
||||||
const viewStyle = require("./View.scss");
|
const viewStyle = require("./View.scss");
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ export interface ChannelTreeViewState {
|
||||||
view_height: number; /* in px */
|
view_height: number; /* in px */
|
||||||
|
|
||||||
tree_version: number;
|
tree_version: number;
|
||||||
|
smoothScroll: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TreeEntry = ChannelEntry | ServerEntry | ClientEntry;
|
export type TreeEntry = ChannelEntry | ServerEntry | ClientEntry;
|
||||||
|
@ -57,8 +59,10 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
|
||||||
private listener_channel_change;
|
private listener_channel_change;
|
||||||
private listener_state_collapsed;
|
private listener_state_collapsed;
|
||||||
private listener_channel_properties;
|
private listener_channel_properties;
|
||||||
|
private listener_tree_visibility_changed;
|
||||||
|
|
||||||
private update_timeout;
|
private update_timeout;
|
||||||
|
private fixScrollTimer;
|
||||||
|
|
||||||
private mouse_move: { x: number, y: number, down: boolean, fired: boolean } = { x: 0, y: 0, down: false, fired: false };
|
private mouse_move: { x: number, y: number, down: boolean, fired: boolean } = { x: 0, y: 0, down: false, fired: false };
|
||||||
private document_mouse_listener;
|
private document_mouse_listener;
|
||||||
|
@ -73,7 +77,8 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
|
||||||
return {
|
return {
|
||||||
scroll_offset: 0,
|
scroll_offset: 0,
|
||||||
view_height: 0,
|
view_height: 0,
|
||||||
tree_version: 0
|
tree_version: 0,
|
||||||
|
smoothScroll: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,11 +100,14 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.resize_observer.observe(this.ref_container.current);
|
this.resize_observer.observe(this.ref_container.current);
|
||||||
|
this.props.tree.client.events().on("notify_visibility_changed", this.listener_tree_visibility_changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount(): void {
|
componentWillUnmount(): void {
|
||||||
this.resize_observer.disconnect();
|
this.resize_observer.disconnect();
|
||||||
this.resize_observer = undefined;
|
this.resize_observer = undefined;
|
||||||
|
|
||||||
|
this.props.tree.client.events().off("notify_visibility_changed", this.listener_tree_visibility_changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected initialize() {
|
protected initialize() {
|
||||||
|
@ -120,6 +128,22 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
|
||||||
this.mouse_move.fired = false;
|
this.mouse_move.fired = false;
|
||||||
|
|
||||||
this.removeDocumentMouseListener();
|
this.removeDocumentMouseListener();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.listener_tree_visibility_changed = (event: ConnectionEvents["notify_visibility_changed"]) => {
|
||||||
|
clearTimeout(this.fixScrollTimer);
|
||||||
|
if(!event.visible) {
|
||||||
|
this.setState({ smoothScroll: false });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.fixScrollTimer = setTimeout(() => {
|
||||||
|
this.ref_container.current.scrollTop = this.state.scroll_offset;
|
||||||
|
this.fixScrollTimer = setTimeout(() => {
|
||||||
|
this.setState({ smoothScroll: true });
|
||||||
|
}, 50);
|
||||||
|
}, 50);
|
||||||
|
console.log("Update scroll!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +198,7 @@ export class ChannelTreeView extends ReactComponentBase<ChannelTreeViewPropertie
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={viewStyle.channelTreeContainer}
|
className={viewStyle.channelTreeContainer + " " + (this.state.smoothScroll ? viewStyle.smoothScroll : "")}
|
||||||
onScroll={() => this.onScroll()}
|
onScroll={() => this.onScroll()}
|
||||||
ref={this.ref_container}
|
ref={this.ref_container}
|
||||||
onMouseDown={e => this.onMouseDown(e)}
|
onMouseDown={e => this.onMouseDown(e)}
|
||||||
|
|
Loading…
Reference in New Issue