Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
16 changes: 16 additions & 0 deletions client/src/components/workspaces/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { WorkspaceAttributes } from '@/services/workspaceAttributes';
import SmallDisplayWorkspaceContextMenu from '@/views/workspaces/SmallDisplayWorkspaceContextMenu.vue';
import { WorkspaceAction } from '@/views/workspaces/types';
import WorkspaceContextMenu from '@/views/workspaces/WorkspaceContextMenu.vue';
import WorkspaceDetailsModal from '@/views/workspaces/WorkspaceDetailsModal.vue';
import WorkspaceSharingModal from '@/views/workspaces/WorkspaceSharingModal.vue';
import { modalController, popoverController } from '@ionic/vue';
import { Clipboard, DisplayState, Translatable, getTextFromUser } from 'megashark-lib';
Expand Down Expand Up @@ -184,6 +185,8 @@ export async function openWorkspaceContextMenu(
case WorkspaceAction.ShowHistory:
await navigateTo(Routes.History, { query: { documentPath: '/', workspaceHandle: workspace.handle } });
break;
case WorkspaceAction.ShowDetails:
await openWorkspaceDetailsModal(workspace);
default:
console.warn('No WorkspaceAction match found');
}
Expand Down Expand Up @@ -268,6 +271,19 @@ async function openRenameWorkspaceModal(
}
}

async function openWorkspaceDetailsModal(workspace: WorkspaceInfo): Promise<void> {
const modal = await modalController.create({
component: WorkspaceDetailsModal,
cssClass: 'file-details-modal',
componentProps: {
workspaceInfo: workspace,
progressStateData: undefined,
},
});
await modal.present();
await modal.onWillDismiss();
}

async function copyLinkToClipboard(workspace: WorkspaceInfo, informationManager: InformationManager): Promise<void> {
const result = await parsecGetPathLink(workspace.handle, '/');

Expand Down
33 changes: 33 additions & 0 deletions client/src/locales/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -701,6 +701,39 @@
"roles": "Role"
}
},
"WorkspaceDetails": {
"title": "Workspace details",
"labelName": "Name",
"stats": {
"generalInfo": "General information",
"rights": "Access rights",
"joinedOn": "Joined on",
"created": "Created"
},
"rightsInfos": {
"owner": "As an {role}, you have full control over this workspace, including managing sharing settings and permissions.",
"manager": "As a {role}, you can manage sharing settings and permissions for this workspace.",
"contributor": "As a {role}, you can add, modify, and delete files within this workspace.",
"reader": "As a {role}, you can only view and download files but cannot make any changes."
},
"offlineAvailability": {
"notAvailable": "Not available offline",
"inProgress": "Synchronising...",
"available": "Available offline",
"title": "Offline availability",
"storage": "Required storage",
"remainingToDownload": "{size} remaining to download",
"availableOfflineInfo": "This workspace is available offline. You can access its files even without an internet connection.",
"stopSynchronisation": "Stop offline availability",
"makeAvailableOffline": "Make available offline",
"cancel": "Cancel",
"close": "Close",
"error": {
"enableFailed": "Failed to enable offline availability for this workspace.",
"disableFailed": "Failed to disable offline availability for this workspace."
}
}
},
"FoldersPage": {
"createFolder": "New folder",
"copyHere": "Copy here",
Expand Down
9 changes: 9 additions & 0 deletions client/src/parsec/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,11 +372,19 @@ interface WorkspaceInfo extends ParsecWorkspaceInfo {
size: number;
lastUpdated: DateTime;
created?: DateTime;
joinedOn?: DateTime;
availableOffline: boolean;
handle: WorkspaceHandle;
downloadState: WorkspaceDownloadState;
mountpoints: [MountpointHandle, SystemPath][];
}

enum WorkspaceDownloadState {
NotAvailable,
InProgress,
Available,
}

interface StartedWorkspaceInfo extends ParsecStartedWorkspaceInfo {
handle: WorkspaceHandle;
}
Expand Down Expand Up @@ -461,6 +469,7 @@ export {
UserID,
UserInfo,
UserTuple,
WorkspaceDownloadState,
WorkspaceHandle,
WorkspaceHistoryEntryStat,
WorkspaceHistoryEntryStatFile,
Expand Down
34 changes: 14 additions & 20 deletions client/src/views/workspaces/SmallDisplayWorkspaceContextMenu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,6 @@
<ion-page id="workspace-context-sheet-modal">
<ion-content class="context-sheet-modal-content">
<ion-list class="menu-list menu-list-small">
<ion-item-group
class="list-group"
v-show="false"
>
<ion-item
button
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
class="ion-no-padding list-group-item"
>
<ion-icon
class="list-group-item__icon"
:icon="cloudy"
/>
<ion-text class="button-large list-group-item__label-small">
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
</ion-text>
</ion-item>
</ion-item-group>

<ion-item-group
class="list-group"
v-show="isDesktop() || clientRole === WorkspaceRole.Owner"
Expand Down Expand Up @@ -71,7 +52,20 @@

<ion-item
button
v-show="clientProfile !== UserProfile.Outsider && false"
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
class="ion-no-padding list-group-item"
>
<ion-icon
class="list-group-item__icon"
:icon="cloudy"
/>
<ion-text class="button-large list-group-item__label-small">
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
</ion-text>
</ion-item>

<ion-item
button
@click="onClick(WorkspaceAction.ShowDetails)"
class="ion-no-padding list-group-item"
>
Expand Down
39 changes: 14 additions & 25 deletions client/src/views/workspaces/WorkspaceContextMenu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,30 +13,6 @@
/>
</div>
<ion-list class="menu-list">
<ion-item-group
class="list-group"
v-show="false"
>
<ion-item class="list-group-title button-small">
<ion-text class="list-group-title__label">
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.titleOffline') }}
</ion-text>
</ion-item>
<ion-item
button
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
class="ion-no-padding list-group-item"
>
<ion-icon
class="list-group-item__icon"
:icon="cloudy"
/>
<ion-text class="button-medium list-group-item__label">
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
</ion-text>
</ion-item>
</ion-item-group>

<ion-item-group
class="list-group"
v-show="isDesktop() || clientRole === WorkspaceRole.Owner"
Expand Down Expand Up @@ -94,7 +70,20 @@

<ion-item
button
v-show="clientProfile !== UserProfile.Outsider && false"
@click="onClick(WorkspaceAction.MakeAvailableOffline)"
class="ion-no-padding list-group-item"
>
<ion-icon
class="list-group-item__icon"
:icon="cloudy"
/>
<ion-text class="button-medium list-group-item__label">
{{ $msTranslate('WorkspacesPage.workspaceContextMenu.actionOffline') }}
</ion-text>
</ion-item>

<ion-item
button
@click="onClick(WorkspaceAction.ShowDetails)"
class="ion-no-padding list-group-item"
>
Expand Down
Loading
Loading