@testgorilla/tgo-coding-test 1.0.0 → 2.0.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 (353) hide show
  1. package/.eslintrc.json +46 -0
  2. package/jest.config.ts +26 -0
  3. package/ng-package.json +14 -0
  4. package/package.json +15 -31
  5. package/project.json +48 -0
  6. package/{index.d.ts → src/index.ts} +19 -2
  7. package/src/lib/components/.gitkeep +0 -0
  8. package/src/lib/components/code-editor/code-editor.component.html +10 -0
  9. package/src/lib/components/code-editor/code-editor.component.scss +21 -0
  10. package/src/lib/components/code-editor/code-editor.component.spec.ts +136 -0
  11. package/src/lib/components/code-editor/code-editor.component.ts +368 -0
  12. package/src/lib/components/code-editor/code-editor.mocks.ts +28 -0
  13. package/src/lib/components/code-editor/code-editor.service.spec.ts +160 -0
  14. package/src/lib/components/code-editor/code-editor.service.ts +94 -0
  15. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +39 -0
  16. package/src/lib/components/code-editor/helpers/c-helper.ts +51 -0
  17. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +30 -0
  18. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +16 -0
  19. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +24 -0
  20. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +67 -0
  21. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +40 -0
  22. package/src/lib/components/code-editor/helpers/cpp-helper.ts +52 -0
  23. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +42 -0
  24. package/src/lib/components/code-editor/helpers/csharp-helper.ts +55 -0
  25. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +41 -0
  26. package/src/lib/components/code-editor/helpers/go-helper.ts +54 -0
  27. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +41 -0
  28. package/src/lib/components/code-editor/helpers/java-helper.ts +54 -0
  29. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +39 -0
  30. package/src/lib/components/code-editor/helpers/javascript-helper.ts +32 -0
  31. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +41 -0
  32. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +54 -0
  33. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +39 -0
  34. package/src/lib/components/code-editor/helpers/php-helper.ts +32 -0
  35. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +39 -0
  36. package/src/lib/components/code-editor/helpers/python-helper.ts +32 -0
  37. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +39 -0
  38. package/src/lib/components/code-editor/helpers/r-helper.ts +32 -0
  39. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +39 -0
  40. package/src/lib/components/code-editor/helpers/ruby-helper.ts +32 -0
  41. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +41 -0
  42. package/src/lib/components/code-editor/helpers/scala-helper.ts +53 -0
  43. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +87 -0
  44. package/src/lib/components/code-editor/helpers/sql-helper.ts +44 -0
  45. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +40 -0
  46. package/src/lib/components/code-editor/helpers/swift-helper.ts +51 -0
  47. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +40 -0
  48. package/src/lib/components/code-editor/helpers/typescript-helper.ts +52 -0
  49. package/src/lib/components/code-editor/models/code-editor.model.ts +9 -0
  50. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +4 -0
  51. package/src/lib/components/coding-question/coding-question.component.html +78 -0
  52. package/src/lib/components/coding-question/coding-question.component.scss +75 -0
  53. package/src/lib/components/coding-question/coding-question.component.spec.ts +85 -0
  54. package/src/lib/components/coding-question/coding-question.component.ts +101 -0
  55. package/src/lib/components/coding-section/coding-section.component.html +82 -0
  56. package/src/lib/components/coding-section/coding-section.component.scss +64 -0
  57. package/src/lib/components/coding-section/coding-section.component.spec.ts +257 -0
  58. package/src/lib/components/coding-section/coding-section.component.ts +186 -0
  59. package/src/lib/components/coding-test.module.ts +124 -0
  60. package/src/lib/components/common/truncated-text/truncated-text.component.html +6 -0
  61. package/src/lib/components/common/truncated-text/truncated-text.component.scss +18 -0
  62. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +84 -0
  63. package/src/lib/components/common/truncated-text/truncated-text.component.ts +36 -0
  64. package/src/lib/components/configurations/configurations.component.html +57 -0
  65. package/src/lib/components/configurations/configurations.component.scss +42 -0
  66. package/src/lib/components/configurations/configurations.component.spec.ts +186 -0
  67. package/src/lib/components/configurations/configurations.component.ts +97 -0
  68. package/src/lib/components/instructions/instructions.component.html +41 -0
  69. package/src/lib/components/instructions/instructions.component.scss +173 -0
  70. package/src/lib/components/instructions/instructions.component.spec.ts +106 -0
  71. package/src/lib/components/instructions/instructions.component.ts +137 -0
  72. package/src/lib/components/panel/panel.component.html +19 -0
  73. package/src/lib/components/panel/panel.component.scss +41 -0
  74. package/src/lib/components/panel/panel.component.spec.ts +40 -0
  75. package/src/lib/components/panel/panel.component.ts +33 -0
  76. package/src/lib/components/runnable-editor/runnable-editor.component.html +75 -0
  77. package/src/lib/components/runnable-editor/runnable-editor.component.scss +55 -0
  78. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +124 -0
  79. package/src/lib/components/runnable-editor/runnable-editor.component.ts +154 -0
  80. package/src/lib/components/tests/test-cases/test-cases.component.html +135 -0
  81. package/src/lib/components/tests/test-cases/test-cases.component.scss +220 -0
  82. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +401 -0
  83. package/src/lib/components/tests/test-cases/test-cases.component.ts +204 -0
  84. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +94 -0
  85. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +103 -0
  86. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +122 -0
  87. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +101 -0
  88. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +16 -0
  89. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +49 -0
  90. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +22 -0
  91. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +17 -0
  92. package/src/lib/components/tests/test-results.component.html +119 -0
  93. package/src/lib/components/tests/test-results.component.scss +189 -0
  94. package/src/lib/components/tests/test-results.component.spec.ts +140 -0
  95. package/src/lib/components/tests/test-results.component.ts +97 -0
  96. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +96 -0
  97. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +6 -0
  98. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +599 -0
  99. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +278 -0
  100. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +36 -0
  101. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +183 -0
  102. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +883 -0
  103. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +578 -0
  104. package/{lib/config/index.d.ts → src/lib/config/index.ts} +1 -0
  105. package/src/lib/config/tgo-coding-test.config.ts +26 -0
  106. package/{lib/config/tgo-coding-test.provider.d.ts → src/lib/config/tgo-coding-test.provider.ts} +18 -6
  107. package/src/lib/config/tgo-coding-test.token.ts +21 -0
  108. package/src/lib/models/.gitkeep +0 -0
  109. package/src/lib/models/auto-saved-data.ts +51 -0
  110. package/src/lib/models/code-event.ts +17 -0
  111. package/src/lib/models/coderunner-execution-results.ts +58 -0
  112. package/src/lib/models/coding-lib.mocks.ts +246 -0
  113. package/src/lib/models/configs.ts +18 -0
  114. package/src/lib/models/language-change-action.ts +4 -0
  115. package/src/lib/models/lat-languages.ts +12 -0
  116. package/src/lib/models/mixpanel-events.ts +3 -0
  117. package/src/lib/models/mode.ts +5 -0
  118. package/src/lib/models/paste-data.ts +4 -0
  119. package/src/lib/models/programming-language.ts +9 -0
  120. package/src/lib/models/test-cases.ts +74 -0
  121. package/src/lib/models/theme.ts +5 -0
  122. package/src/lib/models/translations.ts +1 -0
  123. package/src/lib/models/view-mode.ts +6 -0
  124. package/{lib/pipes/memoize-func.pipe.d.ts → src/lib/pipes/memoize-func.pipe.ts} +14 -6
  125. package/src/lib/services/.gitkeep +0 -0
  126. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +40 -0
  127. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +15 -0
  128. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +134 -0
  129. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +105 -0
  130. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +161 -0
  131. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +100 -0
  132. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +1524 -0
  133. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +843 -0
  134. package/{lib/services/candidate-coding-test-services/index.d.ts → src/lib/services/candidate-coding-test-services/index.ts} +1 -1
  135. package/src/lib/services/coding-test-config.service.ts +48 -0
  136. package/src/lib/services/configurations.service.mocks.ts +77 -0
  137. package/src/lib/services/configurations.service.spec.ts +79 -0
  138. package/src/lib/services/configurations.service.ts +111 -0
  139. package/src/lib/services/index.ts +0 -0
  140. package/src/lib/services/lib-coding-test.service.spec.ts +265 -0
  141. package/src/lib/services/lib-coding-test.service.ts +157 -0
  142. package/src/lib/services/local-storage.service.mocks.ts +22 -0
  143. package/src/lib/services/storage.service.spec.ts +1119 -0
  144. package/src/lib/services/storage.service.ts +729 -0
  145. package/src/lib/services/test-cases.service.spec.ts +53 -0
  146. package/src/lib/services/test-cases.service.ts +29 -0
  147. package/src/lib/services/theme.service.spec.ts +76 -0
  148. package/src/lib/services/theme.service.ts +34 -0
  149. package/src/lib/styles/mixins.scss +86 -0
  150. package/src/lib/styles/styles.scss +112 -0
  151. package/src/lib/styles/variables.scss +105 -0
  152. package/src/lib/utils/.gitkeep +0 -0
  153. package/src/lib/utils/additional-languages/erlang.ts +115 -0
  154. package/src/lib/utils/resize-element.ts +15 -0
  155. package/src/lib/utils/time-to-ms.util.ts +10 -0
  156. package/src/test-setup.ts +3 -0
  157. package/tsconfig.json +19 -0
  158. package/tsconfig.lib.json +19 -0
  159. package/tsconfig.lib.prod.json +10 -0
  160. package/tsconfig.spec.json +17 -0
  161. package/esm2022/index.mjs +0 -12
  162. package/esm2022/lib/components/code-editor/code-editor.component.mjs +0 -335
  163. package/esm2022/lib/components/code-editor/code-editor.service.mjs +0 -72
  164. package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +0 -40
  165. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +0 -11
  166. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +0 -2
  167. package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +0 -41
  168. package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +0 -42
  169. package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +0 -42
  170. package/esm2022/lib/components/code-editor/helpers/index.mjs +0 -16
  171. package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +0 -42
  172. package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +0 -26
  173. package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +0 -42
  174. package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +0 -26
  175. package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +0 -26
  176. package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +0 -26
  177. package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +0 -26
  178. package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +0 -41
  179. package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +0 -34
  180. package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +0 -40
  181. package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +0 -41
  182. package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +0 -2
  183. package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +0 -2
  184. package/esm2022/lib/components/coding-question/coding-question.component.mjs +0 -126
  185. package/esm2022/lib/components/coding-section/coding-section.component.mjs +0 -188
  186. package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +0 -38
  187. package/esm2022/lib/components/configurations/configurations.component.mjs +0 -97
  188. package/esm2022/lib/components/instructions/instructions.component.mjs +0 -139
  189. package/esm2022/lib/components/panel/panel.component.mjs +0 -34
  190. package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +0 -169
  191. package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +0 -198
  192. package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +0 -96
  193. package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +0 -21
  194. package/esm2022/lib/components/tests/test-results.component.mjs +0 -127
  195. package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +0 -280
  196. package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +0 -476
  197. package/esm2022/lib/config/index.mjs +0 -2
  198. package/esm2022/lib/config/tgo-coding-test.config.mjs +0 -2
  199. package/esm2022/lib/config/tgo-coding-test.provider.mjs +0 -34
  200. package/esm2022/lib/config/tgo-coding-test.token.mjs +0 -14
  201. package/esm2022/lib/models/auto-saved-data.mjs +0 -2
  202. package/esm2022/lib/models/code-event.mjs +0 -2
  203. package/esm2022/lib/models/coderunner-execution-results.mjs +0 -2
  204. package/esm2022/lib/models/configs.mjs +0 -2
  205. package/esm2022/lib/models/language-change-action.mjs +0 -2
  206. package/esm2022/lib/models/lat-languages.mjs +0 -3
  207. package/esm2022/lib/models/mixpanel-events.mjs +0 -2
  208. package/esm2022/lib/models/mode.mjs +0 -2
  209. package/esm2022/lib/models/paste-data.mjs +0 -2
  210. package/esm2022/lib/models/programming-language.mjs +0 -2
  211. package/esm2022/lib/models/test-cases.mjs +0 -7
  212. package/esm2022/lib/models/theme.mjs +0 -2
  213. package/esm2022/lib/models/translations.mjs +0 -2
  214. package/esm2022/lib/models/view-mode.mjs +0 -8
  215. package/esm2022/lib/pipes/memoize-func.pipe.mjs +0 -39
  216. package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +0 -19
  217. package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +0 -58
  218. package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +0 -89
  219. package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +0 -490
  220. package/esm2022/lib/services/candidate-coding-test-services/index.mjs +0 -5
  221. package/esm2022/lib/services/coding-test-config.service.mjs +0 -51
  222. package/esm2022/lib/services/configurations.service.mjs +0 -89
  223. package/esm2022/lib/services/lib-coding-test.service.mjs +0 -106
  224. package/esm2022/lib/services/storage.service.mjs +0 -624
  225. package/esm2022/lib/services/test-cases.service.mjs +0 -30
  226. package/esm2022/lib/services/theme.service.mjs +0 -36
  227. package/esm2022/lib/utils/additional-languages/erlang.mjs +0 -103
  228. package/esm2022/lib/utils/resize-element.mjs +0 -13
  229. package/esm2022/lib/utils/time-to-ms.util.mjs +0 -11
  230. package/esm2022/shared/index.mjs +0 -5
  231. package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +0 -114
  232. package/esm2022/shared/lib/components/audio-animation/index.mjs +0 -2
  233. package/esm2022/shared/lib/components/index.mjs +0 -3
  234. package/esm2022/shared/lib/components/vimeo-video/index.mjs +0 -2
  235. package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +0 -101
  236. package/esm2022/shared/lib/models/answer.mjs +0 -2
  237. package/esm2022/shared/lib/models/assessment.mjs +0 -2
  238. package/esm2022/shared/lib/models/environment.mjs +0 -2
  239. package/esm2022/shared/lib/models/index.mjs +0 -9
  240. package/esm2022/shared/lib/models/question-component.mjs +0 -2
  241. package/esm2022/shared/lib/models/question.mjs +0 -2
  242. package/esm2022/shared/lib/models/test.mjs +0 -2
  243. package/esm2022/shared/lib/models/translations.mjs +0 -2
  244. package/esm2022/shared/lib/models/window.mjs +0 -2
  245. package/esm2022/shared/lib/services/api/api.service.mjs +0 -97
  246. package/esm2022/shared/lib/services/api/mocked-api.service.mjs +0 -131
  247. package/esm2022/shared/lib/services/environment/environment.service.mjs +0 -13
  248. package/esm2022/shared/lib/services/index.mjs +0 -10
  249. package/esm2022/shared/lib/services/localization/languages.model.mjs +0 -19
  250. package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +0 -27
  251. package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +0 -11
  252. package/esm2022/shared/lib/services/media/media.service.mjs +0 -129
  253. package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +0 -30
  254. package/esm2022/shared/lib/services/theme/theme.service.mjs +0 -24
  255. package/esm2022/shared/test-mocks/assessment-test.mock.mjs +0 -112
  256. package/esm2022/shared/test-mocks/index.mjs +0 -3
  257. package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +0 -39
  258. package/esm2022/testgorilla-tgo-coding-test.mjs +0 -5
  259. package/fesm2022/testgorilla-tgo-coding-test.mjs +0 -4526
  260. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +0 -1
  261. package/lib/components/code-editor/code-editor.component.d.ts +0 -54
  262. package/lib/components/code-editor/code-editor.service.d.ts +0 -12
  263. package/lib/components/code-editor/helpers/c-helper.d.ts +0 -11
  264. package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +0 -8
  265. package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +0 -62
  266. package/lib/components/code-editor/helpers/cpp-helper.d.ts +0 -11
  267. package/lib/components/code-editor/helpers/csharp-helper.d.ts +0 -12
  268. package/lib/components/code-editor/helpers/go-helper.d.ts +0 -12
  269. package/lib/components/code-editor/helpers/java-helper.d.ts +0 -12
  270. package/lib/components/code-editor/helpers/javascript-helper.d.ts +0 -10
  271. package/lib/components/code-editor/helpers/kotlin-helper.d.ts +0 -12
  272. package/lib/components/code-editor/helpers/php-helper.d.ts +0 -10
  273. package/lib/components/code-editor/helpers/python-helper.d.ts +0 -10
  274. package/lib/components/code-editor/helpers/r-helper.d.ts +0 -10
  275. package/lib/components/code-editor/helpers/ruby-helper.d.ts +0 -10
  276. package/lib/components/code-editor/helpers/scala-helper.d.ts +0 -12
  277. package/lib/components/code-editor/helpers/sql-helper.d.ts +0 -10
  278. package/lib/components/code-editor/helpers/swift-helper.d.ts +0 -11
  279. package/lib/components/code-editor/helpers/typescript-helper.d.ts +0 -11
  280. package/lib/components/code-editor/models/code-editor.model.d.ts +0 -8
  281. package/lib/components/code-editor/models/coding-snapshot.model.d.ts +0 -4
  282. package/lib/components/coding-question/coding-question.component.d.ts +0 -45
  283. package/lib/components/coding-section/coding-section.component.d.ts +0 -52
  284. package/lib/components/common/truncated-text/truncated-text.component.d.ts +0 -13
  285. package/lib/components/configurations/configurations.component.d.ts +0 -40
  286. package/lib/components/instructions/instructions.component.d.ts +0 -48
  287. package/lib/components/panel/panel.component.d.ts +0 -12
  288. package/lib/components/runnable-editor/runnable-editor.component.d.ts +0 -53
  289. package/lib/components/tests/test-cases/test-cases.component.d.ts +0 -46
  290. package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +0 -26
  291. package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +0 -9
  292. package/lib/components/tests/test-results.component.d.ts +0 -33
  293. package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +0 -69
  294. package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +0 -101
  295. package/lib/config/tgo-coding-test.config.d.ts +0 -24
  296. package/lib/config/tgo-coding-test.token.d.ts +0 -9
  297. package/lib/models/auto-saved-data.d.ts +0 -42
  298. package/lib/models/code-event.d.ts +0 -15
  299. package/lib/models/coderunner-execution-results.d.ts +0 -51
  300. package/lib/models/configs.d.ts +0 -15
  301. package/lib/models/language-change-action.d.ts +0 -4
  302. package/lib/models/lat-languages.d.ts +0 -8
  303. package/lib/models/mixpanel-events.d.ts +0 -3
  304. package/lib/models/mode.d.ts +0 -5
  305. package/lib/models/paste-data.d.ts +0 -4
  306. package/lib/models/programming-language.d.ts +0 -8
  307. package/lib/models/test-cases.d.ts +0 -67
  308. package/lib/models/theme.d.ts +0 -4
  309. package/lib/models/translations.d.ts +0 -1
  310. package/lib/models/view-mode.d.ts +0 -6
  311. package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +0 -10
  312. package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +0 -18
  313. package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +0 -22
  314. package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +0 -68
  315. package/lib/services/coding-test-config.service.d.ts +0 -38
  316. package/lib/services/configurations.service.d.ts +0 -37
  317. package/lib/services/lib-coding-test.service.d.ts +0 -69
  318. package/lib/services/storage.service.d.ts +0 -83
  319. package/lib/services/test-cases.service.d.ts +0 -12
  320. package/lib/services/theme.service.d.ts +0 -17
  321. package/lib/utils/additional-languages/erlang.d.ts +0 -37
  322. package/lib/utils/resize-element.d.ts +0 -2
  323. package/lib/utils/time-to-ms.util.d.ts +0 -1
  324. package/shared/index.d.ts +0 -4
  325. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +0 -27
  326. package/shared/lib/components/audio-animation/index.d.ts +0 -1
  327. package/shared/lib/components/index.d.ts +0 -2
  328. package/shared/lib/components/vimeo-video/index.d.ts +0 -1
  329. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +0 -24
  330. package/shared/lib/models/answer.d.ts +0 -17
  331. package/shared/lib/models/assessment.d.ts +0 -80
  332. package/shared/lib/models/environment.d.ts +0 -1
  333. package/shared/lib/models/index.d.ts +0 -8
  334. package/shared/lib/models/question-component.d.ts +0 -54
  335. package/shared/lib/models/question.d.ts +0 -102
  336. package/shared/lib/models/test.d.ts +0 -81
  337. package/shared/lib/models/translations.d.ts +0 -1
  338. package/shared/lib/models/window.d.ts +0 -6
  339. package/shared/lib/services/api/api.service.d.ts +0 -25
  340. package/shared/lib/services/api/mocked-api.service.d.ts +0 -35
  341. package/shared/lib/services/environment/environment.service.d.ts +0 -6
  342. package/shared/lib/services/index.d.ts +0 -9
  343. package/shared/lib/services/localization/languages.model.d.ts +0 -15
  344. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +0 -11
  345. package/shared/lib/services/localization/transloco-testing.module.d.ts +0 -2
  346. package/shared/lib/services/media/media.service.d.ts +0 -29
  347. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +0 -10
  348. package/shared/lib/services/theme/theme.service.d.ts +0 -8
  349. package/shared/test-mocks/assessment-test.mock.d.ts +0 -21
  350. package/shared/test-mocks/index.d.ts +0 -2
  351. package/shared/test-mocks/tgo-ui.mock.d.ts +0 -21
  352. /package/{assets → src/assets}/i18n/en.json +0 -0
  353. /package/{lib/components/code-editor/helpers/index.d.ts → src/lib/components/code-editor/helpers/index.ts} +0 -0
