feat: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz
, '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: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz
, '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: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz
, '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: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz
, '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: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz
, '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: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz
, '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: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz
, '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: implement user editing functionality with modal support for upd… - #138

Merged
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal
Sep 25, 2025
Merged

feat: implement user editing functionality with modal support for upd…#138
rbxyz merged 1 commit into
mainfrom
131-lista-de-ramal

Conversation

@rbxyz

@rbxyzrbxyz commented Sep 25, 2025

Copy link
Copy Markdown
Collaborator

…ating extensions and emails

Summary by CodeRabbit

  • New Features
    • Dual editing flow for extensions: edit manual contacts or user-based ramais with context-aware dialog titles and descriptions.
    • Conditional forms per type, including a compact user summary when editing a user.
    • Validation for extension values (positive, valid numbers) and support for optional email/extension fields.
    • Per-item Edit and Delete actions gated by permissions; actions column appears only when allowed.
    • Buttons show pending states and disable appropriately.
    • Updated tables/cards in Manual Contacts and All Extensions sections to support the new flow.

@vercel

vercelBot commented Sep 25, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
eloBuildingBuildingPreviewCommentSep 25, 2025 1:57pm

@rbxyz
rbxyz merged commit ecb8481 into mainSep 25, 2025
2 of 3 checks passed
@coderabbitai

coderabbitaiBot commented Sep 25, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

Implements a dual-path editing flow for extensions in the extension page: adds user-specific editing state and form, integrates a new updateExtension mutation, refactors save handlers to branch between manual contacts and users, updates validation and dialog copy, and adjusts UI actions/permissions and table/card rendering.

Changes

Cohort / File(s)Summary of Changes
Editing state & forms
src/app/(authenticated)/extension/page.tsx
Adds editingUser and editUserForm alongside existing editingContact/editContactForm; initializes, populates, and resets state depending on edit context.
Handlers & mutations
src/app/(authenticated)/extension/page.tsx
Introduces updateExtension mutation; extends handleEditContact to reset user state; adds handleEditUser; refactors save logic to branch: updateCustomExtension for manual contacts vs. updateExtension for users; resets UI on success/error.
Validation & dialog content
src/app/(authenticated)/extension/page.tsx
Validates extension as positive number; handles optional extension/emailExtension; updates dialog titles/descriptions dynamically for manual-contact vs. user editing.
UI controls & permissions
src/app/(authenticated)/extension/page.tsx
Adds per-item Edit/Trash actions gated by canManageExtensions; conditionally renders actions column for manual vs. user ramais.
Rendering adjustments
src/app/(authenticated)/extension/page.tsx
Updates “Contatos Adicionados Manualmente” and “Todos os Contatos de Ramal” sections to support dual editing; shows compact user summary in user-edit mode; adjusts action button labels/disabled states for pending mutations.

Sequence Diagram(s)

sequenceDiagram
actor U as User
participant P as ExtensionListPage
participant V as Validator
participant M1 as updateCustomExtension (API)
participant M2 as updateExtension (API)
U->>P: Click "Edit" on item
alt Manual Contact
P->>P: set editingContact + open dialog
else User Ramal
P->>P: set editingUser + open dialog
end
U->>P: Click "Save"
P->>V: Validate extension fields
V-->>P: Valid / Errors
alt Valid and Manual Contact
P->>M1: updateCustomExtension(payload)
M1-->>P: success/error
else Valid and User Ramal
P->>M2: updateExtension(payload)
M2-->>P: success/error
else Validation Error
P->>U: Show validation message
end
opt On success
P->>P: Reset edit state, close dialog
P->>U: Update UI states/labels
end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Poem

A nibble of state, a hop through forms,
Two burrows to edit where logic transforms.
Click, validate—thump goes the queue,
Custom or user, we know what to do.
Carrots for success, greens for retry—
Ramais aligned, and off I fly! 🥕🐇

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 131-lista-de-ramal

📜 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 ee4c318 and eaf4bcf.

📒 Files selected for processing (1)
  • src/app/(authenticated)/extension/page.tsx (8 hunks)

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.

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.

1 participant

@rbxyz