@droppii-org/chat-sdk 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/group/AddMemberModal.d.ts.map +1 -1
- package/dist/components/group/AddMemberModal.js +3 -2
- package/dist/components/group/GroupMemberPicker.d.ts.map +1 -1
- package/dist/components/group/GroupMemberPicker.js +3 -2
- package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
- package/dist/components/message/GroupMembersDrawer.js +7 -3
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +7 -1
- package/dist/hooks/group/useEligibleAccounts.d.ts +1 -0
- package/dist/hooks/group/useEligibleAccounts.d.ts.map +1 -1
- package/dist/hooks/group/useEligibleAccounts.js +1 -0
- package/dist/hooks/group/useEligibleAccountsForGroup.d.ts.map +1 -1
- package/dist/hooks/group/useEligibleAccountsForGroup.js +1 -0
- package/dist/hooks/group/useGroupMembers.d.ts.map +1 -1
- package/dist/hooks/group/useGroupMembers.js +14 -0
- package/dist/hooks/user/useUpdateFcmToken.d.ts +1 -2
- package/dist/hooks/user/useUpdateFcmToken.d.ts.map +1 -1
- package/dist/hooks/user/useUpdateFcmToken.js +4 -24
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/screens/conversation-detail/index.d.ts.map +1 -1
- package/dist/screens/conversation-detail/index.js +5 -0
- package/dist/services/fcm.d.ts +33 -0
- package/dist/services/fcm.d.ts.map +1 -0
- package/dist/services/fcm.js +45 -0
- package/dist/utils/common.d.ts +1 -0
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +4 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddMemberModal.d.ts","sourceRoot":"","sources":["../../../src/components/group/AddMemberModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AddMemberModal.d.ts","sourceRoot":"","sources":["../../../src/components/group/AddMemberModal.tsx"],"names":[],"mappings":"AAaA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,cAAc,GAAI,6BAIrB,mBAAmB,4CA4LrB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { useTranslation } from "react-i18next";
|
|
|
8
8
|
import { Icon } from "../../components/icon";
|
|
9
9
|
import { useEligibleAccountsForGroup } from "../../hooks/group/useEligibleAccountsForGroup";
|
|
10
10
|
import { useAddGroupMember } from "../../hooks/group/useAddGroupMember";
|
|
11
|
+
import { formatMemberLabel } from "../../utils/common";
|
|
11
12
|
const AddMemberModal = ({ open, groupID, onClose, }) => {
|
|
12
13
|
const { t } = useTranslation("conversation-inbox");
|
|
13
14
|
const { t: tCommon } = useTranslation();
|
|
@@ -60,9 +61,9 @@ const AddMemberModal = ({ open, groupID, onClose, }) => {
|
|
|
60
61
|
message.error(errorMessage);
|
|
61
62
|
}
|
|
62
63
|
};
|
|
63
|
-
return (_jsx(Modal, { centered: true, open: open, onCancel: handleClose, footer: null, title: t("add_member.title"), getContainer: false, forceRender: true, children: _jsxs("div", { className: "flex flex-col gap-3 pt-2", children: [_jsx(Input, { value: search, onChange: (event) => setSearch(event.target.value), placeholder: t("create_group.search_member_placeholder"), prefix: _jsx(Icon, { icon: "search-o", size: 16, className: "text-gray-400" }) }), _jsxs("div", { className: "flex items-center justify-between px-1", children: [_jsx("span", { className: "text-sm text-gray-500", children: t("create_group.selected_count", { count: selectedMembers.length }) }), selectedMembers.length > 0 && (_jsx("button", { type: "button", className: "text-sm text-primary-400 hover:text-primary-500 hover:underline", onClick: handleClearAll, children: t("create_group.clear_all") }))] }), selectedMembers.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2", children: selectedMembers.map((member) => (_jsxs("span", { className: "flex items-center gap-1.5 rounded-full bg-gray-100 pl-1 pr-2 py-1", children: [_jsx(Avatar, { src: member.avatar, size: 20, className: "shrink-0", children: member.displayName.charAt(0) || "A" }), _jsx("span", { className: "max-w-[120px] truncate text-sm text-gray-900", children: member.displayName }), _jsx(Icon, { icon: "close-b", size: 12, className: "shrink-0 cursor-pointer text-gray-400", onClick: () => handleRemoveMember(member.userID) })] }, member.userID))) })), _jsx("div", { className: "max-h-72 overflow-y-auto", onScroll: handleListScroll, children: isLoading ? (_jsx("div", { className: "flex items-center justify-center py-6", children: _jsx(Spin, {}) })) : accounts.length === 0 ? (_jsx(Empty, { description: t("create_group.no_member_found") })) : (_jsxs(_Fragment, { children: [accounts.map((account) => {
|
|
64
|
+
return (_jsx(Modal, { centered: true, open: open, onCancel: handleClose, footer: null, title: t("add_member.title"), getContainer: false, forceRender: true, children: _jsxs("div", { className: "flex flex-col gap-3 pt-2", children: [_jsx(Input, { value: search, onChange: (event) => setSearch(event.target.value), placeholder: t("create_group.search_member_placeholder"), prefix: _jsx(Icon, { icon: "search-o", size: 16, className: "text-gray-400" }) }), _jsxs("div", { className: "flex items-center justify-between px-1", children: [_jsx("span", { className: "text-sm text-gray-500", children: t("create_group.selected_count", { count: selectedMembers.length }) }), selectedMembers.length > 0 && (_jsx("button", { type: "button", className: "text-sm text-primary-400 hover:text-primary-500 hover:underline", onClick: handleClearAll, children: t("create_group.clear_all") }))] }), selectedMembers.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2", children: selectedMembers.map((member) => (_jsxs("span", { className: "flex items-center gap-1.5 rounded-full bg-gray-100 pl-1 pr-2 py-1", children: [_jsx(Avatar, { src: member.avatar, size: 20, className: "shrink-0", children: member.displayName.charAt(0) || "A" }), _jsx("span", { className: "max-w-[120px] truncate text-sm text-gray-900", children: formatMemberLabel(member.displayName, member.username) }), _jsx(Icon, { icon: "close-b", size: 12, className: "shrink-0 cursor-pointer text-gray-400", onClick: () => handleRemoveMember(member.userID) })] }, member.userID))) })), _jsx("div", { className: "max-h-72 overflow-y-auto", onScroll: handleListScroll, children: isLoading ? (_jsx("div", { className: "flex items-center justify-center py-6", children: _jsx(Spin, {}) })) : accounts.length === 0 ? (_jsx(Empty, { description: t("create_group.no_member_found") })) : (_jsxs(_Fragment, { children: [accounts.map((account) => {
|
|
64
65
|
const isSelected = selectedIds.has(account.userID);
|
|
65
|
-
return (_jsxs("div", { className: "flex cursor-pointer items-center gap-3 rounded-lg px-3 py-3 transition-colors duration-150 hover:bg-[#f5f5f5]", onClick: () => toggleMember(account), children: [_jsx(Avatar, { src: account.avatar, size: 40, className: "shrink-0", children: account.displayName.charAt(0) || "A" }), _jsx("span", { className: "flex-1 truncate text-base font-medium text-gray-900", children: account.displayName }), _jsx("span", { className: clsx("flex h-4 w-4 shrink-0 items-center justify-center rounded border", isSelected
|
|
66
|
+
return (_jsxs("div", { className: "flex cursor-pointer items-center gap-3 rounded-lg px-3 py-3 transition-colors duration-150 hover:bg-[#f5f5f5]", onClick: () => toggleMember(account), children: [_jsx(Avatar, { src: account.avatar, size: 40, className: "shrink-0", children: account.displayName.charAt(0) || "A" }), _jsx("span", { className: "flex-1 truncate text-base font-medium text-gray-900", children: formatMemberLabel(account.displayName, account.username) }), _jsx("span", { className: clsx("flex h-4 w-4 shrink-0 items-center justify-center rounded border", isSelected
|
|
66
67
|
? "border-primary-400 bg-primary-400"
|
|
67
68
|
: "border-gray-300 bg-white"), children: isSelected && (_jsx(Icon, { icon: "check-b", size: 11, className: "text-white" })) })] }, account.userID));
|
|
68
69
|
}), isFetchingNextPage && (_jsx("div", { className: "flex items-center justify-center py-3", children: _jsx(Spin, { size: "small" }) }))] })) }), _jsxs("div", { className: "flex justify-end gap-2 pt-2", children: [_jsx(Button, { onClick: handleClose, children: tCommon("cancel") }), _jsx(Button, { type: "primary", disabled: selectedMembers.length === 0, loading: isSubmitting, onClick: handleSubmit, children: t("add_member.confirm") })] })] }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupMemberPicker.d.ts","sourceRoot":"","sources":["../../../src/components/group/GroupMemberPicker.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupMemberPicker.d.ts","sourceRoot":"","sources":["../../../src/components/group/GroupMemberPicker.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAG7E,UAAU,sBAAsB;IAC9B,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,uBAAuB,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;CACnE;AAED,QAAA,MAAM,iBAAiB,GAAI,+CAGxB,sBAAsB,4CAoJxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { useState } from "react";
|
|
|
7
7
|
import { useTranslation } from "react-i18next";
|
|
8
8
|
import { Icon } from "../../components/icon";
|
|
9
9
|
import { useEligibleAccounts } from "../../hooks/group/useEligibleAccounts";
|
|
10
|
+
import { formatMemberLabel } from "../../utils/common";
|
|
10
11
|
const GroupMemberPicker = ({ selectedMembers, onChangeSelectedMembers, }) => {
|
|
11
12
|
const { t } = useTranslation("conversation-inbox");
|
|
12
13
|
const [search, setSearch] = useState("");
|
|
@@ -36,9 +37,9 @@ const GroupMemberPicker = ({ selectedMembers, onChangeSelectedMembers, }) => {
|
|
|
36
37
|
};
|
|
37
38
|
return (_jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "flex flex-col gap-2 rounded-xl border border-gray-200 p-3", children: [_jsx(Input, { value: search, onChange: (event) => setSearch(event.target.value), placeholder: t("create_group.search_member_placeholder"), prefix: _jsx(Icon, { icon: "search-o", size: 16, className: "text-gray-400" }) }), _jsx("div", { className: "max-h-64 overflow-y-auto", onScroll: handleListScroll, children: isLoading ? (_jsx("div", { className: "flex items-center justify-center py-6", children: _jsx(Spin, {}) })) : accounts.length === 0 ? (_jsx(Empty, { description: t("create_group.no_member_found") })) : (_jsxs(_Fragment, { children: [accounts.map((account) => {
|
|
38
39
|
const isSelected = selectedIds.has(account.userID);
|
|
39
|
-
return (_jsxs("div", { className: "flex cursor-pointer items-center gap-3 rounded-lg px-3 py-3 transition-colors duration-150 hover:bg-[#f5f5f5]", onClick: () => toggleMember(account), children: [_jsx(Avatar, { src: account.avatar, size: 40, className: "shrink-0", children: account.displayName.charAt(0) || "A" }), _jsx("span", { className: "flex-1 truncate text-base font-medium text-gray-900", children: account.displayName }), _jsx("span", { className: clsx("flex h-4 w-4 shrink-0 items-center justify-center rounded border", isSelected
|
|
40
|
+
return (_jsxs("div", { className: "flex cursor-pointer items-center gap-3 rounded-lg px-3 py-3 transition-colors duration-150 hover:bg-[#f5f5f5]", onClick: () => toggleMember(account), children: [_jsx(Avatar, { src: account.avatar, size: 40, className: "shrink-0", children: account.displayName.charAt(0) || "A" }), _jsx("span", { className: "flex-1 truncate text-base font-medium text-gray-900", children: formatMemberLabel(account.displayName, account.username) }), _jsx("span", { className: clsx("flex h-4 w-4 shrink-0 items-center justify-center rounded border", isSelected
|
|
40
41
|
? "border-primary-400 bg-primary-400"
|
|
41
42
|
: "border-gray-300 bg-white"), children: isSelected && (_jsx(Icon, { icon: "check-b", size: 11, className: "text-white" })) })] }, account.userID));
|
|
42
|
-
}), isFetchingNextPage && (_jsx("div", { className: "flex items-center justify-center py-3", children: _jsx(Spin, { size: "small" }) }))] })) })] }), _jsxs("div", { className: "flex flex-col gap-2 rounded-xl border border-gray-200 p-3", children: [_jsxs("div", { className: "flex items-center justify-between px-1", children: [_jsx("span", { className: "text-sm text-gray-500", children: t("create_group.selected_count", { count: selectedMembers.length }) }), selectedMembers.length > 0 && (_jsx("button", { type: "button", className: "text-sm text-primary-400 hover:text-primary-500 hover:underline", onClick: handleClearAll, children: t("create_group.clear_all") }))] }), _jsx("div", { className: "max-h-64 overflow-y-auto", children: selectedMembers.length === 0 ? (_jsxs("div", { className: "flex h-full min-h-[200px] flex-col items-center justify-center gap-2 text-center", children: [_jsx(Icon, { icon: "user-three-b", size: 28, className: "text-gray-300" }), _jsx("span", { className: "text-sm text-gray-400", children: t("create_group.no_member_selected") })] })) : (selectedMembers.map((member) => (_jsxs("div", { className: "flex items-center gap-3 rounded-lg px-3 py-3", children: [_jsx(Avatar, { src: member.avatar, size: 40, className: "shrink-0", children: member.displayName.charAt(0) || "A" }), _jsx("span", { className: "flex-1 truncate text-base font-medium text-gray-900", children: member.displayName }), _jsx(Icon, { icon: "close-b", size: 14, className: "shrink-0 cursor-pointer text-gray-400", onClick: () => handleRemoveMember(member.userID) })] }, member.userID)))) })] })] }));
|
|
43
|
+
}), isFetchingNextPage && (_jsx("div", { className: "flex items-center justify-center py-3", children: _jsx(Spin, { size: "small" }) }))] })) })] }), _jsxs("div", { className: "flex flex-col gap-2 rounded-xl border border-gray-200 p-3", children: [_jsxs("div", { className: "flex items-center justify-between px-1", children: [_jsx("span", { className: "text-sm text-gray-500", children: t("create_group.selected_count", { count: selectedMembers.length }) }), selectedMembers.length > 0 && (_jsx("button", { type: "button", className: "text-sm text-primary-400 hover:text-primary-500 hover:underline", onClick: handleClearAll, children: t("create_group.clear_all") }))] }), _jsx("div", { className: "max-h-64 overflow-y-auto", children: selectedMembers.length === 0 ? (_jsxs("div", { className: "flex h-full min-h-[200px] flex-col items-center justify-center gap-2 text-center", children: [_jsx(Icon, { icon: "user-three-b", size: 28, className: "text-gray-300" }), _jsx("span", { className: "text-sm text-gray-400", children: t("create_group.no_member_selected") })] })) : (selectedMembers.map((member) => (_jsxs("div", { className: "flex items-center gap-3 rounded-lg px-3 py-3", children: [_jsx(Avatar, { src: member.avatar, size: 40, className: "shrink-0", children: member.displayName.charAt(0) || "A" }), _jsx("span", { className: "flex-1 truncate text-base font-medium text-gray-900", children: formatMemberLabel(member.displayName, member.username) }), _jsx(Icon, { icon: "close-b", size: 14, className: "shrink-0 cursor-pointer text-gray-400", onClick: () => handleRemoveMember(member.userID) })] }, member.userID)))) })] })] }));
|
|
43
44
|
};
|
|
44
45
|
export default GroupMemberPicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupMembersDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/message/GroupMembersDrawer.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAiB/C,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0CD,QAAA,MAAM,kBAAkB,GAAI,wDAKzB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"GroupMembersDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/message/GroupMembersDrawer.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAiB/C,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0CD,QAAA,MAAM,kBAAkB,GAAI,wDAKzB,uBAAuB,4CA6hBzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -189,9 +189,13 @@ const GroupMembersDrawer = ({ groupID, conversationId, currentSession, disabled
|
|
|
189
189
|
message.success(member.isAdmin
|
|
190
190
|
? t("remove_from_admin_success")
|
|
191
191
|
: t("assign_as_admin_success"));
|
|
192
|
-
//
|
|
193
|
-
// full refetch replaces every member's object
|
|
194
|
-
// which visibly re-renders/reorders rows that
|
|
192
|
+
// Optimistically patch the role in place instead of refetching the
|
|
193
|
+
// whole list — a full refetch replaces every member's object
|
|
194
|
+
// identity and re-sorts, which visibly re-renders/reorders rows that
|
|
195
|
+
// didn't actually change. permissions[] isn't patched here — BE
|
|
196
|
+
// resets it to the new role's defaults server-side, and useGroupMembers'
|
|
197
|
+
// OnGroupMemberInfoChanged listener picks up that real value shortly
|
|
198
|
+
// after, instead of this component predicting it.
|
|
195
199
|
patchMemberRole(member.userID, nextRoleLevel);
|
|
196
200
|
}
|
|
197
201
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAEL,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AAStB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAEL,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AAStB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmB/C,UAAU,kBAAkB;IAC1B,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AASD,eAAO,MAAM,oBAAoB,mDAY/B,CAAC;AAEH,eAAO,MAAM,uBAAuB,gCAAyC,CAAC;AAE9E,QAAA,MAAM,qBAAqB,GAAI,4CAG5B,kBAAkB,4CA4SpB,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -30,6 +30,7 @@ import ComposerEditor from "./ComposerEditor";
|
|
|
30
30
|
import SessionClosedModal from "./SessionClosedModal";
|
|
31
31
|
import { useCreateSession, useReopenSession, } from "../../../hooks/session/useReopenOrCreateSession";
|
|
32
32
|
import { emit } from "../../../utils/events";
|
|
33
|
+
import { isGroupConversation } from "../../../utils/imCommon";
|
|
33
34
|
const initialConfig = {
|
|
34
35
|
namespace: "ChatInput",
|
|
35
36
|
theme: editorTheme,
|
|
@@ -63,9 +64,14 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
|
|
|
63
64
|
const [activeCannedIndex, setActiveCannedIndex] = useState(0);
|
|
64
65
|
const [maxActiveCannedIndex, setMaxActiveCannedIndex] = useState(0);
|
|
65
66
|
const [isInternal, setIsInternal] = useState(false);
|
|
66
|
-
const canUseInternal = isCrm && accountType === AccountType.Staff;
|
|
67
67
|
const quotedMessage = useConversationStore((state) => state.quotedMessage);
|
|
68
68
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
69
|
+
// Internal notes are a CX-support concept (team-only remarks not sent to
|
|
70
|
+
// the customer) — meaningless inside a real member-managed group, where
|
|
71
|
+
// everyone in the thread already is the "team".
|
|
72
|
+
const canUseInternal = isCrm &&
|
|
73
|
+
accountType === AccountType.Staff &&
|
|
74
|
+
!isGroupConversation(conversationData !== null && conversationData !== void 0 ? conversationData : undefined);
|
|
69
75
|
const lockToInternal = Boolean((quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID) && (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.isInternal));
|
|
70
76
|
const previewUrl = useMemo(() => {
|
|
71
77
|
const urls = extractLinkUrls(composerText);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEligibleAccounts.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useEligibleAccounts.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAKD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,iBAAc;;;;;;
|
|
1
|
+
{"version":3,"file":"useEligibleAccounts.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useEligibleAccounts.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAKD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,iBAAc;;;;;;CAyBjE,CAAC"}
|
|
@@ -11,6 +11,7 @@ export const useEligibleAccounts = (search, enabled = true) => {
|
|
|
11
11
|
const accounts = useMemo(() => candidates.map((candidate) => ({
|
|
12
12
|
userID: candidate.id,
|
|
13
13
|
displayName: candidate.fullName,
|
|
14
|
+
username: candidate.username,
|
|
14
15
|
avatar: candidate.avatar,
|
|
15
16
|
})), [candidates]);
|
|
16
17
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEligibleAccountsForGroup.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useEligibleAccountsForGroup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,eAAO,MAAM,2BAA2B,GACtC,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,iBAAc;;;;;;
|
|
1
|
+
{"version":3,"file":"useEligibleAccountsForGroup.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useEligibleAccountsForGroup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,eAAO,MAAM,2BAA2B,GACtC,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,iBAAc;;;;;;CA2Bf,CAAC"}
|
|
@@ -11,6 +11,7 @@ export const useEligibleAccountsForGroup = (search, groupID, enabled = true) =>
|
|
|
11
11
|
const accounts = useMemo(() => candidates.map((candidate) => ({
|
|
12
12
|
userID: candidate.id,
|
|
13
13
|
displayName: candidate.fullName,
|
|
14
|
+
username: candidate.username,
|
|
14
15
|
avatar: candidate.avatar,
|
|
15
16
|
})), [candidates]);
|
|
16
17
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroupMembers.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGroupMembers.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,eAAe,EAAE,eAAe,EAA4B,MAAM,8BAA8B,CAAC;AAMpH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACtE,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACzE;AAED,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,KACf,
|
|
1
|
+
{"version":3,"file":"useGroupMembers.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGroupMembers.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,eAAe,EAAE,eAAe,EAA4B,MAAM,8BAA8B,CAAC;AAMpH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACtE,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACzE;AAED,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,KACf,qBAyGF,CAAC"}
|
|
@@ -45,11 +45,25 @@ export const useGroupMembers = (groupID) => {
|
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
47
|
const onMemberAdded = () => void fetchMembers();
|
|
48
|
+
// BE pushes the member's full updated record (roleLevel + the
|
|
49
|
+
// permissions[] it reset to) whenever a role/permission change is
|
|
50
|
+
// applied — e.g. setGroupMemberRoleLevel resets permissions to the new
|
|
51
|
+
// role's defaults server-side. Patch straight from this payload instead
|
|
52
|
+
// of predicting what BE would set, so the member list (and any open
|
|
53
|
+
// "Cài đặt quyền quản trị viên" for that member) reflects the real
|
|
54
|
+
// server state without waiting for a manual refetch/F5.
|
|
55
|
+
const onMemberInfoChanged = ({ data }) => {
|
|
56
|
+
if (data.groupID !== groupID)
|
|
57
|
+
return;
|
|
58
|
+
setMembers((prev) => prev.map((member) => (member.userID === data.userID ? data : member)));
|
|
59
|
+
};
|
|
48
60
|
DChatSDK.on(CbEvents.OnGroupMemberDeleted, onMemberDeleted);
|
|
49
61
|
DChatSDK.on(CbEvents.OnGroupMemberAdded, onMemberAdded);
|
|
62
|
+
DChatSDK.on(CbEvents.OnGroupMemberInfoChanged, onMemberInfoChanged);
|
|
50
63
|
return () => {
|
|
51
64
|
DChatSDK.off(CbEvents.OnGroupMemberDeleted, onMemberDeleted);
|
|
52
65
|
DChatSDK.off(CbEvents.OnGroupMemberAdded, onMemberAdded);
|
|
66
|
+
DChatSDK.off(CbEvents.OnGroupMemberInfoChanged, onMemberInfoChanged);
|
|
53
67
|
};
|
|
54
68
|
}, [groupID, fetchMembers]);
|
|
55
69
|
const patchMemberRole = useCallback((userID, roleLevel) => {
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const useUpdateFcmToken: () => import("@tanstack/react-query").UseMutationResult<BaseResponse<any>, Error, string, unknown>;
|
|
1
|
+
export declare const useUpdateFcmToken: () => import("@tanstack/react-query").UseMutationResult<import("../../types/dto").BaseResponse<unknown>, Error, string, unknown>;
|
|
3
2
|
//# sourceMappingURL=useUpdateFcmToken.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUpdateFcmToken.d.ts","sourceRoot":"","sources":["../../../src/hooks/user/useUpdateFcmToken.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useUpdateFcmToken.d.ts","sourceRoot":"","sources":["../../../src/hooks/user/useUpdateFcmToken.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,kIAW1B,CAAC"}
|
|
@@ -1,34 +1,14 @@
|
|
|
1
1
|
import { useMutation } from "@tanstack/react-query";
|
|
2
2
|
import { apiInstance } from "../../services/api";
|
|
3
|
-
import { ENDPOINTS } from "../../services/routes";
|
|
4
|
-
import { Platform as DChatPlatform } from "@droppii-org/wasm-client-sdk";
|
|
5
3
|
import useAuthStore from "../../store/auth";
|
|
6
|
-
import {
|
|
7
|
-
import dayjs from "dayjs";
|
|
8
|
-
var FcmProject;
|
|
9
|
-
(function (FcmProject) {
|
|
10
|
-
FcmProject["Biz"] = "BIZ";
|
|
11
|
-
FcmProject["Cus"] = "CUS";
|
|
12
|
-
FcmProject["Crm"] = "CRM";
|
|
13
|
-
})(FcmProject || (FcmProject = {}));
|
|
14
|
-
const applicationTypeToFcmProject = {
|
|
15
|
-
[DChatApplicationType.DROPPII]: FcmProject.Biz,
|
|
16
|
-
[DChatApplicationType.OBEFE]: FcmProject.Crm,
|
|
17
|
-
};
|
|
4
|
+
import { postFcmToken } from "../../services/fcm";
|
|
18
5
|
export const useUpdateFcmToken = () => useMutation({
|
|
19
6
|
mutationFn: async (fcmToken) => {
|
|
20
|
-
var _a;
|
|
21
7
|
const { applicationType, userID } = useAuthStore.getState();
|
|
22
|
-
const res = await apiInstance
|
|
23
|
-
platformID: DChatPlatform.Web,
|
|
8
|
+
const res = await postFcmToken(apiInstance, {
|
|
24
9
|
fcmToken,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
project: (_a = applicationTypeToFcmProject[applicationType]) !== null && _a !== void 0 ? _a : FcmProject.Crm,
|
|
28
|
-
}, {
|
|
29
|
-
headers: {
|
|
30
|
-
operationID: `fcm_update_${dayjs().valueOf()}`,
|
|
31
|
-
},
|
|
10
|
+
userID,
|
|
11
|
+
applicationType,
|
|
32
12
|
});
|
|
33
13
|
return res.data;
|
|
34
14
|
},
|
package/dist/index.d.ts
CHANGED
|
@@ -36,6 +36,8 @@ export { useDChatAuth } from "./hooks/user/useAuth";
|
|
|
36
36
|
export { useSendMessage } from "./hooks/message/useSendMessage";
|
|
37
37
|
export type { UseSendMessageOptions } from "./hooks/message/useSendMessage";
|
|
38
38
|
export { useUpdateFcmToken } from "./hooks/user/useUpdateFcmToken";
|
|
39
|
+
export { registerFcmToken } from "./services/fcm";
|
|
40
|
+
export type { RegisterFcmTokenParams } from "./services/fcm";
|
|
39
41
|
export { useConversationList } from "./hooks/conversation/useConversationList";
|
|
40
42
|
export { useCreateConversation } from "./hooks/conversation/useCreateConversation";
|
|
41
43
|
export type { CreateConversationInput } from "./hooks/conversation/useCreateConversation";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -34,6 +34,7 @@ export { CustomMessageType } from "./types/customMessage";
|
|
|
34
34
|
export { useDChatAuth } from "./hooks/user/useAuth";
|
|
35
35
|
export { useSendMessage } from "./hooks/message/useSendMessage";
|
|
36
36
|
export { useUpdateFcmToken } from "./hooks/user/useUpdateFcmToken";
|
|
37
|
+
export { registerFcmToken } from "./services/fcm";
|
|
37
38
|
export { useConversationList } from "./hooks/conversation/useConversationList";
|
|
38
39
|
export { useCreateConversation } from "./hooks/conversation/useCreateConversation";
|
|
39
40
|
export { useMuteConversation, isConversationMuted, } from "./hooks/session/useMuteConversation";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screens/conversation-detail/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAWrF,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,6CAA6C,CAAC;AAGrD,MAAM,WAAW,4BACf,SAAQ,4BAA4B,EACpC,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,uBAAuB,GAAI,wFAS9B,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screens/conversation-detail/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAWrF,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,6CAA6C,CAAC;AAGrD,MAAM,WAAW,4BACf,SAAQ,4BAA4B,EACpC,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,uBAAuB,GAAI,wFAS9B,4BAA4B,mDAyK9B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -51,6 +51,11 @@ const DChatConversationDetail = (_a) => {
|
|
|
51
51
|
const [isProfileOpen, { setTrue: openProfile, setFalse: closeProfile }] = useBoolean(false);
|
|
52
52
|
const [resourceTab, setResourceTab] = useState(null);
|
|
53
53
|
const handleBack = () => {
|
|
54
|
+
if (typeof window !== "undefined" && window.history.length > 1) {
|
|
55
|
+
router.back();
|
|
56
|
+
onBack === null || onBack === void 0 ? void 0 : onBack();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
54
59
|
const newSearchParams = new URLSearchParams(searchParams);
|
|
55
60
|
newSearchParams.delete("threadId");
|
|
56
61
|
newSearchParams.delete("userId");
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { Platform as DChatPlatform } from "@droppii-org/wasm-client-sdk";
|
|
3
|
+
import { BaseResponse } from "../types/dto";
|
|
4
|
+
import { DChatApplicationType } from "../types/chat";
|
|
5
|
+
export declare enum FcmProject {
|
|
6
|
+
Biz = "BIZ",
|
|
7
|
+
Cus = "CUS",
|
|
8
|
+
Crm = "CRM"
|
|
9
|
+
}
|
|
10
|
+
export declare const applicationTypeToFcmProject: Record<DChatApplicationType, FcmProject>;
|
|
11
|
+
export interface FcmTokenBodyParams {
|
|
12
|
+
fcmToken: string;
|
|
13
|
+
userID: string;
|
|
14
|
+
applicationType: DChatApplicationType;
|
|
15
|
+
}
|
|
16
|
+
export declare const buildFcmTokenBody: ({ fcmToken, userID, applicationType, }: FcmTokenBodyParams) => {
|
|
17
|
+
platformID: DChatPlatform;
|
|
18
|
+
fcmToken: string;
|
|
19
|
+
account: string;
|
|
20
|
+
expireTime: number;
|
|
21
|
+
project: FcmProject;
|
|
22
|
+
};
|
|
23
|
+
export declare const postFcmToken: (client: AxiosInstance, params: FcmTokenBodyParams, headers?: Record<string, string>) => Promise<import("axios").AxiosResponse<BaseResponse<unknown>, any>>;
|
|
24
|
+
export interface RegisterFcmTokenParams {
|
|
25
|
+
apiAddress: string;
|
|
26
|
+
accessToken: string;
|
|
27
|
+
userID: string;
|
|
28
|
+
applicationType: DChatApplicationType;
|
|
29
|
+
fcmToken: string;
|
|
30
|
+
chatToken?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare const registerFcmToken: ({ apiAddress, accessToken, userID, applicationType, fcmToken, chatToken, }: RegisterFcmTokenParams) => Promise<string>;
|
|
33
|
+
//# sourceMappingURL=fcm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fcm.d.ts","sourceRoot":"","sources":["../../src/services/fcm.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,oBAAY,UAAU;IACpB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAC9C,oBAAoB,EACpB,UAAU,CAIX,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,oBAAoB,CAAC;CACvC;AAED,eAAO,MAAM,iBAAiB,GAAI,wCAI/B,kBAAkB;;;;;;CAMnB,CAAC;AAEH,eAAO,MAAM,YAAY,GACvB,QAAQ,aAAa,EACrB,QAAQ,kBAAkB,EAC1B,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,uEAW/B,CAAC;AAEJ,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,oBAAoB,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,GAAU,4EAOpC,sBAAsB,oBAuBxB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
import { Platform as DChatPlatform } from "@droppii-org/wasm-client-sdk";
|
|
4
|
+
import { ENDPOINTS } from "./routes";
|
|
5
|
+
import { DChatApplicationType } from "../types/chat";
|
|
6
|
+
export var FcmProject;
|
|
7
|
+
(function (FcmProject) {
|
|
8
|
+
FcmProject["Biz"] = "BIZ";
|
|
9
|
+
FcmProject["Cus"] = "CUS";
|
|
10
|
+
FcmProject["Crm"] = "CRM";
|
|
11
|
+
})(FcmProject || (FcmProject = {}));
|
|
12
|
+
export const applicationTypeToFcmProject = {
|
|
13
|
+
[DChatApplicationType.DROPPII]: FcmProject.Biz,
|
|
14
|
+
[DChatApplicationType.OBEFE]: FcmProject.Crm,
|
|
15
|
+
};
|
|
16
|
+
export const buildFcmTokenBody = ({ fcmToken, userID, applicationType, }) => {
|
|
17
|
+
var _a;
|
|
18
|
+
return ({
|
|
19
|
+
platformID: DChatPlatform.Web,
|
|
20
|
+
fcmToken,
|
|
21
|
+
account: userID || "",
|
|
22
|
+
expireTime: dayjs().add(7, "day").valueOf(),
|
|
23
|
+
project: (_a = applicationTypeToFcmProject[applicationType]) !== null && _a !== void 0 ? _a : FcmProject.Crm,
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
export const postFcmToken = (client, params, headers) => client.post(ENDPOINTS.chatService.uploadFcmToken, buildFcmTokenBody(params), {
|
|
27
|
+
headers: Object.assign({ operationID: `fcm_update_${dayjs().valueOf()}` }, headers),
|
|
28
|
+
});
|
|
29
|
+
export const registerFcmToken = async ({ apiAddress, accessToken, userID, applicationType, fcmToken, chatToken, }) => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
const client = axios.create({
|
|
32
|
+
baseURL: apiAddress,
|
|
33
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
34
|
+
});
|
|
35
|
+
let token = chatToken;
|
|
36
|
+
if (!token) {
|
|
37
|
+
const res = await client.post(ENDPOINTS.chatService.getChatToken, { platform: DChatPlatform.Web });
|
|
38
|
+
token = (_b = (_a = res.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.token;
|
|
39
|
+
}
|
|
40
|
+
if (!token) {
|
|
41
|
+
throw new Error("Unable to resolve chat token for FCM registration");
|
|
42
|
+
}
|
|
43
|
+
await postFcmToken(client, { fcmToken, userID, applicationType }, { token });
|
|
44
|
+
return token;
|
|
45
|
+
};
|
package/dist/utils/common.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { ConversationItem, MessageType } from "@droppii-org/wasm-client-sdk";
|
|
|
2
2
|
import { TFunction } from "i18next";
|
|
3
3
|
import { UrlMetadataInfo } from "../types/chat";
|
|
4
4
|
import { PeerType } from "../types/conversation";
|
|
5
|
+
export declare const formatMemberLabel: (displayName: string, username?: string) => string;
|
|
5
6
|
export declare const parseMessageContent: <T>(content?: string) => Partial<T>;
|
|
6
7
|
export declare const parseUrlMetadata: (ex?: string) => UrlMetadataInfo | undefined;
|
|
7
8
|
export declare function formatDuration(seconds: number): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,WAAW,EACZ,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAqB,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,WAAW,EACZ,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAqB,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAOhD,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,MAAmE,CAAC;AAEvE,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,CAAC,CAQlE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,eAAe,GAAG,SAQhE,CAAC;AAmCF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,eAAe,GAC1B,OAAO,MAAM,EACb,UAAS,sBAA2B,WAoBrC,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,aAAa,WAAW,EACxB,YAAY,MAAM,EAClB,IAAI,SAAS,EACb,YAAY;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,aAAa;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,WAwC1D,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,YAAY,MAAM,KAAG,OAS5D,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,eAAe,gBAAgB,EAAE,EACjC,OAAO,OAAO,KACb,gBAAgB,EAMlB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,IAAI,SAAS,EACb,eAAe;IAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAClE,UAAU;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,WAuG5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,kBAAc,WA2Cf,CAAC;AAEF,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAqBR;AAED,eAAO,MAAM,QAAQ,QAAkD,CAAC;AAExE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAqC3D;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAOrD,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,OACf,CAAC;AAEnC,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAO9B,CAAC;AAEZ;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgEjD"}
|
package/dist/utils/common.js
CHANGED
|
@@ -4,6 +4,10 @@ import DOMPurify from "dompurify";
|
|
|
4
4
|
import { PeerType } from "../types/conversation";
|
|
5
5
|
import { CustomMessageType } from "../types/customMessage";
|
|
6
6
|
import { getGroupNotificationText, getSystemLogMessageText } from "./messageLog";
|
|
7
|
+
// Group member pickers (create-group, add-member) can list several
|
|
8
|
+
// candidates that share the same display name — appending the username
|
|
9
|
+
// disambiguates them.
|
|
10
|
+
export const formatMemberLabel = (displayName, username) => (username ? `${displayName} - ${username}` : displayName);
|
|
7
11
|
export const parseMessageContent = (content) => {
|
|
8
12
|
if (!content)
|
|
9
13
|
return {};
|