stream-chat-react 12.15.0 → 12.15.2
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/Chat/hooks/useChat.js +1 -1
- package/dist/components/Dialog/DialogManager.js +2 -1
- package/dist/components/MessageInput/AttachmentSelector.js +3 -3
- package/dist/components/MessageInput/MessageInput.js +4 -2
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +12 -6
- package/dist/components/MessageList/MessageList.js +4 -2
- package/dist/components/MessageList/VirtualizedMessageList.js +4 -2
- package/dist/components/Poll/PollActions/PollResults/PollResults.js +1 -1
- package/dist/components/Poll/PollCreationDialog/PollCreationDialog.js +3 -2
- package/dist/components/UtilityComponents/useStableId.d.ts +5 -0
- package/dist/components/UtilityComponents/useStableId.js +11 -0
- package/dist/experimental/index.browser.cjs.map +1 -1
- package/dist/experimental/index.node.cjs.map +1 -1
- package/dist/index.browser.cjs +699 -687
- package/dist/index.browser.cjs.map +4 -4
- package/dist/index.node.cjs +588 -576
- package/dist/index.node.cjs.map +4 -4
- package/package.json +1 -1
package/dist/index.browser.cjs
CHANGED
|
@@ -16187,10 +16187,10 @@ function Parse(source, customConvertors) {
|
|
|
16187
16187
|
var XMLNodes = SourceToXML(source);
|
|
16188
16188
|
return XMLtoMMLTree(XMLNodes, customConvertors);
|
|
16189
16189
|
}
|
|
16190
|
-
var
|
|
16190
|
+
var import_react208, import_parse_xml, import_dayjs4, import_sanitize_url4, import_react_markdown3, import_linkifyjs3, import_ical_expander, import_react_virtuoso2, import_isBetween, runtime_1, MMLTag, Card2, Icon3, CardHeader2, CardBody, ButtonList, SvgIcon, IconGoogle, IconMicrosoft, IconApple, isIE, getCurrentURL, CALENDAR_SERVICES, AddToCalendar, Button, Carousel, CarouselItem, Col, Error$1, Image2, Input, SIZE, Progress, Loading, truncate, matchMarkdownLinks2, MDLinkRender, markDownRenderers2, allowedMarkups, MD, Number2, Row, ITEMS_PER_PAGE, VERTICAL_COMPENSATION, INITIAL_INDEX, VIRTUOSO_START_INDEX, DatePickerSelect, getItemData, DatePickerDate, getItemData$1, DatePickerTime, DatePicker, setupIcalFilter, Scheduler, Success, Text, converters, Tree, MML;
|
|
16191
16191
|
var init_mml_react_esm = __esm({
|
|
16192
16192
|
"node_modules/mml-react/dist/mml-react.esm.js"() {
|
|
16193
|
-
|
|
16193
|
+
import_react208 = __toESM(require("react"));
|
|
16194
16194
|
import_parse_xml = __toESM(require_src());
|
|
16195
16195
|
import_dayjs4 = __toESM(require("dayjs"));
|
|
16196
16196
|
import_sanitize_url4 = require("@braintree/sanitize-url");
|
|
@@ -16720,57 +16720,57 @@ var init_mml_react_esm = __esm({
|
|
|
16720
16720
|
}();
|
|
16721
16721
|
Card2 = function Card3(_ref) {
|
|
16722
16722
|
var _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, children = _ref.children;
|
|
16723
|
-
return
|
|
16723
|
+
return import_react208.default.createElement("div", {
|
|
16724
16724
|
className: "mml-card " + className
|
|
16725
16725
|
}, children);
|
|
16726
16726
|
};
|
|
16727
16727
|
Icon3 = function Icon4(_ref) {
|
|
16728
16728
|
var name2 = _ref.name;
|
|
16729
|
-
return
|
|
16729
|
+
return import_react208.default.createElement("i", {
|
|
16730
16730
|
className: "mml-icon material-icons"
|
|
16731
16731
|
}, name2);
|
|
16732
16732
|
};
|
|
16733
16733
|
CardHeader2 = function CardHeader3(_ref) {
|
|
16734
16734
|
var text8 = _ref.text, _ref$icon = _ref.icon, icon2 = _ref$icon === void 0 ? "" : _ref$icon, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className;
|
|
16735
|
-
return
|
|
16735
|
+
return import_react208.default.createElement("div", {
|
|
16736
16736
|
className: "mml-card-header " + className
|
|
16737
|
-
}, icon2 &&
|
|
16737
|
+
}, icon2 && import_react208.default.createElement(Icon3, {
|
|
16738
16738
|
name: icon2
|
|
16739
|
-
}),
|
|
16739
|
+
}), import_react208.default.createElement("span", {
|
|
16740
16740
|
className: "mml-card-header__text"
|
|
16741
16741
|
}, text8));
|
|
16742
16742
|
};
|
|
16743
16743
|
CardBody = function CardBody2(_ref) {
|
|
16744
16744
|
var _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, children = _ref.children;
|
|
16745
|
-
return
|
|
16745
|
+
return import_react208.default.createElement("div", {
|
|
16746
16746
|
className: "mml-card-body " + className
|
|
16747
16747
|
}, children);
|
|
16748
16748
|
};
|
|
16749
16749
|
ButtonList = function ButtonList2(_ref) {
|
|
16750
16750
|
var children = _ref.children, _ref$variant = _ref.variant, variant = _ref$variant === void 0 ? "" : _ref$variant;
|
|
16751
|
-
return
|
|
16751
|
+
return import_react208.default.createElement("div", {
|
|
16752
16752
|
className: "mml-btnlist " + (variant === "floating" ? " mml-btnlist--floating" : "mml-btnlist--grounded")
|
|
16753
16753
|
}, children);
|
|
16754
16754
|
};
|
|
16755
16755
|
SvgIcon = function SvgIcon2(_ref) {
|
|
16756
16756
|
var path2 = _ref.path;
|
|
16757
|
-
return
|
|
16757
|
+
return import_react208.default.createElement("i", {
|
|
16758
16758
|
className: "mml-icon"
|
|
16759
|
-
},
|
|
16759
|
+
}, import_react208.default.createElement("svg", {
|
|
16760
16760
|
className: "mml-icon__svg",
|
|
16761
16761
|
xmlns: "http://www.w3.org/2000/svg",
|
|
16762
16762
|
viewBox: "0 0 24 24"
|
|
16763
|
-
},
|
|
16763
|
+
}, import_react208.default.createElement("path", {
|
|
16764
16764
|
d: path2
|
|
16765
16765
|
})));
|
|
16766
16766
|
};
|
|
16767
|
-
IconGoogle = /* @__PURE__ */
|
|
16767
|
+
IconGoogle = /* @__PURE__ */ import_react208.default.createElement(SvgIcon, {
|
|
16768
16768
|
path: "M21.35 11.1h-9.17v2.73h6.5c-.33 3.8-3.5 5.44-6.5 5.44C8.36 19.27 5 16.25 5 12c0-4.1 3.2-7.27 7.2-7.27 3.1 0 4.9 1.97 4.9 1.97L19 4.72S16.56 2 12.1 2C6.42 2 2.03 6.8 2.03 12c0 5.05 4.13 10 10.22 10 5.35 0 9.25-3.67 9.25-9.1 0-1.15-.15-1.8-.15-1.8h0z"
|
|
16769
16769
|
});
|
|
16770
|
-
IconMicrosoft = /* @__PURE__ */
|
|
16770
|
+
IconMicrosoft = /* @__PURE__ */ import_react208.default.createElement(SvgIcon, {
|
|
16771
16771
|
path: "M3 12V6.75l6-1.32v6.48L3 12m17-9v8.75l-10 .15V5.2L20 3M3 13l6 .1v6.8l-6-1.15V13m17 .25V22l-10-1.9v-7l10 .15z"
|
|
16772
16772
|
});
|
|
16773
|
-
IconApple = /* @__PURE__ */
|
|
16773
|
+
IconApple = /* @__PURE__ */ import_react208.default.createElement(SvgIcon, {
|
|
16774
16774
|
path: "M18.7 19.5c-.83 1.24-1.7 2.45-3.05 2.47-1.34.03-1.77-.8-3.3-.8-1.53 0-2 .77-3.27.82-1.3.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.4c.87-1.52 2.43-2.48 4.12-2.5 1.28-.02 2.5.87 3.3.87.78 0 2.26-1.07 3.8-.9.65.03 2.47.26 3.64 1.98-.1.06-2.17 1.28-2.15 3.8.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.2-.7.85-1.83 1.5-2.95 1.42-.15-1.15.4-2.35 1.05-3.1z"
|
|
16775
16775
|
});
|
|
16776
16776
|
isIE = typeof window !== "undefined" && window.navigator.msSaveOrOpenBlob && window.Blob;
|
|
@@ -16826,14 +16826,14 @@ var init_mml_react_esm = __esm({
|
|
|
16826
16826
|
window.open(url, "_blank");
|
|
16827
16827
|
}
|
|
16828
16828
|
}
|
|
16829
|
-
return
|
|
16829
|
+
return import_react208.default.createElement(Card2, {
|
|
16830
16830
|
className: "mml-add-to-calendar " + className
|
|
16831
|
-
},
|
|
16831
|
+
}, import_react208.default.createElement(CardHeader2, {
|
|
16832
16832
|
icon: "date_range",
|
|
16833
16833
|
text: "Add to My Calendar"
|
|
16834
|
-
}),
|
|
16834
|
+
}), import_react208.default.createElement(CardBody, null, import_react208.default.createElement(ButtonList, null, CALENDAR_SERVICES.map(function(_ref3) {
|
|
16835
16835
|
var id = _ref3.id, label = _ref3.label, Icon5 = _ref3.Icon;
|
|
16836
|
-
return
|
|
16836
|
+
return import_react208.default.createElement("a", {
|
|
16837
16837
|
key: id,
|
|
16838
16838
|
className: "mml-btn " + (Icon5 ? "mml-btn--with-icon" : ""),
|
|
16839
16839
|
onClick: handleLinkClick,
|
|
@@ -16851,15 +16851,15 @@ var init_mml_react_esm = __esm({
|
|
|
16851
16851
|
className += " mml-btn--text";
|
|
16852
16852
|
}
|
|
16853
16853
|
className += variant === "floating" ? " mml-btn--floating" : " mml-btn--grounded";
|
|
16854
|
-
if (url) return
|
|
16854
|
+
if (url) return import_react208.default.createElement("a", {
|
|
16855
16855
|
className: "mml-btn " + className,
|
|
16856
16856
|
href: (0, import_sanitize_url4.sanitizeUrl)(url),
|
|
16857
16857
|
target: "_blank",
|
|
16858
16858
|
rel: "nofollow noreferrer noopener"
|
|
16859
|
-
}, icon2 &&
|
|
16859
|
+
}, icon2 && import_react208.default.createElement(Icon3, {
|
|
16860
16860
|
name: icon2
|
|
16861
16861
|
}), text8);
|
|
16862
|
-
return
|
|
16862
|
+
return import_react208.default.createElement("button", {
|
|
16863
16863
|
className: "mml-btn " + className,
|
|
16864
16864
|
type: "submit",
|
|
16865
16865
|
name: name2,
|
|
@@ -16872,20 +16872,20 @@ var init_mml_react_esm = __esm({
|
|
|
16872
16872
|
input2.value = value || "";
|
|
16873
16873
|
(_event$currentTarget = event.currentTarget) == null ? void 0 : (_event$currentTarget$ = _event$currentTarget.closest("form")) == null ? void 0 : _event$currentTarget$.appendChild(input2);
|
|
16874
16874
|
}
|
|
16875
|
-
}, icon2 &&
|
|
16875
|
+
}, icon2 && import_react208.default.createElement(Icon3, {
|
|
16876
16876
|
name: icon2
|
|
16877
16877
|
}), text8);
|
|
16878
16878
|
};
|
|
16879
16879
|
Carousel = function Carousel2(_ref) {
|
|
16880
16880
|
var children = _ref.children, _ref$slideWidth = _ref.slideWidth, slideWidth = _ref$slideWidth === void 0 ? "120px" : _ref$slideWidth, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className;
|
|
16881
|
-
return
|
|
16881
|
+
return import_react208.default.createElement("div", {
|
|
16882
16882
|
className: "mml-carousel " + className
|
|
16883
|
-
},
|
|
16883
|
+
}, import_react208.default.createElement("div", {
|
|
16884
16884
|
className: "mml-carousel__track"
|
|
16885
|
-
},
|
|
16885
|
+
}, import_react208.default.createElement("div", {
|
|
16886
16886
|
className: "mml-carousel__slides"
|
|
16887
|
-
},
|
|
16888
|
-
return (0,
|
|
16887
|
+
}, import_react208.Children.map(children, function(child) {
|
|
16888
|
+
return (0, import_react208.cloneElement)(child, {
|
|
16889
16889
|
className: "mml-carousel__slide",
|
|
16890
16890
|
slideWidth
|
|
16891
16891
|
});
|
|
@@ -16894,7 +16894,7 @@ var init_mml_react_esm = __esm({
|
|
|
16894
16894
|
CarouselItem = function CarouselItem2(_ref) {
|
|
16895
16895
|
var children = _ref.children, slideWidth = _ref.slideWidth, _ref$width = _ref.width, width = _ref$width === void 0 ? "" : _ref$width, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className;
|
|
16896
16896
|
var finalWidth = width || slideWidth;
|
|
16897
|
-
return
|
|
16897
|
+
return import_react208.default.createElement("div", {
|
|
16898
16898
|
className: "mml-carousel-item " + className,
|
|
16899
16899
|
style: {
|
|
16900
16900
|
flex: "0 0 " + finalWidth,
|
|
@@ -16907,20 +16907,20 @@ var init_mml_react_esm = __esm({
|
|
|
16907
16907
|
var classNames = "mml-col-" + width;
|
|
16908
16908
|
if (offset) classNames = classNames + (" mml-offset-" + offset);
|
|
16909
16909
|
classNames = classNames + (" mml-align-" + align);
|
|
16910
|
-
return
|
|
16910
|
+
return import_react208.default.createElement("div", {
|
|
16911
16911
|
className: classNames
|
|
16912
16912
|
}, children);
|
|
16913
16913
|
};
|
|
16914
16914
|
Error$1 = function Error2(_ref) {
|
|
16915
16915
|
var _ref$error = _ref.error, error = _ref$error === void 0 ? "" : _ref$error;
|
|
16916
16916
|
if (!error) return null;
|
|
16917
|
-
return
|
|
16917
|
+
return import_react208.default.createElement("span", {
|
|
16918
16918
|
className: "mml-error"
|
|
16919
16919
|
}, error);
|
|
16920
16920
|
};
|
|
16921
16921
|
Image2 = function Image3(_ref) {
|
|
16922
16922
|
var src = _ref.src, _ref$alt = _ref.alt, alt = _ref$alt === void 0 ? "" : _ref$alt, _ref$title = _ref.title, title = _ref$title === void 0 ? "" : _ref$title, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className;
|
|
16923
|
-
return
|
|
16923
|
+
return import_react208.default.createElement("img", {
|
|
16924
16924
|
className: ("mml-image " + className).trim(),
|
|
16925
16925
|
src,
|
|
16926
16926
|
alt,
|
|
@@ -16929,14 +16929,14 @@ var init_mml_react_esm = __esm({
|
|
|
16929
16929
|
};
|
|
16930
16930
|
Input = function Input2(_ref) {
|
|
16931
16931
|
var name2 = _ref.name, label = _ref.label, _ref$value = _ref.value, value = _ref$value === void 0 ? "" : _ref$value, _ref$type = _ref.type, type = _ref$type === void 0 ? "text" : _ref$type, _ref$placeholder = _ref.placeholder, placeholder = _ref$placeholder === void 0 ? "" : _ref$placeholder;
|
|
16932
|
-
var _useState = (0,
|
|
16932
|
+
var _useState = (0, import_react208.useState)(value), state = _useState[0], setState = _useState[1];
|
|
16933
16933
|
var id = "mml-" + name2;
|
|
16934
|
-
return
|
|
16934
|
+
return import_react208.default.createElement(import_react208.default.Fragment, null, label && import_react208.default.createElement("label", {
|
|
16935
16935
|
className: "mml-card-header",
|
|
16936
16936
|
htmlFor: id
|
|
16937
|
-
},
|
|
16937
|
+
}, import_react208.default.createElement("span", {
|
|
16938
16938
|
className: "mml-card-header__text"
|
|
16939
|
-
}, label)),
|
|
16939
|
+
}, label)), import_react208.default.createElement("input", {
|
|
16940
16940
|
id,
|
|
16941
16941
|
className: "mml-input",
|
|
16942
16942
|
name: name2,
|
|
@@ -16953,7 +16953,7 @@ var init_mml_react_esm = __esm({
|
|
|
16953
16953
|
var size = _ref.size, _ref$thickness = _ref.thickness, thickness = _ref$thickness === void 0 ? 3.6 : _ref$thickness, color2 = _ref.color;
|
|
16954
16954
|
thickness = typeof thickness === "string" ? parseFloat(thickness) : thickness;
|
|
16955
16955
|
size = typeof size === "string" && /^\d+$/.test(size) || typeof size === "number" ? size + "px" : size;
|
|
16956
|
-
return
|
|
16956
|
+
return import_react208.default.createElement("span", {
|
|
16957
16957
|
className: "mml-progress",
|
|
16958
16958
|
role: "progressbar",
|
|
16959
16959
|
style: {
|
|
@@ -16961,10 +16961,10 @@ var init_mml_react_esm = __esm({
|
|
|
16961
16961
|
height: size,
|
|
16962
16962
|
color: color2
|
|
16963
16963
|
}
|
|
16964
|
-
},
|
|
16964
|
+
}, import_react208.default.createElement("svg", {
|
|
16965
16965
|
className: "mml-progress__svg",
|
|
16966
16966
|
viewBox: SIZE / 2 + " " + SIZE / 2 + " " + SIZE + " " + SIZE
|
|
16967
|
-
},
|
|
16967
|
+
}, import_react208.default.createElement("circle", {
|
|
16968
16968
|
className: "mml-progress__circle",
|
|
16969
16969
|
cx: SIZE,
|
|
16970
16970
|
cy: SIZE,
|
|
@@ -16976,13 +16976,13 @@ var init_mml_react_esm = __esm({
|
|
|
16976
16976
|
Loading = function Loading2(_ref) {
|
|
16977
16977
|
var _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, _ref$loading = _ref.loading, loading = _ref$loading === void 0 ? false : _ref$loading, text8 = _ref.text, size = _ref.size, thickness = _ref.thickness, color2 = _ref.color;
|
|
16978
16978
|
if (!loading) return null;
|
|
16979
|
-
return
|
|
16979
|
+
return import_react208.default.createElement("div", {
|
|
16980
16980
|
className: "mml-loading " + className
|
|
16981
|
-
},
|
|
16981
|
+
}, import_react208.default.createElement(Progress, Object.assign({}, {
|
|
16982
16982
|
size,
|
|
16983
16983
|
thickness,
|
|
16984
16984
|
color: color2
|
|
16985
|
-
})), text8 &&
|
|
16985
|
+
})), text8 && import_react208.default.createElement("div", {
|
|
16986
16986
|
className: "mml-loading__text"
|
|
16987
16987
|
}, text8));
|
|
16988
16988
|
};
|
|
@@ -17005,7 +17005,7 @@ var init_mml_react_esm = __esm({
|
|
|
17005
17005
|
};
|
|
17006
17006
|
MDLinkRender = function MDLinkRender2(props) {
|
|
17007
17007
|
if (!props.href || !props.href.startsWith("http") && !props.href.startsWith("mailto:")) return props.children;
|
|
17008
|
-
return
|
|
17008
|
+
return import_react208.default.createElement("a", {
|
|
17009
17009
|
href: props.href,
|
|
17010
17010
|
target: "_blank",
|
|
17011
17011
|
rel: "nofollow noreferrer noopener"
|
|
@@ -17044,9 +17044,9 @@ var init_mml_react_esm = __esm({
|
|
|
17044
17044
|
var displayLink = type === "email" ? value : truncate(value.replace(/(http(s?):\/\/)?(www\.)?/, ""), 20);
|
|
17045
17045
|
newText = newText.replace(value, "[" + displayLink + "](" + encodeURI(href) + ")");
|
|
17046
17046
|
});
|
|
17047
|
-
return
|
|
17047
|
+
return import_react208.default.createElement("div", {
|
|
17048
17048
|
className: "mml-md"
|
|
17049
|
-
},
|
|
17049
|
+
}, import_react208.default.createElement(import_react_markdown3.default, {
|
|
17050
17050
|
allowedTypes: allowedMarkups,
|
|
17051
17051
|
renderers: markDownRenderers2,
|
|
17052
17052
|
source: newText,
|
|
@@ -17059,34 +17059,34 @@ var init_mml_react_esm = __esm({
|
|
|
17059
17059
|
};
|
|
17060
17060
|
Number2 = function Number3(_ref) {
|
|
17061
17061
|
var name2 = _ref.name, value = _ref.value;
|
|
17062
|
-
var _useState = (0,
|
|
17063
|
-
return
|
|
17062
|
+
var _useState = (0, import_react208.useState)(parseInt("" + value, 10) || 0), state = _useState[0], setState = _useState[1];
|
|
17063
|
+
return import_react208.default.createElement("div", {
|
|
17064
17064
|
className: "mml-number"
|
|
17065
|
-
},
|
|
17065
|
+
}, import_react208.default.createElement("input", {
|
|
17066
17066
|
name: name2,
|
|
17067
17067
|
value: state,
|
|
17068
17068
|
type: "hidden"
|
|
17069
|
-
}),
|
|
17069
|
+
}), import_react208.default.createElement("span", {
|
|
17070
17070
|
className: "mml-btn mml-btn--floating mml-btn--icon mml-number__dec",
|
|
17071
17071
|
onClick: function onClick() {
|
|
17072
17072
|
return setState(state - 1);
|
|
17073
17073
|
}
|
|
17074
|
-
},
|
|
17074
|
+
}, import_react208.default.createElement(Icon3, {
|
|
17075
17075
|
name: "remove"
|
|
17076
|
-
})),
|
|
17076
|
+
})), import_react208.default.createElement("span", {
|
|
17077
17077
|
className: "mml-number__count"
|
|
17078
|
-
}, state),
|
|
17078
|
+
}, state), import_react208.default.createElement("span", {
|
|
17079
17079
|
className: "mml-btn mml-btn--floating mml-btn--icon mml-number__inc",
|
|
17080
17080
|
onClick: function onClick() {
|
|
17081
17081
|
return setState(state + 1);
|
|
17082
17082
|
}
|
|
17083
|
-
},
|
|
17083
|
+
}, import_react208.default.createElement(Icon3, {
|
|
17084
17084
|
name: "add"
|
|
17085
17085
|
})));
|
|
17086
17086
|
};
|
|
17087
17087
|
Row = function Row2(_ref) {
|
|
17088
17088
|
var children = _ref.children;
|
|
17089
|
-
return
|
|
17089
|
+
return import_react208.default.createElement("div", {
|
|
17090
17090
|
className: "mml-row"
|
|
17091
17091
|
}, children);
|
|
17092
17092
|
};
|
|
@@ -17096,7 +17096,7 @@ var init_mml_react_esm = __esm({
|
|
|
17096
17096
|
VIRTUOSO_START_INDEX = 1e4;
|
|
17097
17097
|
DatePickerSelect = function DatePickerSelect2(props) {
|
|
17098
17098
|
var onChange = props.onChange, icalFilter = props.icalFilter, getItemData4 = props.getItemData, itemClassName = props.itemClassName, interval = props.interval, format = props.format, value = props.value;
|
|
17099
|
-
var generateItems = (0,
|
|
17099
|
+
var generateItems = (0, import_react208.useCallback)(function(quantity, firstIdx) {
|
|
17100
17100
|
return Array(quantity).fill(true).map(function(_, idx) {
|
|
17101
17101
|
return getItemData4({
|
|
17102
17102
|
interval,
|
|
@@ -17108,11 +17108,11 @@ var init_mml_react_esm = __esm({
|
|
|
17108
17108
|
return !icalFilter || icalFilter && icalFilter(newItem.value);
|
|
17109
17109
|
});
|
|
17110
17110
|
}, [interval, format, value, icalFilter, getItemData4]);
|
|
17111
|
-
var _useState = (0,
|
|
17112
|
-
var _useState2 = (0,
|
|
17113
|
-
var initialIndexOffset = (0,
|
|
17114
|
-
var _useState3 = (0,
|
|
17115
|
-
var handleClick = (0,
|
|
17111
|
+
var _useState = (0, import_react208.useState)(generateItems(ITEMS_PER_PAGE * 2, -ITEMS_PER_PAGE)), items = _useState[0], setItems = _useState[1];
|
|
17112
|
+
var _useState2 = (0, import_react208.useState)(VIRTUOSO_START_INDEX), firstItemIndex = _useState2[0], setFirstItemIndex = _useState2[1];
|
|
17113
|
+
var initialIndexOffset = (0, import_react208.useRef)(INITIAL_INDEX);
|
|
17114
|
+
var _useState3 = (0, import_react208.useState)(null), selectedIdx = _useState3[0], setSelectedIdx = _useState3[1];
|
|
17115
|
+
var handleClick = (0, import_react208.useCallback)(function(item2) {
|
|
17116
17116
|
onChange(item2.value);
|
|
17117
17117
|
var firstItemIndex2 = initialIndexOffset.current || 0;
|
|
17118
17118
|
var nextFirstItemIdx = firstItemIndex2 - INITIAL_INDEX - ITEMS_PER_PAGE;
|
|
@@ -17126,12 +17126,12 @@ var init_mml_react_esm = __esm({
|
|
|
17126
17126
|
}
|
|
17127
17127
|
setSelectedIdx(item2.idx);
|
|
17128
17128
|
}, [setItems, generateItems, initialIndexOffset, onChange]);
|
|
17129
|
-
var appendItems = (0,
|
|
17129
|
+
var appendItems = (0, import_react208.useCallback)(function(lastItemIndex) {
|
|
17130
17130
|
setItems(function(items2) {
|
|
17131
17131
|
return [].concat(items2, generateItems(ITEMS_PER_PAGE, lastItemIndex));
|
|
17132
17132
|
});
|
|
17133
17133
|
}, [setItems, generateItems]);
|
|
17134
|
-
var prependItems = (0,
|
|
17134
|
+
var prependItems = (0, import_react208.useCallback)(function() {
|
|
17135
17135
|
var firstItemIndex2 = initialIndexOffset.current || 0;
|
|
17136
17136
|
var nextFirstItemIdx = firstItemIndex2 - INITIAL_INDEX - ITEMS_PER_PAGE;
|
|
17137
17137
|
if (initialIndexOffset) {
|
|
@@ -17143,7 +17143,7 @@ var init_mml_react_esm = __esm({
|
|
|
17143
17143
|
setFirstItemIndex(firstItemIndex2 - ITEMS_PER_PAGE);
|
|
17144
17144
|
return false;
|
|
17145
17145
|
}, [setItems, generateItems, initialIndexOffset]);
|
|
17146
|
-
(0,
|
|
17146
|
+
(0, import_react208.useEffect)(function() {
|
|
17147
17147
|
if (value) {
|
|
17148
17148
|
var initialSelectedIdx = null;
|
|
17149
17149
|
for (var i = 0; i < items.length; i++) {
|
|
@@ -17155,11 +17155,11 @@ var init_mml_react_esm = __esm({
|
|
|
17155
17155
|
setSelectedIdx(initialSelectedIdx);
|
|
17156
17156
|
}
|
|
17157
17157
|
}, []);
|
|
17158
|
-
return
|
|
17158
|
+
return import_react208.default.createElement(import_react_virtuoso2.Virtuoso, {
|
|
17159
17159
|
data: items,
|
|
17160
17160
|
firstItemIndex,
|
|
17161
17161
|
itemContent: function itemContent(_, item2) {
|
|
17162
|
-
return
|
|
17162
|
+
return import_react208.default.createElement("div", {
|
|
17163
17163
|
className: itemClassName + (" mml-datepicker__item " + (item2.idx === selectedIdx ? "mml-datepicker__item--selected" : "")),
|
|
17164
17164
|
onClick: function onClick() {
|
|
17165
17165
|
return handleClick(item2);
|
|
@@ -17183,9 +17183,9 @@ var init_mml_react_esm = __esm({
|
|
|
17183
17183
|
};
|
|
17184
17184
|
};
|
|
17185
17185
|
DatePickerDate = function DatePickerDate2(props) {
|
|
17186
|
-
return
|
|
17186
|
+
return import_react208.default.createElement("div", {
|
|
17187
17187
|
className: "mml-datepicker__select mml-datepicker__date"
|
|
17188
|
-
},
|
|
17188
|
+
}, import_react208.default.createElement(DatePickerSelect, Object.assign({}, props, {
|
|
17189
17189
|
itemClassName: "mml-datepicker__item--day",
|
|
17190
17190
|
getItemData
|
|
17191
17191
|
})));
|
|
@@ -17204,16 +17204,16 @@ var init_mml_react_esm = __esm({
|
|
|
17204
17204
|
};
|
|
17205
17205
|
};
|
|
17206
17206
|
DatePickerTime = function DatePickerTime2(props) {
|
|
17207
|
-
return
|
|
17207
|
+
return import_react208.default.createElement("div", {
|
|
17208
17208
|
className: "mml-datepicker__select mml-datepicker__time"
|
|
17209
|
-
},
|
|
17209
|
+
}, import_react208.default.createElement(DatePickerSelect, Object.assign({}, props, {
|
|
17210
17210
|
itemClassName: "mml-datepicker__item--time",
|
|
17211
17211
|
getItemData: getItemData$1
|
|
17212
17212
|
})));
|
|
17213
17213
|
};
|
|
17214
17214
|
DatePicker = function DatePicker2(_ref) {
|
|
17215
17215
|
var name2 = _ref.name, selected = _ref.selected, dateInterval = _ref.dateInterval, timeInterval = _ref.timeInterval, dateFormat = _ref.dateFormat, timeFormat = _ref.timeFormat, fullDay = _ref.fullDay, icalFilter = _ref.icalFilter;
|
|
17216
|
-
var _useState = (0,
|
|
17216
|
+
var _useState = (0, import_react208.useState)(selected), date = _useState[0], setDate = _useState[1];
|
|
17217
17217
|
var handleChangeDate = function handleChangeDate2(value) {
|
|
17218
17218
|
setDate(function(prevDate) {
|
|
17219
17219
|
return prevDate.set("date", value.get("date")).set("month", value.get("month")).set("year", value.get("year"));
|
|
@@ -17224,19 +17224,19 @@ var init_mml_react_esm = __esm({
|
|
|
17224
17224
|
return prevDate.set("minute", value.get("minute")).set("hour", value.get("hour"));
|
|
17225
17225
|
});
|
|
17226
17226
|
};
|
|
17227
|
-
return
|
|
17227
|
+
return import_react208.default.createElement("div", {
|
|
17228
17228
|
className: "mml-datepicker mml-datepicker--" + (fullDay ? "single" : "double")
|
|
17229
|
-
},
|
|
17229
|
+
}, import_react208.default.createElement("input", {
|
|
17230
17230
|
name: name2,
|
|
17231
17231
|
value: date.toISOString(),
|
|
17232
17232
|
type: "hidden"
|
|
17233
|
-
}),
|
|
17233
|
+
}), import_react208.default.createElement(DatePickerDate, {
|
|
17234
17234
|
icalFilter,
|
|
17235
17235
|
format: dateFormat,
|
|
17236
17236
|
value: date,
|
|
17237
17237
|
onChange: handleChangeDate,
|
|
17238
17238
|
interval: dateInterval
|
|
17239
|
-
}), !fullDay &&
|
|
17239
|
+
}), !fullDay && import_react208.default.createElement(DatePickerTime, {
|
|
17240
17240
|
icalFilter,
|
|
17241
17241
|
format: timeFormat,
|
|
17242
17242
|
value: date,
|
|
@@ -17293,14 +17293,14 @@ var init_mml_react_esm = __esm({
|
|
|
17293
17293
|
}();
|
|
17294
17294
|
Scheduler = function Scheduler2(_ref2) {
|
|
17295
17295
|
var name2 = _ref2.name, selected = _ref2.selected, icalAvailability = _ref2.icalAvailability, _ref2$duration = _ref2.duration, duration = _ref2$duration === void 0 ? 30 : _ref2$duration, _ref2$dateInterval = _ref2.dateInterval, dateInterval = _ref2$dateInterval === void 0 ? 1 : _ref2$dateInterval, _ref2$timeInterval = _ref2.timeInterval, timeInterval = _ref2$timeInterval === void 0 ? 30 : _ref2$timeInterval, _ref2$dateFormat = _ref2.dateFormat, dateFormat = _ref2$dateFormat === void 0 ? "ddd MMM DD" : _ref2$dateFormat, _ref2$timeFormat = _ref2.timeFormat, timeFormat = _ref2$timeFormat === void 0 ? "hh:mm A" : _ref2$timeFormat, _ref2$fullDay = _ref2.fullDay, fullDay = _ref2$fullDay === void 0 ? false : _ref2$fullDay;
|
|
17296
|
-
var _useState = (0,
|
|
17297
|
-
var _useState2 = (0,
|
|
17298
|
-
var _useState3 = (0,
|
|
17296
|
+
var _useState = (0, import_react208.useState)(false), loading = _useState[0], setLoading = _useState[1];
|
|
17297
|
+
var _useState2 = (0, import_react208.useState)(""), error = _useState2[0], setError = _useState2[1];
|
|
17298
|
+
var _useState3 = (0, import_react208.useState)(function() {
|
|
17299
17299
|
return function() {
|
|
17300
17300
|
return true;
|
|
17301
17301
|
};
|
|
17302
17302
|
}), icalFilter = _useState3[0], setIcalFilter = _useState3[1];
|
|
17303
|
-
(0,
|
|
17303
|
+
(0, import_react208.useEffect)(function() {
|
|
17304
17304
|
if (!icalAvailability) return;
|
|
17305
17305
|
setLoading(true);
|
|
17306
17306
|
setupIcalFilter(icalAvailability, duration).then(setIcalFilter)["catch"](function(err) {
|
|
@@ -17313,17 +17313,17 @@ var init_mml_react_esm = __esm({
|
|
|
17313
17313
|
return setLoading(false);
|
|
17314
17314
|
});
|
|
17315
17315
|
}, [icalAvailability, duration]);
|
|
17316
|
-
return
|
|
17316
|
+
return import_react208.default.createElement(Card2, {
|
|
17317
17317
|
className: "mml-scheduler"
|
|
17318
|
-
},
|
|
17318
|
+
}, import_react208.default.createElement(CardHeader2, {
|
|
17319
17319
|
icon: "date_range",
|
|
17320
17320
|
text: "Scheduler"
|
|
17321
|
-
}),
|
|
17321
|
+
}), import_react208.default.createElement(CardBody, null, error && !loading && import_react208.default.createElement(Error$1, {
|
|
17322
17322
|
error: "Failed, error: " + error
|
|
17323
|
-
}), !error && loading &&
|
|
17323
|
+
}), !error && loading && import_react208.default.createElement(Loading, {
|
|
17324
17324
|
loading: true,
|
|
17325
17325
|
text: "Loading availability"
|
|
17326
|
-
}), !error && !loading &&
|
|
17326
|
+
}), !error && !loading && import_react208.default.createElement(DatePicker, {
|
|
17327
17327
|
name: name2,
|
|
17328
17328
|
selected: selected ? (0, import_dayjs4.default)(selected) : (0, import_dayjs4.default)().startOf("hour"),
|
|
17329
17329
|
dateInterval,
|
|
@@ -17336,20 +17336,20 @@ var init_mml_react_esm = __esm({
|
|
|
17336
17336
|
};
|
|
17337
17337
|
Success = function Success2(_ref) {
|
|
17338
17338
|
var success = _ref.success;
|
|
17339
|
-
if (success) return
|
|
17339
|
+
if (success) return import_react208.default.createElement("div", {
|
|
17340
17340
|
className: "mml-success"
|
|
17341
17341
|
}, success);
|
|
17342
17342
|
return null;
|
|
17343
17343
|
};
|
|
17344
17344
|
Text = function Text2(_ref) {
|
|
17345
17345
|
var text8 = _ref.text, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className;
|
|
17346
|
-
return
|
|
17346
|
+
return import_react208.default.createElement("div", {
|
|
17347
17347
|
className: ("mml-text " + className).trim()
|
|
17348
17348
|
}, text8);
|
|
17349
17349
|
};
|
|
17350
17350
|
converters = {
|
|
17351
17351
|
button: function button(tag) {
|
|
17352
|
-
return
|
|
17352
|
+
return import_react208.default.createElement(Button, Object.assign({}, tag.attributes, {
|
|
17353
17353
|
key: tag.key,
|
|
17354
17354
|
text: tag.getText(),
|
|
17355
17355
|
name: tag.attributes.name,
|
|
@@ -17357,19 +17357,19 @@ var init_mml_react_esm = __esm({
|
|
|
17357
17357
|
}));
|
|
17358
17358
|
},
|
|
17359
17359
|
button_list: function button_list(tag, children) {
|
|
17360
|
-
return
|
|
17360
|
+
return import_react208.default.createElement(ButtonList, Object.assign({}, tag.attributes, {
|
|
17361
17361
|
key: tag.key
|
|
17362
17362
|
}), children);
|
|
17363
17363
|
},
|
|
17364
17364
|
input: function input(tag) {
|
|
17365
|
-
return
|
|
17365
|
+
return import_react208.default.createElement(Input, Object.assign({}, tag.attributes, {
|
|
17366
17366
|
key: tag.key,
|
|
17367
17367
|
name: tag.attributes.name,
|
|
17368
17368
|
value: tag.attributes.value
|
|
17369
17369
|
}));
|
|
17370
17370
|
},
|
|
17371
17371
|
add_to_calendar: function add_to_calendar(tag) {
|
|
17372
|
-
return
|
|
17372
|
+
return import_react208.default.createElement(AddToCalendar, Object.assign({}, tag.attributes, {
|
|
17373
17373
|
key: tag.key,
|
|
17374
17374
|
title: tag.attributes.title,
|
|
17375
17375
|
start: tag.attributes.start,
|
|
@@ -17377,41 +17377,41 @@ var init_mml_react_esm = __esm({
|
|
|
17377
17377
|
}));
|
|
17378
17378
|
},
|
|
17379
17379
|
col: function col(tag, children) {
|
|
17380
|
-
return
|
|
17380
|
+
return import_react208.default.createElement(Col, Object.assign({}, tag.attributes, {
|
|
17381
17381
|
key: tag.key
|
|
17382
17382
|
}), children);
|
|
17383
17383
|
},
|
|
17384
17384
|
row: function row(tag, children) {
|
|
17385
|
-
return
|
|
17385
|
+
return import_react208.default.createElement(Row, Object.assign({}, tag.attributes, {
|
|
17386
17386
|
key: tag.key
|
|
17387
17387
|
}), children);
|
|
17388
17388
|
},
|
|
17389
17389
|
icon: function icon(tag) {
|
|
17390
|
-
return
|
|
17390
|
+
return import_react208.default.createElement(Icon3, Object.assign({}, tag.attributes, {
|
|
17391
17391
|
key: tag.key,
|
|
17392
17392
|
name: tag.attributes.name
|
|
17393
17393
|
}));
|
|
17394
17394
|
},
|
|
17395
17395
|
image: function image3(tag) {
|
|
17396
|
-
return
|
|
17396
|
+
return import_react208.default.createElement(Image2, Object.assign({}, tag.attributes, {
|
|
17397
17397
|
key: tag.key,
|
|
17398
17398
|
src: tag.attributes.src
|
|
17399
17399
|
}));
|
|
17400
17400
|
},
|
|
17401
17401
|
md: function md(tag) {
|
|
17402
|
-
return
|
|
17402
|
+
return import_react208.default.createElement(MD, Object.assign({}, tag.attributes, {
|
|
17403
17403
|
key: tag.key,
|
|
17404
17404
|
text: tag.getText()
|
|
17405
17405
|
}));
|
|
17406
17406
|
},
|
|
17407
17407
|
text: function text7(tag) {
|
|
17408
|
-
return
|
|
17408
|
+
return import_react208.default.createElement(Text, Object.assign({}, tag.attributes, {
|
|
17409
17409
|
key: tag.key,
|
|
17410
17410
|
text: tag.getText()
|
|
17411
17411
|
}));
|
|
17412
17412
|
},
|
|
17413
17413
|
scheduler: function scheduler(tag) {
|
|
17414
|
-
return
|
|
17414
|
+
return import_react208.default.createElement(Scheduler, Object.assign({}, tag.attributes, {
|
|
17415
17415
|
key: tag.key,
|
|
17416
17416
|
name: tag.attributes.name,
|
|
17417
17417
|
dateInterval: parseInt(tag.attributes.dateInterval, 10) || 1,
|
|
@@ -17423,19 +17423,19 @@ var init_mml_react_esm = __esm({
|
|
|
17423
17423
|
}));
|
|
17424
17424
|
},
|
|
17425
17425
|
carousel: function carousel(tag, children) {
|
|
17426
|
-
return
|
|
17426
|
+
return import_react208.default.createElement(Carousel, Object.assign({
|
|
17427
17427
|
slideWidth: tag.attributes.slideWidth
|
|
17428
17428
|
}, tag.attributes, {
|
|
17429
17429
|
key: tag.key
|
|
17430
17430
|
}), children);
|
|
17431
17431
|
},
|
|
17432
17432
|
item: function item(tag, children) {
|
|
17433
|
-
return
|
|
17433
|
+
return import_react208.default.createElement(CarouselItem, Object.assign({}, tag.attributes, {
|
|
17434
17434
|
key: tag.key
|
|
17435
17435
|
}), children);
|
|
17436
17436
|
},
|
|
17437
17437
|
number: function number2(tag) {
|
|
17438
|
-
return
|
|
17438
|
+
return import_react208.default.createElement(Number2, Object.assign({}, tag.attributes, {
|
|
17439
17439
|
key: tag.key,
|
|
17440
17440
|
name: tag.attributes.name,
|
|
17441
17441
|
value: tag.attributes.value
|
|
@@ -17473,13 +17473,13 @@ var init_mml_react_esm = __esm({
|
|
|
17473
17473
|
}();
|
|
17474
17474
|
MML = function MML2(_ref) {
|
|
17475
17475
|
var source = _ref.source, onSubmit = _ref.onSubmit, converters2 = _ref.converters, _ref$theme = _ref.theme, theme = _ref$theme === void 0 ? "" : _ref$theme, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, _ref$Loading = _ref.Loading, Loading$1 = _ref$Loading === void 0 ? Loading : _ref$Loading, _ref$Error = _ref.Error, Error3 = _ref$Error === void 0 ? Error$1 : _ref$Error, _ref$Success = _ref.Success, Success$1 = _ref$Success === void 0 ? Success : _ref$Success;
|
|
17476
|
-
var _useState = (0,
|
|
17477
|
-
var _useState2 = (0,
|
|
17476
|
+
var _useState = (0, import_react208.useState)(""), error = _useState[0], setError = _useState[1];
|
|
17477
|
+
var _useState2 = (0, import_react208.useState)({
|
|
17478
17478
|
loading: false,
|
|
17479
17479
|
error: "",
|
|
17480
17480
|
success: ""
|
|
17481
17481
|
}), submitState = _useState2[0], setSubmitState = _useState2[1];
|
|
17482
|
-
var tree = (0,
|
|
17482
|
+
var tree = (0, import_react208.useMemo)(function() {
|
|
17483
17483
|
try {
|
|
17484
17484
|
return Parse(source, converters2);
|
|
17485
17485
|
} catch (e2) {
|
|
@@ -17488,7 +17488,7 @@ var init_mml_react_esm = __esm({
|
|
|
17488
17488
|
return null;
|
|
17489
17489
|
}
|
|
17490
17490
|
}, [source, converters2]);
|
|
17491
|
-
var handleSubmit = (0,
|
|
17491
|
+
var handleSubmit = (0, import_react208.useCallback)(/* @__PURE__ */ function() {
|
|
17492
17492
|
var _ref2 = _asyncToGenerator(/* @__PURE__ */ runtime_1.mark(function _callee(event) {
|
|
17493
17493
|
var state;
|
|
17494
17494
|
return runtime_1.wrap(function _callee$(_context) {
|
|
@@ -17542,24 +17542,24 @@ var init_mml_react_esm = __esm({
|
|
|
17542
17542
|
return _ref2.apply(this, arguments);
|
|
17543
17543
|
};
|
|
17544
17544
|
}(), [onSubmit, tree]);
|
|
17545
|
-
return
|
|
17545
|
+
return import_react208.default.createElement("div", {
|
|
17546
17546
|
className: "mml-container " + theme + " " + className,
|
|
17547
17547
|
"data-testid": "mml-container"
|
|
17548
|
-
}, error ?
|
|
17548
|
+
}, error ? import_react208.default.createElement("div", {
|
|
17549
17549
|
className: "mml-wrap"
|
|
17550
|
-
}, Error3 &&
|
|
17550
|
+
}, Error3 && import_react208.default.createElement(Error3, {
|
|
17551
17551
|
error
|
|
17552
|
-
})) :
|
|
17552
|
+
})) : import_react208.default.createElement("form", {
|
|
17553
17553
|
onSubmit: handleSubmit,
|
|
17554
17554
|
className: "mml-wrap",
|
|
17555
17555
|
"data-testid": "mml-form"
|
|
17556
|
-
}, tree != null && tree.type ?
|
|
17556
|
+
}, tree != null && tree.type ? import_react208.default.createElement("div", {
|
|
17557
17557
|
className: "mml-card"
|
|
17558
|
-
}, tree == null ? void 0 : tree.reactElements) : tree == null ? void 0 : tree.reactElements, submitState.loading && Loading$1 &&
|
|
17558
|
+
}, tree == null ? void 0 : tree.reactElements) : tree == null ? void 0 : tree.reactElements, submitState.loading && Loading$1 && import_react208.default.createElement(Loading$1, {
|
|
17559
17559
|
loading: submitState.loading
|
|
17560
|
-
}), submitState.success && Success$1 &&
|
|
17560
|
+
}), submitState.success && Success$1 && import_react208.default.createElement(Success$1, {
|
|
17561
17561
|
success: submitState.success
|
|
17562
|
-
}), submitState.error && Error3 &&
|
|
17562
|
+
}), submitState.error && Error3 && import_react208.default.createElement(Error3, {
|
|
17563
17563
|
error: submitState.error
|
|
17564
17564
|
})));
|
|
17565
17565
|
};
|
|
@@ -18130,13 +18130,14 @@ var withComponentContext = (Component2) => {
|
|
|
18130
18130
|
var import_react10 = __toESM(require("react"));
|
|
18131
18131
|
|
|
18132
18132
|
// src/components/Dialog/DialogManager.ts
|
|
18133
|
+
var import_nanoid = require("nanoid");
|
|
18133
18134
|
var import_stream_chat = require("stream-chat");
|
|
18134
18135
|
var DialogManager = class {
|
|
18135
18136
|
constructor({ id } = {}) {
|
|
18136
18137
|
this.state = new import_stream_chat.StateStore({
|
|
18137
18138
|
dialogsById: {}
|
|
18138
18139
|
});
|
|
18139
|
-
this.id = id ?? (
|
|
18140
|
+
this.id = id ?? (0, import_nanoid.nanoid)();
|
|
18140
18141
|
}
|
|
18141
18142
|
get openDialogCount() {
|
|
18142
18143
|
return Object.values(this.state.getLatestValue().dialogsById).reduce(
|
|
@@ -20395,7 +20396,7 @@ var ImageDropzone = ({
|
|
|
20395
20396
|
|
|
20396
20397
|
// src/components/ReactFileUtilities/UploadButton.tsx
|
|
20397
20398
|
var import_clsx5 = __toESM(require("clsx"));
|
|
20398
|
-
var
|
|
20399
|
+
var import_nanoid2 = require("nanoid");
|
|
20399
20400
|
var import_react34 = __toESM(require("react"));
|
|
20400
20401
|
|
|
20401
20402
|
// src/components/ReactFileUtilities/utils.ts
|
|
@@ -20511,7 +20512,7 @@ var UploadFileInput = (0, import_react34.forwardRef)(function UploadFileInput2({
|
|
|
20511
20512
|
const { t: t2 } = useTranslationContext("UploadFileInput");
|
|
20512
20513
|
const { acceptedFiles = [], multipleUploads } = useChannelStateContext("UploadFileInput");
|
|
20513
20514
|
const { isUploadEnabled, maxFilesLeft, uploadNewFiles } = useMessageInputContext("UploadFileInput");
|
|
20514
|
-
const id = (0, import_react34.useMemo)(() => (0,
|
|
20515
|
+
const id = (0, import_react34.useMemo)(() => (0, import_nanoid2.nanoid)(), []);
|
|
20515
20516
|
const onFileChange = (0, import_react34.useCallback)(
|
|
20516
20517
|
(files) => {
|
|
20517
20518
|
uploadNewFiles(files);
|
|
@@ -35598,11 +35599,11 @@ ReactTextareaAutocomplete.propTypes = {
|
|
|
35598
35599
|
};
|
|
35599
35600
|
|
|
35600
35601
|
// src/components/Channel/Channel.tsx
|
|
35601
|
-
var
|
|
35602
|
+
var import_react260 = __toESM(require("react"));
|
|
35602
35603
|
var import_lodash22 = __toESM(require("lodash.debounce"));
|
|
35603
35604
|
var import_lodash23 = __toESM(require("lodash.defaultsdeep"));
|
|
35604
35605
|
var import_lodash24 = __toESM(require("lodash.throttle"));
|
|
35605
|
-
var
|
|
35606
|
+
var import_nanoid12 = require("nanoid");
|
|
35606
35607
|
var import_clsx65 = __toESM(require("clsx"));
|
|
35607
35608
|
|
|
35608
35609
|
// src/components/Channel/channelState.ts
|
|
@@ -39276,11 +39277,11 @@ var useCreateMessageInputContext = (value) => {
|
|
|
39276
39277
|
|
|
39277
39278
|
// src/components/MessageInput/hooks/useMessageInputState.ts
|
|
39278
39279
|
var import_react77 = require("react");
|
|
39279
|
-
var
|
|
39280
|
+
var import_nanoid5 = require("nanoid");
|
|
39280
39281
|
|
|
39281
39282
|
// src/components/MessageInput/hooks/useAttachments.ts
|
|
39282
39283
|
var import_react71 = require("react");
|
|
39283
|
-
var
|
|
39284
|
+
var import_nanoid3 = require("nanoid");
|
|
39284
39285
|
var apiMaxNumberOfFiles = 10;
|
|
39285
39286
|
var isImageFile = (file) => file.type.startsWith("image/") && !file.type.endsWith(".photoshop");
|
|
39286
39287
|
var getAttachmentTypeFromMime = (mimeType) => {
|
|
@@ -39297,7 +39298,7 @@ var ensureIsLocalAttachment = (attachment) => {
|
|
|
39297
39298
|
return {
|
|
39298
39299
|
localMetadata: {
|
|
39299
39300
|
...localMetadata ?? {},
|
|
39300
|
-
id: localMetadata?.id || (0,
|
|
39301
|
+
id: localMetadata?.id || (0, import_nanoid3.nanoid)()
|
|
39301
39302
|
},
|
|
39302
39303
|
...rest
|
|
39303
39304
|
};
|
|
@@ -39345,7 +39346,7 @@ var useAttachments = (props, state, dispatch, textareaRef) => {
|
|
|
39345
39346
|
uploadType: isImage ? "image" : "file"
|
|
39346
39347
|
});
|
|
39347
39348
|
if (!canUpload) return att;
|
|
39348
|
-
localMetadata.id = localMetadata?.id ?? (0,
|
|
39349
|
+
localMetadata.id = localMetadata?.id ?? (0, import_nanoid3.nanoid)();
|
|
39349
39350
|
const finalAttachment = {
|
|
39350
39351
|
type: getAttachmentTypeFromMime(file.type)
|
|
39351
39352
|
};
|
|
@@ -39457,7 +39458,7 @@ var useAttachments = (props, state, dispatch, textareaRef) => {
|
|
|
39457
39458
|
fileName: generateFileName(fileLike.type),
|
|
39458
39459
|
mimeType: fileLike.type
|
|
39459
39460
|
}) : fileLike,
|
|
39460
|
-
id: (0,
|
|
39461
|
+
id: (0, import_nanoid3.nanoid)()
|
|
39461
39462
|
}
|
|
39462
39463
|
});
|
|
39463
39464
|
});
|
|
@@ -39726,10 +39727,12 @@ var useSubmitHandler = (props, state, dispatch, numberOfUploads, enrichURLsContr
|
|
|
39726
39727
|
if (someAttachmentsUploading) {
|
|
39727
39728
|
return addNotification(t2("Wait until all attachments have uploaded"), "error");
|
|
39728
39729
|
}
|
|
39729
|
-
const
|
|
39730
|
-
|
|
39731
|
-
|
|
39732
|
-
|
|
39730
|
+
const attachmentsWithoutLinkPreviews = attachments.filter((att) => {
|
|
39731
|
+
const isSuccessfulUpload = att.localMetadata?.uploadState === "finished";
|
|
39732
|
+
const isNotUpload = !att.localMetadata?.uploadState;
|
|
39733
|
+
const isNotLinkPreview = !att.og_scrape_url;
|
|
39734
|
+
return isNotLinkPreview && (isSuccessfulUpload || isNotUpload);
|
|
39735
|
+
}).map((localAttachment) => {
|
|
39733
39736
|
const { localMetadata: _, ...attachment } = localAttachment;
|
|
39734
39737
|
return attachment;
|
|
39735
39738
|
});
|
|
@@ -39743,17 +39746,16 @@ var useSubmitHandler = (props, state, dispatch, numberOfUploads, enrichURLsContr
|
|
|
39743
39746
|
const someLinkPreviewsDismissed = Array.from(linkPreviews.values()).some(
|
|
39744
39747
|
(linkPreview) => linkPreview.state === "dismissed" /* DISMISSED */
|
|
39745
39748
|
);
|
|
39746
|
-
attachmentsFromLinkPreviews = someLinkPreviewsLoading ? [] : Array.from(linkPreviews.values()).filter(
|
|
39747
|
-
(linkPreview) => linkPreview.state === "loaded" /* LOADED */ && !attachmentsFromUploads.find(
|
|
39748
|
-
(attFromUpload) => attFromUpload.og_scrape_url === linkPreview.og_scrape_url
|
|
39749
|
-
)
|
|
39750
|
-
).map(
|
|
39749
|
+
attachmentsFromLinkPreviews = someLinkPreviewsLoading ? [] : Array.from(linkPreviews.values()).filter((linkPreview) => linkPreview.state === "loaded" /* LOADED */).map(
|
|
39751
39750
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39752
39751
|
({ state: linkPreviewState, ...ogAttachment }) => ogAttachment
|
|
39753
39752
|
);
|
|
39754
39753
|
sendOptions.skip_enrich_url = !someLinkPreviewsLoading && attachmentsFromLinkPreviews.length > 0 || someLinkPreviewsDismissed;
|
|
39755
39754
|
}
|
|
39756
|
-
const newAttachments = [
|
|
39755
|
+
const newAttachments = [
|
|
39756
|
+
...attachmentsWithoutLinkPreviews,
|
|
39757
|
+
...attachmentsFromLinkPreviews
|
|
39758
|
+
];
|
|
39757
39759
|
const actualMentionedUsers = Array.from(
|
|
39758
39760
|
new Set(
|
|
39759
39761
|
mentioned_users.filter(
|
|
@@ -40038,7 +40040,7 @@ var BrowserPermission = class {
|
|
|
40038
40040
|
|
|
40039
40041
|
// src/components/MediaRecorder/classes/MediaRecorderController.ts
|
|
40040
40042
|
var import_fix_webm_duration = __toESM(require("fix-webm-duration"));
|
|
40041
|
-
var
|
|
40043
|
+
var import_nanoid4 = require("nanoid");
|
|
40042
40044
|
|
|
40043
40045
|
// src/utils/mergeDeep.ts
|
|
40044
40046
|
var import_lodash6 = __toESM(require("lodash.mergewith"));
|
|
@@ -40318,7 +40320,7 @@ var MediaRecorderController = class {
|
|
|
40318
40320
|
file_size: blob.size,
|
|
40319
40321
|
localMetadata: {
|
|
40320
40322
|
file,
|
|
40321
|
-
id: (0,
|
|
40323
|
+
id: (0, import_nanoid4.nanoid)()
|
|
40322
40324
|
},
|
|
40323
40325
|
mime_type: blob.type,
|
|
40324
40326
|
title: file.name,
|
|
@@ -40585,7 +40587,7 @@ var initState = (message) => {
|
|
|
40585
40587
|
const attachments = message.attachments?.filter(({ og_scrape_url }) => !og_scrape_url).map(
|
|
40586
40588
|
(att) => ({
|
|
40587
40589
|
...att,
|
|
40588
|
-
localMetadata: { id: (0,
|
|
40590
|
+
localMetadata: { id: (0, import_nanoid5.nanoid)() }
|
|
40589
40591
|
})
|
|
40590
40592
|
) || [];
|
|
40591
40593
|
const mentioned_users = message.mentioned_users || [];
|
|
@@ -40866,10 +40868,10 @@ var UnMemoizedConnectionStatus = () => {
|
|
|
40866
40868
|
var ConnectionStatus = import_react80.default.memo(UnMemoizedConnectionStatus);
|
|
40867
40869
|
|
|
40868
40870
|
// src/components/MessageList/GiphyPreviewMessage.tsx
|
|
40869
|
-
var
|
|
40871
|
+
var import_react229 = __toESM(require("react"));
|
|
40870
40872
|
|
|
40871
40873
|
// src/components/Message/Message.tsx
|
|
40872
|
-
var
|
|
40874
|
+
var import_react228 = __toESM(require("react"));
|
|
40873
40875
|
|
|
40874
40876
|
// src/components/Message/hooks/useActionHandler.ts
|
|
40875
40877
|
var handleActionWarning = `Action handler was called, but it is missing one of its required arguments.
|
|
@@ -44444,7 +44446,7 @@ var useMessageTextStreaming = ({
|
|
|
44444
44446
|
};
|
|
44445
44447
|
|
|
44446
44448
|
// src/components/Message/MessageSimple.tsx
|
|
44447
|
-
var
|
|
44449
|
+
var import_react227 = __toESM(require("react"));
|
|
44448
44450
|
var import_clsx60 = __toESM(require("clsx"));
|
|
44449
44451
|
|
|
44450
44452
|
// src/components/Message/icons.tsx
|
|
@@ -46387,7 +46389,7 @@ var PollOptionWithLatestVotes = ({
|
|
|
46387
46389
|
// src/components/Poll/PollActions/PollResults/PollResults.tsx
|
|
46388
46390
|
var pollStateSelector10 = (nextValue) => ({
|
|
46389
46391
|
name: nextValue.name,
|
|
46390
|
-
options: nextValue.options,
|
|
46392
|
+
options: [...nextValue.options],
|
|
46391
46393
|
vote_counts_by_option: nextValue.vote_counts_by_option
|
|
46392
46394
|
});
|
|
46393
46395
|
var PollResults = ({
|
|
@@ -46579,12 +46581,12 @@ var Poll = ({
|
|
|
46579
46581
|
|
|
46580
46582
|
// src/components/Poll/PollCreationDialog/PollCreationDialog.tsx
|
|
46581
46583
|
var import_clsx48 = __toESM(require("clsx"));
|
|
46582
|
-
var
|
|
46584
|
+
var import_nanoid7 = require("nanoid");
|
|
46583
46585
|
var import_react179 = __toESM(require("react"));
|
|
46584
46586
|
|
|
46585
46587
|
// src/components/Poll/PollCreationDialog/OptionFieldSet.tsx
|
|
46586
46588
|
var import_clsx46 = __toESM(require("clsx"));
|
|
46587
|
-
var
|
|
46589
|
+
var import_nanoid6 = require("nanoid");
|
|
46588
46590
|
var import_react176 = __toESM(require("react"));
|
|
46589
46591
|
|
|
46590
46592
|
// src/components/DragAndDrop/DragAndDropContainer.tsx
|
|
@@ -46767,7 +46769,7 @@ var OptionFieldSet = ({
|
|
|
46767
46769
|
const shouldAddEmptyOption = prev.options.length < MAX_POLL_OPTIONS && (!prev.options || prev.options.slice(i + 1).length === 0 && !!e2.target.value);
|
|
46768
46770
|
const shouldRemoveOption = prev.options && prev.options.slice(i + 1).length > 0 && !e2.target.value;
|
|
46769
46771
|
const optionListHead = prev.options ? prev.options.slice(0, i) : [];
|
|
46770
|
-
const optionListTail = shouldAddEmptyOption ? [{ id: (0,
|
|
46772
|
+
const optionListTail = shouldAddEmptyOption ? [{ id: (0, import_nanoid6.nanoid)(), text: "" }] : (prev.options || []).slice(i + 1);
|
|
46771
46773
|
if (errors[option.id] && !e2.target.value || VALIDATION_ERRORS[errors[option.id]] && !findOptionDuplicate({ id: e2.target.id, text: e2.target.value })) {
|
|
46772
46774
|
setErrors((prev2) => {
|
|
46773
46775
|
delete prev2[option.id];
|
|
@@ -46896,10 +46898,10 @@ var PollCreationDialog = ({ close }) => {
|
|
|
46896
46898
|
allow_user_suggested_options: false,
|
|
46897
46899
|
description: "",
|
|
46898
46900
|
enforce_unique_vote: true,
|
|
46899
|
-
id: (0,
|
|
46901
|
+
id: (0, import_nanoid7.nanoid)(),
|
|
46900
46902
|
max_votes_allowed: "",
|
|
46901
46903
|
name: "",
|
|
46902
|
-
options: [{ id: (0,
|
|
46904
|
+
options: [{ id: (0, import_nanoid7.nanoid)(), text: "" }],
|
|
46903
46905
|
user_id: client.user?.id,
|
|
46904
46906
|
voting_visibility: "public"
|
|
46905
46907
|
})
|
|
@@ -46999,7 +47001,7 @@ var PollCreationDialog = ({ close }) => {
|
|
|
46999
47001
|
{
|
|
47000
47002
|
id: "max_votes_allowed",
|
|
47001
47003
|
onChange: (e2) => {
|
|
47002
|
-
const isValidValue = !e2.target.value || e2.target.value.match(VALID_MAX_VOTES_VALUE_REGEX);
|
|
47004
|
+
const isValidValue = e2.target.validity.valid && (!e2.target.value || e2.target.value.match(VALID_MAX_VOTES_VALUE_REGEX));
|
|
47003
47005
|
if (!isValidValue) {
|
|
47004
47006
|
setMultipleAnswerCountError(
|
|
47005
47007
|
t2("Type a number from 2 to 10")
|
|
@@ -47223,14 +47225,13 @@ var CUSTOM_MESSAGE_TYPE = {
|
|
|
47223
47225
|
};
|
|
47224
47226
|
|
|
47225
47227
|
// src/components/MessageInput/AttachmentSelector.tsx
|
|
47226
|
-
var
|
|
47227
|
-
var import_react187 = __toESM(require("react"));
|
|
47228
|
+
var import_react188 = __toESM(require("react"));
|
|
47228
47229
|
|
|
47229
47230
|
// src/components/MessageInput/icons.tsx
|
|
47230
47231
|
var import_react184 = __toESM(require("react"));
|
|
47231
|
-
var
|
|
47232
|
+
var import_nanoid8 = require("nanoid");
|
|
47232
47233
|
var LoadingIndicatorIcon = ({ size = 20 }) => {
|
|
47233
|
-
const id = (0, import_react184.useMemo)(() => (0,
|
|
47234
|
+
const id = (0, import_react184.useMemo)(() => (0, import_nanoid8.nanoid)(), []);
|
|
47234
47235
|
return /* @__PURE__ */ import_react184.default.createElement("div", { className: "str-chat__loading-indicator" }, /* @__PURE__ */ import_react184.default.createElement(
|
|
47235
47236
|
"svg",
|
|
47236
47237
|
{
|
|
@@ -47418,16 +47419,24 @@ var AttachmentSelectorContextProvider = ({
|
|
|
47418
47419
|
}) => /* @__PURE__ */ import_react186.default.createElement(AttachmentSelectorContext.Provider, { value }, children);
|
|
47419
47420
|
var useAttachmentSelectorContext = () => (0, import_react186.useContext)(AttachmentSelectorContext);
|
|
47420
47421
|
|
|
47422
|
+
// src/components/UtilityComponents/useStableId.ts
|
|
47423
|
+
var import_nanoid9 = require("nanoid");
|
|
47424
|
+
var import_react187 = require("react");
|
|
47425
|
+
var useStableId = (key) => {
|
|
47426
|
+
const id = (0, import_react187.useMemo)(() => (0, import_nanoid9.nanoid)(), [key]);
|
|
47427
|
+
return id;
|
|
47428
|
+
};
|
|
47429
|
+
|
|
47421
47430
|
// src/components/MessageInput/AttachmentSelector.tsx
|
|
47422
47431
|
var SimpleAttachmentSelector = () => {
|
|
47423
47432
|
const {
|
|
47424
47433
|
AttachmentSelectorInitiationButtonContents,
|
|
47425
47434
|
FileUploadIcon = UploadIcon
|
|
47426
47435
|
} = useComponentContext();
|
|
47427
|
-
const inputRef = (0,
|
|
47428
|
-
const [labelElement, setLabelElement] = (0,
|
|
47429
|
-
const id = (
|
|
47430
|
-
(0,
|
|
47436
|
+
const inputRef = (0, import_react188.useRef)(null);
|
|
47437
|
+
const [labelElement, setLabelElement] = (0, import_react188.useState)(null);
|
|
47438
|
+
const id = useStableId();
|
|
47439
|
+
(0, import_react188.useEffect)(() => {
|
|
47431
47440
|
if (!labelElement) return;
|
|
47432
47441
|
const handleKeyUp = (event) => {
|
|
47433
47442
|
if (![" ", "Enter"].includes(event.key) || !inputRef.current) return;
|
|
@@ -47439,7 +47448,7 @@ var SimpleAttachmentSelector = () => {
|
|
|
47439
47448
|
labelElement.removeEventListener("keyup", handleKeyUp);
|
|
47440
47449
|
};
|
|
47441
47450
|
}, [labelElement]);
|
|
47442
|
-
return /* @__PURE__ */
|
|
47451
|
+
return /* @__PURE__ */ import_react188.default.createElement("div", { className: "str-chat__file-input-container", "data-testid": "file-upload-button" }, /* @__PURE__ */ import_react188.default.createElement(UploadFileInput, { id, ref: inputRef }), /* @__PURE__ */ import_react188.default.createElement(
|
|
47443
47452
|
"label",
|
|
47444
47453
|
{
|
|
47445
47454
|
className: "str-chat__file-input-label",
|
|
@@ -47447,24 +47456,24 @@ var SimpleAttachmentSelector = () => {
|
|
|
47447
47456
|
ref: setLabelElement,
|
|
47448
47457
|
tabIndex: 0
|
|
47449
47458
|
},
|
|
47450
|
-
AttachmentSelectorInitiationButtonContents ? /* @__PURE__ */
|
|
47459
|
+
AttachmentSelectorInitiationButtonContents ? /* @__PURE__ */ import_react188.default.createElement(AttachmentSelectorInitiationButtonContents, null) : /* @__PURE__ */ import_react188.default.createElement(FileUploadIcon, null)
|
|
47451
47460
|
));
|
|
47452
47461
|
};
|
|
47453
47462
|
var AttachmentSelectorMenuInitButtonIcon = () => {
|
|
47454
47463
|
const { AttachmentSelectorInitiationButtonContents, FileUploadIcon } = useComponentContext("SimpleAttachmentSelector");
|
|
47455
47464
|
if (AttachmentSelectorInitiationButtonContents) {
|
|
47456
|
-
return /* @__PURE__ */
|
|
47465
|
+
return /* @__PURE__ */ import_react188.default.createElement(AttachmentSelectorInitiationButtonContents, null);
|
|
47457
47466
|
}
|
|
47458
47467
|
if (FileUploadIcon) {
|
|
47459
|
-
return /* @__PURE__ */
|
|
47468
|
+
return /* @__PURE__ */ import_react188.default.createElement(FileUploadIcon, null);
|
|
47460
47469
|
}
|
|
47461
|
-
return /* @__PURE__ */
|
|
47470
|
+
return /* @__PURE__ */ import_react188.default.createElement("div", { className: "str-chat__attachment-selector__menu-button__icon" });
|
|
47462
47471
|
};
|
|
47463
47472
|
var DefaultAttachmentSelectorComponents = {
|
|
47464
47473
|
File({ closeMenu }) {
|
|
47465
47474
|
const { t: t2 } = useTranslationContext();
|
|
47466
47475
|
const { fileInput } = useAttachmentSelectorContext();
|
|
47467
|
-
return /* @__PURE__ */
|
|
47476
|
+
return /* @__PURE__ */ import_react188.default.createElement(
|
|
47468
47477
|
DialogMenuButton,
|
|
47469
47478
|
{
|
|
47470
47479
|
className: "str-chat__attachment-selector-actions-menu__button str-chat__attachment-selector-actions-menu__upload-file-button",
|
|
@@ -47478,7 +47487,7 @@ var DefaultAttachmentSelectorComponents = {
|
|
|
47478
47487
|
},
|
|
47479
47488
|
Poll({ closeMenu, openModalForAction }) {
|
|
47480
47489
|
const { t: t2 } = useTranslationContext();
|
|
47481
|
-
return /* @__PURE__ */
|
|
47490
|
+
return /* @__PURE__ */ import_react188.default.createElement(
|
|
47482
47491
|
DialogMenuButton,
|
|
47483
47492
|
{
|
|
47484
47493
|
className: "str-chat__attachment-selector-actions-menu__button str-chat__attachment-selector-actions-menu__create-poll-button",
|
|
@@ -47528,8 +47537,8 @@ var AttachmentSelector = ({
|
|
|
47528
47537
|
const menuDialogId = `attachment-actions-menu${isThreadInput ? "-thread" : ""}`;
|
|
47529
47538
|
const menuDialog = useDialog({ id: menuDialogId });
|
|
47530
47539
|
const menuDialogIsOpen = useDialogIsOpen(menuDialogId);
|
|
47531
|
-
const [modalContentAction, setModalContentActionAction] = (0,
|
|
47532
|
-
const openModal = (0,
|
|
47540
|
+
const [modalContentAction, setModalContentActionAction] = (0, import_react188.useState)();
|
|
47541
|
+
const openModal = (0, import_react188.useCallback)(
|
|
47533
47542
|
(actionType) => {
|
|
47534
47543
|
const action = actions.find((a2) => a2.type === actionType);
|
|
47535
47544
|
if (!action?.ModalContent) return;
|
|
@@ -47537,19 +47546,19 @@ var AttachmentSelector = ({
|
|
|
47537
47546
|
},
|
|
47538
47547
|
[actions]
|
|
47539
47548
|
);
|
|
47540
|
-
const closeModal = (0,
|
|
47541
|
-
const [fileInput, setFileInput] = (0,
|
|
47542
|
-
const menuButtonRef = (0,
|
|
47543
|
-
const getDefaultPortalDestination = (0,
|
|
47549
|
+
const closeModal = (0, import_react188.useCallback)(() => setModalContentActionAction(void 0), []);
|
|
47550
|
+
const [fileInput, setFileInput] = (0, import_react188.useState)(null);
|
|
47551
|
+
const menuButtonRef = (0, import_react188.useRef)(null);
|
|
47552
|
+
const getDefaultPortalDestination = (0, import_react188.useCallback)(
|
|
47544
47553
|
() => document.getElementById(CHANNEL_CONTAINER_ID),
|
|
47545
47554
|
[]
|
|
47546
47555
|
);
|
|
47547
47556
|
if (actions.length === 0) return null;
|
|
47548
47557
|
if (actions.length === 1 && actions[0].type === "uploadFile")
|
|
47549
|
-
return /* @__PURE__ */
|
|
47558
|
+
return /* @__PURE__ */ import_react188.default.createElement(SimpleAttachmentSelector, null);
|
|
47550
47559
|
const ModalContent = modalContentAction?.ModalContent;
|
|
47551
47560
|
const modalIsOpen = !!ModalContent;
|
|
47552
|
-
return /* @__PURE__ */
|
|
47561
|
+
return /* @__PURE__ */ import_react188.default.createElement(AttachmentSelectorContextProvider, { value: { fileInput } }, /* @__PURE__ */ import_react188.default.createElement("div", { className: "str-chat__attachment-selector" }, channelCapabilities["upload-file"] && /* @__PURE__ */ import_react188.default.createElement(UploadFileInput, { ref: setFileInput }), /* @__PURE__ */ import_react188.default.createElement(
|
|
47553
47562
|
"button",
|
|
47554
47563
|
{
|
|
47555
47564
|
"aria-expanded": menuDialogIsOpen,
|
|
@@ -47560,8 +47569,8 @@ var AttachmentSelector = ({
|
|
|
47560
47569
|
onClick: () => menuDialog?.toggle(),
|
|
47561
47570
|
ref: menuButtonRef
|
|
47562
47571
|
},
|
|
47563
|
-
/* @__PURE__ */
|
|
47564
|
-
), /* @__PURE__ */
|
|
47572
|
+
/* @__PURE__ */ import_react188.default.createElement(AttachmentSelectorMenuInitButtonIcon, null)
|
|
47573
|
+
), /* @__PURE__ */ import_react188.default.createElement(
|
|
47565
47574
|
DialogAnchor,
|
|
47566
47575
|
{
|
|
47567
47576
|
id: menuDialogId,
|
|
@@ -47569,13 +47578,13 @@ var AttachmentSelector = ({
|
|
|
47569
47578
|
referenceElement: menuButtonRef.current,
|
|
47570
47579
|
trapFocus: true
|
|
47571
47580
|
},
|
|
47572
|
-
/* @__PURE__ */
|
|
47581
|
+
/* @__PURE__ */ import_react188.default.createElement(
|
|
47573
47582
|
"div",
|
|
47574
47583
|
{
|
|
47575
47584
|
className: "str-chat__attachment-selector-actions-menu str-chat__dialog-menu",
|
|
47576
47585
|
"data-testid": "attachment-selector-actions-menu"
|
|
47577
47586
|
},
|
|
47578
|
-
actions.map(({ ActionButton, type }) => /* @__PURE__ */
|
|
47587
|
+
actions.map(({ ActionButton, type }) => /* @__PURE__ */ import_react188.default.createElement(
|
|
47579
47588
|
ActionButton,
|
|
47580
47589
|
{
|
|
47581
47590
|
closeMenu: menuDialog.close,
|
|
@@ -47584,29 +47593,29 @@ var AttachmentSelector = ({
|
|
|
47584
47593
|
}
|
|
47585
47594
|
))
|
|
47586
47595
|
)
|
|
47587
|
-
), /* @__PURE__ */
|
|
47596
|
+
), /* @__PURE__ */ import_react188.default.createElement(
|
|
47588
47597
|
Portal,
|
|
47589
47598
|
{
|
|
47590
47599
|
getPortalDestination: getModalPortalDestination ?? getDefaultPortalDestination,
|
|
47591
47600
|
isOpen: modalIsOpen
|
|
47592
47601
|
},
|
|
47593
|
-
/* @__PURE__ */
|
|
47602
|
+
/* @__PURE__ */ import_react188.default.createElement(
|
|
47594
47603
|
Modal,
|
|
47595
47604
|
{
|
|
47596
47605
|
className: "str-chat__create-poll-modal",
|
|
47597
47606
|
onClose: closeModal,
|
|
47598
47607
|
open: modalIsOpen
|
|
47599
47608
|
},
|
|
47600
|
-
ModalContent && /* @__PURE__ */
|
|
47609
|
+
ModalContent && /* @__PURE__ */ import_react188.default.createElement(ModalContent, { close: closeModal })
|
|
47601
47610
|
)
|
|
47602
47611
|
)));
|
|
47603
47612
|
};
|
|
47604
47613
|
|
|
47605
47614
|
// src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx
|
|
47606
|
-
var
|
|
47615
|
+
var import_react200 = __toESM(require("react"));
|
|
47607
47616
|
|
|
47608
47617
|
// src/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.tsx
|
|
47609
|
-
var
|
|
47618
|
+
var import_react189 = __toESM(require("react"));
|
|
47610
47619
|
var UnsupportedAttachmentPreview = ({
|
|
47611
47620
|
attachment,
|
|
47612
47621
|
handleRetry,
|
|
@@ -47614,14 +47623,14 @@ var UnsupportedAttachmentPreview = ({
|
|
|
47614
47623
|
}) => {
|
|
47615
47624
|
const { t: t2 } = useTranslationContext("UnsupportedAttachmentPreview");
|
|
47616
47625
|
const title = attachment.title ?? t2("Unsupported attachment");
|
|
47617
|
-
return /* @__PURE__ */
|
|
47626
|
+
return /* @__PURE__ */ import_react189.default.createElement(
|
|
47618
47627
|
"div",
|
|
47619
47628
|
{
|
|
47620
47629
|
className: "str-chat__attachment-preview-unsupported",
|
|
47621
47630
|
"data-testid": "attachment-preview-unknown"
|
|
47622
47631
|
},
|
|
47623
|
-
/* @__PURE__ */
|
|
47624
|
-
/* @__PURE__ */
|
|
47632
|
+
/* @__PURE__ */ import_react189.default.createElement("div", { className: "str-chat__attachment-preview-file-icon" }, /* @__PURE__ */ import_react189.default.createElement(FileIcon, { filename: title, mimeType: attachment.mime_type })),
|
|
47633
|
+
/* @__PURE__ */ import_react189.default.createElement(
|
|
47625
47634
|
"button",
|
|
47626
47635
|
{
|
|
47627
47636
|
className: "str-chat__attachment-preview-delete",
|
|
@@ -47629,18 +47638,18 @@ var UnsupportedAttachmentPreview = ({
|
|
|
47629
47638
|
disabled: attachment.localMetadata?.uploadState === "uploading",
|
|
47630
47639
|
onClick: () => attachment.localMetadata?.id && removeAttachments([attachment.localMetadata?.id])
|
|
47631
47640
|
},
|
|
47632
|
-
/* @__PURE__ */
|
|
47641
|
+
/* @__PURE__ */ import_react189.default.createElement(CloseIcon, null)
|
|
47633
47642
|
),
|
|
47634
|
-
attachment.localMetadata?.uploadState === "failed" && !!handleRetry && /* @__PURE__ */
|
|
47643
|
+
attachment.localMetadata?.uploadState === "failed" && !!handleRetry && /* @__PURE__ */ import_react189.default.createElement(
|
|
47635
47644
|
"button",
|
|
47636
47645
|
{
|
|
47637
47646
|
className: "str-chat__attachment-preview-error str-chat__attachment-preview-error-file",
|
|
47638
47647
|
"data-testid": "file-preview-item-retry-button",
|
|
47639
47648
|
onClick: () => handleRetry(attachment)
|
|
47640
47649
|
},
|
|
47641
|
-
/* @__PURE__ */
|
|
47650
|
+
/* @__PURE__ */ import_react189.default.createElement(RetryIcon, null)
|
|
47642
47651
|
),
|
|
47643
|
-
/* @__PURE__ */
|
|
47652
|
+
/* @__PURE__ */ import_react189.default.createElement("div", { className: "str-chat__attachment-preview-metadata" }, /* @__PURE__ */ import_react189.default.createElement("div", { className: "str-chat__attachment-preview-title", title }, title), attachment.localMetadata?.uploadState === "finished" && !!attachment.asset_url && /* @__PURE__ */ import_react189.default.createElement(
|
|
47644
47653
|
"a",
|
|
47645
47654
|
{
|
|
47646
47655
|
className: "str-chat__attachment-preview-file-download",
|
|
@@ -47649,16 +47658,16 @@ var UnsupportedAttachmentPreview = ({
|
|
|
47649
47658
|
rel: "noreferrer",
|
|
47650
47659
|
target: "_blank"
|
|
47651
47660
|
},
|
|
47652
|
-
/* @__PURE__ */
|
|
47653
|
-
), attachment.localMetadata?.uploadState === "uploading" && /* @__PURE__ */
|
|
47661
|
+
/* @__PURE__ */ import_react189.default.createElement(DownloadIcon2, null)
|
|
47662
|
+
), attachment.localMetadata?.uploadState === "uploading" && /* @__PURE__ */ import_react189.default.createElement(LoadingIndicatorIcon, { size: 17 }))
|
|
47654
47663
|
);
|
|
47655
47664
|
};
|
|
47656
47665
|
|
|
47657
47666
|
// src/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.tsx
|
|
47658
|
-
var
|
|
47667
|
+
var import_react197 = __toESM(require("react"));
|
|
47659
47668
|
|
|
47660
47669
|
// src/components/MediaRecorder/RecordingPermissionDeniedNotification.tsx
|
|
47661
|
-
var
|
|
47670
|
+
var import_react190 = __toESM(require("react"));
|
|
47662
47671
|
var RecordingPermissionDeniedNotification = ({
|
|
47663
47672
|
onClose,
|
|
47664
47673
|
permissionName
|
|
@@ -47674,7 +47683,7 @@ var RecordingPermissionDeniedNotification = ({
|
|
|
47674
47683
|
microphone: t2("Allow access to microphone")
|
|
47675
47684
|
}
|
|
47676
47685
|
};
|
|
47677
|
-
return /* @__PURE__ */
|
|
47686
|
+
return /* @__PURE__ */ import_react190.default.createElement("div", { className: "str-chat__recording-permission-denied-notification" }, /* @__PURE__ */ import_react190.default.createElement("div", { className: "str-chat__recording-permission-denied-notification__heading" }, permissionTranslations.heading[permissionName]), /* @__PURE__ */ import_react190.default.createElement("p", { className: "str-chat__recording-permission-denied-notification__message" }, permissionTranslations.body[permissionName]), /* @__PURE__ */ import_react190.default.createElement("div", { className: "str-chat__recording-permission-denied-notification__dismiss-button-container" }, /* @__PURE__ */ import_react190.default.createElement(
|
|
47678
47687
|
"button",
|
|
47679
47688
|
{
|
|
47680
47689
|
className: "str-chat__recording-permission-denied-notification__dismiss-button",
|
|
@@ -47685,15 +47694,15 @@ var RecordingPermissionDeniedNotification = ({
|
|
|
47685
47694
|
};
|
|
47686
47695
|
|
|
47687
47696
|
// src/components/MediaRecorder/AudioRecorder/AudioRecorder.tsx
|
|
47688
|
-
var
|
|
47697
|
+
var import_react195 = __toESM(require("react"));
|
|
47689
47698
|
|
|
47690
47699
|
// src/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.tsx
|
|
47691
|
-
var
|
|
47700
|
+
var import_react192 = __toESM(require("react"));
|
|
47692
47701
|
|
|
47693
47702
|
// src/components/MediaRecorder/AudioRecorder/RecordingTimer.tsx
|
|
47694
47703
|
var import_clsx52 = __toESM(require("clsx"));
|
|
47695
|
-
var
|
|
47696
|
-
var RecordingTimer = ({ durationSeconds }) => /* @__PURE__ */
|
|
47704
|
+
var import_react191 = __toESM(require("react"));
|
|
47705
|
+
var RecordingTimer = ({ durationSeconds }) => /* @__PURE__ */ import_react191.default.createElement(
|
|
47697
47706
|
"div",
|
|
47698
47707
|
{
|
|
47699
47708
|
className: (0, import_clsx52.default)("str-chat__recording-timer", {
|
|
@@ -47715,15 +47724,15 @@ var AudioRecordingPreview = ({
|
|
|
47715
47724
|
mimeType
|
|
47716
47725
|
});
|
|
47717
47726
|
const displayedDuration = secondsElapsed || durationSeconds;
|
|
47718
|
-
return /* @__PURE__ */
|
|
47727
|
+
return /* @__PURE__ */ import_react192.default.createElement(import_react192.default.Fragment, null, /* @__PURE__ */ import_react192.default.createElement("audio", { ref: audioRef }, /* @__PURE__ */ import_react192.default.createElement("source", { src: props.src, type: mimeType })), /* @__PURE__ */ import_react192.default.createElement(
|
|
47719
47728
|
"button",
|
|
47720
47729
|
{
|
|
47721
47730
|
className: "str-chat__audio_recorder__toggle-playback-button",
|
|
47722
47731
|
"data-testid": "audio-recording-preview-toggle-play-btn",
|
|
47723
47732
|
onClick: togglePlay
|
|
47724
47733
|
},
|
|
47725
|
-
isPlaying ? /* @__PURE__ */
|
|
47726
|
-
), /* @__PURE__ */
|
|
47734
|
+
isPlaying ? /* @__PURE__ */ import_react192.default.createElement(PauseIcon2, null) : /* @__PURE__ */ import_react192.default.createElement(PlayIcon, null)
|
|
47735
|
+
), /* @__PURE__ */ import_react192.default.createElement(RecordingTimer, { durationSeconds: displayedDuration }), /* @__PURE__ */ import_react192.default.createElement("div", { className: "str-chat__wave-progress-bar__track-container" }, /* @__PURE__ */ import_react192.default.createElement(
|
|
47727
47736
|
WaveProgressBar,
|
|
47728
47737
|
{
|
|
47729
47738
|
progress,
|
|
@@ -47734,24 +47743,24 @@ var AudioRecordingPreview = ({
|
|
|
47734
47743
|
};
|
|
47735
47744
|
|
|
47736
47745
|
// src/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.tsx
|
|
47737
|
-
var
|
|
47746
|
+
var import_react194 = __toESM(require("react"));
|
|
47738
47747
|
|
|
47739
47748
|
// src/components/MessageInput/hooks/useTimeElapsed.ts
|
|
47740
|
-
var
|
|
47749
|
+
var import_react193 = require("react");
|
|
47741
47750
|
var useTimeElapsed = ({ startOnMount } = {}) => {
|
|
47742
|
-
const [secondsElapsed, setSecondsElapsed] = (0,
|
|
47743
|
-
const updateInterval = (0,
|
|
47744
|
-
const startCounter = (0,
|
|
47751
|
+
const [secondsElapsed, setSecondsElapsed] = (0, import_react193.useState)(0);
|
|
47752
|
+
const updateInterval = (0, import_react193.useRef)(void 0);
|
|
47753
|
+
const startCounter = (0, import_react193.useCallback)(() => {
|
|
47745
47754
|
if (updateInterval.current) return;
|
|
47746
47755
|
updateInterval.current = setInterval(() => {
|
|
47747
47756
|
setSecondsElapsed((prev) => prev + 1);
|
|
47748
47757
|
}, 1e3);
|
|
47749
47758
|
}, []);
|
|
47750
|
-
const stopCounter = (0,
|
|
47759
|
+
const stopCounter = (0, import_react193.useCallback)(() => {
|
|
47751
47760
|
clearInterval(updateInterval.current);
|
|
47752
47761
|
updateInterval.current = void 0;
|
|
47753
47762
|
}, []);
|
|
47754
|
-
(0,
|
|
47763
|
+
(0, import_react193.useEffect)(() => {
|
|
47755
47764
|
if (!startOnMount) return;
|
|
47756
47765
|
startCounter();
|
|
47757
47766
|
return () => {
|
|
@@ -47770,8 +47779,8 @@ var AudioRecordingWaveform = ({ maxDataPointsDrawn = 100 }) => {
|
|
|
47770
47779
|
const {
|
|
47771
47780
|
recordingController: { recorder }
|
|
47772
47781
|
} = useMessageInputContext();
|
|
47773
|
-
const [amplitudes, setAmplitudes] = (0,
|
|
47774
|
-
(0,
|
|
47782
|
+
const [amplitudes, setAmplitudes] = (0, import_react194.useState)([]);
|
|
47783
|
+
(0, import_react194.useEffect)(() => {
|
|
47775
47784
|
if (!recorder?.amplitudeRecorder) return;
|
|
47776
47785
|
const amplitudesSubscription = recorder.amplitudeRecorder.amplitudes.subscribe(setAmplitudes);
|
|
47777
47786
|
return () => {
|
|
@@ -47779,7 +47788,7 @@ var AudioRecordingWaveform = ({ maxDataPointsDrawn = 100 }) => {
|
|
|
47779
47788
|
};
|
|
47780
47789
|
}, [recorder]);
|
|
47781
47790
|
if (!recorder) return null;
|
|
47782
|
-
return /* @__PURE__ */
|
|
47791
|
+
return /* @__PURE__ */ import_react194.default.createElement("div", { className: "str-chat__waveform-box-container" }, /* @__PURE__ */ import_react194.default.createElement("div", { className: "str-chat__audio_recorder__waveform-box" }, amplitudes.slice(-maxDataPointsDrawn).map((amplitude, i) => /* @__PURE__ */ import_react194.default.createElement(
|
|
47783
47792
|
"div",
|
|
47784
47793
|
{
|
|
47785
47794
|
className: "str-chat__wave-progress-bar__amplitude-bar",
|
|
@@ -47795,7 +47804,7 @@ var AudioRecordingInProgress = () => {
|
|
|
47795
47804
|
const {
|
|
47796
47805
|
recordingController: { recorder }
|
|
47797
47806
|
} = useMessageInputContext();
|
|
47798
|
-
(0,
|
|
47807
|
+
(0, import_react194.useEffect)(() => {
|
|
47799
47808
|
if (!recorder?.mediaRecorder) return;
|
|
47800
47809
|
const { mediaRecorder } = recorder;
|
|
47801
47810
|
if (mediaRecorder.state === "recording") {
|
|
@@ -47812,7 +47821,7 @@ var AudioRecordingInProgress = () => {
|
|
|
47812
47821
|
mediaRecorder.removeEventListener("pause", stopCounter);
|
|
47813
47822
|
};
|
|
47814
47823
|
}, [recorder, startCounter, stopCounter]);
|
|
47815
|
-
return /* @__PURE__ */
|
|
47824
|
+
return /* @__PURE__ */ import_react194.default.createElement(import_react194.default.Fragment, null, /* @__PURE__ */ import_react194.default.createElement(RecordingTimer, { durationSeconds: secondsElapsed }), /* @__PURE__ */ import_react194.default.createElement(AudioRecordingWaveform, null));
|
|
47816
47825
|
};
|
|
47817
47826
|
|
|
47818
47827
|
// src/components/MediaRecorder/AudioRecorder/AudioRecorder.tsx
|
|
@@ -47821,7 +47830,7 @@ var AudioRecorder = () => {
|
|
|
47821
47830
|
recordingController: { completeRecording, recorder, recording, recordingState }
|
|
47822
47831
|
} = useMessageInputContext();
|
|
47823
47832
|
const isUploadingFile = recording?.localMetadata?.uploadState === "uploading";
|
|
47824
|
-
const state = (0,
|
|
47833
|
+
const state = (0, import_react195.useMemo)(
|
|
47825
47834
|
() => ({
|
|
47826
47835
|
paused: recordingState === "paused" /* PAUSED */,
|
|
47827
47836
|
recording: recordingState === "recording" /* RECORDING */,
|
|
@@ -47830,7 +47839,7 @@ var AudioRecorder = () => {
|
|
|
47830
47839
|
[recordingState]
|
|
47831
47840
|
);
|
|
47832
47841
|
if (!recorder) return null;
|
|
47833
|
-
return /* @__PURE__ */
|
|
47842
|
+
return /* @__PURE__ */ import_react195.default.createElement("div", { className: "str-chat__audio_recorder-container" }, /* @__PURE__ */ import_react195.default.createElement("div", { className: "str-chat__audio_recorder", "data-testid": "audio-recorder" }, /* @__PURE__ */ import_react195.default.createElement(
|
|
47834
47843
|
"button",
|
|
47835
47844
|
{
|
|
47836
47845
|
className: "str-chat__audio_recorder__cancel-button",
|
|
@@ -47838,8 +47847,8 @@ var AudioRecorder = () => {
|
|
|
47838
47847
|
disabled: isUploadingFile,
|
|
47839
47848
|
onClick: recorder.cancel
|
|
47840
47849
|
},
|
|
47841
|
-
/* @__PURE__ */
|
|
47842
|
-
), state.stopped && recording?.asset_url ? /* @__PURE__ */
|
|
47850
|
+
/* @__PURE__ */ import_react195.default.createElement(BinIcon, null)
|
|
47851
|
+
), state.stopped && recording?.asset_url ? /* @__PURE__ */ import_react195.default.createElement(
|
|
47843
47852
|
AudioRecordingPreview,
|
|
47844
47853
|
{
|
|
47845
47854
|
durationSeconds: recording.duration ?? 0,
|
|
@@ -47847,22 +47856,22 @@ var AudioRecorder = () => {
|
|
|
47847
47856
|
src: recording.asset_url,
|
|
47848
47857
|
waveformData: recording.waveform_data
|
|
47849
47858
|
}
|
|
47850
|
-
) : state.paused || state.recording ? /* @__PURE__ */
|
|
47859
|
+
) : state.paused || state.recording ? /* @__PURE__ */ import_react195.default.createElement(AudioRecordingInProgress, null) : null, state.paused && /* @__PURE__ */ import_react195.default.createElement(
|
|
47851
47860
|
"button",
|
|
47852
47861
|
{
|
|
47853
47862
|
className: "str-chat__audio_recorder__resume-recording-button",
|
|
47854
47863
|
onClick: recorder.resume
|
|
47855
47864
|
},
|
|
47856
|
-
/* @__PURE__ */
|
|
47857
|
-
), state.recording && /* @__PURE__ */
|
|
47865
|
+
/* @__PURE__ */ import_react195.default.createElement(MicIcon, null)
|
|
47866
|
+
), state.recording && /* @__PURE__ */ import_react195.default.createElement(
|
|
47858
47867
|
"button",
|
|
47859
47868
|
{
|
|
47860
47869
|
className: "str-chat__audio_recorder__pause-recording-button",
|
|
47861
47870
|
"data-testid": "pause-recording-audio-button",
|
|
47862
47871
|
onClick: recorder.pause
|
|
47863
47872
|
},
|
|
47864
|
-
/* @__PURE__ */
|
|
47865
|
-
), state.stopped ? /* @__PURE__ */
|
|
47873
|
+
/* @__PURE__ */ import_react195.default.createElement(PauseIcon2, null)
|
|
47874
|
+
), state.stopped ? /* @__PURE__ */ import_react195.default.createElement(
|
|
47866
47875
|
"button",
|
|
47867
47876
|
{
|
|
47868
47877
|
className: "str-chat__audio_recorder__complete-button",
|
|
@@ -47870,21 +47879,21 @@ var AudioRecorder = () => {
|
|
|
47870
47879
|
disabled: isUploadingFile,
|
|
47871
47880
|
onClick: completeRecording
|
|
47872
47881
|
},
|
|
47873
|
-
isUploadingFile ? /* @__PURE__ */
|
|
47874
|
-
) : /* @__PURE__ */
|
|
47882
|
+
isUploadingFile ? /* @__PURE__ */ import_react195.default.createElement(LoadingIndicatorIcon, null) : /* @__PURE__ */ import_react195.default.createElement(SendIcon, null)
|
|
47883
|
+
) : /* @__PURE__ */ import_react195.default.createElement(
|
|
47875
47884
|
"button",
|
|
47876
47885
|
{
|
|
47877
47886
|
className: "str-chat__audio_recorder__stop-button",
|
|
47878
47887
|
"data-testid": "audio-recorder-stop-button",
|
|
47879
47888
|
onClick: recorder.stop
|
|
47880
47889
|
},
|
|
47881
|
-
/* @__PURE__ */
|
|
47890
|
+
/* @__PURE__ */ import_react195.default.createElement(CheckSignIcon, null)
|
|
47882
47891
|
)));
|
|
47883
47892
|
};
|
|
47884
47893
|
|
|
47885
47894
|
// src/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.tsx
|
|
47886
|
-
var
|
|
47887
|
-
var StartRecordingAudioButton = (props) => /* @__PURE__ */
|
|
47895
|
+
var import_react196 = __toESM(require("react"));
|
|
47896
|
+
var StartRecordingAudioButton = (props) => /* @__PURE__ */ import_react196.default.createElement(
|
|
47888
47897
|
"button",
|
|
47889
47898
|
{
|
|
47890
47899
|
"aria-label": "Start recording audio",
|
|
@@ -47892,7 +47901,7 @@ var StartRecordingAudioButton = (props) => /* @__PURE__ */ import_react195.defau
|
|
|
47892
47901
|
"data-testid": "start-recording-audio-button",
|
|
47893
47902
|
...props
|
|
47894
47903
|
},
|
|
47895
|
-
/* @__PURE__ */
|
|
47904
|
+
/* @__PURE__ */ import_react196.default.createElement(MicIcon, null)
|
|
47896
47905
|
);
|
|
47897
47906
|
|
|
47898
47907
|
// src/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.tsx
|
|
@@ -47904,13 +47913,13 @@ var VoiceRecordingPreview = ({
|
|
|
47904
47913
|
const { audioRef, isPlaying, secondsElapsed, togglePlay } = useAudioController({
|
|
47905
47914
|
mimeType: attachment.mime_type
|
|
47906
47915
|
});
|
|
47907
|
-
return /* @__PURE__ */
|
|
47916
|
+
return /* @__PURE__ */ import_react197.default.createElement(
|
|
47908
47917
|
"div",
|
|
47909
47918
|
{
|
|
47910
47919
|
className: "str-chat__attachment-preview-voice-recording",
|
|
47911
47920
|
"data-testid": "attachment-preview-voice-recording"
|
|
47912
47921
|
},
|
|
47913
|
-
/* @__PURE__ */
|
|
47922
|
+
/* @__PURE__ */ import_react197.default.createElement("audio", { ref: audioRef }, /* @__PURE__ */ import_react197.default.createElement(
|
|
47914
47923
|
"source",
|
|
47915
47924
|
{
|
|
47916
47925
|
"data-testid": "audio-source",
|
|
@@ -47918,8 +47927,8 @@ var VoiceRecordingPreview = ({
|
|
|
47918
47927
|
type: attachment.mime_type
|
|
47919
47928
|
}
|
|
47920
47929
|
)),
|
|
47921
|
-
/* @__PURE__ */
|
|
47922
|
-
/* @__PURE__ */
|
|
47930
|
+
/* @__PURE__ */ import_react197.default.createElement(PlayButton, { isPlaying, onClick: togglePlay }),
|
|
47931
|
+
/* @__PURE__ */ import_react197.default.createElement(
|
|
47923
47932
|
"button",
|
|
47924
47933
|
{
|
|
47925
47934
|
className: "str-chat__attachment-preview-delete",
|
|
@@ -47927,38 +47936,38 @@ var VoiceRecordingPreview = ({
|
|
|
47927
47936
|
disabled: attachment.localMetadata?.uploadState === "uploading",
|
|
47928
47937
|
onClick: () => attachment.localMetadata?.id && removeAttachments([attachment.localMetadata.id])
|
|
47929
47938
|
},
|
|
47930
|
-
/* @__PURE__ */
|
|
47939
|
+
/* @__PURE__ */ import_react197.default.createElement(CloseIcon, null)
|
|
47931
47940
|
),
|
|
47932
|
-
attachment.localMetadata?.uploadState === "failed" && !!handleRetry && /* @__PURE__ */
|
|
47941
|
+
attachment.localMetadata?.uploadState === "failed" && !!handleRetry && /* @__PURE__ */ import_react197.default.createElement(
|
|
47933
47942
|
"button",
|
|
47934
47943
|
{
|
|
47935
47944
|
className: "str-chat__attachment-preview-error str-chat__attachment-preview-error-file",
|
|
47936
47945
|
"data-testid": "file-preview-item-retry-button",
|
|
47937
47946
|
onClick: () => handleRetry(attachment)
|
|
47938
47947
|
},
|
|
47939
|
-
/* @__PURE__ */
|
|
47948
|
+
/* @__PURE__ */ import_react197.default.createElement(RetryIcon, null)
|
|
47940
47949
|
),
|
|
47941
|
-
/* @__PURE__ */
|
|
47942
|
-
/* @__PURE__ */
|
|
47950
|
+
/* @__PURE__ */ import_react197.default.createElement("div", { className: "str-chat__attachment-preview-metadata" }, /* @__PURE__ */ import_react197.default.createElement("div", { className: "str-chat__attachment-preview-file-name", title: attachment.title }, attachment.title), typeof attachment.duration !== "undefined" && /* @__PURE__ */ import_react197.default.createElement(RecordingTimer, { durationSeconds: secondsElapsed || attachment.duration }), attachment.localMetadata?.uploadState === "uploading" && /* @__PURE__ */ import_react197.default.createElement(LoadingIndicatorIcon, { size: 17 })),
|
|
47951
|
+
/* @__PURE__ */ import_react197.default.createElement("div", { className: "str-chat__attachment-preview-file-icon" }, /* @__PURE__ */ import_react197.default.createElement(FileIcon, { filename: attachment.title, mimeType: attachment.mime_type }))
|
|
47943
47952
|
);
|
|
47944
47953
|
};
|
|
47945
47954
|
|
|
47946
47955
|
// src/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.tsx
|
|
47947
|
-
var
|
|
47956
|
+
var import_react198 = __toESM(require("react"));
|
|
47948
47957
|
var FileAttachmentPreview = ({
|
|
47949
47958
|
attachment,
|
|
47950
47959
|
handleRetry,
|
|
47951
47960
|
removeAttachments
|
|
47952
47961
|
}) => {
|
|
47953
47962
|
const { t: t2 } = useTranslationContext("FilePreview");
|
|
47954
|
-
return /* @__PURE__ */
|
|
47963
|
+
return /* @__PURE__ */ import_react198.default.createElement(
|
|
47955
47964
|
"div",
|
|
47956
47965
|
{
|
|
47957
47966
|
className: "str-chat__attachment-preview-file",
|
|
47958
47967
|
"data-testid": "attachment-preview-file"
|
|
47959
47968
|
},
|
|
47960
|
-
/* @__PURE__ */
|
|
47961
|
-
/* @__PURE__ */
|
|
47969
|
+
/* @__PURE__ */ import_react198.default.createElement("div", { className: "str-chat__attachment-preview-file-icon" }, /* @__PURE__ */ import_react198.default.createElement(FileIcon, { filename: attachment.title, mimeType: attachment.mime_type })),
|
|
47970
|
+
/* @__PURE__ */ import_react198.default.createElement(
|
|
47962
47971
|
"button",
|
|
47963
47972
|
{
|
|
47964
47973
|
"aria-label": t2("aria/Remove attachment"),
|
|
@@ -47967,18 +47976,18 @@ var FileAttachmentPreview = ({
|
|
|
47967
47976
|
disabled: attachment.localMetadata?.uploadState === "uploading",
|
|
47968
47977
|
onClick: () => attachment.localMetadata?.id && removeAttachments([attachment.localMetadata?.id])
|
|
47969
47978
|
},
|
|
47970
|
-
/* @__PURE__ */
|
|
47979
|
+
/* @__PURE__ */ import_react198.default.createElement(CloseIcon, null)
|
|
47971
47980
|
),
|
|
47972
|
-
attachment.localMetadata?.uploadState === "failed" && !!handleRetry && /* @__PURE__ */
|
|
47981
|
+
attachment.localMetadata?.uploadState === "failed" && !!handleRetry && /* @__PURE__ */ import_react198.default.createElement(
|
|
47973
47982
|
"button",
|
|
47974
47983
|
{
|
|
47975
47984
|
className: "str-chat__attachment-preview-error str-chat__attachment-preview-error-file",
|
|
47976
47985
|
"data-testid": "file-preview-item-retry-button",
|
|
47977
47986
|
onClick: () => handleRetry(attachment)
|
|
47978
47987
|
},
|
|
47979
|
-
/* @__PURE__ */
|
|
47988
|
+
/* @__PURE__ */ import_react198.default.createElement(RetryIcon, null)
|
|
47980
47989
|
),
|
|
47981
|
-
/* @__PURE__ */
|
|
47990
|
+
/* @__PURE__ */ import_react198.default.createElement("div", { className: "str-chat__attachment-preview-file-end" }, /* @__PURE__ */ import_react198.default.createElement("div", { className: "str-chat__attachment-preview-file-name", title: attachment.title }, attachment.title), attachment.localMetadata?.uploadState === "finished" && !!attachment.asset_url && /* @__PURE__ */ import_react198.default.createElement(
|
|
47982
47991
|
"a",
|
|
47983
47992
|
{
|
|
47984
47993
|
"aria-label": t2("aria/Download attachment"),
|
|
@@ -47989,14 +47998,14 @@ var FileAttachmentPreview = ({
|
|
|
47989
47998
|
target: "_blank",
|
|
47990
47999
|
title: t2("Download attachment {{ name }}", { name: attachment.title })
|
|
47991
48000
|
},
|
|
47992
|
-
/* @__PURE__ */
|
|
47993
|
-
), attachment.localMetadata?.uploadState === "uploading" && /* @__PURE__ */
|
|
48001
|
+
/* @__PURE__ */ import_react198.default.createElement(DownloadIcon2, null)
|
|
48002
|
+
), attachment.localMetadata?.uploadState === "uploading" && /* @__PURE__ */ import_react198.default.createElement(LoadingIndicatorIcon, { size: 17 }))
|
|
47994
48003
|
);
|
|
47995
48004
|
};
|
|
47996
48005
|
|
|
47997
48006
|
// src/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.tsx
|
|
47998
48007
|
var import_clsx53 = __toESM(require("clsx"));
|
|
47999
|
-
var
|
|
48008
|
+
var import_react199 = __toESM(require("react"));
|
|
48000
48009
|
var ImageAttachmentPreview = ({
|
|
48001
48010
|
attachment,
|
|
48002
48011
|
handleRetry,
|
|
@@ -48004,11 +48013,11 @@ var ImageAttachmentPreview = ({
|
|
|
48004
48013
|
}) => {
|
|
48005
48014
|
const { t: t2 } = useTranslationContext("ImagePreviewItem");
|
|
48006
48015
|
const { BaseImage: BaseImage3 = BaseImage } = useComponentContext("ImagePreview");
|
|
48007
|
-
const [previewError, setPreviewError] = (0,
|
|
48016
|
+
const [previewError, setPreviewError] = (0, import_react199.useState)(false);
|
|
48008
48017
|
const { id, uploadState } = attachment.localMetadata ?? {};
|
|
48009
|
-
const handleLoadError = (0,
|
|
48018
|
+
const handleLoadError = (0, import_react199.useCallback)(() => setPreviewError(true), []);
|
|
48010
48019
|
const assetUrl = attachment.image_url || attachment.localMetadata.previewUri;
|
|
48011
|
-
return /* @__PURE__ */
|
|
48020
|
+
return /* @__PURE__ */ import_react199.default.createElement(
|
|
48012
48021
|
"div",
|
|
48013
48022
|
{
|
|
48014
48023
|
className: (0, import_clsx53.default)("str-chat__attachment-preview-image", {
|
|
@@ -48016,7 +48025,7 @@ var ImageAttachmentPreview = ({
|
|
|
48016
48025
|
}),
|
|
48017
48026
|
"data-testid": "attachment-preview-image"
|
|
48018
48027
|
},
|
|
48019
|
-
/* @__PURE__ */
|
|
48028
|
+
/* @__PURE__ */ import_react199.default.createElement(
|
|
48020
48029
|
"button",
|
|
48021
48030
|
{
|
|
48022
48031
|
"aria-label": t2("aria/Remove attachment"),
|
|
@@ -48025,19 +48034,19 @@ var ImageAttachmentPreview = ({
|
|
|
48025
48034
|
disabled: uploadState === "uploading",
|
|
48026
48035
|
onClick: () => id && removeAttachments([id])
|
|
48027
48036
|
},
|
|
48028
|
-
/* @__PURE__ */
|
|
48037
|
+
/* @__PURE__ */ import_react199.default.createElement(CloseIcon, null)
|
|
48029
48038
|
),
|
|
48030
|
-
uploadState === "failed" && /* @__PURE__ */
|
|
48039
|
+
uploadState === "failed" && /* @__PURE__ */ import_react199.default.createElement(
|
|
48031
48040
|
"button",
|
|
48032
48041
|
{
|
|
48033
48042
|
className: "str-chat__attachment-preview-error str-chat__attachment-preview-error-image",
|
|
48034
48043
|
"data-testid": "image-preview-item-retry-button",
|
|
48035
48044
|
onClick: () => handleRetry(attachment)
|
|
48036
48045
|
},
|
|
48037
|
-
/* @__PURE__ */
|
|
48046
|
+
/* @__PURE__ */ import_react199.default.createElement(RetryIcon, null)
|
|
48038
48047
|
),
|
|
48039
|
-
uploadState === "uploading" && /* @__PURE__ */
|
|
48040
|
-
assetUrl && /* @__PURE__ */
|
|
48048
|
+
uploadState === "uploading" && /* @__PURE__ */ import_react199.default.createElement("div", { className: "str-chat__attachment-preview-image-loading" }, /* @__PURE__ */ import_react199.default.createElement(LoadingIndicatorIcon, { size: 17 })),
|
|
48049
|
+
assetUrl && /* @__PURE__ */ import_react199.default.createElement(
|
|
48041
48050
|
BaseImage3,
|
|
48042
48051
|
{
|
|
48043
48052
|
alt: attachment.fallback,
|
|
@@ -48060,7 +48069,7 @@ var AttachmentPreviewList = ({
|
|
|
48060
48069
|
VoiceRecordingPreview: VoiceRecordingPreview2 = VoiceRecordingPreview
|
|
48061
48070
|
}) => {
|
|
48062
48071
|
const { attachments, removeAttachments, uploadAttachment } = useMessageInputContext("AttachmentPreviewList");
|
|
48063
|
-
return /* @__PURE__ */
|
|
48072
|
+
return /* @__PURE__ */ import_react200.default.createElement("div", { className: "str-chat__attachment-preview-list" }, /* @__PURE__ */ import_react200.default.createElement(
|
|
48064
48073
|
"div",
|
|
48065
48074
|
{
|
|
48066
48075
|
className: "str-chat__attachment-list-scroll-container",
|
|
@@ -48069,7 +48078,7 @@ var AttachmentPreviewList = ({
|
|
|
48069
48078
|
attachments.map((attachment) => {
|
|
48070
48079
|
if (isScrapedContent(attachment)) return null;
|
|
48071
48080
|
if (isLocalVoiceRecordingAttachment(attachment)) {
|
|
48072
|
-
return /* @__PURE__ */
|
|
48081
|
+
return /* @__PURE__ */ import_react200.default.createElement(
|
|
48073
48082
|
VoiceRecordingPreview2,
|
|
48074
48083
|
{
|
|
48075
48084
|
attachment,
|
|
@@ -48079,7 +48088,7 @@ var AttachmentPreviewList = ({
|
|
|
48079
48088
|
}
|
|
48080
48089
|
);
|
|
48081
48090
|
} else if (isLocalAudioAttachment(attachment)) {
|
|
48082
|
-
return /* @__PURE__ */
|
|
48091
|
+
return /* @__PURE__ */ import_react200.default.createElement(
|
|
48083
48092
|
AudioAttachmentPreview,
|
|
48084
48093
|
{
|
|
48085
48094
|
attachment,
|
|
@@ -48089,7 +48098,7 @@ var AttachmentPreviewList = ({
|
|
|
48089
48098
|
}
|
|
48090
48099
|
);
|
|
48091
48100
|
} else if (isLocalMediaAttachment(attachment)) {
|
|
48092
|
-
return /* @__PURE__ */
|
|
48101
|
+
return /* @__PURE__ */ import_react200.default.createElement(
|
|
48093
48102
|
VideoAttachmentPreview,
|
|
48094
48103
|
{
|
|
48095
48104
|
attachment,
|
|
@@ -48099,7 +48108,7 @@ var AttachmentPreviewList = ({
|
|
|
48099
48108
|
}
|
|
48100
48109
|
);
|
|
48101
48110
|
} else if (isLocalImageAttachment(attachment)) {
|
|
48102
|
-
return /* @__PURE__ */
|
|
48111
|
+
return /* @__PURE__ */ import_react200.default.createElement(
|
|
48103
48112
|
ImageAttachmentPreview2,
|
|
48104
48113
|
{
|
|
48105
48114
|
attachment,
|
|
@@ -48109,7 +48118,7 @@ var AttachmentPreviewList = ({
|
|
|
48109
48118
|
}
|
|
48110
48119
|
);
|
|
48111
48120
|
} else if (isLocalFileAttachment(attachment)) {
|
|
48112
|
-
return /* @__PURE__ */
|
|
48121
|
+
return /* @__PURE__ */ import_react200.default.createElement(
|
|
48113
48122
|
FileAttachmentPreview2,
|
|
48114
48123
|
{
|
|
48115
48124
|
attachment,
|
|
@@ -48119,7 +48128,7 @@ var AttachmentPreviewList = ({
|
|
|
48119
48128
|
}
|
|
48120
48129
|
);
|
|
48121
48130
|
} else if (isLocalAttachment(attachment)) {
|
|
48122
|
-
return /* @__PURE__ */
|
|
48131
|
+
return /* @__PURE__ */ import_react200.default.createElement(
|
|
48123
48132
|
UnsupportedAttachmentPreview2,
|
|
48124
48133
|
{
|
|
48125
48134
|
attachment,
|
|
@@ -48135,13 +48144,13 @@ var AttachmentPreviewList = ({
|
|
|
48135
48144
|
};
|
|
48136
48145
|
|
|
48137
48146
|
// src/components/MessageInput/CooldownTimer.tsx
|
|
48138
|
-
var
|
|
48147
|
+
var import_react202 = __toESM(require("react"));
|
|
48139
48148
|
|
|
48140
48149
|
// src/components/MessageInput/hooks/useTimer.ts
|
|
48141
|
-
var
|
|
48150
|
+
var import_react201 = require("react");
|
|
48142
48151
|
var useTimer = ({ startFrom }) => {
|
|
48143
|
-
const [secondsLeft, setSecondsLeft] = (0,
|
|
48144
|
-
(0,
|
|
48152
|
+
const [secondsLeft, setSecondsLeft] = (0, import_react201.useState)();
|
|
48153
|
+
(0, import_react201.useEffect)(() => {
|
|
48145
48154
|
let countdownTimeout;
|
|
48146
48155
|
if (typeof secondsLeft === "number" && secondsLeft > 0) {
|
|
48147
48156
|
countdownTimeout = setTimeout(() => {
|
|
@@ -48152,7 +48161,7 @@ var useTimer = ({ startFrom }) => {
|
|
|
48152
48161
|
clearTimeout(countdownTimeout);
|
|
48153
48162
|
};
|
|
48154
48163
|
}, [secondsLeft]);
|
|
48155
|
-
(0,
|
|
48164
|
+
(0, import_react201.useEffect)(() => {
|
|
48156
48165
|
setSecondsLeft(startFrom ?? 0);
|
|
48157
48166
|
}, [startFrom]);
|
|
48158
48167
|
return secondsLeft;
|
|
@@ -48161,11 +48170,11 @@ var useTimer = ({ startFrom }) => {
|
|
|
48161
48170
|
// src/components/MessageInput/CooldownTimer.tsx
|
|
48162
48171
|
var CooldownTimer = ({ cooldownInterval }) => {
|
|
48163
48172
|
const secondsLeft = useTimer({ startFrom: cooldownInterval });
|
|
48164
|
-
return /* @__PURE__ */
|
|
48173
|
+
return /* @__PURE__ */ import_react202.default.createElement("div", { className: "str-chat__message-input-cooldown", "data-testid": "cooldown-timer" }, secondsLeft);
|
|
48165
48174
|
};
|
|
48166
48175
|
|
|
48167
48176
|
// src/components/MessageInput/DefaultTriggerProvider.tsx
|
|
48168
|
-
var
|
|
48177
|
+
var import_react205 = __toESM(require("react"));
|
|
48169
48178
|
|
|
48170
48179
|
// src/components/MessageInput/hooks/useCommandTrigger.ts
|
|
48171
48180
|
var useCommandTrigger = () => {
|
|
@@ -48235,7 +48244,7 @@ var useCommandTrigger = () => {
|
|
|
48235
48244
|
};
|
|
48236
48245
|
|
|
48237
48246
|
// src/components/EmoticonItem/EmoticonItem.tsx
|
|
48238
|
-
var
|
|
48247
|
+
var import_react203 = __toESM(require("react"));
|
|
48239
48248
|
var UnMemoizedEmoticonItem = (props) => {
|
|
48240
48249
|
const { entity } = props;
|
|
48241
48250
|
const hasEntity = Object.keys(entity).length;
|
|
@@ -48243,12 +48252,12 @@ var UnMemoizedEmoticonItem = (props) => {
|
|
|
48243
48252
|
const renderName = () => {
|
|
48244
48253
|
if (!hasEntity) return null;
|
|
48245
48254
|
return hasEntity && itemParts.parts.map(
|
|
48246
|
-
(part, i) => part.toLowerCase() === itemParts.match.toLowerCase() ? /* @__PURE__ */
|
|
48255
|
+
(part, i) => part.toLowerCase() === itemParts.match.toLowerCase() ? /* @__PURE__ */ import_react203.default.createElement("span", { className: "str-chat__emoji-item--highlight", key: `part-${i}` }, part) : /* @__PURE__ */ import_react203.default.createElement("span", { className: "str-chat__emoji-item--part", key: `part-${i}` }, part)
|
|
48247
48256
|
);
|
|
48248
48257
|
};
|
|
48249
|
-
return /* @__PURE__ */
|
|
48258
|
+
return /* @__PURE__ */ import_react203.default.createElement("div", { className: "str-chat__emoji-item" }, /* @__PURE__ */ import_react203.default.createElement("span", { className: "str-chat__emoji-item--entity" }, entity.native), /* @__PURE__ */ import_react203.default.createElement("span", { className: "str-chat__emoji-item--name" }, renderName()));
|
|
48250
48259
|
};
|
|
48251
|
-
var EmoticonItem =
|
|
48260
|
+
var EmoticonItem = import_react203.default.memo(
|
|
48252
48261
|
UnMemoizedEmoticonItem
|
|
48253
48262
|
);
|
|
48254
48263
|
|
|
@@ -48278,7 +48287,7 @@ var useEmojiTrigger = (emojiSearchIndex) => ({
|
|
|
48278
48287
|
});
|
|
48279
48288
|
|
|
48280
48289
|
// src/components/MessageInput/hooks/useUserTrigger.ts
|
|
48281
|
-
var
|
|
48290
|
+
var import_react204 = require("react");
|
|
48282
48291
|
var import_lodash20 = __toESM(require("lodash.throttle"));
|
|
48283
48292
|
var useUserTrigger = (params) => {
|
|
48284
48293
|
const {
|
|
@@ -48288,12 +48297,12 @@ var useUserTrigger = (params) => {
|
|
|
48288
48297
|
onSelectUser,
|
|
48289
48298
|
useMentionsTransliteration
|
|
48290
48299
|
} = params;
|
|
48291
|
-
const [searching, setSearching] = (0,
|
|
48300
|
+
const [searching, setSearching] = (0, import_react204.useState)(false);
|
|
48292
48301
|
const { client, mutes } = useChatContext("useUserTrigger");
|
|
48293
48302
|
const { channel } = useChannelStateContext("useUserTrigger");
|
|
48294
48303
|
const { members } = channel.state;
|
|
48295
48304
|
const { watchers } = channel.state;
|
|
48296
|
-
const getMembersAndWatchers = (0,
|
|
48305
|
+
const getMembersAndWatchers = (0, import_react204.useCallback)(() => {
|
|
48297
48306
|
const memberUsers = members ? Object.values(members).map(({ user }) => user) : [];
|
|
48298
48307
|
const watcherUsers = watchers ? Object.values(watchers) : [];
|
|
48299
48308
|
const users = [...memberUsers, ...watcherUsers];
|
|
@@ -48305,7 +48314,7 @@ var useUserTrigger = (params) => {
|
|
|
48305
48314
|
});
|
|
48306
48315
|
return Object.values(uniqueUsers);
|
|
48307
48316
|
}, [members, watchers]);
|
|
48308
|
-
const queryMembersThrottled = (0,
|
|
48317
|
+
const queryMembersThrottled = (0, import_react204.useCallback)(
|
|
48309
48318
|
(0, import_lodash20.default)(
|
|
48310
48319
|
async (query, onReady) => {
|
|
48311
48320
|
try {
|
|
@@ -48425,21 +48434,21 @@ var DefaultTriggerProvider = ({
|
|
|
48425
48434
|
...currentValue,
|
|
48426
48435
|
autocompleteTriggers: defaultAutocompleteTriggers
|
|
48427
48436
|
};
|
|
48428
|
-
return /* @__PURE__ */
|
|
48437
|
+
return /* @__PURE__ */ import_react205.default.createElement(MessageInputContextProvider, { value: newValue }, children);
|
|
48429
48438
|
};
|
|
48430
48439
|
|
|
48431
48440
|
// src/components/MessageInput/EditMessageForm.tsx
|
|
48432
|
-
var
|
|
48441
|
+
var import_react219 = __toESM(require("react"));
|
|
48433
48442
|
|
|
48434
48443
|
// src/components/MessageInput/MessageInputFlat.tsx
|
|
48435
|
-
var
|
|
48444
|
+
var import_react218 = __toESM(require("react"));
|
|
48436
48445
|
|
|
48437
48446
|
// src/components/MessageInput/SendButton.tsx
|
|
48438
|
-
var
|
|
48447
|
+
var import_react206 = __toESM(require("react"));
|
|
48439
48448
|
var SendButton = ({
|
|
48440
48449
|
sendMessage,
|
|
48441
48450
|
...rest
|
|
48442
|
-
}) => /* @__PURE__ */
|
|
48451
|
+
}) => /* @__PURE__ */ import_react206.default.createElement(
|
|
48443
48452
|
"button",
|
|
48444
48453
|
{
|
|
48445
48454
|
"aria-label": "Send",
|
|
@@ -48449,17 +48458,17 @@ var SendButton = ({
|
|
|
48449
48458
|
type: "button",
|
|
48450
48459
|
...rest
|
|
48451
48460
|
},
|
|
48452
|
-
/* @__PURE__ */
|
|
48461
|
+
/* @__PURE__ */ import_react206.default.createElement(SendIcon, null)
|
|
48453
48462
|
);
|
|
48454
48463
|
|
|
48455
48464
|
// src/components/MessageInput/StopAIGenerationButton.tsx
|
|
48456
|
-
var
|
|
48465
|
+
var import_react207 = __toESM(require("react"));
|
|
48457
48466
|
var StopAIGenerationButton = ({
|
|
48458
48467
|
onClick,
|
|
48459
48468
|
...restProps
|
|
48460
48469
|
}) => {
|
|
48461
48470
|
const { t: t2 } = useTranslationContext();
|
|
48462
|
-
return /* @__PURE__ */
|
|
48471
|
+
return /* @__PURE__ */ import_react207.default.createElement(
|
|
48463
48472
|
"button",
|
|
48464
48473
|
{
|
|
48465
48474
|
"aria-label": t2("aria/Stop AI Generation"),
|
|
@@ -48472,21 +48481,21 @@ var StopAIGenerationButton = ({
|
|
|
48472
48481
|
};
|
|
48473
48482
|
|
|
48474
48483
|
// src/components/MessageInput/QuotedMessagePreview.tsx
|
|
48475
|
-
var
|
|
48484
|
+
var import_react212 = __toESM(require("react"));
|
|
48476
48485
|
|
|
48477
48486
|
// src/components/Message/FixedHeightMessage.tsx
|
|
48478
|
-
var
|
|
48487
|
+
var import_react210 = __toESM(require("react"));
|
|
48479
48488
|
|
|
48480
48489
|
// src/components/MML/MML.tsx
|
|
48481
|
-
var
|
|
48482
|
-
var MMLReact =
|
|
48490
|
+
var import_react209 = __toESM(require("react"));
|
|
48491
|
+
var MMLReact = import_react209.default.lazy(async () => {
|
|
48483
48492
|
const mml = await Promise.resolve().then(() => (init_mml_react_esm(), mml_react_esm_exports));
|
|
48484
48493
|
return { default: mml.MML };
|
|
48485
48494
|
});
|
|
48486
48495
|
var MML3 = (props) => {
|
|
48487
48496
|
const { actionHandler, align = "right", source } = props;
|
|
48488
48497
|
const { theme } = useChatContext("MML");
|
|
48489
|
-
return /* @__PURE__ */
|
|
48498
|
+
return /* @__PURE__ */ import_react209.default.createElement(import_react209.Suspense, { fallback: null }, /* @__PURE__ */ import_react209.default.createElement(
|
|
48490
48499
|
MMLReact,
|
|
48491
48500
|
{
|
|
48492
48501
|
className: `mml-align-${align}`,
|
|
@@ -48524,24 +48533,24 @@ var UnMemoizedFixedHeightMessage = (props) => {
|
|
|
48524
48533
|
const handleDelete2 = useDeleteHandler(message);
|
|
48525
48534
|
const role = useUserRole(message);
|
|
48526
48535
|
const messageTextToRender = message?.i18n?.[`${userLanguage}_text`] || message?.text;
|
|
48527
|
-
const renderedText = (0,
|
|
48536
|
+
const renderedText = (0, import_react210.useMemo)(
|
|
48528
48537
|
() => renderText(messageTextToRender, message.mentioned_users),
|
|
48529
48538
|
[message.mentioned_users, messageTextToRender]
|
|
48530
48539
|
);
|
|
48531
48540
|
const userId = message.user?.id || "";
|
|
48532
|
-
const userColor = (0,
|
|
48533
|
-
const messageActionsHandler = (0,
|
|
48541
|
+
const userColor = (0, import_react210.useMemo)(() => getUserColor(theme, userId), [userId, theme]);
|
|
48542
|
+
const messageActionsHandler = (0, import_react210.useCallback)(
|
|
48534
48543
|
() => getMessageActions(["delete"], { canDelete: role.canDelete }),
|
|
48535
48544
|
[role]
|
|
48536
48545
|
);
|
|
48537
48546
|
const images = message?.attachments?.filter(({ type }) => type === "image");
|
|
48538
|
-
return /* @__PURE__ */
|
|
48547
|
+
return /* @__PURE__ */ import_react210.default.createElement(
|
|
48539
48548
|
"div",
|
|
48540
48549
|
{
|
|
48541
48550
|
className: `str-chat__virtual-message__wrapper ${role.isMyMessage ? "str-chat__virtual-message__wrapper--me" : ""} ${groupedByUser ? "str-chat__virtual-message__wrapper--group" : ""}`,
|
|
48542
48551
|
key: message.id
|
|
48543
48552
|
},
|
|
48544
|
-
message.user && /* @__PURE__ */
|
|
48553
|
+
message.user && /* @__PURE__ */ import_react210.default.createElement(
|
|
48545
48554
|
Avatar,
|
|
48546
48555
|
{
|
|
48547
48556
|
image: message.user.image,
|
|
@@ -48549,7 +48558,7 @@ var UnMemoizedFixedHeightMessage = (props) => {
|
|
|
48549
48558
|
user: message.user
|
|
48550
48559
|
}
|
|
48551
48560
|
),
|
|
48552
|
-
/* @__PURE__ */
|
|
48561
|
+
/* @__PURE__ */ import_react210.default.createElement("div", { className: "str-chat__virtual-message__content" }, /* @__PURE__ */ import_react210.default.createElement("div", { className: "str-chat__virtual-message__meta" }, /* @__PURE__ */ import_react210.default.createElement("div", { className: "str-chat__virtual-message__author", style: { color: userColor } }, /* @__PURE__ */ import_react210.default.createElement("strong", null, message.user?.name || "unknown"))), message.deleted_at || message.type === "deleted" ? /* @__PURE__ */ import_react210.default.createElement(MessageDeleted2, { message }) : /* @__PURE__ */ import_react210.default.createElement(import_react210.default.Fragment, null, images && /* @__PURE__ */ import_react210.default.createElement(Gallery, { images }), /* @__PURE__ */ import_react210.default.createElement("div", { className: "str-chat__virtual-message__text", "data-testid": "msg-text" }, renderedText, message.mml && /* @__PURE__ */ import_react210.default.createElement(MML3, { actionHandler: handleAction, align: "left", source: message.mml }), /* @__PURE__ */ import_react210.default.createElement("div", { className: "str-chat__virtual-message__data" }, /* @__PURE__ */ import_react210.default.createElement(
|
|
48553
48562
|
MessageActions,
|
|
48554
48563
|
{
|
|
48555
48564
|
customWrapperClass: "str-chat__virtual-message__actions",
|
|
@@ -48558,7 +48567,7 @@ var UnMemoizedFixedHeightMessage = (props) => {
|
|
|
48558
48567
|
message,
|
|
48559
48568
|
mine: () => role.isMyMessage
|
|
48560
48569
|
}
|
|
48561
|
-
), /* @__PURE__ */
|
|
48570
|
+
), /* @__PURE__ */ import_react210.default.createElement("span", { className: "str-chat__virtual-message__date" }, /* @__PURE__ */ import_react210.default.createElement(
|
|
48562
48571
|
MessageTimestamp,
|
|
48563
48572
|
{
|
|
48564
48573
|
customClass: "str-chat__message-simple-timestamp",
|
|
@@ -48567,12 +48576,12 @@ var UnMemoizedFixedHeightMessage = (props) => {
|
|
|
48567
48576
|
))))))
|
|
48568
48577
|
);
|
|
48569
48578
|
};
|
|
48570
|
-
var FixedHeightMessage =
|
|
48579
|
+
var FixedHeightMessage = import_react210.default.memo(
|
|
48571
48580
|
UnMemoizedFixedHeightMessage
|
|
48572
48581
|
);
|
|
48573
48582
|
|
|
48574
48583
|
// src/components/Message/StreamedMessageText.tsx
|
|
48575
|
-
var
|
|
48584
|
+
var import_react211 = __toESM(require("react"));
|
|
48576
48585
|
var StreamedMessageText = (props) => {
|
|
48577
48586
|
const {
|
|
48578
48587
|
message: messageFromProps,
|
|
@@ -48588,7 +48597,7 @@ var StreamedMessageText = (props) => {
|
|
|
48588
48597
|
streamingLetterIntervalMs,
|
|
48589
48598
|
text: text8
|
|
48590
48599
|
});
|
|
48591
|
-
return /* @__PURE__ */
|
|
48600
|
+
return /* @__PURE__ */ import_react211.default.createElement(
|
|
48592
48601
|
MessageText,
|
|
48593
48602
|
{
|
|
48594
48603
|
message: { ...message, text: streamedMessageText },
|
|
@@ -48601,14 +48610,14 @@ var StreamedMessageText = (props) => {
|
|
|
48601
48610
|
var QuotedMessagePreviewHeader = () => {
|
|
48602
48611
|
const { setQuotedMessage } = useChannelActionContext("QuotedMessagePreview");
|
|
48603
48612
|
const { t: t2 } = useTranslationContext("QuotedMessagePreview");
|
|
48604
|
-
return /* @__PURE__ */
|
|
48613
|
+
return /* @__PURE__ */ import_react212.default.createElement("div", { className: "str-chat__quoted-message-preview-header" }, /* @__PURE__ */ import_react212.default.createElement("div", { className: "str-chat__quoted-message-reply-to-message" }, t2("Reply to Message")), /* @__PURE__ */ import_react212.default.createElement(
|
|
48605
48614
|
"button",
|
|
48606
48615
|
{
|
|
48607
48616
|
"aria-label": t2("aria/Cancel Reply"),
|
|
48608
48617
|
className: "str-chat__quoted-message-remove",
|
|
48609
48618
|
onClick: () => setQuotedMessage(void 0)
|
|
48610
48619
|
},
|
|
48611
|
-
/* @__PURE__ */
|
|
48620
|
+
/* @__PURE__ */ import_react212.default.createElement(CloseIcon, null)
|
|
48612
48621
|
));
|
|
48613
48622
|
};
|
|
48614
48623
|
var QuotedMessagePreview = ({
|
|
@@ -48619,23 +48628,23 @@ var QuotedMessagePreview = ({
|
|
|
48619
48628
|
const { Attachment: Attachment2 = Attachment, Avatar: Avatar2 = Avatar } = useComponentContext("QuotedMessagePreview");
|
|
48620
48629
|
const { userLanguage } = useTranslationContext("QuotedMessagePreview");
|
|
48621
48630
|
const quotedMessageText = quotedMessage.i18n?.[`${userLanguage}_text`] || quotedMessage.text;
|
|
48622
|
-
const renderedText = (0,
|
|
48631
|
+
const renderedText = (0, import_react212.useMemo)(
|
|
48623
48632
|
() => renderText2(quotedMessageText, quotedMessage.mentioned_users),
|
|
48624
48633
|
[quotedMessage.mentioned_users, quotedMessageText, renderText2]
|
|
48625
48634
|
);
|
|
48626
|
-
const quotedMessageAttachment = (0,
|
|
48635
|
+
const quotedMessageAttachment = (0, import_react212.useMemo)(() => {
|
|
48627
48636
|
const [attachment] = quotedMessage.attachments ?? [];
|
|
48628
48637
|
return attachment ? [attachment] : [];
|
|
48629
48638
|
}, [quotedMessage.attachments]);
|
|
48630
48639
|
if (!quotedMessageText && !quotedMessageAttachment) return null;
|
|
48631
48640
|
const poll = quotedMessage.poll_id && client.polls.fromState(quotedMessage.poll_id);
|
|
48632
|
-
return /* @__PURE__ */
|
|
48641
|
+
return /* @__PURE__ */ import_react212.default.createElement(
|
|
48633
48642
|
"div",
|
|
48634
48643
|
{
|
|
48635
48644
|
className: "str-chat__quoted-message-preview",
|
|
48636
48645
|
"data-testid": "quoted-message-preview"
|
|
48637
48646
|
},
|
|
48638
|
-
quotedMessage.user && /* @__PURE__ */
|
|
48647
|
+
quotedMessage.user && /* @__PURE__ */ import_react212.default.createElement(
|
|
48639
48648
|
Avatar2,
|
|
48640
48649
|
{
|
|
48641
48650
|
className: "str-chat__avatar--quoted-message-sender",
|
|
@@ -48644,7 +48653,7 @@ var QuotedMessagePreview = ({
|
|
|
48644
48653
|
user: quotedMessage.user
|
|
48645
48654
|
}
|
|
48646
48655
|
),
|
|
48647
|
-
/* @__PURE__ */
|
|
48656
|
+
/* @__PURE__ */ import_react212.default.createElement("div", { className: "str-chat__quoted-message-bubble" }, poll ? /* @__PURE__ */ import_react212.default.createElement(Poll, { isQuoted: true, poll }) : /* @__PURE__ */ import_react212.default.createElement(import_react212.default.Fragment, null, !!quotedMessageAttachment.length && /* @__PURE__ */ import_react212.default.createElement(Attachment2, { attachments: quotedMessageAttachment, isQuoted: true }), /* @__PURE__ */ import_react212.default.createElement(
|
|
48648
48657
|
"div",
|
|
48649
48658
|
{
|
|
48650
48659
|
className: "str-chat__quoted-message-text",
|
|
@@ -48657,20 +48666,20 @@ var QuotedMessagePreview = ({
|
|
|
48657
48666
|
|
|
48658
48667
|
// src/components/MessageInput/LinkPreviewList.tsx
|
|
48659
48668
|
var import_clsx54 = __toESM(require("clsx"));
|
|
48660
|
-
var
|
|
48669
|
+
var import_react213 = __toESM(require("react"));
|
|
48661
48670
|
var LinkPreviewList = ({ linkPreviews }) => {
|
|
48662
48671
|
const { quotedMessage } = useChannelStateContext();
|
|
48663
48672
|
const showLinkPreviews = linkPreviews.length > 0 && !quotedMessage;
|
|
48664
48673
|
if (!showLinkPreviews) return null;
|
|
48665
|
-
return /* @__PURE__ */
|
|
48666
|
-
(linkPreview) => linkPreview.state === "loaded" /* LOADED */ ? /* @__PURE__ */
|
|
48674
|
+
return /* @__PURE__ */ import_react213.default.createElement("div", { className: "str-chat__link-preview-list" }, Array.from(linkPreviews.values()).map(
|
|
48675
|
+
(linkPreview) => linkPreview.state === "loaded" /* LOADED */ ? /* @__PURE__ */ import_react213.default.createElement(LinkPreviewCard, { key: linkPreview.og_scrape_url, linkPreview }) : null
|
|
48667
48676
|
));
|
|
48668
48677
|
};
|
|
48669
48678
|
var LinkPreviewCard = ({ linkPreview }) => {
|
|
48670
48679
|
const { dismissLinkPreview } = useMessageInputContext();
|
|
48671
48680
|
const { handleEnter, handleLeave, tooltipVisible } = useEnterLeaveHandlers();
|
|
48672
|
-
const [referenceElement, setReferenceElement] = (0,
|
|
48673
|
-
return /* @__PURE__ */
|
|
48681
|
+
const [referenceElement, setReferenceElement] = (0, import_react213.useState)(null);
|
|
48682
|
+
return /* @__PURE__ */ import_react213.default.createElement(
|
|
48674
48683
|
"div",
|
|
48675
48684
|
{
|
|
48676
48685
|
className: (0, import_clsx54.default)("str-chat__link-preview-card", {
|
|
@@ -48678,7 +48687,7 @@ var LinkPreviewCard = ({ linkPreview }) => {
|
|
|
48678
48687
|
}),
|
|
48679
48688
|
"data-testid": "link-preview-card"
|
|
48680
48689
|
},
|
|
48681
|
-
/* @__PURE__ */
|
|
48690
|
+
/* @__PURE__ */ import_react213.default.createElement(
|
|
48682
48691
|
PopperTooltip,
|
|
48683
48692
|
{
|
|
48684
48693
|
offset: [0, 5],
|
|
@@ -48687,7 +48696,7 @@ var LinkPreviewCard = ({ linkPreview }) => {
|
|
|
48687
48696
|
},
|
|
48688
48697
|
linkPreview.og_scrape_url
|
|
48689
48698
|
),
|
|
48690
|
-
/* @__PURE__ */
|
|
48699
|
+
/* @__PURE__ */ import_react213.default.createElement(
|
|
48691
48700
|
"div",
|
|
48692
48701
|
{
|
|
48693
48702
|
className: "str-chat__link-preview-card__icon-container",
|
|
@@ -48695,23 +48704,23 @@ var LinkPreviewCard = ({ linkPreview }) => {
|
|
|
48695
48704
|
onMouseLeave: handleLeave,
|
|
48696
48705
|
ref: setReferenceElement
|
|
48697
48706
|
},
|
|
48698
|
-
/* @__PURE__ */
|
|
48707
|
+
/* @__PURE__ */ import_react213.default.createElement(LinkIcon, null)
|
|
48699
48708
|
),
|
|
48700
|
-
/* @__PURE__ */
|
|
48701
|
-
/* @__PURE__ */
|
|
48709
|
+
/* @__PURE__ */ import_react213.default.createElement("div", { className: "str-chat__link-preview-card__content" }, /* @__PURE__ */ import_react213.default.createElement("div", { className: "str-chat__link-preview-card__content-title" }, linkPreview.title), /* @__PURE__ */ import_react213.default.createElement("div", { className: "str-chat__link-preview-card__content-description" }, linkPreview.text)),
|
|
48710
|
+
/* @__PURE__ */ import_react213.default.createElement(
|
|
48702
48711
|
"button",
|
|
48703
48712
|
{
|
|
48704
48713
|
className: "str-chat__link-preview-card__dismiss-button",
|
|
48705
48714
|
"data-testid": "link-preview-card-dismiss-btn",
|
|
48706
48715
|
onClick: () => dismissLinkPreview(linkPreview)
|
|
48707
48716
|
},
|
|
48708
|
-
/* @__PURE__ */
|
|
48717
|
+
/* @__PURE__ */ import_react213.default.createElement(CloseIcon, null)
|
|
48709
48718
|
)
|
|
48710
48719
|
);
|
|
48711
48720
|
};
|
|
48712
48721
|
|
|
48713
48722
|
// src/components/ChatAutoComplete/ChatAutoComplete.tsx
|
|
48714
|
-
var
|
|
48723
|
+
var import_react214 = __toESM(require("react"));
|
|
48715
48724
|
var UnMemoizedChatAutoComplete = (props) => {
|
|
48716
48725
|
const {
|
|
48717
48726
|
AutocompleteSuggestionItem: SuggestionItem,
|
|
@@ -48733,7 +48742,7 @@ var UnMemoizedChatAutoComplete = (props) => {
|
|
|
48733
48742
|
const [firstSkin] = emoji.skins ?? [];
|
|
48734
48743
|
return emoji.native ?? firstSkin.native;
|
|
48735
48744
|
};
|
|
48736
|
-
const updateInnerRef = (0,
|
|
48745
|
+
const updateInnerRef = (0, import_react214.useCallback)(
|
|
48737
48746
|
(ref) => {
|
|
48738
48747
|
if (innerRef) {
|
|
48739
48748
|
innerRef.current = ref;
|
|
@@ -48741,7 +48750,7 @@ var UnMemoizedChatAutoComplete = (props) => {
|
|
|
48741
48750
|
},
|
|
48742
48751
|
[innerRef]
|
|
48743
48752
|
);
|
|
48744
|
-
return /* @__PURE__ */
|
|
48753
|
+
return /* @__PURE__ */ import_react214.default.createElement(
|
|
48745
48754
|
ReactTextareaAutocomplete,
|
|
48746
48755
|
{
|
|
48747
48756
|
additionalTextareaProps: messageInput.additionalTextareaProps,
|
|
@@ -48776,15 +48785,15 @@ var UnMemoizedChatAutoComplete = (props) => {
|
|
|
48776
48785
|
}
|
|
48777
48786
|
);
|
|
48778
48787
|
};
|
|
48779
|
-
var ChatAutoComplete =
|
|
48788
|
+
var ChatAutoComplete = import_react214.default.memo(
|
|
48780
48789
|
UnMemoizedChatAutoComplete
|
|
48781
48790
|
);
|
|
48782
48791
|
|
|
48783
48792
|
// src/components/AIStateIndicator/AIStateIndicator.tsx
|
|
48784
|
-
var
|
|
48793
|
+
var import_react216 = __toESM(require("react"));
|
|
48785
48794
|
|
|
48786
48795
|
// src/components/AIStateIndicator/hooks/useAIState.ts
|
|
48787
|
-
var
|
|
48796
|
+
var import_react215 = require("react");
|
|
48788
48797
|
var AIStates = {
|
|
48789
48798
|
Error: "AI_STATE_ERROR",
|
|
48790
48799
|
ExternalSources: "AI_STATE_EXTERNAL_SOURCES",
|
|
@@ -48793,8 +48802,8 @@ var AIStates = {
|
|
|
48793
48802
|
Thinking: "AI_STATE_THINKING"
|
|
48794
48803
|
};
|
|
48795
48804
|
var useAIState = (channel) => {
|
|
48796
|
-
const [aiState, setAiState] = (0,
|
|
48797
|
-
(0,
|
|
48805
|
+
const [aiState, setAiState] = (0, import_react215.useState)(AIStates.Idle);
|
|
48806
|
+
(0, import_react215.useEffect)(() => {
|
|
48798
48807
|
if (!channel) {
|
|
48799
48808
|
return;
|
|
48800
48809
|
}
|
|
@@ -48834,20 +48843,20 @@ var AIStateIndicator = ({
|
|
|
48834
48843
|
[AIStates.Thinking]: t2("Thinking..."),
|
|
48835
48844
|
[AIStates.Generating]: t2("Generating...")
|
|
48836
48845
|
};
|
|
48837
|
-
return aiState in allowedStates ? /* @__PURE__ */
|
|
48846
|
+
return aiState in allowedStates ? /* @__PURE__ */ import_react216.default.createElement("div", { className: "str-chat__ai-state-indicator-container" }, /* @__PURE__ */ import_react216.default.createElement("p", { className: "str-chat__ai-state-indicator-text" }, allowedStates[aiState])) : null;
|
|
48838
48847
|
};
|
|
48839
48848
|
|
|
48840
48849
|
// src/components/MessageInput/WithDragAndDropUpload.tsx
|
|
48841
|
-
var
|
|
48850
|
+
var import_react217 = __toESM(require("react"));
|
|
48842
48851
|
var import_react_dropzone2 = require("react-dropzone");
|
|
48843
48852
|
var import_clsx55 = __toESM(require("clsx"));
|
|
48844
|
-
var DragAndDropUploadContext =
|
|
48853
|
+
var DragAndDropUploadContext = import_react217.default.createContext({
|
|
48845
48854
|
subscribeToDrop: null
|
|
48846
48855
|
});
|
|
48847
|
-
var useDragAndDropUploadContext = () => (0,
|
|
48856
|
+
var useDragAndDropUploadContext = () => (0, import_react217.useContext)(DragAndDropUploadContext);
|
|
48848
48857
|
var useRegisterDropHandlers = ({ uploadNewFiles }) => {
|
|
48849
48858
|
const { subscribeToDrop } = useDragAndDropUploadContext();
|
|
48850
|
-
(0,
|
|
48859
|
+
(0, import_react217.useEffect)(() => {
|
|
48851
48860
|
const unsubscribe = subscribeToDrop?.(uploadNewFiles);
|
|
48852
48861
|
return unsubscribe;
|
|
48853
48862
|
}, [subscribeToDrop, uploadNewFiles]);
|
|
@@ -48858,26 +48867,26 @@ var WithDragAndDropUpload = ({
|
|
|
48858
48867
|
component: Component2 = "div",
|
|
48859
48868
|
style
|
|
48860
48869
|
}) => {
|
|
48861
|
-
const dropHandlersRef = (0,
|
|
48870
|
+
const dropHandlersRef = (0, import_react217.useRef)(/* @__PURE__ */ new Set());
|
|
48862
48871
|
const { acceptedFiles = [], multipleUploads } = useChannelStateContext();
|
|
48863
48872
|
const { t: t2 } = useTranslationContext();
|
|
48864
48873
|
const messageInputContext = useMessageInputContext();
|
|
48865
48874
|
const dragAndDropUploadContext = useDragAndDropUploadContext();
|
|
48866
48875
|
const isWithinMessageInputContext = typeof messageInputContext.uploadNewFiles === "function";
|
|
48867
|
-
const accept = (0,
|
|
48876
|
+
const accept = (0, import_react217.useMemo)(
|
|
48868
48877
|
() => acceptedFiles.reduce((mediaTypeMap, mediaType) => {
|
|
48869
48878
|
mediaTypeMap[mediaType] ?? (mediaTypeMap[mediaType] = []);
|
|
48870
48879
|
return mediaTypeMap;
|
|
48871
48880
|
}, {}),
|
|
48872
48881
|
[acceptedFiles]
|
|
48873
48882
|
);
|
|
48874
|
-
const subscribeToDrop = (0,
|
|
48883
|
+
const subscribeToDrop = (0, import_react217.useCallback)((fn) => {
|
|
48875
48884
|
dropHandlersRef.current.add(fn);
|
|
48876
48885
|
return () => {
|
|
48877
48886
|
dropHandlersRef.current.delete(fn);
|
|
48878
48887
|
};
|
|
48879
48888
|
}, []);
|
|
48880
|
-
const handleDrop = (0,
|
|
48889
|
+
const handleDrop = (0, import_react217.useCallback)((files) => {
|
|
48881
48890
|
dropHandlersRef.current.forEach((fn) => fn(files));
|
|
48882
48891
|
}, []);
|
|
48883
48892
|
const { getRootProps, isDragActive, isDragReject } = (0, import_react_dropzone2.useDropzone)({
|
|
@@ -48890,24 +48899,24 @@ var WithDragAndDropUpload = ({
|
|
|
48890
48899
|
onDrop: isWithinMessageInputContext ? messageInputContext.uploadNewFiles : handleDrop
|
|
48891
48900
|
});
|
|
48892
48901
|
if (dragAndDropUploadContext.subscribeToDrop !== null) {
|
|
48893
|
-
return /* @__PURE__ */
|
|
48902
|
+
return /* @__PURE__ */ import_react217.default.createElement(Component2, { className }, children);
|
|
48894
48903
|
}
|
|
48895
|
-
return /* @__PURE__ */
|
|
48904
|
+
return /* @__PURE__ */ import_react217.default.createElement(
|
|
48896
48905
|
DragAndDropUploadContext.Provider,
|
|
48897
48906
|
{
|
|
48898
48907
|
value: {
|
|
48899
48908
|
subscribeToDrop
|
|
48900
48909
|
}
|
|
48901
48910
|
},
|
|
48902
|
-
/* @__PURE__ */
|
|
48911
|
+
/* @__PURE__ */ import_react217.default.createElement(Component2, { ...getRootProps({ className, style }) }, isDragActive && /* @__PURE__ */ import_react217.default.createElement(
|
|
48903
48912
|
"div",
|
|
48904
48913
|
{
|
|
48905
48914
|
className: (0, import_clsx55.default)("str-chat__dropzone-container", {
|
|
48906
48915
|
"str-chat__dropzone-container--not-accepted": isDragReject
|
|
48907
48916
|
})
|
|
48908
48917
|
},
|
|
48909
|
-
!isDragReject && /* @__PURE__ */
|
|
48910
|
-
isDragReject && /* @__PURE__ */
|
|
48918
|
+
!isDragReject && /* @__PURE__ */ import_react217.default.createElement("p", null, t2("Drag your files here")),
|
|
48919
|
+
isDragReject && /* @__PURE__ */ import_react217.default.createElement("p", null, t2("Some of the files will not be accepted"))
|
|
48911
48920
|
), children)
|
|
48912
48921
|
);
|
|
48913
48922
|
};
|
|
@@ -48947,19 +48956,19 @@ var MessageInputFlat = () => {
|
|
|
48947
48956
|
const { setQuotedMessage } = useChannelActionContext("MessageInputFlat");
|
|
48948
48957
|
const { channel } = useChatContext("MessageInputFlat");
|
|
48949
48958
|
const { aiState } = useAIState(channel);
|
|
48950
|
-
const stopGenerating = (0,
|
|
48959
|
+
const stopGenerating = (0, import_react218.useCallback)(() => channel?.stopAIResponse(), [channel]);
|
|
48951
48960
|
const [
|
|
48952
48961
|
showRecordingPermissionDeniedNotification,
|
|
48953
48962
|
setShowRecordingPermissionDeniedNotification
|
|
48954
|
-
] = (0,
|
|
48955
|
-
const closePermissionDeniedNotification = (0,
|
|
48963
|
+
] = (0, import_react218.useState)(false);
|
|
48964
|
+
const closePermissionDeniedNotification = (0, import_react218.useCallback)(() => {
|
|
48956
48965
|
setShowRecordingPermissionDeniedNotification(false);
|
|
48957
48966
|
}, []);
|
|
48958
|
-
const failedUploadsCount = (0,
|
|
48967
|
+
const failedUploadsCount = (0, import_react218.useMemo)(
|
|
48959
48968
|
() => attachments.filter((a2) => a2.localMetadata?.uploadState === "failed").length,
|
|
48960
48969
|
[attachments]
|
|
48961
48970
|
);
|
|
48962
|
-
(0,
|
|
48971
|
+
(0, import_react218.useEffect)(() => {
|
|
48963
48972
|
const handleQuotedMessageUpdate = (e2) => {
|
|
48964
48973
|
if (e2.message?.id !== quotedMessage?.id) return;
|
|
48965
48974
|
if (e2.type === "message.deleted") {
|
|
@@ -48975,31 +48984,31 @@ var MessageInputFlat = () => {
|
|
|
48975
48984
|
channel?.off("message.updated", handleQuotedMessageUpdate);
|
|
48976
48985
|
};
|
|
48977
48986
|
}, [channel, quotedMessage]);
|
|
48978
|
-
if (recordingController.recordingState) return /* @__PURE__ */
|
|
48987
|
+
if (recordingController.recordingState) return /* @__PURE__ */ import_react218.default.createElement(AudioRecorder2, null);
|
|
48979
48988
|
const displayQuotedMessage = !message && quotedMessage && quotedMessage.parent_id === parent?.id;
|
|
48980
48989
|
const recordingEnabled = !!(recordingController.recorder && navigator.mediaDevices);
|
|
48981
48990
|
const isRecording = !!recordingController.recordingState;
|
|
48982
48991
|
const StopAIGenerationButton2 = StopAIGenerationButtonOverride === void 0 ? StopAIGenerationButton : StopAIGenerationButtonOverride;
|
|
48983
48992
|
const shouldDisplayStopAIGeneration = [AIStates.Thinking, AIStates.Generating].includes(aiState) && !!StopAIGenerationButton2;
|
|
48984
|
-
return /* @__PURE__ */
|
|
48993
|
+
return /* @__PURE__ */ import_react218.default.createElement(WithDragAndDropUpload, { className: "str-chat__message-input", component: "div" }, recordingEnabled && recordingController.permissionState === "denied" && showRecordingPermissionDeniedNotification && /* @__PURE__ */ import_react218.default.createElement(
|
|
48985
48994
|
RecordingPermissionDeniedNotification2,
|
|
48986
48995
|
{
|
|
48987
48996
|
onClose: closePermissionDeniedNotification,
|
|
48988
48997
|
permissionName: "microphone" /* MIC */
|
|
48989
48998
|
}
|
|
48990
|
-
), findAndEnqueueURLsToEnrich && /* @__PURE__ */
|
|
48999
|
+
), findAndEnqueueURLsToEnrich && /* @__PURE__ */ import_react218.default.createElement(LinkPreviewList2, { linkPreviews: Array.from(linkPreviews.values()) }), displayQuotedMessage && /* @__PURE__ */ import_react218.default.createElement(QuotedMessagePreviewHeader, null), /* @__PURE__ */ import_react218.default.createElement("div", { className: "str-chat__message-input-inner" }, /* @__PURE__ */ import_react218.default.createElement(AttachmentSelector2, null), /* @__PURE__ */ import_react218.default.createElement("div", { className: "str-chat__message-textarea-container" }, displayQuotedMessage && /* @__PURE__ */ import_react218.default.createElement(QuotedMessagePreview2, { quotedMessage }), isUploadEnabled && !!(numberOfUploads + failedUploadsCount || attachments.length > 0) && /* @__PURE__ */ import_react218.default.createElement(AttachmentPreviewList2, null), /* @__PURE__ */ import_react218.default.createElement("div", { className: "str-chat__message-textarea-with-emoji-picker" }, /* @__PURE__ */ import_react218.default.createElement(ChatAutoComplete, null), EmojiPicker && /* @__PURE__ */ import_react218.default.createElement(EmojiPicker, null))), shouldDisplayStopAIGeneration ? /* @__PURE__ */ import_react218.default.createElement(StopAIGenerationButton2, { onClick: stopGenerating }) : !hideSendButton && /* @__PURE__ */ import_react218.default.createElement(import_react218.default.Fragment, null, cooldownRemaining ? /* @__PURE__ */ import_react218.default.createElement(
|
|
48991
49000
|
CooldownTimer2,
|
|
48992
49001
|
{
|
|
48993
49002
|
cooldownInterval: cooldownRemaining,
|
|
48994
49003
|
setCooldownRemaining
|
|
48995
49004
|
}
|
|
48996
|
-
) : /* @__PURE__ */
|
|
49005
|
+
) : /* @__PURE__ */ import_react218.default.createElement(import_react218.default.Fragment, null, /* @__PURE__ */ import_react218.default.createElement(
|
|
48997
49006
|
SendButton2,
|
|
48998
49007
|
{
|
|
48999
49008
|
disabled: !numberOfUploads && !text8.length && attachments.length - failedUploadsCount === 0,
|
|
49000
49009
|
sendMessage: handleSubmit
|
|
49001
49010
|
}
|
|
49002
|
-
), recordingEnabled && /* @__PURE__ */
|
|
49011
|
+
), recordingEnabled && /* @__PURE__ */ import_react218.default.createElement(
|
|
49003
49012
|
StartRecordingAudioButton2,
|
|
49004
49013
|
{
|
|
49005
49014
|
disabled: isRecording || !asyncMessagesMultiSendEnabled && attachments.some(
|
|
@@ -49017,22 +49026,22 @@ var MessageInputFlat = () => {
|
|
|
49017
49026
|
var EditMessageForm = () => {
|
|
49018
49027
|
const { t: t2 } = useTranslationContext("EditMessageForm");
|
|
49019
49028
|
const { clearEditingState, handleSubmit } = useMessageInputContext("EditMessageForm");
|
|
49020
|
-
(0,
|
|
49029
|
+
(0, import_react219.useEffect)(() => {
|
|
49021
49030
|
const onKeyDown = (event) => {
|
|
49022
49031
|
if (event.key === "Escape") clearEditingState?.();
|
|
49023
49032
|
};
|
|
49024
49033
|
document.addEventListener("keydown", onKeyDown);
|
|
49025
49034
|
return () => document.removeEventListener("keydown", onKeyDown);
|
|
49026
49035
|
}, [clearEditingState]);
|
|
49027
|
-
return /* @__PURE__ */
|
|
49036
|
+
return /* @__PURE__ */ import_react219.default.createElement(
|
|
49028
49037
|
"form",
|
|
49029
49038
|
{
|
|
49030
49039
|
autoComplete: "off",
|
|
49031
49040
|
className: "str-chat__edit-message-form",
|
|
49032
49041
|
onSubmit: handleSubmit
|
|
49033
49042
|
},
|
|
49034
|
-
/* @__PURE__ */
|
|
49035
|
-
/* @__PURE__ */
|
|
49043
|
+
/* @__PURE__ */ import_react219.default.createElement(MessageInputFlat, null),
|
|
49044
|
+
/* @__PURE__ */ import_react219.default.createElement("div", { className: "str-chat__edit-message-form-options" }, /* @__PURE__ */ import_react219.default.createElement(
|
|
49036
49045
|
"button",
|
|
49037
49046
|
{
|
|
49038
49047
|
className: "str-chat__edit-message-cancel",
|
|
@@ -49040,7 +49049,7 @@ var EditMessageForm = () => {
|
|
|
49040
49049
|
onClick: clearEditingState
|
|
49041
49050
|
},
|
|
49042
49051
|
t2("Cancel")
|
|
49043
|
-
), /* @__PURE__ */
|
|
49052
|
+
), /* @__PURE__ */ import_react219.default.createElement(
|
|
49044
49053
|
"button",
|
|
49045
49054
|
{
|
|
49046
49055
|
className: "str-chat__edit-message-send",
|
|
@@ -49053,7 +49062,7 @@ var EditMessageForm = () => {
|
|
|
49053
49062
|
};
|
|
49054
49063
|
|
|
49055
49064
|
// src/components/MessageInput/MessageInput.tsx
|
|
49056
|
-
var
|
|
49065
|
+
var import_react220 = __toESM(require("react"));
|
|
49057
49066
|
var MessageInputProvider = (props) => {
|
|
49058
49067
|
const cooldownTimerState = useCooldownTimer();
|
|
49059
49068
|
const messageInputState = useMessageInputState(props);
|
|
@@ -49065,44 +49074,45 @@ var MessageInputProvider = (props) => {
|
|
|
49065
49074
|
emojiSearchIndex: props.emojiSearchIndex ?? emojiSearchIndex
|
|
49066
49075
|
});
|
|
49067
49076
|
useRegisterDropHandlers(messageInputContextValue);
|
|
49068
|
-
return /* @__PURE__ */
|
|
49077
|
+
return /* @__PURE__ */ import_react220.default.createElement(MessageInputContextProvider, { value: messageInputContextValue }, props.children);
|
|
49069
49078
|
};
|
|
49070
49079
|
var UnMemoizedMessageInput = (props) => {
|
|
49071
49080
|
const { Input: PropInput } = props;
|
|
49072
49081
|
const { dragAndDropWindow } = useChannelStateContext();
|
|
49073
49082
|
const { Input: ContextInput, TriggerProvider = DefaultTriggerProvider } = useComponentContext("MessageInput");
|
|
49083
|
+
const id = useStableId();
|
|
49074
49084
|
const Input3 = PropInput || ContextInput || MessageInputFlat;
|
|
49075
|
-
const dialogManagerId = props.isThreadInput ?
|
|
49085
|
+
const dialogManagerId = props.isThreadInput ? `message-input-dialog-manager-thread-${id}` : `message-input-dialog-manager-${id}`;
|
|
49076
49086
|
if (dragAndDropWindow)
|
|
49077
|
-
return /* @__PURE__ */
|
|
49078
|
-
return /* @__PURE__ */
|
|
49087
|
+
return /* @__PURE__ */ import_react220.default.createElement(DialogManagerProvider, { id: dialogManagerId }, /* @__PURE__ */ import_react220.default.createElement(TriggerProvider, null, /* @__PURE__ */ import_react220.default.createElement(Input3, null)));
|
|
49088
|
+
return /* @__PURE__ */ import_react220.default.createElement(DialogManagerProvider, { id: dialogManagerId }, /* @__PURE__ */ import_react220.default.createElement(MessageInputProvider, { ...props }, /* @__PURE__ */ import_react220.default.createElement(TriggerProvider, null, /* @__PURE__ */ import_react220.default.createElement(Input3, null))));
|
|
49079
49089
|
};
|
|
49080
|
-
var MessageInput =
|
|
49090
|
+
var MessageInput = import_react220.default.memo(
|
|
49081
49091
|
UnMemoizedMessageInput
|
|
49082
49092
|
);
|
|
49083
49093
|
|
|
49084
49094
|
// src/components/Reactions/ReactionsList.tsx
|
|
49085
|
-
var
|
|
49095
|
+
var import_react224 = __toESM(require("react"));
|
|
49086
49096
|
var import_clsx57 = __toESM(require("clsx"));
|
|
49087
49097
|
|
|
49088
49098
|
// src/components/Reactions/ReactionsListModal.tsx
|
|
49089
|
-
var
|
|
49099
|
+
var import_react222 = __toESM(require("react"));
|
|
49090
49100
|
var import_clsx56 = __toESM(require("clsx"));
|
|
49091
49101
|
|
|
49092
49102
|
// src/components/Reactions/hooks/useFetchReactions.ts
|
|
49093
|
-
var
|
|
49103
|
+
var import_react221 = require("react");
|
|
49094
49104
|
function useFetchReactions(options) {
|
|
49095
49105
|
const { handleFetchReactions: contextHandleFetchReactions } = useMessageContext("useFetchReactions");
|
|
49096
|
-
const [reactions, setReactions] = (0,
|
|
49106
|
+
const [reactions, setReactions] = (0, import_react221.useState)([]);
|
|
49097
49107
|
const {
|
|
49098
49108
|
handleFetchReactions: propHandleFetchReactions,
|
|
49099
49109
|
reactionType,
|
|
49100
49110
|
shouldFetch,
|
|
49101
49111
|
sort
|
|
49102
49112
|
} = options;
|
|
49103
|
-
const [isLoading, setIsLoading] = (0,
|
|
49113
|
+
const [isLoading, setIsLoading] = (0, import_react221.useState)(shouldFetch);
|
|
49104
49114
|
const handleFetchReactions = propHandleFetchReactions ?? contextHandleFetchReactions;
|
|
49105
|
-
(0,
|
|
49115
|
+
(0, import_react221.useEffect)(() => {
|
|
49106
49116
|
if (!shouldFetch) {
|
|
49107
49117
|
return;
|
|
49108
49118
|
}
|
|
@@ -49158,24 +49168,24 @@ function ReactionsListModal({
|
|
|
49158
49168
|
shouldFetch: modalProps.open,
|
|
49159
49169
|
sort: reactionDetailsSort
|
|
49160
49170
|
});
|
|
49161
|
-
const reactionDetailsWithLegacyFallback = (0,
|
|
49171
|
+
const reactionDetailsWithLegacyFallback = (0, import_react222.useMemo)(
|
|
49162
49172
|
() => legacySortReactionDetails ? [...reactionDetails].sort(legacySortReactionDetails) : reactionDetails,
|
|
49163
49173
|
[legacySortReactionDetails, reactionDetails]
|
|
49164
49174
|
);
|
|
49165
|
-
return /* @__PURE__ */
|
|
49175
|
+
return /* @__PURE__ */ import_react222.default.createElement(
|
|
49166
49176
|
Modal,
|
|
49167
49177
|
{
|
|
49168
49178
|
...modalProps,
|
|
49169
49179
|
className: (0, import_clsx56.default)("str-chat__message-reactions-details-modal", modalProps.className)
|
|
49170
49180
|
},
|
|
49171
|
-
/* @__PURE__ */
|
|
49181
|
+
/* @__PURE__ */ import_react222.default.createElement(
|
|
49172
49182
|
"div",
|
|
49173
49183
|
{
|
|
49174
49184
|
className: "str-chat__message-reactions-details",
|
|
49175
49185
|
"data-testid": "reactions-list-modal"
|
|
49176
49186
|
},
|
|
49177
|
-
/* @__PURE__ */
|
|
49178
|
-
({ EmojiComponent, reactionCount, reactionType }) => EmojiComponent && /* @__PURE__ */
|
|
49187
|
+
/* @__PURE__ */ import_react222.default.createElement("div", { className: "str-chat__message-reactions-details-reaction-types" }, reactions.map(
|
|
49188
|
+
({ EmojiComponent, reactionCount, reactionType }) => EmojiComponent && /* @__PURE__ */ import_react222.default.createElement(
|
|
49179
49189
|
"div",
|
|
49180
49190
|
{
|
|
49181
49191
|
className: (0, import_clsx56.default)("str-chat__message-reactions-details-reaction-type", {
|
|
@@ -49187,25 +49197,25 @@ function ReactionsListModal({
|
|
|
49187
49197
|
reactionType
|
|
49188
49198
|
)
|
|
49189
49199
|
},
|
|
49190
|
-
/* @__PURE__ */
|
|
49200
|
+
/* @__PURE__ */ import_react222.default.createElement("span", { className: "str-chat__message-reaction-emoji str-chat__message-reaction-emoji--with-fallback" }, /* @__PURE__ */ import_react222.default.createElement(EmojiComponent, null)),
|
|
49191
49201
|
"\xA0",
|
|
49192
|
-
/* @__PURE__ */
|
|
49202
|
+
/* @__PURE__ */ import_react222.default.createElement("span", { className: "str-chat__message-reaction-count" }, reactionCount)
|
|
49193
49203
|
)
|
|
49194
49204
|
)),
|
|
49195
|
-
SelectedEmojiComponent && /* @__PURE__ */
|
|
49196
|
-
/* @__PURE__ */
|
|
49205
|
+
SelectedEmojiComponent && /* @__PURE__ */ import_react222.default.createElement("div", { className: "str-chat__message-reaction-emoji str-chat__message-reaction-emoji--with-fallback str-chat__message-reaction-emoji-big" }, /* @__PURE__ */ import_react222.default.createElement(SelectedEmojiComponent, null)),
|
|
49206
|
+
/* @__PURE__ */ import_react222.default.createElement(
|
|
49197
49207
|
"div",
|
|
49198
49208
|
{
|
|
49199
49209
|
className: "str-chat__message-reactions-details-reacting-users",
|
|
49200
49210
|
"data-testid": "all-reacting-users"
|
|
49201
49211
|
},
|
|
49202
|
-
areReactionsLoading ? /* @__PURE__ */
|
|
49212
|
+
areReactionsLoading ? /* @__PURE__ */ import_react222.default.createElement(LoadingIndicator, null) : reactionDetailsWithLegacyFallback.map(({ user }) => /* @__PURE__ */ import_react222.default.createElement(
|
|
49203
49213
|
"div",
|
|
49204
49214
|
{
|
|
49205
49215
|
className: "str-chat__message-reactions-details-reacting-user",
|
|
49206
49216
|
key: user?.id
|
|
49207
49217
|
},
|
|
49208
|
-
/* @__PURE__ */
|
|
49218
|
+
/* @__PURE__ */ import_react222.default.createElement(
|
|
49209
49219
|
Avatar,
|
|
49210
49220
|
{
|
|
49211
49221
|
className: "stream-chat__avatar--reaction",
|
|
@@ -49214,7 +49224,7 @@ function ReactionsListModal({
|
|
|
49214
49224
|
name: user?.name || user?.id
|
|
49215
49225
|
}
|
|
49216
49226
|
),
|
|
49217
|
-
/* @__PURE__ */
|
|
49227
|
+
/* @__PURE__ */ import_react222.default.createElement(
|
|
49218
49228
|
"span",
|
|
49219
49229
|
{
|
|
49220
49230
|
className: "str-chat__user-item--name",
|
|
@@ -49229,7 +49239,7 @@ function ReactionsListModal({
|
|
|
49229
49239
|
}
|
|
49230
49240
|
|
|
49231
49241
|
// src/components/Reactions/hooks/useProcessReactions.tsx
|
|
49232
|
-
var
|
|
49242
|
+
var import_react223 = require("react");
|
|
49233
49243
|
var defaultReactionsSort = (a2, b) => {
|
|
49234
49244
|
if (a2.firstReactionAt && b.firstReactionAt) {
|
|
49235
49245
|
return +a2.firstReactionAt - +b.firstReactionAt;
|
|
@@ -49251,19 +49261,19 @@ var useProcessReactions = (params) => {
|
|
|
49251
49261
|
const latestReactions = propReactions || message.latest_reactions;
|
|
49252
49262
|
const ownReactions = propOwnReactions || message?.own_reactions;
|
|
49253
49263
|
const reactionGroups = propReactionGroups || message?.reaction_groups;
|
|
49254
|
-
const isOwnReaction = (0,
|
|
49264
|
+
const isOwnReaction = (0, import_react223.useCallback)(
|
|
49255
49265
|
(reactionType) => ownReactions?.some((reaction) => reaction.type === reactionType) ?? false,
|
|
49256
49266
|
[ownReactions]
|
|
49257
49267
|
);
|
|
49258
|
-
const getEmojiByReactionType = (0,
|
|
49268
|
+
const getEmojiByReactionType = (0, import_react223.useCallback)(
|
|
49259
49269
|
(reactionType) => reactionOptions.find(({ type }) => type === reactionType)?.Component ?? null,
|
|
49260
49270
|
[reactionOptions]
|
|
49261
49271
|
);
|
|
49262
|
-
const isSupportedReaction = (0,
|
|
49272
|
+
const isSupportedReaction = (0, import_react223.useCallback)(
|
|
49263
49273
|
(reactionType) => reactionOptions.some((reactionOption) => reactionOption.type === reactionType),
|
|
49264
49274
|
[reactionOptions]
|
|
49265
49275
|
);
|
|
49266
|
-
const getLatestReactedUserNames = (0,
|
|
49276
|
+
const getLatestReactedUserNames = (0, import_react223.useCallback)(
|
|
49267
49277
|
(reactionType) => latestReactions?.flatMap((reaction) => {
|
|
49268
49278
|
if (reactionType && reactionType === reaction.type) {
|
|
49269
49279
|
const username = reaction.user?.name || reaction.user?.id;
|
|
@@ -49273,7 +49283,7 @@ var useProcessReactions = (params) => {
|
|
|
49273
49283
|
}) ?? [],
|
|
49274
49284
|
[latestReactions]
|
|
49275
49285
|
);
|
|
49276
|
-
const existingReactions = (0,
|
|
49286
|
+
const existingReactions = (0, import_react223.useMemo)(() => {
|
|
49277
49287
|
if (!reactionGroups) {
|
|
49278
49288
|
return [];
|
|
49279
49289
|
}
|
|
@@ -49307,7 +49317,7 @@ var useProcessReactions = (params) => {
|
|
|
49307
49317
|
sortReactions
|
|
49308
49318
|
]);
|
|
49309
49319
|
const hasReactions = existingReactions.length > 0;
|
|
49310
|
-
const totalReactionCount = (0,
|
|
49320
|
+
const totalReactionCount = (0, import_react223.useMemo)(
|
|
49311
49321
|
() => existingReactions.reduce((total, { reactionCount }) => total + reactionCount, 0),
|
|
49312
49322
|
[existingReactions]
|
|
49313
49323
|
);
|
|
@@ -49329,7 +49339,7 @@ var UnMemoizedReactionsList = (props) => {
|
|
|
49329
49339
|
...rest
|
|
49330
49340
|
} = props;
|
|
49331
49341
|
const { existingReactions, hasReactions, totalReactionCount } = useProcessReactions(rest);
|
|
49332
|
-
const [selectedReactionType, setSelectedReactionType] = (0,
|
|
49342
|
+
const [selectedReactionType, setSelectedReactionType] = (0, import_react224.useState)(null);
|
|
49333
49343
|
const { t: t2 } = useTranslationContext("ReactionsList");
|
|
49334
49344
|
const { ReactionsListModal: ReactionsListModal2 = ReactionsListModal } = useComponentContext();
|
|
49335
49345
|
const handleReactionButtonClick = (reactionType) => {
|
|
@@ -49339,7 +49349,7 @@ var UnMemoizedReactionsList = (props) => {
|
|
|
49339
49349
|
setSelectedReactionType(reactionType);
|
|
49340
49350
|
};
|
|
49341
49351
|
if (!hasReactions) return null;
|
|
49342
|
-
return /* @__PURE__ */
|
|
49352
|
+
return /* @__PURE__ */ import_react224.default.createElement(import_react224.default.Fragment, null, /* @__PURE__ */ import_react224.default.createElement(
|
|
49343
49353
|
"div",
|
|
49344
49354
|
{
|
|
49345
49355
|
"aria-label": t2("aria/Reaction list"),
|
|
@@ -49350,8 +49360,8 @@ var UnMemoizedReactionsList = (props) => {
|
|
|
49350
49360
|
"data-testid": "reaction-list",
|
|
49351
49361
|
role: "figure"
|
|
49352
49362
|
},
|
|
49353
|
-
/* @__PURE__ */
|
|
49354
|
-
({ EmojiComponent, isOwnReaction, reactionCount, reactionType }) => EmojiComponent && /* @__PURE__ */
|
|
49363
|
+
/* @__PURE__ */ import_react224.default.createElement("ul", { className: "str-chat__message-reactions" }, existingReactions.map(
|
|
49364
|
+
({ EmojiComponent, isOwnReaction, reactionCount, reactionType }) => EmojiComponent && /* @__PURE__ */ import_react224.default.createElement(
|
|
49355
49365
|
"li",
|
|
49356
49366
|
{
|
|
49357
49367
|
className: (0, import_clsx57.default)("str-chat__message-reaction", {
|
|
@@ -49359,7 +49369,7 @@ var UnMemoizedReactionsList = (props) => {
|
|
|
49359
49369
|
}),
|
|
49360
49370
|
key: reactionType
|
|
49361
49371
|
},
|
|
49362
|
-
/* @__PURE__ */
|
|
49372
|
+
/* @__PURE__ */ import_react224.default.createElement(
|
|
49363
49373
|
"button",
|
|
49364
49374
|
{
|
|
49365
49375
|
"aria-label": `Reactions: ${reactionType}`,
|
|
@@ -49367,9 +49377,9 @@ var UnMemoizedReactionsList = (props) => {
|
|
|
49367
49377
|
onClick: () => handleReactionButtonClick(reactionType),
|
|
49368
49378
|
type: "button"
|
|
49369
49379
|
},
|
|
49370
|
-
/* @__PURE__ */
|
|
49380
|
+
/* @__PURE__ */ import_react224.default.createElement("span", { className: "str-chat__message-reaction-emoji" }, /* @__PURE__ */ import_react224.default.createElement(EmojiComponent, null)),
|
|
49371
49381
|
"\xA0",
|
|
49372
|
-
/* @__PURE__ */
|
|
49382
|
+
/* @__PURE__ */ import_react224.default.createElement(
|
|
49373
49383
|
"span",
|
|
49374
49384
|
{
|
|
49375
49385
|
className: "str-chat__message-reaction-count",
|
|
@@ -49379,8 +49389,8 @@ var UnMemoizedReactionsList = (props) => {
|
|
|
49379
49389
|
)
|
|
49380
49390
|
)
|
|
49381
49391
|
)
|
|
49382
|
-
), /* @__PURE__ */
|
|
49383
|
-
), selectedReactionType !== null && /* @__PURE__ */
|
|
49392
|
+
), /* @__PURE__ */ import_react224.default.createElement("li", null, /* @__PURE__ */ import_react224.default.createElement("span", { className: "str-chat__reaction-list--counter" }, totalReactionCount)))
|
|
49393
|
+
), selectedReactionType !== null && /* @__PURE__ */ import_react224.default.createElement(
|
|
49384
49394
|
ReactionsListModal2,
|
|
49385
49395
|
{
|
|
49386
49396
|
handleFetchReactions,
|
|
@@ -49393,12 +49403,12 @@ var UnMemoizedReactionsList = (props) => {
|
|
|
49393
49403
|
}
|
|
49394
49404
|
));
|
|
49395
49405
|
};
|
|
49396
|
-
var ReactionsList =
|
|
49406
|
+
var ReactionsList = import_react224.default.memo(
|
|
49397
49407
|
UnMemoizedReactionsList
|
|
49398
49408
|
);
|
|
49399
49409
|
|
|
49400
49410
|
// src/components/Reactions/SimpleReactionsList.tsx
|
|
49401
|
-
var
|
|
49411
|
+
var import_react225 = __toESM(require("react"));
|
|
49402
49412
|
var import_clsx58 = __toESM(require("clsx"));
|
|
49403
49413
|
var WithTooltip = ({
|
|
49404
49414
|
children,
|
|
@@ -49406,12 +49416,12 @@ var WithTooltip = ({
|
|
|
49406
49416
|
onMouseLeave,
|
|
49407
49417
|
title
|
|
49408
49418
|
}) => {
|
|
49409
|
-
const [referenceElement, setReferenceElement] = (0,
|
|
49419
|
+
const [referenceElement, setReferenceElement] = (0, import_react225.useState)(null);
|
|
49410
49420
|
const { handleEnter, handleLeave, tooltipVisible } = useEnterLeaveHandlers({
|
|
49411
49421
|
onMouseEnter,
|
|
49412
49422
|
onMouseLeave
|
|
49413
49423
|
});
|
|
49414
|
-
return /* @__PURE__ */
|
|
49424
|
+
return /* @__PURE__ */ import_react225.default.createElement(import_react225.default.Fragment, null, /* @__PURE__ */ import_react225.default.createElement(PopperTooltip, { referenceElement, visible: tooltipVisible }, title), /* @__PURE__ */ import_react225.default.createElement(
|
|
49415
49425
|
"span",
|
|
49416
49426
|
{
|
|
49417
49427
|
onMouseEnter: handleEnter,
|
|
@@ -49427,7 +49437,7 @@ var UnMemoizedSimpleReactionsList = (props) => {
|
|
|
49427
49437
|
const { existingReactions, hasReactions, totalReactionCount } = useProcessReactions(rest);
|
|
49428
49438
|
const handleReaction = propHandleReaction || contextHandleReaction;
|
|
49429
49439
|
if (!hasReactions) return null;
|
|
49430
|
-
return /* @__PURE__ */
|
|
49440
|
+
return /* @__PURE__ */ import_react225.default.createElement("div", { className: "str-chat__message-reactions-container" }, /* @__PURE__ */ import_react225.default.createElement(
|
|
49431
49441
|
"ul",
|
|
49432
49442
|
{
|
|
49433
49443
|
className: "str-chat__simple-reactions-list str-chat__message-reactions",
|
|
@@ -49436,7 +49446,7 @@ var UnMemoizedSimpleReactionsList = (props) => {
|
|
|
49436
49446
|
existingReactions.map(
|
|
49437
49447
|
({ EmojiComponent, isOwnReaction, latestReactedUserNames, reactionType }) => {
|
|
49438
49448
|
const tooltipContent = latestReactedUserNames.join(", ");
|
|
49439
|
-
return EmojiComponent && /* @__PURE__ */
|
|
49449
|
+
return EmojiComponent && /* @__PURE__ */ import_react225.default.createElement(
|
|
49440
49450
|
"li",
|
|
49441
49451
|
{
|
|
49442
49452
|
className: (0, import_clsx58.default)("str-chat__simple-reactions-list-item", {
|
|
@@ -49446,19 +49456,19 @@ var UnMemoizedSimpleReactionsList = (props) => {
|
|
|
49446
49456
|
onClick: (event) => handleReaction(reactionType, event),
|
|
49447
49457
|
onKeyUp: (event) => handleReaction(reactionType, event)
|
|
49448
49458
|
},
|
|
49449
|
-
/* @__PURE__ */
|
|
49459
|
+
/* @__PURE__ */ import_react225.default.createElement(WithTooltip, { title: tooltipContent }, /* @__PURE__ */ import_react225.default.createElement(EmojiComponent, null))
|
|
49450
49460
|
);
|
|
49451
49461
|
}
|
|
49452
49462
|
),
|
|
49453
|
-
/* @__PURE__ */
|
|
49463
|
+
/* @__PURE__ */ import_react225.default.createElement("li", { className: "str-chat__simple-reactions-list-item--last-number" }, totalReactionCount)
|
|
49454
49464
|
));
|
|
49455
49465
|
};
|
|
49456
|
-
var SimpleReactionsList =
|
|
49466
|
+
var SimpleReactionsList = import_react225.default.memo(
|
|
49457
49467
|
UnMemoizedSimpleReactionsList
|
|
49458
49468
|
);
|
|
49459
49469
|
|
|
49460
49470
|
// src/components/Message/MessageEditedTimestamp.tsx
|
|
49461
|
-
var
|
|
49471
|
+
var import_react226 = __toESM(require("react"));
|
|
49462
49472
|
var import_clsx59 = __toESM(require("clsx"));
|
|
49463
49473
|
function MessageEditedTimestamp({
|
|
49464
49474
|
message: propMessage,
|
|
@@ -49474,7 +49484,7 @@ function MessageEditedTimestamp({
|
|
|
49474
49484
|
if (!isMessageEdited(message)) {
|
|
49475
49485
|
return null;
|
|
49476
49486
|
}
|
|
49477
|
-
return /* @__PURE__ */
|
|
49487
|
+
return /* @__PURE__ */ import_react226.default.createElement(
|
|
49478
49488
|
"div",
|
|
49479
49489
|
{
|
|
49480
49490
|
className: (0, import_clsx59.default)(
|
|
@@ -49485,7 +49495,7 @@ function MessageEditedTimestamp({
|
|
|
49485
49495
|
},
|
|
49486
49496
|
t2("Edited"),
|
|
49487
49497
|
" ",
|
|
49488
|
-
/* @__PURE__ */
|
|
49498
|
+
/* @__PURE__ */ import_react226.default.createElement(Timestamp2, { timestamp: message.message_text_updated_at, ...timestampProps })
|
|
49489
49499
|
);
|
|
49490
49500
|
}
|
|
49491
49501
|
|
|
@@ -49512,8 +49522,8 @@ var MessageSimpleWithContext = (props) => {
|
|
|
49512
49522
|
} = props;
|
|
49513
49523
|
const { client } = useChatContext("MessageSimple");
|
|
49514
49524
|
const { t: t2 } = useTranslationContext("MessageSimple");
|
|
49515
|
-
const [isBounceDialogOpen, setIsBounceDialogOpen] = (0,
|
|
49516
|
-
const [isEditedTimestampOpen, setEditedTimestampOpen] = (0,
|
|
49525
|
+
const [isBounceDialogOpen, setIsBounceDialogOpen] = (0, import_react227.useState)(false);
|
|
49526
|
+
const [isEditedTimestampOpen, setEditedTimestampOpen] = (0, import_react227.useState)(false);
|
|
49517
49527
|
const {
|
|
49518
49528
|
Attachment: Attachment2 = Attachment,
|
|
49519
49529
|
Avatar: Avatar2 = Avatar,
|
|
@@ -49534,7 +49544,7 @@ var MessageSimpleWithContext = (props) => {
|
|
|
49534
49544
|
} = useComponentContext("MessageSimple");
|
|
49535
49545
|
const hasAttachment = messageHasAttachments(message);
|
|
49536
49546
|
const hasReactions = messageHasReactions(message);
|
|
49537
|
-
const isAIGenerated = (0,
|
|
49547
|
+
const isAIGenerated = (0, import_react227.useMemo)(
|
|
49538
49548
|
() => isMessageAIGenerated?.(message),
|
|
49539
49549
|
[isMessageAIGenerated, message]
|
|
49540
49550
|
);
|
|
@@ -49542,10 +49552,10 @@ var MessageSimpleWithContext = (props) => {
|
|
|
49542
49552
|
return null;
|
|
49543
49553
|
}
|
|
49544
49554
|
if (message.deleted_at || message.type === "deleted") {
|
|
49545
|
-
return /* @__PURE__ */
|
|
49555
|
+
return /* @__PURE__ */ import_react227.default.createElement(MessageDeleted2, { message });
|
|
49546
49556
|
}
|
|
49547
49557
|
if (isMessageBlocked(message)) {
|
|
49548
|
-
return /* @__PURE__ */
|
|
49558
|
+
return /* @__PURE__ */ import_react227.default.createElement(MessageBlocked2, null);
|
|
49549
49559
|
}
|
|
49550
49560
|
const showMetadata = !groupedByUser || endOfGroup;
|
|
49551
49561
|
const showReplyCountButton = !threadList && !!message.reply_count;
|
|
@@ -49579,14 +49589,14 @@ var MessageSimpleWithContext = (props) => {
|
|
|
49579
49589
|
}
|
|
49580
49590
|
);
|
|
49581
49591
|
const poll = message.poll_id && client.polls.fromState(message.poll_id);
|
|
49582
|
-
return /* @__PURE__ */
|
|
49592
|
+
return /* @__PURE__ */ import_react227.default.createElement(import_react227.default.Fragment, null, editing && /* @__PURE__ */ import_react227.default.createElement(
|
|
49583
49593
|
Modal,
|
|
49584
49594
|
{
|
|
49585
49595
|
className: "str-chat__edit-message-modal",
|
|
49586
49596
|
onClose: clearEditingState,
|
|
49587
49597
|
open: editing
|
|
49588
49598
|
},
|
|
49589
|
-
/* @__PURE__ */
|
|
49599
|
+
/* @__PURE__ */ import_react227.default.createElement(
|
|
49590
49600
|
MessageInput,
|
|
49591
49601
|
{
|
|
49592
49602
|
clearEditingState,
|
|
@@ -49597,14 +49607,14 @@ var MessageSimpleWithContext = (props) => {
|
|
|
49597
49607
|
...additionalMessageInputProps
|
|
49598
49608
|
}
|
|
49599
49609
|
)
|
|
49600
|
-
), isBounceDialogOpen && /* @__PURE__ */
|
|
49610
|
+
), isBounceDialogOpen && /* @__PURE__ */ import_react227.default.createElement(
|
|
49601
49611
|
MessageBounceModal,
|
|
49602
49612
|
{
|
|
49603
49613
|
MessageBouncePrompt: MessageBouncePrompt2,
|
|
49604
49614
|
onClose: () => setIsBounceDialogOpen(false),
|
|
49605
49615
|
open: isBounceDialogOpen
|
|
49606
49616
|
}
|
|
49607
|
-
), /* @__PURE__ */
|
|
49617
|
+
), /* @__PURE__ */ import_react227.default.createElement("div", { className: rootClassName2, key: message.id }, PinIndicator2 && /* @__PURE__ */ import_react227.default.createElement(PinIndicator2, null), message.user && /* @__PURE__ */ import_react227.default.createElement(
|
|
49608
49618
|
Avatar2,
|
|
49609
49619
|
{
|
|
49610
49620
|
image: message.user.image,
|
|
@@ -49613,7 +49623,7 @@ var MessageSimpleWithContext = (props) => {
|
|
|
49613
49623
|
onMouseOver: onUserHover,
|
|
49614
49624
|
user: message.user
|
|
49615
49625
|
}
|
|
49616
|
-
), /* @__PURE__ */
|
|
49626
|
+
), /* @__PURE__ */ import_react227.default.createElement(
|
|
49617
49627
|
"div",
|
|
49618
49628
|
{
|
|
49619
49629
|
className: (0, import_clsx60.default)("str-chat__message-inner", {
|
|
@@ -49623,37 +49633,37 @@ var MessageSimpleWithContext = (props) => {
|
|
|
49623
49633
|
onClick: handleClick,
|
|
49624
49634
|
onKeyUp: handleClick
|
|
49625
49635
|
},
|
|
49626
|
-
/* @__PURE__ */
|
|
49627
|
-
/* @__PURE__ */
|
|
49628
|
-
/* @__PURE__ */
|
|
49636
|
+
/* @__PURE__ */ import_react227.default.createElement(MessageActions2, null),
|
|
49637
|
+
/* @__PURE__ */ import_react227.default.createElement("div", { className: "str-chat__message-reactions-host" }, hasReactions && /* @__PURE__ */ import_react227.default.createElement(ReactionsList2, { reverse: true })),
|
|
49638
|
+
/* @__PURE__ */ import_react227.default.createElement("div", { className: "str-chat__message-bubble" }, poll && /* @__PURE__ */ import_react227.default.createElement(Poll, { poll }), message.attachments?.length && !message.quoted_message ? /* @__PURE__ */ import_react227.default.createElement(
|
|
49629
49639
|
Attachment2,
|
|
49630
49640
|
{
|
|
49631
49641
|
actionHandler: handleAction,
|
|
49632
49642
|
attachments: message.attachments
|
|
49633
49643
|
}
|
|
49634
|
-
) : null, isAIGenerated ? /* @__PURE__ */
|
|
49644
|
+
) : null, isAIGenerated ? /* @__PURE__ */ import_react227.default.createElement(StreamedMessageText2, { message, renderText: renderText2 }) : /* @__PURE__ */ import_react227.default.createElement(MessageText, { message, renderText: renderText2 }), message.mml && /* @__PURE__ */ import_react227.default.createElement(
|
|
49635
49645
|
MML3,
|
|
49636
49646
|
{
|
|
49637
49647
|
actionHandler: handleAction,
|
|
49638
49648
|
align: isMyMessage() ? "right" : "left",
|
|
49639
49649
|
source: message.mml
|
|
49640
49650
|
}
|
|
49641
|
-
), /* @__PURE__ */
|
|
49642
|
-
), showReplyCountButton && /* @__PURE__ */
|
|
49651
|
+
), /* @__PURE__ */ import_react227.default.createElement(MessageErrorIcon, null))
|
|
49652
|
+
), showReplyCountButton && /* @__PURE__ */ import_react227.default.createElement(
|
|
49643
49653
|
MessageRepliesCountButton2,
|
|
49644
49654
|
{
|
|
49645
49655
|
onClick: handleOpenThread,
|
|
49646
49656
|
reply_count: message.reply_count
|
|
49647
49657
|
}
|
|
49648
|
-
), showMetadata && /* @__PURE__ */
|
|
49658
|
+
), showMetadata && /* @__PURE__ */ import_react227.default.createElement("div", { className: "str-chat__message-metadata" }, /* @__PURE__ */ import_react227.default.createElement(MessageStatus2, null), !isMyMessage() && !!message.user && /* @__PURE__ */ import_react227.default.createElement("span", { className: "str-chat__message-simple-name" }, message.user.name || message.user.id), /* @__PURE__ */ import_react227.default.createElement(MessageTimestamp2, { customClass: "str-chat__message-simple-timestamp" }), isEdited && /* @__PURE__ */ import_react227.default.createElement("span", { className: "str-chat__mesage-simple-edited" }, t2("Edited")), isEdited && /* @__PURE__ */ import_react227.default.createElement(MessageEditedTimestamp, { calendar: true, open: isEditedTimestampOpen }))));
|
|
49649
49659
|
};
|
|
49650
|
-
var MemoizedMessageSimple =
|
|
49660
|
+
var MemoizedMessageSimple = import_react227.default.memo(
|
|
49651
49661
|
MessageSimpleWithContext,
|
|
49652
49662
|
areMessageUIPropsEqual
|
|
49653
49663
|
);
|
|
49654
49664
|
var MessageSimple = (props) => {
|
|
49655
49665
|
const messageContext = useMessageContext("MessageSimple");
|
|
49656
|
-
return /* @__PURE__ */
|
|
49666
|
+
return /* @__PURE__ */ import_react227.default.createElement(MemoizedMessageSimple, { ...messageContext, ...props });
|
|
49657
49667
|
};
|
|
49658
49668
|
|
|
49659
49669
|
// src/components/Message/Message.tsx
|
|
@@ -49689,11 +49699,11 @@ var MessageWithContext = (props) => {
|
|
|
49689
49699
|
canReply,
|
|
49690
49700
|
isMyMessage
|
|
49691
49701
|
} = userRoles;
|
|
49692
|
-
const messageIsUnread = (0,
|
|
49702
|
+
const messageIsUnread = (0, import_react228.useMemo)(
|
|
49693
49703
|
() => !!(!isMyMessage && client.user?.id && read && (!read[client.user.id] || message?.created_at && new Date(message.created_at).getTime() > read[client.user.id].last_read.getTime())),
|
|
49694
49704
|
[client, isMyMessage, message.created_at, read]
|
|
49695
49705
|
);
|
|
49696
|
-
const messageActionsHandler = (0,
|
|
49706
|
+
const messageActionsHandler = (0, import_react228.useCallback)(
|
|
49697
49707
|
() => getMessageActions(messageActions, {
|
|
49698
49708
|
canDelete,
|
|
49699
49709
|
canEdit,
|
|
@@ -49747,9 +49757,9 @@ var MessageWithContext = (props) => {
|
|
|
49747
49757
|
onUserHover,
|
|
49748
49758
|
setEditingState: setEdit
|
|
49749
49759
|
};
|
|
49750
|
-
return /* @__PURE__ */
|
|
49760
|
+
return /* @__PURE__ */ import_react228.default.createElement(MessageProvider, { value: messageContextValue }, /* @__PURE__ */ import_react228.default.createElement(MessageUIComponent, { groupedByUser }));
|
|
49751
49761
|
};
|
|
49752
|
-
var MemoizedMessage =
|
|
49762
|
+
var MemoizedMessage = import_react228.default.memo(
|
|
49753
49763
|
MessageWithContext,
|
|
49754
49764
|
areMessagePropsEqual
|
|
49755
49765
|
);
|
|
@@ -49816,7 +49826,7 @@ var Message = (props) => {
|
|
|
49816
49826
|
notify: addNotification
|
|
49817
49827
|
});
|
|
49818
49828
|
const highlighted = highlightedMessageId === message.id;
|
|
49819
|
-
return /* @__PURE__ */
|
|
49829
|
+
return /* @__PURE__ */ import_react228.default.createElement(
|
|
49820
49830
|
MemoizedMessage,
|
|
49821
49831
|
{
|
|
49822
49832
|
additionalMessageInputProps: props.additionalMessageInputProps,
|
|
@@ -49868,18 +49878,18 @@ var Message = (props) => {
|
|
|
49868
49878
|
// src/components/MessageList/GiphyPreviewMessage.tsx
|
|
49869
49879
|
var GiphyPreviewMessage = (props) => {
|
|
49870
49880
|
const { message } = props;
|
|
49871
|
-
return /* @__PURE__ */
|
|
49881
|
+
return /* @__PURE__ */ import_react229.default.createElement("div", { className: "giphy-preview-message" }, /* @__PURE__ */ import_react229.default.createElement(Message, { message }));
|
|
49872
49882
|
};
|
|
49873
49883
|
|
|
49874
49884
|
// src/components/MessageList/MessageList.tsx
|
|
49875
49885
|
var import_clsx62 = __toESM(require("clsx"));
|
|
49876
|
-
var
|
|
49886
|
+
var import_react248 = __toESM(require("react"));
|
|
49877
49887
|
|
|
49878
49888
|
// src/components/MessageList/hooks/MessageList/useEnrichedMessages.ts
|
|
49879
|
-
var
|
|
49889
|
+
var import_react230 = require("react");
|
|
49880
49890
|
|
|
49881
49891
|
// src/components/MessageList/utils.ts
|
|
49882
|
-
var
|
|
49892
|
+
var import_nanoid10 = require("nanoid");
|
|
49883
49893
|
var processMessages = (params) => {
|
|
49884
49894
|
const { messages, reviewProcessedMessage, setGiphyPreviewMessage, ...context } = params;
|
|
49885
49895
|
const {
|
|
@@ -49955,9 +49965,9 @@ var processMessages = (params) => {
|
|
|
49955
49965
|
var makeDateMessageId = (date) => {
|
|
49956
49966
|
let idSuffix;
|
|
49957
49967
|
try {
|
|
49958
|
-
idSuffix = !date ? (0,
|
|
49968
|
+
idSuffix = !date ? (0, import_nanoid10.nanoid)() : date instanceof Date ? date.toISOString() : date;
|
|
49959
49969
|
} catch (e2) {
|
|
49960
|
-
idSuffix = (0,
|
|
49970
|
+
idSuffix = (0, import_nanoid10.nanoid)();
|
|
49961
49971
|
}
|
|
49962
49972
|
return `${CUSTOM_MESSAGE_TYPE.date}-${idSuffix}`;
|
|
49963
49973
|
};
|
|
@@ -50083,7 +50093,7 @@ var useEnrichedMessages = (args) => {
|
|
|
50083
50093
|
} = args;
|
|
50084
50094
|
const { client } = useChatContext("useEnrichedMessages");
|
|
50085
50095
|
const { HeaderComponent } = useComponentContext("useEnrichedMessages");
|
|
50086
|
-
const lastRead = (0,
|
|
50096
|
+
const lastRead = (0, import_react230.useMemo)(() => channel.lastRead?.(), [channel]);
|
|
50087
50097
|
const enableDateSeparator = !disableDateSeparator;
|
|
50088
50098
|
let messagesWithDates = !enableDateSeparator && !hideDeletedMessages && hideNewMessageSeparator ? messages : processMessages({
|
|
50089
50099
|
enableDateSeparator,
|
|
@@ -50098,7 +50108,7 @@ var useEnrichedMessages = (args) => {
|
|
|
50098
50108
|
messagesWithDates = insertIntro(messagesWithDates, headerPosition);
|
|
50099
50109
|
}
|
|
50100
50110
|
const groupStylesFn = groupStyles || getGroupStyles;
|
|
50101
|
-
const messageGroupStyles = (0,
|
|
50111
|
+
const messageGroupStyles = (0, import_react230.useMemo)(
|
|
50102
50112
|
() => messagesWithDates.reduce((acc, message, i) => {
|
|
50103
50113
|
const style = groupStylesFn(
|
|
50104
50114
|
message,
|
|
@@ -50117,13 +50127,13 @@ var useEnrichedMessages = (args) => {
|
|
|
50117
50127
|
};
|
|
50118
50128
|
|
|
50119
50129
|
// src/components/MessageList/hooks/MessageList/useMessageListElements.tsx
|
|
50120
|
-
var
|
|
50130
|
+
var import_react232 = require("react");
|
|
50121
50131
|
|
|
50122
50132
|
// src/components/MessageList/hooks/useLastReadData.ts
|
|
50123
|
-
var
|
|
50133
|
+
var import_react231 = require("react");
|
|
50124
50134
|
var useLastReadData = (props) => {
|
|
50125
50135
|
const { messages, read, returnAllReadData, userID } = props;
|
|
50126
|
-
return (0,
|
|
50136
|
+
return (0, import_react231.useMemo)(
|
|
50127
50137
|
() => getReadStates(
|
|
50128
50138
|
messages.filter(({ user }) => user?.id === userID),
|
|
50129
50139
|
read,
|
|
@@ -50155,11 +50165,11 @@ var useMessageListElements = (props) => {
|
|
|
50155
50165
|
returnAllReadData,
|
|
50156
50166
|
userID: client.userID
|
|
50157
50167
|
});
|
|
50158
|
-
const lastReceivedMessageId = (0,
|
|
50168
|
+
const lastReceivedMessageId = (0, import_react232.useMemo)(
|
|
50159
50169
|
() => getLastReceived(enrichedMessages),
|
|
50160
50170
|
[enrichedMessages]
|
|
50161
50171
|
);
|
|
50162
|
-
const elements = (0,
|
|
50172
|
+
const elements = (0, import_react232.useMemo)(
|
|
50163
50173
|
() => renderMessages({
|
|
50164
50174
|
channelUnreadUiState,
|
|
50165
50175
|
components,
|
|
@@ -50186,7 +50196,7 @@ var useMessageListElements = (props) => {
|
|
|
50186
50196
|
};
|
|
50187
50197
|
|
|
50188
50198
|
// src/components/MessageList/hooks/MessageList/useMessageListScrollManager.ts
|
|
50189
|
-
var
|
|
50199
|
+
var import_react233 = require("react");
|
|
50190
50200
|
function useMessageListScrollManager(params) {
|
|
50191
50201
|
const {
|
|
50192
50202
|
loadMoreScrollThreshold,
|
|
@@ -50197,13 +50207,13 @@ function useMessageListScrollManager(params) {
|
|
|
50197
50207
|
showNewMessages
|
|
50198
50208
|
} = params;
|
|
50199
50209
|
const { client } = useChatContext("useMessageListScrollManager");
|
|
50200
|
-
const measures = (0,
|
|
50210
|
+
const measures = (0, import_react233.useRef)({
|
|
50201
50211
|
offsetHeight: 0,
|
|
50202
50212
|
scrollHeight: 0
|
|
50203
50213
|
});
|
|
50204
|
-
const messages = (0,
|
|
50205
|
-
const scrollTop = (0,
|
|
50206
|
-
(0,
|
|
50214
|
+
const messages = (0, import_react233.useRef)(void 0);
|
|
50215
|
+
const scrollTop = (0, import_react233.useRef)(0);
|
|
50216
|
+
(0, import_react233.useLayoutEffect)(() => {
|
|
50207
50217
|
const prevMeasures = measures.current;
|
|
50208
50218
|
const prevMessages = messages.current;
|
|
50209
50219
|
const newMessages = params.messages;
|
|
@@ -50243,7 +50253,7 @@ function useMessageListScrollManager(params) {
|
|
|
50243
50253
|
}
|
|
50244
50254
|
|
|
50245
50255
|
// src/components/MessageList/hooks/MessageList/useScrollLocationLogic.tsx
|
|
50246
|
-
var
|
|
50256
|
+
var import_react234 = require("react");
|
|
50247
50257
|
var useScrollLocationLogic = (params) => {
|
|
50248
50258
|
const {
|
|
50249
50259
|
hasMoreNewer,
|
|
@@ -50253,12 +50263,12 @@ var useScrollLocationLogic = (params) => {
|
|
|
50253
50263
|
scrolledUpThreshold = 200,
|
|
50254
50264
|
suppressAutoscroll
|
|
50255
50265
|
} = params;
|
|
50256
|
-
const [hasNewMessages, setHasNewMessages] = (0,
|
|
50257
|
-
const [wrapperRect, setWrapperRect] = (0,
|
|
50258
|
-
const [isMessageListScrolledToBottom, setIsMessageListScrolledToBottom] = (0,
|
|
50259
|
-
const closeToBottom = (0,
|
|
50260
|
-
const closeToTop = (0,
|
|
50261
|
-
const scrollToBottom = (0,
|
|
50266
|
+
const [hasNewMessages, setHasNewMessages] = (0, import_react234.useState)(false);
|
|
50267
|
+
const [wrapperRect, setWrapperRect] = (0, import_react234.useState)();
|
|
50268
|
+
const [isMessageListScrolledToBottom, setIsMessageListScrolledToBottom] = (0, import_react234.useState)(true);
|
|
50269
|
+
const closeToBottom = (0, import_react234.useRef)(false);
|
|
50270
|
+
const closeToTop = (0, import_react234.useRef)(false);
|
|
50271
|
+
const scrollToBottom = (0, import_react234.useCallback)(() => {
|
|
50262
50272
|
if (!listElement?.scrollTo || hasMoreNewer || suppressAutoscroll) {
|
|
50263
50273
|
return;
|
|
50264
50274
|
}
|
|
@@ -50267,7 +50277,7 @@ var useScrollLocationLogic = (params) => {
|
|
|
50267
50277
|
});
|
|
50268
50278
|
setHasNewMessages(false);
|
|
50269
50279
|
}, [listElement, hasMoreNewer, suppressAutoscroll]);
|
|
50270
|
-
(0,
|
|
50280
|
+
(0, import_react234.useLayoutEffect)(() => {
|
|
50271
50281
|
if (listElement) {
|
|
50272
50282
|
setWrapperRect(listElement.getBoundingClientRect());
|
|
50273
50283
|
scrollToBottom();
|
|
@@ -50287,7 +50297,7 @@ var useScrollLocationLogic = (params) => {
|
|
|
50287
50297
|
scrollToBottom,
|
|
50288
50298
|
showNewMessages: () => setHasNewMessages(true)
|
|
50289
50299
|
});
|
|
50290
|
-
const onScroll = (0,
|
|
50300
|
+
const onScroll = (0, import_react234.useCallback)(
|
|
50291
50301
|
(event) => {
|
|
50292
50302
|
const element4 = event.target;
|
|
50293
50303
|
const scrollTop = element4.scrollTop;
|
|
@@ -50318,22 +50328,22 @@ var useScrollLocationLogic = (params) => {
|
|
|
50318
50328
|
};
|
|
50319
50329
|
|
|
50320
50330
|
// src/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.ts
|
|
50321
|
-
var
|
|
50331
|
+
var import_react237 = require("react");
|
|
50322
50332
|
|
|
50323
50333
|
// src/components/MessageList/MessageListMainPanel.tsx
|
|
50324
|
-
var
|
|
50334
|
+
var import_react235 = __toESM(require("react"));
|
|
50325
50335
|
var MESSAGE_LIST_MAIN_PANEL_CLASS = "str-chat__main-panel-inner str-chat__message-list-main-panel";
|
|
50326
|
-
var MessageListMainPanel = ({ children }) => /* @__PURE__ */
|
|
50336
|
+
var MessageListMainPanel = ({ children }) => /* @__PURE__ */ import_react235.default.createElement("div", { className: MESSAGE_LIST_MAIN_PANEL_CLASS }, children);
|
|
50327
50337
|
|
|
50328
50338
|
// src/components/MessageList/UnreadMessagesSeparator.tsx
|
|
50329
|
-
var
|
|
50339
|
+
var import_react236 = __toESM(require("react"));
|
|
50330
50340
|
var UNREAD_MESSAGE_SEPARATOR_CLASS = "str-chat__unread-messages-separator";
|
|
50331
50341
|
var UnreadMessagesSeparator = ({
|
|
50332
50342
|
showCount,
|
|
50333
50343
|
unreadCount
|
|
50334
50344
|
}) => {
|
|
50335
50345
|
const { t: t2 } = useTranslationContext("UnreadMessagesSeparator");
|
|
50336
|
-
return /* @__PURE__ */
|
|
50346
|
+
return /* @__PURE__ */ import_react236.default.createElement(
|
|
50337
50347
|
"div",
|
|
50338
50348
|
{
|
|
50339
50349
|
className: UNREAD_MESSAGE_SEPARATOR_CLASS,
|
|
@@ -50359,10 +50369,10 @@ var useUnreadMessagesNotification = ({
|
|
|
50359
50369
|
unreadCount
|
|
50360
50370
|
}) => {
|
|
50361
50371
|
const { messages } = useChannelStateContext("UnreadMessagesNotification");
|
|
50362
|
-
const [show, setShow] = (0,
|
|
50363
|
-
const isScrolledAboveTargetTop = (0,
|
|
50372
|
+
const [show, setShow] = (0, import_react237.useState)(false);
|
|
50373
|
+
const isScrolledAboveTargetTop = (0, import_react237.useRef)(false);
|
|
50364
50374
|
const intersectionObserverIsSupported = typeof IntersectionObserver !== "undefined";
|
|
50365
|
-
(0,
|
|
50375
|
+
(0, import_react237.useEffect)(() => {
|
|
50366
50376
|
if (!(unreadCount && intersectionObserverIsSupported)) {
|
|
50367
50377
|
setShow(false);
|
|
50368
50378
|
return;
|
|
@@ -50409,7 +50419,7 @@ var useUnreadMessagesNotification = ({
|
|
|
50409
50419
|
showAlways,
|
|
50410
50420
|
unreadCount
|
|
50411
50421
|
]);
|
|
50412
|
-
(0,
|
|
50422
|
+
(0, import_react237.useEffect)(() => {
|
|
50413
50423
|
if (unreadCount && isMessageListScrolledToBottom && isScrolledAboveTargetTop.current) {
|
|
50414
50424
|
setShow(true);
|
|
50415
50425
|
isScrolledAboveTargetTop.current = false;
|
|
@@ -50419,7 +50429,7 @@ var useUnreadMessagesNotification = ({
|
|
|
50419
50429
|
};
|
|
50420
50430
|
|
|
50421
50431
|
// src/components/MessageList/hooks/useMarkRead.ts
|
|
50422
|
-
var
|
|
50432
|
+
var import_react238 = require("react");
|
|
50423
50433
|
var hasReadLastMessage = (channel, userId) => {
|
|
50424
50434
|
const latestMessageIdInChannel = channel.state.latestMessages.slice(-1)[0]?.id;
|
|
50425
50435
|
const lastReadMessageIdServer = channel.state.read[userId]?.last_read_message_id;
|
|
@@ -50433,7 +50443,7 @@ var useMarkRead = ({
|
|
|
50433
50443
|
const { client } = useChatContext("useMarkRead");
|
|
50434
50444
|
const { markRead, setChannelUnreadUiState } = useChannelActionContext("useMarkRead");
|
|
50435
50445
|
const { channel } = useChannelStateContext("useMarkRead");
|
|
50436
|
-
(0,
|
|
50446
|
+
(0, import_react238.useEffect)(() => {
|
|
50437
50447
|
const shouldMarkRead = () => !document.hidden && !wasMarkedUnread && !messageListIsThread && isMessageListScrolledToBottom && client.user?.id && !hasReadLastMessage(channel, client.user.id);
|
|
50438
50448
|
const onVisibilityChange = () => {
|
|
50439
50449
|
if (shouldMarkRead()) markRead();
|
|
@@ -50492,11 +50502,11 @@ function getPreviousLastMessage(messages, newMessage) {
|
|
|
50492
50502
|
}
|
|
50493
50503
|
|
|
50494
50504
|
// src/components/MessageList/MessageNotification.tsx
|
|
50495
|
-
var
|
|
50505
|
+
var import_react239 = __toESM(require("react"));
|
|
50496
50506
|
var UnMemoizedMessageNotification = (props) => {
|
|
50497
50507
|
const { children, onClick, showNotification = true } = props;
|
|
50498
50508
|
if (!showNotification) return null;
|
|
50499
|
-
return /* @__PURE__ */
|
|
50509
|
+
return /* @__PURE__ */ import_react239.default.createElement(
|
|
50500
50510
|
"button",
|
|
50501
50511
|
{
|
|
50502
50512
|
"aria-live": "polite",
|
|
@@ -50507,12 +50517,12 @@ var UnMemoizedMessageNotification = (props) => {
|
|
|
50507
50517
|
children
|
|
50508
50518
|
);
|
|
50509
50519
|
};
|
|
50510
|
-
var MessageNotification =
|
|
50520
|
+
var MessageNotification = import_react239.default.memo(
|
|
50511
50521
|
UnMemoizedMessageNotification
|
|
50512
50522
|
);
|
|
50513
50523
|
|
|
50514
50524
|
// src/components/MessageList/MessageListNotifications.tsx
|
|
50515
|
-
var
|
|
50525
|
+
var import_react240 = __toESM(require("react"));
|
|
50516
50526
|
var MessageListNotifications = (props) => {
|
|
50517
50527
|
const {
|
|
50518
50528
|
hasNewMessages,
|
|
@@ -50525,7 +50535,7 @@ var MessageListNotifications = (props) => {
|
|
|
50525
50535
|
unreadCount
|
|
50526
50536
|
} = props;
|
|
50527
50537
|
const { t: t2 } = useTranslationContext("MessageListNotifications");
|
|
50528
|
-
return /* @__PURE__ */
|
|
50538
|
+
return /* @__PURE__ */ import_react240.default.createElement("div", { className: "str-chat__list-notifications" }, notifications.map((notification) => /* @__PURE__ */ import_react240.default.createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)), /* @__PURE__ */ import_react240.default.createElement(ConnectionStatus, null), /* @__PURE__ */ import_react240.default.createElement(
|
|
50529
50539
|
MessageNotification2,
|
|
50530
50540
|
{
|
|
50531
50541
|
isMessageListScrolledToBottom,
|
|
@@ -50539,11 +50549,11 @@ var MessageListNotifications = (props) => {
|
|
|
50539
50549
|
};
|
|
50540
50550
|
|
|
50541
50551
|
// src/components/MessageList/UnreadMessagesNotification.tsx
|
|
50542
|
-
var
|
|
50552
|
+
var import_react242 = __toESM(require("react"));
|
|
50543
50553
|
|
|
50544
50554
|
// src/components/MessageList/icons.tsx
|
|
50545
|
-
var
|
|
50546
|
-
var ArrowDown = ({ className, color: color2 }) => /* @__PURE__ */
|
|
50555
|
+
var import_react241 = __toESM(require("react"));
|
|
50556
|
+
var ArrowDown = ({ className, color: color2 }) => /* @__PURE__ */ import_react241.default.createElement(
|
|
50547
50557
|
"svg",
|
|
50548
50558
|
{
|
|
50549
50559
|
className,
|
|
@@ -50554,7 +50564,7 @@ var ArrowDown = ({ className, color: color2 }) => /* @__PURE__ */ import_react24
|
|
|
50554
50564
|
width: "24",
|
|
50555
50565
|
xmlns: "http://www.w3.org/2000/svg"
|
|
50556
50566
|
},
|
|
50557
|
-
/* @__PURE__ */
|
|
50567
|
+
/* @__PURE__ */ import_react241.default.createElement(
|
|
50558
50568
|
"path",
|
|
50559
50569
|
{
|
|
50560
50570
|
d: "M7.41 8.29504L12 12.875L16.59 8.29504L18 9.70504L12 15.705L6 9.70504L7.41 8.29504Z",
|
|
@@ -50562,7 +50572,7 @@ var ArrowDown = ({ className, color: color2 }) => /* @__PURE__ */ import_react24
|
|
|
50562
50572
|
}
|
|
50563
50573
|
)
|
|
50564
50574
|
);
|
|
50565
|
-
var CloseIcon2 = () => /* @__PURE__ */
|
|
50575
|
+
var CloseIcon2 = () => /* @__PURE__ */ import_react241.default.createElement("svg", { fill: "currentColor", viewBox: "0 0 14 13", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react241.default.createElement("path", { d: "M1.32227 12.3408C0.944336 11.9629 0.953125 11.3213 1.32227 10.9521L5.60254 6.66309L1.32227 2.38281C0.953125 2.01367 0.944336 1.37207 1.32227 0.994141C1.7002 0.616211 2.3418 0.625 2.71094 0.985352L7 5.27441L11.2803 0.994141C11.6494 0.625 12.291 0.616211 12.6689 0.994141C13.0469 1.37207 13.0381 2.01367 12.6689 2.38281L8.38867 6.66309L12.6689 10.9521C13.0381 11.3213 13.0469 11.9629 12.6689 12.3408C12.291 12.7188 11.6494 12.71 11.2803 12.3408L7 8.06055L2.71094 12.3408C2.3418 12.71 1.7002 12.7188 1.32227 12.3408Z" }));
|
|
50566
50576
|
|
|
50567
50577
|
// src/components/MessageList/UnreadMessagesNotification.tsx
|
|
50568
50578
|
var UnreadMessagesNotification = ({
|
|
@@ -50574,19 +50584,19 @@ var UnreadMessagesNotification = ({
|
|
|
50574
50584
|
"UnreadMessagesNotification"
|
|
50575
50585
|
);
|
|
50576
50586
|
const { t: t2 } = useTranslationContext("UnreadMessagesNotification");
|
|
50577
|
-
return /* @__PURE__ */
|
|
50587
|
+
return /* @__PURE__ */ import_react242.default.createElement(
|
|
50578
50588
|
"div",
|
|
50579
50589
|
{
|
|
50580
50590
|
className: "str-chat__unread-messages-notification",
|
|
50581
50591
|
"data-testid": "unread-messages-notification"
|
|
50582
50592
|
},
|
|
50583
|
-
/* @__PURE__ */
|
|
50584
|
-
/* @__PURE__ */
|
|
50593
|
+
/* @__PURE__ */ import_react242.default.createElement("button", { onClick: () => jumpToFirstUnreadMessage(queryMessageLimit) }, unreadCount && showCount ? t2("{{count}} unread", { count: unreadCount ?? 0 }) : t2("Unread messages")),
|
|
50594
|
+
/* @__PURE__ */ import_react242.default.createElement("button", { onClick: () => markRead() }, /* @__PURE__ */ import_react242.default.createElement(CloseIcon2, null))
|
|
50585
50595
|
);
|
|
50586
50596
|
};
|
|
50587
50597
|
|
|
50588
50598
|
// src/components/InfiniteScrollPaginator/InfiniteScroll.tsx
|
|
50589
|
-
var
|
|
50599
|
+
var import_react243 = __toESM(require("react"));
|
|
50590
50600
|
var mousewheelListener2 = (event) => {
|
|
50591
50601
|
if (event instanceof WheelEvent && event.deltaY === 1) {
|
|
50592
50602
|
event.preventDefault();
|
|
@@ -50617,10 +50627,10 @@ var InfiniteScroll = (props) => {
|
|
|
50617
50627
|
const loadPreviousPageFn = loadPreviousPage || loadMore;
|
|
50618
50628
|
const hasNextPageFlag = hasNextPage || hasMoreNewer;
|
|
50619
50629
|
const hasPreviousPageFlag = hasPreviousPage || hasMore;
|
|
50620
|
-
const scrollComponent = (0,
|
|
50621
|
-
const previousOffset = (0,
|
|
50622
|
-
const previousReverseOffset = (0,
|
|
50623
|
-
const scrollListenerRef = (0,
|
|
50630
|
+
const scrollComponent = (0, import_react243.useRef)(void 0);
|
|
50631
|
+
const previousOffset = (0, import_react243.useRef)(void 0);
|
|
50632
|
+
const previousReverseOffset = (0, import_react243.useRef)(void 0);
|
|
50633
|
+
const scrollListenerRef = (0, import_react243.useRef)(void 0);
|
|
50624
50634
|
scrollListenerRef.current = () => {
|
|
50625
50635
|
const element5 = scrollComponent.current;
|
|
50626
50636
|
if (!element5 || element5.offsetParent === null) {
|
|
@@ -50644,7 +50654,7 @@ var InfiniteScroll = (props) => {
|
|
|
50644
50654
|
loadNextPageFn();
|
|
50645
50655
|
}
|
|
50646
50656
|
};
|
|
50647
|
-
(0,
|
|
50657
|
+
(0, import_react243.useEffect)(() => {
|
|
50648
50658
|
deprecationAndReplacementWarning(
|
|
50649
50659
|
[
|
|
50650
50660
|
[{ hasMoreNewer }, { hasNextPage }],
|
|
@@ -50655,7 +50665,7 @@ var InfiniteScroll = (props) => {
|
|
|
50655
50665
|
"InfiniteScroll"
|
|
50656
50666
|
);
|
|
50657
50667
|
}, []);
|
|
50658
|
-
(0,
|
|
50668
|
+
(0, import_react243.useEffect)(() => {
|
|
50659
50669
|
const scrollElement = scrollComponent.current?.parentNode;
|
|
50660
50670
|
if (!scrollElement) return;
|
|
50661
50671
|
const scrollListener = () => scrollListenerRef.current?.();
|
|
@@ -50667,7 +50677,7 @@ var InfiniteScroll = (props) => {
|
|
|
50667
50677
|
scrollElement.removeEventListener("resize", scrollListener, useCapture);
|
|
50668
50678
|
};
|
|
50669
50679
|
}, [initialLoad, useCapture]);
|
|
50670
|
-
(0,
|
|
50680
|
+
(0, import_react243.useEffect)(() => {
|
|
50671
50681
|
const scrollElement = scrollComponent.current?.parentNode;
|
|
50672
50682
|
if (scrollElement) {
|
|
50673
50683
|
scrollElement.addEventListener("wheel", mousewheelListener2, { passive: false });
|
|
@@ -50688,11 +50698,11 @@ var InfiniteScroll = (props) => {
|
|
|
50688
50698
|
if (head) {
|
|
50689
50699
|
childrenArray.unshift(head);
|
|
50690
50700
|
}
|
|
50691
|
-
return
|
|
50701
|
+
return import_react243.default.createElement(element4, attributes, childrenArray);
|
|
50692
50702
|
};
|
|
50693
50703
|
|
|
50694
50704
|
// src/components/TypingIndicator/TypingIndicator.tsx
|
|
50695
|
-
var
|
|
50705
|
+
var import_react244 = __toESM(require("react"));
|
|
50696
50706
|
var import_clsx61 = __toESM(require("clsx"));
|
|
50697
50707
|
var useJoinTypingUsers = (names) => {
|
|
50698
50708
|
const { t: t2 } = useTranslationContext();
|
|
@@ -50730,7 +50740,7 @@ var UnMemoizedTypingIndicator = (props) => {
|
|
|
50730
50740
|
return null;
|
|
50731
50741
|
}
|
|
50732
50742
|
if (!isTypingActive) return null;
|
|
50733
|
-
return /* @__PURE__ */
|
|
50743
|
+
return /* @__PURE__ */ import_react244.default.createElement(
|
|
50734
50744
|
"div",
|
|
50735
50745
|
{
|
|
50736
50746
|
className: (0, import_clsx61.default)("str-chat__typing-indicator", {
|
|
@@ -50738,19 +50748,19 @@ var UnMemoizedTypingIndicator = (props) => {
|
|
|
50738
50748
|
}),
|
|
50739
50749
|
"data-testid": "typing-indicator"
|
|
50740
50750
|
},
|
|
50741
|
-
/* @__PURE__ */
|
|
50742
|
-
/* @__PURE__ */
|
|
50751
|
+
/* @__PURE__ */ import_react244.default.createElement("div", { className: "str-chat__typing-indicator__dots" }, /* @__PURE__ */ import_react244.default.createElement("span", { className: "str-chat__typing-indicator__dot" }), /* @__PURE__ */ import_react244.default.createElement("span", { className: "str-chat__typing-indicator__dot" }), /* @__PURE__ */ import_react244.default.createElement("span", { className: "str-chat__typing-indicator__dot" })),
|
|
50752
|
+
/* @__PURE__ */ import_react244.default.createElement("div", { className: "str-chat__typing-indicator__users", "data-testid": "typing-users" }, joinedTypingUsers)
|
|
50743
50753
|
);
|
|
50744
50754
|
};
|
|
50745
|
-
var TypingIndicator =
|
|
50755
|
+
var TypingIndicator = import_react244.default.memo(
|
|
50746
50756
|
UnMemoizedTypingIndicator
|
|
50747
50757
|
);
|
|
50748
50758
|
|
|
50749
50759
|
// src/components/MessageList/renderMessages.tsx
|
|
50750
|
-
var
|
|
50760
|
+
var import_react247 = __toESM(require("react"));
|
|
50751
50761
|
|
|
50752
50762
|
// src/components/DateSeparator/DateSeparator.tsx
|
|
50753
|
-
var
|
|
50763
|
+
var import_react245 = __toESM(require("react"));
|
|
50754
50764
|
var UnMemoizedDateSeparator = (props) => {
|
|
50755
50765
|
const {
|
|
50756
50766
|
calendar: calendar3,
|
|
@@ -50770,21 +50780,21 @@ var UnMemoizedDateSeparator = (props) => {
|
|
|
50770
50780
|
tDateTimeParser,
|
|
50771
50781
|
timestampTranslationKey: "timestamp/DateSeparator"
|
|
50772
50782
|
});
|
|
50773
|
-
return /* @__PURE__ */
|
|
50783
|
+
return /* @__PURE__ */ import_react245.default.createElement("div", { className: "str-chat__date-separator", "data-testid": "date-separator" }, (position4 === "right" || position4 === "center") && /* @__PURE__ */ import_react245.default.createElement("hr", { className: "str-chat__date-separator-line" }), /* @__PURE__ */ import_react245.default.createElement("div", { className: "str-chat__date-separator-date" }, unread ? `${t2("New")} - ${formattedDate}` : formattedDate), (position4 === "left" || position4 === "center") && /* @__PURE__ */ import_react245.default.createElement("hr", { className: "str-chat__date-separator-line" }));
|
|
50774
50784
|
};
|
|
50775
|
-
var DateSeparator =
|
|
50785
|
+
var DateSeparator = import_react245.default.memo(
|
|
50776
50786
|
UnMemoizedDateSeparator
|
|
50777
50787
|
);
|
|
50778
50788
|
|
|
50779
50789
|
// src/components/EventComponent/EventComponent.tsx
|
|
50780
|
-
var
|
|
50790
|
+
var import_react246 = __toESM(require("react"));
|
|
50781
50791
|
var UnMemoizedEventComponent = (props) => {
|
|
50782
50792
|
const { Avatar: Avatar2 = Avatar, calendar: calendar3, calendarFormats, format, message } = props;
|
|
50783
50793
|
const { t: t2, tDateTimeParser } = useTranslationContext("EventComponent");
|
|
50784
50794
|
const { created_at = "", event, text: text8, type } = message;
|
|
50785
50795
|
const getDateOptions = { messageCreatedAt: created_at.toString(), tDateTimeParser };
|
|
50786
50796
|
if (type === "system")
|
|
50787
|
-
return /* @__PURE__ */
|
|
50797
|
+
return /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__message--system", "data-testid": "message-system" }, /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__message--system__text" }, /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__message--system__line" }), /* @__PURE__ */ import_react246.default.createElement("p", null, text8), /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__message--system__line" })), /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__message--system__date" }, /* @__PURE__ */ import_react246.default.createElement("strong", null, getDateString({
|
|
50788
50798
|
...getDateOptions,
|
|
50789
50799
|
calendar: calendar3,
|
|
50790
50800
|
calendarFormats,
|
|
@@ -50795,11 +50805,11 @@ var UnMemoizedEventComponent = (props) => {
|
|
|
50795
50805
|
if (event?.type === "member.removed" || event?.type === "member.added") {
|
|
50796
50806
|
const name2 = event.user?.name || event.user?.id;
|
|
50797
50807
|
const sentence = `${name2} ${event.type === "member.added" ? "has joined the chat" : "was removed from the chat"}`;
|
|
50798
|
-
return /* @__PURE__ */
|
|
50808
|
+
return /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__event-component__channel-event" }, /* @__PURE__ */ import_react246.default.createElement(Avatar2, { image: event.user?.image, name: name2, user: event.user }), /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__event-component__channel-event__content" }, /* @__PURE__ */ import_react246.default.createElement("em", { className: "str-chat__event-component__channel-event__sentence" }, sentence), /* @__PURE__ */ import_react246.default.createElement("div", { className: "str-chat__event-component__channel-event__date" }, getDateString({ ...getDateOptions, format: "LT" }))));
|
|
50799
50809
|
}
|
|
50800
50810
|
return null;
|
|
50801
50811
|
};
|
|
50802
|
-
var EventComponent =
|
|
50812
|
+
var EventComponent = import_react246.default.memo(
|
|
50803
50813
|
UnMemoizedEventComponent
|
|
50804
50814
|
);
|
|
50805
50815
|
|
|
@@ -50827,7 +50837,7 @@ function defaultRenderMessages({
|
|
|
50827
50837
|
const message = messages[index3];
|
|
50828
50838
|
if (isDateSeparatorMessage(message)) {
|
|
50829
50839
|
renderedMessages.push(
|
|
50830
|
-
/* @__PURE__ */
|
|
50840
|
+
/* @__PURE__ */ import_react247.default.createElement("li", { key: `${message.date.toISOString()}-i` }, /* @__PURE__ */ import_react247.default.createElement(
|
|
50831
50841
|
DateSeparator2,
|
|
50832
50842
|
{
|
|
50833
50843
|
date: message.date,
|
|
@@ -50838,17 +50848,17 @@ function defaultRenderMessages({
|
|
|
50838
50848
|
);
|
|
50839
50849
|
} else if (message.customType === CUSTOM_MESSAGE_TYPE.intro && HeaderComponent) {
|
|
50840
50850
|
renderedMessages.push(
|
|
50841
|
-
/* @__PURE__ */
|
|
50851
|
+
/* @__PURE__ */ import_react247.default.createElement("li", { key: "intro" }, /* @__PURE__ */ import_react247.default.createElement(HeaderComponent, null))
|
|
50842
50852
|
);
|
|
50843
50853
|
} else if (message.type === "system") {
|
|
50844
50854
|
renderedMessages.push(
|
|
50845
|
-
/* @__PURE__ */
|
|
50855
|
+
/* @__PURE__ */ import_react247.default.createElement(
|
|
50846
50856
|
"li",
|
|
50847
50857
|
{
|
|
50848
50858
|
"data-message-id": message.id,
|
|
50849
50859
|
key: message.id || message.created_at
|
|
50850
50860
|
},
|
|
50851
|
-
/* @__PURE__ */
|
|
50861
|
+
/* @__PURE__ */ import_react247.default.createElement(MessageSystem, { message })
|
|
50852
50862
|
)
|
|
50853
50863
|
);
|
|
50854
50864
|
} else {
|
|
@@ -50867,19 +50877,19 @@ function defaultRenderMessages({
|
|
|
50867
50877
|
unreadMessageCount: channelUnreadUiState?.unread_messages
|
|
50868
50878
|
});
|
|
50869
50879
|
renderedMessages.push(
|
|
50870
|
-
/* @__PURE__ */
|
|
50880
|
+
/* @__PURE__ */ import_react247.default.createElement(import_react247.Fragment, { key: message.id || message.created_at }, isFirstUnreadMessage && UnreadMessagesSeparator2 && /* @__PURE__ */ import_react247.default.createElement("li", { className: "str-chat__li str-chat__unread-messages-separator-wrapper" }, /* @__PURE__ */ import_react247.default.createElement(
|
|
50871
50881
|
UnreadMessagesSeparator2,
|
|
50872
50882
|
{
|
|
50873
50883
|
unreadCount: channelUnreadUiState?.unread_messages
|
|
50874
50884
|
}
|
|
50875
|
-
)), /* @__PURE__ */
|
|
50885
|
+
)), /* @__PURE__ */ import_react247.default.createElement(
|
|
50876
50886
|
"li",
|
|
50877
50887
|
{
|
|
50878
50888
|
className: messageClass,
|
|
50879
50889
|
"data-message-id": message.id,
|
|
50880
50890
|
"data-testid": messageClass
|
|
50881
50891
|
},
|
|
50882
|
-
/* @__PURE__ */
|
|
50892
|
+
/* @__PURE__ */ import_react247.default.createElement(
|
|
50883
50893
|
Message,
|
|
50884
50894
|
{
|
|
50885
50895
|
groupStyles: [groupStyles],
|
|
@@ -50936,8 +50946,8 @@ var MessageListWithContext = (props) => {
|
|
|
50936
50946
|
threadList = false,
|
|
50937
50947
|
unsafeHTML = false
|
|
50938
50948
|
} = props;
|
|
50939
|
-
const [listElement, setListElement] =
|
|
50940
|
-
const [ulElement, setUlElement] =
|
|
50949
|
+
const [listElement, setListElement] = import_react248.default.useState(null);
|
|
50950
|
+
const [ulElement, setUlElement] = import_react248.default.useState(null);
|
|
50941
50951
|
const { customClasses } = useChatContext("MessageList");
|
|
50942
50952
|
const {
|
|
50943
50953
|
EmptyStateIndicator: EmptyStateIndicator2 = EmptyStateIndicator,
|
|
@@ -51025,24 +51035,24 @@ var MessageListWithContext = (props) => {
|
|
|
51025
51035
|
threadList
|
|
51026
51036
|
});
|
|
51027
51037
|
const messageListClass = customClasses?.messageList || "str-chat__list";
|
|
51028
|
-
const loadMore =
|
|
51038
|
+
const loadMore = import_react248.default.useCallback(() => {
|
|
51029
51039
|
if (loadMoreCallback) {
|
|
51030
51040
|
loadMoreCallback(messageLimit);
|
|
51031
51041
|
}
|
|
51032
51042
|
}, [loadMoreCallback, messageLimit]);
|
|
51033
|
-
const loadMoreNewer =
|
|
51043
|
+
const loadMoreNewer = import_react248.default.useCallback(() => {
|
|
51034
51044
|
if (loadMoreNewerCallback) {
|
|
51035
51045
|
loadMoreNewerCallback(messageLimit);
|
|
51036
51046
|
}
|
|
51037
51047
|
}, [loadMoreNewerCallback, messageLimit]);
|
|
51038
|
-
const scrollToBottomFromNotification =
|
|
51048
|
+
const scrollToBottomFromNotification = import_react248.default.useCallback(async () => {
|
|
51039
51049
|
if (hasMoreNewer) {
|
|
51040
51050
|
await jumpToLatestMessage();
|
|
51041
51051
|
} else {
|
|
51042
51052
|
scrollToBottom();
|
|
51043
51053
|
}
|
|
51044
51054
|
}, [scrollToBottom, hasMoreNewer]);
|
|
51045
|
-
|
|
51055
|
+
import_react248.default.useLayoutEffect(() => {
|
|
51046
51056
|
if (highlightedMessageId) {
|
|
51047
51057
|
const element4 = ulElement?.querySelector(
|
|
51048
51058
|
`[data-message-id='${highlightedMessageId}']`
|
|
@@ -51050,14 +51060,15 @@ var MessageListWithContext = (props) => {
|
|
|
51050
51060
|
element4?.scrollIntoView({ block: "center" });
|
|
51051
51061
|
}
|
|
51052
51062
|
}, [highlightedMessageId]);
|
|
51063
|
+
const id = useStableId();
|
|
51053
51064
|
const showEmptyStateIndicator = elements.length === 0 && !threadList;
|
|
51054
|
-
const dialogManagerId = threadList ?
|
|
51055
|
-
return /* @__PURE__ */
|
|
51065
|
+
const dialogManagerId = threadList ? `message-list-dialog-manager-thread-${id}` : `message-list-dialog-manager-${id}`;
|
|
51066
|
+
return /* @__PURE__ */ import_react248.default.createElement(MessageListContextProvider, { value: { listElement, scrollToBottom } }, /* @__PURE__ */ import_react248.default.createElement(MessageListMainPanel2, null, /* @__PURE__ */ import_react248.default.createElement(DialogManagerProvider, { id: dialogManagerId }, !threadList && showUnreadMessagesNotification && /* @__PURE__ */ import_react248.default.createElement(
|
|
51056
51067
|
UnreadMessagesNotification2,
|
|
51057
51068
|
{
|
|
51058
51069
|
unreadCount: channelUnreadUiState?.unread_messages
|
|
51059
51070
|
}
|
|
51060
|
-
), /* @__PURE__ */
|
|
51071
|
+
), /* @__PURE__ */ import_react248.default.createElement(
|
|
51061
51072
|
"div",
|
|
51062
51073
|
{
|
|
51063
51074
|
className: (0, import_clsx62.default)(messageListClass, customClasses?.threadList),
|
|
@@ -51065,7 +51076,7 @@ var MessageListWithContext = (props) => {
|
|
|
51065
51076
|
ref: setListElement,
|
|
51066
51077
|
tabIndex: 0
|
|
51067
51078
|
},
|
|
51068
|
-
showEmptyStateIndicator ? /* @__PURE__ */
|
|
51079
|
+
showEmptyStateIndicator ? /* @__PURE__ */ import_react248.default.createElement(EmptyStateIndicator2, { listType: threadList ? "thread" : "message" }) : /* @__PURE__ */ import_react248.default.createElement(
|
|
51069
51080
|
InfiniteScroll,
|
|
51070
51081
|
{
|
|
51071
51082
|
className: "str-chat__message-list-scroll",
|
|
@@ -51074,17 +51085,17 @@ var MessageListWithContext = (props) => {
|
|
|
51074
51085
|
hasPreviousPage: props.hasMore,
|
|
51075
51086
|
head: props.head,
|
|
51076
51087
|
isLoading: props.loadingMore,
|
|
51077
|
-
loader: /* @__PURE__ */
|
|
51088
|
+
loader: /* @__PURE__ */ import_react248.default.createElement("div", { className: "str-chat__list__loading", key: "loading-indicator" }, props.loadingMore && /* @__PURE__ */ import_react248.default.createElement(LoadingIndicator2, { size: 20 })),
|
|
51078
51089
|
loadNextPage: loadMoreNewer,
|
|
51079
51090
|
loadPreviousPage: loadMore,
|
|
51080
51091
|
threshold: loadMoreScrollThreshold,
|
|
51081
51092
|
...restInternalInfiniteScrollProps
|
|
51082
51093
|
},
|
|
51083
|
-
/* @__PURE__ */
|
|
51084
|
-
/* @__PURE__ */
|
|
51085
|
-
/* @__PURE__ */
|
|
51094
|
+
/* @__PURE__ */ import_react248.default.createElement("ul", { className: "str-chat__ul", ref: setUlElement }, elements),
|
|
51095
|
+
/* @__PURE__ */ import_react248.default.createElement(TypingIndicator2, { threadList }),
|
|
51096
|
+
/* @__PURE__ */ import_react248.default.createElement("div", { key: "bottom" })
|
|
51086
51097
|
)
|
|
51087
|
-
))), /* @__PURE__ */
|
|
51098
|
+
))), /* @__PURE__ */ import_react248.default.createElement(
|
|
51088
51099
|
MessageListNotifications2,
|
|
51089
51100
|
{
|
|
51090
51101
|
hasNewMessages,
|
|
@@ -51109,7 +51120,7 @@ var MessageList = (props) => {
|
|
|
51109
51120
|
// eslint-disable-line @typescript-eslint/no-unused-vars
|
|
51110
51121
|
...restChannelStateContext
|
|
51111
51122
|
} = useChannelStateContext("MessageList");
|
|
51112
|
-
return /* @__PURE__ */
|
|
51123
|
+
return /* @__PURE__ */ import_react248.default.createElement(
|
|
51113
51124
|
MessageListWithContext,
|
|
51114
51125
|
{
|
|
51115
51126
|
jumpToLatestMessage,
|
|
@@ -51122,16 +51133,16 @@ var MessageList = (props) => {
|
|
|
51122
51133
|
};
|
|
51123
51134
|
|
|
51124
51135
|
// src/components/MessageList/ScrollToBottomButton.tsx
|
|
51125
|
-
var
|
|
51136
|
+
var import_react249 = __toESM(require("react"));
|
|
51126
51137
|
var import_clsx63 = __toESM(require("clsx"));
|
|
51127
51138
|
var UnMemoizedScrollToBottomButton = (props) => {
|
|
51128
51139
|
const { isMessageListScrolledToBottom, onClick, threadList } = props;
|
|
51129
51140
|
const { channel: activeChannel, client } = useChatContext();
|
|
51130
51141
|
const { thread } = useChannelStateContext();
|
|
51131
|
-
const [countUnread, setCountUnread] = (0,
|
|
51132
|
-
const [replyCount, setReplyCount] = (0,
|
|
51142
|
+
const [countUnread, setCountUnread] = (0, import_react249.useState)(activeChannel?.countUnread() || 0);
|
|
51143
|
+
const [replyCount, setReplyCount] = (0, import_react249.useState)(thread?.reply_count || 0);
|
|
51133
51144
|
const observedEvent = threadList ? "message.updated" : "message.new";
|
|
51134
|
-
(0,
|
|
51145
|
+
(0, import_react249.useEffect)(() => {
|
|
51135
51146
|
const handleEvent = (event) => {
|
|
51136
51147
|
const newMessageInAnotherChannel = event.cid !== activeChannel?.cid;
|
|
51137
51148
|
const newMessageIsMine = event.user?.id === client.user?.id;
|
|
@@ -51153,14 +51164,14 @@ var UnMemoizedScrollToBottomButton = (props) => {
|
|
|
51153
51164
|
client.off(observedEvent, handleEvent);
|
|
51154
51165
|
};
|
|
51155
51166
|
}, [activeChannel, isMessageListScrolledToBottom, observedEvent, replyCount, thread]);
|
|
51156
|
-
(0,
|
|
51167
|
+
(0, import_react249.useEffect)(() => {
|
|
51157
51168
|
if (isMessageListScrolledToBottom) {
|
|
51158
51169
|
setCountUnread(0);
|
|
51159
51170
|
setReplyCount(thread?.reply_count || 0);
|
|
51160
51171
|
}
|
|
51161
51172
|
}, [isMessageListScrolledToBottom, thread]);
|
|
51162
51173
|
if (isMessageListScrolledToBottom) return null;
|
|
51163
|
-
return /* @__PURE__ */
|
|
51174
|
+
return /* @__PURE__ */ import_react249.default.createElement("div", { className: "str-chat__jump-to-latest-message" }, /* @__PURE__ */ import_react249.default.createElement(
|
|
51164
51175
|
"button",
|
|
51165
51176
|
{
|
|
51166
51177
|
"aria-live": "polite",
|
|
@@ -51171,8 +51182,8 @@ var UnMemoizedScrollToBottomButton = (props) => {
|
|
|
51171
51182
|
"data-testid": "message-notification",
|
|
51172
51183
|
onClick
|
|
51173
51184
|
},
|
|
51174
|
-
/* @__PURE__ */
|
|
51175
|
-
countUnread > 0 && /* @__PURE__ */
|
|
51185
|
+
/* @__PURE__ */ import_react249.default.createElement(ArrowDown, null),
|
|
51186
|
+
countUnread > 0 && /* @__PURE__ */ import_react249.default.createElement(
|
|
51176
51187
|
"div",
|
|
51177
51188
|
{
|
|
51178
51189
|
className: (0, import_clsx63.default)(
|
|
@@ -51185,23 +51196,23 @@ var UnMemoizedScrollToBottomButton = (props) => {
|
|
|
51185
51196
|
)
|
|
51186
51197
|
));
|
|
51187
51198
|
};
|
|
51188
|
-
var ScrollToBottomButton =
|
|
51199
|
+
var ScrollToBottomButton = import_react249.default.memo(
|
|
51189
51200
|
UnMemoizedScrollToBottomButton
|
|
51190
51201
|
);
|
|
51191
51202
|
|
|
51192
51203
|
// src/components/MessageList/VirtualizedMessageList.tsx
|
|
51193
|
-
var
|
|
51204
|
+
var import_react259 = __toESM(require("react"));
|
|
51194
51205
|
var import_react_virtuoso3 = require("react-virtuoso");
|
|
51195
51206
|
|
|
51196
51207
|
// src/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.ts
|
|
51197
|
-
var
|
|
51208
|
+
var import_react250 = require("react");
|
|
51198
51209
|
function useNewMessageNotification(messages, currentUserId, hasMoreNewer) {
|
|
51199
|
-
const [newMessagesNotification, setNewMessagesNotification] = (0,
|
|
51200
|
-
const [isMessageListScrolledToBottom, setIsMessageListScrolledToBottom] = (0,
|
|
51201
|
-
const didMount = (0,
|
|
51202
|
-
const lastMessageId = (0,
|
|
51203
|
-
const atBottom = (0,
|
|
51204
|
-
(0,
|
|
51210
|
+
const [newMessagesNotification, setNewMessagesNotification] = (0, import_react250.useState)(false);
|
|
51211
|
+
const [isMessageListScrolledToBottom, setIsMessageListScrolledToBottom] = (0, import_react250.useState)(true);
|
|
51212
|
+
const didMount = (0, import_react250.useRef)(false);
|
|
51213
|
+
const lastMessageId = (0, import_react250.useRef)("");
|
|
51214
|
+
const atBottom = (0, import_react250.useRef)(false);
|
|
51215
|
+
(0, import_react250.useEffect)(() => {
|
|
51205
51216
|
if (hasMoreNewer) {
|
|
51206
51217
|
setNewMessagesNotification(true);
|
|
51207
51218
|
return;
|
|
@@ -51227,17 +51238,17 @@ function useNewMessageNotification(messages, currentUserId, hasMoreNewer) {
|
|
|
51227
51238
|
}
|
|
51228
51239
|
|
|
51229
51240
|
// src/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.ts
|
|
51230
|
-
var
|
|
51241
|
+
var import_react251 = require("react");
|
|
51231
51242
|
var STATUSES_EXCLUDED_FROM_PREPEND = {
|
|
51232
51243
|
failed: true,
|
|
51233
51244
|
sending: true
|
|
51234
51245
|
};
|
|
51235
51246
|
function usePrependedMessagesCount(messages, hasDateSeparator) {
|
|
51236
51247
|
const firstRealMessageIndex = hasDateSeparator ? 1 : 0;
|
|
51237
|
-
const firstMessageOnFirstLoadedPage = (0,
|
|
51238
|
-
const previousFirstMessageOnFirstLoadedPage = (0,
|
|
51239
|
-
const previousNumItemsPrepended = (0,
|
|
51240
|
-
const numItemsPrepended = (0,
|
|
51248
|
+
const firstMessageOnFirstLoadedPage = (0, import_react251.useRef)(void 0);
|
|
51249
|
+
const previousFirstMessageOnFirstLoadedPage = (0, import_react251.useRef)(void 0);
|
|
51250
|
+
const previousNumItemsPrepended = (0, import_react251.useRef)(0);
|
|
51251
|
+
const numItemsPrepended = (0, import_react251.useMemo)(() => {
|
|
51241
51252
|
if (!messages || !messages.length) {
|
|
51242
51253
|
previousNumItemsPrepended.current = 0;
|
|
51243
51254
|
return 0;
|
|
@@ -51267,10 +51278,10 @@ function usePrependedMessagesCount(messages, hasDateSeparator) {
|
|
|
51267
51278
|
}
|
|
51268
51279
|
|
|
51269
51280
|
// src/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.ts
|
|
51270
|
-
var
|
|
51281
|
+
var import_react252 = require("react");
|
|
51271
51282
|
function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
51272
|
-
const lastFocusedOwnMessage = (0,
|
|
51273
|
-
const initialFocusRegistered = (0,
|
|
51283
|
+
const lastFocusedOwnMessage = (0, import_react252.useRef)("");
|
|
51284
|
+
const initialFocusRegistered = (0, import_react252.useRef)(false);
|
|
51274
51285
|
function recheckForNewOwnMessage() {
|
|
51275
51286
|
if (messages && messages.length > 0) {
|
|
51276
51287
|
const lastMessage = messages[messages.length - 1];
|
|
@@ -51281,7 +51292,7 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
|
51281
51292
|
}
|
|
51282
51293
|
return false;
|
|
51283
51294
|
}
|
|
51284
|
-
(0,
|
|
51295
|
+
(0, import_react252.useEffect)(() => {
|
|
51285
51296
|
if (messages && messages.length && !initialFocusRegistered.current) {
|
|
51286
51297
|
initialFocusRegistered.current = true;
|
|
51287
51298
|
recheckForNewOwnMessage();
|
|
@@ -51291,11 +51302,11 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
|
51291
51302
|
}
|
|
51292
51303
|
|
|
51293
51304
|
// src/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.ts
|
|
51294
|
-
var
|
|
51305
|
+
var import_react253 = require("react");
|
|
51295
51306
|
var useGiphyPreview = (separateGiphyPreview) => {
|
|
51296
|
-
const [giphyPreviewMessage, setGiphyPreviewMessage] = (0,
|
|
51307
|
+
const [giphyPreviewMessage, setGiphyPreviewMessage] = (0, import_react253.useState)();
|
|
51297
51308
|
const { client } = useChatContext("useGiphyPreview");
|
|
51298
|
-
(0,
|
|
51309
|
+
(0, import_react253.useEffect)(() => {
|
|
51299
51310
|
const handleEvent = (event) => {
|
|
51300
51311
|
const { message, user } = event;
|
|
51301
51312
|
if (message?.command === "giphy" && user?.id === client.userID) {
|
|
@@ -51312,13 +51323,13 @@ var useGiphyPreview = (separateGiphyPreview) => {
|
|
|
51312
51323
|
};
|
|
51313
51324
|
|
|
51314
51325
|
// src/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.ts
|
|
51315
|
-
var
|
|
51326
|
+
var import_react254 = require("react");
|
|
51316
51327
|
var useMessageSetKey = ({
|
|
51317
51328
|
messages
|
|
51318
51329
|
}) => {
|
|
51319
|
-
const [messageSetKey, setMessageSetKey] = (0,
|
|
51320
|
-
const firstMessageId = (0,
|
|
51321
|
-
(0,
|
|
51330
|
+
const [messageSetKey, setMessageSetKey] = (0, import_react254.useState)(+/* @__PURE__ */ new Date());
|
|
51331
|
+
const firstMessageId = (0, import_react254.useRef)(void 0);
|
|
51332
|
+
(0, import_react254.useEffect)(() => {
|
|
51322
51333
|
const continuousSet = messages?.find(
|
|
51323
51334
|
(message) => message.id === firstMessageId.current
|
|
51324
51335
|
);
|
|
@@ -51333,24 +51344,24 @@ var useMessageSetKey = ({
|
|
|
51333
51344
|
};
|
|
51334
51345
|
|
|
51335
51346
|
// src/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.ts
|
|
51336
|
-
var
|
|
51347
|
+
var import_react255 = require("react");
|
|
51337
51348
|
var useScrollToBottomOnNewMessage = ({
|
|
51338
51349
|
messages,
|
|
51339
51350
|
scrollToBottom,
|
|
51340
51351
|
scrollToLatestMessageOnFocus
|
|
51341
51352
|
}) => {
|
|
51342
|
-
const [newMessagesReceivedInBackground, setNewMessagesReceivedInBackground] = (0,
|
|
51343
|
-
const scrollToBottomIfConfigured = (0,
|
|
51353
|
+
const [newMessagesReceivedInBackground, setNewMessagesReceivedInBackground] = (0, import_react255.useState)(false);
|
|
51354
|
+
const scrollToBottomIfConfigured = (0, import_react255.useRef)(void 0);
|
|
51344
51355
|
scrollToBottomIfConfigured.current = (event) => {
|
|
51345
51356
|
if (!scrollToLatestMessageOnFocus || !newMessagesReceivedInBackground || event.target !== window) {
|
|
51346
51357
|
return;
|
|
51347
51358
|
}
|
|
51348
51359
|
setTimeout(scrollToBottom, 100);
|
|
51349
51360
|
};
|
|
51350
|
-
(0,
|
|
51361
|
+
(0, import_react255.useEffect)(() => {
|
|
51351
51362
|
setNewMessagesReceivedInBackground(true);
|
|
51352
51363
|
}, [messages]);
|
|
51353
|
-
(0,
|
|
51364
|
+
(0, import_react255.useEffect)(() => {
|
|
51354
51365
|
const handleFocus = (event) => {
|
|
51355
51366
|
scrollToBottomIfConfigured.current?.(event);
|
|
51356
51367
|
};
|
|
@@ -51369,14 +51380,14 @@ var useScrollToBottomOnNewMessage = ({
|
|
|
51369
51380
|
};
|
|
51370
51381
|
|
|
51371
51382
|
// src/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.ts
|
|
51372
|
-
var
|
|
51383
|
+
var import_react256 = require("react");
|
|
51373
51384
|
var useUnreadMessagesNotificationVirtualized = ({
|
|
51374
51385
|
lastRead,
|
|
51375
51386
|
showAlways,
|
|
51376
51387
|
unreadCount
|
|
51377
51388
|
}) => {
|
|
51378
|
-
const [show, setShow] = (0,
|
|
51379
|
-
const toggleShowUnreadMessagesNotification = (0,
|
|
51389
|
+
const [show, setShow] = (0, import_react256.useState)(false);
|
|
51390
|
+
const toggleShowUnreadMessagesNotification = (0, import_react256.useCallback)(
|
|
51380
51391
|
(renderedMessages) => {
|
|
51381
51392
|
if (!unreadCount) return;
|
|
51382
51393
|
const firstRenderedMessage = renderedMessages[0];
|
|
@@ -51390,7 +51401,7 @@ var useUnreadMessagesNotificationVirtualized = ({
|
|
|
51390
51401
|
},
|
|
51391
51402
|
[lastRead, showAlways, unreadCount]
|
|
51392
51403
|
);
|
|
51393
|
-
(0,
|
|
51404
|
+
(0, import_react256.useEffect)(() => {
|
|
51394
51405
|
if (!unreadCount) setShow(false);
|
|
51395
51406
|
}, [unreadCount]);
|
|
51396
51407
|
return { show, toggleShowUnreadMessagesNotification };
|
|
@@ -51399,7 +51410,7 @@ var useUnreadMessagesNotificationVirtualized = ({
|
|
|
51399
51410
|
// src/components/MessageList/VirtualizedMessageListComponents.tsx
|
|
51400
51411
|
var import_clsx64 = __toESM(require("clsx"));
|
|
51401
51412
|
var import_lodash21 = __toESM(require("lodash.throttle"));
|
|
51402
|
-
var
|
|
51413
|
+
var import_react257 = __toESM(require("react"));
|
|
51403
51414
|
var PREPEND_OFFSET = 10 ** 7;
|
|
51404
51415
|
function calculateItemIndex(virtuosoIndex, numItemsPrepended) {
|
|
51405
51416
|
return virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;
|
|
@@ -51420,10 +51431,10 @@ var Item3 = ({
|
|
|
51420
51431
|
context,
|
|
51421
51432
|
...props
|
|
51422
51433
|
}) => {
|
|
51423
|
-
if (!context) return /* @__PURE__ */
|
|
51434
|
+
if (!context) return /* @__PURE__ */ import_react257.default.createElement(import_react257.default.Fragment, null);
|
|
51424
51435
|
const message = context.processedMessages[calculateItemIndex(props["data-item-index"], context.numItemsPrepended)];
|
|
51425
51436
|
const groupStyles = context.messageGroupStyles[message.id];
|
|
51426
|
-
return /* @__PURE__ */
|
|
51437
|
+
return /* @__PURE__ */ import_react257.default.createElement(
|
|
51427
51438
|
"div",
|
|
51428
51439
|
{
|
|
51429
51440
|
...props,
|
|
@@ -51437,13 +51448,13 @@ var Header = ({
|
|
|
51437
51448
|
context
|
|
51438
51449
|
}) => {
|
|
51439
51450
|
const { LoadingIndicator: LoadingIndicator2 = LoadingIndicator } = useComponentContext("VirtualizedMessageListHeader");
|
|
51440
|
-
return /* @__PURE__ */
|
|
51451
|
+
return /* @__PURE__ */ import_react257.default.createElement(import_react257.default.Fragment, null, context?.head, context?.loadingMore && LoadingIndicator2 && /* @__PURE__ */ import_react257.default.createElement("div", { className: "str-chat__virtual-list__loading" }, /* @__PURE__ */ import_react257.default.createElement(LoadingIndicator2, { size: 20 })));
|
|
51441
51452
|
};
|
|
51442
51453
|
var EmptyPlaceholder = ({
|
|
51443
51454
|
context
|
|
51444
51455
|
}) => {
|
|
51445
51456
|
const { EmptyStateIndicator: EmptyStateIndicator2 = EmptyStateIndicator } = useComponentContext("VirtualizedMessageList");
|
|
51446
|
-
return /* @__PURE__ */
|
|
51457
|
+
return /* @__PURE__ */ import_react257.default.createElement(import_react257.default.Fragment, null, EmptyStateIndicator2 && /* @__PURE__ */ import_react257.default.createElement(EmptyStateIndicator2, { listType: context?.threadList ? "thread" : "message" }));
|
|
51447
51458
|
};
|
|
51448
51459
|
var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
51449
51460
|
const {
|
|
@@ -51479,12 +51490,12 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
51479
51490
|
return customMessageRenderer(messageList, streamMessageIndex);
|
|
51480
51491
|
}
|
|
51481
51492
|
const message = messageList[streamMessageIndex];
|
|
51482
|
-
if (!message) return /* @__PURE__ */
|
|
51493
|
+
if (!message) return /* @__PURE__ */ import_react257.default.createElement("div", { style: { height: "1px" } });
|
|
51483
51494
|
if (isDateSeparatorMessage(message)) {
|
|
51484
|
-
return DateSeparator2 ? /* @__PURE__ */
|
|
51495
|
+
return DateSeparator2 ? /* @__PURE__ */ import_react257.default.createElement(DateSeparator2, { date: message.date, unread: message.unread }) : null;
|
|
51485
51496
|
}
|
|
51486
51497
|
if (message.type === "system") {
|
|
51487
|
-
return MessageSystem ? /* @__PURE__ */
|
|
51498
|
+
return MessageSystem ? /* @__PURE__ */ import_react257.default.createElement(MessageSystem, { message }) : null;
|
|
51488
51499
|
}
|
|
51489
51500
|
const groupedByUser = shouldGroupByUser && streamMessageIndex > 0 && message.user?.id === messageList[streamMessageIndex - 1].user?.id;
|
|
51490
51501
|
const maybePrevMessage = messageList[streamMessageIndex - 1];
|
|
@@ -51500,7 +51511,7 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
51500
51511
|
previousMessage: streamMessageIndex ? messageList[streamMessageIndex - 1] : void 0,
|
|
51501
51512
|
unreadMessageCount
|
|
51502
51513
|
});
|
|
51503
|
-
return /* @__PURE__ */
|
|
51514
|
+
return /* @__PURE__ */ import_react257.default.createElement(import_react257.default.Fragment, null, isFirstUnreadMessage && /* @__PURE__ */ import_react257.default.createElement("div", { className: "str-chat__unread-messages-separator-wrapper" }, /* @__PURE__ */ import_react257.default.createElement(UnreadMessagesSeparator2, { unreadCount: unreadMessageCount })), /* @__PURE__ */ import_react257.default.createElement(
|
|
51504
51515
|
Message,
|
|
51505
51516
|
{
|
|
51506
51517
|
additionalMessageInputProps,
|
|
@@ -51527,12 +51538,12 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
51527
51538
|
};
|
|
51528
51539
|
|
|
51529
51540
|
// src/context/VirtualizedMessageListContext.tsx
|
|
51530
|
-
var
|
|
51531
|
-
var VirtualizedMessageListContext = (0,
|
|
51541
|
+
var import_react258 = __toESM(require("react"));
|
|
51542
|
+
var VirtualizedMessageListContext = (0, import_react258.createContext)(void 0);
|
|
51532
51543
|
var VirtualizedMessageListContextProvider = ({
|
|
51533
51544
|
children,
|
|
51534
51545
|
value
|
|
51535
|
-
}) => /* @__PURE__ */
|
|
51546
|
+
}) => /* @__PURE__ */ import_react258.default.createElement(
|
|
51536
51547
|
VirtualizedMessageListContext.Provider,
|
|
51537
51548
|
{
|
|
51538
51549
|
value
|
|
@@ -51547,7 +51558,7 @@ function captureResizeObserverExceededError(e2) {
|
|
|
51547
51558
|
}
|
|
51548
51559
|
}
|
|
51549
51560
|
function useCaptureResizeObserverExceededError() {
|
|
51550
|
-
(0,
|
|
51561
|
+
(0, import_react259.useEffect)(() => {
|
|
51551
51562
|
window.addEventListener("error", captureResizeObserverExceededError);
|
|
51552
51563
|
return () => {
|
|
51553
51564
|
window.removeEventListener("error", captureResizeObserverExceededError);
|
|
@@ -51633,15 +51644,15 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51633
51644
|
const { client, customClasses } = useChatContext(
|
|
51634
51645
|
"VirtualizedMessageList"
|
|
51635
51646
|
);
|
|
51636
|
-
const virtuoso = (0,
|
|
51637
|
-
const lastRead = (0,
|
|
51647
|
+
const virtuoso = (0, import_react259.useRef)(null);
|
|
51648
|
+
const lastRead = (0, import_react259.useMemo)(() => channel.lastRead?.(), [channel]);
|
|
51638
51649
|
const { show: showUnreadMessagesNotification, toggleShowUnreadMessagesNotification } = useUnreadMessagesNotificationVirtualized({
|
|
51639
51650
|
lastRead: channelUnreadUiState?.last_read,
|
|
51640
51651
|
showAlways: !!showUnreadNotificationAlways,
|
|
51641
51652
|
unreadCount: channelUnreadUiState?.unread_messages ?? 0
|
|
51642
51653
|
});
|
|
51643
51654
|
const { giphyPreviewMessage, setGiphyPreviewMessage } = useGiphyPreview(separateGiphyPreview);
|
|
51644
|
-
const processedMessages = (0,
|
|
51655
|
+
const processedMessages = (0, import_react259.useMemo)(() => {
|
|
51645
51656
|
if (typeof messages === "undefined") {
|
|
51646
51657
|
return [];
|
|
51647
51658
|
}
|
|
@@ -51673,12 +51684,12 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51673
51684
|
returnAllReadData,
|
|
51674
51685
|
userID: client.userID
|
|
51675
51686
|
});
|
|
51676
|
-
const lastReceivedMessageId = (0,
|
|
51687
|
+
const lastReceivedMessageId = (0, import_react259.useMemo)(
|
|
51677
51688
|
() => getLastReceived(processedMessages),
|
|
51678
51689
|
[processedMessages]
|
|
51679
51690
|
);
|
|
51680
51691
|
const groupStylesFn = groupStyles || getGroupStyles;
|
|
51681
|
-
const messageGroupStyles = (0,
|
|
51692
|
+
const messageGroupStyles = (0, import_react259.useMemo)(
|
|
51682
51693
|
() => processedMessages.reduce((acc, message, i) => {
|
|
51683
51694
|
const style = groupStylesFn(
|
|
51684
51695
|
message,
|
|
@@ -51711,7 +51722,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51711
51722
|
messageListIsThread: !!threadList,
|
|
51712
51723
|
wasMarkedUnread: !!channelUnreadUiState?.first_unread_message_id
|
|
51713
51724
|
});
|
|
51714
|
-
const scrollToBottom = (0,
|
|
51725
|
+
const scrollToBottom = (0, import_react259.useCallback)(async () => {
|
|
51715
51726
|
if (hasMoreNewer) {
|
|
51716
51727
|
await jumpToLatestMessage();
|
|
51717
51728
|
return;
|
|
@@ -51743,7 +51754,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51743
51754
|
processedMessages,
|
|
51744
51755
|
client.userID
|
|
51745
51756
|
);
|
|
51746
|
-
const handleItemsRendered = (0,
|
|
51757
|
+
const handleItemsRendered = (0, import_react259.useMemo)(
|
|
51747
51758
|
() => makeItemsRenderedHandler([toggleShowUnreadMessagesNotification], processedMessages),
|
|
51748
51759
|
[processedMessages, toggleShowUnreadMessagesNotification]
|
|
51749
51760
|
);
|
|
@@ -51756,7 +51767,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51756
51767
|
}
|
|
51757
51768
|
return isAtBottom ? stickToBottomScrollBehavior : false;
|
|
51758
51769
|
};
|
|
51759
|
-
const computeItemKey2 = (0,
|
|
51770
|
+
const computeItemKey2 = (0, import_react259.useCallback)(
|
|
51760
51771
|
(index3, _, { numItemsPrepended: numItemsPrepended2, processedMessages: processedMessages2 }) => processedMessages2[calculateItemIndex(index3, numItemsPrepended2)].id,
|
|
51761
51772
|
[]
|
|
51762
51773
|
);
|
|
@@ -51773,7 +51784,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51773
51784
|
loadMore?.(messageLimit);
|
|
51774
51785
|
}
|
|
51775
51786
|
};
|
|
51776
|
-
(0,
|
|
51787
|
+
(0, import_react259.useEffect)(() => {
|
|
51777
51788
|
let scrollTimeout;
|
|
51778
51789
|
if (highlightedMessageId) {
|
|
51779
51790
|
const index3 = findMessageIndex(processedMessages, highlightedMessageId);
|
|
@@ -51787,19 +51798,20 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51787
51798
|
clearTimeout(scrollTimeout);
|
|
51788
51799
|
};
|
|
51789
51800
|
}, [highlightedMessageId, processedMessages]);
|
|
51801
|
+
const id = useStableId();
|
|
51790
51802
|
if (!processedMessages) return null;
|
|
51791
|
-
const dialogManagerId = threadList ?
|
|
51792
|
-
return /* @__PURE__ */
|
|
51803
|
+
const dialogManagerId = threadList ? `virtualized-message-list-dialog-manager-thread-${id}` : `virtualized-message-list-dialog-manager-${id}`;
|
|
51804
|
+
return /* @__PURE__ */ import_react259.default.createElement(VirtualizedMessageListContextProvider, { value: { scrollToBottom } }, /* @__PURE__ */ import_react259.default.createElement(MessageListMainPanel2, null, /* @__PURE__ */ import_react259.default.createElement(DialogManagerProvider, { id: dialogManagerId }, !threadList && showUnreadMessagesNotification && /* @__PURE__ */ import_react259.default.createElement(
|
|
51793
51805
|
UnreadMessagesNotification2,
|
|
51794
51806
|
{
|
|
51795
51807
|
unreadCount: channelUnreadUiState?.unread_messages
|
|
51796
51808
|
}
|
|
51797
|
-
), /* @__PURE__ */
|
|
51809
|
+
), /* @__PURE__ */ import_react259.default.createElement(
|
|
51798
51810
|
"div",
|
|
51799
51811
|
{
|
|
51800
51812
|
className: customClasses?.virtualizedMessageList || "str-chat__virtual-list"
|
|
51801
51813
|
},
|
|
51802
|
-
/* @__PURE__ */
|
|
51814
|
+
/* @__PURE__ */ import_react259.default.createElement(
|
|
51803
51815
|
import_react_virtuoso3.Virtuoso,
|
|
51804
51816
|
{
|
|
51805
51817
|
atBottomStateChange,
|
|
@@ -51865,7 +51877,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51865
51877
|
...defaultItemHeight ? { defaultItemHeight } : {}
|
|
51866
51878
|
}
|
|
51867
51879
|
)
|
|
51868
|
-
)), TypingIndicator2 && /* @__PURE__ */
|
|
51880
|
+
)), TypingIndicator2 && /* @__PURE__ */ import_react259.default.createElement(TypingIndicator2, null)), /* @__PURE__ */ import_react259.default.createElement(
|
|
51869
51881
|
MessageListNotifications2,
|
|
51870
51882
|
{
|
|
51871
51883
|
hasNewMessages: newMessagesNotification,
|
|
@@ -51877,7 +51889,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
51877
51889
|
threadList,
|
|
51878
51890
|
unreadCount: threadList ? void 0 : channelUnreadUiState?.unread_messages
|
|
51879
51891
|
}
|
|
51880
|
-
), giphyPreviewMessage && /* @__PURE__ */
|
|
51892
|
+
), giphyPreviewMessage && /* @__PURE__ */ import_react259.default.createElement(GiphyPreviewMessage2, { message: giphyPreviewMessage }));
|
|
51881
51893
|
};
|
|
51882
51894
|
function VirtualizedMessageList(props) {
|
|
51883
51895
|
const { jumpToLatestMessage, loadMore, loadMoreNewer } = useChannelActionContext("VirtualizedMessageList");
|
|
@@ -51895,7 +51907,7 @@ function VirtualizedMessageList(props) {
|
|
|
51895
51907
|
suppressAutoscroll
|
|
51896
51908
|
} = useChannelStateContext("VirtualizedMessageList");
|
|
51897
51909
|
const messages = props.messages || contextMessages;
|
|
51898
|
-
return /* @__PURE__ */
|
|
51910
|
+
return /* @__PURE__ */ import_react259.default.createElement(
|
|
51899
51911
|
VirtualizedMessageListWithContext,
|
|
51900
51912
|
{
|
|
51901
51913
|
channel,
|
|
@@ -51936,12 +51948,12 @@ var useChannelContainerClasses = ({
|
|
|
51936
51948
|
};
|
|
51937
51949
|
|
|
51938
51950
|
// src/components/Channel/utils.ts
|
|
51939
|
-
var
|
|
51951
|
+
var import_nanoid11 = require("nanoid");
|
|
51940
51952
|
var makeAddNotifications = (setNotifications, notificationTimeouts) => (text8, type) => {
|
|
51941
51953
|
if (typeof text8 !== "string" || type !== "success" && type !== "error") {
|
|
51942
51954
|
return;
|
|
51943
51955
|
}
|
|
51944
|
-
const id = (0,
|
|
51956
|
+
const id = (0, import_nanoid11.nanoid)();
|
|
51945
51957
|
setNotifications((prevNotifications) => [...prevNotifications, { id, text: text8, type }]);
|
|
51946
51958
|
const timeout = setTimeout(
|
|
51947
51959
|
() => setNotifications(
|
|
@@ -52101,7 +52113,7 @@ var ChannelContainer = ({
|
|
|
52101
52113
|
customClasses
|
|
52102
52114
|
});
|
|
52103
52115
|
const className = (0, import_clsx65.default)(chatClass, theme, channelClass, additionalClassName);
|
|
52104
|
-
return /* @__PURE__ */
|
|
52116
|
+
return /* @__PURE__ */ import_react260.default.createElement("div", { id: CHANNEL_CONTAINER_ID, ...props, className }, children);
|
|
52105
52117
|
};
|
|
52106
52118
|
var UnMemoizedChannel = (props) => {
|
|
52107
52119
|
const {
|
|
@@ -52113,15 +52125,15 @@ var UnMemoizedChannel = (props) => {
|
|
|
52113
52125
|
const { channel: contextChannel, channelsQueryState } = useChatContext("Channel");
|
|
52114
52126
|
const channel = propsChannel || contextChannel;
|
|
52115
52127
|
if (channelsQueryState.queryInProgress === "reload" && LoadingIndicator2) {
|
|
52116
|
-
return /* @__PURE__ */
|
|
52128
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelContainer, null, /* @__PURE__ */ import_react260.default.createElement(LoadingIndicator2, null));
|
|
52117
52129
|
}
|
|
52118
52130
|
if (channelsQueryState.error && LoadingErrorIndicator2) {
|
|
52119
|
-
return /* @__PURE__ */
|
|
52131
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelContainer, null, /* @__PURE__ */ import_react260.default.createElement(LoadingErrorIndicator2, { error: channelsQueryState.error }));
|
|
52120
52132
|
}
|
|
52121
52133
|
if (!channel?.cid) {
|
|
52122
|
-
return /* @__PURE__ */
|
|
52134
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelContainer, null, EmptyPlaceholder2);
|
|
52123
52135
|
}
|
|
52124
|
-
return /* @__PURE__ */
|
|
52136
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelInner, { ...props, channel, key: channel.cid });
|
|
52125
52137
|
};
|
|
52126
52138
|
var ChannelInner = (props) => {
|
|
52127
52139
|
const {
|
|
@@ -52147,7 +52159,7 @@ var ChannelInner = (props) => {
|
|
|
52147
52159
|
optionalMessageInputProps = {},
|
|
52148
52160
|
skipMessageDataMemoization
|
|
52149
52161
|
} = props;
|
|
52150
|
-
const channelQueryOptions = (0,
|
|
52162
|
+
const channelQueryOptions = (0, import_react260.useMemo)(
|
|
52151
52163
|
() => (0, import_lodash23.default)(propChannelQueryOptions, {
|
|
52152
52164
|
messages: { limit: DEFAULT_INITIAL_CHANNEL_PAGE_SIZE }
|
|
52153
52165
|
}),
|
|
@@ -52158,13 +52170,13 @@ var ChannelInner = (props) => {
|
|
|
52158
52170
|
const chatContainerClass = getChatContainerClass(customClasses?.chatContainer);
|
|
52159
52171
|
const windowsEmojiClass = useImageFlagEmojisOnWindowsClass();
|
|
52160
52172
|
const thread = useThreadContext();
|
|
52161
|
-
const [channelConfig, setChannelConfig] = (0,
|
|
52162
|
-
const [notifications, setNotifications] = (0,
|
|
52163
|
-
const [quotedMessage, setQuotedMessage] = (0,
|
|
52164
|
-
const [channelUnreadUiState, _setChannelUnreadUiState] = (0,
|
|
52165
|
-
const notificationTimeouts = (0,
|
|
52166
|
-
const channelReducer = (0,
|
|
52167
|
-
const [state, dispatch] = (0,
|
|
52173
|
+
const [channelConfig, setChannelConfig] = (0, import_react260.useState)(channel.getConfig());
|
|
52174
|
+
const [notifications, setNotifications] = (0, import_react260.useState)([]);
|
|
52175
|
+
const [quotedMessage, setQuotedMessage] = (0, import_react260.useState)();
|
|
52176
|
+
const [channelUnreadUiState, _setChannelUnreadUiState] = (0, import_react260.useState)();
|
|
52177
|
+
const notificationTimeouts = (0, import_react260.useRef)([]);
|
|
52178
|
+
const channelReducer = (0, import_react260.useMemo)(() => makeChannelReducer(), []);
|
|
52179
|
+
const [state, dispatch] = (0, import_react260.useReducer)(
|
|
52168
52180
|
channelReducer,
|
|
52169
52181
|
// channel.initialized === false if client.channel().query() was not called, e.g. ChannelList is not used
|
|
52170
52182
|
// => Channel will call channel.watch() in useLayoutEffect => state.loading is used to signal the watch() call state
|
|
@@ -52176,10 +52188,10 @@ var ChannelInner = (props) => {
|
|
|
52176
52188
|
);
|
|
52177
52189
|
const jumpToMessageFromSearch = useSearchFocusedMessage();
|
|
52178
52190
|
const isMounted = useIsMounted();
|
|
52179
|
-
const originalTitle = (0,
|
|
52180
|
-
const lastRead = (0,
|
|
52181
|
-
const online = (0,
|
|
52182
|
-
const clearHighlightedMessageTimeoutId = (0,
|
|
52191
|
+
const originalTitle = (0, import_react260.useRef)("");
|
|
52192
|
+
const lastRead = (0, import_react260.useRef)(void 0);
|
|
52193
|
+
const online = (0, import_react260.useRef)(true);
|
|
52194
|
+
const clearHighlightedMessageTimeoutId = (0, import_react260.useRef)(
|
|
52183
52195
|
null
|
|
52184
52196
|
);
|
|
52185
52197
|
const channelCapabilitiesArray = channel.data?.own_capabilities;
|
|
@@ -52191,14 +52203,14 @@ var ChannelInner = (props) => {
|
|
|
52191
52203
|
trailing: true
|
|
52192
52204
|
}
|
|
52193
52205
|
);
|
|
52194
|
-
const setChannelUnreadUiState = (0,
|
|
52206
|
+
const setChannelUnreadUiState = (0, import_react260.useMemo)(
|
|
52195
52207
|
() => (0, import_lodash24.default)(_setChannelUnreadUiState, 200, {
|
|
52196
52208
|
leading: true,
|
|
52197
52209
|
trailing: false
|
|
52198
52210
|
}),
|
|
52199
52211
|
[]
|
|
52200
52212
|
);
|
|
52201
|
-
const markRead = (0,
|
|
52213
|
+
const markRead = (0, import_react260.useMemo)(
|
|
52202
52214
|
() => (0, import_lodash24.default)(
|
|
52203
52215
|
async (options) => {
|
|
52204
52216
|
const { updateChannelUiUnreadState = true } = options ?? {};
|
|
@@ -52301,7 +52313,7 @@ var ChannelInner = (props) => {
|
|
|
52301
52313
|
}
|
|
52302
52314
|
throttledCopyStateFromChannel();
|
|
52303
52315
|
};
|
|
52304
|
-
(0,
|
|
52316
|
+
(0, import_react260.useLayoutEffect)(() => {
|
|
52305
52317
|
let errored = false;
|
|
52306
52318
|
let done = false;
|
|
52307
52319
|
(async () => {
|
|
@@ -52367,12 +52379,12 @@ var ChannelInner = (props) => {
|
|
|
52367
52379
|
channelConfig?.read_events,
|
|
52368
52380
|
initializeOnMount
|
|
52369
52381
|
]);
|
|
52370
|
-
(0,
|
|
52382
|
+
(0, import_react260.useEffect)(() => {
|
|
52371
52383
|
if (!state.thread) return;
|
|
52372
52384
|
const message = state.messages?.find((m) => m.id === state.thread?.id);
|
|
52373
52385
|
if (message) dispatch({ message, type: "setThread" });
|
|
52374
52386
|
}, [state.messages, state.thread]);
|
|
52375
|
-
const handleHighlightedMessageChange = (0,
|
|
52387
|
+
const handleHighlightedMessageChange = (0, import_react260.useCallback)(
|
|
52376
52388
|
({
|
|
52377
52389
|
highlightDuration,
|
|
52378
52390
|
highlightedMessageId
|
|
@@ -52395,15 +52407,15 @@ var ChannelInner = (props) => {
|
|
|
52395
52407
|
},
|
|
52396
52408
|
[channel, searchController]
|
|
52397
52409
|
);
|
|
52398
|
-
(0,
|
|
52410
|
+
(0, import_react260.useEffect)(() => {
|
|
52399
52411
|
if (!jumpToMessageFromSearch?.id) return;
|
|
52400
52412
|
handleHighlightedMessageChange({ highlightedMessageId: jumpToMessageFromSearch.id });
|
|
52401
52413
|
}, [jumpToMessageFromSearch, handleHighlightedMessageChange]);
|
|
52402
|
-
const addNotification = (0,
|
|
52414
|
+
const addNotification = (0, import_react260.useMemo)(
|
|
52403
52415
|
() => makeAddNotifications(setNotifications, notificationTimeouts.current),
|
|
52404
52416
|
[]
|
|
52405
52417
|
);
|
|
52406
|
-
const loadMoreFinished = (0,
|
|
52418
|
+
const loadMoreFinished = (0, import_react260.useCallback)(
|
|
52407
52419
|
(0, import_lodash22.default)(
|
|
52408
52420
|
(hasMore, messages) => {
|
|
52409
52421
|
if (!isMounted.current) return;
|
|
@@ -52464,7 +52476,7 @@ var ChannelInner = (props) => {
|
|
|
52464
52476
|
});
|
|
52465
52477
|
return queryResponse.messages.length;
|
|
52466
52478
|
};
|
|
52467
|
-
const jumpToMessage = (0,
|
|
52479
|
+
const jumpToMessage = (0, import_react260.useCallback)(
|
|
52468
52480
|
async (messageId, messageLimit = DEFAULT_JUMP_TO_PAGE_SIZE, highlightDuration = DEFAULT_HIGHLIGHT_DURATION) => {
|
|
52469
52481
|
dispatch({ loadingMore: true, type: "setLoadingMore" });
|
|
52470
52482
|
await channel.state.loadMessageIntoState(messageId, void 0, messageLimit);
|
|
@@ -52476,14 +52488,14 @@ var ChannelInner = (props) => {
|
|
|
52476
52488
|
},
|
|
52477
52489
|
[channel, handleHighlightedMessageChange, loadMoreFinished]
|
|
52478
52490
|
);
|
|
52479
|
-
const jumpToLatestMessage = (0,
|
|
52491
|
+
const jumpToLatestMessage = (0, import_react260.useCallback)(async () => {
|
|
52480
52492
|
await channel.state.loadMessageIntoState("latest");
|
|
52481
52493
|
loadMoreFinished(channel.state.messagePagination.hasPrev, channel.state.messages);
|
|
52482
52494
|
dispatch({
|
|
52483
52495
|
type: "jumpToLatestMessage"
|
|
52484
52496
|
});
|
|
52485
52497
|
}, [channel, loadMoreFinished]);
|
|
52486
|
-
const jumpToFirstUnreadMessage = (0,
|
|
52498
|
+
const jumpToFirstUnreadMessage = (0, import_react260.useCallback)(
|
|
52487
52499
|
async (queryMessageLimit = DEFAULT_JUMP_TO_PAGE_SIZE, highlightDuration = DEFAULT_HIGHLIGHT_DURATION) => {
|
|
52488
52500
|
if (!channelUnreadUiState?.unread_messages) return;
|
|
52489
52501
|
let lastReadMessageId = channelUnreadUiState?.last_read_message_id;
|
|
@@ -52606,7 +52618,7 @@ var ChannelInner = (props) => {
|
|
|
52606
52618
|
channelUnreadUiState
|
|
52607
52619
|
]
|
|
52608
52620
|
);
|
|
52609
|
-
const deleteMessage = (0,
|
|
52621
|
+
const deleteMessage = (0, import_react260.useCallback)(
|
|
52610
52622
|
async (message) => {
|
|
52611
52623
|
if (!message?.id) {
|
|
52612
52624
|
throw new Error("Cannot delete a message - missing message ID.");
|
|
@@ -52711,7 +52723,7 @@ var ChannelInner = (props) => {
|
|
|
52711
52723
|
attachments,
|
|
52712
52724
|
created_at: /* @__PURE__ */ new Date(),
|
|
52713
52725
|
html: text8,
|
|
52714
|
-
id: customMessageData?.id ?? `${client.userID}-${(0,
|
|
52726
|
+
id: customMessageData?.id ?? `${client.userID}-${(0, import_nanoid12.nanoid)()}`,
|
|
52715
52727
|
mentioned_users,
|
|
52716
52728
|
parent_id: parent?.id,
|
|
52717
52729
|
reactions: [],
|
|
@@ -52763,7 +52775,7 @@ var ChannelInner = (props) => {
|
|
|
52763
52775
|
event?.preventDefault();
|
|
52764
52776
|
dispatch({ type: "closeThread" });
|
|
52765
52777
|
};
|
|
52766
|
-
const loadMoreThreadFinished = (0,
|
|
52778
|
+
const loadMoreThreadFinished = (0, import_react260.useCallback)(
|
|
52767
52779
|
(0, import_lodash22.default)(
|
|
52768
52780
|
(threadHasMore, threadMessages) => {
|
|
52769
52781
|
dispatch({
|
|
@@ -52827,7 +52839,7 @@ var ChannelInner = (props) => {
|
|
|
52827
52839
|
videoAttachmentSizeHandler: props.videoAttachmentSizeHandler || getVideoAttachmentConfiguration,
|
|
52828
52840
|
watcher_count: state.watcherCount
|
|
52829
52841
|
});
|
|
52830
|
-
const channelActionContextValue = (0,
|
|
52842
|
+
const channelActionContextValue = (0, import_react260.useMemo)(
|
|
52831
52843
|
() => ({
|
|
52832
52844
|
addNotification,
|
|
52833
52845
|
closeThread,
|
|
@@ -52868,7 +52880,7 @@ var ChannelInner = (props) => {
|
|
|
52868
52880
|
setChannelUnreadUiState
|
|
52869
52881
|
]
|
|
52870
52882
|
);
|
|
52871
|
-
const componentContextValue = (0,
|
|
52883
|
+
const componentContextValue = (0, import_react260.useMemo)(
|
|
52872
52884
|
() => ({
|
|
52873
52885
|
Attachment: props.Attachment,
|
|
52874
52886
|
AttachmentPreviewList: props.AttachmentPreviewList,
|
|
@@ -53000,26 +53012,26 @@ var ChannelInner = (props) => {
|
|
|
53000
53012
|
typing
|
|
53001
53013
|
});
|
|
53002
53014
|
if (state.error) {
|
|
53003
|
-
return /* @__PURE__ */
|
|
53015
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelContainer, null, /* @__PURE__ */ import_react260.default.createElement(LoadingErrorIndicator2, { error: state.error }));
|
|
53004
53016
|
}
|
|
53005
53017
|
if (state.loading) {
|
|
53006
|
-
return /* @__PURE__ */
|
|
53018
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelContainer, null, /* @__PURE__ */ import_react260.default.createElement(LoadingIndicator2, null));
|
|
53007
53019
|
}
|
|
53008
53020
|
if (!channel.watch) {
|
|
53009
|
-
return /* @__PURE__ */
|
|
53021
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelContainer, null, /* @__PURE__ */ import_react260.default.createElement("div", null, t2("Channel Missing")));
|
|
53010
53022
|
}
|
|
53011
|
-
return /* @__PURE__ */
|
|
53023
|
+
return /* @__PURE__ */ import_react260.default.createElement(ChannelContainer, { className: windowsEmojiClass }, /* @__PURE__ */ import_react260.default.createElement(ChannelStateProvider, { value: channelStateContextValue }, /* @__PURE__ */ import_react260.default.createElement(ChannelActionProvider, { value: channelActionContextValue }, /* @__PURE__ */ import_react260.default.createElement(WithComponents, { overrides: componentContextValue }, /* @__PURE__ */ import_react260.default.createElement(TypingProvider, { value: typingContextValue }, /* @__PURE__ */ import_react260.default.createElement("div", { className: `${chatContainerClass}` }, dragAndDropWindow && /* @__PURE__ */ import_react260.default.createElement(DropzoneProvider, { ...optionalMessageInputProps }, children), !dragAndDropWindow && /* @__PURE__ */ import_react260.default.createElement(import_react260.default.Fragment, null, children)))))));
|
|
53012
53024
|
};
|
|
53013
|
-
var Channel =
|
|
53025
|
+
var Channel = import_react260.default.memo(UnMemoizedChannel);
|
|
53014
53026
|
|
|
53015
53027
|
// src/components/ChannelHeader/ChannelHeader.tsx
|
|
53016
|
-
var
|
|
53028
|
+
var import_react262 = __toESM(require("react"));
|
|
53017
53029
|
|
|
53018
53030
|
// src/components/ChannelHeader/icons.tsx
|
|
53019
|
-
var
|
|
53031
|
+
var import_react261 = __toESM(require("react"));
|
|
53020
53032
|
var MenuIcon2 = ({ title }) => {
|
|
53021
53033
|
const { t: t2 } = useTranslationContext("MenuIcon");
|
|
53022
|
-
return /* @__PURE__ */
|
|
53034
|
+
return /* @__PURE__ */ import_react261.default.createElement("svg", { "data-testid": "menu-icon", viewBox: "0 0 448 512", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react261.default.createElement("title", null, title ?? t2("Menu")), /* @__PURE__ */ import_react261.default.createElement(
|
|
53023
53035
|
"path",
|
|
53024
53036
|
{
|
|
53025
53037
|
d: "M0 88C0 74.75 10.75 64 24 64H424C437.3 64 448 74.75 448 88C448 101.3 437.3 112 424 112H24C10.75 112 0 101.3 0 88zM0 248C0 234.7 10.75 224 24 224H424C437.3 224 448 234.7 448 248C448 261.3 437.3 272 424 272H24C10.75 272 0 261.3 0 248zM424 432H24C10.75 432 0 421.3 0 408C0 394.7 10.75 384 24 384H424C437.3 384 448 394.7 448 408C448 421.3 437.3 432 424 432z",
|
|
@@ -53046,15 +53058,15 @@ var ChannelHeader = (props) => {
|
|
|
53046
53058
|
overrideTitle
|
|
53047
53059
|
});
|
|
53048
53060
|
const { member_count, subtitle } = channel?.data || {};
|
|
53049
|
-
return /* @__PURE__ */
|
|
53061
|
+
return /* @__PURE__ */ import_react262.default.createElement("div", { className: "str-chat__channel-header" }, /* @__PURE__ */ import_react262.default.createElement(
|
|
53050
53062
|
"button",
|
|
53051
53063
|
{
|
|
53052
53064
|
"aria-label": t2("aria/Menu"),
|
|
53053
53065
|
className: "str-chat__header-hamburger",
|
|
53054
53066
|
onClick: openMobileNav
|
|
53055
53067
|
},
|
|
53056
|
-
/* @__PURE__ */
|
|
53057
|
-
), /* @__PURE__ */
|
|
53068
|
+
/* @__PURE__ */ import_react262.default.createElement(MenuIcon3, null)
|
|
53069
|
+
), /* @__PURE__ */ import_react262.default.createElement(
|
|
53058
53070
|
Avatar2,
|
|
53059
53071
|
{
|
|
53060
53072
|
className: "str-chat__avatar--channel-header",
|
|
@@ -53062,36 +53074,36 @@ var ChannelHeader = (props) => {
|
|
|
53062
53074
|
image: displayImage,
|
|
53063
53075
|
name: displayTitle
|
|
53064
53076
|
}
|
|
53065
|
-
), /* @__PURE__ */
|
|
53077
|
+
), /* @__PURE__ */ import_react262.default.createElement("div", { className: "str-chat__channel-header-end" }, /* @__PURE__ */ import_react262.default.createElement("p", { className: "str-chat__channel-header-title" }, displayTitle, " ", live && /* @__PURE__ */ import_react262.default.createElement("span", { className: "str-chat__header-livestream-livelabel" }, t2("live"))), subtitle && /* @__PURE__ */ import_react262.default.createElement("p", { className: "str-chat__channel-header-subtitle" }, subtitle), /* @__PURE__ */ import_react262.default.createElement("p", { className: "str-chat__channel-header-info" }, !live && !!member_count && member_count > 0 && /* @__PURE__ */ import_react262.default.createElement(import_react262.default.Fragment, null, t2("{{ memberCount }} members", {
|
|
53066
53078
|
memberCount: member_count
|
|
53067
53079
|
}), ",", " "), t2("{{ watcherCount }} online", { watcherCount: watcher_count }))));
|
|
53068
53080
|
};
|
|
53069
53081
|
|
|
53070
53082
|
// src/components/Chat/Chat.tsx
|
|
53071
|
-
var
|
|
53083
|
+
var import_react266 = __toESM(require("react"));
|
|
53072
53084
|
var import_stream_chat6 = require("stream-chat");
|
|
53073
53085
|
|
|
53074
53086
|
// src/components/Chat/hooks/useChat.ts
|
|
53075
|
-
var
|
|
53087
|
+
var import_react263 = require("react");
|
|
53076
53088
|
var useChat = ({
|
|
53077
53089
|
client,
|
|
53078
53090
|
defaultLanguage = "en",
|
|
53079
53091
|
i18nInstance,
|
|
53080
53092
|
initialNavOpen
|
|
53081
53093
|
}) => {
|
|
53082
|
-
const [translators, setTranslators] = (0,
|
|
53094
|
+
const [translators, setTranslators] = (0, import_react263.useState)({
|
|
53083
53095
|
t: (key) => key,
|
|
53084
53096
|
tDateTimeParser: defaultDateTimeParser,
|
|
53085
53097
|
userLanguage: "en"
|
|
53086
53098
|
});
|
|
53087
|
-
const [channel, setChannel] = (0,
|
|
53088
|
-
const [mutes, setMutes] = (0,
|
|
53089
|
-
const [navOpen, setNavOpen] = (0,
|
|
53090
|
-
const [latestMessageDatesByChannels, setLatestMessageDatesByChannels] = (0,
|
|
53099
|
+
const [channel, setChannel] = (0, import_react263.useState)();
|
|
53100
|
+
const [mutes, setMutes] = (0, import_react263.useState)([]);
|
|
53101
|
+
const [navOpen, setNavOpen] = (0, import_react263.useState)(initialNavOpen);
|
|
53102
|
+
const [latestMessageDatesByChannels, setLatestMessageDatesByChannels] = (0, import_react263.useState)({});
|
|
53091
53103
|
const clientMutes = client.user?.mutes || [];
|
|
53092
53104
|
const closeMobileNav = () => setNavOpen(false);
|
|
53093
53105
|
const openMobileNav = () => setTimeout(() => setNavOpen(true), 100);
|
|
53094
|
-
const appSettings = (0,
|
|
53106
|
+
const appSettings = (0, import_react263.useRef)(
|
|
53095
53107
|
null
|
|
53096
53108
|
);
|
|
53097
53109
|
const getAppSettings = () => {
|
|
@@ -53101,9 +53113,9 @@ var useChat = ({
|
|
|
53101
53113
|
appSettings.current = client.getAppSettings();
|
|
53102
53114
|
return appSettings.current;
|
|
53103
53115
|
};
|
|
53104
|
-
(0,
|
|
53116
|
+
(0, import_react263.useEffect)(() => {
|
|
53105
53117
|
if (!client) return;
|
|
53106
|
-
const version = "12.15.
|
|
53118
|
+
const version = "12.15.2";
|
|
53107
53119
|
const userAgent = client.getUserAgent();
|
|
53108
53120
|
if (!userAgent.includes("stream-chat-react")) {
|
|
53109
53121
|
client.setUserAgent(`stream-chat-react-${version}-${userAgent}`);
|
|
@@ -53115,7 +53127,7 @@ var useChat = ({
|
|
|
53115
53127
|
client.polls.unregisterSubscriptions();
|
|
53116
53128
|
};
|
|
53117
53129
|
}, [client]);
|
|
53118
|
-
(0,
|
|
53130
|
+
(0, import_react263.useEffect)(() => {
|
|
53119
53131
|
setMutes(clientMutes);
|
|
53120
53132
|
const handleEvent = (event) => {
|
|
53121
53133
|
setMutes(event.me?.mutes || []);
|
|
@@ -53123,7 +53135,7 @@ var useChat = ({
|
|
|
53123
53135
|
client.on("notification.mutes_updated", handleEvent);
|
|
53124
53136
|
return () => client.off("notification.mutes_updated", handleEvent);
|
|
53125
53137
|
}, [clientMutes?.length]);
|
|
53126
|
-
(0,
|
|
53138
|
+
(0, import_react263.useEffect)(() => {
|
|
53127
53139
|
let userLanguage = client.user?.language;
|
|
53128
53140
|
if (!userLanguage) {
|
|
53129
53141
|
const browserLanguage = window.navigator.language.slice(0, 2);
|
|
@@ -53140,7 +53152,7 @@ var useChat = ({
|
|
|
53140
53152
|
});
|
|
53141
53153
|
});
|
|
53142
53154
|
}, [i18nInstance]);
|
|
53143
|
-
const setActiveChannel = (0,
|
|
53155
|
+
const setActiveChannel = (0, import_react263.useCallback)(
|
|
53144
53156
|
async (activeChannel, watchers = {}, event) => {
|
|
53145
53157
|
if (event && event.preventDefault) event.preventDefault();
|
|
53146
53158
|
if (activeChannel && Object.keys(watchers).length) {
|
|
@@ -53151,7 +53163,7 @@ var useChat = ({
|
|
|
53151
53163
|
},
|
|
53152
53164
|
[]
|
|
53153
53165
|
);
|
|
53154
|
-
(0,
|
|
53166
|
+
(0, import_react263.useEffect)(() => {
|
|
53155
53167
|
setLatestMessageDatesByChannels({});
|
|
53156
53168
|
}, [client.user?.id]);
|
|
53157
53169
|
return {
|
|
@@ -53168,7 +53180,7 @@ var useChat = ({
|
|
|
53168
53180
|
};
|
|
53169
53181
|
|
|
53170
53182
|
// src/components/Chat/hooks/useCreateChatContext.ts
|
|
53171
|
-
var
|
|
53183
|
+
var import_react264 = require("react");
|
|
53172
53184
|
var useCreateChatContext = (value) => {
|
|
53173
53185
|
const {
|
|
53174
53186
|
channel,
|
|
@@ -53193,7 +53205,7 @@ var useCreateChatContext = (value) => {
|
|
|
53193
53205
|
const clientValues = `${client.clientID}${Object.keys(client.activeChannels).length}${Object.keys(client.listeners).length}${client.mutedChannels.length}
|
|
53194
53206
|
${client.user?.id}`;
|
|
53195
53207
|
const mutedUsersLength = mutes.length;
|
|
53196
|
-
const chatContext = (0,
|
|
53208
|
+
const chatContext = (0, import_react264.useMemo)(
|
|
53197
53209
|
() => ({
|
|
53198
53210
|
channel,
|
|
53199
53211
|
channelsQueryState,
|
|
@@ -53228,10 +53240,10 @@ var useCreateChatContext = (value) => {
|
|
|
53228
53240
|
};
|
|
53229
53241
|
|
|
53230
53242
|
// src/components/Chat/hooks/useChannelsQueryState.ts
|
|
53231
|
-
var
|
|
53243
|
+
var import_react265 = require("react");
|
|
53232
53244
|
var useChannelsQueryState = () => {
|
|
53233
|
-
const [error, setError] = (0,
|
|
53234
|
-
const [queryInProgress, setQueryInProgress] = (0,
|
|
53245
|
+
const [error, setError] = (0, import_react265.useState)(null);
|
|
53246
|
+
const [queryInProgress, setQueryInProgress] = (0, import_react265.useState)("uninitialized");
|
|
53235
53247
|
return {
|
|
53236
53248
|
error,
|
|
53237
53249
|
queryInProgress,
|
|
@@ -53266,7 +53278,7 @@ var Chat = (props) => {
|
|
|
53266
53278
|
translators
|
|
53267
53279
|
} = useChat({ client, defaultLanguage, i18nInstance, initialNavOpen });
|
|
53268
53280
|
const channelsQueryState = useChannelsQueryState();
|
|
53269
|
-
const searchController = (0,
|
|
53281
|
+
const searchController = (0, import_react266.useMemo)(
|
|
53270
53282
|
() => customChannelSearchController ?? new import_stream_chat6.SearchController({
|
|
53271
53283
|
sources: [
|
|
53272
53284
|
new import_stream_chat6.ChannelSearchSource(client),
|
|
@@ -53294,11 +53306,11 @@ var Chat = (props) => {
|
|
|
53294
53306
|
useImageFlagEmojisOnWindows
|
|
53295
53307
|
});
|
|
53296
53308
|
if (!translators.t) return null;
|
|
53297
|
-
return /* @__PURE__ */
|
|
53309
|
+
return /* @__PURE__ */ import_react266.default.createElement(ChatProvider, { value: chatContextValue }, /* @__PURE__ */ import_react266.default.createElement(TranslationProvider, { value: translators }, children));
|
|
53298
53310
|
};
|
|
53299
53311
|
|
|
53300
53312
|
// src/components/Chat/hooks/useCreateChatClient.ts
|
|
53301
|
-
var
|
|
53313
|
+
var import_react267 = require("react");
|
|
53302
53314
|
var import_stream_chat7 = require("stream-chat");
|
|
53303
53315
|
var useCreateChatClient = ({
|
|
53304
53316
|
apiKey,
|
|
@@ -53306,13 +53318,13 @@ var useCreateChatClient = ({
|
|
|
53306
53318
|
tokenOrProvider,
|
|
53307
53319
|
userData
|
|
53308
53320
|
}) => {
|
|
53309
|
-
const [chatClient, setChatClient] = (0,
|
|
53310
|
-
const [cachedUserData, setCachedUserData] = (0,
|
|
53321
|
+
const [chatClient, setChatClient] = (0, import_react267.useState)(null);
|
|
53322
|
+
const [cachedUserData, setCachedUserData] = (0, import_react267.useState)(userData);
|
|
53311
53323
|
if (userData.id !== cachedUserData.id) {
|
|
53312
53324
|
setCachedUserData(userData);
|
|
53313
53325
|
}
|
|
53314
|
-
const [cachedOptions] = (0,
|
|
53315
|
-
(0,
|
|
53326
|
+
const [cachedOptions] = (0, import_react267.useState)(options);
|
|
53327
|
+
(0, import_react267.useEffect)(() => {
|
|
53316
53328
|
const client = new import_stream_chat7.StreamChat(apiKey, void 0, cachedOptions);
|
|
53317
53329
|
let didUserConnectInterrupt = false;
|
|
53318
53330
|
const connectionPromise = client.connectUser(cachedUserData, tokenOrProvider).then(() => {
|
|
@@ -53330,17 +53342,17 @@ var useCreateChatClient = ({
|
|
|
53330
53342
|
};
|
|
53331
53343
|
|
|
53332
53344
|
// src/components/Thread/Thread.tsx
|
|
53333
|
-
var
|
|
53345
|
+
var import_react272 = __toESM(require("react"));
|
|
53334
53346
|
var import_clsx66 = __toESM(require("clsx"));
|
|
53335
53347
|
|
|
53336
53348
|
// src/components/Thread/ThreadHeader.tsx
|
|
53337
|
-
var
|
|
53349
|
+
var import_react269 = __toESM(require("react"));
|
|
53338
53350
|
|
|
53339
53351
|
// src/components/Thread/icons.tsx
|
|
53340
|
-
var
|
|
53352
|
+
var import_react268 = __toESM(require("react"));
|
|
53341
53353
|
var CloseIcon3 = ({ title }) => {
|
|
53342
53354
|
const { t: t2 } = useTranslationContext("CloseIcon");
|
|
53343
|
-
return /* @__PURE__ */
|
|
53355
|
+
return /* @__PURE__ */ import_react268.default.createElement(
|
|
53344
53356
|
"svg",
|
|
53345
53357
|
{
|
|
53346
53358
|
"data-testid": "close-no-outline",
|
|
@@ -53348,8 +53360,8 @@ var CloseIcon3 = ({ title }) => {
|
|
|
53348
53360
|
viewBox: "0 0 24 24",
|
|
53349
53361
|
xmlns: "http://www.w3.org/2000/svg"
|
|
53350
53362
|
},
|
|
53351
|
-
/* @__PURE__ */
|
|
53352
|
-
/* @__PURE__ */
|
|
53363
|
+
/* @__PURE__ */ import_react268.default.createElement("title", null, title ?? t2("Close")),
|
|
53364
|
+
/* @__PURE__ */ import_react268.default.createElement(
|
|
53353
53365
|
"path",
|
|
53354
53366
|
{
|
|
53355
53367
|
d: "M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z",
|
|
@@ -53369,7 +53381,7 @@ var ThreadHeader = (props) => {
|
|
|
53369
53381
|
overrideImage,
|
|
53370
53382
|
overrideTitle
|
|
53371
53383
|
});
|
|
53372
|
-
return /* @__PURE__ */
|
|
53384
|
+
return /* @__PURE__ */ import_react269.default.createElement("div", { className: "str-chat__thread-header" }, /* @__PURE__ */ import_react269.default.createElement("div", { className: "str-chat__thread-header-details" }, /* @__PURE__ */ import_react269.default.createElement("div", { className: "str-chat__thread-header-title" }, t2("Thread")), /* @__PURE__ */ import_react269.default.createElement("div", { className: "str-chat__thread-header-subtitle" }, displayTitle)), /* @__PURE__ */ import_react269.default.createElement(
|
|
53373
53385
|
"button",
|
|
53374
53386
|
{
|
|
53375
53387
|
"aria-label": t2("aria/Close thread"),
|
|
@@ -53377,26 +53389,26 @@ var ThreadHeader = (props) => {
|
|
|
53377
53389
|
"data-testid": "close-button",
|
|
53378
53390
|
onClick: closeThread
|
|
53379
53391
|
},
|
|
53380
|
-
/* @__PURE__ */
|
|
53392
|
+
/* @__PURE__ */ import_react269.default.createElement(CloseIcon3, null)
|
|
53381
53393
|
));
|
|
53382
53394
|
};
|
|
53383
53395
|
|
|
53384
53396
|
// src/components/Thread/ThreadHead.tsx
|
|
53385
|
-
var
|
|
53397
|
+
var import_react271 = __toESM(require("react"));
|
|
53386
53398
|
|
|
53387
53399
|
// src/components/Thread/ThreadStart.tsx
|
|
53388
|
-
var
|
|
53400
|
+
var import_react270 = __toESM(require("react"));
|
|
53389
53401
|
var ThreadStart = () => {
|
|
53390
53402
|
const { thread } = useChannelStateContext("ThreadStart");
|
|
53391
53403
|
const { t: t2 } = useTranslationContext("ThreadStart");
|
|
53392
53404
|
if (!thread?.reply_count) return null;
|
|
53393
|
-
return /* @__PURE__ */
|
|
53405
|
+
return /* @__PURE__ */ import_react270.default.createElement("div", { className: "str-chat__thread-start" }, t2("replyCount", { count: thread.reply_count }));
|
|
53394
53406
|
};
|
|
53395
53407
|
|
|
53396
53408
|
// src/components/Thread/ThreadHead.tsx
|
|
53397
53409
|
var ThreadHead = (props) => {
|
|
53398
53410
|
const { ThreadStart: ThreadStart2 = ThreadStart } = useComponentContext("ThreadHead");
|
|
53399
|
-
return /* @__PURE__ */
|
|
53411
|
+
return /* @__PURE__ */ import_react271.default.createElement("div", { className: "str-chat__parent-message-li" }, /* @__PURE__ */ import_react271.default.createElement(Message, { initialMessage: true, threadList: true, ...props }), /* @__PURE__ */ import_react271.default.createElement(ThreadStart2, null));
|
|
53400
53412
|
};
|
|
53401
53413
|
|
|
53402
53414
|
// src/components/Thread/Thread.tsx
|
|
@@ -53406,7 +53418,7 @@ var Thread = (props) => {
|
|
|
53406
53418
|
if (!thread && !threadInstance || channelConfig?.replies === false) return null;
|
|
53407
53419
|
return (
|
|
53408
53420
|
// FIXME: TS is having trouble here as at least one of the two would always be defined
|
|
53409
|
-
/* @__PURE__ */
|
|
53421
|
+
/* @__PURE__ */ import_react272.default.createElement(
|
|
53410
53422
|
ThreadInner,
|
|
53411
53423
|
{
|
|
53412
53424
|
...props,
|
|
@@ -53457,7 +53469,7 @@ var ThreadInner = (props) => {
|
|
|
53457
53469
|
const FallbackMessage = virtualized && VirtualMessage ? VirtualMessage : ContextMessage;
|
|
53458
53470
|
const MessageUIComponent = ThreadMessage || FallbackMessage;
|
|
53459
53471
|
const ThreadMessageList = virtualized ? VirtualizedMessageList : MessageList;
|
|
53460
|
-
(0,
|
|
53472
|
+
(0, import_react272.useEffect)(() => {
|
|
53461
53473
|
if (thread?.id && thread?.reply_count) {
|
|
53462
53474
|
loadMoreThread();
|
|
53463
53475
|
}
|
|
@@ -53479,7 +53491,7 @@ var ThreadInner = (props) => {
|
|
|
53479
53491
|
const threadClass = customClasses?.thread || (0, import_clsx66.default)("str-chat__thread-container str-chat__thread", {
|
|
53480
53492
|
"str-chat__thread--virtualized": virtualized
|
|
53481
53493
|
});
|
|
53482
|
-
const head = /* @__PURE__ */
|
|
53494
|
+
const head = /* @__PURE__ */ import_react272.default.createElement(
|
|
53483
53495
|
ThreadHead2,
|
|
53484
53496
|
{
|
|
53485
53497
|
key: messageAsThread.id,
|
|
@@ -53488,7 +53500,7 @@ var ThreadInner = (props) => {
|
|
|
53488
53500
|
...additionalParentMessageProps
|
|
53489
53501
|
}
|
|
53490
53502
|
);
|
|
53491
|
-
return /* @__PURE__ */
|
|
53503
|
+
return /* @__PURE__ */ import_react272.default.createElement("div", { className: threadClass }, /* @__PURE__ */ import_react272.default.createElement(ThreadHeader2, { closeThread, thread: messageAsThread }), /* @__PURE__ */ import_react272.default.createElement(
|
|
53492
53504
|
ThreadMessageList,
|
|
53493
53505
|
{
|
|
53494
53506
|
disableDateSeparator: !enableDateSeparator,
|
|
@@ -53500,7 +53512,7 @@ var ThreadInner = (props) => {
|
|
|
53500
53512
|
...threadProps,
|
|
53501
53513
|
...virtualized ? additionalVirtualizedMessageListProps : additionalMessageListProps
|
|
53502
53514
|
}
|
|
53503
|
-
), /* @__PURE__ */
|
|
53515
|
+
), /* @__PURE__ */ import_react272.default.createElement(
|
|
53504
53516
|
MessageInput,
|
|
53505
53517
|
{
|
|
53506
53518
|
focus: autoFocus,
|
|
@@ -53514,12 +53526,12 @@ var ThreadInner = (props) => {
|
|
|
53514
53526
|
};
|
|
53515
53527
|
|
|
53516
53528
|
// src/components/Window/Window.tsx
|
|
53517
|
-
var
|
|
53529
|
+
var import_react273 = __toESM(require("react"));
|
|
53518
53530
|
var import_clsx67 = __toESM(require("clsx"));
|
|
53519
53531
|
var UnMemoizedWindow = (props) => {
|
|
53520
53532
|
const { children, thread: propThread } = props;
|
|
53521
53533
|
const { thread: contextThread } = useChannelStateContext("Window");
|
|
53522
|
-
return /* @__PURE__ */
|
|
53534
|
+
return /* @__PURE__ */ import_react273.default.createElement(
|
|
53523
53535
|
"div",
|
|
53524
53536
|
{
|
|
53525
53537
|
className: (0, import_clsx67.default)("str-chat__main-panel", {
|
|
@@ -53529,7 +53541,7 @@ var UnMemoizedWindow = (props) => {
|
|
|
53529
53541
|
children
|
|
53530
53542
|
);
|
|
53531
53543
|
};
|
|
53532
|
-
var Window =
|
|
53544
|
+
var Window = import_react273.default.memo(UnMemoizedWindow);
|
|
53533
53545
|
/*! Bundled license information:
|
|
53534
53546
|
|
|
53535
53547
|
is-buffer/index.js:
|