Commit 3027ee6
feat(samples): add Angular data fabric sample app (#576)
* feat(samples): add Angular data fabric sample app
Angular 20 counterpart of the React data-fabric-app sample. Same SDK
patterns (meta-tag config, OAuth flow, cursor-looped pagination), but
renders its own records grid since @uipath/ui-widgets-datatable is
React-only — which lets it exercise updateRecordById and
deleteRecordsById directly, alongside insert, attachments, and choice
sets. Local-dev meta-tag injection is handled by an Angular
indexHtmlTransformer equivalent of the coded-apps-dev Vite plugin.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: address convention review comments
- Guard against stale async responses when switching entities/choice
sets (entity detail, choice set view, choice set detail)
- Edit mode now sends explicit null for cleared fields so clearing an
optional field actually persists
- DATETIME prefill formats the server instant in local time (inverse of
coerce) instead of slicing the ISO string, fixing a per-save UTC-offset
drift on edited records
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: address review feedback on meta-tag transformer and lint error
- Guard JSON.parse of uipath.json in the index HTML transformer: malformed
JSON now logs an attributed, actionable error and no-ops (matching the
file-absent behavior) instead of failing the build with a bare SyntaxError
- Move the pad helper to module scope (oxlint consistent-function-scoping)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: address review feedback on record editor
- Track removed attachments in a local removedAttachments signal instead
of mutating the parent-owned record input in place — in-place mutation
bypasses the signal graph and breaks under OnPush/zoneless CD
- Fetch referenced choice sets in parallel with Promise.allSettled
instead of sequential awaits
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: keep record Id on one line in the records grid
The table could squeeze the Id column to a sliver, and break-all then
rendered the GUID one character per line, blowing up row heights.
nowrap + the existing horizontal scroll container fixes it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* chore: disable Angular CLI analytics in the sample
An interactive ng run wrote an opted-in analytics UUID into
angular.json. A committed sample should be explicitly opted out so
cloners aren't silently enrolled and the CLI prompt never blocks
scripted builds.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: add multilogin
* fix: render native form controls in the active theme
Native date/datetime picker icons and popups follow color-scheme, not
the CSS tokens — without it the calendar icon is dark-on-dark and
invisible in dark mode.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: address UI review findings across dialogs, grid, and feedback surfaces
Critical:
- Row Inspector read record values by field name only — entities whose
records key by displayName rendered every field as "empty" and hid the
attachment Download button. All consumers now share a recordFieldValue
helper (grid, inspector, editor prefill/attachment check).
- Record editor save() had no re-entrancy guard — Enter-key implicit form
submission could insert the same record twice.
Important:
- Modals now close on Escape, move focus into the dialog on open and
restore it on close, and only close on backdrop clicks that also
started on the backdrop (a text-selection drag released outside the
editor no longer discards the form).
- Scroll no longer chains to the records pane behind an open modal.
- Sorting reference/choice-set columns compared "[object Object]" —
now compares the same projection the cells display.
- Sort state persisted across entity switches; it now resets when the
schema changes but survives record refreshes.
- Long unbroken API error tokens overflowed toasts and alerts.
- Truncated entity/choice-set labels now carry title tooltips.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: export failures toast an error, and CSV matches the grid's formatting
- exportCsv treated a failed re-fetch as an empty table ("Nothing to
export") next to the grid's error alert — it now checks recordsError
and toasts the failure instead
- csv-export JSON-stringified reference/choice-set objects while the grid
showed their displayName; formatValue now delegates to formatCell so
the exported CSV matches the grid exactly (null still exports as an
empty cell rather than the grid's em dash)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs: add animated preview to the Angular sample README
Records grid, New record modal, and create-success flow captured from a
live session (1.4 MB GIF, browser chrome cropped out).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: check the raw value for attachment presence, not the formatted sentinel
The template compared cellValue() to the em-dash string formatCell
returns for null — a silent breakage if the null representation ever
changes. A hasAttachment() helper checks the raw value directly.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>1 parent 8790a80 commit 3027ee6
33 files changed
Lines changed: 12336 additions & 0 deletions
File tree
- samples/data-fabric-app-angular
- public
- screenshots
- src
- app
- components
- core
- lib
- tools
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
0 commit comments