@@ -0,0 +1,578 @@
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,2 +1,3 @@
1
1
  export { TgoCodingTestConfig } from './tgo-coding-test.config';
2
2
  export { provideTgoCodingTest } from './tgo-coding-test.provider';
3
+
@@ -0,0 +1,26 @@
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,19 +1,21 @@
1
- import { EnvironmentProviders } from '@angular/core';
1
+ import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';
2
+ import { TGO_CODING_TEST_CONFIG } from './tgo-coding-test.token';
2
3
  import { TgoCodingTestConfig } from './tgo-coding-test.config';
4
+
3
5
  /**
4
6
  * Provides the TGO Coding Test library configuration.
5
- *
7
+ *
6
8
  * This function should be called in the consuming application's
7
9
  * app.config.ts (for standalone apps) or module providers.
8
- *
10
+ *
9
11
  * @param config - The configuration object containing required settings
10
12
  * @returns EnvironmentProviders that can be added to the application providers
11
- *
13
+ *
12
14
  * @example
13
15
  * ```typescript
14
16
  * import { provideTgoCodingTest } from '@testgorilla/tgo-coding-test';
15
17
  * import { environment } from './environments/environment';
16
- *
18
+ *
17
19
  * export const appConfig: ApplicationConfig = {
18
20
  * providers: [
19
21
  * provideTgoCodingTest({
@@ -23,4 +25,14 @@ import { TgoCodingTestConfig } from './tgo-coding-test.config';
23
25
  * };
24
26
  * ```
25
27
  */
26
- export declare function provideTgoCodingTest(config: TgoCodingTestConfig): EnvironmentProviders;
28
+ export function provideTgoCodingTest(
29
+ config: TgoCodingTestConfig
30
+ ): EnvironmentProviders {
31
+ return makeEnvironmentProviders([
32
+ {
33
+ provide: TGO_CODING_TEST_CONFIG,
34
+ useValue: config,
35
+ },
36
+ ]);
37
+ }
38
+
@@ -0,0 +1,21 @@
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