elseware-ui 2.31.2 → 2.31.5

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/index.d.mts CHANGED
@@ -1444,7 +1444,7 @@ interface CommentThreadProps {
1444
1444
  onDelete?: (comment: CommentEntity) => void;
1445
1445
  onReport?: (comment: CommentEntity) => void;
1446
1446
  }
1447
- declare function CommentThread({ postId, currentUser, dataSource, loading, onEdit, onDelete, onReport, }: CommentThreadProps): react_jsx_runtime.JSX.Element;
1447
+ declare function CommentThread({ currentUser, dataSource, loading, onEdit, onDelete, onReport, }: CommentThreadProps): react_jsx_runtime.JSX.Element;
1448
1448
 
1449
1449
  type SortOption = {
1450
1450
  value: string;
package/dist/index.d.ts CHANGED
@@ -1444,7 +1444,7 @@ interface CommentThreadProps {
1444
1444
  onDelete?: (comment: CommentEntity) => void;
1445
1445
  onReport?: (comment: CommentEntity) => void;
1446
1446
  }
1447
- declare function CommentThread({ postId, currentUser, dataSource, loading, onEdit, onDelete, onReport, }: CommentThreadProps): react_jsx_runtime.JSX.Element;
1447
+ declare function CommentThread({ currentUser, dataSource, loading, onEdit, onDelete, onReport, }: CommentThreadProps): react_jsx_runtime.JSX.Element;
1448
1448
 
1449
1449
  type SortOption = {
1450
1450
  value: string;
package/dist/index.js CHANGED
@@ -17952,149 +17952,6 @@ function CommentList({
17952
17952
  )) });
17953
17953
  }
17954
17954
  var CommentList_default = CommentList;
17955
- function EditCommentModal({
17956
- show,
17957
- comment,
17958
- handleCloseModal,
17959
- onSubmit
17960
- }) {
17961
- if (!comment) return null;
17962
- return /* @__PURE__ */ jsxRuntime.jsx(Modal_default, { title: "Edit Comment", show, handleOnClose: handleCloseModal, children: /* @__PURE__ */ jsxRuntime.jsx(
17963
- Form,
17964
- {
17965
- enableReinitialize: true,
17966
- initialValues: {
17967
- content: comment.content
17968
- },
17969
- onSubmit: async (values) => {
17970
- await onSubmit?.(comment, values.content);
17971
- handleCloseModal();
17972
- },
17973
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
17974
- /* @__PURE__ */ jsxRuntime.jsx(TextArea_default, { name: "content", rows: 5, placeholder: "Comment" }),
17975
- /* @__PURE__ */ jsxRuntime.jsx(Button_default, { type: "submit", variant: "success", text: "Save Changes" })
17976
- ] })
17977
- }
17978
- ) });
17979
- }
17980
- var EditCommentModal_default = EditCommentModal;
17981
- function DeleteCommentModal({
17982
- show,
17983
- comment,
17984
- handleCloseModal,
17985
- onDelete
17986
- }) {
17987
- if (!comment) return null;
17988
- return /* @__PURE__ */ jsxRuntime.jsx(Modal_default, { title: "Delete Comment", show, handleOnClose: handleCloseModal, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5", children: [
17989
- /* @__PURE__ */ jsxRuntime.jsx(Typography.Paragraph, { children: "Are you sure you want to permanently delete this comment?" }),
17990
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3 justify-end", children: [
17991
- /* @__PURE__ */ jsxRuntime.jsx(Button_default, { text: "Cancel", appearance: "ghost", onClick: handleCloseModal }),
17992
- /* @__PURE__ */ jsxRuntime.jsx(
17993
- Button_default,
17994
- {
17995
- text: "Delete",
17996
- variant: "danger",
17997
- onClick: async () => {
17998
- await onDelete?.(comment);
17999
- handleCloseModal();
18000
- }
18001
- }
18002
- )
18003
- ] })
18004
- ] }) });
18005
- }
18006
- var DeleteCommentModal_default = DeleteCommentModal;
18007
- var REPORT_REASONS = [
18008
- {
18009
- label: "Spam",
18010
- value: "spam"
18011
- },
18012
- {
18013
- label: "Harassment",
18014
- value: "harassment"
18015
- },
18016
- {
18017
- label: "Hate Speech",
18018
- value: "hate_speech"
18019
- },
18020
- {
18021
- label: "Misleading Information",
18022
- value: "misleading_information"
18023
- },
18024
- {
18025
- label: "Other",
18026
- value: "other"
18027
- }
18028
- ];
18029
- function ReportCommentModal({
18030
- show,
18031
- comment,
18032
- handleCloseModal,
18033
- onSubmit
18034
- }) {
18035
- if (!comment) return null;
18036
- return /* @__PURE__ */ jsxRuntime.jsx(Modal_default, { title: "Report Comment", show, handleOnClose: handleCloseModal, children: /* @__PURE__ */ jsxRuntime.jsx(
18037
- Form,
18038
- {
18039
- initialValues: {
18040
- reason: "",
18041
- description: ""
18042
- },
18043
- onSubmit: async (values) => {
18044
- await onSubmit?.(comment, {
18045
- reason: values.reason,
18046
- description: values.description
18047
- });
18048
- handleCloseModal();
18049
- },
18050
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
18051
- /* @__PURE__ */ jsxRuntime.jsx(Select_default, { name: "reason", placeholder: "Reason", options: REPORT_REASONS }),
18052
- /* @__PURE__ */ jsxRuntime.jsx(
18053
- TextArea_default,
18054
- {
18055
- name: "description",
18056
- rows: 4,
18057
- placeholder: "Additional details"
18058
- }
18059
- ),
18060
- /* @__PURE__ */ jsxRuntime.jsx(Button_default, { type: "submit", variant: "danger", text: "Submit Report" })
18061
- ] })
18062
- }
18063
- ) });
18064
- }
18065
- var ReportCommentModal_default = ReportCommentModal;
18066
- function useCommentModals() {
18067
- const [showEditModal, setShowEditModal] = React4.useState(false);
18068
- const [showDeleteModal, setShowDeleteModal] = React4.useState(false);
18069
- const [showReportModal, setShowReportModal] = React4.useState(false);
18070
- return {
18071
- showEditModal,
18072
- openEditModal: () => setShowEditModal(true),
18073
- closeEditModal: () => setShowEditModal(false),
18074
- showDeleteModal,
18075
- openDeleteModal: () => setShowDeleteModal(true),
18076
- closeDeleteModal: () => setShowDeleteModal(false),
18077
- showReportModal,
18078
- openReportModal: () => setShowReportModal(true),
18079
- closeReportModal: () => setShowReportModal(false)
18080
- };
18081
- }
18082
- function useCommentSelection() {
18083
- const [selectedComment, setSelectedComment] = React4.useState(
18084
- null
18085
- );
18086
- function selectComment(comment) {
18087
- setSelectedComment(comment);
18088
- }
18089
- function clearSelection() {
18090
- setSelectedComment(null);
18091
- }
18092
- return {
18093
- selectedComment,
18094
- selectComment,
18095
- clearSelection
18096
- };
18097
- }
18098
17955
 
