feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: adicionando novo filtro em filtros avançados de chamados - #332

Merged
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações
Feb 11, 2026

Hidden character warning

The head ref may contain hidden characters: "331-feature-novo-filtro-para-solicita\u00e7\u00f5es"
Merged

feat: adicionando novo filtro em filtros avançados de chamados#332
GRHInvDev merged 1 commit into
mainfrom
331-feature-novo-filtro-para-solicitações

Conversation

@rbxyz

@rbxyzrbxyz commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • New Features

    • Added form-based filtering to Kanban board—filter tasks by specific forms
    • Collapsible advanced filters section for improved UI organization
  • Improvements

    • Enhanced loading state with improved visual feedback in Kanban view
  • Chores

    • Version bumped to 1.7.5

@rbxyzrbxyz self-assigned this Feb 11, 2026
@rbxyzrbxyz linked an issue Feb 11, 2026 that may be closed by this pull request
@vercel

vercelBot commented Feb 11, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

You don't have permission to create a Preview Deployment for this Vercel project: elo.

View Documentation: https://vercel.com/docs/accounts/team-members-and-roles

@coderabbitai

coderabbitaiBot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR adds form-level filtering to the Kanban view with a collapsible advanced filters UI. It introduces form selection as a new filter dimension, implements the backend query procedures for fetching forms and filtering responses, enhances the loading UI, and updates the filter state to include formIds. Version bumped to 1.7.5.

Changes

Cohort / File(s)Summary
Version
package.json
Bumped version from 1.7.0 to 1.7.5.
Kanban UI & Filters
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx, src/app/(authenticated)/forms/kanban/page.tsx
Introduced collapsible UI for advanced filters with chevron toggle icons. Added formIds filter dimension with MultiSelect UI labeled "Formulário". Integrated forms data fetching via api.form.listForKanbanFilter.useQuery(). Updated loading and empty states with KanbanFilters controls and replaced Loader2 with KanbanSkeleton. Extended filter state initialization and clear logic to handle formIds.
Backend Filtering & Endpoints
src/server/api/routers/form-response.ts, src/server/api/routers/forms.ts
Added optional formIds: string[] input to form-response list procedures to enable filtering by specific forms. Implemented where clause logic to apply form ID filter when provided. Added new listForKanbanFilter protected procedure to forms router returning form { id, title } for current user (as creator or owner), ordered by title.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 A form to filter, a collapsible way,
Where Kanban boards gleam in organizational display,
With checkboxes checked and data aligned,
The filters unfold, what results you'll find! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe pull request title accurately describes the main change: adding a new filter (formIds) to the advanced filters section of the Kanban board. The title is specific, concise, and clearly reflects the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 331-feature-novo-filtro-para-solicitações

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
src/app/(authenticated)/forms/kanban/_components/kanban-filters.tsx (2)

186-201: Formulário filter section is clean and conditionally rendered.

Conditionally rendering only when the user owns forms (formsData.length > 0) is a good UX choice. One minor nit: the formsData ?? [] fallback on line 194 is redundant since the outer guard on line 187 already ensures formsData is truthy.

Nitpick: remove redundant nullish coalescing
- options={(formsData ?? []).map((f) => ({ label: f.title ?? f.id, value: f.id }))}+ options={formsData.map((f) => ({ label: f.title ?? f.id, value: f.id }))}

46-56: Debounce effect has a stale closure risk with filters in the dependency array.

The filters object reference changes on every filter update (since state is spread with { ...filters, ... }), which resets the debounce timer on any filter change — not just the number input. This means changing e.g. a tag filter while typing a number will restart the 500ms timer. This is pre-existing behavior, but worth noting for a future improvement: consider extracting the number debounce into a separate hook or using only localNumber + a stable callback ref.

src/app/(authenticated)/forms/kanban/page.tsx (1)

169-172: Empty-state message correctly considers the new formIds filter.

The condition now accounts for filters.formIds.length > 0 to distinguish between "no results matching filters" and "no responses yet." Note that filters.hasResponse and filters.endDate and filters.priority are not checked here, but this is pre-existing behavior outside the scope of this PR.

For future consistency, consider consolidating the "has any active filter" check to reuse the hasActiveFilters logic from KanbanFiltersState (or the KanbanFilters component) rather than duplicating partial checks inline. This would prevent the two from drifting apart.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@GRHInvDev
GRHInvDev merged commit 1b1fa24 into mainFeb 11, 2026
7 of 9 checks passed
Sign up for freeto 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.

Feature: Novo filtro para solicitações

2 participants

@rbxyz@GRHInvDev