feat(tasks): action-center sample app#502
Conversation
|
✅ No issues found. Checked for bugs and CLAUDE.md compliance. |
f13be8c to
16c9805
Compare
|
Two new issues posted this run:
Existing open threads (not re-posted): duplicate base in process-app-v1/vite.config.ts and slaBadge triple-call in TaskDetail.tsx. |
…wind) Replace hand-rolled Tailwind primitives with @uipath/apollo-wind components across App, TaskList, and TaskDetail. No more custom Modal/Button/Select/ Tabs/Badge — everything renders through UiPath's design system. Build setup - Upgrade Tailwind v3 → v4 (drop tailwind.config.js; apollo-wind ships its own @tailwindcss/postcss preset) - postcss.config.js reuses @uipath/apollo-wind/postcss - src/index.css → single @import '@uipath/apollo-wind/styles.css' (apollo's tokens already include light + dark variants) Components - Dialog, Card, Input, Label, Select, Tabs, Table, Badge, Alert, Spinner, Sonner, EmptyState from @uipath/apollo-wind - Remove src/components/Modal.tsx (replaced by Dialog) - Badge variants (success/info/warning/error) replace TONE classnames - next-themes provider + Sun/Moon ThemeToggle (apollo-wind has no provider) UX - ListChecks / ShieldCheck / Plus / RefreshCw / Inbox / User / Users icons - Tab count badges on the active tab - Animated refresh spinner during refetch - Skeleton table while loading (industry-standard data-grid pattern) - Folder filter is a proper filter chip: leading Folder icon, clear (X) button, Escape to clear, no number-input spinners (folder IDs are identifiers, not quantities) - Fix stale data on tab switch (clear tasks on dep change in useTasks) - uipath.json.example: baseUrl https://api.uipath.com
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Folder + Assignee filters in toolbar (header chip removed) - Folder picker via /odata/Folders raw fetch (new useFolders hook) - Create Task: folder dropdown instead of numeric ID - My Tasks: row click → Complete dialog + info icon → detail sheet - Manage Tasks: multi-select + bulk Assign / Reassign / Unassign, gated by selection state + completion - Assignee filter derived from loaded tasks (no folder needed) - 'Group' label for tasks assigned to a directory group - TaskDetail Sheet mirrors Action Center's Task Summary - Surface server messages on Create/Complete/Assign/Unassign errors; bulk batch errors use compact 'first + N more' format - Various UI polish (info icon placement, fixed-width pickers, truncation, header column dividers)
…ntValidation tasks
Selecting a Document Validation task now opens the
@uipath/ui-widgets-validation-station widget instead of the generic complete
dialog; all other task types are unchanged.
- DocumentValidationDialog hosts the widget, loads the full payload via
getById({ taskType: DocumentValidation }), and Save/Submit through the
widget's validated-save path (Submit completes the task).
- useTask gains an optional taskType param (backward compatible).
- TaskList branches the My-Tasks row click on type; TaskDetail offers a
"Validate document" action for DV tasks.
- vite.config copies the widget's du-assets into the build; package.json adds
the widget + du-validation-station-wc deps; scope adds OR.Buckets.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…d SDK 1.4.1 - Dedup shared task helpers (assignedToGroup, extractServerMessage) into taskUtils - Detect group assignment via taskAssignmentCriteria (no cast); drop file:../.. for ^1.4.1 - Compute slaBadge once in TaskDetail; remove duplicate vite base key in process-app-v1 - Realign root oxlint lockfile to 1.43.0 to fix lint failures Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
16c9805 to
fcb33f5
Compare
|
|
✅ No issues found. Checked for bugs and CLAUDE.md compliance. |
There was a problem hiding this comment.
can we split it into smaller component files like other samples - maybe individual files for FolderPicker, AssigneeFilter, BulkActions, CompleteDialog, etc
| src/ | ||
| main.tsx App.tsx index.css | ||
| taskUtils.ts — badges, filter builder, complete-options builder, formatting | ||
| hooks/useAuth.tsx — OAuth/PKCE via the SDK (Coded Apps template) |
There was a problem hiding this comment.
isnt the file src/context/AuthContext.tsx?
| <AlertDescription>{error}</AlertDescription> | ||
| </Alert> | ||
| )} | ||
| <Button onClick={login} className="w-full"> |
There was a problem hiding this comment.
instead of inline - we can extract it into a separate component
| "preview": "vite preview" | ||
| }, | ||
| "dependencies": { | ||
| "@uipath/apollo-core": "^5.10.0", |
There was a problem hiding this comment.
where is this used?
| "version": "1.0.0", | ||
| "description": "Minimal React + TypeScript Coded App demonstrating the UiPath TypeScript SDK Tasks (Action Center) service — list, assign, reassign, unassign, complete, and create tasks.", | ||
| "type": "module", | ||
| "scripts": { |
There was a problem hiding this comment.
can we add lint script like other sample apps?
| const result = await svc.getAll({ | ||
| pageSize, | ||
| jumpToPage: page, | ||
| // Raw server name — `createdTime` (SDK alias) would 400. |
There was a problem hiding this comment.
but we are fixing this and the PR is already up. Would be fixed in 1.5.1
| */ | ||
| export function buildTaskFilter(filters: TaskFilters): string | undefined { | ||
| const clauses: string[] = [] | ||
| if (filters.status && filters.status !== 'all') clauses.push(`Status eq '${filters.status}'`) |
There was a problem hiding this comment.
| if (filters.status && filters.status !== 'all') clauses.push(`Status eq '${filters.status}'`) | |
| if (filters.status && filters.status !== 'all') clauses.push(`status eq '${filters.status}'`) |
| @@ -0,0 +1,8 @@ | |||
| { | |||
| "clientId": "<your-oauth-external-app-client-id>", | |||
| "scope": "OR.Tasks OR.Folders OR.Buckets", | |||
There was a problem hiding this comment.
| "scope": "OR.Tasks OR.Folders OR.Buckets", | |
| "scope": "OR.Tasks OR.Folders.Read OR.Buckets", |
for keeping consistent with README



Action Center Sample App
A React + Vite sample web app demonstrating the UiPath TypeScript SDK's Tasks (Action Center) APIs end to end.
Built as a UiPath Coded App, styled with Apollo Wind, and consuming the published
@uipath/uipath-typescript@^1.4.1.
What it demonstrates
pagination (tasks.getAll)
Link: https://procodeapps.alpha.uipath.host/action-center-app