Skip to content

Releases: SchweizerischeBundesbahnen/scion-workbench

18.0.0-beta.10 (@scion/workbench)

09 Dec 21:56
Compare
Choose a tag to compare

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)

25 Nov 15:56
Compare
Choose a tag to compare

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 on WorkbenchView.canClose.

    Migrate by registering a callback on WorkbenchView.canClose instead of implementing the CanClose 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)

25 Nov 15:41
Compare
Choose a tag to compare

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 on WorkbenchView.canClose.

    Migrate by registering a callback on WorkbenchView.canClose instead of implementing the CanClose 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)

29 Oct 14:56
Compare
Choose a tag to compare

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 version 1.6.0 or later.

  • workbench: SCION Workbench requires @scion/components version 18.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's untracked() 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)

11 Oct 18:11
Compare
Choose a tag to compare

18.0.0-beta.7 (2024-10-11)

Bug Fixes

  • workbench/dialog: enable updating dialog properties in an Angular effect (7da2418)
  • workbench/view: enable updating view properties in an Angular effect (a7d3594)
  • workbench: position document root as required by @scion/toolkit (0d2f6c2)

1.0.0-beta.27 (@scion/workbench-client)

11 Oct 17:44
Compare
Choose a tag to compare

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)

11 Sep 11:29
Compare
Choose a tag to compare

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 the Popup handle. Instead, pass an Error object to the close 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)

11 Sep 11:21
Compare
Choose a tag to compare

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 the WorkbenchPopup handle. Instead, pass an Error object to the close 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)

02 Sep 09:39
Compare
Choose a tag to compare

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 the canMatchWorkbenchPerspective function instead of WorkbenchService or WorkbenchPerspective 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)

28 Aug 12:39
Compare
Choose a tag to compare

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.