Skip to content

Commit 333b46d

Browse files
authored
Merge pull request #92 from ClayPulse/support-remote-workspace-in-mobile-app
Support remote workspace in mobile app
2 parents a8b7d8f + d8057e4 commit 333b46d

File tree

6 files changed

+20
-21
lines changed

6 files changed

+20
-21
lines changed

web/components/interface/navigation/nav-side-menu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ function MenuPanel({ children }: { children?: React.ReactNode }) {
7979
</motion.div>
8080
) : (
8181
<motion.div
82-
className="absolute z-50 h-full w-full md:hidden"
82+
className="absolute top-0 left-0 z-50 h-full w-full md:hidden safe-area-padding"
8383
initial={{
8484
y: "-100vh",
8585
}}

web/components/modals/workspace-settings-model.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,16 @@ export default function WorkspaceSettingsModal({
125125

126126
// Create workspace
127127
try {
128-
const vCPU = selectedSpec.vCPU.toString();
129-
const ram = getUnitFromUnitString(selectedSpec.ram.toString(), "Gi");
128+
const specs = selectedSpec.key;
130129
const volumeSize = getUnitFromUnitString(storage.toString(), "Gi");
131130

132131
addToast({
133132
title: "Creating workspace",
134-
description: `Creating workspace ${workspaceName}. Specifications: ${vCPU} vCPU, ${ram} RAM, ${volumeSize} storage.`,
133+
description: `Creating workspace ${workspaceName}. Specifications: ${
134+
selectedSpec.vCPU
135+
} vCPU, ${selectedSpec.ram} RAM, ${volumeSize} storage.`,
135136
});
136-
await createWorkspace(workspaceName, vCPU.toString(), ram, volumeSize);
137+
await createWorkspace(workspaceName, specs, volumeSize);
137138
addToast({
138139
title: "Workspace created",
139140
description: `Workspace ${workspaceName} has been created successfully.`,

web/lib/hooks/use-platform-api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { PlatformEnum } from "@/lib/enums";
22
import { useEffect, useState } from "react";
33
import { AbstractPlatformAPI } from "../platform-api/abstract-platform-api";
4-
import { CapacitorAPI } from "../platform-api/capacitor/capacitor-api";
54
import { CloudAPI } from "../platform-api/cloud/cloud-api";
65
import { ElectronAPI } from "../platform-api/electron/electron-api";
76
import { getPlatform } from "../platform-api/platform-checker";
@@ -31,7 +30,8 @@ export function usePlatformApi() {
3130
const platform = getPlatform();
3231

3332
if (platform === PlatformEnum.Capacitor) {
34-
return new CapacitorAPI();
33+
// return new CapacitorAPI();
34+
return new CloudAPI(workspace);
3535
} else if (platform === PlatformEnum.Electron) {
3636
return new ElectronAPI();
3737
} else if (

web/lib/hooks/use-workspace.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import { EditorContext } from "@/components/providers/editor-context-provider";
2-
import { PlatformEnum } from "@/lib/enums";
32
import { useContext } from "react";
43
import useSWR from "swr";
54
import { AbstractPlatformAPI } from "../platform-api/abstract-platform-api";
6-
import { getPlatform } from "../platform-api/platform-checker";
75
import { fetchAPI } from "../pulse-editor-website/backend";
86
import { RemoteWorkspace } from "../types";
97
import { useAuth } from "./use-auth";
@@ -43,19 +41,11 @@ export function useWorkspace() {
4341

4442
async function createWorkspace(
4543
name: string,
46-
cpuLimit: string,
47-
memoryLimit: string,
44+
specs: string,
4845
volumeSize: string,
4946
) {
5047
if (!editorContext) {
5148
throw new Error("Editor context is not available");
52-
} else if (
53-
getPlatform() !== PlatformEnum.Web &&
54-
getPlatform() !== PlatformEnum.WebMobile
55-
) {
56-
throw new Error(
57-
"Workspace creation is only supported on the web platform.",
58-
);
5949
} else if (!session) {
6050
throw new Error("User is not authenticated.");
6151
}
@@ -66,7 +56,7 @@ export function useWorkspace() {
6656
headers: {
6757
"Content-Type": "application/json",
6858
},
69-
body: JSON.stringify({ name, cpuLimit, memoryLimit, volumeSize }),
59+
body: JSON.stringify({ name, specs, volumeSize }),
7060
});
7161

7262
if (!response.ok) {

web/lib/platform-api/capacitor/capacitor-api.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@ import {
44
PersistentSettings,
55
ProjectInfo,
66
} from "@/lib/types";
7-
import { AbstractPlatformAPI } from "../abstract-platform-api";
87
import { Directory, Encoding, Filesystem } from "@capacitor/filesystem";
98
import { FilePicker } from "@capawesome/capacitor-file-picker";
109
import ignore from "ignore";
1110
import path from "path";
11+
import { AbstractPlatformAPI } from "../abstract-platform-api";
1212

13+
/**
14+
* @deprecated Android implementation is no longer supported due to
15+
* file access restrictions. Instead, use cloud managed workspaces,
16+
* or use self-hosted workspace backend in `remote-workspace/`
17+
*/
1318
export class CapacitorAPI extends AbstractPlatformAPI {
1419
constructor() {
1520
super();

web/lib/pulse-editor-website/backend.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ export async function fetchAPI(
5353
`${url}. \n\nRequest header: ${JSON.stringify(headerObj)} \n\nNative response: ${JSON.stringify(nativeResponse)} \n\nCookie: ${document.cookie}`,
5454
);
5555

56-
const data = JSON.stringify(nativeResponse.data);
56+
const data =
57+
typeof nativeResponse.data === "string"
58+
? nativeResponse.data
59+
: JSON.stringify(nativeResponse.data);
5760

5861
// Convert CapacitorHttpResponse to Fetch Response
5962
const fetchResponse = new Response(data, {

0 commit comments

Comments
 (0)