style/feat(ui-fixes): portlet UI standardization and push publish for plugins#35311
style/feat(ui-fixes): portlet UI standardization and push publish for plugins#35311
Conversation
…o to avoid DaisyUI collision DaisyUI defines .checkbox for native <input type="checkbox"> elements, applying fixed width/height and ::before pseudo-elements that collapsed the div wrapper to ~21x21px and broke label layout. Renaming the wrapper class to .form-checkbox/.form-radio eliminates the conflict. Also updates items-center alignment as the correct default. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tern - Show inline p-message notification bar (no margin, rounded-none) at top of dialog on error - Dialog stays open on error so user can retry without re-opening - Fixed dialog height via contentStyle so layout is stable - Tags: replace DotHttpErrorManagerService with inline #extractErrorMessage + $errorMessage signal - Plugins: move HTTP upload call from store into dialog; store gets setUploadingStatus() for the dialog-success path; drag-and-drop path keeps uploadBundles() with global error handler Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ding bar background
- Normalize all form/import dialog widths to 700px across dot-tags, dot-plugins,
and dot-categories (were 400–600px depending on portlet)
- Add [style]="{ width: '500px' }" to all <p-confirmDialog> elements so delete/
warning confirmations have a consistent width (PrimeNG Confirmation type does not
support 'style' via the service call)
- Fix tags import: backend always returns HTTP 200; check response.entity.success
to show inline error and keep dialog open instead of closing on partial failure
- Replace border-none! with border-x-0! border-t-0! on listing toolbars so only
the bottom border is visible, matching the design directive
- Set branding bar toolbar background to var(--surface-0) via PrimeNG pt API to
override the component's own background token
- Remove disabled binding from search inputs in categories and plugins listings so
the field stays active when the table is empty
- Document dialog sizing standards in libs/portlets/CLAUDE.md
- Update affected specs to assert new 700px widths and the improved import error behavior
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace plain <div> toolbar with <p-toolbar> using border-x-0! border-t-0!
for bottom-border-only appearance consistent with other portlets
- Fix search input: iconPosition left, standard w-80 width, placeholder and
aria-label via new locales.search.placeholder i18n key
- Remove icon from Add button
- Replace DotActionMenuButtonComponent with a hover-only p-button
(opacity-0 group-hover:opacity-100) that opens a p-contextMenu; right-click
on any row also opens the same context menu
- Add separator before Delete in the context menu
- Remove shell padding so toolbar spans full width like other portlets
- Switch table to [scrollable]="true" scrollHeight="flex", drop dotTable styleClass
- Remove Menu column header text
- Add draggable:false and closeOnEscape:true to the add/edit dialog config
- Standardize dialog widths: form 31rem → 700px, confirmation 38rem → 500px
- Fix p-confirmDialog: add [draggable]="false" and [style]="{ width: '500px' }"
- Change submit button labels: Add mode → save, Edit mode → update
- Add [draggable]="false" to the shared dot-push-publish-dialog component
- Add plugins.search placeholder copy: "Search plugins..."
- Update store and component specs to reflect separator in action list and
renamed search input test id
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… menu Wires up DotPushPublishEnvironmentsResolver and DotEnterpriseLicenseResolver on the route so the push publish option appears in the row context menu when the instance has an enterprise license and at least one push publish environment configured, matching the pattern used in the locales portlet. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Claude finished @hmoreras's task in 4m 12s —— View job PR Review
Issues1. Reviewer
A third portlet needing inline file-error handling will copy it again. Extract it to 2.
private readonly contextMenu = viewChild.required<ContextMenu>('rowMenu');The author's response that "Angular's compiler requires TypeScript access modifiers (not ES private) for view queries" applied to the old private readonly table = viewChild<Table>('dt');Both should be 3. Missing test coverage for
Minimum coverage needed:
4.
private readonly languageService = inject(DotLanguagesService);
private readonly dotMessageService = inject(DotMessageService);
private readonly messageService = inject(MessageService);
private readonly dotHttpErrorManagerService = inject(DotHttpErrorManagerService);The same 5. Route data reads from shell's route, not the list's own route (subtle coupling) In plugins, resolvers are on the shell route: // lib.routes.ts
{ path: '', component: DotPluginsShellComponent, resolve: { ... } } // resolvers here
Verified clean
|
- Fix aria-label on locales row menu button: replace incorrect 'categories.actions' key with the scoped 'locales.menu' key which already exists in Language.properties (= "Menu") - Fix 'as never' type assertions in plugins spec: replace with 'as DotEnvironment[]' for proper type safety Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename $uploading/$errorMessage signals to drop the $ prefix in dot-plugins-upload and dot-tags-import (signals, not observables) - Fix static accept attribute binding in dot-plugins-upload template - Replace hardcoded items[5] index with .find() in plugins list spec - Refactor DotLocalesListStore to remove DialogService and DotPushPublishDialogService injections; move all dialog-opening logic to DotLocalesListComponent per CLAUDE.md separation of concerns - Drop stale icon assertion from dot-tags-list spec after toolbar icon removal in a prior commit
- dot-login.component.spec: fix checkbox selector from '.checkbox' to '.form-checkbox' to match the renamed template class - dot-add-to-menu.component.spec: fix radio container selector from '.radio label[for=...]' to '.form-radio label[for=...]' - dot-edit-contentlet.component.spec: mock DotcmsConfigService to prevent its constructor HTTP call to /api/v1/appconfiguration from bleeding into test assertions
- Use # prefix for private inject/signal fields (viewChild stays private readonly per Angular constraint) - Guard defaultLocale before pushing set-default/delete menu items - Add explicit type annotations for route.snapshot.data in dot-plugins-list - Update spec to inject DotMessageDisplayService via debugElement.injector
Summary
DotPushPublishEnvironmentsResolverandDotEnterpriseLicenseResolveron the route so the option appears when the instance has an enterprise license and at least one push publish environment configured — matching the pattern used in the locales portlet..checkbox/.radiowrapper classes to.form-checkbox/.form-radioto avoid DaisyUI collision.Test plan
yarn nx test portlets-dot-plugins-portlet🤖 Generated with Claude Code
This PR fixes: #35274
This PR fixes: #35274