@digabi/exam-engine-core 23.10.1-alpha.0 → 23.13.0

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.
Files changed (91) hide show
  1. package/dist/__tests__/examServerApi.d.ts.map +1 -1
  2. package/dist/__tests__/examServerApi.js +0 -2
  3. package/dist/__tests__/examServerApi.js.map +1 -1
  4. package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
  5. package/dist/components/context/QuestionContext.d.ts.map +1 -1
  6. package/dist/components/context/QuestionContext.js +1 -1
  7. package/dist/components/context/QuestionContext.js.map +1 -1
  8. package/dist/components/exam/Exam.d.ts.map +1 -1
  9. package/dist/components/exam/Exam.js +1 -3
  10. package/dist/components/exam/Exam.js.map +1 -1
  11. package/dist/components/grading/GradingAnswer.d.ts +6 -2
  12. package/dist/components/grading/GradingAnswer.d.ts.map +1 -1
  13. package/dist/components/grading/GradingAnswer.js +3 -4
  14. package/dist/components/grading/GradingAnswer.js.map +1 -1
  15. package/dist/components/results/Results.d.ts.map +1 -1
  16. package/dist/components/results/Results.js +1 -3
  17. package/dist/components/results/Results.js.map +1 -1
  18. package/dist/components/shared/Audio.js +2 -2
  19. package/dist/components/shared/Audio.js.map +1 -1
  20. package/dist/components/shared/AudioTest.js +2 -2
  21. package/dist/components/shared/AudioTest.js.map +1 -1
  22. package/dist/dom-utils.js +1 -1
  23. package/dist/dom-utils.js.map +1 -1
  24. package/dist/i18n/fi-FI.d.ts +0 -5
  25. package/dist/i18n/fi-FI.d.ts.map +1 -1
  26. package/dist/i18n/fi-FI.js +0 -5
  27. package/dist/i18n/fi-FI.js.map +1 -1
  28. package/dist/i18n/sv-FI.d.ts.map +1 -1
  29. package/dist/i18n/sv-FI.js +0 -5
  30. package/dist/i18n/sv-FI.js.map +1 -1
  31. package/dist/main-bundle.js +1 -1
  32. package/dist/main.css +1 -1
  33. package/dist/parser/parseExamStructure.d.ts +1 -8
  34. package/dist/parser/parseExamStructure.d.ts.map +1 -1
  35. package/dist/parser/parseExamStructure.js +1 -1
  36. package/dist/parser/parseExamStructure.js.map +1 -1
  37. package/dist/store/audio/actions.d.ts +3 -3
  38. package/dist/store/audio/actions.d.ts.map +1 -1
  39. package/dist/store/audio/actions.js.map +1 -1
  40. package/dist/store/audio/reducer.d.ts +2 -2
  41. package/dist/store/audio/reducer.d.ts.map +1 -1
  42. package/dist/store/index.d.ts +1 -1
  43. package/dist/store/selectors.d.ts +2 -2
  44. package/dist/store/selectors.d.ts.map +1 -1
  45. package/dist/store/selectors.js.map +1 -1
  46. package/dist/types/ExamAnswer.d.ts +1 -5
  47. package/dist/types/ExamAnswer.d.ts.map +1 -1
  48. package/dist/types/ExamServerAPI.d.ts +3 -11
  49. package/dist/types/ExamServerAPI.d.ts.map +1 -1
  50. package/dist/types/GradingStructure.d.ts +1 -7
  51. package/dist/types/GradingStructure.d.ts.map +1 -1
  52. package/dist/validateAnswers.d.ts.map +1 -1
  53. package/dist/validateAnswers.js +0 -1
  54. package/dist/validateAnswers.js.map +1 -1
  55. package/package.json +2 -2
  56. package/dist/__tests__/playwright/exam/AudioAnswer.test.d.ts +0 -2
  57. package/dist/__tests__/playwright/exam/AudioAnswer.test.d.ts.map +0 -1
  58. package/dist/__tests__/playwright/exam/AudioAnswer.test.js +0 -30
  59. package/dist/__tests__/playwright/exam/AudioAnswer.test.js.map +0 -1
  60. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.d.ts +0 -8
  61. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.d.ts.map +0 -1
  62. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.js +0 -34
  63. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.js.map +0 -1
  64. package/dist/components/exam/AudioAnswer.d.ts +0 -7
  65. package/dist/components/exam/AudioAnswer.d.ts.map +0 -1
  66. package/dist/components/exam/AudioAnswer.js +0 -34
  67. package/dist/components/exam/AudioAnswer.js.map +0 -1
  68. package/dist/components/exam/internal/AudioRecorder.d.ts +0 -11
  69. package/dist/components/exam/internal/AudioRecorder.d.ts.map +0 -1
  70. package/dist/components/exam/internal/AudioRecorder.js +0 -115
  71. package/dist/components/exam/internal/AudioRecorder.js.map +0 -1
  72. package/dist/components/exam/internal/MyAudioRecorder.d.ts +0 -10
  73. package/dist/components/exam/internal/MyAudioRecorder.d.ts.map +0 -1
  74. package/dist/components/exam/internal/MyAudioRecorder.js +0 -106
  75. package/dist/components/exam/internal/MyAudioRecorder.js.map +0 -1
  76. package/dist/components/exam/internal/MyMediaRecorder.d.ts +0 -10
  77. package/dist/components/exam/internal/MyMediaRecorder.d.ts.map +0 -1
  78. package/dist/components/exam/internal/MyMediaRecorder.js +0 -91
  79. package/dist/components/exam/internal/MyMediaRecorder.js.map +0 -1
  80. package/dist/components/results/AudioAnswer.d.ts +0 -6
  81. package/dist/components/results/AudioAnswer.d.ts.map +0 -1
  82. package/dist/components/results/AudioAnswer.js +0 -33
  83. package/dist/components/results/AudioAnswer.js.map +0 -1
  84. package/dist/components/shared/internal/AudioError.d.ts +0 -8
  85. package/dist/components/shared/internal/AudioError.d.ts.map +0 -1
  86. package/dist/components/shared/internal/AudioError.js +0 -17
  87. package/dist/components/shared/internal/AudioError.js.map +0 -1
  88. package/dist/components/shared/internal/AudioErrorRemoveMe.d.ts +0 -8
  89. package/dist/components/shared/internal/AudioErrorRemoveMe.d.ts.map +0 -1
  90. package/dist/components/shared/internal/AudioErrorRemoveMe.js +0 -17
  91. package/dist/components/shared/internal/AudioErrorRemoveMe.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  export interface GradingStructure {
2
2
  questions: GradingStructureQuestion[];
3
3
  }
4
- export type GradingStructureQuestion = TextQuestion | ChoiceGroupQuestion | AudioQuestion;
4
+ export type GradingStructureQuestion = TextQuestion | ChoiceGroupQuestion;
5
5
  export interface TextQuestion {
6
6
  type: 'text';
7
7
  id: number;
@@ -16,12 +16,6 @@ export interface TextQuestion {
16
16
  */
17
17
  correctAnswers?: CorrectAnswer[];
18
18
  }
19
- export interface AudioQuestion {
20
- type: 'audio';
21
- id: number;
22
- displayNumber: string;
23
- maxScore: number;
24
- }
25
19
  export interface CorrectAnswer {
26
20
  text: string;
27
21
  score: number;
@@ -1 +1 @@
1
- {"version":3,"file":"GradingStructure.d.ts","sourceRoot":"","sources":["../../src/types/GradingStructure.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,wBAAwB,EAAE,CAAA;CACtC;AAED,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,mBAAmB,GAAG,aAAa,CAAA;AAEzF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAA;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd"}
1
+ {"version":3,"file":"GradingStructure.d.ts","sourceRoot":"","sources":["../../src/types/GradingStructure.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,wBAAwB,EAAE,CAAA;CACtC;AAED,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,mBAAmB,CAAA;AAEzE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAA;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateAnswers.d.ts","sourceRoot":"","sources":["../src/validateAnswers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAA;AAE9E,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,aAAa,CAAA;AAEzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;CAC7C;AAED,MAAM,WAAW,WAAY,SAAQ,yBAAyB;IAC5D,IAAI,EAAE,aAAa,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;CACtB;AA4GD,wBAAgB,eAAe,CAC7B,aAAa,EAAE,WAAW,EAC1B,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAC1C,eAAe,EAAE,CAInB"}
1
+ {"version":3,"file":"validateAnswers.d.ts","sourceRoot":"","sources":["../src/validateAnswers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAA;AAE9E,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,aAAa,CAAA;AAEzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;CAC7C;AAED,MAAM,WAAW,WAAY,SAAQ,yBAAyB;IAC5D,IAAI,EAAE,aAAa,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;CACtB;AA2GD,wBAAgB,eAAe,CAC7B,aAAa,EAAE,WAAW,EAC1B,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAC1C,eAAe,EAAE,CAInB"}
@@ -70,7 +70,6 @@ function validateExtraAnswers(examStructure, answersById) {
70
70
  return { answerCount, displayNumber, extraAnswers };
71
71
  }
72
72
  case 'text-answer':
73
- case 'audio-answer':
74
73
  case 'scored-text-answer':
75
74
  case 'choice-answer':
76
75
  case 'dnd-answer':
@@ -1 +1 @@
1
- {"version":3,"file":"validateAnswers.js","sourceRoot":"","sources":["../src/validateAnswers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateAnswers.js","sourceRoot":"","sources":["../src/validateAnswers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAiB9B,SAAS,UAAU,CACjB,aAA0B,EAC1B,OAAoD,EACpD,YAAe;IAEf,SAAS,EAAE,CAAC,WAAc,EAAE,OAAoB;QAC9C,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,oBAAoB,CAC3B,aAA0B,EAC1B,WAA2C;IAE3C,OAAO,UAAU,CACf,aAAa,EACb,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QAClB,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAC9D,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,MAAK,UAAU,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,MAAK,MAAM,EAAE,CAAC;gBACrE,OAAO,WAAW,CAAC,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS;oBAC9D,CAAC,CAAC;wBACE,GAAG,MAAM;wBACT;4BACE,IAAI,EAAE,eAAe;4BACrB,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,aAAa;4BAC/C,cAAc,EAAE,WAAW,CAAC,cAAc;4BAC1C,WAAW,EAAE,UAAU;yBACxB;qBACF;oBACH,CAAC,CAAC,MAAM,CAAA;YACZ,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC,EACD,EAAuB,CACxB,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,aAA0B,EAC1B,WAA2C;IAE3C,2EAA2E;IAC3E,6DAA6D;IAC7D,SAAS,EAAE,CAAC,OAAoB;;QAC9B,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAA;QAErF,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAC3C,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;gBACnE,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,CAAC,UAAU,mCAAI,QAAQ,CAAA;gBAC5D,uDAAuD;gBACvD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;gBACzF,kEAAkE;gBAClE,sEAAsE;gBACtE,8CAA8C;gBAC9C,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,KAAK,MAAM;oBACrB,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC5E,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAA;gBAChC,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;gBAClE,sEAAsE;gBACtE,kEAAkE;gBAClE,SAAS;gBACT,MAAM,YAAY,GAChB,WAAW,GAAG,UAAU;oBACtB,CAAC,CAAC;wBACE;4BACE,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,OAAO,CAAC,IAAI;4BACzB,aAAa;4BACb,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;4BAClD,UAAU;4BACV,UAAU;yBACI;wBAChB,GAAG,iBAAiB;qBACrB;oBACH,CAAC,CAAC,iBAAiB,CAAA;gBAEvB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,CAAA;YACrD,CAAC;YACD,KAAK,aAAa,CAAC;YACnB,KAAK,oBAAoB,CAAC;YAC1B,KAAK,eAAe,CAAC;YACrB,KAAK,YAAY,CAAC;YAClB,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;gBAC9D,sEAAsE;gBACtE,QAAQ;gBACR,MAAM,aAAa,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK,CAAC,MAAM,IAAG,CAAC,CAAA;gBACnD,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,YAAY,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,aAA0B,EAC1B,WAA2C;IAE3C,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,EAAE,YAAY,CAAC,EAAE,CAC5E,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC,CACzC,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digabi/exam-engine-core",
3
- "version": "23.10.1-alpha.0",
3
+ "version": "23.13.0",
4
4
  "main": "dist/main-bundle.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "author": "Matriculation Examination Board, Finland",
@@ -60,5 +60,5 @@
60
60
  "webpack-bundle-analyzer": "^4.1.0",
61
61
  "webpack-cli": "^6.0.0"
62
62
  },
63
- "gitHead": "7d86682d821fd0dd9a3c968dac4a164cc629b0eb"
63
+ "gitHead": "d6fe589e8f79ee80a985744e9dbda3d0586ba932"
64
64
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AudioAnswer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.test.d.ts","sourceRoot":"","sources":["../../../../__tests__/playwright/exam/AudioAnswer.test.tsx"],"names":[],"mappings":""}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const experimental_ct_react_1 = require("@playwright/experimental-ct-react");
7
- const react_1 = __importDefault(require("react"));
8
- const AudioAnswer_story_1 = require("../stories/exam/AudioAnswer.story");
9
- const utils_1 = require("../utils/utils");
10
- experimental_ct_react_1.test.describe.configure({ mode: 'serial' });
11
- experimental_ct_react_1.test.describe('Audio answer', () => {
12
- let masteredExam_SC;
13
- experimental_ct_react_1.test.beforeAll(async () => {
14
- masteredExam_SC = await (0, utils_1.setupMasteredExam)('test/audio-answer.xml');
15
- });
16
- (0, experimental_ct_react_1.test)('audio answer is visible with only one recording button', async ({ mount }) => {
17
- const component = await mount(react_1.default.createElement(AudioAnswer_story_1.AudioAnswerStory, { masteredExam: masteredExam_SC }));
18
- await (0, experimental_ct_react_1.expect)(component.locator('.audio-answer .e-button')).toHaveText('Äänitä vastaus');
19
- });
20
- (0, experimental_ct_react_1.test)('audio can be recorded', async ({ context, mount }) => {
21
- const component = await mount(react_1.default.createElement(AudioAnswer_story_1.AudioAnswerStory, { masteredExam: masteredExam_SC }));
22
- await context.grantPermissions(['microphone']);
23
- await component.getByText('Äänitä vastaus').click();
24
- await (0, experimental_ct_react_1.expect)(component.locator('.audio-answer .e-button')).toHaveText('Lopeta äänitys');
25
- //await page.waitForTimeout(3000)
26
- //await component.getByText('Lopeta äänitys').click()
27
- //await expect(component.locator('.audio-answer .e-button')).toHaveText('Äänitä vastaus')
28
- });
29
- });
30
- //# sourceMappingURL=AudioAnswer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.test.js","sourceRoot":"","sources":["../../../../__tests__/playwright/exam/AudioAnswer.test.tsx"],"names":[],"mappings":";;;;;AAAA,6EAAgE;AAChE,kDAAyB;AACzB,yEAAoE;AACpE,0CAAkD;AAElD,4BAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;AAE3C,4BAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IACjC,IAAI,eAA8D,CAAA;IAElE,4BAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,eAAe,GAAG,MAAM,IAAA,yBAAiB,EAAC,uBAAuB,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,IAAA,4BAAI,EAAC,wDAAwD,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACjF,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,8BAAC,oCAAgB,IAAC,YAAY,EAAE,eAAe,GAAI,CAAC,CAAA;QAClF,MAAM,IAAA,8BAAM,EAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;IAEF,IAAA,4BAAI,EAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QACzD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,8BAAC,oCAAgB,IAAC,YAAY,EAAE,eAAe,GAAI,CAAC,CAAA;QAClF,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9C,MAAM,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAA;QACnD,MAAM,IAAA,8BAAM,EAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;QACvF,iCAAiC;QACjC,qDAAqD;QACrD,yFAAyF;IAC3F,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,8 +0,0 @@
1
- import { MasteringResult } from '@digabi/exam-engine-mastering';
2
- import React from 'react';
3
- interface ExamStoryProps {
4
- masteredExam: MasteringResult;
5
- }
6
- export declare const AudioAnswerStory: React.FC<ExamStoryProps>;
7
- export {};
8
- //# sourceMappingURL=AudioAnswer.story.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.story.d.ts","sourceRoot":"","sources":["../../../../../__tests__/playwright/stories/exam/AudioAnswer.story.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,UAAU,cAAc;IACtB,YAAY,EAAE,eAAe,CAAA;CAC9B;AAqBD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAYrD,CAAA"}
@@ -1,34 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AudioAnswerStory = void 0;
7
- const react_1 = __importDefault(require("react"));
8
- const src_1 = require("../../../../src");
9
- const audios = {};
10
- const examServerApi = {
11
- getAnswers: () => Promise.resolve([]),
12
- setCasStatus: casStatus => Promise.resolve(casStatus),
13
- saveAnswer: () => Promise.resolve(),
14
- saveScreenshot: () => Promise.resolve('ok'),
15
- saveAudio: (questionId, audio) => {
16
- console.info('save', questionId);
17
- audios[questionId] = audio;
18
- return Promise.resolve(`audio_${questionId}`);
19
- },
20
- deleteAudio: _audioId => Promise.resolve(),
21
- playAudio: () => Promise.resolve('ok'),
22
- playRestrictedAudio: () => Promise.resolve('ok'),
23
- getRestrictedAudio: () => Promise.resolve(new Blob()),
24
- examineExam: () => undefined
25
- };
26
- const AudioAnswerStory = ({ masteredExam }) => {
27
- const doc = new DOMParser().parseFromString(masteredExam.xml, 'application/xml');
28
- return (react_1.default.createElement(src_1.Exam, { attachmentsURL: '/attachments',
29
- resolveAttachment: (filename) => `/${masteredExam.examCode}/attachments/${filename}`,
30
- doc,
31
- examServerApi }));
32
- };
33
- exports.AudioAnswerStory = AudioAnswerStory;
34
- //# sourceMappingURL=AudioAnswer.story.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.story.js","sourceRoot":"","sources":["../../../../../__tests__/playwright/stories/exam/AudioAnswer.story.tsx"],"names":[],"mappings":";;;;;;AACA,kDAAyB;AACzB,yCAAqD;AAMrD,MAAM,MAAM,GAAG,EAA6B,CAAA;AAE5C,MAAM,aAAa,GAAkB;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACrD,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IACnC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAChC,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAA;QAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAA;IAC/C,CAAC;IACD,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IAC1C,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IACrD,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;CAC7B,CAAA;AAEM,MAAM,gBAAgB,GAA6B,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;IAC7E,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IAChF,OAAO,CACL,8BAAC,UAAI,IAED,cAAc,EAAE,cAAc;QAC9B,iBAAiB,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,gBAAgB,QAAQ,EAAE;QAC5F,GAAG;QACH,aAAa,GAEf,CACH,CAAA;AACH,CAAC,CAAA;AAZY,QAAA,gBAAgB,oBAY5B"}
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import { ExamComponentProps } from '../../createRenderChildNodes';
3
- import type { AudioAnswer } from '../../types/ExamAnswer';
4
- declare function AudioAnswer(audioAnswerProps: ExamComponentProps): React.JSX.Element;
5
- declare const _default: React.MemoExoticComponent<typeof AudioAnswer>;
6
- export default _default;
7
- //# sourceMappingURL=AudioAnswer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/exam/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAMjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,iBAAS,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,qBAoCxD;;AAED,wBAAsC"}
@@ -1,34 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { getNumericAttribute } from '../../dom-utils';
3
- import { saveAnswer } from '../../store/answers/actions';
4
- import { useDispatch, useSelector } from 'react-redux';
5
- import { ExamContext } from '../context/ExamContext';
6
- import { AudioRecorder } from './internal/AudioRecorder';
7
- function AudioAnswer(audioAnswerProps) {
8
- const { element } = audioAnswerProps;
9
- const questionId = getNumericAttribute(element, 'question-id');
10
- const answer = useSelector((state) => state.answers.answersById[questionId]);
11
- const displayNumber = element.getAttribute('display-number');
12
- const dispatch = useDispatch();
13
- const { examServerApi } = useContext(ExamContext);
14
- return (React.createElement("div", { className: "audio-answer" },
15
- React.createElement("span", { className: "anchor", id: `question-nr-${displayNumber}` }),
16
- React.createElement(AudioRecorder, { audioUrl: (answer === null || answer === void 0 ? void 0 : answer.value) === '' ? undefined : answer === null || answer === void 0 ? void 0 : answer.value, onSave: audio => {
17
- void (async function () {
18
- const audioAttachmentUrl = await examServerApi.saveAudio(questionId, audio);
19
- const answer = { questionId, type: 'audio', value: audioAttachmentUrl };
20
- dispatch(saveAnswer(answer));
21
- })();
22
- }, onDelete: () => {
23
- if (!answer)
24
- return;
25
- void (async function () {
26
- const audioId = answer.value.split('/').pop();
27
- await examServerApi.deleteAudio(audioId);
28
- const answerObj = { questionId, type: 'audio', value: '' };
29
- dispatch(saveAnswer(answerObj));
30
- })();
31
- }, audioRecorderOptions: { audioBitsPerSecond: 65536 } })));
32
- }
33
- export default React.memo(AudioAnswer);
34
- //# sourceMappingURL=AudioAnswer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.js","sourceRoot":"","sources":["../../../src/components/exam/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,SAAS,WAAW,CAAC,gBAAoC;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAA;IAEpC,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAE,CAAA;IAC/D,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,KAAgC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAA4B,CACvG,CAAA;IACD,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAE,CAAA;IAC7D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IAEjD,OAAO,CACL,6BAAK,SAAS,EAAC,cAAc;QAC3B,8BAAM,SAAS,EAAC,QAAQ,EAAC,EAAE,EAAE,eAAe,aAAa,EAAE,GAAI;QAC/D,oBAAC,aAAa,IACZ,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,MAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,EAC1D,MAAM,EAAE,KAAK,CAAC,EAAE;gBACd,KAAK,CAAC,KAAK;oBACT,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;oBAC3E,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAA;oBAChF,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;gBAC9B,CAAC,CAAC,EAAE,CAAA;YACN,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,MAAM;oBAAE,OAAM;gBACnB,KAAK,CAAC,KAAK;oBACT,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAA;oBAC9C,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;oBACxC,MAAM,SAAS,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;oBACnE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;gBACjC,CAAC,CAAC,EAAE,CAAA;YACN,CAAC,EACD,oBAAoB,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,GACnD,CACE,CACP,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA"}
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- type AudioRecorderOptions = Omit<MediaRecorderOptions, 'bitsPerSecond' | 'videoBitsPerSecond'>;
3
- interface AudioRecorderProps {
4
- audioUrl?: string;
5
- onSave: (blob: Blob) => void;
6
- onDelete: () => void;
7
- audioRecorderOptions?: AudioRecorderOptions;
8
- }
9
- export declare function AudioRecorder({ audioUrl, onSave, onDelete, audioRecorderOptions }: AudioRecorderProps): React.JSX.Element;
10
- export {};
11
- //# sourceMappingURL=AudioRecorder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioRecorder.d.ts","sourceRoot":"","sources":["../../../../src/components/exam/internal/AudioRecorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAQ1D,KAAK,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,eAAe,GAAG,oBAAoB,CAAC,CAAA;AAE9F,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,kBAAkB,qBAuIrG"}
@@ -1,115 +0,0 @@
1
- import React, { useEffect, useRef, useState } from 'react';
2
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
- import { faMicrophone, faStop } from '@fortawesome/free-solid-svg-icons';
4
- import { useExamTranslation } from '../../../i18n';
5
- import AudioError from '../../shared/internal/AudioError';
6
- import { NBSP } from '../../../dom-utils';
7
- export function AudioRecorder({ audioUrl, onSave, onDelete, audioRecorderOptions }) {
8
- const [mediaRecorder, setMediaRecorder] = useState();
9
- const [timeElapsed, setTimeElapsed] = useState(0);
10
- const [status, setStatus] = useState('inactive');
11
- const [error, setError] = useState(null);
12
- const timer = useRef();
13
- const { t } = useExamTranslation();
14
- useEffect(() => {
15
- void (async function () {
16
- var _a;
17
- try {
18
- if ((_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) {
19
- const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true });
20
- //const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true } })
21
- setMediaRecorder(new MediaRecorder(mediaStream, audioRecorderOptions));
22
- }
23
- else {
24
- showError(new Error('Cannot get media stream, possibly insecure context'));
25
- }
26
- }
27
- catch (err) {
28
- showError(err);
29
- }
30
- return () => stopRecording(); // this never happens while recording
31
- })();
32
- }, []);
33
- function startRecording() {
34
- try {
35
- setError(null);
36
- if (mediaRecorder) {
37
- startTimer();
38
- mediaRecorder.start();
39
- setStatus(mediaRecorder.state);
40
- //mediaRecorder.start(1000) // to save in chunks
41
- mediaRecorder.ondataavailable = onData;
42
- mediaRecorder.onerror = (ev) => showError(new Error(ev.message));
43
- }
44
- }
45
- catch (err) {
46
- showError(err);
47
- }
48
- }
49
- function stopRecording() {
50
- setError(null);
51
- try {
52
- if (mediaRecorder) {
53
- stopTimer();
54
- mediaRecorder.stop();
55
- setStatus(mediaRecorder.state);
56
- }
57
- }
58
- catch (err) {
59
- showError(err);
60
- }
61
- }
62
- function onData(blobEvent) {
63
- onSave(blobEvent.data);
64
- }
65
- function startTimer() {
66
- setTimeElapsed(0);
67
- const timerId = setInterval(() => {
68
- var _a, _b;
69
- const timeElapsedMs = new Date().getTime() - ((_b = (_a = timer === null || timer === void 0 ? void 0 : timer.current) === null || _a === void 0 ? void 0 : _a.startTime) !== null && _b !== void 0 ? _b : new Date()).getTime();
70
- setTimeElapsed(Math.floor(timeElapsedMs / 1000));
71
- }, 1000);
72
- timer.current = { id: timerId, startTime: new Date() };
73
- }
74
- function stopTimer() {
75
- var _a;
76
- clearInterval((_a = timer.current) === null || _a === void 0 ? void 0 : _a.id);
77
- }
78
- function renderTimeElapsed() {
79
- const minutes = Math.floor(timeElapsed / 60);
80
- const sec = timeElapsed - minutes * 60;
81
- const seconds = `00${sec}`.slice(-2);
82
- return `${minutes}:${seconds}`;
83
- }
84
- function showError(err) {
85
- stopTimer();
86
- const error = err instanceof Error ? err : new Error('unknown error');
87
- switch (error.name) {
88
- case 'NotAllowedError':
89
- return setError('permission-denied');
90
- default:
91
- console.error(error.name, error.message);
92
- return setError('other-recording-error');
93
- }
94
- }
95
- function deleteRecording() {
96
- setError(null);
97
- onDelete();
98
- }
99
- return (React.createElement(React.Fragment, null,
100
- React.createElement("div", null,
101
- React.createElement("p", null,
102
- status != 'recording' && !audioUrl && (React.createElement("button", { className: "e-button start-recording", onClick: () => void startRecording(), disabled: error != null },
103
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faMicrophone, fixedWidth: true }),
104
- t('start.recording'))),
105
- React.createElement(React.Fragment, null, status == 'recording' && (React.createElement(React.Fragment, null,
106
- React.createElement("button", { className: "e-button stop-recording", onClick: stopRecording, disabled: error != null },
107
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faStop, fixedWidth: true }),
108
- t('stop.recording')),
109
- React.createElement("span", { className: "time-elapsed" }, renderTimeElapsed())))))),
110
- audioUrl && (React.createElement("div", { className: "audio-answer-controls" },
111
- React.createElement("audio", { src: audioUrl, className: "e-column e-column--narrow", preload: "metadata", controls: true, controlsList: "nodownload" }),
112
- React.createElement("button", { className: "e-button-secondary delete-recording", onClick: deleteRecording }, t('remove.recording')))),
113
- error && React.createElement(AudioError, { error: error }, NBSP)));
114
- }
115
- //# sourceMappingURL=AudioRecorder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioRecorder.js","sourceRoot":"","sources":["../../../../src/components/exam/internal/AudioRecorder.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- interface MyAudioRecorderProps {
3
- audioUrl?: string;
4
- onSave: (blob: Blob) => void;
5
- onDelete: () => void;
6
- mediaRecorderOptions?: MediaRecorderOptions;
7
- }
8
- export declare function MyAudioRecorder({ audioUrl, onSave, onDelete, mediaRecorderOptions }: MyAudioRecorderProps): React.JSX.Element | null;
9
- export {};
10
- //# sourceMappingURL=MyAudioRecorder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MyAudioRecorder.d.ts","sourceRoot":"","sources":["../../../../src/components/exam/internal/MyAudioRecorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAK1D,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,oBAAoB,4BAkIzG"}
@@ -1,106 +0,0 @@
1
- import React, { useEffect, useRef, useState } from 'react';
2
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
- import { faMicrophone, faStop } from '@fortawesome/free-solid-svg-icons';
4
- import { useExamTranslation } from '../../../i18n';
5
- export function MyAudioRecorder({ audioUrl, onSave, onDelete, mediaRecorderOptions }) {
6
- const [mediaRecorder, setMediaRecorder] = useState();
7
- const [timeElapsed, setTimeElapsed] = useState(0);
8
- const [status, setStatus] = useState('');
9
- const [error, setError] = useState();
10
- const timer = useRef();
11
- const { t } = useExamTranslation();
12
- useEffect(() => {
13
- void (async function () {
14
- try {
15
- const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true });
16
- //const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true } })
17
- const mediaRecorder = new MediaRecorder(mediaStream, mediaRecorderOptions);
18
- setMediaRecorder(mediaRecorder);
19
- }
20
- catch (err) {
21
- showError(err);
22
- }
23
- return () => stopRecording();
24
- })();
25
- }, []);
26
- useEffect(() => {
27
- var _a;
28
- setStatus((_a = mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.state) !== null && _a !== void 0 ? _a : '');
29
- }, [mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.state]);
30
- function startRecording() {
31
- try {
32
- if (mediaRecorder) {
33
- startTimer();
34
- mediaRecorder.start();
35
- //mediaRecorder.start(1000) // to save in chunks
36
- mediaRecorder.ondataavailable = onData;
37
- mediaRecorder.onerror = (ev) => showError(new Error(ev.message));
38
- }
39
- }
40
- catch (err) {
41
- showError(err);
42
- }
43
- }
44
- function stopRecording() {
45
- console.info('stop');
46
- try {
47
- if (mediaRecorder && mediaRecorder.state !== 'inactive') {
48
- mediaRecorder.stop();
49
- //saveAndStopTimer(new Blob())
50
- }
51
- }
52
- catch (err) {
53
- showError(err);
54
- }
55
- /*if (mediaStream) {
56
- mediaStream.getTracks().forEach(track => track.stop())
57
- mediaStream = null
58
- }*/
59
- }
60
- function onData(blobEvent) {
61
- var _a;
62
- clearInterval((_a = timer.current) === null || _a === void 0 ? void 0 : _a.id);
63
- setTimeElapsed(0);
64
- console.info('save');
65
- onSave(blobEvent.data);
66
- }
67
- /*function saveAndStopTimer(blob: Blob) {
68
- console.info('save')
69
- clearInterval(timer.current?.id)
70
- setTimeElapsed(0)
71
- onSave(blob)
72
- }*/
73
- function startTimer() {
74
- const timerId = setInterval(() => {
75
- var _a, _b;
76
- const timeElapsedMs = new Date().getTime() - ((_b = (_a = timer === null || timer === void 0 ? void 0 : timer.current) === null || _a === void 0 ? void 0 : _a.startTime) !== null && _b !== void 0 ? _b : new Date()).getTime();
77
- setTimeElapsed(Math.floor(timeElapsedMs / 1000));
78
- }, 1000);
79
- timer.current = { id: timerId, startTime: new Date() };
80
- }
81
- function renderTimeElapsed() {
82
- const minutes = Math.floor(timeElapsed / 60);
83
- const sec = timeElapsed - minutes * 60;
84
- const seconds = `00${sec}`.slice(-2);
85
- return `${minutes}:${seconds}`;
86
- }
87
- function showError(err) {
88
- setError(err instanceof Error ? err : new Error('unknown error'));
89
- }
90
- console.info('status', status);
91
- return error ? (React.createElement("div", null, error.message)) : status == '' ? null : (React.createElement(React.Fragment, null,
92
- React.createElement("div", null,
93
- React.createElement("p", null,
94
- status != 'recording' && !audioUrl && (React.createElement("button", { className: "e-button start-recording", onClick: () => void startRecording() },
95
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faMicrophone, fixedWidth: true }),
96
- t('start.recording'))),
97
- React.createElement(React.Fragment, null,
98
- status == 'recording' && (React.createElement("button", { className: "e-button stop-recording", onClick: stopRecording },
99
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faStop, fixedWidth: true }),
100
- t('stop.recording'))),
101
- React.createElement("span", { className: "time-elapsed" }, renderTimeElapsed())))),
102
- audioUrl && (React.createElement("div", { className: "audio-answer-controls" },
103
- React.createElement("audio", { src: audioUrl, className: "e-column e-column--narrow", preload: "metadata", controls: true, controlsList: "nodownload" }),
104
- React.createElement("button", { className: "e-button-reversed delete-recording", onClick: onDelete }, t('remove.recording'))))));
105
- }
106
- //# sourceMappingURL=MyAudioRecorder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MyAudioRecorder.js","sourceRoot":"","sources":["../../../../src/components/exam/internal/MyAudioRecorder.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- interface MyMediaRecorderProps {
3
- audioUrl?: string;
4
- onSave: (blob: Blob) => void;
5
- onDelete: () => void;
6
- bitsPerSecond?: number;
7
- }
8
- export declare function MyMediaRecorder({ onSave, onDelete }: MyMediaRecorderProps): React.JSX.Element;
9
- export {};
10
- //# sourceMappingURL=MyMediaRecorder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MyMediaRecorder.d.ts","sourceRoot":"","sources":["../../../../src/components/exam/internal/MyMediaRecorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAK1D,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,oBAAoB,qBAkHzE"}
@@ -1,91 +0,0 @@
1
- import React, { useEffect, useRef, useState } from 'react';
2
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
- import { faMicrophone, faStop } from '@fortawesome/free-solid-svg-icons';
4
- import { useExamTranslation } from '../../../i18n';
5
- export function MyMediaRecorder({ onSave, onDelete }) {
6
- const [mediaRecorder, setMediaRecorder] = useState();
7
- const [timeElapsed, setTimeElapsed] = useState(0);
8
- const [status, setStatus] = useState('inactive');
9
- const [audioUrl, setAudioUrl] = useState();
10
- const [error, setError] = useState();
11
- const timer = useRef();
12
- const { t } = useExamTranslation();
13
- useEffect(() => {
14
- var _a;
15
- setStatus((_a = mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.state) !== null && _a !== void 0 ? _a : 'inactive');
16
- }, [mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.state]);
17
- async function startRecording() {
18
- try {
19
- const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true });
20
- setMediaRecorder(() => {
21
- const mediaRecorder = new MediaRecorder(mediaStream);
22
- startTimer();
23
- mediaRecorder.start();
24
- //mediaRecorder.start(1000)
25
- mediaRecorder.ondataavailable = onData;
26
- return mediaRecorder;
27
- });
28
- }
29
- catch (err) {
30
- setError(err instanceof Error ? err : new Error('unknown error'));
31
- }
32
- }
33
- function stopRecording() {
34
- try {
35
- if (mediaRecorder && mediaRecorder.state !== 'inactive') {
36
- mediaRecorder.stop();
37
- saveAndStopTimer(new Blob());
38
- }
39
- }
40
- catch (err) {
41
- setError(err instanceof Error ? err : new Error('unknown error'));
42
- }
43
- /*if (mediaStream) {
44
- mediaStream.getTracks().forEach(track => track.stop())
45
- mediaStream = null
46
- }*/
47
- }
48
- function onData(blobEvent) {
49
- console.info('data', blobEvent.data);
50
- }
51
- function saveAndStopTimer(blob) {
52
- var _a;
53
- console.info('save');
54
- clearInterval((_a = timer.current) === null || _a === void 0 ? void 0 : _a.id);
55
- setTimeElapsed(0);
56
- console.info('save blob', blob);
57
- //onSave(blob)
58
- }
59
- function onDelete() { }
60
- function startTimer() {
61
- const timerId = setInterval(() => {
62
- var _a, _b;
63
- const timeElapsedMs = new Date().getTime() - ((_b = (_a = timer === null || timer === void 0 ? void 0 : timer.current) === null || _a === void 0 ? void 0 : _a.startTime) !== null && _b !== void 0 ? _b : new Date()).getTime();
64
- setTimeElapsed(Math.floor(timeElapsedMs / 1000));
65
- }, 1000);
66
- timer.current = { id: timerId, startTime: new Date() };
67
- }
68
- function renderTimeElapsed() {
69
- const minutes = Math.floor(timeElapsed / 60);
70
- const sec = timeElapsed - minutes * 60;
71
- const seconds = `00${sec}`.slice(-2);
72
- return `${minutes}:${seconds}`;
73
- }
74
- console.info('status', status);
75
- return (React.createElement(React.Fragment, null,
76
- React.createElement("div", null,
77
- React.createElement("p", null,
78
- [undefined, 'inactive'].includes(mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.state) && (React.createElement("button", { className: "e-button start-recording", onClick: () => void startRecording() },
79
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faMicrophone, fixedWidth: true }),
80
- t('start.recording'))),
81
- React.createElement(React.Fragment, null,
82
- (mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.state) == 'recording' && (React.createElement("button", { className: "e-button stop-recording", onClick: stopRecording },
83
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faStop, fixedWidth: true }),
84
- t('stop.recording'))),
85
- React.createElement("span", { className: "time-elapsed" }, renderTimeElapsed())))),
86
- audioUrl && (React.createElement("div", { className: "audio-answer-controls" },
87
- React.createElement("audio", { src: audioUrl, className: "e-column e-column--narrow", preload: "metadata", controls: true, controlsList: "nodownload" }),
88
- React.createElement("button", { className: "e-button-reversed delete-recording", onClick: onDelete }, t('remove.recording')))),
89
- error && React.createElement("div", null, error.message)));
90
- }
91
- //# sourceMappingURL=MyMediaRecorder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MyMediaRecorder.js","sourceRoot":"","sources":["../../../../src/components/exam/internal/MyMediaRecorder.tsx"],"names":[],"mappings":"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"}