Merge branch 'main' into invite-link
This commit is contained in:
commit
e8527df962
10 changed files with 67 additions and 63 deletions
|
@ -37,9 +37,14 @@ const Fractal: TextClient = {
|
||||||
case LinkKind.Alias:
|
case LinkKind.Alias:
|
||||||
case LinkKind.RoomId:
|
case LinkKind.RoomId:
|
||||||
case LinkKind.UserId:
|
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:
|
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) => {
|
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;
|
export default Fractal;
|
||||||
|
|
|
@ -39,19 +39,22 @@ const ClientTile: React.FC<IProps> = ({ client, link }: IProps) => {
|
||||||
clientTileLink: client.kind === ClientKind.LINKED_CLIENT,
|
clientTileLink: client.kind === ClientKind.LINKED_CLIENT,
|
||||||
});
|
});
|
||||||
|
|
||||||
const inviteButton =
|
let inviteButton: JSX.Element = <></>;
|
||||||
client.kind === ClientKind.LINKED_CLIENT ? (
|
if (client.kind === ClientKind.LINKED_CLIENT) {
|
||||||
<Button>Accept invite</Button>
|
inviteButton = <Button>Accept invite</Button>;
|
||||||
) : (
|
} else {
|
||||||
|
const copyString = client.copyString(link);
|
||||||
|
if (copyString !== '') {
|
||||||
|
inviteButton = (
|
||||||
<Button
|
<Button
|
||||||
onClick={() =>
|
onClick={() => navigator.clipboard.writeText(copyString)}
|
||||||
navigator.clipboard.writeText(client.copyString(link))
|
|
||||||
}
|
|
||||||
flashChildren="Invite copied"
|
flashChildren="Invite copied"
|
||||||
>
|
>
|
||||||
Copy invite
|
Copy invite
|
||||||
</Button>
|
</Button>
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let clientTile = (
|
let clientTile = (
|
||||||
<Tile className={className}>
|
<Tile className={className}>
|
||||||
|
|
|
@ -35,7 +35,7 @@ limitations under the License.
|
||||||
color: $foreground;
|
color: $foreground;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
.linkHeader h1 {
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,7 @@ const LinkCreatedTile: React.FC<ILinkCreatedTileProps> = (props) => {
|
||||||
<div>New link</div>
|
<div>New link</div>
|
||||||
<img src={refreshIcon} alt="Go back to matrix.to home page" />
|
<img src={refreshIcon} alt="Go back to matrix.to home page" />
|
||||||
</button>
|
</button>
|
||||||
<h1>{props.link}</h1>
|
<h1 className="linkHeader">{props.link}</h1>
|
||||||
<Button
|
<Button
|
||||||
flashChildren={'Copied'}
|
flashChildren={'Copied'}
|
||||||
icon={copyIcon}
|
icon={copyIcon}
|
||||||
|
|
|
@ -24,7 +24,7 @@ const EventSchema = object({
|
||||||
origin_server_ts: string(),
|
origin_server_ts: string(),
|
||||||
unsigned: object({}).nonstrict().optional(),
|
unsigned: object({}).nonstrict().optional(),
|
||||||
room_id: string(),
|
room_id: string(),
|
||||||
});
|
}).nonstrict();
|
||||||
|
|
||||||
export type Event = TypeOf<typeof EventSchema>;
|
export type Event = TypeOf<typeof EventSchema>;
|
||||||
export default EventSchema;
|
export default EventSchema;
|
||||||
|
|
|
@ -26,18 +26,16 @@ export const RoomSchema = object({
|
||||||
world_readable: boolean(),
|
world_readable: boolean(),
|
||||||
guest_can_join: boolean(),
|
guest_can_join: boolean(),
|
||||||
avatar_url: string().optional(),
|
avatar_url: string().optional(),
|
||||||
});
|
}).nonstrict();
|
||||||
|
|
||||||
|
|
||||||
const PublicRoomsSchema = object({
|
const PublicRoomsSchema = object({
|
||||||
chunk: array(RoomSchema),
|
chunk: array(RoomSchema),
|
||||||
next_batch: string().optional(),
|
next_batch: string().optional(),
|
||||||
prev_batch: string().optional(),
|
prev_batch: string().optional(),
|
||||||
total_room_count_estimate: number().optional(),
|
total_room_count_estimate: number().optional(),
|
||||||
});
|
}).nonstrict();
|
||||||
|
|
||||||
export type Room = TypeOf<typeof RoomSchema>;
|
export type Room = TypeOf<typeof RoomSchema>;
|
||||||
export type PublicRooms = TypeOf<typeof PublicRoomsSchema>;
|
export type PublicRooms = TypeOf<typeof PublicRoomsSchema>;
|
||||||
|
|
||||||
export default PublicRoomsSchema;
|
export default PublicRoomsSchema;
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,7 @@ import { object, array, string, TypeOf } from 'zod';
|
||||||
const RoomAliasSchema = object({
|
const RoomAliasSchema = object({
|
||||||
room_id: string(),
|
room_id: string(),
|
||||||
servers: array(string()),
|
servers: array(string()),
|
||||||
});
|
}).nonstrict();
|
||||||
|
|
||||||
export type RoomAlias = TypeOf<typeof RoomAliasSchema>;
|
export type RoomAlias = TypeOf<typeof RoomAliasSchema>;
|
||||||
export default RoomAliasSchema;
|
export default RoomAliasSchema;
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,7 @@ import { object, string, TypeOf } from 'zod';
|
||||||
const UserSchema = object({
|
const UserSchema = object({
|
||||||
avatar_url: string().optional(),
|
avatar_url: string().optional(),
|
||||||
displayname: string().optional(),
|
displayname: string().optional(),
|
||||||
})
|
}).nonstrict();
|
||||||
|
|
||||||
export type User = TypeOf<typeof UserSchema>;
|
export type User = TypeOf<typeof UserSchema>;
|
||||||
export default UserSchema;
|
export default UserSchema;
|
||||||
|
|
||||||
|
|
|
@ -18,12 +18,12 @@ import { object, string, TypeOf } from 'zod';
|
||||||
|
|
||||||
const WellKnownSchema = object({
|
const WellKnownSchema = object({
|
||||||
'm.homeserver': object({
|
'm.homeserver': object({
|
||||||
'base_url': string().url(),
|
base_url: string().url(),
|
||||||
}),
|
}),
|
||||||
'm.identity_server': object({
|
'm.identity_server': object({
|
||||||
'base_url': string().url(),
|
base_url: string().url(),
|
||||||
}),
|
}).optional(),
|
||||||
});
|
}).nonstrict();
|
||||||
|
|
||||||
export type WellKnown = TypeOf<typeof WellKnownSchema>;
|
export type WellKnown = TypeOf<typeof WellKnownSchema>;
|
||||||
export default WellKnownSchema;
|
export default WellKnownSchema;
|
||||||
|
|
|
@ -16,13 +16,13 @@ import {
|
||||||
*/
|
*/
|
||||||
type Verifier<A> = [RegExp, A];
|
type Verifier<A> = [RegExp, A];
|
||||||
export const roomVerifiers: Verifier<LinkKind.Alias | LinkKind.RoomId>[] = [
|
export const roomVerifiers: Verifier<LinkKind.Alias | LinkKind.RoomId>[] = [
|
||||||
[/^#([^/:]+?):(.+)$/, LinkKind.Alias],
|
[/^#([^:]*):(.+)$/, LinkKind.Alias],
|
||||||
[/^!([^/:]+?):(.+)$/, LinkKind.RoomId],
|
[/^!([^:]*):(.+)$/, LinkKind.RoomId],
|
||||||
];
|
];
|
||||||
export const verifiers: Verifier<LinkKind>[] = [
|
export const verifiers: Verifier<LinkKind>[] = [
|
||||||
[/^[!#]([^/:]+?):(.+?)\/\$([^/:]+?)$/, LinkKind.Permalink],
|
[/^[!#]([^:]*):(.+)\/\$([^:]+):(.+)$/, LinkKind.Permalink],
|
||||||
[/^@([^/:]+?):(.+)$/, LinkKind.UserId],
|
[/^@([^:]+):(.+)$/, LinkKind.UserId],
|
||||||
[/^\+([^/:]+?):(.+)$/, LinkKind.GroupId],
|
[/^\+([^:]+):(.+)$/, LinkKind.GroupId],
|
||||||
...roomVerifiers,
|
...roomVerifiers,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue