mirror of
https://github.com/matrix-org/matrix-hookshot.git
synced 2025-03-10 13:17:08 +00:00
Make various typechecking improvements (#505)
* Make various typechecking improvements * Use `Record<never, never>` to cover `{}`
This commit is contained in:
parent
911a73abba
commit
80a26283e9
1
changelog.d/505.misc
Normal file
1
changelog.d/505.misc
Normal file
@ -0,0 +1 @@
|
||||
Improve some type-checking in the codebase.
|
@ -1042,7 +1042,7 @@ ${event.release.body}`;
|
||||
}
|
||||
}
|
||||
|
||||
public getProvisionerDetails() {
|
||||
public getProvisionerDetails(): GitHubRepoResponseItem {
|
||||
return {
|
||||
...GitHubRepoConnection.getProvisionerDetails(this.as.botUserId),
|
||||
id: this.connectionId,
|
||||
|
@ -257,7 +257,7 @@ export class GitLabRepoConnection extends CommandConnection<GitLabRepoConnection
|
||||
if (client) {
|
||||
results.push({
|
||||
name,
|
||||
} as GitLabRepoConnectionInstanceTarget);
|
||||
});
|
||||
}
|
||||
}
|
||||
return results;
|
||||
@ -325,7 +325,7 @@ export class GitLabRepoConnection extends CommandConnection<GitLabRepoConnection
|
||||
return GitLabRepoConnection.EventTypes.includes(eventType) && this.stateKey === stateKey;
|
||||
}
|
||||
|
||||
public getProvisionerDetails() {
|
||||
public getProvisionerDetails(): GitLabRepoResponseItem {
|
||||
return {
|
||||
...GitLabRepoConnection.getProvisionerDetails(this.as.botUserId),
|
||||
id: this.connectionId,
|
||||
|
@ -234,7 +234,7 @@ export class JiraProjectConnection extends CommandConnection<JiraProjectConnecti
|
||||
}
|
||||
}
|
||||
|
||||
public getProvisionerDetails() {
|
||||
public getProvisionerDetails(): JiraProjectResponseItem {
|
||||
return {
|
||||
...JiraProjectConnection.getProvisionerDetails(this.as.botUserId),
|
||||
id: this.connectionId,
|
||||
|
@ -156,7 +156,7 @@ export class BridgeWidgetApi {
|
||||
if (!connection.provisionerUpdateConfig || !connection.getProvisionerDetails) {
|
||||
throw new ApiError("Connection type does not support updates", ErrCode.UnsupportedOperation);
|
||||
}
|
||||
await connection.provisionerUpdateConfig(req.userId, req.body);
|
||||
connection.provisionerUpdateConfig(req.userId, req.body);
|
||||
res.send(connection.getProvisionerDetails(true));
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ import { ExchangeOpenAPIRequestBody, ExchangeOpenAPIResponseBody } from "matrix-
|
||||
import { WidgetApi } from 'matrix-widget-api';
|
||||
import { ApiError } from '../src/api';
|
||||
import { FunctionComponent } from 'preact';
|
||||
import { IConnectionState } from '../src/Connections';
|
||||
export class BridgeAPIError extends Error {
|
||||
constructor(msg: string, public readonly body: ApiError) {
|
||||
super(msg);
|
||||
@ -116,11 +117,11 @@ export class BridgeAPI {
|
||||
return this.request('GET', `/widgetapi/v1/${encodeURIComponent(roomId)}/connections/${encodeURIComponent(service)}`);
|
||||
}
|
||||
|
||||
async createConnection(roomId: string, type: string, config: unknown) {
|
||||
async createConnection(roomId: string, type: string, config: IConnectionState) {
|
||||
return this.request('POST', `/widgetapi/v1/${encodeURIComponent(roomId)}/connections/${encodeURIComponent(type)}`, config);
|
||||
}
|
||||
|
||||
async updateConnection(roomId: string, connectionId: string, config: unknown) {
|
||||
async updateConnection(roomId: string, connectionId: string, config: IConnectionState) {
|
||||
return this.request('PUT', `/widgetapi/v1/${encodeURIComponent(roomId)}/connections/${encodeURIComponent(connectionId)}`, config);
|
||||
}
|
||||
|
||||
@ -128,8 +129,8 @@ export class BridgeAPI {
|
||||
return this.request('DELETE', `/widgetapi/v1/${encodeURIComponent(roomId)}/connections/${encodeURIComponent(connectionId)}`);
|
||||
}
|
||||
|
||||
getConnectionTargets<R>(type: string, filters?: unknown): Promise<R[]> {
|
||||
const searchParams = filters && new URLSearchParams(filters as Record<string, string>);
|
||||
getConnectionTargets<R>(type: string, filters?: Record<never, never>|Record<string, string>): Promise<R[]> {
|
||||
const searchParams = filters && new URLSearchParams(filters);
|
||||
return this.request('GET', `/widgetapi/v1/targets/${encodeURIComponent(type)}${searchParams ? `?${searchParams}` : ''}`);
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ const ConnectionSearch: FunctionComponent<{api: BridgeAPI, onPicked: (state: Git
|
||||
try {
|
||||
const res = await api.getConnectionTargets<GitLabRepoConnectionTarget>(EventType, filter);
|
||||
if (!filter.instance) {
|
||||
setInstances(res);
|
||||
setInstances(res as GitLabRepoConnectionInstanceTarget[]);
|
||||
if (res[0]) {
|
||||
setFilter({instance: res[0].name, search: ""});
|
||||
}
|
||||
@ -82,12 +82,12 @@ const ConnectionSearch: FunctionComponent<{api: BridgeAPI, onPicked: (state: Git
|
||||
{instances === null && <p> Loading GitLab instances. </p>}
|
||||
{instances?.length === 0 && <p> You are not logged into any GitLab instances. </p>}
|
||||
{searchError && <ErrorPane> {searchError} </ErrorPane> }
|
||||
<InputField visible={instances ? instances.length > 0 : false} label="GitLab Instance" noPadding={true}>
|
||||
<InputField visible={!!instances?.length} label="GitLab Instance" noPadding={true}>
|
||||
<select onChange={onInstancePicked}>
|
||||
{instanceListResults}
|
||||
</select>
|
||||
</InputField>
|
||||
<InputField visible={instances ? instances.length > 0 : false} label="Project" noPadding={true}>
|
||||
<InputField visible={!!instances?.length} label="Project" noPadding={true}>
|
||||
<small>{currentProjectPath ?? ""}</small>
|
||||
<input onChange={updateSearchFn} value={filter.search} list="gitlab-projects" type="text" />
|
||||
<datalist id="gitlab-projects">
|
||||
|
@ -4,9 +4,10 @@ import { BridgeAPI, BridgeAPIError } from "../../BridgeAPI";
|
||||
import { ErrorPane, ListItem } from "../elements";
|
||||
import style from "./RoomConfig.module.scss";
|
||||
import { GetConnectionsResponseItem } from "../../../src/provisioning/api";
|
||||
import { IConnectionState } from "../../../src/Connections";
|
||||
|
||||
|
||||
export interface ConnectionConfigurationProps<SConfig, ConnectionType extends GetConnectionsResponseItem, ConnectionState> {
|
||||
export interface ConnectionConfigurationProps<SConfig, ConnectionType extends GetConnectionsResponseItem, ConnectionState extends IConnectionState> {
|
||||
serviceConfig: SConfig;
|
||||
onSave: (newConfig: ConnectionState) => void,
|
||||
existingConnection?: ConnectionType;
|
||||
@ -14,7 +15,7 @@ export interface ConnectionConfigurationProps<SConfig, ConnectionType extends Ge
|
||||
api: BridgeAPI;
|
||||
}
|
||||
|
||||
interface IRoomConfigProps<SConfig, ConnectionType extends GetConnectionsResponseItem, ConnectionState> {
|
||||
interface IRoomConfigProps<SConfig, ConnectionType extends GetConnectionsResponseItem, ConnectionState extends IConnectionState> {
|
||||
api: BridgeAPI;
|
||||
roomId: string;
|
||||
type: string;
|
||||
@ -30,7 +31,7 @@ interface IRoomConfigProps<SConfig, ConnectionType extends GetConnectionsRespons
|
||||
connectionConfigComponent: FunctionComponent<ConnectionConfigurationProps<SConfig, ConnectionType, ConnectionState>>;
|
||||
}
|
||||
|
||||
export const RoomConfig = function<SConfig, ConnectionType extends GetConnectionsResponseItem, ConnectionState>(props: IRoomConfigProps<SConfig, ConnectionType, ConnectionState>) {
|
||||
export const RoomConfig = function<SConfig, ConnectionType extends GetConnectionsResponseItem, ConnectionState extends IConnectionState>(props: IRoomConfigProps<SConfig, ConnectionType, ConnectionState>) {
|
||||
const { api, roomId, type, headerImg, text, listItemName, connectionEventType } = props;
|
||||
const ConnectionConfigComponent = props.connectionConfigComponent;
|
||||
const [ error, setError ] = useState<null|{header?: string, message: string}>(null);
|
||||
@ -69,7 +70,7 @@ export const RoomConfig = function<SConfig, ConnectionType extends GetConnection
|
||||
})
|
||||
}, [api, type]);
|
||||
|
||||
const handleSaveOnCreation = useCallback((config) => {
|
||||
const handleSaveOnCreation = useCallback((config: ConnectionState) => {
|
||||
api.createConnection(roomId, connectionEventType, config).then(() => {
|
||||
// Force reload
|
||||
incrementConnectionKey(undefined);
|
||||
|
Loading…
x
Reference in New Issue
Block a user