Skip to content

Commit 447532d

Browse files
committed
Merge #301 [V32] Disabled checkbox and file list actions for e2ee folders
2 parents 2113fe0 + ef539eb commit 447532d

2 files changed

Lines changed: 88 additions & 78 deletions

File tree

apps/files/src/components/FileEntry/FileEntryActions.vue

Lines changed: 84 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -6,63 +6,36 @@
66
<td class="files-list__row-actions"
77
data-cy-files-list-row-actions>
88
<!-- Render actions -->
9-
<CustomElementRender v-for="action in enabledRenderActions"
10-
:key="action.id"
11-
:class="'files-list__row-action-' + action.id"
12-
:current-view="currentView"
13-
:render="action.renderInline"
14-
:source="source"
15-
class="files-list__row-action--inline" />
16-
17-
<!-- Menu actions -->
18-
<NcActions ref="actionsMenu"
19-
:boundaries-element="getBoundariesElement"
20-
:container="getBoundariesElement"
21-
:force-name="true"
22-
type="tertiary"
23-
:force-menu="enabledInlineActions.length === 0 /* forceMenu only if no inline actions */"
24-
:inline="enabledInlineActions.length"
25-
:open="openedMenu"
26-
@close="onMenuClose"
27-
@closed="onMenuClosed">
28-
<!-- Non-destructive actions list -->
29-
<!-- Please keep this block in sync with the destructive actions block below -->
30-
<NcActionButton v-for="action, index in renderedNonDestructiveActions"
9+
<template v-if="!isEncrypted">
10+
<CustomElementRender v-for="action in enabledRenderActions"
3111
:key="action.id"
32-
:ref="`action-${action.id}`"
33-
class="files-list__row-action"
34-
:class="{
35-
[`files-list__row-action-${action.id}`]: true,
36-
'files-list__row-action--inline': index < enabledInlineActions.length,
37-
'files-list__row-action--menu': isValidMenu(action),
38-
}"
39-
:close-after-click="!isValidMenu(action)"
40-
:data-cy-files-list-row-action="action.id"
41-
:is-menu="isValidMenu(action)"
42-
:aria-label="action.title?.([source], currentView)"
43-
:title="action.title?.([source], currentView)"
44-
@click="onActionClick(action)">
45-
<template #icon>
46-
<NcLoadingIcon v-if="isLoadingAction(action)" />
47-
<NcIconSvgWrapper v-else
48-
class="files-list__row-action-icon"
49-
:svg="action.iconSvgInline([source], currentView)" />
50-
</template>
51-
{{ actionDisplayName(action) }}
52-
</NcActionButton>
53-
54-
<!-- Destructive actions list -->
55-
<template v-if="renderedDestructiveActions.length > 0">
56-
<NcActionSeparator />
57-
<NcActionButton v-for="action, index in renderedDestructiveActions"
12+
:class="'files-list__row-action-' + action.id"
13+
:current-view="currentView"
14+
:render="action.renderInline"
15+
:source="source"
16+
class="files-list__row-action--inline" />
17+
18+
<!-- Menu actions -->
19+
<NcActions ref="actionsMenu"
20+
:boundaries-element="getBoundariesElement"
21+
:container="getBoundariesElement"
22+
:force-name="true"
23+
type="tertiary"
24+
:force-menu="enabledInlineActions.length === 0 /* forceMenu only if no inline actions */"
25+
:inline="enabledInlineActions.length"
26+
:open="openedMenu"
27+
@close="onMenuClose"
28+
@closed="onMenuClosed">
29+
<!-- Non-destructive actions list -->
30+
<!-- Please keep this block in sync with the destructive actions block below -->
31+
<NcActionButton v-for="action, index in renderedNonDestructiveActions"
5832
:key="action.id"
5933
:ref="`action-${action.id}`"
6034
class="files-list__row-action"
6135
:class="{
6236
[`files-list__row-action-${action.id}`]: true,
6337
'files-list__row-action--inline': index < enabledInlineActions.length,
6438
'files-list__row-action--menu': isValidMenu(action),
65-
'files-list__row-action--destructive': true,
6639
}"
6740
:close-after-click="!isValidMenu(action)"
6841
:data-cy-files-list-row-action="action.id"
@@ -78,37 +51,66 @@
7851
</template>
7952
{{ actionDisplayName(action) }}
8053
</NcActionButton>
81-
</template>
8254

