Skip to content

wip#1540

Merged
simo6529 merged 11 commits intomainfrom
group-search-fix
Oct 14, 2025
Merged

wip#1540
simo6529 merged 11 commits intomainfrom
group-search-fix

Conversation

@simo6529
Copy link
Copy Markdown
Collaborator

@simo6529 simo6529 commented Oct 14, 2025

Summary by CodeRabbit

  • Bug Fixes

    • Stabilized “By Group Name” search with debounced URL updates and smoother navigation to prevent typing lag and missed characters.
    • Improved filter behavior including a reliable "My groups" author toggle and cleared stale query params.
  • Style / Accessibility

    • Updated options button icon and ARIA attributes; increased overlay stacking so menus and profile suggestions sit above cards.
  • Documentation

    • Added TKT-0007 and updated ticket workflow/templates to require an owner handle.

Signed-off-by: Simo <simo@6529.io>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Oct 14, 2025

Walkthrough

Adds TKT-0007 to codex/state and ticket docs; centralizes and debounces GroupsPageListWrapper query-param updates for group name/identity; raises z-indexes for menus and profile-search results; tweaks GroupCardEditActions UI/ARIA and replaces an SVG with FontAwesome; updates codex workflow to require an owner handle.

Changes

Cohort / File(s) Summary
Groups page query sync & debounce
components/groups/page/GroupsPageListWrapper.tsx
Replaces local filters with derived/memoized state and groupDraft; adds debounced setGroupName, updateGroupNameParam (uses startTransition + router.replace), createQueryString helper, lastSyncedGroupRef, CREATED_AT_LESS_THAN param handling, and author identity / "My Groups" callbacks.
Group card actions UI tweaks
components/groups/page/list/card/actions/GroupCardEditActions.tsx
Computes isMyFilter directly; editTitle now computed ("Edit" vs "Clone"); swaps inline SVG for FontAwesomeIcon faEllipsisVertical; adjusts ARIA attributes/IDs and increases z-index to z-40.
Profile search z-index
components/utils/input/profile-search/CommonProfileSearchItems.tsx
Bumps outer motion.div z-index from z-10 to z-50 and removes inner z-10 to ensure overlay priority; no other behavior changes.
Codex docs & tickets
codex/STATE.md, codex/agents.md, codex/tickets/README.md, codex/tickets/TICKET_TEMPLATE.md, codex/tickets/TKT-0007.md
Adds TKT-0007 row to STATE.md; inserts owner-handle requirement into agents/ticket templates and README; adds full TKT-0007 ticket describing debounce fix, z-index adjustments, and acceptance criteria.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor U as User
  participant GP as GroupsPageListWrapper
  participant D as Debounce Timer
  participant R as Router
  participant URL as Query String

  rect rgb(239,246,255)
  note over U,GP: Debounced group-name typing → URL update
  U->>GP: Type group name
  GP->>GP: update draft (setGroupName)
  GP->>D: schedule debounce(updateGroupNameParam)
  D-->>GP: debounce fires
  GP->>GP: createQueryString({group, identity, created_at_less_than})
  GP->>R: startTransition → router.replace(URL)
  R->>URL: Update query params
  end

  rect rgb(240,253,244)
  note over U,GP: "My Groups" / author identity toggle
  U->>GP: Click "My Groups"
  GP->>GP: setAuthorIdentity(handle or undefined)
  GP->>R: startTransition → router.replace(URL)
  end

  rect rgb(255,247,237)
  note over URL,GP: URL ↔ draft sync on mount/param change
  URL-->>GP: on mount/param change
  GP->>GP: Update groupDraft from URL
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

I hop and I debounce, so typing stays fleet,
Query params whisper and no keystroke we meet,
Menus climb higher, profiles float clear,
TKT-0007 hums — the input holds dear. 🥕🐇

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title Check ❓ Inconclusive The title “wip” is a generic placeholder that fails to convey the primary change in this pull request, which focuses on stabilizing the group name search input with debounced URL synchronization and z-index adjustments. Please replace the title with a concise description of the main change, for example “Stabilize group name search input with debounced URL sync and z-index fixes,” so that reviewers can immediately understand the PR’s purpose.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch group-search-fix

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 71cf79a and 522462e.

