@testgorilla/tgo-coding-test 2.0.0 → 2.0.1

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 (255) hide show
  1. package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
  2. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
  3. package/{src/index.ts → index.d.ts} +2 -19
  4. package/lib/components/code-editor/code-editor.component.d.ts +54 -0
  5. package/lib/components/code-editor/code-editor.service.d.ts +12 -0
  6. package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
  7. package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
  8. package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
  9. package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
  10. package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
  11. package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
  12. package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
  13. package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
  14. package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
  15. package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
  16. package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
  17. package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
  18. package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
  19. package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
  20. package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
  21. package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
  22. package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
  23. package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
  24. package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
  25. package/lib/components/coding-question/coding-question.component.d.ts +45 -0
  26. package/lib/components/coding-section/coding-section.component.d.ts +52 -0
  27. package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
  28. package/lib/components/configurations/configurations.component.d.ts +40 -0
  29. package/lib/components/instructions/instructions.component.d.ts +48 -0
  30. package/lib/components/panel/panel.component.d.ts +12 -0
  31. package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
  32. package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
  33. package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
  34. package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
  35. package/lib/components/tests/test-results.component.d.ts +33 -0
  36. package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
  37. package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
  38. package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
  39. package/lib/config/tgo-coding-test.config.d.ts +24 -0
  40. package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
  41. package/lib/config/tgo-coding-test.token.d.ts +9 -0
  42. package/lib/models/auto-saved-data.d.ts +42 -0
  43. package/lib/models/code-event.d.ts +15 -0
  44. package/lib/models/coderunner-execution-results.d.ts +51 -0
  45. package/lib/models/configs.d.ts +15 -0
  46. package/lib/models/language-change-action.d.ts +4 -0
  47. package/lib/models/lat-languages.d.ts +8 -0
  48. package/lib/models/mixpanel-events.d.ts +3 -0
  49. package/lib/models/mode.d.ts +5 -0
  50. package/lib/models/paste-data.d.ts +4 -0
  51. package/lib/models/programming-language.d.ts +8 -0
  52. package/lib/models/test-cases.d.ts +67 -0
  53. package/lib/models/theme.d.ts +4 -0
  54. package/lib/models/translations.d.ts +1 -0
  55. package/lib/models/view-mode.d.ts +6 -0
  56. package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
  57. package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
  58. package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
  59. package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
  60. package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
  61. package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
  62. package/lib/services/coding-test-config.service.d.ts +38 -0
  63. package/lib/services/configurations.service.d.ts +37 -0
  64. package/lib/services/lib-coding-test.service.d.ts +69 -0
  65. package/lib/services/storage.service.d.ts +83 -0
  66. package/lib/services/test-cases.service.d.ts +12 -0
  67. package/lib/services/theme.service.d.ts +17 -0
  68. package/lib/utils/additional-languages/erlang.d.ts +37 -0
  69. package/lib/utils/resize-element.d.ts +2 -0
  70. package/lib/utils/time-to-ms.util.d.ts +1 -0
  71. package/package.json +17 -3
  72. package/shared/index.d.ts +4 -0
  73. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
  74. package/shared/lib/components/audio-animation/index.d.ts +1 -0
  75. package/shared/lib/components/index.d.ts +2 -0
  76. package/shared/lib/components/vimeo-video/index.d.ts +1 -0
  77. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
  78. package/shared/lib/models/answer.d.ts +17 -0
  79. package/shared/lib/models/assessment.d.ts +80 -0
  80. package/shared/lib/models/environment.d.ts +1 -0
  81. package/shared/lib/models/index.d.ts +8 -0
  82. package/shared/lib/models/question-component.d.ts +54 -0
  83. package/shared/lib/models/question.d.ts +102 -0
  84. package/shared/lib/models/test.d.ts +81 -0
  85. package/shared/lib/models/translations.d.ts +1 -0
  86. package/shared/lib/models/window.d.ts +6 -0
  87. package/shared/lib/services/api/api.service.d.ts +25 -0
  88. package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
  89. package/shared/lib/services/environment/environment.service.d.ts +6 -0
  90. package/shared/lib/services/index.d.ts +9 -0
  91. package/shared/lib/services/localization/languages.model.d.ts +15 -0
  92. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
  93. package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
  94. package/shared/lib/services/media/media.service.d.ts +29 -0
  95. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
  96. package/shared/lib/services/theme/theme.service.d.ts +8 -0
  97. package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
  98. package/shared/test-mocks/index.d.ts +2 -0
  99. package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
  100. package/.eslintrc.json +0 -46
  101. package/jest.config.ts +0 -26
  102. package/ng-package.json +0 -14
  103. package/project.json +0 -48
  104. package/src/lib/components/.gitkeep +0 -0
  105. package/src/lib/components/code-editor/code-editor.component.html +0 -10
  106. package/src/lib/components/code-editor/code-editor.component.scss +0 -21
  107. package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
  108. package/src/lib/components/code-editor/code-editor.component.ts +0 -368
  109. package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
  110. package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
  111. package/src/lib/components/code-editor/code-editor.service.ts +0 -94
  112. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
  113. package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
  114. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
  115. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
  116. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
  117. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
  118. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
  119. package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
  120. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
  121. package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
  122. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
  123. package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
  124. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
  125. package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
  126. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
  127. package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
  128. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
  129. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
  130. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
  131. package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
  132. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
  133. package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
  134. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
  135. package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
  136. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
  137. package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
  138. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
  139. package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
  140. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
  141. package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
  142. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
  143. package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
  144. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
  145. package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
  146. package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
  147. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
  148. package/src/lib/components/coding-question/coding-question.component.html +0 -78
  149. package/src/lib/components/coding-question/coding-question.component.scss +0 -75
  150. package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
  151. package/src/lib/components/coding-question/coding-question.component.ts +0 -101
  152. package/src/lib/components/coding-section/coding-section.component.html +0 -82
  153. package/src/lib/components/coding-section/coding-section.component.scss +0 -64
  154. package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
  155. package/src/lib/components/coding-section/coding-section.component.ts +0 -186
  156. package/src/lib/components/coding-test.module.ts +0 -124
  157. package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
  158. package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
  159. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
  160. package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -36
  161. package/src/lib/components/configurations/configurations.component.html +0 -57
  162. package/src/lib/components/configurations/configurations.component.scss +0 -42
  163. package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
  164. package/src/lib/components/configurations/configurations.component.ts +0 -97
  165. package/src/lib/components/instructions/instructions.component.html +0 -41
  166. package/src/lib/components/instructions/instructions.component.scss +0 -173
  167. package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
  168. package/src/lib/components/instructions/instructions.component.ts +0 -137
  169. package/src/lib/components/panel/panel.component.html +0 -19
  170. package/src/lib/components/panel/panel.component.scss +0 -41
  171. package/src/lib/components/panel/panel.component.spec.ts +0 -40
  172. package/src/lib/components/panel/panel.component.ts +0 -33
  173. package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
  174. package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
  175. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
  176. package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -154
  177. package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
  178. package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
  179. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
  180. package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -204
  181. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
  182. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
  183. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
  184. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -101
  185. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
  186. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
  187. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
  188. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -17
  189. package/src/lib/components/tests/test-results.component.html +0 -119
  190. package/src/lib/components/tests/test-results.component.scss +0 -189
  191. package/src/lib/components/tests/test-results.component.spec.ts +0 -140
  192. package/src/lib/components/tests/test-results.component.ts +0 -97
  193. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
  194. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
  195. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
  196. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -278
  197. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
  198. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
  199. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
  200. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -578
  201. package/src/lib/config/tgo-coding-test.config.ts +0 -26
  202. package/src/lib/config/tgo-coding-test.token.ts +0 -21
  203. package/src/lib/models/.gitkeep +0 -0
  204. package/src/lib/models/auto-saved-data.ts +0 -51
  205. package/src/lib/models/code-event.ts +0 -17
  206. package/src/lib/models/coderunner-execution-results.ts +0 -58
  207. package/src/lib/models/coding-lib.mocks.ts +0 -246
  208. package/src/lib/models/configs.ts +0 -18
  209. package/src/lib/models/language-change-action.ts +0 -4
  210. package/src/lib/models/lat-languages.ts +0 -12
  211. package/src/lib/models/mixpanel-events.ts +0 -3
  212. package/src/lib/models/mode.ts +0 -5
  213. package/src/lib/models/paste-data.ts +0 -4
  214. package/src/lib/models/programming-language.ts +0 -9
  215. package/src/lib/models/test-cases.ts +0 -74
  216. package/src/lib/models/theme.ts +0 -5
  217. package/src/lib/models/translations.ts +0 -1
  218. package/src/lib/models/view-mode.ts +0 -6
  219. package/src/lib/services/.gitkeep +0 -0
  220. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
  221. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
  222. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
  223. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
  224. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
  225. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
  226. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
  227. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
  228. package/src/lib/services/coding-test-config.service.ts +0 -48
  229. package/src/lib/services/configurations.service.mocks.ts +0 -77
  230. package/src/lib/services/configurations.service.spec.ts +0 -79
  231. package/src/lib/services/configurations.service.ts +0 -111
  232. package/src/lib/services/index.ts +0 -0
  233. package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
  234. package/src/lib/services/lib-coding-test.service.ts +0 -157
  235. package/src/lib/services/local-storage.service.mocks.ts +0 -22
  236. package/src/lib/services/storage.service.spec.ts +0 -1119
  237. package/src/lib/services/storage.service.ts +0 -729
  238. package/src/lib/services/test-cases.service.spec.ts +0 -53
  239. package/src/lib/services/test-cases.service.ts +0 -29
  240. package/src/lib/services/theme.service.spec.ts +0 -76
  241. package/src/lib/services/theme.service.ts +0 -34
  242. package/src/lib/styles/mixins.scss +0 -86
  243. package/src/lib/styles/styles.scss +0 -112
  244. package/src/lib/styles/variables.scss +0 -105
  245. package/src/lib/utils/.gitkeep +0 -0
  246. package/src/lib/utils/additional-languages/erlang.ts +0 -115
  247. package/src/lib/utils/resize-element.ts +0 -15
  248. package/src/lib/utils/time-to-ms.util.ts +0 -10
  249. package/src/test-setup.ts +0 -3
  250. package/tsconfig.json +0 -19
  251. package/tsconfig.lib.json +0 -19
  252. package/tsconfig.lib.prod.json +0 -10
  253. package/tsconfig.spec.json +0 -17
  254. /package/{src/assets → assets}/i18n/en.json +0 -0
  255. /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
@@ -1,578 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import {
3
- Component,
4
- computed,
5
- EventEmitter,
6
- HostBinding,
7
- inject,
8
- Input,
9
- OnDestroy,
10
- OnInit,
11
- Output,
12
- signal,
13
- ViewEncapsulation,
14
- } from '@angular/core';
15
- import { ActivatedRoute, RouterModule } from '@angular/router';
16
- import { translate, TRANSLOCO_SCOPE, TranslocoModule, TranslocoService } from '@ngneat/transloco';
17
- import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
18
- import {
19
- ApiService,
20
- Assessment,
21
- EnvironmentService,
22
- getAvailableLangs,
23
- IAntiCheatingState,
24
- IConfigurationState,
25
- INavigationButtonState,
26
- IQuestionDataContract,
27
- ISubmissionState,
28
- MixpanelService,
29
- Question,
30
- TestResultRead,
31
- ThemeService,
32
- TranslocoLazyModuleUtils,
33
- } from '@testgorilla/tgo-test-shared';
34
- import {
35
- ApplicationTheme,
36
- ConfirmDialogComponent,
37
- DialogComponentModule,
38
- DialogService,
39
- SnackbarComponentModule,
40
- } from '@testgorilla/tgo-ui';
41
- import { GuidedTourModule, GuidedTourService } from 'ngx-guided-tour';
42
- import { interval, Observable, Subscription } from 'rxjs';
43
- import { switchMap, take, tap } from 'rxjs/operators';
44
-
45
- import { CodingTestsResultsModel } from '../../models/coderunner-execution-results';
46
- import { LATLanguages } from '../../models/lat-languages';
47
- import { Modes } from '../../models/mode';
48
- import { PasteData } from '../../models/paste-data';
49
- import {
50
- ProgrammingLanguage,
51
- ProgrammingLanguageVersioned,
52
- } from '../../models/programming-language';
53
- import { ExampleTestCase, SqlTestCase } from '../../models/test-cases';
54
- import { Themes } from '../../models/theme';
55
- import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
56
- import { ViewMode } from '../../models/view-mode';
57
- import {
58
- CandidatureApiService,
59
- CoderunnerApiService,
60
- CodingTestService,
61
- CodingTestTourMode,
62
- CodingTestTourService,
63
- } from '../../services/candidate-coding-test-services';
64
- import { CodingTestConfigService } from '../../services/coding-test-config.service';
65
- import { LibCodingTestService } from '../../services/lib-coding-test.service';
66
- import { CodeEditorLanguages } from '../code-editor/helpers/code-editor-helper.model';
67
- import { TgoCodingTestComponent } from '../tgo-coding-test/tgo-coding-test.component';
68
-
69
- @UntilDestroy()
70
- @Component({
71
- selector: 'tgo-coding-test-candidate-view',
72
- templateUrl: './tgo-coding-test-candidate-view.component.html',
73
- styleUrls: ['./tgo-coding-test-candidate-view.component.scss'],
74
- encapsulation: ViewEncapsulation.None,
75
- imports: [
76
- TranslocoModule,
77
- DialogComponentModule,
78
- SnackbarComponentModule,
79
- TgoCodingTestComponent,
80
- GuidedTourModule,
81
- CommonModule,
82
- RouterModule,
83
- ],
84
- providers: [
85
- TranslocoLazyModuleUtils.getScopeProvider(
86
- 'tgo-coding-test',
87
- getAvailableLangs(),
88
- ROOT_TRANSLATIONS_SCOPE,
89
- (lang: string) => {
90
- // Fetch from app assets; demo app copies the library assets to
91
- // /assets/tgo-coding-test via project.json.
92
- const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;
93
- return fetch(url).then(res => res.json());
94
- }
95
- ),
96
- EnvironmentService,
97
- CoderunnerApiService,
98
- CodingTestService,
99
- CodingTestTourService,
100
- GuidedTourService,
101
- ThemeService,
102
- CandidatureApiService,
103
- MixpanelService,
104
- // use MockedApiService for local demo ONLY
105
- ApiService, //{ provide: ApiService, useClass: MockedApiService },
106
- ],
107
- })
108
- export class TgoCodingTestCandidateViewComponent
109
- implements OnInit, IQuestionDataContract, OnDestroy
110
- {
111
- private readonly dialogService = inject(DialogService);
112
- private readonly translationScope = inject(TRANSLOCO_SCOPE);
113
- private readonly candidatureApiService = inject(CandidatureApiService);
114
- private readonly codingTestTourService = inject(CodingTestTourService);
115
- private readonly libCodingTestService = inject(LibCodingTestService);
116
- private readonly environmentService = inject(EnvironmentService);
117
- private readonly codingTestService = inject(CodingTestService);
118
- private readonly translocoService = inject(TranslocoService);
119
- private readonly themeService = inject(ThemeService);
120
- private readonly apiService = inject(ApiService);
121
- private readonly route = inject(ActivatedRoute);
122
- private readonly codingTestConfigService = inject(CodingTestConfigService);
123
-
124
- @Input() assessment?: Assessment;
125
- @Input({ required: true }) question!: Question;
126
- @Input({ required: true }) test!: TestResultRead;
127
- @Input() expirationObservable?: Observable<void>;
128
- @Input() completeObservable?: Observable<void>;
129
- @Input() isDemo?: boolean;
130
-
131
- @Output() validationStatusChanged = new EventEmitter<any>(); // eslint-disable-line @typescript-eslint/no-explicit-any
132
- @Output() antiCheatingConfigurationChanged = new EventEmitter<IAntiCheatingState | null>();
133
- @Output() fullscreenChanged = new EventEmitter<boolean>();
134
- @Output() themeChanged = new EventEmitter<ApplicationTheme>();
135
- @Output() codingFullscreenChanged = new EventEmitter<boolean>();
136
- @Output() navigationButtonStateChanged = new EventEmitter<INavigationButtonState | null>();
137
- @Output() configurationStateChanged = new EventEmitter<IConfigurationState | null>();
138
- @Output() submissionStateChanged = new EventEmitter<ISubmissionState | null>();
139
- @Output() loadingStateChanged: EventEmitter<boolean> = new EventEmitter<boolean>();
140
-
141
- @HostBinding('class') hostClass = 'micro-question-code';
142
-
143
- private readonly subscription: Subscription = new Subscription();
144
-
145
- initCode = '';
146
- viewModes = ViewMode;
147
- mode: Modes = Modes.Running;
148
- companyColor = this.themeService.getCompanyColor();
149
- initCodesMap = new Map<CodeEditorLanguages, string>();
150
- languages = signal<LATLanguages>([]);
151
- codingLibTranslations = signal<{ [key: string]: string }>({});
152
- rawLanguages: ProgrammingLanguage[] = [];
153
- currentLanguage?: string;
154
- isSQL = false;
155
- isLAT = true;
156
- code = '';
157
- codingTestResults?: CodingTestsResultsModel;
158
- testResultsLoading = computed(() => this.codingTestService.isTestResultsLoading());
159
- exampleTestCases: ExampleTestCase[] = [];
160
- activeGuidedTourId$ = this.codingTestTourService.activeGuidedTourId$;
161
- firstTestRunComplete = false;
162
- canopyUiTheme: ApplicationTheme = 'light';
163
-
164
- private wasTourShown = false;
165
-
166
- ngOnDestroy(): void {
167
- if (!this.test?.is_preview_mode) {
168
- this.antiCheatingConfigurationChanged.emit({
169
- fullscreenTracking: false,
170
- mouseEventTracking: false,
171
- snapshotsTracking: false,
172
- });
173
- }
174
-
175
- this.subscription.unsubscribe();
176
- }
177
-
178
- ngOnInit() {
179
- this.setupState();
180
- this.handleGuidedTour();
181
-
182
- if (!this.test?.is_preview_mode) {
183
- this.antiCheatingConfigurationChanged.emit({
184
- fullscreenTracking: true,
185
- mouseEventTracking: true,
186
- snapshotsTracking: true,
187
- });
188
-
189
- this.setupAutosaveEvent();
190
- }
191
-
192
- const isNextQuestionDisabled = !this.test?.is_preview_mode;
193
-
194
- this.configurationStateChanged.emit({
195
- isSavingQuestionDisabled: isNextQuestionDisabled,
196
- });
197
-
198
- this.navigationButtonStateChanged.emit({
199
- disabled: isNextQuestionDisabled,
200
- });
201
-
202
- this.subscription.add(
203
- this.expirationObservable?.subscribe(() => {
204
- this.clearSavedCode();
205
- if (!this.test?.is_preview_mode) {
206
- this.clearLastLanguageSelected();
207
- this.submitCode();
208
- this.enableNextButton();
209
- }
210
- })
211
- );
212
-
213
- this.subscription.add(
214
- this.completeObservable?.subscribe(() => {
215
- if (!this.test?.is_preview_mode) {
216
- this.openSaveDialog();
217
- } else {
218
- this.clearSavedCode();
219
- }
220
- })
221
- );
222
-
223
- if (!this.isSQL) {
224
- this.loadAvailableLanguages();
225
- this.setTestCases();
226
- } else {
227
- this.setSqlTestCases();
228
- this.setSqlLang();
229
- this.setSqlInitCode();
230
- this.loadingStateChanged.emit(false);
231
- }
232
- this.setListeners();
233
- }
234
-
235
- openSaveDialog(): void {
236
- const dialogRef = this.dialogService.open(ConfirmDialogComponent, {
237
- applicationTheme: this.canopyUiTheme,
238
- size: 'small',
239
- panelClass: '',
240
- extraData: {
241
- title: translate('CODING_QUESTION.MODALS.FINISH_TEST.TITLE') ?? '',
242
- message: translate('CODING_QUESTION.MODALS.FINISH_TEST.MESSAGE') ?? '',
243
- confirmButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.SUBMIT') ?? '',
244
- cancelButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.CANCEL') ?? '',
245
- color: this.companyColor,
246
- },
247
- });
248
-
249
- dialogRef.afterClosed().subscribe(result => {
250
- if (!result) {
251
- return;
252
- }
253
-
254
- this.clearSavedCode();
255
- this.clearLastLanguageSelected();
256
- this.submitCode();
257
- this.enableNextButton();
258
- });
259
- }
260
-
261
- private clearLastLanguageSelected(): void {
262
- this.libCodingTestService.clearLastLanguageSelected();
263
- }
264
-
265
- private clearSavedCode() {
266
- this.libCodingTestService.triggerClearSavedCode();
267
- }
268
-
269
- private submitCode() {
270
- if (this.code) {
271
- this.submissionStateChanged?.emit({
272
- text: this.code,
273
- language: this.getVersionedLanguage(),
274
- });
275
- }
276
- }
277
-
278
- private getVersionedLanguage(): string | undefined {
279
- const language = this.currentLanguage;
280
-
281
- if (!language) {
282
- return;
283
- }
284
-
285
- if (this.isSQL) {
286
- return ProgrammingLanguageVersioned.SQLite;
287
- }
288
-
289
- return `${language}-${this.libCodingTestService.getVersion()}`;
290
- }
291
-
292
- private enableNextButton(): void {
293
- this.configurationStateChanged.emit({
294
- isSavingQuestionDisabled: false,
295
- });
296
- }
297
-
298
- languageChange(selectedLangName: CodeEditorLanguages) {
299
- const selectedLang = this.rawLanguages.filter(
300
- language => language.name === selectedLangName
301
- )[0];
302
- this.codingTestService.handleLanguageChangeModal(
303
- this.question.id,
304
- selectedLang,
305
- this.canopyUiTheme,
306
- this.companyColor
307
- );
308
- }
309
-
310
- updateCode(code: string): void {
311
- this.code = code;
312
- }
313
-
314
- runTest(): void {
315
- this.codingTestService.runTest(
316
- this.question.id,
317
- this.code,
318
- this.isLAT,
319
- this.isSQL,
320
- false,
321
- !!this.test.is_preview_mode,
322
- this.question.question_id,
323
- this.test.id,
324
- this.test
325
- );
326
-
327
- if (!this.firstTestRunComplete) {
328
- this.navigationButtonStateChanged.emit({
329
- disabled: false,
330
- });
331
-
332
- this.firstTestRunComplete = true;
333
- }
334
- }
335
-
336
- screenshotPaste(event: PasteData): void {
337
- if (event.type !== 'paste') {
338
- return;
339
- }
340
-
341
- this.codingTestService
342
- .sendCopypasteEvent$(this.code, event.data, this.question.id)
343
- .pipe(take(1))
344
- .subscribe();
345
- }
346
-
347
- private setupAutosaveEvent(): void {
348
- this.subscription.add(
349
- interval(5000)
350
- .pipe(
351
- untilDestroyed(this),
352
- switchMap(() => this.codingTestService.sendAutosaveEvent$(this.code, this.question.id))
353
- )
354
- .subscribe()
355
- );
356
- }
357
-
358
- private setupState(): void {
359
- this.setApiParams();
360
- this.setCodingLibTranslations();
361
- this.setIsSQL();
362
- this.setIsLat();
363
- this.setMode();
364
- }
365
-
366
- private setCodingLibTranslations() {
367
- // TRANSLOCO_SCOPE is passed here to make sure that translation scope is resolved by the library
368
- this.translocoService
369
- .selectTranslateObject(`CODING_LIB`, {}, this.translationScope as string)
370
- .pipe(take(1))
371
- .subscribe(translations => {
372
- this.codingLibTranslations.set(translations);
373
- });
374
- }
375
-
376
- private setApiParams(): void {
377
- const invitationUuid = this.route.snapshot.firstChild?.url[0].path || '';
378
- const contentLanguage = this.assessment?.locale ?? 'en';
379
- const apiUrl = this.codingTestConfigService.getApiUrl();
380
-
381
- this.apiService.setParams(invitationUuid, contentLanguage, ROOT_TRANSLATIONS_SCOPE, apiUrl);
382
- }
383
-
384
- private setIsSQL(): void {
385
- this.isSQL = this.question?.context.code_language === 'sql';
386
- this.codingTestService.setIsSQLTest(this.isSQL);
387
- }
388
-
389
- private setSqlInitCode(): void {
390
- this.initCode = this.question?.context.initial_code;
391
- }
392
-
393
- private setSqlLang(): void {
394
- const sqlLanguage = this.question?.context.code_language as CodeEditorLanguages;
395
- this.languages.set([
396
- {
397
- label: 'nonLAT',
398
- value: sqlLanguage,
399
- },
400
- ]);
401
- this.currentLanguage = sqlLanguage;
402
- }
403
-
404
- private setIsLat(): void {
405
- // todo: add response field if possible ?
406
- // this.isLAT = this.test?.is_language_agnostic_test ?? false;
407
- this.isLAT = !this.isSQL;
408
- }
409
-
410
- private setMode(): void {
411
- this.mode = this.test?.is_preview_mode ? Modes.Preview : Modes.Running;
412
- }
413
-
414
- private listenGuidedTourStart(): void {
415
- this.libCodingTestService.startGuidedTour$.pipe(untilDestroyed(this)).subscribe(() => {
416
- const guidedTourMode = this.test?.is_preview_mode
417
- ? CodingTestTourMode.PracticeQuestion
418
- : CodingTestTourMode.RealQuestion;
419
-
420
- this.codingTestTourService.init(guidedTourMode);
421
- });
422
- }
423
-
424
- private handleGuidedTour() {
425
- if (!this.environmentService.isMobile && !this.wasTourShown && this.test?.is_preview_mode) {
426
- const delayForGuidedTour = 1500;
427
- setTimeout(() => {
428
- this.codingTestTourService.init(CodingTestTourMode.PracticeQuestion);
429
- this.wasTourShown = true;
430
- }, delayForGuidedTour);
431
- }
432
- }
433
-
434
- private getAllLanguages(): ProgrammingLanguage[] {
435
- const boilerplates = this.question?.context.boilerplates ?? [];
436
- return boilerplates.map(({ programming_language }) => programming_language);
437
- }
438
-
439
- private loadAvailableLanguages(): void {
440
- this.candidatureApiService
441
- .getAvailableLanguages$()
442
- .pipe(
443
- take(1),
444
- tap(availableLangsIds => {
445
- const languages = this.getAllLanguages();
446
- const areAllLangsAvailable = availableLangsIds.length === 0;
447
-
448
- this.rawLanguages = areAllLangsAvailable
449
- ? languages
450
- : languages.filter(({ id }) => id !== undefined && availableLangsIds.includes(id));
451
- this.languages.set(
452
- this.rawLanguages.map(language => ({
453
- label:
454
- typeof language.name === 'string' && language.name.length > 0
455
- ? language.name.charAt(0).toUpperCase() + language.name.slice(1)
456
- : 'Unknown',
457
- value: language.name as CodeEditorLanguages,
458
- version: language.version,
459
- }))
460
- );
461
- }),
462
- tap(() => {
463
- this.loadingStateChanged.emit(false);
464
- }),
465
- tap(() => {
466
- const boilerplates = this.question?.context.boilerplates ?? [];
467
- boilerplates.forEach(boilerplate => {
468
- if (boilerplate.programming_language.name) {
469
- this.initCodesMap.set(
470
- boilerplate.programming_language.name as CodeEditorLanguages,
471
- boilerplate.code
472
- );
473
- }
474
- });
475
- }),
476
- switchMap(() => this.libCodingTestService.currentLanguage$),
477
- tap((language: CodeEditorLanguages) => {
478
- const currentLang = this.rawLanguages.find(x => x.name === language);
479
- if (currentLang) {
480
- this.codingTestService.setCurrentLanguageLAT(currentLang);
481
- }
482
- const initCode = this.initCodesMap.get(language);
483
- if (initCode) {
484
- this.initCode = initCode;
485
- this.updateCode(this.initCode);
486
- }
487
- })
488
- )
489
- .subscribe(() => {
490
- this.libCodingTestService.setBoilerplateLoadingStatus(false);
491
- });
492
- }
493
-
494
- private listenThemeChange(): void {
495
- this.libCodingTestService.themeChanged$.pipe(untilDestroyed(this)).subscribe(theme => {
496
- this.canopyUiTheme = theme === Themes.Dark ? 'dark' : 'light';
497
- this.themeChanged.emit(this.canopyUiTheme);
498
- });
499
- }
500
-
501
- private listenFullscreenChange(): void {
502
- this.libCodingTestService.isFullscreen$
503
- .pipe(untilDestroyed(this))
504
- .subscribe(isFullscreen => this.fullscreenChanged.emit(isFullscreen));
505
- }
506
-
507
- private listenDeleteCustomTestCases(): void {
508
- this.codingTestService
509
- .listenDeleteCustomTestCases()
510
- .pipe(untilDestroyed(this))
511
- .subscribe(({ index }) => {
512
- this.codingTestService.handleDeleteTestCaseModal(
513
- index,
514
- this.canopyUiTheme,
515
- this.companyColor
516
- );
517
- });
518
- }
519
-
520
- private listenLanguageChange(): void {
521
- this.libCodingTestService.currentLanguage$
522
- .pipe(untilDestroyed(this))
523
- .subscribe((language: CodeEditorLanguages) => {
524
- this.currentLanguage = language;
525
- const code = this.initCodesMap.get(language);
526
- if (code) {
527
- this.initCode = code;
528
- } else {
529
- this.initCode = '';
530
- console.warn(`No initial code found for language: ${language}`);
531
- }
532
- });
533
- }
534
-
535
- private listenResetCode(): void {
536
- this.codingTestService
537
- .listenCodingTestChanges()
538
- .pipe(untilDestroyed(this))
539
- .subscribe(() => {
540
- this.codingTestService.handleResetCodeModal(this.canopyUiTheme, this.companyColor);
541
- });
542
- }
543
-
544
- private listenTestResults(): void {
545
- this.codingTestService.codingTestResults$.pipe(untilDestroyed(this)).subscribe(results => {
546
- this.codingTestResults = results;
547
- });
548
- }
549
-
550
- private setSqlTestCases(): void {
551
- const testCases = this.question?.context?.sql_testcases.map(testCase => ({
552
- ...testCase,
553
- post_sql: testCase.post_sql || '',
554
- initial_sql: this.question?.context?.initial_sql || '',
555
- })) as SqlTestCase[];
556
- this.codingTestService.setSqlTestCases(testCases);
557
- this.exampleTestCases = testCases.map(this.codingTestService.transformToExampleSQLTestCase);
558
- }
559
-
560
- private setTestCases(): void {
561
- this.exampleTestCases = this.question?.context?.testcases?.map(
562
- this.codingTestService.transformToExampleLATtestCase
563
- );
564
- }
565
-
566
- private setListeners(): void {
567
- this.listenGuidedTourStart();
568
- this.listenFullscreenChange();
569
- this.listenThemeChange();
570
- this.listenResetCode();
571
- this.codingTestService.trackConfigChanged(!!this.test?.is_preview_mode);
572
- this.listenTestResults();
573
- if (this.isLAT) {
574
- this.listenDeleteCustomTestCases();
575
- this.listenLanguageChange();
576
- }
577
- }
578
- }
@@ -1,26 +0,0 @@
1
- /**
2
- * Configuration interface for the TGO Coding Test library.
3
- *
4
- * This interface defines the runtime configuration that must be provided
5
- * by the consuming application. The library does not hold environment
6
- * variables itself; instead, it receives them from the host application
7
- * through dependency injection.
8
- */
9
- export interface TgoCodingTestConfig {
10
- /**
11
- * The base URL for the main API endpoint.
12
- * This is required for the library to communicate with the main API service.
13
- *
14
- * Example: 'https://api-talent-staging.testgorilla.com/api/'
15
- */
16
- apiUrl: string;
17
-
18
- /**
19
- * The base URL for the CodeRunner V2 API endpoint.
20
- * This is required for the library to communicate with the code execution service.
21
- *
22
- * Example: 'https://cr-v2-staging.testgorilla.com'
23
- */
24
- coderunnerV2Endpoint: string;
25
- }
26
-
@@ -1,21 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { TgoCodingTestConfig } from './tgo-coding-test.config';
3
-
4
- /**
5
- * Injection token for the TGO Coding Test library configuration.
6
- *
7
- * This token is used to inject the runtime configuration provided
8
- * by the consuming application into library services.
9
- */
10
- export const TGO_CODING_TEST_CONFIG = new InjectionToken<TgoCodingTestConfig>(
11
- 'TGO_CODING_TEST_CONFIG',
12
- {
13
- providedIn: 'root',
14
- factory: () => {
15
- throw new Error(
16
- 'TGO_CODING_TEST_CONFIG must be provided. Use provideTgoCodingTest() in your app.config.ts or component providers.'
17
- );
18
- },
19
- }
20
- );
21
-
File without changes
@@ -1,51 +0,0 @@
1
- import { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';
2
- import { Config } from './configs';
3
- import { CustomTestCase, ExampleTestCase } from './test-cases';
4
-
5
- export type TestData = {
6
- code: {
7
- [key in CodeEditorLanguages]?: string;
8
- };
9
- testCasesLAT?: (CustomTestCase | ExampleTestCase)[];
10
- lastModified?: number; // timestamp when this entry was last modified
11
- };
12
-
13
- // For v2 schema
14
- export type QuestionData = {
15
- preview?: TestData;
16
- actual?: TestData;
17
- lastModified?: number;
18
- };
19
-
20
- // Version 1 schema - original
21
- export type AutoSavedDataV1 = {
22
- config: Config;
23
- isFullscreen: boolean;
24
- assessments: {
25
- [key: string]: TestData;
26
- };
27
- lastLanguageLAT?: {
28
- value: CodeEditorLanguages;
29
- version: string;
30
- };
31
- };
32
-
33
- // Version 2 schema - separated by questionId
34
- export type AutoSavedDataV2 = {
35
- version: 2;
36
- config: Config;
37
- isFullscreen: boolean;
38
- assessments: {
39
- [assessmentId: string]: {
40
- [questionId: string]: QuestionData;
41
- };
42
- };
43
- lastLanguageLAT?: {
44
- value: CodeEditorLanguages;
45
- version: string;
46
- } | null;
47
- lastModified: number;
48
- };
49
-
50
- // Current version
51
- export type AutoSavedData = AutoSavedDataV2;
@@ -1,17 +0,0 @@
1
- export interface CodeEvent {
2
- language: string;
3
- code: string;
4
- extra_payload: string;
5
- event_type: CodeEventTypeEnum;
6
- attempt_id: string | null;
7
- question_result_id: number;
8
- }
9
-
10
- export interface CodeEventResponse extends CodeEvent {
11
- id: string;
12
- created_at: string;
13
- updated_at: string;
14
- }
15
-
16
- type CodeEventTypeEnum =
17
- 'AUTOSAVE' | 'SWITCH' | 'COPYPASTE' | 'ATTEMPT';