@burdenoff/planmagnet-fe-sdk 2026.813.1 → 2026.1108.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -131,7 +131,8 @@ match the local codegen SDL.
131
131
  ```bash
132
132
  bun install
133
133
  bun run build # tsup → dist/ (+ copies styles.css)
134
- bun run type:check # tsc --noEmit
134
+ bun run type:check # bun check
135
+ bun run sanity # boff sanity (format, lint, typecheck, test, build)
135
136
  bun run dev # tsup --watch
136
137
  ```
137
138
 
package/dist/index.js CHANGED
@@ -2007,9 +2007,11 @@ function TaskListCore({
2007
2007
  () => /* @__PURE__ */ new Set()
2008
2008
  );
2009
2009
  const rowsKey = useMemo(() => rows.map((r) => r.id).join(","), [rows]);
2010
- useEffect(() => {
2010
+ const [selectionKey, setSelectionKey] = useState(rowsKey);
2011
+ if (selectionKey !== rowsKey) {
2012
+ setSelectionKey(rowsKey);
2011
2013
  setSelected((prev) => prev.size ? /* @__PURE__ */ new Set() : prev);
2012
- }, [rowsKey]);
2014
+ }
2013
2015
  const [bulkUpdate, { loading: bulkUpdating }] = useMutation(
2014
2016
  BULK_UPDATE_WORK_ITEMS
2015
2017
  );
@@ -3197,7 +3199,10 @@ function TaskCommentsCore({
3197
3199
  errorPolicy: "all"
3198
3200
  }
3199
3201
  );
3200
- const all = data?.getEntityComments?.items ?? [];
3202
+ const all = useMemo(
3203
+ () => data?.getEntityComments?.items ?? [],
3204
+ [data?.getEntityComments?.items]
3205
+ );
3201
3206
  const { topLevel, repliesByRoot } = useMemo(() => {
3202
3207
  const top = [];
3203
3208
  const map = /* @__PURE__ */ new Map();
@@ -3586,8 +3591,9 @@ function TaskDetailCore({
3586
3591
  const [dueDate, setDueDate] = useState("");
3587
3592
  const [labels, setLabels] = useState("");
3588
3593
  const [storyPoints, setStoryPoints] = useState("");
3589
- useEffect(() => {
3590
- if (!item) return;
3594
+ const [hydratedItem, setHydratedItem] = useState(null);
3595
+ if (item && item !== hydratedItem) {
3596
+ setHydratedItem(item);
3591
3597
  setTitle(item.title);
3592
3598
  setDescription(item.description ?? "");
3593
3599
  setType(item.type);
@@ -3597,7 +3603,7 @@ function TaskDetailCore({
3597
3603
  setDueDate(item.dueDate ? String(item.dueDate).slice(0, 10) : "");
3598
3604
  setLabels((item.labels ?? []).join(", "));
3599
3605
  setStoryPoints(item.storyPoints != null ? String(item.storyPoints) : "");
3600
- }, [item]);
3606
+ }
3601
3607
  const [updateWorkItem, { loading: saving, error: saveError }] = useMutation(UPDATE_WORK_ITEM);
3602
3608
  const [deleteWorkItem, { loading: deleting, error: deleteError }] = useMutation(DELETE_WORK_ITEM);
3603
3609
  const handleDelete = async () => {
@@ -4260,9 +4266,11 @@ function useSavedViews({
4260
4266
  );
4261
4267
  const restored = enabled ? initial?.current ?? null : null;
4262
4268
  const viewsRef = useRef(views);
4263
- viewsRef.current = views;
4264
4269
  const activeViewIdRef = useRef(activeViewId);
4265
- activeViewIdRef.current = activeViewId;
4270
+ useEffect(() => {
4271
+ viewsRef.current = views;
4272
+ activeViewIdRef.current = activeViewId;
4273
+ }, [views, activeViewId]);
4266
4274
  useEffect(() => {
4267
4275
  if (!enabled) return;
4268
4276
  const handle = setTimeout(() => {
@@ -4386,9 +4394,11 @@ function TasksPageCore({
4386
4394
  const [showHelp, setShowHelp] = useState(false);
4387
4395
  const searchInputRef = useRef(null);
4388
4396
  const [createDefaults, setCreateDefaults] = useState(null);
4389
- useEffect(() => {
4397
+ const [seenOpenItemId, setSeenOpenItemId] = useState();
4398
+ if (openItemId !== seenOpenItemId) {
4399
+ setSeenOpenItemId(openItemId);
4390
4400
  if (openItemId) setSelectedId(openItemId);
4391
- }, [openItemId]);
4401
+ }
4392
4402
  const refetchBoard = useCallback(() => {
4393
4403
  void client.refetchQueries({ include: [LIST_WORK_ITEMS] }).catch(() => {
4394
4404
  });
@@ -4474,11 +4484,10 @@ function TasksPageCore({
4474
4484
  current: currentViewState
4475
4485
  });
4476
4486
  const [didRestore, setDidRestore] = useState(false);
4477
- useEffect(() => {
4478
- if (didRestore || !persistEnabled) return;
4479
- if (restored) applyViewState(restored);
4487
+ if (!didRestore && persistEnabled) {
4480
4488
  setDidRestore(true);
4481
- }, [persistEnabled]);
4489
+ if (restored) applyViewState(restored);
4490
+ }
4482
4491
  const handleApplySavedView = useCallback(
4483
4492
  (id) => {
4484
4493
  const s = applyView(id);