@capytale/meta-player 0.3.15 → 0.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capytale/meta-player",
3
- "version": "0.3.15",
3
+ "version": "0.3.17",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "vite",
@@ -19,7 +19,7 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@capytale/activity.js": "^3.1.6",
22
+ "@capytale/activity.js": "^3.1.7",
23
23
  "@capytale/capytale-anti-triche": "^0.2.1",
24
24
  "@capytale/capytale-rich-text-editor": "^0.4.3",
25
25
  "@reduxjs/toolkit": "^2.0.1",
@@ -32,6 +32,7 @@ import {
32
32
  } from "./features/activityData/activityDataSlice";
33
33
 
34
34
  import { initialState as layoutInitialState } from "./features/layout/layoutSlice";
35
+ import ExitWarning from "./features/activityData/ExitWarning";
35
36
 
36
37
  type AntiCheatOptions = {
37
38
  preserveDom: boolean;
@@ -81,6 +82,7 @@ const MetaPlayer: FC<MetaPlayerProps> = (props) => {
81
82
  <PrimeReactProvider value={primeSettings}>
82
83
  <Provider store={store}>
83
84
  <ThemeSwitcher />
85
+ <ExitWarning />
84
86
  <ErrorBoundary fallback={<div>Une erreur est survenue</div>}>
85
87
  <ActivityJSProvider options={props.activityJSOptions}>
86
88
  <Saver />
@@ -0,0 +1,26 @@
1
+ import { FC, useEffect } from "react";
2
+ import { useAppSelector } from "../../app/hooks";
3
+ import { selectIsDirty } from "./activityDataSlice";
4
+
5
+ const ExitWarning: FC = () => {
6
+ const isDirty = useAppSelector(selectIsDirty);
7
+
8
+ useEffect(() => {
9
+ const handleBeforeUnload = (e: BeforeUnloadEvent) => {
10
+ if (isDirty) {
11
+ e.preventDefault();
12
+ e.returnValue = true;
13
+ }
14
+ };
15
+
16
+ window.addEventListener("beforeunload", handleBeforeUnload);
17
+
18
+ return () => {
19
+ window.removeEventListener("beforeunload", handleBeforeUnload);
20
+ };
21
+ }, [isDirty]);
22
+
23
+ return null;
24
+ };
25
+
26
+ export default ExitWarning;
@@ -139,6 +139,16 @@ export const useActivityJsEssentials = () => {
139
139
  //@ts-expect-error
140
140
  return ab.assignmentNode.content.value as string | null;
141
141
  };
142
+ const getContent = () => {
143
+ if (mode !== "assignment") {
144
+ return getActivityContent();
145
+ }
146
+ const assignmentContent = getAssignmentContent();
147
+ if (assignmentContent != null) {
148
+ return assignmentContent;
149
+ }
150
+ return getActivityContent();
151
+ };
142
152
  const getActivityBinaryData = () => {
143
153
  //@ts-expect-error
144
154
  return ab.activityNode.binaryData.value as any;
@@ -150,6 +160,16 @@ export const useActivityJsEssentials = () => {
150
160
  //@ts-expect-error
151
161
  return ab.assignmentNode.binaryData.value as any;
152
162
  };
163
+ const getBinaryData = () => {
164
+ if (mode !== "assignment") {
165
+ return getActivityBinaryData();
166
+ }
167
+ const assignmentBinaryData = getAssignmentBinaryData();
168
+ if (assignmentBinaryData != null) {
169
+ return assignmentBinaryData;
170
+ }
171
+ return getActivityBinaryData();
172
+ };
153
173
  const setActivityContent = (content: string | null) => {
154
174
  //@ts-expect-error
155
175
  ab.activityNode.content.value = content;
@@ -161,6 +181,13 @@ export const useActivityJsEssentials = () => {
161
181
  //@ts-expect-error
162
182
  ab.assignmentNode.content.value = content;
163
183
  };
184
+ const setContent = (content: string | null) => {
185
+ if (mode !== "assignment") {
186
+ setActivityContent(content);
187
+ } else {
188
+ setAssignmentContent(content);
189
+ }
190
+ };
164
191
  const setActivityBinaryData = (data: any | null) => {
165
192
  //@ts-expect-error
166
193
  ab.activityNode.binaryData.value = data;
@@ -172,6 +199,13 @@ export const useActivityJsEssentials = () => {
172
199
  //@ts-expect-error
173
200
  ab.assignmentNode.binaryData.value = data;
174
201
  };
202
+ const setBinaryData = (data: any | null) => {
203
+ if (mode !== "assignment") {
204
+ setActivityBinaryData(data);
205
+ } else {
206
+ setAssignmentBinaryData(data);
207
+ }
208
+ };
175
209
  const hasAssignment = !!ab.assignmentNode;
176
210
  const title = ab.title.value;
177
211
  const nid = ab.mainNode.nid;
@@ -182,11 +216,15 @@ export const useActivityJsEssentials = () => {
182
216
  nid,
183
217
  getActivityContent,
184
218
  getAssignmentContent,
219
+ getContent,
185
220
  getActivityBinaryData,
186
221
  getAssignmentBinaryData,
222
+ getBinaryData,
187
223
  setActivityContent,
188
224
  setAssignmentContent,
225
+ setContent,
189
226
  setActivityBinaryData,
190
227
  setAssignmentBinaryData,
228
+ setBinaryData,
191
229
  };
192
230
  };