Skip to content

Commit 19049b0

Browse files
committed
[Draft] - Workspace details modal
1 parent 155c047 commit 19049b0

File tree

6 files changed

+437
-45
lines changed

6 files changed

+437
-45
lines changed

client/src/components/workspaces/utils.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { WorkspaceAttributes } from '@/services/workspaceAttributes';
2121
import SmallDisplayWorkspaceContextMenu from '@/views/workspaces/SmallDisplayWorkspaceContextMenu.vue';
2222
import { WorkspaceAction } from '@/views/workspaces/types';
2323
import WorkspaceContextMenu from '@/views/workspaces/WorkspaceContextMenu.vue';
24+
import WorkspaceDetailsModal from '@/views/workspaces/WorkspaceDetailsModal.vue';
2425
import WorkspaceSharingModal from '@/views/workspaces/WorkspaceSharingModal.vue';
2526
import { modalController, popoverController } from '@ionic/vue';
2627
import { Clipboard, DisplayState, Translatable, getTextFromUser } from 'megashark-lib';
@@ -184,6 +185,8 @@ export async function openWorkspaceContextMenu(
184185
case WorkspaceAction.ShowHistory:
185186
await navigateTo(Routes.History, { query: { documentPath: '/', workspaceHandle: workspace.handle } });
186187
break;
188+
case WorkspaceAction.ShowDetails:
189+
await openWorkspaceDetailsModal(workspace);
187190
default:
188191
console.warn('No WorkspaceAction match found');
189192
}
@@ -268,6 +271,19 @@ async function openRenameWorkspaceModal(
268271
}
269272
}
270273

274+
async function openWorkspaceDetailsModal(workspace: WorkspaceInfo): Promise<void> {
275+
const modal = await modalController.create({
276+
component: WorkspaceDetailsModal,
277+
cssClass: 'file-details-modal',
278+
componentProps: {
279+
workspaceInfo: workspace,
280+
progressStateData: undefined,
281+
},
282+
});
283+
await modal.present();
284+
await modal.onWillDismiss();
285+
}
286+
271287
async function copyLinkToClipboard(workspace: WorkspaceInfo, informationManager: InformationManager): Promise<void> {
272288
const result = await parsecGetPathLink(workspace.handle, '/');
273289

client/src/locales/en-US.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,39 @@
700700
"roles": "Role"
701701
}
702702
},
703+
"WorkspaceDetails": {
704+
"title": "Workspace details",
705+
"labelName": "Name",
706+
"stats": {
707+
"generalInfo": "General information",
708+
"rights": "Access rights",
709+
"joinedOn": "Joined on",
710+
"created": "Created"
711+
},
712+
"rightsInfos": {
713+
"owner": "As an {role}, you have full control over this workspace, including managing sharing settings and permissions.",
714+
"manager": "As a {role}, you can manage sharing settings and permissions for this workspace.",
715+
"contributor": "As a {role}, you can add, modify, and delete files within this workspace.",
716+
"reader": "As a {role}, you can only view and download files but cannot make any changes."
717+
},
718+
"offlineAvailability": {
719+
"notAvailable": "Not available offline",
720+
"inProgress": "Synchronising...",
721+
"available": "Available offline",
722+
"title": "Offline availability",
723+
"storage": "Required storage",
724+
"remainingToDownload": "{size} remaining to download",
725+
"availableOfflineInfo": "This workspace is available offline. You can access its files even without an internet connection.",
726+
"stopSynchronisation": "Stop offline availability",
727+
"makeAvailableOffline": "Make available offline",
728+
"cancel": "Cancel",
729+
"close": "Close",
730+
"error": {
731+
"enableFailed": "Failed to enable offline availability for this workspace.",
732+
"disableFailed": "Failed to disable offline availability for this workspace."
733+
}
734+
}
735+
},
703736
"FoldersPage": {
704737
"createFolder": "New folder",
705738
"copyHere": "Copy here",

client/src/parsec/types.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,11 +372,19 @@ interface WorkspaceInfo extends ParsecWorkspaceInfo {
372372
size: number;
373373
lastUpdated: DateTime;
374374
created?: DateTime;
375+
joinedOn?: DateTime;
375376
availableOffline: boolean;
376377
handle: WorkspaceHandle;
378+
downloadState: WorkspaceDownloadState;
377379
mountpoints: [MountpointHandle, SystemPath][];
378380
}
379381

382+
enum WorkspaceDownloadState {
383+
NotAvailable,
384+
InProgress,
385+
Available,
386+
}
387+
380388
interface StartedWorkspaceInfo extends ParsecStartedWorkspaceInfo {
381389
handle: WorkspaceHandle;
382390
}
@@ -461,6 +469,7 @@ export {
461469
UserID,
462470
UserInfo,
463471
UserTuple,
472+
WorkspaceDownloadState,
464473
WorkspaceHandle,
465474
WorkspaceHistoryEntryStat,
466475
WorkspaceHistoryEntryStatFile,

client/src/views/workspaces/SmallDisplayWorkspaceContextMenu.vue

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,6 @@
44
<ion-page id="workspace-context-sheet-modal">
55
<ion-content class="context-sheet-modal-content">
66
<ion-list class="menu-list menu-list-small">
7-
<ion-item-group
8-
class="list-group"
9-
v-show="false"
10-
>
11-
<ion-item
12-
button
13-
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
14-
class="ion-no-padding list-group-item"
15-
>
16-
<ion-icon
17-
class="list-group-item__icon"
18-
:icon="cloudy"
19-
/>
20-
<ion-text class="button-large list-group-item__label-small">
21-
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
22-
</ion-text>
23-
</ion-item>
24-
</ion-item-group>
25-
267
<ion-item-group
278
class="list-group"
289
v-show="isDesktop() || clientRole === WorkspaceRole.Owner"
@@ -71,7 +52,20 @@
7152

7253
<ion-item
7354
button
74-
v-show="clientProfile !== UserProfile.Outsider && false"
55+
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
56+
class="ion-no-padding list-group-item"
57+
>
58+
<ion-icon
59+
class="list-group-item__icon"
60+
:icon="cloudy"
61+
/>
62+
<ion-text class="button-large list-group-item__label-small">
63+
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
64+
</ion-text>
65+
</ion-item>
66+
67+
<ion-item
68+
button
7569
@click="onClick(WorkspaceAction.ShowDetails)"
7670
class="ion-no-padding list-group-item"
7771
>

client/src/views/workspaces/WorkspaceContextMenu.vue

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,6 @@
1313
/>
1414
</div>
1515
<ion-list class="menu-list">
16-
<ion-item-group
17-
class="list-group"
18-
v-show="false"
19-
>
20-
<ion-item class="list-group-title button-small">
21-
<ion-text class="list-group-title__label">
22-
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.titleOffline') }}
23-
</ion-text>
24-
</ion-item>
25-
<ion-item
26-
button
27-
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
28-
class="ion-no-padding list-group-item"
29-
>
30-
<ion-icon
31-
class="list-group-item__icon"
32-
:icon="cloudy"
33-
/>
34-
<ion-text class="button-medium list-group-item__label">
35-
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
36-
</ion-text>
37-
</ion-item>
38-
</ion-item-group>
39-
4016
<ion-item-group
4117
class="list-group"
4218
v-show="isDesktop() || clientRole === WorkspaceRole.Owner"
@@ -94,7 +70,20 @@
9470

9571
<ion-item
9672
button
97-
v-show="clientProfile !== UserProfile.Outsider && false"
73+
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
74+
class="ion-no-padding list-group-item"
75+
>
76+
<ion-icon
77+
class="list-group-item__icon"
78+
:icon="cloudy"
79+
/>
80+
<ion-text class="button-medium list-group-item__label">
81+
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
82+
</ion-text>
83+
</ion-item>
84+
85+
<ion-item
86+
button
9887
@click="onClick(WorkspaceAction.ShowDetails)"
9988
class="ion-no-padding list-group-item"
10089
>

0 commit comments

Comments
 (0)