stream-chat-react 13.0.5 → 13.1.1
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/Channel/Channel.d.ts +1 -1
- package/dist/components/Channel/Channel.js +7 -0
- package/dist/components/ChannelList/hooks/useChannelListShape.js +3 -3
- package/dist/components/Chat/hooks/useChat.js +7 -3
- package/dist/components/Dialog/ButtonWithSubmenu.d.ts +11 -0
- package/dist/components/Dialog/ButtonWithSubmenu.js +88 -0
- package/dist/components/Dialog/index.d.ts +1 -0
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/Loading/LoadingErrorIndicator.js +1 -1
- package/dist/components/Message/Message.js +3 -2
- package/dist/components/Message/MessageIsThreadReplyInChannelButtonIndicator.d.ts +2 -0
- package/dist/components/Message/MessageIsThreadReplyInChannelButtonIndicator.js +63 -0
- package/dist/components/Message/MessageSimple.js +11 -4
- package/dist/components/Message/ReminderNotification.d.ts +6 -0
- package/dist/components/Message/ReminderNotification.js +30 -0
- package/dist/components/Message/hooks/index.d.ts +1 -0
- package/dist/components/Message/hooks/index.js +1 -0
- package/dist/components/Message/hooks/useMessageReminder.d.ts +1 -0
- package/dist/components/Message/hooks/useMessageReminder.js +11 -0
- package/dist/components/Message/index.d.ts +1 -0
- package/dist/components/Message/index.js +1 -0
- package/dist/components/Message/utils.d.ts +4 -2
- package/dist/components/Message/utils.js +11 -1
- package/dist/components/MessageActions/MessageActionsBox.js +12 -6
- package/dist/components/MessageActions/RemindMeSubmenu.d.ts +6 -0
- package/dist/components/MessageActions/RemindMeSubmenu.js +18 -0
- package/dist/components/MessageInput/MessageInputFlat.js +5 -3
- package/dist/components/MessageInput/SendToChannelCheckbox.d.ts +2 -0
- package/dist/components/MessageInput/SendToChannelCheckbox.js +20 -0
- package/dist/components/MessageList/MessageListNotifications.js +8 -3
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +1 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +4 -0
- package/dist/components/Notifications/hooks/index.d.ts +1 -0
- package/dist/components/Notifications/hooks/index.js +1 -0
- package/dist/components/Notifications/hooks/useNotifications.d.ts +2 -0
- package/dist/components/Notifications/hooks/useNotifications.js +10 -0
- package/dist/components/Notifications/index.d.ts +1 -0
- package/dist/components/Notifications/index.js +1 -0
- package/dist/components/TextareaComposer/TextareaComposer.js +4 -0
- package/dist/components/Thread/LegacyThreadContext.d.ts +8 -0
- package/dist/components/Thread/LegacyThreadContext.js +3 -0
- package/dist/components/Thread/Thread.d.ts +0 -4
- package/dist/components/Thread/Thread.js +2 -3
- package/dist/components/Thread/index.d.ts +1 -0
- package/dist/components/Thread/index.js +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/context/ComponentContext.d.ts +7 -1
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/experimental/MessageActions/defaults.d.ts +1 -1
- package/dist/experimental/MessageActions/defaults.js +27 -4
- package/dist/experimental/index.browser.cjs +382 -169
- package/dist/experimental/index.browser.cjs.map +4 -4
- package/dist/experimental/index.node.cjs +382 -169
- package/dist/experimental/index.node.cjs.map +4 -4
- package/dist/i18n/Streami18n.d.ts +32 -3
- package/dist/i18n/Streami18n.js +34 -5
- package/dist/i18n/TranslationBuilder/TranslationBuilder.d.ts +35 -0
- package/dist/i18n/TranslationBuilder/TranslationBuilder.js +92 -0
- package/dist/i18n/TranslationBuilder/index.d.ts +2 -0
- package/dist/i18n/TranslationBuilder/index.js +2 -0
- package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.d.ts +11 -0
- package/dist/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.js +27 -0
- package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.d.ts +4 -0
- package/dist/i18n/TranslationBuilder/notifications/attachmentUpload.js +32 -0
- package/dist/i18n/TranslationBuilder/notifications/index.d.ts +2 -0
- package/dist/i18n/TranslationBuilder/notifications/index.js +2 -0
- package/dist/i18n/TranslationBuilder/notifications/pollComposition.d.ts +3 -0
- package/dist/i18n/TranslationBuilder/notifications/pollComposition.js +9 -0
- package/dist/i18n/TranslationBuilder/notifications/types.d.ts +4 -0
- package/dist/i18n/TranslationBuilder/notifications/types.js +1 -0
- package/dist/i18n/de.json +23 -0
- package/dist/i18n/en.json +23 -0
- package/dist/i18n/es.json +23 -0
- package/dist/i18n/fr.json +23 -0
- package/dist/i18n/hi.json +23 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/it.json +23 -0
- package/dist/i18n/ja.json +23 -0
- package/dist/i18n/ko.json +23 -0
- package/dist/i18n/nl.json +23 -0
- package/dist/i18n/pt.json +23 -0
- package/dist/i18n/ru.json +23 -0
- package/dist/i18n/tr.json +23 -0
- package/dist/i18n/types.d.ts +54 -0
- package/dist/i18n/utils.d.ts +1 -1
- package/dist/i18n/utils.js +8 -2
- package/dist/index.browser.cjs +3617 -2162
- package/dist/index.browser.cjs.map +4 -4
- package/dist/index.node.cjs +3674 -2156
- package/dist/index.node.cjs.map +4 -4
- package/dist/plugins/Emojis/index.browser.cjs +1 -2
- package/dist/plugins/Emojis/index.browser.cjs.map +3 -3
- package/dist/plugins/Emojis/index.node.cjs +1 -2
- package/dist/plugins/Emojis/index.node.cjs.map +3 -3
- package/dist/scss/v2/Message/Message-layout.scss +11 -1
- package/dist/scss/v2/Message/Message-theme.scss +31 -1
- package/dist/scss/v2/MessageActionsBox/MessageActionsBox-theme.scss +8 -0
- package/dist/scss/v2/MessageInput/MessageInput-layout.scss +19 -0
- package/dist/scss/v2/MessageInput/MessageInput-theme.scss +11 -0
- package/package.json +6 -8
|
@@ -327,7 +327,7 @@ module.exports = __toCommonJS(experimental_exports);
|
|
|
327
327
|
|
|
328
328
|
// src/experimental/MessageActions/MessageActions.tsx
|
|
329
329
|
var import_clsx9 = __toESM(require("clsx"));
|
|
330
|
-
var
|
|
330
|
+
var import_react42 = __toESM(require("react"));
|
|
331
331
|
|
|
332
332
|
// src/context/ChannelListContext.tsx
|
|
333
333
|
var import_react = __toESM(require("react"));
|
|
@@ -529,7 +529,7 @@ var useTranslationContext = (componentName) => {
|
|
|
529
529
|
};
|
|
530
530
|
|
|
531
531
|
// src/components/MessageInput/hooks/useMessageComposer.ts
|
|
532
|
-
var
|
|
532
|
+
var import_react37 = require("react");
|
|
533
533
|
var import_stream_chat = require("stream-chat");
|
|
534
534
|
|
|
535
535
|
// src/components/Threads/ThreadContext.tsx
|
|
@@ -12657,9 +12657,10 @@ var ChannelPreview = (props) => {
|
|
|
12657
12657
|
);
|
|
12658
12658
|
};
|
|
12659
12659
|
|
|
12660
|
-
// src/components/Thread/
|
|
12661
|
-
var
|
|
12662
|
-
var
|
|
12660
|
+
// src/components/Thread/LegacyThreadContext.ts
|
|
12661
|
+
var import_react24 = __toESM(require("react"));
|
|
12662
|
+
var LegacyThreadContext = import_react24.default.createContext({ legacyThread: void 0 });
|
|
12663
|
+
var useLegacyThreadContext = () => (0, import_react24.useContext)(LegacyThreadContext);
|
|
12663
12664
|
|
|
12664
12665
|
// src/components/Message/utils.tsx
|
|
12665
12666
|
var import_react_fast_compare = __toESM(require("react-fast-compare"));
|
|
@@ -12678,7 +12679,9 @@ var MESSAGE_ACTIONS = {
|
|
|
12678
12679
|
pin: "pin",
|
|
12679
12680
|
quote: "quote",
|
|
12680
12681
|
react: "react",
|
|
12681
|
-
|
|
12682
|
+
remindMe: "remindMe",
|
|
12683
|
+
reply: "reply",
|
|
12684
|
+
saveForLater: "saveForLater"
|
|
12682
12685
|
};
|
|
12683
12686
|
var ACTIONS_NOT_WORKING_IN_THREAD = [
|
|
12684
12687
|
MESSAGE_ACTIONS.pin,
|
|
@@ -12718,13 +12721,34 @@ var useUserRole = (message, onlySenderCanEdit, disableQuotedMessages) => {
|
|
|
12718
12721
|
};
|
|
12719
12722
|
};
|
|
12720
12723
|
|
|
12724
|
+
// src/components/Message/hooks/useMessageReminder.ts
|
|
12725
|
+
var import_react25 = require("react");
|
|
12726
|
+
var useMessageReminder = (messageId) => {
|
|
12727
|
+
const { client } = useChatContext();
|
|
12728
|
+
const reminderSelector = (0, import_react25.useCallback)(
|
|
12729
|
+
(state) => ({
|
|
12730
|
+
reminder: state.reminders.get(messageId)
|
|
12731
|
+
}),
|
|
12732
|
+
[messageId]
|
|
12733
|
+
);
|
|
12734
|
+
const { reminder } = useStateStore(client.reminders.state, reminderSelector);
|
|
12735
|
+
return reminder;
|
|
12736
|
+
};
|
|
12737
|
+
|
|
12721
12738
|
// src/components/MessageActions/MessageActions.tsx
|
|
12739
|
+
var import_clsx6 = __toESM(require("clsx"));
|
|
12740
|
+
var import_react30 = __toESM(require("react"));
|
|
12741
|
+
|
|
12742
|
+
// src/components/MessageActions/RemindMeSubmenu.tsx
|
|
12743
|
+
var import_react28 = __toESM(require("react"));
|
|
12744
|
+
|
|
12745
|
+
// src/components/Dialog/ButtonWithSubmenu.tsx
|
|
12722
12746
|
var import_clsx5 = __toESM(require("clsx"));
|
|
12723
|
-
var
|
|
12747
|
+
var import_react27 = __toESM(require("react"));
|
|
12724
12748
|
|
|
12725
12749
|
// src/components/Dialog/DialogAnchor.tsx
|
|
12726
12750
|
var import_clsx4 = __toESM(require("clsx"));
|
|
12727
|
-
var
|
|
12751
|
+
var import_react26 = __toESM(require("react"));
|
|
12728
12752
|
var import_focus = require("@react-aria/focus");
|
|
12729
12753
|
var import_react_popper = require("react-popper");
|
|
12730
12754
|
function useDialogAnchor({
|
|
@@ -12732,7 +12756,7 @@ function useDialogAnchor({
|
|
|
12732
12756
|
placement,
|
|
12733
12757
|
referenceElement
|
|
12734
12758
|
}) {
|
|
12735
|
-
const [popperElement, setPopperElement] = (0,
|
|
12759
|
+
const [popperElement, setPopperElement] = (0, import_react26.useState)(null);
|
|
12736
12760
|
const { attributes, styles, update } = (0, import_react_popper.usePopper)(referenceElement, popperElement, {
|
|
12737
12761
|
modifiers: [
|
|
12738
12762
|
{
|
|
@@ -12747,7 +12771,7 @@ function useDialogAnchor({
|
|
|
12747
12771
|
],
|
|
12748
12772
|
placement
|
|
12749
12773
|
});
|
|
12750
|
-
(0,
|
|
12774
|
+
(0, import_react26.useEffect)(() => {
|
|
12751
12775
|
if (open && popperElement) {
|
|
12752
12776
|
update?.();
|
|
12753
12777
|
}
|
|
@@ -12779,7 +12803,7 @@ var DialogAnchor = ({
|
|
|
12779
12803
|
placement,
|
|
12780
12804
|
referenceElement
|
|
12781
12805
|
});
|
|
12782
|
-
(0,
|
|
12806
|
+
(0, import_react26.useEffect)(() => {
|
|
12783
12807
|
if (!open) return;
|
|
12784
12808
|
const hideOnEscape = (event) => {
|
|
12785
12809
|
if (event.key !== "Escape") return;
|
|
@@ -12793,7 +12817,7 @@ var DialogAnchor = ({
|
|
|
12793
12817
|
if (!open) {
|
|
12794
12818
|
return null;
|
|
12795
12819
|
}
|
|
12796
|
-
return /* @__PURE__ */
|
|
12820
|
+
return /* @__PURE__ */ import_react26.default.createElement(DialogPortalEntry, { dialogId: id }, /* @__PURE__ */ import_react26.default.createElement(import_focus.FocusScope, { autoFocus: focus, contain: trapFocus, restoreFocus: true }, /* @__PURE__ */ import_react26.default.createElement(
|
|
12797
12821
|
"div",
|
|
12798
12822
|
{
|
|
12799
12823
|
...restDivProps,
|
|
@@ -12808,9 +12832,168 @@ var DialogAnchor = ({
|
|
|
12808
12832
|
)));
|
|
12809
12833
|
};
|
|
12810
12834
|
|
|
12835
|
+
// src/components/Dialog/ButtonWithSubmenu.tsx
|
|
12836
|
+
var ButtonWithSubmenu = ({
|
|
12837
|
+
children,
|
|
12838
|
+
className,
|
|
12839
|
+
placement,
|
|
12840
|
+
Submenu,
|
|
12841
|
+
submenuContainerProps,
|
|
12842
|
+
...buttonProps
|
|
12843
|
+
}) => {
|
|
12844
|
+
const buttonRef = (0, import_react27.useRef)(null);
|
|
12845
|
+
const [dialogContainer, setDialogContainer] = (0, import_react27.useState)(null);
|
|
12846
|
+
const keepSubmenuOpen = (0, import_react27.useRef)(false);
|
|
12847
|
+
const dialogCloseTimeout = (0, import_react27.useRef)(null);
|
|
12848
|
+
const dialogId = (0, import_react27.useMemo)(() => `submenu-${Math.random().toString(36).slice(2)}`, []);
|
|
12849
|
+
const dialog = useDialog({ id: dialogId });
|
|
12850
|
+
const dialogIsOpen = useDialogIsOpen(dialogId);
|
|
12851
|
+
const { attributes, setPopperElement, styles } = useDialogAnchor({
|
|
12852
|
+
open: dialogIsOpen,
|
|
12853
|
+
placement,
|
|
12854
|
+
referenceElement: buttonRef.current
|
|
12855
|
+
});
|
|
12856
|
+
const closeDialogLazily = (0, import_react27.useCallback)(() => {
|
|
12857
|
+
if (dialogCloseTimeout.current) clearTimeout(dialogCloseTimeout.current);
|
|
12858
|
+
dialogCloseTimeout.current = setTimeout(() => {
|
|
12859
|
+
if (keepSubmenuOpen.current) return;
|
|
12860
|
+
dialog.close();
|
|
12861
|
+
}, 100);
|
|
12862
|
+
}, [dialog]);
|
|
12863
|
+
const handleClose = (0, import_react27.useCallback)(
|
|
12864
|
+
(event) => {
|
|
12865
|
+
const parentButton = buttonRef.current;
|
|
12866
|
+
if (!dialogIsOpen || !parentButton) return;
|
|
12867
|
+
event.stopPropagation();
|
|
12868
|
+
closeDialogLazily();
|
|
12869
|
+
parentButton.focus();
|
|
12870
|
+
},
|
|
12871
|
+
[closeDialogLazily, dialogIsOpen, buttonRef]
|
|
12872
|
+
);
|
|
12873
|
+
const handleFocusParentButton = () => {
|
|
12874
|
+
if (dialogIsOpen) return;
|
|
12875
|
+
dialog.open();
|
|
12876
|
+
keepSubmenuOpen.current = true;
|
|
12877
|
+
};
|
|
12878
|
+
(0, import_react27.useEffect)(() => {
|
|
12879
|
+
const parentButton = buttonRef.current;
|
|
12880
|
+
if (!dialogIsOpen || !parentButton) return;
|
|
12881
|
+
const hideOnEscape = (event) => {
|
|
12882
|
+
if (event.key !== "Escape") return;
|
|
12883
|
+
handleClose(event);
|
|
12884
|
+
keepSubmenuOpen.current = false;
|
|
12885
|
+
};
|
|
12886
|
+
document.addEventListener("keyup", hideOnEscape, { capture: true });
|
|
12887
|
+
return () => {
|
|
12888
|
+
document.removeEventListener("keyup", hideOnEscape, { capture: true });
|
|
12889
|
+
};
|
|
12890
|
+
}, [dialogIsOpen, handleClose]);
|
|
12891
|
+
return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(
|
|
12892
|
+
"button",
|
|
12893
|
+
{
|
|
12894
|
+
"aria-selected": "false",
|
|
12895
|
+
className: (0, import_clsx5.default)(className, "str_chat__button-with-submenu", {
|
|
12896
|
+
"str_chat__button-with-submenu--submenu-open": dialogIsOpen
|
|
12897
|
+
}),
|
|
12898
|
+
onBlur: () => {
|
|
12899
|
+
keepSubmenuOpen.current = false;
|
|
12900
|
+
closeDialogLazily();
|
|
12901
|
+
},
|
|
12902
|
+
onClick: (event) => {
|
|
12903
|
+
event.stopPropagation();
|
|
12904
|
+
dialog.toggle();
|
|
12905
|
+
},
|
|
12906
|
+
onFocus: handleFocusParentButton,
|
|
12907
|
+
onMouseEnter: handleFocusParentButton,
|
|
12908
|
+
onMouseLeave: () => {
|
|
12909
|
+
keepSubmenuOpen.current = false;
|
|
12910
|
+
closeDialogLazily();
|
|
12911
|
+
},
|
|
12912
|
+
ref: buttonRef,
|
|
12913
|
+
role: "option",
|
|
12914
|
+
...buttonProps
|
|
12915
|
+
},
|
|
12916
|
+
children
|
|
12917
|
+
), dialogIsOpen && /* @__PURE__ */ import_react27.default.createElement(
|
|
12918
|
+
"div",
|
|
12919
|
+
{
|
|
12920
|
+
...attributes.popper,
|
|
12921
|
+
onBlur: (event) => {
|
|
12922
|
+
const isBlurredDescendant = event.relatedTarget instanceof Node && dialogContainer?.contains(event.relatedTarget);
|
|
12923
|
+
if (isBlurredDescendant) return;
|
|
12924
|
+
keepSubmenuOpen.current = false;
|
|
12925
|
+
closeDialogLazily();
|
|
12926
|
+
},
|
|
12927
|
+
onFocus: () => {
|
|
12928
|
+
keepSubmenuOpen.current = true;
|
|
12929
|
+
},
|
|
12930
|
+
onMouseEnter: () => {
|
|
12931
|
+
keepSubmenuOpen.current = true;
|
|
12932
|
+
},
|
|
12933
|
+
onMouseLeave: () => {
|
|
12934
|
+
keepSubmenuOpen.current = false;
|
|
12935
|
+
closeDialogLazily();
|
|
12936
|
+
},
|
|
12937
|
+
ref: (element2) => {
|
|
12938
|
+
setPopperElement(element2);
|
|
12939
|
+
setDialogContainer(element2);
|
|
12940
|
+
},
|
|
12941
|
+
style: styles.popper,
|
|
12942
|
+
tabIndex: -1,
|
|
12943
|
+
...submenuContainerProps
|
|
12944
|
+
},
|
|
12945
|
+
/* @__PURE__ */ import_react27.default.createElement(Submenu, null)
|
|
12946
|
+
));
|
|
12947
|
+
};
|
|
12948
|
+
|
|
12949
|
+
// src/components/MessageActions/RemindMeSubmenu.tsx
|
|
12950
|
+
var RemindMeActionButton = ({
|
|
12951
|
+
className,
|
|
12952
|
+
isMine
|
|
12953
|
+
}) => {
|
|
12954
|
+
const { t } = useTranslationContext();
|
|
12955
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
12956
|
+
ButtonWithSubmenu,
|
|
12957
|
+
{
|
|
12958
|
+
"aria-selected": "false",
|
|
12959
|
+
className,
|
|
12960
|
+
placement: isMine ? "left-start" : "right-start",
|
|
12961
|
+
Submenu: RemindMeSubmenu
|
|
12962
|
+
},
|
|
12963
|
+
t("Remind Me")
|
|
12964
|
+
);
|
|
12965
|
+
};
|
|
12966
|
+
var RemindMeSubmenu = () => {
|
|
12967
|
+
const { t } = useTranslationContext();
|
|
12968
|
+
const { client } = useChatContext();
|
|
12969
|
+
const { message } = useMessageContext();
|
|
12970
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
12971
|
+
"div",
|
|
12972
|
+
{
|
|
12973
|
+
"aria-label": t("aria/Remind Me Options"),
|
|
12974
|
+
className: "str-chat__message-actions-box__submenu",
|
|
12975
|
+
role: "listbox"
|
|
12976
|
+
},
|
|
12977
|
+
client.reminders.scheduledOffsetsMs.map((offsetMs) => /* @__PURE__ */ import_react28.default.createElement(
|
|
12978
|
+
"button",
|
|
12979
|
+
{
|
|
12980
|
+
className: "str-chat__message-actions-list-item-button",
|
|
12981
|
+
key: `reminder-offset-option--${offsetMs}`,
|
|
12982
|
+
onClick: () => {
|
|
12983
|
+
client.reminders.upsertReminder({
|
|
12984
|
+
messageId: message.id,
|
|
12985
|
+
remind_at: new Date((/* @__PURE__ */ new Date()).getTime() + offsetMs).toISOString()
|
|
12986
|
+
});
|
|
12987
|
+
}
|
|
12988
|
+
},
|
|
12989
|
+
t("duration/Remind Me", { milliseconds: offsetMs })
|
|
12990
|
+
))
|
|
12991
|
+
);
|
|
12992
|
+
};
|
|
12993
|
+
|
|
12811
12994
|
// src/components/Message/icons.tsx
|
|
12812
|
-
var
|
|
12813
|
-
var ActionsIcon = ({ className = "" }) => /* @__PURE__ */
|
|
12995
|
+
var import_react29 = __toESM(require("react"));
|
|
12996
|
+
var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement(
|
|
12814
12997
|
"svg",
|
|
12815
12998
|
{
|
|
12816
12999
|
className,
|
|
@@ -12819,7 +13002,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default
|
|
|
12819
13002
|
width: "11",
|
|
12820
13003
|
xmlns: "http://www.w3.org/2000/svg"
|
|
12821
13004
|
},
|
|
12822
|
-
/* @__PURE__ */
|
|
13005
|
+
/* @__PURE__ */ import_react29.default.createElement(
|
|
12823
13006
|
"path",
|
|
12824
13007
|
{
|
|
12825
13008
|
d: "M1.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z",
|
|
@@ -12827,7 +13010,7 @@ var ActionsIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default
|
|
|
12827
13010
|
}
|
|
12828
13011
|
)
|
|
12829
13012
|
);
|
|
12830
|
-
var ReactionIcon = ({ className = "" }) => /* @__PURE__ */
|
|
13013
|
+
var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement(
|
|
12831
13014
|
"svg",
|
|
12832
13015
|
{
|
|
12833
13016
|
className,
|
|
@@ -12836,9 +13019,9 @@ var ReactionIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.defaul
|
|
|
12836
13019
|
width: "12",
|
|
12837
13020
|
xmlns: "http://www.w3.org/2000/svg"
|
|
12838
13021
|
},
|
|
12839
|
-
/* @__PURE__ */
|
|
13022
|
+
/* @__PURE__ */ import_react29.default.createElement("g", { clipRule: "evenodd", fillRule: "evenodd" }, /* @__PURE__ */ import_react29.default.createElement("path", { d: "M6 1.2C3.3 1.2 1.2 3.3 1.2 6c0 2.7 2.1 4.8 4.8 4.8 2.7 0 4.8-2.1 4.8-4.8 0-2.7-2.1-4.8-4.8-4.8zM0 6c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z" }), /* @__PURE__ */ import_react29.default.createElement("path", { d: "M5.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM8.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM3.3 6.7c.3-.2.6-.1.8.1.3.4.8.9 1.5 1 .6.2 1.4.1 2.4-1 .2-.2.6-.3.8 0 .2.2.3.6 0 .8-1.1 1.3-2.4 1.7-3.5 1.5-1-.2-1.8-.9-2.2-1.5-.2-.3-.1-.7.2-.9z" }))
|
|
12840
13023
|
);
|
|
12841
|
-
var ThreadIcon = ({ className = "" }) => /* @__PURE__ */
|
|
13024
|
+
var ThreadIcon = ({ className = "" }) => /* @__PURE__ */ import_react29.default.createElement("svg", { className, height: "10", width: "14", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
12842
13025
|
"path",
|
|
12843
13026
|
{
|
|
12844
13027
|
d: "M8.516 3c4.78 0 4.972 6.5 4.972 6.5-1.6-2.906-2.847-3.184-4.972-3.184v2.872L3.772 4.994 8.516.5V3zM.484 5l4.5-4.237v1.78L2.416 5l2.568 2.125v1.828L.484 5z",
|
|
@@ -12849,7 +13032,7 @@ var ThreadIcon = ({ className = "" }) => /* @__PURE__ */ import_react25.default.
|
|
|
12849
13032
|
// src/components/MessageActions/MessageActions.tsx
|
|
12850
13033
|
var MessageActionsWrapper = (props) => {
|
|
12851
13034
|
const { children, customWrapperClass, inline, toggleOpen } = props;
|
|
12852
|
-
const defaultWrapperClass = (0,
|
|
13035
|
+
const defaultWrapperClass = (0, import_clsx6.default)(
|
|
12853
13036
|
"str-chat__message-simple__actions__action",
|
|
12854
13037
|
"str-chat__message-simple__actions__action--options",
|
|
12855
13038
|
"str-chat__message-actions-container"
|
|
@@ -12859,25 +13042,25 @@ var MessageActionsWrapper = (props) => {
|
|
|
12859
13042
|
"data-testid": "message-actions",
|
|
12860
13043
|
onClick: toggleOpen
|
|
12861
13044
|
};
|
|
12862
|
-
if (inline) return /* @__PURE__ */
|
|
12863
|
-
return /* @__PURE__ */
|
|
13045
|
+
if (inline) return /* @__PURE__ */ import_react30.default.createElement("span", { ...wrapperProps }, children);
|
|
13046
|
+
return /* @__PURE__ */ import_react30.default.createElement("div", { ...wrapperProps }, children);
|
|
12864
13047
|
};
|
|
12865
13048
|
|
|
12866
13049
|
// src/components/Reactions/ReactionSelectorWithButton.tsx
|
|
12867
|
-
var
|
|
13050
|
+
var import_react35 = __toESM(require("react"));
|
|
12868
13051
|
|
|
12869
13052
|
// src/components/Reactions/ReactionSelector.tsx
|
|
12870
|
-
var
|
|
12871
|
-
var
|
|
13053
|
+
var import_react34 = __toESM(require("react"));
|
|
13054
|
+
var import_clsx7 = __toESM(require("clsx"));
|
|
12872
13055
|
|
|
12873
13056
|
// src/components/Reactions/reactionOptions.tsx
|
|
12874
|
-
var
|
|
13057
|
+
var import_react33 = __toESM(require("react"));
|
|
12875
13058
|
|
|
12876
13059
|
// src/components/Reactions/StreamEmoji.tsx
|
|
12877
|
-
var
|
|
13060
|
+
var import_react32 = __toESM(require("react"));
|
|
12878
13061
|
|
|
12879
13062
|
// src/components/Reactions/SpriteImage.tsx
|
|
12880
|
-
var
|
|
13063
|
+
var import_react31 = __toESM(require("react"));
|
|
12881
13064
|
|
|
12882
13065
|
// src/components/Reactions/utils/utils.ts
|
|
12883
13066
|
var isMutableRef = (ref) => {
|
|
@@ -12912,13 +13095,13 @@ var SpriteImage = ({
|
|
|
12912
13095
|
style,
|
|
12913
13096
|
width
|
|
12914
13097
|
}) => {
|
|
12915
|
-
const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0,
|
|
12916
|
-
(0,
|
|
13098
|
+
const [[spriteWidth, spriteHeight], setSpriteDimensions] = (0, import_react31.useState)([0, 0]);
|
|
13099
|
+
(0, import_react31.useEffect)(() => {
|
|
12917
13100
|
getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);
|
|
12918
13101
|
}, [spriteUrl]);
|
|
12919
13102
|
const [x, y] = position4;
|
|
12920
|
-
if (!spriteHeight || !spriteWidth) return /* @__PURE__ */
|
|
12921
|
-
return /* @__PURE__ */
|
|
13103
|
+
if (!spriteHeight || !spriteWidth) return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, fallback);
|
|
13104
|
+
return /* @__PURE__ */ import_react31.default.createElement(
|
|
12922
13105
|
"div",
|
|
12923
13106
|
{
|
|
12924
13107
|
"data-testid": "sprite-image",
|
|
@@ -12956,7 +13139,7 @@ var StreamEmoji = ({
|
|
|
12956
13139
|
type
|
|
12957
13140
|
}) => {
|
|
12958
13141
|
const position4 = StreamSpriteEmojiPositions[type];
|
|
12959
|
-
return /* @__PURE__ */
|
|
13142
|
+
return /* @__PURE__ */ import_react32.default.createElement(
|
|
12960
13143
|
SpriteImage,
|
|
12961
13144
|
{
|
|
12962
13145
|
columns: 2,
|
|
@@ -12975,23 +13158,23 @@ var StreamEmoji = ({
|
|
|
12975
13158
|
var defaultReactionOptions = [
|
|
12976
13159
|
{
|
|
12977
13160
|
type: "haha",
|
|
12978
|
-
Component: () => /* @__PURE__ */
|
|
13161
|
+
Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F602}", type: "haha" }),
|
|
12979
13162
|
name: "Joy"
|
|
12980
13163
|
},
|
|
12981
13164
|
{
|
|
12982
13165
|
type: "like",
|
|
12983
|
-
Component: () => /* @__PURE__ */
|
|
13166
|
+
Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F44D}", type: "like" }),
|
|
12984
13167
|
name: "Thumbs up"
|
|
12985
13168
|
},
|
|
12986
13169
|
{
|
|
12987
13170
|
type: "love",
|
|
12988
|
-
Component: () => /* @__PURE__ */
|
|
13171
|
+
Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u2764\uFE0F", type: "love" }),
|
|
12989
13172
|
name: "Heart"
|
|
12990
13173
|
},
|
|
12991
|
-
{ type: "sad", Component: () => /* @__PURE__ */
|
|
13174
|
+
{ type: "sad", Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F614}", type: "sad" }), name: "Sad" },
|
|
12992
13175
|
{
|
|
12993
13176
|
type: "wow",
|
|
12994
|
-
Component: () => /* @__PURE__ */
|
|
13177
|
+
Component: () => /* @__PURE__ */ import_react33.default.createElement(StreamEmoji, { fallback: "\u{1F632}", type: "wow" }),
|
|
12995
13178
|
name: "Astonished"
|
|
12996
13179
|
}
|
|
12997
13180
|
];
|
|
@@ -13025,23 +13208,23 @@ var UnMemoizedReactionSelector = (props) => {
|
|
|
13025
13208
|
const latestReactions = propLatestReactions || message?.latest_reactions || [];
|
|
13026
13209
|
const ownReactions = propOwnReactions || message?.own_reactions || [];
|
|
13027
13210
|
const reactionGroups = propReactionGroups || message?.reaction_groups || {};
|
|
13028
|
-
const [tooltipReactionType, setTooltipReactionType] = (0,
|
|
13029
|
-
const [tooltipPositions, setTooltipPositions] = (0,
|
|
13030
|
-
const rootRef = (0,
|
|
13031
|
-
const targetRef = (0,
|
|
13032
|
-
const tooltipRef = (0,
|
|
13033
|
-
const showTooltip = (0,
|
|
13211
|
+
const [tooltipReactionType, setTooltipReactionType] = (0, import_react34.useState)(null);
|
|
13212
|
+
const [tooltipPositions, setTooltipPositions] = (0, import_react34.useState)(null);
|
|
13213
|
+
const rootRef = (0, import_react34.useRef)(null);
|
|
13214
|
+
const targetRef = (0, import_react34.useRef)(null);
|
|
13215
|
+
const tooltipRef = (0, import_react34.useRef)(null);
|
|
13216
|
+
const showTooltip = (0, import_react34.useCallback)(
|
|
13034
13217
|
(event, reactionType) => {
|
|
13035
13218
|
targetRef.current = event.currentTarget;
|
|
13036
13219
|
setTooltipReactionType(reactionType);
|
|
13037
13220
|
},
|
|
13038
13221
|
[]
|
|
13039
13222
|
);
|
|
13040
|
-
const hideTooltip = (0,
|
|
13223
|
+
const hideTooltip = (0, import_react34.useCallback)(() => {
|
|
13041
13224
|
setTooltipReactionType(null);
|
|
13042
13225
|
setTooltipPositions(null);
|
|
13043
13226
|
}, []);
|
|
13044
|
-
(0,
|
|
13227
|
+
(0, import_react34.useEffect)(() => {
|
|
13045
13228
|
if (!tooltipReactionType || !rootRef.current) return;
|
|
13046
13229
|
const tooltip = tooltipRef.current?.getBoundingClientRect();
|
|
13047
13230
|
const target = targetRef.current?.getBoundingClientRect();
|
|
@@ -13062,10 +13245,10 @@ var UnMemoizedReactionSelector = (props) => {
|
|
|
13062
13245
|
}).filter(Boolean);
|
|
13063
13246
|
const iHaveReactedWithReaction = (reactionType) => ownReactions.find((reaction) => reaction.type === reactionType);
|
|
13064
13247
|
const getLatestUserForReactionType = (type) => latestReactions.find((reaction) => reaction.type === type && !!reaction.user)?.user || void 0;
|
|
13065
|
-
return /* @__PURE__ */
|
|
13248
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
13066
13249
|
"div",
|
|
13067
13250
|
{
|
|
13068
|
-
className: (0,
|
|
13251
|
+
className: (0, import_clsx7.default)(
|
|
13069
13252
|
"str-chat__reaction-selector str-chat__message-reaction-selector str-chat-react__message-reaction-selector",
|
|
13070
13253
|
{
|
|
13071
13254
|
"str-chat__reaction-selector--reverse": reverse
|
|
@@ -13074,7 +13257,7 @@ var UnMemoizedReactionSelector = (props) => {
|
|
|
13074
13257
|
"data-testid": "reaction-selector",
|
|
13075
13258
|
ref: rootRef
|
|
13076
13259
|
},
|
|
13077
|
-
!!tooltipReactionType && detailedView && /* @__PURE__ */
|
|
13260
|
+
!!tooltipReactionType && detailedView && /* @__PURE__ */ import_react34.default.createElement(
|
|
13078
13261
|
"div",
|
|
13079
13262
|
{
|
|
13080
13263
|
className: "str-chat__reaction-selector-tooltip",
|
|
@@ -13084,17 +13267,17 @@ var UnMemoizedReactionSelector = (props) => {
|
|
|
13084
13267
|
visibility: tooltipPositions ? "visible" : "hidden"
|
|
13085
13268
|
}
|
|
13086
13269
|
},
|
|
13087
|
-
/* @__PURE__ */
|
|
13088
|
-
getUsersPerReactionType(tooltipReactionType)?.map((user, i, users) => /* @__PURE__ */
|
|
13270
|
+
/* @__PURE__ */ import_react34.default.createElement("div", { className: "arrow", style: { left: tooltipPositions?.arrow } }),
|
|
13271
|
+
getUsersPerReactionType(tooltipReactionType)?.map((user, i, users) => /* @__PURE__ */ import_react34.default.createElement("span", { className: "latest-user-username", key: `key-${i}-${user}` }, `${user}${i < users.length - 1 ? ", " : ""}`))
|
|
13089
13272
|
),
|
|
13090
|
-
/* @__PURE__ */
|
|
13273
|
+
/* @__PURE__ */ import_react34.default.createElement("ul", { className: "str-chat__message-reactions-list str-chat__message-reactions-options" }, reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {
|
|
13091
13274
|
const latestUser = getLatestUserForReactionType(reactionType);
|
|
13092
13275
|
const count = reactionGroups[reactionType]?.count ?? 0;
|
|
13093
|
-
return /* @__PURE__ */
|
|
13276
|
+
return /* @__PURE__ */ import_react34.default.createElement("li", { key: reactionType }, /* @__PURE__ */ import_react34.default.createElement(
|
|
13094
13277
|
"button",
|
|
13095
13278
|
{
|
|
13096
13279
|
"aria-label": `Select Reaction: ${reactionName || reactionType}`,
|
|
13097
|
-
className: (0,
|
|
13280
|
+
className: (0, import_clsx7.default)(
|
|
13098
13281
|
"str-chat__message-reactions-list-item str-chat__message-reactions-option",
|
|
13099
13282
|
{
|
|
13100
13283
|
"str-chat__message-reactions-option-selected": iHaveReactedWithReaction(reactionType)
|
|
@@ -13109,7 +13292,7 @@ var UnMemoizedReactionSelector = (props) => {
|
|
|
13109
13292
|
}
|
|
13110
13293
|
}
|
|
13111
13294
|
},
|
|
13112
|
-
!!count && detailedView && /* @__PURE__ */
|
|
13295
|
+
!!count && detailedView && /* @__PURE__ */ import_react34.default.createElement(
|
|
13113
13296
|
"div",
|
|
13114
13297
|
{
|
|
13115
13298
|
className: "latest-user str-chat__message-reactions-last-user",
|
|
@@ -13117,7 +13300,7 @@ var UnMemoizedReactionSelector = (props) => {
|
|
|
13117
13300
|
onMouseEnter: (e) => showTooltip(e, reactionType),
|
|
13118
13301
|
onMouseLeave: hideTooltip
|
|
13119
13302
|
},
|
|
13120
|
-
latestUser ? /* @__PURE__ */
|
|
13303
|
+
latestUser ? /* @__PURE__ */ import_react34.default.createElement(
|
|
13121
13304
|
Avatar2,
|
|
13122
13305
|
{
|
|
13123
13306
|
image: latestUser.image,
|
|
@@ -13125,15 +13308,15 @@ var UnMemoizedReactionSelector = (props) => {
|
|
|
13125
13308
|
size: 20,
|
|
13126
13309
|
user: latestUser
|
|
13127
13310
|
}
|
|
13128
|
-
) : /* @__PURE__ */
|
|
13311
|
+
) : /* @__PURE__ */ import_react34.default.createElement("div", { className: "latest-user-not-found" })
|
|
13129
13312
|
),
|
|
13130
|
-
/* @__PURE__ */
|
|
13131
|
-
Boolean(count) && detailedView && /* @__PURE__ */
|
|
13313
|
+
/* @__PURE__ */ import_react34.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react34.default.createElement(Component, null)),
|
|
13314
|
+
Boolean(count) && detailedView && /* @__PURE__ */ import_react34.default.createElement("span", { className: "str-chat__message-reactions-list-item__count" }, count || "")
|
|
13132
13315
|
));
|
|
13133
13316
|
}))
|
|
13134
13317
|
);
|
|
13135
13318
|
};
|
|
13136
|
-
var ReactionSelector =
|
|
13319
|
+
var ReactionSelector = import_react34.default.memo(
|
|
13137
13320
|
UnMemoizedReactionSelector
|
|
13138
13321
|
);
|
|
13139
13322
|
|
|
@@ -13144,11 +13327,11 @@ var ReactionSelectorWithButton = ({
|
|
|
13144
13327
|
const { t } = useTranslationContext("ReactionSelectorWithButton");
|
|
13145
13328
|
const { isMyMessage, message } = useMessageContext("MessageOptions");
|
|
13146
13329
|
const { ReactionSelector: ReactionSelector2 = ReactionSelector } = useComponentContext("MessageOptions");
|
|
13147
|
-
const buttonRef = (0,
|
|
13330
|
+
const buttonRef = (0, import_react35.useRef)(null);
|
|
13148
13331
|
const dialogId = `reaction-selector--${message.id}`;
|
|
13149
13332
|
const dialog = useDialog({ id: dialogId });
|
|
13150
13333
|
const dialogIsOpen = useDialogIsOpen(dialogId);
|
|
13151
|
-
return /* @__PURE__ */
|
|
13334
|
+
return /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, /* @__PURE__ */ import_react35.default.createElement(
|
|
13152
13335
|
DialogAnchor,
|
|
13153
13336
|
{
|
|
13154
13337
|
id: dialogId,
|
|
@@ -13156,8 +13339,8 @@ var ReactionSelectorWithButton = ({
|
|
|
13156
13339
|
referenceElement: buttonRef.current,
|
|
13157
13340
|
trapFocus: true
|
|
13158
13341
|
},
|
|
13159
|
-
/* @__PURE__ */
|
|
13160
|
-
), /* @__PURE__ */
|
|
13342
|
+
/* @__PURE__ */ import_react35.default.createElement(ReactionSelector2, null)
|
|
13343
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
13161
13344
|
"button",
|
|
13162
13345
|
{
|
|
13163
13346
|
"aria-expanded": dialogIsOpen,
|
|
@@ -13167,14 +13350,14 @@ var ReactionSelectorWithButton = ({
|
|
|
13167
13350
|
onClick: () => dialog?.toggle(),
|
|
13168
13351
|
ref: buttonRef
|
|
13169
13352
|
},
|
|
13170
|
-
/* @__PURE__ */
|
|
13353
|
+
/* @__PURE__ */ import_react35.default.createElement(ReactionIcon2, { className: "str-chat__message-action-icon" })
|
|
13171
13354
|
));
|
|
13172
13355
|
};
|
|
13173
13356
|
|
|
13174
13357
|
// src/components/InfiniteScrollPaginator/InfiniteScrollPaginator.tsx
|
|
13175
|
-
var
|
|
13358
|
+
var import_clsx8 = __toESM(require("clsx"));
|
|
13176
13359
|
var import_lodash2 = __toESM(require("lodash.debounce"));
|
|
13177
|
-
var
|
|
13360
|
+
var import_react36 = __toESM(require("react"));
|
|
13178
13361
|
var mousewheelListener = (event) => {
|
|
13179
13362
|
if (event instanceof WheelEvent && event.deltaY === 1) {
|
|
13180
13363
|
event.preventDefault();
|
|
@@ -13192,9 +13375,9 @@ var InfiniteScrollPaginator = (props) => {
|
|
|
13192
13375
|
useCapture = false,
|
|
13193
13376
|
...componentProps
|
|
13194
13377
|
} = props;
|
|
13195
|
-
const rootRef = (0,
|
|
13196
|
-
const childRef = (0,
|
|
13197
|
-
const scrollListener = (0,
|
|
13378
|
+
const rootRef = (0, import_react36.useRef)(null);
|
|
13379
|
+
const childRef = (0, import_react36.useRef)(null);
|
|
13380
|
+
const scrollListener = (0, import_react36.useMemo)(
|
|
13198
13381
|
() => (0, import_lodash2.default)(() => {
|
|
13199
13382
|
const root3 = rootRef.current;
|
|
13200
13383
|
const child = childRef.current;
|
|
@@ -13221,7 +13404,7 @@ var InfiniteScrollPaginator = (props) => {
|
|
|
13221
13404
|
threshold
|
|
13222
13405
|
]
|
|
13223
13406
|
);
|
|
13224
|
-
(0,
|
|
13407
|
+
(0, import_react36.useEffect)(() => {
|
|
13225
13408
|
const scrollElement = rootRef.current;
|
|
13226
13409
|
if (!scrollElement) return;
|
|
13227
13410
|
scrollElement.addEventListener("scroll", scrollListener, useCapture);
|
|
@@ -13229,7 +13412,7 @@ var InfiniteScrollPaginator = (props) => {
|
|
|
13229
13412
|
scrollElement.removeEventListener("scroll", scrollListener, useCapture);
|
|
13230
13413
|
};
|
|
13231
13414
|
}, [scrollListener, useCapture]);
|
|
13232
|
-
(0,
|
|
13415
|
+
(0, import_react36.useEffect)(() => {
|
|
13233
13416
|
const root3 = rootRef.current;
|
|
13234
13417
|
if (!root3 || typeof ResizeObserver === "undefined" || !scrollListener) return;
|
|
13235
13418
|
const observer = new ResizeObserver(scrollListener);
|
|
@@ -13238,7 +13421,7 @@ var InfiniteScrollPaginator = (props) => {
|
|
|
13238
13421
|
observer.disconnect();
|
|
13239
13422
|
};
|
|
13240
13423
|
}, [scrollListener]);
|
|
13241
|
-
(0,
|
|
13424
|
+
(0, import_react36.useEffect)(() => {
|
|
13242
13425
|
const root3 = rootRef.current;
|
|
13243
13426
|
if (root3) {
|
|
13244
13427
|
root3.addEventListener("wheel", mousewheelListener, { passive: false });
|
|
@@ -13249,21 +13432,17 @@ var InfiniteScrollPaginator = (props) => {
|
|
|
13249
13432
|
}
|
|
13250
13433
|
};
|
|
13251
13434
|
}, [useCapture]);
|
|
13252
|
-
return /* @__PURE__ */
|
|
13435
|
+
return /* @__PURE__ */ import_react36.default.createElement(
|
|
13253
13436
|
"div",
|
|
13254
13437
|
{
|
|
13255
13438
|
...componentProps,
|
|
13256
|
-
className: (0,
|
|
13439
|
+
className: (0, import_clsx8.default)("str-chat__infinite-scroll-paginator", className),
|
|
13257
13440
|
ref: rootRef
|
|
13258
13441
|
},
|
|
13259
|
-
/* @__PURE__ */
|
|
13442
|
+
/* @__PURE__ */ import_react36.default.createElement("div", { className: "str-chat__infinite-scroll-paginator__content", ref: childRef }, children)
|
|
13260
13443
|
);
|
|
13261
13444
|
};
|
|
13262
13445
|
|
|
13263
|
-
// src/components/Thread/Thread.tsx
|
|
13264
|
-
var LegacyThreadContext = import_react33.default.createContext({ legacyThread: void 0 });
|
|
13265
|
-
var useLegacyThreadContext = () => (0, import_react33.useContext)(LegacyThreadContext);
|
|
13266
|
-
|
|
13267
13446
|
// src/components/MessageInput/hooks/useMessageComposer.ts
|
|
13268
13447
|
var queueCache = new import_stream_chat.FixedSizeQueueCache(64);
|
|
13269
13448
|
var useMessageComposer = () => {
|
|
@@ -13272,15 +13451,15 @@ var useMessageComposer = () => {
|
|
|
13272
13451
|
const { editing, message: editedMessage } = useMessageContext();
|
|
13273
13452
|
const { legacyThread: parentMessage } = useLegacyThreadContext();
|
|
13274
13453
|
const threadInstance = useThreadContext();
|
|
13275
|
-
const cachedEditedMessage = (0,
|
|
13454
|
+
const cachedEditedMessage = (0, import_react37.useMemo)(() => {
|
|
13276
13455
|
if (!editedMessage) return void 0;
|
|
13277
13456
|
return editedMessage;
|
|
13278
13457
|
}, [editedMessage?.id]);
|
|
13279
|
-
const cachedParentMessage = (0,
|
|
13458
|
+
const cachedParentMessage = (0, import_react37.useMemo)(() => {
|
|
13280
13459
|
if (!parentMessage) return void 0;
|
|
13281
13460
|
return parentMessage;
|
|
13282
13461
|
}, [parentMessage?.id]);
|
|
13283
|
-
const messageComposer = (0,
|
|
13462
|
+
const messageComposer = (0, import_react37.useMemo)(() => {
|
|
13284
13463
|
if (editing && cachedEditedMessage) {
|
|
13285
13464
|
const tag = import_stream_chat.MessageComposer.constructTag(cachedEditedMessage);
|
|
13286
13465
|
const cachedComposer = queueCache.get(tag);
|
|
@@ -13320,7 +13499,7 @@ var useMessageComposer = () => {
|
|
|
13320
13499
|
) && !queueCache.peek(messageComposer.tag)) {
|
|
13321
13500
|
queueCache.add(messageComposer.tag, messageComposer);
|
|
13322
13501
|
}
|
|
13323
|
-
(0,
|
|
13502
|
+
(0, import_react37.useEffect)(() => {
|
|
13324
13503
|
const unsubscribe = messageComposer.registerSubscriptions();
|
|
13325
13504
|
return () => {
|
|
13326
13505
|
unsubscribe();
|
|
@@ -13330,17 +13509,17 @@ var useMessageComposer = () => {
|
|
|
13330
13509
|
};
|
|
13331
13510
|
|
|
13332
13511
|
// src/experimental/Search/hooks/useSearchQueriesInProgress.ts
|
|
13333
|
-
var
|
|
13512
|
+
var import_react38 = require("react");
|
|
13334
13513
|
var searchControllerStateSelector = (value) => ({
|
|
13335
13514
|
sources: value.sources
|
|
13336
13515
|
});
|
|
13337
13516
|
var useSearchQueriesInProgress = (searchController) => {
|
|
13338
|
-
const [queriesInProgress, setQueriesInProgress] = (0,
|
|
13517
|
+
const [queriesInProgress, setQueriesInProgress] = (0, import_react38.useState)([]);
|
|
13339
13518
|
const { sources } = useStateStore(
|
|
13340
13519
|
searchController.state,
|
|
13341
13520
|
searchControllerStateSelector
|
|
13342
13521
|
);
|
|
13343
|
-
(0,
|
|
13522
|
+
(0, import_react38.useEffect)(() => {
|
|
13344
13523
|
const subscriptions = sources.map(
|
|
13345
13524
|
(source) => source.state.subscribeWithSelector(
|
|
13346
13525
|
(value) => ({ isLoading: value.isLoading }),
|
|
@@ -13360,7 +13539,7 @@ var useSearchQueriesInProgress = (searchController) => {
|
|
|
13360
13539
|
};
|
|
13361
13540
|
|
|
13362
13541
|
// src/experimental/MessageActions/hooks/useBaseMessageActionSetFilter.ts
|
|
13363
|
-
var
|
|
13542
|
+
var import_react39 = require("react");
|
|
13364
13543
|
var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
|
|
13365
13544
|
const { initialMessage: isInitialMessage, message } = useMessageContext();
|
|
13366
13545
|
const {
|
|
@@ -13374,7 +13553,7 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
|
|
|
13374
13553
|
canReply
|
|
13375
13554
|
} = useUserRole(message);
|
|
13376
13555
|
const isMessageThreadReply = typeof message.parent_id === "string";
|
|
13377
|
-
return (0,
|
|
13556
|
+
return (0, import_react39.useMemo)(() => {
|
|
13378
13557
|
if (disable2) return messageActionSet;
|
|
13379
13558
|
if (isInitialMessage || // not sure whether this thing even works anymore
|
|
13380
13559
|
!message.type || message.type === "error" || message.type === "system" || message.type === "ephemeral" || message.status === "failed" || message.status === "sending")
|
|
@@ -13405,8 +13584,8 @@ var useBaseMessageActionSetFilter = (messageActionSet, disable2 = false) => {
|
|
|
13405
13584
|
};
|
|
13406
13585
|
|
|
13407
13586
|
// src/experimental/MessageActions/hooks/useSplitMessageActionSet.ts
|
|
13408
|
-
var
|
|
13409
|
-
var useSplitMessageActionSet = (messageActionSet) => (0,
|
|
13587
|
+
var import_react40 = require("react");
|
|
13588
|
+
var useSplitMessageActionSet = (messageActionSet) => (0, import_react40.useMemo)(() => {
|
|
13410
13589
|
const quickActionSet = [];
|
|
13411
13590
|
const dropdownActionSet = [];
|
|
13412
13591
|
for (const action of messageActionSet) {
|
|
@@ -13417,14 +13596,15 @@ var useSplitMessageActionSet = (messageActionSet) => (0, import_react37.useMemo)
|
|
|
13417
13596
|
}, [messageActionSet]);
|
|
13418
13597
|
|
|
13419
13598
|
// src/experimental/MessageActions/defaults.tsx
|
|
13420
|
-
var
|
|
13599
|
+
var import_react41 = __toESM(require("react"));
|
|
13600
|
+
var msgActionsBoxButtonClassName = "str-chat__message-actions-list-item-button";
|
|
13421
13601
|
var DefaultDropdownActionButton = ({
|
|
13422
13602
|
"aria-selected": ariaSelected = "false",
|
|
13423
13603
|
children,
|
|
13424
|
-
className =
|
|
13604
|
+
className = msgActionsBoxButtonClassName,
|
|
13425
13605
|
role = "option",
|
|
13426
13606
|
...rest
|
|
13427
|
-
}) => /* @__PURE__ */
|
|
13607
|
+
}) => /* @__PURE__ */ import_react41.default.createElement("button", { "aria-selected": ariaSelected, className, role, ...rest }, children);
|
|
13428
13608
|
var DefaultMessageActionComponents = {
|
|
13429
13609
|
dropdown: {
|
|
13430
13610
|
Quote() {
|
|
@@ -13439,48 +13619,71 @@ var DefaultMessageActionComponents = {
|
|
|
13439
13619
|
textarea.focus();
|
|
13440
13620
|
}
|
|
13441
13621
|
};
|
|
13442
|
-
return /* @__PURE__ */
|
|
13622
|
+
return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleQuote }, t("Quote"));
|
|
13443
13623
|
},
|
|
13444
13624
|
Pin() {
|
|
13445
13625
|
const { handlePin, message } = useMessageContext();
|
|
13446
13626
|
const { t } = useTranslationContext();
|
|
13447
|
-
return /* @__PURE__ */
|
|
13627
|
+
return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handlePin }, !message.pinned ? t("Pin") : t("Unpin"));
|
|
13448
13628
|
},
|
|
13449
13629
|
MarkUnread() {
|
|
13450
13630
|
const { handleMarkUnread } = useMessageContext();
|
|
13451
13631
|
const { t } = useTranslationContext();
|
|
13452
|
-
return /* @__PURE__ */
|
|
13632
|
+
return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMarkUnread }, t("Mark as unread"));
|
|
13453
13633
|
},
|
|
13454
13634
|
Flag() {
|
|
13455
13635
|
const { handleFlag } = useMessageContext();
|
|
13456
13636
|
const { t } = useTranslationContext();
|
|
13457
|
-
return /* @__PURE__ */
|
|
13637
|
+
return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleFlag }, t("Flag"));
|
|
13458
13638
|
},
|
|
13459
13639
|
Mute() {
|
|
13460
13640
|
const { handleMute, message } = useMessageContext();
|
|
13461
13641
|
const { mutes } = useChatContext();
|
|
13462
13642
|
const { t } = useTranslationContext();
|
|
13463
|
-
return /* @__PURE__ */
|
|
13643
|
+
return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleMute }, isUserMuted(message, mutes) ? t("Unmute") : t("Mute"));
|
|
13464
13644
|
},
|
|
13465
13645
|
Edit() {
|
|
13466
13646
|
const { handleEdit } = useMessageContext();
|
|
13467
13647
|
const { t } = useTranslationContext();
|
|
13468
|
-
return /* @__PURE__ */
|
|
13648
|
+
return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleEdit }, t("Edit Message"));
|
|
13469
13649
|
},
|
|
13470
13650
|
Delete() {
|
|
13471
13651
|
const { handleDelete } = useMessageContext();
|
|
13472
13652
|
const { t } = useTranslationContext();
|
|
13473
|
-
return /* @__PURE__ */
|
|
13653
|
+
return /* @__PURE__ */ import_react41.default.createElement(DefaultDropdownActionButton, { onClick: handleDelete }, t("Delete"));
|
|
13654
|
+
},
|
|
13655
|
+
RemindMe() {
|
|
13656
|
+
const { isMyMessage } = useMessageContext();
|
|
13657
|
+
return /* @__PURE__ */ import_react41.default.createElement(
|
|
13658
|
+
RemindMeActionButton,
|
|
13659
|
+
{
|
|
13660
|
+
className: msgActionsBoxButtonClassName,
|
|
13661
|
+
isMine: isMyMessage()
|
|
13662
|
+
}
|
|
13663
|
+
);
|
|
13664
|
+
},
|
|
13665
|
+
SaveForLater() {
|
|
13666
|
+
const { client } = useChatContext();
|
|
13667
|
+
const { message } = useMessageContext();
|
|
13668
|
+
const { t } = useTranslationContext();
|
|
13669
|
+
const reminder = useMessageReminder(message.id);
|
|
13670
|
+
return /* @__PURE__ */ import_react41.default.createElement(
|
|
13671
|
+
DefaultDropdownActionButton,
|
|
13672
|
+
{
|
|
13673
|
+
onClick: () => reminder ? client.reminders.deleteReminder(reminder.id) : client.reminders.createReminder({ messageId: message.id })
|
|
13674
|
+
},
|
|
13675
|
+
reminder ? t("Remove reminder") : t("Save for later")
|
|
13676
|
+
);
|
|
13474
13677
|
}
|
|
13475
13678
|
},
|
|
13476
13679
|
quick: {
|
|
13477
13680
|
React() {
|
|
13478
|
-
return /* @__PURE__ */
|
|
13681
|
+
return /* @__PURE__ */ import_react41.default.createElement(ReactionSelectorWithButton, { ReactionIcon });
|
|
13479
13682
|
},
|
|
13480
13683
|
Reply() {
|
|
13481
13684
|
const { handleOpenThread } = useMessageContext();
|
|
13482
13685
|
const { t } = useTranslationContext();
|
|
13483
|
-
return /* @__PURE__ */
|
|
13686
|
+
return /* @__PURE__ */ import_react41.default.createElement(
|
|
13484
13687
|
"button",
|
|
13485
13688
|
{
|
|
13486
13689
|
"aria-label": t("aria/Open Thread"),
|
|
@@ -13488,7 +13691,7 @@ var DefaultMessageActionComponents = {
|
|
|
13488
13691
|
"data-testid": "thread-action",
|
|
13489
13692
|
onClick: handleOpenThread
|
|
13490
13693
|
},
|
|
13491
|
-
/* @__PURE__ */
|
|
13694
|
+
/* @__PURE__ */ import_react41.default.createElement(ThreadIcon, { className: "str-chat__message-action-icon" })
|
|
13492
13695
|
);
|
|
13493
13696
|
}
|
|
13494
13697
|
}
|
|
@@ -13539,6 +13742,16 @@ var defaultMessageActionSet = [
|
|
|
13539
13742
|
Component: DefaultMessageActionComponents.dropdown.MarkUnread,
|
|
13540
13743
|
placement: "dropdown",
|
|
13541
13744
|
type: "markUnread"
|
|
13745
|
+
},
|
|
13746
|
+
{
|
|
13747
|
+
Component: DefaultMessageActionComponents.dropdown.RemindMe,
|
|
13748
|
+
placement: "dropdown",
|
|
13749
|
+
type: "remindMe"
|
|
13750
|
+
},
|
|
13751
|
+
{
|
|
13752
|
+
Component: DefaultMessageActionComponents.dropdown.SaveForLater,
|
|
13753
|
+
placement: "dropdown",
|
|
13754
|
+
type: "saveForLater"
|
|
13542
13755
|
}
|
|
13543
13756
|
];
|
|
13544
13757
|
|
|
@@ -13550,7 +13763,7 @@ var MessageActions = ({
|
|
|
13550
13763
|
const { theme } = useChatContext();
|
|
13551
13764
|
const { isMyMessage, message } = useMessageContext();
|
|
13552
13765
|
const { t } = useTranslationContext();
|
|
13553
|
-
const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0,
|
|
13766
|
+
const [actionsBoxButtonElement, setActionsBoxButtonElement] = (0, import_react42.useState)(null);
|
|
13554
13767
|
const filteredMessageActionSet = useBaseMessageActionSetFilter(
|
|
13555
13768
|
messageActionSet,
|
|
13556
13769
|
disableBaseMessageActionSetFilter
|
|
@@ -13566,14 +13779,14 @@ var MessageActions = ({
|
|
|
13566
13779
|
if (dropdownActionSet.length + quickActionSet.length === 0) {
|
|
13567
13780
|
return null;
|
|
13568
13781
|
}
|
|
13569
|
-
return /* @__PURE__ */
|
|
13782
|
+
return /* @__PURE__ */ import_react42.default.createElement(
|
|
13570
13783
|
"div",
|
|
13571
13784
|
{
|
|
13572
13785
|
className: (0, import_clsx9.default)(`str-chat__message-${theme}__actions str-chat__message-options`, {
|
|
13573
13786
|
"str-chat__message-options--active": dropdownDialogIsOpen || reactionSelectorDialogIsOpen
|
|
13574
13787
|
})
|
|
13575
13788
|
},
|
|
13576
|
-
dropdownActionSet.length > 0 && /* @__PURE__ */
|
|
13789
|
+
dropdownActionSet.length > 0 && /* @__PURE__ */ import_react42.default.createElement(MessageActionsWrapper, { inline: false, toggleOpen: dialog?.toggle }, /* @__PURE__ */ import_react42.default.createElement(
|
|
13577
13790
|
"button",
|
|
13578
13791
|
{
|
|
13579
13792
|
"aria-expanded": dropdownDialogIsOpen,
|
|
@@ -13583,8 +13796,8 @@ var MessageActions = ({
|
|
|
13583
13796
|
"data-testid": "message-actions-toggle-button",
|
|
13584
13797
|
ref: setActionsBoxButtonElement
|
|
13585
13798
|
},
|
|
13586
|
-
/* @__PURE__ */
|
|
13587
|
-
), /* @__PURE__ */
|
|
13799
|
+
/* @__PURE__ */ import_react42.default.createElement(ActionsIcon, { className: "str-chat__message-action-icon" })
|
|
13800
|
+
), /* @__PURE__ */ import_react42.default.createElement(
|
|
13588
13801
|
DialogAnchor,
|
|
13589
13802
|
{
|
|
13590
13803
|
id: dropdownDialogId,
|
|
@@ -13593,21 +13806,21 @@ var MessageActions = ({
|
|
|
13593
13806
|
tabIndex: -1,
|
|
13594
13807
|
trapFocus: true
|
|
13595
13808
|
},
|
|
13596
|
-
/* @__PURE__ */
|
|
13809
|
+
/* @__PURE__ */ import_react42.default.createElement(DropdownBox, { open: dropdownDialogIsOpen }, dropdownActionSet.map(({ Component: DropdownActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(DropdownActionComponent, { key: type })))
|
|
13597
13810
|
)),
|
|
13598
|
-
quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */
|
|
13811
|
+
quickActionSet.map(({ Component: QuickActionComponent, type }) => /* @__PURE__ */ import_react42.default.createElement(QuickActionComponent, { key: type }))
|
|
13599
13812
|
);
|
|
13600
13813
|
};
|
|
13601
13814
|
var DropdownBox = ({ children, open }) => {
|
|
13602
13815
|
const { t } = useTranslationContext();
|
|
13603
|
-
return /* @__PURE__ */
|
|
13816
|
+
return /* @__PURE__ */ import_react42.default.createElement(
|
|
13604
13817
|
"div",
|
|
13605
13818
|
{
|
|
13606
13819
|
className: (0, import_clsx9.default)("str-chat__message-actions-box", {
|
|
13607
13820
|
"str-chat__message-actions-box--open": open
|
|
13608
13821
|
})
|
|
13609
13822
|
},
|
|
13610
|
-
/* @__PURE__ */
|
|
13823
|
+
/* @__PURE__ */ import_react42.default.createElement(
|
|
13611
13824
|
"div",
|
|
13612
13825
|
{
|
|
13613
13826
|
"aria-label": t("aria/Message Options"),
|
|
@@ -13621,21 +13834,21 @@ var DropdownBox = ({ children, open }) => {
|
|
|
13621
13834
|
|
|
13622
13835
|
// src/experimental/Search/Search.tsx
|
|
13623
13836
|
var import_clsx12 = __toESM(require("clsx"));
|
|
13624
|
-
var
|
|
13837
|
+
var import_react55 = __toESM(require("react"));
|
|
13625
13838
|
|
|
13626
13839
|
// src/experimental/Search/SearchBar/SearchBar.tsx
|
|
13627
13840
|
var import_clsx10 = __toESM(require("clsx"));
|
|
13628
|
-
var
|
|
13841
|
+
var import_react44 = __toESM(require("react"));
|
|
13629
13842
|
|
|
13630
13843
|
// src/experimental/Search/SearchContext.tsx
|
|
13631
|
-
var
|
|
13632
|
-
var SearchContext = (0,
|
|
13844
|
+
var import_react43 = __toESM(require("react"));
|
|
13845
|
+
var SearchContext = (0, import_react43.createContext)(void 0);
|
|
13633
13846
|
var SearchContextProvider = ({
|
|
13634
13847
|
children,
|
|
13635
13848
|
value
|
|
13636
|
-
}) => /* @__PURE__ */
|
|
13849
|
+
}) => /* @__PURE__ */ import_react43.default.createElement(SearchContext.Provider, { value }, children);
|
|
13637
13850
|
var useSearchContext = () => {
|
|
13638
|
-
const contextValue = (0,
|
|
13851
|
+
const contextValue = (0, import_react43.useContext)(SearchContext);
|
|
13639
13852
|
return contextValue;
|
|
13640
13853
|
};
|
|
13641
13854
|
|
|
@@ -13648,12 +13861,12 @@ var SearchBar = () => {
|
|
|
13648
13861
|
const { t } = useTranslationContext();
|
|
13649
13862
|
const { disabled, exitSearchOnInputBlur, placeholder, searchController } = useSearchContext();
|
|
13650
13863
|
const queriesInProgress = useSearchQueriesInProgress(searchController);
|
|
13651
|
-
const [input, setInput] = (0,
|
|
13864
|
+
const [input, setInput] = (0, import_react44.useState)(null);
|
|
13652
13865
|
const { isActive, searchQuery } = useStateStore(
|
|
13653
13866
|
searchController.state,
|
|
13654
13867
|
searchControllerStateSelector2
|
|
13655
13868
|
);
|
|
13656
|
-
(0,
|
|
13869
|
+
(0, import_react44.useEffect)(() => {
|
|
13657
13870
|
if (!input) return;
|
|
13658
13871
|
const handleKeyDown = (event) => {
|
|
13659
13872
|
if (event.key === "Escape") {
|
|
@@ -13666,15 +13879,15 @@ var SearchBar = () => {
|
|
|
13666
13879
|
document.removeEventListener("keydown", handleKeyDown);
|
|
13667
13880
|
};
|
|
13668
13881
|
}, [searchController, input]);
|
|
13669
|
-
return /* @__PURE__ */
|
|
13882
|
+
return /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-bar", "data-testid": "search-bar" }, /* @__PURE__ */ import_react44.default.createElement(
|
|
13670
13883
|
"div",
|
|
13671
13884
|
{
|
|
13672
13885
|
className: (0, import_clsx10.default)("str-chat__search-input--wrapper", {
|
|
13673
13886
|
"str-chat__search-input--wrapper-active": isActive
|
|
13674
13887
|
})
|
|
13675
13888
|
},
|
|
13676
|
-
/* @__PURE__ */
|
|
13677
|
-
/* @__PURE__ */
|
|
13889
|
+
/* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--icon" }),
|
|
13890
|
+
/* @__PURE__ */ import_react44.default.createElement(
|
|
13678
13891
|
"input",
|
|
13679
13892
|
{
|
|
13680
13893
|
className: "str-chat__search-input",
|
|
@@ -13697,7 +13910,7 @@ var SearchBar = () => {
|
|
|
13697
13910
|
value: searchQuery
|
|
13698
13911
|
}
|
|
13699
13912
|
),
|
|
13700
|
-
searchQuery && /* @__PURE__ */
|
|
13913
|
+
searchQuery && /* @__PURE__ */ import_react44.default.createElement(
|
|
13701
13914
|
"button",
|
|
13702
13915
|
{
|
|
13703
13916
|
className: "str-chat__search-input--clear-button",
|
|
@@ -13708,9 +13921,9 @@ var SearchBar = () => {
|
|
|
13708
13921
|
input?.focus();
|
|
13709
13922
|
}
|
|
13710
13923
|
},
|
|
13711
|
-
/* @__PURE__ */
|
|
13924
|
+
/* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__search-input--clear-button-icon" })
|
|
13712
13925
|
)
|
|
13713
|
-
), isActive ? /* @__PURE__ */
|
|
13926
|
+
), isActive ? /* @__PURE__ */ import_react44.default.createElement(
|
|
13714
13927
|
"button",
|
|
13715
13928
|
{
|
|
13716
13929
|
className: (0, import_clsx10.default)(
|
|
@@ -13727,25 +13940,25 @@ var SearchBar = () => {
|
|
|
13727
13940
|
};
|
|
13728
13941
|
|
|
13729
13942
|
// src/experimental/Search/SearchResults/SearchResults.tsx
|
|
13730
|
-
var
|
|
13943
|
+
var import_react54 = __toESM(require("react"));
|
|
13731
13944
|
|
|
13732
13945
|
// src/experimental/Search/SearchResults/SearchSourceResults.tsx
|
|
13733
|
-
var
|
|
13946
|
+
var import_react51 = __toESM(require("react"));
|
|
13734
13947
|
|
|
13735
13948
|
// src/experimental/Search/SearchResults/SearchSourceResultList.tsx
|
|
13736
|
-
var
|
|
13949
|
+
var import_react49 = __toESM(require("react"));
|
|
13737
13950
|
|
|
13738
13951
|
// src/experimental/Search/SearchResults/SearchResultItem.tsx
|
|
13739
|
-
var
|
|
13952
|
+
var import_react45 = __toESM(require("react"));
|
|
13740
13953
|
var import_lodash3 = __toESM(require("lodash.uniqby"));
|
|
13741
13954
|
var ChannelSearchResultItem = ({ item }) => {
|
|
13742
13955
|
const { setActiveChannel } = useChatContext();
|
|
13743
13956
|
const { setChannels } = useChannelListContext();
|
|
13744
|
-
const onSelect = (0,
|
|
13957
|
+
const onSelect = (0, import_react45.useCallback)(() => {
|
|
13745
13958
|
setActiveChannel(item);
|
|
13746
13959
|
setChannels?.((channels) => (0, import_lodash3.default)([item, ...channels], "cid"));
|
|
13747
13960
|
}, [item, setActiveChannel, setChannels]);
|
|
13748
|
-
return /* @__PURE__ */
|
|
13961
|
+
return /* @__PURE__ */ import_react45.default.createElement(
|
|
13749
13962
|
ChannelPreview,
|
|
13750
13963
|
{
|
|
13751
13964
|
channel: item,
|
|
@@ -13764,13 +13977,13 @@ var MessageSearchResultItem = ({
|
|
|
13764
13977
|
setActiveChannel
|
|
13765
13978
|
} = useChatContext();
|
|
13766
13979
|
const { setChannels } = useChannelListContext();
|
|
13767
|
-
const channel = (0,
|
|
13980
|
+
const channel = (0, import_react45.useMemo)(() => {
|
|
13768
13981
|
const { channel: channelData } = item;
|
|
13769
13982
|
const type = channelData?.type ?? "unknown";
|
|
13770
13983
|
const id = channelData?.id ?? "unknown";
|
|
13771
13984
|
return client.channel(type, id);
|
|
13772
13985
|
}, [client, item]);
|
|
13773
|
-
const onSelect = (0,
|
|
13986
|
+
const onSelect = (0, import_react45.useCallback)(async () => {
|
|
13774
13987
|
if (!channel) return;
|
|
13775
13988
|
await channel.state.loadMessageIntoState(
|
|
13776
13989
|
item.id,
|
|
@@ -13781,9 +13994,9 @@ var MessageSearchResultItem = ({
|
|
|
13781
13994
|
setActiveChannel(channel);
|
|
13782
13995
|
setChannels?.((channels) => (0, import_lodash3.default)([channel, ...channels], "cid"));
|
|
13783
13996
|
}, [channel, item, searchController, setActiveChannel, setChannels]);
|
|
13784
|
-
const getLatestMessagePreview2 = (0,
|
|
13997
|
+
const getLatestMessagePreview2 = (0, import_react45.useCallback)(() => item.text, [item]);
|
|
13785
13998
|
if (!channel) return;
|
|
13786
|
-
return /* @__PURE__ */
|
|
13999
|
+
return /* @__PURE__ */ import_react45.default.createElement(
|
|
13787
14000
|
ChannelPreview,
|
|
13788
14001
|
{
|
|
13789
14002
|
active: channel.cid === activeChannel?.cid && item.id === searchController._internalState.getLatestValue().focusedMessage?.id,
|
|
@@ -13798,7 +14011,7 @@ var UserSearchResultItem = ({ item }) => {
|
|
|
13798
14011
|
const { client, setActiveChannel } = useChatContext();
|
|
13799
14012
|
const { setChannels } = useChannelListContext();
|
|
13800
14013
|
const { directMessagingChannelType } = useSearchContext();
|
|
13801
|
-
const onClick = (0,
|
|
14014
|
+
const onClick = (0, import_react45.useCallback)(() => {
|
|
13802
14015
|
const newChannel = client.channel(directMessagingChannelType, {
|
|
13803
14016
|
members: [client.userID, item.id]
|
|
13804
14017
|
});
|
|
@@ -13806,7 +14019,7 @@ var UserSearchResultItem = ({ item }) => {
|
|
|
13806
14019
|
setActiveChannel(newChannel);
|
|
13807
14020
|
setChannels?.((channels) => (0, import_lodash3.default)([newChannel, ...channels], "cid"));
|
|
13808
14021
|
}, [client, item, setActiveChannel, setChannels, directMessagingChannelType]);
|
|
13809
|
-
return /* @__PURE__ */
|
|
14022
|
+
return /* @__PURE__ */ import_react45.default.createElement(
|
|
13810
14023
|
"button",
|
|
13811
14024
|
{
|
|
13812
14025
|
"aria-label": `Select User Channel: ${item.name || ""}`,
|
|
@@ -13815,7 +14028,7 @@ var UserSearchResultItem = ({ item }) => {
|
|
|
13815
14028
|
onClick,
|
|
13816
14029
|
role: "option"
|
|
13817
14030
|
},
|
|
13818
|
-
/* @__PURE__ */
|
|
14031
|
+
/* @__PURE__ */ import_react45.default.createElement(
|
|
13819
14032
|
Avatar,
|
|
13820
14033
|
{
|
|
13821
14034
|
className: "str-chat__avatar--channel-preview",
|
|
@@ -13824,7 +14037,7 @@ var UserSearchResultItem = ({ item }) => {
|
|
|
13824
14037
|
user: item
|
|
13825
14038
|
}
|
|
13826
14039
|
),
|
|
13827
|
-
/* @__PURE__ */
|
|
14040
|
+
/* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__search-result--display-name" }, item.name || item.id)
|
|
13828
14041
|
);
|
|
13829
14042
|
};
|
|
13830
14043
|
var DefaultSearchResultItems = {
|
|
@@ -13834,18 +14047,18 @@ var DefaultSearchResultItems = {
|
|
|
13834
14047
|
};
|
|
13835
14048
|
|
|
13836
14049
|
// src/experimental/Search/SearchResults/SearchSourceResultListFooter.tsx
|
|
13837
|
-
var
|
|
14050
|
+
var import_react48 = __toESM(require("react"));
|
|
13838
14051
|
|
|
13839
14052
|
// src/experimental/Search/SearchResults/SearchSourceResultsLoadingIndicator.tsx
|
|
13840
|
-
var
|
|
14053
|
+
var import_react47 = __toESM(require("react"));
|
|
13841
14054
|
|
|
13842
14055
|
// src/experimental/Search/SearchSourceResultsContext.tsx
|
|
13843
|
-
var
|
|
13844
|
-
var SearchSourceResultsContext = (0,
|
|
14056
|
+
var import_react46 = __toESM(require("react"));
|
|
14057
|
+
var SearchSourceResultsContext = (0, import_react46.createContext)(void 0);
|
|
13845
14058
|
var SearchSourceResultsContextProvider = ({
|
|
13846
14059
|
children,
|
|
13847
14060
|
value
|
|
13848
|
-
}) => /* @__PURE__ */
|
|
14061
|
+
}) => /* @__PURE__ */ import_react46.default.createElement(
|
|
13849
14062
|
SearchSourceResultsContext.Provider,
|
|
13850
14063
|
{
|
|
13851
14064
|
value
|
|
@@ -13853,7 +14066,7 @@ var SearchSourceResultsContextProvider = ({
|
|
|
13853
14066
|
children
|
|
13854
14067
|
);
|
|
13855
14068
|
var useSearchSourceResultsContext = () => {
|
|
13856
|
-
const contextValue = (0,
|
|
14069
|
+
const contextValue = (0, import_react46.useContext)(SearchSourceResultsContext);
|
|
13857
14070
|
return contextValue;
|
|
13858
14071
|
};
|
|
13859
14072
|
|
|
@@ -13861,7 +14074,7 @@ var useSearchSourceResultsContext = () => {
|
|
|
13861
14074
|
var SearchSourceResultsLoadingIndicator = () => {
|
|
13862
14075
|
const { t } = useTranslationContext();
|
|
13863
14076
|
const { searchSource } = useSearchSourceResultsContext();
|
|
13864
|
-
return /* @__PURE__ */
|
|
14077
|
+
return /* @__PURE__ */ import_react47.default.createElement(
|
|
13865
14078
|
"div",
|
|
13866
14079
|
{
|
|
13867
14080
|
className: "str-chat__search-source-results__loading-indicator",
|
|
@@ -13886,13 +14099,13 @@ var SearchSourceResultListFooter = () => {
|
|
|
13886
14099
|
searchSource.state,
|
|
13887
14100
|
searchSourceStateSelector
|
|
13888
14101
|
);
|
|
13889
|
-
return /* @__PURE__ */
|
|
14102
|
+
return /* @__PURE__ */ import_react48.default.createElement(
|
|
13890
14103
|
"div",
|
|
13891
14104
|
{
|
|
13892
14105
|
className: "str-chat__search-source-result-list__footer",
|
|
13893
14106
|
"data-testid": "search-footer"
|
|
13894
14107
|
},
|
|
13895
|
-
isLoading ? /* @__PURE__ */
|
|
14108
|
+
isLoading ? /* @__PURE__ */ import_react48.default.createElement(SearchSourceResultsLoadingIndicator2, null) : !hasNext ? /* @__PURE__ */ import_react48.default.createElement("div", { className: "str-chat__search-source-results---empty" }, t("All results loaded")) : null
|
|
13896
14109
|
);
|
|
13897
14110
|
};
|
|
13898
14111
|
|
|
@@ -13910,36 +14123,36 @@ var SearchSourceResultList = ({
|
|
|
13910
14123
|
const { items } = useStateStore(searchSource.state, searchSourceStateSelector2);
|
|
13911
14124
|
const SearchResultItem = SearchResultItems[searchSource.type];
|
|
13912
14125
|
if (!SearchResultItem) return null;
|
|
13913
|
-
return /* @__PURE__ */
|
|
14126
|
+
return /* @__PURE__ */ import_react49.default.createElement(
|
|
13914
14127
|
"div",
|
|
13915
14128
|
{
|
|
13916
14129
|
className: "str-chat__search-source-result-list",
|
|
13917
14130
|
"data-testid": "search-source-result-list"
|
|
13918
14131
|
},
|
|
13919
|
-
/* @__PURE__ */
|
|
14132
|
+
/* @__PURE__ */ import_react49.default.createElement(
|
|
13920
14133
|
InfiniteScrollPaginator,
|
|
13921
14134
|
{
|
|
13922
14135
|
loadNextDebounceMs: loadMoreDebounceMs,
|
|
13923
14136
|
loadNextOnScrollToBottom: searchSource.search,
|
|
13924
14137
|
threshold: loadMoreThresholdPx
|
|
13925
14138
|
},
|
|
13926
|
-
items?.map((item, i) => /* @__PURE__ */
|
|
14139
|
+
items?.map((item, i) => /* @__PURE__ */ import_react49.default.createElement(
|
|
13927
14140
|
SearchResultItem,
|
|
13928
14141
|
{
|
|
13929
14142
|
item,
|
|
13930
14143
|
key: `source-search-result-${searchSource.type}-${i}`
|
|
13931
14144
|
}
|
|
13932
14145
|
)),
|
|
13933
|
-
/* @__PURE__ */
|
|
14146
|
+
/* @__PURE__ */ import_react49.default.createElement(SearchSourceResultListFooter2, null)
|
|
13934
14147
|
)
|
|
13935
14148
|
);
|
|
13936
14149
|
};
|
|
13937
14150
|
|
|
13938
14151
|
// src/experimental/Search/SearchResults/SearchSourceResultsEmpty.tsx
|
|
13939
|
-
var
|
|
14152
|
+
var import_react50 = __toESM(require("react"));
|
|
13940
14153
|
var SearchSourceResultsEmpty = () => {
|
|
13941
14154
|
const { t } = useTranslationContext();
|
|
13942
|
-
return /* @__PURE__ */
|
|
14155
|
+
return /* @__PURE__ */ import_react50.default.createElement("div", { className: "str-chat__search-source-results-empty" }, t("No results found"));
|
|
13943
14156
|
};
|
|
13944
14157
|
|
|
13945
14158
|
// src/experimental/Search/SearchResults/SearchSourceResultsHeader.tsx
|
|
@@ -13961,20 +14174,20 @@ var SearchSourceResults = ({ searchSource }) => {
|
|
|
13961
14174
|
searchSourceStateSelector3
|
|
13962
14175
|
);
|
|
13963
14176
|
if (!items && !isLoading) return null;
|
|
13964
|
-
return /* @__PURE__ */
|
|
14177
|
+
return /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsContextProvider, { value: { searchSource } }, /* @__PURE__ */ import_react51.default.createElement(
|
|
13965
14178
|
"div",
|
|
13966
14179
|
{
|
|
13967
14180
|
className: "str-chat__search-source-results",
|
|
13968
14181
|
"data-testid": "search-source-results"
|
|
13969
14182
|
},
|
|
13970
|
-
/* @__PURE__ */
|
|
13971
|
-
items?.length || isLoading ? /* @__PURE__ */
|
|
14183
|
+
/* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsHeader2, null),
|
|
14184
|
+
items?.length || isLoading ? /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultList2, null) : /* @__PURE__ */ import_react51.default.createElement(SearchSourceResultsEmpty2, null)
|
|
13972
14185
|
));
|
|
13973
14186
|
};
|
|
13974
14187
|
|
|
13975
14188
|
// src/experimental/Search/SearchResults/SearchResultsHeader.tsx
|
|
13976
14189
|
var import_clsx11 = __toESM(require("clsx"));
|
|
13977
|
-
var
|
|
14190
|
+
var import_react52 = __toESM(require("react"));
|
|
13978
14191
|
var searchSourceStateSelector4 = (nextValue) => ({
|
|
13979
14192
|
isActive: nextValue.isActive
|
|
13980
14193
|
});
|
|
@@ -13983,7 +14196,7 @@ var SearchSourceFilterButton = ({ source }) => {
|
|
|
13983
14196
|
const { searchController } = useSearchContext();
|
|
13984
14197
|
const { isActive } = useStateStore(source.state, searchSourceStateSelector4);
|
|
13985
14198
|
const label = `search-results-header-filter-source-button-label--${source.type}`;
|
|
13986
|
-
return /* @__PURE__ */
|
|
14199
|
+
return /* @__PURE__ */ import_react52.default.createElement(
|
|
13987
14200
|
"button",
|
|
13988
14201
|
{
|
|
13989
14202
|
"aria-label": t("aria/Search results header filter button"),
|
|
@@ -14006,13 +14219,13 @@ var SearchSourceFilterButton = ({ source }) => {
|
|
|
14006
14219
|
};
|
|
14007
14220
|
var SearchResultsHeader = () => {
|
|
14008
14221
|
const { searchController } = useSearchContext();
|
|
14009
|
-
return /* @__PURE__ */
|
|
14222
|
+
return /* @__PURE__ */ import_react52.default.createElement("div", { className: "str-chat__search-results-header", "data-testid": "search-results-header" }, /* @__PURE__ */ import_react52.default.createElement(
|
|
14010
14223
|
"div",
|
|
14011
14224
|
{
|
|
14012
14225
|
className: "str-chat__search-results-header__filter-source-buttons",
|
|
14013
14226
|
"data-testid": "filter-source-buttons"
|
|
14014
14227
|
},
|
|
14015
|
-
searchController.sources.map((source) => /* @__PURE__ */
|
|
14228
|
+
searchController.sources.map((source) => /* @__PURE__ */ import_react52.default.createElement(
|
|
14016
14229
|
SearchSourceFilterButton,
|
|
14017
14230
|
{
|
|
14018
14231
|
key: `search-source-filter-button-${source.type}`,
|
|
@@ -14023,10 +14236,10 @@ var SearchResultsHeader = () => {
|
|
|
14023
14236
|
};
|
|
14024
14237
|
|
|
14025
14238
|
// src/experimental/Search/SearchResults/SearchResultsPresearch.tsx
|
|
14026
|
-
var
|
|
14239
|
+
var import_react53 = __toESM(require("react"));
|
|
14027
14240
|
var SearchResultsPresearch = () => {
|
|
14028
14241
|
const { t } = useTranslationContext();
|
|
14029
|
-
return /* @__PURE__ */
|
|
14242
|
+
return /* @__PURE__ */ import_react53.default.createElement("div", { className: "str-chat__search-results-presearch" }, t("Start typing to search"));
|
|
14030
14243
|
};
|
|
14031
14244
|
|
|
14032
14245
|
// src/experimental/Search/SearchResults/SearchResults.tsx
|
|
@@ -14047,7 +14260,7 @@ var SearchResults = () => {
|
|
|
14047
14260
|
searchController.state,
|
|
14048
14261
|
searchControllerStateSelector3
|
|
14049
14262
|
);
|
|
14050
|
-
return !isActive ? null : /* @__PURE__ */
|
|
14263
|
+
return !isActive ? null : /* @__PURE__ */ import_react54.default.createElement("div", { "aria-label": t("aria/Search results"), className: "str-chat__search-results" }, /* @__PURE__ */ import_react54.default.createElement(SearchResultsHeader2, null), !searchQuery ? /* @__PURE__ */ import_react54.default.createElement(SearchResultsPresearch2, { activeSources }) : activeSources.map((source) => /* @__PURE__ */ import_react54.default.createElement(SearchSourceResults2, { key: source.type, searchSource: source })));
|
|
14051
14264
|
};
|
|
14052
14265
|
|
|
14053
14266
|
// src/experimental/Search/Search.tsx
|
|
@@ -14061,7 +14274,7 @@ var Search = ({
|
|
|
14061
14274
|
const { SearchBar: SearchBar2 = SearchBar, SearchResults: SearchResults2 = SearchResults } = useComponentContext();
|
|
14062
14275
|
const { searchController } = useChatContext();
|
|
14063
14276
|
const { isActive } = useStateStore(searchController.state, searchControllerStateSelector4);
|
|
14064
|
-
return /* @__PURE__ */
|
|
14277
|
+
return /* @__PURE__ */ import_react55.default.createElement(
|
|
14065
14278
|
SearchContextProvider,
|
|
14066
14279
|
{
|
|
14067
14280
|
value: {
|
|
@@ -14072,7 +14285,7 @@ var Search = ({
|
|
|
14072
14285
|
searchController
|
|
14073
14286
|
}
|
|
14074
14287
|
},
|
|
14075
|
-
/* @__PURE__ */
|
|
14288
|
+
/* @__PURE__ */ import_react55.default.createElement(
|
|
14076
14289
|
"div",
|
|
14077
14290
|
{
|
|
14078
14291
|
className: (0, import_clsx12.default)("str-chat__search", {
|
|
@@ -14080,8 +14293,8 @@ var Search = ({
|
|
|
14080
14293
|
}),
|
|
14081
14294
|
"data-testid": "search"
|
|
14082
14295
|
},
|
|
14083
|
-
/* @__PURE__ */
|
|
14084
|
-
/* @__PURE__ */
|
|
14296
|
+
/* @__PURE__ */ import_react55.default.createElement(SearchBar2, null),
|
|
14297
|
+
/* @__PURE__ */ import_react55.default.createElement(SearchResults2, null)
|
|
14085
14298
|
)
|
|
14086
14299
|
);
|
|
14087
14300
|
};
|