@emberai-engg/task-board 0.3.4 → 0.3.6

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
@@ -361,6 +361,7 @@ declare function useTaskBoard(isDragging?: React.RefObject<boolean>): {
361
361
  tasks: TasksByStatus;
362
362
  setTasks: React$1.Dispatch<React$1.SetStateAction<TasksByStatus>>;
363
363
  columnTotals: ColumnTotals;
364
+ setColumnTotals: React$1.Dispatch<React$1.SetStateAction<ColumnTotals>>;
364
365
  columnUnreads: ColumnUnreads;
365
366
  setColumnUnreads: React$1.Dispatch<React$1.SetStateAction<ColumnUnreads>>;
366
367
  boardLoading: boolean;
@@ -373,7 +374,7 @@ declare function useTaskBoard(isDragging?: React.RefObject<boolean>): {
373
374
  loadMoreTasks: (statusKey: string) => Promise<void>;
374
375
  };
375
376
 
376
- declare function useTaskActions(tasks: TasksByStatus, setTasks: React.Dispatch<React.SetStateAction<TasksByStatus>>, fetchTasks: () => Promise<void>, isDragging?: React.RefObject<boolean>): {
377
+ declare function useTaskActions(tasks: TasksByStatus, setTasks: React.Dispatch<React.SetStateAction<TasksByStatus>>, fetchTasks: () => Promise<void>, isDragging?: React.RefObject<boolean>, setColumnTotals?: React.Dispatch<React.SetStateAction<ColumnTotals>>): {
377
378
  createTask: (data: CreateTaskPayload) => Promise<Task>;
378
379
  updateTask: (taskId: string, data: UpdateTaskPayload) => Promise<Task>;
379
380
  deleteTask: (taskId: string) => Promise<void>;
package/dist/index.d.ts CHANGED
@@ -361,6 +361,7 @@ declare function useTaskBoard(isDragging?: React.RefObject<boolean>): {
361
361
  tasks: TasksByStatus;
362
362
  setTasks: React$1.Dispatch<React$1.SetStateAction<TasksByStatus>>;
363
363
  columnTotals: ColumnTotals;
364
+ setColumnTotals: React$1.Dispatch<React$1.SetStateAction<ColumnTotals>>;
364
365
  columnUnreads: ColumnUnreads;
365
366
  setColumnUnreads: React$1.Dispatch<React$1.SetStateAction<ColumnUnreads>>;
366
367
  boardLoading: boolean;
@@ -373,7 +374,7 @@ declare function useTaskBoard(isDragging?: React.RefObject<boolean>): {
373
374
  loadMoreTasks: (statusKey: string) => Promise<void>;
374
375
  };
375
376
 
376
- declare function useTaskActions(tasks: TasksByStatus, setTasks: React.Dispatch<React.SetStateAction<TasksByStatus>>, fetchTasks: () => Promise<void>, isDragging?: React.RefObject<boolean>): {
377
+ declare function useTaskActions(tasks: TasksByStatus, setTasks: React.Dispatch<React.SetStateAction<TasksByStatus>>, fetchTasks: () => Promise<void>, isDragging?: React.RefObject<boolean>, setColumnTotals?: React.Dispatch<React.SetStateAction<ColumnTotals>>): {
377
378
  createTask: (data: CreateTaskPayload) => Promise<Task>;
378
379
  updateTask: (taskId: string, data: UpdateTaskPayload) => Promise<Task>;
379
380
  deleteTask: (taskId: string) => Promise<void>;
package/dist/index.js CHANGED
@@ -374,6 +374,7 @@ function useTaskBoard(isDragging) {
374
374
  tasks,
375
375
  setTasks,
376
376
  columnTotals,
377
+ setColumnTotals,
377
378
  columnUnreads,
378
379
  setColumnUnreads,
379
380
  boardLoading,
@@ -389,7 +390,7 @@ function useTaskBoard(isDragging) {
389
390
 
390
391
  // src/hooks/useTaskActions.ts
391
392
  var import_react3 = require("react");
392
- function useTaskActions(tasks, setTasks, fetchTasks, isDragging) {
393
+ function useTaskActions(tasks, setTasks, fetchTasks, isDragging, setColumnTotals) {
393
394
  const { service, config } = useTaskBoardContext();
394
395
  const internalDragging = (0, import_react3.useRef)(false);
395
396
  const draggingRef = isDragging ?? internalDragging;
@@ -443,6 +444,13 @@ function useTaskActions(tasks, setTasks, fetchTasks, isDragging) {
443
444
  }
444
445
  return newTasks;
445
446
  });
447
+ if (sourceStatus !== destStatus && setColumnTotals) {
448
+ setColumnTotals((prev) => ({
449
+ ...prev,
450
+ [sourceStatus]: Math.max(0, (prev[sourceStatus] || 0) - 1),
451
+ [destStatus]: (prev[destStatus] || 0) + 1
452
+ }));
453
+ }
446
454
  try {
447
455
  await service.updateTask(taskId, { status: destStatus, position: newPosition });
448
456
  } catch {
@@ -450,7 +458,7 @@ function useTaskActions(tasks, setTasks, fetchTasks, isDragging) {
450
458
  } finally {
451
459
  draggingRef.current = false;
452
460
  }
453
- }, [setTasks, service, fetchTasks]);
461
+ }, [setTasks, setColumnTotals, service, fetchTasks]);
454
462
  return { createTask, updateTask, deleteTask, markTaskRead, moveTask };
455
463
  }
456
464
 
@@ -543,11 +551,15 @@ function formatDateTime(dateStr) {
543
551
  minute: "2-digit"
544
552
  });
545
553
  }
554
+ function stripMentionMarkup(text) {
555
+ return text.replace(/@\[(.*?)\]\(.*?\)/g, "@$1");
556
+ }
546
557
  function getDescriptionPreview(desc) {
547
558
  if (!desc) return "";
548
- if (typeof desc === "string") return desc;
559
+ if (typeof desc === "string") return stripMentionMarkup(desc);
549
560
  for (const section of DESCRIPTION_SECTIONS) {
550
- if (desc[section.key]?.trim()) return desc[section.key].trim();
561
+ const val = desc[section.key]?.trim();
562
+ if (val) return stripMentionMarkup(val);
551
563
  }
552
564
  return "";
553
565
  }
@@ -692,18 +704,20 @@ var TaskCard = (0, import_react5.memo)(function TaskCard2({ task, index, onClick
692
704
  var import_jsx_runtime8 = require("react/jsx-runtime");
693
705
  function LoadMoreSentinel({ loading, onLoadMore, remaining }) {
694
706
  const sentinelRef = (0, import_react6.useRef)(null);
707
+ const onLoadMoreRef = (0, import_react6.useRef)(onLoadMore);
708
+ onLoadMoreRef.current = onLoadMore;
695
709
  (0, import_react6.useEffect)(() => {
696
710
  const el = sentinelRef.current;
697
711
  if (!el) return;
698
712
  const observer = new IntersectionObserver(
699
713
  ([entry]) => {
700
- if (entry.isIntersecting && !loading) onLoadMore();
714
+ if (entry.isIntersecting && !loading) onLoadMoreRef.current();
701
715
  },
702
716
  { threshold: 0.1 }
703
717
  );
704
718
  observer.observe(el);
705
719
  return () => observer.disconnect();
706
- }, [loading, onLoadMore]);
720
+ }, [loading]);
707
721
  const skeletonCount = loading ? Math.min(remaining, 10) : 0;
708
722
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { ref: sentinelRef, className: "space-y-2 pt-2", children: Array.from({ length: skeletonCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SkeletonCard, {}, i)) });
709
723
  }
@@ -2098,7 +2112,7 @@ function TaskBoard({
2098
2112
  const { columns, features, service } = useTaskBoardContext();
2099
2113
  const isDraggingRef = (0, import_react13.useRef)(false);
2100
2114
  const board = useTaskBoard(isDraggingRef);
2101
- const actions = useTaskActions(board.tasks, board.setTasks, board.fetchTasks, isDraggingRef);
2115
+ const actions = useTaskActions(board.tasks, board.setTasks, board.fetchTasks, isDraggingRef, board.setColumnTotals);
2102
2116
  const { copiedTaskId, copyShareLink } = useShareLink();
2103
2117
  const [selectedTask, setSelectedTask] = (0, import_react13.useState)(null);
2104
2118
  const [createForStatus, setCreateForStatus] = (0, import_react13.useState)("");