Enable noImplicitOverride
TypeScript compiler option
This commit is contained in:
parent
4490d9f2d0
commit
ede34ecee3
51 changed files with 339 additions and 194 deletions
|
@ -69,7 +69,7 @@ export class ContactListItem extends React.Component<Props> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { about, i18n, isAdmin, isMe, name, onClick, title, type } =
|
||||
this.props;
|
||||
|
||||
|
|
|
@ -26,15 +26,15 @@ export class Countdown extends React.Component<Props, State> {
|
|||
this.state = { ratio };
|
||||
}
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
this.startLoop();
|
||||
}
|
||||
|
||||
public componentDidUpdate(): void {
|
||||
public override componentDidUpdate(): void {
|
||||
this.startLoop();
|
||||
}
|
||||
|
||||
public componentWillUnmount(): void {
|
||||
public override componentWillUnmount(): void {
|
||||
this.stopLoop();
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,7 @@ export class Countdown extends React.Component<Props, State> {
|
|||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { ratio } = this.state;
|
||||
const strokeDashoffset = ratio * CIRCUMFERENCE;
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ export class Intl extends React.Component<Props> {
|
|||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
public render() {
|
||||
public override render() {
|
||||
const { components, id, i18n, renderText } = this.props;
|
||||
|
||||
const text = i18n(id);
|
||||
|
|
|
@ -65,7 +65,7 @@ export class MainHeader extends React.Component<PropsType, StateType> {
|
|||
};
|
||||
}
|
||||
|
||||
public componentDidUpdate(prevProps: PropsType): void {
|
||||
public override componentDidUpdate(prevProps: PropsType): void {
|
||||
const { searchConversation, startSearchCounter } = this.props;
|
||||
|
||||
// When user chooses to search in a given conversation we focus the field for them
|
||||
|
@ -119,11 +119,11 @@ export class MainHeader extends React.Component<PropsType, StateType> {
|
|||
}
|
||||
};
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
document.addEventListener('keydown', this.handleGlobalKeyDown);
|
||||
}
|
||||
|
||||
public componentWillUnmount(): void {
|
||||
public override componentWillUnmount(): void {
|
||||
const { popperRoot } = this.state;
|
||||
|
||||
document.removeEventListener('click', this.handleOutsideClick);
|
||||
|
@ -191,7 +191,7 @@ export class MainHeader extends React.Component<PropsType, StateType> {
|
|||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const {
|
||||
avatarPath,
|
||||
badge,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -16,7 +16,7 @@ export class AddNewLines extends React.Component<Props> {
|
|||
renderNonNewLine: ({ text }) => text,
|
||||
};
|
||||
|
||||
public render():
|
||||
public override render():
|
||||
| JSX.Element
|
||||
| string
|
||||
| null
|
||||
|
|
|
@ -214,7 +214,7 @@ export class ContactDetail extends React.Component<Props> {
|
|||
});
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { contact, hasSignalAccount, i18n, onSendMessage } = this.props;
|
||||
const isIncoming = false;
|
||||
const module = 'contact-detail';
|
||||
|
|
|
@ -587,7 +587,7 @@ export class ConversationHeader extends React.Component<PropsType, StateType> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): ReactNode {
|
||||
public override render(): ReactNode {
|
||||
const { id, isSMSOnly, i18n, onSetDisappearingMessages, expireTimer } =
|
||||
this.props;
|
||||
const { isNarrow, modalState } = this.state;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -54,7 +54,7 @@ export class Emojify extends React.Component<Props> {
|
|||
renderNonEmoji: ({ text }) => text,
|
||||
};
|
||||
|
||||
public render(): null | Array<JSX.Element | string | null> {
|
||||
public override render(): null | Array<JSX.Element | string | null> {
|
||||
const { text, sizeClass, renderNonEmoji } = this.props;
|
||||
|
||||
// We have to do this, because renderNonEmoji is not required in our Props object,
|
||||
|
|
|
@ -36,7 +36,7 @@ export class ErrorBoundary extends React.PureComponent<Props, State> {
|
|||
return { error };
|
||||
}
|
||||
|
||||
public render(): ReactNode {
|
||||
public override render(): ReactNode {
|
||||
const { error } = this.state;
|
||||
const { i18n, children } = this.props;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -24,7 +24,7 @@ export class ExpireTimer extends React.Component<Props> {
|
|||
this.interval = null;
|
||||
}
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
const { expirationLength } = this.props;
|
||||
const increment = getIncrement(expirationLength);
|
||||
const updateFrequency = Math.max(increment, 500);
|
||||
|
@ -39,13 +39,13 @@ export class ExpireTimer extends React.Component<Props> {
|
|||
this.interval = setInterval(update, updateFrequency);
|
||||
}
|
||||
|
||||
public componentWillUnmount(): void {
|
||||
public override componentWillUnmount(): void {
|
||||
if (this.interval) {
|
||||
clearInterval(this.interval);
|
||||
}
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const {
|
||||
direction,
|
||||
expirationLength,
|
||||
|
|
|
@ -120,7 +120,7 @@ export class GroupNotification extends React.Component<Props> {
|
|||
}
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { changes: rawChanges, i18n, from } = this.props;
|
||||
|
||||
// This check is just to be extra careful, and can probably be removed.
|
||||
|
|
|
@ -132,7 +132,7 @@ export class Image extends React.Component<Props> {
|
|||
);
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const {
|
||||
alt,
|
||||
attachment,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2019-2020 Signal Messenger, LLC
|
||||
// Copyright 2019-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -37,14 +37,14 @@ export class InlineNotificationWrapper extends React.Component<PropsType> {
|
|||
}
|
||||
};
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
const { isSelected } = this.props;
|
||||
if (isSelected) {
|
||||
this.setFocus();
|
||||
}
|
||||
}
|
||||
|
||||
public componentDidUpdate(prevProps: PropsType): void {
|
||||
public override componentDidUpdate(prevProps: PropsType): void {
|
||||
const { isSelected } = this.props;
|
||||
|
||||
if (!prevProps.isSelected && isSelected) {
|
||||
|
@ -52,7 +52,7 @@ export class InlineNotificationWrapper extends React.Component<PropsType> {
|
|||
}
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { children } = this.props;
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -326,7 +326,7 @@ export class Linkify extends React.Component<Props> {
|
|||
renderNonLink: ({ text }) => text,
|
||||
};
|
||||
|
||||
public render():
|
||||
public override render():
|
||||
| JSX.Element
|
||||
| string
|
||||
| null
|
||||
|
|
|
@ -418,7 +418,7 @@ export class Message extends React.PureComponent<Props, State> {
|
|||
}
|
||||
};
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
this.startSelectedTimer();
|
||||
this.startDeleteForEveryoneTimer();
|
||||
|
||||
|
@ -445,7 +445,7 @@ export class Message extends React.PureComponent<Props, State> {
|
|||
}
|
||||
}
|
||||
|
||||
public componentWillUnmount(): void {
|
||||
public override componentWillUnmount(): void {
|
||||
if (this.selectedTimeout) {
|
||||
clearTimeout(this.selectedTimeout);
|
||||
}
|
||||
|
@ -462,7 +462,7 @@ export class Message extends React.PureComponent<Props, State> {
|
|||
this.toggleReactionPicker(true);
|
||||
}
|
||||
|
||||
public componentDidUpdate(prevProps: Props): void {
|
||||
public override componentDidUpdate(prevProps: Props): void {
|
||||
const { canDeleteForEveryone, isSelected, status, timestamp } = this.props;
|
||||
|
||||
this.startSelectedTimer();
|
||||
|
@ -2414,7 +2414,7 @@ export class Message extends React.PureComponent<Props, State> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): JSX.Element | null {
|
||||
public override render(): JSX.Element | null {
|
||||
const { author, attachments, direction, id, isSticker, timestamp } =
|
||||
this.props;
|
||||
const { expired, expiring, imageBroken, isSelected } = this.state;
|
||||
|
|
|
@ -105,7 +105,7 @@ export class MessageDetail extends React.Component<Props> {
|
|||
|
||||
private readonly messageContainerRef = React.createRef<HTMLDivElement>();
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
// When this component is created, it's initially not part of the DOM, and then it's
|
||||
// added off-screen and animated in. This ensures that the focus takes.
|
||||
setTimeout(() => {
|
||||
|
@ -257,7 +257,7 @@ export class MessageDetail extends React.Component<Props> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const {
|
||||
errors,
|
||||
message,
|
||||
|
|
|
@ -126,7 +126,7 @@ export class Quote extends React.Component<Props, State> {
|
|||
};
|
||||
}
|
||||
|
||||
componentDidMount(): void {
|
||||
override componentDidMount(): void {
|
||||
const { doubleCheckMissingQuoteReference, referencedMessageNotFound } =
|
||||
this.props;
|
||||
|
||||
|
@ -427,7 +427,7 @@ export class Quote extends React.Component<Props, State> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): JSX.Element | null {
|
||||
public override render(): JSX.Element | null {
|
||||
const {
|
||||
conversationColor,
|
||||
customColor,
|
||||
|
|
|
@ -1005,20 +1005,20 @@ export class Timeline extends React.PureComponent<PropsType, StateType> {
|
|||
}
|
||||
};
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
this.updateWithVisibleRows();
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
window.registerForActive(this.updateWithVisibleRows);
|
||||
}
|
||||
|
||||
public componentWillUnmount(): void {
|
||||
public override componentWillUnmount(): void {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
window.unregisterForActive(this.updateWithVisibleRows);
|
||||
}
|
||||
|
||||
public componentDidUpdate(
|
||||
public override componentDidUpdate(
|
||||
prevProps: Readonly<PropsType>,
|
||||
prevState: Readonly<StateType>
|
||||
): void {
|
||||
|
@ -1311,7 +1311,7 @@ export class Timeline extends React.PureComponent<PropsType, StateType> {
|
|||
}
|
||||
};
|
||||
|
||||
public render(): JSX.Element | null {
|
||||
public override render(): JSX.Element | null {
|
||||
const {
|
||||
acknowledgeGroupMemberNameCollisions,
|
||||
areWeAdmin,
|
||||
|
|
|
@ -171,7 +171,7 @@ export type PropsType = PropsLocalType &
|
|||
>;
|
||||
|
||||
export class TimelineItem extends React.PureComponent<PropsType> {
|
||||
public render(): JSX.Element | null {
|
||||
public override render(): JSX.Element | null {
|
||||
const {
|
||||
containerElementRef,
|
||||
conversationId,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2019-2020 Signal Messenger, LLC
|
||||
// Copyright 2019-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -40,7 +40,7 @@ export class TimelineLoadingRow extends React.PureComponent<Props> {
|
|||
return <Spinner size="24" svgSize="small" direction="on-background" />;
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
return (
|
||||
<div className="module-timeline-loading-row">{this.renderContents()}</div>
|
||||
);
|
||||
|
|
|
@ -31,7 +31,7 @@ export class Timestamp extends React.Component<Props> {
|
|||
this.interval = null;
|
||||
}
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
const update = () => {
|
||||
this.setState({
|
||||
// Used to trigger renders
|
||||
|
@ -42,13 +42,13 @@ export class Timestamp extends React.Component<Props> {
|
|||
this.interval = setInterval(update, UPDATE_FREQUENCY);
|
||||
}
|
||||
|
||||
public componentWillUnmount(): void {
|
||||
public override componentWillUnmount(): void {
|
||||
if (this.interval) {
|
||||
clearInterval(this.interval);
|
||||
}
|
||||
}
|
||||
|
||||
public render(): JSX.Element | null {
|
||||
public override render(): JSX.Element | null {
|
||||
const {
|
||||
direction,
|
||||
i18n,
|
||||
|
|
|
@ -66,7 +66,7 @@ export class TypingBubble extends React.PureComponent<Props> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { i18n, conversationType } = this.props;
|
||||
const isGroup = conversationType === 'group';
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ export class VerificationNotification extends React.Component<Props> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { type } = this.props;
|
||||
const icon = type === 'markVerified' ? 'verified' : 'verified-not';
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -20,7 +20,7 @@ export type Props = {
|
|||
};
|
||||
|
||||
export class AttachmentSection extends React.Component<Props> {
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { header } = this.props;
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -23,7 +23,7 @@ export class DocumentListItem extends React.Component<Props> {
|
|||
shouldShowSeparator: true,
|
||||
};
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { shouldShowSeparator } = this.props;
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -78,7 +78,7 @@ export class MediaGallery extends React.Component<Props, State> {
|
|||
};
|
||||
}
|
||||
|
||||
public componentDidMount(): void {
|
||||
public override componentDidMount(): void {
|
||||
// When this component is created, it's initially not part of the DOM, and then it's
|
||||
// added off-screen and animated in. This ensures that the focus takes.
|
||||
setTimeout(() => {
|
||||
|
@ -88,7 +88,7 @@ export class MediaGallery extends React.Component<Props, State> {
|
|||
});
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { selectedTab } = this.state;
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2018-2020 Signal Messenger, LLC
|
||||
// Copyright 2018-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React from 'react';
|
||||
|
@ -111,7 +111,7 @@ export class MediaGridItem extends React.Component<Props, State> {
|
|||
);
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
public override render(): JSX.Element {
|
||||
const { onClick } = this.props;
|
||||
|
||||
return (
|
||||
|
|
|
@ -137,7 +137,7 @@ export class MessageBodyHighlight extends React.Component<Props> {
|
|||
return results;
|
||||
}
|
||||
|
||||
public render(): ReactNode {
|
||||
public override render(): ReactNode {
|
||||
return <div className={CLASS_NAME}>{this.renderContents()}</div>;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@ export class LeftPaneArchiveHelper extends LeftPaneHelper<LeftPaneArchivePropsTy
|
|||
}
|
||||
}
|
||||
|
||||
getHeaderContents({
|
||||
override getHeaderContents({
|
||||
clearSearch,
|
||||
i18n,
|
||||
showInbox,
|
||||
|
@ -92,11 +92,11 @@ export class LeftPaneArchiveHelper extends LeftPaneHelper<LeftPaneArchivePropsTy
|
|||
);
|
||||
}
|
||||
|
||||
getBackAction({ showInbox }: { showInbox: () => void }): () => void {
|
||||
override getBackAction({ showInbox }: { showInbox: () => void }): () => void {
|
||||
return showInbox;
|
||||
}
|
||||
|
||||
getPreRowsNode({
|
||||
override getPreRowsNode({
|
||||
i18n,
|
||||
}: Readonly<{ i18n: LocalizerType }>): ReactChild | null {
|
||||
if (this.searchHelper) {
|
||||
|
@ -130,7 +130,7 @@ export class LeftPaneArchiveHelper extends LeftPaneHelper<LeftPaneArchivePropsTy
|
|||
: undefined;
|
||||
}
|
||||
|
||||
getRowIndexToScrollTo(
|
||||
override getRowIndexToScrollTo(
|
||||
selectedConversationId: undefined | string
|
||||
): undefined | number {
|
||||
if (this.searchHelper) {
|
||||
|
@ -194,7 +194,7 @@ export class LeftPaneArchiveHelper extends LeftPaneHelper<LeftPaneArchivePropsTy
|
|||
return false;
|
||||
}
|
||||
|
||||
onKeyDown(
|
||||
override onKeyDown(
|
||||
event: KeyboardEvent,
|
||||
{
|
||||
searchInConversation,
|
||||
|
|
|
@ -72,7 +72,7 @@ export class LeftPaneChooseGroupMembersHelper extends LeftPaneHelper<LeftPaneCho
|
|||
);
|
||||
}
|
||||
|
||||
getHeaderContents({
|
||||
override getHeaderContents({
|
||||
i18n,
|
||||
startComposing,
|
||||
}: Readonly<{
|
||||
|
@ -97,7 +97,7 @@ export class LeftPaneChooseGroupMembersHelper extends LeftPaneHelper<LeftPaneCho
|
|||
);
|
||||
}
|
||||
|
||||
getBackAction({
|
||||
override getBackAction({
|
||||
startComposing,
|
||||
}: {
|
||||
startComposing: () => void;
|
||||
|
@ -105,7 +105,7 @@ export class LeftPaneChooseGroupMembersHelper extends LeftPaneHelper<LeftPaneCho
|
|||
return startComposing;
|
||||
}
|
||||
|
||||
getPreRowsNode({
|
||||
override getPreRowsNode({
|
||||
closeCantAddContactToGroupModal,
|
||||
closeMaximumGroupSizeModal,
|
||||
closeRecommendedGroupSizeModal,
|
||||
|
@ -196,7 +196,7 @@ export class LeftPaneChooseGroupMembersHelper extends LeftPaneHelper<LeftPaneCho
|
|||
);
|
||||
}
|
||||
|
||||
getFooterContents({
|
||||
override getFooterContents({
|
||||
i18n,
|
||||
startSettingGroupMetadata,
|
||||
}: Readonly<{
|
||||
|
|
|
@ -67,7 +67,7 @@ export class LeftPaneComposeHelper extends LeftPaneHelper<LeftPaneComposePropsTy
|
|||
this.isUsernamesEnabled = isUsernamesEnabled;
|
||||
}
|
||||
|
||||
getHeaderContents({
|
||||
override getHeaderContents({
|
||||
i18n,
|
||||
showInbox,
|
||||
}: Readonly<{
|
||||
|
@ -90,11 +90,11 @@ export class LeftPaneComposeHelper extends LeftPaneHelper<LeftPaneComposePropsTy
|
|||
);
|
||||
}
|
||||
|
||||
getBackAction({ showInbox }: { showInbox: () => void }): () => void {
|
||||
override getBackAction({ showInbox }: { showInbox: () => void }): () => void {
|
||||
return showInbox;
|
||||
}
|
||||
|
||||
getPreRowsNode({
|
||||
override getPreRowsNode({
|
||||
i18n,
|
||||
onChangeComposeSearchTerm,
|
||||
}: Readonly<{
|
||||
|
|
|
@ -61,7 +61,7 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
|
|||
);
|
||||
}
|
||||
|
||||
getPreRowsNode({
|
||||
override getPreRowsNode({
|
||||
i18n,
|
||||
}: Readonly<{ i18n: LocalizerType }>): null | ReactChild {
|
||||
if (this.getRowCount() === 0) {
|
||||
|
@ -156,7 +156,7 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
|
|||
return undefined;
|
||||
}
|
||||
|
||||
getRowIndexToScrollTo(
|
||||
override getRowIndexToScrollTo(
|
||||
selectedConversationId: undefined | string
|
||||
): undefined | number {
|
||||
if (!selectedConversationId) {
|
||||
|
@ -188,7 +188,7 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
|
|||
return undefined;
|
||||
}
|
||||
|
||||
requiresFullWidth(): boolean {
|
||||
override requiresFullWidth(): boolean {
|
||||
const hasNoConversations =
|
||||
!this.conversations.length &&
|
||||
!this.pinnedConversations.length &&
|
||||
|
@ -228,7 +228,7 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
|
|||
);
|
||||
}
|
||||
|
||||
onKeyDown(
|
||||
override onKeyDown(
|
||||
event: KeyboardEvent,
|
||||
options: Readonly<{
|
||||
searchInConversation: (conversationId: string) => unknown;
|
||||
|
|
|
@ -77,7 +77,7 @@ export class LeftPaneSearchHelper extends LeftPaneHelper<LeftPaneSearchPropsType
|
|||
this.searchTerm = searchTerm;
|
||||
}
|
||||
|
||||
getPreRowsNode({
|
||||
override getPreRowsNode({
|
||||
i18n,
|
||||
}: Readonly<{ i18n: LocalizerType }>): null | ReactChild {
|
||||
const mightHaveSearchResults = this.allResults().some(
|
||||
|
@ -142,7 +142,7 @@ export class LeftPaneSearchHelper extends LeftPaneHelper<LeftPaneSearchPropsType
|
|||
}
|
||||
|
||||
// This is currently unimplemented. See DESKTOP-1170.
|
||||
getRowIndexToScrollTo(
|
||||
override getRowIndexToScrollTo(
|
||||
_selectedConversationId: undefined | string
|
||||
): undefined | number {
|
||||
return undefined;
|
||||
|
@ -231,7 +231,7 @@ export class LeftPaneSearchHelper extends LeftPaneHelper<LeftPaneSearchPropsType
|
|||
: undefined;
|
||||
}
|
||||
|
||||
isScrollable(): boolean {
|
||||
override isScrollable(): boolean {
|
||||
return !this.isLoading();
|
||||
}
|
||||
|
||||
|
@ -267,7 +267,7 @@ export class LeftPaneSearchHelper extends LeftPaneHelper<LeftPaneSearchPropsType
|
|||
return undefined;
|
||||
}
|
||||
|
||||
onKeyDown(
|
||||
override onKeyDown(
|
||||
event: KeyboardEvent,
|
||||
options: Readonly<{
|
||||
searchInConversation: (conversationId: string) => unknown;
|
||||
|
|
|
@ -75,7 +75,7 @@ export class LeftPaneSetGroupMetadataHelper extends LeftPaneHelper<LeftPaneSetGr
|
|||
this.userAvatarData = userAvatarData;
|
||||
}
|
||||
|
||||
getHeaderContents({
|
||||
override getHeaderContents({
|
||||
i18n,
|
||||
showChooseGroupMembers,
|
||||
}: Readonly<{
|
||||
|
@ -101,7 +101,7 @@ export class LeftPaneSetGroupMetadataHelper extends LeftPaneHelper<LeftPaneSetGr
|
|||
);
|
||||
}
|
||||
|
||||
getBackAction({
|
||||
override getBackAction({
|
||||
showChooseGroupMembers,
|
||||
}: {
|
||||
showChooseGroupMembers: () => void;
|
||||
|
@ -109,7 +109,7 @@ export class LeftPaneSetGroupMetadataHelper extends LeftPaneHelper<LeftPaneSetGr
|
|||
return this.isCreating ? undefined : showChooseGroupMembers;
|
||||
}
|
||||
|
||||
getPreRowsNode({
|
||||
override getPreRowsNode({
|
||||
clearGroupCreationError,
|
||||
composeDeleteAvatarFromDisk,
|
||||
composeReplaceAvatar,
|
||||
|
@ -219,7 +219,7 @@ export class LeftPaneSetGroupMetadataHelper extends LeftPaneHelper<LeftPaneSetGr
|
|||
);
|
||||
}
|
||||
|
||||
getFooterContents({
|
||||
override getFooterContents({
|
||||
createGroup,
|
||||
i18n,
|
||||
}: Readonly<{
|
||||
|
|
|
@ -61,7 +61,7 @@ export class NormalMessageSendJobQueue extends JobQueue<NormalMessageSendJobData
|
|||
return { messageId, conversationId };
|
||||
}
|
||||
|
||||
protected getInMemoryQueue({
|
||||
protected override getInMemoryQueue({
|
||||
data,
|
||||
}: Readonly<{ data: NormalMessageSendJobData }>): PQueue {
|
||||
return this.inMemoryQueues.get(data.conversationId);
|
||||
|
|
|
@ -47,7 +47,7 @@ export class ReactionJobQueue extends JobQueue<ReactionJobData> {
|
|||
return reactionJobData.parse(data);
|
||||
}
|
||||
|
||||
protected getInMemoryQueue({
|
||||
protected override getInMemoryQueue({
|
||||
data,
|
||||
}: Readonly<{ data: Pick<ReactionJobData, 'messageId'> }>): PQueue {
|
||||
return this.inMemoryQueues.get(data.messageId);
|
||||
|
|
|
@ -203,7 +203,7 @@ export class ConversationModel extends window.Backbone
|
|||
|
||||
private isInReduxBatch = false;
|
||||
|
||||
defaults(): Partial<ConversationAttributesType> {
|
||||
override defaults(): Partial<ConversationAttributesType> {
|
||||
return {
|
||||
unreadCount: 0,
|
||||
verified: window.textsecure.storage.protocol.VerifiedStatus.DEFAULT,
|
||||
|
@ -244,7 +244,9 @@ export class ConversationModel extends window.Backbone
|
|||
return collection;
|
||||
}
|
||||
|
||||
initialize(attributes: Partial<ConversationAttributesType> = {}): void {
|
||||
override initialize(
|
||||
attributes: Partial<ConversationAttributesType> = {}
|
||||
): void {
|
||||
if (isValidE164(attributes.id, false)) {
|
||||
this.set({ id: UUID.generate().toString(), e164: attributes.id });
|
||||
}
|
||||
|
@ -1078,7 +1080,7 @@ export class ConversationModel extends window.Backbone
|
|||
this.setRegistered();
|
||||
}
|
||||
|
||||
isValid(): boolean {
|
||||
override isValid(): boolean {
|
||||
return (
|
||||
isDirectConversation(this.attributes) ||
|
||||
isGroupV1(this.attributes) ||
|
||||
|
@ -2956,7 +2958,7 @@ export class ConversationModel extends window.Backbone
|
|||
);
|
||||
}
|
||||
|
||||
validate(attributes = this.attributes): string | null {
|
||||
override validate(attributes = this.attributes): string | null {
|
||||
const required = ['type'];
|
||||
const missing = window._.filter(required, attr => !attributes[attr]);
|
||||
if (missing.length) {
|
||||
|
|
|
@ -203,7 +203,7 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
|
|||
|
||||
cachedOutgoingStickerData?: WhatIsThis;
|
||||
|
||||
initialize(attributes: unknown): void {
|
||||
override initialize(attributes: unknown): void {
|
||||
if (_.isObject(attributes)) {
|
||||
this.set(
|
||||
TypedMessage.initializeSchemaVersion({
|
||||
|
@ -756,14 +756,14 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
|
|||
return `${account}.${device} ${timestamp}`;
|
||||
}
|
||||
|
||||
defaults(): Partial<MessageAttributesType> {
|
||||
override defaults(): Partial<MessageAttributesType> {
|
||||
return {
|
||||
timestamp: new Date().getTime(),
|
||||
attachments: [],
|
||||
};
|
||||
}
|
||||
|
||||
validate(attributes: Record<string, unknown>): void {
|
||||
override validate(attributes: Record<string, unknown>): void {
|
||||
const required = ['conversationId', 'received_at', 'sent_at'];
|
||||
const missing = _.filter(required, attr => !attributes[attr]);
|
||||
if (missing.length) {
|
||||
|
@ -1003,7 +1003,7 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
|
|||
await window.Signal.Data.deleteSentProtoByMessageId(this.id);
|
||||
}
|
||||
|
||||
isEmpty(): boolean {
|
||||
override isEmpty(): boolean {
|
||||
const { attributes } = this;
|
||||
|
||||
// Core message types - we check for all four because they can each stand alone
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2020 Signal Messenger, LLC
|
||||
// Copyright 2020-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import type Parchment from 'parchment';
|
||||
|
@ -13,13 +13,13 @@ const Embed: typeof Parchment.Embed = Quill.import('blots/embed');
|
|||
// ts/components/emoji/Emoji.tsx
|
||||
|
||||
export class EmojiBlot extends Embed {
|
||||
static blotName = 'emoji';
|
||||
static override blotName = 'emoji';
|
||||
|
||||
static tagName = 'img';
|
||||
static override tagName = 'img';
|
||||
|
||||
static className = 'emoji-blot';
|
||||
static override className = 'emoji-blot';
|
||||
|
||||
static create(emoji: string): Node {
|
||||
static override create(emoji: string): Node {
|
||||
const node = super.create(undefined) as HTMLElement;
|
||||
node.dataset.emoji = emoji;
|
||||
|
||||
|
@ -33,7 +33,7 @@ export class EmojiBlot extends Embed {
|
|||
return node;
|
||||
}
|
||||
|
||||
static value(node: HTMLElement): string | undefined {
|
||||
static override value(node: HTMLElement): string | undefined {
|
||||
return node.dataset.emoji;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2020 Signal Messenger, LLC
|
||||
// Copyright 2020-2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
/* eslint-disable max-classes-per-file */
|
||||
|
@ -17,13 +17,13 @@ declare class QuillEmbed extends Parchment.Embed {
|
|||
const Embed: typeof QuillEmbed = Quill.import('blots/embed');
|
||||
|
||||
export class MentionBlot extends Embed {
|
||||
static blotName = 'mention';
|
||||
static override blotName = 'mention';
|
||||
|
||||
static className = 'mention-blot';
|
||||
static override className = 'mention-blot';
|
||||
|
||||
static tagName = 'span';
|
||||
static override tagName = 'span';
|
||||
|
||||
static create(value: MentionBlotValue): Node {
|
||||
static override create(value: MentionBlotValue): Node {
|
||||
const node = super.create(undefined) as HTMLElement;
|
||||
|
||||
MentionBlot.buildSpan(value, node);
|
||||
|
@ -31,7 +31,7 @@ export class MentionBlot extends Embed {
|
|||
return node;
|
||||
}
|
||||
|
||||
static value(node: HTMLElement): MentionBlotValue {
|
||||
static override value(node: HTMLElement): MentionBlotValue {
|
||||
const { uuid, title } = node.dataset;
|
||||
if (uuid === undefined || title === undefined) {
|
||||
throw new Error(
|
||||
|
|
|
@ -128,7 +128,9 @@ describe('JobQueue', () => {
|
|||
return z.number().parse(data);
|
||||
}
|
||||
|
||||
protected getInMemoryQueue(parsedJob: ParsedJob<number>): PQueue {
|
||||
protected override getInMemoryQueue(
|
||||
parsedJob: ParsedJob<number>
|
||||
): PQueue {
|
||||
assert(
|
||||
new Set([1, 2, 3, 4]).has(parsedJob.data),
|
||||
'Bad data passed to `getInMemoryQueue`'
|
||||
|
|
|
@ -150,13 +150,13 @@ export class CDSSocket extends EventEmitter {
|
|||
|
||||
// EventEmitter types
|
||||
|
||||
public on(
|
||||
public override on(
|
||||
type: 'close',
|
||||
callback: (code: number, reason?: string) => void
|
||||
): this;
|
||||
public on(type: 'error', callback: (error: Error) => void): this;
|
||||
public override on(type: 'error', callback: (error: Error) => void): this;
|
||||
|
||||
public on(
|
||||
public override on(
|
||||
type: string | symbol,
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
listener: (...args: Array<any>) => void
|
||||
|
@ -164,11 +164,11 @@ export class CDSSocket extends EventEmitter {
|
|||
return super.on(type, listener);
|
||||
}
|
||||
|
||||
public emit(type: 'close', code: number, reason?: string): boolean;
|
||||
public emit(type: 'error', error: Error): boolean;
|
||||
public override emit(type: 'close', code: number, reason?: string): boolean;
|
||||
public override emit(type: 'error', error: Error): boolean;
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
public emit(type: string | symbol, ...args: Array<any>): boolean {
|
||||
public override emit(type: string | symbol, ...args: Array<any>): boolean {
|
||||
return super.emit(type, ...args);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ export type HTTPErrorHeadersType = {
|
|||
};
|
||||
|
||||
export class HTTPError extends Error {
|
||||
public readonly name = 'HTTPError';
|
||||
public override readonly name = 'HTTPError';
|
||||
|
||||
public readonly code: number;
|
||||
|
||||
|
@ -48,10 +48,6 @@ export class HTTPError extends Error {
|
|||
}
|
||||
|
||||
export class ReplayableError extends Error {
|
||||
name: string;
|
||||
|
||||
message: string;
|
||||
|
||||
functionCode?: number;
|
||||
|
||||
constructor(options: {
|
||||
|
|
|
@ -350,134 +350,149 @@ export default class MessageReceiver
|
|||
// EventTarget types
|
||||
//
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'reconnect',
|
||||
handler: (ev: ReconnectEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'empty',
|
||||
handler: (ev: EmptyEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'progress',
|
||||
handler: (ev: ProgressEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'typing',
|
||||
handler: (ev: TypingEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'error',
|
||||
handler: (ev: ErrorEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'delivery',
|
||||
handler: (ev: DeliveryEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'decryption-error',
|
||||
handler: (ev: DecryptionErrorEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(name: 'sent', handler: (ev: SentEvent) => void): void;
|
||||
public override addEventListener(
|
||||
name: 'sent',
|
||||
handler: (ev: SentEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'profileKeyUpdate',
|
||||
handler: (ev: ProfileKeyUpdateEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'message',
|
||||
handler: (ev: MessageEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'retry-request',
|
||||
handler: (ev: RetryRequestEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(name: 'read', handler: (ev: ReadEvent) => void): void;
|
||||
public override addEventListener(
|
||||
name: 'read',
|
||||
handler: (ev: ReadEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(name: 'view', handler: (ev: ViewEvent) => void): void;
|
||||
public override addEventListener(
|
||||
name: 'view',
|
||||
handler: (ev: ViewEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'configuration',
|
||||
handler: (ev: ConfigurationEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'viewOnceOpenSync',
|
||||
handler: (ev: ViewOnceOpenSyncEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'messageRequestResponse',
|
||||
handler: (ev: MessageRequestResponseEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'fetchLatest',
|
||||
handler: (ev: FetchLatestEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(name: 'keys', handler: (ev: KeysEvent) => void): void;
|
||||
public override addEventListener(
|
||||
name: 'keys',
|
||||
handler: (ev: KeysEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'sticker-pack',
|
||||
handler: (ev: StickerPackEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'verified',
|
||||
handler: (ev: VerifiedEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'readSync',
|
||||
handler: (ev: ReadSyncEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'viewSync',
|
||||
handler: (ev: ViewSyncEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'contact',
|
||||
handler: (ev: ContactEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'contactSync',
|
||||
handler: (ev: ContactSyncEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'group',
|
||||
handler: (ev: GroupEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'groupSync',
|
||||
handler: (ev: GroupSyncEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'envelope',
|
||||
handler: (ev: EnvelopeEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(name: string, handler: EventHandler): void {
|
||||
public override addEventListener(name: string, handler: EventHandler): void {
|
||||
return super.addEventListener(name, handler);
|
||||
}
|
||||
|
||||
public removeEventListener(name: string, handler: EventHandler): void {
|
||||
public override removeEventListener(
|
||||
name: string,
|
||||
handler: EventHandler
|
||||
): void {
|
||||
return super.removeEventListener(name, handler);
|
||||
}
|
||||
|
||||
|
|
|
@ -626,10 +626,13 @@ export class SocketManager extends EventListener {
|
|||
|
||||
// EventEmitter types
|
||||
|
||||
public on(type: 'authError', callback: (error: HTTPError) => void): this;
|
||||
public on(type: 'statusChange', callback: () => void): this;
|
||||
public override on(
|
||||
type: 'authError',
|
||||
callback: (error: HTTPError) => void
|
||||
): this;
|
||||
public override on(type: 'statusChange', callback: () => void): this;
|
||||
|
||||
public on(
|
||||
public override on(
|
||||
type: string | symbol,
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
listener: (...args: Array<any>) => void
|
||||
|
@ -637,11 +640,11 @@ export class SocketManager extends EventListener {
|
|||
return super.on(type, listener);
|
||||
}
|
||||
|
||||
public emit(type: 'authError', error: HTTPError): boolean;
|
||||
public emit(type: 'statusChange'): boolean;
|
||||
public override emit(type: 'authError', error: HTTPError): boolean;
|
||||
public override emit(type: 'statusChange'): boolean;
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
public emit(type: string | symbol, ...args: Array<any>): boolean {
|
||||
public override emit(type: string | symbol, ...args: Array<any>): boolean {
|
||||
return super.emit(type, ...args);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -163,12 +163,12 @@ export default class WebSocketResource extends EventTarget {
|
|||
this.addEventListener('close', () => this.onClose());
|
||||
}
|
||||
|
||||
public addEventListener(
|
||||
public override addEventListener(
|
||||
name: 'close',
|
||||
handler: (ev: CloseEvent) => void
|
||||
): void;
|
||||
|
||||
public addEventListener(name: string, handler: EventHandler): void {
|
||||
public override addEventListener(name: string, handler: EventHandler): void {
|
||||
return super.addEventListener(name, handler);
|
||||
}
|
||||
|
||||
|
|
|
@ -312,7 +312,7 @@ export class ConversationView extends window.Backbone.View<ConversationModel> {
|
|||
this.updateAttachmentsView();
|
||||
}
|
||||
|
||||
events(): Record<string, string> {
|
||||
override events(): Record<string, string> {
|
||||
return {
|
||||
drop: 'onDrop',
|
||||
paste: 'onPaste',
|
||||
|
|
|
@ -11,7 +11,7 @@ window.Whisper = window.Whisper || {};
|
|||
const { Whisper } = window;
|
||||
|
||||
class ConversationStack extends Backbone.View {
|
||||
public className = 'conversation-stack';
|
||||
public override className = 'conversation-stack';
|
||||
|
||||
private conversationStack: Array<ConversationModel> = [];
|
||||
|
||||
|
@ -59,7 +59,7 @@ class ConversationStack extends Backbone.View {
|
|||
this.render();
|
||||
}
|
||||
|
||||
public render(): ConversationStack {
|
||||
public override render(): ConversationStack {
|
||||
const isAnyConversationOpen = Boolean(this.conversationStack.length);
|
||||
this.$('.no-conversation-open').toggle(!isAnyConversationOpen);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue