Skip to content

Conversation

@wiresio
Copy link
Contributor

@wiresio wiresio commented Nov 26, 2025

Description of Changes

Often, there is a need for copying or moving shells from one repository to another one. Therefore it would be great to have a "Norton Commander" like functionality in the UI.

Related Issue

Closes #853

Design

The AAS commander is divided in two panes (left and right, similar to what the "Norton Commander" looks like). Each side represents a selected AAS Infrastructure (AAS Server like the AAS/SM/CD Repos). A user can move Shells, Submodels and SubmodelElements from one infrastructure to the other (left to right or vice versa). Each side consists of 4 main layers (top to bottom, only one layer visible per pane at a time):

  • Infrastructure layer (list of available infrastructures -> Similar to selecting a hard drive of a PC)
  • AAS Layer (List of all Shells available on the selected infrastructure)
  • Submodel Layer (List of all Submodels available for the selected AAS)
  • SubmodelElements Layer (List of all SubmodelElements for the selected Submodel)

Each pane has its own:

  • selected infrastructure
  • current path
  • auth state
  • selection
  • history (back/forward)

Rules:

  1. SubmodelElements can be multi-layered since they can be nested
  2. Copy/paste/move is only possible between the same layer types
  3. Copy/paste/move is not possible for the first layer (infrastructures)
  4. The AAS commander is not affected by the globally selected infrastructure
  5. The available infrastructures are configured through the global infrastructure management
  6. Copy/move should always be deep copy (for AAS Including Submodels and (nested) SubmodelElements, for Submodels including (nested) SubmodelElements, SubmodelElements including nested SubmodelElements)

Selection rules

  • Single click selects
  • Ctrl click toggles
  • Shift click range selects (within current list)
  • Selection is per pane + per current layer.

Navigation rules

  • Double click opens the element (if it has children)
  • Each list is a treeview (except on the infrastructure layer) that can be expanded on every element by a chevron to the left of an element
  • The treeview(s) can be collapsed/reopened via buttons in the top navigation of a pane
  • There should be a search bar on the top bar that can be used to filter/search for elements in an infrastructure based on the currently open layer
  • The top most element is always an element with ".." that navigates one layer up
  • There are breadcrumbs in a navigation bar on top that can be clicked to navigate there
  • Clicking to the right of the breadcrumbs opens the current path a textfield (supports inserting and copying a path)
  • If there are too many breadcrumbs, a crumb with "..." will be shown that opens a menu when clicked to navigate to those "directories" in between that where truncated
  • Submodels and SubmodelElements are always fetched with the query param level set to core to reduce the amount of data fetched (not the entire nesting) -> expanding in the treeview fetches the next layer (same for opening an element with double click
  • Curser based pagination will take place on the list level on the AAS and Submodel layers as well as on the top level SubmodelElements (direct children of a Submodel (this has to be implemented for the treeview as well on those levels)

Drag & drop rules

  • Drag & drop = Copy
  • Shift + drag = Move
  • For touch devices (no modifier): drop popover “Copy / Move”

Acceptance criteria:

  • Drag and drop is possible for AAS/Submodels/SubmodelElements -> Copy/Paste behavior
  • It is possible to move AAS/Submodels/SubmodelElements

Assumptions:

  • The commander should also work for scenarios where authorization is needed
  • It is assumed that copy/past/move AAS and Submodels automatically results into the creation and/or deletion of the respective descriptors
  • It is not relevant to see SubmodelElement values in the commander
  • It could make sense to make similar context menus available like in the "AAS Editor" (e.g. Edit SubmodelElement)
  • non blocking actions with progress tracking should happen

Conflict handling:

  • Abort on conflicts (e.g. duplicate IDs or same idShort in the current layer of SMEs)
  • On move, delete source after successful paste in the destination

BaSyx Configuration for Testing

See docker-compose in directory: examples/AASCommander

AAS Files Used for Testing

Should work with any AAS.

@wiresio
Copy link
Contributor Author

wiresio commented Dec 19, 2025

Shall we close this and wait for the implementation in BaSyx Studio?

@aaronzi
Copy link
Member

aaronzi commented Dec 19, 2025

No, please keep this open. I still want to resolve the merge conflicts and merge the PR in the new year. The component will probably be 99% reusable for the BaSyx Studio.

@wiresio
Copy link
Contributor Author

wiresio commented Dec 20, 2025

Alright, sounds good!

@aaronzi
Copy link
Member

aaronzi commented Dec 24, 2025

For now, I have reverted all changes to stores and composables. These changes were causing merge conflicts with the new multi-infrastructure architecture. This new architecture also changes how the commander works regarding copying from one repository to another. I will implement the necessary changes to enable the commander to work with the new multi-infrastructure architecture of the BaSyx UI.

@wiresio
Copy link
Contributor Author

wiresio commented Jan 7, 2026

Happy new year @aaronzi and thanks for your work "between the years"!

@aaronzi
Copy link
Member

aaronzi commented Jan 7, 2026

Thanks @wiresio. I also wish you a happy new year :)

This PR seems to be a bit of a rabbit hole if I want to implement everything that I added to the PR description. I will probably only implement the "Infrastructure Layer" and the "AAS Layer" and add the rest in a separate PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants