Merge branch 'main' into invite-link

This commit is contained in:
Jorik Schellekens 2020-09-24 10:46:08 +01:00 committed by GitHub
commit e8527df962
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 67 additions and 63 deletions

View File

@ -37,9 +37,14 @@ const Fractal: TextClient = {
case LinkKind.Alias:
case LinkKind.RoomId:
case LinkKind.UserId:
return <span>Click the '+' button in the top right</span>;
return (
<span>
Click the '+' button in the top right and paste the
identifier
</span>
);
default:
return <span>Weechat doesn't support this kind of link</span>;
return <span>Fractal doesn't support this kind of link</span>;
}
},
copyString: (link) => {
@ -63,7 +68,7 @@ const Fractal: TextClient = {
}
},
description: 'Command-line Matrix interface using Weechat',
description: 'Fractal is a Matrix Client written in Rust',
};
export default Fractal;

View File

@ -39,19 +39,22 @@ const ClientTile: React.FC<IProps> = ({ client, link }: IProps) => {
clientTileLink: client.kind === ClientKind.LINKED_CLIENT,
});
const inviteButton =
client.kind === ClientKind.LINKED_CLIENT ? (
<Button>Accept invite</Button>
) : (
<Button
onClick={() =>
navigator.clipboard.writeText(client.copyString(link))
}
flashChildren="Invite copied"
>
Copy invite
</Button>
);
let inviteButton: JSX.Element = <></>;
if (client.kind === ClientKind.LINKED_CLIENT) {
inviteButton = <Button>Accept invite</Button>;
} else {
const copyString = client.copyString(link);
if (copyString !== '') {
inviteButton = (
<Button
onClick={() => navigator.clipboard.writeText(copyString)}
flashChildren="Invite copied"
>
Copy invite
</Button>
);
}
}
let clientTile = (
<Tile className={className}>

View File

@ -35,7 +35,7 @@ limitations under the License.
color: $foreground;
}
h1 {
.linkHeader h1 {
word-break: break-all;
}

View File

@ -128,7 +128,7 @@ const LinkCreatedTile: React.FC<ILinkCreatedTileProps> = (props) => {
<div>New link</div>
<img src={refreshIcon} alt="Go back to matrix.to home page" />
</button>
<h1>{props.link}</h1>
<h1 className="linkHeader">{props.link}</h1>
<Button
flashChildren={'Copied'}
icon={copyIcon}

View File

@ -17,14 +17,14 @@ limitations under the License.
import { object, string, TypeOf } from 'zod';
const EventSchema = object({
content: object({}).nonstrict(),
type: string(),
event_id: string(),
sender: string(),
origin_server_ts: string(),
unsigned: object({}).nonstrict().optional(),
room_id: string(),
});
content: object({}).nonstrict(),
type: string(),
event_id: string(),
sender: string(),
origin_server_ts: string(),
unsigned: object({}).nonstrict().optional(),
room_id: string(),
}).nonstrict();
export type Event = TypeOf<typeof EventSchema>;
export default EventSchema;

View File

@ -17,27 +17,25 @@ limitations under the License.
import { object, array, string, boolean, number, TypeOf } from 'zod';
export const RoomSchema = object({
aliases: array(string()).optional(),
canonical_alias: string().optional(),
name: string().optional(),
num_joined_members: number(),
room_id: string(),
topic: string().optional(),
world_readable: boolean(),
guest_can_join: boolean(),
avatar_url: string().optional(),
});
aliases: array(string()).optional(),
canonical_alias: string().optional(),
name: string().optional(),
num_joined_members: number(),
room_id: string(),
topic: string().optional(),
world_readable: boolean(),
guest_can_join: boolean(),
avatar_url: string().optional(),
}).nonstrict();
const PublicRoomsSchema = object({
chunk: array(RoomSchema),
next_batch: string().optional(),
prev_batch: string().optional(),
total_room_count_estimate: number().optional(),
});
chunk: array(RoomSchema),
next_batch: string().optional(),
prev_batch: string().optional(),
total_room_count_estimate: number().optional(),
}).nonstrict();
export type Room = TypeOf<typeof RoomSchema>;
export type PublicRooms = TypeOf<typeof PublicRoomsSchema>;
export default PublicRoomsSchema;

View File

@ -17,10 +17,9 @@ limitations under the License.
import { object, array, string, TypeOf } from 'zod';
const RoomAliasSchema = object({
room_id: string(),
servers: array(string()),
});
room_id: string(),
servers: array(string()),
}).nonstrict();
export type RoomAlias = TypeOf<typeof RoomAliasSchema>;
export default RoomAliasSchema;

View File

@ -17,10 +17,9 @@ limitations under the License.
import { object, string, TypeOf } from 'zod';
const UserSchema = object({
avatar_url: string().optional(),
displayname: string().optional(),
})
avatar_url: string().optional(),
displayname: string().optional(),
}).nonstrict();
export type User = TypeOf<typeof UserSchema>;
export default UserSchema;

View File

@ -17,13 +17,13 @@ limitations under the License.
import { object, string, TypeOf } from 'zod';
const WellKnownSchema = object({
'm.homeserver': object({
'base_url': string().url(),
}),
'm.identity_server': object({
'base_url': string().url(),
}),
});
'm.homeserver': object({
base_url: string().url(),
}),
'm.identity_server': object({
base_url: string().url(),
}).optional(),
}).nonstrict();
export type WellKnown = TypeOf<typeof WellKnownSchema>;
export default WellKnownSchema;

View File

@ -16,13 +16,13 @@ import {
*/
type Verifier<A> = [RegExp, A];
export const roomVerifiers: Verifier<LinkKind.Alias | LinkKind.RoomId>[] = [
[/^#([^/:]+?):(.+)$/, LinkKind.Alias],
[/^!([^/:]+?):(.+)$/, LinkKind.RoomId],
[/^#([^:]*):(.+)$/, LinkKind.Alias],
[/^!([^:]*):(.+)$/, LinkKind.RoomId],
];
export const verifiers: Verifier<LinkKind>[] = [
[/^[!#]([^/:]+?):(.+?)\/\$([^/:]+?)$/, LinkKind.Permalink],
[/^@([^/:]+?):(.+)$/, LinkKind.UserId],
[/^\+([^/:]+?):(.+)$/, LinkKind.GroupId],
[/^[!#]([^:]*):(.+)\/\$([^:]+):(.+)$/, LinkKind.Permalink],
[/^@([^:]+):(.+)$/, LinkKind.UserId],
[/^\+([^:]+):(.+)$/, LinkKind.GroupId],
...roomVerifiers,
];