Files
Mikhail DzianishchytsandGitHub c129ac3076 Edit max line length (#25071)
* Edit max line length

* oh god

* ts also

* rebuild tgui

* Format again after conflicts resolving

* Me rebuild tgui

* this is minified

* this is removed

* rebuild tgui
2024-06-29 18:17:26 +00:00

64 lines
1.6 KiB
JavaScript

/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
*/
import { shallowDiffers } from 'common/react';
import { Component, createRef } from 'inferno';
import { Button } from 'tgui/components';
import { chatRenderer } from './renderer';
export class ChatPanel extends Component {
constructor() {
super();
this.ref = createRef();
this.state = {
scrollTracking: true,
};
this.handleScrollTrackingChange = (value) =>
this.setState({
scrollTracking: value,
});
}
componentDidMount() {
chatRenderer.mount(this.ref.current);
chatRenderer.events.on('scrollTrackingChanged', this.handleScrollTrackingChange);
this.componentDidUpdate();
}
componentWillUnmount() {
chatRenderer.events.off('scrollTrackingChanged', this.handleScrollTrackingChange);
}
componentDidUpdate(prevProps) {
requestAnimationFrame(() => {
chatRenderer.ensureScrollTracking();
});
const shouldUpdateStyle = !prevProps || shallowDiffers(this.props, prevProps);
if (shouldUpdateStyle) {
chatRenderer.assignStyle({
'width': '100%',
'white-space': 'pre-wrap',
'font-size': this.props.fontSize,
'line-height': this.props.lineHeight,
});
}
}
render() {
const { scrollTracking } = this.state;
return (
<>
<div className="Chat" ref={this.ref} />
{!scrollTracking && (
<Button className="Chat__scrollButton" icon="arrow-down" onClick={() => chatRenderer.scrollToBottom()}>
Scroll to bottom
</Button>
)}
</>
);
}
}