Conversation
- Replaced the usage header with a PrimeNG toolbar for better action handling. - Enhanced loading state with a more structured skeleton layout for site metrics, system configuration, and user activity. - Updated error handling to use PrimeNG card components for a cleaner presentation. - Refactored dashboard content layout to utilize flexbox for better responsiveness. - Adjusted SCSS styles to align with new component structure and improve overall styling consistency. This update enhances the user experience and maintains a modern design approach.
…yling - Adjusted skeleton component heights for better visual consistency. - Added margin utility class to paragraph elements within skeleton templates. - Enhanced SCSS styles for skeleton display and h3 elements to improve layout and readability. These changes aim to refine the user interface and enhance the loading experience in the dot-usage-shell component.
…ttpClient providers
- Introduced DotUsageService to fetch usage summary metrics from the backend API. - Implemented error handling for various HTTP status codes. - Added unit tests for DotUsageService to validate summary retrieval and error handling. - Updated dot-usage-shell component to manage loading and error states using signals. - Refactored component tests to utilize the new service structure. These changes enhance the functionality and reliability of the dot-usage feature, ensuring accurate data retrieval and user-friendly error messages.
…ading state management
…me height management
…SCSS styles for layout consistency
…SCSS styles for layout consistency
…sageToIframe method signature
…itioning calculations for zoom functionality
…nused expanded property from node definitions
…d enhance data structure for container information
…tructure for improved data representation
…dling for improved layout management
…nused service injections for improved code clarity
…handling to scroll to corresponding elements in the editor, improving user navigation experience.
…om levels, enhancing the accuracy of element positioning in the editor.
… for tree nodes, allowing users to reorder rows within the layout. Add event handling for node selection and drop validation to improve user interaction and layout management.
…ve function: implement updateRows method for saving reordered layout rows, enhancing layout management and state handling in the editor.
…s and paddings for improved layout, and modify row label to use styleClass for better representation.
…ith validation, integrate form submission handling, and update layout for improved user interaction. Adjust styles for right sidebar and contentlet tools to support new features.
…ing state during submission, and update submit button behavior for improved user experience.
…order component for improved row management, enhancing drag-and-drop functionality and simplifying layout handling.
core-web/libs/portlets/edit-ema/portlet/src/lib/dot-ema-shell/dot-ema-shell.component.html
Outdated
Show resolved
Hide resolved
core-web/libs/portlets/edit-ema/portlet/src/lib/dot-ema-shell/dot-ema-shell.component.ts
Show resolved
Hide resolved
...ma-editor/components/dot-uve-palette/components/dot-row-reorder/dot-row-reorder.component.ts
Outdated
Show resolved
Hide resolved
...ma-editor/components/dot-uve-palette/components/dot-row-reorder/dot-row-reorder.component.ts
Outdated
Show resolved
Hide resolved
| const site = this.#store.pageAsset()?.site; | ||
|
|
||
| return createFavoritePagesURL({ | ||
| languageId: Number(params?.language_id), |
There was a problem hiding this comment.
fallback to 1 or 0 because Number(undefined) is NaN
There was a problem hiding this comment.
Or throw an error I think that safer
...rc/lib/edit-ema-editor/components/dot-uve-zoom-controls/dot-uve-zoom-controls.component.html
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Should we move it to the component decorator and use tailwind
|
🤖 Claude review — Tailwind-first: `dot-uve-contentlet-quick-edit` `dot-uve-contentlet-quick-edit.component.scss` → can be deleted entirely The whole file is: `dot-uve-contentlet-quick-edit.component.html` — PrimeFlex classes & inline style Three PrimeFlex classes that need replacing:
Also line 30, the textarea has a `[style]` binding for static values — these can be Tailwind instead: [style]="{ height: '9.375rem', lineHeight: '1.5' }" class="h-[9.375rem] leading-normal" |
|
🤖 Claude review — Tailwind-first: `dot-uve-iframe` `dot-uve-iframe.component.scss` → can be deleted entirely Current content: iframe { Move `:host` to the component `host` property, move iframe styles to the template, delete the file: ```typescript ```html <iframe class="block w-full h-auto border-none min-h-px" [style.pointer-events]="pointerEvents()" [style.opacity]="opacity()" ...> \`\`\``dot-uve-iframe.component.html` — `[ngStyle]` → individual `[style.X]` bindings The `[ngStyle]` binding on the iframe (flagged in the earlier Angular patterns comment, resolved here) has a straightforward replacement. `pointerEvents` and `opacity` are dynamic so they can't be static Tailwind classes, but they don't need `NgStyle` either: ```html [ngStyle]="{ pointerEvents: pointerEvents, opacity: opacity }" [style.pointer-events]="pointerEvents()" Don't forget to remove `NgStyle` from the component's `imports` array once this is done. |
|
🤖 Claude review — Tailwind-first: `dot-uve-zoom-controls` `dot-uve-zoom-controls.component.scss` → potentially deletable — worth checking Current `:host` block: The layout rules are straightforward Tailwind. For the design token ones (`$color-palette-gray-200`, `$spacing-1`, `$spacing-0`) — the design system tokens likely have matching values configured in Tailwind (e.g. `bg-gray-200`, `gap-2`, `px-2`). Worth checking `tailwind.config.js` to confirm — if they match, the `:host` block becomes: ```typescript Same story for the `div` rule — `$color-palette-gray-800` likely maps to a Tailwind color token. If it does, the whole `.scss` file can be deleted: ```html
{{ viewZoomLabel() }}
\`\`\`
If the Tailwind config confirms those mappings, delete the file entirely and move everything to the template + `host` property. |
|
🤖 Claude review — Tailwind-first: `dot-uve-contentlet-tools` `dot-uve-contentlet-tools.component.scss` — can't be deleted but needs cleanup The `.bounds` block with container queries, hover pseudo-classes, and `pointer-events` overrides has to stay in SCSS. But a couple of things can be cleaned up:
|
|
🤖 Claude review — Tailwind-first: `edit-ema-editor` This is the big one. The file has animations, container queries, `::ng-deep` PrimeNG overrides, and pseudo-elements that need to stay in SCSS. But a large portion can go. `:host` block → move to the decorator `host` property ```scss Bare element/component selectors → move to the template These bare tag selectors are fragile and won't pierce child component encapsulation anyway. Move grid placement directly to the elements: ```scss ```html <dot-uve-toolbar class="col-[1/4]" ...> Same for `.editor-content`, `.canvas-row`, `.canvas-outer`, `.canvas-inner` — all pure layout, all replaceable with Tailwind on their elements. For rules that use design tokens (`$spacing-`, `$color-palette-`), check `tailwind.config.js` — if those tokens are mapped there (they likely are), the Tailwind classes exist and the SCSS rule can be deleted too. `::ng-deep` inside `.edit-panel-wrapper` is not scoped to `:host` (resolved from earlier Styles comment) Around lines 100–110 the `::ng-deep` is nested inside `.edit-panel-wrapper` without `:host`, leaking PrimeNG overrides globally. It needs to be: Dead code to delete (resolved from earlier Styles comment)
`edit-ema-editor.component.html` — PrimeFlex classes (resolved from earlier Styles comment)
`edit-ema-editor.component.html` — `[ngStyle]` on `p-progressBar` The four static values on `p-progressBar` don't need `[ngStyle]`: <p-progressBar [ngStyle]="{ position: 'absolute', top: '0', left: '0', width: '100%' }" [style]="{ height: '6px' }"> <p-progressBar class="absolute top-0 left-0 w-full" [style]="{ height: '6px' }"> `edit-ema-editor.component.html` — inline `style` on drag image div Lines 274–278, the `#customDragImage` div has a static `style` attribute: style="top: -1000px; left: -1000px; width: fit-content" class="top-[-1000px] left-[-1000px] w-fit" Also `border-round-lg` and `z-1` on the same element look like PrimeFlex leftovers — replace with `rounded-lg` and `z-[1]`. |
…andoff documentation; add new UVEStore architecture guidelines
… to OnPush and improve test cases for better performance
…oad in editUrlContentMap event
…uve-experiment
…test payloads - Migrate @output() onNodeSelect to output() signal API in dot-uve-palette - Inject DotMessageService in dot-ema-shell, add $lockedByDisplay computed signal, and update template to use i18n fallback for unknown locked-by user - Add uve.shell.page.locked.unknown.user=Unknown key to Language.properties - Simplify field.options?.length in dot-uve-contentlet-quick-edit - Migrate 3x <button pButton> to <p-button> in dot-uve-zoom-controls template - Update dot-uve-iframe spec to call signal inputs as functions (src() etc.) - Fix edit-ema-editor spec triggerEventHandler to pass content map directly instead of wrapped in { payload } Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…ys and fix test providers
- Replace hardcoded tooltip strings in dot-uve-palette with i18n keys
(uve.palette.tab.content.types, uve.palette.widgets.title,
uve.palette.favorites.title, uve.palette.tab.layers)
- Add DotMessagePipe to dot-uve-palette imports; update template to pipe
tooltipKey through `dm` (DotMessagePipe)
- Add uve.palette.tab.content.types and uve.palette.tab.layers entries
to Language.properties
- Replace MockProvider(..., 'useValue') from ng-mocks with plain
{ provide, useValue } objects in edit-ema-layout spec
- Remove commented-out dead code from withEditor.ts
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
core-web/libs/portlets/edit-ema/portlet/src/lib/edit-ema-editor/edit-ema-editor.component.html
Show resolved
Hide resolved
…ignal - Replace [ngStyle] with direct [style.*] bindings in dot-uve-iframe - Remove NgStyle import from dot-uve-iframe component - Migrate dot-row-reorder tests to data-testid selectors and DOM-event patterns; remove eslint-disable comment and private method access - Document [attr.inert] pattern in quick-edit template - Simplify $pageURL computed to derive from $pageURLS()[0] (live URL, no hardcoded host) - Move $pageURLS/$pageURL tests from toolbar spec (wrong file) to editor spec - Remove stale commented-out $pageURLS block from toolbar spec Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Scope
This summary is based on the branch artifacts available locally in this workspace (not live GitHub PR metadata, which is not accessible from this environment). The changes are centered on UVE store state refactoring in
edit-ema.What Changed
The branch refactors the UVE store architecture from a duplicated state model to a single-source-of-truth model.
1. New computed-signal access layer (
withPageAsset)A new store feature was introduced to expose page asset data through computed signals:
$page(),$site(),$containers(),$template(),$layout()$viewAs(),$vanityUrl(),$urlContentMap(),$numberContents()$clientResponse()This centralizes derived state access and reduces direct dependence on internal response structure.
2. State/API renaming for cleaner semantics
Several store properties and methods were renamed to remove GraphQL-specific wording and better describe intent:
graphqlRequest->requestMetadatagraphqlResponse->pageAssetResponselegacyGraphqlResponse->legacyResponseFormatsetGraphqlResponse()->setPageAssetResponse()setGraphqlResponseOptimistic()->setPageAssetResponseOptimistic()rollbackGraphqlResponse()->rollbackPageAssetResponse()$graphqlWithParams->$requestWithParams$customGraphqlResponse->$clientResponse3. Duplication removed from load/save flows
withLoadandwithSavewere simplified by removing repeated manual extraction/sync ofpageAssetsub-properties.Instead of repeatedly patching multiple top-level fields, flows now rely on updating
pageAssetResponseonce and reading via computed signals.4. Consumer updates
Related consumers were updated to use the new API naming and signals, including:
withLayout, etc.)Why This Matters
Architectural improvements
Engineering impact
pageAssetshape changes.Reported Quantified Outcomes
From branch docs/changelog:
Backward Compatibility and Migration
Current compatibility
The branch indicates no immediate breaking changes for consumers because existing patterns are still tolerated during transition.
Recommended direction
Adopt computed-signal usage in new/updated code:
store.$page()overstore.page()store.$site()overstore.site()Future cleanup (planned)
Branch docs mention a later cleanup phase to fully remove deprecated direct-property access patterns once migration is complete.
Risk / Attention Points
Quick Takeaway
PR #34173 is primarily an internal architecture refactor that modernizes UVE store state handling: one source of truth, cleaner API names, computed signal access, and reduced duplication in critical load/save paths. It is aimed at maintainability, consistency, and safer future evolution rather than introducing large user-facing behavior changes.
Videos
video-general-walkthrough.mov
content-editing.mov
uve-bookmark.mov
new-animation.mov