Skip to content

Commit 7c7ccd4

Browse files
committed
fix(addons): fix citation root collection selection
1 parent 9e0e80f commit 7c7ccd4

File tree

3 files changed

+42
-18
lines changed

3 files changed

+42
-18
lines changed

src/app/shared/components/addons/storage-item-selector/storage-item-selector.component.html

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,16 @@ <h3>{{ 'settings.addons.configureAddon.folderName' | translate }}</h3>
5151
<h3>{{ 'settings.addons.configureAddon.selectFolder' | translate }}</h3>
5252
</div>
5353
@if (operationInvocationResult().length) {
54-
@for (folder of operationInvocationResult(); track folder.itemId) {
55-
@let operationName =
56-
folder.mayContainRootCandidates ? OperationNames.LIST_CHILD_ITEMS : OperationNames.GET_ITEM_INFO;
57-
@let itemId = folder.itemId || '/';
58-
@let isLinkDisabled = !folder.mayContainRootCandidates || folder.itemType !== StorageItemType.Folder;
54+
@for (resultItem of operationInvocationResult(); track resultItem.itemId) {
55+
@let operationName = getOperationNameForItem(resultItem);
56+
@let itemId = resultItem.itemId || '/';
57+
@let isLinkDisabled = isItemDisabled(resultItem);
5958
<div class="folders-table-row relative">
6059
<div class="flex gap-2 flex-1 max-w-full">
6160
<div tabindex="0" class="flex align-items-center gap-2 w-11">
62-
<i class="{{ folder.itemType === StorageItemType.Folder ? 'fas fa-folder' : 'fas fa-file' }}"></i>
63-
@if (isLinkDisabled) {
64-
<span class="folder-link-disabled overflow-ellipsis">{{ folder.itemName }}</span>
61+
<i class="{{ isDirectory(resultItem) ? 'fas fa-folder' : 'fas fa-file' }}"></i>
62+
@if (isLinkDisabled || !operationName) {
63+
<span class="folder-link-disabled overflow-ellipsis">{{ resultItem.itemName }}</span>
6564
} @else {
6665
<a
6766
tabindex="0"
@@ -70,30 +69,30 @@ <h3>{{ 'settings.addons.configureAddon.selectFolder' | translate }}</h3>
7069
handleCreateOperationInvocation(
7170
operationName,
7271
itemId,
73-
folder.itemName,
74-
folder.mayContainRootCandidates
72+
resultItem.itemName,
73+
resultItem.mayContainRootCandidates
7574
)
7675
"
7776
(click)="
7877
handleCreateOperationInvocation(
7978
operationName,
8079
itemId,
81-
folder.itemName,
82-
folder.mayContainRootCandidates
80+
resultItem.itemName,
81+
resultItem.mayContainRootCandidates
8382
)
8483
"
8584
>
86-
{{ folder.itemName }}</a
85+
{{ resultItem.itemName }}</a
8786
>
8887
}
8988
</div>
90-
@if (folder.canBeRoot) {
89+
@if (resultItem.canBeRoot) {
9190
<p-radiobutton
9291
class="ml-auto pr-3"
9392
[ngModel]="selectedStorageItem()?.itemId"
94-
[value]="folder.itemId"
95-
[inputId]="folder.itemId"
96-
(ngModelChange)="handleFolderSelection(folder)"
93+
[value]="resultItem.itemId"
94+
[inputId]="resultItem.itemId"
95+
(ngModelChange)="handleFolderSelection(resultItem)"
9796
></p-radiobutton>
9897
}
9998
</div>

src/app/shared/components/addons/storage-item-selector/storage-item-selector.component.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export class StorageItemSelectorComponent implements OnInit {
6969
operationInvocationResult = input.required<StorageItem[]>();
7070
accountNameControl = input(new FormControl());
7171
isCreateMode = input(false);
72-
currentAddonType = input<string>(AddonType.STORAGE);
72+
currentAddonType = input<AddonType>(AddonType.STORAGE);
7373
supportedResourceTypes = input<string[]>([]);
7474

7575
selectedStorageItemId = model<string>('/');
@@ -259,6 +259,30 @@ export class StorageItemSelectorComponent implements OnInit {
259259
}
260260
}
261261

262+
isItemDisabled(item: StorageItem): boolean {
263+
return !item.mayContainRootCandidates || !this.isDirectory(item);
264+
}
265+
266+
isDirectory(item: StorageItem): boolean {
267+
return item.itemType === StorageItemType.Folder || item.itemType === StorageItemType.Collection;
268+
}
269+
270+
getOperationNameForItem(item: StorageItem): OperationNames | null {
271+
const addonType = this.currentAddonType();
272+
if (addonType == AddonType.STORAGE || addonType === AddonType.LINK) {
273+
if (item.mayContainRootCandidates) {
274+
return OperationNames.LIST_CHILD_ITEMS;
275+
} else {
276+
return OperationNames.GET_ITEM_INFO;
277+
}
278+
} else if (addonType == AddonType.CITATION) {
279+
if (item.mayContainRootCandidates) {
280+
return OperationNames.LIST_COLLECTION_ITEMS;
281+
}
282+
}
283+
return null;
284+
}
285+
262286
private trimBreadcrumbs(itemId: string): void {
263287
const currentBreadcrumbs = this.breadcrumbItems();
264288

src/app/shared/enums/storage-item-type.enum.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ export enum StorageItemType {
22
Folder = 'FOLDER',
33
Resource = 'RESOURCE',
44
Document = 'DOCUMENT',
5+
File = 'FILE',
56
Collection = 'COLLECTION',
67
}

0 commit comments

Comments
 (0)