Enable @typescript-eslint/explicit-function-return-type in /src (#9788)

* Enable `@typescript-eslint/explicit-member-accessibility` on /src

* Prettier

* Enable `@typescript-eslint/explicit-function-return-type` in /src

* Fix types

* tsc strict fixes

* Delint

* Fix test

* Fix bad merge
This commit is contained in:
Michael Telatynski 2023-01-12 13:25:14 +00:00 committed by GitHub
parent 7a36ba0fde
commit 030b7e90bf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
683 changed files with 3459 additions and 3013 deletions

View file

@ -38,7 +38,9 @@ import Modal from "../../../Modal";
import DevtoolsDialog from "../dialogs/DevtoolsDialog";
import { SdkContextClass } from "../../../contexts/SDKContext";
const QuickSettingsButton = ({ isPanelCollapsed = false }) => {
const QuickSettingsButton: React.FC<{
isPanelCollapsed: boolean;
}> = ({ isPanelCollapsed = false }) => {
const [menuDisplayed, handle, openMenu, closeMenu] = useContextMenu<HTMLDivElement>();
const { [MetaSpace.Favourites]: favouritesEnabled, [MetaSpace.People]: peopleEnabled } =

View file

@ -51,7 +51,7 @@ const QuickThemeSwitcher: React.FC<Props> = ({ requestClose }) => {
const selectedTheme = useSystemTheme ? MATCH_SYSTEM_THEME_ID : theme;
const onOptionChange = async (newTheme: string) => {
const onOptionChange = async (newTheme: string): Promise<void> => {
PosthogTrackers.trackInteraction("WebQuickSettingsThemeDropdown");
try {

View file

@ -33,11 +33,11 @@ interface IProps {
setTopic(topic: string): void;
}
export const SpaceAvatar = ({
export const SpaceAvatar: React.FC<Pick<IProps, "avatarUrl" | "avatarDisabled" | "setAvatar">> = ({
avatarUrl,
avatarDisabled = false,
setAvatar,
}: Pick<IProps, "avatarUrl" | "avatarDisabled" | "setAvatar">) => {
}) => {
const avatarUploadRef = useRef<HTMLInputElement>();
const [avatar, setAvatarDataUrl] = useState(avatarUrl); // avatar data url cache
@ -112,7 +112,7 @@ export const SpaceAvatar = ({
);
};
const SpaceBasicSettings = ({
const SpaceBasicSettings: React.FC<IProps> = ({
avatarUrl,
avatarDisabled = false,
setAvatar,
@ -122,7 +122,7 @@ const SpaceBasicSettings = ({
topic = "",
topicDisabled = false,
setTopic,
}: IProps) => {
}) => {
return (
<div className="mx_SpaceBasicSettings">
<SpaceAvatar avatarUrl={avatarUrl} avatarDisabled={avatarDisabled} setAvatar={setAvatar} />

View file

@ -37,7 +37,12 @@ interface ISpecificChildrenPickerProps {
onChange(selected: boolean, room: Room): void;
}
const SpecificChildrenPicker = ({ filterPlaceholder, rooms, selected, onChange }: ISpecificChildrenPickerProps) => {
const SpecificChildrenPicker: React.FC<ISpecificChildrenPickerProps> = ({
filterPlaceholder,
rooms,
selected,
onChange,
}) => {
const [query, setQuery] = useState("");
const lcQuery = query.toLowerCase().trim();
@ -94,7 +99,7 @@ interface IProps {
onChange(rooms: Room[]): void;
}
const SpaceChildrenPicker = ({
const SpaceChildrenPicker: React.FC<IProps> = ({
space,
spaceChildren,
selected,
@ -102,7 +107,7 @@ const SpaceChildrenPicker = ({
noneLabel,
allLabel,
specificLabel,
}: IProps) => {
}) => {
const [state, setState] = useState<string>(noneLabel ? Target.None : Target.All);
useEffect(() => {

View file

@ -27,7 +27,7 @@ import ContextMenu, { ChevronFace } from "../../structures/ContextMenu";
import createRoom, { IOpts as ICreateOpts } from "../../../createRoom";
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import SpaceBasicSettings, { SpaceAvatar } from "./SpaceBasicSettings";
import AccessibleButton from "../elements/AccessibleButton";
import AccessibleButton, { ButtonEvent } from "../elements/AccessibleButton";
import Field from "../elements/Field";
import withValidation from "../elements/Validation";
import RoomAliasField from "../elements/RoomAliasField";
@ -47,7 +47,7 @@ export const createSpace = async (
avatar?: string | File,
createOpts: Partial<ICreateRoomOpts> = {},
otherOpts: Partial<Omit<ICreateOpts, "createOpts">> = {},
) => {
): Promise<string> => {
return createRoom({
createOpts: {
name,
@ -76,7 +76,12 @@ export const createSpace = async (
});
};
const SpaceCreateMenuType = ({ title, description, className, onClick }) => {
const SpaceCreateMenuType: React.FC<{
title: string;
description: string;
className: string;
onClick(): void;
}> = ({ title, description, className, onClick }) => {
return (
<AccessibleButton className={classNames("mx_SpaceCreateMenuType", className)} onClick={onClick}>
<h3>{title}</h3>
@ -104,7 +109,9 @@ const nameToLocalpart = (name: string): string => {
};
// XXX: Temporary for the Spaces release only
export const SpaceFeedbackPrompt = ({ onClick }: { onClick?: () => void }) => {
export const SpaceFeedbackPrompt: React.FC<{
onClick?(): void;
}> = ({ onClick }) => {
if (!shouldShowFeedback()) return null;
return (
@ -165,7 +172,7 @@ export const SpaceCreateForm: React.FC<ISpaceCreateFormProps> = ({
const cli = useContext(MatrixClientContext);
const domain = cli.getDomain();
const onKeyDown = (ev: KeyboardEvent) => {
const onKeyDown = (ev: KeyboardEvent): void => {
const action = getKeyBindingsManager().getAccessibilityAction(ev);
switch (action) {
case KeyBindingAction.Enter:
@ -226,7 +233,9 @@ export const SpaceCreateForm: React.FC<ISpaceCreateFormProps> = ({
);
};
const SpaceCreateMenu = ({ onFinished }) => {
const SpaceCreateMenu: React.FC<{
onFinished(): void;
}> = ({ onFinished }) => {
const [visibility, setVisibility] = useState<Visibility>(null);
const [busy, setBusy] = useState<boolean>(false);
@ -237,7 +246,7 @@ const SpaceCreateMenu = ({ onFinished }) => {
const [avatar, setAvatar] = useState<File>(null);
const [topic, setTopic] = useState<string>("");
const onSpaceCreateClick = async (e) => {
const onSpaceCreateClick = async (e: ButtonEvent): Promise<void> => {
e.preventDefault();
if (busy) return;

View file

@ -88,11 +88,11 @@ const useSpaces = (): [Room[], MetaSpace[], Room[], SpaceKey] => {
return [invites, metaSpaces, actualSpaces, activeSpace];
};
export const HomeButtonContextMenu = ({
export const HomeButtonContextMenu: React.FC<ComponentProps<typeof SpaceContextMenu>> = ({
onFinished,
hideHeader,
...props
}: ComponentProps<typeof SpaceContextMenu>) => {
}) => {
const allRoomsInHome = useSettingValue<boolean>("Spaces.allRoomsInHome");
return (
@ -119,7 +119,7 @@ interface IMetaSpaceButtonProps extends ComponentProps<typeof SpaceButton> {
type MetaSpaceButtonProps = Pick<IMetaSpaceButtonProps, "selected" | "isPanelCollapsed">;
const MetaSpaceButton = ({ selected, isPanelCollapsed, ...props }: IMetaSpaceButtonProps) => {
const MetaSpaceButton: React.FC<IMetaSpaceButtonProps> = ({ selected, isPanelCollapsed, ...props }) => {
return (
<li
className={classNames("mx_SpaceItem", {
@ -139,7 +139,7 @@ const getHomeNotificationState = (): NotificationState => {
: SpaceStore.instance.getNotificationState(MetaSpace.Home);
};
const HomeButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps) => {
const HomeButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollapsed }) => {
const allRoomsInHome = useEventEmitterState(SpaceStore.instance, UPDATE_HOME_BEHAVIOUR, () => {
return SpaceStore.instance.allRoomsInHome;
});
@ -164,7 +164,7 @@ const HomeButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps) => {
);
};
const FavouritesButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps) => {
const FavouritesButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollapsed }) => {
return (
<MetaSpaceButton
spaceKey={MetaSpace.Favourites}
@ -177,7 +177,7 @@ const FavouritesButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps)
);
};
const PeopleButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps) => {
const PeopleButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollapsed }) => {
return (
<MetaSpaceButton
spaceKey={MetaSpace.People}
@ -190,7 +190,7 @@ const PeopleButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps) => {
);
};
const OrphansButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps) => {
const OrphansButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollapsed }) => {
return (
<MetaSpaceButton
spaceKey={MetaSpace.Orphans}
@ -203,10 +203,10 @@ const OrphansButton = ({ selected, isPanelCollapsed }: MetaSpaceButtonProps) =>
);
};
const CreateSpaceButton = ({
const CreateSpaceButton: React.FC<Pick<IInnerSpacePanelProps, "isPanelCollapsed" | "setPanelCollapsed">> = ({
isPanelCollapsed,
setPanelCollapsed,
}: Pick<IInnerSpacePanelProps, "isPanelCollapsed" | "setPanelCollapsed">) => {
}) => {
const [menuDisplayed, handle, openMenu, closeMenu] = useContextMenu<HTMLElement>();
useEffect(() => {
@ -328,7 +328,7 @@ const InnerSpacePanel = React.memo<IInnerSpacePanelProps>(
},
);
const SpacePanel = () => {
const SpacePanel: React.FC = () => {
const [isPanelCollapsed, setPanelCollapsed] = useState(true);
const ref = useRef<HTMLDivElement>();
useLayoutEffect(() => {

View file

@ -32,14 +32,14 @@ interface IProps {
onFinished?(): void;
}
const SpacePublicShare = ({ space, onFinished }: IProps) => {
const SpacePublicShare: React.FC<IProps> = ({ space, onFinished }) => {
const [copiedText, setCopiedText] = useState(_t("Click to copy"));
return (
<div className="mx_SpacePublicShare">
<AccessibleButton
className="mx_SpacePublicShare_shareButton"
onClick={async () => {
onClick={async (): Promise<void> => {
const permalinkCreator = new RoomPermalinkCreator(space);
permalinkCreator.load();
const success = await copyPlaintext(permalinkCreator.forShareableRoom());

View file

@ -34,7 +34,7 @@ interface IProps extends IDialogProps {
space: Room;
}
const SpaceSettingsGeneralTab = ({ matrixClient: cli, space, onFinished }: IProps) => {
const SpaceSettingsGeneralTab: React.FC<IProps> = ({ matrixClient: cli, space, onFinished }) => {
const [busy, setBusy] = useState(false);
const [error, setError] = useState("");
@ -53,20 +53,20 @@ const SpaceSettingsGeneralTab = ({ matrixClient: cli, space, onFinished }: IProp
const canSetTopic = space.currentState.maySendStateEvent(EventType.RoomTopic, userId);
const topicChanged = topic !== currentTopic;
const onCancel = () => {
const onCancel = (): void => {
setNewAvatar(null);
setName(space.name);
setTopic(currentTopic);
};
const onSave = async () => {
const onSave = async (): Promise<void> => {
setBusy(true);
const promises: Promise<unknown>[] = [];
if (avatarChanged) {
if (newAvatar) {
promises.push(
(async () => {
(async (): Promise<void> => {
const { content_uri: url } = await cli.uploadContent(newAvatar);
await cli.sendStateEvent(space.roomId, EventType.RoomAvatar, { url }, "");
})(),

View file

@ -37,10 +37,10 @@ interface IProps {
closeSettingsFn(): void;
}
const SpaceSettingsVisibilityTab = ({ matrixClient: cli, space, closeSettingsFn }: IProps) => {
const SpaceSettingsVisibilityTab: React.FC<IProps> = ({ matrixClient: cli, space, closeSettingsFn }) => {
const [error, setError] = useState("");
const serverSupportsExploringSpaces = useAsyncMemo<boolean>(
async () => {
async (): Promise<boolean> => {
return cli.doesServerSupportUnstableFeature("org.matrix.msc3827.stable");
},
[cli],
@ -153,14 +153,14 @@ const SpaceSettingsVisibilityTab = ({ matrixClient: cli, space, closeSettingsFn
>
<JoinRuleSettings
room={space}
onError={() => setError(_t("Failed to update the visibility of this space"))}
onError={(): void => setError(_t("Failed to update the visibility of this space"))}
closeSettingsFn={closeSettingsFn}
/>
{advancedSection}
<div className="mx_SettingsTab_toggleWithDescription">
<LabelledToggleSwitch
value={historyVisibility === HistoryVisibility.WorldReadable}
onChange={(checked: boolean) => {
onChange={(checked: boolean): void => {
setHistoryVisibility(checked ? HistoryVisibility.WorldReadable : HistoryVisibility.Shared);
}}
disabled={!canSetHistoryVisibility}

View file

@ -101,7 +101,7 @@ export const SpaceButton = forwardRef<HTMLElement, IButtonProps>(
ariaLabel = _t("Jump to first invite.");
}
const jumpToNotification = (ev: MouseEvent) => {
const jumpToNotification = (ev: MouseEvent): void => {
ev.stopPropagation();
ev.preventDefault();
SpaceStore.instance.setActiveRoomInSpace(spaceKey ?? space.roomId);
@ -132,8 +132,9 @@ export const SpaceButton = forwardRef<HTMLElement, IButtonProps>(
);
}
const viewSpaceHome = () => defaultDispatcher.dispatch({ action: Action.ViewRoom, room_id: space.roomId });
const activateSpace = () => SpaceStore.instance.setActiveSpace(spaceKey ?? space.roomId);
const viewSpaceHome = (): void =>
defaultDispatcher.dispatch({ action: Action.ViewRoom, room_id: space.roomId });
const activateSpace = (): void => SpaceStore.instance.setActiveSpace(spaceKey ?? space.roomId);
const onClick = props.onClick ?? (selected && space ? viewSpaceHome : activateSpace);
return (
@ -217,34 +218,34 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> {
this.props.space.on(RoomEvent.Name, this.onRoomNameChange);
}
public componentWillUnmount() {
public componentWillUnmount(): void {
SpaceStore.instance.off(this.props.space.roomId, this.onSpaceUpdate);
this.props.space.off(RoomEvent.Name, this.onRoomNameChange);
}
private onSpaceUpdate = () => {
private onSpaceUpdate = (): void => {
this.setState({
childSpaces: this.childSpaces,
});
};
private onRoomNameChange = () => {
private onRoomNameChange = (): void => {
this.setState({
name: this.props.space.name,
});
};
private get childSpaces() {
private get childSpaces(): Room[] {
return SpaceStore.instance
.getChildSpaces(this.props.space.roomId)
.filter((s) => !this.props.parents?.has(s.roomId));
}
private get isCollapsed() {
private get isCollapsed(): boolean {
return this.state.collapsed || this.props.isPanelCollapsed;
}
private toggleCollapse = (evt) => {
private toggleCollapse = (evt: ButtonEvent): void => {
if (this.props.onExpand && this.isCollapsed) {
this.props.onExpand();
}
@ -261,7 +262,7 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> {
evt.stopPropagation();
};
private onKeyDown = (ev: React.KeyboardEvent) => {
private onKeyDown = (ev: React.KeyboardEvent): void => {
let handled = true;
const action = getKeyBindingsManager().getRoomListAction(ev);
const hasChildren = this.state.childSpaces?.length;
@ -298,7 +299,7 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> {
}
};
public render() {
public render(): JSX.Element {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const {
space,