📒 Files selected for processing (1)
  • codex/STATE.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • codex/STATE.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
components/groups/page/list/card/actions/GroupCardEditActions.tsx (3)

48-53: Fix ARIA state and association for the menu trigger and popup

  • aria-expanded must reflect state.
  • Associate trigger with popup via aria-controls; set proper aria-haspopup value.

Apply this diff:

-        aria-expanded="false"
-        aria-haspopup="true"
+        aria-expanded={isOptionsOpen}
+        aria-haspopup="menu"
+        aria-controls="options-menu-0"
...
-          <motion.div
+          <motion.div
+            id="options-menu-0"

As per coding guidelines

Also applies to: 66-75


70-85: Keyboard accessibility: make menu and items focusable

tabIndex={-1} prevents keyboard focus. Remove it so users can navigate with Tab/Shift+Tab.

-            tabIndex={-1}
             initial={{ opacity: 0, y: -20 }}
...
-                role="menuitem"
-                tabIndex={-1}
+                role="menuitem"

As per coding guidelines


55-61: Use FontAwesome for the icon (inline SVG violates project guideline)

Replace the inline SVG with FontAwesome.

-        <svg
-          className="tw-h-5 tw-w-5"
-          viewBox="0 0 20 20"
-          fill="currentColor"
-          aria-hidden="true">
-          <path d="M10 3a1.5 1.5 0 110 3 1.5 1.5 0 010-3zM10 8.5a1.5 1.5 0 110 3 1.5 1.5 0 010-3zM11.5 15.5a1.5 1.5 0 10-3 0 1.5 1.5 0 003 0z" />
-        </svg>
+        <FontAwesomeIcon icon={faEllipsisVertical} className="tw-h-5 tw-w-5" aria-hidden="true" />

Add imports:

import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faEllipsisVertical } from "@fortawesome/free-solid-svg-icons";

As per coding guidelines

🧹 Nitpick comments (7)
components/groups/page/list/card/actions/GroupCardEditActions.tsx (1)

23-41: Avoid derived state; compute isMyFilter/editTitle directly

Both values derive from props/context and don’t need state/effects.

-  const [isMyFilter, setIsMyFilter] = useState(
-    connectedProfile?.handle?.toLowerCase() ===
-      group.created_by?.handle?.toLowerCase()
-  );
-
-  useEffect(
-    () =>
-      setIsMyFilter(
-        connectedProfile?.handle?.toLowerCase() ===
-          group.created_by?.handle?.toLowerCase()
-      ),
-    [connectedProfile]
-  );
-
-  const getEditTitle = () => (isMyFilter ? "Edit" : "Clone");
-
-  const [editTitle, setEditTitle] = useState<string>(getEditTitle());
-  useEffect(() => setEditTitle(getEditTitle()), [isMyFilter]);
+  const isMyFilter =
+    connectedProfile?.handle?.toLowerCase() ===
+    group.created_by?.handle?.toLowerCase();
+  const editTitle = isMyFilter ? "Edit" : "Clone";

As per coding guidelines

codex/tickets/TKT-0001.md (1)

27-28: Add PR link to improve auditability

Populate “Primary PR” with this PR and mirror in STATE.

