ModalSurvey.razor 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. @using HyperCube.Models
  2. @using Console = HyperCube.Utils.AdvConsole
  3. <div class="modal" tabindex="-1" role="dialog" style="display:none" id="@elementid">
  4. <div class="modal-container">
  5. <div class="modal__body">
  6. <div class="modal__body__header modal__body__header_noflex">
  7. <div class="modal__qual__header">
  8. <p class="modal__qual__header">Квалификация</p>
  9. </div>
  10. </div>
  11. <div class="modal__body__container modal__body__container_aligncenter">
  12. <div class="modal__body__container__left modal__body__container__left_blackborder">
  13. <p class="modal__qual__info">Здравствуй, @_userName</p>
  14. <p class="modal__qual__info">Что бы участвовать в Цифровом хакатоне вам необходимо ответить на вопросы теста.</p>
  15. <p class="modal__qual__info">Всего вопросов будет @_survey.SurveyItems.Count. И твои ответы сформируют уникальную
  16. матрицу компетенций, которая и определит твою роль в Цифровом хакатоне.</p>
  17. <p class="modal__qual__info">Правила найдешь в библиотеке.</p>
  18. </div>
  19. <div class="modal__body__container__right modal__body__container__right_blackborder">
  20. @if (_survey.SurveyItems.Count > 0)
  21. {
  22. <div class="modal__qual__question">
  23. Вопрос №@_currentQuestionPosition<br>
  24. @_survey.SurveyItems[_currentQuestionID].Text
  25. @foreach (var option in _survey.SurveyItems[_currentQuestionID].SurveyItemOptionsSorted)
  26. {
  27. <div>
  28. @(PositionToLetter(option.Value.Position)): @(option.Value.Text)
  29. </div>
  30. }
  31. </div>
  32. <div class="modal__qual__button">
  33. <div class="modal__qual__button__box">
  34. <button class="modal__qual__button__box__item" @onclick="(() => Answer(1))">А</button>
  35. <button class="modal__qual__button__box__item" @onclick="(() => Answer(2))">Б</button>
  36. <button class="modal__qual__button__box__item" @onclick="(() => Answer(3))">В</button>
  37. </div>
  38. @*<button class="modal__qual__button__item">Не знаю</button>*@
  39. </div>
  40. }
  41. </div>
  42. </div>
  43. </div>
  44. <a class="modal_close" style="cursor:pointer" @onclick="@Close">&#10006;</a>
  45. </div>
  46. </div>
  47. @code {
  48. [Inject]
  49. public IJSRuntime JsRuntime { get; set; }
  50. [Parameter]
  51. public RenderFragment Title { get; set; }
  52. string elementid = "modal_survey";
  53. string _userName = "[UNKNOWN_USERNAME]";
  54. Survey _survey = new();
  55. int _currentQuestionPosition = 1;
  56. int _currentQuestionID = 1;
  57. public async Task Open(string userName, int eventID)
  58. {
  59. _userName = userName;
  60. await _survey.LoadByEventID(eventID);
  61. _currentQuestionID = _survey.SurveyItemsSorted.FirstOrDefault(i => i.Value.Position == _currentQuestionPosition).Key;
  62. await JsRuntime.InvokeVoidAsync("OpenModal", elementid);
  63. }
  64. public void Close() => JsRuntime.InvokeVoidAsync("CloseModal", elementid);
  65. void Answer(int position)
  66. {
  67. _survey.SurveyItems[_currentQuestionID].AnswerID = _survey.SurveyItems[_currentQuestionID].SurveyItemOptionsSorted.FirstOrDefault(o => o.Value.Position == position).Key;
  68. Console.WriteLine($"AnswerID: {_survey.SurveyItems[_currentQuestionID].AnswerID}.");
  69. if (_currentQuestionPosition < _survey.SurveyItems.Count)
  70. {
  71. _currentQuestionPosition++;
  72. _currentQuestionID = _survey.SurveyItemsSorted.FirstOrDefault(i => i.Value.Position == _currentQuestionPosition).Key;
  73. }
  74. else
  75. Close();
  76. }
  77. string PositionToLetter(int position)
  78. {
  79. char character = Char.Parse("А");
  80. return ((char)(position - 1 + character)).ToString();
  81. }
  82. }