83-
<!-- Submenu actions list-->
84-
<template v-if="openedSubmenu && enabledSubmenuActions[openedSubmenu?.id]">
85-
<!-- Back to top-level button -->
86-
<NcActionButton class="files-list__row-action-back" data-cy-files-list-row-action="menu-back" @click="onBackToMenuClick(openedSubmenu)">
87-
<template #icon>
88-
<ArrowLeftIcon />
89-
</template>
90-
{{ t('files', 'Back') }}
91-
</NcActionButton>
92-
<NcActionSeparator />
55+
<!-- Destructive actions list -->
56+
<template v-if="renderedDestructiveActions.length > 0">
57+
<NcActionSeparator />
58+
<NcActionButton v-for="action, index in renderedDestructiveActions"
59+
:key="action.id"
60+
:ref="`action-${action.id}`"
61+
class="files-list__row-action"
62+
:class="{
63+
[`files-list__row-action-${action.id}`]: true,
64+
'files-list__row-action--inline': index < enabledInlineActions.length,
65+
'files-list__row-action--menu': isValidMenu(action),
66+
'files-list__row-action--destructive': true,
67+
}"
68+
:close-after-click="!isValidMenu(action)"
69+
:data-cy-files-list-row-action="action.id"
70+
:is-menu="isValidMenu(action)"
71+
:aria-label="action.title?.([source], currentView)"
72+
:title="action.title?.([source], currentView)"
73+
@click="onActionClick(action)">
74+
<template #icon>
75+
<NcLoadingIcon v-if="isLoadingAction(action)" />
76+
<NcIconSvgWrapper v-else
77+
class="files-list__row-action-icon"
78+
:svg="action.iconSvgInline([source], currentView)" />
79+
</template>
80+
{{ actionDisplayName(action) }}
81+
</NcActionButton>
82+
</template>
9383

94-
<!-- Submenu actions -->
95-
<NcActionButton v-for="action in enabledSubmenuActions[openedSubmenu?.id]"
96-
:key="action.id"
97-
:class="`files-list__row-action-${action.id}`"
98-
class="files-list__row-action--submenu"
99-
close-after-click
100-
:data-cy-files-list-row-action="action.id"
101-
:aria-label="action.title?.([source], currentView)"
102-
:title="action.title?.([source], currentView)"
103-
@click="onActionClick(action)">
104-
<template #icon>
105-
<NcLoadingIcon v-if="isLoadingAction(action)" />
106-
<NcIconSvgWrapper v-else :svg="action.iconSvgInline([source], currentView)" />
107-
</template>
108-
{{ actionDisplayName(action) }}
109-
</NcActionButton>
110-
</template>
111-
</NcActions>
84+
<!-- Submenu actions list-->
85+
<template v-if="openedSubmenu && enabledSubmenuActions[openedSubmenu?.id]">
86+
<!-- Back to top-level button -->
87+
<NcActionButton class="files-list__row-action-back" data-cy-files-list-row-action="menu-back" @click="onBackToMenuClick(openedSubmenu)">
88+
<template #icon>
89+
<ArrowLeftIcon />
90+
</template>
91+
{{ t('files', 'Back') }}
92+
</NcActionButton>
93+
<NcActionSeparator />
94+
95+
<!-- Submenu actions -->
96+
<NcActionButton v-for="action in enabledSubmenuActions[openedSubmenu?.id]"
97+
:key="action.id"
98+
:class="`files-list__row-action-${action.id}`"
99+
class="files-list__row-action--submenu"
100+
close-after-click
101+
:data-cy-files-list-row-action="action.id"
102+
:aria-label="action.title?.([source], currentView)"
103+
:title="action.title?.([source], currentView)"
104+
@click="onActionClick(action)">
105+
<template #icon>
106+
<NcLoadingIcon v-if="isLoadingAction(action)" />
107+
<NcIconSvgWrapper v-else :svg="action.iconSvgInline([source], currentView)" />
108+
</template>
109+
{{ actionDisplayName(action) }}
110+
</NcActionButton>
111+
</template>
112+
</NcActions>
113+
</template>
112114
</td>
113115
</template>
114116

@@ -194,6 +196,10 @@ export default defineComponent({
194196
return this.source.status === NodeStatus.LOADING
195197
},
196198
199+
isEncrypted(): boolean {
200+
return this.source?.attributes?.['is-encrypted'] === 1
201+
},
202+
197203
// Enabled action that are displayed inline
198204
enabledInlineActions() {
199205
if (this.filesListWidth < 768 || this.gridMode) {

apps/files/src/components/FileEntry/FileEntryCheckbox.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<NcCheckboxRadioSwitch v-else
1010
:aria-label="ariaLabel"
1111
:checked="isSelected"
12+
:disabled="isEncrypted"
1213
data-cy-files-list-row-checkbox
1314
@update:checked="onSelectionChange" />
1415
</td>
@@ -89,6 +90,9 @@ export default defineComponent({
8990
isFile() {
9091
return this.source.type === FileType.File
9192
},
93+
isEncrypted(): boolean {
94+
return this.source?.attributes?.['is-encrypted'] === 1
95+
},
9296
ariaLabel() {
9397
return this.isFile
9498
? t('files', 'Toggle selection for file "{displayName}"', { displayName: this.source.basename })

0 commit comments

Comments
 (0)