18099
17956
  // src/compositions/comment-thread/utils/buildCommentTree.ts
18100
17957
  function buildCommentTree(comments) {
@@ -18133,14 +17990,6 @@ function updateComment(comments, commentId, updater) {
18133
17990
  });
18134
17991
  }
18135
17992
 
18136
- // src/compositions/comment-thread/utils/removeComment.ts
18137
- function removeComment(comments, commentId) {
18138
- return comments.filter((comment) => comment.id !== commentId).map((comment) => ({
18139
- ...comment,
18140
- replies: comment.replies ? removeComment(comment.replies, commentId) : []
18141
- }));
18142
- }
18143
-
18144
17993
  // src/compositions/comment-thread/utils/insertReply.ts
18145
17994
  function insertReply(comments, parentId, reply) {
18146
17995
  return comments.map((comment) => {
@@ -18157,7 +18006,6 @@ function insertReply(comments, parentId, reply) {
18157
18006
  });
18158
18007
  }
18159
18008
  function CommentThread({
18160
- postId,
18161
18009
  currentUser,
18162
18010
  dataSource,
18163
18011
  loading = false,
@@ -18167,8 +18015,6 @@ function CommentThread({
18167
18015
  }) {
18168
18016
  const [comments, setComments] = React4.useState([]);
18169
18017
  const [isLoadingComments, setIsLoadingComments] = React4.useState(true);
18170
- const selection = useCommentSelection();
18171
- const modals = useCommentModals();
18172
18018
  React4.useEffect(() => {
18173
18019
  async function loadComments() {
18174
18020
  try {
@@ -18195,110 +18041,70 @@ function CommentThread({
18195
18041
  setComments((prev) => insertReply(prev, parentComment.id, reply));
18196
18042
  }
18197
18043
  async function handleLike(comment) {
18198
- const result = await dataSource.toggleLike(comment.id);
18044
+ const optimistic = {
18045
+ liked: !comment.liked,
18046
+ disliked: false,
18047
+ likes: comment.liked ? comment.likes - 1 : comment.likes + 1,
18048
+ dislikes: comment.disliked ? Math.max(comment.dislikes - 1, 0) : comment.dislikes
18049
+ };
18199
18050
  setComments(
18200
18051
  (prev) => updateComment(prev, comment.id, (item) => ({
18201
18052
  ...item,
18202
- likes: result.likes,
18203
- dislikes: result.dislikes,
18204
- liked: result.liked,
18205
- disliked: result.disliked
18053
+ likes: optimistic.likes,
18054
+ dislikes: optimistic.dislikes,
18055
+ liked: optimistic.liked,
18056
+ disliked: optimistic.disliked
18206
18057
  }))
18207
18058
  );
18059
+ try {
18060
+ await dataSource.toggleLike(comment.id);
18061
+ } catch {
18062
+ setComments((prev) => updateComment(prev, comment.id, () => comment));
18063
+ }
18208
18064
  }
18209
18065
  async function handleDislike(comment) {
18210
- const result = await dataSource.toggleDislike(comment.id);
18066
+ const optimistic = {
18067
+ liked: false,
18068
+ disliked: !comment.disliked,
18069
+ likes: comment.liked ? Math.max(comment.likes - 1, 0) : comment.likes,
18070
+ dislikes: comment.disliked ? comment.dislikes - 1 : comment.dislikes + 1
18071
+ };
18211
18072
  setComments(
18212
18073
  (prev) => updateComment(prev, comment.id, (item) => ({
18213
18074
  ...item,
18214
- likes: result.likes,
18215
- dislikes: result.dislikes,
18216
- liked: result.liked,
18217
- disliked: result.disliked
18075
+ likes: optimistic.likes,
18076
+ dislikes: optimistic.dislikes,
18077
+ liked: optimistic.liked,
18078
+ disliked: optimistic.disliked
18218
18079
  }))
18219
18080
  );
18220
- }
18221
- async function handleUpdateComment(comment, content) {
18222
- const updated = await dataSource.updateComment({
18223
- id: comment.id,
18224
- content
18225
- });
18226
- setComments((prev) => updateComment(prev, comment.id, () => updated));
18227
- }
18228
- async function handleDeleteComment(comment) {
18229
- await dataSource.deleteComment(comment.id);
18230
- setComments((prev) => removeComment(prev, comment.id));
18231
- onDelete?.(comment);
18232
- }
18233
- async function handleReportComment(comment, payload) {
18234
- await dataSource.reportComment?.(
18235
- comment.id,
18236
- payload.reason,
18237
- payload.description
18238
- );
18239
- onReport?.(comment);
18081
+ try {
18082
+ await dataSource.toggleDislike(comment.id);
18083
+ } catch {
18084
+ setComments((prev) => updateComment(prev, comment.id, () => comment));
18085
+ }
18240
18086
  }
18241
18087
  if (loading || isLoadingComments) {
18242
18088
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-6", children: "Loading comments..." });
18243
18089
  }
18244
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
18245
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-8", children: [
18246
- /* @__PURE__ */ jsxRuntime.jsx(
18247
- CommentComposer_default,
18248
- {
18249
- avatar: currentUser.avatar,
18250
- onSubmit: handleCreateComment
18251
- }
18252
- ),
18253
- /* @__PURE__ */ jsxRuntime.jsx(
18254
- CommentList_default,
18255
- {
18256
- comments,
18257
- onLike: handleLike,
18258
- onDislike: handleDislike,
18259
- onReply: handleReply,
18260
- onEdit: (comment) => {
18261
- selection.selectComment(comment);
18262
- onEdit?.(comment);
18263
- modals.openEditModal();
18264
- },
18265
- onDelete: (comment) => {
18266
- selection.selectComment(comment);
18267
- modals.openDeleteModal();
18268
- },
18269
- onReport: (comment) => {
18270
- selection.selectComment(comment);
18271
- onReport?.(comment);
18272
- modals.openReportModal();
18273
- }
18274
- }
18275
- )
18276
- ] }),
18277
- /* @__PURE__ */ jsxRuntime.jsx(
18278
- EditCommentModal_default,
18279
- {
18280
- show: modals.showEditModal,
18281
- comment: selection.selectedComment,
18282
- handleCloseModal: modals.closeEditModal,
18283
- onSubmit: handleUpdateComment
18284
- }
18285
- ),
18090
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-8", children: [
18286
18091
  /* @__PURE__ */ jsxRuntime.jsx(
18287
- DeleteCommentModal_default,
18092
+ CommentComposer_default,
18288
18093
  {
18289
- show: modals.showDeleteModal,
18290
- comment: selection.selectedComment,
18291
- handleCloseModal: modals.closeDeleteModal,
18292
- onDelete: handleDeleteComment
18094
+ avatar: currentUser.avatar,
18095
+ onSubmit: handleCreateComment
18293
18096
  }
18294
18097
  ),
18295
18098
  /* @__PURE__ */ jsxRuntime.jsx(
18296
- ReportCommentModal_default,
18099
+ CommentList_default,
18297
18100
  {
18298
- show: modals.showReportModal,
18299
- comment: selection.selectedComment,
18300
- handleCloseModal: modals.closeReportModal,
18301
- onSubmit: handleReportComment
18101
+ comments,
18102
+ onLike: handleLike,
18103
+ onDislike: handleDislike,
18104
+ onReply: handleReply,
18105
+ onEdit,
18106
+ onDelete,
18107
+ onReport
18302
18108
  }
18303
18109
  )
18304
18110
  ] });