- - Primary PR: _(add when available)_
+ - Primary PR: [#1540](https://github.com/6529-Collections/6529seize-frontend/pull/1540)

Based on learnings

codex/STATE.md (1)

7-7: Populate PRs column with link to this PR

Keep STATE in sync with tickets and PRs.

-| TKT-0001 | Stabilize group name search input | In-Progress | P0 | simoluts | — | 2025-10-14 |
+| TKT-0001 | Stabilize group name search input | In-Progress | P0 | simoluts | [#1540](https://github.com/6529-Collections/6529seize-frontend/pull/1540) | 2025-10-14 |

Based on learnings

components/groups/page/GroupsPageListWrapper.tsx (4)

74-85: Clear pagination param when changing group to avoid stale pages

If created_at_less_than is used for pagination, drop it when the search changes.

   const updateGroupNameParam = useCallback(
     (value: string | null) => {
       const query = createQueryString([
         {
           name: GROUP_NAME_SEARCH_PARAM,
           value,
         },
+        {
+          name: "created_at_less_than",
+          value: null,
+        },
       ]);
       router.replace(query ? `${pathname}?${query}` : pathname);
     },

Please confirm whether the list uses created_at_less_than; if not, ignore.


102-110: Also clear pagination when changing identity

Same rationale as group change.

   const setAuthorIdentity = (value: string | null) => {
     const query = createQueryString([
       {
         name: IDENTITY_SEARCH_PARAM,
         value,
       },
+      {
+        name: "created_at_less_than",
+        value: null,
+      },
     ]);
     router.replace(query ? `${pathname}?${query}` : pathname);
   };

56-72: Minor: tighten falsy handling and optional chaining

URLSearchParams construction doesn’t need ?. and generic falsy check may treat "0" as empty. Consider stricter empty handling if "0" can be valid.

-      const params = new URLSearchParams(searchParams?.toString());
+      const params = new URLSearchParams(searchParams.toString());
-        if (!value) {
+        if (value == null || value === "") {
           params?.delete(name);
         } else {
           params.set(name, value);
         }

98-121: Optional: memoize callbacks passed to child to reduce rerenders

If GroupsList memoizes props, wrap these in useCallback.

-  const setGroupName = (value: string | null) => {
-    setGroupDraft(value);
-  };
+  const setGroupName = useCallback((value: string | null) => {
+    setGroupDraft(value);
+  }, []);
...
-  const setAuthorIdentity = (value: string | null) => {
+  const setAuthorIdentity = useCallback((value: string | null) => {
     const query = createQueryString([
       {
         name: IDENTITY_SEARCH_PARAM,
         value,
       },
       {
         name: "created_at_less_than",
         value: null,
       },
     ]);
     router.replace(query ? `${pathname}?${query}` : pathname);
-  };
+  }, [createQueryString, pathname, router]);
...
-  const onMyGroups = () => {
+  const onMyGroups = useCallback(() => {
     if (!connectedProfile?.handle) {
       return;
     }
     if (activeProfileProxy?.created_by.handle) {
       setAuthorIdentity(activeProfileProxy.created_by.handle);
       return;
     }
     setAuthorIdentity(connectedProfile.handle);
-  };
+  }, [activeProfileProxy?.created_by.handle, connectedProfile?.handle, setAuthorIdentity]);
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4a44a67 and c97da8e.

📒 Files selected for processing (4)
  • codex/STATE.md (1 hunks)
  • codex/tickets/TKT-0001.md (1 hunks)
  • components/groups/page/GroupsPageListWrapper.tsx (2 hunks)
  • components/groups/page/list/card/actions/GroupCardEditActions.tsx (2 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
codex/tickets/**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Author new tickets with the provided template, keep YAML front matter alphabetical, and log timestamped updates as work progresses

Files:

  • codex/tickets/TKT-0001.md
codex/tickets/**

📄 CodeRabbit inference engine (AGENTS.md)

codex/tickets/**: Never edit tickets marked Done; open a new ticket if new scope emerges
Link pull requests back to their tickets and mirror merged PR references in both the ticket log and STATE.md

Files:

  • codex/tickets/TKT-0001.md
codex/STATE.md

📄 CodeRabbit inference engine (AGENTS.md)

Keep codex/STATE.md in sync with tickets under codex/tickets/ so the board remains auditable

Files:

  • codex/STATE.md
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx}: Do not include any comments in the code
Use react-query for data fetching
Always add readonly before props

**/*.{ts,tsx}: Use TypeScript for source code and follow existing code style and naming conventions
Adhere to clean code standards as measured by SonarQube

Files:

  • components/groups/page/list/card/actions/GroupCardEditActions.tsx
  • components/groups/page/GroupsPageListWrapper.tsx
**/*.tsx

📄 CodeRabbit inference engine (.cursorrules)

**/*.tsx: Use FontAwesome for icons
Use TailwindCSS for styling

Implement React components as functional components using hooks (no class components)

Files:

  • components/groups/page/list/card/actions/GroupCardEditActions.tsx
  • components/groups/page/GroupsPageListWrapper.tsx
🧠 Learnings (1)
📚 Learning: 2025-10-14T05:39:48.871Z
Learnt from: CR
PR: 6529-Collections/6529seize-frontend#0
File: AGENTS.md:0-0
Timestamp: 2025-10-14T05:39:48.871Z
Learning: Applies to codex/STATE.md : Keep codex/STATE.md in sync with tickets under codex/tickets/ so the board remains auditable

Applied to files:

  • codex/STATE.md
🧬 Code graph analysis (1)
components/groups/page/GroupsPageListWrapper.tsx (1)
entities/IGroup.ts (1)
  • GroupsRequestParams (1-5)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (4)
components/groups/page/list/card/actions/GroupCardEditActions.tsx (1)

43-43: z-index increase: verify overlay ordering app-wide

z-40 on container and popup should overlay adjacent controls; confirm it doesn’t exceed modal/sheet layers or create new stacking issues.

Also applies to: 66-66

codex/tickets/TKT-0001.md (1)

1-8: Front matter LGTM

Alphabetical keys and template usage look correct.

components/groups/page/GroupsPageListWrapper.tsx (2)

45-52: Derived filters via groupDraft/identity: LGTM

Memoized filters align with the debounce strategy and types.


87-96: Debounced router updates: LGTM

Good guard against redundant replaces and improved UX.

Test rapid typing/backspacing and ensure the input doesn’t lag on low-end devices.

Signed-off-by: Simo <simo@6529.io>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c97da8e and 90fdfdf.

📒 Files selected for processing (1)
  • components/groups/page/GroupsPageListWrapper.tsx (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx}: Do not include any comments in the code
Use react-query for data fetching
Always add readonly before props

**/*.{ts,tsx}: Use TypeScript for source code and follow existing code style and naming conventions
Adhere to clean code standards as measured by SonarQube

Files:

  • components/groups/page/GroupsPageListWrapper.tsx
**/*.tsx

📄 CodeRabbit inference engine (.cursorrules)

**/*.tsx: Use FontAwesome for icons
Use TailwindCSS for styling

Implement React components as functional components using hooks (no class components)

Files:

  • components/groups/page/GroupsPageListWrapper.tsx
🧬 Code graph analysis (1)
components/groups/page/GroupsPageListWrapper.tsx (1)
entities/IGroup.ts (1)
  • GroupsRequestParams (1-5)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (5)
components/groups/page/GroupsPageListWrapper.tsx (5)

3-3: LGTM: Appropriate imports for debouncing and memoization.

The additions of useCallback, useMemo, and useDebounce from react-use align with the PR's goal of implementing debounced group name search.

Also applies to: 9-9


45-54: LGTM: Proper state management for debounced search.

The groupDraft state and synchronization effect correctly implement the draft-driven approach. The memoized filters object efficiently derives request parameters from the draft and identity values.


56-72: LGTM: Well-structured query string builder.

The createQueryString helper is properly memoized and correctly handles both adding and removing query parameters. The implementation is clean and maintainable.


74-96: LGTM: Effective debouncing implementation.

The updateGroupNameParam helper and useDebounce hook work together correctly to delay router updates. The 200ms delay provides a good user experience, and the guard prevents unnecessary updates when the URL is already in sync with the draft.


103-111: LGTM: Consistent refactor using centralized query builder.

The setAuthorIdentity function has been correctly refactored to use createQueryString and router.replace, aligning with the centralized approach for URL updates.

Comment thread components/groups/page/GroupsPageListWrapper.tsx Outdated
Signed-off-by: Simo <simo@6529.io>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
components/groups/page/GroupsPageListWrapper.tsx (1)

87-96: Debouncing logic is correct.

The 200ms delay with early return (lines 89-91) correctly prevents redundant URL updates and implements the intended debouncing behavior.

Optional refinement: Including updateGroupNameParam in the dependency array causes the debounce to reset when the URL updates (due to searchParamscreateQueryStringupdateGroupNameParam chain). While the early return prevents actual side effects, this schedules unnecessary work. You could use a useRef to maintain a stable reference to updateGroupNameParam, though this adds complexity for minimal gain.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 90fdfdf and 915977c.

📒 Files selected for processing (1)
  • components/groups/page/GroupsPageListWrapper.tsx (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx}: Do not include any comments in the code
Use react-query for data fetching
Always add readonly before props

**/*.{ts,tsx}: Use TypeScript for source code and follow existing code style and naming conventions
Adhere to clean code standards as measured by SonarQube

Files:

  • components/groups/page/GroupsPageListWrapper.tsx
**/*.tsx

📄 CodeRabbit inference engine (.cursorrules)

**/*.tsx: Use FontAwesome for icons
Use TailwindCSS for styling

Implement React components as functional components using hooks (no class components)

Files:

  • components/groups/page/GroupsPageListWrapper.tsx
🧬 Code graph analysis (1)
components/groups/page/GroupsPageListWrapper.tsx (1)
entities/IGroup.ts (1)
  • GroupsRequestParams (1-5)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (6)
components/groups/page/GroupsPageListWrapper.tsx (6)

3-3: LGTM! Imports support the debouncing pattern.

The added React hooks (useCallback, useEffect, useMemo) and useDebounce from react-use are appropriate for implementing the debounced group name search with proper memoization.

Also applies to: 9-9


45-54: LGTM! Draft state pattern correctly implemented.

The introduction of groupDraft state with the sync effect (line 54) and memoized filters (lines 46-52) correctly implements the debouncing pattern:

  • User input updates draft immediately
  • Filters use draft for instant UI feedback
  • URL updates after debounce delay
  • Effect keeps draft synchronized with external URL changes

56-72: LGTM! Centralized query string construction.

The createQueryString helper effectively centralizes URL query string construction with proper null handling (deleting params when value is null) and appropriate memoization.


74-85: LGTM! Router update helper properly encapsulated.

The updateGroupNameParam callback correctly encapsulates the group name URL update logic with router.replace, maintaining proper URL state without triggering navigation.


98-100: Past issue resolved correctly.

The function now only updates the draft state, allowing the debounced effect to handle router updates. The immediate updateGroupNameParam call flagged in the previous review has been correctly removed.


102-110: LGTM! Consistent refactor using centralized query helper.

Refactoring setAuthorIdentity to use createQueryString improves consistency with the group name update logic and maintains the existing behavior.

Signed-off-by: Simo <simo@6529.io>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
components/groups/page/GroupsPageListWrapper.tsx (1)

114-121: Remove the immediate router update to preserve debouncing.

Lines 119-120 call updateGroupNameParam immediately after setting the draft, bypassing the debounced logic (lines 102-112). This is the same issue flagged in the previous review (marked as addressed in commit 915977c) and appears to have been re-introduced. Every keystroke triggers an immediate router update instead of waiting 200ms, defeating the entire purpose of debouncing mentioned in the PR objectives and ticket TKT-0001.

Apply this diff to fix the logic:

 const setGroupName = (value: string | null) => {
   setGroupDraft(value);
-  if (lastSyncedGroupRef.current === value) {
-    return;
-  }
-  lastSyncedGroupRef.current = value;
-  updateGroupNameParam(value);
 };

The debounced effect (lines 102-112) should be the sole path that updates the router.

🧹 Nitpick comments (1)
components/groups/page/GroupsPageListWrapper.tsx (1)

123-131: Add startTransition for consistency with other router updates.

While this non-debounced update is intentionally immediate, it should use startTransition like updateGroupNameParam (lines 95-97) for consistency. Both are non-urgent router updates and should follow the same pattern.

Apply this diff to wrap the router update:

 const setAuthorIdentity = (value: string | null) => {
   const query = createQueryString([
     {
       name: IDENTITY_SEARCH_PARAM,
       value,
     },
   ]);
-  router.replace(query ? `${pathname}?${query}` : pathname);
+  startTransition(() => {
+    router.replace(query ? `${pathname}?${query}` : pathname);
+  });
 };
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 915977c and e59244b.

📒 Files selected for processing (1)
  • components/groups/page/GroupsPageListWrapper.tsx (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx}: Do not include any comments in the code
Use react-query for data fetching
Always add readonly before props

**/*.{ts,tsx}: Use TypeScript for source code and follow existing code style and naming conventions
Adhere to clean code standards as measured by SonarQube

Files:

  • components/groups/page/GroupsPageListWrapper.tsx
**/*.tsx

📄 CodeRabbit inference engine (.cursorrules)

**/*.tsx: Use FontAwesome for icons
Use TailwindCSS for styling

Implement React components as functional components using hooks (no class components)

Files:

  • components/groups/page/GroupsPageListWrapper.tsx
🧬 Code graph analysis (1)
components/groups/page/GroupsPageListWrapper.tsx (1)
entities/IGroup.ts (1)
  • GroupsRequestParams (1-5)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (2)
components/groups/page/GroupsPageListWrapper.tsx (2)

3-11: LGTM! State management and synchronization setup is correct.

The introduction of draft state, memoized filters, and URL synchronization effect provides a solid foundation for the debounced search implementation.

Also applies to: 17-17, 53-67


69-112: LGTM! Debouncing logic and helper functions are well-structured.

The centralized query string construction, router update helper with startTransition, and debounced effect correctly implement the 200ms delay for group name updates.

Signed-off-by: Simo <simo@6529.io>
Signed-off-by: Simo <simo@6529.io>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
components/utils/input/profile-search/CommonProfileSearchItems.tsx (1)

26-32: Simplify redundant nested z-index

The z-index bump to tw-z-50 fixes dropdown layering (matching existing modals at z-50). Remove the inner duplicate so the child inherits the parent’s stacking context:

-          <div className="tw-absolute tw-z-50 tw-overflow-hidden tw-w-full tw-rounded-md tw-bg-iron-800 tw-shadow-2xl tw-ring-1 tw-ring-white/10">
+          <div className="tw-absolute tw-overflow-hidden tw-w-full tw-rounded-md tw-bg-iron-800 tw-shadow-2xl tw-ring-1 tw-ring-white/10">
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 45939dd and 37527eb.

📒 Files selected for processing (2)
  • codex/tickets/TKT-0001.md (1 hunks)
  • components/utils/input/profile-search/CommonProfileSearchItems.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • codex/tickets/TKT-0001.md
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx}: Do not include any comments in the code
Use react-query for data fetching
Always add readonly before props

**/*.{ts,tsx}: Use TypeScript for source code and follow existing code style and naming conventions
Adhere to clean code standards as measured by SonarQube

Files:

  • components/utils/input/profile-search/CommonProfileSearchItems.tsx
**/*.tsx

📄 CodeRabbit inference engine (.cursorrules)

**/*.tsx: Use FontAwesome for icons
Use TailwindCSS for styling

Implement React components as functional components using hooks (no class components)

Files:

  • components/utils/input/profile-search/CommonProfileSearchItems.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)

Signed-off-by: Simo <simo@6529.io>
Signed-off-by: Simo <simo@6529.io>
Signed-off-by: Simo <simo@6529.io>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
codex/tickets/TKT-0007.md (1)

28-28: Replace template placeholder with explicit follow-up status.

Leaving the instructional placeholder in the doc can confuse readers. Swap it for something explicit like “Follow-ups: None yet” or actual ticket references.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f07ea37 and f2a00c9.

📒 Files selected for processing (2)
  • codex/STATE.md (1 hunks)
  • codex/tickets/TKT-0007.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • codex/STATE.md
🧰 Additional context used
📓 Path-based instructions (2)
codex/tickets/**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Author new tickets with the provided template, keep YAML front matter alphabetical, and log timestamped updates as work progresses

Files:

  • codex/tickets/TKT-0007.md
codex/tickets/**

📄 CodeRabbit inference engine (AGENTS.md)

codex/tickets/**: Never edit tickets marked Done; open a new ticket if new scope emerges
Link pull requests back to their tickets and mirror merged PR references in both the ticket log and STATE.md

Files:

  • codex/tickets/TKT-0007.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)

Signed-off-by: Simo <simo@6529.io>
prxt6529
prxt6529 previously approved these changes Oct 14, 2025
Signed-off-by: Simo <simo@6529.io>
@sonarqubecloud
Copy link
Copy Markdown

@simo6529 simo6529 merged commit 96efef6 into main Oct 14, 2025
9 checks passed
@simo6529 simo6529 deleted the group-search-fix branch October 14, 2025 11:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants