Skip to content

Commit 29dd995

Browse files
TheMythologistsalmonkarpRichDom2185
authored
Sessions Overhaul (#3140)
* Feature: Add temporary session ID indicator in primary popup and placeholder Session Management tab in Playground * Add AceMultiSelectionManager" * Revert first commit * Add AceRadarView * Add basic information to Session Management Tab * Clean up `useShareAce` implementation * Use proper role enum * Basid user display with updated binding * Cleanup and fix missing ace-build require * Implement changing of language * More cleanup and fix invalid source chapter strings * Cleanup WIP * Cleanup Part 2 * Implement changing of roles * Combine viewing and editing sessionIds into 1 * Refactor to functional component to prepare for local storage * Update moduleResolution to bundler * Add description and styles of management tab * Simplify session creation/joining/leaving into one popover * Cleanup and add toggle of default role upon join * Add prototype link sharing * Add bad navigation bar fix * Add consistent URL behaviour on session creation and exit * ui: hide toggle for admins * ui: Reflect ownership in button modal * cleanup * UI cleanup * hotfix * ui: non-admins can see role too * Blinking fix * Formatting * Remove unnecessary comments * Fix lint errors * Formatting * Fix import error * Reduce unnecessary changes * Fix `WritableDraft` errors * Fix constant refreshing on direct playground code access * Removed some unncessary code * Deduplicate dependencies * Fix breaking changes post-merge * Bump sharedb-ace * Fix dependencies * Deduplicate dependencies * Bump version * Update test files and snapshots * Update lockfile post-merge * Bump sharedb-ace to 2.1.2 * Revert "Bump sharedb-ace to 2.1.2" This reverts commit 0077d6a. * Update snapshots --------- Co-authored-by: salmonkarp <garyaxelmuliyono@gmail.com> Co-authored-by: Richard Dominick <34370238+RichDom2185@users.noreply.github.com>
1 parent 6876b2f commit 29dd995

File tree

35 files changed

+994
-333
lines changed

35 files changed

+994
-333
lines changed

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,18 @@
3535
"@blueprintjs/datetime2": "^2.3.3",
3636
"@blueprintjs/icons": "^6.0.0",
3737
"@blueprintjs/select": "^5.1.3",
38+
"@convergencelabs/ace-collab-ext": "^0.6.0",
3839
"@mantine/hooks": "^7.11.2",
3940
"@octokit/rest": "^22.0.0",
4041
"@reduxjs/toolkit": "^1.9.7",
4142
"@sentry/browser": "^8.33.0",
4243
"@sourceacademy/c-slang": "^1.0.21",
43-
"@sourceacademy/sharedb-ace": "^2.0.3",
44+
"@sourceacademy/sharedb-ace": "^2.1.1",
4445
"@sourceacademy/sling-client": "^0.1.0",
4546
"@szhsin/react-menu": "^4.0.0",
4647
"@tanstack/react-table": "^8.9.3",
4748
"@tremor/react": "^1.8.2",
48-
"ace-builds": "^1.36.3",
49+
"ace-builds": "^1.42.1",
4950
"acorn": "^8.9.0",
5051
"ag-grid-community": "^32.3.1",
5152
"ag-grid-react": "^32.3.1",
@@ -60,6 +61,7 @@
6061
"hastscript": "^9.0.0",
6162
"i18next": "^25.0.0",
6263
"i18next-browser-languagedetector": "^8.0.0",
64+
"immer": "^10.1.1",
6365
"java-slang": "^1.0.13",
6466
"js-cookie": "^3.0.5",
6567
"js-slang": "^1.0.84",
@@ -115,7 +117,6 @@
115117
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
116118
"@babel/preset-typescript": "^7.24.1",
117119
"@babel/runtime": "^7.24.5",
118-
"@convergencelabs/ace-collab-ext": "^0.6.0",
119120
"@rsbuild/core": "^1.3.12",
120121
"@rsbuild/plugin-eslint": "^1.1.1",
121122
"@rsbuild/plugin-node-polyfill": "^1.3.0",
@@ -127,7 +128,7 @@
127128
"@testing-library/dom": "^10.4.0",
128129
"@testing-library/jest-dom": "^6.0.0",
129130
"@testing-library/react": "^16.0.0",
130-
"@testing-library/user-event": "^14.4.3",
131+
"@testing-library/user-event": "^14.6.0",
131132
"@types/estree": "^1.0.5",
132133
"@types/gapi": "^0.0.47",
133134
"@types/gapi.auth2": "^0.0.61",

src/commons/application/ApplicationTypes.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,8 @@ export const createDefaultWorkspace = (workspaceLocation: WorkspaceLocation): Wo
429429
enableDebugging: true,
430430
debuggerContext: {} as DebuggerContext,
431431
lastDebuggerResult: undefined,
432-
files: {}
432+
files: {},
433+
updateUserRoleCallback: () => {}
433434
});
434435

435436
const defaultFileName = 'program.js';

src/commons/assessmentWorkspace/__tests__/__snapshots__/AssessmentWorkspace.test.tsx.snap

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with ContestVoting quest
223223
<div
224224
class="row editor-react-ace"
225225
data-testid="Editor"
226+
id="editor-react-ace"
226227
>
227228
<div
228229
class=" ace_editor ace_hidpi ace-source ace_dark react-ace"
@@ -232,6 +233,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with ContestVoting quest
232233
<textarea
233234
aria-autocomplete="both"
234235
aria-haspopup="false"
236+
aria-label="Cursor at row 1"
235237
autocapitalize="off"
236238
autocorrect="off"
237239
class="ace_text-input"
@@ -317,7 +319,16 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with ContestVoting quest
317319
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
318320
</div>
319321
</div>
322+
<div
323+
class="ace_tooltip"
324+
id="gt6"
325+
role="tooltip"
326+
style="display: none; pointer-events: auto;"
327+
/>
320328
</div>
329+
<div
330+
id="ace-radar-view"
331+
/>
321332
</div>
322333
</div>
323334
</div>
@@ -764,6 +775,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with ContestVoting quest
764775
<textarea
765776
aria-autocomplete="both"
766777
aria-haspopup="false"
778+
aria-label="Cursor at row 1"
767779
autocapitalize="off"
768780
autocorrect="off"
769781
class="ace_text-input"
@@ -850,6 +862,12 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with ContestVoting quest
850862
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
851863
</div>
852864
</div>
865+
<div
866+
class="ace_tooltip"
867+
id="gt7"
868+
role="tooltip"
869+
style="display: none; pointer-events: auto;"
870+
/>
853871
</div>
854872
<div
855873
class="bp5-button-group bp5-dark"
@@ -1542,6 +1560,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with MCQ question render
15421560
<textarea
15431561
aria-autocomplete="both"
15441562
aria-haspopup="false"
1563+
aria-label="Cursor at row 1"
15451564
autocapitalize="off"
15461565
autocorrect="off"
15471566
class="ace_text-input"
@@ -1628,6 +1647,12 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with MCQ question render
16281647
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
16291648
</div>
16301649
</div>
1650+
<div
1651+
class="ace_tooltip"
1652+
id="gt5"
1653+
role="tooltip"
1654+
style="display: none; pointer-events: auto;"
1655+
/>
16311656
</div>
16321657
<div
16331658
class="bp5-button-group bp5-dark"
@@ -1870,6 +1895,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with overdue assessment
18701895
<div
18711896
class="row editor-react-ace"
18721897
data-testid="Editor"
1898+
id="editor-react-ace"
18731899
>
18741900
<div
18751901
class=" ace_editor ace_hidpi ace-source ace_dark react-ace"
@@ -1879,6 +1905,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with overdue assessment
18791905
<textarea
18801906
aria-autocomplete="both"
18811907
aria-haspopup="false"
1908+
aria-label="Cursor at row 1"
18821909
autocapitalize="off"
18831910
autocorrect="off"
18841911
class="ace_text-input"
@@ -1964,7 +1991,16 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with overdue assessment
19641991
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
19651992
</div>
19661993
</div>
1994+
<div
1995+
class="ace_tooltip"
1996+
id="gt3"
1997+
role="tooltip"
1998+
style="display: none; pointer-events: auto;"
1999+
/>
19672000
</div>
2001+
<div
2002+
id="ace-radar-view"
2003+
/>
19682004
</div>
19692005
</div>
19702006
</div>
@@ -2354,6 +2390,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with overdue assessment
23542390
<textarea
23552391
aria-autocomplete="both"
23562392
aria-haspopup="false"
2393+
aria-label="Cursor at row 1"
23572394
autocapitalize="off"
23582395
autocorrect="off"
23592396
class="ace_text-input"
@@ -2440,6 +2477,12 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with overdue assessment
24402477
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
24412478
</div>
24422479
</div>
2480+
<div
2481+
class="ace_tooltip"
2482+
id="gt4"
2483+
role="tooltip"
2484+
style="display: none; pointer-events: auto;"
2485+
/>
24432486
</div>
24442487
<div
24452488
class="bp5-button-group bp5-dark"
@@ -2712,6 +2755,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with programming questio
27122755
<div
27132756
class="row editor-react-ace"
27142757
data-testid="Editor"
2758+
id="editor-react-ace"
27152759
>
27162760
<div
27172761
class=" ace_editor ace_hidpi ace-source ace_dark react-ace"
@@ -2721,6 +2765,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with programming questio
27212765
<textarea
27222766
aria-autocomplete="both"
27232767
aria-haspopup="false"
2768+
aria-label="Cursor at row 1"
27242769
autocapitalize="off"
27252770
autocorrect="off"
27262771
class="ace_text-input"
@@ -2806,7 +2851,16 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with programming questio
28062851
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
28072852
</div>
28082853
</div>
2854+
<div
2855+
class="ace_tooltip"
2856+
id="gt1"
2857+
role="tooltip"
2858+
style="display: none; pointer-events: auto;"
2859+
/>
28092860
</div>
2861+
<div
2862+
id="ace-radar-view"
2863+
/>
28102864
</div>
28112865
</div>
28122866
</div>
@@ -3196,6 +3250,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with programming questio
31963250
<textarea
31973251
aria-autocomplete="both"
31983252
aria-haspopup="false"
3253+
aria-label="Cursor at row 1"
31993254
autocapitalize="off"
32003255
autocorrect="off"
32013256
class="ace_text-input"
@@ -3282,6 +3337,12 @@ exports[`AssessmentWorkspace > AssessmentWorkspace page with programming questio
32823337
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
32833338
</div>
32843339
</div>
3340+
<div
3341+
class="ace_tooltip"
3342+
id="gt2"
3343+
role="tooltip"
3344+
style="display: none; pointer-events: auto;"
3345+
/>
32853346
</div>
32863347
<div
32873348
class="bp5-button-group bp5-dark"
@@ -3554,6 +3615,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace renders Grading tab correctly
35543615
<div
35553616
class="row editor-react-ace"
35563617
data-testid="Editor"
3618+
id="editor-react-ace"
35573619
>
35583620
<div
35593621
class=" ace_editor ace_hidpi ace-source ace_dark react-ace"
@@ -3563,6 +3625,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace renders Grading tab correctly
35633625
<textarea
35643626
aria-autocomplete="both"
35653627
aria-haspopup="false"
3628+
aria-label="Cursor at row 1"
35663629
autocapitalize="off"
35673630
autocorrect="off"
35683631
class="ace_text-input"
@@ -3648,7 +3711,16 @@ exports[`AssessmentWorkspace > AssessmentWorkspace renders Grading tab correctly
36483711
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
36493712
</div>
36503713
</div>
3714+
<div
3715+
class="ace_tooltip"
3716+
id="gt8"
3717+
role="tooltip"
3718+
style="display: none; pointer-events: auto;"
3719+
/>
36513720
</div>
3721+
<div
3722+
id="ace-radar-view"
3723+
/>
36523724
</div>
36533725
</div>
36543726
</div>
@@ -4255,6 +4327,7 @@ exports[`AssessmentWorkspace > AssessmentWorkspace renders Grading tab correctly
42554327
<textarea
42564328
aria-autocomplete="both"
42574329
aria-haspopup="false"
4330+
aria-label="Cursor at row 1"
42584331
autocapitalize="off"
42594332
autocorrect="off"
42604333
class="ace_text-input"
@@ -4341,6 +4414,12 @@ exports[`AssessmentWorkspace > AssessmentWorkspace renders Grading tab correctly
43414414
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
43424415
</div>
43434416
</div>
4417+
<div
4418+
class="ace_tooltip"
4419+
id="gt9"
4420+
role="tooltip"
4421+
style="display: none; pointer-events: auto;"
4422+
/>
43444423
</div>
43454424
<div
43464425
class="bp5-button-group bp5-dark"

src/commons/collabEditing/CollabEditingActions.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { CollabEditingAccess } from '@sourceacademy/sharedb-ace/types';
2+
13
import { createActions } from '../redux/utils';
24
import { WorkspaceLocation } from '../workspace/WorkspaceTypes';
35

@@ -8,7 +10,7 @@ const CollabEditingActions = createActions('collabEditing', {
810
}),
911
setSessionDetails: (
1012
workspaceLocation: WorkspaceLocation,
11-
sessionDetails: { docId: string; readOnly: boolean } | null
13+
sessionDetails: { docId?: string; readOnly?: boolean; owner?: boolean } | null
1214
) => ({ workspaceLocation, sessionDetails }),
1315
/**
1416
* Sets ShareDB connection status.
@@ -19,11 +21,23 @@ const CollabEditingActions = createActions('collabEditing', {
1921
setSharedbConnected: (workspaceLocation: WorkspaceLocation, connected: boolean) => ({
2022
workspaceLocation,
2123
connected
24+
}),
25+
setUpdateUserRoleCallback: (
26+
workspaceLocation: WorkspaceLocation,
27+
updateUserRoleCallback: (id: string, newRole: CollabEditingAccess) => void
28+
) => ({
29+
workspaceLocation,
30+
updateUserRoleCallback
2231
})
2332
});
2433

2534
// For compatibility with existing code (reducer)
26-
export const { setEditorSessionId, setSessionDetails, setSharedbConnected } = CollabEditingActions;
35+
export const {
36+
setEditorSessionId,
37+
setSessionDetails,
38+
setSharedbConnected,
39+
setUpdateUserRoleCallback
40+
} = CollabEditingActions;
2741

2842
// For compatibility with existing code (actions helper)
2943
export default CollabEditingActions;

src/commons/collabEditing/CollabEditingHelper.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,17 @@ export function getSessionUrl(sessionId: string, ws?: boolean): string {
1313
return url.toString();
1414
}
1515

16+
export function getPlaygroundSessionUrl(sessionId: string): string {
17+
let url = window.location.href;
18+
if (window.location.href.endsWith('/playground')) {
19+
url += `/${sessionId}`;
20+
}
21+
return url;
22+
}
23+
1624
export async function getDocInfoFromSessionId(
1725
sessionId: string
18-
): Promise<{ docId: string; readOnly: boolean } | null> {
26+
): Promise<{ docId: string; defaultReadOnly: boolean } | null> {
1927
const resp = await fetch(getSessionUrl(sessionId));
2028

2129
if (resp && resp.ok) {
@@ -27,7 +35,7 @@ export async function getDocInfoFromSessionId(
2735

2836
export async function createNewSession(
2937
contents: string
30-
): Promise<{ docId: string; sessionEditingId: string; sessionViewingId: string }> {
38+
): Promise<{ docId: string; sessionId: string }> {
3139
const resp = await fetch(Constants.sharedbBackendUrl, {
3240
method: 'POST',
3341
body: JSON.stringify({ contents }),
@@ -42,3 +50,19 @@ export async function createNewSession(
4250

4351
return resp.json();
4452
}
53+
54+
export async function changeDefaultEditable(sessionId: string, defaultReadOnly: boolean) {
55+
const resp = await fetch(getSessionUrl(sessionId), {
56+
method: 'PATCH',
57+
body: JSON.stringify({ defaultReadOnly }),
58+
headers: { 'Content-Type': 'application/json' }
59+
});
60+
61+
if (!resp || !resp.ok) {
62+
throw new Error(
63+
resp ? `Could not update session: ${await resp.text()}` : 'Unknown error updating session'
64+
);
65+
}
66+
67+
return resp.json();
68+
}

0 commit comments

Comments
 (0)