Skip to content
Snippets Groups Projects
Commit 05b31c69 authored by Remco Tukker's avatar Remco Tukker
Browse files

improved the survey management frontend to deal with failures and longer...

improved the survey management frontend to deal with failures and longer running api calls such as publish
parent f63aec60
No related branches found
No related tags found
1 merge request!77Feature/comp 276 publisher v2
This commit is part of merge request !77. Comments created here will be created in the context of that merge request.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
...@@ -5,25 +5,12 @@ ...@@ -5,25 +5,12 @@
*/ */
/*! /*!
* Signature Pad v2.3.2 * Signature Pad v4.1.6 | https://github.com/szimek/signature_pad
* https://github.com/szimek/signature_pad * (c) 2023 Szymon Nowak | Released under the MIT license
*
* Copyright 2017 Szymon Nowak
* Released under the MIT license
*
* The main idea and some parts of the code (e.g. drawing variable width Bézier curve) are taken from:
* http://corner.squareup.com/2012/07/smoother-signatures.html
*
* Implementation of interpolation using cubic Bézier curves is taken from:
* http://benknowscode.wordpress.com/2012/09/14/path-interpolation-using-cubic-bezier-and-control-point-estimation-in-javascript
*
* Algorithm for approximated length of a Bézier curve is taken from:
* http://www.lemoda.net/maths/bezier-length/index.html
*
*/ */
/*! /*!
* surveyjs - Survey JavaScript library v1.9.90 * surveyjs - Survey JavaScript library v1.9.103
* Copyright (c) 2015-2023 Devsoft Baltic OÜ - http://surveyjs.io/ * Copyright (c) 2015-2023 Devsoft Baltic OÜ - http://surveyjs.io/
* License: MIT (http://www.opensource.org/licenses/mit-license.php) * License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/ */
...@@ -52,6 +39,8 @@ ...@@ -52,6 +39,8 @@
/*! ../../dragdrop/core */ /*! ../../dragdrop/core */
/*! ../../dragdrop/ranking-select-to-rank */
/*! ../../dropdownListModel */ /*! ../../dropdownListModel */
/*! ../../dropdownMultiSelectListModel */ /*! ../../dropdownMultiSelectListModel */
...@@ -182,6 +171,8 @@ ...@@ -182,6 +171,8 @@
/*! ../../survey-error */ /*! ../../survey-error */
/*! ../../survey-events-api */
/*! ../../surveyProgress */ /*! ../../surveyProgress */
/*! ../../surveyProgressButtons */ /*! ../../surveyProgressButtons */
...@@ -200,6 +191,8 @@ ...@@ -200,6 +191,8 @@
/*! ../../textPreProcessor */ /*! ../../textPreProcessor */
/*! ../../themes */
/*! ../../trigger */ /*! ../../trigger */
/*! ../../utils/cssClassBuilder */ /*! ../../utils/cssClassBuilder */
...@@ -488,6 +481,8 @@ ...@@ -488,6 +481,8 @@
/*! ./conditionsParser */ /*! ./conditionsParser */
/*! ./console-warnings */
/*! ./container */ /*! ./container */
/*! ./core */ /*! ./core */
...@@ -514,6 +509,8 @@ ...@@ -514,6 +509,8 @@
/*! ./dragdrop/ranking-choices */ /*! ./dragdrop/ranking-choices */
/*! ./dragdrop/ranking-select-to-rank */
/*! ./dropdown-base */ /*! ./dropdown-base */
/*! ./dropdown-item */ /*! ./dropdown-item */
...@@ -602,6 +599,10 @@ ...@@ -602,6 +599,10 @@
/*! ./questionnonvalue */ /*! ./questionnonvalue */
/*! ./ranking-choices */
/*! ./rating-item */
/*! ./react-ui-model */ /*! ./react-ui-model */
/*! ./reactSurvey */ /*! ./reactSurvey */
...@@ -696,6 +697,8 @@ ...@@ -696,6 +697,8 @@
/*! exports provided: ConditionsParserError, ConditionsParser */ /*! exports provided: ConditionsParserError, ConditionsParser */
/*! exports provided: ConsoleWarnings */
/*! exports provided: CssClassBuilder */ /*! exports provided: CssClassBuilder */
/*! exports provided: DefaultTitleModel */ /*! exports provided: DefaultTitleModel */
...@@ -716,6 +719,8 @@ ...@@ -716,6 +719,8 @@
/*! exports provided: DragDropRankingChoices */ /*! exports provided: DragDropRankingChoices */
/*! exports provided: DragDropRankingSelectToRank */
/*! exports provided: DragOrClickHelper */ /*! exports provided: DragOrClickHelper */
/*! exports provided: DropdownListModel */ /*! exports provided: DropdownListModel */
...@@ -814,7 +819,7 @@ ...@@ -814,7 +819,7 @@
/*! exports provided: QuestionMatrixBaseModel */ /*! exports provided: QuestionMatrixBaseModel */
/*! exports provided: QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable */ /*! exports provided: QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedErrorRow, QuestionMatrixDropdownRenderedTable */
/*! exports provided: QuestionNonValue */ /*! exports provided: QuestionNonValue */
...@@ -834,7 +839,7 @@ ...@@ -834,7 +839,7 @@
/*! exports provided: QuestionTextModel */ /*! exports provided: QuestionTextModel */
/*! exports provided: RatingItem */ /*! exports provided: RatingItemBase, RatingItem */
/*! exports provided: RatingItemSmiley */ /*! exports provided: RatingItemSmiley */
...@@ -950,7 +955,7 @@ ...@@ -950,7 +955,7 @@
/*! exports provided: SurveyQuestionMatrixDropdown */ /*! exports provided: SurveyQuestionMatrixDropdown */
/*! exports provided: SurveyQuestionMatrixDropdownBase, SurveyQuestionMatrixDropdownCell */ /*! exports provided: SurveyQuestionMatrixDropdownBase, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdownErrorCell */
/*! exports provided: SurveyQuestionMatrixDynamic, SurveyQuestionMatrixDynamicAddButton */ /*! exports provided: SurveyQuestionMatrixDynamic, SurveyQuestionMatrixDynamicAddButton */
...@@ -1018,13 +1023,13 @@ ...@@ -1018,13 +1023,13 @@
/*! exports provided: ValidatorResult, SurveyValidator, ValidatorRunner, NumericValidator, TextValidator, AnswerCountValidator, RegexValidator, EmailValidator, ExpressionValidator */ /*! exports provided: ValidatorResult, SurveyValidator, ValidatorRunner, NumericValidator, TextValidator, AnswerCountValidator, RegexValidator, EmailValidator, ExpressionValidator */
/*! exports provided: Version, checkLibraryVersion, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, createTOCListModel, getTocRootCss, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices */ /*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank */
/*! exports provided: Version, checkLibraryVersion, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, createTOCListModel, getTocRootCss, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, BaseAction, Action, ActionDropdownViewModel, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, TooltipManager, DragOrClickHelper */ /*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, TooltipManager, DragOrClickHelper */
/*! exports provided: Version, checkLibraryVersion, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, createTOCListModel, getTocRootCss, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, BaseAction, Action, ActionDropdownViewModel, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, TooltipManager, DragOrClickHelper, Model */ /*! exports provided: Version, ReleaseDate, checkLibraryVersion, setLicenseKey, hasLicense, settings, Helpers, AnswerCountValidator, EmailValidator, NumericValidator, RegexValidator, SurveyValidator, TextValidator, ValidatorResult, ExpressionValidator, ValidatorRunner, ItemValue, Base, Event, EventBase, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, CalculatedValue, CustomError, AnswerRequiredError, OneAnswerRequiredError, RequreNumericError, ExceedSizeError, LocalizableString, LocalizableStrings, HtmlConditionItem, UrlConditionItem, ChoicesRestful, ChoicesRestfull, FunctionFactory, registerFunction, ConditionRunner, ExpressionRunner, ExpressionExecutor, Operand, Const, BinaryOperand, Variable, FunctionOperand, ArrayOperand, UnaryOperand, ConditionsParser, ProcessValue, JsonError, JsonIncorrectTypeError, JsonMetadata, JsonMetadataClass, JsonMissingTypeError, JsonMissingTypeErrorBase, JsonObject, JsonObjectProperty, JsonRequiredPropertyError, JsonUnknownPropertyError, Serializer, property, propertyArray, MatrixDropdownCell, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, QuestionMatrixBaseModel, MultipleTextItemModel, QuestionMultipleTextModel, MultipleTextEditorModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, Question, QuestionNonValue, QuestionEmptyModel, QuestionCheckboxBase, QuestionSelectBase, QuestionCheckboxModel, QuestionTagboxModel, QuestionRankingModel, QuestionCommentModel, QuestionDropdownModel, QuestionFactory, ElementFactory, QuestionFileModel, QuestionHtmlModel, QuestionRadiogroupModel, QuestionRatingModel, RenderedRatingItem, QuestionExpressionModel, QuestionTextBase, CharacterCounter, QuestionTextModel, QuestionBooleanModel, QuestionImagePickerModel, ImageItemValue, QuestionImageModel, QuestionSignaturePadModel, QuestionPanelDynamicModel, QuestionPanelDynamicItem, SurveyTimer, SurveyTimerModel, tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, PopupSurveyModel, SurveyWindowModel, TextPreProcessor, Notifier, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, MultiSelectListModel, PopupModel, createDialogOptions, PopupBaseViewModel, PopupDropdownViewModel, PopupModalViewModel, createPopupViewModel, createPopupModalViewModel, DropdownListModel, DropdownMultiSelectListModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, IsTouch, _setIsTouch, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, loadFileFromBase64, increaseHeightByContent, createSvg, sanitizeEditableContent, CssClassBuilder, surveyCss, defaultV2Css, defaultV2ThemeName, DragDropCore, DragDropChoices, DragDropRankingSelectToRank, defaultStandardCss, modernCss, SvgIconRegistry, SvgRegistry, SvgBundleViewModel, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, getOriginalEvent, getElement, createDropdownActionModel, createDropdownActionModelAdvanced, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel, AdaptiveActionContainer, defaultActionBarCss, ActionContainer, TooltipManager, DragOrClickHelper, Model */
/*! exports provided: createDropdownActionModel, createDropdownActionModelAdvanced, BaseAction, Action, ActionDropdownViewModel */ /*! exports provided: createDropdownActionModel, createDropdownActionModelAdvanced, getActionDropdownButtonTarget, BaseAction, Action, ActionDropdownViewModel */
/*! exports provided: createPopupModalViewModel, createPopupViewModel */ /*! exports provided: createPopupModalViewModel, createPopupViewModel */
...@@ -1056,9 +1061,9 @@ ...@@ -1056,9 +1061,9 @@
/*! exports provided: surveyTimerFunctions, SurveyTimer */ /*! exports provided: surveyTimerFunctions, SurveyTimer */
/*! exports provided: tryNavigateToPage, createTOCListModel, getTocRootCss */ /*! exports provided: tryNavigateToPage, tryFocusPage, createTOCListModel, getTocRootCss, TOCModel */
/*! exports provided: unwrap, getSize, doKey2ClickBlur, doKey2ClickUp, doKey2ClickDown, sanitizeEditableContent, Logger, mergeValues, getElementWidth, isContainerVisible, classesToSelector, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isShadowDOM, getElement, isElementVisible, findScrollableParent, scrollElementByChildId, navigateToUrl, createSvg, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults, findParentByClassNames */ /*! exports provided: unwrap, getRenderedSize, getRenderedStyleSize, doKey2ClickBlur, doKey2ClickUp, doKey2ClickDown, sanitizeEditableContent, Logger, mergeValues, getElementWidth, isContainerVisible, classesToSelector, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isShadowDOM, getElement, isElementVisible, findScrollableParent, scrollElementByChildId, navigateToUrl, createSvg, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults, findParentByClassNames, getFirstVisibleChild */
/*! no exports provided */ /*! no exports provided */
...@@ -1102,6 +1107,10 @@ ...@@ -1102,6 +1107,10 @@
!*** ./src/survey.ts ***! !*** ./src/survey.ts ***!
\***********************/ \***********************/
/*!***********************!*\
!*** ./src/themes.ts ***!
\***********************/
/*!************************!*\ /*!************************!*\
!*** ./src/helpers.ts ***! !*** ./src/helpers.ts ***!
\************************/ \************************/
...@@ -1306,6 +1315,10 @@ ...@@ -1306,6 +1315,10 @@
!*** ./src/images/V2Check.svg ***! !*** ./src/images/V2Check.svg ***!
\********************************/ \********************************/
/*!********************************!*\
!*** ./src/images/chevron.svg ***!
\********************************/
/*!********************************!*\ /*!********************************!*\
!*** ./src/question_custom.ts ***! !*** ./src/question_custom.ts ***!
\********************************/ \********************************/
...@@ -1334,6 +1347,10 @@ ...@@ -1334,6 +1347,10 @@
!*** ./src/conditionsParser.ts ***! !*** ./src/conditionsParser.ts ***!
\*********************************/ \*********************************/
/*!*********************************!*\
!*** ./src/console-warnings.ts ***!
\*********************************/
/*!*********************************!*\ /*!*********************************!*\
!*** ./src/dragdrop/choices.ts ***! !*** ./src/dragdrop/choices.ts ***!
\*********************************/ \*********************************/
...@@ -1414,6 +1431,10 @@ ...@@ -1414,6 +1431,10 @@
!*** ./src/react/panel-base.tsx ***! !*** ./src/react/panel-base.tsx ***!
\**********************************/ \**********************************/
/*!**********************************!*\
!*** ./src/survey-events-api.ts ***!
\**********************************/
/*!**********************************!*\ /*!**********************************!*\
!*** ./src/template-renderer.ts ***! !*** ./src/template-renderer.ts ***!
\**********************************/ \**********************************/
...@@ -1582,6 +1603,10 @@ ...@@ -1582,6 +1603,10 @@
!*** ./src/entries/core-wo-model.ts ***! !*** ./src/entries/core-wo-model.ts ***!
\**************************************/ \**************************************/
/*!**************************************!*\
!*** ./src/images/NavMenu_24x24.svg ***!
\**************************************/
/*!**************************************!*\ /*!**************************************!*\
!*** ./src/images/V2Check_24x24.svg ***! !*** ./src/images/V2Check_24x24.svg ***!
\**************************************/ \**************************************/
...@@ -1878,6 +1903,10 @@ ...@@ -1878,6 +1903,10 @@
!*** ./src/react/reactquestion_dropdown.tsx ***! !*** ./src/react/reactquestion_dropdown.tsx ***!
\**********************************************/ \**********************************************/
/*!************************************************!*\
!*** ./src/dragdrop/ranking-select-to-rank.ts ***!
\************************************************/
/*!************************************************!*\ /*!************************************************!*\
!*** ./src/question_matrixdropdownrendered.ts ***! !*** ./src/question_matrixdropdownrendered.ts ***!
\************************************************/ \************************************************/
...@@ -1971,12 +2000,12 @@ ...@@ -1971,12 +2000,12 @@
\********************************************************/ \********************************************************/
/*!**********************************************************!*\ /*!**********************************************************!*\
!*** ./src/react/components/rating/rating-item-star.tsx ***! !*** ./node_modules/signature_pad/dist/signature_pad.js ***!
\**********************************************************/ \**********************************************************/
/*!***********************************************************!*\ /*!**********************************************************!*\
!*** ./node_modules/signature_pad/dist/signature_pad.mjs ***! !*** ./src/react/components/rating/rating-item-star.tsx ***!
\***********************************************************/ \**********************************************************/
/*!***********************************************************!*\ /*!***********************************************************!*\
!*** ./src/react/components/survey-header/logo-image.tsx ***! !*** ./src/react/components/survey-header/logo-image.tsx ***!
... ...
......
import React, { useState, useEffect } from "react"; import React, { useState, useEffect, useRef } from "react";
import Accordion from 'react-bootstrap/Accordion'; import Accordion from 'react-bootstrap/Accordion';
import Button from 'react-bootstrap/Button'; import Button from 'react-bootstrap/Button';
import Table from 'react-bootstrap/Table'; import Table from 'react-bootstrap/Table';
import toast, { Toaster } from "react-hot-toast";
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { ResponseStatus, SurveyStatus } from "./Schema"; import { SurveyStatus } from "./Schema";
import { fetchSurveys } from "./api/survey"; import { fetchSurveys } from "./api/survey";
import { Survey } from "./api/types"; import { Survey } from "./api/types";
import { Spinner } from "react-bootstrap";
function ApiCallButton({ text, helpText, onClick, enabled }) {
const [buttonLoading, setButtonLoading] = useState(false);
const handleClick = async () => {
if (buttonLoading) {
return;
}
setButtonLoading(true);
try {
await onClick();
} finally {
setButtonLoading(false);
}
};
return (
<Button onClick={handleClick} disabled={!enabled} style={{ pointerEvents: 'auto', marginLeft: '.5rem' }} title={helpText}>
{buttonLoading && <Spinner as="span" animation="border" size="sm" role="status" aria-hidden="true"/>}
{text}
</Button>
);
}
function SurveyManagementComponent() { function SurveyManagementComponent() {
const [surveys, setSurveys] = useState<Survey[]>([]); const [surveys, setSurveys] = useState<Survey[]>([]);
const surveyStatusUpdating = useRef(false);
useEffect(() => { useEffect(() => {
fetchSurveys().then((surveyList) => { fetchSurveys().then((surveyList) => {
...@@ -16,25 +44,47 @@ function SurveyManagementComponent() { ...@@ -16,25 +44,47 @@ function SurveyManagementComponent() {
}); });
}, []); }, []);
async function newSurvey() { async function apiCall(url, failureToast, successToast) {
await fetch('/api/survey/new', { method: 'POST' }); try {
const response = await fetch(url, { method: 'POST' });
const json = await response.json();
if (!response.ok) {
toast(failureToast + json['message']);
} else {
toast(successToast);
fetchSurveys().then((surveyList) => { fetchSurveys().then((surveyList) => {
setSurveys(surveyList); setSurveys(surveyList);
}); });
} }
} catch(e) {
toast(failureToast + (e as Error).message);
}
}
async function newSurvey() {
await apiCall('/api/survey/new', "Failed creating new survey: ", "Created new survey");
}
async function postSurveyStatus(year, status) { async function postSurveyStatus(year, status) {
await fetch('/api/survey/' + status + '/' + year, { method: 'POST' }); if (surveyStatusUpdating.current) {
fetchSurveys().then((surveyList) => { toast("Wait for status update to be finished...");
setSurveys(surveyList); return;
}); }
surveyStatusUpdating.current = true;
await apiCall(
'/api/survey/' + status + '/' + year,
"Error while updating " + year + " survey status to " + status + ": ",
year + " survey status updated to " + status
);
surveyStatusUpdating.current = false;
} }
async function removeLock(year, nrenName) { async function removeLock(year, nrenName) {
await fetch('/api/response/unlock/' + year + '/' + nrenName, { method: 'POST' }); await apiCall(
fetchSurveys().then((surveyList) => { '/api/response/unlock/' + year + '/' + nrenName,
setSurveys(surveyList); "Error while unlocking " + nrenName + " " + year + " survey response: ",
}); nrenName + " " + year + " survey response unlocked"
);
} }
const newSurveyAllowed = surveys.length > 0 && surveys.every(s => s.status == SurveyStatus.published); const newSurveyAllowed = surveys.length > 0 && surveys.every(s => s.status == SurveyStatus.published);
...@@ -45,6 +95,7 @@ function SurveyManagementComponent() { ...@@ -45,6 +95,7 @@ function SurveyManagementComponent() {
return ( return (
<div> <div>
<Toaster />
<Button onClick={newSurvey} disabled={!newSurveyAllowed} style={{ pointerEvents: 'auto' }} <Button onClick={newSurvey} disabled={!newSurveyAllowed} style={{ pointerEvents: 'auto' }}
title="Create a new survey for the next year. Only possible if all current surveys are published."> title="Create a new survey for the next year. Only possible if all current surveys are published.">
start new survey start new survey
...@@ -63,23 +114,26 @@ function SurveyManagementComponent() { ...@@ -63,23 +114,26 @@ function SurveyManagementComponent() {
title="Open the survey exactly as the nrens will see it, but without any nren data."> title="Open the survey exactly as the nrens will see it, but without any nren data.">
Try Survey Try Survey
</Button> </Button>
{survey.status !== SurveyStatus.published && <ApiCallButton text="Mark as open"
<Button onClick={() => postSurveyStatus(survey.year, 'open')} disabled={survey.status != SurveyStatus.closed} style={{ pointerEvents: 'auto', marginLeft: '.5rem' }} helpText="Allow the NRENs to respond to this survey. Only 1 survey may be open at a time, and (pre)-published surveys cannot be opened anymore."
title="Allow the NRENs to respond to this survey. Only 1 survey may be open at a time, and published surveys cannot be opened anymore."> enabled={survey.status == SurveyStatus.closed}
Mark as Open onClick={() => postSurveyStatus(survey.year, 'open')}
</Button>} />
<Button onClick={() => postSurveyStatus(survey.year, 'close')} disabled={survey.status != SurveyStatus.open} style={{ pointerEvents: 'auto', marginLeft: '.5rem' }} <ApiCallButton text="Mark as closed"
title="Do not allow the NRENs to respond to this survey anymore. Only surveys with status open can be closed."> helpText="Do not allow the NRENs to respond to this survey anymore. Only surveys with status open can be closed."
Mark as closed enabled={survey.status == SurveyStatus.open}
</Button> onClick={() => postSurveyStatus(survey.year, 'close')}
<Button onClick={() => postSurveyStatus(survey.year, 'preview')} disabled={survey.status != SurveyStatus.closed && survey.status != SurveyStatus.preview} style={{ pointerEvents: 'auto', marginLeft: '.5rem' }} />
title="Publish all completed survey responses to the compendium website for preview. This is only possible if the survey is closed or previewed already."> <ApiCallButton text="Preview results"
Preview results helpText="Publish all completed survey responses to the compendium website for preview by admins. This is only possible if the survey is closed or previewed already."
</Button> enabled={survey.status == SurveyStatus.closed || survey.status == SurveyStatus.preview}
<Button onClick={() => postSurveyStatus(survey.year, 'publish')} disabled={survey.status != SurveyStatus.preview && survey.status != SurveyStatus.published} style={{ pointerEvents: 'auto', marginLeft: '.5rem' }} onClick={() => postSurveyStatus(survey.year, 'preview')}
title="Publish or re-publish all completed survey responses to the compendium website. This is only possible if the survey is in preview or published already."> />
Publish results <ApiCallButton text="Publish results"
</Button> helpText="Publish or re-publish all completed survey responses to the compendium website. This is only possible if the survey is in preview or published already."
enabled={survey.status == SurveyStatus.preview || survey.status == SurveyStatus.published}
onClick={() => postSurveyStatus(survey.year, 'publish')}
/>
{survey.status == SurveyStatus.preview && <span>&nbsp; Preview link: <a href={previewLink}>{previewLink}</a></span>} {survey.status == SurveyStatus.preview && <span>&nbsp; Preview link: <a href={previewLink}>{previewLink}</a></span>}
</div> </div>
<Table> <Table>
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment