-
Notifications
You must be signed in to change notification settings - Fork 294
Expand file tree
/
Copy pathuseUserRole.ts
More file actions
70 lines (61 loc) · 2.58 KB
/
useUserRole.ts
File metadata and controls
70 lines (61 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { useChannelStateContext } from '../../../context/ChannelStateContext';
import { useChatContext } from '../../../context/ChatContext';
import type { LocalMessage } from 'stream-chat';
export const useUserRole = (message: LocalMessage, disableQuotedMessages?: boolean) => {
const { channel, channelCapabilities = {} } = useChannelStateContext('useUserRole');
const { client } = useChatContext('useUserRole');
/**
* @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
* `isAdmin` will be removed in future release. See `channelCapabilities`.
*/
const isAdmin =
client.user?.role === 'admin' || channel.state.membership.role === 'admin';
/**
* @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
* `isOwner` will be removed in future release. See `channelCapabilities`.
*/
const isOwner = channel.state.membership.role === 'owner';
/**
* @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
* `isModerator` will be removed in future release. See `channelCapabilities`.
*/
const isModerator =
client.user?.role === 'channel_moderator' ||
channel.state.membership.role === 'channel_moderator' ||
channel.state.membership.role === 'moderator' ||
channel.state.membership.is_moderator === true ||
channel.state.membership.channel_role === 'channel_moderator';
const isMyMessage = client.userID === message.user?.id;
const canEdit =
!message.poll &&
message.command !== 'giphy' &&
(channelCapabilities['update-any-message'] ||
(isMyMessage && channelCapabilities['update-own-message']));
const canDelete =
channelCapabilities['delete-any-message'] ||
(isMyMessage && channelCapabilities['delete-own-message']);
const canFlag = !isMyMessage && channelCapabilities['flag-message'];
const canMute = !isMyMessage && channelCapabilities['mute-channel'];
const canBlockUser = !isMyMessage;
const canMarkUnread = !isMyMessage && channelCapabilities['read-events'];
const canQuote = !disableQuotedMessages && channelCapabilities['quote-message'];
const canReact = channelCapabilities['send-reaction'];
const canReply = channelCapabilities['send-reply'];
const canSendMessage = channelCapabilities['send-message'];
return {
canBlockUser,
canDelete,
canEdit,
canFlag,
canMarkUnread,
canMute,
canQuote,
canReact,
canReply,
canSendMessage,
isAdmin,
isModerator,
isMyMessage,
isOwner,
};
};