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:
parent
7a36ba0fde
commit
030b7e90bf
683 changed files with 3459 additions and 3013 deletions
|
@ -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 } =
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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} />
|
||||
|
|
|
@ -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(() => {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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(() => {
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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 }, "");
|
||||
})(),
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue