Releases: SchweizerischeBundesbahnen/scion-workbench
18.0.0-beta.10 (@scion/workbench)
18.0.0-beta.10 (2024-12-09)
Bug Fixes
- workbench/view: do not scroll the active tab into view when opening or closing an inactive tab (a5d4d7e)
- workbench/view: scroll the active tab into view when navigating the active tab (d10d25b)
Performance Improvements
- workbench: improve drag experience when dragging tabs in the tabbar (0ae78eb)
18.0.0-beta.9 (@scion/workbench)
18.0.0-beta.9 (2024-11-25)
Bug Fixes
- workbench/view: invoke
CanClose
guard in view injection context (07ba936), closes #578 - workbench/view: prevent
CanClose
guard from blocking workbench navigation (12e9e91), closes #558 - workbench/view: prevent closing views with a pending
CanClose
guard (4326a63)
Features
- workbench/view: add functional
CanClose
guard, deprecate class-based guard (c2ee531)
Deprecations
-
workbench/view: The class-based
CanClose
guard has been deprecated in favor of a functional guard that can be registered onWorkbenchView.canClose
.Migrate by registering a callback on
WorkbenchView.canClose
instead of implementing theCanClose
interface.Before migration:
import {CanClose} from '@scion/workbench'; import {Component} from '@angular/core'; @Component({}) export class ViewComponent implements CanClose { public canClose(): boolean { return true; } }
After migration:
import {Component, inject} from '@angular/core'; import {WorkbenchView} from '@scion/workbench'; @Component({}) export class ViewComponent { constructor() { inject(WorkbenchView).canClose(() => { return true; }); } }
1.0.0-beta.28 (@scion/workbench-client)
1.0.0-beta.28 (2024-11-25)
Features
- workbench-client/view: add functional
CanClose
guard, deprecate class-based guard (ecd52b3)
Deprecations
-
workbench-client/view: The class-based
CanClose
guard has been deprecated in favor of a functional guard that can be registered onWorkbenchView.canClose
.Migrate by registering a callback on
WorkbenchView.canClose
instead of implementing theCanClose
interface.Before migration:
import {CanClose, WorkbenchView} from '@scion/workbench-client'; import {Beans} from '@scion/toolkit/bean-manager'; export class ViewComponent implements CanClose { constructor() { Beans.get(WorkbenchView).addCanClose(this); } public canClose(): boolean { return true; } }
After migration:
import {WorkbenchView} from '@scion/workbench-client'; import {Beans} from '@scion/toolkit/bean-manager'; export class ViewComponent { constructor() { Beans.get(WorkbenchView).canClose(() => { return true; }); } }
18.0.0-beta.8 (@scion/workbench)
18.0.0-beta.8 (2024-10-28)
Bug Fixes
- workbench/popup: ensure the popup anchor not leaving view boundaries (c629f49)
- workbench/view: ensure view overlays align with view boundaries when view position changes (2998295)
Features
- workbench: prevent tracking unwanted dependencies in effects (7a7eaf8)
BREAKING CHANGES
-
workbench: SCION Workbench requires
@scion/toolkit
version1.6.0
or later. -
workbench: SCION Workbench requires
@scion/components
version18.1.1
or later. -
workbench: Calling following workbench methods in a reactive (tracking) context (e.g.,
effect
) now throws an error. Migrate by using Angular'suntracked()
function.WorkbenchRouter.navigate
WorkbenchService.registerPerspective
WorkbenchService.switchPerspective
WorkbenchService.resetPerspective
WorkbenchService.closeViews
WorkbenchService.switchTheme
WorkbenchService.registerPartAction
WorkbenchService.registerViewMenuItem
WorkbenchLauncher.launch
WorkbenchDialogService.open
WorkbenchMessageBoxService.open
NotificationService.notify
PopupService.open
WorkbenchPart.activate
WorkbenchView.activate
WorkbenchView.close
WorkbenchView.move
WorkbenchView.registerMenuItem
WorkbenchDialog.close
Popup.close
Migration Example
import {effect, inject, untracked} from '@angular/core'; import {WorkbenchRouter} from '@scion/workbench'; const workbenchRouter = inject(WorkbenchRouter); // Before effect(() => { if (someSignal()) { workbenchRouter.navigate(['path/to/view']); } }); // After effect(() => { if (someSignal()) { untracked(() => workbenchRouter.navigate(['path/to/view'])); } });
18.0.0-beta.7 (@scion/workbench)
18.0.0-beta.7 (2024-10-11)
Bug Fixes
1.0.0-beta.27 (@scion/workbench-client)
1.0.0-beta.27 (2024-10-11)
Bug Fixes
- workbench-client: position document root as required by @scion/toolkit (007e9c3)
18.0.0-beta.6 (@scion/workbench)
18.0.0-beta.6 (2024-09-11)
Bug Fixes
- workbench/messagebox: display message if opened from a
CanClose
guard of a microfrontend view (b0829b3), closes #591 - workbench/view: restore scroll position when switching views (9265951), closes #588
- workbench: disable change detection during navigation to prevent inconsistent layout rendering (68ecca7)
Features
- workbench/popup: support returning result on focus loss (ce5089e)
- workbench/view: enable translation of built-in context menu (9bfdf74)
BREAKING CHANGES
- workbench/popup: The method
closeWithError
has been removed from thePopup
handle. Instead, pass anError
object to theclose
method.
Before migration:
import {inject} from '@angular/core';
import {Popup} from '@scion/workbench';
inject(Popup).closeWithError('some error');
After migration:
import {inject} from '@angular/core';
import {Popup} from '@scion/workbench';
inject(Popup).close(new Error('some error'));
1.0.0-beta.26 (@scion/workbench-client)
1.0.0-beta.26 (2024-09-11)
Features
- workbench-client/popup: support returning result on focus loss (ce5089e)
BREAKING CHANGES
- workbench-client/popup: The method
closeWithError
has been removed from theWorkbenchPopup
handle. Instead, pass anError
object to theclose
method.
Before migration:
import {Beans} from '@scion/toolkit/bean-manager';
import {WorkbenchPopup} from '@scion/workbench-client';
Beans.get(WorkbenchPopup).closeWithError('some error');
After migration:
import {Beans} from '@scion/toolkit/bean-manager';
import {WorkbenchPopup} from '@scion/workbench-client';
Beans.get(WorkbenchPopup).close(new Error('some error'));
18.0.0-beta.5 (@scion/workbench)
18.0.0-beta.5 (2024-09-02)
Bug Fixes
- workbench/perspective: support browser back navigation after switching perspective (5777728), closes #579
BREAKING CHANGES
-
workbench/perspective: The active perspective is now set after navigation completes (previously before navigation), so it is unavailable during route resolution/activation. Route guards (like
canMatch
) should use thecanMatchWorkbenchPerspective
function instead ofWorkbenchService
orWorkbenchPerspective
to determine the perspective’s activation state.Migration Example:
Before:
import {Route} from '@angular/router'; import {inject} from '@angular/core'; import {WorkbenchService} from '@scion/workbench'; const route: Route = { canMatch: [() => inject(WorkbenchService).activePerspective()?.id === 'perspective'], // or canMatch: [() => inject(WorkbenchService).perspectives().find(perspective => perspective.id === 'perspective')?.active()], };
After:
import {Route} from '@angular/router'; import {canMatchWorkbenchPerspective} from '@scion/workbench'; const route: Route = { canMatch: [canMatchWorkbenchPerspective('perspective')], };
18.0.0-beta.4 (@scion/workbench)
18.0.0-beta.4 (2024-08-28)
Bug Fixes
- workbench/view: update view properties between route deactivation and route activation (5526eec)
- workbench/router: activate part only if specified by the navigation (51ba3bb)
- workbench/popup: render popup at the correct position when activating view (a13e93f)
- workbench/layout: debounce storing workbench layout (076c241)
- workbench/layout: do not display "Not Found" page when closing a view (03681b5)
- workbench/layout: serialize properties with a
null
value (49905f6)
Features
- workbench/perspective: provide active perspective via
WorkbenchService
(ee6d22b) - workbench/view: enable passing data to an empty-path navigation (3b65d9b)
- workbench: change
WorkbenchService
properties to signals to integrate with Angular reactive contexts (17280b3) - workbench/perspective: change
WorkbenchPerspective
properties to signals to integrate with Angular reactive contexts (df6603a) - workbench/part: change
WorkbenchPart
properties to signals to integrate with Angular reactive contexts (6aa6cd1) - workbench/view: change
WorkbenchView
properties to signals to integrate with Angular reactive contexts (4498b52) - workbench/dialog: change
WorkbenchDialog
properties to signals to integrate with Angular reactive contexts (53ab8bb)
BREAKING CHANGES
-
workbench: Migrating
WorkbenchService
properties to signals has introduced a breaking change.Migrate reading of
WorkbenchService
properties as follows:WorkbenchService.layout
=>WorkbenchService.layout()
WorkbenchService.layout$
=>WorkbenchService.layout()
WorkbenchService.parts
=>WorkbenchService.parts()
WorkbenchService.parts$
=>WorkbenchService.parts()
WorkbenchService.perspectives
=>WorkbenchService.perspectives()
WorkbenchService.perspectives$
=>WorkbenchService.perspectives()
WorkbenchService.theme$
=>WorkbenchService.theme()
WorkbenchService.views
=>WorkbenchService.views()
WorkbenchService.views$
=>WorkbenchService.views()
-
workbench/perspective: Migrating
WorkbenchPerspective
properties to signals has introduced a breaking change.Migrate reading of
WorkbenchPerspective
properties as follows:WorkbenchPerspective.active
=>WorkbenchPerspective.active()
WorkbenchPerspective.active$
=>WorkbenchPerspective.active()
-
workbench/part: Migrating
WorkbenchPart
properties to signals has introduced a breaking change.Migrate reading of
WorkbenchPart
properties as follows:WorkbenchPart.actions
=>WorkbenchPart.actions()
WorkbenchPart.actions$
=>WorkbenchPart.actions()
WorkbenchPart.active
=>WorkbenchPart.active()
WorkbenchPart.active$
=>WorkbenchPart.active()
WorkbenchPart.activeViewId
=>WorkbenchPart.activeViewId()
WorkbenchPart.activeViewId$
=>WorkbenchPart.activeViewId()
WorkbenchPart.viewIds$
=>WorkbenchPart.viewIds()
WorkbenchPart.viewIds
=>WorkbenchPart.viewIds()
-
workbench/view: Migrating
WorkbenchView
properties to signals has introduced a breaking change.The breaking change refers to reading property values. Writable properties are still updated through value assignment. Some properties have also been renamed for consistency reasons.
Migrate reading of
WorkbenchView
properties as follows:WorkbenchView.active
=>WorkbenchView.active()
WorkbenchView.active$
=>WorkbenchView.active()
WorkbenchView.cssClass
=>WorkbenchView.cssClass()
WorkbenchView.closable
=>WorkbenchView.closable()
WorkbenchView.dirty
=>WorkbenchView.dirty()
WorkbenchView.first
=>WorkbenchView.first()
WorkbenchView.heading
=>WorkbenchView.heading()
WorkbenchView.last
=>WorkbenchView.last()
WorkbenchView.navigationHint
=>WorkbenchView.navigationHint()
WorkbenchView.part
=>WorkbenchView.part()
WorkbenchView.position
=>WorkbenchView.position()
WorkbenchView.urlSegments
=>WorkbenchView.urlSegments()
WorkbenchView.scrolledIntoView
=>WorkbenchView.scrolledIntoView()
WorkbenchView.state
=>WorkbenchView.navigationState()
WorkbenchView.title
=>WorkbenchView.title()
-
workbench/dialog: Migrating
WorkbenchDialog
properties to signals has introduced a breaking change.The breaking change refers to reading property values. Writable properties are still updated through value assignment.
Migrate reading of
WorkbenchDialog
properties as follows:WorkbenchDialog.closable
=>WorkbenchDialog.closable()
WorkbenchDialog.cssClass
=>WorkbenchDialog.cssClass()
WorkbenchDialog.padding
=>WorkbenchDialog.padding()
WorkbenchDialog.resizable
=>WorkbenchDialog.resizable()
WorkbenchDialog.size.height
=>WorkbenchDialog.size.height()
WorkbenchDialog.size.width
=>WorkbenchDialog.size.width()
WorkbenchDialog.size.maxHeight
=>WorkbenchDialog.size.maxHeight()
WorkbenchDialog.size.minHeight
=>WorkbenchDialog.size.minHeight()
WorkbenchDialog.size.maxWidth
=>WorkbenchDialog.size.maxWidth()
WorkbenchDialog.size.minWidth
=>WorkbenchDialog.size.minWidth()
WorkbenchDialog.title
=>WorkbenchDialog.title()
- Setting an observable as dialog title is no longer supported. Instead, manually subscribe to the observable and set the title.