@emberai-engg/task-board 0.3.5 → 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
 
@@ -696,18 +704,20 @@ var TaskCard = (0, import_react5.memo)(function TaskCard2({ task, index, onClick
696
704
  var import_jsx_runtime8 = require("react/jsx-runtime");
697
705
  function LoadMoreSentinel({ loading, onLoadMore, remaining }) {
698
706
  const sentinelRef = (0, import_react6.useRef)(null);
707
+ const onLoadMoreRef = (0, import_react6.useRef)(onLoadMore);
708
+ onLoadMoreRef.current = onLoadMore;
699
709
  (0, import_react6.useEffect)(() => {
700
710
  const el = sentinelRef.current;
701
711
  if (!el) return;
702
712
  const observer = new IntersectionObserver(
703
713
  ([entry]) => {
704
- if (entry.isIntersecting && !loading) onLoadMore();
714
+ if (entry.isIntersecting && !loading) onLoadMoreRef.current();
705
715
  },
706
716
  { threshold: 0.1 }
707
717
  );
708
718
  observer.observe(el);
709
719
  return () => observer.disconnect();
710
- }, [loading, onLoadMore]);
720
+ }, [loading]);
711
721
  const skeletonCount = loading ? Math.min(remaining, 10) : 0;
712
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)) });
713
723
  }
@@ -2102,7 +2112,7 @@ function TaskBoard({
2102
2112
  const { columns, features, service } = useTaskBoardContext();
2103
2113
  const isDraggingRef = (0, import_react13.useRef)(false);
2104
2114
  const board = useTaskBoard(isDraggingRef);
2105
- const actions = useTaskActions(board.tasks, board.setTasks, board.fetchTasks, isDraggingRef);
2115
+ const actions = useTaskActions(board.tasks, board.setTasks, board.fetchTasks, isDraggingRef, board.setColumnTotals);
2106
2116
  const { copiedTaskId, copyShareLink } = useShareLink();
2107
2117
  const [selectedTask, setSelectedTask] = (0, import_react13.useState)(null);
2108
2118
  const [createForStatus, setCreateForStatus] = (0, import_react13.useState)("");