feat: settings DataTable pagination, connector UX, and misc fixes#3248
feat: settings DataTable pagination, connector UX, and misc fixes#3248joeyorlando wants to merge 4 commits intomainfrom
Conversation
…server-side pagination - Convert /settings/teams, /settings/users, and /settings/roles from card-based layouts to DataTable with server-side pagination, search, and sorting - Teams: search by name/description, sort by name/createdAt/memberCount - Users: search by name/email (case-insensitive), filter by teams and role, merge auto-provisioned users into main table with appropriate actions - Roles: search by name/description, predefined roles pinned at top, add description column to custom roles with create/edit dialog support - Move Organization Token into MCP Gateway/A2A Gateway Tokens section - Add paginated API endpoints: GET /api/teams, GET /api/roles, GET /api/organization/members/paginated - Add database migration for organization_role description column - Add comprehensive backend model tests (team, member, organization-role) - Add e2e API tests for teams and users search/filter/pagination - Update all consumers of teams/roles APIs for new paginated response shape
|
Claude finished @joeyorlando's task in 5m 0s —— View job PR Review: Convert settings pages to DataTable with server-side paginationThorough review of all 55 changed files. This is a well-structured PR that consistently converts three settings pages to DataTable with proper server-side pagination. The backend models are well-designed with good N+1 avoidance, and all API consumers have been correctly updated for the new paginated response shape. Issues1. LIKE wildcard characters not escaped in search inputs (Low severity, 3 files)Drizzle-orm's Affected files:
A helper like 2.
|
📊 Reputation Summary
How is the score calculated? Read about it in the Reputation Bot repository 🤖 |
| const matchesName = member.name | ||
| ?.toLowerCase() | ||
| .includes("example.com"); |
Check failure
Code scanning / CodeQL
Incomplete URL substring sanitization High test
Copilot Autofix
AI 3 days ago
Copilot could not generate an autofix suggestion
Copilot could not generate an autofix suggestion for this alert. Try pushing a new commit or if the problem persists contact support.
| const matchesEmail = member.email | ||
| ?.toLowerCase() | ||
| .includes("example.com"); |
Check failure
Code scanning / CodeQL
Incomplete URL substring sanitization High test
Copilot Autofix
AI 3 days ago
Copilot could not generate an autofix suggestion
Copilot could not generate an autofix suggestion for this alert. Try pushing a new commit or if the problem persists contact support.
| const matchesName = member.name | ||
| ?.toLowerCase() | ||
| .includes("example.com"); |
Check failure
Code scanning / CodeQL
Incomplete URL substring sanitization High test
Copilot Autofix
AI 3 days ago
Copilot could not generate an autofix suggestion
Copilot could not generate an autofix suggestion for this alert. Try pushing a new commit or if the problem persists contact support.
| const matchesEmail = member.email | ||
| ?.toLowerCase() | ||
| .includes("example.com"); |
Check failure
Code scanning / CodeQL
Incomplete URL substring sanitization High test
Copilot Autofix
AI 3 days ago
Copilot could not generate an autofix suggestion
Copilot could not generate an autofix suggestion for this alert. Try pushing a new commit or if the problem persists contact support.
The useEffect that syncs local instructions state depended on both agent.id and agent.systemPrompt. When autosave completed and invalidated the query cache, the updated systemPrompt triggered the effect, resetting the textarea to the server value and wiping any characters typed during the save round-trip. Fix by only resetting on agent ID change.
Long agent names (e.g. "n8n workflow: Grafana exporter") caused text wrapping which misaligned scope badges. Truncate names with ellipsis and show full name in tooltip on hover. Applied to /agents, /mcp/gateways, and /llm/proxies tables.
Self-hosted Jira/Confluence Server instances commonly use Personal Access Tokens (PAT) via Bearer auth, but the connector always used basic auth which fails with 401 when no username is provided. - Use oauth2 (Bearer) auth when email is not provided, basic auth when it is - Add noCheckAtlassianToken for XSRF compatibility - Make email optional in the create connector form for non-Cloud instances - Add tests for both auth paths
Playwright test results
Details
Failed testsapi › api/access-control.ee.spec.ts › Organization Roles API - Custom Role CRUD Operations › should create a new custom role Flaky testsapi › api/llm-proxy/jwks-auth.spec.ts › LLM Proxy - External IdP JWKS Authentication › should authenticate with external IdP JWT and get model response Skipped testsapi › api/agent-type-permissions.ee.spec.ts › Agent Type Permission Isolation › user with only llmProxy permissions cannot access agents or mcp gateways |
Summary
systemPromptfrom useEffect dependency arrayTest plan