Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ [Frontend] Trash bin #6590

Merged
merged 123 commits into from
Nov 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
08021e7
rename header
odeimaiz Oct 24, 2024
0439637
currentContext prop in header
odeimaiz Oct 24, 2024
a61bd97
use currentContext
odeimaiz Oct 24, 2024
f47ac8f
minor
odeimaiz Oct 24, 2024
8f1f524
"locationChanged"
odeimaiz Oct 24, 2024
842fabe
more renaming
odeimaiz Oct 24, 2024
a8d50e6
Trash context
odeimaiz Oct 24, 2024
ba6bb24
minor
odeimaiz Oct 24, 2024
916c496
trash default to false
odeimaiz Oct 24, 2024
4583298
unused
odeimaiz Oct 24, 2024
54710a1
currentContext prop in ContextBreadcrumbs
odeimaiz Oct 24, 2024
64b490d
Merge branch 'master' into feature/trash-bin
odeimaiz Oct 24, 2024
b5e88f1
bad merge
odeimaiz Oct 24, 2024
8cec162
SelectStudies button
odeimaiz Oct 24, 2024
39e6a50
minor
odeimaiz Oct 24, 2024
7b37517
more context checks
odeimaiz Oct 24, 2024
99b4f4b
PROJECTS_TRASH_RETENTION_DAYS
odeimaiz Oct 24, 2024
34e535b
pass context
odeimaiz Oct 24, 2024
139d61e
defaults
odeimaiz Oct 24, 2024
2a40d9f
getPageTrashed
odeimaiz Oct 24, 2024
3b362a9
Trash studies
odeimaiz Oct 24, 2024
f3b25e3
studiesTrashButton visibility
odeimaiz Oct 24, 2024
f983526
trashing
odeimaiz Oct 24, 2024
c29267b
n days message
odeimaiz Oct 24, 2024
ee59916
minor
odeimaiz Oct 24, 2024
5e59eac
Merge branch 'master' into feature/trash-bin
odeimaiz Oct 25, 2024
c6bc22b
Merge branch 'feature/trash-bin' of github.com:odeimaiz/osparc-simcor…
odeimaiz Oct 25, 2024
eeb9648
minor
odeimaiz Oct 25, 2024
e6f662a
empty-trash-button
odeimaiz Oct 25, 2024
34d3d70
emptyTrash
odeimaiz Oct 25, 2024
2181b77
Context switching for Trash
odeimaiz Oct 25, 2024
33e7584
minor
odeimaiz Oct 25, 2024
53d674a
refactor
odeimaiz Oct 25, 2024
c584dc0
caption
odeimaiz Oct 25, 2024
6a2ec33
trash button in card menu
odeimaiz Oct 25, 2024
23eb445
captions in Confirmation Dialogs
odeimaiz Oct 25, 2024
aa0605d
Merge branch 'master' into feature/trash-bin
odeimaiz Oct 29, 2024
5931c4d
list trashed studies
odeimaiz Oct 29, 2024
22c0734
trashedAt property
odeimaiz Oct 29, 2024
5b7b6d4
untrashStudy
odeimaiz Oct 29, 2024
7cc9eb2
restore_from_trash
odeimaiz Oct 29, 2024
04d2d2c
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 4, 2024
7e4d4e6
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 6, 2024
b0c62b3
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 7, 2024
9b2de1b
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 8, 2024
4e67d4d
trash folders
odeimaiz Nov 8, 2024
f1c8b32
minor
odeimaiz Nov 8, 2024
0bef5f8
fetchTrashedFolders
odeimaiz Nov 8, 2024
1fc2d66
trashedAt for folder model
odeimaiz Nov 8, 2024
a957b58
list trashed folders in trash
odeimaiz Nov 8, 2024
5183da7
trash folder workflow
odeimaiz Nov 8, 2024
8191c76
trashedAt
odeimaiz Nov 8, 2024
f0edc20
untrash and context binding
odeimaiz Nov 8, 2024
43d81f1
populateMenu
odeimaiz Nov 8, 2024
aa10e47
pass entire folder
odeimaiz Nov 8, 2024
9eda3d7
fix
odeimaiz Nov 8, 2024
245a10b
context saved in store
odeimaiz Nov 8, 2024
8d4d51d
minor
odeimaiz Nov 8, 2024
2017816
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 13, 2024
1164c2f
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 13, 2024
607baa1
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 22, 2024
88220c4
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 25, 2024
339001f
Merge branch 'feature/trash-bin' of github.com:odeimaiz/osparc-simcor…
odeimaiz Nov 25, 2024
0b87812
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 25, 2024
1f72030
renames
odeimaiz Nov 25, 2024
3a80160
workspace trashedAt
odeimaiz Nov 25, 2024
15ad214
minor
odeimaiz Nov 25, 2024
d37fd52
search and trashed workspaces
odeimaiz Nov 25, 2024
7605f82
Merge branch 'feature/trash-bin' of github.com:odeimaiz/osparc-simcor…
odeimaiz Nov 25, 2024
b2035cf
trashed and search workspaces
odeimaiz Nov 25, 2024
a3d299b
minor
odeimaiz Nov 25, 2024
8765c2c
[skip ci] orderBy is required
odeimaiz Nov 25, 2024
a0879f9
plus button
odeimaiz Nov 25, 2024
a6fa2c9
trash untrash workspaces
odeimaiz Nov 25, 2024
3767ba9
[skip ci] add resources
odeimaiz Nov 25, 2024
b6c6950
[skip ci] handle cache
odeimaiz Nov 25, 2024
3dcb204
trashedBy property
odeimaiz Nov 25, 2024
95296ab
[skip ci] trash/untrash workspaces working
odeimaiz Nov 25, 2024
53dd3fa
expose cleanAll
odeimaiz Nov 25, 2024
110c022
minor
odeimaiz Nov 25, 2024
ef9c40d
minor
odeimaiz Nov 25, 2024
b03779c
minor
odeimaiz Nov 25, 2024
c5b5895
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 25, 2024
1e2313f
[skip ci] undo
odeimaiz Nov 25, 2024
1853e94
reset lists
odeimaiz Nov 25, 2024
6014609
minor
odeimaiz Nov 25, 2024
b58b6fe
Folders are not removed anymore
odeimaiz Nov 25, 2024
ef46013
fixes
odeimaiz Nov 25, 2024
c54115f
minor
odeimaiz Nov 25, 2024
019619a
both ways
odeimaiz Nov 25, 2024
8444b83
minor
odeimaiz Nov 25, 2024
26b1f48
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 26, 2024
0b26a7a
createConfirmRemoveForMeWindow
odeimaiz Nov 26, 2024
f57884e
renaming
odeimaiz Nov 26, 2024
5e6ebca
__removeMeFromCollaborators
odeimaiz Nov 26, 2024
035ceb7
[skip ci] refactor
odeimaiz Nov 26, 2024
b536c87
workflow ready
odeimaiz Nov 26, 2024
400cb25
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 26, 2024
c7cfbfe
show messages
odeimaiz Nov 26, 2024
bbce5c5
[skip ci] wording
odeimaiz Nov 26, 2024
3ee4c3f
trashed items are not selectable
odeimaiz Nov 26, 2024
6c3bcaf
minor
odeimaiz Nov 26, 2024
608aba3
setTrashedNElements
odeimaiz Nov 26, 2024
9d19c58
setTrashEmpty
odeimaiz Nov 26, 2024
dc7895e
evaluateTrashEmpty
odeimaiz Nov 26, 2024
a8e3517
evaluate after restore
odeimaiz Nov 26, 2024
35e6fea
minor
odeimaiz Nov 27, 2024
9b9d47d
minor
odeimaiz Nov 27, 2024
be63dd7
switch
odeimaiz Nov 27, 2024
e3f6ffc
[skip ci] StudyBrowserContext
odeimaiz Nov 27, 2024
06095a2
[skip ci] browserContext
odeimaiz Nov 27, 2024
ab8f63f
clean up the header
odeimaiz Nov 27, 2024
829a20c
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 27, 2024
277af25
empty trash button
odeimaiz Nov 27, 2024
6642bcf
minor
odeimaiz Nov 27, 2024
f3f4080
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 28, 2024
32eb9c4
Merge branch 'feature/trash-bin' of github.com:odeimaiz/osparc-simcor…
odeimaiz Nov 28, 2024
38c56a2
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 29, 2024
f777ea5
minor
odeimaiz Nov 29, 2024
8f14374
minor
odeimaiz Nov 29, 2024
c1e0513
[skip ci] no spacers
odeimaiz Nov 29, 2024
cd8d8f2
last fixes
odeimaiz Nov 29, 2024
b0d8cf6
Merge branch 'master' into feature/trash-bin
odeimaiz Nov 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,14 @@ qx.Class.define("osparc.dashboard.CardBase", {
return this.getResourceType() === resourceType;
},

isItemNotClickable: function() {
const studyBrowserContext = osparc.store.Store.getInstance().getStudyBrowserContext();
return (
this.getBlocked() === true || // It could be blocked by IN_USE or UNKNOWN_SERVICE
(this.isResourceType("study") && (studyBrowserContext === "trash")) // It could a trashed study
);
},

__applyResourceData: function(resourceData) {
let uuid = null;
let owner = null;
Expand Down Expand Up @@ -776,9 +784,9 @@ qx.Class.define("osparc.dashboard.CardBase", {
if (moveToButton) {
moveToButton.setEnabled(osparc.study.Utils.canMoveTo(resourceData));
}
const deleteButton = menuButtons.find(menuBtn => "deleteButton" in menuBtn);
if (deleteButton) {
deleteButton.setEnabled(osparc.study.Utils.canBeDeleted(resourceData));
const trashButton = menuButtons.find(menuBtn => "trashButton" in menuBtn);
if (trashButton) {
trashButton.setEnabled(osparc.study.Utils.canBeDeleted(resourceData));
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,15 @@ qx.Class.define("osparc.dashboard.ContextBreadcrumbs", {
this._setLayout(new qx.ui.layout.HBox(5).set({
alignY: "middle"
}));

osparc.store.Store.getInstance().addListener("changeStudyBrowserContext", () => this.__rebuild(), this);
},

events: {
"locationChanged": "qx.event.type.Data",
},

properties: {
currentContext: {
check: ["studiesAndFolders", "workspaces", "search"],
nullable: false,
init: "studiesAndFolders",
event: "changeCurrentContext",
apply: "__rebuild"
},

currentWorkspaceId: {
check: "Number",
nullable: true,
Expand All @@ -60,7 +54,8 @@ qx.Class.define("osparc.dashboard.ContextBreadcrumbs", {
__rebuild: function() {
this._removeAll();

if (this.getCurrentContext() !== "studiesAndFolders") {
const currentContext = osparc.store.Store.getInstance().getStudyBrowserContext();
if (currentContext !== "studiesAndFolders") {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ qx.Class.define("osparc.dashboard.FolderButtonItem", {
"folderSelected": "qx.event.type.Data",
"folderUpdated": "qx.event.type.Data",
"moveFolderToRequested": "qx.event.type.Data",
"trashFolderRequested": "qx.event.type.Data",
"untrashFolderRequested": "qx.event.type.Data",
"deleteFolderRequested": "qx.event.type.Data",
"changeContext": "qx.event.type.Data",
},
Expand Down Expand Up @@ -85,7 +87,7 @@ qx.Class.define("osparc.dashboard.FolderButtonItem", {
check: "Date",
nullable: true,
apply: "__applyLastModified"
}
},
},

members: {
Expand Down Expand Up @@ -219,6 +221,16 @@ qx.Class.define("osparc.dashboard.FolderButtonItem", {

menu.addSeparator();

const trashButton = new qx.ui.menu.Button(this.tr("Trash"), "@FontAwesome5Solid/trash/12");
trashButton.addListener("execute", () => this.__trashFolderRequested(), this);
menu.add(trashButton);
} else if (studyBrowserContext === "trash") {
const restoreButton = new qx.ui.menu.Button(this.tr("Restore"), "@MaterialIcons/restore_from_trash/16");
restoreButton.addListener("execute", () => this.fireDataEvent("untrashFolderRequested", this.getFolder()), this);
menu.add(restoreButton);

menu.addSeparator();

const deleteButton = new qx.ui.menu.Button(this.tr("Delete"), "@FontAwesome5Solid/trash/12");
osparc.utils.Utils.setIdToWidget(deleteButton, "deleteFolderMenuItem");
deleteButton.addListener("execute", () => this.__deleteFolderRequested(), this);
Expand All @@ -229,7 +241,9 @@ qx.Class.define("osparc.dashboard.FolderButtonItem", {
},

__itemSelected: function(newVal) {
if (newVal) {
const studyBrowserContext = osparc.store.Store.getInstance().getStudyBrowserContext();
// do not allow selecting workspace
if (studyBrowserContext !== "trash" && newVal) {
this.fireDataEvent("folderSelected", this.getFolderId());
}
this.setValue(false);
Expand Down Expand Up @@ -262,6 +276,24 @@ qx.Class.define("osparc.dashboard.FolderButtonItem", {
folderEditor.addListener("cancel", () => win.close());
},

__trashFolderRequested: function() {
const trashDays = osparc.store.StaticInfo.getInstance().getTrashRetentionDays();
let msg = this.tr("Are you sure you want to move the Folder and all its content to the trash?");
msg += "<br><br>" + this.tr("It will be permanently deleted after ") + trashDays + " days.";
const confirmationWin = new osparc.ui.window.Confirmation(msg).set({
caption: this.tr("Move to Trash"),
confirmText: this.tr("Move to Trash"),
confirmAction: "delete"
});
confirmationWin.center();
confirmationWin.open();
confirmationWin.addListener("close", () => {
if (confirmationWin.getConfirmed()) {
this.fireDataEvent("trashFolderRequested", this.getFolderId());
}
}, this);
},

__deleteFolderRequested: function() {
const msg = this.tr("Are you sure you want to delete") + " <b>" + this.getTitle() + "</b>?";
const confirmationWin = new osparc.ui.window.Confirmation(msg).set({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,7 @@ qx.Class.define("osparc.dashboard.GridButtonItem", {
},

__itemSelected: function() {
// It could be blocked by IN_USE or UNKNOWN_SERVICE
if (this.getBlocked() === true) {
if (this.isItemNotClickable()) {
this.setValue(false);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -274,8 +274,7 @@ qx.Class.define("osparc.dashboard.ListButtonItem", {
},

__itemSelected: function() {
// It could be blocked by IN_USE or UNKNOWN_SERVICE
if (this.getBlocked() === true) {
if (this.isItemNotClickable()) {
this.setValue(false);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ qx.Class.define("osparc.dashboard.ResourceBrowserBase", {
this._addToLayout(searchBarFilter);
},

_createResourcesLayout: function() {
_createResourcesLayout: function(flatListId) {
const toolbar = this._toolbar = new qx.ui.toolbar.ToolBar().set({
backgroundColor: "transparent",
spacing: 10,
Expand All @@ -255,7 +255,13 @@ qx.Class.define("osparc.dashboard.ResourceBrowserBase", {

this.__viewModeLayout = new qx.ui.toolbar.Part();

const resourcesContainer = this._resourcesContainer = new osparc.dashboard.ResourceContainerManager();
const resourcesContainer = this._resourcesContainer = new osparc.dashboard.ResourceContainerManager(this._resourceType);
if (flatListId) {
const list = this._resourcesContainer.getFlatList();
if (list) {
osparc.utils.Utils.setIdToWidget(list, flatListId);
}
}
if (this._resourceType === "study") {
const viewMode = osparc.utils.Utils.localCache.getLocalStorageItem("studiesViewMode");
if (viewMode) {
Expand All @@ -270,6 +276,8 @@ qx.Class.define("osparc.dashboard.ResourceBrowserBase", {
resourcesContainer.addListener("emptyStudyClicked", e => this._deleteResourceRequested(e.getData()));
resourcesContainer.addListener("folderUpdated", e => this._folderUpdated(e.getData()));
resourcesContainer.addListener("moveFolderToRequested", e => this._moveFolderToRequested(e.getData()));
resourcesContainer.addListener("trashFolderRequested", e => this._trashFolderRequested(e.getData()));
resourcesContainer.addListener("untrashFolderRequested", e => this._untrashFolderRequested(e.getData()));
resourcesContainer.addListener("deleteFolderRequested", e => this._deleteFolderRequested(e.getData()));
resourcesContainer.addListener("folderSelected", e => {
const folderId = e.getData();
Expand All @@ -288,6 +296,8 @@ qx.Class.define("osparc.dashboard.ResourceBrowserBase", {
this._changeContext(context, workspaceId, folderId);
}, this);
resourcesContainer.addListener("workspaceUpdated", e => this._workspaceUpdated(e.getData()));
resourcesContainer.addListener("trashWorkspaceRequested", e => this._trashWorkspaceRequested(e.getData()));
resourcesContainer.addListener("untrashWorkspaceRequested", e => this._untrashWorkspaceRequested(e.getData()));
resourcesContainer.addListener("deleteWorkspaceRequested", e => this._deleteWorkspaceRequested(e.getData()));

this._addToLayout(resourcesContainer);
Expand Down Expand Up @@ -502,6 +512,14 @@ qx.Class.define("osparc.dashboard.ResourceBrowserBase", {
throw new Error("Abstract method called!");
},

_trashFolderRequested: function(folderId) {
throw new Error("Abstract method called!");
},

_untrashFolderRequested: function(folder) {
throw new Error("Abstract method called!");
},

_deleteFolderRequested: function(folderId) {
throw new Error("Abstract method called!");
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
qx.Class.define("osparc.dashboard.ResourceContainerManager", {
extend: qx.ui.core.Widget,

construct: function() {
construct: function(resourceType) {
this.base(arguments);

this._setLayout(new qx.ui.layout.VBox(15));
Expand All @@ -27,19 +27,20 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
paddingBottom: 60
});

this.__foldersList = [];
this.__workspacesList = [];
this.__foldersList = [];
this.__resourcesList = [];
this.__groupedContainersList = [];

if (resourceType === "study") {
const workspacesContainer = this.__workspacesContainer = new osparc.dashboard.ToggleButtonContainer();
this._add(workspacesContainer);
workspacesContainer.setVisibility(osparc.utils.DisabledPlugins.isFoldersEnabled() ? "visible" : "excluded");

const workspacesContainer = this.__workspacesContainer = new osparc.dashboard.ToggleButtonContainer();
workspacesContainer.setVisibility(osparc.utils.DisabledPlugins.isFoldersEnabled() ? "visible" : "excluded");


const foldersContainer = this.__foldersContainer = new osparc.dashboard.ToggleButtonContainer();
this._add(foldersContainer);
foldersContainer.setVisibility(osparc.utils.DisabledPlugins.isFoldersEnabled() ? "visible" : "excluded");
const foldersContainer = this.__foldersContainer = new osparc.dashboard.ToggleButtonContainer();
this._add(foldersContainer);
foldersContainer.setVisibility(osparc.utils.DisabledPlugins.isFoldersEnabled() ? "visible" : "excluded");
}

const nonGroupedContainer = this.__nonGroupedContainer = this.__createFlatList();
this._add(nonGroupedContainer);
Expand Down Expand Up @@ -75,9 +76,13 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
"folderSelected": "qx.event.type.Data",
"folderUpdated": "qx.event.type.Data",
"moveFolderToRequested": "qx.event.type.Data",
"trashFolderRequested": "qx.event.type.Data",
"untrashFolderRequested": "qx.event.type.Data",
"deleteFolderRequested": "qx.event.type.Data",
"workspaceSelected": "qx.event.type.Data",
"workspaceUpdated": "qx.event.type.Data",
"trashWorkspaceRequested": "qx.event.type.Data",
"untrashWorkspaceRequested": "qx.event.type.Data",
"deleteWorkspaceRequested": "qx.event.type.Data",
"changeContext": "qx.event.type.Data",
},
Expand Down Expand Up @@ -260,9 +265,13 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
},

__cleanAll: function() {
if (this.__workspacesContainer) {
this.__workspacesContainer.removeAll();
if (this._getChildren().includes(this.__nonGroupedContainer)) {
this._remove(this.__nonGroupedContainer);
}
if (this._getChildren().includes(this.__groupedContainers)) {
this._remove(this.__groupedContainers);
}

if (this.__nonGroupedContainer) {
this.__nonGroupedContainer.removeAll();
this.__nonGroupedContainer = null;
Expand All @@ -274,7 +283,6 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
groupedContainer.getContentContainer().removeAll();
});
this.__groupedContainersList = [];
this._removeAll();
},

__addFoldersContainer: function() {
Expand All @@ -299,9 +307,6 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {

__rebuildLayout: function(resourceType) {
this.__cleanAll();
if (osparc.utils.DisabledPlugins.isFoldersEnabled()) {
this.__addFoldersContainer();
}
if (this.getGroupBy()) {
const noGroupContainer = this.__createGroupContainer("no-group", "No Group", "transparent");
this.__groupedContainers.add(noGroupContainer);
Expand Down Expand Up @@ -361,8 +366,9 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
},

reloadWorkspaces: function() {
this.__cleanAll();
this._add(this.__workspacesContainer);
if (this.__workspacesContainer) {
this.__workspacesContainer.removeAll();
}
let workspacesCards = [];
this.__workspacesList.forEach(workspaceData => workspacesCards.push(this.__workspaceToCard(workspaceData)));
return workspacesCards;
Expand All @@ -383,6 +389,8 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
[
"workspaceSelected",
"workspaceUpdated",
"trashWorkspaceRequested",
"untrashWorkspaceRequested",
"deleteWorkspaceRequested",
].forEach(eName => card.addListener(eName, e => this.fireDataEvent(eName, e.getData())));
return card;
Expand Down Expand Up @@ -419,6 +427,8 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
"folderSelected",
"folderUpdated",
"moveFolderToRequested",
"trashFolderRequested",
"untrashFolderRequested",
"deleteFolderRequested",
"changeContext",
].forEach(eName => card.addListener(eName, e => this.fireDataEvent(eName, e.getData())));
Expand Down Expand Up @@ -494,7 +504,7 @@ qx.Class.define("osparc.dashboard.ResourceContainerManager", {
} else {
groupContainer.exclude();
}
this._add(groupContainer);
this.__groupedContainers.add(groupContainer);
this.__moveNoGroupToLast();
}
const card = this.__createCard(resourceData);
Expand Down
Loading
Loading