{"version":3,"sources":["redux/clients/client.reducer.js","redux/users/user.utils.js","redux/users/user.reducer.js","redux/cohorts/cohort.utils.js","redux/cohorts/cohorts.reducer.js","redux/themes/theme.utils.js","redux/themes/theme.reducer.js","redux/questions/question.utils.js","redux/questions/question.reducer.js","redux/question-groups/question-group.utils.js","redux/question-groups/question-group.reducer.js","redux/surveys/survey.utils.js","redux/surveys/survey.reducer.js","redux/root-reducer.js","redux/store.js","misc/modifiedAxios.js","misc/ErrorNotice.js","pages/V4 Login/LoginV4.js","assets/avatar.svg","assets/analyticswhite.svg","assets/analyticsblue.svg","assets/surveymanagerblue.svg","assets/surveymanagerwhite.svg","assets/taskwhite.svg","assets/taskblue.svg","assets/settingsBlue.svg","assets/settingsWhite.svg","assets/BottomSVGImage.svg","assets/SenseLogoWhite.svg","components/Shared/SideNavBar/sidenavbar.component.jsx","components/Cohort-Components/cohortItemName/cohortitemname.component.jsx","components/Cohort-Components/CohortItem/cohortitem.component.jsx","components/Cohort-Components/CreateCohortModal/create-cohort-modal.component.jsx","components/Cohort-Components/CohortSelection/cohort-selection.component.jsx","components/Cohort-Components/EditCohortModal/edit-cohort-modal.component.jsx","components/Shared/ApiTable/api-table.component.jsx","components/Cohort-Components/CohortDisplay/cohort-display.component.jsx","pages/Cohorts/cohorts.component.jsx","components/Question-Components/CreateQuestionModal/likert-question/likert-question.component.jsx","assets/addcirclebutton.svg","assets/trashicon.svg","components/Question-Components/CreateQuestionModal/choice-question/choice-questions.component.jsx","components/Question-Components/CreateQuestionModal/grid-question/grid-questions.component.jsx","components/Question-Components/CreateQuestionModal/grid-likert-question/grid-likert-questions.component.jsx","misc/ConfirmPopUp.js","components/Question-Components/CreateQuestionModal/create-question-modal.component.jsx","components/Question-Components/EditQuestionModal/edit-likert-question/edit-likert-question.component.jsx","components/Question-Components/EditQuestionModal/edit-choice-question/edit-choice-questions.component.jsx","components/Question-Components/EditQuestionModal/edit-grid-question/edit-grid-questions.component.jsx","components/Question-Components/EditQuestionModal/edit-grid-likert-question/edit-grid-likert-questions.component.jsx","components/Question-Components/EditQuestionModal/edit-question-modal.component.jsx","components/Question-Components/QuestionTable/column-filter.component.jsx","components/Question-Components/QuestionTable/question-table.component.jsx","components/Theme-Components/CreateThemeModal/create-theme-modal.component.jsx","components/Theme-Components/SubthemeItem/subtheme-item.component.jsx","components/Theme-Components/CreateSubthemeModal/create-subtheme-modal.component.jsx","components/Theme-Components/EditSubthemeModal/edit-subtheme-modal-component.jsx","components/Theme-Components/EditThemeModal/edit-theme-modal-component.jsx","components/Theme-Components/Subthemes/subthemes.component.jsx","components/Theme-Components/ThemeDisplay/theme-display.component.jsx","components/Question-Group-Components/QuestionGroupTable/question-group-table.component.jsx","assets/editicon.svg","assets/Frame.svg","components/QM-Components/ThemeSelectItem/ChildThemeSelectItem/child-themeselect-item.component.jsx","components/QM-Components/ThemeSelectItem/themeselect-item.component.jsx","components/QM-Components/ThemeSelectItem/all-questions-item.component copy.jsx","components/QM-Components/ThemeSelection/theme-selection.component.jsx","components/QM-Components/ThemeQuestionTable/column-filter.component.jsx","components/QM-Components/ThemeQuestionTable/q-type-dropdown-filter.component.jsx","components/QM-Components/ThemeQuestionTable/theme.dropdown.component.jsx","components/QM-Components/ThemeQuestionTable/subtheme.dropdown.component.jsx","components/QM-Components/ThemeQuestionTable/reverse-coded.dropdown.component.jsx","assets/trashDisabled.svg","assets/editiconDisabled.svg","components/QM-Components/ThemeQuestionTable/theme-question-table.component.jsx","components/QM-Components/ThemeQuestionsDisplay/theme-questions-display.component.jsx","pages/QM/qm.component.jsx","assets/dndicon.svg","components/Survey-Components/CreateSurveyQuestions/create-survey-question-modal.component.jsx","components/Survey-Components/CreateSurveyModal/AddQuestionsModal/survey-question-table.component.jsx","components/Survey-Components/CreateSurveyModal/AddQuestionsModal/add-questions-modal-component.jsx","assets/dropdownicon.svg","components/Survey-Components/CreateSurveyModal/ViewQuestionsTable/view-questions-table.component.jsx","assets/copybutton.svg","assets/dropdowniconUP.svg","assets/movesection.svg","assets/drilldownicon.svg","assets/branchingicon.svg","components/Survey-Components/CreateSurveyModal/Section/Section Questions/SectionQuestion/section-question-component.jsx","components/Survey-Components/CreateSurveyModal/Section/section-component.jsx","components/Survey-Components/CreateSurveyModal/create-survey-modal-component.jsx","components/Survey-Components/EditSurveyModal/AddInEditQuestionsModal/survey-in-edit-question-table.component.jsx","components/Survey-Components/EditSurveyModal/AddInEditQuestionsModal/add-in-questions-modal-component.jsx","components/Survey-Components/EditSurveyModal/ViewSection/ViewSectionQuestions/ViewSectionQuestion/view-section-question-component.jsx","components/Survey-Components/EditSurveyModal/ViewSection/view-section-component.jsx","components/Survey-Components/EditSurveyModal/edit-survey-modal-component.jsx","components/Survey-Components/SurveyTable/survey-status-dropdown-filter.component.jsx","components/Survey-Components/SurveyTable/survey-table.component.jsx","components/Survey-Components/SurveyURLModal/survey-url-modal-component.jsx","components/Survey-Components/SurveyDisplay/survey-display.component.jsx","pages/SurveyScheduleBuilder/survey-schedule-builder.component.jsx","assets/EmpirisysSenseLogo.svg","misc/FormDisclaimer.js","assets/SCISLogo.svg","misc/ErrorPopUp.js","assets/SenseLogoNavy.svg","misc/ErrorPageNotFound.js","components/Form/Questions/LinkertQuestion/LinkertQuestion.js","components/Form/Questions/GridLikertQuestion/GridLikertQuestion.js","components/Form/Questions/OpenQuestion/OpenQuestion.js","components/Form/Questions/DropdownQuestion/DropdownQuestion.js","components/Form/Questions/MCQGridQuestion/MCQGridQuestion.js","components/Form/Questions/MCQQuestion/MCQQuestion.js","components/Form/Questions/CheckboxQuestion/CheckboxQuestion.js","misc/ClearSurveyWarningPopUp.js","pages/Form/FormSection/Form-Section.component.jsx","pages/Form/Form.js","pages/Organisations/organisation-table.component.jsx","pages/Organisations/OrganisationCreateModal/create-organisation-modal.component.jsx","pages/Organisations/OrganisationEditModal/edit-organisation-modal-component.jsx","pages/Organisations/OrganisationDisplay/organisation-display.component.jsx","pages/Organisations/tab-switch-organisations.component.jsx","pages/Organisations/Organisations.jsx","pages/testarea.jsx","App.js","index.js"],"names":["INITIAL_STATE","clientId","clientReducer","state","action","type","cohorts","payload","updateOrganisation","organisations","editedOrganisation","find","organisation","id","map","removeOrganisation","removedOrganisation","existingOrganisation","filter","user","organisationId","defaultOrg","selectedOrg","userReducer","updateCohortDetails","editedCohort","cohort","cohort_name","cohort_desc","removeCohort","removedCohort","existingCohort","theme","selectedCohort","created_at","cohortReducer","updateThemeDetails","themes","editedTheme","theme_name","theme_desc","theme_summary","child_themes","parent_theme","removeTheme","removedTheme","existingTheme","selectedTheme","selectedChildTheme","themeReducer","x","updateQuestionDetails","questions","editedQuestion","question","removeQuestion","removedQuestion","existingQuestion","selectedQuestion","questionReducer","updateQuestionGroupDetails","questionGroups","editedQuestionGroup","questionGroup","removeQuestionGroup","removedQuestionGroup","existingQuestionGroup","selectedQuestionGroup","questionGroupReducer","updateSurveyDetails","surveys","editedSurvey","survey","removeSurvey","removedSurvey","existingSurvey","selectedSurvey","newSurveyQsOrder","selectedSurveyQsOrder","surveyReducer","persistConfig","key","storage","whitelist","rootReducer","combineReducers","client","persistReducer","middlewares","logger","store","createStore","applyMiddleware","newStore","persistor","persistStore","modifiedAxios","axios","create","baseURL","process","cancelToken","CancelToken","defaults","params","interceptors","request","use","config","token","localStorage","getItem","url","URL","headers","method","pathname","includes","data","og","parseInt","ogs","formattedUrl","search","split","error","Promise","reject","ErrorNotice","props","className","style","padding","color","message","LoginV4","useState","setError","dispatch","useDispatch","history","useHistory","email","setEmail","password","setPassword","isLoading","setisLoading","submit","useLocation","e","a","preventDefault","identifier","removeItem","post","catch","response","status","alert","push","jwt","console","log","setItem","get","ogsResponseData","active_og","defaultOrgId","default_og","useEffect","SpinnerCircularFixed","size","thickness","speed","secondaryColor","onSubmit","clearError","undefined","htmlFor","onChange","target","value","withRouter","show","setShow","setTarget","ref","useRef","useSelector","questionstyle","questionimage","questiontext","surveystyle","surveyimage","surveytext","settingsstyle","settingsimage","settingstext","formatedOrganisations","company_name","setLastActiveOrg","lastActiveOrg","put","location","backgroundColor","analyticsblue","analyticswhite","taskblue","taskwhite","surveymanagerblue","surveymanagerwhite","settingsBlue","settingsWhite","src","SenseLogoWhite","alt","cursor","marginBottom","marginTop","width","fontSize","borderColor","option","i","onClick","event","Overlay","placement","container","containerPadding","Popover","Header","as","Body","Button","variant","BottomSVGImage","getTextWidth","text","font","context","document","createElement","getContext","getComputedStyle","body","measureText","CohortItemName","timeout","name_short","set_name_short","cohort_name_ref","height","dimensions","setDimensions","windowResize","set_window_resize","useLayoutEffect","current","offsetWidth","temp_name_short","offsetHeight","substring","length","window","addEventListener","clearTimeout","setTimeout","CohortItem","icon","faUsersCog","CreateCohortModal","showModal","setShowModal","newCohortSelection","setNewCohortSelection","name","setName","description","setDescription","isEnabled","setEnabled","newCohort","client_id","Modal","backdrop","onHide","closeButton","Title","Container","fluid","paddingTop","paddingBottom","Col","required","trim","replace","Footer","disabled","CohortSelection","setCohortId","faPlusCircle","EditCohortModal","currentCohortDetails","setcurrentCohortDetails","selectedCohortId","loadCohortDetails","editedCohortSelection","setEditedCohortSelection","Styles","styled","div","Table","columns","useTable","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","headerGroup","getHeaderGroupProps","column","getHeaderProps","render","row","getRowProps","cells","cell","getCellProps","ApiTable","recipients","recipientData","initialData","Object","keys","io","accessor","columnsReady","React","useMemo","CohortDisplay","cancel","isUpdating","setisUpdating","csvText","setCsvText","csvTitle","setCsvTitle","recipientDetails","setRecipientDetails","c","getSeletedCohort","updateRecipients","getUpdatedRecipients","deleteCohort","delete","accept","files","reader","FileReader","onload","result","readAsText","handleFile","faEdit","faTrash","confirm","Spinner","animation","Cohorts","setCohorts","setIsLoading","getCohorts","LikertScaleQuestion","setMinValue","setMaxValue","setStartLabel","setEndLabel","startLabel","endLabel","minValue","maxValue","setReverse","setNotApplicable","toggleSwitch","prevReverse","toggleNA","prevNotApplicable","display","defaultChecked","ChoiceQuestion","formValues","setFormValues","onDragEnd","destination","items","Array","from","splice","source","index","reorderedItem","droppableId","provided","marginLeft","droppableProps","innerRef","element","draggableId","toString","draggableProps","dragHandleProps","faGripLines","newFormValues","handleChange","maxLength","placeholder","trashIcon","removeFormFields","addIcon","GridChoiceQuestion","rowValues","setRowValues","columnValues","setColumnValues","row_value","handleRowChange","removeRowFormFields","column_value","handleColumnChange","removeColumnFormFields","GridLikertQuestion","ConfirmPopUp","confirmCreated","setConfirmCreated","centered","CreateQuestionModal","setKey","filteredThemes","initialSelectedTheme","intialSelectedChildTheme","selectedGroup","setSelectedTheme","selectedSubthemeId","setSelectedSubthemeId","newQuestionSelection","setNewQuestionSelection","updatedThemeSelection","setUpdatedThemeSelection","questionText","setQuestionText","questionType","setQuestionType","addAnother","setAddAnother","reverse","notApplicable","implicit","setImplicit","Date","startDate","setStartDate","endDate","setEndDate","values","order","indexOf","gridValues","axis","themeId","newQuestion","question_text","reverse_coded_flag","objective","start_date","toISOString","slice","end_date","question_type","question_group","likert_scale","min_value","max_value","min_label","max_label","na_flag","choices","grid_choices","grid_likert_scale","row_choices","obj","updateThemeNewQuestion","questionOp","parentThemeID","latestQuestion","allSpecificThemesQuestions","flat","updateTheme","toggleImplicit","prevImplicit","Tabs","activeKey","onSelect","k","Tab","eventKey","title","selected","EditLikertScaleQuestion","setcurrentQuestionDetails","currentQuestionDetails","for","EditChoiceQuestion","EditGridChoiceQuestion","EditGridLikertQuestion","EditQuestionModal","showEditModal","setEditModal","isDuplicate","setIsDuplicate","hasQuestion","likertScaleParamsId","questionId","theme_id","parent_theme_id","locked","currentOption","updatedQuestionSelection","setUpdatedQuestionSelection","createDuplicateQuestion","setCreateDuplicateQuestion","mapedOptions","filteredOptions","withUnassignedSubtheme","withUnassignedTheme","subthemes","currentTheme","filteredSubthemes","duplicate","duplicateName","duplicateQuestion","questionID","updatedQuestion","updateQuestion","setDuplicateQuestion","loadQuestionDetails","Card","background","formattedTheme","JSON","parse","stringify","justifyContent","gap","ColumnFilter","filterValue","setFilter","QuestionTable","CreateThemeModal","newThemeSelection","setNewThemeSelection","summary","setSummary","newTheme","theme_details","sys_default","parent_theme_flag","createdAt","formattedChiledThemes","opacity","SubthemeItem","CreateSubthemeModal","EditSubtheme","setEditShowModal","selectedParentTheme","subthemeId","currentThemeDetails","setcurrentThemeDetails","updatedChildTheme","setUpdatedChildTheme","editedSubtheme","deleteSubtheme","marginRight","EditThemeModal","deleteTheme","QuestionGroupTable","dateFormat","date","toLocaleDateString","ChildThemeSelectItem","childTheme","setSubthemeModal","selectChildTheme","editIcon","paddingLeft","fontWeight","ThemeSelectItem","showCreateSubtheme","setShowCreateSubtheme","selectTheme","Accordion","Item","paddingRight","label","stopPropagation","child_theme","AllQuestionsThemes","ThemeSelection","showSubthemeModal","DropdownFilter","preFilteredRows","displayOptions","options","Set","forEach","add","ThemeDropDown","original","SubthemeDropdown","ReverseDropdown","DefaultColumnFilter","count","selectedThemeType","hiddenColumns","defaultColumn","Filter","initialState","pageIndex","useFilters","useGlobalFilter","usePagination","useRowSelect","page","selectedFlatRows","visibleColumns","preGlobalFilteredRows","setGlobalFilter","canPreviousPage","canNextPage","pageOptions","pageCount","gotoPage","nextPage","previousPage","setPageSize","pageSize","canFilter","deleteQuestion","deleteDetails","ogsID","ThemeQuestionTable","reformatedQuestion","setChosenQuestions","setQuestion","Cell","OverlayTrigger","overlay","Tooltip","trashIconDisabled","ThemeQuestionsDisplay","showCreateModal","setCreateShowModal","selectedThemeId","setSelectedThemeId","setSelectedThemeType","questionDetails","getSelectedTheme","child_theme_name","QM","setThemes","getThemes","CreateSurveyQuestionModal","setFirstInitiation","setMasterData","masterData","submitQuestionCreate","addAnotherFlag","controller","AbortController","controllerTheme","signal","responseThemes","abort","IndeterminateCheckbox","forwardRef","indeterminate","rest","defaultRef","resolvedRef","sectionId","tableData","setTableData","hooks","getToggleAllRowsSelectedProps","getToggleRowSelectedProps","toggleRowSelected","setAllFilters","selectedRowIds","section","sections","allChosenQuestionsInAllSections","chosenQuestions","allChosenQuestionIdsInAllSections","allRemainingQuestions","allAvailableQuestions","useMountedLayoutEffect","chosenQuestionIds","border","defaultValue","Number","SurveyQuestionTable","AddQuestionModal","showQuestionsModal","setShowQuestionsModal","fullscreen","SectionQuestion","displayQuestionType","currentSection","questionOpen","setQuestionOpen","branchedQuestions","setBranchedQuestions","implicit_flag","currentSections","moveableSections","CustomToggle","children","href","moveSectionIcon","CustomMenu","labeledBy","aria-labelledby","Children","toArray","child","toLowerCase","startsWith","Collapse","in","choiceId","nextSection","requiredQuestion","sectionRequiredQuestion","adjustedCurrentSection","requiredUpdatedSections","handleRequired","branchingIcon","drilldownIcon","Dropdown","Toggle","Menu","newSectionId","destinationSection","reducedQuestion","updatedSections","handleMoveSection","copyIcon","reducedChosenQuestions","reducedSection","updatedRemovedQSections","handleRemoveQuestion","aria-controls","aria-expanded","dropdownIconUp","dropdownIcon","Section","item","onBlur","updatedNameSections","section_name","handleSetName","updatedDescriptionSections","section_description","handleSetDescription","newMasterData","dndIcon","reducedSections","handleRemoveSection","CreateSurveyModal","requiredQuestions","firstInitiation","uploadedFooterImageID","setUploadedFooterImageID","surveyStatusOptions","surveyStatus","setSuveryStatus","setSelected","descriptionRef","nameRef","submitConfirmMessageRef","createdSurvey","setCreatedSurvey","newSurvey","questionsList","origin","survey_desc","survey_name","submit_confirm_message","footer_image","section_desc","section_questions","required_flag","sid","survey_responses","uploadImage","formData","FormData","append","dialogClassName","SurveyInEditQuestionTable","AddInEditQuestionModal","ViewSectionQuestion","isChecked","setIsChecked","checked","ViewSection","EditSurveyModal","selectedSurveyLight","setRequiredQuestions","setSelectedSurvey","survey_descRef","survey_nameRef","submit_confirm_messageRef","selectedSurveyID","getSelectedSurvey","surveyId","currentSurveyDetails","setCurrentSurveyDetails","updatedSurvey","setUpdatedSurvey","createdDuplicateSurvey","setCreatedDuplicateSurvey","convertedStartDate","convertedEndDate","duplicateSurvey","component_id","initialRequiredQuestions","csv","setCSV","getCSVRespones","err","csvLinkEl","createRef","downloadReport","responses","link","click","y","response_count","filename","borderBottom","minWidth","deleteSurvey","SurveyTable","setShowUrlModal","setSurvey","maxWidth","SurveyURLModal","showUrlModal","wordBreak","navigator","clipboard","writeText","SurveyDisplay","controllerQuestions","responseQuestion","SurveyScheduleBuilder","FormDisclaimer","EmpirisysSenseLogo","ErrorPopUp","showErrorModal","setShowErrorModal","timeStamp","sessionID","flexDirection","ErrorPageNotFound","SenseLogoNavy","LinkertQuestion","setAnswers","answers","questionNumber","onInputChanged","radioName","setValidatedQs","uuidv4","scale","previousChosenValue","setPreviousChosenValue","toggleNotApplicable","onMultipleInputChanged","chosenValues","setChosenValues","handleAddValue","str","lastIndex","lastIndexOf","inputRow","foundExisting","updatedChosenValues","col","UpdateParentAnswer","overflow","cols","OpenQuestion","styles","handleTextChange","DropdownQuestion","formattedOptions","DropdownIndicator","handleSelect","components","control","baseStyles","borderRadius","boxShadow","menu","borderTop","isFocused","isSelected","indicatorSeparator","MCQGridQuestion","rating","MCQQuestion","CheckboxQuestion","setCount","updatedValues","ClearSurveyWarningPopUp","showWarningModal","setShowWarningModal","setLikerQs","setOpenQs","setDropdownQs","setMcqGridQs","setMcqQs","setGridLikertQs","setCheckboxQs","reload","ActionButtons","xs","currentStep","previousStep","totalSteps","nextStep","isEmpty","lastStep","FormSection","likertQs","openQs","dropdownQs","mcqGridQs","mcqQs","gridLikertQs","checkboxQs","activeStep","formatedRequiredQs","reducedFormatedQs","assign","validatedQs","targetName","targetValue","scrollTo","FormGroup","q","dropdownLine","line","openLine","Form","setActiveStep","userLocationData","setUserLocationData","userBrowserData","useUA","setSessionID","noQuestions","setNoQuestions","unavailableMessage","setUnavailableMessage","adminUnavailableMsg","setAdminUnavailableMsg","surveyStart","setSurveyStart","paramsId","useParams","questionLoad","setQuestionLoad","completedMessage","setCompletedMessage","keepAliveFlag","setKeepAliveFlag","keepAliveData","formatedUserBrowserData","device","model","vendor","metadata","browserData","surveyPosition","surveyID","surveyDuration","now","newSession","duration","Math","floor","submitted","getGeolocationData","fetch","Accept","geolocationResponse","json","geoLocationData","city","country_name","latitude","longitude","region","ip","getSurvey","charAt","toUpperCase","likertQsArray","openQsArray","dropdownArray","mcqGridArray","mcqArray","checkboxArray","likertGridArray","newSessionID","keepAliveWithMetaData","keepAlive","interval","setInterval","clearInterval","sectionUpdate","timer1","md","onStepChange","transitions","enterRight","enterLeft","exitRight","exitLeft","intro","alignItems","deleteOrganisation","orgId","active_org","OrganisationTable","setSelectedOrg","filteredOrgs","org_name","CreateOrganisationModal","company","userid","newOrganisation","setNewOrganisation","org_desc","userID","userCompany","EditOrganisationModal","selectedOrganisation","currentQuestionGroupDetails","setCurrentQuestionGroupDetails","initialName","setInitialName","initialDesc","setInitialDesc","updatedOrganisation","setUpdatedOrganisation","OrganisationDisplay","TabOrganisationSwitch","selectedTab","setSelectedTab","Organisations","match","TestArea","setFiles","then","App","exact","path","component","ReactDOM","getElementById"],"mappings":"6tCAAMA,EAAgB,CACrBC,SAAU,GAeIC,EAZO,WAAoC,IAAnCC,EAAkC,uDAA1BH,EAAeI,EAAW,uCACxD,OAAQA,EAAOC,MACd,IAAK,aACJ,OAAO,2BACHF,GADJ,IAECG,QAASF,EAAOG,UAElB,QACC,OAAOJ,I,OCZGK,EAAqB,SAACC,EAAeC,GAWjD,OANqBD,EAAcE,MAClC,SAACC,GAAD,OAAkBA,EAAaC,KAAOH,EAAmBG,MAMlDJ,EAAcK,KAAI,SAACF,GAAD,OACxBA,EAAaC,KAAOH,EAAmBG,GAEtCH,EACEE,KAIE,YAAIH,IAKCM,EAAqB,SAACN,EAAeO,GACjD,IAAMC,EAAuBR,EAAcE,MAC1C,SAACC,GAAD,OAAkBA,EAAaC,KAAOG,EAAoBH,MAG3D,OAAOJ,EAAcS,QAAO,SAACN,GAAD,OAC3BA,EAAaC,KAAOI,EAAqBJ,OC7BrCb,EAAgB,CACrBmB,KAAM,KACNC,eAAgB,KAChBX,cAAe,GACfY,WAAY,KACZC,YAAa,MAuDCC,EApDK,WAAoC,IAAnCpB,EAAkC,uDAA1BH,EAAeI,EAAW,uCACtD,OAAQA,EAAOC,MACd,IAAK,WACJ,OAAO,2BACHF,GADJ,IAECgB,KAAMf,EAAOG,UAEf,IAAK,mBACJ,OAAO,2BACHJ,GADJ,IAECiB,eAAgBhB,EAAOG,UAEzB,IAAK,sBACJ,OAAO,2BACHJ,GADJ,IAECmB,YAAalB,EAAOG,UAEtB,IAAK,2BACJ,OAAO,2BACHJ,GADJ,IAECkB,WAAYjB,EAAOG,UAErB,IAAK,uBACJ,OAAO,2BACHJ,GADJ,IAECgB,KAAK,2BAAMhB,EAAMgB,MAAb,IAAmBV,cAAc,CAAEL,EAAOG,SAAV,mBAAsBJ,EAAMgB,KAAKV,oBAEvE,IAAK,sBACJ,OAAO,2BACHN,GADJ,IAECgB,KAAK,2BAAMhB,EAAMgB,MAAb,IAAmBV,cAAeM,EAAmBZ,EAAMgB,KAAKV,cAAeL,EAAOG,WAC1Fa,eAAgBjB,EAAMkB,WAAWR,KAEnC,IAAK,sBACJ,OAAO,2BACHV,GADJ,IAECgB,KAAK,2BAAMhB,EAAMgB,MAAb,IAAmBV,cAAeD,EAAmBL,EAAMgB,KAAKV,cAAeL,EAAOG,WAC1Fe,YAAalB,EAAOG,UAGtB,IAAK,wBACJ,OAAO,2BACHJ,GADJ,IAECM,cAAeL,EAAOG,UAGxB,QACC,OAAOJ,ICzDGqB,EAAsB,SAAClB,EAASmB,GAK5C,OAJqBnB,EAAQK,MAC5B,SAACe,GAAD,OAAYA,EAAOb,KAAOY,EAAaZ,MAIhCP,EAAQQ,KAAI,SAACY,GAAD,OAClBA,EAAOb,KAAOY,EAAaZ,GAA3B,2BACQa,GADR,IACgBC,YAAaF,EAAaE,YAAaC,YAAaH,EAAaG,cAC9EF,KAIE,YAAIpB,IAICuB,EAAe,SAACvB,EAASwB,GACrC,IAAMC,EAAiBzB,EAAQK,MAC9B,SAACqB,GAAD,OAAWA,EAAMnB,KAAOiB,EAAcjB,MAGvC,OAAOP,EAAQY,QAAO,SAACc,GAAD,OACrBA,EAAMnB,KAAOkB,EAAelB,OCrBxBb,EAAgB,CACrBM,QAAS,GACT2B,eAAgB,CACfpB,GAAI,KACJc,YAAa,GACbC,YAAa,GACbM,WAAW,KA4CEC,EAvCO,WAAoC,IAAnChC,EAAkC,uDAA1BH,EAAeI,EAAW,uCACxD,OAAQA,EAAOC,MACd,IAAK,cACJ,OAAO,2BACHF,GADJ,IAECG,QAASF,EAAOG,UAElB,IAAK,gBACJ,OAAO,2BACHJ,GADJ,IAEC8B,eAAgB7B,EAAOG,UAEzB,IAAK,iBACJ,OAAO,2BACHJ,GADJ,IAECG,QAAQ,GAAD,mBAAMH,EAAMG,SAAZ,CAAqBF,EAAOG,YAErC,IAAK,wBACH,OAAO,2BACHJ,GADJ,IAECG,QAASkB,EAAoBrB,EAAMG,QAASF,EAAOG,SACnD0B,eAAgB7B,EAAOG,UAEzB,IAAK,gBACJ,OAAO,2BACHJ,GADJ,IAECG,QAASuB,EAAa1B,EAAMG,QAASF,EAAOG,SAC5C0B,eAAgB,CACfpB,GAAI,KACJc,YAAa,GACbC,YAAa,GACbM,WAAW,MAGf,QACC,OAAO/B,IChDGiC,EAAqB,SAACC,EAAQC,GAK1C,OAJqBD,EAAO1B,MAC3B,SAACqB,GAAD,OAAWA,EAAMnB,KAAOyB,EAAYzB,MAI7BwB,EAAOvB,KAAI,SAACkB,GAAD,OACjBA,EAAMnB,KAAOyB,EAAYzB,GAAzB,2BAEKmB,GAFL,IAGEO,WAAYD,EAAYC,WACxBC,WAAYF,EAAYE,WACxBC,cAAeH,EAAYG,cAC3BC,aAAcJ,EAAYI,aAC1BC,aAAcL,EAAYK,eAEzBX,KAIE,YAAIK,IA2BCO,EAAc,SAACP,EAAQQ,GACnC,IAAMC,EAAgBT,EAAO1B,MAC5B,SAACqB,GAAD,OAAWA,EAAMnB,KAAOgC,EAAahC,MAGtC,OAAOwB,EAAOnB,QAAO,SAACc,GAAD,OACpBA,EAAMnB,KAAOiC,EAAcjC,OCnDvBb,EAAgB,CACrBqC,OAAQ,CAAC,CACRxB,IAAK,EACL2B,WAAY,GACZD,WAAY,aACZlC,KAAM,iBACJ,CACFQ,IAAK,EACL2B,WAAY,GACZD,WAAY,gBACZlC,KAAM,QAGP0C,cAAe,KACfC,mBAAoB,MAgENC,EA7DM,WAAoC,IAAnC9C,EAAkC,uDAA1BH,EAAeI,EAAW,uCACvD,OAAQA,EAAOC,MACd,IAAK,aACJ,OAAO,2BACHF,GADJ,IAECkC,OAAQjC,EAAOG,QAAQO,KAAI,SAAAoC,GACzB,OAAO,2BAAKA,GAAZ,IAAe7C,KAAM,eAIvB0C,cAAe,CACdlC,IAAK,EACL2B,WAAY,GACZD,WAAY,gBACZlC,KAAM,OAEP2C,mBAAoB,OAEtB,IAAK,eACJ,OAAO,2BACH7C,GADJ,IAEC4C,cAAe3C,EAAOG,UAExB,IAAK,gBACJ,OAAO,2BACHJ,GADJ,IAECkC,OAAO,CAAEjC,EAAOG,SAAV,mBAAsBJ,EAAMkC,WAEpC,IAAK,uBACJ,OAAO,2BACHlC,GADJ,IAECkC,OAAQD,EAAmBjC,EAAMkC,OAAQjC,EAAOG,SAChDwC,cAAe3C,EAAOG,UAGxB,IAAK,eACJ,OAAO,2BACHJ,GADJ,IAECkC,OAAQO,EAAYzC,EAAMkC,OAAQjC,EAAOG,SACzCwC,cAAe,OAIjB,IAAK,kBACJ,OAAO,2BACH5C,GADJ,IAECkC,OAAQD,EAAmBjC,EAAMkC,OAAQjC,EAAOG,SAChDwC,cAAe3C,EAAOG,QACtByC,mBAAoB,OAEtB,IAAK,qBACJ,OAAO,2BACH7C,GADJ,IAEC6C,mBAAoB5C,EAAOG,UAG7B,QACC,OAAOJ,IC5EGgD,EAAwB,SAACC,EAAWC,GAUhD,OALqBD,EAAUzC,MAC9B,SAAC2C,GAAD,OAAcA,EAASzC,KAAOwC,EAAexC,MAKtCuC,EAAUtC,KAAI,SAACwC,GAAD,OACpBA,EAASzC,KAAOwC,EAAexC,GAE9BwC,EACEC,KAIE,YAAIF,IAICG,EAAiB,SAACH,EAAWI,GACzC,IAAMC,EAAmBL,EAAUzC,MAClC,SAAC2C,GAAD,OAAcA,EAASzC,KAAO2C,EAAgB3C,MAG/C,OAAOuC,EAAUlC,QAAO,SAACoC,GAAD,OACvBA,EAASzC,KAAO4C,EAAiB5C,OC3B7Bb,EAAgB,CACrBoD,UAAW,GACXM,iBAAkB,MAqCJC,EAlCS,WAAoC,IAAnCxD,EAAkC,uDAA1BH,EAAeI,EAAW,uCAC1D,OAAQA,EAAOC,MACd,IAAK,gBACJ,OAAO,2BACHF,GADJ,IAECiD,UAAWhD,EAAOG,UAEpB,IAAK,kBACJ,OAAO,2BACHJ,GADJ,IAECuD,iBAAkBtD,EAAOG,UAE3B,IAAK,mBACJ,OAAO,2BACHJ,GADJ,IAECiD,UAAU,CAAEhD,EAAOG,SAAV,mBAAsBJ,EAAMiD,cAEvC,IAAK,kBACJ,OAAO,2BACHjD,GADJ,IAECiD,UAAWG,EAAepD,EAAMiD,UAAWhD,EAAOG,SAClDmD,iBAAkBtD,EAAOG,UAE3B,IAAK,0BACJ,OAAO,2BACHJ,GADJ,IAECiD,UAAWD,EAAsBhD,EAAMiD,UAAWhD,EAAOG,SACzDmD,iBAAkBtD,EAAOG,UAE3B,QACC,OAAOJ,ICrCGyD,EAA6B,SAACC,EAAgBC,GAW1D,OANqBD,EAAelD,MACnC,SAAC2C,GAAD,OAAcA,EAASzC,KAAOiD,EAAoBjD,MAM3CgD,EAAe/C,KAAI,SAACiD,GAAD,OACzBA,EAAclD,KAAOiD,EAAoBjD,GAExCiD,EACEC,KAIE,YAAIF,IAICG,EAAsB,SAACH,EAAgBI,GACnD,IAAMC,EAAwBL,EAAelD,MAC5C,SAACoD,GAAD,OAAmBA,EAAclD,KAAOoD,EAAqBpD,MAG9D,OAAOgD,EAAe3C,QAAO,SAAC6C,GAAD,OAC5BA,EAAclD,KAAOqD,EAAsBrD,OC5BvCb,EAAgB,CACrB6D,eAAgB,GAChBM,sBAAuB,MAqCTC,EAlCc,WAAoC,IAAnCjE,EAAkC,uDAA1BH,EAAeI,EAAW,uCAC/D,OAAQA,EAAOC,MACd,IAAK,sBACJ,OAAO,2BACHF,GADJ,IAEC0D,eAAgBzD,EAAOG,UAEzB,IAAK,wBACJ,OAAO,2BACHJ,GADJ,IAECgE,sBAAuB/D,EAAOG,UAEhC,IAAK,yBACJ,OAAO,2BACHJ,GADJ,IAEC0D,eAAe,GAAD,mBAAM1D,EAAM0D,gBAAZ,CAA4BzD,EAAOG,YAEnD,IAAK,gCACH,OAAO,2BACHJ,GADJ,IAEC0D,eAAgBD,EAA2BzD,EAAM0D,eAAgBzD,EAAOG,SACxE4D,sBAAuB/D,EAAOG,UAEjC,IAAK,wBACJ,OAAO,2BACHJ,GADJ,IAEC0D,eAAgBG,EAAoB7D,EAAM0D,eAAgBzD,EAAOG,WAGnE,QACC,OAAOJ,ICrCGkE,EAAsB,SAACC,EAASC,GAW5C,OANqBD,EAAQ3D,MAC5B,SAAC6D,GAAD,OAAYA,EAAO3D,KAAO0D,EAAa1D,MAMhCyD,EAAQxD,KAAI,SAAC0D,GAAD,OAClBA,EAAO3D,KAAO0D,EAAa1D,GAE1B0D,EACEC,KAIE,YAAIF,IAICG,EAAe,SAACH,EAASI,GACrC,IAAMC,EAAiBL,EAAQ3D,MAC9B,SAAC6D,GAAD,OAAYA,EAAO3D,KAAO6D,EAAc7D,MAGzC,OAAOyD,EAAQpD,QAAO,SAACsD,GAAD,OACrBA,EAAO3D,KAAO8D,EAAe9D,OC3BzBb,EAAgB,CACrBsE,QAAS,GACTM,eAAgB,KAChBC,iBAAkB,GAClBC,sBAAuB,IAwCTC,EArCO,WAAoC,IAAnC5E,EAAkC,uDAA1BH,EAAeI,EAAW,uCAGxD,OAAQA,EAAOC,MACd,IAAK,cACJ,OAAO,2BACHF,GADJ,IAECmE,QAASlE,EAAOG,UAElB,IAAK,gBACJ,OAAO,2BACHJ,GADJ,IAECyE,eAAgBxE,EAAOG,UAEzB,IAAK,iBACJ,OAAO,2BACHJ,GADJ,IAECmE,QAAQ,CAAElE,EAAOG,SAAV,mBAAsBJ,EAAMmE,YAErC,IAAK,gBACJ,OAAO,2BACHnE,GADJ,IAECmE,QAASG,EAAatE,EAAMmE,QAASlE,EAAOG,WAG9C,IAAK,wBACJ,OAAO,2BACHJ,GADJ,IAECmE,QAASD,EAAoBlE,EAAMmE,QAASlE,EAAOG,SACnDqE,eAAgBxE,EAAOG,UAGzB,QACC,OAAOJ,IC7BJ6E,EAAgB,CACrBC,IAAK,OACLC,YACAC,UAAW,CAAC,SAAU,SAGjBC,EAAcC,YAAgB,CACnCC,OAAQpF,EACRiB,KAAMI,EACNG,OAAQS,EACRH,MAAOiB,EACPK,SAAUK,EACVI,cAAeK,EACfI,OAAQO,IAIMQ,cAAeP,EAAeI,GCzBvCI,EAAc,CAACC,KAEfC,EAAQC,YAAYP,EAAaQ,IAAe,WAAf,EAAmBJ,IAM3CK,EAFE,CAACC,UAFAC,YAAaL,GAEFA,S,mFCTvBM,GAAgBC,KAAMC,OAAO,CAC/BC,QAASC,oDAGAC,GAAcJ,KAAMK,YAEjCN,GAAcO,SAASC,OAAS,GAEhCR,GAAcS,aAAaC,QAAQC,KAEjC,SAAUC,GAIR,IAAMC,EAAQC,aAAaC,QAAQ,OAC7B3F,EAAiB0F,aAAaC,QAAQ,kBAKxCC,EAAM,IAAIC,IAAIb,kDAAqCQ,EAAOI,KAI9D,GAAIH,IAIFD,EAAOM,QAAP,cAAkC,UAAYL,EAC9CD,EAAOM,QAAQ,gBAAkB,mBAKX,WAAlBN,EAAOO,QAAwC,YAAjBH,EAAII,WAAmE,IAAzCJ,EAAII,SAASC,SAAS,iBAAmE,IAAvCL,EAAII,SAASC,SAAS,eACtIT,EAAOU,KAAP,2BAAmBV,EAAOU,MAA1B,IAAgCC,GAAIC,SAASpG,MAGzB,WAAlBwF,EAAOO,QAAwC,YAAjBH,EAAII,WACpCR,EAAOU,KAAP,2BAAmBV,EAAOU,MAA1B,IAAgCG,IAAK,CAACD,SAASpG,OAK3B,QAAlBwF,EAAOO,QAAqBH,EAAII,SAASC,SAAS,yBACpDT,EAAOJ,OAAP,GAAsBpF,EACtBwF,EAAOJ,OAAP,QAA2B,aAOP,QAAlBI,EAAOO,QAAsC,mBAAjBH,EAAII,WAAiF,IAAjDJ,EAAII,SAASC,SAAS,wBAAsD,YAAjBL,EAAII,WAAiE,IAAvCJ,EAAII,SAASC,SAAS,eAC/KT,EAAOJ,OAAP,GAAsBpF,GAQJ,QAAlBwF,EAAOO,QAAqC,YAAjBH,EAAII,WACjCR,EAAOJ,OAAP,IAAuBpF,GAMH,mBAAjB4F,EAAII,UAA+B,CAEpC,IAAIM,EAAeV,EAAIW,OAAOC,MAAM,KAGrChB,EAAOI,IAAP,uBAA6BU,EAAa,IAQ/C,IAAKb,GAA0B,mBAAjBG,EAAII,SAA+B,CAE/C,IAAIM,EAAeV,EAAIW,OAAOC,MAAM,KAGpChB,EAAOM,QAAQ,gBAAkB,mBACjCN,EAAOI,IAAP,uBAA6BU,EAAa,IAM1C,OAAOd,KAIT,SAASiB,GACP,OAAOC,QAAQC,OAAOF,MAsDb7B,U,gBChJAgC,GAVK,SAACC,GACjB,OACI,sBACIC,UAAU,eACVC,MAAO,CAAEC,QAAS,UAAWC,MAAO,qBAFxC,SAGI,gCAAOJ,EAAMK,a,UC8QVC,I,cA1QC,WAAM,MAGQC,qBAHR,oBAGXX,EAHW,KAGJY,EAHI,KAMZC,EAAWC,cACXC,EAAUC,cAPE,EAQQL,mBAAS,IARjB,oBAQXM,EARW,KAQJC,EARI,OAScP,mBAAS,IATvB,oBASXQ,EATW,KASDC,EATC,OAUgBT,oBAAS,GAVzB,oBAUXU,EAVW,KAUAC,EAVA,KAgBZC,GALWC,cAKL,uCAAG,WAAOC,GAAP,qDAAAC,EAAA,yDACXD,EAAEE,iBAGY,KAAVV,GAA6B,KAAbE,EAJT,iCAQG1B,EAAO,CACTmC,WAAYX,EACZE,SAAUA,GAGdlC,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBAGxBP,GAAa,GAjBV,SAkBoBlD,GAAM0D,KAAK,aAAcrC,GAAMsC,OAElD,SAAC/B,GACG,GAA8B,MAA1BA,EAAMgC,SAASC,OAMf,OAJAC,MAAM,sDACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,uBACxBd,EAAQoB,KAAK,KAIa,MAA1BnC,EAAMgC,SAASC,SAEfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA1CtB,UAkBGH,EAlBH,OAgDGI,EAhDH,OAgDSJ,QAhDT,IAgDSA,GAhDT,UAgDSA,EAAUvC,YAhDnB,aAgDS,EAAgB2C,IAE5BC,QAAQC,IAAI,MAAOF,GAEb9I,EApDH,OAoDU0I,QApDV,IAoDUA,GApDV,UAoDUA,EAAUvC,YApDpB,aAoDU,EAAgBnG,KAG7B2F,aAAasD,QAAQ,MAAOH,GAE5BvB,EAAS,CAAErI,KAAM,WAAYE,QAASY,KAQlC8I,EAjED,kCAkEyBhE,GAAMoE,IAAI,aAAaT,OAE3C,SAAC/B,GACG,GAA8B,MAA1BA,EAAMgC,SAASC,OAMf,OAJAC,MAAM,sDACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,uBACxBd,EAAQoB,KAAK,KAIa,MAA1BnC,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAzF1B,QAkECM,EAlED,eAiGHJ,QAAQC,IAAI,kBAAmBG,GAEzBlJ,GAAgC,QAAf,EAAAkJ,SAAA,mBAAiBhD,YAAjB,eAAuBiD,WAAvB,UAAmCD,SAAnC,iBAAmC,EAAiBhD,YAApD,aAAmC,EAAuBiD,UAA1D,UAAsED,SAAtE,iBAAsE,EAAiBhD,YAAvF,iBAAsE,EAAuBG,IAAI,UAAjG,aAAsE,EAA+B5G,GAGtH2J,EAtGH,OAsGkBX,QAtGlB,IAsGkBA,GAtGlB,UAsGkBA,EAAUvC,YAtG5B,aAsGkB,EAAgBmD,WAGrC3D,aAAasD,QAAQ,iBAAkBhJ,GAGvCsH,EAAS,CAAErI,KAAM,mBAAoBE,QAASa,IAC9CsH,EAAS,CAAErI,KAAM,wBAAyBE,QAAO,UAAE+J,SAAF,iBAAE,EAAiBhD,YAAnB,aAAE,EAAuBG,MAItE+C,IAEMnJ,EAAaiJ,EAAgB7C,IAAIvG,QAAO,SAAAgC,GAC1C,GAAIA,EAAErC,KAAO2J,EACT,OAAOtH,KAKfwF,EAAS,CAAErI,KAAM,2BAA4BE,QAASc,EAAW,MAMrE8H,GAAa,GAIThI,GAAQC,GAAkB6I,GAC1BrB,EAAQoB,KAAK,qBArId,kDAyIHE,QAAQC,IAAR,MAzIG,0DAAH,uDAwKZ,OAlBAO,qBAAU,WAEN,IAAMT,EAAMnD,aAAaC,QAAQ,OAC3B3F,EAAiB0F,aAAaC,QAAQ,kBAGxCkD,GAAO7I,GACPwH,EAAQoB,KAAK,uBAIlB,CAACpB,IAQA,sBAAKV,UAAU,iBAAf,SAQI,sBAAKA,UAAU,aAAf,SAEKgB,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,uDAIR,wBAAMA,UAAU,OAAO8C,SAAU5B,EAAjC,UACI,wCAECvB,GACG,eAAC,GAAD,CACIS,QAAST,EACToD,WAAY,kBAAMxC,OAASyC,MAGnC,uBAAKhD,UAAU,aAAf,UACI,wBAAOiD,QAAQ,cAAf,mBACA,wBACItK,GAAG,cACHR,KAAK,QACL6H,UAAU,eACVkD,SAAU,SAAC9B,GAAD,OAAOP,EAASO,EAAE+B,OAAOC,aAK3C,uBAAKpD,UAAU,aAAf,UACI,wBAAOiD,QAAQ,iBAAf,sBACA,wBACItK,GAAG,iBACHR,KAAK,WACL6H,UAAU,eACVkD,SAAU,SAAC9B,GAAD,OAAOL,EAAYK,EAAE+B,OAAOC,aAG9C,uBAAMzK,GAAG,MAAT,kFAIA,uBAAMA,GAAG,aAAT,SACI,yBACIR,KAAK,SACL6H,UAAU,2BAFd,8B,cCtNb,IADf,I,4BCxCe,I,MAAA,IAA0B,4CCA1B,OAA0B,0CCA1B,OAA0B,8CCA1B,OAA0B,+CCA1B,OAA0B,sCCA1B,OAA0B,qCCA1B,OAA0B,yCCA1B,OAA0B,0CCA1B,OAA0B,2CCA1B,OAA0B,2CC6Q1BqD,oBAzOf,YAAkC,IAAD,EAgBzB9K,EACAW,EAjBcwH,EAAW,EAAXA,QAAW,EAILJ,oBAAS,GAJJ,oBAItBgD,EAJsB,KAIhBC,EAJgB,OAKDjD,mBAAS,MALR,oBAKtB6C,EALsB,KAKdK,EALc,KAMvBC,EAAMC,iBAAO,MAObzK,EAAO0K,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,QAMtCA,IACAV,EAAgBU,EAAKV,cACrBW,EAAiBD,EAAKC,gBAI1B,IA8EI0K,EACAC,EACAC,EAaAC,EACAC,EACAC,EAYAC,EACAC,EACAC,EA7GEC,EAAqB,UAAG9L,SAAH,aAAG,EAAeK,KAAI,SAAAoC,GAC7C,MAAO,CACHsJ,aAActJ,EAAEsJ,aAChB3L,GAAIqC,EAAErC,OAOR6H,EAAWC,cAcX8D,EAAgB,uCAAG,WAAOnD,GAAP,eAAAC,EAAA,6DAGrBD,EAAEE,iBAHmB,SAObkD,EAAgB,CAAEnC,UAAWjB,EAAE+B,OAAOC,OAPzB,SASarF,GAAM0G,IAAN,iBAAoBxL,EAAKA,KAAKN,IAAM6L,GAAe9C,OAC7E,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAtBR,8DAiCjBE,QAAQC,IAAR,MAjCiB,yDAAH,sDAoGtB,OAzDIvB,EAAQgE,SAASxF,SAASC,SAAS,aACrB,CAAEwF,gBAAiB,0BACnBC,GACD,CAAEzE,MAAO,8BAER,CAAEwE,gBAAiB,4BACnBE,GACD,IAObnE,EAAQgE,SAASxF,SAASC,SAAS,sBACnCyE,EAAgB,CAAEe,gBAAiB,0BACnCd,EAAgBiB,GAChBhB,EAAe,CAAE3D,MAAO,8BAExByD,EAAgB,CAAEe,gBAAiB,4BACnCd,EAAgBkB,GAChBjB,EAAe,IAQfpD,EAAQgE,SAASxF,SAASC,SAAS,6BACnC4E,EAAc,CAAEY,gBAAiB,0BACjCX,EAAcgB,GACdf,EAAa,CAAE9D,MAAO,8BAEtB4D,EAAc,CAAEY,gBAAiB,4BACjCX,EAAciB,GACdhB,EAAa,IAObvD,EAAQgE,SAASxF,SAASC,SAAS,cAAgBuB,EAAQgE,SAASxF,SAASC,SAAS,mBACtF+E,EAAgB,CAAES,gBAAiB,0BACnCR,EAAgBe,GAChBd,EAAe,CAAEjE,MAAO,8BAExB+D,EAAgB,CAAES,gBAAiB,4BACnCR,EAAgBgB,GAChBf,EAAe,IAQf,sBAAKpE,UAAU,WAAf,SAEI,uBAAKA,UAAU,qBAAf,UAEI,sBAAKoF,IAAKC,GAAgBrF,UAAU,aAAasF,IAAI,gBAErD,uBAAKtF,UAAU,eAAeC,MAAO,CAAEsF,OAAQ,WAA/C,UACI,uBAAMvF,UAAU,YAAhB,2BACA,yBAAQoD,MAAOlK,EACXf,KAAK,OACL6H,UAAU,qCACVkD,SAAU,SAAC9B,GACPxC,aAAasD,QAAQ,iBAAkBd,EAAE+B,OAAOC,OAChD5C,EAAS,CAAErI,KAAM,mBAAoBE,QAASiH,SAAS8B,EAAE+B,OAAOC,SAChEmB,EAAiBnD,IAGrBnB,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,MACPC,SAAU,SACVJ,OAAQ,UACRZ,gBAAiB,4CACjBxE,MAAO,sCACPyF,YAAa,+CAjBrB,gBAoBKvB,QApBL,IAoBKA,OApBL,EAoBKA,EAAuBzL,KAAI,SAACiN,EAAQC,GACjC,OACI,yBAAgB1C,MAAOyC,EAAOlN,GAA9B,SACKkN,EAAOvB,cADCwB,WAY7B,uBAAK9F,UAAU,eAAeC,MAAO2D,EAAemC,QAAS,kBAAMrF,EAAQoB,KAAK,sBAAhF,UAEI,uBAAM9B,UAAU,oBAAoBC,MAAO6D,EAA3C,8BACA,sBAAKsB,IAAKvB,EAAe7D,UAAU,oBAAoBsF,IAAI,mBAE/D,uBAAKtF,UAAU,eAAeC,MAAO8D,EAAagC,QAAS,kBAAMrF,EAAQoB,KAAK,qCAA9E,UAEI,uBAAM9B,UAAU,oBAAoBC,MAAOgE,EAA3C,4BACA,sBAAKmB,IAAKpB,EAAahE,UAAU,oBAAoBsF,IAAI,mBAI7D,uBAAK7B,IAAKA,EAAKzD,UAAU,eAAeC,MAAOiE,EAAe6B,QApMtD,SAACC,GACjBzC,GAASD,GACTE,EAAUwC,EAAM7C,SAkMR,UACI,uBAAMnD,UAAU,oBAAoBC,MAAOmE,EAA3C,sBACA,sBAAKgB,IAAKjB,EAAenE,UAAU,oBAAoBsF,IAAI,gBAC3D,eAACW,GAAA,EAAD,CACI3C,KAAMA,EACNH,OAAQA,EACR+C,UAAU,QACVC,UAAW1C,EACX2C,iBAAkB,GALtB,SAOI,gBAACC,GAAA,EAAD,CAAS1N,GAAG,oBAAZ,UACI,eAAC0N,GAAA,EAAQC,OAAT,CAAgBC,GAAG,KAAnB,sBACA,gBAACF,GAAA,EAAQG,KAAT,WACI,eAACC,GAAA,EAAD,CAAQxG,MAAO,CAAEuF,aAAc,OAASkB,QAAQ,OAAO1G,UAAU,mBAAmB+F,QAnLjG,SAAC3E,GACZxC,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBhB,EAAS,CAAErI,KAAM,WAAYE,QAAS,OACtCqI,EAAQoB,KAAK,MA+KW,qBACA,eAAC2E,GAAA,EAAD,CAAQxG,MAAO,CAAEuF,aAAc,OAASkB,QAAQ,OAAO1G,UAAU,mBAAmB+F,QAAS,kBAAMrF,EAAQoB,KAAK,4BAAhH,sCAMhB,sBAAKsD,IAAKuB,GAAgB3G,UAAU,eAAesF,IAAI,wB,kCCjNvE,SAASsB,GAAaC,EAAMC,GACxB,IACMC,EADSC,SAASC,cAAc,UACfC,WAAW,MAIlC,OAFAH,EAAQD,KAAOA,GAAQK,iBAAiBH,SAASI,MAAMN,KAEhDC,EAAQM,YAAYR,GAAMnB,MAItB4B,OAtDf,YAA0C,IA6BlCC,EA7BkB9N,EAAe,EAAfA,YAAe,EAEA6G,mBAAS7G,GAFT,oBAE9B+N,EAF8B,KAElBC,EAFkB,KAG/BC,EAAkBhE,iBAAO,MAHM,EAIDpD,mBAAS,CAAEoF,MAAO,EAAGiC,OAAQ,IAJ5B,oBAI9BC,EAJ8B,KAIlBC,EAJkB,OAKKvH,oBAAS,GALd,oBAK9BwH,EAL8B,KAKhBC,EALgB,KAuCrC,OAjCAC,2BAAgB,WACZ,GAAIN,EAAgBO,QAAQC,aAAeN,EAAWlC,MAAO,CACzD,GAAIgC,EAAgBO,QAAQC,YAAcN,EAAWlC,MACjD,IAAIyC,EAAkBX,OAElBW,EAAkBX,EAO1B,GALAK,EAAc,CACVnC,MAAOgC,EAAgBO,QAAQC,YAC/BP,OAAQD,EAAgBO,QAAQG,eAGhCxB,GAAauB,GAAmBT,EAAgBO,QAAQC,YAAa,CAErE,IADAC,GAAoC,MAC7BvB,GAAauB,GAAmBT,EAAgBO,QAAQC,aAC3DC,EAAkBA,EAAgBE,UAAU,EAAGF,EAAgBG,OAAS,GAAK,MAEjFH,EAAkBA,EAAgBE,UAAU,EAAGF,EAAgBG,OAAS,IAAM,MAElFb,EAAeU,GAEnBJ,GAAkB,KACnB,CAACD,IAQJS,OAAOC,iBAAiB,UANH,WACjBC,aAAalB,GACbA,EAAUmB,YAAW,WACjBX,GAAkB,KACnB,QAMH,sBAAKtE,IAAKiE,EAAiB1H,UAAU,qCAArC,SAA2EwH,KCTpEmB,OA5Bf,YAAmE,IAA7ChQ,EAA4C,EAA5CA,GAAIc,EAAwC,EAAxCA,YAAaO,EAA2B,EAA3BA,WAAYN,EAAe,EAAfA,YAIzC8G,EAAWC,cAUjB,OACI,uBAAKT,UAAU,cAAc+F,QATZ,WACjBvF,EAAS,CACLrI,KAAM,gBACNE,QAAS,CAAEM,KAAIc,cAAaO,aAAYN,kBAM5C,UACI,uBAAKsG,UAAU,aAAf,UACI,eAAC,KAAD,CAAiB4I,KAAMC,KAAY7I,UAAU,oBAC7C,sBAAKA,UAAU,sBAEnB,uBAAKA,UAAU,gBAAf,UACI,eAAC,GAAD,CAAgBvG,YAAaA,IAC7B,uBAAKuG,UAAU,qCAAf,sBAA8DhG,Y,wCC8L/D8O,GAhNW,SAAC,GAAiC,IAA/BC,EAA8B,EAA9BA,UAAWC,EAAmB,EAAnBA,aAM9BtI,EAAUC,cACVH,EAAWC,cAPsC,EAQHH,mBAAS,MARN,oBAQhD2I,EARgD,KAQ5BC,EAR4B,OAU/B5I,mBAAS,IAVsB,oBAUhD6I,EAVgD,KAU1CC,EAV0C,OAWjB9I,mBAAS,IAXQ,oBAWhD+I,EAXgD,KAWnCC,EAXmC,KAYjDvR,EAAW4L,aAAY,SAAC1L,GAAD,OAAWA,EAAMmF,OAAOrF,YAZE,EAcvBuI,oBAAS,GAdc,oBAchDiJ,EAdgD,KAcrCC,EAdqC,KAiBjDtI,EAAM,uCAAG,WAAOE,GAAP,2BAAAC,EAAA,6DACXD,EAAEE,iBAEFkI,GAAW,GAHA,SAMDC,EAAY,CACdhQ,YAAa0P,EACbzP,YAAa2P,EACbK,UAAW3R,GATR,SAagBgG,GAAM0D,KAAN,WAEnBgI,GACF/H,OAOE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAnClB,OAaDH,EAbC,OA0CP6H,GAAW,GA1CJ,EA4C8C7H,EAASvC,KAAtD3F,EA5CD,EA4CCA,YAAaC,EA5Cd,EA4CcA,YAAaM,EA5C3B,EA4C2BA,WAAYrB,EA5CvC,EA4CuCA,GAE9CuQ,EAAsB,CAClBvQ,KACAc,cACAC,cACAM,eAGJgP,GAAa,GArDN,kDAwDPhH,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCA1DN,0DAAH,sDAiFZ,OAnBAW,qBAAU,WAIN,GAA2B,OAAvByG,EAA6B,CAEzBzI,EAAS,CACLrI,KAAM,iBACNE,QAAS4Q,OAOtB,CAACzI,EAAUyI,IAKV,gBAACU,GAAA,EAAD,CACIrG,KAAMyF,EACNa,SAAS,SACTC,OAAQ,WACJb,GAAa,IAJrB,UAMI,eAACW,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,8BAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,gBAACyI,GAAA,EAAMnD,KAAP,WAGI,gBAACwD,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,uBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,eACVkD,SAAU,SAAC9B,GAIuB,KAA1BA,EAAE+B,OAAOC,MAAMkH,QACflB,EAAQhI,EAAE+B,OAAOC,MAAMmH,QACnB,iBACA,eAS5B,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BACIC,UAAQ,EACRrK,UAAU,eACVkD,SAAU,SAAC9B,GAIuB,KAA1BA,EAAE+B,OAAOC,MAAMkH,QACfhB,EAAelI,EAAE+B,OAAOC,MAAMmH,QAC1B,iBACA,kBAYhC,gBAACZ,GAAA,EAAMa,OAAP,WACI,eAAC/D,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,sBACV+F,QAAS,WACLiD,GAAa,IAJrB,oBAQA,eAACvC,GAAA,EAAD,CACIV,QAAS,WACLiD,GAAa,IAEjByB,UAAWlB,EACXpR,KAAK,SACL6H,UAAU,sBACV0G,QAAQ,eAPZ,qC,OCtJLgE,OA1Cf,YAA0C,EAAfC,YAAgB,IAAD,EAEJrK,oBAAS,GAFL,oBAE/ByI,EAF+B,KAEpBC,EAFoB,KAMhC5Q,EAAUuL,aAAY,SAAC1L,GAAD,OAAWA,EAAMuB,OAAOpB,WAKpD,OACI,uBAAK4H,UAAU,mBAAf,UACI,qBAAIA,UAAU,0BAAd,qBAIA,uBAAKA,UAAU,iCAAf,UACI,eAAC,KAAD,CAAiB4I,KAAMgC,KAAc5K,UAAU,oBAAoB+F,QAAS,WACxEiD,GAAa,MAEjB,uBAAMhJ,UAAU,kBAAhB,kCAMH5H,EAAQkQ,OAAS,EAAI,sBAAKtI,UAAU,eAAf,SACjB5H,EAAQQ,KAAI,gBAAGD,EAAH,EAAGA,GAAIc,EAAP,EAAOA,YAAaO,EAApB,EAAoBA,WAAYN,EAAhC,EAAgCA,YAAhC,OAAkD,eAAC,GAAD,CAAYf,GAAIA,EAAac,YAAaA,EAAaO,WAAYA,EAAYN,YAAaA,GAAnEf,QACnF,sBAAKqH,UAAU,qBAAf,gCAET,eAAC,GAAD,CACIgJ,aAAcA,EACdD,UAAWA,Q,mBClC3B,I,GAmOe8B,GAnOS,SAAC,GAAiC,IAA/B9B,EAA8B,EAA9BA,UAAWC,EAAmB,EAAnBA,aAO5BtI,EAAUC,cAPqC,EASGL,mBAAS,CAC7D7G,YAAa,GACbC,YAAa,KAXoC,oBAS9CoR,EAT8C,KASxBC,EATwB,KAc/CC,EAAmBrH,aAAY,SAAC1L,GAAD,OAAWA,EAAMuB,OAAOO,eAAepB,MACtEP,EAAUuL,aAAY,SAAC1L,GAAD,OAAWA,EAAMuB,OAAOpB,WAG5CqB,EAA6BqR,EAA7BrR,YAAaC,EAAgBoR,EAAhBpR,YAErB8I,qBAAU,YAIoB,WAEtB,GAAyB,OAArBwI,EACO5S,EAAQQ,KAAI,SAAAY,GAAM,OAAIA,EAAOb,KAAOqS,EACvCD,EAAwB,CACpBtR,YAAaD,EAAOC,YACpBC,YAAaF,EAAOE,cACnBF,KAKjByR,KAED,CAAC7S,EAAS4S,IAIb,IAAMxK,EAAWC,cA1CoC,EA2CKH,mBAAS,MA3Cd,oBA2C9C4K,EA3C8C,KA2CvBC,EA3CuB,KA+C/CjK,EAAM,uCAAG,WAAOE,GAAP,2BAAAC,EAAA,6DACXD,EAAEE,iBADS,SAMD/H,EAAe,CACjBE,YAAaqR,EAAqBrR,YAClCC,YAAaoR,EAAqBpR,aAR/B,SAYgBqE,GAAM0G,IAAN,mBACPuG,GACZzR,GACFmI,OAEE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA7BlB,OAYDH,EAZC,SAqC8CA,EAASvC,KAAtD3F,EArCD,EAqCCA,YAAaC,EArCd,EAqCcA,YAAaM,EArC3B,EAqC2BA,WAAYrB,EArCvC,EAqCuCA,GAE9CwS,EAAyB,CACrBxS,KACAc,cACAC,cACAM,eAGJgP,GAAa,GA9CN,kDAiDPhH,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCAnDN,0DAAH,sDAyEZ,OAlBAW,qBAAU,WAIN,GAA8B,OAA1B0I,EAAgC,CAE5B1K,EAAS,CACLrI,KAAM,wBACNE,QAAS6S,OAOtB,CAAC1K,EAAU0K,IAKV,gBAACvB,GAAA,EAAD,CACIrG,KAAMyF,EACNa,SAAS,SACTC,OAAQ,WACJb,GAAa,IAJrB,UAMI,eAACW,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,4BAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,gBAACyI,GAAA,EAAMnD,KAAP,WACI,gBAACwD,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,uBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRjH,MAAO3J,EACPuG,UAAU,eACVkD,SAAU,SAAC9B,GAGP2J,EAAwB,2BACjBD,GADgB,IACMrR,YAAa2H,EAAE+B,OAAOC,MAAMmH,QACjD,iBACA,iBAU5B,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BACIC,UAAQ,EACRjH,MAAO1J,EACPsG,UAAU,eACVkD,SAAU,SAAC9B,GAGP2J,EAAwB,2BACjBD,GADgB,IACMpR,YAAa0H,EAAE+B,OAAOC,MAAMmH,QACjD,iBACA,oBAahC,gBAACZ,GAAA,EAAMa,OAAP,WACI,eAAC/D,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,sBACV+F,QAAS,WACLiD,GAAa,IAJrB,oBAQA,eAACvC,GAAA,EAAD,CACItO,KAAK,SACL6H,UAAU,sBACV0G,QAAQ,eAHZ,oC,2BC9Nd0E,GAASC,KAAOC,IAAV,4dA6BZ,SAASC,GAAT,GAAmC,IAAlBC,EAAiB,EAAjBA,QAASpM,EAAQ,EAARA,KAAQ,EAQ1BqM,oBAAS,CACTD,UACApM,SAPAsM,EAH0B,EAG1BA,cACAC,EAJ0B,EAI1BA,kBACAC,EAL0B,EAK1BA,aACAC,EAN0B,EAM1BA,KACAC,EAP0B,EAO1BA,WAOJ,OACI,mDAAWJ,KAAX,cACI,iCACKE,EAAahT,KAAI,SAAAmT,GAAW,OACzB,+CAAQA,EAAYC,uBAApB,aACKD,EAAY/M,QAAQpG,KAAI,SAAAqT,GAAM,OAC3B,+CAAQA,EAAOC,kBAAf,aAAkCD,EAAOE,OAAO,wBAKhE,kDAAWR,KAAX,aACKE,EAAKjT,KAAI,SAACwT,EAAKtG,GAEZ,OADAgG,EAAWM,GAEP,+CAAQA,EAAIC,eAAZ,aACKD,EAAIE,MAAM1T,KAAI,SAAA2T,GACX,OAAO,+CAAQA,EAAKC,gBAAb,aAA8BD,EAAKJ,OAAO,2BA6FlEM,I,GAAAA,GAnFf,YAAmC,IAAfC,EAAc,EAAdA,WAIVC,EAAgB,CAClBC,YAAaF,GAeXlB,EAAUqB,OAAOC,KAAKH,EAAcC,YAAY,IACjD5T,QAAO,SAAC+D,EAAKgQ,GAAN,MAAqB,OAARhQ,GAAwB,eAARA,GAAgC,eAARA,KAC5DnE,KAAI,SAACmE,EAAKpE,GAEP,MAAY,eAARoE,EAGO,CACHuJ,OAHJvJ,EAAM,aAIFiQ,SAAU,cAIN,cAARjQ,EAGO,CACHuJ,OAHJvJ,EAAM,YAIFiQ,SAAU,aAIN,UAARjQ,EAGO,CACHuJ,OAHJvJ,EAAM,QAIFiQ,SAAU,SAaX,CACH1G,OAAQvJ,EACRiQ,SAAUjQ,MAOhBkQ,EAAeC,IAAMC,SACvB,kBAAM3B,IACN,CAACA,IAKL,OACI,eAACJ,GAAD,UACI,eAAC,GAAD,CAAOI,QAASyB,EAAc7N,KAAMsN,OCoRjCU,GAvZO,WAElB,IAiBIpC,EAjBE5M,EAAcsF,iBAAOvF,IACrBkP,EAAS3J,sBAAOV,GAEhBtC,EAAUC,cACVH,EAAWC,cANO,EAQUH,oBAAS,GARnB,oBAQjByI,EARiB,KAQNC,EARM,OASU1I,oBAAS,GATnB,oBASjBU,EATiB,KASNC,EATM,OAUYX,oBAAS,GAVrB,oBAUjBgN,EAViB,KAULC,EAVK,OAYMjN,mBAAS,IAZf,oBAYjBkN,EAZiB,KAYRC,EAZQ,OAaQnN,mBAAS,IAbjB,oBAajBoN,EAbiB,KAaPC,EAbO,KAelB5T,EAAiB4J,aAAY,SAAC1L,GAAD,OAAWA,EAAMuB,OAAOO,kBAErDb,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAIrDa,IACAiR,EAAmBjR,EAAepB,IAtBd,MA2BwB2H,mBAAS,CACrDoM,WAAY,KA5BQ,oBA2BjBkB,EA3BiB,KA2BCC,EA3BD,KA+BxBrL,qBAAU,YAEgB,uCAAG,4BAAAnB,EAAA,mEAIb2J,EAJa,4BAOUhI,IAAnBqK,EAAOpF,SACPoF,EAAOpF,UAGXhH,GAAa,GAXA,SAaUlD,GAAMoE,IAAN,mBACP6I,GACZ,CACI7M,YAAa,IAAIC,EAAY6J,SAAQ,SAAA6F,GACjCT,EAAOpF,QAAU6F,OAG3BpM,OAOE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAvCZ,QAaPH,EAbO,UAmDTkM,EAAoB,CAChBnB,WAAY/K,EAASvC,KAAKsN,aAE9BzL,GAAa,IAtDJ,yDA6DjBe,QAAQC,IAAR,MA7DiB,0DAAH,qDAkEtB8L,KACD,CAACrN,EAASsK,IAEb,IAiLIvR,EACAC,EACAM,EA7JEgU,EAAgB,uCAAG,WAAO5M,GAAP,iBAAAC,EAAA,yDAGrBD,EAAEE,iBAHmB,SAQjBqM,EAAY,MACa,OAArB3C,GAA6BwC,EAAQlF,OAAS,GATjC,wBAWbiF,GAAc,GAGVZ,EAAgB,CAAED,WAAYc,GAdrB,SAiBgBzP,GAAM0G,IAAN,mBAAsBuG,GAAoB2B,GAAejL,OAClF,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA9BZ,UAsCiB,MAtCjB,OAsCMF,OAtCN,wBAwCT2L,GAAc,GACdtM,GAAa,GAzCJ,UA0C0BlD,GAAMoE,IAAN,mBACnB6I,IAAoBtJ,OAC5B,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAxDpB,QA0CHmM,EA1CG,OAmETJ,EAAoB,CAChBnB,WAAYuB,EAAqB7O,KAAKsN,aAG1CzL,GAAa,GAvEJ,0DA8EjBe,QAAQC,IAAR,MACAsL,GAAc,GACdtM,GAAa,GAhFI,0DAAH,sDAyFhBiN,EAAY,uCAAG,sBAAA7M,EAAA,mEAIT2J,EAJS,4BAOchI,IAAnBqK,EAAOpF,SACPoF,EAAOpF,UAGXhH,GAAa,GAXJ,SAaclD,GAAMoQ,OAAN,mBACPnD,GACZ,CACI7M,YAAa,IAAIC,EAAY6J,SAAQ,SAAA6F,GACjCT,EAAOpF,QAAU6F,OAG3BpM,OAEE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAlChB,cAwCTtB,EAAS,CACLrI,KAAM,gBACNE,QAAS0B,IA1CJ,yDAiDbiI,QAAQC,IAAR,MAjDa,0DAAH,qDA+DVyK,EAAekB,EAAflB,WA4BR,OAtBI3S,IAEAN,EAAcM,EAAeN,YAC7BC,EAAcK,EAAeL,YAC7BM,EAAaD,EAAeC,YAMhCwI,qBAAU,WAINhC,EAAS,CACLrI,KAAM,gBACNE,QAAS,SAGd,CAACmI,EAAUtH,IAMV,uBAAK8G,UAAU,2BAAf,UACI,qBAAIA,UAAU,wBAAd,sBAGC,OAACjG,QAAD,IAACA,OAAD,EAACA,EAAgBpB,IAId,uBAAKqH,UAAU,iBAAf,UACI,sBAAKC,MAAO,CAAEiK,WAAY,MAAOC,cAAe,OAAhD,SACI,uBAAMrH,SAAU,SAAC1B,GAAD,OAAO4M,EAAiB5M,IAAxC,SACI,uBAAKpB,UAAU,mBAAf,UACI,eAACyG,GAAA,EAAD,CAAQC,QAAQ,YAAY1G,UAAU,mBAAtC,SAAyD,wBAAOiD,QAAQ,oBAAf,2BACzD,wBAAOjD,UAAU,oBAAoBoO,OAAO,OAAOzV,GAAG,oBAAoBR,KAAK,OAAOgR,KAAK,OAAOjG,SAAU,SAAC9B,IA1NtH,SAACA,GAOhB,GALAA,EAAEE,iBAGFqM,EAAYvM,EAAE+B,OAAOkL,MAAM,GAAGlF,MAE1B/H,EAAE+B,OAAOkL,MAAM,GAAI,CACnB,IAAMC,EAAS,IAAIC,WACnBD,EAAOE,OAAP,uCAAgB,WAAOpN,GAAP,eAAAC,EAAA,sDACNwF,EAAOzF,EAAE+B,OAAOsL,OACtBhB,EAAW5G,GAFC,2CAAhB,sDAIAyH,EAAOI,WAAWtN,EAAE+B,OAAOkL,MAAM,IAIrCjN,EAAE+B,OAAOC,MAAQ,KA0MWuL,CAAWvN,MAIf,uBAAMpB,UAAU,sBAAhB,SAAuC0N,GAAsB,YAG7D,eAACjH,GAAA,EAAD,CAAQC,QAAQ,YAAY1G,UAAU,mBAAmB7H,KAAK,SAA9D,2BAMZ,8BAAKsB,IACL,6BAAIC,IACJ,6BAAIM,IAEJ,uBAAKgG,UAAU,4BAAf,UACI,uBAAKA,UAAU,kCAAf,UACI,eAAC,KAAD,CAAiB4I,KAAMgG,KAAQ5O,UAAU,qBAAqB+F,QAAS,WACnEiD,GAAa,MAGjB,eAAC,KAAD,CAAiBJ,KAAMiG,KAAS7O,UAAU,uBACtC+F,QAAS,WACLwC,OAAOuG,QAAQ,+CACXZ,UAafnF,EAAY,eAAC,GAAD,CACTC,aAAcA,EACdD,UAAWA,IACV,QAMP/H,EAMG,uBAAKhB,UAAU,oBAAf,UAAmC,eAAC+O,GAAA,EAAD,CAASC,UAAU,WACnD,gEALH1B,EAE2C,uBAAKtN,UAAU,oBAAf,UAAmC,eAAC+O,GAAA,EAAD,CAASC,UAAU,WAC9F,+DAHiC,IAAtBtC,EAAWpE,OAAe,sBAAKtI,UAAU,gBAAf,sCAErC,eAAC,GAAD,CAAU0M,WAAYA,OA9Df,sBAAK1M,UAAU,sBAAf,sCCxMpBiP,GAzHC,WAAM,MAIY3O,mBAAS,IAJrB,oBAIXlI,EAJW,KAIF8W,EAJE,OAKgB5O,oBAAS,GALzB,oBAKXU,EALW,KAKAmO,EALA,KAMZ3O,EAAWC,cAEXC,EAAUC,cAEVzH,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAkFzD,OAhFAsJ,qBAAU,WAEM5D,aAAaC,QAAQ,SAI7BD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,QAIlB,IAGHU,qBAAU,YACU,uCAAG,4BAAAnB,EAAA,sEAGX8N,GAAa,GAHF,SAIYpR,GAAMoE,IAAN,YAErBT,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAnBd,QAILH,EAJK,QA0BEvC,OACT8P,EAAWvN,EAASvC,MACpB+P,GAAa,IA5BN,gDAgCXnN,QAAQC,IAAR,MAhCW,yDAAH,qDAqChBmN,KACD,CAAC1O,EAASxH,IAEbsJ,qBAAU,WAQFhC,EAAS,CACLrI,KAAM,cACNE,QAASD,IAOjB+W,GAAa,KAEd,CAAC/W,EAASoI,IAMT,sBAAKR,UAAU,UAAf,SACI,uCACI,eAAC,GAAD,IACCgB,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,4DAIR,uCACI,eAAC,GAAD,IACA,eAAC,GAAD,a,2BC0FTqP,I,mBA/Ma,SAAC,GAAsI,IAApIC,EAAmI,EAAnIA,YAAaC,EAAsH,EAAtHA,YAAaC,EAAyG,EAAzGA,cAAeC,EAA0F,EAA1FA,YAAaC,EAA6E,EAA7EA,WAAYC,EAAiE,EAAjEA,SAAUC,EAAuD,EAAvDA,SAAUC,EAA6C,EAA7CA,SAAUC,EAAmC,EAAnCA,WAAYC,EAAuB,EAAvBA,iBAGjIC,EAAe,SAAC5O,GAClB0O,GAAW,SAAAG,GAAW,OAAKA,MAKzBC,EAAW,SAAC9O,GACd2O,GAAiB,SAAAI,GAAiB,OAAKA,MAU3C,OAEI,iCAEI,eAACnG,GAAA,EAAD,CACIC,OAAK,EADT,SAII,gBAAC,KAAD,WACI,gBAACG,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAGR,yBACIoD,MAAOwM,EACPzX,KAAK,OACL6H,UAAU,eACVkD,SAAU,SAAC9B,GAEPkO,EAAYhQ,SAAS8B,EAAE+B,OAAOC,SAIlCnD,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAbf,SAlBD,CAAC,EAAG,GAkCa9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,WAO7B,gBAACuE,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAGR,yBACI7H,KAAK,OACL6H,UAAU,eACVkD,SAAU,SAAC9B,GACPmO,EAAYnO,EAAE+B,OAAOC,MAAM1D,MAAM,KAAK9G,KAAI,SAAAoC,GAAC,OAAIsE,SAAStE,QAE5DoI,MAAOyM,EACP5P,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAVf,SAhDD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IA6DR9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,gBASrC,gBAACmE,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,QAJpB,UAMI,eAAC,KAAD,IAEA,eAAC,KAAD,UAEI,gBAACE,GAAA,EAAD,WAEI,gBAAC,KAAD,eAAM,uBAAMpK,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BAEN,wBACIE,UAAQ,EACRrK,UAAU,eACVoD,MAAOsM,EACPxM,SAAU,SAAC9B,GAMPoO,EAAcpO,EAAE+B,OAAOC,MAAMmH,QACzB,iBACA,gBASxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,IAEA,gBAAC,KAAD,WACI,gBAAC,KAAD,eAAM,uBAAMxF,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BACN,eAACC,GAAA,EAAD,UAEI,wBACIC,UAAQ,EACRrK,UAAU,eACVoD,MAAOuM,EACPzM,SAAU,SAAC9B,GAKPqO,EAAYrO,EAAE+B,OAAOC,MAAMmH,QACvB,iBACA,gBAUxB,uBAAKtK,MAAO,CAAEmQ,QAAS,QAAvB,UACI,gBAACpG,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,gCAIR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,0BAA0BqH,UAAU,qBAAqBmJ,KAAK,uBAAuB/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAc,EAACnN,SAAU8M,IACnJ,wBAAO/M,QAAQ,0BAA0BjD,UAAU,MAAnD,gBACA,wBAAOrH,GAAG,2BAA2BqH,UAAU,sBAAsBmJ,KAAK,uBAAuB/F,MAAM,OAAOjL,KAAK,QAAQ+K,SAAU8M,IACrI,wBAAO/M,QAAQ,2BAA2BjD,UAAU,MAApD,yBAIZ,gBAACgK,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,wDAIR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,eAAeqH,UAAU,qBAAqBmJ,KAAK,YAAY/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAc,EAACnN,SAAUgN,IAC7H,wBAAOjN,QAAQ,eAAejD,UAAU,MAAxC,gBACA,wBAAOrH,GAAG,gBAAgBqH,UAAU,sBAAsBmJ,KAAK,YAAY/F,MAAM,OAAOjL,KAAK,QAAQ+K,SAAUgN,IAC/G,wBAAOjN,QAAQ,gBAAgBjD,UAAU,MAAzC,iC,SC9Mb,I,OAAA,IAA0B,6CCA1B,OAA0B,sCCoH1BsQ,GAxGQ,SAAC,GAAmC,IAAjCC,EAAgC,EAAhCA,WAAYC,EAAoB,EAApBA,cA6ClC,OAEI,eAAC,KAAD,CAAiBC,UAjBrB,SAAyBhC,GACrB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKN,GAHI,EAILI,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJsB,qBAK7BN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CT,EAAcG,KASd,SACI,eAAC,KAAD,CAAWO,YAAY,aAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,aAAaC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAzF,IAAyG5N,IAAK0N,EAASG,SAAvH,UACKf,EAAW3X,KAAI,SAAC2Y,EAASP,GACtB,OACI,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,QAAQ/F,MAAOmO,EAAQnO,OAAS,GAAIF,SAAU,SAAA9B,GAAC,OAvD5F,SAAC0E,EAAG1E,GACnB,IAAIyQ,EAAa,YAAOtB,GACxBsB,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CoN,EAAcqB,GAoDiGC,CAAad,EAAO5P,IAAI2Q,UAAU,MACzGC,YAAY,qBAAqBhS,UAAU,kBAE3CgR,EAEI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YAlDxJ,SAACD,GACpB,IAAI+L,EAAa,YAAOtB,GACxBsB,EAAcf,OAAOhL,EAAG,GACxB0K,EAAcqB,GAgDsCK,CAAiBlB,QAMvB,WArBNA,EAAMS,eAgC9B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WAzE7FyK,EAAc,GAAD,mBAAKD,GAAL,CAAiB,CAAEnN,MAAO,UA6EnB,uBAAMpD,UAAU,yBAAhB,2BAIHmR,EAASa,sBC+FnBI,I,OA3LY,SAAC,GAA4E,IAA1EC,EAAyE,EAAzEA,UAAWC,EAA8D,EAA9DA,aAAcC,EAAgD,EAAhDA,aAAcC,EAAkC,EAAlCA,gBAAiB1C,EAAiB,EAAjBA,WAK5EE,EAAe,SAAC5O,GAClB0O,GAAW,SAAAG,GAAW,OAAKA,MAiE/B,OAEI,iCACI,uBAAMjQ,UAAU,sBAAhB,SAAsC,8CACtC,eAAC,KAAD,CAAiByQ,UA5BzB,SAA6BhC,GACzB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKwB,GAHQ,EAIT1B,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJ0B,qBAKjCN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CqB,EAAa3B,KAoBT,SACI,eAAC,KAAD,CAAWO,YAAY,OAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,UAAUC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAtF,IAAsG5N,IAAK0N,EAASG,SAApH,UACKe,EAAUzZ,KAAI,SAAC2Y,EAASP,GAAV,OACX,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,YAAY/F,MAAOmO,EAAQkB,WAAa,GAAIvP,SAAU,SAAA9B,GAAC,OA3EjG,SAAC0E,EAAG1E,GACtB,IAAIyQ,EAAa,YAAOQ,GACxBR,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CkP,EAAaT,GAwE0Ga,CAAgB1B,EAAO5P,IAAI2Q,UAAU,KACpHC,YAAY,oBAAoBhS,UAAU,wBAE1CgR,EAEI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YAxErJ,SAACD,GACvB,IAAI+L,EAAa,YAAOQ,GACxBR,EAAcf,OAAOhL,EAAG,GACxBwM,EAAaT,GAsEuCc,CAAoB3B,QAI1B,WAnBNA,EAAMS,eAyB1B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WAvFjGuM,EAAa,GAAD,mBAAKD,GAAL,CAAgB,CAAEI,UAAW,UA2FjB,uBAAMzS,UAAU,yBAAhB,wBAGHmR,EAASa,qBAI1B,uBAAMhS,UAAU,sBAAhB,SAAsC,iDACtC,eAAC,KAAD,CAAiByQ,UA3DzB,SAA6BhC,GACzB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAK0B,GAHQ,EAIT5B,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJ0B,qBAKjCN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CuB,EAAgB7B,KAmDZ,SACI,eAAC,KAAD,CAAWO,YAAY,OAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,UAAUC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAtF,IAAsG5N,IAAK0N,EAASG,SAApH,UACKiB,EAAa3Z,KAAI,SAAC2Y,EAASP,GAAV,OACd,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,eAAe/F,MAAOmO,EAAQqB,cAAgB,GAAI1P,SAAU,SAAA9B,GAAC,OApGpG,SAAC0E,EAAG1E,GACzB,IAAIyQ,EAAa,YAAOU,GACxBV,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CoP,EAAgBX,GAiG6GgB,CAAmB7B,EAAO5P,IAAI2Q,UAAU,KAC7HC,YAAY,oBAAoBhS,UAAU,wBAE1CgR,EAEI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YAjGlJ,SAACD,GAC1B,IAAI+L,EAAa,YAAOU,GACxBV,EAAcf,OAAOhL,EAAG,GACxB0M,EAAgBX,GA+FoCiB,CAAuB9B,QAI7B,WAnBNA,EAAMS,eA0B1B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WAjHjGyM,EAAgB,GAAD,mBAAKD,GAAL,CAAmB,CAAEK,aAAc,UAqH1B,uBAAM5S,UAAU,yBAAhB,2BAGHmR,EAASa,qBAI1B,gBAAChI,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,gCAGR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,0BAA0BqH,UAAU,qBAAqBmJ,KAAK,uBAAuB/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAc,EAACnN,SAAU8M,IACnJ,wBAAO/M,QAAQ,0BAA0BjD,UAAU,MAAnD,gBACA,wBAAOrH,GAAG,2BAA2BqH,UAAU,sBAAsBmJ,KAAK,uBAAuB/F,MAAM,OAAOjL,KAAK,QAAQ+K,SAAU8M,IACrI,wBAAO/M,QAAQ,2BAA2BjD,UAAU,MAApD,8BCkFT+S,I,OAlQY,SAAC,GAA6I,IAA3IzD,EAA0I,EAA1IA,YAAaC,EAA6H,EAA7HA,YAAaC,EAAgH,EAAhHA,cAAeC,EAAiG,EAAjGA,YAAaC,EAAoF,EAApFA,WAAYC,EAAwE,EAAxEA,SAAUC,EAA8D,EAA9DA,SAAUC,EAAoD,EAApDA,SAAUwC,EAA0C,EAA1CA,UAAWC,EAA+B,EAA/BA,aAAcxC,EAAiB,EAAjBA,WAS7IE,EAAe,SAAC5O,GAClB0O,GAAW,SAAAG,GAAW,OAAKA,MAsC/B,OAEI,iCACI,eAACjG,GAAA,EAAD,CACIC,OAAK,EADT,SAII,gBAAC,KAAD,WACI,gBAACG,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAGR,yBACIoD,MAAOwM,EACPzX,KAAK,OACL6H,UAAU,eACVkD,SAAU,SAAC9B,GAEPkO,EAAYhQ,SAAS8B,EAAE+B,OAAOC,SAIlCnD,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAbf,SAxDD,CAAC,EAAG,GAwEa9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,WAO7B,gBAACuE,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAGR,yBACI7H,KAAK,OACL6H,UAAU,eACVkD,SAAU,SAAC9B,GACPmO,EAAYnO,EAAE+B,OAAOC,MAAM1D,MAAM,KAAK9G,KAAI,SAAAoC,GAAC,OAAIsE,SAAStE,QAE5DoI,MAAOyM,EACP5P,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAVf,SAtFD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAmGR9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,gBASrC,gBAACmE,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,QAJpB,UAMI,eAAC,KAAD,IAEA,eAAC,KAAD,UACI,gBAACE,GAAA,EAAD,WACI,gBAAC,KAAD,eAAM,uBAAMpK,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BAEN,wBACIE,UAAQ,EACRrK,UAAU,eACVoD,MAAOsM,EACPqC,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GAMPoO,EAAcpO,EAAE+B,OAAOC,MAAMmH,QACzB,iBACA,gBASxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,IAEA,gBAAC,KAAD,WACI,gBAAC,KAAD,eAAM,uBAAMxF,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BAEN,eAACC,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,eACVoD,MAAOuM,EACPoC,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GAKPqO,EAAYrO,EAAE+B,OAAOC,MAAMmH,QACvB,iBACA,gBASxB,uBAAMvK,UAAU,sBAAhB,SAAsC,8CACtC,eAAC,KAAD,CAAiByQ,UA1JzB,SAA6BhC,GACzB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKwB,GAHQ,EAIT1B,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJ0B,qBAKjCN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CqB,EAAa3B,KAkJT,SACI,eAAC,KAAD,CAAWO,YAAY,OAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,UAAUC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAtF,IAAsG5N,IAAK0N,EAASG,SAApH,UACKe,EAAUzZ,KAAI,SAAC2Y,EAASP,GAAV,OACX,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,YAAY/F,MAAOmO,EAAQkB,WAAa,GAAIvP,SAAU,SAAA9B,GAAC,OAzLjG,SAAC0E,EAAG1E,GACtB,IAAIyQ,EAAa,YAAOQ,GACxBR,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CkP,EAAaT,GAsL0Ga,CAAgB1B,EAAO5P,IAAI2Q,UAAU,KACpHC,YAAY,oBAAoBhS,UAAU,wBAE1CgR,EAEI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YAtLrJ,SAACD,GACvB,IAAI+L,EAAa,YAAOQ,GACxBR,EAAcf,OAAOhL,EAAG,GACxBwM,EAAaT,GAoLuCc,CAAoB3B,QAI1B,WAnBNA,EAAMS,eAyB1B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WArMjGuM,EAAa,GAAD,mBAAKD,GAAL,CAAgB,CAAEI,UAAW,UAyMjB,uBAAMzS,UAAU,yBAAhB,wBAGHmR,EAASa,qBAK1B,gBAAChI,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,gCAGR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,0BAA0BqH,UAAU,qBAAqBmJ,KAAK,uBAAuB/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAc,EAACnN,SAAU8M,IACnJ,wBAAO/M,QAAQ,0BAA0BjD,UAAU,MAAnD,gBACA,wBAAOrH,GAAG,2BAA2BqH,UAAU,sBAAsBmJ,KAAK,uBAAuB/F,MAAM,OAAOjL,KAAK,QAAQ+K,SAAU8M,IACrI,wBAAO/M,QAAQ,2BAA2BjD,UAAU,MAApD,8BCpOTgT,GA7BM,SAAC,GAA2C,IAAzCC,EAAwC,EAAxCA,eAAgBC,EAAwB,EAAxBA,kBAGpC,OACI,gBAACvJ,GAAA,EAAD,CACIrG,KAAM2P,EACNrJ,SAAS,SACTuJ,UAAQ,EAHZ,UAKI,eAACxJ,GAAA,EAAMnD,KAAP,CAAYxG,UAAU,sBAAtB,SAEI,mEAGJ,eAAC2J,GAAA,EAAMa,OAAP,CAAcxK,UAAU,wBAAxB,SACI,eAACyG,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,cAEV+F,QAAS,WACLmN,GAAkB,IAL1B,SAOI,kDC6hCLE,GA5hCa,SAAC,GAAiC,IAAD,IAA9BrK,EAA8B,EAA9BA,UAAWC,EAAmB,EAAnBA,aAAmB,EACnC1I,mBAAS,QAD0B,oBAClDvD,EADkD,KAC7CsW,EAD6C,KAGnD3S,EAAUC,cAEVxG,EAASwJ,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMK,UAG5CmZ,EAAiBnZ,EAAOnB,QAAO,SAAAgC,GAAC,MAAe,YAAXA,EAAE7C,QAEtCe,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBACnDqa,EAAuB5P,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBAC1D2Y,EAA2B7P,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMgB,sBAZX,EAefwF,mBAAS,IAfM,oBAelDmT,EAfkD,aAgBfnT,mBAAS,OAhBM,oBAgBlDzF,EAhBkD,KAgBnC6Y,EAhBmC,KAkBzD1R,QAAQC,IAAI,gBAAiBpH,GAlB4B,MAoBLyF,mBAAS,MApBJ,oBAoBlDqT,EApBkD,KAoB9BC,EApB8B,KAsBnDpT,EAAWC,cAtBwC,EAuBDH,mBAAS,MAvBR,oBAuBlDuT,EAvBkD,KAuB5BC,EAvB4B,OAwBCxT,mBAAS,MAxBV,oBAwBlDyT,EAxBkD,KAwB3BC,EAxB2B,OA2BvB1T,oBAAS,GA3Bc,oBA2BlDU,EA3BkD,KA2BvCC,EA3BuC,OAkCjBX,mBAAS,IAlCQ,oBAkClD2T,EAlCkD,KAkCpCC,EAlCoC,OAmCjB5T,mBAAS,IAnCQ,oBAmClD6T,EAnCkD,KAmCpCC,EAnCoC,QAqCrB9T,oBAAS,GArCY,sBAqClD+T,GArCkD,MAqCtCC,GArCsC,SAsCbhU,oBAAS,GAtCI,sBAsClD2S,GAtCkD,MAsClCC,GAtCkC,SA0CzB5S,mBAAS,GA1CgB,sBA0ClDsP,GA1CkD,MA0CxCN,GA1CwC,SA2CzBhP,mBAAS,GA3CgB,sBA2ClDuP,GA3CkD,MA2CxCN,GA3CwC,SA4C3BjP,oBAAS,GA5CkB,sBA4ClDiU,GA5CkD,MA4CzCzE,GA5CyC,SA6CfxP,oBAAS,GA7CM,sBA6ClDkU,GA7CkD,MA6CnCzE,GA7CmC,SA8CzBzP,oBAAS,GA9CgB,sBA8ClDmU,GA9CkD,MA8CxCC,GA9CwC,SA+CvBpU,mBAAS,IAAIqU,MA/CU,sBA+ClDC,GA/CkD,MA+CvCC,GA/CuC,SAgD3BvU,mBAAS,IAAIqU,MAhDc,sBAgDlDG,GAhDkD,MAgDzCC,GAhDyC,SAiDrBzU,mBAAS,qBAjDY,sBAiDlDoP,GAjDkD,MAiDtCF,GAjDsC,SAkDzBlP,mBAAS,kBAlDgB,sBAkDlDqP,GAlDkD,MAkDxCF,GAlDwC,SAuDrBnP,mBAAS,CAAC,CAAE8C,MAAO,MAvDE,sBAuDlDmN,GAvDkD,MAuDtCC,GAvDsC,MA0DnDwE,GAASzE,GAAW3X,KAAI,SAAAwK,GAAK,kCAAUA,GAAV,IAAiB6R,MAAO1E,GAAW2E,QAAQ9R,QA1DrB,GA+DvB9C,mBAAS,CAAC,CAAEmS,UAAW,MA/DA,sBA+DlDJ,GA/DkD,MA+DvCC,GA/DuC,SAgEjBhS,mBAAS,CAAC,CAAEsS,aAAc,MAhET,sBAgElDL,GAhEkD,MAgEpCC,GAhEoC,MAmEnD3G,GAAOwG,GAAUzZ,KAAI,SAAAwT,GAAG,kCAAUA,GAAV,IAAe6I,MAAO5C,GAAU6C,QAAQ9I,QAChEZ,GAAU+G,GAAa3Z,KAAI,SAAAqT,GAAM,kCAAUA,GAAV,IAAkBgJ,MAAO1C,GAAa2C,QAAQjJ,QAI/EkJ,GAFM,sBAAOtJ,IAAP,YAAgBL,KAEF5S,KAAI,SAAAwK,GAE1B,MAAI,cAAeA,EACR,CAAEgS,KAAM,MAAOhS,MAAOA,EAAMqP,UAAWwC,MAAO7R,EAAM6R,OAG3D,iBAAkB7R,EACX,CAAEgS,KAAM,MAAOhS,MAAOA,EAAMwP,aAAcqC,MAAO7R,EAAM6R,OAG3D,QAKL/T,GAAM,uCAAG,WAAOE,GAAP,qDAAAC,EAAA,yDACXD,EAAEE,iBACFL,GAAa,GAIe,mBAAX,OAAbpG,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,OAAoD,SAAX,OAAb0C,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,OAAmB0C,IAC7Ewa,EAAU,MAGVxa,GAAwC,YAAvBA,EAAc1C,OAAuBwb,IACtD0B,EAAUxa,EAAclC,IAGxBkC,GAAwC,YAAvBA,EAAc1C,MAAsBwb,IACrD0B,EAAU/V,SAASqU,IAfZ,SAqBc,iBAAjBQ,IAGAmB,EAEA,CACIlW,KAAK,yBACDmW,cAAetB,EACfuB,mBAAoBjB,GACpBkB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,GACXV,GAAiB,CAAEsC,eAAgBtC,IAPvC,IAQA3Z,MAAOub,EAGPW,aACA,CACIC,UAAWrG,GACXsG,UAAWrG,GACXsG,UAAWzG,GACX0G,UAAWzG,GACX0G,QAAS7B,IAEb8B,QAAS,GACTC,aAAc,GACdhX,IAAKrG,MAQI,cAAjBib,GAAiD,iBAAjBA,IAIhCmB,EACA,CACIlW,KAAK,yBACDmW,cAAetB,EAEfwB,UAAWhB,IACPhB,GAAiB,CAAEsC,eAAgBtC,IAJvC,IAKAiC,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,EACPiB,QAAS,GACTC,aAAc,GACdP,aAAc,KACdzW,IAAKrG,MASI,QAAjBib,GAA2C,aAAjBA,GAAgD,aAAjBA,IAIzDmB,EACA,CACIlW,KAAK,yBACDmW,cAAetB,EAEfwB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,GAGH5B,GAAiB,CAAEsC,eAAgBtC,IAVvC,IAWA6C,QAAStB,GACTuB,aAAc,GACdP,aAAc,KACdzW,IAAKrG,MAMI,aAAjBib,IAEAmB,EACA,CACIlW,KAAK,yBACDmW,cAAetB,EACfuB,mBAAoBjB,GACpBkB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,GAGH5B,GAAiB,CAAEsC,eAAgBtC,IAVvC,IAWA8C,aAAcpB,GACda,aAAc,KACdM,QAAS,GACT/W,IAAKrG,MAKI,sBAAjBib,IAEAmB,EACA,CACIlW,KAAK,yBACDmW,cAAetB,EACfuB,mBAAoBjB,GACpBkB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,GAGH5B,GAAiB,CAAEsC,eAAgBtC,IAVvC,IAYA+C,kBAAmB,CAEfC,YAAatB,GAAWnc,QAAO,SAAU0d,GACrC,MAAoB,QAAbA,EAAItB,QAEfY,aACA,CACIC,UAAWrG,GACXsG,UAAWrG,GACXsG,UAAWzG,GACX0G,UAAWzG,KAGnB4G,aAAc,GACdP,aAAc,KACdM,QAAS,GACT/W,IAAKrG,MAeZmc,EAnLE,qBAsLCpB,IAAgBE,EAtLjB,kCAwLkBpW,GAAM0D,KAAN,aAEb6T,GACF5T,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAxM1B,QAwLCH,EAxLD,eAqNHyS,EAAgB,IAChBF,EAAgB,IAChB1D,GAAc,CAAC,CAAEpN,MAAO,MACxBoP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B3C,IAAW,GACXC,IAAiB,GACjB2E,IAAY,GACZG,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAEfjB,EAAiBH,GACjBK,EAAqB,OAACJ,QAAD,IAACA,OAAD,EAACA,EAA0B7a,IAehDsI,GAAa,GAhPV,EAmPoIU,EAASvC,KAAxIzG,EAnPL,EAmPKA,GAAImd,EAnPT,EAmPSA,cAAeC,EAnPxB,EAmPwBA,eAAgBR,EAnPxC,EAmPwCA,cAAeC,EAnPvD,EAmPuDA,mBAAoBC,EAnP3E,EAmP2EA,UAAWC,EAnPtF,EAmPsFA,WAAYG,EAnPlG,EAmPkGA,SAAU/b,EAnP5G,EAmP4GA,MAAOW,EAnPnH,EAmPmHA,aAIlF,iBAAhCkH,EAASvC,KAAK0W,gBACdE,EAAerU,EAASvC,KAAK4W,aAE7BlC,EAAwB,CACpBnb,KACAmd,gBACAP,gBACAQ,iBACAP,qBACAC,YACAC,aACAG,WACAG,eACAlc,QACAW,kBAO4B,QAAhCkH,EAASvC,KAAK0W,eAA2D,aAAhCnU,EAASvC,KAAK0W,eAAgE,aAAhCnU,EAASvC,KAAK0W,gBACrGQ,EAAU3U,EAASvC,KAAKkX,QAExBxC,EAAwB,CACpBnb,KACAmd,gBACAP,gBACAQ,iBAEAN,YACAC,aACAG,WACA/b,QACAW,eACA6b,aAI4B,cAAhC3U,EAASvC,KAAK0W,eAAiE,iBAAhCnU,EAASvC,KAAK0W,eAC7DhC,EAAwB,CACpBnb,KACAmd,gBACAC,iBACAR,gBAEAE,YACA3b,QACAW,eACAib,aACAG,aAK4B,aAAhClU,EAASvC,KAAK0W,gBAEdS,EAAe5U,EAASvC,KAAKmX,aAE7BzC,EAAwB,CACpBnb,KACAmd,gBACAC,iBACAR,gBACAC,qBACAC,YACAC,aACAG,WACA/b,QACAW,eACA8b,kBAK4B,sBAAhC5U,EAASvC,KAAK0W,gBAEdS,EAAe5U,EAASvC,KAAKmX,aAC7BC,EAAoB7U,EAASvC,KAAKoX,kBAElC1C,EAAwB,CACpBnb,KACAmd,gBACAC,iBACAR,gBACAC,qBACAC,YACAC,aACAG,WACA/b,QACAW,eACA8b,eACAC,oBACAR,kBApVL,YA8VHX,EA9VG,wBAoWC1B,GACA3R,QAAQC,IAAI,WAAYoT,EAASxa,EAAe8Y,GAChD0B,EAAU1B,EACVgD,EAAsB,aAClBC,WAAY,SACZC,cAAa,OAAEhc,QAAF,IAAEA,OAAF,EAAEA,EAAelC,IAC3B2c,KAIPtT,QAAQC,IAAI,aAAcoT,EAASxa,GACnCwa,EAAUxa,EAAclC,GACxBge,EAAsB,aAClBC,WAAY,UACTtB,IAlXR,UAiYcvX,GAAM0G,IAAN,6BACS4Q,GACtBsB,GACFjV,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAjZtB,QAiYHH,EAjYG,SAwZ+EA,EAASvC,KAxZxF,EAwZK/E,WAxZL,EAwZiBC,WAxZjB,EAwZ6BC,cAxZ7B,EAwZ4C5B,GAxZ5C,EAwZgD8B,aAxZhD,EAwZ8DD,aAOjEwZ,EAOIrS,EAASvC,MAKbgV,EAAgB,IAChBF,EAAgB,IAChB1D,GAAc,CAAC,CAAEpN,MAAO,MACxBoP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B3C,IAAW,GACXC,IAAiB,GACjB2E,IAAY,GACZG,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAMf1T,GAAa,GACbyS,EAAiBH,GACjBK,EAAqB,OAACJ,QAAD,IAACA,OAAD,EAACA,EAA0B7a,IA5b7C,WAgcF0b,GAhcE,wBAicHnB,IAAkB,GAClBlK,GAAa,GAlcV,2BAucPkK,IAAkB,GAvcX,kDA0cPlR,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCA5cN,0DAAH,sDAodZW,qBAAU,WAEN,GAA6B,OAAzBqR,EAA+B,EAIT,OAAbhZ,QAAa,IAAbA,OAAA,EAAAA,EAAelC,OAAf,OAAsB4a,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAsB5a,MAAsC,KAAV,OAApB4a,QAAoB,IAApBA,OAAA,EAAAA,EAAsB5a,MAA2C,KAAV,OAApB4a,QAAoB,IAApBA,OAAA,EAAAA,EAAsB5a,OAa7G,OAACkC,QAAD,IAACA,OAAD,EAACA,EAAelC,OAAM,OAAC4a,QAAD,IAACA,OAAD,EAACA,EAAsB5a,OAAQ,OAACkC,QAAD,IAACA,OAAD,EAACA,EAAelC,MAA0B,OAApB4a,QAAoB,IAApBA,OAAA,EAAAA,EAAsB5a,IAAK,IAGvG6H,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMkb,GAAP,IAA6BrY,UAAU,CAAE2Y,GAAH,0BAA4BN,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAsBrY,gBAfnGsF,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMkb,GAAP,IAA6BrY,UAAU,CAAE2Y,GAAH,0BAA4BN,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAsBrY,mBAsBhH,CAACsF,EAAUqT,IAIdrR,qBAAU,WAEN,GAA8B,OAA1BuR,EAAgC,EACZ,WAEhB,IAAiB,OAAblZ,QAAa,IAAbA,OAAA,EAAAA,EAAelC,OAAf,OAAsB4a,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAsB5a,IAeb,SAAX,OAApB4a,QAAoB,IAApBA,OAAA,EAAAA,EAAsBpb,OACtBqI,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMkb,GAAP,IAA6BrY,UAAU,CAAE6Y,EAAsB+C,gBAAzB,mBAA4CvD,EAAqBrY,oBAlBtH,CAEI,IAAI6b,EAA6BhD,EAAsBvZ,aAAa5B,KAAI,SAAAoC,GACpE,OAAOA,EAAEE,aACV8b,KAAK,GAGRxW,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,GAAD,mBAAM6Y,EAAsB7Y,WAA5B,YAA0C6b,SAc5FE,MAGL,CAACzW,EAAUuT,IAId,IAAMmD,GAAiB,SAAC9V,GACpBsT,IAAY,SAAAyC,GAAY,OAAKA,MAkBjC,OAbA3U,qBAAU,WACF+Q,IACAG,EAAiBH,GAEbK,EADAJ,EACsBA,EAAyB7a,GAEzB,OAI/B,CAAC4a,EAAsBC,IAItB,gBAAC7J,GAAA,EAAD,CACIrG,KAAMyF,EACNa,SAAS,SACTlH,KAAK,KACLmH,OAAQ,WACJb,GAAa,GACboL,EAAgB,IAChBtE,IAAW,GACXC,IAAiB,GACjB2E,IAAY,GACZlE,GAAc,CAAC,CAAEpN,MAAO,MACxBoP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3BoC,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,OACmB,KAAV,OAApBpB,QAAoB,IAApBA,OAAA,EAAAA,EAAsB5a,KACtB+a,EAAiB,IACjBE,EAAsB,MAEtBF,EAAiBH,GACjBK,EAAsBJ,IAE1BH,EAAO,QACPiB,IAAc,GACdpB,IAAkB,IAxB1B,UA2BI,eAACvJ,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,gCAEJ,wBAAMjH,SAAU5B,GAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UAEKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,8DAKR,uCACI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAKpK,UAAU,0BAAf,UACI,uBAAMA,UAAU,WAAhB,4BACkB,iBAAjBmU,EAAmC,uBAAMnU,UAAU,eAAhB,uDAAoF,YAIpI,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BACIC,UAAQ,EACRrK,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBAEZ9O,SAAU,SAAC9B,GAGP8S,EAAgB9S,EAAE+B,OAAOC,MAAMmH,QAC3B,iBACA,eAQxB,gBAAC6M,GAAA,EAAD,CACIze,GAAG,yBACH0e,UAAWta,EACXua,SAAU,SAACC,GAAD,OAAOlE,EAAOkE,IACxBvX,UAAU,iBAJd,UAMI,gBAACwX,GAAA,EAAD,CAAKC,SAAS,OAAOC,MAAM,OAA3B,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,uBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,0BACIjS,KAAK,OACL6H,UAAU,2CACVkD,SAAU,SAAC9B,GACgB,iBAAnBA,EAAE+B,OAAOC,OACTgR,EAAgB,gBACG,oBAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,OACG,aAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,YACG,aAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,YACG,cAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,aACG,iBAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,gBACG,yBAAnBhT,EAAE+B,OAAOC,QACToP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B2B,EAAgB,aAGG,sBAAnBhT,EAAE+B,OAAOC,QACToP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B2B,EAAgB,sBAGG,KAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,KAGxBnU,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAnCf,UAqCI,yBAAQtC,MAAM,GAAd,2BAvvBhC,CAAC,eAAgB,kBAAmB,WAAY,WAAY,YAAa,eAAgB,uBAAwB,qBAwvBxExK,KAAI,SAACiN,GACV,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,gBAYnB,iBAAjBsO,EACG,eAAC,GAAD,CACI7E,YAAaA,GACbC,YAAaA,GACbC,cAAeA,GACfC,YAAaA,GACbK,WAAYA,GACZC,iBAAkBA,GAClBL,WAAYA,GACZC,SAAUA,GACVC,SAAUA,GACVC,SAAUA,KAEb,KAGa,QAAjBsE,GAA2C,aAAjBA,GAAgD,aAAjBA,EACrD,eAAC,GAAD,CAEG3D,cAAeA,GACfD,WAAYA,KAAmB,KAErB,aAAjB4D,EAA+B,eAAC,GAAD,CAC5B3B,gBAAiBA,GACjB1C,WAAYA,GACZwC,aAAcA,GACdD,UAAWA,GACXE,aAAcA,KAAqB,KAErB,sBAAjB4B,EAAwC,eAAC,GAAD,CAErCrE,WAAYA,GAGZwC,aAAcA,GACdD,UAAWA,GAGX/C,YAAaA,GACbC,YAAaA,GACbC,cAAeA,GACfC,YAAaA,GACbC,WAAYA,GACZC,SAAUA,GACVC,SAAUA,GACVC,SAAUA,KAEP,KAIP,gBAAC7F,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAIR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,YAAYqH,UAAU,qBAAqBmJ,KAAK,SAAS/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAc,EAACnN,SAAUgU,KACvH,wBAAOjU,QAAQ,YAAYjD,UAAU,MAArC,wBACA,wBAAOrH,GAAG,aAAaqH,UAAU,sBAAsBmJ,KAAK,SAAS/F,MAAM,OAAOjL,KAAK,QAAQ+K,SAAUgU,KACzG,wBAAOjU,QAAQ,aAAajD,UAAU,MAAtC,kCAKhB,gBAACwX,GAAA,EAAD,CAAKC,SAAS,QAAQC,MAAM,QAA5B,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,yBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,0BACIjS,KAAK,OACL6H,UAAU,2CAEVkD,SAAU,SAAC9B,GAEP,GAAuB,KAAnBA,EAAE+B,OAAOC,MAETsQ,EAAiB,IACjBE,EAAsB,QACnB,CACH,IAAI9Z,EAAQK,EAAOnB,QAAO,SAACc,GAAD,OAAWA,EAAMnB,KAAO2G,SAAS8B,EAAE+B,OAAOC,UAEpEsQ,EAAiB5Z,EAAM,IACvB8Z,EAAsB,MAK9B3T,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAtBf,UAwBI,yBAAQtC,MAAM,GAAd,4BACCkQ,EAAe1a,KAAI,SAACiN,GACjB,OAEI,cADA,CACA,UAAwBzC,MAAOyC,EAAOlN,GAAIgf,UAA8B,OAApBpE,QAAoB,IAApBA,OAAA,EAAAA,EAAsBlZ,cAAewL,EAAOxL,WAAhG,SACKwL,EAAOxL,YADCwL,EAAOlN,iBAU3CkC,IAAwC,KAAV,OAAbA,QAAa,IAAbA,OAAA,EAAAA,EAAelC,MAAoC,KAAV,OAAbkC,QAAa,IAAbA,OAAA,EAAAA,EAAelC,IAAY,gBAACqR,GAAA,EAAD,CACrEC,OAAK,EADgE,UAIrE,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,4BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,WAGkB,OAAbvP,QAAa,IAAbA,GAAA,UAAAA,EAAeL,oBAAf,eAA6B8N,QAAS,EAEnC,0BACInQ,KAAK,OACL6H,UAAU,2CACVkD,SAAU,SAAC9B,GAEPwS,EAAsBxS,EAAE+B,OAAOC,QAEnCuU,SAAS,GACT1X,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAXf,UAaI,yBAAQtC,MAAM,GAAd,2BAbJ,UAeKvI,EAAcL,oBAfnB,aAeK,EAA4B5B,KAAI,SAACiN,GAC9B,OAEI,cADA,CACA,UAAwBzC,MAAOyC,EAAOlN,GAAIgf,UAAkC,OAAxBnE,QAAwB,IAAxBA,OAAA,EAAAA,EAA0BnZ,cAAewL,EAAOxL,WAApG,SACKwL,EAAOxL,YADCwL,EAAOlN,UAKpB,sBAAKqH,UAAU,0BAAf,uDAGb,gBAQnC,gBAAC2J,GAAA,EAAMa,OAAP,WACI,eAAC/D,GAAA,EAAD,CAEIC,QAAQ,aACR1G,UAAU,uCACV+F,QAAS,WAELyJ,GAAc,qBACdC,GAAY,kBACZ2E,EAAgB,IAChB5D,GAAc,CAAC,CAAEpN,MAAO,MACxBoP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B3C,IAAW,GACXC,IAAiB,GACjB2E,IAAY,GACZG,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,OAGmB,KAAV,OAApBpB,QAAoB,IAApBA,OAAA,EAAAA,EAAsB5a,KACtB+a,EAAiB,IACjBE,EAAsB,MAEtBF,EAAiBH,GACjBK,EAAsBJ,IAE1Bc,IAAc,GACdpB,IAAkB,GAClBG,EAAO,QACPrK,GAAa,IA7BrB,SAgCI,6CAGJ,eAACvC,GAAA,EAAD,CACIV,QAAS,WACLsN,EAAO,QACPiB,IAAc,GACdpB,IAAkB,GAClBlK,GAAa,IAEjByB,UAAUwJ,IAAgBE,EAC1Bhc,KAAK,SACL6H,UAAU,cACV0G,QAAQ,eAVZ,SAWI,+CAIJ,eAACD,GAAA,EAAD,CAEIzG,UAAU,cACV0G,QAAQ,eACR+D,UAAUwJ,IAAgBE,EAC1BpO,QAAS,WACLuO,IAAc,IAElBnc,KAAK,SART,SASI,iEAIX8a,GAAiB,eAAC,GAAD,CACdA,eAAgBA,GAChBC,kBAAmBA,GACnB9S,QAAS6T,IACP,S,UCt1BH2D,I,OAnNiB,SAAC,GAAiN,IAA/MtI,EAA8M,EAA9MA,YAAaC,EAAiM,EAAjMA,YAAaC,EAAoL,EAApLA,cAAeC,EAAqK,EAArKA,YAAaC,EAAwJ,EAAxJA,WAAYC,EAA4I,EAA5IA,SAA6DC,GAA+E,EAAlIiI,0BAAkI,EAAvGC,uBAAuG,EAA/ElI,UAAUC,EAAqE,EAArEA,SAAU0E,EAA2D,EAA3DA,QAASzE,EAAkD,EAAlDA,WAAY0E,EAAsC,EAAtCA,cAAezE,EAAuB,EAAvBA,iBAIhNC,EAAe,SAAC5O,GAClB0O,GAAW,SAAAG,GAAW,OAAKA,MAIzBC,EAAW,SAAC9O,GACd2O,GAAiB,SAAAI,GAAiB,OAAKA,MAQ3C,OAEI,iCAEI,eAACnG,GAAA,EAAD,CACIC,OAAK,EADT,SAII,gBAAC,KAAD,WACI,gBAACG,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAIR,yBAAQoD,MAAOwM,EACXzX,KAAK,OACL6H,UAAU,eAIVkD,SAAU,SAAC9B,GACPkO,EAAYlO,EAAE+B,OAAOC,QAIzBnD,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAdf,SApBD,CAAC,EAAG,GAqCa9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,WAc7B,gBAACuE,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAGR,yBAAQoD,MAAOyM,EACX1X,KAAK,OACL6H,UAAU,eACVkD,SAAU,SAAC9B,GACPmO,EAAYnO,EAAE+B,OAAOC,QAEzBuU,SAAS,GACT1X,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAVf,SA1DD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAuER9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,gBASrC,gBAACmE,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,QAJpB,UAMI,eAAC,KAAD,IAEA,gBAAC,KAAD,WACI,gBAAC,KAAD,eAAM,uBAAMlK,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BAEN,eAACC,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,eACVoD,MAAOsM,EACPxM,SAAU,SAAC9B,GAMPoO,EAAcpO,EAAE+B,OAAOC,MAAMmH,QACzB,iBACA,gBASxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,IAEA,gBAAC,KAAD,WACI,gBAAC,KAAD,eAAM,uBAAMxF,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BAEN,eAACC,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,eACVoD,MAAOuM,EACPzM,SAAU,SAAC9B,GAKPqO,EAAYrO,EAAE+B,OAAOC,MAAMmH,QACvB,iBACA,gBASxB,uBAAKtK,MAAO,CAAEmQ,QAAS,QAAvB,UACI,gBAACpG,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,gCAIR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,0BAA0BqH,UAAU,qBAAqBmJ,KAAK,uBAAuB/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAgBkE,EAAwBrR,SAAU8M,IAC5K,wBAAO/M,QAAQ,0BAA0BjD,UAAU,MAAnD,gBACA,wBAAOrH,GAAG,2BAA2BqH,UAAU,sBAAsBmJ,KAAK,uBAAuB/F,MAAM,OAAOjL,KAAK,QAAQkY,eAAgBkE,EAASrR,SAAU8M,IAC9J,wBAAO/M,QAAQ,2BAA2BjD,UAAU,MAApD,yBAIZ,gBAACgK,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,wDAIR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,eAAeqH,UAAU,qBAAqBmJ,KAAK,YAAY/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAgBmE,EAA8BtR,SAAUgN,IAC5J,wBAAO6H,IAAI,eAAe/X,UAAU,MAApC,gBACA,wBAAOrH,GAAG,gBAAgBqH,UAAU,sBAAsBmJ,KAAK,YAAY/F,MAAM,OAAOjL,KAAK,QAAQkY,eAAgBmE,EAAetR,SAAUgN,IAC9I,wBAAO6H,IAAI,gBAAgB/X,UAAU,MAArC,iCCxGbgY,I,OA7FY,SAAC,GAAmC,IAAjCzH,EAAgC,EAAhCA,WAAYC,EAAoB,EAApBA,cAoCtC,OACI,eAAC,KAAD,CAAiBC,UAbrB,SAAyBhC,GACrB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKN,GAHI,EAILI,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJsB,qBAK7BN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CT,EAAcG,KAKd,SACI,eAAC,KAAD,CAAWO,YAAY,aAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,aAAaC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAzF,IAAyG5N,IAAK0N,EAASG,SAAvH,UACKf,EAAW3X,KAAI,SAAC2Y,EAASP,GACtB,OACI,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,QAAQ/F,MAAOmO,EAAQnO,OAAS,GAAIF,SAAU,SAAA9B,GAAC,OA1C5F,SAAC0E,EAAG1E,GACnB,IAAIyQ,EAAa,YAAOtB,GACxBsB,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CoN,EAAcqB,GAuCiGC,CAAad,EAAO5P,IAAI2Q,UAAU,MACzGC,YAAY,qBAAqBhS,UAAU,kBAE3CgR,EAGI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YAxCxJ,SAACD,GACpB,IAAI+L,EAAa,YAAOtB,GACxBsB,EAAcf,OAAOhL,EAAG,GACxB0K,EAAcqB,GAsCsCK,CAAiBlB,QAMvB,WAtBNA,EAAMS,eAgC9B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WA7D7FyK,EAAc,GAAD,mBAAKD,GAAL,CAAiB,CAAEnN,MAAO,UAiEnB,uBAAMpD,UAAU,yBAAhB,2BAGHmR,EAASa,uBCsGnBiG,I,OAxLgB,SAAC,GAAqF,IAAnF5F,EAAkF,EAAlFA,UAAWC,EAAuE,EAAvEA,aAAcC,EAAyD,EAAzDA,aAAcC,EAA2C,EAA3CA,gBAAiB1C,EAA0B,EAA1BA,WAAYyE,EAAc,EAAdA,QAK5FvE,EAAe,SAAC5O,GAClB0O,GAAW,SAAAG,GAAW,OAAKA,MAgE/B,OACI,iCACI,uBAAMjQ,UAAU,sBAAhB,SAAsC,8CACtC,eAAC,KAAD,CAAiByQ,UA3BzB,SAA6BhC,GACzB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKwB,GAHQ,EAIT1B,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJ0B,qBAKjCN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CqB,EAAa3B,KAmBT,SACI,eAAC,KAAD,CAAWO,YAAY,OAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,UAAUC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAtF,IAAsG5N,IAAK0N,EAASG,SAApH,UACKe,EAAUzZ,KAAI,SAAC2Y,EAASP,GAAV,OACX,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,QAAQ/F,MAAOmO,EAAQnO,OAAS,GAAIF,SAAU,SAAA9B,GAAC,OA1EzF,SAAC0E,EAAG1E,GACtB,IAAIyQ,EAAa,YAAOQ,GACxBR,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CkP,EAAaT,GAuEkGa,CAAgB1B,EAAO5P,IAAI2Q,UAAU,KAC5GC,YAAY,oBAAoBhS,UAAU,wBAE1CgR,EAEI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YAvErJ,SAACD,GACvB,IAAI+L,EAAa,YAAOQ,GACxBR,EAAcf,OAAOhL,EAAG,GACxBwM,EAAaT,GAqEuCc,CAAoB3B,QAI1B,WAnBNA,EAAMS,eAyB1B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WAtFjGuM,EAAa,GAAD,mBAAKD,GAAL,CAAgB,CAAEjP,MAAO,UA0Fb,uBAAMpD,UAAU,yBAAhB,wBAGHmR,EAASa,qBAM1B,uBAAMhS,UAAU,sBAAhB,SAAsC,iDACtC,eAAC,KAAD,CAAiByQ,UA5DzB,SAA6BhC,GACzB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAK0B,GAHQ,EAIT5B,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJ0B,qBAKjCN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CuB,EAAgB7B,KAoDZ,SACI,eAAC,KAAD,CAAWO,YAAY,OAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,UAAUC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAtF,IAAsG5N,IAAK0N,EAASG,SAApH,UACKiB,EAAa3Z,KAAI,SAAC2Y,EAASP,GAAV,OACd,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,QAAQ/F,MAAOmO,EAAQnO,OAAS,GAAIF,SAAU,SAAA9B,GAAC,OArGtF,SAAC0E,EAAG1E,GACzB,IAAIyQ,EAAa,YAAOU,GACxBV,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CoP,EAAgBX,GAkG+FgB,CAAmB7B,EAAO5P,IAAI2Q,UAAU,KAC/GC,YAAY,oBAAoBhS,UAAU,wBAE1CgR,EACI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YAjGlJ,SAACD,GAC1B,IAAI+L,EAAa,YAAOU,GACxBV,EAAcf,OAAOhL,EAAG,GACxB0M,EAAgBX,GA+FoCiB,CAAuB9B,QAI7B,WAlBNA,EAAMS,eAwB1B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WAhHjGyM,EAAgB,GAAD,mBAAKD,GAAL,CAAmB,CAAEnP,MAAO,UAoHnB,uBAAMpD,UAAU,yBAAhB,2BAGHmR,EAASa,qBAI1B,gBAAChI,GAAA,EAAD,CACIC,OAAK,EADT,UAGI,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,gCAGR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,0BAA0BqH,UAAU,qBAAqBmJ,KAAK,uBAAuB/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAgBkE,EAAwBrR,SAAU8M,IAC5K,wBAAO/M,QAAQ,0BAA0BjD,UAAU,MAAnD,gBACA,wBAAOrH,GAAG,2BAA2BqH,UAAU,sBAAsBmJ,KAAK,uBAAuB/F,MAAM,OAAOjL,KAAK,QAAQkY,eAAgBkE,EAASrR,SAAU8M,IAC9J,wBAAO/M,QAAQ,2BAA2BjD,UAAU,MAApD,8BCsETkY,I,OAnPgB,SAAC,GAAsJ,IAApJ5I,EAAmJ,EAAnJA,YAAaC,EAAsI,EAAtIA,YAAaC,EAAyH,EAAzHA,cAAeC,EAA0G,EAA1GA,YAAaC,EAA6F,EAA7FA,WAAYC,EAAiF,EAAjFA,SAAUC,EAAuE,EAAvEA,SAAUC,EAA6D,EAA7DA,SAAUwC,EAAmD,EAAnDA,UAAWC,EAAwC,EAAxCA,aAAcxC,EAA0B,EAA1BA,WAAYyE,EAAc,EAAdA,QAQ7JvE,EAAe,SAAC5O,GAClB0O,GAAW,SAAAG,GAAW,OAAKA,MAsC/B,OACI,iCACI,eAACjG,GAAA,EAAD,CACIC,OAAK,EADT,SAII,gBAAC,KAAD,WACI,gBAACG,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAGR,yBACIoD,MAAOwM,EACPzX,KAAK,OACL6H,UAAU,eACVkD,SAAU,SAAC9B,GACPkO,EAAYhQ,SAAS8B,EAAE+B,OAAOC,SAGlCnD,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAXf,SAxDD,CAAC,EAAG,GAsEa9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,WAO7B,gBAACuE,GAAA,EAAD,WACI,eAAC,KAAD,UACI,eAACA,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,sBAGR,yBACI7H,KAAK,OACL6H,UAAU,eACVkD,SAAU,SAAC9B,GACPmO,EAAYnO,EAAE+B,OAAOC,MAAM1D,MAAM,KAAK9G,KAAI,SAAAoC,GAAC,OAAIsE,SAAStE,QAE5DoI,MAAOyM,EACP5P,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAVf,SApFD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAiGR9M,KAAI,SAACiN,GACb,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,gBASrC,gBAACmE,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,QAJpB,UAMI,eAAC,KAAD,IAEA,gBAAC,KAAD,WACI,gBAAC,KAAD,eAAM,uBAAMlK,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BAEN,eAACC,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,eACVoD,MAAOsM,EACPqC,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GACPoO,EAAcpO,EAAE+B,OAAOC,MAAMmH,QACzB,iBACA,gBASxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EACLhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QALtB,UAOI,eAAC,KAAD,IAEA,gBAAC,KAAD,WACI,gBAAC,KAAD,eAAM,uBAAMxF,UAAU,WAAWC,MAAO,CAAEkK,cAAe,OAAnD,2BAEN,eAACC,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,eACVoD,MAAOuM,EACPoC,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GAEPqO,EAAYrO,EAAE+B,OAAOC,MAAMmH,QACvB,iBACA,gBASxB,uBAAMvK,UAAU,sBAAhB,SAAsC,8CACtC,eAAC,KAAD,CAAiByQ,UA/IzB,SAA6BhC,GACzB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKwB,GAHQ,EAIT1B,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJ0B,qBAKjCN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1CqB,EAAa3B,KAuIT,SACI,eAAC,KAAD,CAAWO,YAAY,OAAvB,SACK,SAACC,GAAD,OACG,+CAAKnR,UAAU,UAAUC,MAAO,CAAEmR,WAAY,MAAO3L,UAAW,QAAa0L,EAASE,gBAAtF,IAAsG5N,IAAK0N,EAASG,SAApH,UACKe,EAAUzZ,KAAI,SAAC2Y,EAASP,GAAV,OACX,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OACG,2DAAKnR,UAAU,0BAA0ByD,IAAK0N,EAASG,UAAcH,EAASO,gBAAoBP,EAASQ,iBAA3G,cACI,sBAAK3R,UAAU,gCAAf,SACI,eAAC,KAAD,CAAiB4I,KAAMgJ,KAAa5R,UAAU,wBAElD,wBAAOA,UAAU,mBAAjB,SAAqCgR,EAAQ,IAC7C,wBAAO7Y,KAAK,OAAOgR,KAAK,QAAQ/F,MAAOmO,EAAQnO,OAAS,GAAIF,SAAU,SAAA9B,GAAC,OA9KzF,SAAC0E,EAAG1E,GACtB,IAAIyQ,EAAa,YAAOQ,GACxBR,EAAc/L,GAAG1E,EAAE+B,OAAOgG,MAAQ/H,EAAE+B,OAAOC,MAC3CkP,EAAaT,GA2KkGa,CAAgB1B,EAAO5P,IAAI2Q,UAAU,KAC5GC,YAAY,oBAAoBhS,UAAU,wBAE1CgR,EAEI,sBAAKhR,UAAU,gCAAf,SAEI,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,YA3KrJ,SAACD,GACvB,IAAI+L,EAAa,YAAOQ,GACxBR,EAAcf,OAAOhL,EAAG,GACxBwM,EAAaT,GAyKuCc,CAAoB3B,QAI1B,WAnBNA,EAAMS,eAyB1B,uBAAKzR,UAAU,8BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WA1LjGuM,EAAa,GAAD,mBAAKD,GAAL,CAAgB,CAAEjP,MAAO,UA8Lb,uBAAMpD,UAAU,yBAAhB,wBAGHmR,EAASa,qBAI1B,gBAAChI,GAAA,EAAD,CACIC,OAAK,EADT,UAGI,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,gCAGR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,0BAA0BqH,UAAU,qBAAqBmJ,KAAK,uBAAuB/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAgBkE,EAAwBrR,SAAU8M,IAC5K,wBAAO/M,QAAQ,0BAA0BjD,UAAU,MAAnD,gBACA,wBAAOrH,GAAG,2BAA2BqH,UAAU,sBAAsBmJ,KAAK,uBAAuB/F,MAAM,OAAOjL,KAAK,QAAQkY,eAAgBkE,EAASrR,SAAU8M,IAC9J,wBAAO/M,QAAQ,2BAA2BjD,UAAU,MAApD,8BC23CTmY,GAxlDW,SAAC,GAAqC,IAAD,UAgBvD3c,EAhBqB4c,EAAkC,EAAlCA,cAAeC,EAAmB,EAAnBA,aAElC3X,EAAUC,cACVvC,EAAcsF,iBAAOvF,IACrBkP,EAAS3J,sBAAOV,GAJqC,EAMrC1C,mBAAS,QAN4B,oBAMpDvD,EANoD,KAM/CsW,EAN+C,OASzB/S,oBAAS,GATgB,oBASpDU,EAToD,KASzCC,EATyC,OAUrBX,oBAAS,GAVY,oBAUpDgY,EAVoD,KAUvCC,EAVuC,KAWrDC,EAAc7U,aAAY,SAAC1L,GAAD,OAAWA,EAAMmD,SAASI,oBACpDtC,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBACnD2B,EAAgB8I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBAMrDW,EADgB,OAAhBgd,EACmB,GAEAA,EAIA7U,aAAY,SAAC1L,GAAD,OAAWA,EAAM4D,cAAcF,kBAAlE,IAQI8c,EAGoD,IAVlDte,EAASwJ,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMK,UAK5Cue,EAAU,UAAGld,SAAH,aAAG,EAAkB7C,GAKG,kBAApB,QAAhB,EAAA6C,SAAA,eAAkBsa,iBAClB2C,EAAmB,UAAGjd,SAAH,iBAAG,EAAkBwa,oBAArB,aAAG,EAAgCrd,IArCC,MAwCC2H,mBAAS,CACjEiV,cAAe,GACfO,cAAe,GACfC,eAAgB,GAChBN,UAAW,GACXC,WAAY,GACZG,SAAU,GACV/b,MAAO,GACPW,aAAc,GACdke,SAAU,KACVC,gBAAiB,KACjBC,OAAQ,OAnD+C,oBAwCpDf,EAxCoD,KAwC5BD,EAxC4B,KA2DnDtC,EAA0HuC,EAA1HvC,cAAeO,EAA2GgC,EAA3GhC,cAAeL,EAA4FqC,EAA5FrC,UAAWC,EAAiFoC,EAAjFpC,WAAYG,EAAqEiC,EAArEjC,SAAU/b,EAA2Dge,EAA3Dhe,MAAOW,EAAoDqd,EAApDrd,aAAcke,EAAsCb,EAAtCa,SAAUC,EAA4Bd,EAA5Bc,gBAAiBC,EAAWf,EAAXe,OAOnHnD,GACkB,IAAIf,KAAKe,GAG3BG,GACgB,IAAIlB,KAAKkB,GAoD7B,IAhDA,IA8CIiD,EA9CEtY,GAAWC,cA3E0C,GA4EKH,mBAAS,MA5Ed,sBA4EpDyY,GA5EoD,MA4E1BC,GA5E0B,SA6EG1Y,mBAAS,MA7EZ,sBA6EpD2Y,GA7EoD,MA6E3BC,GA7E2B,SA+E3B5Y,oBAAS,GA/EkB,sBA+EpDiJ,GA/EoD,MA+EzCC,GA/EyC,MAuFrD2P,GAAe,CAAC,CAClB/V,MAAO,eACP0S,cAAe,gBAChB,CACC1S,MAAO,kBACP0S,cAAe,OAChB,CACC1S,MAAO,WACP0S,cAAe,YAChB,CACC1S,MAAO,WACP0S,cAAe,YAChB,CACC1S,MAAO,YACP0S,cAAe,aAChB,CACC1S,MAAO,eACP0S,cAAe,gBAEnB,CACI1S,MAAO,uBACP0S,cAAe,YAEnB,CACI1S,MAAO,oBACP0S,cAAe,sBAMbsD,GAAkBD,GAAangB,QAAQ,SAAA6M,GAAM,OAAIA,EAAOiQ,gBAAkBA,KAKvEhQ,GAAI,EAAGA,GAAIqT,GAAa7Q,OAAQxC,KACjCqT,GAAarT,IAAGgQ,gBAAkBA,IAClCgD,EAAgBK,GAAarT,IAAG1C,OAKxC,IAiBIiW,GAjBAC,GAAmB,sBAAOnf,GAAP,CAAe,CAAEE,WAAY,gBAAiB1B,IAAK,KAEpE2a,GAAiBgG,GAAoBtgB,QAAO,SAAAgC,GAAC,OAAIA,EAAErC,KAAOigB,GAA8B,QAAX5d,EAAE7C,QAQ/EohB,GAAS,UAJOD,GAAoBtgB,QAAQ,SAAAwgB,GAAY,OAAgB,OAAZA,QAAY,IAAZA,OAAA,EAAAA,EAAc7gB,MAAOigB,KAIvD,UAAjB,iBAAG,EAAkBpe,oBAArB,aAAG,EAAgC5B,KAAI,SAAAoC,GAClD,MAAe,eAAXA,EAAE7C,KACK,2BAAK6C,GAAZ,IAAerC,IAAK,IAEjBqC,KAKPue,KAEIF,GADU,eAAVvf,EACsB,YAAOyf,IAGP,sBAAOA,IAAP,CAAkB,CAAElf,WAAY,gBAAiB1B,IAAK,MAOpF,IAAI8gB,GAAiB,UAAGJ,UAAH,aAAG,EAAwBrgB,QAAQ,SAAA6M,GAAM,OAAIA,EAAOlN,KAAOggB,KAjKrB,GA6K3BrY,mBAAS,GA7KkB,sBA6KpDsP,GA7KoD,MA6K1CN,GA7K0C,SA8K3BhP,mBAAS,GA9KkB,sBA8KpDuP,GA9KoD,MA8K1CN,GA9K0C,SA+KvBjP,mBAAS,qBA/Kc,sBA+KpDoP,GA/KoD,MA+KxCF,GA/KwC,SAgL3BlP,mBAAS,kBAhLkB,sBAgLpDqP,GAhLoD,MAgL1CF,GAhL0C,SAiL7BnP,oBAAS,GAjLoB,sBAiLpDiU,GAjLoD,MAiL3CzE,GAjL2C,SAkLjBxP,oBAAS,GAlLQ,sBAkLpDkU,GAlLoD,MAkLrCzE,GAlLqC,SAuLvBzP,mBAAS,CAAC,CAAE8C,MAAO,MAvLI,sBAuLpDmN,GAvLoD,MAuLxCC,GAvLwC,MA2LrDwE,GAAM,OAAGzE,SAAH,IAAGA,QAAH,EAAGA,GAAY3X,KAAI,SAACwK,EAAOrG,GAAR,mBAAC,eAAqBqG,GAAtB,IAA6B6R,MAAOlY,OA3LR,GAgMzBuD,mBAAS,CAAC,CAAE8C,MAAO,MAhMM,sBAgMpDiP,GAhMoD,MAgMzCC,GAhMyC,SAiMnBhS,mBAAS,CAAC,CAAE8C,MAAO,MAjMA,sBAiMpDmP,GAjMoD,MAiMtCC,GAjMsC,MAoMrD3G,GAAI,OAAGwG,SAAH,IAAGA,QAAH,EAAGA,GAAWzZ,KAAI,SAAAwT,GAAG,kCAAUA,GAAV,IAAegJ,KAAM,MAAOH,MAAO5C,GAAU6C,QAAQ9I,QAC9EZ,GAAO,OAAG+G,SAAH,IAAGA,QAAH,EAAGA,GAAc3Z,KAAI,SAAAqT,GAAM,kCAAUA,GAAV,IAAkBmJ,KAAM,MAAOH,MAAO1C,GAAa2C,QAAQjJ,QAK7FkJ,GAHM,sBAAOtJ,IAAP,YAAgBL,KAGF5S,KAAI,SAAAwK,GAE1B,MAAmB,QAAfA,EAAMgS,KACFhS,EAAMzK,GACC,CAAEA,GAAIyK,EAAMzK,GAAIyc,KAAM,MAAOhS,MAAOA,EAAMA,MAAO6R,MAAO7R,EAAM6R,OAElE,CAAEG,KAAM,MAAOhS,MAAOA,EAAMA,MAAO6R,MAAO7R,EAAM6R,OAGxC,QAAf7R,EAAMgS,KACFhS,EAAMzK,GACC,CAAEA,GAAIyK,EAAMzK,GAAIyc,KAAM,MAAOhS,MAAOA,EAAMA,MAAO6R,MAAO7R,EAAM6R,OAElE,CAAEG,KAAM,MAAOhS,MAAOA,EAAMA,MAAO6R,MAAO7R,EAAM6R,OAGpD,QAILyE,GAAS,uCAAG,kEAAArY,EAAA,yDAKkC,QAAtB,OAAtByW,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBc,mBAAyE,KAAvB,OAAtBd,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBc,mBAE5EvD,EAAU,MAKkC,QAAtB,OAAtByC,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBc,mBAAyE,KAAvB,OAAtBd,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBc,mBAKnC,QAAf,OAAtBd,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBa,YAA2D,KAAhB,OAAtBb,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBa,WAErEtD,EAAU/V,SAAQ,OAACwY,QAAD,IAACA,OAAD,EAACA,EAAwBa,UAE3C3W,QAAQC,IAAI,gBAAiBoT,EAASyC,IAEtCzC,EAAO,OAAGyC,QAAH,IAAGA,OAAH,EAAGA,EAAwBc,iBAStCd,EAAuBvC,gBAAkB/Z,EAAiB+Z,gBAC1DoE,EAAgB,eAAiBne,EAAiB+Z,eAElDuC,EAAuBvC,gBAAkB/Z,EAAiB+Z,gBAC1DoE,EAAgB7B,EAAuBvC,eApC7B,SA8CVtU,GAAa,GACbsX,GAAe,GAC8B,iBAAzCT,EAAuBhC,gBAMvB8D,EACA,CACIxa,KAAM,CAGFmW,cAAeoE,EACfnE,mBAAoBjB,GACpBkB,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAEtChc,MAAOub,EAGPW,aACA,CAEIC,UAAWrG,GACXsG,UAAWrG,GACXsG,UAAWzG,GACX0G,UAAWzG,GACX0G,QAAS7B,IAEb8B,QAAS,GACTC,aAAc,GACdhX,IAAKrG,KAY4B,QAAzC4e,EAAuBhC,eAAoE,aAAzCgC,EAAuBhC,eAAyE,aAAzCgC,EAAuBhC,gBAGhI8D,EACA,CACIxa,KAAM,CAGFmW,cAAeoE,EAEflE,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAEtChc,MAAOub,EAGPiB,QAAStB,GAAOpc,KAAI,SAAAoC,GAChB,MAAO,CACHia,MAAOja,EAAEia,MACT7R,MAAOpI,EAAEoI,UAGjB4S,aAAc,KACdO,aAAc,GACdhX,IAAKrG,KAK4B,cAAzC4e,EAAuBhC,eAA0E,iBAAzCgC,EAAuBhC,gBAG/E8D,EACA,CAEIxa,KAAM,CACFmW,cAAeoE,EAEflE,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAGtChc,MAAOub,EACPiB,QAAS,GACTN,aAAc,KACdO,aAAc,GACdhX,IAAKrG,KAS4B,aAAzC4e,EAAuBhC,gBAGvB8D,EACA,CACIxa,KAAM,CACFmW,cAAeoE,EACfnE,mBAAoBjB,GACpBkB,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAGtChc,MAAOub,EACPkB,aAAcpB,GAAWvc,KAAI,SAAAoC,GACzB,MAAO,CACHoa,KAAMpa,EAAEoa,KACRH,MAAOja,EAAEia,MACT7R,MAAOpI,EAAEoI,UAGjBkT,QAAS,GACTN,aAAc,KACdzW,IAAKrG,KAM4B,sBAAzC4e,EAAuBhC,gBAGvB8D,EACA,CACIxa,KAAM,CACFmW,cAAeoE,EACfnE,mBAAoBjB,GACpBkB,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAGtChc,MAAOub,EACPmB,kBAAmB,CAEfC,YAAatB,GAAWnc,QAAO,SAAU0d,GACrC,MAAoB,QAAbA,EAAItB,QAEfY,aACA,CACIC,UAAWrG,GACXsG,UAAWrG,GACXsG,UAAWzG,GACX0G,UAAWzG,KAGnB4G,aAAc,GACdD,QAAS,GACTN,aAAc,KACdzW,IAAKrG,KAWZmc,EA/NK,qBAkOFyC,EAAuBhC,gBAAiB6D,EAlOtC,kCAmOe5b,GAAM0D,KAAN,aAEbmY,GACFlY,OAEE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SApPvB,QAmOFH,EAnOE,eA8PN6H,IAAW,GAEXgH,GAAc,CAAC,CAAEpN,MAAO,MAhQlB,EAoQiIzB,EAASvC,KAAxIzG,EApQF,EAoQEA,GAAImd,EApQN,EAoQMA,cAAeC,EApQrB,EAoQqBA,eAAgBR,EApQrC,EAoQqCA,cAAeC,EApQpD,EAoQoDA,mBAAoBC,EApQxE,EAoQwEA,UAAWC,EApQnF,EAoQmFA,WAAYG,EApQ/F,EAoQ+FA,SAAU/b,EApQzG,EAoQyGA,MAAOW,EApQhH,EAoQgHA,aAIlF,iBAAhCkH,EAASvC,KAAK0W,gBACdE,EAAerU,EAASvC,KAAK4W,aAE7BkD,GAA2B,CACvBvgB,KACAmd,gBACAP,gBACAQ,iBACAP,qBACAC,YACA3b,QACAW,eACAib,aACAG,WACAG,kBAM4B,QAAhCrU,EAASvC,KAAK0W,eAA2D,aAAhCnU,EAASvC,KAAK0W,eAAgE,aAAhCnU,EAASvC,KAAK0W,gBACrGQ,EAAU3U,EAASvC,KAAKkX,QAExB4C,GAA2B,CACvBvgB,KACAmd,gBACAC,iBACAR,gBAEAE,YACA3b,QACAW,eACAib,aACAG,WACAS,aAK4B,cAAhC3U,EAASvC,KAAK0W,eAAiE,iBAAhCnU,EAASvC,KAAK0W,eAE7DoD,GAA2B,CACvBvgB,KACAmd,gBACAC,iBACAR,gBAEAE,YACA3b,QACAW,eACAib,aACAG,aAM4B,aAAhClU,EAASvC,KAAK0W,gBAEdS,EAAe5U,EAASvC,KAAKmX,aAE7B2C,GAA2B,CACvBvgB,KACAmd,gBACAC,iBACAR,gBACAC,qBACAC,YACA3b,QACAW,eACAib,aACAG,WACAU,kBAM4B,sBAAhC5U,EAASvC,KAAK0W,gBAEdS,EAAe5U,EAASvC,KAAKmX,aAC7BC,EAAoB7U,EAASvC,KAAKoX,kBAElC0C,GAA2B,CACvBvgB,KACAmd,gBACAC,iBACAR,gBACAC,qBACAC,YACA3b,QACAW,eACAib,aACAG,WACAU,eACAC,uBAvWF,YA+WNnB,EA/WM,wBAkXNrT,QAAQC,IAAI,UAAWoT,GAInBsB,EADqC,QAAf,OAAtBmB,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBa,YAA2D,KAAhB,OAAtBb,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBa,UAC/C,aAClB/B,WAAY,SACZC,cAAa,OAAEiB,QAAF,IAAEA,OAAF,EAAEA,EAAwBc,iBACpCgB,GAIe,aAClBhD,WAAY,UACTgD,GA/XL,UAoYW7b,GAAM0G,IAAN,6BACS4Q,GACtBsB,GACFjV,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SApZnB,QAoYNH,EApYM,OA8ZNK,QAAQC,IAAI,eAAgBN,GAE5BuX,GAEIvX,EAASvC,MAIboK,IAAW,GAEXgH,GAAc,CAAC,CAAEpN,MAAO,MAxalB,QA4aVnC,GAAa,GACbsX,GAAe,GACfF,GAAa,GA9aH,kDAibVrW,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCAnbH,0DAAH,qDAwbTX,GAAM,uCAAG,WAAOE,GAAP,uBAAAC,EAAA,yDAEXD,EAAEE,iBACFkI,IAAW,GAHA,SAYPvI,GAAa,GACbsX,GAAe,GAK8B,iBAAzCT,EAAuBhC,gBAGvB9T,QAAQC,IAAI,iCAAkC6V,GAC9CxC,EACA,CACIsB,WAAY,SACZiD,WAAYnB,EACZtZ,KAAM,CACFmW,cAAeuC,EAAuBvC,cACtCC,mBAAoBjB,GACpBkB,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAGtChc,MAAOge,EAAuBa,WAAiD,IAArCb,EAAuBa,SAC7Db,EAAuBa,SACvBb,EAAuBc,kBAA+D,IAA5Cd,EAAuBc,gBAC7Dd,EAAuBc,gBAAkB,KAEjD5C,aACA,CACIrd,GAAI8f,EACJxC,UAAWrG,GACXsG,UAAWrG,GACXsG,UAAWzG,GACX0G,UAAWzG,GACX0G,QAAS7B,IAGb8B,QAAS,GACTC,aAAc,MAOmB,QAAzCuB,EAAuBhC,eAAoE,aAAzCgC,EAAuBhC,eAAyE,aAAzCgC,EAAuBhC,gBAGhIR,EACA,CAEIsB,WAAY,SACZiD,WAAYnB,EACZtZ,KAAM,CAEFmW,cAAeuC,EAAuBvC,cACtCC,mBAAoBjB,GACpBkB,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAGtChc,MAAOge,EAAuBa,WAAiD,IAArCb,EAAuBa,SAC7Db,EAAuBa,SACvBb,EAAuBc,kBAA+D,IAA5Cd,EAAuBc,gBAC7Dd,EAAuBc,gBAAkB,KAGjDtC,QAAStB,GACTgB,aAAc,KACdO,aAAc,MAKmB,cAAzCuB,EAAuBhC,eAA0E,iBAAzCgC,EAAuBhC,gBAG/ER,EACA,CAEIsB,WAAY,SACZiD,WAAYnB,EACZtZ,KAAM,CAEFmW,cAAeuC,EAAuBvC,cAEtCE,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAItChc,MAAOge,EAAuBa,WAAiD,IAArCb,EAAuBa,SAC7Db,EAAuBa,SACvBb,EAAuBc,kBAA+D,IAA5Cd,EAAuBc,gBAC7Dd,EAAuBc,gBAAkB,KAEjD5C,aAAc,KACdO,aAAc,GACdD,QAAS,MAQwB,aAAzCwB,EAAuBhC,gBAGvBR,EACA,CACIsB,WAAY,SACZiD,WAAYnB,EACZtZ,KAAM,CAEFmW,cAAeuC,EAAuBvC,cACtCC,mBAAoBjB,GACpBkB,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAItChc,MAAOge,EAAuBa,WAAiD,IAArCb,EAAuBa,SAC7Db,EAAuBa,SACvBb,EAAuBc,kBAA+D,IAA5Cd,EAAuBc,gBAC7Dd,EAAuBc,gBAAkB,KACjDrC,aAAcpB,GACda,aAAc,KACdM,QAAS,MAOwB,sBAAzCwB,EAAuBhC,gBAGvBR,EACA,CACIsB,WAAY,SACZiD,WAAYnB,EACZtZ,KAAM,CAEFmW,cAAeuC,EAAuBvC,cACtCC,mBAAoBjB,GACpBkB,UAAWqC,EAAuBrC,UAGlCK,cAAegC,EAAuBhC,cAItChc,MAAOge,EAAuBa,WAAiD,IAArCb,EAAuBa,SAC7Db,EAAuBa,SACvBb,EAAuBc,kBAA+D,IAA5Cd,EAAuBc,gBAC7Dd,EAAuBc,gBAAkB,KAEjDpC,kBAAmB,CAEfC,YAAatB,GAAWnc,QAAO,SAAU0d,GACrC,MAAoB,QAAbA,EAAItB,QAEfY,aACA,CACIC,UAAWrG,GACXsG,UAAWrG,GACXsG,UAAWzG,GACX0G,UAAWzG,KAGnB4G,aAAc,GACdP,aAAc,KACdM,QAAS,MAaO,aAAX,OAAbzb,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,MA7MZ,qBA+MC2f,EAAuBhC,gBAAiBgC,EAAuBvC,cA/MhE,kCAgNkBxX,GAAM0G,IAAN,mCACQ5J,QADR,IACQA,OADR,EACQA,EAAelC,IACpC2c,GACF5T,OAEE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAjO1B,QAgNCH,EAhND,eA2OH6H,IAAW,GAEXgH,GAAc,CAAC,CAAEpN,MAAO,OAExB,UAAIzB,SAAJ,aAAI,EAAUvC,OACV4Z,GAA4BrX,EAASvC,MAhPtC,WAoPqB,aAAX,OAAbvE,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,MApPZ,wBAwPC2hB,EAAkB,CAClB1a,KAAK,eACEkW,EAAYlW,OA1PpB,UA+PcrB,GAAM0G,IAAN,qBACCiU,GACdoB,GACFpY,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA/QtB,QA+PHH,EA/PG,OAqRH6H,IAAW,GAEXgH,GAAc,CAAC,CAAEpN,MAAO,OAExB,UAAIzB,SAAJ,aAAI,EAAUvC,OACV4Z,GAA4BrX,EAASvC,MA1RtC,QAgSP6B,GAAa,GACboX,GAAa,GAjSN,kDAoSPrW,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCACb2H,IAAW,GAvSJ,0DAAH,sDA2SZhH,qBAAU,WAEN,GAAIuW,GAA0B,EACH,WAGnB,GAA4B,aAAX,OAAble,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,MAAoB,CAEnC6J,QAAQC,IAAI,sBAGZ,IAAI8U,EAA0B,OAAGgC,SAAH,IAAGA,QAAH,EAAGA,GAA0Bve,aAAa5B,KAAI,SAAAoC,GACxE,OAAOA,EAAEE,aACV8b,KAAK,GAIRxW,GAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,GAAD,mBAAM6b,GAAN,YAAqCgC,GAAyB7d,gBAK5G,GAA4B,aAAX,OAAbL,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,MAEf6J,QAAQC,IAAI,0BAIZzB,GAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,CAAE6d,IAAH,0BAAgCle,QAAhC,IAAgCA,OAAhC,EAAgCA,EAAeK,UAAUlC,QAAO,SAAAgC,GAAC,OAAIA,EAAErC,KAAOogB,GAAyBpgB,YAWzJohB,MAGL,CAACvZ,GAAUuY,KAMdvW,qBAAU,WAMN,GAJAR,QAAQC,IAAI,yBAA0B6V,GACtC9V,QAAQC,IAAI,gBAAiBpH,GAGG,OAA5Boe,GAAkC,EACL,WAEzB,IAAiB,OAAbpe,QAAa,IAAbA,OAAA,EAAAA,EAAelC,OAAf,OAAsBmf,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAwBc,mBAAyC,OAAtBd,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBc,iBAAkB,EAA/G,CAEI5W,QAAQC,IAAI,yCAA0CgX,IAEtD,IAAIlC,EAA6BkC,GAAwBze,aAAa5B,KAAI,SAAAoC,GACtE,OAAOA,EAAEE,aACV8b,KAAK,GAGRxW,GAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,GAAD,mBAAM+d,GAAwB/d,WAA9B,YAA4C6b,YAO9D,SAAX,OAAblc,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,QAA+D,KAAvB,OAAtB2f,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBc,mBAEzD5W,QAAQC,IAAI,wDAAyDpH,GAErE2F,GAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,CAAE+d,GAAwBnC,gBAA3B,mBAA8Cjc,EAAcK,kBAQzF,OAAbL,QAAa,IAAbA,OAAA,EAAAA,EAAelC,IAAK,IAAkD,KAAvB,OAAtBmf,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBc,mBAEjD5W,QAAQC,IAAI,4EAA6EpH,EAAeid,GAGxGtX,GAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,CAAE+d,IAAH,0BAA+Bpe,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAeK,iBAUhG8e,MAGL,CAACxZ,GAAUyY,KAKd,IAAM/B,GAAiB,SAAC9V,GACpByW,EAA0B,2BACnBC,GADkB,IACMrC,WAAYA,MAyH/C,OApHAjT,qBAAU,YAEmB,uCAAG,kGAAAnB,EAAA,mEAIhB7F,EAJgB,4BAMOwH,IAAnBqK,EAAOpF,SACPoF,EAAOpF,UAEXhH,GAAa,GATG,SAWOlD,GAAMoE,IAAN,+BACL3G,SADK,aACL,EAAkB7C,IAChC,CACIwF,YAAa,IAAIC,EAAY6J,SAAQ,SAAA6F,GACjCT,EAAOpF,QAAU6F,OAG3BpM,OAEE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAhCT,QAWVH,EAXU,UAyCZK,QAAQC,IAAI,WAAYN,GAGxBkW,EAA0B,2BACnBlW,EAASvC,MADS,IAErBwZ,gBAAgD,eAA/BjX,EAASvC,KAAK3E,cAAiC,EAAIkH,EAASvC,KAAKwZ,gBAClFD,SAAkC,eAAxBhX,EAASvC,KAAKtF,OAA0B,EAAI6H,EAASvC,KAAKuZ,aAGxE,UAAIhX,EAASvC,YAAb,aAAI,EAAeyZ,SACfrP,IAAW,GAGsB,kBAAjC,UAAA7H,EAASvC,YAAT,eAAe0W,iBACfxG,GAAW,UAAC3N,EAASvC,YAAV,aAAC,EAAe4W,aAAaC,WACxC1G,GAAW,UAAC5N,EAASvC,YAAV,aAAC,EAAe4W,aAAaE,WACxC1G,GAAa,UAAC7N,EAASvC,YAAV,aAAC,EAAe4W,aAAaG,WAC1C1G,GAAW,UAAC9N,EAASvC,YAAV,aAAC,EAAe4W,aAAaI,WACxCtG,MAAW,UAACnO,EAASvC,YAAV,aAAC,EAAeoW,qBAC3BzF,MAAiB,UAACpO,EAASvC,YAAV,iBAAC,EAAe4W,oBAAhB,aAAC,EAA6BK,WAGd,SAAjC,UAAA1U,EAASvC,YAAT,eAAe0W,gBAA4D,cAAjC,UAAAnU,EAASvC,YAAT,eAAe0W,gBAAiE,cAAjC,UAAAnU,EAASvC,YAAT,eAAe0W,gBAExGtF,GAAc7O,EAASvC,KAAKkX,SAEK,cAAjC,UAAA3U,EAASvC,YAAT,eAAe0W,iBAITjK,EAJuC,UAIhClK,EAASvC,YAJuB,iBAIhC,EAAemX,oBAJiB,aAIhC,EAA6Bvd,QAAO,SAAA8M,GAAC,MAAe,QAAXA,EAAEsP,QAGlD5J,EAPuC,UAO7B7J,EAASvC,YAPoB,iBAO7B,EAAemX,oBAPc,aAO7B,EAA6Bvd,QAAO,SAAA8M,GAAC,MAAe,QAAXA,EAAEsP,QAE3D9C,GAAazG,GACb2G,GAAgBhH,GAChBsE,MAAW,UAACnO,EAASvC,YAAV,aAAC,EAAeoW,sBAEM,uBAAjC,UAAA7T,EAASvC,YAAT,eAAe0W,iBAEfxG,GAAW,UAAC3N,EAASvC,YAAV,iBAAC,EAAeoX,yBAAhB,aAAC,EAAkCR,aAAaC,WAC3D1G,GAAW,UAAC5N,EAASvC,YAAV,iBAAC,EAAeoX,yBAAhB,aAAC,EAAkCR,aAAaE,WAC3D1G,GAAa,UAAC7N,EAASvC,YAAV,iBAAC,EAAeoX,yBAAhB,aAAC,EAAkCR,aAAaG,WAC7D1G,GAAW,UAAC9N,EAASvC,YAAV,iBAAC,EAAeoX,yBAAhB,aAAC,EAAkCR,aAAaI,WAErDvK,EAPgD,UAOzClK,EAASvC,YAPgC,iBAOzC,EAAeoX,yBAP0B,iBAOzC,EAAkCC,mBAPO,aAOzC,EAA+Czd,QAAO,SAAA8M,GAAC,MAAe,QAAXA,EAAEsP,QAE1E9C,GAAazG,GACbiE,MAAW,UAACnO,EAASvC,YAAV,aAAC,EAAeoW,uBA1FnB,OAiGpBvU,GAAa,GAjGO,kDAoGpBe,QAAQC,IAAR,MApGoB,0DAAH,qDA4GzBgY,KAED,CAACvZ,EAASlF,IAKT,gBAACmO,GAAA,EAAD,CACIrG,KAAM8U,EACNxO,SAAS,SACTlH,KAAK,KACLmH,OAAQ,WACJwO,GAAa,IALrB,UAQI,eAAC1O,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,8BAGJ,wBAAMjH,SAAU5B,GAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UACKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACKsY,EAAc,yDAAoC,8DAK3D,uCACI,gBAACtO,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UAEKyO,EAAS,eAACqB,GAAA,EAAD,CAAMja,MAAO,CAAEka,WAAY,iBAAkB3U,aAAc,OAA3D,SACN,eAAC0U,GAAA,EAAK1T,KAAN,yFAEE,SAId,eAAC,KAAD,UACI,eAAC4D,GAAA,EAAD,UACI,uBAAKpK,UAAU,0BAAf,UACI,uBAAMA,UAAU,WAAhB,4BACmB,iBAAlB8V,EAAoC,uBAAM9V,UAAU,eAAhB,wDAAqF,YAItI,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BACIC,UAAQ,EACRjH,MAAOmS,EACPvV,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAGPyW,EAA0B,2BACnBC,GADkB,IACMvC,cAAenU,EAAE+B,OAAOC,MAAMmH,QACrD,iBACA,iBAS5B,gBAAC6M,GAAA,EAAD,CACIze,GAAG,yBACH0e,UAAWta,EACXua,SAAU,SAACC,GAAD,OAAOlE,EAAOkE,IACxBvX,UAAU,iBAJd,UAMI,gBAACwX,GAAA,EAAD,CAAKC,SAAS,OAAOC,MAAM,OAA3B,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,uBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,0BAEIjS,KAAK,OACL6H,UAAU,2CACVkD,SAAU,SAAC9B,GACgB,iBAAnBA,EAAE+B,OAAOC,OACTyU,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,kBAG3B,oBAAnB1U,EAAE+B,OAAOC,OACTyU,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,SAG3B,aAAnB1U,EAAE+B,OAAOC,OACTyU,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,cAE3B,aAAnB1U,EAAE+B,OAAOC,OACTyU,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,cAE3B,cAAnB1U,EAAE+B,OAAOC,OACTyU,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,eAE3B,iBAAnB1U,EAAE+B,OAAOC,OACTyU,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,kBAE3B,yBAAnB1U,EAAE+B,OAAOC,QAEToP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3BoF,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,eAG3B,sBAAnB1U,EAAE+B,OAAOC,QACToP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3BoF,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,wBAI3B,KAAnB1U,EAAE+B,OAAOC,OACTyU,EAA0B,2BACnBC,GADkB,IACMhC,cAAe,OAItD7V,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAxDf,UA0DI,kCAASoT,IACRM,GAAgBxgB,KAAI,SAACiN,GAClB,OACI,yBAA2BzC,MAAOyC,EAAOzC,MAAzC,SACKyC,EAAOzC,OADCyC,EAAOzC,oBAazB,iBAAlB0S,EACG,eAAC,GAAD,CACIxG,YAAaA,GACbC,YAAaA,GACbK,SAAUA,GACVC,SAAUA,GACVC,WAAYA,GACZyE,QAASA,GACTxE,iBAAkBA,GAClByE,cAAeA,GACfhF,cAAeA,GACfC,YAAaA,GACbC,WAAYA,GACZC,SAAUA,KACT,KAGU,QAAlBmG,GAA6C,aAAlBA,GAAkD,aAAlBA,EACxD,eAAC,GAAD,CAEItF,cAAeA,GACfD,WAAYA,KAAiB,KAGlB,aAAlBuF,EACI,eAAC,GAAD,CACGtD,gBAAiBA,GACjBF,aAAcA,GACdD,UAAWA,GACXE,aAAcA,GACdzC,WAAYA,GACZyE,QAASA,KACN,KAEQ,sBAAlBuB,EAEG,eAAC,GAAD,CAEIhG,WAAYA,GACZyE,QAASA,GAGTjC,aAAcA,GACdD,UAAWA,GAGX/C,YAAaA,GACbC,YAAaA,GACbC,cAAeA,GACfC,YAAaA,GACbC,WAAYA,GACZC,SAAUA,GACVC,SAAUA,GACVC,SAAUA,KAEP,KAGX,gBAAC7F,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAIR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,YAAYqH,UAAU,qBAAqBmJ,KAAK,SAAS/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAgBoF,EAA0BvS,SAAUgU,KAClJ,wBAAOjU,QAAQ,YAAYjD,UAAU,MAArC,wBACA,wBAAOrH,GAAG,aAAaqH,UAAU,sBAAsBmJ,KAAK,SAAS/F,MAAM,OAAOjL,KAAK,QAAQkY,eAAgBoF,EAAWvS,SAAUgU,KACpI,wBAAOjU,QAAQ,aAAajD,UAAU,MAAtC,kCAMhB,gBAACwX,GAAA,EAAD,CAAKC,SAAS,QAAQC,MAAM,QAA5B,UAGI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,yBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,0BACIjS,KAAK,OACL6H,UAAU,2CACVkD,SAAU,SAAC9B,GAGP,IAAIgZ,EAAiBC,KAAKC,MAAMlZ,EAAE+B,OAAOC,OAEzCyU,EAA0B,2BAEnBC,GAFkB,IAGrBrd,aAA4C,eAA9B2f,EAAe/f,WAA8B,aAAe+f,EAAe/f,WACzFue,gBAAiBwB,EAAezhB,GAChCmB,MAAO,aACP6e,UAAW,MAMnBhB,SAAS,GACT1X,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAxBf,UA4BsB,eAAjBjL,EAAgC,yBAAQ2I,MAAM,GAAd,2BAA0C,kCAAS3I,IACnF6Y,GAAe1a,KAAI,SAACiN,GACjB,OAEI,yBAAyBzC,MAAOiX,KAAKE,UACjC,CACIlgB,WAAU,OAAEwL,QAAF,IAAEA,OAAF,EAAEA,EAAQxL,WACpB1B,GAAE,OAAEkN,QAAF,IAAEA,OAAF,EAAEA,EAAQlN,KAHpB,gBAKKkN,QALL,IAKKA,OALL,EAKKA,EAAQxL,YALb,OAAawL,QAAb,IAAaA,OAAb,EAAaA,EAAQlN,kBAanC,OAAT4gB,SAAS,IAATA,QAAA,EAAAA,GAAWjR,QAAS,EAEjB,gBAAC0B,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,4BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,0BACIjS,KAAK,OACL6H,UAAU,2CACVkD,SAAU,SAAC9B,GAGP,IAAIgZ,EAAiBC,KAAKC,MAAMlZ,EAAE+B,OAAOC,OAEzCyU,EAA0B,2BACnBC,GADkB,IAErBhe,MAAOsgB,EAAe/f,WACtBse,SAAUyB,EAAezhB,OAMjCgf,SAAS,GACT1X,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OArBf,UAyBe,eAAV5L,EAAyB,yBAAQsJ,MAAM,GAAd,2BAA0C,kCAAStJ,IAE5E2f,GAAkB7gB,KAAI,SAACiN,GACpB,OACI,yBAAyBzC,MAAOiX,KAAKE,UACjC,CACIlgB,WAAU,OAAEwL,QAAF,IAAEA,OAAF,EAAEA,EAAQxL,WACpB1B,GAAE,OAAEkN,QAAF,IAAEA,OAAF,EAAEA,EAAQlN,KAHpB,gBAKKkN,QALL,IAKKA,OALL,EAKKA,EAAQxL,YALb,OAAawL,QAAb,IAAaA,OAAb,EAAaA,EAAQlN,iBAgB7C,sBAAKqH,UAAU,0BAAf,2DASxB,gBAAC2J,GAAA,EAAMa,OAAP,CAAcvK,MAAO,CAAEua,eAAgB,iBAAvC,UACI,eAAC/T,GAAA,EAAD,CACIzG,UAAU,uCACV0G,QAAQ,aACRX,QAAS,WACL2T,MAJR,SAOI,yDAEJ,uBAAKzZ,MAAO,CAAEmQ,QAAS,OAAQqK,IAAK,SAApC,UACI,eAAChU,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,uCACV+F,QAAS,WACLsS,GAAa,GACb7I,GAAc,qBACdC,GAAY,kBACZK,IAAW,GACXC,IAAiB,GACjBS,GAAc,CAAC,CAAEpN,MAAO,OAThC,SAYI,2DAGJ,eAACqD,GAAA,EAAD,CACI3D,SAAU,WACNuV,GAAa,IAEjB5N,UAAWlB,GACXpR,KAAK,SACL6H,UAAU,cACV0G,QAAQ,eAPZ,SAQI,gE,oCCrmDfgU,I,OAAe,SAAC,GAAgB,IAAdzO,EAAa,EAAbA,OAEnB0O,EAA2B1O,EAA3B0O,YAAaC,EAAc3O,EAAd2O,UAQrB,OACI,gCACI,wBAAOxX,MAAOuX,GAAe,GAAIzX,SARpB,SAAC9B,GAElBwZ,EAAUxZ,EAAE+B,OAAOC,QAM0CpD,UAAU,oBCMhEqL,KAAOC,IAAV,8eA0sBGuP,ICtaAC,GA5SU,SAAC,GAAiC,IAA/B/R,EAA8B,EAA9BA,UAAWC,EAAmB,EAAnBA,aAE7BtI,EAAUC,cACVzH,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAKnDsH,EAAWC,cARqC,EASJH,mBAAS,MATL,oBAS/Cya,EAT+C,KAS5BC,EAT4B,OAW9B1a,mBAAS,IAXqB,oBAW/C6I,EAX+C,KAWzCC,EAXyC,OAYhB9I,mBAAS,IAZO,oBAY/C+I,EAZ+C,KAYlCC,EAZkC,OAaxBhJ,mBAAS,IAbe,oBAa/C2a,EAb+C,KAatCC,EAbsC,KAchDnjB,EAAW4L,aAAY,SAAC1L,GAAD,OAAWA,EAAMmF,OAAOrF,YAdC,EAepBuI,oBAAS,GAfW,oBAe/CU,EAf+C,KAepCC,EAfoC,OAgBtBX,oBAAS,GAhBa,oBAgBpCkJ,GAhBoC,WAmBhDtI,EAAM,uCAAG,WAAOE,GAAP,uBAAAC,EAAA,6DACXD,EAAEE,iBACFkI,GAAW,GAFA,SAOPvI,GAAa,GACPka,EAAW,CAEb/b,KAAM,CACF/E,WAAY8O,EACZ7O,WAAY+O,EACZ+R,cAAeH,EACfvR,UAAW3R,EACXsjB,aAAa,EACbC,mBAAmB,EACnB/b,IAAKrG,IAjBN,SAsBgB6E,GAAM0D,KAAN,UAEnB0Z,GACFzZ,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAtClB,OAsBDH,EAtBC,OA4CP6H,GAAW,GA5CJ,EA+C2F7H,EAASvC,KA/CpG,EA+CC/E,WA/CD,EA+CaC,WA/Cb,EA+CyB8gB,cA/CzB,EA+CwCziB,GAAI6B,EA/C5C,EA+C4CA,aA/C5C,EA+C0D8gB,kBA/C1D,EA+C6EC,UAahFC,EAAwBhhB,EAAaxB,QAAO,SAAAgC,GAAC,OAA4B,IAAxBA,EAAEsgB,qBAIvDN,EAAqB,2BACdrZ,EAASvC,MADI,IAEhB5E,aAAcghB,EACdrjB,KAAM,aAKViR,EAAQ,IACRE,EAAe,IACf4R,EAAW,IACXja,GAAa,GACb+H,GAAa,GA5EN,kDAgFPhH,QAAQC,IAAR,MACAmH,EAAQ,IACRE,EAAe,IACf4R,EAAW,IAGX3S,OAAO1G,MAAM,wCAtFN,0DAAH,sDA6GZ,OAnBAW,qBAAU,WAIN,GAA0B,OAAtBuY,EAA4B,CAExBva,EAAS,CACLrI,KAAM,gBACNE,QAAS0iB,OAOtB,CAACva,EAAUua,IAKV,gBAACpR,GAAA,EAAD,CACIjH,KAAK,KACLY,KAAMyF,EACNa,SAAS,SACTC,OAAQ,WACJb,GAAa,IALrB,UAOI,eAACW,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,6BAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UAEKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,2DAIR,uCACI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,cAAhB,6BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,8BACV+R,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GAEPgI,EAAQhI,EAAE+B,OAAOC,MAAMmH,QACnB,iBACA,eASxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,aAAhB,oCAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIpK,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAEPkI,EAAelI,EAAE+B,OAAOC,MAAMmH,QAC1B,iBACA,eAQxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,aAAhB,0BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIpK,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAEP8Z,EAAW9Z,EAAE+B,OAAOC,MAAMmH,QACtB,iBACA,oBAYpC,gBAACZ,GAAA,EAAMa,OAAP,WAEI,sBACIxK,UAAU,uCACV+F,QAAS,WACLqD,EAAQ,IACRE,EAAe,IACf4R,EAAW,IACXlS,GAAa,IANrB,SAQI,6CAIHG,EAAO,wBACJhR,KAAK,SACLsS,UAAU,EACVrH,MAAM,eACNpD,UAAU,cACV+F,QAAS,WACLiD,GAAa,MAMjB,wBACI7Q,KAAK,SACLsS,UAAU,EACVxK,MAAO,CAAEwb,QAAS,OAClBrY,MAAM,eACNpD,UAAU,0B,4BCxMvB0b,I,SCwQAC,GAjWa,SAAC,GAA0C,IAAxC5S,EAAuC,EAAvCA,UAAWC,EAA4B,EAA5BA,aAAcqM,EAAc,EAAdA,QAG9C3U,EAAUC,cAIVH,EAAWC,cAEX5F,EAAgB8I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBATS,EAWRyF,mBAAS,MAXD,oBAW3DyT,EAX2D,KAWpCC,EAXoC,OAYhC1T,oBAAS,GAZuB,oBAY3DU,EAZ2D,KAYhDC,EAZgD,OAa1CX,mBAAS,IAbiC,oBAa3D6I,EAb2D,KAarDC,EAbqD,OAc5B9I,mBAAS,IAdmB,oBAc3D+I,EAd2D,KAc9CC,EAd8C,OAepChJ,mBAAS,IAf2B,oBAe3D2a,EAf2D,KAelDC,EAfkD,OAkBlC5a,oBAAS,GAlByB,oBAkBhDkJ,GAlBgD,WAuB5DtI,EAAM,uCAAG,WAAOE,GAAP,uBAAAC,EAAA,6DACXD,EAAEE,iBACFkI,GAAW,GAFA,SAkBPvI,GAAa,GACPka,EAAW,CAEb/b,KAAM,CACF/E,WAAY8O,EACZ7O,WAAY+O,EACZ+R,cAAeH,EACfxgB,aAAc4a,EACdgG,aAAa,EACbC,mBAAmB,IA3BpB,SAgCgBvd,GAAM0D,KAAN,WAEnB0Z,GACFzZ,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAhDlB,OAgCDH,EAhCC,OAsDP6H,GAAW,GAtDJ,EA2D2E7H,EAASvC,KA3DpF,EA2DC/E,WA3DD,EA2DaC,WA3Db,EA2DyBC,cA3DzB,EA2DwC5B,GA3DxC,EA2D4C8B,aAAcD,EA3D1D,EA2D0DA,aAa7DghB,EAAwBhhB,EAAaxB,QAAO,SAAAgC,GAAC,OAA4B,IAAxBA,EAAEsgB,qBAIvDtH,EAAyB,2BAClBnZ,GADiB,IAEpBL,aAAcghB,EACdrjB,KAAM,aAIViR,EAAQ,IACRE,EAAe,IACf4R,EAAW,IACXja,GAAa,GACb+H,GAAa,GAvFN,kDA0FPhH,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCA5FN,0DAAH,sDAmHZ,OAnBAW,qBAAU,WAIN,GAA8B,OAA1BuR,EAAgC,CAE5BvT,EAAS,CACLrI,KAAM,uBACNE,QAAS0b,OAOtB,CAACvT,EAAUuT,IAKV,gBAACpK,GAAA,EAAD,CACIjH,KAAK,KACLY,KAAMyF,EACNa,SAAS,SACTC,OAAQ,WACJb,GAAa,IALrB,UAOI,eAACW,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,gCAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UACKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,6DAKR,uCACI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,uBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,8BACV+R,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GAMPgI,EAAQhI,EAAE+B,OAAOC,MAAMmH,QACnB,iBACA,eASxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIpK,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAMPkI,EAAelI,EAAE+B,OAAOC,MAAMmH,QAC1B,iBACA,eAQxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,0BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIpK,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAMP8Z,EAAW9Z,EAAE+B,OAAOC,MAAMmH,QACtB,iBACA,oBAYpC,gBAACZ,GAAA,EAAMa,OAAP,WACI,sBACIxK,UAAU,uCACV+F,QAAS,WACLqD,EAAQ,IACRE,EAAe,IACf4R,EAAW,IACXlS,GAAa,IANrB,SAQI,6CAIHG,EAAO,wBACJhR,KAAK,SACLsS,UAAU,EACVrH,MAAM,eACNpD,UAAU,cACV+F,QAAS,WACLiD,GAAa,MAIjB,wBACI7Q,KAAK,SACLsS,UAAU,EACVxK,MAAO,CAAEwb,QAAS,OAClBrY,MAAM,eACNpD,UAAU,0BC2FvB4b,GAlZM,SAAC,GAAyC,IAAvCxD,EAAsC,EAAtCA,cAAeyD,EAAuB,EAAvBA,iBAE7B/gB,EAAqB6I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMgB,sBACxDghB,EAAsBnY,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBAHL,EAMxByF,oBAAS,GANe,oBAMnDU,EANmD,KAMxCC,EANwC,KAOpDP,EAAUC,cACVob,EAAU,OAAGjhB,QAAH,IAAGA,OAAH,EAAGA,EAAoBnC,GARmB,EAUJ2H,mBAAS,CAC3DjG,WAAY,GACZC,WAAY,GACZC,cAAe,KAbuC,oBAUnDyhB,EAVmD,KAU9BC,EAV8B,KAgBlD5hB,EAA0C2hB,EAA1C3hB,WAAYC,EAA8B0hB,EAA9B1hB,WAAYC,EAAkByhB,EAAlBzhB,cAEhCiI,qBAAU,WAMyB,OAAvB1H,GAEAmhB,EAAuB,CACnB5hB,WAAYS,EAAmBT,WAC/BC,WAAYQ,EAAmBR,WAC/BC,cAAeO,EAAmBP,kBAQ/C,CAACO,IAGJ,IAAM0F,EAAWC,cAxCyC,EAyCAH,mBAAS,MAzCT,oBAyCnDyT,EAzCmD,KAyC5BC,EAzC4B,OA0CR1T,mBAAS,MA1CD,oBA0CnD4b,EA1CmD,KA0ChCC,EA1CgC,KA6CpDjb,EAAM,uCAAG,WAAOE,GAAP,2BAAAC,EAAA,6DACXD,EAAEE,iBADS,SAMPL,GAAa,GACPmb,EAAiB,CAMnBhd,KAAM,CACF/E,WAAY2hB,EAAoB3hB,WAChCC,WAAY0hB,EAAoB1hB,WAChCC,cAAeyhB,EAAoBzhB,cACnCsc,cAAa,OAAEiF,QAAF,IAAEA,OAAF,EAAEA,EAAqBnjB,KAjBrC,SAsBgBoF,GAAM0G,IAAN,kBACRsX,GACXK,GACF1a,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAtClB,OAsBDH,EAtBC,SA8C2EA,EAASvC,KA9CpF,EA8CC/E,WA9CD,EA8CaC,WA9Cb,EA8CyBC,cA9CzB,EA8CwC5B,GA9CxC,EA8C4C8B,aAAcD,EA9C1D,EA8C0DA,aAc7DghB,EAAwBhhB,EAAaxB,QAAO,SAAAgC,GAAC,OAA4B,IAAxBA,EAAEsgB,qBAInDvE,EAhEG,OAgE0BpV,QAhE1B,IAgE0BA,GAhE1B,UAgE0BA,EAAUvC,YAhEpC,aAgE0B,EAAgB5E,aAAa5B,KAAI,SAAAoC,GAM9D,OAJIA,EAAErC,MAAF,OAASmC,QAAT,IAASA,OAAT,EAASA,EAAoBnC,KAC7BwjB,EAAqBnhB,GAGlBA,EAAEE,aACV8b,KAAK,GAERhV,QAAQC,IAAI,oBAzEL,WA2EP+R,EAAyB,2BAClBrS,EAASvC,MADQ,IAEpB5E,aAAcghB,EACdtgB,UAAU,GAAD,mBAAMyG,EAASvC,KAAKlE,WAApB,YAAkC6b,IAC3C5e,KAAM,aAGV8I,GAAa,GACb4a,GAAiB,GAnFV,kDAuFP7Z,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCAzFN,0DAAH,sDA4FZW,qBAAU,WAEN,GAA8B,OAA1BuR,EAAgC,CAE5BvT,EAAS,CACLrI,KAAM,uBACNE,QAAS0b,IAGbvT,EAAS,CACLrI,KAAM,qBACNE,QAAS6jB,OAQtB,CAAC1b,EAAUuT,EAAuBmI,IAIrC,IAAMG,EAAc,uCAAG,4BAAAhb,EAAA,sEAIfJ,GAAa,GAJE,SAMElD,GAAMoQ,OAAN,kBACF4N,IAAcra,OAErB,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SArBd,OAMfH,EANe,OA4BfK,QAAQC,IAAI,gBAAiBN,EAASvC,MAGtCoB,EAAS,CACLrI,KAAM,kBACNE,QAASsJ,EAASvC,OAEtB6B,GAAa,GACb4a,GAAiB,GApCF,kDAyCf7Z,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCA3CE,0DAAH,qDAqDpB,OAEI,gBAAC8H,GAAA,EAAD,CACIjH,KAAK,KACLY,KAAM8U,EACNxO,SAAS,SACTC,OAAQ,WACJgS,GAAiB,IALzB,UAOI,eAAClS,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,uCAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UACKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,8DAIR,uCACI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,cAAhB,gCAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRjH,MAAO/I,EACP2F,UAAU,8BACV+R,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GAIP6a,EAAuB,2BAChBD,GADe,IACM3hB,WAAY+G,EAAE+B,OAAOC,MAAMmH,QAC/C,iBACA,iBAS5B,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,cAAhB,uCAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIhH,MAAO9I,GAA0B,GACjC0F,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAIP6a,EAAuB,2BAChBD,GADe,IACM1hB,WAAY8G,EAAE+B,OAAOC,MAAMmH,QAC/C,iBACA,iBAS5B,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,cAAhB,0BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIhH,MAAO7I,GAAgC,GACvCyF,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAIP6a,EAAuB,2BAChBD,GADe,IACMzhB,cAAe6G,EAAE+B,OAAOC,MAAMmH,QAClD,iBACA,sBAaxC,gBAACZ,GAAA,EAAMa,OAAP,CAAcvK,MAAO,CAAEua,eAAgB,iBAAvC,UACI,uBACIxa,UAAU,uCACV+F,QAAS,WACLwC,OAAOuG,QAAQ,+CACXuN,KAJZ,UAMI,oDANJ,OAOA,uBAAKpc,MAAO,CAAEmQ,QAAS,QAAvB,UACI,sBACInQ,MAAO,CAAEqc,YAAa,QACtBtc,UAAU,uCACV+F,QAAS,WACL8V,GAAiB,IAJzB,SAMI,6CAEJ,wBACI1jB,KAAK,SACLsS,UAAU,EACVrH,MAAM,eACNpD,UAAU,6BCIvBuc,ICxXAlR,KAAOC,IAAV,wf,ODPW,SAAC,GAAyC,IAAvC8M,EAAsC,EAAtCA,cAAeyD,EAAuB,EAAvBA,iBAE/BhhB,EAAgB8I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBAFG,EAG1ByF,oBAAS,GAHiB,oBAGrDU,EAHqD,KAG1CC,EAH0C,OAIxBX,oBAAS,GAJe,oBAKtDI,GALsD,UAK5CC,eACV0U,EAAO,OAAGxa,QAAH,IAAGA,OAAH,EAAGA,EAAelC,GAN6B,EAQN2H,mBAAS,CAC3DjG,WAAY,GACZC,WAAY,GACZC,cAAe,KAXyC,oBAQrDyhB,EARqD,KAQhCC,EARgC,KAcpD5hB,EAA0C2hB,EAA1C3hB,WAAYC,EAA8B0hB,EAA9B1hB,WAAYC,EAAkByhB,EAAlBzhB,cAEhCiI,qBAAU,WAMoB,OAAlB3H,GAEAohB,EAAuB,CACnB5hB,WAAYQ,EAAcR,WAC1BC,WAAYO,EAAcP,WAC1BC,cAAeM,EAAcN,kBAQ1C,CAACM,IAGJ,IAAM2F,EAAWC,cAtC2C,EAuCFH,mBAAS,MAvCP,oBAuCrDyT,EAvCqD,KAuC9BC,EAvC8B,KA0CtD9S,EAAM,uCAAG,WAAOE,GAAP,2BAAAC,EAAA,6DACXD,EAAEE,iBADS,SAMPL,GAAa,GACP7G,EAAc,CAChBgF,KAAM,CACF/E,WAAY2hB,EAAoB3hB,WAChCC,WAAY0hB,EAAoB1hB,WAChCC,cAAeyhB,EAAoBzhB,gBAXpC,SAiBgBwD,GAAM0G,IAAN,kBACR4Q,GACXjb,GACFsH,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAjClB,OAiBDH,EAjBC,SAwCsFA,EAASvC,KAxC/F,EAwCC/E,WAxCD,EAwCaC,WAxCb,EAwCyBC,cAxCzB,EAwCwC5B,GAxCxC,EAwC4C8B,aAAcD,EAxC1D,EAwC0DA,aAxC1D,EAwCwEU,UAK3EsgB,EAAwBhhB,EAAaxB,QAAO,SAAAgC,GAAC,OAA4B,IAAxBA,EAAEsgB,qBAEnDvE,EA/CG,OA+C0BpV,QA/C1B,IA+C0BA,GA/C1B,UA+C0BA,EAAUvC,YA/CpC,aA+C0B,EAAgB5E,aAAa5B,KAAI,SAAAoC,GAC9D,OAAOA,EAAEE,aACV8b,KAAK,GAcRhD,EAAyB,2BAClBrS,EAASvC,MADQ,IAEpB5E,aAAcghB,EACdtgB,UAAU,GAAD,mBAAMyG,EAASvC,KAAKlE,WAApB,YAAkC6b,IAC3C5e,KAAM,aAGV8I,GAAa,GACb4a,GAAiB,GAvEV,kDA4EP7Z,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCA9EN,0DAAH,sDAiFZW,qBAAU,WAIN,GAA8B,OAA1BuR,EAAgC,CAE5BvT,EAAS,CACLrI,KAAM,uBACNE,QAAS0b,OAQtB,CAACvT,EAAUuT,IAId,IAAMyI,EAAW,uCAAG,4BAAAnb,EAAA,sEAIZJ,GAAa,GAJD,SAMKlD,GAAMoQ,OAAN,kBACFkH,IAAW3T,OAElB,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SArBjB,OAMZH,EANY,OA4BZK,QAAQC,IAAI,gBAAiBN,EAASvC,MAGtCoB,EAAS,CACLrI,KAAM,eACNE,QAASsJ,EAASvC,OAEtB6B,GAAa,GACb4a,GAAiB,GApCL,kDAyCZ7Z,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCA3CD,0DAAH,qDAmDjB,OAEI,gBAAC8H,GAAA,EAAD,CACIjH,KAAK,KACLY,KAAM8U,EACNxO,SAAS,SACTC,OAAQ,WACJgS,GAAiB,IALzB,UAOI,eAAClS,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,2BAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UACKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,2DAIR,uCACI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,aAAhB,6BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRjH,MAAO/I,EACP2F,UAAU,8BACV+R,UAAU,KACVC,YAAY,oBACZ9O,SAAU,SAAC9B,GAIP6a,EAAuB,2BAChBD,GADe,IACM3hB,WAAY+G,EAAE+B,OAAOC,MAAMmH,QAC/C,iBACA,iBAS5B,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,aAAhB,oCAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIhH,MAAO9I,EACP0F,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAIP6a,EAAuB,2BAChBD,GADe,IACM1hB,WAAY8G,EAAE+B,OAAOC,MAAMmH,QAC/C,iBACA,iBAS5B,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,cAAhB,0BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIhH,MAAO7I,EACPyF,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBACZ9O,SAAU,SAAC9B,GAIP6a,EAAuB,2BAChBD,GADe,IACMzhB,cAAe6G,EAAE+B,OAAOC,MAAMmH,QAClD,iBACA,sBAaxC,gBAACZ,GAAA,EAAMa,OAAP,CAAcvK,MAAO,CAAEua,eAAgB,iBAAvC,UACI,uBACIxa,UAAU,uCACV+F,QAAS,WACLwC,OAAOuG,QAAQ,+CACX0N,KAJZ,UAMI,iDANJ,OAOA,uBAAKvc,MAAO,CAAEmQ,QAAS,OAAQoK,eAAgB,iBAA/C,UASI,sBACIva,MAAO,CAAEqc,YAAa,QACtBtc,UAAU,uCACV+F,QAAS,WACL8V,GAAiB,IAJzB,SAMI,6CAEJ,wBACI1jB,KAAK,SACLsS,UAAU,EACVrH,MAAM,eACNpD,UAAU,8BEzWvBqL,KAAOC,IAAV,wf,cCFGD,KAAOC,IAAV,uf,cAkTGmR,ICnUA,OAA0B,qCCA1B,OAA0B,kC,OCgBzC,SAASC,GAAWC,GAGhB,OAFc,IAAIhI,KAAKgI,GAERC,qBA0DJC,OAtDf,YAA2E,IAA3CC,EAA0C,EAA1CA,WAAYC,EAA8B,EAA9BA,iBAAkBpF,EAAY,EAAZA,SAElDtd,EAAmDyiB,EAAnDziB,WAAYC,EAAuCwiB,EAAvCxiB,WAAYihB,EAA2BuB,EAA3BvB,UAAWF,EAAgByB,EAAhBzB,YAIrC7a,EAAWC,cAGXuc,EAAgB,uCAAG,sBAAA3b,EAAA,sDAErBb,EAAS,CACLrI,KAAM,qBACNE,QAASykB,IAJQ,2CAAH,qDAUtB,OACI,uBAAK9c,UAAU,8DAA8D+F,QAASiX,EAAkB/c,MAAO,CAAE0E,gBAAiBgT,EAAW,uCAAyC,IAAtL,UAEI,sBAAK3X,UAAU,mCAAf,SAEI,sBAAKA,UAAU,iCAEnB,uBAAKA,UAAU,8BAAf,UACI,uBAAKA,UAAU,qDAAf,UACI,uBAAMA,UAAU,+BAAhB,SACK3F,IAEHghB,EAEM,KAFQ,sBAAKjW,IAAK6X,GAAU3X,IAAI,cAAcrF,MAAO,CAAE0H,OAAQ,QAASuV,YAAa,QAAUnX,QAAS,SAACC,GAC7G+W,GAAiB,SAGzB,uBAAM/c,UAAU,sCAAhB,SACK1F,IAGsB,iBAA1BoiB,GAAWnB,GACR,sBAAKvb,UAAU,uBAEf,uBAAKA,UAAU,qBAAf,UAAoC,uBAAMC,MAAO,CAAEkd,WAAY,OAA3B,uBAAqDT,GAAWnB,a,SC4EzG6B,OApHf,YAAyE,IANrDT,EAMO7iB,EAA6C,EAA7CA,MAAO+hB,EAAsC,EAAtCA,iBAAkBkB,EAAoB,EAApBA,iBAExCpkB,EAAqEmB,EAArEnB,GAAI0B,EAAiEP,EAAjEO,WAAYkhB,EAAqDzhB,EAArDyhB,UAAWjhB,EAA0CR,EAA1CQ,WAAYE,EAA8BV,EAA9BU,aAAc6gB,EAAgBvhB,EAAhBuhB,YAFO,EAIhB/a,oBAAS,GAJO,oBAI7D+c,EAJ6D,KAIzCC,EAJyC,KAM9DziB,EAAgB8I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBACnDC,EAAqB6I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMgB,sBAIxD0F,GAFUG,cAECF,eAEX8c,EAAW,uCAAG,sBAAAlc,EAAA,0DAGC,OAAbxG,QAAa,IAAbA,OAAA,EAAAA,EAAelC,MAAOA,EAHV,uBAKZqJ,QAAQC,IAAI,kBAAZ,OAA+BpH,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAelC,GAAIA,GAElD6H,EAAS,CACLrI,KAAM,eACNE,QAASwC,IAGb2F,EAAS,CACLrI,KAAM,qBACNE,QAAS,OAdD,0BAoBhBmI,EAAS,CACLrI,KAAM,eACNE,QAAS,CAAEM,KAAI0B,aAAYC,aAAYihB,YAAW/gB,eAAcrC,KAAM,aAG1EqI,EAAS,CACLrI,KAAM,qBACNE,QAAS,OA3BG,2CAAH,qDAkCjB,OACI,uCACI,gBAACmlB,GAAA,EAAUC,KAAX,CAAgBhG,SAAU9e,EAA1B,UACI,eAAC6kB,GAAA,EAAUlX,OAAX,CAAkBP,QAASwX,EAA3B,SACI,uBAAKvd,UAAU,0BAAf,UACI,sBAAKA,UAAU,aAAaC,MAAO,CAAEyd,aAAc,QAAnD,SACI,sBAAKzd,MAAO,CAAE0H,OAAQ,QAASjC,MAAO,SAAWN,IAAKuY,OAE1D,uBAAK3d,UAAU,8BAAf,UACI,uBAAKA,UAAU,qDAAf,UACI,uBAAMA,UAAU,+BAAhB,SACK3F,IAEHghB,EAIM,KAJQ,sBAAKjW,IAAK6X,GAAU3X,IAAI,cAAcrF,MAAO,CAAE0H,OAAQ,QAASuV,YAAa,QAAUnX,QAAS,SAACC,GAC7GA,EAAM4X,kBACNL,IACA1B,GAAiB,SAGzB,uBAAM7b,UAAU,sCAAhB,SACK1F,IAEL,uBAAK0F,UAAU,qBAAf,UAAoC,uBAAMC,MAAO,CAAEkd,WAAY,OAA3B,wBA3E5CR,EA2E4GpB,EA1E9G,IAAI5G,KAAKgI,GAERC,iCA+EH,gBAACY,GAAA,EAAUhX,KAAX,WACI,uBAAKxG,UAAU,gCAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WAErEuX,GAAsB,MAE1B,uBAAMtd,UAAU,kBAAkBC,MAAO,CAAE0F,SAAU,QAArD,oCAEJ,gCAEiB,OAAZnL,QAAY,IAAZA,OAAA,EAAAA,EAAc8N,QAAS,EAAI9N,EAAa5B,KAAI,SAAAilB,GAIzC,OAEI,eAAC,GAAD,CAEIf,WAAYe,EACZd,iBAAkBA,EAClBpF,UAA4B,OAAlB7c,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBnC,MAAOklB,EAAYllB,IAH5CklB,EAAYllB,OAQvB,aAIlB,eAAC,GAAD,CACIqQ,aAAcsU,EACdvU,UAAWsU,EACXhI,QAAS1c,QChCVmlB,OAxFf,YAA4C,EAAd9jB,WAEV2G,cAFyB,IAInC9F,EAAgB8I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBAGnD2F,EAAWC,cAEX8c,EAAc,SAACnc,GAGjB,IAAIjJ,EAAOiJ,GAEM,OAAbvG,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,QAASA,IAM5B6J,QAAQC,IAAI,OAAQ9J,GAEpBqI,EAAS,CACLrI,KAAM,eACNE,QAAS,CACLM,GAAa,QAATR,GAAkB,GAAK,EAC3BmC,WAAY,GACZD,WAAqB,QAATlC,EAAiB,gBAAkB,aAC/CA,KAAMA,EACN+C,UAAW,MAInBsF,EAAS,CACLrI,KAAM,qBACNE,QAAS,SAKjB,OACI,uCACI,eAACmlB,GAAA,EAAUC,KAAX,CAAgBhG,SAAS,MAAM1R,QAAS,SAAC3E,GACrCmc,EAAY,QADhB,SAGI,eAACC,GAAA,EAAUlX,OAAX,UACI,uBAAKtG,UAAU,0BAAf,UAEI,sBAAKA,UAAU,aAAaC,MAAO,CAAEyd,aAAc,QAAnD,SACI,sBAAKzd,MAAO,CAAE0H,OAAQ,QAASjC,MAAO,SAAWN,IAAKuY,OAE1D,sBAAK3d,UAAU,8BAAf,SAEI,uBAAMA,UAAU,gCAAhB,oCAShB,eAACwd,GAAA,EAAUC,KAAX,CAAgBhG,SAAS,eAAe1R,QAAS,SAAC3E,GAC9Cmc,EAAY,kBADhB,SAGI,eAACC,GAAA,EAAUlX,OAAX,UACI,uBAAKtG,UAAU,0BAAf,UAGI,sBAAKA,UAAU,aAAaC,MAAO,CAAEyd,aAAc,QAAnD,SACI,sBAAKzd,MAAO,CAAE0H,OAAQ,SAAWvC,IAAKuY,OAE1C,sBAAK3d,UAAU,8BAAf,SAEI,uBAAMA,UAAU,gCAAhB,qC,OCJb+d,I,GAAAA,GAnEf,WAA2B,IAAD,EAEYzd,oBAAS,GAFrB,oBAEfyI,EAFe,KAEJC,EAFI,OAGoB1I,oBAAS,GAH7B,oBAGf8X,EAHe,KAGAyD,EAHA,OAIwBvb,oBAAS,GAJjC,oBAIf0d,EAJe,KAIIjB,EAJJ,KAQhB5iB,EAASwJ,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMK,UAOlD,OACI,uBAAK6F,UAAU,kBAAf,UACI,kDAGA,uBAAKA,UAAU,6BAA6B+F,QAAS,WACjDiD,GAAa,IADjB,UAGI,sBAAK/I,MAAO,CAAE0H,OAAQ,OAASvC,IAAK+M,GAAS7M,IAAI,eAIjD,uBAAMtF,UAAU,wBAAhB,iCAIJ,sBAAKA,UAAU,cAAf,SAGI,gBAACwd,GAAA,EAAD,WACI,eAAC,GAAD,IACCrjB,EAAOnB,QAAO,SAAAgC,GAAC,OAAIA,EAAErC,IAAM,KAAGC,KAAI,SAACkB,GAAD,OAC/B,eAAC,GAAD,CAEIA,MAAOA,EACP+hB,iBAAkBA,EAClBkB,iBAAkBA,GAHbjjB,EAAMnB,YAS3B,eAAC,GAAD,CACIqQ,aAAcA,EACdD,UAAWA,IAIdqP,EAAgB,eAAC,GAAD,CACbyD,iBAAkBA,EAClBzD,cAAeA,IAAoB,KACtC4F,EAAoB,eAAC,GAAD,CACjBnC,iBAAkBkB,EAClB3E,cAAe4F,IAAwB,SCvE1CtD,I,cAAe,SAAC,GAAgB,IAAdzO,EAAa,EAAbA,OAEnB0O,EAA2B1O,EAA3B0O,YAAaC,EAAc3O,EAAd2O,UAQrB,OACI,gCACI,wBAAOxX,MAAOuX,GAAe,GAAIzX,SARpB,SAAC9B,GAElBwZ,EAAUxZ,EAAE+B,OAAOC,QAM0CpD,UAAU,oBCblEie,GAAiB,SAAC,GAExB,IADHhS,EACE,EADFA,OAKQ0O,EAAgD1O,EAAhD0O,YAAaC,EAAmC3O,EAAnC2O,UAAWsD,EAAwBjS,EAAxBiS,gBAAiBvlB,EAAOsT,EAAPtT,GAW3CwlB,EARUjR,IAAMC,SAAQ,WAC1B,IAAMiR,EAAU,IAAIC,IAIpB,OAHAH,EAAgBI,SAAQ,SAAAlS,GACpBgS,EAAQG,IAAInS,EAAI4I,OAAOrc,OAEpB,YAAIylB,EAAQpJ,YACpB,CAACrc,EAAIulB,IAEuBtlB,KAAI,SAAAiN,GAE/B,MAAe,iBAAXA,EACO,CACHzC,MAAO,eACPua,MAAO,gBAIA,QAAX9X,EACO,CACHzC,MAAO,MACPua,MAAO,mBAKA,aAAX9X,EACO,CACHzC,MAAO,WACPua,MAAO,YAIA,aAAX9X,EACO,CACHzC,MAAO,WACPua,MAAO,YAGA,cAAX9X,EACO,CACHzC,MAAO,YACPua,MAAO,aAGA,iBAAX9X,EACO,CACHzC,MAAO,eACPua,MAAO,gBAIA,aAAX9X,EACO,CACHzC,MAAO,WACPua,MAAO,wBAGA,sBAAX9X,EACO,CACHzC,MAAO,oBACPua,MAAO,qBAGR,QAIX,OACI,0BACI3d,UAAU,cACVoD,MAAOuX,EACPzX,SAAU,SAAA9B,GAGNwZ,EAAUxZ,EAAE+B,OAAOC,YAASJ,IANpC,UAUI,yBAAQI,MAAM,GAAd,iBACC+a,EAAevlB,KAAI,SAACiN,EAAQC,GAAT,OAEhB,yBAAgB1C,MAAK,OAAEyC,QAAF,IAAEA,OAAF,EAAEA,EAAQzC,MAA/B,gBACKyC,QADL,IACKA,OADL,EACKA,EAAQ8X,OADA7X,UC1FhB0Y,GAAgB,SAAC,GAEvB,IADHvS,EACE,EADFA,OAKQ0O,EAAgD1O,EAAhD0O,YAAaC,EAAmC3O,EAAnC2O,UAAWsD,EAAwBjS,EAAxBiS,gBAK1BE,GALkDnS,EAAPtT,GAKjCuU,IAAMC,SAAQ,WAC1B,IAAMiR,EAAU,IAAIC,IAYpB,OAXAH,EAAgBI,SAAQ,SAAAlS,GAGhBA,EAAIqS,SAAShkB,cACb2jB,EAAQG,IAAInS,EAAIqS,SAAShkB,eAExB2R,EAAIqS,SAAShkB,cAAgB2R,EAAIqS,SAAS3kB,OAC3CskB,EAAQG,IAAInS,EAAIqS,SAAS3kB,UAI1B,YAAIskB,EAAQpJ,YACpB,CAACkJ,KAkBJ,OAEI,0BACIle,UAAU,cACVoD,MAAOuX,EACPzX,SAAU,SAAA9B,GAGNwZ,EAAUxZ,EAAE+B,OAAOC,YAASJ,IANpC,UASI,yBAAQI,MAAM,GAAd,iBACCgb,EAAQxlB,KAAI,SAACiN,EAAQC,GAAT,OAGT,cADA,CACA,UAAgB1C,MAAOyC,EAAvB,SACKA,GADQC,UC1DhB4Y,GAAmB,SAAC,GAE1B,IADHzS,EACE,EADFA,OAKQ0O,EAAgD1O,EAAhD0O,YAAaC,EAAmC3O,EAAnC2O,UAAWsD,EAAwBjS,EAAxBiS,gBAK1BE,GALkDnS,EAAPtT,GAKjCuU,IAAMC,SAAQ,WAC1B,IAAMiR,EAAU,IAAIC,IAepB,OAdAH,EAAgBI,SAAQ,SAAAlS,GAShBA,EAAIqS,SAAS3kB,OACbskB,EAAQG,IAAInS,EAAIqS,SAAS3kB,UAI1B,YAAIskB,EAAQpJ,YACpB,CAACkJ,KAIJ,OAEI,0BACIle,UAAU,cACVoD,MAAOuX,EACPzX,SAAU,SAAA9B,GAGNwZ,EAAUxZ,EAAE+B,OAAOC,YAASJ,IANpC,UASI,yBAAQI,MAAM,GAAd,iBACCgb,EAAQxlB,KAAI,SAACiN,EAAQC,GAAT,OAGT,cADA,CACA,UAAgB1C,MAAOyC,EAAvB,SACKA,GADQC,UC/ChB6Y,GAAkB,SAAC,GAEzB,IADH1S,EACE,EADFA,OAKQ0O,EAAgD1O,EAAhD0O,YAAaC,EAAmC3O,EAAnC2O,UAAWsD,EAAwBjS,EAAxBiS,gBAoB1BC,GApBkDlS,EAAPtT,GAKjCuU,IAAMC,SAAQ,WAC1B,IAAMiR,EAAU,IAAIC,IASpB,OARAH,EAAgBI,SAAQ,SAAAlS,GAIpBgS,EAAQG,IAAInS,EAAIqS,SAAShJ,cAItB,YAAI2I,EAAQpJ,YACpB,CAACkJ,IAI2BtlB,KAAI,SAAAiN,GAE/B,OAAIA,EACO,CACH8X,MAAO,YACPva,OAAO,GAYVyC,OAAL,EACW,CACH8X,MAAO,aACPva,OAAO,OAQnB,OACI,0BACIpD,UAAU,cACVoD,MAAOuX,EACPzX,SAAU,SAAA9B,GAIiB,SAAnBA,EAAE+B,OAAOC,OACTwX,GAAU,GAGS,UAAnBxZ,EAAE+B,OAAOC,OACTwX,GAAU,GAOS,KAAnBxZ,EAAE+B,OAAOC,OACTwX,EAAUxZ,EAAE+B,OAAOC,YAASJ,IApBxC,UA0BI,yBAAQI,MAAM,GAAd,iBACC+a,EAAevlB,KAAI,SAACiN,EAAQC,GAAT,OAEhB,yBAAgB1C,MAAK,OAAEyC,QAAF,IAAEA,OAAF,EAAEA,EAAQzC,MAA/B,gBACKyC,QADL,IACKA,OADL,EACKA,EAAQ8X,OADA7X,UCtFd,ICAA,IDAA,IAA0B,2CE0BnCsF,GAASC,KAAOC,IAAV,yfAmEZ,SAASsT,GAAT,GAEI,IAAD,IADC3S,OAAU0O,EACX,EADWA,YAAauD,EACxB,EADwBA,gBAAiBtD,EACzC,EADyCA,UAElCiE,EAAQX,EAAgB5V,OAE9B,OACI,wBACIlF,MAAOuX,GAAe,GACtBzX,SAAU,SAAA9B,GACNwZ,EAAUxZ,EAAE+B,OAAOC,YAASJ,IAEhCgP,YAAW,iBAAY6M,EAAZ,iBAyCvB,SAAStT,GAAT,GAA0F,IAAzEC,EAAwE,EAAxEA,QAASpM,EAA+D,EAA/DA,KAAM0f,EAAyD,EAAzDA,kBAAmBhkB,EAAsC,EAAtCA,mBAQ3CikB,GARiF,EAAlB7lB,eAQ/C,IAIM,QAAtB4lB,IAC0B,kBAAtBA,IACAC,EAAgB,CAAC,eAAgB,UAIX,kBAAtBD,IACAC,EAAgB,CAAC,iBAIjBjkB,IACAikB,EAAgB,CAAC,eAAgB,WASzC,IAAMC,EAAgB9R,IAAMC,SACxB,iBAAO,CAEH8R,OAAQL,MAEZ,IAtCiF,EAiEjFnT,oBAAS,CACTD,UACApM,OACA8f,aAAc,CACVC,UAAW,EACXJ,cAAeA,GAenBC,iBAGDI,cAAYC,mBACXC,iBAAeC,iBA7Cf7T,EA5CiF,EA4CjFA,cACAC,EA7CiF,EA6CjFA,kBACAC,EA9CiF,EA8CjFA,aACAC,EA/CiF,EA+CjFA,KAEAC,GAjDiF,EAgDjF0T,KAhDiF,EAiDjF1T,YAjDiF,KAkDjF2T,iBAlDiF,EAmDjFC,eAnDiF,EAoDjFC,sBApDiF,EAqDjFC,gBArDiF,EAwDjFC,gBAxDiF,EAyDjFC,YAzDiF,EA0DjFC,YA1DiF,EA2DjFC,UA3DiF,EA4DjFC,SA5DiF,EA6DjFC,SA7DiF,EA8DjFC,aA9DiF,EA+DjFC,YA/DiF,EAgEjFnoB,OAhEiF,EAgExEknB,UAhEwE,EAgE7DkB,SAwDxB,OACI,qCACI,mDAAW3U,KAAX,cAEI,iCACKE,EAAahT,KAAI,SAAAmT,GAAW,OACzB,+CAAQA,EAAYC,uBAApB,aACKD,EAAY/M,QAAQpG,KAAI,SAAAqT,GAAM,OAC3B,gDAAQA,EAAOC,kBAAf,cAAkCD,EAAOE,OAAO,UAC5C,+BAAMF,EAAOqU,UAAYrU,EAAOE,OAAO,UAAY,sBAMvE,kDAAWR,KAAX,aACKE,EAAKjT,KAAI,SAACwT,EAAKtG,GAEZ,OADAgG,EAAWM,GAEP,+CAAQA,EAAIC,eAAZ,aACKD,EAAIE,MAAM1T,KAAI,SAAA2T,GACX,OAAO,+CAAQA,EAAKC,gBAAb,aAA6B,sBAAKxM,UAAU,0BAAf,SAA2CuM,EAAKJ,OAAO,+BAuE/H,IAAMoU,GAAc,uCAAG,WAAOnf,EAAGvG,EAAeC,EAAoB5B,EAAgBwH,EAASF,EAAUS,GAAhF,qBAAAI,EAAA,yDAEbqX,EAAatX,EAAEzI,GAFF,SAQa,aAAX,OAAbkC,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,MARJ,wBAaX8I,GAAa,GAbF,SAeMlD,GAAMoQ,OAAN,qBACCuK,EADD,gBACmBxf,IAAkBwI,OAE9C,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA9BlB,cAeXH,EAfW,OAoCXK,QAAQC,IAAI,mBAAoBpH,GAChCmH,QAAQC,IAAI,cAAeN,GAG3BnB,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,YAAD,OAAML,QAAN,IAAMA,OAAN,EAAMA,EAAeK,UAAUlC,QAAO,SAAAgC,GAAC,aAAIA,EAAErC,MAAF,UAASgJ,EAASvC,YAAlB,aAAS,EAAezG,YAG7GsI,GAAa,GA7CF,8BAkDa,aAAX,OAAbpG,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,MAlDJ,wBAuDX8I,GAAa,GAETuf,EAzDO,aA0DP5J,WAAY,SACZ6J,MAAO,EACP5G,WAAYnB,GACc,OAAvB5d,EAA8B,CAAE+b,cAAa,OAAEhc,QAAF,IAAEA,OAAF,EAAEA,EAAelC,IAAO,MA7DjE,UAiEMoF,GAAM0G,IAAN,6BACS3J,EAAkB,OAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAoBnC,GAAvB,OAA4BkC,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAelC,IAAM6nB,GAAe9e,OAEpG,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAhFlB,QAiEXH,EAjEW,OAsFXK,QAAQC,IAAI,mBAAoBpH,GAChCmH,QAAQC,IAAI,cAAeN,GAG3BnB,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAU,YAAD,OAAML,QAAN,IAAMA,OAAN,EAAMA,EAAeK,UAAUlC,QAAO,SAAAgC,GAAC,aAAIA,EAAErC,MAAF,UAASgJ,EAASvC,KAAK0X,sBAAvB,aAAS,EAA8Bne,YAG5HsI,GAAa,GA/FF,0DAqGfe,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCAvGE,0DAAH,kEAwiBL6e,I,GAAAA,GA3bf,YAAoJ,IAW5IC,EAXsBzlB,EAAqH,EAArHA,UAAWmd,EAA0G,EAA1GA,aAAkCyG,GAAwE,EAA5F8B,mBAA4F,EAAxE9B,mBAAmBhkB,EAAqD,EAArDA,mBAAoBD,EAAiC,EAAjCA,cAAe3B,EAAkB,EAAlBA,eAKvHsH,EAAWC,cACXC,EAAUC,cAN+H,EAQ7GL,oBAAS,GARoG,oBAQxIU,EARwI,KAQ7HC,EAR6H,OAS/GX,mBAAS,MATsG,oBASxIlF,EATwI,KAS9HylB,EAT8H,KAa3IzlB,IAEAulB,EAAqBzlB,EAAUlC,QAAO,SAAAgC,GAClC,OAAOA,EAAErC,KAAOyC,EAASzC,OAKjC6J,qBAAU,WAIN,GAAiB,OAAbpH,EAAmB,CAEfoF,EAAS,CACLrI,KAAM,kBACNE,QAASsoB,EAAmB,QAOzC,CAACngB,EAAUpF,EAAUulB,IAqBxB,IAAM1T,EAAeC,IAAMC,SAEvB,iBAAM,CAGF,CAGI7G,OAAQ,WACR0G,SAAU,gBACViS,OAAQvE,GACRoG,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KA0GL,OAAO,gCAAOA,EAAKH,IAAIqS,SAASlJ,kBAKxC,CACIjP,OAAQ,QAGR2Y,OAAQT,GACRxR,SAAU,eACVhU,OAAQ,SACR8nB,KAAM,YAAe,IAAD,EAqBqB,EArBhCvU,EAAW,EAAXA,KAqBL,iBAAIA,EAAKH,IAAIqS,gBAAb,aAAI,EAAmBhkB,cACnB,UAAO8R,EAAKH,IAAIqS,gBAAhB,aAAO,EAAmBhkB,aAKvB,KAKf,CACI6L,OAAQ,WACR2Y,OAAQP,GAGR1R,SAAU,QACV8T,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAOL,OAAIA,EAAKH,IAAIqS,SAAS3kB,OAASyS,EAAKH,IAAIqS,SAAShkB,aACtC8R,EAAKH,IAAIqS,SAAS3kB,MAEtB,KAKf,CACIwM,OAAQ,cACR0G,SAAU,YACViS,OAAQN,GACR3lB,OAAQ,SAER8nB,KAAM,YAGF,OAHgB,EAAXvU,KAGIH,IAAIqS,SAAShJ,UACX,YAOJ,eAWf,CACInP,OAAQ,gBACR0G,SAAU,gBAEViS,OAAQhB,GACRjlB,OAAQ,SACR8nB,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAEL,MAAwC,iBAApCA,EAAKH,IAAIqS,SAAS3I,cACX,eAG6B,QAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,kBAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,WAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,WAE6B,cAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,YAE6B,iBAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,eAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,uBAG6B,sBAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,oBAGJ,OAMf,CACIxP,OAAQ,IAER2Y,QAAQ,EACR6B,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAGL,OAAQ,sBAAKvM,UAAU,gCAAf,SAqBA,sBAAKoF,IAAK6X,GAAUjd,UAAU,oBAAoBsF,IAAI,cAAclC,MAAOmJ,EAAKH,IAAIqS,SAAU1Y,QAAS,WACnG8a,EAAYtU,EAAKH,IAAIqS,UACrBpG,GAAa,UAMjC,CACI/R,OAAQ,MAER2Y,QAAQ,EACR6B,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAGL,OAAQ,sBAAKvM,UAAU,gCAAf,SAEHuM,EAAKH,IAAIqS,SAAS5F,OAGf,eAACkI,GAAA,EAAD,CAEI7a,UAAW,OACX8a,QACI,eAACC,GAAA,EAAD,CAAStoB,GAAI4T,EAAKH,IAAIqS,SAAS9lB,GAA/B,SACI,sBAAKqH,UAAU,SAAf,SACI,oGANhB,SAWI,sBAAKoF,IAAK8b,GAAmBlhB,UAAU,oBAAoBsF,IAAI,uBAAuBlC,MAAOmJ,EAAKH,IAAIqS,YAVjGlS,EAAKH,IAAIqS,SAAS9lB,IAe3B,sBAAKyM,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUtC,MAAOmJ,EAAKH,IAAIqS,SAAU1Y,QAAS,WAEjJwC,OAAOuG,QAAQ,+CACXyR,GAAehU,EAAKH,IAAIqS,SAAU5jB,EAAeC,EAAoB5B,EAAgBwH,EAASF,EAAUS,aASpI,CAACoX,EAAcxd,EAAeC,IAyBlC,OAEIkG,EACI,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,8DAIR,eAAC,GAAD,UACI,eAAC,GAAD,CACIwL,QAASyB,EACT7N,KAAMlE,EACN4jB,kBAAmBA,EACnBjkB,cAAeA,EACfC,mBAAoBA,OC9mBzBqmB,GAjQe,WAE1B,IA8II9mB,EA9IE+D,EAAcsF,iBAAOvF,IACrBkP,EAAS3J,sBAAOV,GAEhBtC,EAAUC,cACVH,EAAWC,cANe,EAQcH,oBAAS,GARvB,oBAQzB8gB,EARyB,KAQRC,EARQ,OASM/gB,oBAAS,GATf,oBASzB8X,EATyB,KASVC,EATU,OAWE/X,oBAAS,GAXX,oBAWzBU,EAXyB,KAWdC,EAXc,KAa1BpG,EAAgB8I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMe,iBAbzB,EAgBcyF,mBAAS,MAhBvB,oBAgBzBghB,EAhByB,KAgBRC,EAhBQ,OAiBkBjhB,mBAAS,MAjB3B,oBAiBzBwe,EAjByB,KAiBN0C,EAjBM,KAqB1B1mB,EAAqB6I,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMgB,sBAExD5B,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAEnDuoB,EAAkB9d,aAAY,SAAC1L,GAAD,uBAAWA,EAAM6B,MAAMe,qBAAvB,aAAW,EAA2BK,aAG1EsH,qBAAU,WAENgf,EAAoB,OAAC3mB,QAAD,IAACA,OAAD,EAACA,EAAe1C,MAEhC0C,GAAuC,YAAtBikB,GACjByC,EAAmB1mB,EAAclC,IAGjCkC,GAAuC,QAAtBikB,GACjByC,EAAmB,OAGnB1mB,GAAuC,kBAAtBikB,GACjByC,EAAmB,mBAIxB,CAAC1mB,EAAeikB,IAEnBtc,qBAAU,YAEgB,uCAAG,gCAAAnB,EAAA,mEAGbigB,EAHa,6BAKUte,IAAnBqK,EAAOpF,SACPoF,EAAOpF,UAGXhH,GAAa,GATA,SAWUlD,GAAMoE,IAAwB,QAApBmf,EAAA,yBACXpoB,EADW,WACmC,kBAApBooB,EAAA,yBAAwDpoB,EAAxD,+BAA+FooB,GAC3I,CACInjB,YAAa,IAAIC,EAAY6J,SAAQ,SAAA6F,GACjCT,EAAOpF,QAAU6F,OAG3BpM,OAEE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAhCZ,QAWPH,EAXO,SAwCwB,QAApB2f,GAKb9gB,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAS,OAAEyG,QAAF,IAAEA,OAAF,EAAEA,EAAUvC,SAIrDuC,GAAgC,kBAApB2f,GAGb9gB,EAAS,CACLrI,KAAM,eACNE,QAAQ,2BAAMwC,GAAP,IAAsBK,UAAS,OAAEyG,QAAF,IAAEA,OAAF,EAAEA,EAAUvC,SAItDuC,GAAY2f,GAAuC,QAApBA,GAAiD,kBAApBA,IAIxDvK,EAJ6F,OAIhEpV,QAJgE,IAIhEA,GAJgE,UAIhEA,EAAUvC,YAJsD,aAIhE,EAAgB5E,aAAa5B,KAAI,SAAAoC,GAC9D,OAAOA,EAAEE,aACV8b,KAAK,GAIRhV,QAAQC,IAAI,eAAgBN,EAASvC,MAErCoB,EAAS,CACLrI,KAAM,eAGNE,QAAQ,2BAAMsJ,EAASvC,MAAhB,IAAsBjH,KAAM,UAAW+C,UAAU,GAAD,mBAAMyG,EAASvC,KAAKlE,WAApB,YAAkC6b,SA5EpF,QAoFjB9V,GAAa,GApFI,kDAuFjBe,QAAQC,IAAR,MAvFiB,0DAAH,qDA4FtByf,KACD,CAAChhB,EAAS4gB,EAAiBxmB,IAK1BD,IAEAR,EAAaQ,EAAcR,WACdQ,EAAcP,WACdO,EAAcb,YAI/B,IAAI2nB,EAAmB,GAsCvB,OAlCI7mB,IAEA6mB,EAAmB7mB,EAAmBT,YAK1CmI,qBAAU,WAONhC,EAAS,CACLrI,KAAM,eACNE,QAAS,CACLM,IAAK,EACL2B,WAAY,GACZD,WAAY,gBACZlC,KAAM,SAGdqI,EAAS,CACLrI,KAAM,qBACNE,QAAS,SAId,CAACmI,EAAUtH,IAQV,uBAAK8G,UAAU,mCAAf,UACI,qBAAIA,UAAU,wBAAd,SACK2hB,EAAgB,UAAMA,EAAN,eAA6BtnB,GAAeA,IAG/DQ,EAIE,uBAAKmF,UAAU,yBAAf,UACI,sBAAKC,MAAO,CAAEiK,WAAY,MAAOC,cAAe,SAGhD,sBAAKnK,UAAU,oCAAf,SAEI,uBAAKA,UAAU,iDAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,OAASvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WACnEsb,GAAmB,MAEvB,uBAAMrhB,UAAU,mCAAhB,sCAONgB,EAkBG,uBAAKhB,UAAU,oBAAf,UAAmC,eAAC+O,GAAA,EAAD,CAASC,UAAU,WACnD,+DAjBFyS,EAEE,eAAC,GAAD,CAAoBvmB,UAChBJ,EACI2mB,EAAgBzoB,QAAO,SAAAgC,GAAC,OAAIA,EAAElB,QAAUgB,EAAmBT,cAE3DonB,EAGJ3C,kBAAmBA,EACnBhkB,mBAAoBA,EACpBud,aAAcA,EACdxd,cAAeA,EACf3B,eAAgBA,IAbJ,sBAAK8G,UAAU,gBAAf,uCAvBd,sBAAKA,UAAU,8BAAf,iCA6ClB,eAAC,GAAD,CACIgJ,aAAcqY,EACdtY,UAAWqY,IAEdhJ,EAAgB,eAAC,GAAD,CACbC,aAAcA,EACdD,cAAeA,IAAoB,SC1IpCwJ,GA5HJ,WAAO,IAAD,EAEethB,mBAAS,IAFxB,oBAENnG,EAFM,KAEE0nB,EAFF,OAMqBvhB,oBAAS,GAN9B,oBAMNU,EANM,KAMKmO,EANL,KAOP3O,EAAWC,cAEXC,EAAUC,cAEVzH,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAoFzD,OAlFAsJ,qBAAU,WAEM5D,aAAaC,QAAQ,SAI7BD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,QAIlB,IAGHU,qBAAU,YACS,uCAAG,4BAAAnB,EAAA,sEAGV8N,GAAa,GAHH,SAIapR,GAAMoE,IAAN,sBACJjJ,IACjBwI,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAnBf,QAIJH,EAJI,QA4BGvC,OACTyiB,EAAUlgB,EAASvC,MACnB+P,GAAa,IA9BP,gDAkCVnN,QAAQC,IAAR,MAlCU,yDAAH,qDAuCf6f,KACD,CAACphB,EAASxH,IAEbsJ,qBAAU,WAQFhC,EAAS,CACLrI,KAAM,aACNE,QAAS8B,IAOjBgV,GAAa,KAEd,CAAChV,EAAQqG,IAMR,sBAAKR,UAAU,UAAf,SACI,uCACI,eAAC,GAAD,IACCgB,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,qEAIR,uCACI,eAAC,GAAD,IACA,eAAC,GAAD,aChIT,I,cAAA,IAA0B,qCC6zB1B+hB,I,cApyBmB,SAAC,GAAgF,IAAD,IAA7EhZ,EAA6E,EAA7EA,UAAWC,EAAkE,EAAlEA,aAAyCgZ,GAAyB,EAApDC,cAAoD,EAArCC,WAAqC,EAAzBF,oBAAyB,EACxF1hB,mBAAS,QAD+E,oBACvGvD,EADuG,KAClGsW,EADkG,KAGxG3S,EAAUC,cAEVxG,EAASwJ,aAAY,SAAC1L,GAAD,OAAWA,EAAM6B,MAAMK,UAG5CmZ,EAAiBnZ,EAAOnB,QAAO,SAAAgC,GAAC,MAAe,YAAXA,EAAE7C,QAEtCe,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAVqD,EAapEoH,mBAAS,MAb2D,oBAavGzF,EAbuG,KAaxF6Y,EAbwF,OAe1DpT,mBAAS,MAfiD,oBAevGqT,EAfuG,KAenFC,EAfmF,KAiBxGpT,EAAWC,cAjB6F,EAmB5EH,oBAAS,GAnBmE,oBAmBvGU,EAnBuG,KAmB5FC,EAnB4F,OA0BtEX,mBAAS,IA1B6D,oBA0BvG2T,EA1BuG,KA0BzFC,EA1ByF,OA2BtE5T,mBAAS,IA3B6D,oBA2BvG6T,EA3BuG,KA2BzFC,EA3ByF,OAgClE9T,oBAAS,GAhCyD,oBAgCvG2S,EAhCuG,KAgCvFC,EAhCuF,OAoC9E5S,mBAAS,GApCqE,oBAoCvGsP,EApCuG,KAoC7FN,EApC6F,OAqC9EhP,mBAAS,GArCqE,oBAqCvGuP,EArCuG,KAqC7FN,EArC6F,QAsChFjP,oBAAS,GAtCuE,sBAsCvGiU,GAtCuG,MAsC9FzE,GAtC8F,SAuCpExP,oBAAS,GAvC2D,sBAuCvGkU,GAvCuG,MAuCxFzE,GAvCwF,SAwC9EzP,oBAAS,GAxCqE,sBAwCvGmU,GAxCuG,MAwC7FC,GAxC6F,SAyC5EpU,mBAAS,IAAIqU,MAzC+D,sBAyCvGC,GAzCuG,MAyC5FC,GAzC4F,SA0ChFvU,mBAAS,IAAIqU,MA1CmE,sBA0CvGG,GA1CuG,MA0C9FC,GA1C8F,SA2C1EzU,mBAAS,qBA3CiE,sBA2CvGoP,GA3CuG,MA2C3FF,GA3C2F,SA4C9ElP,mBAAS,kBA5CqE,sBA4CvGqP,GA5CuG,MA4C7FF,GA5C6F,SAiD1EnP,mBAAS,CAAC,CAAE8C,MAAO,MAjDuD,sBAiDvGmN,GAjDuG,MAiD3FC,GAjD2F,MAoDxGwE,GAASzE,GAAW3X,KAAI,SAAAwK,GAAK,kCAAUA,GAAV,IAAiB6R,MAAO1E,GAAW2E,QAAQ9R,QApDgC,GAyD5E9C,mBAAS,CAAC,CAAEmS,UAAW,MAzDqD,sBAyDvGJ,GAzDuG,MAyD5FC,GAzD4F,SA0DtEhS,mBAAS,CAAC,CAAEsS,aAAc,MA1D4C,sBA0DvGL,GA1DuG,MA0DzFC,GA1DyF,MA6DxG3G,GAAOwG,GAAUzZ,KAAI,SAAAwT,GAAG,kCAAUA,GAAV,IAAe6I,MAAO5C,GAAU6C,QAAQ9I,QAChEZ,GAAU+G,GAAa3Z,KAAI,SAAAqT,GAAM,kCAAUA,GAAV,IAAkBgJ,MAAO1C,GAAa2C,QAAQjJ,QAI/EkJ,GAFM,sBAAOtJ,IAAP,YAAgBL,KAEF5S,KAAI,SAAAwK,GAE1B,MAAI,cAAeA,EACR,CAAEgS,KAAM,MAAOhS,MAAOA,EAAMqP,UAAWwC,MAAO7R,EAAM6R,OAG3D,iBAAkB7R,EACX,CAAEgS,KAAM,MAAOhS,MAAOA,EAAMwP,aAAcqC,MAAO7R,EAAM6R,OAG3D,QAKLkN,GAAoB,uCAAG,WAAOC,GAAP,mBAAA/gB,EAAA,yDAEzBJ,GAAa,GAIe,mBAAX,OAAbpG,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,OAAoD,SAAX,OAAb0C,QAAa,IAAbA,OAAA,EAAAA,EAAe1C,OAAmB0C,IAC7Ewa,EAAU,MAGVxa,GAAwC,YAAvBA,EAAc1C,OAAuBwb,IACtD0B,EAAUxa,EAAclC,IAGxBkC,GAAwC,YAAvBA,EAAc1C,MAAsBwb,IACrD0B,EAAU/V,SAASqU,IAfE,SAqBA,iBAAjBQ,IAGAmB,EAEA,CACIlW,KAAM,CACFmW,cAAetB,EACfuB,mBAAoBjB,GACpBkB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,EACPW,aACA,CACIC,UAAWrG,EACXsG,UAAWrG,EACXsG,UAAWzG,GACX0G,UAAWzG,GACX0G,QAAS7B,IAEb8B,QAAS,GACTC,aAAc,GACdhX,IAAKrG,KAQI,cAAjBib,GAAiD,iBAAjBA,IAIhCmB,EACA,CACIlW,KAAM,CACFmW,cAAetB,EAEfwB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,EACPiB,QAAS,GACTC,aAAc,GACdP,aAAc,KACdzW,IAAKrG,KASI,QAAjBib,GAA2C,aAAjBA,GAAgD,aAAjBA,IAIzDmB,EACA,CACIlW,KAAM,CACFmW,cAAetB,EAEfwB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,EAEPiB,QAAStB,GACTuB,aAAc,GACdP,aAAc,KACdzW,IAAKrG,KAMI,aAAjBib,IAEAmB,EACA,CACIlW,KAAM,CACFmW,cAAetB,EACfuB,mBAAoBjB,GACpBkB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,EAEPkB,aAAcpB,GACda,aAAc,KACdM,QAAS,GACT/W,IAAKrG,KAKI,sBAAjBib,IAEAmB,EACA,CACIlW,KAAM,CACFmW,cAAetB,EACfuB,mBAAoBjB,GACpBkB,UAAWhB,GACXiB,WAAYd,GAAUe,cAAcC,MAAM,EAAG,IAC7CC,SAAUf,GAAQa,cAAcC,MAAM,EAAG,IACzCE,cAAe3B,EACfra,MAAOub,EAGPmB,kBAAmB,CAEfC,YAAatB,GAAWnc,QAAO,SAAU0d,GACrC,MAAoB,QAAbA,EAAItB,QAEfY,aACA,CACIC,UAAWrG,EACXsG,UAAWrG,EACXsG,UAAWzG,GACX0G,UAAWzG,KAGnB4G,aAAc,GACdP,aAAc,KACdM,QAAS,GACT/W,IAAKrG,MAkBb+a,IAAgBE,EA5KC,kCA8KApW,GAAM0D,KAAN,aAEb6T,GACF5T,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA9LR,QA8KjBH,EA9KiB,OAuMjBqgB,GAAmB,GACnBxhB,EAAS,CACLrI,KAAM,mBACNE,QAASsJ,EAASvC,OA1ML,WAkNrBgV,EAAgB,IAChBF,EAAgB,IAChB1D,GAAc,CAAC,CAAEpN,MAAO,MACxBoP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B3C,IAAW,GACXC,IAAiB,GACjB2E,IAAY,GACZG,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAKfjB,EAAiB,IACjBE,EAAsB,IAGtB3S,GAAa,GAERmhB,EAtOgB,wBAuOjBlP,GAAkB,GAClBlK,GAAa,GAxOI,2BA6OrBkK,GAAkB,GA7OG,kDAgPrBlR,QAAQC,IAAR,MACAsG,OAAO1G,MAAM,wCAjPQ,0DAAH,sDAwPpBqV,GAAiB,SAAC9V,GACpBsT,IAAY,SAAAyC,GAAY,OAAKA,MAkEjC,OA7DA3U,qBAAU,WACN,IAAI6f,EAAa,IAAIC,gBACjBC,EAAkB,IAAID,gBAgD1B,OA/CA,sBAAC,4BAAAjhB,EAAA,+EAQoCtD,GAAMoE,IAAN,sBACVjJ,GACf,CACIspB,OAAQD,EAAgBC,SAE9B9gB,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA1BhC,OAQa2gB,EARb,OAiCOF,EAAkB,KAElB/hB,EAAS,CACLrI,KAAM,aACNE,QAASoqB,EAAerjB,OArCnC,gDA0CO4C,QAAQC,IAAR,MA1CP,wDAAD,GA+CO,yBAAMogB,QAAN,IAAMA,OAAN,EAAMA,EAAYK,WAC1B,CAACliB,EAAUtH,IAWV,gBAACyQ,GAAA,EAAD,CACIrG,KAAMyF,EACNa,SAAS,SACTlH,KAAK,KACLmH,OAAQ,WACJb,GAAa,GACboL,EAAgB,IAChBtE,IAAW,GACXC,IAAiB,GACjB2E,IAAY,GACZlE,GAAc,CAAC,CAAEpN,MAAO,MACxBoP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3BoC,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAEfjB,EAAiB,IACjBE,EAAsB,IAKtBP,EAAO,QAEPH,GAAkB,IAxB1B,UA0BI,eAACvJ,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,gCAEJ,iCACI,eAACJ,GAAA,EAAMnD,KAAP,UAEKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,8DAKR,uCACI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAKpK,UAAU,0BAAf,UACI,uBAAMA,UAAU,WAAhB,4BACkB,iBAAjBmU,EAAmC,uBAAMnU,UAAU,eAAhB,uDAAoF,YAIpI,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BACIC,UAAQ,EACRrK,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBAEZ9O,SAAU,SAAC9B,GAGP8S,EAAgB9S,EAAE+B,OAAOC,MAAMmH,QAC3B,iBACA,eAQxB,gBAAC6M,GAAA,EAAD,CACIze,GAAG,yBACH0e,UAAWta,EACXua,SAAU,SAACC,GAAD,OAAOlE,EAAOkE,IACxBvX,UAAU,iBAJd,UAMI,gBAACwX,GAAA,EAAD,CAAKC,SAAS,OAAOC,MAAM,OAA3B,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,uBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,0BACIjS,KAAK,OACL6H,UAAU,2CACVkD,SAAU,SAAC9B,GACgB,iBAAnBA,EAAE+B,OAAOC,OACTgR,EAAgB,gBACG,oBAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,OACG,aAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,YACG,aAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,YACG,cAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,aACG,iBAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,gBACG,yBAAnBhT,EAAE+B,OAAOC,QACToP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B2B,EAAgB,aAGG,sBAAnBhT,EAAE+B,OAAOC,QACToP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B2B,EAAgB,sBAGG,KAAnBhT,EAAE+B,OAAOC,OACTgR,EAAgB,KAGxBnU,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAnCf,UAqCI,yBAAQtC,MAAM,GAAd,2BApgBhC,CAAC,eAAgB,kBAAmB,WAAY,WAAY,YAAa,eAAgB,uBAAwB,qBAqgBxExK,KAAI,SAACiN,GACV,OACI,yBAAqBzC,MAAOyC,EAA5B,SACKA,GADQA,gBAYnB,iBAAjBsO,EACG,eAAC,GAAD,CACI7E,YAAaA,EACbC,YAAaA,EACbC,cAAeA,GACfC,YAAaA,GACbK,WAAYA,GACZC,iBAAkBA,GAClBL,WAAYA,GACZC,SAAUA,GACVC,SAAUA,EACVC,SAAUA,IAEb,KAGa,QAAjBsE,GAA2C,aAAjBA,GAAgD,aAAjBA,EACrD,eAAC,GAAD,CAEG3D,cAAeA,GACfD,WAAYA,KAAmB,KAErB,aAAjB4D,EAA+B,eAAC,GAAD,CAC5B3B,gBAAiBA,GACjB1C,WAAYA,GACZwC,aAAcA,GACdD,UAAWA,GACXE,aAAcA,KAAqB,KAErB,sBAAjB4B,EAAwC,eAAC,GAAD,CAErCrE,WAAYA,GAGZwC,aAAcA,GACdD,UAAWA,GAGX/C,YAAaA,EACbC,YAAaA,EACbC,cAAeA,GACfC,YAAaA,GACbC,WAAYA,GACZC,SAAUA,GACVC,SAAUA,EACVC,SAAUA,IAEP,KAIP,gBAAC7F,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAIR,eAAC,KAAD,UACI,gBAACoK,GAAA,EAAD,WAEI,wBAAOzR,GAAG,YAAYqH,UAAU,qBAAqBmJ,KAAK,SAAS/F,MAAM,QAAQjL,KAAK,QAAQkY,gBAAc,EAACnN,SAAUgU,KACvH,wBAAOjU,QAAQ,YAAYjD,UAAU,MAArC,wBACA,wBAAOrH,GAAG,aAAaqH,UAAU,sBAAsBmJ,KAAK,SAAS/F,MAAM,OAAOjL,KAAK,QAAQ+K,SAAUgU,KACzG,wBAAOjU,QAAQ,aAAajD,UAAU,MAAtC,kCAKhB,gBAACwX,GAAA,EAAD,CAAKC,SAAS,QAAQC,MAAM,QAA5B,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,UAII,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,yBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,0BACIjS,KAAK,OACL6H,UAAU,2CAEVkD,SAAU,SAAC9B,GAEP,GAAuB,KAAnBA,EAAE+B,OAAOC,MAETsQ,EAAiB,IACjBE,EAAsB,QACnB,CACH,IAAI9Z,EAAQK,EAAOnB,QAAO,SAACc,GAAD,OAAWA,EAAMnB,KAAO2G,SAAS8B,EAAE+B,OAAOC,UAEpEsQ,EAAiB5Z,EAAM,IACvB8Z,EAAsB,MAK9B3T,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAtBf,UAwBI,yBAAQtC,MAAM,GAAd,4BACCkQ,EAAe1a,KAAI,SAACiN,GACjB,OAEI,cADA,CACA,UAAwBzC,MAAOyC,EAAOlN,GAAtC,SACKkN,EAAOxL,YADCwL,EAAOlN,iBAU3CkC,IAAwC,KAAV,OAAbA,QAAa,IAAbA,OAAA,EAAAA,EAAelC,MAAoC,KAAV,OAAbkC,QAAa,IAAbA,OAAA,EAAAA,EAAelC,IAAY,gBAACqR,GAAA,EAAD,CACrEC,OAAK,EADgE,UAIrE,eAAC,KAAD,UACI,eAACG,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,4BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,WAGkB,OAAbvP,QAAa,IAAbA,GAAA,UAAAA,EAAeL,oBAAf,eAA6B8N,QAAS,EAEnC,0BACInQ,KAAK,OACL6H,UAAU,2CACVkD,SAAU,SAAC9B,GAEPwS,EAAsBxS,EAAE+B,OAAOC,QAEnCuU,SAAS,GACT1X,MAAO,CACHuF,aAAc,OACdC,UAAW,OACXC,MAAO,OAXf,UAaI,yBAAQtC,MAAM,GAAd,2BAbJ,UAeKvI,EAAcL,oBAfnB,aAeK,EAA4B5B,KAAI,SAACiN,GAC9B,OAEI,cADA,CACA,UAAwBzC,MAAOyC,EAAOlN,GAAtC,SACKkN,EAAOxL,YADCwL,EAAOlN,UAKpB,sBAAKqH,UAAU,0BAAf,uDAGb,gBAQnC,gBAAC2J,GAAA,EAAMa,OAAP,WACI,eAAC/D,GAAA,EAAD,CAEIC,QAAQ,aACR1G,UAAU,uCACV+F,QAAS,WAELyJ,GAAc,qBACdC,GAAY,kBACZ2E,EAAgB,IAChB5D,GAAc,CAAC,CAAEpN,MAAO,MACxBoP,GAAgB,CAAC,CAAEI,aAAc,MACjCN,GAAa,CAAC,CAAEG,UAAW,MAC3B3C,IAAW,GACXC,IAAiB,GACjB2E,IAAY,GACZG,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAEfjB,EAAiB,IACjBE,EAAsB,IAMtBV,GAAkB,GAClBG,EAAO,QACPrK,GAAa,IA3BrB,SA8BI,6CAGJ,eAACvC,GAAA,EAAD,CACIV,QAAS,WACLsN,EAAO,QAEPH,GAAkB,GAClBlK,GAAa,GACbmZ,IAAqB,IAEzB1X,UAAUwJ,IAAgBE,EAE1BnU,UAAU,cAEV0G,QAAQ,eAZZ,SAaI,+CAIJ,eAACD,GAAA,EAAD,CAEIzG,UAAU,cACV0G,QAAQ,eACR+D,UAAUwJ,IAAgBE,EAC1BpO,QAAS,WAELoc,IAAqB,IAP7B,SAYI,iEAIXlP,EAAiB,eAAC,GAAD,CACdA,eAAgBA,EAChBC,kBAAmBA,EACnB9S,QAAS6T,IACP,UCxyBZ7I,GAASC,KAAOC,IAAV,+eA6BNqX,GAAwBzV,IAAM0V,YAChC,WAA6Bnf,GAAS,IAAnCof,EAAkC,EAAlCA,cAAkBC,EAAgB,kCAC3BC,EAAa7V,IAAMxJ,SACnBsf,EAAcvf,GAAOsf,EAM3B,OAJA7V,IAAM1K,WAAU,WACZwgB,EAAY/a,QAAQ4a,cAAgBA,IACrC,CAACG,EAAaH,IAGb,qCACI,oCAAO1qB,KAAK,WAAWsL,IAAKuf,GAAiBF,SAS7D,SAASlE,GAAT,GAEI,IAAD,IADC3S,OAAU0O,EACX,EADWA,YAAauD,EACxB,EADwBA,gBAAiBtD,EACzC,EADyCA,UAElCiE,EAAQX,EAAgB5V,OAE9B,OACI,wBACIlF,MAAOuX,GAAe,GACtBzX,SAAU,SAAA9B,GACNwZ,EAAUxZ,EAAE+B,OAAOC,YAASJ,IAEhCgP,YAAW,iBAAY6M,EAAZ,iBAyCvB,SAAStT,GAAT,GAAyE,IAAxDC,EAAuD,EAAvDA,QAASpM,EAA8C,EAA9CA,KAAM8iB,EAAwC,EAAxCA,WAAYD,EAA4B,EAA5BA,cAAegB,EAAa,EAAbA,UAAa,EAGlC/V,IAAM5M,SAAS,IAHmB,oBAG7D4iB,EAH6D,KAGlDC,EAHkD,KAK9DnE,EAAgB9R,IAAMC,SACxB,iBAAO,CAEH8R,OAAQL,MAEZ,IAVgE,EAmChEnT,oBAAS,CACTD,UACApM,KAAM8jB,EAWNlE,iBAGDI,cAAYC,mBACXC,iBAAeC,iBAIf,SAAA6D,GACIA,EAAM1D,eAAe5d,MAAK,SAAA0J,GAAO,OAE7B,CACI7S,GAAI,YAGJ2N,OAAQ,gBAAG+c,EAAH,EAAGA,8BAAH,OACJ,+BACI,eAAC,GAAD,eAA2BA,SAKnCvC,KAAM,gBAAG1U,EAAH,EAAGA,IAAH,OACF,+BACI,eAAC,GAAD,eAA2BA,EAAIkX,mCAfd,mBAmB1B9X,UA3DXE,EAjBgE,EAiBhEA,cACAC,EAlBgE,EAkBhEA,kBACAC,EAnBgE,EAmBhEA,aACAC,EApBgE,EAoBhEA,KACA2T,EArBgE,EAqBhEA,KACA1T,EAtBgE,EAsBhEA,WACA2T,EAvBgE,EAuBhEA,iBACAI,EAxBgE,EAwBhEA,gBACAC,EAzBgE,EAyBhEA,YACAC,EA1BgE,EA0BhEA,YACAC,EA3BgE,EA2BhEA,UACAC,EA5BgE,EA4BhEA,SACAC,EA7BgE,EA6BhEA,SACAC,EA9BgE,EA8BhEA,aACAC,EA/BgE,EA+BhEA,YAEAmD,GAjCgE,EAgChEC,cAhCgE,EAiChED,mBAjCgE,IAkChEtrB,MAASknB,EAlCuD,EAkCvDA,UAAWkB,EAlC4C,EAkC5CA,SAlC4C,EAkClCoD,eAgVlC,OA/RAvW,IAAM1K,WAAU,WAMZ,IAHA,IAAIkhB,EAAUxB,EAAWyB,SAAS3qB,QAAO,SAAA0qB,GAAO,OAAIA,EAAQT,WAAaA,KAAW,GAEhFW,EAAkC,GAC7B9d,EAAI,EAAGA,EAAIoc,EAAWyB,SAASrb,OAAQxC,IAC5C8d,EAA+B,sBAAOA,GAAP,YAA2C1B,EAAWyB,SAAS7d,GAAG+d,kBAMrG,IAAIC,EAAoCF,EAAgChrB,KAAI,SAACwC,GAAD,OAAcA,EAASzC,MAE/ForB,EAAwB7B,EAAW8B,sBAAsBhrB,QAAO,SAACoC,GACjE,OAAQ0oB,EAAkC3kB,SAAS/D,EAASzC,OAK5DuqB,EAAS,sBAAOQ,EAAQG,iBAAf,YAAmCE,IAGhDZ,EAAaD,KAEd,CAAChB,IAGJ+B,mCAAuB,WAEnB,IACIC,EADUhC,EAAWyB,SAAS3qB,QAAO,SAAA0qB,GAAO,OAAIA,EAAQT,WAAaA,KAAW,GACpDY,gBAAgBjrB,KAAI,SAAAwC,GAAQ,OAAIA,EAASzC,MAEzEkT,EAAKyS,SAAQ,SAAClS,GACN8X,EAAkB/kB,SAASiN,EAAIqS,SAAS9lB,KACxC4qB,EAAkBnX,EAAIzT,IAAI,QAInC,CAACkT,IAwPA,uCAEI,uBAAK7L,UAAU,2BAAf,iCAA+Dyf,EAAiBnX,UAEhF,eAAC7B,GAAA,EAAD,CAAQxG,MAAO,CAAEuF,aAAc,MAAOb,gBAAiB,6BAA8Bwf,OAAQ,QAAUpe,QAzP/G,SAAuB3E,GACnBA,EAAEE,iBAEF,IAAIuiB,EAAkBpE,EAAiB7mB,KAAI,SAAAwT,GAAG,OAAIA,EAAIqS,YAC9BgB,EAAiB7mB,KAAI,SAAAwT,GAAG,OAAIA,EAAIqS,SAAS9lB,MAIjEupB,EAAWyB,SAAS/qB,KAAI,SAAC8qB,GACjBA,EAAQT,WAAaA,IACrBS,EAAQG,gBAAkBA,MAIlC5B,EAAc,CACV+B,sBAAuB5kB,EACvBukB,SAAUzB,EAAWyB,YAyOrB,4BAGA,mDAAWjY,KAAX,cAGI,iCACKE,EAAahT,KAAI,SAAAmT,GAAW,OACzB,+CAAQA,EAAYC,uBAApB,aACKD,EAAY/M,QAAQpG,KAAI,SAAAqT,GAAM,OAC3B,gDAAQA,EAAOC,kBAAf,cAAkCD,EAAOE,OAAO,UAC5C,+BAAMF,EAAOqU,UAAYrU,EAAOE,OAAO,UAAY,sBAMvE,kDAAWR,KAAX,aACK6T,EAAK5mB,KAAI,SAACwT,EAAKtG,GAEZ,OADAgG,EAAWM,GAEP,+CAAQA,EAAIC,eAAZ,aACKD,EAAIE,MAAM1T,KAAI,SAAA2T,GACX,OAAO,+CAAQA,EAAKC,gBAAb,aAA8BD,EAAKJ,OAAO,2BAQzE,wBAEA,sBAAKnM,UAAU,aAAf,SACI,uBAAKA,UAAU,qBAAf,UACI,uBAAKA,UAAU,mBAAf,UACI,eAACyG,GAAA,EAAD,CAAQV,QAAS,kBAAMka,EAAS,IAAIxV,UAAWoV,EAA/C,SACK,OACK,IACV,eAACpZ,GAAA,EAAD,CAAQV,QAAS,kBAAMoa,KAAgB1V,UAAWoV,EAAlD,SACK,MACK,IACV,eAACpZ,GAAA,EAAD,CAAQV,QAAS,kBAAMma,KAAYzV,UAAWqV,EAA9C,SACK,MACK,IACV,eAACrZ,GAAA,EAAD,CAAQV,QAAS,kBAAMka,EAASD,EAAY,IAAIvV,UAAWqV,EAA3D,SACK,OACK,OAEd,uBAAK9f,UAAU,kBAAf,UACI,yCACS,IACL,oCACKmf,EAAY,EADjB,OACwBY,EAAYzX,UAC1B,OAEd,gCACI,oDAAsB,IAAtB,SAEJ,wBACItI,UAAU,eACV7H,KAAK,SACLisB,aAAcjF,EAAY,EAC1Bjc,SAAU,SAAA9B,GACN,IAAMoe,EAAOpe,EAAE+B,OAAOC,MAAQihB,OAAOjjB,EAAE+B,OAAOC,OAAS,EAAI,EAC3D6c,EAAST,IAEbvf,MAAO,CAAEyF,MAAO,cAGxB,sBAAK1F,UAAU,qBAAf,SACI,yBACIoD,MAAOid,EACPrgB,UAAU,eAEVkD,SAAU,SAAA9B,GACNgf,EAAYiE,OAAOjjB,EAAE+B,OAAOC,SALpC,SAQK,CAAC,GAAI,GAAI,GAAI,GAAI,IAAIxK,KAAI,SAAAynB,GAAQ,OAC9B,0BAAuBjd,MAAOid,EAA9B,kBACUA,IADGA,kBAkW9BiE,I,MAAAA,GAnVf,YAA2H,IAA5FrB,EAA2F,EAA3FA,UAAWf,EAAgF,EAAhFA,WAAYD,EAAoE,EAApEA,cAAe5J,EAAqD,EAArDA,aAE3D7X,GAFgH,EAAvCogB,mBAAuC,EAAnBiD,gBAElFpjB,eAFqG,EAItFH,mBAAS,MAJ6E,oBAI/GlF,EAJ+G,KAOhHF,GAPgH,KAOpGgnB,EAAW8B,uBAkB7BxhB,qBAAU,WAIN,GAAiB,OAAbpH,EAAmB,CAEfoF,EAAS,CACLrI,KAAM,kBACNE,QAAS+C,OAOtB,CAACoF,EAAUpF,IAGd,IAAM6R,EAAeC,IAAMC,SAEvB,iBAAM,CAGF,CAGI7G,OAAQ,WACR0G,SAAU,gBACViS,OAAQvE,IAuGZ,CACIpU,OAAQ,QAGR2Y,OAAQT,GACRxR,SAAU,eACVhU,OAAQ,SACR8nB,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAmBL,OAAIA,EAAKH,IAAIqS,SAAShkB,aACX8R,EAAKH,IAAIqS,SAAShkB,aAKtB,KAKf,CACI6L,OAAQ,WACR2Y,OAAQP,GAGR1R,SAAU,QACV8T,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAOL,OAAIA,EAAKH,IAAIqS,SAAS3kB,OAASyS,EAAKH,IAAIqS,SAAShkB,aACtC8R,EAAKH,IAAIqS,SAAS3kB,MAEtB,KAqBf,CACIwM,OAAQ,cACR0G,SAAU,YACViS,OAAQN,GACR3lB,OAAQ,SAER8nB,KAAM,YAGF,OAHgB,EAAXvU,KAGIH,IAAIqS,SAAShJ,UACX,YAGJ,eAMf,CACInP,OAAQ,gBACR0G,SAAU,gBAEViS,OAAQhB,GACRjlB,OAAQ,SACR8nB,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAEL,MAAwC,iBAApCA,EAAKH,IAAIqS,SAAS3I,cACX,eAG6B,QAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,kBAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,WAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,WAE6B,cAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,YAE6B,iBAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,eAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,uBAE6B,sBAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,oBAGJ,UAQnB,CAACuC,IA2BL,OACI,qCACI,eAAC,GAAD,UACI,eAAC,GAAD,CACI7X,SAAUA,EACVgL,QAASyB,EACT7N,KAAMlE,EACN+mB,cAAeA,EACfC,WAAYA,EACZe,UAAWA,SCz0BhBsB,GA7DU,SAAC,GAA6G,IAA3GtB,EAA0G,EAA1GA,UAAWf,EAA+F,EAA/FA,WAAYD,EAAmF,EAAnFA,cAAeuC,EAAoE,EAApEA,mBAAoBC,EAAgD,EAAhDA,sBAAuBzC,EAAyB,EAAzBA,mBAAyB,EAEpF1hB,oBAAS,GAF2E,oBAE3H8gB,EAF2H,KAE1GC,EAF0G,KAIlI,OAEI,gBAAC1X,GAAA,EAAD,CAEIrG,KAAMkhB,EAGNE,YAAY,EALhB,UAQI,gBAAC/a,GAAA,EAAMrD,OAAP,WAEI,eAACqD,GAAA,EAAMI,MAAP,4BACA,eAACtD,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,sBACV+F,QAAS,WACL0e,GAAsB,IAJ9B,sBAUJ,gBAAC9a,GAAA,EAAMnD,KAAP,WAWI,eAAC,GAAD,CACIwC,aAAcqY,EACdtY,UAAWqY,EACXa,cAAeA,EACfC,WAAYA,EACZF,mBAAoBA,IAExB,eAAC,GAAD,CAEIE,WAAYA,EACZD,cAAeA,EACfgB,UAAWA,GAHNA,MAQb,eAACtZ,GAAA,EAAMa,OAAP,MA7CKyY,I,SCxBF,I,mCCsBA5X,KAAOC,IAAV,6dDtBG,IAA0B,0CEA1B,OAA0B,uCCA1B,OAA0B,2CCA1B,OAA0B,wCCA1B,OAA0B,0CCA1B,OAA0B,0C,kBCwjB1BqZ,GA7hBS,SAAC,GAAsF,IAoBvGC,EApBmBnD,EAAmF,EAAnFA,gBAAiBS,EAAkE,EAAlEA,WAAYD,EAAsD,EAAtDA,cAAejR,EAAuC,EAAvCA,MAAO6T,EAAgC,EAAhCA,eAAgB5B,EAAgB,EAAhBA,UAAgB,EAGlE3iB,oBAAS,GAHyD,oBAGnGwkB,EAHmG,KAGrFC,EAHqF,OAKxDzkB,mBAAS,IAL+C,oBAKnG0kB,EALmG,KAKhFC,EALgF,KAOlG1P,EAA8EkM,EAA9ElM,cAAeO,EAA+D2L,EAA/D3L,cAAeoP,EAAgDzD,EAAhDyD,cAAezqB,EAAiCgnB,EAAjChnB,aAAcX,EAAmB2nB,EAAnB3nB,MAAOwc,EAAYmL,EAAZnL,QAEpE6O,EAAkBjD,EAAWyB,SAAS3qB,QAAO,SAAAgC,GAAC,OAAoB,IAAhBA,EAAEioB,aAEpDmC,EAAmBlD,EAAWyB,SAWd,iBAAlB7N,IACA8O,EAAsB,gBAGJ,QAAlB9O,IACA8O,EAAsB,mBAGJ,aAAlB9O,IACA8O,EAAsB,YAGJ,aAAlB9O,IACA8O,EAAsB,YAEJ,cAAlB9O,IACA8O,EAAsB,aAEJ,iBAAlB9O,IACA8O,EAAsB,gBAGJ,aAAlB9O,IACA8O,EAAsB,wBAEJ,sBAAlB9O,IACA8O,EAAsB,qBAQ1B,IAAMS,EAAenY,IAAM0V,YAAW,WAAwBnf,GAAxB,IAAG6hB,EAAH,EAAGA,SAAUvf,EAAb,EAAaA,QAAb,OAClC,qBACIwf,KAAK,GACL9hB,IAAKA,EACLsC,QAAS,SAAC3E,GACNA,EAAEE,iBACFyE,EAAQ3E,IALhB,UAQKkkB,EACD,sBAAKrlB,MAAO,CAAE0H,OAAQ,SAAWvC,IAAKogB,GAAiBlgB,IAAI,8BAO7DmgB,EAAavY,IAAM0V,YACrB,WAA+Dnf,GAAS,IAArE6hB,EAAoE,EAApEA,SAAUrlB,EAA0D,EAA1DA,MAAOD,EAAmD,EAAnDA,UAA8B0lB,EAAqB,EAAxC,mBAAwC,EACzCplB,mBAAS,IADgC,oBAC5D8C,EAD4D,UAGnE,OACI,sBACIK,IAAKA,EACLxD,MAAOA,EACPD,UAAWA,EACX2lB,kBAAiBD,EAJrB,SAaI,qBAAI1lB,UAAU,gBAAd,SACKkN,IAAM0Y,SAASC,QAAQP,GAAUtsB,QAC9B,SAAC8sB,GAAD,OACK1iB,GAAS0iB,EAAM/lB,MAAMulB,SAASS,cAAcC,WAAW5iB,aAyQpF,OACI,eAAC4G,GAAA,EAAD,CAAWC,OAAK,EACZhK,MAAO,CAAEid,YAAa,OAD1B,SAGI,eAAC,KAAD,UACI,eAAC9S,GAAA,EAAD,UACI,eAAC8P,GAAA,EAAD,CAAMla,UAAU,6BAAhB,SAEI,gBAACka,GAAA,EAAK1T,KAAN,CAAWvG,MAAO,CAAEmQ,QAAS,QAA7B,UAII,uBAAKpQ,UAAU,4BAAf,UACI,sBAAKA,UAAU,qCAAf,SACI,uBAAKA,UAAU,2BAAf,UACI,0CAAUgR,EAAQ,EAAlB,aAAwBuE,KAExB,sBAAKnQ,IAAK6X,GAAU3X,IAAI,qBAOhC,+BACI,wBAAMtF,UAAU,sBAAsBC,MAAO,CAAEE,MAAO,WAAtD,UAEI,kCAAU1F,IAA8BX,GAAgB,QACvDW,GAAgBX,EAAQ,uBAAMmG,MAAO,CAAEE,MAAO,WAAtB,SACpB,QACK,KAET1F,GAAgBX,EAAQA,EAAQ,UAIzC,uBAAKkG,UAAU,0BAAf,UACI,kCAAM,sDAAiC4kB,KACvC,kCAAM,oDAA+BM,EAAgB,aAAe,kBAGrD,QAAlBpP,GAA6C,aAAlBA,EAA+B,eAACmQ,GAAA,EAAD,CAAUC,GAAIpB,EAAd,SACvD,uBAAK9kB,UAAU,mCAAf,UACI,uBAAKA,UAAU,qBAAf,UACI,wCAAS,+CADb,OAEKsW,QAFL,IAEKA,OAFL,EAEKA,EAAS1d,KAAI,SAAAoC,GACV,OACI,gCAAOA,EAAEoI,cAKrB,uBAAKpD,UAAU,sBAAf,UACI,wCAAS,iDADb,OAEKsW,QAFL,IAEKA,OAFL,EAEKA,EAAS1d,KAAI,SAAAoC,GACV,OAII,0BAAQgF,UAAU,qBACdkD,SAAU,SAAC9B,GAEgB,6BAAnBA,EAAE+B,OAAOC,OAAwChC,EAAE+B,OAAOC,OAG9D6hB,EAAqB,GAAD,mBAAKD,GAAL,CAAwB,CAAEmB,SAAUnrB,EAAErC,GAAIytB,YAAahlB,EAAE+B,OAAOC,WAN5F,UAUI,+DAGI+hB,EAAgBvsB,KAAI,SAACiN,GACjB,OACI,yBAA+BzC,MAAOyC,EAAOod,UAA7C,mCACwBpd,EAAOod,YADlBpd,EAAOod,4BAgB1C,KAEd,sBAAKjjB,UAAU,qCAAf,SACI,uBAAKA,UAAU,6BAAf,UACI,uBAAKA,UAAU,sBAAf,UAEI,wBACIrH,GAAG,oBACHR,KAAK,WACLkY,gBAA8C,KAAf,OAAfoR,QAAe,IAAfA,OAAA,EAAAA,EAAiBpX,UACjCrK,UAAU,oBACVkD,SAAU,SAAC9B,GAAD,OAzP/B,SAACA,GAOpB,IAAIilB,EAAmBjlB,EAInBklB,EAAuB,OAAGzB,QAAH,IAAGA,OAAH,EAAGA,EAAgBhB,gBAAgBjrB,KAAI,SAAAoC,GAC9D,OAAIA,EAAErC,KAAO0tB,EAAiB1tB,GAGnB,2BAAKqC,GAAZ,IAAeqP,UAAWrP,EAAEqP,WAGzBrP,KAGPurB,EAAsB,2BAAQ1B,GAAR,IAAwBhB,gBAAiByC,IAG/DE,EAA0BpB,EAAiBxsB,KAAI,SAAAoC,GAG/C,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxBsD,EAIJvrB,KAGXinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAU6C,KAsNgBC,CAAehF,MAGpC,wBAAOxe,QAAQ,oBAAf,sBAGA,wBACItK,GAAG,2BACHR,KAAK,WACL6H,UAAU,uBAGd,wBAAOiD,QAAQ,2BAAf,6BAEA,iCACI,sBAAKjD,UAAU,mBAAmBoF,IAAKshB,GAAephB,IAAI,qBAC1D,iDAEJ,iCACI,sBAAKtF,UAAU,mBAAmBoF,IAAKuhB,GAAerhB,IAAI,qBAC1D,qDAIR,uBAAKrF,MAAO,CAAEmQ,QAAS,QAAvB,UAEI,+BAEI,gBAACwW,GAAA,EAAD,WACI,eAACA,GAAA,EAASC,OAAV,CAAiBtgB,GAAI8e,EAAc1sB,GAAG,+BAGtC,eAACiuB,GAAA,EAASE,KAAV,CAAevgB,GAAIkf,EAAnB,SACKL,EAAiBxsB,KAAI,SAAAoC,GAIlB,OACIioB,IAAcjoB,EAAEioB,UAAY,gBAAC2D,GAAA,EAASnJ,KAAV,CAAehG,SAAU2N,EAAiBlQ,QAAQla,GAAI+K,QAAS,SAAC3E,GAAD,OA1Y7H,SAACA,GAavB,IATA,IAAIsX,EAAa+I,EAAgB9oB,GAC7BouB,EAAe3lB,EAEf4lB,EAAqB5B,EAAiBpsB,QAAO,SAAAgC,GAAC,OAAIA,EAAEioB,YAAc8D,KAAc,GAEhFE,EAAkBpC,EAAehB,gBAAgB7qB,QAAO,SAAAgC,GAAC,OAAIA,EAAErC,KAAO+f,KAIjE5S,EAAI,EAAGA,EAAIkhB,EAAmBnD,gBAAgBvb,OAAQxC,IAAK,CAEhE,GAAIkhB,EAAmBnD,gBAAgBprB,MAAK,SAAAuC,GAAC,OAAIA,EAAErC,KAAO8oB,EAAgB9oB,MAAK,CAK3E,IAAIuuB,EAAkB9B,EAAiBxsB,KAAI,SAAAoC,GAGvC,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxB,2BAAKjoB,GAAZ,IAAe6oB,gBAAiBoD,IAS7BjsB,KAGX,YADAinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUuD,KAK7CF,EAAmBnD,gBAAgB/hB,KAAK2f,GAO5C,IAAIyF,EAAkB9B,EAAiBxsB,KAAI,SAAAoC,GAGvC,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxB,2BAAKjoB,GAAZ,IAAe6oB,gBAAiBoD,IAGhCjsB,EAAEioB,YAAc+D,EAAmB/D,UAE5B,2BAAK+D,GAAZ,IAAgCnD,gBAAgB,GAAD,mBAAMmD,EAAmBnD,iBAAzB,CAA0CpC,MAItFzmB,KAYXinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUuD,KAkUiHC,CAAkBnsB,EAAEioB,YAA1F,wCAA2HmC,EAAiBlQ,QAAQla,GAAK,MAAuB,gBAAC4rB,GAAA,EAASnJ,KAAV,CAAehG,SAAU2N,EAAiBlQ,QAAQla,GAAIyP,UAAQ,EAA9D,wCAAoF2a,EAAiBlQ,QAAQla,GAAK,gBAYlV,+BACI,sBAAKiF,MAAO,CAAE0H,OAAQ,QAASyJ,WAAY,SAAUkL,YAAa,UAAYlX,IAAKgiB,GAAU9hB,IAAI,kBAErG,sBAAKrF,MAAO,CAAEsF,OAAQ,WAAtB,SACI,sBAAKtF,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK6M,GAAW3M,IAAI,eAAeS,QAAS,SAAC3E,GAAD,OA5U5F,SAACA,GAI1B,IAAIimB,EAAsB,OAAGxC,QAAH,IAAGA,OAAH,EAAGA,EAAgBhB,gBAAgB7qB,QAAO,SAAAgC,GAAC,OAAIA,EAAErC,KAAOyI,EAAEzI,MAIhF2uB,EAAc,2BAAQzC,GAAR,IAAwBhB,gBAAiBwD,IAGvDE,EAA0BnC,EAAiBxsB,KAAI,SAAAoC,GAG/C,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxBqE,EAIJtsB,KAKXinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAU4D,KAoTmFC,CAAqB/F,mBAO1G,QAAlB3L,GAA6C,aAAlBA,EAA+B,sBACvD/P,QAAS,kBAAMgf,GAAiBD,IAChC2C,gBAAc,mCACdC,gBAAe5C,EAHwC,SAItDA,EAAe,sBAAK9kB,UAAU,6BAA6BoF,IAAKuiB,GAAgBriB,IAAI,+BAAkC,sBAAKtF,UAAU,6BAA6BoF,IAAKwiB,GAActiB,IAAI,iCAGrL,sBAAKtF,UAAU,6BAA6BC,MAAO,CAAEwb,QAAS,KAAMlW,OAAQ,WAAaH,IAAKwiB,GAActiB,IAAI,2CCrQtIuiB,GAnRC,SAAC,GAKV,IAAD,EAJJ5E,EAII,EAJJA,UACAf,EAGI,EAHJA,WACAD,EAEI,EAFJA,cACAD,EACI,EADJA,mBAEM9oB,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBADrD,EAGgDoH,oBAAS,GAHzD,oBAGGkkB,EAHH,KAGuBC,EAHvB,KAQEI,EAAc,OAAG3C,QAAH,IAAGA,GAAH,UAAGA,EAAYyB,gBAAf,aAAG,EAAsBlrB,MAC3C,SAACqvB,GAAD,OAAUA,EAAK7E,YAAcA,KAuE/B,OACE,sBAAqBjjB,UAAU,oBAA/B,SACE,eAACka,GAAA,EAAD,CAAMla,UAAU,eAAhB,SACE,gBAACka,GAAA,EAAK1T,KAAN,WACE,gBAACwD,GAAA,EAAD,CACEC,OAAK,EACLhK,MAAO,CACLkK,cAAe,OACf3E,aAAc,QAJlB,UAOE,eAAC,KAAD,UACE,eAAC4E,GAAA,EAAD,UACE,uBAAMpK,UAAU,WAAhB,+BAGJ,eAAC,KAAD,UACE,eAACoK,GAAA,EAAD,UACE,wBAGEpK,UAAU,8BACV+R,UAA8B,IAAnB7Y,EAAuB,OAAS,MAC3C8Y,YACqB,IAAnB9Y,EACI,sBACA,qBAEN6uB,OAAQ,SAAC3mB,GAAD,OA9DF,SAACA,GACrB,IAAI4mB,EAAmB,OAAG9F,QAAH,IAAGA,OAAH,EAAGA,EAAYyB,SAAS/qB,KAAI,SAACoC,GAClD,OAAIA,EAAEioB,YAAcA,EACX,2BACFjoB,GADL,IAEEitB,aAAc7mB,EAAE+B,OAAOC,MAAMmH,QAAQ,iBAAkB,MAIpDvP,KAKTinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUqE,KAgDZE,CAAc9mB,aAMrC,gBAAC4I,GAAA,EAAD,CAAWC,OAAK,EAAhB,UACE,eAAC,KAAD,UACE,eAACG,GAAA,EAAD,UACE,uBAAMpK,UAAU,WAAhB,sCAGJ,eAAC,KAAD,UACE,eAACoK,GAAA,EAAD,UACE,2BACEpK,UAAU,8BACV+R,UAAU,OACVC,YAAY,sBAGZ+V,OAAQ,SAAC3mB,GAAD,OAjEK,SAACA,GAC5B,IAAI+mB,EAA0B,OAAGjG,QAAH,IAAGA,OAAH,EAAGA,EAAYyB,SAAS/qB,KAAI,SAACoC,GACzD,OAAIA,EAAEioB,YAAcA,EACX,2BACFjoB,GADL,IAEEotB,oBAAqBhnB,EAAE+B,OAAOC,MAAMmH,QAAQ,iBAAkB,MAI3DvP,KAGTinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUwE,KAqDZE,CAAqBjnB,aAM3CojB,EACC,eAAC,GAAD,CAEEA,mBAAoBA,EACpBC,sBAAuBA,EACvBvC,WAAYA,EACZD,cAAeA,EACfgB,UAAWA,EACXjB,mBAAoBA,GANfiB,GAQL,KACJ,eAACjZ,GAAA,EAAD,CAAWC,OAAK,EAAChK,MAAO,CAAEC,QAAS,SAAnC,SACE,eAAC,KAAD,UACE,gBAACkK,GAAA,EAAD,WACE,uBAAKpK,UAAU,gCAAf,UACE,sBACEC,MAAO,CAAE0H,OAAQ,SACjBvC,IAAK+M,GACL7M,IAAI,aACJS,QAAS,SAAC3E,GACRqjB,GAAsB,MAG1B,uBAAMzkB,UAAU,kBAAhB,8BAGF,eAAC,KAAD,CAAiByQ,UAlJ/B,SAAyBhC,GAAS,IAAD,EAC/B,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKgU,EAAehB,iBAHT,EAIPlT,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJwB,qBAK/BN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAK1C,IAAIiW,EAAe,OAAGhF,QAAH,IAAGA,GAAH,UAAGA,EAAYyB,gBAAf,aAAG,EAAsB/qB,KAAI,SAACoC,GAC/C,OAAIA,EAAEioB,YAAc4B,EAAe5B,UAC1B,2BAAKjoB,GAAZ,IAAe6oB,gBAAiBlT,IAE3B3V,KAKLstB,EAAa,2BAAQpG,GAAR,IAAoByB,SAAUuD,IAE/CjF,EAAcqG,KA6HF,SACE,eAAC,KAAD,CAAWpX,YAAY,aAAvB,SACG,SAACC,GAAD,aACC,+CACEnR,UAAU,aACVC,MAAO,CAAEmR,WAAY,QACjBD,EAASE,gBAHf,IAIE5N,IAAK0N,EAASG,SAJhB,WAMiB,OAAduT,QAAc,IAAdA,GAAA,UAAAA,EAAgBhB,uBAAhB,eAAiCvb,QAAS,EACzCuc,EAAehB,gBAAgBjrB,KAC7B,SAAC2Y,EAASP,GACR,OACE,eAAC,KAAD,CAEEQ,YAAaR,EAAMS,WACnBT,MAAOA,EAHT,SAKG,SAACG,GAAD,OAGC,cAFA,CAEA,+BACE1N,IAAK0N,EAASG,UACVH,EAASO,gBAFf,aAIE,uBAAK1R,UAAU,iCAAf,UACE,sBAAKA,UAAU,iCAAf,SACE,kCACEA,UAAU,uBACVoF,IAAKmjB,GACLjjB,IAAI,cACA6L,EAASQ,oBAIjB,eAAC,GAAD,CAEE8P,gBAAiBlQ,EACjBP,MAAOA,EACPkR,WAAYA,EACZe,UAAWA,EACXhB,cAAeA,EACf4C,eAAgBA,GAPlB,OACOtT,QADP,IACOA,OADP,EACOA,EAAS5Y,YAtBjBqY,EAAMS,eAsCnB,uBAAMzR,UAAU,gCAAhB,SACG,OAIJmR,EAASa,qBAMlB,eAAChI,GAAA,EAAD,CAAWC,OAAK,EAAChK,MAAO,CAAEC,QAAS,OAAnC,SACE,uBAAKF,UAAU,mCAAf,UACE,sBACEC,MAAO,CAAE0H,OAAQ,SACjBvC,IAAK6M,GACL3M,IAAI,eACJS,QAAS,SAAC3E,GAAD,OA/LD,SAACA,GAG3B,IAAIonB,EAAkBtG,EAAWyB,SAAS3qB,QAAO,SAACgC,GAAD,OAAOA,EAAEioB,YAAc7hB,KAExE6gB,EAAc,2BAAKC,GAAN,IAAkByB,SAAU6E,KA0LPC,CAAoBxF,MAEtC,uBAAMjjB,UAAU,qBAAhB,8CAtJNijB,ICwkBCyF,GAxpBW,SAAC,GAAiC,IAA/B3f,EAA8B,EAA9BA,UAAWC,EAAmB,EAAnBA,aAAmB,EAEjC1I,mBAAS,aAFwB,oBAEhDvD,EAFgD,KAE3CsW,EAF2C,OAGrB/S,oBAAS,GAHY,oBAGhDU,EAHgD,KAGrCC,EAHqC,KAKjD/F,EAAYyI,aAAY,SAAC1L,GAAD,OAAWA,EAAMmD,SAASF,aAIlDhC,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBATF,EAWnBoH,mBAAS,CACzC0jB,sBAAuB,GACvBL,SAAU,CACN,CACIV,UAAW,EACXgF,aAAc,GACdG,oBAAqB,GACrBvE,gBAAiB,GACjB8E,kBAAmB,OAnBwB,oBAWhDzG,EAXgD,KAWpCD,EAXoC,OAuBT3hB,oBAAS,GAvBA,oBAuBhDsoB,EAvBgD,KAuB/B5G,EAvB+B,OAyBG1hB,mBAAS,MAzBZ,oBAyBhDuoB,EAzBgD,KAyBzBC,EAzByB,KA2BvD9mB,QAAQC,IAAI,aAAcigB,GAwB1B,IAAMxhB,EAAUC,cAEVH,EAAWC,cAIXsoB,EAAsB,CACxB,CACI3Y,QAAS,OACThN,MAAO,QAEX,CACIgN,QAAS,SACThN,MAAO,UAEX,CACIgN,QAAS,QACThN,MAAO,UApEwC,EAuEf9C,mBAAS,QAvEM,oBAuEhD0oB,EAvEgD,KAuElCC,EAvEkC,OA2EvB3oB,mBAAS,IA3Ec,oBA2EhDqX,EA3EgD,KA2EtCuR,EA3EsC,QA8E1CvR,EAAS/e,KAAI,SAAAwC,GAAQ,OAAIA,EAASgI,SAIvB9C,mBAAS,KAlFsB,oBAkF1C8I,GAlF0C,aAmFjB9I,mBAAS,IAnFQ,oBAmFnCgJ,GAnFmC,WAoFjD6f,EAAiBzlB,mBACjB0lB,EAAU1lB,mBAEV2lB,EAA0B3lB,mBAvFuB,EAyFrBpD,mBAAS,IAAIqU,MAzFQ,oBAyFhDC,GAzFgD,KAyFrCC,GAzFqC,QA0FzBvU,mBAAS,IAAIqU,MA1FY,sBA0FhDG,GA1FgD,MA0FvCC,GA1FuC,SA6FbzU,mBAAS,MA7FI,sBA6FhDgpB,GA7FgD,MA6FjCC,GA7FiC,MAgGjDroB,GAAM,uCAAG,WAAOE,GAAP,yCAAAC,EAAA,6DACXD,EAAEE,iBADS,SAMPL,GAAa,GAGPuoB,EAAY,CAEdC,cAAgC,SAAjBT,EAEX9G,EAAWyB,SAAS/qB,KAAI,SAAA8qB,GAEpB,OAAOA,EAAQG,gBAAgBjrB,KAAI,SAAAwC,GAC/B,OAAOA,EAASzC,SAErBqe,OAED,GAGN5X,KAAM,CACFN,IAAKyJ,OAAO7D,SAASglB,OACrBrqB,GAAInG,EACJywB,YAAaR,EAAelhB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IACtEmL,WAAYd,GAAUe,cACtBE,SAAUf,GAAQa,cAClBiU,YAAaR,EAAQnhB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IAC/Dsf,uBAAwBR,EAAwBphB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IAC1Fuf,aAAcjB,EACdjnB,OAAQonB,EACRrF,SAAUzB,EAAWyB,SAAS/qB,KAAI,SAAA8qB,GAE9B,MAAO,CACHzO,MAAOiN,EAAWyB,SAASzO,QAAQwO,GACnCuE,aAAY,OAAEvE,QAAF,IAAEA,OAAF,EAAEA,EAASuE,aACvB8B,aAAY,OAAErG,QAAF,IAAEA,OAAF,EAAEA,EAAS0E,oBAAoB7d,QACvC,mBACA,IAEJyf,kBAAmBtG,EAAQG,gBAAgBjrB,KAAI,SAAAwC,GAC3C,MAAO,CAEH6Z,MAAOyO,EAAQG,gBAAgB3O,QAAQ9Z,GAAY,EACnDA,SAAUA,EAASzC,GACnBsxB,eAAsC,KAAf,OAAR7uB,QAAQ,IAARA,OAAA,EAAAA,EAAUiP,oBA/C1C,SA2DgBtM,GAAM0D,KAAN,YAEnB+nB,GACF9nB,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA3ElB,OA2DDH,EA3DC,OAiFPyH,EAAQ,IACRE,EAAe,IACf4f,EAAY,IACZrU,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MArFR,EAwFiHhT,EAASvC,KAAzHzG,EAxFD,EAwFCA,GAAIgxB,EAxFL,EAwFKA,YAAaC,EAxFlB,EAwFkBA,YAAa1uB,EAxF/B,EAwF+BA,UAAWwa,EAxF1C,EAwF0CA,WAAYG,EAxFtD,EAwFsDA,SAAU/W,EAxFhE,EAwFgEA,IAAKorB,EAxFrE,EAwFqEA,IAAKC,EAxF1E,EAwF0EA,iBAAkBvoB,EAxF5F,EAwF4FA,OAAQ+hB,EAxFpG,EAwFoGA,SAE3G4F,GAAiB,CACb5wB,KACAgxB,cACAC,cACA1uB,YACAwa,aACAG,WACA/W,MACA8C,SACAsoB,MACAC,mBACAxG,aAGJ1iB,GAAa,GACb+H,GAAa,GACbI,EAAQ,IACRE,EAAe,IACf4f,EAAY,IACZrU,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAEfsU,EAAgB,QAhHT,kDAmHPjnB,QAAQC,IAAR,MAnHO,0DAAH,sDA0HZO,qBAAU,WAIN,GAAsB,OAAlB8mB,GAAwB,CAEpB9oB,EAAS,CACLrI,KAAM,iBACNE,QAASixB,QAOtB,CAAC9oB,EAAU8oB,KAId9mB,qBAAU,WAkBFyf,EAHA2G,EAGc,CACV5E,sBAAuB9oB,EACvByoB,SAAU,CACN,CACIV,UAAW,EACXgF,aAAc,GACdG,oBAAqB,GACrBvE,gBAAiB,GACjB8E,kBAAmB,MAOjB,CACV3E,sBAAuB9oB,EACvByoB,SAAUzB,EAAWyB,aAK9B,CAACzoB,EAAW6N,EAAW6f,IAI1B,IAAMwB,GAAW,uCAAG,WAAOhpB,GAAP,mBAAAC,EAAA,6DAChBD,EAAEE,iBADc,UAKN+oB,EAAW,IAAIC,UAEZC,OAAO,QAASnpB,EAAE+B,OAAOkL,MAAM,IACxCgc,EAASE,OAAO,OAAQ,KARZ,SAUWxsB,GAAM,CACzBkB,OAAQ,OACRH,IAAK,UACLM,KAAMirB,IAbE,OAUN1oB,EAVM,OAgBZmnB,EAAwB,UAACnnB,EAASvC,KAAK,UAAf,aAAC,EAAkBzG,IAhB/B,kDAmBZqJ,QAAQC,IAAR,MAnBY,0DAAH,sDAwBjB,OACI,gBAAC0H,GAAA,EAAD,CACIrG,KAAMyF,EACNa,SAAS,SACT4gB,gBAAgB,aAEhB3gB,OAAQ,WACJb,GAAa,GACbI,EAAQ,IACRE,EAAe,IACf4f,EAAY,IACZrU,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAEfsU,EAAgB,SAbxB,UAeI,eAACtf,GAAA,EAAMrD,OAAP,CAAcrG,MAAO,CAAE0E,gBAAiB,WAAamF,aAAW,EAAhE,SAEI,eAACH,GAAA,EAAMI,MAAP,8BAGJ,wBAAMjH,SAAU5B,GAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,CAAYvG,MAAO,CAAE0E,gBAAiB,WAAtC,SAGK3D,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,4DAKR,gBAACoX,GAAA,EAAD,CAEIze,GAAG,yBACH0e,UAAWta,EACXua,SAAU,SAACC,GAAD,OAAOlE,EAAOkE,IACxBvX,UAAU,OALd,UAOI,gBAACwX,GAAA,EAAD,CAAKC,SAAS,YAAYC,MAAM,YAAhC,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAOI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,wBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EAERrK,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBASZvO,IAAK2lB,WAKrB,gBAACpf,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,+BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,sBAAKpK,UAAU,YAAf,SACI,2BACIqK,UAAQ,EAERrK,UAAU,8BACV+R,UAAU,OACVC,YAAY,sBACZvO,IAAK0lB,aAOzB,eAAC,KAAD,CAAiB1Y,UAjY7C,SAAyBhC,GAErB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAN,OAAWqR,QAAX,IAAWA,OAAX,EAAWA,EAAYyB,UAJR,EAKLhT,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EALsB,qBAM7BN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAE1C,IAAIqX,EAAa,2BAAQpG,GAAR,IAAoByB,SAAUhT,IAG/CsR,EAAcqG,KAsXU,SACI,eAAC,KAAD,CAAWpX,YAAY,WAAvB,SACK,SAACC,GAAD,aACG,+CAAKnR,UAAU,WAAWC,MAAO,CAAEmR,WAAY,QAAaD,EAASE,gBAArE,IAAqF5N,IAAK0N,EAASG,SAAnG,iBACK4Q,QADL,IACKA,GADL,UACKA,EAAYyB,gBADjB,aACK,EAAsB/qB,KAAI,SAAC2Y,EAASP,GAIjC,OACI,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OAGG,cAFA,CAEA,+BAAK1N,IAAK0N,EAASG,UAAcH,EAASO,gBAA1C,aACI,uBAAK1R,UAAU,oBAAf,UACI,gDAASmR,EAASQ,iBAAlB,aACI,sBAAK3R,UAAU,sBAAsBoF,IAAKmjB,GAASjjB,IAAI,kBAG3D,eAAC,GAAD,CAEI2d,UAAW1R,EAAQ0R,UACnBf,WAAYA,EACZD,cAAeA,EACfD,mBAAoBA,GAJfzQ,EAAQ0R,mBAXjBjS,EAAMS,eAyB7BN,EAASa,qBAO1B,eAAChI,GAAA,EAAD,CACIC,OAAK,EACLhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QAJtB,SAOI,uBAAKxF,UAAU,gCAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WACrEkc,EAAa,YAAC,eAQHC,GARE,IASLyB,SAAS,GAAD,0BAAMzB,QAAN,IAAMA,OAAN,EAAMA,EAAYyB,UAAlB,CAA4B,CAChCV,WAAqB,OAAVf,QAAU,IAAVA,OAAA,EAAAA,EAAYyB,SAASrb,QAAS,EACzC2f,aAAc,GACdG,oBAAqB,GACrBvE,gBAAiB,GACjB8E,kBAAmB,YAOnC,uBAAM3oB,UAAU,kBAAhB,iCAOZ,gBAACwX,GAAA,EAAD,CAAKC,SAAS,aAAaC,MAAM,aAAjC,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,yCAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,sBAAKpK,UAAU,YAAf,SACI,2BAGIA,UAAU,8BACV+R,UAAU,OACVC,YAAY,sBACZvO,IAAK4lB,aAOzB,gBAACrf,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,wBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,gCACI,wBACIjS,KAAK,OACL+K,SAAU,SAAC9B,GAAD,OAAOgpB,GAAYhpB,kBAWrD,eAACoW,GAAA,EAAD,CAAKC,SAAS,WAAWC,MAAM,WAA/B,SACI,eAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,SAyCI,eAAC,KAAD,UACI,gBAACG,GAAA,EAAD,CAAKnK,MAAO,CAAEwF,UAAW,OAAzB,UACI,uBAAMzF,UAAU,WAAhB,4BAEA,yBACIoD,MAAO4lB,EACPhpB,UAAU,sCACVkD,SAAU,SAAA9B,GACN6nB,EAAgB7nB,EAAE+B,OAAOC,QAJjC,SAOK2lB,EAAoBnwB,KAAI,SAAAoC,GAAC,OACtB,yBAA6CoI,MAAOpI,EAAEoI,MAAtD,SACKpI,EAAEoV,SADM2Y,EAAoB7T,QAAQla,uBAgB7E,gBAAC2O,GAAA,EAAMa,OAAP,CAAcvK,MAAO,CAAE0E,gBAAiB,WAAxC,UAII,uBACI3E,UAAU,uCACV+F,QAAS,WACLiD,GAAa,GACbI,EAAQ,IACRE,EAAe,IACf4f,EAAY,IACZrU,GAAa,IAAIF,MACjBI,GAAW,IAAIJ,MAEfsU,EAAgB,QAChBhH,EAAc,CACV+B,sBAAuB,GACvBL,SAAU,CACN,CACIV,UAAW,EACXgF,aAAc,GACdG,oBAAqB,GACrBvE,gBAAiB,GACjB8E,kBAAmB,QAnBvC,UAwBI,2CAxBJ,OA0BA,wBACIxwB,KAAK,SACLiL,MAAM,gBACNpD,UAAU,0B,mBC1pB5BoL,GAASC,KAAOC,IAAV,+eA6BNqX,GAAwBzV,IAAM0V,YAChC,WAA6Bnf,GAAS,IAAnCof,EAAkC,EAAlCA,cAAkBC,EAAgB,kCAC3BC,EAAa7V,IAAMxJ,SACnBsf,EAAcvf,GAAOsf,EAM3B,OAJA7V,IAAM1K,WAAU,WACZwgB,EAAY/a,QAAQ4a,cAAgBA,IACrC,CAACG,EAAaH,IAGb,qCACI,oCAAO1qB,KAAK,WAAWsL,IAAKuf,GAAiBF,SAS7D,SAASlE,GAAT,GAEI,IAAD,IADC3S,OAAU0O,EACX,EADWA,YAAauD,EACxB,EADwBA,gBAAiBtD,EACzC,EADyCA,UAElCiE,EAAQX,EAAgB5V,OAE9B,OACI,wBACIlF,MAAOuX,GAAe,GACtBzX,SAAU,SAAA9B,GACNwZ,EAAUxZ,EAAE+B,OAAOC,YAASJ,IAEhCgP,YAAW,iBAAY6M,EAAZ,iBAyCvB,SAAStT,GAAT,GAAyE,IAAxDC,EAAuD,EAAvDA,QAASpM,EAA8C,EAA9CA,KAAM8iB,EAAwC,EAAxCA,WAAYD,EAA4B,EAA5BA,cAAegB,EAAa,EAAbA,UAAa,EAGlC/V,IAAM5M,SAAS,IAHmB,oBAG7D4iB,EAH6D,KAGlDC,EAHkD,KAK9DnE,EAAgB9R,IAAMC,SACxB,iBAAO,CAEH8R,OAAQL,MAEZ,IAVgE,EAmChEnT,oBAAS,CACTD,UACApM,KAAM8jB,EAWNlE,iBAGDI,cAAYC,mBACXC,iBAAeC,iBAIf,SAAA6D,GACIA,EAAM1D,eAAe5d,MAAK,SAAA0J,GAAO,OAE7B,CACI7S,GAAI,YAGJ2N,OAAQ,gBAAG+c,EAAH,EAAGA,8BAAH,OACJ,+BACI,eAAC,GAAD,eAA2BA,SAKnCvC,KAAM,gBAAG1U,EAAH,EAAGA,IAAH,OACF,+BACI,eAAC,GAAD,eAA2BA,EAAIkX,mCAfd,mBAmB1B9X,UA3DXE,EAjBgE,EAiBhEA,cACAC,EAlBgE,EAkBhEA,kBACAC,EAnBgE,EAmBhEA,aACAC,EApBgE,EAoBhEA,KACA2T,EArBgE,EAqBhEA,KACA1T,EAtBgE,EAsBhEA,WACA2T,EAvBgE,EAuBhEA,iBACAI,EAxBgE,EAwBhEA,gBACAC,EAzBgE,EAyBhEA,YACAC,EA1BgE,EA0BhEA,YACAC,EA3BgE,EA2BhEA,UACAC,EA5BgE,EA4BhEA,SACAC,EA7BgE,EA6BhEA,SACAC,EA9BgE,EA8BhEA,aACAC,EA/BgE,EA+BhEA,YAEAmD,GAjCgE,EAgChEC,cAhCgE,EAiChED,mBAjCgE,IAkChEtrB,MAASknB,EAlCuD,EAkCvDA,UAAWkB,EAlC4C,EAkC5CA,SAlC4C,EAkClCoD,eAiHlC,OAhEAvW,IAAM1K,WAAU,WAMZ,IAHA,IAAIkhB,EAAUxB,EAAWyB,SAAS3qB,QAAO,SAAA0qB,GAAO,OAAIA,EAAQT,WAAaA,KAAW,GAEhFW,EAAkC,GAC7B9d,EAAI,EAAGA,EAAIoc,EAAWyB,SAASrb,OAAQxC,IAC5C8d,EAA+B,sBAAOA,GAAP,YAA2C1B,EAAWyB,SAAS7d,GAAG+d,kBAMrG,IAAIC,EAAoCF,EAAgChrB,KAAI,SAACwC,GAAD,OAAcA,EAASzC,MAE/ForB,EAAwB7B,EAAW8B,sBAAsBhrB,QAAO,SAACoC,GACjE,OAAQ0oB,EAAkC3kB,SAAS/D,EAASzC,OAK5DuqB,EAAS,sBAAOQ,EAAQG,iBAAf,YAAmCE,IAGhDZ,EAAaD,KAEd,CAAChB,IAGJ+B,mCAAuB,WAEnB,IACIC,EADUhC,EAAWyB,SAAS3qB,QAAO,SAAA0qB,GAAO,OAAIA,EAAQT,WAAaA,KAAW,GACpDY,gBAAgBjrB,KAAI,SAAAwC,GAAQ,OAAIA,EAASzC,MAEzEkT,EAAKyS,SAAQ,SAAClS,GACN8X,EAAkB/kB,SAASiN,EAAIqS,SAAS9lB,KACxC4qB,EAAkBnX,EAAIzT,IAAI,QAInC,CAACkT,IAyBA,uCAEI,uBAAK7L,UAAU,2BAAf,iCAA+Dyf,EAAiBnX,UAEhF,eAAC7B,GAAA,EAAD,CAAQxG,MAAO,CAAEuF,aAAc,MAAOb,gBAAiB,6BAA8Bwf,OAAQ,QAAUpe,QA1B/G,SAAuB3E,GACnBA,EAAEE,iBAEF,IAAIuiB,EAAkBpE,EAAiB7mB,KAAI,SAAAwT,GAAG,OAAIA,EAAIqS,YAC9BgB,EAAiB7mB,KAAI,SAAAwT,GAAG,OAAIA,EAAIqS,SAAS9lB,MAGjEupB,EAAWyB,SAAS/qB,KAAI,SAAC8qB,GACjBA,EAAQT,WAAaA,IACrBS,EAAQG,gBAAkBA,MAIlC5B,EAAc,CACV+B,sBAAuB5kB,EACvBukB,SAAUzB,EAAWyB,YAWrB,4BAGA,mDAAWjY,KAAX,cAGI,iCACKE,EAAahT,KAAI,SAAAmT,GAAW,OACzB,+CAAQA,EAAYC,uBAApB,aACKD,EAAY/M,QAAQpG,KAAI,SAAAqT,GAAM,OAC3B,gDAAQA,EAAOC,kBAAf,cAAkCD,EAAOE,OAAO,UAC5C,+BAAMF,EAAOqU,UAAYrU,EAAOE,OAAO,UAAY,sBAMvE,kDAAWR,KAAX,aACK6T,EAAK5mB,KAAI,SAACwT,EAAKtG,GAEZ,OADAgG,EAAWM,GAEP,+CAAQA,EAAIC,eAAZ,aACKD,EAAIE,MAAM1T,KAAI,SAAA2T,GACX,OAAO,+CAAQA,EAAKC,gBAAb,aAA8BD,EAAKJ,OAAO,2BAQzE,wBAEA,sBAAKnM,UAAU,aAAf,SACI,uBAAKA,UAAU,qBAAf,UACI,uBAAKA,UAAU,mBAAf,UACI,eAACyG,GAAA,EAAD,CAAQV,QAAS,kBAAMka,EAAS,IAAIxV,UAAWoV,EAA/C,SACK,OACK,IACV,eAACpZ,GAAA,EAAD,CAAQV,QAAS,kBAAMoa,KAAgB1V,UAAWoV,EAAlD,SACK,MACK,IACV,eAACpZ,GAAA,EAAD,CAAQV,QAAS,kBAAMma,KAAYzV,UAAWqV,EAA9C,SACK,MACK,IACV,eAACrZ,GAAA,EAAD,CAAQV,QAAS,kBAAMka,EAASD,EAAY,IAAIvV,UAAWqV,EAA3D,SACK,OACK,OAEd,uBAAK9f,UAAU,kBAAf,UACI,yCACS,IACL,oCACKmf,EAAY,EADjB,OACwBY,EAAYzX,UAC1B,OAEd,gCACI,oDAAsB,IAAtB,SAEJ,wBACItI,UAAU,eACV7H,KAAK,SACLisB,aAAcjF,EAAY,EAC1Bjc,SAAU,SAAA9B,GACN,IAAMoe,EAAOpe,EAAE+B,OAAOC,MAAQihB,OAAOjjB,EAAE+B,OAAOC,OAAS,EAAI,EAC3D6c,EAAST,IAEbvf,MAAO,CAAEyF,MAAO,cAGxB,sBAAK1F,UAAU,qBAAf,SACI,yBACIoD,MAAOid,EACPrgB,UAAU,eAEVkD,SAAU,SAAA9B,GACNgf,EAAYiE,OAAOjjB,EAAE+B,OAAOC,SALpC,SAQK,CAAC,GAAI,GAAI,GAAI,GAAI,IAAIxK,KAAI,SAAAynB,GAAQ,OAC9B,0BAAuBjd,MAAOid,EAA9B,kBACUA,IADGA,kBAiU9BoK,I,GAAAA,GAlTf,YAAiI,IAA5FxH,EAA2F,EAA3FA,UAAWf,EAAgF,EAAhFA,WAAYD,EAAoE,EAApEA,cAAe5J,EAAqD,EAArDA,aAEjE7X,GAFsH,EAAvCogB,mBAAuC,EAAnBiD,gBAExFpjB,eAF2G,EAI5FH,mBAAS,MAJmF,oBAIrHlF,EAJqH,KAQtHF,GARsH,KAQ1GgnB,EAAW8B,uBAG7BxhB,qBAAU,WAIN,GAAiB,OAAbpH,EAAmB,CAEfoF,EAAS,CACLrI,KAAM,kBACNE,QAAS+C,OAOtB,CAACoF,EAAUpF,IAGd,IAAM6R,EAAeC,IAAMC,SAEvB,iBAAM,CAGF,CAGI7G,OAAQ,WACR0G,SAAU,gBACViS,OAAQvE,IAuGZ,CACIpU,OAAQ,QAGR2Y,OAAQT,GACRxR,SAAU,eACVhU,OAAQ,SACR8nB,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAoBL,OAAIA,EAAKH,IAAIqS,SAAShkB,aACX8R,EAAKH,IAAIqS,SAAShkB,aAKtB,KAKf,CACI6L,OAAQ,WACR2Y,OAAQP,GAGR1R,SAAU,QACV8T,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAOL,OAAIA,EAAKH,IAAIqS,SAAS3kB,OAASyS,EAAKH,IAAIqS,SAAShkB,aACtC8R,EAAKH,IAAIqS,SAAS3kB,MAEtB,KAKf,CACIwM,OAAQ,cACR0G,SAAU,YACViS,OAAQN,GACR3lB,OAAQ,SAER8nB,KAAM,YAGF,OAHgB,EAAXvU,KAGIH,IAAIqS,SAAShJ,UACX,YAGJ,eAKf,CACInP,OAAQ,gBACR0G,SAAU,gBAEViS,OAAQhB,GACRjlB,OAAQ,SACR8nB,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAEL,MAAwC,iBAApCA,EAAKH,IAAIqS,SAAS3I,cACX,eAG6B,QAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,kBAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,WAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,WAE6B,cAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,YAE6B,iBAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,eAG6B,aAApCvJ,EAAKH,IAAIqS,SAAS3I,cACX,uBAGJ,UAQnB,CAACuC,IA2BL,OACI,qCACI,eAAC,GAAD,UACI,eAAC,GAAD,CACI7X,SAAUA,EACVgL,QAASyB,EACT7N,KAAMlE,EACN+mB,cAAeA,EACfC,WAAYA,EACZe,UAAWA,SChlBhByH,GA5DgB,SAAC,GAA6G,IAA3GzH,EAA0G,EAA1GA,UAAWf,EAA+F,EAA/FA,WAAYD,EAAmF,EAAnFA,cAAeuC,EAAoE,EAApEA,mBAAoBC,EAAgD,EAAhDA,sBAAgD,KAAzBzC,mBAEjE1hB,oBAAS,IAFiF,8BAIxI,OAEI,gBAACqJ,GAAA,EAAD,CAEIrG,KAAMkhB,EAGNE,YAAY,EALhB,UAQI,gBAAC/a,GAAA,EAAMrD,OAAP,WAEI,eAACqD,GAAA,EAAMI,MAAP,4BACA,eAACtD,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,sBACV+F,QAAS,WACL0e,GAAsB,IAJ9B,sBAUJ,eAAC9a,GAAA,EAAMnD,KAAP,UAiBI,eAAC,GAAD,CAEI0b,WAAYA,EACZD,cAAeA,EACfgB,UAAWA,GAHNA,KAQb,eAACtZ,GAAA,EAAMa,OAAP,MA5CKyY,ICqaF0H,GAlaa,SAAC,GAAsF,IAkB3G/F,EAlBuBnD,EAAmF,EAAnFA,gBAAiBS,EAAkE,EAAlEA,WAAYD,EAAsD,EAAtDA,cAAejR,EAAuC,EAAvCA,MAAO6T,EAAgC,EAAhCA,eAAgB5B,EAAgB,EAAhBA,UAAgB,EAGtE3iB,oBAAS,GAH6D,oBAGvGwkB,EAHuG,KAGzFC,EAHyF,OAK5DzkB,mBAAS,IALmD,oBAKvG0kB,EALuG,KAKpFC,EALoF,OAO5E3kB,oBAAS,GAPmE,oBAOvGsqB,EAPuG,KAO5FC,EAP4F,KAStGtV,EAAwFkM,EAAxFlM,cAAeO,EAAyE2L,EAAzE3L,cAAeoP,EAA0DzD,EAA1DyD,cAAezqB,EAA2CgnB,EAA3ChnB,aAAcX,EAA6B2nB,EAA7B3nB,MAAOwc,EAAsBmL,EAAtBnL,QAASjM,EAAaoX,EAAbpX,SAE7E8a,EAAkBjD,EAAWyB,SAAS3qB,QAAO,SAAAgC,GAAC,OAAoB,IAAhBA,EAAEioB,aAEpDmC,EAAmBlD,EAAWyB,SAOd,iBAAlB7N,IACA8O,EAAsB,gBAGJ,QAAlB9O,IACA8O,EAAsB,mBAGJ,aAAlB9O,IACA8O,EAAsB,YAGJ,aAAlB9O,IACA8O,EAAsB,YAEJ,cAAlB9O,IACA8O,EAAsB,aAEJ,iBAAlB9O,IACA8O,EAAsB,gBAGJ,aAAlB9O,IACA8O,EAAsB,wBAEJ,sBAAlB9O,IACA8O,EAAsB,qBAQ1B,IAAMS,EAAenY,IAAM0V,YAAW,WAAwBnf,GAAxB,IAAG6hB,EAAH,EAAGA,SAAUvf,EAAb,EAAaA,QAAb,OAClC,qBACIwf,KAAK,GACL9hB,IAAKA,EACLsC,QAAS,SAAC3E,GACNA,EAAEE,iBACFyE,EAAQ3E,IALhB,UAQKkkB,EACD,sBAAKrlB,MAAO,CAAE0H,OAAQ,SAAWvC,IAAKogB,GAAiBlgB,IAAI,8BAO7DmgB,EAAavY,IAAM0V,YACrB,WAA+Dnf,GAAS,IAArE6hB,EAAoE,EAApEA,SAAUrlB,EAA0D,EAA1DA,MAAOD,EAAmD,EAAnDA,UAA8B0lB,EAAqB,EAAxC,mBAAwC,EACzCplB,mBAAS,IADgC,oBAC5D8C,EAD4D,UAGnE,OACI,sBACIK,IAAKA,EACLxD,MAAOA,EACPD,UAAWA,EACX2lB,kBAAiBD,EAJrB,SAaI,qBAAI1lB,UAAU,gBAAd,SACKkN,IAAM0Y,SAASC,QAAQP,GAAUtsB,QAC9B,SAAC8sB,GAAD,OACK1iB,GAAS0iB,EAAM/lB,MAAMulB,SAASS,cAAcC,WAAW5iB,aA0JpF,OATAZ,qBAAU,gBAGWQ,IAAbqH,GACAwgB,EAAaxgB,KAGlB,CAACA,IAGA,eAACL,GAAA,EAAD,CAAWC,OAAK,EACZhK,MAAO,CAAEid,YAAa,OAD1B,SAGI,eAAC,KAAD,UACI,eAAC9S,GAAA,EAAD,UACI,eAAC8P,GAAA,EAAD,CAAMla,UAAU,6BAAhB,SAEI,gBAACka,GAAA,EAAK1T,KAAN,CAAWvG,MAAO,CAAEmQ,QAAS,QAA7B,UAEI,uBAAKpQ,UAAU,4BAAf,UACI,sBAAKA,UAAU,qCAAf,SACI,uBAAKA,UAAU,2BAAf,UACI,0CAAUgR,EAAQ,EAAlB,aAAwBuE,KACxB,sBAAKnQ,IAAK6X,GAAU3X,IAAI,qBAIhC,+BACI,wBAAMtF,UAAU,sBAAsBC,MAAO,CAAEE,MAAO,WAAtD,UAEI,kCAAU1F,IAA8BX,GAAgB,QACvDW,GAAgBX,EAAQ,uBAAMmG,MAAO,CAAEE,MAAO,WAAtB,SACpB,QACK,KAET1F,GAAgBX,EAAQA,EAAQ,UAIzC,uBAAKkG,UAAU,0BAAf,UACI,kCAAM,sDAAiC4kB,KACvC,kCAAM,oDAA+BM,EAAgB,aAAe,kBAGrD,QAAlBpP,GAA6C,aAAlBA,EAA+B,eAACmQ,GAAA,EAAD,CAAUC,GAAIpB,EAAd,SACvD,+BACI,uBAAK9kB,UAAU,mCAAf,UACI,uBAAKA,UAAU,qBAAf,UACI,wCAAS,+CADb,OAEKsW,QAFL,IAEKA,OAFL,EAEKA,EAAS1d,KAAI,SAAAoC,GACV,OACI,gCAAOA,EAAEoI,cAKrB,uBAAKpD,UAAU,sBAAf,UACI,wCAAS,iDADb,OAEKsW,QAFL,IAEKA,OAFL,EAEKA,EAAS1d,KAAI,SAAAoC,GACV,OAII,0BAAQgF,UAAU,qBACdkD,SAAU,SAAC9B,GAEgB,6BAAnBA,EAAE+B,OAAOC,OAAwChC,EAAE+B,OAAOC,OAG9D6hB,EAAqB,GAAD,mBAAKD,GAAL,CAAwB,CAAEmB,SAAUnrB,EAAErC,GAAIytB,YAAahlB,EAAE+B,OAAOC,WAN5F,UASI,+DAGI+hB,EAAgBvsB,KAAI,SAACiN,GACjB,OACI,yBAA+BzC,MAAOyC,EAAOod,UAA7C,mCACwBpd,EAAOod,YADlBpd,EAAOod,8BAiB9C,KAEd,sBAAKjjB,UAAU,qCAAf,SACI,uBAAKA,UAAU,6BAAf,UACI,uBAAKA,UAAU,sBAAf,UAEI,wBACIrH,GAAG,oBACHR,KAAK,WAEL2yB,QAASF,EACT5qB,UAAU,oBACVkD,SAAU,SAAC9B,GAAD,OA/I/B,SAACA,GAIpB,IAAIilB,EAAmBjlB,EAInBklB,EAAuB,OAAGzB,QAAH,IAAGA,OAAH,EAAGA,EAAgBhB,gBAAgBjrB,KAAI,SAAAoC,GAC9D,OAAIA,EAAErC,KAAO0tB,EAAiB1tB,GAGnB,2BAAKqC,GAAZ,IAAeqP,UAAWrP,EAAEqP,WAGzBrP,KAGPurB,EAAsB,2BAAQ1B,GAAR,IAAwBhB,gBAAiByC,IAG/DE,EAA0BpB,EAAiBxsB,KAAI,SAAAoC,GAG/C,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxBsD,EAIJvrB,KAGXinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAU6C,KA+GgBC,CAAehF,MAGpC,wBAAOxe,QAAQ,oBAAf,sBAGA,wBACItK,GAAG,2BACHR,KAAK,WACL6H,UAAU,uBAGd,wBAAOiD,QAAQ,2BAAf,6BAEA,iCACI,sBAAKjD,UAAU,mBAAmBoF,IAAKshB,GAAephB,IAAI,qBAC1D,iDAEJ,iCACI,sBAAKtF,UAAU,mBAAmBoF,IAAKuhB,GAAerhB,IAAI,qBAC1D,qDAIR,uBAAKrF,MAAO,CAAEmQ,QAAS,QAAvB,UAEI,+BACI,gBAACwW,GAAA,EAAD,WACI,eAACA,GAAA,EAASC,OAAV,CAAiBtgB,GAAI8e,EAAc1sB,GAAG,+BAGtC,eAACiuB,GAAA,EAASE,KAAV,CAAevgB,GAAIkf,EAAnB,SACKL,EAAiBxsB,KAAI,SAAAoC,GAElB,OACIioB,IAAcjoB,EAAEioB,UAAY,gBAAC2D,GAAA,EAASnJ,KAAV,CAAehG,SAAU2N,EAAiBlQ,QAAQla,GAAI+K,QAAS,SAAC3E,GAAD,OApR7H,SAACA,GAavB,IATA,IAAIsX,EAAa+I,EAAgB9oB,GAC7BouB,EAAe3lB,EAEf4lB,EAAqB5B,EAAiBpsB,QAAO,SAAAgC,GAAC,OAAIA,EAAEioB,YAAc8D,KAAc,GAEhFE,EAAkBpC,EAAehB,gBAAgB7qB,QAAO,SAAAgC,GAAC,OAAIA,EAAErC,KAAO+f,KAIjE5S,EAAI,EAAGA,EAAIkhB,EAAmBnD,gBAAgBvb,OAAQxC,IAAK,CAEhE,GAAIkhB,EAAmBnD,gBAAgBprB,MAAK,SAAAuC,GAAC,OAAIA,EAAErC,KAAO8oB,EAAgB9oB,MAAK,CAG3E,IAAIuuB,EAAkB9B,EAAiBxsB,KAAI,SAAAoC,GAGvC,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxB,2BAAKjoB,GAAZ,IAAe6oB,gBAAiBoD,IAS7BjsB,KAGX,YADAinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUuD,KAK7CF,EAAmBnD,gBAAgB/hB,KAAK2f,GAO5C,IAAIyF,EAAkB9B,EAAiBxsB,KAAI,SAAAoC,GAGvC,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxB,2BAAKjoB,GAAZ,IAAe6oB,gBAAiBoD,IAGhCjsB,EAAEioB,YAAc+D,EAAmB/D,UAE5B,2BAAK+D,GAAZ,IAAgCnD,gBAAgB,GAAD,mBAAMmD,EAAmBnD,iBAAzB,CAA0CpC,MAItFzmB,KAMXinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUuD,KAoNiHC,CAAkBnsB,EAAEioB,YAA1F,wCAA2HmC,EAAiBlQ,QAAQla,GAAK,MAAuB,gBAAC4rB,GAAA,EAASnJ,KAAV,CAAehG,SAAU2N,EAAiBlQ,QAAQla,GAAIyP,UAAQ,EAA9D,wCAAoF2a,EAAiBlQ,QAAQla,GAAK,gBAUlV,+BACI,sBAAKiF,MAAO,CAAE0H,OAAQ,QAASyJ,WAAY,SAAUkL,YAAa,UAAYlX,IAAKgiB,GAAU9hB,IAAI,kBAErG,sBAAKrF,MAAO,CAAEsF,OAAQ,WAAtB,SACI,sBAAKtF,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK6M,GAAW3M,IAAI,eAAeS,QAAS,SAAC3E,GAAD,OA5N5F,SAACA,GAI1B,IAAIimB,EAAsB,OAAGxC,QAAH,IAAGA,OAAH,EAAGA,EAAgBhB,gBAAgB7qB,QAAO,SAAAgC,GAAC,OAAIA,EAAErC,KAAOyI,EAAEzI,MAIhF2uB,EAAc,2BAAQzC,GAAR,IAAwBhB,gBAAiBwD,IAGvDE,EAA0BnC,EAAiBxsB,KAAI,SAAAoC,GAG/C,OAAIA,EAAEioB,YAAc4B,EAAe5B,UACxBqE,EAIJtsB,KAIXinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAU4D,KAqMmFC,CAAqB/F,mBAO1G,QAAlB3L,GAA6C,aAAlBA,EAA+B,sBACvD/P,QAAS,kBAAMgf,GAAiBD,IAChC2C,gBAAc,mCACdC,gBAAe5C,EAHwC,SAItDA,EAAe,sBAAK9kB,UAAU,6BAA6BoF,IAAKuiB,GAAgBriB,IAAI,+BAAkC,sBAAKtF,UAAU,6BAA6BoF,IAAKwiB,GAActiB,IAAI,iCAErL,sBAAKtF,UAAU,6BAA6BC,MAAO,CAAEwb,QAAS,KAAMlW,OAAQ,WAAaH,IAAKwiB,GAActiB,IAAI,2CCrKtIylB,GApPK,SAAC,GAA8C,IAAD,EAA3C9H,EAA2C,EAA3CA,UAAWf,EAAgC,EAAhCA,WAAYD,EAAoB,EAApBA,cACtC/oB,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBADO,EAGZoH,oBAAS,GAHG,oBAGzDkkB,EAHyD,KAGrCC,EAHqC,KAM1DI,EAAc,OAAG3C,QAAH,IAAGA,GAAH,UAAGA,EAAYyB,gBAAf,aAAG,EAAsBlrB,MAC3C,SAACqvB,GAAD,OAAUA,EAAK7E,YAAcA,KA+D/B,OACE,sBAAqBjjB,UAAU,oBAA/B,SACE,eAACka,GAAA,EAAD,CAAMla,UAAU,eAAhB,SACE,gBAACka,GAAA,EAAK1T,KAAN,WACE,gBAACwD,GAAA,EAAD,CACEC,OAAK,EACLhK,MAAO,CACLkK,cAAe,OACf3E,aAAc,QAJlB,UAOE,eAAC,KAAD,UACE,eAAC4E,GAAA,EAAD,UACE,uBAAMpK,UAAU,WAAhB,+BAGJ,eAAC,KAAD,UACE,eAACoK,GAAA,EAAD,UACE,wBAEEga,cACgB,OAAdS,QAAc,IAAdA,OAAA,EAAAA,EAAgBoD,cAAhB,OACIpD,QADJ,IACIA,OADJ,EACIA,EAAgBoD,aAChB,GAENjoB,UAAU,8BACV+R,UAA8B,IAAnB7Y,EAAuB,OAAS,MAC3C8Y,YACqB,IAAnB9Y,EACI,sBACA,qBAON6uB,OAAQ,SAAC3mB,GAAD,OArEF,SAACA,GACrB,IAAI4mB,EAAmB,OAAG9F,QAAH,IAAGA,OAAH,EAAGA,EAAYyB,SAAS/qB,KAAI,SAACoC,GAClD,OAAIA,EAAEioB,YAAcA,EACX,2BACFjoB,GADL,IAEEitB,aAAc7mB,EAAE+B,OAAOC,MAAMmH,QAAQ,iBAAkB,MAIpDvP,KAGTinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUqE,KAyDZE,CAAc9mB,aAKrC,gBAAC4I,GAAA,EAAD,CAAWC,OAAK,EAAhB,UACE,eAAC,KAAD,UACE,eAACG,GAAA,EAAD,UACE,uBAAMpK,UAAU,WAAhB,sCAGJ,eAAC,KAAD,UACE,eAACoK,GAAA,EAAD,UACE,2BACEpK,UAAU,8BACV+R,UAAU,OACVC,YAAY,sBAEZoS,cACgB,OAAdS,QAAc,IAAdA,OAAA,EAAAA,EAAgBuD,qBAAhB,OACIvD,QADJ,IACIA,OADJ,EACIA,EAAgBuD,oBAChB,GAENL,OAAQ,SAAC3mB,GAAD,OA7EK,SAACA,GAC5B,IAAI+mB,EAA0B,OAAGjG,QAAH,IAAGA,OAAH,EAAGA,EAAYyB,SAAS/qB,KAAI,SAACoC,GACzD,OAAIA,EAAEioB,YAAcA,EACX,2BACFjoB,GADL,IAEEotB,oBAAqBhnB,EAAE+B,OAAOC,MAAMmH,QAAQ,iBAAkB,MAI3DvP,KAGTinB,EAAc,2BAAKC,GAAN,IAAkByB,SAAUwE,KAiEZE,CAAqBjnB,aAM3CojB,EACC,eAAC,GAAD,CAEEA,mBAAoBA,EACpBC,sBAAuBA,EACvBvC,WAAYA,EACZD,cAAeA,EACfgB,UAAWA,GALNA,GAOL,KACJ,eAACjZ,GAAA,EAAD,CAAWC,OAAK,EAAChK,MAAO,CAAEC,QAAS,SAAnC,SACE,eAAC,KAAD,UACE,gBAACkK,GAAA,EAAD,WACE,uBAAKpK,UAAU,gCAAf,UACE,sBACEC,MAAO,CAAE0H,OAAQ,SACjBvC,IAAK+M,GACL7M,IAAI,aACJS,QAAS,SAAC3E,GACRqjB,GAAsB,MAG1B,uBAAMzkB,UAAU,kBAAhB,8BAGF,eAAC,KAAD,CAAiByQ,UArJ/B,SAAyBhC,GAAS,IAAD,EAC/B,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAKgU,EAAehB,iBAHT,EAIPlT,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EAJwB,qBAK/BN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAG1C,IAAIiW,EAAe,OAAGhF,QAAH,IAAGA,GAAH,UAAGA,EAAYyB,gBAAf,aAAG,EAAsB/qB,KAAI,SAACoC,GAC/C,OAAIA,EAAEioB,YAAc4B,EAAe5B,UAC1B,2BAAKjoB,GAAZ,IAAe6oB,gBAAiBlT,IAE3B3V,KAGLstB,EAAa,2BAAQpG,GAAR,IAAoByB,SAAUuD,IAE/CjF,EAAcqG,KAoIF,SACE,eAAC,KAAD,CAAWpX,YAAY,aAAvB,SACG,SAACC,GAAD,aACC,+CACEnR,UAAU,aACVC,MAAO,CAAEmR,WAAY,QACjBD,EAASE,gBAHf,IAIE5N,IAAK0N,EAASG,SAJhB,WAMiB,OAAduT,QAAc,IAAdA,GAAA,UAAAA,EAAgBhB,uBAAhB,eAAiCvb,QAAS,EACzCuc,EAAehB,gBAAgBjrB,KAC7B,SAAC2Y,EAASP,GACR,OACE,eAAC,KAAD,CAEEQ,YAAaR,EAAMS,WACnBT,MAAOA,EAHT,SAKG,SAACG,GAAD,OAGC,cAFA,CAEA,+BACE1N,IAAK0N,EAASG,UACVH,EAASO,gBAFf,aAIE,uBAAK1R,UAAU,iCAAf,UACE,sBAAKA,UAAU,iCAAf,SACE,kCACEA,UAAU,uBACVoF,IAAKmjB,GACLjjB,IAAI,cACA6L,EAASQ,oBAIjB,eAAC,GAAD,CAEE8P,gBAAiBlQ,EACjBP,MAAOA,EACPkR,WAAYA,EACZe,UAAWA,EACXhB,cAAeA,EACf4C,eAAgBA,GAPlB,OACOtT,QADP,IACOA,OADP,EACOA,EAAS5Y,YAtBjBqY,EAAMS,eAsCnB,uBAAMzR,UAAU,gCAAhB,SACG,OAIJmR,EAASa,qBAMlB,eAAChI,GAAA,EAAD,CAAWC,OAAK,EAAChK,MAAO,CAAEC,QAAS,OAAnC,SACE,uBAAKF,UAAU,mCAAf,UACE,sBACEC,MAAO,CAAE0H,OAAQ,SACjBvC,IAAK6M,GACL3M,IAAI,eACJS,QAAS,SAAC3E,GAAD,OAtMD,SAACA,GAC3B,IAAIonB,EAAkBtG,EAAWyB,SAAS3qB,QAAO,SAACgC,GAAD,OAAOA,EAAEioB,YAAc7hB,KAExE6gB,EAAc,2BAAKC,GAAN,IAAkByB,SAAU6E,KAmMPC,CAAoBxF,MAEtC,uBAAMjjB,UAAU,qBAAhB,8CAjKNijB,ICykCC+H,GAnoCS,SAAC,GAAqC,IAAnC5S,EAAkC,EAAlCA,cAAeC,EAAmB,EAAnBA,aAMhCja,EAAcsF,iBAAOvF,IACrBkP,EAAS3J,sBAAOV,GAPmC,EAUnC1C,mBAAS,aAV0B,oBAUlDvD,EAVkD,KAU7CsW,EAV6C,KAWnD3S,EAAUC,cAXyC,EAYvBL,oBAAS,GAZc,oBAYlDU,EAZkD,KAYvCC,EAZuC,OAanBX,oBAAS,GAbU,oBAalDgY,EAbkD,KAarCC,EAbqC,KAenD0S,EAAsBtnB,aAAY,SAAC1L,GAAD,OAAWA,EAAMqE,OAAOI,kBAG1DxD,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAlBA,EAmBXoH,mBAAS,IAnBE,oBAmBjCsgB,GAnBiC,aAoBPtgB,mBAAS,IApBF,oBAoB/B4qB,GApB+B,WAyBnDhwB,EAAYyI,aAAY,SAAC1L,GAAD,OAAWA,EAAMmD,SAASF,aAzBC,EA2BrBoF,mBAAS,CAEzC0jB,sBAAuB,GACvBL,SAAU,KA9B2C,oBA2BlDzB,EA3BkD,KA2BtCD,EA3BsC,OAgCC3hB,mBAAS,MAhCV,oBAgClDuoB,EAhCkD,KAgC3BC,EAhC2B,KAmCzD9mB,QAAQC,IAAI,qBAAsBigB,GAnCuB,MAoDb5hB,mBAAS,CAEjDqpB,YAAa,GACbC,YAAa,GACbC,uBAAwB,GACxBnU,WAAY,GACZG,SAAU,GACVjU,OAAQ,GACR+hB,SAAU,KA5D2C,oBAoDlDjnB,EApDkD,KAoDlCyuB,EApDkC,KAgErDC,EAAiB1nB,mBACjB2nB,EAAiB3nB,mBACjB4nB,EAA4B5nB,mBAI5B6nB,EAAgB,OAAGN,QAAH,IAAGA,OAAH,EAAGA,EAAqBtyB,GAE5C6J,qBAAU,YAEiB,uCAAG,4BAAAnB,EAAA,mEAIdkqB,EAJc,4BAOSvoB,IAAnBqK,EAAOpF,SACPoF,EAAOpF,UAEXhH,GAAa,GAVC,SAYSlD,GAAMoE,IAAN,mBACPopB,GACZ,CACIptB,YAAa,IAAIC,EAAY6J,SAAQ,SAAA6F,GACjCT,EAAOpF,QAAU6F,OAG3BpM,OAOE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAtCX,QAYRH,EAZQ,UA8CVwpB,EAAkBxpB,EAASvC,MAE3B6B,GAAa,IAhDH,yDAuDlBe,QAAQC,IAAR,MAvDkB,0DAAH,qDA4DvBupB,KACD,CAAC9qB,EAAS6qB,IAGbvpB,QAAQC,IAAI,aAAcvF,GAK1B,IAAMqsB,EAAsB,CACxB,CACI3Y,QAAS,OACThN,MAAO,QAEX,CACIgN,QAAS,SACThN,MAAO,UAEX,CACIgN,QAAS,QACThN,MAAO,UAMTqoB,EAAQ,OAAG/uB,QAAH,IAAGA,OAAH,EAAGA,EAAgB/D,GAhKwB,EAkKD2H,mBAAS,CAE7DqpB,YAAa,GACbC,YAAa,GACbC,uBAAwB,GACxBnU,WAAY,GACZG,SAAU,GACVjU,OAAQ,KAzK6C,qBAkKlD8pB,GAlKkD,MAkK5BC,GAlK4B,MA6KjDhC,GAAmF+B,GAAnF/B,YAAaC,GAAsE8B,GAAtE9B,YAAalU,GAAyDgW,GAAzDhW,WAAYG,GAA6C6V,GAA7C7V,SAAUjU,GAAmC8pB,GAAnC9pB,OAAQioB,GAA2B6B,GAA3B7B,uBAQ5DnU,IAIkB,IAAIf,KADVe,IAKZG,IAOgB,IAAIlB,KAFVkB,IAUdrT,qBAAU,WAIqB,OAAnB9F,IAEAivB,GAAwB,CAEpBhC,YAAajtB,EAAeitB,YAC5BC,YAAaltB,EAAektB,YAC5BC,uBAAwBntB,EAAemtB,uBACvCnU,WAAYhZ,EAAegZ,WAC3BG,SAAUnZ,EAAemZ,SACzBjU,OAAQlF,EAAekF,SAI3BwpB,EAAenjB,QAAUvL,EAAeitB,YACxC0B,EAAepjB,QAAUvL,EAAektB,YACxC0B,EAA0BrjB,QAAUvL,EAAemtB,0BAQ5D,CAACntB,IAGJ,IAAM8D,GAAWC,cA1OwC,GA2OfH,mBAAS,MA3OM,sBA2OlDsrB,GA3OkD,MA2OnCC,GA3OmC,SA4OGvrB,mBAAS,MA5OZ,sBA4OlDwrB,GA5OkD,MA4O1BC,GA5O0B,MA+OnDrS,GAAS,uCAAG,4DAAArY,EAAA,4DAIiC,kBAApCqqB,GAAqBhW,aAC5BsW,EAAqBN,GAAqBhW,WAAWC,eAIZ,kBAAlC+V,GAAqB7V,WAC5BoW,EAAmBP,GAAqB7V,SAASF,eAIjD+V,GAAqB9B,cAAgBltB,EAAektB,cAEpDjQ,EAAgB,eAAiB0R,EAAepjB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,KAE1FmhB,GAAqB9B,cAAgBltB,EAAektB,cAEpDjQ,EAAgB0R,EAAepjB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,KApB/D,SAyBVgO,GAAe,GACftX,GAAa,GAKPirB,EAAkB,CAGpBzC,cAA+C,SAAhCiC,GAAqB9pB,OAEhCsgB,EAAWyB,SAAS/qB,KAAI,SAAA8qB,GAEpB,OAAOA,EAAQG,gBAAgBjrB,KAAI,SAAAwC,GAC/B,OAAOA,EAASzC,SAErBqe,OAED,GAGN5X,KAAM,CACFC,GAAInG,EACJywB,YAAayB,EAAenjB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IACtEqf,YAAajQ,EACbkQ,uBAAwByB,EAA0BrjB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IAC5Fuf,aAAcjB,EACdlF,SAAUzB,EAAWyB,SAAS/qB,KAAI,SAAA8qB,GAE9B,MAAO,CACHzO,MAAOiN,EAAWyB,SAASzO,QAAQwO,GACnCuE,aAAY,OAAEvE,QAAF,IAAEA,OAAF,EAAEA,EAASuE,aACvB8B,aAAY,OAAErG,QAAF,IAAEA,OAAF,EAAEA,EAAS0E,oBAAoB7d,QACvC,mBACA,IAEJyf,kBAAmBtG,EAAQG,gBAAgBjrB,KAAI,SAAAwC,GAC3C,MAAO,CAEH6Z,MAAOyO,EAAQG,gBAAgB3O,QAAQ9Z,GAAY,EACnDA,SAAUA,EAASzC,GACnBsxB,eAAsC,KAAf,OAAR7uB,QAAQ,IAARA,OAAA,EAAAA,EAAUiP,kBAMzCqL,WAAYsW,GAA0CN,GAAqBhW,WAC3EG,SAAUoW,GAAsCP,GAAqB7V,SACrEjU,OAAQ8pB,GAAqB9pB,SA1E3B,UA8Ea7D,GAAM0D,KAAN,YAEnByqB,GACFxqB,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA9Ff,QA8EJH,EA9EI,SAqG4HA,EAASvC,KAAvIzG,EArGE,EAqGFA,GAAIgxB,EArGF,EAqGEA,YAAaC,EArGf,EAqGeA,YAAa1uB,EArG5B,EAqG4BA,UAAWwa,EArGvC,EAqGuCA,WAAYG,EArGnD,EAqGmDA,SAAU/W,EArG7D,EAqG6DA,IAAK8C,EArGlE,EAqGkEA,OAAQ8hB,EArG1E,EAqG0EA,QAASoG,EArGnF,EAqGmFA,aAAcD,EArGjG,EAqGiGA,uBAE3GkC,GAA0B,CACtBpzB,KACAgxB,cACAC,cACAC,yBACAnU,aACAG,WACAjU,SACA9C,MACA5D,YACAwoB,UACAoG,iBAGJ7oB,GAAa,GACbsX,GAAe,GACfqI,EAAmB,IACnBsK,EAAqB,IACrBjJ,EAAc,CAEV+B,sBAAuB,GACvBL,SAAU,KAEdtL,GAAa,GA9HH,kDAiIVrW,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCAnIH,0DAAH,qDAyITX,GAAM,uCAAG,WAAOE,GAAP,iDAAAC,EAAA,6DACXD,EAAEE,iBAQ6C,kBAApCoqB,GAAqBhW,aAC5BsW,EAAqBN,GAAqBhW,WAAWC,eAIZ,kBAAlC+V,GAAqB7V,WAC5BoW,EAAmBP,GAAqB7V,SAASF,eAf1C,SAqBP4C,GAAe,GACftX,GAAa,GAKiB,SAA1BvE,EAAekF,SAGX6nB,EADgC,SAAhCiC,GAAqB9pB,OACL,GAGAsgB,EAAWyB,SAAS/qB,KAAI,SAAA8qB,GAEpC,OAAOA,EAAQG,gBAAgBjrB,KAAI,SAAAwC,GAC/B,OAAOA,EAASzC,SAErBqe,QAKmB,SAA1Bta,EAAekF,SAGX6nB,EADgC,SAAhCiC,GAAqB9pB,OACLsgB,EAAWyB,SAAS/qB,KAAI,SAAA8qB,GAEpC,OAAOA,EAAQG,gBAAgBjrB,KAAI,SAAAwC,GAC/B,OAAOA,EAASzC,SAErBqe,OAGa,IAMlB3a,EAAe,CAEjBotB,cAAeA,EAEfrqB,KAAM,CAKFuqB,YAAayB,EAAenjB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IACtEqf,YAAayB,EAAepjB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IACtEsf,uBAAwByB,EAA0BrjB,QAAQ7E,MAAMmH,QAAQ,mBAAoB,IAC5Fuf,aAAcjB,EACdjnB,OAAQ8pB,GAAqB9pB,OAC7B8T,WAAYsW,EACZnW,SAAUoW,EACVtI,SAAUzB,EAAWyB,SAAS/qB,KAAI,SAAA8qB,GAE9B,MAAO,CACHzO,MAAOiN,EAAWyB,SAASzO,QAAQwO,GACnCuE,aAAY,OAAEvE,QAAF,IAAEA,OAAF,EAAEA,EAASuE,aACvB8B,aAAY,OAAErG,QAAF,IAAEA,OAAF,EAAEA,EAAS0E,oBAAoB7d,QACvC,mBACA,IAEJyf,kBAAmBtG,EAAQG,gBAAgBjrB,KAAI,SAAAwC,GAC3C,MAAO,CACH+wB,aAAc/wB,EAAS+wB,aAEvBlX,MAAOyO,EAAQG,gBAAgB3O,QAAQ9Z,GAAY,EACnDA,SAAUA,EAASzC,GACnBsxB,eAAsC,KAAf,OAAR7uB,QAAQ,IAARA,OAAA,EAAAA,EAAUiP,oBA3F1C,UA2GgBtM,GAAM0G,IAAN,mBACPgnB,GACZpvB,GACFqF,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA3HlB,QA2GDH,EA3GC,SAkI6IA,EAASvC,KAArJzG,EAlID,EAkICA,GAAIgxB,EAlIL,EAkIKA,YAAaC,EAlIlB,EAkIkBA,YAAa1uB,EAlI/B,EAkI+BA,UAAWwa,EAlI1C,EAkI0CA,WAAYG,EAlItD,EAkIsDA,SAAU/W,EAlIhE,EAkIgEA,IAAKpG,EAlIrE,EAkIqEA,aAAckJ,EAlInF,EAkImFA,OAAQ8hB,EAlI3F,EAkI2FA,QAASoG,EAlIpG,EAkIoGA,aAAcD,EAlIlH,EAkIkHA,uBAEzHgC,GAAiB,CACblzB,KACAgxB,cACAC,cACAC,yBACAnU,aACAG,WACAjU,SACA1G,YACA4D,MACApG,eACAgrB,UACAoG,iBAIJ7oB,GAAa,GACb2f,EAAmB,IACnBsK,EAAqB,IACrBjJ,EAAc,CAEV+B,sBAAuB,GACvBL,SAAU,KAEdtL,GAAa,GA5JN,kDAgKPrW,QAAQC,IAAR,MAhKO,0DAAH,sDAoKZO,qBAAU,WAIN,GAAsB,OAAlBopB,GAAwB,CAEpBprB,GAAS,CACLrI,KAAM,wBACNE,QAASuzB,QAOtB,CAACprB,GAAUorB,KAGdppB,qBAAU,WAIN,GAA+B,OAA3BspB,GAAiC,CAE7BtrB,GAAS,CACLrI,KAAM,iBACNE,QAASyzB,QAOtB,CAACtrB,GAAUsrB,KAGdtpB,qBAAU,WAGN,UAAI9F,QAAJ,IAAIA,OAAJ,EAAIA,EAAgBxB,UAAW,CAM3B,IAMMkxB,GANQ,OAAG1vB,QAAH,IAAGA,OAAH,EAAGA,EAAgBxB,UAAUlC,QAAO,SAAAgC,GAC9C,IAAwB,IAApBA,EAAEivB,cACF,OAAOjvB,EAAEI,SAASzC,OAIgBC,KAAI,SAAAoC,GAAC,OAAIA,EAAEI,SAASzC,MAE9DioB,EAAmBlkB,EAAexB,WAClCgwB,EAAqBkB,MAI1B,CAAC1vB,IAtlBqD,OA4lBnC4D,mBAAS,IA5lB0B,sBA4lBlD+rB,GA5lBkD,MA4lB7CC,GA5lB6C,MA8lBnDC,GAAiB,WAEnB,IAMI,OAAQxuB,GAAMoE,IAAN,6BACkBspB,IACrB/pB,OAEG,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAQjC,MAAO0qB,GACHxqB,QAAQC,IAAIuqB,GAEZjkB,OAAO1G,MAAM,0CAOf4qB,GAAYvf,IAAMwf,YAGlBC,GAAc,uCAAG,4BAAAtrB,EAAA,sEACAkrB,KADA,OACbntB,EADa,OAGnBktB,GAAOltB,EAAKA,KAAKwtB,WAHE,2CAAH,qDAQpBpqB,qBAAU,WAEF6pB,GAAI/jB,OAAS,GACbmkB,GAAUxkB,QAAQ4kB,KAAKC,UAG5B,CAACT,KAaJ7pB,qBAAU,WAAO,IAAD,EAIZyf,EAAc,CACV+B,sBAAuB9oB,EAEvByoB,SAAQ,OAAEjnB,QAAF,IAAEA,GAAF,UAAEA,EAAgBinB,gBAAlB,aAAE,EAA0B/qB,KAAI,SAAAoC,GAGpC,MAAQ,CACJioB,WAAyB,OAAdvmB,QAAc,IAAdA,OAAA,EAAAA,EAAgBinB,SAASzO,QAAQla,IAAK,EACjD6oB,gBAAiB7oB,EAAEgvB,kBAAkBpxB,KAAI,SAAAm0B,GAErC,OAAO,YAAC,eACDA,GADP,IAEI1iB,SAAU0iB,EAAE9C,cACZnwB,MAAOizB,EAAEjzB,MACTW,aAAcsyB,EAAEtyB,kBAGxB2tB,oBAAqBptB,EAAE+uB,aACvB9B,aAAcjtB,EAAEitB,qBAS7B,CAAC/sB,EAAWkd,EAAe1b,IAI9B,IAAM0tB,GAAW,uCAAG,WAAOhpB,GAAP,mBAAAC,EAAA,6DAChBD,EAAEE,iBADc,UAKN+oB,EAAW,IAAIC,UAEZC,OAAO,QAASnpB,EAAE+B,OAAOkL,MAAM,IACxCgc,EAASE,OAAO,OAAQ,KARZ,SAUWxsB,GAAM,CACzBkB,OAAQ,OACRH,IAAK,UACLM,KAAMirB,IAbE,OAUN1oB,EAVM,OAgBZmnB,EAAwB,UAACnnB,EAASvC,KAAK,UAAf,aAAC,EAAkBzG,IAhB/B,kDAmBZqJ,QAAQC,IAAR,MAnBY,0DAAH,sDAgCjB,OAEI,gBAAC0H,GAAA,EAAD,CACIrG,KAAM8U,EACNoS,gBAAgB,aAEhB5gB,SAAS,SACTC,OAAQ,WACJ+W,EAAmB,IACnBsK,EAAqB,IACrB7S,GAAa,IARrB,UAWI,eAAC1O,GAAA,EAAMrD,OAAP,CAAcrG,MAAO,CAAE0E,gBAAiB,WAAamF,aAAW,EAAhE,SACI,eAACH,GAAA,EAAMI,MAAP,qBAUJ,wBAAMjH,SAAU5B,GAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,CAAYvG,MAAO,CAAE0E,gBAAiB,WAAtC,SAEK3D,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACKsY,EAAc,uDAAkC,4DAIzD,gBAAClB,GAAA,EAAD,CACIze,GAAG,yBACH0e,UAAWta,EACXua,SAAU,SAACC,GAAD,OAAOlE,EAAOkE,IACxBvX,UAAU,OAJd,UAKI,gBAACwX,GAAA,EAAD,CAAKC,SAAS,YAAYC,MAAM,YAAhC,UACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAOI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,wBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,wBACIC,UAAQ,EAER+Z,aAAcwF,GACd5pB,UAAU,8BACV+R,UAAU,MACVC,YAAY,qBAWZvO,IAAK4nB,WAMrB,gBAACrhB,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,+BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BACIC,UAAQ,EACR+Z,aAAcuF,GACd5X,UAAU,OACVC,YAAY,sBACZhS,UAAU,8BAOVyD,IAAK2nB,WAMrB,eAAC,KAAD,CAAiB3a,UA1zB7C,SAAyBhC,GAErB,GAAKA,EAAOiC,YAAZ,CAEA,IAAMC,EAAQC,MAAMC,KAAN,OAAWqR,QAAX,IAAWA,OAAX,EAAWA,EAAYyB,UAJR,EAKLhT,EAAMG,OAAOrC,EAAOsC,OAAOC,MAAO,GAAnDC,EALsB,qBAM7BN,EAAMG,OAAOrC,EAAOiC,YAAYM,MAAO,EAAGC,GAE1C,IAAIqX,EAAa,2BAAQpG,GAAR,IAAoByB,SAAUhT,IAG/CsR,EAAcqG,KA+yBU,SACI,eAAC,KAAD,CAAWpX,YAAY,WAAvB,SACK,SAACC,GAAD,aACG,+CAAKnR,UAAU,WAAWC,MAAO,CAAEmR,WAAY,QAAaD,EAASE,gBAArE,IAAqF5N,IAAK0N,EAASG,SAAnG,iBACK4Q,QADL,IACKA,GADL,UACKA,EAAYyB,gBADjB,aACK,EAAsB/qB,KAAI,SAAC2Y,EAASP,GAIjC,OAGI,eAAC,KAAD,CAAkCQ,YAAaR,EAAMS,WAAYT,MAAOA,EAAxE,SACK,SAACG,GAAD,OAGG,cAFA,CAEA,+BAAK1N,IAAK0N,EAASG,UAAcH,EAASO,gBAA1C,aACI,uBAAK1R,UAAU,oBAAf,UACI,gDAASmR,EAASQ,iBAAlB,aACI,sBAAK3R,UAAU,sBAAsBoF,IAAKmjB,GAASjjB,IAAI,kBAG3D,eAAC,GAAD,CAEI2d,UAAW1R,EAAQ0R,UACnBf,WAAYA,EACZD,cAAeA,GAHV1Q,EAAQ0R,mBAXjBjS,EAAMS,eAwB7BN,EAASa,qBAS1B,eAAChI,GAAA,EAAD,CACIC,OAAK,EACLhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QAJtB,SAOI,uBAAKxF,UAAU,gCAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,SAAWvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WACrEkc,EAAc,2BAGHC,GAHE,IAILyB,SAAS,GAAD,0BAAMzB,QAAN,IAAMA,OAAN,EAAMA,EAAYyB,UAAlB,CAA4B,CAChCV,WAAqB,OAAVf,QAAU,IAAVA,OAAA,EAAAA,EAAYyB,SAASrb,QAAS,EACzC2f,aAAc,GACdG,oBAAqB,GACrBvE,gBAAiB,GACjB8E,kBAAmB,YAOnC,uBAAM3oB,UAAU,kBAAhB,iCAOZ,gBAACwX,GAAA,EAAD,CAAKC,SAAS,aAAaC,MAAM,aAAjC,UAEI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,yCAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIga,aAAcyF,GACd9X,UAAU,OACVC,YAAY,sBACZhS,UAAU,8BAOVyD,IAAK6nB,WAKrB,gBAACthB,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,QALtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,wBAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,gCACI,wBACIjS,KAAK,OACL+K,SAAU,SAAC9B,GAAD,OAAOgpB,GAAYhpB,kBAUrD,eAACoW,GAAA,EAAD,CAAKC,SAAS,WAAWC,MAAM,WAA/B,SACI,gBAAC1N,GAAA,EAAD,CACIC,OAAK,EADT,UA6CI,eAAC,KAAD,UACI,gBAACG,GAAA,EAAD,CAAKnK,MAAO,CAAEwF,UAAW,OAAzB,UACI,uBAAMzF,UAAU,WAAhB,4BAEA,yBACIoD,MAAOxB,GACP5B,UAAU,uCACVkD,SAAU,SAAC9B,GAAD,OAAOuqB,GAAwB,2BAClCD,IADiC,IACX9pB,OAAQR,EAAE+B,OAAOC,UAJlD,SASK2lB,EAAoBnwB,KAAI,SAAAoC,GAAC,OACtB,yBAA6CoI,MAAOpI,EAAEoI,MAAtD,SACKpI,EAAEoV,SADM2Y,EAAoB7T,QAAQla,cASzD,eAAC,KAAD,UACI,eAACoP,GAAA,EAAD,CAAKnK,MAAO,CAAEwF,UAAW,OAAzB,SACI,uBAAKxF,MAAO,CAAEmQ,QAAS,QAAvB,UACI,uBAAMpQ,UAAU,WAAhB,+BACA,wBAAMA,UAAU,WAAhB,oCAA4CtD,QAA5C,IAA4CA,OAA5C,EAA4CA,EAAgBswB,yBAIxE,eAAC,KAAD,UACI,eAAC5iB,GAAA,EAAD,UAII,iCAEI,eAAC3D,GAAA,EAAD,CAAQzG,UAAU,cACd0G,QAAQ,aACR+D,YAAwB,OAAd/N,QAAc,IAAdA,OAAA,EAAAA,EAAgBswB,gBAAiB,GAC3CjnB,QAAS4mB,GAHb,uBAKA,eAAC,WAAD,CAEIM,SAAQ,UAAKrD,GAAL,cACRxqB,KAAMitB,GACN5oB,IAAKgpB,sBAezC,gBAAC9iB,GAAA,EAAMa,OAAP,CAAcvK,MAAO,CAAEua,eAAgB,gBAAiB7V,gBAAiB,WAAzE,UAEI,eAAC8B,GAAA,EAAD,CACIzG,UAAU,uCACV0G,QAAQ,aACRX,QAAS,WACL2T,MAJR,SAOI,uDAEJ,uBAAK1Z,UAAU,2CAAf,UAEI,sBAAKC,MAAO,CAAEqc,YAAa,SACvBtc,UAAU,uCACV+F,QAAS,WAEL6a,EAAmB,IACnBsK,EAAqB,IAKrBjJ,EAAc,CAEV+B,sBAAuB,GACvBL,SAAU,KAEdtL,GAAa,GACbE,GAAe,IAhBvB,SAmBI,6CAEJ,wBACIpgB,KAAK,SACLiL,MAAM,eACNpD,UAAU,6BCrpCzBie,I,cAAiB,SAAC,GAExB,IADHhS,EACE,EADFA,OAKQ0O,EAAgD1O,EAAhD0O,YAAaC,EAAmC3O,EAAnC2O,UAAWsD,EAAwBjS,EAAxBiS,gBAAiBvlB,EAAOsT,EAAPtT,GAW3CwlB,EARUjR,IAAMC,SAAQ,WAC1B,IAAMiR,EAAU,IAAIC,IAIpB,OAHAH,EAAgBI,SAAQ,SAAAlS,GACpBgS,EAAQG,IAAInS,EAAI4I,OAAOrc,OAEpB,YAAIylB,EAAQpJ,YACpB,CAACrc,EAAIulB,IAEuBtlB,KAAI,SAAAiN,GAE/B,MAAe,SAAXA,EACO,CACHzC,MAAO,OACPua,MAAO,QAIA,UAAX9X,EACO,CACHzC,MAAO,QACPua,MAAO,SAKA,WAAX9X,EACO,CACHzC,MAAO,SACPua,MAAO,UAIR,QAIX,OACI,0BACI3d,UAAU,cACVoD,MAAOuX,EACPzX,SAAU,SAAA9B,GAGNwZ,EAAUxZ,EAAE+B,OAAOC,YAASJ,IANpC,UAUI,yBAAQI,MAAM,GAAd,iBACC+a,EAAevlB,KAAI,SAACiN,EAAQC,GAAT,OAEhB,yBAAgB1C,MAAK,OAAEyC,QAAF,IAAEA,OAAF,EAAEA,EAAQzC,MAA/B,gBACKyC,QADL,IACKA,OADL,EACKA,EAAQ8X,OADA7X,WCrCvBsF,GAASC,KAAOC,IAAV,ifAgCZ,SAASC,GAAT,GAAmC,IAAlBC,EAAiB,EAAjBA,QAASpM,EAAQ,EAARA,KAAQ,EAW1BqM,oBAAS,CACTD,UACApM,QACDggB,cAAYC,mBACXC,iBAAeC,iBATf7T,EAN0B,EAM1BA,cACAC,EAP0B,EAO1BA,kBACAC,EAR0B,EAQ1BA,aACAC,EAT0B,EAS1BA,KACAC,EAV0B,EAU1BA,WAQJ,OACI,mDAAWJ,KAAX,cAEI,wBAAOzL,MAAO,CAAEitB,aAAc,OAA9B,SACKthB,EAAahT,KAAI,SAAAmT,GAAW,OACzB,+CAAQA,EAAYC,uBAApB,aACKD,EAAY/M,QAAQpG,KAAI,SAAAqT,GAAM,OAC3B,gDAAQA,EAAOC,eAAe,CAC1BjM,MAAO,CAAEktB,SAAUlhB,EAAOkhB,SAAUznB,MAAOuG,EAAOvG,UADtD,cAEKuG,EAAOE,OAAO,UACf,+BAAMF,EAAOqU,UAAYrU,EAAOE,OAAO,UAAY,sBAMvE,kDAAWR,KAAX,aACKE,EAAKjT,KAAI,SAACwT,EAAKtG,GAEZ,OADAgG,EAAWM,GAEP,+CAAQA,EAAIC,eAAZ,aACKD,EAAIE,MAAM1T,KAAI,SAAA2T,GACX,OAAO,+CAASA,EAAKC,aAAa,KAA3B,aAMH,sBAAKxM,UAAU,gBAAf,SAAiCuM,EAAKJ,OAAO,6BASjF,IAAMihB,GAAY,uCAAG,WAAOhsB,EAAGV,EAASF,EAAUS,GAA7B,iBAAAI,EAAA,6DAEXoqB,EAAWrqB,EAAEzI,GAFF,SAObsI,GAAa,GAPA,SASIlD,GAAMoQ,OAAN,mBACDsd,IAAY/pB,OAEpB,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAxBhB,OASbH,EATa,OAkCbnB,EAAS,CACLrI,KAAM,gBACNE,QAASsJ,EAASvC,KAAKA,OAG3B6B,GAAa,GAvCA,kDA2Cbe,QAAQC,IAAI,QAAZ,MAEAsG,OAAO1G,MAAM,wCA7CA,0DAAH,4DAgSHwrB,I,GAAAA,GA7Of,YAAkE,IAA3CjxB,EAA0C,EAA1CA,QAASic,EAAiC,EAAjCA,aAAciV,EAAmB,EAAnBA,gBAEpC9sB,EAAWC,cACXC,EAAUC,cAH6C,EAKjCL,mBAAS,MALwB,oBAKtDhE,EALsD,KAK9CixB,EAL8C,OAO3BjtB,oBAAS,GAPkB,oBAOtDU,EAPsD,KAO3CC,EAP2C,KAS7DuB,qBAAU,WAGN,GAAe,OAAXlG,EAAiB,CAKbkE,EAAS,CACLrI,KAAM,gBACNE,QAASiE,OAOtB,CAACkE,EAAUlE,IAGd,IAAM2Q,EAAeC,IAAMC,SAEvB,iBAAM,CACF,CACI7G,OAAQ,OACR0G,SAAU,cACVwgB,SAAU,GACVL,SAAU,GACVznB,MAAO,GACPuZ,OAAQvE,IAEZ,CACIpU,OAAQ,cACR0G,SAAU,cACVwgB,SAAU,GACVL,SAAU,GACVznB,MAAO,GACPuZ,OAAQvE,IAgDZ,CACIpU,OAAQ,SACR0G,SAAU,SACVwgB,SAAU,GACVL,SAAU,GACVznB,MAAO,GACPuZ,OAAQhB,GACR6C,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAGL,GAAIA,EAAKH,IAAIqS,SAAS7c,OAAQ,CAE1B,GAAiC,SAA7B2K,EAAKH,IAAIqS,SAAS7c,OAClB,OACI,uBAAK5B,UAAU,mBAAf,UACI,uBAAMC,MAAO,CAAEE,MAAO,eAAtB,kBACA,uBAAMH,UAAU,gBAI5B,GAAiC,UAA7BuM,EAAKH,IAAIqS,SAAS7c,OAClB,OACI,uBAAK5B,UAAU,mBAAf,UACI,uBAAMC,MAAO,CAAEE,MAAO,eAAgBsb,QAAS,wBAA/C,mBACA,uBAAMzb,UAAU,iBAK5B,GAAiC,WAA7BuM,EAAKH,IAAIqS,SAAS7c,OAClB,OACI,uBAAK5B,UAAU,mBAAf,UACI,uBAAMC,MAAO,CAAEE,MAAO,iBAAtB,oBACA,uBAAMH,UAAU,kBAMhC,OAAO,OAKf,CACIsG,OAAQ,IACR2Y,QAAQ,EACRuO,SAAU,GACVL,SAAU,OACVznB,MAAO,OACPob,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAGL,OAAO,wBACHnJ,MAAM,QACNjL,KAAK,SACL4N,QAAS,WACLwnB,EAAUhhB,EAAKH,IAAIqS,UAEnB6O,GAAgB,IAEpBttB,UAAU,wBAKtB,CACIsG,OAAQ,KACR2Y,QAAQ,EACRuO,SAAU,GACVL,SAAU,OACVznB,MAAO,OACPob,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAEL,OAAQ,sBAAKvM,UAAU,gCAAf,SACJ,sBAAKoF,IAAK6X,GAAUjd,UAAU,oBAAoBsF,IAAI,cAAcS,QAAS,WACzEwnB,EAAUhhB,EAAKH,IAAIqS,UAEnBpG,GAAa,UAQ7B,CACI/R,OAAQ,MACR2Y,QAAQ,EACRuO,SAAU,GACVL,SAAU,OACVznB,MAAO,OAEPob,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAGL,OAAQ,sBAAKvM,UAAU,gCAAf,SACJ,sBAAKoF,IAAK6M,GAAW3M,IAAI,eAAetF,UAAU,sBAAsBC,MAAO,CAAE0H,OAAQ,OAAQjC,MAAO,QAAUK,QAAS,WAEvHwC,OAAOuG,QAAQ,+CACXse,GAAa7gB,EAAKH,IAAIqS,SAAU/d,EAASF,EAAUS,aAS3E,CAACoX,EAAciV,IAInB,OAGItsB,EACI,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,4DAMJ,eAAC,GAAD,UACI,eAAC,GAAD,CACIwL,QAASyB,EACT7N,KAAMhD,OChUfqxB,I,OA3DQ,SAAC,GAAuC,IAArCC,EAAoC,EAApCA,aAAcJ,EAAsB,EAAtBA,gBAG9B5wB,EAAiBiH,aAAY,SAAC1L,GAAD,OAAWA,EAAMqE,OAAOI,kBAHD,EAMxB4D,mBAAS,IANe,8BAa1D,OAEI,gBAACqJ,GAAA,EAAD,CACIrG,KAAMoqB,EAEN9jB,SAAS,SACTC,OAAQ,WACJyjB,GAAgB,IALxB,UAQI,eAAC3jB,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,2BAEJ,wBAAMjH,SAlBC,aAkBP,UACI,eAAC6G,GAAA,EAAMnD,KAAP,UACI,eAACwD,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHkK,cAAe,OACf3E,aAAc,OACdmoB,UAAW,aANnB,SAQI,eAAC,KAAD,UACI,eAACvjB,GAAA,EAAD,UAEI,wBAAMpK,UAAU,WAAhB,iBAA4BtD,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAgBoC,IAA5C,iBAOhB,eAAC6K,GAAA,EAAMa,OAAP,UACI,wBACIpH,MAAM,OACNjL,KAAK,SACL4N,QAAS,kBAAM6nB,UAAUC,UAAUC,UAAUpxB,EAAeoC,MAC5DkB,UAAU,0BC6HnB+tB,GAxKO,WAAO,IAAD,EAEUztB,oBAAS,GAFnB,oBAEjBU,EAFiB,KAENC,EAFM,KAIlB7E,EAAUuH,aAAY,SAAC1L,GAAD,OAAWA,EAAMqE,OAAOF,WAE9CsE,EAAUC,cAEVH,EAAWC,cAEXvH,EAAiByK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKC,kBAKzDsJ,qBAAU,WAGN,IAAI6f,EAAa,IAAIC,gBACjB0L,EAAsB,IAAI1L,gBAqF9B,OApFA,sBAAC,8BAAAjhB,EAAA,sEAEOJ,GAAa,GAFpB,SAM8BlD,GAAMoE,IAEzB,WACA,CACIqgB,OAAQH,EAAWG,SAEzB9gB,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAzBhC,cAMaH,EANb,OA+BO0gB,EAAa,KAGb7hB,EAAS,CACLrI,KAAM,cACNE,QAASsJ,EAASvC,OApC7B,SA0CsCrB,GAAMoE,IAAN,yBACTjJ,EADS,WAE3B,CACIspB,OAAQwL,EAAoBxL,SAElC9gB,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA5DhC,OA0CamsB,EA1Cb,OAkEOjsB,QAAQC,IAAI,mBAAoBgsB,GAIhCD,EAAsB,KAEtBxtB,EAAS,CACLrI,KAAM,gBACNE,QAAS41B,EAAiB7uB,OAG9B6B,GAAa,GA7EpB,kDAgFOe,QAAQC,IAAR,MAhFP,yDAAD,GAoFO,kCAAMogB,SAAN,aAAM,EAAYK,WAC1B,CAACliB,EAAUE,EAASxH,IAzGC,MA6GsBoH,oBAAS,GA7G/B,oBA6GjB8gB,EA7GiB,KA6GAC,EA7GA,OA8Gc/gB,oBAAS,GA9GvB,oBA8GjB8X,EA9GiB,KA8GFC,EA9GE,OA+GgB/X,oBAAS,GA/GzB,oBA+GjBotB,EA/GiB,KA+GHJ,EA/GG,KAkHxB,OAEI,uBAAKttB,UAAU,iBAAf,UAGI,qBAAIA,UAAU,wBAAd,4BAKA,uBAAKA,UAAU,+BAAf,UACI,sBAAKC,MAAO,CAAE0H,OAAQ,OAASvC,IAAK+M,GAAS7M,IAAI,aAAaS,QAAS,WACnEsb,GAAmB,MAEvB,uBAAMrhB,UAAU,6BAAhB,kCAMHgB,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,4DAIR,eAAC,GAAD,CAAa5D,QAASA,EAClBic,aAAcA,EACdiV,gBAAiBA,IAEzB,eAAC,GAAD,CACItkB,aAAcqY,EACdtY,UAAWqY,IAEdhJ,EAAgB,eAAC,GAAD,CACbC,aAAcA,EACdD,cAAeA,IAAoB,KACtCsV,EAAe,eAAC,GAAD,CACZJ,gBAAiBA,EACjBI,aAAcA,IAAmB,SC9IlCQ,GAjCe,WAE1B,IAAMxtB,EAAUC,cAiBhB,OAbA6B,qBAAU,WAEM5D,aAAaC,QAAQ,QAI7B6B,EAAQoB,KAAK,OAIlB,IAIC,uBAAK9B,UAAU,0BAAf,UAGI,eAAC,GAAD,IACA,sBAAKA,UAAU,cAAf,SAEI,eAAC,GAAD,U,oBClCD,I,OAAA,IAA0B,gDCiB1BmuB,ICjBA,IDKQ,SAACpuB,GACpB,OACI,uBAAKC,UAAU,uBAAf,UACI,uBAAMA,UAAU,kBAAhB,4GACA,sBAAKA,UAAU,6BAAf,SAEI,sBAAKA,UAAU,uBAAuBoF,IAAKgpB,GAAoB9oB,IAAI,gCE0CpE+oB,GA9CI,SAAC,GAA4D,IAA1DC,EAAyD,EAAzDA,eAAgBC,EAAyC,EAAzCA,kBAAmBhuB,EAAsB,EAAtBA,SAAUZ,EAAY,EAAZA,MACzDS,EAA0CT,EAA1CS,QAASouB,EAAiC7uB,EAAjC6uB,UAAWC,EAAsB9uB,EAAtB8uB,UAAW7sB,EAAWjC,EAAXiC,OAEjClB,EAAUC,cAEhB,OACE,gBAACgJ,GAAA,EAAD,CACErG,KAAMgrB,EACN1kB,SAAS,SACTC,OAAQ,WACN0kB,GAAkB,IAJtB,UAOE,eAAC5kB,GAAA,EAAMnD,KAAP,UACE,uBACExG,UAAU,eACVC,MAAO,CAAEmQ,QAAS,OAAQse,cAAe,UAF3C,UAIE,gCAAOtuB,IACP,uDAAuBwB,EAAvB,OACA,uDAAuB6sB,EAAvB,OACA,gCAAOD,SAGX,eAAC7kB,GAAA,EAAMa,OAAP,UACE,eAAC/D,GAAA,EAAD,CACEC,QAAQ,aACR1G,UAAU,uCACV+F,QAAS,WAGP,GAFAwoB,GAAkB,GAClBhuB,EAAS,CAAEH,QAAS,GAAIwB,OAAQ,GAAI6sB,UAAW,GAAID,UAAW,KAC1B,OAAhC5vB,aAAaC,QAAQ,OAIvB,OAHAD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,uBACxBd,EAAQoB,KAAK,MATnB,SAcE,kDC9CK,OAA0B,0CCc1B6sB,GAVW,SAAC,GAAiB,IAAfvuB,EAAc,EAAdA,QACzB,OACI,uBAAKJ,UAAU,iCAAf,UAEI,sBAAKoF,IAAKwpB,GAAe5uB,UAAU,aAAasF,IAAI,eACpD,gCAAOlF,Q,yCCyNJyuB,GA3NS,SAAC,GAYlB,IAXNl2B,EAWK,EAXLA,GACAkO,EAUK,EAVLA,KACAiP,EASK,EATLA,cACAvV,EAQK,EARLA,SACAuuB,EAOK,EAPLA,WACAC,EAMK,EANLA,QACA/Y,EAKK,EALLA,aACAgZ,EAIK,EAJLA,eACA/E,EAGK,EAHLA,cACAgF,EAEK,EAFLA,eAIMC,GAFD,EADLC,eAGkBC,gBAEYC,GAAmBrZ,EAAzCC,UAAyCD,EAA9BE,UAA8BF,EAAnBqZ,OAAOhZ,EAAYL,EAAZK,QAJhC,EAOqC/V,oBAAS,GAP9C,oBAOEkU,EAPF,KAOiBzE,EAPjB,OASiDzP,mBAAS,MAT1D,oBASEgvB,EATF,KASuBC,EATvB,KAWCC,EAAsB,SAACpuB,GAC5B2O,GAAiB,SAAAI,GAAiB,OAAKA,KAYtC2e,EAVIta,EAUO,2BACPua,GADM,sCAEIzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAc2B,EACdnU,SAAU2tB,KAdD,2BACPP,GADM,sCAEIzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAc2B,EACdnU,SAAUP,EAAE+B,OAAOC,UAclB6mB,GAMFgF,EAJIza,EAIW,CAAErR,OAAQ,CAAEC,MAA+B,OAAxBksB,EAA+B,GAAKA,IAHvDluB,EAGgFzI,IAQlG,OACC,gBAACqR,GAAA,EAAD,CACCC,OAAK,EACLjK,UAAU,YAFX,cAGGiqB,EAAgB,eAAC,KAAD,UAClB,eAAC7f,GAAA,EAAD,UACC,uBAAKpK,UAAU,iBAAf,UACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,EAA9C,OACA,uBAAM5G,MAAO,CAAEE,MAAO,MAAOwF,SAAU,SAAvC,sBAIF,eAAC,KAAD,UACC,eAACyE,GAAA,EAAD,UACC,sBAAKpK,UAAU,iBAAf,SACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,WAKjD,eAAC,KAAD,UACEojB,EAAgB,gBAAC7f,GAAA,EAAD,WAChB,uBAECpK,UAAU,oBACVkD,SAAU,SAAC9B,GACVb,EAAS,IACTgvB,EAAuBnuB,EAAE+B,OAAOC,OAChC0rB,EAAW,2BACPC,GADM,sCAEIzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAc2B,EACdnU,SAAUP,EAAE+B,OAAOC,UAIrB6rB,EAAe7tB,EAAGzI,IAfpB,UAiBC,uBAAMqH,UAAU,qBAAhB,SACEgW,EAAaG,YAlBhB,OAoBEkZ,QApBF,IAoBEA,OApBF,EAoBEA,EAAOz2B,KAAI,SAAAoC,GAEX,OAAyB,IAArBq0B,EAAMna,QAAQla,GAEhB,uBAAKgF,UAAU,0BAAf,UACEhF,EACD,wBAECqP,UAAQ,EACRlS,KAAK,QACLiL,MAAK,UAAKpI,GACVmO,KAAM+lB,EAAYv2B,EAClBqH,UAAU,iBACVyK,WAAU+J,EACVvU,MAAOuU,EAAgB,CAAEiH,QAAS,OAAU,MAPvCzgB,KAHuCA,GAiB/C,uBAAKgF,UAAU,0BAAf,UACEhF,EACD,wBAEC7C,KAAK,QACLiL,MAAK,UAAKpI,GACVmO,KAAM+lB,EAAYv2B,EAClBqH,UAAU,iBACVyK,WAAU+J,EACVvU,MAAOuU,EAAgB,CAAEiH,QAAS,OAAU,MANvCzgB,KAHuCA,MAiBhD,uBAAMgF,UAAU,sBAAhB,SACEgW,EAAaI,eAKfC,EAAU,uBAAKrW,UAAU,gCAAf,UACV,wBAEC7H,KAAK,WACLiL,MAAO,KACPF,SAAUssB,EACVrmB,KAAM+lB,EAAYv2B,IAGnB,8EACQ,QAGT,gBAACyR,GAAA,EAAD,WAEC,uBACCpK,UAAU,oBACVkD,SAAU,SAAC9B,GACVb,EAAS,IACTgvB,EAAuBnuB,EAAE+B,OAAOC,OAChC0rB,EAAW,2BACPC,GADM,sCAEIzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAc2B,EACdnU,SAAUP,EAAE+B,OAAOC,WAVvB,UAcC,uBAAMpD,UAAU,qBAAhB,SACEgW,EAAaG,YAfhB,OAkBEkZ,QAlBF,IAkBEA,OAlBF,EAkBEA,EAAOz2B,KAAI,SAAAoC,GAEX,OACC,uBAAKgF,UAAU,0BAAf,UACEhF,EACD,wBAEC7C,KAAK,QACLiL,MAAK,UAAKpI,GACVmO,KAAM+lB,EAAYv2B,EAClB8R,WAAU+J,EACVvU,MAAOuU,EAAgB,CAAEiH,QAAS,OAAU,MALvCzgB,KAHuCA,MAchD,uBAAMgF,UAAU,sBAAhB,SACEgW,EAAaI,eAIfC,EACA,uBAAKrW,UAAU,gCAAf,UACC,wBACC7H,KAAK,WACLiL,MAAO,KACPF,SAAUssB,EACVrmB,KAAM+lB,EAAYv2B,IAEnB,8EAEC,cCDMoa,GAnNY,SAAC,GAUrB,IATNpa,EASK,EATLA,GACAkO,EAQK,EARLA,KACAiP,EAOK,EAPLA,cACAU,EAMK,EANLA,kBACAsY,EAKK,EALLA,WACAC,EAIK,EAJLA,QACAC,EAGK,EAHLA,eACA/E,EAEK,EAFLA,cACAwF,EACK,EADLA,uBAGQtZ,EAA+BK,EAA/BL,UAAWC,EAAoBI,EAApBJ,UAAWvK,EAAS2K,EAAT3K,KAExBqjB,EAAYE,eAJb,EAMmC9uB,mBAAS,IAN5C,oBAMEovB,EANF,KAMgBC,EANhB,KAQCC,EAAiB,SAACxuB,GAKvB,IAAIyuB,EAAMzuB,EAAE+B,OAAOgG,KACf2mB,EAAYD,EAAIE,YAAY,KAC5BC,EAAWH,EAAIxnB,UAAU,EAAGynB,GAI5BG,GAAgB,EAEdC,EAAsBR,EAAa92B,KAAI,SAACoC,GAC7C,OAAIg1B,IAAah1B,EAAEoR,KAClBpR,EAAEm1B,IAAM/uB,EAAE+B,OAAOC,MACjB6sB,GAAgB,EAETj1B,GAEAA,KAIJi1B,GACJC,EAAoBpuB,KAAK,CACxBsK,IAAK4jB,EACLG,IAAK/uB,EAAE+B,OAAOC,QAKhBusB,EAAgB,YAAIO,KAkCrB,OA9BA1tB,qBAAU,WACT,GAAIktB,EAAapnB,OAAS,EAAG,EACD,WAC1B,IAAI3G,EAEJA,EAAQ,2BACJotB,GADI,sCAGMzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAa,GAAD,OAAK2B,GACjBnU,SAAU+tB,KAIZZ,EAAWntB,GAGPsoB,GACHwF,EAAuB92B,EAAI+2B,EAAc5Z,GAK3Csa,MAEC,CAACV,IAKH,gBAAC1lB,GAAA,EAAD,CACCC,OAAK,EACLjK,UAAU,YAFX,UAIEiqB,EAAgB,eAAC,KAAD,UAChB,eAAC7f,GAAA,EAAD,UACC,uBAAKpK,UAAU,iBAAf,UACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,EAA9C,OACA,uBAAM5G,MAAO,CAAEE,MAAO,MAAOwF,SAAU,SAAvC,sBAIF,eAAC,KAAD,UACC,eAACyE,GAAA,EAAD,UACC,sBAAKpK,UAAU,iBAAf,SACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,WAMlD,eAAC,KAAD,CAAK7G,UAAU,gCAAf,SAGC,gBAACoK,GAAA,EAAD,WAMEyB,EAAKjT,KAAI,SAAC+kB,GAEV,GAAoB,IAAhBA,EAAM1I,MAET,OACC,uCAKC,uBAAoBjV,UAAU,qBAA9B,UACC,uBAAMA,UAAU,8BAA8BC,MAAO,CAAEwb,QAAS,IAAK9T,OAAQ,IAAK0oB,SAAU,UAA5F,SACE1S,EAAMva,QAER,uBAAKpD,UAAU,sCAAf,UACC,uBAAMA,UAAU,wBAAhB,SAAyCmW,IACzC,uBAAMnW,UAAU,wBAAhB,SAAyCoW,SANjCuH,EAAMhlB,IAUhB,uBAAoBqH,UAAU,qBAA9B,UAEC,uBAAMA,UAAU,8BAA8BC,MAAO,CAAEwb,QAAS,IAAK9T,OAAQ,IAAK0oB,SAAU,UAA5F,SACE1S,EAAMva,QAGPua,EAAM2S,KAAK13B,KAAI,SAACoC,GAChB,OACC,sBAAgBgF,UAAU,mDAA1B,SACkB,IAAhB2d,EAAM1I,MACJ,sBAAKjV,UAAU,uBAAf,SAAuChF,EAAEoI,QACzC,sBAAKpD,UAAU,uBAAuBC,MAAO,CAAEwb,QAAS,IAAK9T,OAAQ,IAAK0oB,SAAU,UAApF,SAAiGr1B,EAAEoI,SAH7FpI,EAAErC,SARLglB,EAAMhlB,UAyBnBkT,EAAKjT,KAAI,SAAC+kB,GACV,OAGC,uBAAoB3d,UAAU,qBAA9B,UACC,uBAAMA,UAAU,8BAAhB,SACE2d,EAAMva,QAIPua,EAAM2S,KAAK13B,KAAI,SAACoC,GAChB,OACC,sBAAgBgF,UAAU,mDAA1B,SACC,sBAAKA,UAAU,sBAAf,SAEEiqB,EACA,wBACC5f,UAAQ,EACRnH,SAAU0sB,EACVz3B,KAAK,QACLiL,MAAOpI,EAAEoI,MACT+F,KAAMwU,EAAMva,MAAQ,IAAM8rB,EAC1BlvB,UAAU,mBAKX,wBACCkD,SAAU0sB,EACVz3B,KAAK,QACLiL,MAAOpI,EAAEoI,MACT+F,KAAMwU,EAAMva,MAAQ,IAAM8rB,EAC1BlvB,UAAU,sBApBJhF,EAAErC,SARLglB,EAAMhlB,gBChBR43B,I,OAnJM,SAAC,GAWf,IAVN53B,EAUK,EAVLA,GACAkO,EASK,EATLA,KACAiP,EAQK,EARLA,cACAvV,EAOK,EAPLA,SACAuuB,EAMK,EANLA,WAEAE,GAIK,EALLD,QAKK,EAJLC,gBACA/E,EAGK,EAHLA,cACAgF,EAEK,EAFLA,eAGMuB,EAAS,CACdhrB,aAAc,OACdC,UAAW,QAINgrB,EAAmB,SAACrvB,GAEzBb,EAAS,IAEL0pB,GACHgF,EAAe7tB,IAIO,KAAnBA,EAAE+B,OAAOC,OAkBkB,KAA1BhC,EAAE+B,OAAOC,MAAMkH,SAjBnBwkB,GAAW,SAACC,GAAD,mBAAC,eAGRA,GAHO,sCAIGzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAc2B,EACdnU,SACCP,EAAE+B,OAAOC,MAAMmH,QACd,mBACA,WA6BN,OACC,gBAACP,GAAA,EAAD,CACCC,OAAK,EACLjK,UAAU,YAFX,UAIEiqB,EAAgB,eAAC,KAAD,UAChB,gBAAC7f,GAAA,EAAD,WACC,uBAAKpK,UAAU,iBAAf,UACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,EAA9C,OACA,uBAAM5G,MAAO,CAAEE,MAAO,MAAOwF,SAAU,SAAvC,kBAEkB,iBAAlBmQ,EAAmC,gCAAO,yBAAiC,gCAAO,+BAGpF,eAAC,KAAD,UACC,gBAAC1L,GAAA,EAAD,WACC,sBAAKpK,UAAU,iBAAf,SACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,OAE5B,iBAAlBiP,EAAmC,gCAAO,yBAAiC,gCAAO,+BAItF,eAAC,KAAD,UACEmU,EAAgB,eAAC7f,GAAA,EAAD,UAEG,iBAAlB0L,EACA,2BACCzL,UAAQ,EACRrK,UAAU,yCAEVmJ,KAAM7J,SAAS3G,GACfR,KAAK,OACL4Z,UAAU,MACV7O,SAAUutB,EACVxwB,MAAOuwB,IAGR,2BACCnmB,UAAQ,EACRrK,UAAU,yCACVmJ,KAAMxQ,EACNR,KAAK,OACL4Z,UAAU,OACV7O,SAAUutB,EACVxwB,MAAOuwB,MAMT,eAACpmB,GAAA,EAAD,UAEoB,iBAAlB0L,EACA,2BACC9V,UAAU,0CACVrH,GAAG,iBACHR,KAAK,OACLgR,KAAMxQ,EACNoZ,UAAU,MACV7O,SAAUutB,EACVxwB,MAAOuwB,IAGR,2BACCxwB,UAAU,0CACVrH,GAAG,iBACHR,KAAK,OACL4Z,UAAU,OACV7O,SAAUutB,EACVxwB,MAAOuwB,a,mBC0EAE,GAlNU,SAAC,GAWnB,IAVN/3B,EAUK,EAVLA,GACAkO,EASK,EATLA,KACAiP,EAQK,EARLA,cACAQ,EAOK,EAPLA,QAEAwY,GAKK,EANLvuB,SAMK,EALLuuB,YACAC,EAIK,EAJLA,QACAC,EAGK,EAHLA,eACA/E,EAEK,EAFLA,cACAgF,EACK,EADLA,eAKM7K,EAAe,CAAEhhB,MAAO,GAAIua,MAAO,iBAErCgT,EAAmBra,EAAQ1d,KAAI,SAAAiN,GAClC,OAAO,2BAAKA,GAAZ,IAAoB8X,MAAO9X,EAAOzC,WAI/Bgb,EAAO,CAAIgG,GAAJ,mBAAqBuM,IAG1BC,EAAoB,SAAA7wB,GACzB,OACC,eAAC,KAAW6wB,kBAAZ,2BAAkC7wB,GAAlC,aACC,sBAAKqF,IAAKwiB,GAActiB,IAAI,gBAAgBrF,MAAO,CAAE0H,OAAQ,eAM1DkpB,EAAe,SAACzvB,GAGrB0tB,EAAW,2BACPC,GADM,sCAEIzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAa,GAAD,OAAK2B,GACjBnU,SAAUP,EAAEgC,UAIV6mB,GACHgF,EACC,CACC9rB,OACA,CACCC,MAAOhC,EAAEgC,MACT+F,KAAMxQ,IAELA,IAMN,OACC,gBAACqR,GAAA,EAAD,CACCC,OAAK,EACLjK,UAAU,qBAFX,UAIEiqB,EAAgB,eAAC,KAAD,UAChB,eAAC7f,GAAA,EAAD,UACC,uBAAKpK,UAAU,iBAAf,UACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,EAA9C,OACA,uBAAM5G,MAAO,CAAEE,MAAO,MAAOwF,SAAU,SAAvC,sBAIF,eAAC,KAAD,UACC,eAACyE,GAAA,EAAD,UACC,sBAAKpK,UAAU,iBAAf,SACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,WAKlD,eAAC,KAAD,UAEkB,eAACuD,GAAA,EAAD,UAEhB,eAAC,KAAD,CACCga,aAAcA,EACd0M,WAAY,CAAEF,qBACdJ,OAAQ,CACPO,QAAS,SAACC,EAAY/4B,GAAb,mBAAC,eACN+4B,GADK,IAERrsB,gBAAiB,0BACjBe,MAAO,OACPye,OAAQ,mCACR8M,aAAc,SACdtpB,OAAQ,OACRupB,UAAW,OACX,UAAW,CACVtrB,YAAa,4BAEd,4CAA6C,CAC5CF,MAAO,UAITyrB,KAAM,SAACH,EAAY/4B,GAAb,mBAAC,eACH+4B,GADE,IAELrsB,gBAAiB,0BACjBe,MAAO,OACPye,OAAQ,kBACRiN,UAAW,OACX,4CAA6C,CAC5C1rB,MAAO,UAITG,OAAQ,SAACmrB,EAAY/4B,GAAb,mBAAC,eACL+4B,GADI,IAEP7W,WAAYliB,EAAMo5B,UACf,iBACAp5B,EAAMq5B,WACL,iBACA,KAEJnxB,MAAOlI,EAAMo5B,UACV,iBACAp5B,EAAMq5B,WACL,QACA,oBAELC,mBAAoB,SAACP,EAAY/4B,GAAb,mBAAC,eACjB+4B,GADgB,IAEnB5gB,QAAS,WAIXlN,SAAU2tB,EACVzS,QAASA,YCuDAoT,GAlMS,SAAC,GAYlB,IAXN74B,EAWK,EAXLA,GACAkO,EAUK,EAVLA,KACAiP,EASK,EATLA,cACAS,EAQK,EARLA,aAEAuY,GAMK,EAPLvuB,SAOK,EANLuuB,YACAC,EAKK,EALLA,QAEAC,GAGK,EAJLyC,OAIK,EAHLzC,gBACA/E,EAEK,EAFLA,cACAwF,EACK,EADLA,uBAGMP,EAAYE,eAFb,EAImC9uB,mBAAS,IAJ5C,oBAIEovB,EAJF,KAIgBC,EAJhB,KAMCC,EAAiB,SAACxuB,GAKvB,IAAIyuB,EAAMzuB,EAAE+B,OAAOgG,KACf2mB,EAAYD,EAAIE,YAAY,KAC5BC,EAAWH,EAAIxnB,UAAU,EAAGynB,GAI5BG,GAAgB,EAEdC,EAAsBR,EAAa92B,KAAI,SAACoC,GAC7C,OAAIg1B,IAAah1B,EAAEoR,KAClBpR,EAAEm1B,IAAM/uB,EAAE+B,OAAOC,MACjB6sB,GAAgB,EAETj1B,GAEAA,KAIJi1B,GACJC,EAAoBpuB,KAAK,CACxBsK,IAAK4jB,EACLG,IAAK/uB,EAAE+B,OAAOC,QAKhBusB,EAAgB,YAAIO,KAkCrB,OA9BA1tB,qBAAU,WACT,GAAIktB,EAAapnB,OAAS,EAAG,EACD,WAC1B,IAAI3G,EAEJA,EAAQ,2BACJotB,GADI,sCAGMzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAa,GAAD,OAAK2B,GACjBnU,SAAU+tB,KAIZZ,EAAWntB,GAGPsoB,GACHwF,EAAuB92B,EAAI+2B,EAAc5Z,GAK3Csa,MAEC,CAACV,IAKH,gBAAC1lB,GAAA,EAAD,CACCC,OAAK,EACLjK,UAAU,YAFX,UAIEiqB,EAAgB,eAAC,KAAD,UAChB,eAAC7f,GAAA,EAAD,UACC,uBAAKpK,UAAU,iBAAf,UACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,EAA9C,OACA,uBAAM5G,MAAO,CAAEE,MAAO,MAAOwF,SAAU,SAAvC,sBAIF,eAAC,KAAD,UACC,eAACyE,GAAA,EAAD,UACC,sBAAKpK,UAAU,iBAAf,SACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,WAKlD,eAAC,KAAD,CAAK7G,UAAU,gCAAf,SAEC,gBAACoK,GAAA,EAAD,WAGEmM,EAAa3d,KAAI,SAAC+kB,GAElB,GAAoB,IAAhBA,EAAM1I,MAET,OAEC,uBAAoBjV,UAAU,qBAA9B,UACC,uBAAMA,UAAU,8BAA8BC,MAAO,CAAEwb,QAAS,IAAK9T,OAAQ,IAAK0oB,SAAU,UAA5F,SACE1S,EAAMva,QAGPua,EAAM2S,KAAK13B,KAAI,SAACoC,GAChB,OACC,sBAAgBgF,UAAU,uCAA1B,SACkB,IAAhB2d,EAAM1I,MACJ,sBAAKjV,UAAU,uBAAf,SAAuChF,EAAEoI,QACzC,sBAAKpD,UAAU,uBAAuBC,MAAO,CAAEwb,QAAS,IAAK9T,OAAQ,IAAK0oB,SAAU,UAApF,SAAiGr1B,EAAEoI,SAH7FpI,EAAErC,SAPLglB,EAAMhlB,OAwBlB4d,EAAa3d,KAAI,SAAC+kB,GAClB,OAGC,uBAAoB3d,UAAU,qBAA9B,UACC,uBAAMA,UAAU,8BAAhB,SACE2d,EAAMva,QAIPua,EAAM2S,KAAK13B,KAAI,SAACoC,GAChB,OACC,sBAAgBgF,UAAU,uCAA1B,SAIC,sBAAKA,UAAU,sBAAf,SAEEiqB,EACA,wBACC5f,UAAQ,EACRnH,SAAU0sB,EACVz3B,KAAK,QACLiL,MAAOpI,EAAEoI,MACT+F,KAAMwU,EAAMva,MAAQ,IAAM8rB,EAC1BlvB,UAAU,mBAKX,wBACCkD,SAAU0sB,EACVz3B,KAAK,QACLiL,MAAOpI,EAAEoI,MACT+F,KAAMwU,EAAMva,MAAQ,IAAM8rB,EAC1BlvB,UAAU,sBAvBJhF,EAAErC,SARLglB,EAAMhlB,gBCzBR+4B,GAvHK,SAAC,GAYd,IAXN/4B,EAWK,EAXLA,GACAkO,EAUK,EAVLA,KACAiP,EASK,EATLA,cACAvV,EAQK,EARLA,SACAuuB,EAOK,EAPLA,WACAC,EAMK,EANLA,QAEAzY,GAIK,EALLmb,OAKK,EAJLnb,SACA0Y,EAGK,EAHLA,eACA/E,EAEK,EAFLA,cACAgF,EACK,EADLA,eAGMC,EAAYE,eAElB,OACC,gBAACplB,GAAA,EAAD,CACCC,OAAK,EACLjK,UAAU,YAFX,UAIEiqB,EAAgB,eAAC,KAAD,UAChB,eAAC7f,GAAA,EAAD,UACC,uBAAKpK,UAAU,iBAAf,UACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,EAA9C,OACA,uBAAM5G,MAAO,CAAEE,MAAO,MAAOwF,SAAU,SAAvC,sBAIF,eAAC,KAAD,UACC,eAACyE,GAAA,EAAD,UACC,sBAAKpK,UAAU,iBAAf,SACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,WAKlD,eAAC,KAAD,UACEojB,EAAgB,eAAC7f,GAAA,EAAD,UAChB,sBACCpK,UAAU,2BACVkD,SAAU,SAAC9B,GACVb,EAAS,IACTuuB,EAAW,2BACPC,GADM,sCAEIzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAc2B,EACdnU,SAAUP,EAAE+B,OAAOC,UAGrB6rB,EAAe7tB,EAAGzI,IAZpB,SAkBE2d,EAAQ1d,KAAI,SAACoC,GACb,OACC,eAAC,KAAD,UACC,uBAAKgF,UAAU,4BAAf,UACC,wBACCqK,UAAQ,EACRlS,KAAK,QACLiL,MAAOpI,EAAEoI,MACT+F,KAAM+lB,EACNlvB,UAAU,uBAEVhF,EAAEoI,UATKpI,EAAErC,WAmBf,eAACyR,GAAA,EAAD,UACC,sBACCpK,UAAU,2BACVkD,SAAU,SAAC9B,GACVb,EAAS,IACTuuB,EAAW,2BACPC,GADM,sCAEIzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAc2B,EACdnU,SAAUP,EAAE+B,OAAOC,WATvB,SAiBEkT,EAAQ1d,KAAI,SAACoC,GACb,OACC,eAAC,KAAD,UACC,uBAAKgF,UAAU,4BAAf,UACC,wBACC7H,KAAK,QACLiL,MAAOpI,EAAEoI,MACT+F,KAAM+lB,EACNlvB,UAAU,uBAEVhF,EAAEoI,UARKpI,EAAErC,iBC2HNg5B,GA7NU,SAAC,GAYnB,IAXNh5B,EAWK,EAXLA,GACAkO,EAUK,EAVLA,KACAiP,EASK,EATLA,cAEAgZ,GAOK,EARLvuB,SAQK,EAPLuuB,YACAC,EAMK,EANLA,QAEAzY,GAIK,EALLmb,OAKK,EAJLnb,SACA0Y,EAGK,EAHLA,eACA/E,EAEK,EAFLA,cACAwF,EACK,EADLA,uBACK,EAEmCnvB,mBAAS,IAF5C,oBAEEovB,EAFF,KAEgBC,EAFhB,OAIqBrvB,mBAAS,GAJ9B,oBAIEue,EAJF,KAIS+S,EAJT,KAoCL,OA9BApvB,qBAAU,WAET,GAAIqc,EAAQ,EAAG,EACa,WAC1B,IAAIld,EAEJA,EAAQ,2BACJotB,GADI,sCAGMzvB,SAAS3G,IAAQ,CAC7BkhB,WAAYva,SAAS3G,GACrBwb,aAAa,GAAD,OAAK2B,GACjBnU,SAAU+tB,KAIZZ,EAAWntB,GAEPsoB,GACHwF,EAAuB92B,EAAI+2B,EAAc5Z,GAK3Csa,GAGDwB,EAAS,KACP,CAAClC,IAGH,gBAAC1lB,GAAA,EAAD,CACCC,OAAK,EACLjK,UAAU,YAFX,UAIEiqB,EAAgB,eAAC,KAAD,UAChB,eAAC7f,GAAA,EAAD,UACC,uBAAKpK,UAAU,iBAAf,UACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,EAA9C,OACA,uBAAM5G,MAAO,CAAEE,MAAO,MAAOwF,SAAU,SAAvC,sBAIF,eAAC,KAAD,UACC,eAACyE,GAAA,EAAD,UACC,sBAAKpK,UAAU,iBAAf,SACC,wBAAMA,UAAU,WAAhB,UAA4BgvB,EAA5B,KAA8CnoB,WAKlD,eAAC,KAAD,UACEojB,EAAiByF,EAAapnB,OAAS,EAAI,eAAC8B,GAAA,EAAD,UAC3C,+BAGEkM,EAAQ1d,KAAI,SAACoC,GACb,OACC,eAAC,KAAD,UACC,uBAAKgF,UAAU,6BAAf,UACC,wBACCkD,SAAU,SAAC9B,GAGV,GACCsuB,EAAavwB,SACZiC,EAAE+B,OAAOC,OAIT,CAED,IAAIyuB,EACHnC,EAAa12B,QACZ,SAACgC,GAAD,OACCA,IACAoG,EAAE+B,OAAOC,SAGZusB,EACCkC,QAMDlC,EAAgB,GAAD,mBACXD,GADW,CAEdtuB,EAAE+B,OAAOC,UAIZjL,KAAK,WACLiL,MAAOpI,EAAEoI,MACT+F,KAAMxQ,EACNqH,UAAU,uBAEVhF,EAAEoI,UAvCKpI,EAAErC,WA6CP,eAACyR,GAAA,EAAD,UACR,+BAGEkM,EAAQ1d,KAAI,SAACoC,GACb,OACC,eAAC,KAAD,UACC,uBAAKgF,UAAU,6BAAf,UACC,wBACCkD,SAAU,SAAC9B,GAEV,GACCsuB,EAAavwB,SACZiC,EAAE+B,OAAOC,OAET,CACD,IAAIyuB,EACHnC,EAAa12B,QACZ,SAACgC,GAAD,OACCA,IACAoG,EAAE+B,OAAOC,SAGZusB,EACCkC,QAKDlC,EAAgB,GAAD,mBACXD,GADW,CAEdtuB,EAAE+B,OAAOC,UAIZjL,KAAK,WACLkS,UAAQ,EACRjH,MAAOpI,EAAEoI,MACT+F,KAAMxQ,EACNqH,UAAU,uBAEVhF,EAAEoI,UAnCKpI,EAAErC,WA2Cf,eAACyR,GAAA,EAAD,UACC,+BAGEkM,EAAQ1d,KAAI,SAACoC,GACb,OACC,eAAC,KAAD,UACC,uBAAKgF,UAAU,6BAAf,UACC,wBACCkD,SAAU,SAAC9B,GACV,GACCsuB,EAAavwB,SACZiC,EAAE+B,OAAOC,OAET,CACD,IAAIyuB,EACHnC,EAAa12B,QACZ,SAACgC,GAAD,OACCA,IACAoG,EAAE+B,OAAOC,SAGZusB,EACCkC,QAKDlC,EAAgB,GAAD,mBACXD,GADW,CAEdtuB,EAAE+B,OAAOC,UAIZjL,KAAK,WACLiL,MAAOpI,EAAEoI,MACT+F,KAAMxQ,EACNqH,UAAU,uBAEVhF,EAAEoI,UAjCKpI,EAAErC,iBCnHNm5B,GA9DiB,SAAC,GAY1B,IAXHC,EAWE,EAXFA,iBACAC,EAUE,EAVFA,oBAUE,EARFC,WAQE,EAPFC,UAOE,EANFC,cAME,EALFC,aAKE,EAJFC,SAIE,EAHFC,gBAGE,EAFFC,cAEE,EADFhF,UAIA,OACI,gBAAC5jB,GAAA,EAAD,CACIrG,KAAMyuB,EACNnoB,SAAS,SACTC,OAAQ,WACJmoB,GAAoB,IAJ5B,UAMI,eAACroB,GAAA,EAAMnD,KAAP,UACI,+BAEI,6GAGR,gBAACmD,GAAA,EAAMa,OAAP,CAAcvK,MAAO,CAAEmQ,QAAS,OAAQoK,eAAgB,iBAAxD,UACI,eAAC/T,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,uCAEV+F,QAAS,WACLisB,GAAoB,IAL5B,SAOI,6CAEJ,eAACvrB,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,cAEV+F,QAAS,WAULwC,OAAO7D,SAAS8tB,QAAO,IAd/B,SAgBI,iDC1CdC,GAAgB,SAAC1yB,GAAW,IAEzBkyB,EASJlyB,EATIkyB,WACPC,EAQGnyB,EARHmyB,UACAC,EAOGpyB,EAPHoyB,cACAC,EAMGryB,EANHqyB,aACAC,EAKGtyB,EALHsyB,SACAC,EAIGvyB,EAJHuyB,gBACAC,EAGGxyB,EAHHwyB,cACAhF,EAEGxtB,EAFHwtB,UACAwB,EACGhvB,EADHgvB,QAV+B,EAkCgBzuB,oBAAS,GAlCzB,oBAkCzByxB,EAlCyB,KAkCPC,EAlCO,KAqChC,OACC,uBAAK/xB,MAAO,CAAEwF,UAAW,OAAzB,UACC,gBAAC,KAAD,CAAKxF,MAAO,CAAEuF,aAAc,OAA5B,UACC,eAAC4E,GAAA,EAAD,CAAKnK,MAAO,CAAEmQ,QAAS,QAAUsiB,GAAI,EAArC,SACC,sBAAKnN,KAAK,IAAIvlB,UAAU,uCACvB+F,QAAS,WAERisB,GAAoB,IAHtB,SAaC,qDAGF,gBAAC5nB,GAAA,EAAD,CAAKnK,MAAO,CAAEmQ,QAAS,OAAQoK,eAAgB,SAAWkY,GAAI,EAA9D,UACE3yB,EAAM4yB,YAAc,GACpB,sBAAK3yB,UAAU,6BAAf,SAEC,sBAAKA,UAAU,uCACd+F,QAjDY,WAClBhG,EAAM6yB,gBA+CD,SAGC,6CAIH,iCACE7yB,EAAM4yB,YAAc5yB,EAAM8yB,YAC1B,wBACC16B,KAAK,SACL4N,QAvDY,WAElBhG,EAAM+yB,YAsDA1vB,MAAM,WACNpD,UAAU,gBAIXD,EAAM4yB,cAAgB5yB,EAAM8yB,YAS5B,wBACC16B,KAAK,SAELsS,WAAUsoB,mBAAQhE,GAClBhpB,QA/Dc,WACpBhG,EAAMizB,YA+DA5vB,MAAM,iBACNpD,UAAW+yB,mBAAQhE,GAAW,uBAAyB,yBAO3DgD,EAAmB,eAAC,GAAD,CACnBA,iBAAkBA,EAClBC,oBAAqBA,EAErBC,WAAYA,EACZC,UAAWA,EACXC,cAAeA,EACfC,aAAcA,EACdC,SAAUA,EACVC,gBAAiBA,EACjBC,cAAeA,EACfhF,UAAWA,IACP,SAwmBO0F,GAlmBK,SAAClzB,GAAW,IAAD,IAG7BgvB,EAWGhvB,EAXHgvB,QACAD,EAUG/uB,EAVH+uB,WACAoE,EASGnzB,EATHmzB,SACAC,EAQGpzB,EARHozB,OACAC,EAOGrzB,EAPHqzB,WACAC,EAMGtzB,EANHszB,UACAC,EAKGvzB,EALHuzB,MACAC,EAIGxzB,EAJHwzB,aACAC,EAGGzzB,EAHHyzB,WACA9P,EAEG3jB,EAFH2jB,QACA+P,EACG1zB,EADH0zB,WAIGzE,EAAiB,EAKf0E,GAFU,OAAGhQ,QAAH,IAAGA,GAAH,UAAGA,EAASsG,yBAAZ,aAAG,EAA4BhxB,QAAO,SAAAgC,GAAC,OAAwB,IAApBA,EAAEivB,kBAEvBrxB,KAAI,SAAAoC,GAAO,OAAO,gBAAGA,EAAErC,GAAK,OAE5Dg7B,EAAoB9mB,OAAO+mB,OAAP,MAAA/mB,OAAM,CAAQ,IAAR,mBAAe6mB,KAxBjB,EA2BQpzB,mBAASqzB,GA3BjB,oBA2BvBE,EA3BuB,KA2BV1E,EA3BU,OA8BJ7uB,mBAAS,IA9BL,oBA8BvBX,EA9BuB,KA8BhBY,EA9BgB,KAgCxB0uB,EAAiB,SAACjpB,EAAOrN,GAE9B,IAAMm7B,EAAa9tB,EAAM7C,OAAOgG,KAC1B4qB,EAAc/tB,EAAM7C,OAAOC,MAEjC,GAAIzK,EAEH,OAAOw2B,GAAe,SAAC0E,GAAD,mBAAC,eACnBA,GADkB,mBAEpBl7B,EAAKo7B,OAMR5E,GAAe,SAAC0E,GAAD,mBAAC,eACZA,GADW,mBAEbC,EAAaC,QAMVtE,EAAyB,SAAC92B,EAAI+2B,EAAc5Z,GAKjDqZ,GAAe,SAAC0E,GAAD,mBAAC,eACZA,GADW,mBAEbl7B,EAAK+2B,EAAapnB,OAAS,EAAIonB,EAAe,SAiDjD,OANAltB,qBAAU,WAET+F,OAAOyrB,SAAS,EAAG,KAEjB,CAACP,IAIH,uCAEC,eAAC,KAAD,UAEC,eAACrpB,GAAA,EAAD,UACC,uBAAKpK,UAAU,gBAAf,UACC,8BAAK0jB,EAAQuE,eAEb,wBAAMjoB,UAAU,qBAAhB,cAAuC0jB,EAAQqG,gBAG9CpqB,GAAS,oBAAGK,UAAU,QAAb,SAAsBL,WAOnC,gBAACs0B,GAAA,EAAD,kBAIEvQ,QAJF,IAIEA,GAJF,UAIEA,EAASsG,yBAJX,aAIE,EAA4BpxB,KAAI,SAACs7B,GACjC,MAEC,aADAA,EAAEpe,cAID,sBAEC9V,UAAU,UAFX,SAGEozB,EAAWx6B,KACX,SACCu7B,GAEA,GACCD,EAAEv7B,KACFw7B,EAAax7B,GACZ,CACDq2B,IADC,IAIA5zB,EAKG+4B,EALH/4B,SACAkb,EAIG6d,EAJH7d,QACA3d,EAGGw7B,EAHHx7B,GACAmd,EAEGqe,EAFHre,cACAmU,EACGkK,EADHlK,cAGD,OACC,eAAC,GAAD,CACCpjB,KACCzL,EAEDmF,SACCA,EAEDuuB,WACCA,EAEDC,QACCA,EAKDC,eACCA,EAED1Y,QACCA,EAED3d,GACCA,EAEDmd,cACCA,EAEDmU,cAAeA,EACfgF,eAAgBA,GAffD,QAnCDkF,EAAEv7B,IA8DT,iBADAu7B,EAAEpe,cAID,sBAEC9V,UAAU,UAFX,SAGEkzB,EAASt6B,KACT,SAACw7B,GACA,GACCF,EAAEv7B,KACFy7B,EAAKz7B,GACJ,CACDq2B,IADC,IAIA5zB,EAKGg5B,EALHh5B,SACAzC,EAIGy7B,EAJHz7B,GACAmd,EAGGse,EAHHte,cACAmU,EAEGmK,EAFHnK,cACAjU,EACGoe,EADHpe,aAGD,OACC,eAAC,GAAD,CACCnP,KACCzL,EAEDmF,SACCA,EAEDuuB,WACCA,EAEDC,QACCA,EAKDC,eACCA,EAEDlZ,cACCA,EAEDnd,GACCA,EAEDsxB,cAAeA,EACfjU,aAAcA,EACdiZ,eAAgBA,GAbfD,QAjCDkF,EAAEv7B,IA2DT,iBADAu7B,EAAEpe,eAGF,cADAoe,EAAEpe,cAID,sBAEC9V,UAAU,UAFX,SAGEmzB,EAAOv6B,KACP,SAACy7B,GACA,GACCH,EAAEv7B,KACF07B,EAAS17B,GACR,CACDq2B,IADC,IAIA5zB,EAIGi5B,EAJHj5B,SACAzC,EAGG07B,EAHH17B,GACAmd,EAEGue,EAFHve,cACAmU,EACGoK,EADHpK,cAGD,OACC,eAAC,GAAD,CACCpjB,KACCzL,EAEDmF,SACCA,EAEDuuB,WACCA,EAEDC,QACCA,EAKDC,eACCA,EAEDlZ,cACCA,EAEDnd,GACCA,EAEDsxB,cAAeA,EACfgF,eAAgBA,GAZfD,QAhCDkF,EAAEv7B,IAyDT,aADAu7B,EAAEpe,cAID,sBAEC9V,UAAU,UAFX,SAGEqzB,EAAUz6B,KACV,SACCu7B,GAEA,GACCD,EAAEv7B,KACFw7B,EAAax7B,GACZ,CACDq2B,IADC,IAIA5zB,EAKG+4B,EALH/4B,SACAmb,EAIG4d,EAJH5d,aACA5d,EAGGw7B,EAHHx7B,GACAmd,EAEGqe,EAFHre,cACAmU,EACGkK,EADHlK,cAGD,OACC,eAAC,GAAD,CACCtxB,GACCA,EAEDkO,KACCzL,EAEDmF,SACCA,EAEDuuB,WACCA,EAEDC,QACCA,EAKDC,eACCA,EAEDzY,aACCA,EAEDT,cACCA,EAEDmU,cAAeA,EACfwF,uBAAwBA,GAZvBT,QAtCDkF,EAAEv7B,IA0Dc,QAApBu7B,EAAEpe,cAEJ,sBAEC9V,UAAU,UAFX,SAGEszB,EAAM16B,KACN,SAACw7B,GACA,GACCF,EAAEv7B,KACFy7B,EAAKz7B,GACJ,CACDq2B,IADC,IAIA5zB,EAKGg5B,EALHh5B,SACAkb,EAIG8d,EAJH9d,QACA3d,EAGGy7B,EAHHz7B,GACAmd,EAEGse,EAFHte,cACAmU,EACGmK,EADHnK,cAGD,OACC,eAAC,GAAD,CACCpjB,KACCzL,EAEDmF,SACCA,EAEDuuB,WACCA,EAEDC,QACCA,EAKDC,eACCA,EAED1Y,QACCA,EAEDmb,OACC2C,EAEDz7B,GACCA,EAEDmd,cACCA,EAEDmU,cAAeA,EACfgF,eAAgBA,GAlBfD,QAjCDkF,EAAEv7B,IA+DT,aADAu7B,EAAEpe,cAID,sBAEC9V,UAAU,UAFX,SAGEwzB,EAAW56B,KACX,SAACw7B,GACA,GACCF,EAAEv7B,KACFy7B,EAAKz7B,GACJ,CACDq2B,IADC,IAIA5zB,EAKGg5B,EALHh5B,SACAkb,EAIG8d,EAJH9d,QACA3d,EAGGy7B,EAHHz7B,GACAmd,EAEGse,EAFHte,cACAmU,EACGmK,EADHnK,cAGD,OACC,eAAC,GAAD,CACCpjB,KACCzL,EAEDmF,SACCA,EAEDuuB,WACCA,EAEDC,QACCA,EAKDC,eACCA,EAED1Y,QACCA,EAEDmb,OACC2C,EAEDte,cACCA,EAEDnd,GACCA,EAEDsxB,cAAeA,EACfwF,uBAAwBA,GAlBvBT,QAjCDkF,EAAEv7B,IA8DT,sBADAu7B,EAAEpe,cAID,sBAEC9V,UAAU,UAFX,SAIEuzB,EAAa36B,KACb,SACCu7B,GAEA,GACCD,EAAEv7B,KACFw7B,EAAax7B,GACZ,CACDq2B,IADC,IAIA5zB,EAKG+4B,EALH/4B,SACAob,EAIG2d,EAJH3d,kBACA7d,EAGGw7B,EAHHx7B,GACAmd,EAEGqe,EAFHre,cACAmU,EACGkK,EADHlK,cAGD,OACC,eAAC,GAAD,CACCtxB,GACCA,EAEDkO,KACCzL,EAEDmF,SACCA,EAEDuuB,WACCA,EAEDC,QACCA,EAKDC,eACCA,EAEDxY,kBACCA,EAEDV,cACCA,EAEDmU,cAAeA,EACfwF,uBAAwBA,GAZvBT,QAvCDkF,EAAEv7B,SANV,KAsED,eAAC,GAAD,2BAAmBoH,GAAnB,IAA0B+yB,SA3gBZ,WAEHjmB,OAAOmI,OAAO6e,GAAa10B,SAAS,KAIhDoB,EAAS,kDACTgI,OAAOyrB,SAAS,EAAG,KAInBzzB,EAAS,IACTR,EAAM+yB,aA+fyCE,SA1ftB,WACbnmB,OAAOmI,OAAO6e,GAAa10B,SAAS,KAGhDoB,EAAS,kDACTgI,OAAOyrB,SAAS,EAAG,KAGnBzzB,EAAS,IACTR,EAAMmB,qBCmfMozB,GAnsBF,WAAO,IAAD,MACmBh0B,mBAAS,GAD5B,oBACVmzB,EADU,KACEc,EADF,OAiB+Bj0B,qBAjB/B,oBAiBVk0B,EAjBU,KAiBQC,EAjBR,KAkBXC,EAAkBC,eAlBP,EAoBar0B,mBAAS,IApBtB,oBAoBVyuB,EApBU,KAoBDD,EApBC,OAqBiBxuB,mBAAS,WArB1B,oBAqBVmuB,EArBU,KAqBCmG,EArBD,OAuBSt0B,mBAAS,CACjCF,QAAS,GACTwB,OAAQ,GACR6sB,UAAW,GACXD,UAAW,KA3BI,oBAuBV7uB,EAvBU,KAuBHY,EAvBG,OA6B2BD,oBAAS,GA7BpC,oBA6BVguB,EA7BU,KA6BMC,EA7BN,OA+BqBjuB,oBAAS,GA/B9B,oBA+BVu0B,EA/BU,KA+BGC,EA/BH,OAgCmCx0B,mBAAS,IAhC5C,oBAgCVy0B,EAhCU,KAgCUC,EAhCV,OAiCqC10B,mBAAS,IAjC9C,oBAiCV20B,EAjCU,KAiCWC,EAjCX,OAmCc50B,mBAAS,IAnCvB,oBAmCV4yB,EAnCU,KAmCAjB,EAnCA,OAoCW3xB,mBAAS,IApCpB,oBAoCV6yB,EApCU,KAoCFjB,EApCE,OAqCmB5xB,mBAAS,IArC5B,oBAqCV8yB,GArCU,KAqCEjB,GArCF,QAsCiB7xB,mBAAS,IAtC1B,sBAsCV+yB,GAtCU,MAsCCjB,GAtCD,SAuCuB9xB,mBAAS,IAvChC,sBAuCVizB,GAvCU,MAuCIjB,GAvCJ,SAwCShyB,mBAAS,IAxClB,sBAwCVgzB,GAxCU,MAwCHjB,GAxCG,SAyCmB/xB,mBAAS,IAzC5B,sBAyCVkzB,GAzCU,MAyCEjB,GAzCF,SA2CWjyB,mBAAS,IA3CpB,sBA2CVhE,GA3CU,MA2CFixB,GA3CE,SA6CqBjtB,mBAAS,GA7C9B,sBA6CV60B,GA7CU,MA6CGC,GA7CH,MA+CXC,GAAWC,cAEX1I,GAAY,GAElB/f,OAAOC,KAAKiiB,GAASn2B,KAAI,SAAUmE,EAAKiU,GACtC4b,GAAU9qB,KAAKitB,EAAQhyB,OApDR,OAuDiBuD,oBAAS,GAvD1B,sBAuDVU,GAvDU,MAuDCmO,GAvDD,SAwDuB7O,oBAAS,GAxDhC,sBAwDVi1B,GAxDU,MAwDIC,GAxDJ,SAyD+Bl1B,oBAAS,GAzDxC,sBAyDVm1B,GAzDU,MAyDQC,GAzDR,SA0DyBp1B,oBAAS,GA1DlC,sBA0DVq1B,GA1DU,MA0DKC,GA1DL,MA6DXC,GAAgB,WAEpB,IAAIC,EAwBJ,OArBEA,OADkC9yB,IAAhC0xB,EAAgBqB,OAAO59B,KACF,2BAClBu8B,GADkB,IAErBqB,OAAQ,CACN59B,KAAM,UACN69B,WACmChzB,IAAjC0xB,EAAgBqB,OAAOC,MACnB,KACAtB,EAAgBqB,OAAOC,MAC7BC,YACoCjzB,IAAlC0xB,EAAgBqB,OAAOE,OACnB,KACAvB,EAAgBqB,OAAOE,UAIPvB,EAK5B1yB,QAAQC,IAAI,gBACL,CACLi0B,SAAU,CACRxxB,SAAU8vB,EACV2B,YAAaL,EACbrH,UAAWA,EACX2H,eAAgB3C,EAAa,GAE/B4C,SAAU/5B,GAAO3D,KAMfuI,GAAM,uCAAG,sCAAAG,EAAA,6DAGPurB,EAAY,GAElB/f,OAAOC,KAAKiiB,GAASn2B,KAAI,SAAUmE,EAAKiU,GACtC4b,EAAU9qB,KAAKitB,EAAQhyB,OAGzBoS,IAAa,GAITmnB,EAAiB3hB,KAAK4hB,MAAQpB,GAMhCW,OADkC9yB,IAAhC0xB,EAAgBqB,OAAO59B,KACF,2BAClBu8B,GADkB,IAErBqB,OAAQ,CACN59B,KAAM,UACN69B,WACmChzB,IAAjC0xB,EAAgBqB,OAAOC,MACnB,KACAtB,EAAgBqB,OAAOC,MAC7BC,YACoCjzB,IAAlC0xB,EAAgBqB,OAAOE,OACnB,KACAvB,EAAgBqB,OAAOE,UAIPvB,EAlCf,SAwCL8B,EAAa,CACjBN,SAAU,CACRxxB,SAAU8vB,EACV2B,YAAaL,EACbrH,UAAWA,GAEbgI,SAAUC,KAAKC,MAAML,EAAiB,KACtCD,SAAU/5B,GAAO3D,GACjBo2B,QAASnC,GAhDA,SAmDY7uB,GAAM0D,KAAN,qBAAiC+0B,GAnD7C,cAqDa,MArDb,OAqDE50B,SACXuN,IAAa,GACbymB,IAAiB,GACjBF,IAAoB,IAGtBvmB,IAAa,GA3DF,oBA+DHpR,GAAM0G,IAAN,iDAAoDgqB,GAAa,CACrEmI,WAAW,EACXP,SAAU/5B,GAAO3D,KAjEV,2DAoETqJ,QAAQC,IAAR,MApES,0DAuEX,MAAOssB,GAAkB,GAIzBhuB,EAAS,CACPH,QAAQ,mHACRquB,UAAWA,EACXD,UAAW7Z,KAAKA,KAAK4hB,OAAO9kB,WAC5B7P,QAAQ,2CAAKD,gBAAL,eAAeC,QAAf,UAAwB,KAAID,gBAA5B,aAAwB,EAAcC,OAAtC,OAEVg0B,IAAiB,GACjBzmB,IAAa,GAlFF,kEAAH,qDA+ZZ,OAxUA3M,qBAAU,WACR,IAAMq0B,EAAkB,uCAAG,4CAAAx1B,EAAA,+EAMWy1B,MAAK,yBAGrC,CACE73B,OAAQ,MACRD,QAAS,CACP+3B,OAAQ,sBAZS,YAMjBC,EANiB,wCAkBGA,EAAoBC,OAlBvB,OAkBrBC,EAlBqB,cAoBnBA,IACMC,GADY,EAElBD,GADMC,KAAMC,EADK,EACLA,aAAcC,EADT,EACSA,SAAUC,EADnB,EACmBA,UAAWC,EAD9B,EAC8BA,OAAQC,EADtC,EACsCA,GAEzD/C,EAAoB,CAElB0C,OACAC,eACAC,WACAC,YACAC,SACAC,QA9BmB,kDAkCvBx1B,QAAQC,IAAI,MAAZ,MAlCuB,0DAAH,qDAsClBw1B,EAAS,uCAAG,oCAAAp2B,EAAA,wFAAAA,EAAA,wFAAAA,EAAA,6DAEdm0B,IAAgB,GAFF,SAMSz3B,GAAMoE,IAAN,wBACJkzB,GAAS18B,KAPd,UAMRgJ,EANQ,SAcD,QAJPhD,EAAQC,aAAaC,QAAQ,SAIa,YAAnB,OAAR8C,QAAQ,IAARA,GAAA,UAAAA,EAAUvC,YAAV,eAAgBwC,SACxB,OAAVjD,GAA6C,WAAnB,OAARgD,QAAQ,IAARA,GAAA,UAAAA,EAAUvC,YAAV,eAAgBwC,SAfvB,uBAiBZozB,EAAqB,OAACrzB,QAAD,IAACA,GAAD,UAACA,EAAUvC,YAAX,aAAC,EAAgBgB,SAEtCo1B,IAAgB,GAnBJ,qCAiDd,IAxBI5zB,EAAS,GAEgB,YAAnB,OAARD,QAAQ,IAARA,GAAA,UAAAA,EAAUvC,YAAV,eAAgBwC,SACW,WAAnB,OAARD,QAAQ,IAARA,GAAA,UAAAA,EAAUvC,YAAV,eAAgBwC,UAEhBA,EAAM,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAUvC,YAAb,aAAG,EAAgBwC,OACzBszB,EACEtzB,EAAO81B,OAAO,GAAGC,cAAgB/1B,EAAOgU,MAAM,KAK9CgiB,EAAgB,GAChBC,EAAc,GACdC,EAAgB,GAChBC,EAAe,GACfC,EAAW,GACXC,EAAgB,GAChBC,EAAkB,GAEkB,KAApC,UAAAv2B,EAASvC,YAAT,mBAAeukB,gBAAf,eAAyBrb,SAC3BwsB,GAAe,GAGRhvB,EAAI,EAAGA,GAAC,UAAGnE,EAASvC,YAAZ,iBAAG,EAAeukB,gBAAlB,aAAG,EAAyBrb,QAAQxC,KAC/C,UAAAnE,EAASvC,YAAT,mBAAeukB,SAAS7d,UAAxB,mBAA4BkkB,yBAA5B,eAA+C1hB,QAAS,IAC1D,UAAA3G,EAASvC,YAAT,mBAAeukB,SAAS7d,UAAxB,mBAA4BkkB,yBAA5B,SAA+CpxB,KAAI,SAACs7B,GAC1B,iBAApBA,EAAEpe,cACJ8hB,EAAc91B,KAAK,CACjBnJ,GAAIu7B,EAAEv7B,GACNyC,SAAU84B,EAAE3e,cACZO,cAAeoe,EAAEpe,cACjBmU,cAAeiK,EAAEjK,cACjBjU,aAAcke,EAAEle,eAGE,iBAApBke,EAAEpe,eACkB,cAApBoe,EAAEpe,cAEF+hB,EAAY/1B,KAAK,CACfnJ,GAAIu7B,EAAEv7B,GACNyC,SAAU84B,EAAE3e,cACZO,cAAeoe,EAAEpe,cACjBmU,cAAeiK,EAAEjK,gBAEU,aAApBiK,EAAEpe,cACXgiB,EAAch2B,KAAK,CACjBnJ,GAAIu7B,EAAEv7B,GACNyC,SAAU84B,EAAE3e,cACZe,QAAS4d,EAAE5d,QACXR,cAAeoe,EAAEpe,cACjBmU,cAAeiK,EAAEjK,gBAEU,aAApBiK,EAAEpe,cACXiiB,EAAaj2B,KAAK,CAChBnJ,GAAIu7B,EAAEv7B,GACNyC,SAAU84B,EAAE3e,cACZgB,aAAc2d,EAAE3d,aAChBT,cAAeoe,EAAEpe,cACjBmU,cAAeiK,EAAEjK,gBAEU,QAApBiK,EAAEpe,cACXkiB,EAASl2B,KAAK,CACZnJ,GAAIu7B,EAAEv7B,GACNyC,SAAU84B,EAAE3e,cACZe,QAAS4d,EAAE5d,QACXR,cAAeoe,EAAEpe,cACjBmU,cAAeiK,EAAEjK,gBAEU,aAApBiK,EAAEpe,cACXmiB,EAAcn2B,KAAK,CACjBnJ,GAAIu7B,EAAEv7B,GACNyC,SAAU84B,EAAE3e,cACZe,QAAS4d,EAAE5d,QACXR,cAAeoe,EAAEpe,cACjBmU,cAAeiK,EAAEjK,gBAEU,sBAApBiK,EAAEpe,eACXoiB,EAAgBp2B,KAAK,CACnBnJ,GAAE,OAAEu7B,QAAF,IAAEA,OAAF,EAAEA,EAAGv7B,GACPyC,SAAQ,OAAE84B,QAAF,IAAEA,OAAF,EAAEA,EAAG3e,cACbiB,kBAAiB,OAAE0d,QAAF,IAAEA,OAAF,EAAEA,EAAG1d,kBACtBV,cAAa,OAAEoe,QAAF,IAAEA,OAAF,EAAEA,EAAGpe,cAClBmU,cAAa,OAAEiK,QAAF,IAAEA,OAAF,EAAEA,EAAGjK,mBAKxBgI,EAAW2F,GACXtF,GAAgB4F,GAChBhG,EAAU2F,GACV1F,GAAc2F,GACd1F,GAAa2F,GACb1F,GAAS2F,GACTzF,GAAc0F,GACd1K,GAAU5rB,EAASvC,MACnBg2B,GAAezgB,KAAK4hB,QAIpB4B,EAAe/I,eAEnBwF,EAAauD,GAEb3C,IAAgB,GAjIF,8LAmIe,OAAzB,eAAI7zB,gBAAJ,eAAcC,UAEhBrB,EAAS,CACPH,QACE,yEACFquB,UAAWA,EACXD,UAAW7Z,KAAKA,KAAK4hB,OAAO9kB,WAC5B7P,OAAQ,MAEVg0B,IAAiB,IAGU,OAAzB,eAAIj0B,gBAAJ,eAAcC,SAChB2sB,GAAkB,GAClBhuB,EAAS,CACPH,QAAS,kDACTquB,UAAWA,EACXD,UAAW7Z,KAAKA,KAAK4hB,OAAO9kB,WAC5B7P,OAAQ,MAEVg0B,IAAiB,KAEjBrH,GAAkB,GAClBhuB,EAAS,CACPH,QACE,8GACFquB,UAAWA,EACXD,UAAW7Z,KAAKA,KAAK4hB,OAAO9kB,WAC5B7P,QAAQ,2CAAKD,gBAAL,eAAeC,QAAf,UAAwB,KAAID,gBAA5B,aAAwB,EAAcC,OAAtC,OAEVg0B,IAAiB,IAEnBJ,IAAgB,GAnKF,yDAAH,qDAuKfqB,IAEAY,MACC,IAIHj1B,qBAAU,YACO,uCAAG,4BAAAnB,EAAA,kEAEI,YAAdotB,IAA2B+F,EAFjB,uBAGN4D,EAAwBvC,KAHlB,SAKN93B,GAAM0G,IAAN,iDACsCgqB,GAC1C2J,GAPU,uDAWdp2B,QAAQC,IAAR,MAXc,yDAAH,qDAefo2B,KAWC,CAAC5J,EAAW+F,IAIfhyB,qBAAU,WACR,IACE,GAAImzB,GAAe,CAgCjB,IAAMyC,EAAwBvC,KAExByC,EAAWC,aAAY,YACZ,uCAAG,sBAAAl3B,EAAA,sEACVtD,GAAM0G,IAAN,iDACsCgqB,GAC1C2J,GAHc,2CAAH,qDAMfC,KACC,KAEH,OAAO,kBAAMG,cAAcF,KAE7B,MAAO9L,GACPxqB,QAAQC,IAAIuqB,MAEb,CAACmJ,GAAelH,EAAW+F,EAAkBf,IAGhDjxB,qBAAU,WACR,IAAM61B,EAAS,uCAAG,4BAAAh3B,EAAA,kEAEI,YAAdotB,EAFU,uBAGR2J,EAAwBvC,KAE5BuC,EAAqB,2BAChBA,GADgB,IAEnBK,eAAe,IAPL,SAUN16B,GAAM0G,IAAN,iDACsCgqB,GAC1C2J,GAZU,uDAgBdp2B,QAAQC,IAAR,MAhBc,yDAAH,qDAoBf,GAAI0zB,GAAe,CACjB,IAAI+C,EAAShwB,YAAW,kBAAM2vB,MAAa,KAE3C,OAAO,WACL5vB,aAAaiwB,OAGhB,CAAC/C,GAAelC,IAGjB,sBAAKzzB,UAAU,sBAAf,SACGgB,GACC,uBAAKhB,UAAU,UAAf,UACE,eAACyC,GAAA,EAAD,CACEC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGjB,sBAAK7C,UAAU,eAAf,SACE,oEAIJ,gBAACgK,GAAA,EAAD,CAAWC,OAAK,EAAhB,UACE,gBAAC,KAAD,WACE,eAACG,GAAA,EAAD,CAAKuuB,GAAI,IACT,eAACvuB,GAAA,EAAD,CAAKuuB,GAAI,EAAT,SACE,uBAAK34B,UAAU,eAAf,UACE,8BAAK1D,GAAOstB,cAEV6L,IAAmC,IAAfhC,EAIlB,KAHF,uBAAMzzB,UAAU,qBAAhB,SACG1D,GAAOqtB,cAKM,MAAjBhqB,EAAMiC,QACL,eAAC,GAAD,CAAmBxB,QAAST,EAAMS,UAEnCkuB,GACC,eAAC,GAAD,CACE3uB,MAAOA,EACPY,SAAUA,EACV+tB,eAAgBA,EAChBC,kBAAmBA,SAK3B,eAACnkB,GAAA,EAAD,CAAKuuB,GAAI,OAGV1D,EACyB,WAAxBA,EACE,sBAAKj1B,UAAU,uBAAf,SACE,4FAA4Di1B,EAA5D,SAGF,sBAAKj1B,UAAU,sBAAf,SACE,4FAA4Di1B,EAA5D,SAGF,KAEJ,gBAAC,KAAD,CAAKj1B,UAAU,4BAAf,UACE,eAACoK,GAAA,EAAD,CAAKuuB,GAAI,IACT,eAACvuB,GAAA,EAAD,CAAKuuB,GAAI,EAAT,SACE,sBAAK34B,UAAU,OAAf,SACE,sBAAK8C,SAAU5B,GAAf,SACGq0B,GACC,uBAAKv1B,UAAU,UAAf,UACE,eAACyC,GAAA,EAAD,CACEC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAIjB,sBAAK7C,UAAU,eAAf,SACE,uDAGF+0B,EACF,qBAAI/0B,UAAU,sBAAd,SACG+0B,IAEDF,EACF,sBAAK70B,UAAU,uBAAf,SACE,mEAECy1B,GAkDH,uBAAKz1B,UAAU,oBAAf,UACE,qBAAIA,UAAU,2BAAd,qDADF,OAOG1D,SAPH,IAOGA,IAPH,UAOGA,GAAQutB,8BAPX,aAOG,EAAgCjxB,KAAI,SAACoC,GACpC,OAAO,gCAAOA,OAGA,sBAAT,OAANsB,SAAM,IAANA,QAAA,EAAAA,GAAQ3D,IACP,6JAKE,KACY,sBAAT,OAAN2D,SAAM,IAANA,QAAA,EAAAA,GAAQ3D,IACP,kKAKE,KACJ,0HAE4B,IAC1B,oBACE4sB,KAAK,iCACLtlB,MAAO,CAAEE,MAAO,WAFlB,wCAOF,oBACEolB,KAAK,iCACLtlB,MAAO,CAAEE,MAAO,WAFlB,oCAMA,eAAC,GAAD,OA1FF,uBAAKH,UAAU,qBAAf,UACE,eAAC,KAAD,CACE44B,aAllBG,SAACx3B,GACxBmzB,EAAcnzB,EAAEqyB,WAAa,IAklBToF,YA3lBG,CACvBC,WAAY,OACZC,UAAW,OACXC,UAAW,OACXC,SAAU,OACVC,MAAO,QAolBW,gBAIG58B,SAJH,IAIGA,IAJH,UAIGA,GAAQqnB,gBAJX,aAIG,EAAkB/qB,KAAI,SAACoC,GACtB,OACE,eAAC,GAAD,CAEE8zB,WAAYA,EACZC,QAASA,EACTmE,SAAUA,EACVK,aAAcA,GACdJ,OAAQA,EACRC,WAAYA,GACZC,UAAWA,GACXC,MAAOA,GACPE,WAAYA,GACZ9P,QAAS1oB,EACTy4B,WAAYA,EACZxB,WAAYA,EACZC,UAAWA,EACXC,cAAeA,GACfC,aAAcA,GACdE,gBAAiBA,GACjBD,SAAUA,GACVE,cAAeA,GACfhF,UAAWA,GACXrsB,OAAQA,IApBHlG,EAAErC,SA0Bf,eAACqR,GAAA,EAAD,CAAWC,OAAK,EAAhB,SACE,gBAAC,KAAD,CAAKhK,MAAO,CAAEmQ,QAAS,OAAQ+oB,WAAY,UAA3C,UACE,eAAC/uB,GAAA,EAAD,CACEnK,MAAO,CACLmQ,QAAS,OACToK,eAAgB,YAGpB,eAACpQ,GAAA,EAAD,SAGJ,eAAC,GAAD,aAmDV,eAACA,GAAA,EAAD,CAAKuuB,GAAI,aC9rBfvtB,I,cAASC,KAAOC,IAAV,khBAgCZ,SAASC,GAAT,GAAmC,IAAlBC,EAAiB,EAAjBA,QAASpM,EAAQ,EAARA,KAAQ,EAQ1BqM,oBAAS,CACTD,UACApM,SAPAsM,EAH0B,EAG1BA,cACAC,EAJ0B,EAI1BA,kBACAC,EAL0B,EAK1BA,aACAC,EAN0B,EAM1BA,KACAC,EAP0B,EAO1BA,WAOJ,OACI,mDAAWJ,KAAX,cAEI,iCACKE,EAAahT,KAAI,SAAAmT,GAAW,OACzB,+CAAQA,EAAYC,uBAApB,aACKD,EAAY/M,QAAQpG,KAAI,SAAAqT,GAAM,OAC3B,+CAAQA,EAAOC,kBAAf,aAAkCD,EAAOE,OAAO,wBAKhE,kDAAWR,KAAX,aACKE,EAAKjT,KAAI,SAACwT,EAAKtG,GAEZ,OADAgG,EAAWM,GAEP,+CAAQA,EAAIC,eAAZ,aACKD,EAAIE,MAAM1T,KAAI,SAAA2T,GACX,OAAO,+CAAQA,EAAKC,gBAAb,aAA8BD,EAAKJ,OAAO,2BAUjF,IAAMitB,GAAkB,uCAAG,WAAOh4B,EAAGV,EAASF,EAAUrH,EAAYF,EAAMgI,GAA/C,mBAAAI,EAAA,6DAEjBg4B,EAAQj4B,EAAEzI,GAFO,SASnBsI,GAAa,GATM,SAWFlD,GAAMoQ,OAAN,yBACKkrB,IAAS33B,OAEvB,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA1BV,cAWnBH,EAXmB,OAkCf6C,EAAgB,CAAE80B,WAAYngC,EAAWR,IAlC1B,SAqCWoF,GAAM0G,IAAN,iBAAoBxL,EAAKN,IAAM6L,GAAe9C,OACxE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAlDN,cA8DnBlD,aAAasD,QAAQ,iBAAkB/I,EAAWR,IAElD6H,EAAS,CACLrI,KAAM,sBACNE,QAASsJ,EAASvC,OAEtBoB,EAAS,CACLrI,KAAM,sBACNE,QAAS,OAEbmI,EAAS,CACLrI,KAAM,mBACNE,QAASc,EAAWR,KAGxBsI,GAAa,GA7EM,kDAiFnBe,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCAnFM,0DAAH,gEA+MT03B,OAtHf,YAA8E,IAAjDhhC,EAAgD,EAAhDA,cAAe8f,EAAiC,EAAjCA,aAAciV,EAAmB,EAAnBA,gBAEhD9sB,EAAWC,cACXC,EAAUC,cAHyD,EAKnCL,mBAAS,IAL0B,oBAKlElH,EALkE,KAKrDogC,EALqD,KAMnErgC,EAAawK,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKE,cAC/CF,EAAO0K,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKA,QAP0B,EAQvCqH,oBAAS,GAR8B,oBAQlEU,EARkE,KAQvDC,EARuD,KAUnEw4B,EAAelhC,EAAcS,QAAO,SAAAgC,GAAC,OAAIA,EAAE0+B,WAAavgC,EAAWugC,YAIzEl3B,qBAAU,WAIN,GAAoB,OAAhBpJ,EAAsB,CAElBoH,EAAS,CACLrI,KAAM,sBACNE,QAASe,OAOtB,CAACoH,EAAUpH,IAId,IAAM6T,EAAeC,IAAMC,SAEvB,iBAAM,CACF,CACI7G,OAAQ,KACR0G,SAAU,MAGd,CACI1G,OAAQ,OACR0G,SAAU,YAEd,CACI1G,OAAQ,cACR0G,SAAU,YAGd,CACI1G,OAAQ,KACRwa,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAIL,OAAQ,sBAAKvM,UAAU,gCAAf,SACJ,eAAC,KAAD,CAAiB4I,KAAMgG,KAAQ5O,UAAU,oBAAoBoD,MAAOmJ,EAAKH,IAAIqS,SAAU1Y,QAAS,WAC5FyzB,EAAejtB,EAAKH,IAAIqS,UACxBpG,GAAa,UAO7B,CACI/R,OAAQ,MAER2Y,QAAQ,EACR6B,KAAM,YAAe,IAAZvU,EAAW,EAAXA,KAGL,OAAQ,sBAAKvM,UAAU,gCAAf,SACJ,eAAC,KAAD,CAAiB4I,KAAMiG,KAAS7O,UAAU,sBAAsBoD,MAAOmJ,EAAKH,IAAIqS,SAAU1Y,QAAS,WAE/FwC,OAAOuG,QAAQ,+CACXsqB,GAAmB7sB,EAAKH,IAAIqS,SAAU/d,EAASF,EAAUrH,EAAYF,EAAMgI,aASnG,CAACoX,EAAciV,IAMnB,OACItsB,EACI,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,kEAIR,eAAC,GAAD,UACI,eAAC,GAAD,CACIwL,QAASyB,EACT7N,KAAMq6B,OC9BXE,I,OA1PiB,SAAC,GAAiC,IAc1DC,EACAC,EAf2B9wB,EAA8B,EAA9BA,UAAWC,EAAmB,EAAnBA,aAEpCtI,EAAUC,cAIVH,EAAWC,cAN4C,EAOfH,mBAAS,MAPM,oBAOtDw5B,EAPsD,KAOrCC,EAPqC,OAQ3Bz5B,oBAAS,GARkB,oBAQtDU,EARsD,KAQ3CC,EAR2C,OASrCX,mBAAS,IAT4B,oBAStD6I,EATsD,KAShDC,EATgD,OAUvB9I,mBAAS,IAVc,oBAUtD+I,EAVsD,KAUzCC,EAVyC,KAWvDrQ,EAAO0K,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKA,QAM3CA,IACA4gC,EAAS5gC,EAAKN,GACdihC,EAAU3gC,EAAK2gC,SAnB0C,MAsB7Bt5B,oBAAS,GAtBoB,oBAsB3CkJ,GAtB2C,WAyBvDtI,EAAM,uCAAG,WAAOE,GAAP,yBAAAC,EAAA,6DACXD,EAAEE,iBACFkI,GAAW,GAFA,SAMPvI,GAAa,GACP64B,EAAkB,CACpBJ,SAAUvwB,EACV6wB,SAAU3wB,EACV4wB,OAAQJ,EACRK,YAAaN,GAXV,SAegB77B,GAAM0D,KAAN,iBAEnBq4B,GACFp4B,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SA/BlB,OAeDH,EAfC,OAqCP6H,GAAW,GArCJ,EAwC4B7H,EAASvC,KAApCs6B,EAxCD,EAwCCA,SAAUM,EAxCX,EAwCWA,SAAUrhC,EAxCrB,EAwCqBA,GAE5BohC,EAAmB,CACfphC,KACA+gC,WACAM,aAGJ5wB,EAAQ,IACRE,EAAe,IACfrI,GAAa,GACb+H,GAAa,GAnDN,kDAsDPhH,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCAxDN,0DAAH,sDAiFZ,OArBAW,qBAAU,WAKN,GAAwB,OAApBs3B,EAA0B,CAGtBt5B,EAAS,CACLrI,KAAM,uBACNE,QAASyhC,OAOtB,CAACt5B,EAAUs5B,IAKV,gBAACnwB,GAAA,EAAD,CACIrG,KAAMyF,EACNa,SAAS,SACTC,OAAQ,WACJb,GAAa,IAJrB,UAMI,eAACW,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,oCAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UAGKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,kEAKR,uCACI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAKnK,MAAO,CAAEmQ,QAAS,OAAQse,cAAe,UAA9C,UACI,uBAAM1uB,UAAU,WAAhB,mBACA,uBAAMC,MAAO,CAAEE,MAAO,MAAOwF,SAAU,QAAvC,wFAIZ,eAAC,KAAD,UACI,eAACyE,GAAA,EAAD,UACI,wBACIC,UAAQ,EACRrK,UAAU,eACVkD,SAAU,SAAC9B,GAMPgI,EAAQhI,EAAE+B,OAAOC,MAAMmH,QACnB,iBACA,eASxB,gBAACP,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIpK,UAAU,eACVkD,SAAU,SAAC9B,GAMPkI,EAAelI,EAAE+B,OAAOC,MAAMmH,QAC1B,iBACA,oBAWpC,gBAACZ,GAAA,EAAMa,OAAP,WACI,eAAC/D,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,sBACV+F,QAAS,WACLqD,EAAQ,IACRE,EAAe,IACfrI,GAAa,GACb+H,GAAa,IAPrB,oBAWCG,EAAO,eAAC1C,GAAA,EAAD,CACJV,QAAS,WACLiD,GAAa,IAEjByB,UAAU,EACVtS,KAAK,SACL6H,UAAU,sBACV0G,QAAQ,eAPJ,oBAUJ,eAACD,GAAA,EAAD,CACIV,QAAS,WACLiD,GAAa,IAEjByB,UAAU,EACVtS,KAAK,SACL6H,UAAU,sBACV0G,QAAQ,eAPZ,+BCwBTyzB,GAlQe,SAAC,GAAqC,IAAnC/hB,EAAkC,EAAlCA,cAAeC,EAAmB,EAAnBA,aAGtC3X,EAAUC,cAEVy5B,EAAuBz2B,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKG,eALA,EAM7BkH,oBAAS,GANoB,oBAMxDU,EANwD,KAM7CC,EAN6C,OAWOX,mBAAS,CAE3E05B,SAAU,GACVN,SAAU,KAdiD,oBAWxDW,EAXwD,KAW3BC,EAX2B,OAkBzBh6B,mBAAS,IAlBgB,oBAkBxDi6B,EAlBwD,KAkB3CC,EAlB2C,OAmBzBl6B,mBAAS,IAnBgB,oBAmBxDm6B,EAnBwD,KAmB3CC,EAnB2C,KAsBvDV,EAAuBK,EAAvBL,SAAuBK,EAAbX,SAElBl3B,qBAAU,WAK2B,OAAzB43B,IAEAE,EAA+B,CAE3BN,SAAQ,OAAEI,QAAF,IAAEA,OAAF,EAAEA,EAAsBJ,SAChCN,SAAQ,OAAEU,QAAF,IAAEA,OAAF,EAAEA,EAAsBV,WAIpCc,EAAc,OAACJ,QAAD,IAACA,OAAD,EAACA,EAAsBV,UACrCgB,EAAc,OAACN,QAAD,IAACA,OAAD,EAACA,EAAsBJ,aAQ9C,CAACI,IAGJ,IAAM55B,EAAWC,cAlD8C,EAmDTH,mBAAS,MAnDA,oBAmDxDq6B,EAnDwD,KAmDnCC,EAnDmC,KAsDzD15B,EAAM,uCAAG,WAAOE,GAAP,yBAAAC,EAAA,6DACXD,EAAEE,iBADS,SAOPL,GAAa,GAOTzI,EAAqB,GAErB+hC,KAAW,OAAKF,QAAL,IAAKA,OAAL,EAAKA,EAA6BX,YAC7ClhC,EAAkB,2BAAQA,GAAR,IAA4BkhC,SAAQ,OAAEW,QAAF,IAAEA,OAAF,EAAEA,EAA6BX,YAErFe,KAAW,OAAKJ,QAAL,IAAKA,OAAL,EAAKA,EAA6BL,YAC7CxhC,EAAkB,2BAAQA,GAAR,IAA4BwhC,SAAQ,OAAEK,QAAF,IAAEA,OAAF,EAAEA,EAA6BL,YApBlF,SAyBgBj8B,GAAM0G,IAAN,yBACD21B,EAAqBzhC,IACvCH,GACFkJ,OACE,SAAC/B,GACiC,MAA1BA,EAAMgC,SAASC,SACfhD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,MAGa,MAA1BnC,EAAMgC,SAASC,SAEfC,MAAM,yCACNjD,aAAa4C,WAAW,OACxB5C,aAAa4C,WAAW,kBACxBd,EAAQoB,KAAK,SAzClB,OAyBDH,EAzBC,SA+C4BA,EAASvC,KAApCzG,EA/CD,EA+CCA,GAAIqhC,EA/CL,EA+CKA,SAAUN,EA/Cf,EA+CeA,SAEtBkB,EAAuB,CACnBjiC,KACAqhC,WACAN,aAGJz4B,GAAa,GACboX,GAAa,GAxDN,kDA2DPrW,QAAQC,IAAR,MAEAsG,OAAO1G,MAAM,wCA7DN,0DAAH,sDAiFZ,OAjBAW,qBAAU,WAGN,GAA4B,OAAxBm4B,EAA8B,CAE1Bn6B,EAAS,CACLrI,KAAM,sBACNE,QAASsiC,OAOtB,CAACn6B,EAAUm6B,IAKV,gBAAChxB,GAAA,EAAD,CACIrG,KAAM8U,EACNxO,SAAS,SACTC,OAAQ,WACJwO,GAAa,IAJrB,UAMI,eAAC1O,GAAA,EAAMrD,OAAP,CAAcwD,aAAW,EAAzB,SACI,eAACH,GAAA,EAAMI,MAAP,kCAEJ,wBAAMjH,SAAU5B,EAAhB,UACI,eAACyI,GAAA,EAAMnD,KAAP,UACKxF,EACG,uBAAKhB,UAAU,UAAf,UACI,eAACyC,GAAA,EAAD,CACIC,KAAM,GACNC,UAAW,IACXC,MAAO,IACPzC,MAAM,uBACN0C,eAAe,0BAGnB,sBAAK7C,UAAU,eAAf,SACI,kEAIR,qCAoCI,gBAACgK,GAAA,EAAD,CACIC,OAAK,EAELhK,MAAO,CACHiK,WAAY,OACZC,cAAe,OACf3E,aAAc,QANtB,UAQI,eAAC,KAAD,UACI,eAAC4E,GAAA,EAAD,UACI,uBAAMpK,UAAU,WAAhB,8BAGR,eAAC,KAAD,UACI,eAACoK,GAAA,EAAD,UACI,2BAEIhH,MAAO42B,EACPh6B,UAAU,eACVkD,SAAU,SAAC9B,GAEPk5B,EAA+B,2BACxBD,GADuB,IACML,SAAU54B,EAAE+B,OAAOC,MAAMmH,QACrD,iBACA,qBAcxC,gBAACZ,GAAA,EAAMa,OAAP,WACI,eAAC/D,GAAA,EAAD,CACIC,QAAQ,aACR1G,UAAU,sBACV+F,QAAS,WACLsS,GAAa,IAJrB,oBAQA,eAAC5R,GAAA,EAAD,CACItO,KAAK,SACL6H,UAAU,sBACV0G,QAAQ,eAHZ,oCC5KLm0B,GAtEa,WAAO,IAAD,EAEIv6B,oBAAS,GAFb,oBAQtB/H,GARsB,UAMjBoL,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKA,QAEvCV,eARsB,GASAA,EAAcK,KAAI,SAAAoC,GAC5C,MAAO,CACH0+B,SAAU1+B,EAAE0+B,SACZ/gC,GAAIqC,EAAErC,OAMgC2H,oBAAS,IAlBzB,oBAkBvB8gB,EAlBuB,KAkBNC,EAlBM,OAmBQ/gB,oBAAS,GAnBjB,oBAmBvB8X,EAnBuB,KAmBRC,EAnBQ,OAoBU/X,oBAAS,GApBnB,oBAoBTgtB,GApBS,WAuB9B,OAEI,uBAAKttB,UAAU,iBAAf,UAGI,qBAAIA,UAAU,wBAAd,2BAGA,uBAAKA,UAAU,gCAAf,UACI,eAAC,KAAD,CAAiB4I,KAAMgC,KAAc5K,UAAU,mBAAmB+F,QAAS,WACvEsb,GAAmB,MAEvB,uBAAMrhB,UAAU,iBAAhB,wCAiBJ,eAAC,GAAD,CAAmBzH,cAAeA,EAC9B8f,aAAcA,EACdiV,gBAAiBA,IAGrB,eAAC,GAAD,CACItkB,aAAcqY,EACdtY,UAAWqY,IAEdhJ,EAAgB,eAAC,GAAD,CACbC,aAAcA,EACdD,cAAeA,IAAoB,SChCpC0iB,GArCe,WAE1B,IAAIp6B,EAAUC,cAENzB,EAAawB,EAAQgE,SAArBxF,SAJwB,EAMMoB,mBAASpB,EAASmJ,UAAUnJ,EAAS6wB,YAAY,KAAO,IAN9D,oBAMzBgL,EANyB,KAMZC,EANY,KASnBr3B,aAAY,SAAC1L,GAAD,OAAWA,EAAMgB,KAAKA,QACvCV,cAeR,OAEI,cADA,CACC6e,GAAA,EAAD,CACIC,UAAW0jB,GAA4B,WACvCzjB,SAAU,SAAClW,GAAD,OAjBG,SAACA,GAMlB45B,EAAe55B,GAEfV,EAAQ6J,QAAQ,CACZrL,SAAS,GAAD,OAAKkC,KAQIyvB,CAAazvB,IAFlC,SAII,eAACoW,GAAA,EAAD,CAAKC,SAAS,WAAWC,MAAM,gBAA/B,SACqB,aAAhBqjB,EAA6B,eAAC,GAAD,IAA0B,UCNzDE,GA/BO,SAAC,GAAc,EAAZC,MAAa,IAE5Bx6B,EAAUC,cAehB,OAbA6B,qBAAU,WAEM5D,aAAaC,QAAQ,QAI7B6B,EAAQoB,KAAK,OAIlB,IAIC,uBAAK9B,UAAU,SAAf,UAGI,eAAC,GAAD,IACA,sBAAKC,MAAO,CAAEyF,MAAO,QAArB,SAEI,eAAC,GAAD,UCMDy1B,GAhCE,WAAO,IAAD,EAGO76B,qBAHP,oBAGZ+N,EAHY,KAGL+sB,EAHK,KAKbhR,EAAW,uCAAG,WAAOhpB,GAAP,eAAAC,EAAA,sDAChBD,EAAEE,kBAEI+oB,EAAW,IAAIC,UAEZC,OAAO,QAASlc,EAAM,IAC/Bgc,EAASE,OAAO,OAAQ,KAExBxsB,KAAM0D,KAAK,mCAAoC4oB,GAC1CgR,MAAK,SAAC15B,OAEJD,OAAM,SAAC/B,OAXE,2CAAH,sDAgBjB,OACI,wBAAMmD,SAAUsnB,EAAhB,UACI,wBACIjyB,KAAK,OACL+K,SAAU,SAAC9B,GAAD,OAAOg6B,EAASh6B,EAAE+B,OAAOkL,UAEvC,wBAAOlW,KAAK,SAASiL,MAAM,eCSxBk4B,OA1Bf,WACC,OACC,+BAEC,gBAAC,IAAD,WAGC,eAAC,IAAD,CAAOC,OAAK,EAACC,KAAK,IAAIC,UAAWp7B,KAEjC,eAAC,IAAD,CAAOm7B,KAAK,WAAWC,UAAWxsB,KAClC,eAAC,IAAD,CAAOusB,KAAK,oBAAoBC,UAAW7Z,KAE3C,eAAC,IAAD,CACC4Z,KAAK,2BACLC,UAAWvN,KAEZ,eAAC,IAAD,CAAOsN,KAAK,oBAAoBC,UAAWnH,KAC3C,eAAC,IAAD,CAAOkH,KAAK,iBAAiBC,UAAWR,KACxC,eAAC,IAAD,CAAOO,KAAK,kBAAkBC,UAAWR,KACzC,eAAC,IAAD,CAAOO,KAAK,aAAaC,UAAWN,WCrBxCO,IAASvvB,OACR,eAAC,IAAD,CAAU3O,MAAOG,EAASH,MAA1B,SACC,eAAC,IAAD,UACC,eAAC,IAAD,CAAaI,UAAWD,EAASC,UAAjC,SACC,eAAC,GAAD,UAIHoJ,SAAS20B,eAAe,U","file":"static/js/main.fcd7f3f1.chunk.js","sourcesContent":["const INITIAL_STATE = {\r\n\tclientId: 1,\r\n};\r\n\r\nconst clientReducer = (state = INITIAL_STATE, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'SET_CLIENT':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tcohorts: action.payload,\r\n\t\t\t};\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nexport default clientReducer;\r\n","export const updateOrganisation = (organisations, editedOrganisation) => {\r\n\r\n\r\n\r\n\r\n\tconst existingItem = organisations.find(\r\n\t\t(organisation) => organisation.id === editedOrganisation.id\r\n\t);\r\n\r\n\r\n\r\n\tif (existingItem) {\r\n\t\treturn organisations.map((organisation) =>\r\n\t\t\torganisation.id === editedOrganisation.id\r\n\t\t\t\t?\r\n\t\t\t\teditedOrganisation\r\n\t\t\t\t: organisation\r\n\t\t);\r\n\t}\r\n\r\n\treturn [...organisations]\r\n};\r\n\r\n\r\n\r\nexport const removeOrganisation = (organisations, removedOrganisation) => {\r\n\tconst existingOrganisation = organisations.find(\r\n\t\t(organisation) => organisation.id === removedOrganisation.id\r\n\t);\r\n\r\n\treturn organisations.filter((organisation) =>\r\n\t\torganisation.id !== existingOrganisation.id\r\n\t);\r\n};","import { removeOrganisation, updateOrganisation } from './user.utils';\r\n\r\nconst INITIAL_STATE = {\r\n\tuser: null,\r\n\torganisationId: null,\r\n\torganisations: [],\r\n\tdefaultOrg: null,\r\n\tselectedOrg: null\r\n};\r\n\r\nconst userReducer = (state = INITIAL_STATE, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'SET_USER':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tuser: action.payload,\r\n\t\t\t};\r\n\t\tcase 'SET_ORGANISATION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\torganisationId: action.payload,\r\n\t\t\t};\r\n\t\tcase 'SELECT_ORGANISATION': //used in Organizations table\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tselectedOrg: action.payload,\r\n\t\t\t};\r\n\t\tcase 'SET_DEFAULT_ORGANISATION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tdefaultOrg: action.payload,\r\n\t\t\t};\r\n\t\tcase 'ADD_NEW_ORGANISATION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tuser: { ...state.user, organisations: [action.payload, ...state.user.organisations,] },\r\n\t\t\t};\r\n\t\tcase 'DELETE_ORGANISATION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tuser: { ...state.user, organisations: removeOrganisation(state.user.organisations, action.payload) },\r\n\t\t\t\torganisationId: state.defaultOrg.id\r\n\t\t\t};\r\n\t\tcase 'UPDATE_ORGANISATION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tuser: { ...state.user, organisations: updateOrganisation(state.user.organisations, action.payload) },\r\n\t\t\t\tselectedOrg: action.payload\r\n\t\t\t};\r\n\t\t//STRAPI V4\r\n\t\tcase 'SET_ALL_ORGANISATIONS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\torganisations: action.payload\r\n\t\t\t};\r\n\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\r\n\t}\r\n};\r\n\r\nexport default userReducer;\r\n","export const updateCohortDetails = (cohorts, editedCohort) => {\r\n\tconst existingItem = cohorts.find(\r\n\t\t(cohort) => cohort.id === editedCohort.id\r\n\t);\r\n\r\n\tif (existingItem) {\r\n\t\treturn cohorts.map((cohort) =>\r\n\t\t\tcohort.id === editedCohort.id\r\n\t\t\t\t? { ...cohort, cohort_name: editedCohort.cohort_name, cohort_desc: editedCohort.cohort_desc}\r\n\t\t\t\t: cohort\r\n\t\t);\r\n\t}\r\n\r\n\treturn [...cohorts];\r\n};\r\n\r\n\r\nexport const removeCohort = (cohorts, removedCohort) => {\r\n\tconst existingCohort = cohorts.find(\r\n\t\t(theme) => theme.id === removedCohort.id\r\n\t);\r\n\r\n\treturn cohorts.filter((theme) =>\r\n\t\ttheme.id !== existingCohort.id\r\n\t);\r\n};","import { updateCohortDetails, removeCohort } from './cohort.utils';\r\n\r\nconst INITIAL_STATE = {\r\n\tcohorts: [],\r\n\tselectedCohort: {\r\n\t\tid: null,\r\n\t\tcohort_name: '',\r\n\t\tcohort_desc: '',\r\n\t\tcreated_at:''\r\n\t},\r\n\r\n};\r\n\r\nconst cohortReducer = (state = INITIAL_STATE, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'SET_COHORTS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tcohorts: action.payload,\r\n\t\t\t};\r\n\t\tcase 'SELECT_COHORT':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tselectedCohort: action.payload,\r\n\t\t\t};\r\n\t\tcase 'ADD_NEW_COHORT':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tcohorts: [...state.cohorts, action.payload ],\r\n\t\t\t};\r\n\t\tcase 'UPDATE_COHORT_DETAILS':\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...state,\r\n\t\t\t\t\tcohorts: updateCohortDetails(state.cohorts, action.payload),\r\n\t\t\t\t\tselectedCohort: action.payload\r\n\t\t\t};\r\n\t\t\tcase 'DELETE_COHORT':\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...state,\r\n\t\t\t\t\tcohorts: removeCohort(state.cohorts, action.payload),\r\n\t\t\t\t\tselectedCohort: {\r\n\t\t\t\t\t\tid: null,\r\n\t\t\t\t\t\tcohort_name: '',\r\n\t\t\t\t\t\tcohort_desc: '',\r\n\t\t\t\t\t\tcreated_at:''\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nexport default cohortReducer;\r\n","export const updateThemeDetails = (themes, editedTheme) => {\r\n\tconst existingItem = themes.find(\r\n\t\t(theme) => theme.id === editedTheme.id\r\n\t);\r\n\r\n\tif (existingItem) {\r\n\t\treturn themes.map((theme) =>\r\n\t\t\ttheme.id === editedTheme.id\r\n\t\t\t\t? {\r\n\t\t\t\t\t...theme,\r\n\t\t\t\t\ttheme_name: editedTheme.theme_name,\r\n\t\t\t\t\ttheme_desc: editedTheme.theme_desc,\r\n\t\t\t\t\ttheme_summary: editedTheme.theme_summary,\r\n\t\t\t\t\tchild_themes: editedTheme.child_themes,\r\n\t\t\t\t\tparent_theme: editedTheme.parent_theme\r\n\t\t\t\t}\r\n\t\t\t\t: theme\r\n\t\t);\r\n\t}\r\n\r\n\treturn [...themes];\r\n};\r\n\r\n\r\nexport const updateUnassignedThemeDetails = (themes, editedTheme) => {\r\n\tconst existingItem = themes.find(\r\n\t\t(theme) => theme.id === editedTheme.id\r\n\t);\r\n\r\n\tif (existingItem) {\r\n\t\treturn themes.map((theme) =>\r\n\t\t\ttheme.id === editedTheme.id\r\n\t\t\t\t? {\r\n\t\t\t\t\t...theme,\r\n\t\t\t\t\ttheme_name: editedTheme.theme_name,\r\n\t\t\t\t\ttheme_desc: editedTheme.theme_desc,\r\n\t\t\t\t\ttheme_summary: editedTheme.theme_summary,\r\n\t\t\t\t\tchild_themes: editedTheme.child_themes,\r\n\t\t\t\t\tparent_theme: editedTheme.parent_theme\r\n\t\t\t\t}\r\n\t\t\t\t: theme\r\n\t\t);\r\n\t}\r\n\r\n\treturn [...themes];\r\n};\r\n\r\nexport const removeTheme = (themes, removedTheme) => {\r\n\tconst existingTheme = themes.find(\r\n\t\t(theme) => theme.id === removedTheme.id\r\n\t);\r\n\r\n\treturn themes.filter((theme) =>\r\n\t\ttheme.id !== existingTheme.id\r\n\t);\r\n};\r\n\r\nexport const removeSubTheme = (selectedTheme, removedSubtheme, themes) => {\r\n\r\n\tconst subthemes = selectedTheme.child_themes\r\n\r\n\tconst existingSubtheme = subthemes.find(\r\n\t\t(subtheme) => subtheme.id === removedSubtheme.id\r\n\t);\r\n\r\n\r\n\tconst filteredSubthemes = subthemes.filter((theme) =>\r\n\t\ttheme.id !== existingSubtheme.id\r\n\r\n\t);\r\n\r\n\t// let updatedTheme = { ...selectedTheme, child_themes: filteredSubthemes };\r\n\r\n\treturn themes.map((theme) =>\r\n\r\n\t\ttheme.id === selectedTheme.id ? {\r\n\t\t\t...selectedTheme,\r\n\t\t\tchild_themes: filteredSubthemes\r\n\t\t} : theme\r\n\t)\r\n\r\n};","import { updateThemeDetails, updateUnassignedThemeDetails, removeTheme, removeSubTheme } from './theme.utils';\r\n\r\nconst INITIAL_STATE = {\r\n\tthemes: [{\r\n\t\tid: -1,\r\n\t\ttheme_desc: \"\",\r\n\t\ttheme_name: 'Unassigned',\r\n\t\ttype: 'allUnassigned'\r\n\t}, {\r\n\t\tid: -2,\r\n\t\ttheme_desc: \"\",\r\n\t\ttheme_name: \"All Questions\",\r\n\t\ttype: 'all'\r\n\t}],\r\n\r\n\tselectedTheme: null,\r\n\tselectedChildTheme: null\r\n};\r\n\r\nconst themeReducer = (state = INITIAL_STATE, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'SET_THEMES':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tthemes: action.payload.map(x => {\r\n\t\t\t\t\t\treturn { ...x, type: 'regular' }\r\n\t\t\t\t\t}),\r\n\r\n\t\t\t\t// When user lands or refreshes Question Manager, first theme will be set as All Questions\r\n\t\t\t\tselectedTheme: {\r\n\t\t\t\t\tid: -2,\r\n\t\t\t\t\ttheme_desc: \"\",\r\n\t\t\t\t\ttheme_name: \"All Questions\",\r\n\t\t\t\t\ttype: 'all'\r\n\t\t\t\t},\r\n\t\t\t\tselectedChildTheme: null\r\n\t\t\t};\r\n\t\tcase 'SELECT_THEME':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tselectedTheme: action.payload,\r\n\t\t\t};\r\n\t\tcase 'ADD_NEW_THEME':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tthemes: [action.payload, ...state.themes ],\r\n\t\t\t};\r\n\t\tcase 'UPDATE_THEME_DETAILS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tthemes: updateThemeDetails(state.themes, action.payload),\r\n\t\t\t\tselectedTheme: action.payload //[REVIEW] was uncommented\r\n\t\t\t};\r\n\r\n\t\tcase 'DELETE_THEME':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tthemes: removeTheme(state.themes, action.payload),\r\n\t\t\t\tselectedTheme: null\r\n\t\t\t};\r\n\r\n\t\t// V4 same as UPDATE_THEME_DETAILS, except selectedTheme is not null, but parent theme to be rendered in question display view\r\n\t\tcase 'DELETE_SUBTHEME':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tthemes: updateThemeDetails(state.themes, action.payload),\r\n\t\t\t\tselectedTheme: action.payload,\r\n\t\t\t\tselectedChildTheme: null\r\n\t\t\t};\r\n\t\tcase 'SELECT_CHILD_THEME':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tselectedChildTheme: action.payload,\r\n\t\t\t};\r\n\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nexport default themeReducer;\r\n\r\n\r\n// DORMANT OLD V3 version\r\n\t\t// case 'DELETE_SUBTHEME':\r\n\t\t// \treturn {\r\n\t\t// \t\t...state,\r\n\t\t// \t\tthemes: removeSubTheme(state.selectedTheme, action.payload, state.themes),\r\n\t\t// \t\t//Return the most recent Theme, which had its subtheme removed. \r\n\t\t// \t\tselectedTheme: removeSubTheme(state.selectedTheme, action.payload, state.themes).filter(x => x.id === state.selectedTheme.id)[0]\r\n\t\t// \t};\r\n\r\n\r\n\t\t// NOT USED\r\n\r\n\t\t// case 'UPDATE_UNASSIGNED_THEME_DETAILS':\r\n\t\t// \treturn {\r\n\t\t// \t\t...state,\r\n\t\t// \t\tthemes: updateUnassignedThemeDetails(state.themes, action.payload),\r\n\t\t// \t\tselectedTheme: state.selectedTheme//state.themes.filter(x => x.type === 'allUnassigned')\r\n\t\t// \t};","export const updateQuestionDetails = (questions, editedQuestion) => {\r\n\r\n\r\n\r\n\r\n\tconst existingItem = questions.find(\r\n\t\t(question) => question.id === editedQuestion.id\r\n\t);\r\n\r\n\r\n\tif (existingItem) {\r\n\t\treturn questions.map((question) =>\r\n\t\t\tquestion.id === editedQuestion.id\r\n\t\t\t\t?\r\n\t\t\t\teditedQuestion\r\n\t\t\t\t: question\r\n\t\t);\r\n\t}\r\n\r\n\treturn [...questions]\r\n};\r\n\r\n\r\nexport const removeQuestion = (questions, removedQuestion) => {\r\n\tconst existingQuestion = questions.find(\r\n\t\t(question) => question.id === removedQuestion.id\r\n\t);\r\n\r\n\treturn questions.filter((question) =>\r\n\t\tquestion.id !== existingQuestion.id\r\n\t);\r\n};","import { updateQuestionDetails, removeQuestion } from './question.utils'\r\n\r\nconst INITIAL_STATE = {\r\n\tquestions: [],\r\n\tselectedQuestion: null,\r\n};\r\n\r\nconst questionReducer = (state = INITIAL_STATE, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'SET_QUESTIONS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tquestions: action.payload,\r\n\t\t\t};\r\n\t\tcase 'SELECT_QUESTION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tselectedQuestion: action.payload,\r\n\t\t\t};\r\n\t\tcase 'ADD_NEW_QUESTION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tquestions: [action.payload, ...state.questions],\r\n\t\t\t};\r\n\t\tcase 'DELETE_QUESTION':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tquestions: removeQuestion(state.questions, action.payload),\r\n\t\t\t\tselectedQuestion: action.payload\r\n\t\t\t};\r\n\t\tcase 'UPDATE_QUESTION_DETAILS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tquestions: updateQuestionDetails(state.questions, action.payload),\r\n\t\t\t\tselectedQuestion: action.payload\r\n\t\t\t};\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nexport default questionReducer;\r\n","export const updateQuestionGroupDetails = (questionGroups, editedQuestionGroup) => {\r\n\r\n\r\n\r\n\r\n\tconst existingItem = questionGroups.find(\r\n\t\t(question) => question.id === editedQuestionGroup.id\r\n\t);\r\n\r\n\r\n\r\n\tif (existingItem) {\r\n\t\treturn questionGroups.map((questionGroup) =>\r\n\t\t\tquestionGroup.id === editedQuestionGroup.id\r\n\t\t\t\t?\r\n\t\t\t\teditedQuestionGroup\r\n\t\t\t\t: questionGroup\r\n\t\t);\r\n\t}\r\n\r\n\treturn [...questionGroups]\r\n};\r\n\r\n\r\nexport const removeQuestionGroup = (questionGroups, removedQuestionGroup) => {\r\n\tconst existingQuestionGroup = questionGroups.find(\r\n\t\t(questionGroup) => questionGroup.id === removedQuestionGroup.id\r\n\t);\r\n\r\n\treturn questionGroups.filter((questionGroup) =>\r\n\t\tquestionGroup.id !== existingQuestionGroup.id\r\n\t);\r\n};\r\n\r\n","import { updateQuestionGroupDetails, removeQuestionGroup } from './question-group.utils'\r\n\r\nconst INITIAL_STATE = {\r\n\tquestionGroups: [],\r\n\tselectedQuestionGroup: null,\r\n};\r\n\r\nconst questionGroupReducer = (state = INITIAL_STATE, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase 'SET_QUESTION_GROUPS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tquestionGroups: action.payload,\r\n\t\t\t};\r\n\t\tcase 'SELECT_QUESTION_GROUP':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tselectedQuestionGroup: action.payload,\r\n\t\t\t};\r\n\t\tcase 'ADD_NEW_QUESTION_GROUP':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tquestionGroups: [...state.questionGroups, action.payload ],\r\n\t\t\t};\r\n\t\tcase 'UPDATE_QUESTION_GROUP_DETAILS':\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...state,\r\n\t\t\t\t\tquestionGroups: updateQuestionGroupDetails(state.questionGroups, action.payload),\r\n\t\t\t\t\tselectedQuestionGroup: action.payload\r\n\t\t\t};\r\n\t\tcase 'DELETE_QUESTION_GROUP':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tquestionGroups: removeQuestionGroup(state.questionGroups, action.payload),\r\n\t\t\t\t// selectedSurvey: action.payload\r\n\t\t\t};\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nexport default questionGroupReducer;\r\n","export const updateSurveyDetails = (surveys, editedSurvey) => {\r\n\r\n\r\n\r\n\r\n\tconst existingItem = surveys.find(\r\n\t\t(survey) => survey.id === editedSurvey.id\r\n\t);\r\n\r\n\r\n\r\n\tif (existingItem) {\r\n\t\treturn surveys.map((survey) =>\r\n\t\t\tsurvey.id === editedSurvey.id\r\n\t\t\t\t?\r\n\t\t\t\teditedSurvey\r\n\t\t\t\t: survey\r\n\t\t);\r\n\t}\r\n\r\n\treturn [...surveys]\r\n};\r\n\r\n\r\nexport const removeSurvey = (surveys, removedSurvey) => {\r\n\tconst existingSurvey = surveys.find(\r\n\t\t(survey) => survey.id === removedSurvey.id\r\n\t);\r\n\r\n\treturn surveys.filter((survey) =>\r\n\t\tsurvey.id !== existingSurvey.id\r\n\t);\r\n};","import { updateSurveyDetails, removeSurvey } from './survey.utils';\r\n\r\n\r\nconst INITIAL_STATE = {\r\n\tsurveys: [],\r\n\tselectedSurvey: null,\r\n\tnewSurveyQsOrder: [],\r\n\tselectedSurveyQsOrder: []\r\n};\r\n\r\nconst surveyReducer = (state = INITIAL_STATE, action) => {\r\n\r\n\r\n\tswitch (action.type) {\r\n\t\tcase 'SET_SURVEYS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tsurveys: action.payload,\r\n\t\t\t};\r\n\t\tcase 'SELECT_SURVEY':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tselectedSurvey: action.payload,\r\n\t\t\t};\r\n\t\tcase 'ADD_NEW_SURVEY':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tsurveys: [action.payload, ...state.surveys],\r\n\t\t\t};\r\n\t\tcase 'DELETE_SURVEY':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tsurveys: removeSurvey(state.surveys, action.payload),\r\n\t\t\t\t// selectedSurvey: action.payload\r\n\t\t\t};\r\n\t\tcase 'UPDATE_SURVEY_DETAILS':\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tsurveys: updateSurveyDetails(state.surveys, action.payload),\r\n\t\t\t\tselectedSurvey: action.payload\r\n\t\t\t};\r\n\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nexport default surveyReducer;\r\n","import { combineReducers } from 'redux';\r\nimport { persistReducer } from 'redux-persist';\r\nimport storage from 'redux-persist/lib/storage'\r\n\r\nimport clientReducer from './clients/client.reducer';\r\nimport userReducer from './users/user.reducer'\r\nimport cohortReducer from './cohorts/cohorts.reducer';\r\nimport themeReducer from './themes/theme.reducer'\r\nimport questionReducer from './questions/question.reducer'\r\nimport questionGroupReducer from './question-groups/question-group.reducer';\r\nimport surveyReducer from './surveys/survey.reducer'\r\nimport scheduleReducer from './schedules/schedule.reducer'\r\n\r\n\r\nconst persistConfig = {\r\n\tkey: 'root',\r\n\tstorage,\r\n\twhitelist: ['survey', 'user']\r\n}\r\n\r\nconst rootReducer = combineReducers({\r\n\tclient: clientReducer,\r\n\tuser: userReducer,\r\n\tcohort: cohortReducer,\r\n\ttheme: themeReducer,\r\n\tquestion: questionReducer,\r\n\tquestionGroup: questionGroupReducer,\r\n\tsurvey: surveyReducer,\r\n\t// schedule: scheduleReducer\r\n});\r\n\r\nexport default persistReducer(persistConfig, rootReducer);\r\n","import { createStore, applyMiddleware } from 'redux';\r\nimport { persistStore } from 'redux-persist';\r\nimport logger from 'redux-logger';\r\n\r\nimport rootReducer from './root-reducer';\r\n\r\nconst middlewares = [logger];\r\n\r\nconst store = createStore(rootReducer, applyMiddleware(...middlewares));\r\n\r\nconst persistor = persistStore(store)\r\n\r\nconst newStore = {persistor, store}\r\n\r\nexport default newStore\r\n","import axios from 'axios';\r\n\r\n\r\nconst modifiedAxios = axios.create({\r\n baseURL: process.env.REACT_APP_API_BASE_URL //'https://phase3-survey-tool-dev.nw.r.appspot.com/'\r\n});\r\n\r\nexport const cancelToken = axios.CancelToken\r\n\r\nmodifiedAxios.defaults.params = {};\r\n\r\nmodifiedAxios.interceptors.request.use( \r\n\r\n function (config) {\r\n \r\n // const organisationId = useSelector((state) => state.user.organisationId); \r\n\r\n const token = localStorage.getItem(\"jwt\"); \r\n const organisationId = localStorage.getItem(\"organisationId\"); \r\n\r\n\r\n \r\n \r\n let url = new URL(process.env.REACT_APP_API_BASE_URL + config.url)\r\n\r\n \r\n\r\n if (token) {\r\n\r\n \r\n // const organisationId = useSelector((state) => state.user.organisationId); \r\n config.headers[\"Authorization\"] = 'Bearer ' + token;\r\n config.headers['Content-Type'] = 'application/json';\r\n\r\n\r\n \r\n \r\n if (config.method !== 'delete' && url.pathname !== '/themes' && url.pathname.includes('/keep-alive') === false && url.pathname.includes('/surveys/') === false ) {\r\n config.data = { ...config.data, og: parseInt(organisationId) }\r\n }\r\n\r\n if (config.method !== 'delete' && url.pathname === '/themes' ) {\r\n config.data = { ...config.data, ogs: [parseInt(organisationId)] }\r\n\r\n }\r\n\r\n\r\n if (config.method === 'get' && url.pathname.includes('/surveys/responses/') ) {\r\n config.params['og'] = organisationId;\r\n config.params['content'] = 'responses';\r\n \r\n } \r\n\r\n // GET REQUEST FOR ALL EXCEPT SURVEY FORM AND THEMES AND SURVEY RESPONSES CSV DOWNLOAD\r\n \r\n //\r\n if (config.method === 'get' && url.pathname !== '/surveys/form/'&& url.pathname.includes('/surveys/responses/') === false && url.pathname !== '/themes' && url.pathname.includes('/surveys/') === false ) { // Added url pathname includes surveys to stop organisation ID being attached to findOne Survey Filters.\r\n config.params['og'] = organisationId;\r\n //config.params['_sort'] = 'id:DESC';\r\n } \r\n\r\n\r\n \r\n\r\n //GET REQUEST FOR THEMES\r\n if (config.method === 'get' && url.pathname === '/themes' ) {\r\n config.params['ogs'] = organisationId;\r\n //config.params['_sort'] = 'id:DESC';\r\n \r\n } \r\n\r\n \r\n if (url.pathname === '/surveys/form/') {\r\n\r\n let formattedUrl = url.search.split('/')\r\n \r\n\r\n config.url = `surveys/form/${formattedUrl[1]}`\r\n\r\n \r\n \r\n }\r\n\r\n }\r\n \r\n if (!token && url.pathname === '/surveys/form/') {\r\n\r\n let formattedUrl = url.search.split('/')\r\n\r\n \r\n config.headers['Content-Type'] = 'application/json';\r\n config.url = `surveys/form/${formattedUrl[1]}`\r\n\r\n\r\n }\r\n\r\n \r\n return config;\r\n\r\n \r\n },\r\n function(error) {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n // modifiedAxios.interceptors.response.use(res => {\r\n // // success\r\n // return res\r\n // }, err => {\r\n // const { status } = err.response\r\n \r\n // if (status === 403 || status === 401) {\r\n // // here we have access of the useHistory() from current Router\r\n // localStorage.removeItem('jwt')\r\n // localStorage.removeItem('organisationId')\r\n // history.push('/')\r\n // location.href = \"'/login'\r\n\r\n\r\n // // }\r\n // }\r\n // console.log('error', err)\r\n\r\n // ErrorCatch(err)\r\n \r\n // return Promise.reject(err)\r\n // })\r\n\r\n\r\n\r\n// export const setupInterceptors = history => {\r\n// modifiedAxios.interceptors.response.use(res => {\r\n// // success\r\n// return res\r\n// }, err => {\r\n// const { status } = err.response\r\n \r\n// if (status === 403 || status === 401) {\r\n// // here we have access of the useHistory() from current Router\r\n// localStorage.removeItem('jwt')\r\n// localStorage.removeItem('organisationId')\r\n// history.push('/')\r\n\r\n\r\n// }\r\n\r\n// console.log('error', err)\r\n\r\n// ErrorCatch(err)\r\n \r\n// return Promise.reject(err)\r\n// })\r\n// }\r\n// setupInterceptors()\r\n\r\nexport default modifiedAxios;\r\n// modifiedAxios.interceptors.response.use( \r\n \r\n// function(response) {\r\n// return response\r\n\r\n// },\r\n// function (error) {\r\n\r\n\r\n \r\n\r\n\r\n// if (error.response.status === 403) {\r\n\r\n// const dispatch = useDispatch();\r\n\r\n\r\n// // const history = useHistory();\r\n// // history.push('/')\r\n\r\n \r\n// }\r\n// return Promise.reject(error);\r\n \r\n// }\r\n// );\r\n\r\n\r\n\r\n// Changes\r\n\r\n\r\n// Added url pathname includes surveys to stop organisation ID being attached to findOne Survey Filters. - FM \r\n","import React from 'react';\r\n\r\nconst ErrorNotice = (props) => {\r\n return (\r\n \r\n {props.message}\r\n \r\n );\r\n};\r\n\r\nexport default ErrorNotice;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useDispatch } from \"react-redux\";\r\nimport axios from \"../../misc/modifiedAxios\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport { useHistory, useLocation } from 'react-router-dom'; //Use history and location is used to change the url path of the app\r\nimport ErrorNotice from '../../misc/ErrorNotice';\r\nimport SuccessMessageAlert from '../../misc/successMessageAlert';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport './Login.scss';\r\n// import apiCall from '../../helpers/apiCall';\r\n\r\nconst LoginV4 = () => {\r\n // const [email, setEmail] = useState(); //Setting state for each variable\r\n // const [password, setPassword] = useState();\r\n const [error, setError] = useState();\r\n\r\n // member variables\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const [email, setEmail] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [isLoading, setisLoading] = useState(false);\r\n const location = useLocation();\r\n\r\n\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault(); //Prevents component refresh after function runs\r\n\r\n\r\n if (email !== \"\" && password !== \"\") {\r\n\r\n try {\r\n\r\n const data = {\r\n identifier: email,\r\n password: password\r\n }\r\n\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n\r\n\r\n setisLoading(true)\r\n const response = await axios.post(\"auth/local\", data).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 400) {\r\n\r\n alert(\"Please ensure your email and password are correct.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n return\r\n }\r\n\r\n if (error.response.status === 403) {\r\n\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n const jwt = response?.data?.jwt;\r\n\r\n console.log('jwt', jwt)\r\n\r\n const user = response?.data?.user;\r\n\r\n // Save the jwt in localstorage\r\n localStorage.setItem(\"jwt\", jwt);\r\n\r\n dispatch({ type: \"SET_USER\", payload: user });\r\n\r\n\r\n //___________________________________ v4 user me Method ______________________________\r\n\r\n\r\n let ogsResponseData\r\n\r\n if (jwt) {\r\n ogsResponseData = await axios.get(\"/users/me\").catch(\r\n\r\n (error) => {\r\n if (error.response.status === 400) {\r\n\r\n alert(\"Please ensure your email and password are correct.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n return\r\n }\r\n\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n }\r\n\r\n console.log('ogsResponseData', ogsResponseData)\r\n\r\n const organisationId = ogsResponseData?.data?.active_og ? ogsResponseData?.data?.active_og : ogsResponseData?.data?.ogs[0]?.id;\r\n // const organisationId = 1\r\n\r\n const defaultOrgId = response?.data?.default_og;\r\n\r\n // Save the Organisation details in localstorage\r\n localStorage.setItem(\"organisationId\", organisationId);\r\n\r\n\r\n dispatch({ type: \"SET_ORGANISATION\", payload: organisationId });\r\n dispatch({ type: \"SET_ALL_ORGANISATIONS\", payload: ogsResponseData?.data?.ogs })\r\n\r\n\r\n\r\n if (defaultOrgId) {\r\n\r\n const defaultOrg = ogsResponseData.ogs.filter(x => {\r\n if (x.id === defaultOrgId) {\r\n return x\r\n }\r\n })\r\n\r\n\r\n dispatch({ type: \"SET_DEFAULT_ORGANISATION\", payload: defaultOrg[0] });\r\n\r\n }\r\n\r\n\r\n\r\n setisLoading(false)\r\n // Redirect to Home page.\r\n\r\n\r\n if (user && organisationId && jwt) {\r\n history.push(\"/question-manager\")\r\n }\r\n\r\n } catch (err) {\r\n console.log(err)\r\n\r\n\r\n }\r\n }\r\n\r\n };\r\n\r\n const forgotPassword = () => {\r\n history.push('/reset-password'); //Forces app to /reset-password path\r\n };\r\n\r\n\r\n useEffect(() => {\r\n\r\n const jwt = localStorage.getItem('jwt')\r\n const organisationId = localStorage.getItem('organisationId')\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (jwt && organisationId) {\r\n history.push(\"/question-manager\")\r\n }\r\n\r\n\r\n }, [history]);\r\n\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n {/* Checks the current location for state, if true then it returns the success message component else nothing */}\r\n {/* Passes userData to header component */}\r\n {/* {location.state ? (\r\n \r\n ) : (\r\n <>\r\n )} */}\r\n
\r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Signing in...\r\n
\r\n
\r\n ) : (\r\n
\r\n

Login

\r\n {/* If error exists in state then pass it to the ErrorNotice component */}\r\n {error && (\r\n setError(undefined)}\r\n />\r\n )}\r\n
\r\n \r\n setEmail(e.target.value)}\r\n />\r\n {/* on input change set email to value of input */}\r\n
\r\n\r\n
\r\n \r\n setPassword(e.target.value)}\r\n />\r\n
\r\n \r\n By logging in, you agree to the Privacy Policy and Terms\r\n of Service.\r\n \r\n \r\n \r\n Login\r\n \r\n {/*

\r\n \r\n Forgot password?\r\n \r\n

*/}\r\n
\r\n \r\n )}\r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default LoginV4;\r\n/* Exports Login for use in other components */\r\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0.000000,136.000000) scale(0.100000,-0.100000)\",\n fill: \"#57D5D1\",\n stroke: \"none\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M595 1349 c-262 -38 -479 -220 -559 -469 -71 -222 -11 -488 149 -653 77 -81 101 -99 177 -140 292 -156 641 -80 855 185 96 119 154 329 133 481 -17 123 -70 258 -133 335 -85 106 -214 196 -337 236 -44 14 -188 37 -213 35 -7 -1 -39 -5 -72 -10z m-89 -327 c51 -50 91 -78 154 -109 146 -70 222 -89 404 -101 l130 -9 32 -37 c35 -40 49 -89 38 -133 -10 -44 -54 -95 -95 -111 -23 -9 -41 -24 -44 -36 -16 -55 -66 -134 -120 -191 -227 -236 -591 -176 -748 122 -20 39 -37 78 -37 87 0 9 -8 16 -20 16 -29 0 -87 56 -100 96 -25 75 16 158 96 194 81 35 234 209 234 266 0 8 2 14 4 14 2 0 35 -31 72 -68z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M446 684 c-9 -8 -16 -22 -16 -30 0 -18 36 -54 54 -54 37 0 61 61 34 88 -17 17 -54 15 -72 -4z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M842 688 c-27 -27 -3 -88 34 -88 18 0 54 36 54 54 0 37 -61 61 -88 34z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M492 368 c5 -35 89 -71 175 -76 64 -4 80 -1 138 26 49 23 65 36 65 51 0 28 -19 26 -71 -4 -63 -36 -175 -36 -238 0 -54 31 -73 32 -69 3z\"\n}));\n\nfunction SvgAvatar(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"136.000000pt\",\n height: \"136.000000pt\",\n viewBox: \"0 0 136.000000 136.000000\",\n preserveAspectRatio: \"xMidYMid meet\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAvatar);\nexport default __webpack_public_path__ + \"static/media/avatar.7428c29e.svg\";\nexport { ForwardRef as ReactComponent };","export default __webpack_public_path__ + \"static/media/analyticswhite.06f926e7.svg\";","export default __webpack_public_path__ + \"static/media/analyticsblue.bbf85c18.svg\";","export default __webpack_public_path__ + \"static/media/surveymanagerblue.68a991bd.svg\";","export default __webpack_public_path__ + \"static/media/surveymanagerwhite.a4a0c1da.svg\";","export default __webpack_public_path__ + \"static/media/taskwhite.d04d3eef.svg\";","export default __webpack_public_path__ + \"static/media/taskblue.a9c0d983.svg\";","export default __webpack_public_path__ + \"static/media/settingsBlue.5f4f62f4.svg\";","export default __webpack_public_path__ + \"static/media/settingsWhite.1f04e199.svg\";","export default __webpack_public_path__ + \"static/media/BottomSVGImage.b0350fd4.svg\";","export default __webpack_public_path__ + \"static/media/SenseLogoWhite.04726645.svg\";","import React, { useRef, useState } from 'react';\r\nimport axios from '../../../misc/modifiedAxios'\r\nimport './sidenavbar.component.scss';\r\n\r\nimport { withRouter } from 'react-router-dom';\r\n\r\nimport { ReactComponent as Logo } from '../../../assets/avatar.svg';\r\n\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\n\r\nimport Popover from \"react-bootstrap/Popover\"\r\nimport OverlayTrigger from \"react-bootstrap/OverlayTrigger\"\r\n\r\nimport Button from \"react-bootstrap/Button\"\r\n\r\nimport Overlay from 'react-bootstrap/Overlay';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport \"../../../_vars.scss\"\r\n\r\n// import { faPlusCircle } from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport analyticswhite from '../../../assets/analyticswhite.svg';\r\nimport analyticsblue from '../../../assets/analyticsblue.svg';\r\nimport surveymanagerblue from '../../../assets/surveymanagerblue.svg';\r\nimport surveymanagerwhite from '../../../assets/surveymanagerwhite.svg';\r\nimport taskwhite from '../../../assets/taskwhite.svg';\r\nimport taskblue from '../../../assets/taskblue.svg';\r\nimport settingsBlue from '../../../assets/settingsBlue.svg';\r\nimport settingsWhite from '../../../assets/settingsWhite.svg';\r\nimport BottomSVGImage from '../../../assets/BottomSVGImage.svg';\r\n\r\n\r\nimport SenseLogoWhite from '../../../assets/SenseLogoWhite.svg';\r\n\r\n\r\nfunction SideNavBar({ history }) {\r\n\r\n\r\n\r\n const [show, setShow] = useState(false);\r\n const [target, setTarget] = useState(null);\r\n const ref = useRef(null);\r\n\r\n const handleClick = (event) => {\r\n setShow(!show);\r\n setTarget(event.target);\r\n };\r\n\r\n const user = useSelector((state) => state.user);\r\n\r\n\r\n let organisations\r\n let organisationId\r\n\r\n if (user) {\r\n organisations = user.organisations\r\n organisationId = user.organisationId\r\n }\r\n\r\n\r\n const formatedOrganisations = organisations?.map(x => {\r\n return {\r\n company_name: x.company_name,\r\n id: x.id\r\n }\r\n })\r\n\r\n\r\n // const [show, setShow] = useState(false);\r\n // const target = useRef(null);\r\n const dispatch = useDispatch()\r\n\r\n\r\n const logOut = (e) => {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n dispatch({ type: \"SET_USER\", payload: null });\r\n history.push('/')\r\n }\r\n\r\n // const setLastActiveOrg = (e) => {\r\n\r\n // }\r\n\r\n const setLastActiveOrg = async (e) => {\r\n\r\n\r\n e.preventDefault()\r\n\r\n try {\r\n\r\n let lastActiveOrg = { active_og: e.target.value }\r\n\r\n const updateActiveOrg = await axios.put(`/users/${user.user.id}`, lastActiveOrg).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n }\r\n );\r\n\r\n\r\n }\r\n\r\n catch (err) {\r\n console.log(err)\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n let cohortstyle;\r\n let cohortimage;\r\n let cohorttext;\r\n if (history.location.pathname.includes('/cohorts')) {\r\n cohortstyle = { backgroundColor: 'var(--navbar-selected)' };\r\n cohortimage = analyticsblue;\r\n cohorttext = { color: \"var(--navbar-background)\" };\r\n } else {\r\n cohortstyle = { backgroundColor: 'var(--navbar-background)' };\r\n cohortimage = analyticswhite;\r\n cohorttext = {};\r\n }\r\n\r\n\r\n let questionstyle;\r\n let questionimage;\r\n let questiontext;\r\n if (history.location.pathname.includes('/question-manager')) {\r\n questionstyle = { backgroundColor: 'var(--navbar-selected)' };\r\n questionimage = taskblue;\r\n questiontext = { color: \"var(--navbar-background)\" };\r\n } else {\r\n questionstyle = { backgroundColor: 'var(--navbar-background)' };\r\n questionimage = taskwhite;\r\n questiontext = {};\r\n }\r\n\r\n\r\n\r\n let surveystyle;\r\n let surveyimage;\r\n let surveytext;\r\n if (history.location.pathname.includes('/survey-schedule-builder')) {\r\n surveystyle = { backgroundColor: 'var(--navbar-selected)' };\r\n surveyimage = surveymanagerblue;\r\n surveytext = { color: \"var(--navbar-background)\" };\r\n } else {\r\n surveystyle = { backgroundColor: 'var(--navbar-background)' };\r\n surveyimage = surveymanagerwhite;\r\n surveytext = {};\r\n }\r\n\r\n\r\n let settingsstyle;\r\n let settingsimage;\r\n let settingstext;\r\n if (history.location.pathname.includes('/settings') || history.location.pathname.includes('/organisations')) {\r\n settingsstyle = { backgroundColor: 'var(--navbar-selected)' };\r\n settingsimage = settingsBlue;\r\n settingstext = { color: \"var(--navbar-background)\" };\r\n } else {\r\n settingsstyle = { backgroundColor: 'var(--navbar-background)' };\r\n settingsimage = settingsWhite;\r\n settingstext = {};\r\n }\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n\r\n
\r\n\r\n edit_button\r\n {/* */}\r\n
\r\n Organisation:\r\n \r\n
\r\n\r\n\r\n {/* OLD QM '/question-manager/questions' */}\r\n\r\n
history.push('/question-manager')}>\r\n {/**/}\r\n Question Manager\r\n edit_button\r\n
\r\n
history.push('/survey-schedule-builder/surveys')}>\r\n {/**/}\r\n Survey Builder\r\n edit_button\r\n
\r\n\r\n\r\n
\r\n Settings\r\n edit_button\r\n \r\n \r\n Settings\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n edit_button\r\n\r\n
\r\n\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default withRouter(SideNavBar);","import React, { useRef, useState, useLayoutEffect, forceUpdate, useEffect } from 'react';\r\nimport './cohortitemname.styles.scss';\r\nimport { faUsersCog } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport { useDispatch } from 'react-redux';\r\n\r\nfunction CohortItemName({ cohort_name }) {\r\n\r\n const [name_short, set_name_short] = useState(cohort_name)\r\n const cohort_name_ref = useRef(null);\r\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\r\n const [windowResize, set_window_resize] = useState(false);\r\n useLayoutEffect(() => {\r\n if (cohort_name_ref.current.offsetWidth != dimensions.width) {\r\n if (cohort_name_ref.current.offsetWidth > dimensions.width) {\r\n var temp_name_short = name_short\r\n } else {\r\n var temp_name_short = name_short\r\n }\r\n setDimensions({\r\n width: cohort_name_ref.current.offsetWidth,\r\n height: cohort_name_ref.current.offsetHeight\r\n });\r\n\r\n if (getTextWidth(temp_name_short) > cohort_name_ref.current.offsetWidth) {\r\n temp_name_short = temp_name_short + \"...\"\r\n while (getTextWidth(temp_name_short) > cohort_name_ref.current.offsetWidth) {\r\n temp_name_short = temp_name_short.substring(0, temp_name_short.length - 4) + \"...\"\r\n }\r\n temp_name_short = temp_name_short.substring(0, temp_name_short.length - 10) + \"...\"\r\n }\r\n set_name_short(temp_name_short)\r\n }\r\n set_window_resize(false)\r\n }, [windowResize]);\r\n let timeout;\r\n const handleResize = () => {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n set_window_resize(true);\r\n }, 200);\r\n }\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n\r\n return (\r\n
{name_short}
\r\n );\r\n}\r\n\r\nfunction getTextWidth(text, font) {\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n\r\n context.font = font || getComputedStyle(document.body).font;\r\n\r\n return context.measureText(text).width;\r\n}\r\n\r\n\r\nexport default CohortItemName;\r\n\r\n","import React from 'react';\r\nimport './cohortitem.styles.scss';\r\nimport { faUsersCog } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport { useDispatch } from 'react-redux';\r\n\r\n\r\nimport CohortItemName from '../cohortItemName/cohortitemname.component';\r\n\r\nfunction CohortItem({ id, cohort_name, created_at, cohort_desc }) {\r\n\r\n // onClick dispatch the passed in id as currently selected cohort\r\n\r\n const dispatch = useDispatch()\r\n\r\n const selectCohort = () => {\r\n dispatch({\r\n type: 'SELECT_COHORT',\r\n payload: { id, cohort_name, created_at, cohort_desc }\r\n })\r\n }\r\n\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
Created: {created_at}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default CohortItem;\r\n\r\n","import React, { useState, useEffect } from 'react';\r\n// import Axios from 'axios';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\n\r\nimport \"../../../_vars.scss\"\r\n\r\n\r\nconst CreateCohortModal = ({ showModal, setShowModal }) => {\r\n\r\n\r\n //---useSelector get client Id\r\n //POST object\r\n\r\n const history = useHistory()\r\n const dispatch = useDispatch()\r\n const [newCohortSelection, setNewCohortSelection] = useState(null)\r\n\r\n const [name, setName] = useState('')\r\n const [description, setDescription] = useState('')\r\n const clientId = useSelector((state) => state.client.clientId);\r\n\r\n const [isEnabled, setEnabled] = useState(true)\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n\r\n setEnabled(false)\r\n\r\n try {\r\n const newCohort = {\r\n cohort_name: name,\r\n cohort_desc: description,\r\n client_id: clientId\r\n };\r\n\r\n\r\n const response = await axios.post(\r\n `/cohorts`,\r\n newCohort\r\n ).catch(\r\n // (error) => {\r\n // if (error.response.status === 403 || error.response.status === 401) {\r\n // localStorage.removeItem('jwt')\r\n // localStorage.removeItem('organisationId')\r\n // history.push('/')\r\n // }\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n }\r\n );\r\n\r\n setEnabled(true)\r\n\r\n const { cohort_name, cohort_desc, created_at, id } = response.data\r\n\r\n setNewCohortSelection({\r\n id,\r\n cohort_name,\r\n cohort_desc,\r\n created_at\r\n })\r\n\r\n setShowModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (newCohortSelection !== null) {\r\n const setCohortsFromRequest = () => {\r\n dispatch({\r\n type: 'ADD_NEW_COHORT',\r\n payload: newCohortSelection\r\n })\r\n }\r\n\r\n setCohortsFromRequest();\r\n }\r\n\r\n }, [dispatch, newCohortSelection]);\r\n\r\n\r\n\r\n return (\r\n {\r\n setShowModal(false);\r\n }}>\r\n \r\n Create Cohort\r\n \r\n
\r\n \r\n\r\n\r\n \r\n \r\n \r\n Name:\r\n \r\n \r\n \r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n if (e.target.value.trim() !== '') {\r\n setName(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n if (e.target.value.trim() !== '') {\r\n setDescription(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n {\r\n setShowModal(false);\r\n }}>\r\n Cancel\r\n \r\n {\r\n setShowModal(false);\r\n }}\r\n disabled={!isEnabled}\r\n type='submit'\r\n className='modal-create-button'\r\n variant='no-variant-p'>\r\n Create Cohort\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CreateCohortModal;\r\n","import React, { useState } from 'react';\r\nimport CohortItem from '../CohortItem/cohortitem.component';\r\nimport CreateCohortModal from '../CreateCohortModal/create-cohort-modal.component';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle } from '@fortawesome/free-solid-svg-icons';\r\n\r\n\r\nimport { useSelector } from 'react-redux'\r\n\r\n\r\nimport './cohort-selection.component.scss';\r\n\r\n\r\nfunction CohortSelection({ setCohortId }) {\r\n\r\n const [showModal, setShowModal] = useState(false);\r\n\r\n //useSelector from cohortReducer to get all cohort names, timestamps, ids\r\n\r\n const cohorts = useSelector((state) => state.cohort.cohorts);\r\n\r\n // const cohorts = []\r\n\r\n\r\n return (\r\n
\r\n

\r\n Cohorts\r\n\r\n

\r\n
\r\n {\r\n setShowModal(true);\r\n }} />\r\n Create New Cohort\r\n
\r\n\r\n {/* on click of the cohort item ... */}\r\n\r\n\r\n {cohorts.length > 0 ?
\r\n {cohorts.map(({ id, cohort_name, created_at, cohort_desc }) => )}\r\n
:
No Cohorts Created
}\r\n\r\n \r\n\r\n\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default CohortSelection;","import React, { useState, useEffect } from 'react';\r\n// import Axios from 'axios';\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport axios from '../../../misc/modifiedAxios'\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport \"../../../_vars.scss\"\r\n\r\n\r\nconst EditCohortModal = ({ showModal, setShowModal }) => {\r\n // const clientId = useSelector((state) => state.client.clientId);\r\n\r\n\r\n //VERSION 2 \r\n\r\n //VERSION 1\r\n const history = useHistory()\r\n\r\n const [currentCohortDetails, setcurrentCohortDetails] = useState({\r\n cohort_name: '',\r\n cohort_desc: '',\r\n })\r\n\r\n const selectedCohortId = useSelector((state) => state.cohort.selectedCohort.id);\r\n const cohorts = useSelector((state) => state.cohort.cohorts);\r\n\r\n //VERSION 2 as soon as you edit it sets it\r\n const { cohort_name, cohort_desc } = currentCohortDetails\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n const loadCohortDetails = () => {\r\n\r\n if (selectedCohortId !== null) {\r\n return cohorts.map(cohort => cohort.id === selectedCohortId ?\r\n setcurrentCohortDetails({\r\n cohort_name: cohort.cohort_name,\r\n cohort_desc: cohort.cohort_desc,\r\n }) : cohort)\r\n }\r\n\r\n }\r\n\r\n loadCohortDetails();\r\n\r\n }, [cohorts, selectedCohortId]);\r\n\r\n\r\n //EDITED COHORT SELECTIOn OBJECT\r\n const dispatch = useDispatch()\r\n const [editedCohortSelection, setEditedCohortSelection] = useState(null)\r\n\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n\r\n try {\r\n const editedCohort = {\r\n cohort_name: currentCohortDetails.cohort_name,\r\n cohort_desc: currentCohortDetails.cohort_desc,\r\n // client_id: clientId\r\n };\r\n\r\n const response = await axios.put(\r\n `/cohorts/${selectedCohortId}`,\r\n editedCohort\r\n ).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n }\r\n );;\r\n\r\n\r\n const { cohort_name, cohort_desc, created_at, id } = response.data\r\n\r\n setEditedCohortSelection({\r\n id,\r\n cohort_name,\r\n cohort_desc,\r\n created_at\r\n })\r\n\r\n setShowModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (editedCohortSelection !== null) {\r\n const setCohortsFromRequest = () => {\r\n dispatch({\r\n type: 'UPDATE_COHORT_DETAILS',\r\n payload: editedCohortSelection\r\n })\r\n }\r\n\r\n setCohortsFromRequest();\r\n }\r\n\r\n }, [dispatch, editedCohortSelection]);\r\n\r\n\r\n return (\r\n\r\n {\r\n setShowModal(false);\r\n }}>\r\n \r\n Edit Cohort\r\n \r\n
\r\n \r\n \r\n \r\n \r\n Name:\r\n \r\n \r\n \r\n \r\n {\r\n //Maybe add to EDITED cohort local state\r\n // if (e.target.value.trim() !== '') {\r\n setcurrentCohortDetails({\r\n ...currentCohortDetails, cohort_name: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n // if (e.target.value.trim() !== '') {\r\n setcurrentCohortDetails({\r\n ...currentCohortDetails, cohort_desc: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n {\r\n setShowModal(false);\r\n }}>\r\n Cancel\r\n \r\n \r\n Save Changes\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default EditCohortModal;\r\n","import React from 'react'\r\nimport styled from 'styled-components'\r\nimport { useTable } from 'react-table'\r\n\r\n// import makeData from './makeData'\r\n\r\nconst Styles = styled.div`\r\npadding: 1rem;\r\n\r\noverflow-x: auto;\r\ntable {\r\n width:95%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n}\r\n`\r\n\r\nfunction Table({ columns, data }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n prepareRow,\r\n } = useTable({\r\n columns,\r\n data,\r\n })\r\n\r\n // Render the UI for your table\r\n return (\r\n \r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {rows.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}
{cell.render('Cell')}
\r\n )\r\n}\r\n\r\nfunction ApiTable({ recipients }) {\r\n\r\n\r\n\r\n const recipientData = {\r\n initialData: recipients\r\n }\r\n\r\n\r\n // const columns = Object.keys(recipientData.initialData[0]).map((key, id) => {\r\n\r\n // //id Cleaning here\r\n // //key === 'first_name' Header has to be 'First Name'\r\n\r\n // return {\r\n // Header: key,\r\n // accessor: key\r\n // }\r\n // })\r\n\r\n const columns = Object.keys(recipientData.initialData[0])\r\n .filter((key, io) => key !== \"id\" && key !== \"created_at\" && key !== \"updated_at\")\r\n .map((key, id) => {\r\n\r\n if (key === 'first_name') {\r\n key = \"First Name\"\r\n\r\n return {\r\n Header: key,\r\n accessor: 'first_name'\r\n }\r\n }\r\n\r\n if (key === 'last_name') {\r\n key = \"Last Name\"\r\n\r\n return {\r\n Header: key,\r\n accessor: 'last_name'\r\n }\r\n }\r\n\r\n if (key === 'email') {\r\n key = \"Email\"\r\n\r\n return {\r\n Header: key,\r\n accessor: 'email'\r\n }\r\n }\r\n\r\n // if (key === 'organisation') {\r\n // key = \"Organisation\"\r\n\r\n // return {\r\n // Header: key,\r\n // accessor: 'organisation'\r\n // }\r\n // }\r\n\r\n return {\r\n Header: key,\r\n accessor: key\r\n }\r\n })\r\n\r\n\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n () => columns,\r\n [columns]\r\n )\r\n\r\n // const data = React.useMemo(() => makeData(150), [])\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ApiTable\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport axios, { cancelToken } from \"../../../misc/modifiedAxios\";\r\n// import Axios from \"axios\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport './cohort-display.component.scss';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Spinner from 'react-bootstrap/spinner';\r\nimport \"../../../_vars.scss\";\r\n\r\n// import UserItem from '../UserItem/useritem.component';\r\nimport EditCohortModal from '../EditCohortModal/edit-cohort-modal.component'\r\nimport ApiTable from '../../Shared/ApiTable/api-table.component'\r\n\r\n\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash, faEdit } from '@fortawesome/free-solid-svg-icons';\r\n\r\n// at first render of the component is undefined\r\n//could add it into useRef, this way would not be Rerendered whenever useEffect shoots again\r\n\r\nconst CohortDisplay = () => {\r\n\r\n const CancelToken = useRef(cancelToken)\r\n const cancel = useRef(undefined)\r\n\r\n const history = useHistory()\r\n const dispatch = useDispatch()\r\n //EDIT cohort details modal state\r\n const [showModal, setShowModal] = useState(false);\r\n const [isLoading, setisLoading] = useState(false);\r\n const [isUpdating, setisUpdating] = useState(false);\r\n\r\n const [csvText, setCsvText] = useState('')\r\n const [csvTitle, setCsvTitle] = useState('')\r\n\r\n const selectedCohort = useSelector((state) => state.cohort.selectedCohort);\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n let selectedCohortId\r\n\r\n if (selectedCohort) {\r\n selectedCohortId = selectedCohort.id\r\n }\r\n\r\n\r\n\r\n const [recipientDetails, setRecipientDetails] = useState({\r\n recipients: []\r\n })\r\n\r\n useEffect(() => {\r\n\r\n const getSeletedCohort = async () => {\r\n try {\r\n\r\n\r\n if (selectedCohortId) {\r\n\r\n\r\n if (cancel.current !== undefined) {//uses .current property as this is how you manipulate the object in useRef\r\n cancel.current(); // same as running cancel() because once it is defined it is assigned a function with new CancelToken (also has .current)\r\n\r\n }\r\n setisLoading(true)\r\n\r\n const response = await axios.get(\r\n `/cohorts/${selectedCohortId}`,\r\n {\r\n cancelToken: new CancelToken.current(c => {\r\n cancel.current = c; // c is the identifier of the request, ON THE FIRST request it DEFINES the cancel variable, meaning\r\n }),\r\n }\r\n ).catch(\r\n // (error) => {\r\n // if (error.response.status === 403 || error.response.status === 401) {\r\n // localStorage.removeItem('jwt')\r\n // localStorage.removeItem('organisationId')\r\n // history.push('/')\r\n // }\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n }\r\n );\r\n\r\n\r\n // ******* maybe will need to replace with useDispatch\r\n\r\n\r\n if (response) {\r\n\r\n setRecipientDetails({\r\n recipients: response.data.recipients\r\n })\r\n setisLoading(false)\r\n }\r\n\r\n }\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n\r\n }\r\n };\r\n\r\n getSeletedCohort();\r\n }, [history, selectedCohortId]);\r\n\r\n const handleFile = (e) => {\r\n\r\n e.preventDefault()\r\n\r\n\r\n setCsvTitle(e.target.files[0].name)\r\n\r\n if (e.target.files[0]) {\r\n const reader = new FileReader()\r\n reader.onload = async (e) => {\r\n const text = e.target.result;\r\n setCsvText(text)\r\n };\r\n reader.readAsText(e.target.files[0])\r\n }\r\n\r\n //if the current method is not good can switch to local state that displays file name\r\n e.target.value = null\r\n // setInputTitle(csvText)\r\n\r\n }\r\n\r\n const updateRecipients = async (e) => {\r\n\r\n\r\n e.preventDefault()\r\n\r\n try {\r\n\r\n\r\n setCsvTitle('')\r\n if (selectedCohortId !== null && csvText.length > 0) {\r\n\r\n setisUpdating(true)\r\n\r\n\r\n let recipientData = { recipients: csvText }\r\n\r\n\r\n const updateResponse = await axios.put(`/cohorts/${selectedCohortId}`, recipientData).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n }\r\n );;\r\n\r\n\r\n if (updateResponse.status === 200) {\r\n\r\n setisUpdating(false)\r\n setisLoading(true)\r\n const getUpdatedRecipients = await axios.get(\r\n `/cohorts/${selectedCohortId}`).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n }\r\n );\r\n\r\n\r\n //maybe will need to replace with useDispatch\r\n\r\n\r\n setRecipientDetails({\r\n recipients: getUpdatedRecipients.data.recipients\r\n })\r\n\r\n setisLoading(false)\r\n }\r\n\r\n }\r\n }\r\n\r\n catch (err) {\r\n console.log(err)\r\n setisUpdating(false)\r\n setisLoading(false)\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n const deleteCohort = async () => {\r\n try {\r\n\r\n\r\n if (selectedCohortId) {\r\n\r\n\r\n if (cancel.current !== undefined) {//uses .current property as this is how you manipulate the object in useRef\r\n cancel.current(); // same as running cancel() because once it is defined it is assigned a function with new CancelToken (also has .current)\r\n\r\n }\r\n setisLoading(true)\r\n\r\n const response = await axios.delete(\r\n `/cohorts/${selectedCohortId}`,\r\n {\r\n cancelToken: new CancelToken.current(c => {\r\n cancel.current = c; // c is the identifier of the request, ON THE FIRST request it DEFINES the cancel variable, meaning\r\n }),\r\n }\r\n ).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n }\r\n );\r\n\r\n dispatch({\r\n type: 'DELETE_COHORT',\r\n payload: selectedCohort\r\n })\r\n\r\n }\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n\r\n }\r\n };\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n const { recipients } = recipientDetails\r\n\r\n\r\n let cohort_name\r\n let cohort_desc\r\n let created_at\r\n if (selectedCohort) {\r\n\r\n cohort_name = selectedCohort.cohort_name\r\n cohort_desc = selectedCohort.cohort_desc\r\n created_at = selectedCohort.created_at\r\n }\r\n\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_COHORT',\r\n payload: null\r\n })\r\n\r\n }, [dispatch, organisationId]);\r\n\r\n\r\n return (\r\n\r\n\r\n
\r\n

\r\n Cohorts\r\n

\r\n {!selectedCohort?.id ?
No Cohort Selected
\r\n\r\n :\r\n\r\n
\r\n
\r\n
updateRecipients(e)}>\r\n
\r\n \r\n {\r\n handleFile(e)\r\n\r\n }} />{/* onClick={e => (e.target.value = null)} */}\r\n\r\n {csvTitle ? csvTitle : 'No file'}\r\n\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n {/* ### RECIPIENT DETAILS TABLE */}\r\n

{cohort_name}

\r\n

{cohort_desc}

\r\n

{created_at}

\r\n\r\n
\r\n
\r\n {\r\n setShowModal(true);\r\n }}\r\n />\r\n {\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteCohort()\r\n }}\r\n />\r\n {/*
\r\n
*/}\r\n {/* {\r\n }} /> */}\r\n {/*
\r\n
*/}\r\n {/* */}\r\n
\r\n\r\n\r\n {showModal ? : null}\r\n\r\n
\r\n\r\n\r\n {/* TABLE AND CONDITIONAL MESSAGE/SPINNERS */}\r\n {!isLoading ? (\r\n\r\n !isUpdating ? (recipients.length === 0 ?
Cohort has no recipients
:\r\n\r\n ) :
\r\n Uploading Recipients...
) :\r\n (
\r\n Refreshing Recipients...
)\r\n }\r\n\r\n\r\n\r\n {/*
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n {showModal ? : null}\r\n\r\n
*/}\r\n\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default CohortDisplay;\r\n\r\n\r\n\r\n\r\n","import React, { useEffect } from 'react';\r\nimport axios from \"../../misc/modifiedAxios\";\r\nimport './cohorts.styles.scss';\r\nimport { useState } from 'react';\r\n\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport SideNavBar from '../../components/Shared/SideNavBar/sidenavbar.component';\r\nimport CohortSelection from '../../components/Cohort-Components/CohortSelection/cohort-selection.component';\r\nimport CohortDisplay from '../../components/Cohort-Components/CohortDisplay/cohort-display.component';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport ErrorCatch from '../../components/Shared/Error/error-catch';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\nconst Cohorts = () => {\r\n\r\n // Get all cohorts request useEffect on componenet did mount\r\n\r\n const [cohorts, setCohorts] = useState([])\r\n const [isLoading, setIsLoading] = useState(false);\r\n const dispatch = useDispatch()\r\n\r\n const history = useHistory();\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n useEffect(() => {\r\n\r\n const jwt = localStorage.getItem('jwt')\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (!jwt) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push(\"/\")\r\n }\r\n\r\n\r\n }, []);\r\n\r\n\r\n useEffect(() => {\r\n const getCohorts = async () => {\r\n try {\r\n\r\n setIsLoading(true)\r\n const response = await axios.get(\r\n `/cohorts`,\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n }\r\n // \r\n )\r\n ;\r\n if (response.data) {\r\n setCohorts(response.data)\r\n setIsLoading(false)\r\n }\r\n\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n };\r\n\r\n\r\n getCohorts();\r\n }, [history, organisationId]);\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n // if (cohorts.length > 0) {\r\n\r\n\r\n\r\n const setCohortsFromRequest = () => {\r\n dispatch({\r\n type: 'SET_COHORTS',\r\n payload: cohorts\r\n })\r\n }\r\n\r\n setCohortsFromRequest();\r\n // }\r\n\r\n setIsLoading(false)\r\n\r\n }, [cohorts, dispatch]);\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n <>\r\n \r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Loading Cohorts...\r\n
\r\n
\r\n ) : (\r\n <>\r\n \r\n \r\n )}\r\n \r\n\r\n
\r\n );\r\n};\r\n\r\nexport default Cohorts;","import React from 'react';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\n\r\nconst LikertScaleQuestion = ({ setMinValue, setMaxValue, setStartLabel, setEndLabel, startLabel, endLabel, minValue, maxValue, setReverse, setNotApplicable }) => {\r\n\r\n\r\n const toggleSwitch = (e) => {\r\n setReverse(prevReverse => !prevReverse)\r\n\r\n }\r\n\r\n\r\n const toggleNA = (e) => {\r\n setNotApplicable(prevNotApplicable => !prevNotApplicable)\r\n\r\n }\r\n\r\n // const minOptions = [[0, 18], [1, 16]]\r\n // const maxOptions = [[2, 19], [3, 20], [4, 21], [5, 22], [6, 23], [7, 17], [8, 24], [9, 25], [10, 26]]\r\n\r\n const minOptions = [0, 1]\r\n const maxOptions = [2, 3, 4, 5, 6, 7, 8, 9, 10]\r\n\r\n return (\r\n\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n \r\n Min:\r\n \r\n \r\n {\r\n // setMinValue(e.target.value.split(',').map(x => parseInt(x))) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n setMinValue(parseInt(e.target.value)) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n }}\r\n // selected=''\r\n\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n {/* */}\r\n {minOptions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n Max:\r\n \r\n \r\n {\r\n setMaxValue(e.target.value.split(',').map(x => parseInt(x))) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n }}\r\n value={maxValue}\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n {/* */}\r\n {maxOptions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n Min label:\r\n\r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setStartLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Max label:\r\n \r\n\r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n setEndLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n
\r\n Reverse Coded:\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Provide 'Not Applicable (N/A)' option:\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n );\r\n};\r\n\r\nexport default LikertScaleQuestion;\r\n","export default __webpack_public_path__ + \"static/media/addcirclebutton.c90661d7.svg\";","export default __webpack_public_path__ + \"static/media/trashicon.15ddbe09.svg\";","import React from 'react';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\n// import { Container } from 'react-bootstrap';\r\n// import { Row } from 'react-bootstrap';\r\n// import { Col } from 'react-bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash, faGripLines } from '@fortawesome/free-solid-svg-icons';\r\nimport './choice-questions.styles.scss'\r\nimport addIcon from '../../../../assets/addcirclebutton.svg'\r\nimport trashIcon from '../../../../assets/trashicon.svg'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nconst ChoiceQuestion = ({ formValues, setFormValues }) => {\r\n\r\n //source: https://bapunawarsaddam.medium.com/add-and-remove-form-fields-dynamically-using-react-and-react-hooks-3b033c3c0bf5\r\n\r\n\r\n let handleChange = (i, e) => {\r\n let newFormValues = [...formValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setFormValues(newFormValues);\r\n\r\n }\r\n\r\n let addFormFields = () => {\r\n setFormValues([...formValues, { value: \"\" }])\r\n // updateChoices([...formValues, { value: \"\" }])\r\n }\r\n\r\n let removeFormFields = (i) => {\r\n let newFormValues = [...formValues];\r\n newFormValues.splice(i, 1);\r\n setFormValues(newFormValues)\r\n }\r\n\r\n // const dndformValues = formValues.map((item, index) => {\r\n // return {\r\n // value: item.value,\r\n // id: index.toString()\r\n // }\r\n // })\r\n\r\n function handleOnDragEnd(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(formValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setFormValues(items)\r\n }\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n\r\n \r\n \r\n {(provided) => (\r\n
\r\n {formValues.map((element, index) => {\r\n return (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleChange(index, e)} maxLength='120'\r\n placeholder='max 120 characters' className='choice-inputs' />\r\n {\r\n index ?\r\n\r\n
\r\n\r\n trash_button {\r\n removeFormFields(index);\r\n }}\r\n />\r\n
\r\n\r\n\r\n : null\r\n }\r\n
\r\n )}\r\n\r\n\r\n
\r\n );\r\n })}\r\n\r\n\r\n
\r\n add_button {\r\n addFormFields();\r\n }}\r\n />\r\n Add Choice\r\n
\r\n\r\n\r\n {provided.placeholder}\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\n\r\nexport default ChoiceQuestion;\r\n","import React from 'react';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle, faTrash, faGripLines } from '@fortawesome/free-solid-svg-icons';\r\nimport './grid-questions.styles.scss'\r\nimport trashIcon from '../../../../assets/trashicon.svg'\r\nimport addIcon from '../../../../assets/addcirclebutton.svg'\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nconst GridChoiceQuestion = ({ rowValues, setRowValues, columnValues, setColumnValues, setReverse }) => {\r\n\r\n //source: https://bapunawarsaddam.medium.com/add-and-remove-form-fields-dynamically-using-react-and-react-hooks-3b033c3c0bf5\r\n\r\n\r\n const toggleSwitch = (e) => {\r\n setReverse(prevReverse => !prevReverse)\r\n\r\n }\r\n\r\n //_____________________ROWS____________________\r\n\r\n let handleRowChange = (i, e) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setRowValues(newFormValues);\r\n }\r\n\r\n let addRowFormFields = () => {\r\n setRowValues([...rowValues, { row_value: \"\" }])\r\n }\r\n\r\n let removeRowFormFields = (i) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues.splice(i, 1);\r\n setRowValues(newFormValues)\r\n }\r\n\r\n //_____________________COULMNS____________________\r\n\r\n let handleColumnChange = (i, e) => {\r\n let newFormValues = [...columnValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setColumnValues(newFormValues);\r\n }\r\n\r\n let addColumnFormFields = () => {\r\n setColumnValues([...columnValues, { column_value: \"\" }])\r\n }\r\n\r\n let removeColumnFormFields = (i) => {\r\n let newFormValues = [...columnValues];\r\n newFormValues.splice(i, 1);\r\n setColumnValues(newFormValues)\r\n }\r\n\r\n //___________ DnD Handle Rows_______________\r\n function handleOnDragEndRows(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(rowValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setRowValues(items)\r\n }\r\n\r\n //___________ DnD Handle Cols_______________\r\n function handleOnDragEndCols(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(columnValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setColumnValues(items)\r\n }\r\n\r\n\r\n return (\r\n\r\n
\r\n Rows:\r\n \r\n \r\n {(provided) => (\r\n
\r\n {rowValues.map((element, index) => (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleRowChange(index, e)} maxLength='50'\r\n placeholder='max 50 characters' className='grid-col-row-inputs' />\r\n {\r\n index ?\r\n\r\n
\r\n\r\n trash_button {\r\n removeRowFormFields(index);\r\n }}\r\n />\r\n
\r\n : null\r\n }\r\n
)}\r\n
\r\n ))}\r\n\r\n
\r\n add_button {\r\n addRowFormFields();\r\n }}\r\n />\r\n Add Row\r\n
\r\n\r\n {provided.placeholder}\r\n
)}\r\n
\r\n
\r\n Columns:\r\n \r\n \r\n {(provided) => (\r\n
\r\n {columnValues.map((element, index) => (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleColumnChange(index, e)} maxLength='50'\r\n placeholder='max 50 characters' className='grid-col-row-inputs' />\r\n {\r\n index ?\r\n\r\n
\r\n\r\n trash_button {\r\n removeColumnFormFields(index);\r\n }}\r\n />\r\n
\r\n : null\r\n }\r\n
)}\r\n
\r\n ))}\r\n\r\n\r\n
\r\n add_button {\r\n addColumnFormFields();\r\n }}\r\n />\r\n Add Column\r\n
\r\n\r\n {provided.placeholder}\r\n
)}\r\n
\r\n
\r\n \r\n \r\n
\r\n Reverse Coded:\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n )\r\n}\r\n\r\n\r\n\r\nexport default GridChoiceQuestion;\r\n","import React from 'react';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle, faTrash, faGripLines } from '@fortawesome/free-solid-svg-icons';\r\nimport './grid-likert-questions.styles.scss'\r\nimport trashIcon from '../../../../assets/trashicon.svg'\r\nimport addIcon from '../../../../assets/addcirclebutton.svg'\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nconst GridLikertQuestion = ({ setMinValue, setMaxValue, setStartLabel, setEndLabel, startLabel, endLabel, minValue, maxValue, rowValues, setRowValues, setReverse }) => {\r\n\r\n //source: https://bapunawarsaddam.medium.com/add-and-remove-form-fields-dynamically-using-react-and-react-hooks-3b033c3c0bf5\r\n\r\n\r\n\r\n const minOptions = [0, 1]\r\n const maxOptions = [2, 3, 4, 5, 6, 7, 8, 9, 10]\r\n\r\n const toggleSwitch = (e) => {\r\n setReverse(prevReverse => !prevReverse)\r\n\r\n }\r\n\r\n //_____________________ROWS____________________\r\n\r\n let handleRowChange = (i, e) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setRowValues(newFormValues);\r\n }\r\n\r\n let addRowFormFields = () => {\r\n setRowValues([...rowValues, { row_value: \"\" }])\r\n }\r\n\r\n let removeRowFormFields = (i) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues.splice(i, 1);\r\n setRowValues(newFormValues)\r\n }\r\n\r\n\r\n\r\n //___________ DnD Handle Rows_______________\r\n function handleOnDragEndRows(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(rowValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setRowValues(items)\r\n }\r\n\r\n\r\n\r\n return (\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Min:\r\n \r\n \r\n {\r\n // setMinValue(e.target.value.split(',').map(x => parseInt(x))) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n setMinValue(parseInt(e.target.value)) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n }}\r\n // selected=''\r\n\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n {/* */}\r\n {minOptions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n Max:\r\n \r\n \r\n {\r\n setMaxValue(e.target.value.split(',').map(x => parseInt(x))) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n }}\r\n value={maxValue}\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n {/* */}\r\n {maxOptions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Min label:\r\n\r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setStartLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Max label:\r\n\r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n setEndLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n Rows:\r\n \r\n \r\n {(provided) => (\r\n
\r\n {rowValues.map((element, index) => (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleRowChange(index, e)} maxLength='50'\r\n placeholder='max 50 characters' className='grid-col-row-inputs' />\r\n {\r\n index ?\r\n\r\n
\r\n\r\n trash_button {\r\n removeRowFormFields(index);\r\n }}\r\n />\r\n
\r\n : null\r\n }\r\n
)}\r\n
\r\n ))}\r\n\r\n
\r\n add_button {\r\n addRowFormFields();\r\n }}\r\n />\r\n Add Row\r\n
\r\n\r\n {provided.placeholder}\r\n
)}\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n Reverse Coded:\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n )\r\n}\r\n\r\n\r\n\r\nexport default GridLikertQuestion;\r\n","import React from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport '../components/Question-Components/CreateQuestionModal/create-question.styles.scss'\r\n\r\nconst ConfirmPopUp = ({ confirmCreated, setConfirmCreated }) => {\r\n\r\n\r\n return (\r\n \r\n \r\n\r\n Question Created Succesfully\r\n\r\n \r\n \r\n {\r\n setConfirmCreated(false)\r\n }}>\r\n Close\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ConfirmPopUp;\r\n","import React, { useState, useEffect } from 'react';\r\n// import Axios from 'axios';\r\nimport { Modal, Button, FormCheck } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\n\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport Tabs from 'react-bootstrap/Tabs';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\nimport DatePicker from \"react-datepicker\";\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport \"./create-question.styles.scss\";\r\nimport \"../../../_vars.scss\"\r\nimport LikertScaleQuestion from './likert-question/likert-question.component';\r\nimport ChoiceQuestion from './choice-question/choice-questions.component'\r\nimport GridChoiceQuestion from './grid-question/grid-questions.component'\r\nimport GridLikertQuestion from './grid-likert-question/grid-likert-questions.component';\r\nimport ConfirmPopUp from '../../../misc/ConfirmPopUp';\r\n\r\nconst CreateQuestionModal = ({ showModal, setShowModal }) => {\r\n const [key, setKey] = useState('type'); //Tab initial view\r\n\r\n const history = useHistory()\r\n\r\n const themes = useSelector((state) => state.theme.themes);\r\n\r\n\r\n const filteredThemes = themes.filter(x => x.type === 'regular')\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n const initialSelectedTheme = useSelector((state) => state.theme.selectedTheme);\r\n const intialSelectedChildTheme = useSelector((state) => state.theme.selectedChildTheme);\r\n\r\n\r\n const [selectedGroup, setSelectedGroup] = useState('')\r\n const [selectedTheme, setSelectedTheme] = useState(null)\r\n\r\n console.log('selectedTheme', selectedTheme)\r\n\r\n const [selectedSubthemeId, setSelectedSubthemeId] = useState(null) //initialSelectedSubtheme?.id\r\n\r\n const dispatch = useDispatch()\r\n const [newQuestionSelection, setNewQuestionSelection] = useState(null)\r\n const [updatedThemeSelection, setUpdatedThemeSelection] = useState(null)\r\n\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n\r\n const options = ['Likert scale', 'Multiple Choice', 'Checkbox', 'Dropdown', 'Paragraph', 'Short Answer', 'Grid Multiple Choice', 'Grid Likert scale']\r\n\r\n\r\n\r\n const [questionText, setQuestionText] = useState('')\r\n const [questionType, setQuestionType] = useState('')\r\n\r\n const [addAnother, setAddAnother] = useState(false) //Add Another Question flag\r\n const [confirmCreated, setConfirmCreated] = useState(false)//Add Another Question Confirmation popup\r\n\r\n\r\n //_________LIKERT SCALE_________________\r\n const [minValue, setMinValue] = useState(1)\r\n const [maxValue, setMaxValue] = useState(7)\r\n const [reverse, setReverse] = useState(false)\r\n const [notApplicable, setNotApplicable] = useState(false)\r\n const [implicit, setImplicit] = useState(false)\r\n const [startDate, setStartDate] = useState(new Date());\r\n const [endDate, setEndDate] = useState(new Date());\r\n const [startLabel, setStartLabel] = useState('Strongly Disagree')\r\n const [endLabel, setEndLabel] = useState('Strongly Agree')\r\n\r\n\r\n //_________CHOICE__________________________\r\n\r\n const [formValues, setFormValues] = useState([{ value: \"\" }])\r\n\r\n\r\n const values = formValues.map(value => ({ ...value, order: formValues.indexOf(value) }))\r\n\r\n\r\n //________GRID_________________________\r\n\r\n const [rowValues, setRowValues] = useState([{ row_value: \"\" }])\r\n const [columnValues, setColumnValues] = useState([{ column_value: \"\" }])\r\n\r\n\r\n const rows = rowValues.map(row => ({ ...row, order: rowValues.indexOf(row) }))\r\n const columns = columnValues.map(column => ({ ...column, order: columnValues.indexOf(column) }))\r\n\r\n const merged = [...rows, ...columns]\r\n\r\n const gridValues = merged.map(value => {\r\n\r\n if ('row_value' in value) {\r\n return { axis: 'row', value: value.row_value, order: value.order }\r\n }\r\n\r\n if ('column_value' in value) {\r\n return { axis: 'col', value: value.column_value, order: value.order }\r\n }\r\n\r\n return null\r\n }\r\n )\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n setisLoading(true)\r\n\r\n let themeId\r\n\r\n if (selectedTheme?.type === \"allUnassigned\" || selectedTheme?.type === \"all\" || !selectedTheme) {\r\n themeId = null\r\n }\r\n\r\n if (selectedTheme && selectedTheme.type === 'regular' && !selectedSubthemeId) {\r\n themeId = selectedTheme.id\r\n\r\n }\r\n if (selectedTheme && selectedTheme.type === 'regular' && selectedSubthemeId) {\r\n themeId = parseInt(selectedSubthemeId)\r\n }\r\n\r\n let newQuestion\r\n\r\n try {\r\n if (questionType === 'likert_scale') {\r\n\r\n //________________LIEKRT SCALE________________\r\n newQuestion =\r\n\r\n {\r\n data: {\r\n question_text: questionText,\r\n reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n ...(selectedGroup && { question_group: selectedGroup }),\r\n theme: themeId,\r\n // theme: selectedTheme.id,\r\n // subtheme: parseInt(selectedSubthemeId),\r\n likert_scale:\r\n {\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel,\r\n na_flag: notApplicable,\r\n },\r\n choices: [],\r\n grid_choices: [],\r\n ogs: organisationId,\r\n }\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n if (questionType === 'paragraph' || questionType === 'short_answer') {\r\n\r\n\r\n //________________PARAGRAPH________________\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n // reverse_coded_flag: reverse,\r\n objective: implicit,\r\n ...(selectedGroup && { question_group: selectedGroup }),\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n choices: [],\r\n grid_choices: [],\r\n likert_scale: null,\r\n ogs: organisationId,\r\n\r\n }\r\n }\r\n\r\n }\r\n //________________________________________________\r\n\r\n //________________CHOICE _______________\r\n if (questionType === 'mcq' || questionType === 'checkbox' || questionType === 'dropdown') {\r\n\r\n\r\n\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n // reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n // theme: selectedTheme.id,\r\n // subtheme: parseInt(selectedSubthemeId),\r\n ...(selectedGroup && { question_group: selectedGroup }),\r\n choices: values,\r\n grid_choices: [],\r\n likert_scale: null,\r\n ogs: organisationId,\r\n }\r\n }\r\n\r\n }\r\n\r\n if (questionType === 'grid_mcq') {\r\n\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n // theme: selectedTheme.id,\r\n // subtheme: parseInt(selectedSubthemeId),\r\n ...(selectedGroup && { question_group: selectedGroup }),\r\n grid_choices: gridValues,\r\n likert_scale: null,\r\n choices: [],\r\n ogs: organisationId,\r\n\r\n }\r\n }\r\n }\r\n if (questionType === 'grid_likert_scale') {\r\n\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n // theme: selectedTheme.id,\r\n // subtheme: parseInt(selectedSubthemeId),\r\n ...(selectedGroup && { question_group: selectedGroup }),\r\n\r\n grid_likert_scale: {\r\n\r\n row_choices: gridValues.filter(function (obj) {\r\n return obj.axis !== 'col';\r\n }),//gridValues,\r\n likert_scale:\r\n {\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel\r\n },\r\n },\r\n grid_choices: [],\r\n likert_scale: null,\r\n choices: [],\r\n ogs: organisationId,\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n // //________________________________________________\r\n\r\n\r\n let response\r\n\r\n\r\n if (!themeId) {\r\n\r\n\r\n if (questionText && questionType) {\r\n\r\n response = await axios.post(\r\n `/questions`,\r\n newQuestion\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n }\r\n\r\n )\r\n\r\n\r\n\r\n\r\n }\r\n\r\n setQuestionType('')\r\n setQuestionText('')\r\n setFormValues([{ value: \"\" }])\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setImplicit(false)\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n // if (initialSelectedTheme?.id !== -1) {\r\n setSelectedTheme(initialSelectedTheme)\r\n setSelectedSubthemeId(intialSelectedChildTheme?.id)\r\n // } else {\r\n // if (initialSelectedTheme?.id === -1) {\r\n // setSelectedTheme('')\r\n // setSelectedSubthemeId('')\r\n // }\r\n // setSelectedTheme('')\r\n // setSelectedSubthemeId('')\r\n // }\r\n\r\n // } else {\r\n // console.log(2)\r\n // setSelectedTheme(initialSelectedTheme)\r\n // setSelectedSubthemeId(intialSelectedChildTheme?.id)\r\n // }\r\n setisLoading(false)\r\n\r\n\r\n const { id, question_type, question_group, question_text, reverse_coded_flag, objective, start_date, end_date, theme, parent_theme } = response.data\r\n\r\n let likert_scale\r\n\r\n if (response.data.question_type === 'likert_scale') {\r\n likert_scale = response.data.likert_scale\r\n\r\n setNewQuestionSelection({\r\n id,\r\n question_type,\r\n question_text,\r\n question_group,\r\n reverse_coded_flag,\r\n objective,\r\n start_date,\r\n end_date,\r\n likert_scale,\r\n theme,\r\n parent_theme\r\n })\r\n\r\n }\r\n\r\n\r\n let choices\r\n if (response.data.question_type === 'mcq' || response.data.question_type === 'checkbox' || response.data.question_type === 'dropdown') {\r\n choices = response.data.choices\r\n\r\n setNewQuestionSelection({\r\n id,\r\n question_type,\r\n question_text,\r\n question_group,\r\n // reverse_coded_flag,\r\n objective,\r\n start_date,\r\n end_date,\r\n theme,\r\n parent_theme,\r\n choices\r\n })\r\n }\r\n\r\n if (response.data.question_type === 'paragraph' || response.data.question_type === 'short_answer') {\r\n setNewQuestionSelection({\r\n id,\r\n question_type,\r\n question_group,\r\n question_text,\r\n // reverse_coded_flag,\r\n objective,\r\n theme,\r\n parent_theme,\r\n start_date,\r\n end_date,\r\n })\r\n }\r\n\r\n let grid_choices\r\n if (response.data.question_type === 'grid_mcq') {\r\n\r\n grid_choices = response.data.grid_choices\r\n\r\n setNewQuestionSelection({\r\n id,\r\n question_type,\r\n question_group,\r\n question_text,\r\n reverse_coded_flag,\r\n objective,\r\n start_date,\r\n end_date,\r\n theme,\r\n parent_theme,\r\n grid_choices\r\n })\r\n }\r\n\r\n let grid_likert_scale\r\n if (response.data.question_type === 'grid_likert_scale') {\r\n\r\n grid_choices = response.data.grid_choices\r\n grid_likert_scale = response.data.grid_likert_scale\r\n\r\n setNewQuestionSelection({\r\n id,\r\n question_type,\r\n question_group,\r\n question_text,\r\n reverse_coded_flag,\r\n objective,\r\n start_date,\r\n end_date,\r\n theme,\r\n parent_theme,\r\n grid_choices,\r\n grid_likert_scale,\r\n likert_scale,\r\n })\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n\r\n //_______________________ else UPDATE THEME...____________________\r\n if (themeId) {\r\n\r\n\r\n\r\n let updateThemeNewQuestion\r\n\r\n if (selectedSubthemeId) {\r\n console.log('hit here', themeId, selectedTheme, selectedSubthemeId)\r\n themeId = selectedSubthemeId\r\n updateThemeNewQuestion = {\r\n questionOp: \"create\",\r\n parentThemeID: selectedTheme?.id,\r\n ...newQuestion\r\n }\r\n\r\n } else {\r\n console.log('hit here 2', themeId, selectedTheme)\r\n themeId = selectedTheme.id\r\n updateThemeNewQuestion = {\r\n questionOp: \"create\",\r\n ...newQuestion\r\n }\r\n }\r\n\r\n // const editedTheme = {\r\n // data: {\r\n // theme_name: selectedTheme.theme_name,\r\n // theme_desc: selectedTheme.theme_desc,\r\n // // theme_summary: selectedTheme.theme_summary,\r\n // parent_theme: themeId\r\n // // WILL NEED TO PASS IN newQuestion object here\r\n // }\r\n\r\n // };\r\n\r\n response = await axios.put(\r\n `/themes/questionOp/${themeId}`,\r\n updateThemeNewQuestion//editedTheme\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n\r\n const { theme_name, theme_desc, theme_summary, id, parent_theme, child_themes } = response.data\r\n\r\n\r\n\r\n\r\n // let formattedChiledThemes = child_themes.filter(x => x.parent_theme_flag !== true)\r\n\r\n setUpdatedThemeSelection(\r\n // id,\r\n // theme_name,\r\n // theme_desc,\r\n // theme_summary,\r\n // parent_theme,\r\n // child_themes: formattedChiledThemes\r\n response.data\r\n )\r\n\r\n\r\n\r\n setQuestionType('')\r\n setQuestionText('')\r\n setFormValues([{ value: \"\" }])\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setImplicit(false)\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n // if (initialSelectedTheme?.id === -1) {\r\n // console.log(3)\r\n // setSelectedTheme('')\r\n // setSelectedSubthemeId('')\r\n // }\r\n setisLoading(false)\r\n setSelectedTheme(initialSelectedTheme)\r\n setSelectedSubthemeId(intialSelectedChildTheme?.id)\r\n\r\n }\r\n\r\n if (!addAnother) {\r\n setConfirmCreated(false)\r\n setShowModal(false);\r\n\r\n return\r\n }\r\n\r\n setConfirmCreated(true)\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n\r\n //ADD NEW QUESTION IN REDUX\r\n\r\n //SET SELECTED THEME WITH NEW QUESTION\r\n useEffect(() => {\r\n\r\n if (newQuestionSelection !== null) {\r\n const addNewQuestion = () => {\r\n\r\n\r\n if ((selectedTheme?.id === initialSelectedTheme?.id) && (initialSelectedTheme?.id === -1 || initialSelectedTheme?.id === -2)) {\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...initialSelectedTheme, questions: [newQuestionSelection, ...initialSelectedTheme?.questions,] }\r\n })\r\n return\r\n\r\n }\r\n\r\n\r\n // THis || statement is specifically to handle when user logs in or refreshes the page, so that instead of having ALl Questions null id, it has -2 or unassigned has -1\r\n if ((!selectedTheme?.id && !initialSelectedTheme?.id) || (!selectedTheme?.id && initialSelectedTheme?.id < 0)) {\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...initialSelectedTheme, questions: [newQuestionSelection, ...initialSelectedTheme?.questions,] }\r\n })\r\n\r\n }\r\n }\r\n\r\n addNewQuestion();\r\n }\r\n\r\n }, [dispatch, newQuestionSelection]);\r\n\r\n //UPDATE CURRENT THEME WITH NEWLY ADDED QUESTION\r\n\r\n useEffect(() => {\r\n\r\n if (updatedThemeSelection !== null) {\r\n const updateTheme = () => {\r\n\r\n if (selectedTheme?.id === initialSelectedTheme?.id) {\r\n\r\n let allSpecificThemesQuestions = updatedThemeSelection.child_themes.map(x => {\r\n return x.questions\r\n }).flat(1)\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [...updatedThemeSelection.questions, ...allSpecificThemesQuestions] }\r\n })\r\n\r\n return\r\n }\r\n\r\n if (initialSelectedTheme?.type === 'all') {\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...initialSelectedTheme, questions: [updatedThemeSelection.latestQuestion, ...initialSelectedTheme.questions] }\r\n })\r\n }\r\n }\r\n\r\n updateTheme();\r\n }\r\n\r\n }, [dispatch, updatedThemeSelection]);\r\n\r\n\r\n\r\n const toggleImplicit = (e) => {\r\n setImplicit(prevImplicit => !prevImplicit)\r\n\r\n }\r\n\r\n\r\n useEffect(() => {\r\n if (initialSelectedTheme) {\r\n setSelectedTheme(initialSelectedTheme)\r\n if (intialSelectedChildTheme) {\r\n setSelectedSubthemeId(intialSelectedChildTheme.id)\r\n } else {\r\n setSelectedSubthemeId('')\r\n }\r\n }\r\n\r\n }, [initialSelectedTheme, intialSelectedChildTheme])\r\n\r\n\r\n return (\r\n {\r\n setShowModal(false);\r\n setQuestionType('')\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setImplicit(false)\r\n setFormValues([{ value: \"\" }])\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n if (initialSelectedTheme?.id === -1) {\r\n setSelectedTheme('')\r\n setSelectedSubthemeId('')\r\n } else {\r\n setSelectedTheme(initialSelectedTheme)\r\n setSelectedSubthemeId(intialSelectedChildTheme)\r\n }\r\n setKey('type')\r\n setAddAnother(false)\r\n setConfirmCreated(false)\r\n // setShortAnswer(false)\r\n }}>\r\n \r\n Create Question\r\n \r\n
\r\n \r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Creating Question...\r\n
\r\n
\r\n ) : (\r\n\r\n <>\r\n \r\n \r\n
\r\n
\r\n Question Text:\r\n {questionType === 'short_answer' ? (Short Answer is limited to 250 characters) : (null)}\r\n
\r\n \r\n \r\n \r\n \r\n {\r\n\r\n // if (e.target.value.trim() !== '') {\r\n setQuestionText(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n setKey(k)}\r\n className=\"mb-3 tabs-menu\">\r\n\r\n \r\n \r\n \r\n \r\n Type:\r\n \r\n \r\n \r\n \r\n {\r\n if (e.target.value === 'Likert scale')\r\n setQuestionType('likert_scale')\r\n if (e.target.value === 'Multiple Choice')\r\n setQuestionType('mcq')\r\n if (e.target.value === 'Checkbox')\r\n setQuestionType('checkbox')\r\n if (e.target.value === 'Dropdown')\r\n setQuestionType('dropdown')\r\n if (e.target.value === 'Paragraph')\r\n setQuestionType('paragraph')\r\n if (e.target.value === 'Short Answer')\r\n setQuestionType('short_answer')\r\n if (e.target.value === 'Grid Multiple Choice') {\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setQuestionType('grid_mcq')\r\n }\r\n\r\n if (e.target.value === 'Grid Likert scale') {\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setQuestionType('grid_likert_scale')\r\n }\r\n\r\n if (e.target.value === '')\r\n setQuestionType('')\r\n }}\r\n // selected=''\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n \r\n {options.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n {questionType === 'likert_scale' ? (\r\n \r\n ) : (null)}\r\n\r\n\r\n {questionType === 'mcq' || questionType === 'checkbox' || questionType === 'dropdown' ?\r\n () : (null)}\r\n\r\n {questionType === 'grid_mcq' ? () : (null)}\r\n\r\n {questionType === 'grid_likert_scale' ? () : (null)}\r\n\r\n\r\n\r\n \r\n \r\n \r\n Perspective:\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Themes:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n if (e.target.value === '') {\r\n\r\n setSelectedTheme('')\r\n setSelectedSubthemeId('')\r\n } else {\r\n let theme = themes.filter((theme) => theme.id === parseInt(e.target.value))\r\n\r\n setSelectedTheme(theme[0])\r\n setSelectedSubthemeId('')\r\n }\r\n\r\n\r\n }}\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n \r\n {filteredThemes.map((option) => {\r\n return (\r\n // selected={initialSelectedTheme?.theme_name === option.theme_name ? true : false}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n\r\n {selectedTheme && selectedTheme?.id !== -2 && selectedTheme?.id !== -1 ? \r\n \r\n \r\n Subthemes:\r\n \r\n \r\n \r\n \r\n\r\n\r\n {selectedTheme?.child_themes?.length > 0 ?\r\n\r\n {\r\n\r\n setSelectedSubthemeId(e.target.value)\r\n }}\r\n selected=''\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n \r\n\r\n {selectedTheme.child_themes?.map((option) => {\r\n return (\r\n // selected={intialSelectedChildTheme?.theme_name === option.theme_name ? true : false}\r\n \r\n );\r\n })}\r\n :
This Theme does not have Subthemes
}\r\n \r\n \r\n : null}\r\n \r\n\r\n\r\n\r\n \r\n )}\r\n \r\n \r\n {\r\n\r\n setStartLabel('Strongly Disagree')\r\n setEndLabel('Strongly Agree')\r\n setQuestionType('')\r\n setFormValues([{ value: \"\" }])\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setImplicit(false)\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n // setSelectedTheme('')\r\n // setSelectedSubthemeId('')\r\n if (initialSelectedTheme?.id === -1) {\r\n setSelectedTheme('')\r\n setSelectedSubthemeId('')\r\n } else {\r\n setSelectedTheme(initialSelectedTheme)\r\n setSelectedSubthemeId(intialSelectedChildTheme)\r\n }\r\n setAddAnother(false)\r\n setConfirmCreated(false)\r\n setKey('type')\r\n setShowModal(false);\r\n // setShortAnswer(false)\r\n }}>\r\n Cancel\r\n \r\n\r\n {\r\n setKey('type')\r\n setAddAnother(false)\r\n setConfirmCreated(false)\r\n setShowModal(false)\r\n }}\r\n disabled={questionText && questionType ? false : true}\r\n type='submit'\r\n className='card-button'\r\n variant='no-variant-p'>\r\n Create\r\n\r\n \r\n\r\n {\r\n setAddAnother(true)\r\n }}\r\n type='submit'>\r\n Create & Add Another\r\n \r\n \r\n \r\n {confirmCreated ? \r\n : null}\r\n \r\n );\r\n};\r\n\r\nexport default CreateQuestionModal;\r\n","import React from 'react';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\n\r\nconst EditLikertScaleQuestion = ({ setMinValue, setMaxValue, setStartLabel, setEndLabel, startLabel, endLabel, setcurrentQuestionDetails, currentQuestionDetails, minValue, maxValue, reverse, setReverse, notApplicable, setNotApplicable }) => {\r\n\r\n\r\n\r\n const toggleSwitch = (e) => {\r\n setReverse(prevReverse => !prevReverse)\r\n\r\n }\r\n\r\n const toggleNA = (e) => {\r\n setNotApplicable(prevNotApplicable => !prevNotApplicable)\r\n\r\n }\r\n\r\n const minOptions = [0, 1]\r\n const maxOptions = [2, 3, 4, 5, 6, 7, 8, 9, 10]\r\n\r\n\r\n return (\r\n\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n \r\n Min:\r\n {/* {minValue} */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Max:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Max label:\r\n\r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setStartLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Max label:\r\n\r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n setEndLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n Reverse Coded:\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Provide 'Not Applicable (N/A)' option:\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n );\r\n};\r\n\r\nexport default EditLikertScaleQuestion;\r\n","import React from 'react';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\n// import { Container } from 'react-bootstrap';\r\n// import { Row } from 'react-bootstrap';\r\n// import { Col } from 'react-bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash, faGripLines } from '@fortawesome/free-solid-svg-icons';\r\nimport './edit-choice-questions.styles.scss'\r\n\r\nimport addIcon from '../../../../assets/addcirclebutton.svg'\r\nimport trashIcon from '../../../../assets/trashicon.svg'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nconst EditChoiceQuestion = ({ formValues, setFormValues }) => {\r\n\r\n //source: https://bapunawarsaddam.medium.com/add-and-remove-form-fields-dynamically-using-react-and-react-hooks-3b033c3c0bf5\r\n\r\n // const [formValues, setFormValues] = useState([{ choice: \"\" }])\r\n\r\n\r\n\r\n let handleChange = (i, e) => {\r\n let newFormValues = [...formValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setFormValues(newFormValues);\r\n }\r\n\r\n let addFormFields = () => {\r\n setFormValues([...formValues, { value: \"\" }])\r\n }\r\n\r\n let removeFormFields = (i) => {\r\n let newFormValues = [...formValues];\r\n newFormValues.splice(i, 1);\r\n setFormValues(newFormValues)\r\n }\r\n\r\n function handleOnDragEnd(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(formValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setFormValues(items)\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n {(provided) => (\r\n
\r\n {formValues.map((element, index) => {\r\n return (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleChange(index, e)} maxLength='120'\r\n placeholder='max 120 characters' className='choice-inputs' />\r\n {\r\n index ?\r\n\r\n\r\n
\r\n\r\n trash_button {\r\n removeFormFields(index);\r\n }}\r\n />\r\n
\r\n\r\n\r\n : null\r\n }\r\n
\r\n )}\r\n\r\n\r\n
\r\n );\r\n })}\r\n\r\n
\r\n add_button {\r\n addFormFields();\r\n }}\r\n />\r\n Add Choice\r\n
\r\n\r\n {provided.placeholder}\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\n\r\nexport default EditChoiceQuestion;\r\n","import React from 'react';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\nimport './edit-grid-questions.styles.scss'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle, faTrash, faGripLines } from '@fortawesome/free-solid-svg-icons';\r\nimport trashIcon from '../../../../assets/trashicon.svg'\r\nimport addIcon from '../../../../assets/addcirclebutton.svg'\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nconst EditGridChoiceQuestion = ({ rowValues, setRowValues, columnValues, setColumnValues, setReverse, reverse }) => {\r\n\r\n //source: https://bapunawarsaddam.medium.com/add-and-remove-form-fields-dynamically-using-react-and-react-hooks-3b033c3c0bf5\r\n\r\n\r\n const toggleSwitch = (e) => {\r\n setReverse(prevReverse => !prevReverse)\r\n\r\n }\r\n //_____________________ROWS____________________\r\n\r\n let handleRowChange = (i, e) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setRowValues(newFormValues);\r\n }\r\n\r\n let addRowFormFields = () => {\r\n setRowValues([...rowValues, { value: \"\" }])\r\n }\r\n\r\n let removeRowFormFields = (i) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues.splice(i, 1);\r\n setRowValues(newFormValues)\r\n }\r\n\r\n //_____________________COULMNS____________________\r\n\r\n let handleColumnChange = (i, e) => {\r\n let newFormValues = [...columnValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setColumnValues(newFormValues);\r\n }\r\n\r\n let addColumnFormFields = () => {\r\n setColumnValues([...columnValues, { value: \"\" }])\r\n }\r\n\r\n let removeColumnFormFields = (i) => {\r\n let newFormValues = [...columnValues];\r\n newFormValues.splice(i, 1);\r\n setColumnValues(newFormValues)\r\n }\r\n\r\n //___________ DnD Handle Rows_______________\r\n function handleOnDragEndRows(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(rowValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setRowValues(items)\r\n }\r\n\r\n //___________ DnD Handle Cols_______________\r\n function handleOnDragEndCols(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(columnValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setColumnValues(items)\r\n }\r\n\r\n\r\n return (\r\n
\r\n Rows:\r\n \r\n \r\n {(provided) => (\r\n
\r\n {rowValues.map((element, index) => (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleRowChange(index, e)} maxLength='50'\r\n placeholder='max 50 characters' className='grid-col-row-inputs' />\r\n {\r\n index ?\r\n\r\n
\r\n\r\n trash_button {\r\n removeRowFormFields(index);\r\n }}\r\n />\r\n
\r\n : null\r\n }\r\n
)}\r\n
\r\n ))}\r\n\r\n
\r\n add_button {\r\n addRowFormFields();\r\n }}\r\n />\r\n Add Row\r\n
\r\n\r\n {provided.placeholder}\r\n
)}\r\n
\r\n
\r\n\r\n\r\n Columns:\r\n \r\n \r\n {(provided) => (\r\n
\r\n {columnValues.map((element, index) => (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleColumnChange(index, e)} maxLength='50'\r\n placeholder='max 50 characters' className='grid-col-row-inputs' />\r\n {\r\n index ?\r\n
\r\n\r\n trash_button {\r\n removeColumnFormFields(index);\r\n }}\r\n />\r\n
\r\n : null\r\n }\r\n
)}\r\n
\r\n ))}\r\n\r\n
\r\n add_button {\r\n addColumnFormFields();\r\n }}\r\n />\r\n Add Column\r\n
\r\n\r\n {provided.placeholder}\r\n
)}\r\n
\r\n
\r\n \r\n \r\n
\r\n Reverse Coded:\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n )\r\n}\r\n\r\n\r\n\r\nexport default EditGridChoiceQuestion;\r\n","import React from 'react';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\nimport './edit-grid-likert-questions.styles.scss'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle, faTrash, faGripLines } from '@fortawesome/free-solid-svg-icons';\r\nimport trashIcon from '../../../../assets/trashicon.svg'\r\nimport addIcon from '../../../../assets/addcirclebutton.svg'\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nconst EditGridLikertQuestion = ({ setMinValue, setMaxValue, setStartLabel, setEndLabel, startLabel, endLabel, minValue, maxValue, rowValues, setRowValues, setReverse, reverse }) => {\r\n\r\n //source: https://bapunawarsaddam.medium.com/add-and-remove-form-fields-dynamically-using-react-and-react-hooks-3b033c3c0bf5\r\n\r\n const minOptions = [0, 1]\r\n const maxOptions = [2, 3, 4, 5, 6, 7, 8, 9, 10]\r\n\r\n\r\n const toggleSwitch = (e) => {\r\n setReverse(prevReverse => !prevReverse)\r\n\r\n }\r\n //_____________________ROWS____________________\r\n\r\n let handleRowChange = (i, e) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues[i][e.target.name] = e.target.value;\r\n setRowValues(newFormValues);\r\n }\r\n\r\n let addRowFormFields = () => {\r\n setRowValues([...rowValues, { value: \"\" }])\r\n }\r\n\r\n let removeRowFormFields = (i) => {\r\n let newFormValues = [...rowValues];\r\n newFormValues.splice(i, 1);\r\n setRowValues(newFormValues)\r\n }\r\n\r\n\r\n\r\n //___________ DnD Handle Rows_______________\r\n function handleOnDragEndRows(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(rowValues);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // updateChoices(items)\r\n setRowValues(items)\r\n }\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Min:\r\n \r\n \r\n {\r\n setMinValue(parseInt(e.target.value)) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n }}\r\n\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n {/* */}\r\n {minOptions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n Max:\r\n \r\n \r\n {\r\n setMaxValue(e.target.value.split(',').map(x => parseInt(x))) // split on comma, into numbers array and also change them into integers as it makes strings initially \r\n }}\r\n value={maxValue}\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n {/* */}\r\n {maxOptions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Min label:\r\n\r\n \r\n {\r\n setStartLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Max label:\r\n\r\n \r\n {\r\n\r\n setEndLabel(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n Rows:\r\n \r\n \r\n {(provided) => (\r\n
\r\n {rowValues.map((element, index) => (\r\n \r\n {(provided) => (\r\n
\r\n
\r\n \r\n
\r\n \r\n handleRowChange(index, e)} maxLength='50'\r\n placeholder='max 50 characters' className='grid-col-row-inputs' />\r\n {\r\n index ?\r\n\r\n
\r\n\r\n trash_button {\r\n removeRowFormFields(index);\r\n }}\r\n />\r\n
\r\n : null\r\n }\r\n
)}\r\n
\r\n ))}\r\n\r\n
\r\n add_button {\r\n addRowFormFields();\r\n }}\r\n />\r\n Add Row\r\n
\r\n\r\n {provided.placeholder}\r\n
)}\r\n
\r\n
\r\n \r\n \r\n
\r\n Reverse Coded:\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n )\r\n}\r\n\r\n\r\n\r\nexport default EditGridLikertQuestion;\r\n","import React, { useState, useEffect, useRef } from 'react';\r\n// import Axios from 'axios';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios, { cancelToken } from \"../../../misc/modifiedAxios\";\r\nimport { Modal, Button, FormCheck } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\nimport Tabs from 'react-bootstrap/Tabs';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\n\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport { Card } from 'react-bootstrap';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport \"./edit-question.styles.scss\"\r\nimport \"../../../_vars.scss\"\r\nimport EditLikertScaleQuestion from './edit-likert-question/edit-likert-question.component';\r\nimport EditChoiceQuestion from './edit-choice-question/edit-choice-questions.component'\r\nimport EditGridChoiceQuestion from './edit-grid-question/edit-grid-questions.component'\r\nimport EditGridLikertQuestion from './edit-grid-likert-question/edit-grid-likert-questions.component';\r\n\r\nconst EditQuestionModal = ({ showEditModal, setEditModal }) => {\r\n\r\n const history = useHistory()\r\n const CancelToken = useRef(cancelToken)\r\n const cancel = useRef(undefined)\r\n\r\n const [key, setKey] = useState('type'); //Tab initial view\r\n\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n const [isDuplicate, setIsDuplicate] = useState(false);\r\n const hasQuestion = useSelector((state) => state.question.selectedQuestion);\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n const selectedTheme = useSelector((state) => state.theme.selectedTheme);\r\n\r\n\r\n let selectedQuestion\r\n\r\n if (hasQuestion === null) {\r\n selectedQuestion = ''\r\n } else {\r\n selectedQuestion = hasQuestion\r\n }\r\n\r\n\r\n const questionGroups = useSelector((state) => state.questionGroup.questionGroups);\r\n const themes = useSelector((state) => state.theme.themes);\r\n // const [selectedSubthemeId, setSelectedSubthemeId] = useState(null) //initialSelectedSubtheme?.id\r\n\r\n\r\n\r\n const questionId = selectedQuestion?.id\r\n\r\n let likertScaleParamsId\r\n\r\n\r\n if (selectedQuestion?.question_type === 'likert_scale') {\r\n likertScaleParamsId = selectedQuestion?.likert_scale?.id\r\n }\r\n\r\n const [currentQuestionDetails, setcurrentQuestionDetails] = useState({\r\n question_text: '',\r\n question_type: '',\r\n question_group: '', //gone\r\n objective: '', //objective\r\n start_date: '',//gone\r\n end_date: '',//gone\r\n theme: '',\r\n parent_theme: '',\r\n theme_id: null,\r\n parent_theme_id: null,\r\n locked: null,\r\n })\r\n\r\n\r\n\r\n\r\n /// SHARED QUESTION DATA\r\n //reverse_coded_flag\r\n const { question_text, question_type, objective, start_date, end_date, theme, parent_theme, theme_id, parent_theme_id, locked } = currentQuestionDetails\r\n\r\n\r\n /// DATE FORMATTING\r\n let formatStartDate\r\n let formatEndDate\r\n\r\n if (start_date) {\r\n formatStartDate = new Date(start_date)\r\n }\r\n\r\n if (end_date) {\r\n formatEndDate = new Date(end_date)\r\n }\r\n\r\n\r\n const dispatch = useDispatch()\r\n const [updatedQuestionSelection, setUpdatedQuestionSelection] = useState(null)\r\n const [createDuplicateQuestion, setCreateDuplicateQuestion] = useState(null)\r\n\r\n const [isEnabled, setEnabled] = useState(true)\r\n\r\n //########################################### FILTERING OPTIONS FOR SELECT DROPDOWNS #############################################\r\n\r\n //FOR QUESTION TYPE SELECTION\r\n\r\n // const options = ['Likert scale', 'Multiple Choice', 'Checkbox', 'Dropdown', 'Paragraph', 'Short Answer']\r\n\r\n const mapedOptions = [{\r\n value: 'Likert scale',\r\n question_type: 'likert_scale'\r\n }, {\r\n value: 'Multiple Choice',\r\n question_type: 'mcq',\r\n }, {\r\n value: 'Checkbox',\r\n question_type: 'checkbox'\r\n }, {\r\n value: 'Dropdown',\r\n question_type: 'dropdown',\r\n }, {\r\n value: 'Paragraph',\r\n question_type: 'paragraph'\r\n }, {\r\n value: 'Short Answer',\r\n question_type: 'short_answer'\r\n },\r\n {\r\n value: 'Grid Multiple Choice',\r\n question_type: 'grid_mcq'\r\n },\r\n {\r\n value: 'Grid Likert scale',\r\n question_type: 'grid_likert_scale'\r\n }\r\n ]\r\n\r\n\r\n\r\n const filteredOptions = mapedOptions.filter((option => option.question_type !== question_type))\r\n\r\n\r\n let currentOption\r\n\r\n for (let i = 0; i < mapedOptions.length; i++) {\r\n if (mapedOptions[i].question_type === question_type) {\r\n currentOption = mapedOptions[i].value\r\n }\r\n }\r\n\r\n\r\n let withUnassignedTheme = [...themes, { theme_name: 'None Selected', id: -1 }]\r\n\r\n const filteredThemes = withUnassignedTheme.filter(x => x.id !== parent_theme_id && x.type !== 'all')\r\n\r\n // console.log('@@ Filtered THemes', filteredThemes)\r\n\r\n const requiredTheme = withUnassignedTheme.filter((currentTheme => currentTheme?.id === parent_theme_id))\r\n\r\n // console.log('@@ requiredTheme', requiredTheme)\r\n\r\n const subthemes = requiredTheme[0]?.child_themes?.map(x => {\r\n if (x.type === 'unassigned') {\r\n return { ...x, id: -3 }\r\n }\r\n return x\r\n })\r\n\r\n let withUnassignedSubtheme\r\n\r\n if (subthemes) {\r\n if (theme === 'unassigned') {\r\n withUnassignedSubtheme = [...subthemes]\r\n\r\n } else {\r\n withUnassignedSubtheme = [...subthemes, { theme_name: 'None Selected', id: -3 }]\r\n }\r\n }\r\n\r\n\r\n // console.log('@@ subthemes', subthemes)\r\n\r\n let filteredSubthemes = withUnassignedSubtheme?.filter((option => option.id !== theme_id))\r\n\r\n // console.log('@@ filteredSubthemes', filteredSubthemes)\r\n\r\n //#########################################################################################################################################\r\n\r\n\r\n\r\n\r\n //_________LIKERT SCALE_________________\r\n\r\n\r\n const [minValue, setMinValue] = useState(0)\r\n const [maxValue, setMaxValue] = useState(7)\r\n const [startLabel, setStartLabel] = useState('Strongly Disagree')\r\n const [endLabel, setEndLabel] = useState('Strongly Agree')\r\n const [reverse, setReverse] = useState(false)\r\n const [notApplicable, setNotApplicable] = useState(false)\r\n\r\n\r\n //_________CHOICE__________________________\r\n // const [choices, setChoices] = useState([])\r\n const [formValues, setFormValues] = useState([{ value: \"\" }])\r\n // const values = { ...formValues.map((value) => value.choice) } //maps through object into a list, then spreads that list into a new object, using index as key\r\n // const values = formValues.map((value) => value.choice)\r\n\r\n const values = formValues?.map((value, key) => ({ ...value, order: key }))\r\n\r\n\r\n //_________GRID____________________________\r\n\r\n const [rowValues, setRowValues] = useState([{ value: \"\" }])\r\n const [columnValues, setColumnValues] = useState([{ value: \"\" }])\r\n\r\n\r\n const rows = rowValues?.map(row => ({ ...row, axis: 'row', order: rowValues.indexOf(row) }))\r\n const columns = columnValues?.map(column => ({ ...column, axis: 'col', order: columnValues.indexOf(column) }))\r\n\r\n const merged = [...rows, ...columns]\r\n\r\n\r\n const gridValues = merged.map(value => {\r\n\r\n if (value.axis === 'row') {\r\n if (value.id) {\r\n return { id: value.id, axis: 'row', value: value.value, order: value.order, }\r\n }\r\n return { axis: 'row', value: value.value, order: value.order, }\r\n }\r\n\r\n if (value.axis === 'col') {\r\n if (value.id) {\r\n return { id: value.id, axis: 'col', value: value.value, order: value.order }\r\n }\r\n return { axis: 'col', value: value.value, order: value.order }\r\n }\r\n\r\n return null\r\n }\r\n )\r\n\r\n const duplicate = async () => {\r\n\r\n let themeId\r\n\r\n\r\n if (currentQuestionDetails?.parent_theme_id === null || currentQuestionDetails?.parent_theme_id === -1) {\r\n\r\n themeId = null\r\n\r\n }\r\n\r\n\r\n if (currentQuestionDetails?.parent_theme_id !== null && currentQuestionDetails?.parent_theme_id !== -1\r\n\r\n ) {\r\n\r\n\r\n if (currentQuestionDetails?.theme_id !== null && currentQuestionDetails?.theme_id !== -3) {\r\n\r\n themeId = parseInt(currentQuestionDetails?.theme_id)\r\n\r\n console.log('REAL THEME ID', themeId, currentQuestionDetails)\r\n } else {\r\n themeId = currentQuestionDetails?.parent_theme_id\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n\r\n let duplicateName\r\n if (currentQuestionDetails.question_text === selectedQuestion.question_text) {\r\n duplicateName = '[DUPLICATE] ' + selectedQuestion.question_text\r\n }\r\n if (currentQuestionDetails.question_text !== selectedQuestion.question_text) {\r\n duplicateName = currentQuestionDetails.question_text\r\n }\r\n\r\n\r\n let duplicateQuestion\r\n\r\n\r\n // const something = true\r\n\r\n try {\r\n setisLoading(true)\r\n setIsDuplicate(true)\r\n if (currentQuestionDetails.question_type === 'likert_scale') {\r\n // if (something) {\r\n\r\n\r\n\r\n //________________LIEKRT SCALE________________\r\n duplicateQuestion =\r\n {\r\n data: {\r\n\r\n // id: questionId,\r\n question_text: duplicateName,\r\n reverse_coded_flag: reverse,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n theme: themeId,\r\n // theme: currentQuestionDetails.theme.id,\r\n\r\n likert_scale:\r\n {\r\n // id: likertScaleParamsId,\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel,\r\n na_flag: notApplicable,\r\n },\r\n choices: [],\r\n grid_choices: [],\r\n ogs: organisationId,\r\n\r\n }\r\n }\r\n\r\n }\r\n //________________________________________________\r\n\r\n\r\n\r\n\r\n //________________CHOICE _______________\r\n if (currentQuestionDetails.question_type === 'mcq' || currentQuestionDetails.question_type === 'checkbox' || currentQuestionDetails.question_type === 'dropdown') {\r\n\r\n\r\n duplicateQuestion =\r\n {\r\n data: {\r\n\r\n\r\n question_text: duplicateName,\r\n // reverse_coded_flag: currentQuestionDetails.reverse_coded_flag,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n theme: themeId,\r\n // theme: currentQuestionDetails.theme.id,\r\n // likert_scale: null,\r\n choices: values.map(x => {\r\n return {\r\n order: x.order,\r\n value: x.value\r\n }\r\n }),\r\n likert_scale: null,\r\n grid_choices: [],\r\n ogs: organisationId,\r\n }\r\n }\r\n\r\n }\r\n if (currentQuestionDetails.question_type === 'paragraph' || currentQuestionDetails.question_type === 'short_answer') {\r\n\r\n //________________PARAGRAPH________________\r\n duplicateQuestion =\r\n {\r\n\r\n data: {\r\n question_text: duplicateName,\r\n // reverse_coded_flag: currentQuestionDetails.reverse_coded_flag,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: currentQuestionDetails.theme.id,\r\n theme: themeId,\r\n choices: [],\r\n likert_scale: null,\r\n grid_choices: [],\r\n ogs: organisationId\r\n // question_params: 27\r\n }\r\n }\r\n\r\n }\r\n //________________GRID______________________\r\n\r\n\r\n if (currentQuestionDetails.question_type === 'grid_mcq') {\r\n\r\n\r\n duplicateQuestion =\r\n {\r\n data: {\r\n question_text: duplicateName,\r\n reverse_coded_flag: reverse,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: currentQuestionDetails.theme.id,\r\n theme: themeId,\r\n grid_choices: gridValues.map(x => {\r\n return {\r\n axis: x.axis,\r\n order: x.order,\r\n value: x.value\r\n }\r\n }),\r\n choices: [],\r\n likert_scale: null,\r\n ogs: organisationId\r\n }\r\n }\r\n\r\n }\r\n\r\n if (currentQuestionDetails.question_type === 'grid_likert_scale') {\r\n\r\n\r\n duplicateQuestion =\r\n {\r\n data: {\r\n question_text: duplicateName,\r\n reverse_coded_flag: reverse,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: currentQuestionDetails.theme.id,\r\n theme: themeId,\r\n grid_likert_scale: {\r\n\r\n row_choices: gridValues.filter(function (obj) {\r\n return obj.axis !== 'col';\r\n }),//gridValues,\r\n likert_scale:\r\n {\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel\r\n },\r\n },\r\n grid_choices: [],\r\n choices: [],\r\n likert_scale: null,\r\n ogs: organisationId\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n let response\r\n\r\n if (!themeId) {\r\n\r\n\r\n if (currentQuestionDetails.question_type && duplicateName) {\r\n response = await axios.post(\r\n `/questions`,\r\n duplicateQuestion\r\n ).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n }\r\n\r\n\r\n\r\n setEnabled(true)\r\n\r\n setFormValues([{ value: \"\" }])\r\n\r\n\r\n\r\n const { id, question_type, question_group, question_text, reverse_coded_flag, objective, start_date, end_date, theme, parent_theme } = response.data\r\n\r\n let likert_scale\r\n\r\n if (response.data.question_type === 'likert_scale') {\r\n likert_scale = response.data.likert_scale\r\n\r\n setCreateDuplicateQuestion({\r\n id,\r\n question_type,\r\n question_text,\r\n question_group,\r\n reverse_coded_flag,\r\n objective,\r\n theme,\r\n parent_theme,\r\n start_date,\r\n end_date,\r\n likert_scale,\r\n })\r\n\r\n }\r\n\r\n let choices\r\n if (response.data.question_type === 'mcq' || response.data.question_type === 'checkbox' || response.data.question_type === 'dropdown') {\r\n choices = response.data.choices\r\n\r\n setCreateDuplicateQuestion({\r\n id,\r\n question_type,\r\n question_group,\r\n question_text,\r\n // reverse_coded_flag,\r\n objective,\r\n theme,\r\n parent_theme,\r\n start_date,\r\n end_date,\r\n choices\r\n })\r\n\r\n }\r\n\r\n if (response.data.question_type === 'paragraph' || response.data.question_type === 'short_answer') {\r\n\r\n setCreateDuplicateQuestion({\r\n id,\r\n question_type,\r\n question_group,\r\n question_text,\r\n // reverse_coded_flag,\r\n objective,\r\n theme,\r\n parent_theme,\r\n start_date,\r\n end_date,\r\n })\r\n\r\n }\r\n\r\n let grid_choices\r\n if (response.data.question_type === 'grid_mcq') {\r\n\r\n grid_choices = response.data.grid_choices\r\n\r\n setCreateDuplicateQuestion({\r\n id,\r\n question_type,\r\n question_group,\r\n question_text,\r\n reverse_coded_flag,\r\n objective,\r\n theme,\r\n parent_theme,\r\n start_date,\r\n end_date,\r\n grid_choices\r\n })\r\n }\r\n\r\n let grid_likert_scale\r\n\r\n if (response.data.question_type === 'grid_likert_scale') {\r\n\r\n grid_choices = response.data.grid_choices\r\n grid_likert_scale = response.data.grid_likert_scale\r\n\r\n setCreateDuplicateQuestion({\r\n id,\r\n question_type,\r\n question_group,\r\n question_text,\r\n reverse_coded_flag,\r\n objective,\r\n theme,\r\n parent_theme,\r\n start_date,\r\n end_date,\r\n grid_choices,\r\n grid_likert_scale\r\n })\r\n }\r\n\r\n }\r\n\r\n\r\n //_______________________ else UPDATE THEME...____________________\r\n if (themeId) {\r\n\r\n\r\n console.log('themeId', themeId)\r\n let updateThemeNewQuestion\r\n\r\n if (currentQuestionDetails?.theme_id !== null || currentQuestionDetails?.theme_id !== -3) {\r\n updateThemeNewQuestion = {\r\n questionOp: \"create\",\r\n parentThemeID: currentQuestionDetails?.parent_theme_id,\r\n ...duplicateQuestion\r\n }\r\n\r\n } else {\r\n updateThemeNewQuestion = {\r\n questionOp: \"create\",\r\n ...duplicateQuestion\r\n }\r\n }\r\n\r\n\r\n response = await axios.put(\r\n `/themes/questionOp/${themeId}`,\r\n updateThemeNewQuestion//editedTheme\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n\r\n // const { theme_name, theme_desc, theme_summary, id, parent_theme, child_themes } = response.data\r\n\r\n\r\n console.log('response PUT', response)\r\n\r\n setCreateDuplicateQuestion(\r\n\r\n response.data\r\n )\r\n\r\n\r\n setEnabled(true)\r\n\r\n setFormValues([{ value: \"\" }])\r\n\r\n\r\n }\r\n setisLoading(false)\r\n setIsDuplicate(false)\r\n setEditModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n }\r\n\r\n const submit = async (e) => {\r\n\r\n e.preventDefault();\r\n setEnabled(false)\r\n\r\n\r\n let newQuestion\r\n\r\n\r\n\r\n\r\n try {\r\n setisLoading(true)\r\n setIsDuplicate(false)\r\n\r\n\r\n\r\n\r\n if (currentQuestionDetails.question_type === 'likert_scale') {\r\n\r\n\r\n console.log('REACHED currentQuestionDetails', currentQuestionDetails)\r\n newQuestion =\r\n {\r\n questionOp: 'update',\r\n questionID: questionId,\r\n data: {\r\n question_text: currentQuestionDetails.question_text,\r\n reverse_coded_flag: reverse,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: themeId,\r\n theme: currentQuestionDetails.theme_id && currentQuestionDetails.theme_id !== -3 ?\r\n currentQuestionDetails.theme_id :\r\n currentQuestionDetails.parent_theme_id && currentQuestionDetails.parent_theme_id !== -1 ?\r\n currentQuestionDetails.parent_theme_id : null,\r\n\r\n likert_scale:\r\n {\r\n id: likertScaleParamsId,\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel,\r\n na_flag: notApplicable,\r\n\r\n },\r\n choices: [],\r\n grid_choices: [],\r\n }\r\n }\r\n\r\n }\r\n\r\n //________________CHOICE _______________\r\n if (currentQuestionDetails.question_type === 'mcq' || currentQuestionDetails.question_type === 'checkbox' || currentQuestionDetails.question_type === 'dropdown') {\r\n\r\n\r\n newQuestion =\r\n {\r\n\r\n questionOp: 'update',\r\n questionID: questionId,\r\n data: {\r\n // id: questionId,\r\n question_text: currentQuestionDetails.question_text,\r\n reverse_coded_flag: reverse,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: themeId,\r\n theme: currentQuestionDetails.theme_id && currentQuestionDetails.theme_id !== -3 ?\r\n currentQuestionDetails.theme_id :\r\n currentQuestionDetails.parent_theme_id && currentQuestionDetails.parent_theme_id !== -1 ?\r\n currentQuestionDetails.parent_theme_id : null,\r\n // theme: currentQuestionDetails.theme.id,\r\n // likert_scale: null,\r\n choices: values,\r\n likert_scale: null,\r\n grid_choices: [],\r\n }\r\n }\r\n\r\n }\r\n if (currentQuestionDetails.question_type === 'paragraph' || currentQuestionDetails.question_type === 'short_answer') {\r\n\r\n //________________PARAGRAPH________________\r\n newQuestion =\r\n {\r\n\r\n questionOp: 'update',\r\n questionID: questionId,\r\n data: {\r\n // id: questionId,\r\n question_text: currentQuestionDetails.question_text,\r\n // reverse_coded_flag: currentQuestionDetails.reverse_coded_flag,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: currentQuestionDetails.theme.id,\r\n // theme: themeId,\r\n theme: currentQuestionDetails.theme_id && currentQuestionDetails.theme_id !== -3 ?\r\n currentQuestionDetails.theme_id :\r\n currentQuestionDetails.parent_theme_id && currentQuestionDetails.parent_theme_id !== -1 ?\r\n currentQuestionDetails.parent_theme_id : null,\r\n // question_params: 27\r\n likert_scale: null,\r\n grid_choices: [],\r\n choices: [],\r\n }\r\n }\r\n\r\n }\r\n //________________GRID______________________\r\n\r\n\r\n if (currentQuestionDetails.question_type === 'grid_mcq') {\r\n\r\n\r\n newQuestion =\r\n {\r\n questionOp: 'update',\r\n questionID: questionId,\r\n data: {\r\n // id: questionId,\r\n question_text: currentQuestionDetails.question_text,\r\n reverse_coded_flag: reverse,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: currentQuestionDetails.theme.id,\r\n // theme: themeId,\r\n theme: currentQuestionDetails.theme_id && currentQuestionDetails.theme_id !== -3 ?\r\n currentQuestionDetails.theme_id :\r\n currentQuestionDetails.parent_theme_id && currentQuestionDetails.parent_theme_id !== -1 ?\r\n currentQuestionDetails.parent_theme_id : null,\r\n grid_choices: gridValues,\r\n likert_scale: null,\r\n choices: [],\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n if (currentQuestionDetails.question_type === 'grid_likert_scale') {\r\n\r\n\r\n newQuestion =\r\n {\r\n questionOp: 'update',\r\n questionID: questionId,\r\n data: {\r\n // id: questionId,\r\n question_text: currentQuestionDetails.question_text,\r\n reverse_coded_flag: reverse,\r\n objective: currentQuestionDetails.objective,\r\n // start_date: currentQuestionDetails.start_date,\r\n // end_date: currentQuestionDetails.end_date,\r\n question_type: currentQuestionDetails.question_type,\r\n // question_group: currentQuestionDetails.question_group ? currentQuestionDetails.question_group.id : null,\r\n // theme: currentQuestionDetails.theme.id,\r\n // theme: themeId,\r\n theme: currentQuestionDetails.theme_id && currentQuestionDetails.theme_id !== -3 ?\r\n currentQuestionDetails.theme_id :\r\n currentQuestionDetails.parent_theme_id && currentQuestionDetails.parent_theme_id !== -1 ?\r\n currentQuestionDetails.parent_theme_id : null,\r\n\r\n grid_likert_scale: {\r\n\r\n row_choices: gridValues.filter(function (obj) {\r\n return obj.axis !== 'col';\r\n }),//gridValues,\r\n likert_scale:\r\n {\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel\r\n },\r\n },\r\n grid_choices: [],\r\n likert_scale: null,\r\n choices: [],\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n let response\r\n\r\n\r\n if (selectedTheme?.type === 'regular') {\r\n\r\n if (currentQuestionDetails.question_type && currentQuestionDetails.question_text) {\r\n response = await axios.put(\r\n `themes/questionOp/${selectedTheme?.id}`,// `/questions/${questionId}`,\r\n newQuestion\r\n ).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n }\r\n\r\n\r\n\r\n setEnabled(true)\r\n\r\n setFormValues([{ value: \"\" }])\r\n\r\n if (response?.data) {\r\n setUpdatedQuestionSelection(response.data)\r\n }\r\n\r\n }\r\n if (selectedTheme?.type !== 'regular') {\r\n\r\n\r\n\r\n let updatedQuestion = {\r\n data: {\r\n ...newQuestion.data\r\n }\r\n }\r\n\r\n\r\n response = await axios.put(\r\n `/questions/${questionId}`,\r\n updatedQuestion//editedTheme\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n setEnabled(true)\r\n\r\n setFormValues([{ value: \"\" }])\r\n\r\n if (response?.data) {\r\n setUpdatedQuestionSelection(response.data)\r\n }\r\n\r\n }\r\n\r\n\r\n setisLoading(false)\r\n setEditModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n setEnabled(true)\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n if (updatedQuestionSelection) {\r\n const updateQuestion = () => {\r\n\r\n\r\n if (selectedTheme?.type === 'regular') {\r\n\r\n console.log('HIT HERE - regular')\r\n // if (initialSelectedTheme?.type === 'all') {\r\n\r\n let allSpecificThemesQuestions = updatedQuestionSelection?.child_themes.map(x => {\r\n return x.questions\r\n }).flat(1)\r\n\r\n\r\n //needs ORDER FIX\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [...allSpecificThemesQuestions, ...updatedQuestionSelection.questions] }\r\n })\r\n // }\r\n }\r\n\r\n if (selectedTheme?.type !== 'regular') {\r\n\r\n console.log('HIT HERE - NOT regular')\r\n\r\n // if (updatedQuestionSelection.parent_theme === 'unassigned') {\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [updatedQuestionSelection, ...selectedTheme?.questions.filter(x => x.id !== updatedQuestionSelection.id)] }\r\n })\r\n\r\n return\r\n\r\n\r\n\r\n }\r\n\r\n }\r\n\r\n updateQuestion();\r\n }\r\n\r\n }, [dispatch, updatedQuestionSelection]);\r\n\r\n\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n console.log('currentQuestionDetails', currentQuestionDetails)\r\n console.log('selectedTheme', selectedTheme)\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (createDuplicateQuestion !== null) {\r\n const setDuplicateQuestion = () => {\r\n\r\n if (selectedTheme?.id === currentQuestionDetails?.parent_theme_id && currentQuestionDetails?.parent_theme_id > 0) {\r\n\r\n console.log('HIT FOR NORMAL THEME OR SUBTHEME LEVEL', createDuplicateQuestion)\r\n\r\n let allSpecificThemesQuestions = createDuplicateQuestion.child_themes.map(x => {\r\n return x.questions\r\n }).flat(1)\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [...createDuplicateQuestion.questions, ...allSpecificThemesQuestions] }\r\n })\r\n\r\n return\r\n\r\n }\r\n\r\n if (selectedTheme?.type === 'all' && currentQuestionDetails?.parent_theme_id !== -1) {\r\n\r\n console.log('HIT ALL QUESTIONS THEME LEVEL - ONLY FOR THEME/sub Qs', selectedTheme)\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [createDuplicateQuestion.latestQuestion, ...selectedTheme.questions] }\r\n })\r\n\r\n\r\n }\r\n\r\n\r\n //UNASSIGNED AND ALL both\r\n if (selectedTheme?.id < 0 && currentQuestionDetails?.parent_theme_id === -1) {\r\n\r\n console.log('HIT UNASSIGNED, either from ALL QUESTIONS THEME OR UNASSIGNED THEME LEVEL', selectedTheme, currentQuestionDetails)\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [createDuplicateQuestion, ...selectedTheme?.questions,] }\r\n })\r\n\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n\r\n setDuplicateQuestion();\r\n }\r\n\r\n }, [dispatch, createDuplicateQuestion]);\r\n\r\n\r\n\r\n\r\n const toggleImplicit = (e) => {\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, objective: !objective\r\n })\r\n\r\n }\r\n\r\n useEffect(() => {\r\n\r\n const loadQuestionDetails = async () => {\r\n\r\n try {\r\n\r\n if (selectedQuestion) {\r\n\r\n if (cancel.current !== undefined) {//uses .current property as this is how you manipulate the object in useRef\r\n cancel.current(); // same as running cancel() because once it is defined it is assigned a function with new CancelToken (also has .current)\r\n }\r\n setisLoading(true)\r\n\r\n const response = await axios.get(\r\n `/questions/${selectedQuestion?.id}`,\r\n {\r\n cancelToken: new CancelToken.current(c => {\r\n cancel.current = c; // c is the identifier of the request, ON THE FIRST request it DEFINES the cancel variable, meaning\r\n }),\r\n }\r\n ).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n }\r\n );\r\n\r\n\r\n if (response) {\r\n\r\n console.log('response', response)\r\n\r\n // setcurrentQuestionDetails(response.data)\r\n setcurrentQuestionDetails({\r\n ...response.data,\r\n parent_theme_id: response.data.parent_theme === 'unassigned' ? -1 : response.data.parent_theme_id,\r\n theme_id: response.data.theme === 'unassigned' ? -3 : response.data.theme_id\r\n })\r\n\r\n if (response.data?.locked) {\r\n setEnabled(false)\r\n }\r\n\r\n if (response.data?.question_type === 'likert_scale') {\r\n setMinValue(response.data?.likert_scale.min_value)\r\n setMaxValue(response.data?.likert_scale.max_value)\r\n setStartLabel(response.data?.likert_scale.min_label)\r\n setEndLabel(response.data?.likert_scale.max_label)\r\n setReverse(!response.data?.reverse_coded_flag ? false : true)\r\n setNotApplicable(!response.data?.likert_scale?.na_flag ? false : true)\r\n }\r\n\r\n if (response.data?.question_type === 'mcq' || response.data?.question_type === 'checkbox' || response.data?.question_type === 'dropdown') {\r\n // setFormValues(response.data?.choices)\r\n setFormValues(response.data.choices)\r\n }\r\n if (response.data?.question_type === 'grid_mcq') {\r\n\r\n\r\n\r\n const rows = response.data?.grid_choices?.filter(i => i.axis === 'row')\r\n\r\n\r\n const columns = response.data?.grid_choices?.filter(i => i.axis === 'col')\r\n\r\n setRowValues(rows)\r\n setColumnValues(columns)\r\n setReverse(!response.data?.reverse_coded_flag ? false : true)\r\n }\r\n if (response.data?.question_type === 'grid_likert_scale') {\r\n\r\n setMinValue(response.data?.grid_likert_scale?.likert_scale.min_value)\r\n setMaxValue(response.data?.grid_likert_scale?.likert_scale.max_value)\r\n setStartLabel(response.data?.grid_likert_scale?.likert_scale.min_label)\r\n setEndLabel(response.data?.grid_likert_scale?.likert_scale.max_label)\r\n\r\n const rows = response.data?.grid_likert_scale?.row_choices?.filter(i => i.axis === 'row')\r\n\r\n setRowValues(rows)\r\n setReverse(!response.data?.reverse_coded_flag ? false : true)\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n setisLoading(false)\r\n\r\n } catch (err) {\r\n console.log(err)\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n loadQuestionDetails();\r\n\r\n }, [history, selectedQuestion]);\r\n\r\n\r\n\r\n return (\r\n {\r\n setEditModal(false);\r\n\r\n }}>\r\n \r\n Edit Question\r\n \r\n\r\n
\r\n \r\n {isLoading ? (\r\n
\r\n \r\n
\r\n {isDuplicate ? Creating Question... : Updating Question...}\r\n
\r\n
\r\n ) : (\r\n\r\n <>\r\n \r\n \r\n
\r\n\r\n {locked ? \r\n This question cannot be edited, because it belongs to a live survey(-s).\r\n \r\n : null}\r\n\r\n \r\n \r\n \r\n \r\n
\r\n Question Text:\r\n {question_type === 'short_answer' ? (Short Answer is limited to 250 charachters) : (null)}\r\n
\r\n \r\n \r\n \r\n \r\n {\r\n\r\n // if (e.target.value.trim() !== '') {\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_text: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n setKey(k)}\r\n className=\"mb-3 tabs-menu\">\r\n\r\n \r\n \r\n \r\n \r\n Type:\r\n \r\n \r\n \r\n \r\n {\r\n if (e.target.value === 'Likert scale')\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'likert_scale'\r\n })\r\n\r\n if (e.target.value === 'Multiple Choice')\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'mcq'\r\n })\r\n\r\n if (e.target.value === 'Checkbox')\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'checkbox'\r\n })\r\n if (e.target.value === 'Dropdown')\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'dropdown'\r\n })\r\n if (e.target.value === 'Paragraph')\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'paragraph'\r\n })\r\n if (e.target.value === 'Short Answer')\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'short_answer'\r\n })\r\n if (e.target.value === 'Grid Multiple Choice') {\r\n\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'grid_mcq'\r\n })\r\n }\r\n if (e.target.value === 'Grid Likert scale') {\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: 'grid_likert_scale'\r\n })\r\n }\r\n\r\n if (e.target.value === '')\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails, question_type: ''\r\n })\r\n }}\r\n\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n \r\n {filteredOptions.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n {question_type === 'likert_scale' ?\r\n : null\r\n }\r\n\r\n {question_type === 'mcq' || question_type === 'checkbox' || question_type === 'dropdown' ?\r\n : null}\r\n\r\n\r\n {question_type === 'grid_mcq' ?\r\n () : (null)}\r\n\r\n {question_type === 'grid_likert_scale' ? (\r\n\r\n ) : (null)}\r\n\r\n\r\n \r\n \r\n \r\n Perspective:\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n Themes:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n\r\n let formattedTheme = JSON.parse(e.target.value)\r\n\r\n setcurrentQuestionDetails({\r\n\r\n ...currentQuestionDetails,\r\n parent_theme: formattedTheme.theme_name === 'Unassigned' ? 'unassigned' : formattedTheme.theme_name,\r\n parent_theme_id: formattedTheme.id,\r\n theme: 'unassigned',\r\n theme_id: -3\r\n })\r\n }\r\n\r\n }\r\n // }\r\n selected=''\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n {/* WILL BE ACTUAL THEME NAME */}\r\n\r\n {parent_theme === 'unassigned' ? : }\r\n {filteredThemes.map((option) => {\r\n return (\r\n\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n {subthemes?.length > 0 ?\r\n\r\n \r\n \r\n \r\n Subthemes:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n\r\n let formattedTheme = JSON.parse(e.target.value)\r\n\r\n setcurrentQuestionDetails({\r\n ...currentQuestionDetails,\r\n theme: formattedTheme.theme_name,\r\n theme_id: formattedTheme.id,\r\n })\r\n\r\n }\r\n }\r\n // }\r\n selected=''\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n\r\n {/* */}\r\n {theme === 'unassigned' ? : }\r\n {/* */}\r\n {filteredSubthemes.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n {/* {theme ? : null} */}\r\n\r\n \r\n\r\n \r\n \r\n :\r\n
This Theme does not have Subthemes
}\r\n \r\n\r\n\r\n\r\n \r\n\r\n )}\r\n \r\n \r\n {\r\n duplicate();\r\n }}\r\n >\r\n Duplicate Question\r\n \r\n
\r\n {\r\n setEditModal(false);\r\n setStartLabel('Strongly Disagree')\r\n setEndLabel('Strongly Agree')\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setFormValues([{ value: \"\" }])\r\n\r\n }}>\r\n Leave without saving\r\n\r\n \r\n {\r\n setEditModal(false);\r\n }}\r\n disabled={!isEnabled}\r\n type=\"submit\"\r\n className='card-button'\r\n variant='no-variant-p'>\r\n Save Changes\r\n \r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditQuestionModal;\r\n","import React from 'react'\r\nimport './question-table.styles.scss';\r\n\r\nexport const ColumnFilter = ({ column }) => {\r\n\r\n const { filterValue, setFilter } = column\r\n\r\n const handleFilter = (e) => {\r\n\r\n setFilter(e.target.value)\r\n\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n )\r\n}","import React, { useState, useEffect } from 'react'\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { useDispatch } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport styled from 'styled-components'\r\nimport { useTable, useFilters, useGlobalFilter, useAsyncDebounce, usePagination, useRowSelect } from 'react-table'\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport './question-table.styles.scss';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\nimport { ColumnFilter } from './column-filter.component';\r\nimport { DropdownFilter } from './q-type-dropdown-filter.component';\r\nimport { ThemeDropDown } from './theme.dropdown.component';\r\nimport { SubthemeDropdown } from './subtheme.dropdown.component';\r\nimport { ReverseDropdown } from './reverse-coded.dropdown.component'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash, faGripVertical, faEdit } from '@fortawesome/free-solid-svg-icons';\r\nimport FormCheck from 'react-bootstrap/FormCheck'\r\n\r\nconst Styles = styled.div`\r\npadding: 1rem;\r\n\r\noverflow-x: auto;\r\ntable {\r\n width:95%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n width: 5em\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n}\r\n`\r\nconst IndeterminateCheckbox = React.forwardRef(\r\n ({ indeterminate, ...rest }, ref) => {\r\n const defaultRef = React.useRef()\r\n const resolvedRef = ref || defaultRef\r\n\r\n React.useEffect(() => {\r\n resolvedRef.current.indeterminate = indeterminate\r\n }, [resolvedRef, indeterminate])\r\n\r\n return (\r\n <>\r\n {/* */}\r\n \r\n {/* */}\r\n {/* */}\r\n \r\n )\r\n }\r\n)\r\n\r\n//FILTERS\r\n\r\n// Define a default UI for filtering\r\nfunction DefaultColumnFilter({\r\n column: { filterValue, preFilteredRows, setFilter },\r\n}) {\r\n const count = preFilteredRows.length\r\n\r\n return (\r\n {\r\n setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely\r\n }}\r\n placeholder={`Search ${count} records...`}\r\n />\r\n )\r\n}\r\n\r\n// This is a custom filter UI for selecting\r\n// a unique option from a list\r\nfunction SelectColumnFilter({\r\n column: { filterValue, setFilter, preFilteredRows, id },\r\n}) {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n options.add(row.values[id])\r\n })\r\n return [...options.values()]\r\n }, [id, preFilteredRows])\r\n\r\n // Render a multi-select box\r\n return (\r\n {\r\n setFilter(e.target.value || undefined)\r\n }}\r\n >\r\n \r\n {options.map((option, i) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n\r\n\r\n\r\nfunction Table({ columns, data }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n\r\n const defaultColumn = React.useMemo(\r\n () => ({\r\n // Let's set up our default Filter UI\r\n Filter: DefaultColumnFilter,\r\n }),\r\n []\r\n )\r\n\r\n\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n page,\r\n prepareRow,\r\n selectedFlatRows,\r\n visibleColumns,\r\n preGlobalFilteredRows,\r\n setGlobalFilter,\r\n\r\n\r\n canPreviousPage,\r\n canNextPage,\r\n pageOptions,\r\n pageCount,\r\n gotoPage,\r\n nextPage,\r\n previousPage,\r\n setPageSize,\r\n state: { pageIndex, pageSize },\r\n } = useTable({\r\n columns,\r\n data,\r\n initialState: { pageIndex: 0 },\r\n defaultColumn, // Be sure to pass the defaultColumn option\r\n\r\n\r\n }, useFilters, useGlobalFilter, // useGlobalFilter!\r\n usePagination, useRowSelect,\r\n\r\n // hooks => {\r\n // hooks.visibleColumns.push(columns => [\r\n // // Let's make a column for selection\r\n // {\r\n // id: 'selection',\r\n // // The header can use the table's getToggleAllRowsSelectedProps method\r\n // // to render a checkbox\r\n // Header: ({ getToggleAllRowsSelectedProps }) => (\r\n //
\r\n // \r\n //
\r\n // ),\r\n // // The cell can use the individual row's getToggleRowSelectedProps method\r\n // // to the render a checkbox\r\n // Cell: ({ row }) => (\r\n //
\r\n // \r\n //
\r\n // ),\r\n // },\r\n // ...columns,\r\n // ])\r\n // }\r\n\r\n\r\n )\r\n\r\n\r\n // Render the UI for your table\r\n return (\r\n <>\r\n
\r\n\r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {rows.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}\r\n
{column.canFilter ? column.render('Filter') : null}
\r\n
{cell.render('Cell')}
\r\n\r\n {/*
\r\n\r\n
\r\n
\r\n
\r\n {' '}\r\n {' '}\r\n {' '}\r\n {' '}\r\n
\r\n
\r\n \r\n Page{' '}\r\n \r\n {pageIndex + 1} of {pageOptions.length}\r\n {' '}\r\n \r\n \r\n | Go to page:{' '} \r\n \r\n {\r\n const page = e.target.value ? Number(e.target.value) - 1 : 0\r\n gotoPage(page)\r\n }}\r\n style={{ width: '100px' }}\r\n />\r\n
\r\n
\r\n {\r\n setPageSize(Number(e.target.value))\r\n }}\r\n >\r\n {[10, 20, 30, 40, 50].map(pageSize => (\r\n \r\n ))}\r\n \r\n
\r\n\r\n
\r\n
*/}\r\n \r\n )\r\n\r\n}\r\n\r\nconst deleteQuestion = async (e, history, dispatch, setisLoading) => {\r\n\r\n const questionId = e.id\r\n\r\n try {\r\n let response\r\n\r\n setisLoading(true)\r\n\r\n response = await axios.delete(\r\n `/questions/${questionId}`).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n\r\n\r\n\r\n\r\n dispatch({\r\n type: 'DELETE_QUESTION',\r\n payload: response.data\r\n })\r\n\r\n setisLoading(false)\r\n\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n\r\n}\r\n\r\nfunction QuestionTable({ questions, setEditModal, setChosenQuestions }) {\r\n\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n const [question, setQuestion] = useState(null)\r\n\r\n let reformatedQuestion\r\n\r\n if (question)\r\n\r\n reformatedQuestion = questions.filter(x => {\r\n return x.id === question.id\r\n })\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (question !== null) {\r\n const addNewQuestion = () => {\r\n dispatch({\r\n type: 'SELECT_QUESTION',\r\n payload: reformatedQuestion[0]\r\n })\r\n }\r\n\r\n addNewQuestion();\r\n }\r\n\r\n }, [dispatch, question, reformatedQuestion]);\r\n\r\n\r\n // useEffect(() => {\r\n\r\n // // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n // if (selectedFlatRows.length > 0) {\r\n // const addNewQuestion = () => {\r\n // setChosenQuestions(selectedFlatRows)\r\n // }\r\n\r\n // addNewQuestion();\r\n // }\r\n\r\n // }, [dispatch, setChosenQuestions, selectedFlatRows]);\r\n\r\n\r\n\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n\r\n () => [\r\n\r\n\r\n {\r\n\r\n\r\n Header: 'Question',\r\n accessor: 'question_text',\r\n Filter: ColumnFilter,\r\n Cell: ({ cell }) => {\r\n /* Add data-tip */\r\n // return {row.value};\r\n\r\n if (cell.row.original.question_type === 'likert_scale') {\r\n\r\n\r\n return <>\r\n \r\n
\r\n Min label: {cell.row.original.likert_scale.min_label}\r\n Min value: {cell.row.original.likert_scale.min_value}\r\n Max label: {cell.row.original.likert_scale.max_label}\r\n Max value: {cell.row.original.likert_scale.max_value}\r\n Reverse Coded: {cell.row.original.reverse_coding_flag ? 'Yes' : 'No'}\r\n
\r\n \r\n }\r\n >\r\n {cell.row.original.question_text}\r\n \r\n ;\r\n }\r\n\r\n if (cell.row.original.question_type === 'mcq' || cell.row.original.question_type === 'checkbox' || cell.row.original.question_type === 'dropdown') {\r\n\r\n const choices = cell.row.original.choices.map(choice => choice.value)\r\n\r\n\r\n return <>\r\n \r\n
\r\n Choices:\r\n {choices.join(\", \")}\r\n
\r\n \r\n }\r\n >\r\n {cell.row.original.question_text}\r\n \r\n ;\r\n }\r\n\r\n if (cell.row.original.question_type === 'short_answer' || cell.row.original.question_type === 'paragraph') {\r\n\r\n return {cell.row.original.question_text}\r\n }\r\n\r\n\r\n if (cell.row.original.question_type === 'grid_mcq') {\r\n\r\n\r\n\r\n const rows = cell.row.original.grid_choices.filter(i => i.axis === 'row').map(value => {\r\n if (value.axis === 'row') {\r\n return value.value\r\n }\r\n\r\n return null\r\n\r\n })\r\n\r\n\r\n const columns = cell.row.original.grid_choices.filter(i => i.axis === 'col').map(value => {\r\n if (value.axis === 'col') {\r\n return value.value\r\n }\r\n\r\n return null\r\n\r\n })\r\n\r\n\r\n return <>\r\n \r\n
\r\n Rows: {rows.join(\", \")}\r\n Columns: {columns.join(\", \")}\r\n Reverse Coded: {cell.row.original.reverse_coding_flag ? 'Yes' : 'No'}\r\n\r\n
\r\n \r\n }\r\n >\r\n {cell.row.original.question_text}\r\n \r\n ;\r\n }\r\n\r\n\r\n return {cell.row.original.question_text}\r\n\r\n }\r\n\r\n },\r\n {\r\n Header: 'Theme',\r\n // defaultCanFilter: true,\r\n // disableFilters: true,\r\n Filter: ThemeDropDown,\r\n accessor: 'parent_theme',\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n //ORIGINAL\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme.theme_name\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n\r\n //JuST FLATTENED\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n\r\n //FLATTENED & ALWAYS parent\r\n\r\n if (cell.row.original.parent_theme) {\r\n return cell.row.original.parent_theme\r\n }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Subtheme',\r\n Filter: SubthemeDropdown,\r\n // disableFilters: true,\r\n\r\n accessor: 'theme',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n return cell.row.original.theme\r\n }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Perspective',\r\n accessor: 'implicit_flag',\r\n Filter: ReverseDropdown,\r\n filter: 'equals',\r\n // disableFilters: true,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n if (cell.row.original.implicit_flag) {\r\n return 'Subjective'\r\n }\r\n return 'Objective'\r\n\r\n }\r\n },\r\n\r\n\r\n {\r\n Header: 'Question Type',\r\n accessor: 'question_type', //NEED to change to CELL so that switches likert_scale to Liker Scale returns jsx\r\n // defaultCanFilter: true,\r\n Filter: DropdownFilter,\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n if (cell.row.original.question_type === 'likert_scale') {\r\n return 'Likert scale'\r\n }\r\n\r\n if (cell.row.original.question_type === 'mcq') {\r\n return 'Multiple Choice'\r\n }\r\n\r\n if (cell.row.original.question_type === 'checkbox') {\r\n return 'Checkbox'\r\n }\r\n\r\n if (cell.row.original.question_type === 'dropdown') {\r\n return 'Dropdown'\r\n }\r\n if (cell.row.original.question_type === 'paragraph') {\r\n return 'Paragraph'\r\n }\r\n if (cell.row.original.question_type === 'short_answer') {\r\n return 'Short Answer'\r\n }\r\n\r\n if (cell.row.original.question_type === 'grid_mcq') {\r\n return 'Grid Multiple Choice'\r\n }\r\n\r\n return null //to be replaced by other question type conditionals and null wont happen\r\n\r\n }\r\n },\r\n\r\n\r\n {\r\n Header: ' ',\r\n // defaultCanFilter: true,\r\n Filter: false,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n // return \r\n\r\n return (
\r\n {\r\n setQuestion(cell.row.original)\r\n setEditModal(true)\r\n }}\r\n />\r\n
)\r\n }\r\n },\r\n {\r\n Header: ' ',\r\n // defaultCanFilter: true,\r\n Filter: false,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n return (
\r\n {\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteQuestion(cell.row.original, history, dispatch, setisLoading)\r\n }} />\r\n
)\r\n\r\n\r\n }\r\n }\r\n\r\n ],\r\n [setEditModal]\r\n )\r\n ;\r\n\r\n // const data = React.useMemo(() => makeData(150), [])\r\n\r\n\r\n const formatedQuestions = questions.map(x => {\r\n\r\n if (x.theme && x.parent_theme) {\r\n return { ...x, parent_theme: x.parent_theme.theme_name, theme: x.theme.theme_name }\r\n }\r\n if (x.theme && !x.parent_theme) {\r\n return { ...x, parent_theme: x.theme.theme_name, theme: null }\r\n }\r\n return x\r\n\r\n })\r\n\r\n\r\n return (\r\n\r\n isLoading ? (\r\n
\r\n \r\n
\r\n Deleting Question...\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n )\r\n )\r\n}\r\n\r\nexport default QuestionTable\r\n","import React, { useState, useEffect } from 'react';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport \"../../../_vars.scss\"\r\n\r\n\r\nconst CreateThemeModal = ({ showModal, setShowModal }) => {\r\n\r\n const history = useHistory();\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n //---useSelector get client Id\r\n //POST object\r\n\r\n const dispatch = useDispatch()\r\n const [newThemeSelection, setNewThemeSelection] = useState(null)\r\n\r\n const [name, setName] = useState('')\r\n const [description, setDescription] = useState('')\r\n const [summary, setSummary] = useState('')\r\n const clientId = useSelector((state) => state.client.clientId);\r\n const [isLoading, setisLoading] = useState(false);\r\n const [isEnabled, setEnabled] = useState(true)\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n setEnabled(false)\r\n\r\n\r\n\r\n try {\r\n setisLoading(true)\r\n const newTheme = {\r\n\r\n data: {\r\n theme_name: name,\r\n theme_desc: description,\r\n theme_details: summary,\r\n client_id: clientId,\r\n sys_default: false,\r\n parent_theme_flag: true,\r\n ogs: organisationId,\r\n }\r\n };\r\n\r\n\r\n const response = await axios.post(\r\n `/themes`,\r\n newTheme\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n setEnabled(true)\r\n\r\n\r\n const { theme_name, theme_desc, theme_details, id, child_themes, parent_theme_flag, createdAt } = response.data\r\n\r\n // setNewThemeSelection({\r\n // id,\r\n // theme_name,\r\n // theme_desc,\r\n // theme_summary: theme_details,\r\n // child_themes,\r\n // parent_theme_flag,\r\n // createdAt,\r\n // type: 'regular'\r\n // })\r\n\r\n let formattedChiledThemes = child_themes.filter(x => x.parent_theme_flag !== true)\r\n\r\n // NOTE: No questions added, because empty theme will not need a questions array\r\n\r\n setNewThemeSelection({\r\n ...response.data,\r\n child_themes: formattedChiledThemes,\r\n type: 'regular'\r\n\r\n })\r\n\r\n\r\n setName('')\r\n setDescription('')\r\n setSummary('')\r\n setisLoading(false)\r\n setShowModal(false);\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n setName('')\r\n setDescription('')\r\n setSummary('')\r\n\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (newThemeSelection !== null) {\r\n const setCohortsFromRequest = () => {\r\n dispatch({\r\n type: 'ADD_NEW_THEME',\r\n payload: newThemeSelection\r\n })\r\n }\r\n\r\n setCohortsFromRequest();\r\n }\r\n\r\n }, [dispatch, newThemeSelection]);\r\n\r\n\r\n\r\n return (\r\n {\r\n setShowModal(false);\r\n }}>\r\n \r\n Create Theme\r\n \r\n
\r\n \r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Creating Theme...\r\n
\r\n
\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n Theme Name:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n setName(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Theme Description:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n setDescription(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Summary:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n setSummary(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n )}\r\n\r\n\r\n
\r\n \r\n\r\n {\r\n setName('')\r\n setDescription('')\r\n setSummary('')\r\n setShowModal(false);\r\n }} >\r\n Cancel\r\n \r\n\r\n\r\n {name ? {\r\n setShowModal(false);\r\n\r\n }}\r\n />\r\n\r\n :\r\n \r\n\r\n }\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CreateThemeModal;\r\n","import React from 'react';\r\nimport './subtheme-item.styles.scss';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Button from 'react-bootstrap/Button';\r\nimport { useDispatch } from 'react-redux';\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport ThemeRowItem from '../Themerowitem/theme-row-item.component';\r\n\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash, faEdit } from '@fortawesome/free-solid-svg-icons';\r\n\r\nfunction SubthemeItem({ id, sys_default, theme_name, theme_desc, theme_summary, setEditShowModal, setIsDeleting }) {\r\n //setSubthemeOpen\r\n // onClick dispatch the passed in id as currently selected cohort\r\n\r\n\r\n const history = useHistory();\r\n\r\n const dispatch = useDispatch()\r\n\r\n const selectSubtheme = () => {\r\n dispatch({\r\n type: 'SELECT_SUBTHEME',\r\n payload: { id, theme_name, theme_desc, theme_summary }\r\n })\r\n }\r\n const toggleEditModal = () => {\r\n\r\n setEditShowModal(true)\r\n\r\n }\r\n const deleteTheme = async () => {\r\n\r\n try {\r\n let response\r\n setIsDeleting(true)\r\n response = await axios.delete(\r\n `/themes/${id}`).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n setIsDeleting(false)\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n dispatch({\r\n type: 'DELETE_SUBTHEME',\r\n payload: { id, theme_name, theme_desc, theme_summary }\r\n })\r\n\r\n }\r\n\r\n\r\n return (\r\n\r\n // onClick={selectTheme}\r\n \r\n {/* 1 */}\r\n \r\n \r\n \r\n {sys_default ? null : \r\n
\r\n {\r\n toggleEditModal()\r\n }}\r\n />\r\n
\r\n }\r\n {sys_default ? null : \r\n
\r\n {\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteTheme()\r\n }} />\r\n
\r\n }\r\n \r\n\r\n );\r\n}\r\n\r\nexport default SubthemeItem;\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\n\r\nimport \"../../../_vars.scss\"\r\n\r\nconst CreateSubthemeModal = ({ showModal, setShowModal, themeId }) => {\r\n\r\n\r\n const history = useHistory();\r\n //---useSelector get client Id\r\n //POST object\r\n\r\n const dispatch = useDispatch()\r\n\r\n const selectedTheme = useSelector((state) => state.theme.selectedTheme);\r\n\r\n const [updatedThemeSelection, setUpdatedThemeSelection] = useState(null)\r\n const [isLoading, setisLoading] = useState(false);\r\n const [name, setName] = useState('')\r\n const [description, setDescription] = useState('')\r\n const [summary, setSummary] = useState('')\r\n\r\n\r\n const [isEnabled, setEnabled] = useState(true)\r\n\r\n\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n setEnabled(false)\r\n\r\n\r\n\r\n try {\r\n // const newSubtheme = {\r\n // insertSubtheme: {\r\n\r\n // subtheme_name: name,\r\n // subtheme_desc: description,\r\n // subtheme_summary: summary,\r\n // client_id: clientId\r\n // }\r\n // };\r\n\r\n\r\n setisLoading(true)\r\n const newTheme = {\r\n\r\n data: {\r\n theme_name: name,\r\n theme_desc: description,\r\n theme_details: summary,\r\n parent_theme: themeId,\r\n sys_default: false,\r\n parent_theme_flag: false\r\n }\r\n\r\n };\r\n\r\n const response = await axios.post(\r\n `/themes/`,\r\n newTheme\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n setEnabled(true)\r\n\r\n\r\n\r\n\r\n const { theme_name, theme_desc, theme_summary, id, parent_theme, child_themes } = response.data\r\n\r\n\r\n // setUpdatedThemeSelection({\r\n // id,\r\n // theme_name,\r\n // theme_desc,\r\n // theme_summary,\r\n // child_themes,\r\n // parent_theme\r\n // })\r\n\r\n\r\n let formattedChiledThemes = child_themes.filter(x => x.parent_theme_flag !== true)\r\n\r\n // // NOTE: Parent Theme could already have questions, so need to spread in parents details\r\n\r\n setUpdatedThemeSelection({\r\n ...selectedTheme,\r\n child_themes: formattedChiledThemes,\r\n type: 'regular'\r\n\r\n })\r\n\r\n setName('')\r\n setDescription('')\r\n setSummary('')\r\n setisLoading(false)\r\n setShowModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (updatedThemeSelection !== null) {\r\n const updateThemeDetails = () => {\r\n dispatch({\r\n type: 'UPDATE_THEME_DETAILS',\r\n payload: updatedThemeSelection\r\n })\r\n }\r\n\r\n updateThemeDetails();\r\n }\r\n\r\n }, [dispatch, updatedThemeSelection]);\r\n\r\n\r\n\r\n return (\r\n {\r\n setShowModal(false);\r\n }}>\r\n \r\n Create Subtheme\r\n \r\n
\r\n \r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Creating Subheme...\r\n
\r\n
\r\n ) : (\r\n\r\n <>\r\n \r\n \r\n \r\n Name:\r\n \r\n \r\n \r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setName(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setDescription(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Summary:\r\n \r\n \r\n \r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setSummary(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n )}\r\n\r\n\r\n
\r\n \r\n {\r\n setName('')\r\n setDescription('')\r\n setSummary('')\r\n setShowModal(false);\r\n }} >\r\n Cancel\r\n \r\n\r\n\r\n {name ? {\r\n setShowModal(false);\r\n\r\n }}\r\n /> :\r\n \r\n }\r\n\r\n\r\n {/* {\r\n setName('')\r\n setDescription('')\r\n setSummary('')\r\n setShowModal(false);\r\n }}>\r\n Cancel\r\n \r\n {name ? {\r\n setShowModal(false);\r\n\r\n }}\r\n disabled={false}\r\n type='submit'\r\n className='modal-create-button'\r\n variant='no-variant-p'>\r\n Create Subtheme\r\n :\r\n {\r\n setShowModal(false);\r\n\r\n }}\r\n disabled={true}\r\n type='submit'\r\n className='modal-create-button'\r\n variant='no-variant-p'>\r\n Create Subtheme\r\n } */}\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CreateSubthemeModal;\r\n","import React, { useState, useEffect } from 'react';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\n\r\nconst EditSubtheme = ({ showEditModal, setEditShowModal }) => {\r\n\r\n const selectedChildTheme = useSelector((state) => state.theme.selectedChildTheme);\r\n const selectedParentTheme = useSelector((state) => state.theme.selectedTheme);\r\n\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n const history = useHistory();\r\n const subthemeId = selectedChildTheme?.id\r\n\r\n const [currentThemeDetails, setcurrentThemeDetails] = useState({\r\n theme_name: '',\r\n theme_desc: '',\r\n theme_summary: ''\r\n })\r\n\r\n const { theme_name, theme_desc, theme_summary } = currentThemeDetails\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n const loadSubthemeDetails = () => {\r\n\r\n if (selectedChildTheme !== null) {\r\n\r\n setcurrentThemeDetails({\r\n theme_name: selectedChildTheme.theme_name,\r\n theme_desc: selectedChildTheme.theme_desc,\r\n theme_summary: selectedChildTheme.theme_summary\r\n })\r\n }\r\n\r\n }\r\n\r\n loadSubthemeDetails();\r\n\r\n }, [selectedChildTheme]);\r\n\r\n\r\n const dispatch = useDispatch()\r\n const [updatedThemeSelection, setUpdatedThemeSelection] = useState(null)\r\n const [updatedChildTheme, setUpdatedChildTheme] = useState(null)\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n\r\n try {\r\n setisLoading(true)\r\n const editedSubtheme = {\r\n // {\r\n // theme_name: currentThemeDetails.theme_name,\r\n // theme_desc: currentThemeDetails.theme_desc,\r\n // theme_summary: currentThemeDetails.theme_summary,\r\n // }\r\n data: {\r\n theme_name: currentThemeDetails.theme_name,\r\n theme_desc: currentThemeDetails.theme_desc,\r\n theme_summary: currentThemeDetails.theme_summary,\r\n parentThemeID: selectedParentTheme?.id\r\n\r\n }\r\n }\r\n\r\n const response = await axios.put(\r\n `/themes/${subthemeId}`,\r\n editedSubtheme\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n\r\n\r\n const { theme_name, theme_desc, theme_summary, id, parent_theme, child_themes } = response.data\r\n\r\n\r\n // setUpdatedThemeSelection({\r\n // id,\r\n // theme_name,\r\n // theme_desc,\r\n // theme_summary,\r\n // parent_theme,\r\n // child_themes\r\n // })\r\n\r\n\r\n\r\n let formattedChiledThemes = child_themes.filter(x => x.parent_theme_flag !== true)\r\n\r\n let updatedChildtheme\r\n\r\n let allSpecificThemesQuestions = response?.data?.child_themes.map(x => {\r\n\r\n if (x.id === selectedChildTheme?.id) {\r\n setUpdatedChildTheme(x)\r\n }\r\n\r\n return x.questions\r\n }).flat(1)\r\n\r\n console.log('updatedChildtheme', updatedChildtheme)\r\n\r\n setUpdatedThemeSelection({\r\n ...response.data,\r\n child_themes: formattedChiledThemes,\r\n questions: [...response.data.questions, ...allSpecificThemesQuestions],\r\n type: 'regular'\r\n })\r\n\r\n setisLoading(false)\r\n setEditShowModal(false);\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n useEffect(() => {\r\n\r\n if (updatedThemeSelection !== null) {\r\n const setCohortsFromRequest = () => {\r\n dispatch({\r\n type: 'UPDATE_THEME_DETAILS',\r\n payload: updatedThemeSelection\r\n })\r\n\r\n dispatch({\r\n type: 'SELECT_CHILD_THEME',\r\n payload: updatedChildTheme\r\n })\r\n\r\n }\r\n\r\n setCohortsFromRequest();\r\n }\r\n\r\n }, [dispatch, updatedThemeSelection, updatedChildTheme]);\r\n\r\n\r\n\r\n const deleteSubtheme = async () => {\r\n\r\n try {\r\n let response\r\n setisLoading(true)\r\n\r\n response = await axios.delete(\r\n `/themes/${subthemeId}`).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n\r\n console.log('response.data', response.data)\r\n\r\n\r\n dispatch({\r\n type: 'DELETE_SUBTHEME',\r\n payload: response.data\r\n })\r\n setisLoading(false)\r\n setEditShowModal(false);\r\n\r\n\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n\r\n\r\n\r\n return (\r\n\r\n {\r\n setEditShowModal(false);\r\n }}>\r\n \r\n Edit Question Subtheme\r\n \r\n
\r\n \r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Updating Subtheme...\r\n
\r\n
\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n Subtheme Name:\r\n \r\n \r\n \r\n \r\n {\r\n //Maybe add to EDITED cohort local state\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setcurrentThemeDetails({\r\n ...currentThemeDetails, theme_name: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Subtheme Description:\r\n \r\n \r\n \r\n \r\n {\r\n //Maybe add to EDITED cohort local state\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setcurrentThemeDetails({\r\n ...currentThemeDetails, theme_desc: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Summary:\r\n \r\n \r\n \r\n \r\n {\r\n //Maybe add to EDITED cohort local state\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setcurrentThemeDetails({\r\n ...currentThemeDetails, theme_summary: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n )}\r\n\r\n\r\n
\r\n \r\n {\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteSubtheme()\r\n }} >\r\n Delete Subtheme \r\n
\r\n {\r\n setEditShowModal(false);\r\n }} >\r\n Cancel\r\n
\r\n \r\n {/* {\r\n setEditShowModal(false);\r\n }}>\r\n Cancel\r\n \r\n \r\n Save Changes\r\n */}\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default EditSubtheme;\r\n","import React, { useState, useEffect } from 'react';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\n\r\nconst EditThemeModal = ({ showEditModal, setEditShowModal }) => {\r\n\r\n const selectedTheme = useSelector((state) => state.theme.selectedTheme);\r\n const [isLoading, setisLoading] = useState(false);\r\n const [isDeleting, setIsDeleting] = useState(false);\r\n const history = useHistory();\r\n const themeId = selectedTheme?.id\r\n\r\n const [currentThemeDetails, setcurrentThemeDetails] = useState({\r\n theme_name: '',\r\n theme_desc: '',\r\n theme_summary: ''\r\n })\r\n\r\n const { theme_name, theme_desc, theme_summary } = currentThemeDetails\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n const loadThemeDetails = () => {\r\n\r\n if (selectedTheme !== null) {\r\n\r\n setcurrentThemeDetails({\r\n theme_name: selectedTheme.theme_name,\r\n theme_desc: selectedTheme.theme_desc,\r\n theme_summary: selectedTheme.theme_summary\r\n })\r\n }\r\n\r\n }\r\n\r\n loadThemeDetails();\r\n\r\n }, [selectedTheme]);\r\n\r\n\r\n const dispatch = useDispatch()\r\n const [updatedThemeSelection, setUpdatedThemeSelection] = useState(null)\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n\r\n try {\r\n setisLoading(true)\r\n const editedTheme = {\r\n data: {\r\n theme_name: currentThemeDetails.theme_name,\r\n theme_desc: currentThemeDetails.theme_desc,\r\n theme_summary: currentThemeDetails.theme_summary,\r\n // parent_theme: themeId\r\n }\r\n // client_id: clientId\r\n };\r\n\r\n const response = await axios.put(\r\n `/themes/${themeId}`,\r\n editedTheme\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n\r\n const { theme_name, theme_desc, theme_summary, id, parent_theme, child_themes, questions } = response.data\r\n\r\n\r\n\r\n\r\n let formattedChiledThemes = child_themes.filter(x => x.parent_theme_flag !== true)\r\n\r\n let allSpecificThemesQuestions = response?.data?.child_themes.map(x => {\r\n return x.questions\r\n }).flat(1)\r\n\r\n // setUpdatedThemeSelection({\r\n // id,\r\n // theme_name,\r\n // theme_desc,\r\n // theme_summary,\r\n // parent_theme,\r\n // child_themes: formattedChiledThemes,\r\n // questions,\r\n // type: 'regular'\r\n // })\r\n\r\n\r\n setUpdatedThemeSelection({\r\n ...response.data,\r\n child_themes: formattedChiledThemes,\r\n questions: [...response.data.questions, ...allSpecificThemesQuestions],\r\n type: 'regular'\r\n })\r\n\r\n setisLoading(false)\r\n setEditShowModal(false);\r\n\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (updatedThemeSelection !== null) {\r\n const updateThemeDetails = () => {\r\n dispatch({\r\n type: 'UPDATE_THEME_DETAILS',\r\n payload: updatedThemeSelection\r\n })\r\n\r\n }\r\n\r\n updateThemeDetails();\r\n }\r\n\r\n }, [dispatch, updatedThemeSelection]);\r\n\r\n\r\n\r\n const deleteTheme = async () => {\r\n\r\n try {\r\n let response\r\n setisLoading(true)\r\n\r\n response = await axios.delete(\r\n `/themes/${themeId}`).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n\r\n console.log('response.data', response.data)\r\n\r\n\r\n dispatch({\r\n type: 'DELETE_THEME',\r\n payload: response.data\r\n })\r\n setisLoading(false)\r\n setEditShowModal(false);\r\n\r\n\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n\r\n return (\r\n\r\n {\r\n setEditShowModal(false);\r\n }}>\r\n \r\n Edit Theme\r\n \r\n
\r\n \r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Updating Theme...\r\n
\r\n
\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n Theme Name:\r\n \r\n \r\n \r\n \r\n {\r\n //Maybe add to EDITED cohort local state\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setcurrentThemeDetails({\r\n ...currentThemeDetails, theme_name: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Theme Description:\r\n \r\n \r\n \r\n \r\n {\r\n //Maybe add to EDITED cohort local state\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setcurrentThemeDetails({\r\n ...currentThemeDetails, theme_desc: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Summary:\r\n \r\n \r\n \r\n \r\n {\r\n //Maybe add to EDITED cohort local state\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setcurrentThemeDetails({\r\n ...currentThemeDetails, theme_summary: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n )}\r\n\r\n\r\n
\r\n \r\n {\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteTheme()\r\n }} >\r\n Delete Theme \r\n
\r\n {/* {\r\n setEditShowModal(false);\r\n }}>\r\n Cancel\r\n */}\r\n {\r\n setEditShowModal(false);\r\n }} >\r\n Cancel\r\n
\r\n \r\n {/* \r\n Save Changes\r\n */}\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default EditThemeModal;\r\n","import React from 'react';\r\n\r\nimport './subthemes.styles.scss';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle } from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { faArrowAltCircleLeft } from '@fortawesome/free-solid-svg-icons';\r\nimport { useState } from 'react';\r\n\r\nimport { useSelector } from 'react-redux';\r\nimport styled from 'styled-components'\r\n\r\nimport SubthemeItem from '../SubthemeItem/subtheme-item.component'\r\nimport CreateSubthemeModal from '../CreateSubthemeModal/create-subtheme-modal.component';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n// import CohortSelection from '../../components/CohortSelection/cohort-selection.component';\r\nimport EditSubthemeModal from '../EditSubthemeModal/edit-subtheme-modal-component'\r\n\r\n\r\nconst Styles = styled.div`\r\n padding: 1rem;\r\n\r\n \r\n table {\r\n width:100%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n }\r\n`\r\n\r\nconst Subthemes = ({ setSubthemeOpen }) => {\r\n\r\n const currentTheme = useSelector((state) => state.theme.selectedTheme);\r\n\r\n\r\n const { child_themes } = currentTheme\r\n\r\n const [showCreateModal, setCreateShowModal] = useState(false);\r\n const [showEditModal, setEditShowModal] = useState(false);\r\n const [isDeleting, setIsDeleting] = useState(false);\r\n\r\n\r\n\r\n return (\r\n
\r\n

\r\n {\r\n // window.location.reload()\r\n setSubthemeOpen(false)\r\n\r\n }} />\r\n {currentTheme.theme_name} - Subthemes\r\n

\r\n\r\n {currentTheme.sys_default ? null :
\r\n {\r\n setCreateShowModal(true);\r\n }} />\r\n Create New Subtheme\r\n
}\r\n {isDeleting ? (\r\n
\r\n \r\n
\r\n Deleting Subtheme...\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {child_themes ? child_themes.map(({ id, sys_default, theme_name, theme_desc, theme_summary }) =>\r\n \r\n ) : null}\r\n {showEditModal ? : null}\r\n \r\n \r\n
#NameDescriptionSummary
\r\n
)}\r\n\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default Subthemes;","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport CreateThemeModal from '../../Theme-Components/CreateThemeModal/create-theme-modal.component';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport styled from 'styled-components'\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\nimport ThemeItem from '../ThemeItem/theme-item.component';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport Subthemes from '../Subthemes/subthemes.component'\r\n\r\nimport './theme-display.styles.scss';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\n\r\nimport EditThemeModal from '../EditThemeModal/edit-theme-modal-component'\r\n\r\n\r\nconst Styles = styled.div`\r\n padding: 1rem;\r\n\r\n \r\n table {\r\n width:100%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n }\r\n`\r\n\r\nconst ThemeDisplay = () => {\r\n\r\n const [themes, setThemes] = useState([])\r\n const history = useHistory();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isDeleting, setIsDeleting] = useState(false);\r\n\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n const dispatch = useDispatch()\r\n\r\n useEffect(() => {\r\n let controller = new AbortController();\r\n (async () => {\r\n try {\r\n setIsLoading(true)\r\n const response = await axios.get(\r\n `/themes`, {\r\n signal: controller.signal\r\n }\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n if (response.data) {\r\n setThemes(response.data)\r\n controller = null;\r\n setIsLoading(false)\r\n }\r\n\r\n console.log('response.data', response)\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n })();\r\n return () => controller?.abort();\r\n\r\n }, [organisationId]);\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n // if (themes.length > 0) {\r\n\r\n const setThemesFromRequest = () => {\r\n dispatch({\r\n type: 'SET_THEMES',\r\n payload: themes\r\n })\r\n }\r\n\r\n setThemesFromRequest();\r\n // }\r\n\r\n }, [themes, dispatch]);\r\n\r\n\r\n //EDIT cohort details modal state\r\n const [showCreateModal, setCreateShowModal] = useState(false);\r\n const [showEditModal, setEditShowModal] = useState(false);\r\n const [subthemeOpen, setSubthemeOpen] = useState(false);\r\n\r\n\r\n const themeData = useSelector((state) => state.theme.themes);\r\n\r\n\r\n\r\n\r\n return (\r\n\r\n\r\n !subthemeOpen ?
\r\n\r\n

\r\n Themes\r\n

\r\n\r\n
\r\n {\r\n setCreateShowModal(true);\r\n }} />\r\n Create New Theme\r\n
\r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Loading Themes...\r\n
\r\n
\r\n ) : (\r\n\r\n isDeleting ? (\r\n
\r\n \r\n
\r\n Deleting Theme...\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n {themeData.map(({ id, theme_name, theme_desc, theme_summary, child_themes, sys_default }) =>\r\n )}\r\n\r\n\r\n \r\n \r\n {showEditModal ? : null}\r\n
#NameDescriptionSummarySubthemes
\r\n
)\r\n )}\r\n
: \r\n );\r\n\r\n};\r\n\r\nexport default ThemeDisplay;\r\n\r\n\r\n\r\n\r\n","import React, { useState, useEffect } from 'react'\r\nimport { useDispatch } from 'react-redux'\r\nimport styled from 'styled-components'\r\nimport { useTable } from 'react-table'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport Button from 'react-bootstrap/Button';\r\n// import OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\n// import Tooltip from 'react-bootstrap/Tooltip';\r\nimport './question-group-table.styles.scss'\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\n\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash, faEdit } from '@fortawesome/free-solid-svg-icons';\r\n\r\nconst Styles = styled.div`\r\n padding: 1rem;\r\n\r\n \r\n table {\r\n width:98%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n }\r\n`\r\n\r\n\r\nfunction Table({ columns, data }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n prepareRow,\r\n } = useTable({\r\n columns,\r\n data,\r\n })\r\n\r\n // Render the UI for your table\r\n return (\r\n \r\n\r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n {rows.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}
{cell.render('Cell')}
\r\n )\r\n}\r\n\r\nfunction QuestionGroupTable({ questionGroups, setEditShowModal }) {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const [question, setQuestion] = useState('')\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n const history = useHistory()\r\n\r\n\r\n const deleteQuestionGroup = async (e, history, dispatch, setisLoading) => {\r\n\r\n const questionGroupId = e.id\r\n\r\n try {\r\n let response\r\n\r\n setisLoading(true)\r\n\r\n response = await axios.delete(\r\n `/question-groups/${questionGroupId}`).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n\r\n\r\n\r\n dispatch({\r\n type: 'DELETE_QUESTION_GROUP',\r\n payload: response.data\r\n })\r\n\r\n setisLoading(false)\r\n\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (question !== null) {\r\n const addNewQuestion = () => {\r\n dispatch({\r\n type: 'SELECT_QUESTION_GROUP',\r\n payload: question\r\n })\r\n }\r\n\r\n addNewQuestion();\r\n }\r\n\r\n }, [dispatch, question]);\r\n\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n\r\n () => [\r\n\r\n {\r\n Header: 'Group Description',\r\n accessor: 'group_desc',\r\n Cell: ({ cell }) => {\r\n\r\n return
{cell.row.original.group_desc}
\r\n }\r\n\r\n },\r\n\r\n {\r\n Header: 'Questions',\r\n accessor: 'questions',\r\n Cell: ({ cell }) => {\r\n\r\n const questions = cell.row.original.questions\r\n\r\n if (cell.row.original.questions) {\r\n return (\r\n
\r\n {\r\n questions.map((question) =>\r\n\r\n
{question.question_text}
) //{questions.indexOf(question) + 1}.\r\n\r\n }\r\n
\r\n )\r\n }\r\n return null\r\n\r\n }\r\n },\r\n\r\n\r\n // {\r\n // Header: 'Start Date',\r\n // accessor: 'start_date',\r\n // Cell: ({ cell }) => {\r\n\r\n // const questions = cell.row.original.questions\r\n\r\n // if (cell.row.original.questions) {\r\n // return (\r\n //
\r\n // {\r\n // questions.map((question) =>\r\n\r\n //
{question.start_date}
)\r\n\r\n // }\r\n //
\r\n // )\r\n // }\r\n // return null\r\n\r\n // },\r\n\r\n\r\n // },\r\n // {\r\n // Header: 'End Date',\r\n // accessor: 'end_date', //NEED to change to CELL so that switches likert_scale to Liker Scale returns jsx\r\n // Cell: ({ cell }) => {\r\n\r\n // const questions = cell.row.original.questions\r\n\r\n // if (cell.row.original.questions) {\r\n // return (\r\n //
\r\n // {\r\n // questions.map((question) =>\r\n\r\n //
{question.end_date}
)\r\n\r\n // }\r\n //
\r\n // )\r\n // }\r\n\r\n // return null\r\n\r\n // },\r\n\r\n\r\n // },\r\n\r\n\r\n {\r\n Header: ' ',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n return {\r\n setQuestion(cell.row.original)\r\n setEditShowModal(true)\r\n }}\r\n />\r\n }\r\n },\r\n {\r\n Header: ' ',\r\n Cell: ({ cell }) => {\r\n\r\n return
\r\n {\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteQuestionGroup(cell.row.original, history, dispatch, setisLoading)\r\n }}\r\n />\r\n
\r\n }\r\n },\r\n ],\r\n [setEditShowModal]\r\n )\r\n\r\n return (\r\n\r\n\r\n isLoading ? (\r\n
\r\n \r\n
\r\n Deleting Question Group...\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n )\r\n )\r\n}\r\n\r\nexport default QuestionGroupTable\r\n","export default __webpack_public_path__ + \"static/media/editicon.f45c3472.svg\";","export default __webpack_public_path__ + \"static/media/Frame.4f4411bb.svg\";","import React from 'react';\r\n\r\n\r\nimport '../../ThemeSelectItem/theme-question-item.styles.scss';\r\nimport { faUsersCog } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useDispatch } from 'react-redux';\r\nimport editIcon from '../../../../assets/editicon.svg'\r\nimport Accordion from 'react-bootstrap/Accordion';\r\n\r\nimport label from '../../../../assets/Frame.svg'\r\n\r\nimport ThemeItemName from '../../cohortItemName/themeitemname.component';\r\n\r\n\r\nfunction dateFormat(date) {\r\n var setdate = new Date(date)\r\n\r\n return setdate.toLocaleDateString()\r\n}\r\n\r\n\r\nfunction ChildThemeSelectItem({ childTheme, setSubthemeModal, selected }) {\r\n\r\n const { theme_name, theme_desc, createdAt, sys_default } = childTheme\r\n\r\n\r\n\r\n const dispatch = useDispatch()\r\n\r\n\r\n const selectChildTheme = async () => {\r\n\r\n dispatch({\r\n type: 'SELECT_CHILD_THEME',\r\n payload: childTheme\r\n })\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n {theme_name}\r\n \r\n {!sys_default ? edit_button {\r\n setSubthemeModal(true);\r\n }} /> : null}\r\n
\r\n \r\n {theme_desc}\r\n \r\n\r\n {dateFormat(createdAt) === 'Invalid Date' ?\r\n
\r\n :\r\n
Created: {dateFormat(createdAt)}
\r\n }\r\n\r\n
\r\n\r\n\r\n\r\n
)\r\n\r\n\r\n}\r\n\r\nexport default ChildThemeSelectItem;\r\n\r\n","import React, { useState } from 'react';\r\n\r\nimport './theme-question-item.styles.scss';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { faUsersCog } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport editIcon from '../../../assets/editicon.svg'\r\nimport addIcon from '../../../assets/addcirclebutton.svg'\r\nimport label from '../../../assets/Frame.svg'\r\nimport ChildThemeSelectItem from './ChildThemeSelectItem/child-themeselect-item.component';\r\nimport Accordion from 'react-bootstrap/Accordion';\r\nimport CreateSubthemeModal from '../../Theme-Components/CreateSubthemeModal/create-subtheme-modal.component'\r\nimport ThemeItemName from '../cohortItemName/themeitemname.component';\r\nimport AccordionItem from 'react-bootstrap/esm/AccordionItem';\r\nimport AccordionHeader from 'react-bootstrap/esm/AccordionHeader';\r\n\r\n\r\nfunction dateFormat(date) {\r\n var setdate = new Date(date)\r\n\r\n return setdate.toLocaleDateString()\r\n}\r\n\r\nfunction ThemeSelectItem({ theme, setEditShowModal, setSubthemeModal }) {\r\n\r\n const { id, theme_name, createdAt, theme_desc, child_themes, sys_default } = theme\r\n\r\n const [showCreateSubtheme, setShowCreateSubtheme] = useState(false);\r\n\r\n const selectedTheme = useSelector((state) => state.theme.selectedTheme);\r\n const selectedChildTheme = useSelector((state) => state.theme.selectedChildTheme);\r\n\r\n const history = useHistory();\r\n\r\n const dispatch = useDispatch()\r\n\r\n const selectTheme = async () => {\r\n\r\n\r\n if (selectedTheme?.id === id) {\r\n\r\n console.log('selectedThemeID', selectedTheme?.id, id)\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: selectedTheme\r\n })\r\n\r\n dispatch({\r\n type: 'SELECT_CHILD_THEME',\r\n payload: null\r\n })\r\n\r\n return\r\n }\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { id, theme_name, theme_desc, createdAt, child_themes, type: 'regular' }\r\n })\r\n\r\n dispatch({\r\n type: 'SELECT_CHILD_THEME',\r\n payload: null\r\n })\r\n\r\n\r\n }\r\n\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {theme_name}\r\n \r\n {!sys_default ? edit_button {\r\n event.stopPropagation()\r\n selectTheme()\r\n setEditShowModal(true);\r\n }} /> : null}\r\n
\r\n \r\n {theme_desc}\r\n \r\n
Created: {dateFormat(createdAt)}
\r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n add_button {\r\n\r\n setShowCreateSubtheme(true)\r\n }} />\r\n Create New Subtheme\r\n
\r\n
\r\n\r\n {child_themes?.length > 0 ? child_themes.map(child_theme => {\r\n\r\n //PUT INTO COMPONENT\r\n //unassigned child theme has no id so passing in name as key\r\n return (\r\n\r\n \r\n )\r\n })\r\n\r\n : null}\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n );\r\n}\r\n\r\nexport default ThemeSelectItem;\r\n\r\n","import React from 'react';\r\n\r\nimport './theme-question-item.styles.scss';\r\n\r\nimport label from '../../../assets/Frame.svg'\r\n\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { faUsersCog } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Accordion } from 'react-bootstrap';\r\n\r\nfunction AllQuestionsThemes({ created_at }) {\r\n\r\n const history = useHistory();\r\n\r\n const selectedTheme = useSelector((state) => state.theme.selectedTheme);\r\n\r\n\r\n const dispatch = useDispatch()\r\n\r\n const selectTheme = (e) => {\r\n\r\n\r\n let type = e\r\n\r\n if (selectedTheme?.type === type) {\r\n return\r\n }\r\n\r\n\r\n\r\n console.log('type', type)\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: {\r\n id: type === 'all' ? -2 : -1,\r\n theme_desc: \"\",\r\n theme_name: type === 'all' ? \"All Questions\" : 'Unassigned',\r\n type: type,\r\n questions: []\r\n\r\n }\r\n })\r\n dispatch({\r\n type: 'SELECT_CHILD_THEME',\r\n payload: null\r\n })\r\n\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n selectTheme('all');\r\n }}>\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n {/* */}\r\n All Questions\r\n \r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n {\r\n selectTheme('allUnassigned');\r\n }}>\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n {/* */}\r\n \r\n Unassigned\r\n \r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default AllQuestionsThemes;\r\n\r\n","import React, { useState } from 'react';\r\nimport ThemeSelectItem from '../ThemeSelectItem/themeselect-item.component';\r\nimport AllQuestionsThemes from '../ThemeSelectItem/all-questions-item.component copy';\r\nimport CreateThemeModal from '../../Theme-Components/CreateThemeModal/create-theme-modal.component'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport Accordion from 'react-bootstrap/Accordion';\r\nimport EditThemeModal from '../../Theme-Components/EditThemeModal/edit-theme-modal-component';\r\nimport EditSubtheme from '../../Theme-Components/EditSubthemeModal/edit-subtheme-modal-component'\r\nimport { useSelector } from 'react-redux'\r\nimport addIcon from '../../../assets/addcirclebutton.svg'\r\n\r\n\r\nimport './theme-selection.component.scss';\r\n\r\n\r\nfunction ThemeSelection() {\r\n\r\n const [showModal, setShowModal] = useState(false);\r\n const [showEditModal, setEditShowModal] = useState(false);\r\n const [showSubthemeModal, setSubthemeModal] = useState(false);\r\n\r\n //useSelector from cohortReducer to get all cohort names, timestamps, ids\r\n\r\n const themes = useSelector((state) => state.theme.themes);\r\n\r\n\r\n\r\n // const cohorts = []\r\n\r\n\r\n return (\r\n
\r\n

\r\n Question Themes\r\n

\r\n
{\r\n setShowModal(true);\r\n }} >\r\n add_button\r\n {/* {\r\n setShowModal(true);\r\n }} /> */}\r\n Create New Theme\r\n
\r\n\r\n {/* on click of the cohort item ... */}\r\n
\r\n\r\n\r\n \r\n \r\n {themes.filter(x => x.id >= 0).map((theme) =>\r\n )}\r\n \r\n
\r\n\r\n \r\n\r\n\r\n {showEditModal ? : null}\r\n {showSubthemeModal ? : null}\r\n\r\n\r\n\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default ThemeSelection;","import React from 'react'\r\nimport './question-table.styles.scss';\r\n\r\nexport const ColumnFilter = ({ column }) => {\r\n\r\n const { filterValue, setFilter } = column\r\n\r\n const handleFilter = (e) => {\r\n\r\n setFilter(e.target.value)\r\n\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n )\r\n}","import React from 'react'\r\n\r\nexport const DropdownFilter = ({\r\n column\r\n}) => {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n\r\n const { filterValue, setFilter, preFilteredRows, id } = column\r\n\r\n\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n options.add(row.values[id])\r\n })\r\n return [...options.values()]\r\n }, [id, preFilteredRows])\r\n\r\n const displayOptions = options.map(option => {\r\n\r\n if (option === 'likert_scale') {\r\n return {\r\n value: 'likert_scale',\r\n label: 'Likert scale'\r\n }\r\n }\r\n\r\n if (option === 'mcq') {\r\n return {\r\n value: 'mcq',\r\n label: 'Multiple Choice'\r\n }\r\n }\r\n\r\n\r\n if (option === 'checkbox') {\r\n return {\r\n value: 'checkbox',\r\n label: 'Checkbox'\r\n }\r\n }\r\n\r\n if (option === 'dropdown') {\r\n return {\r\n value: 'dropdown',\r\n label: 'Dropdown'\r\n }\r\n }\r\n if (option === 'paragraph') {\r\n return {\r\n value: 'paragraph',\r\n label: 'Paragraph'\r\n }\r\n }\r\n if (option === 'short_answer') {\r\n return {\r\n value: 'short_answer',\r\n label: 'Short Answer'\r\n }\r\n }\r\n\r\n if (option === 'grid_mcq') {\r\n return {\r\n value: 'grid_mcq',\r\n label: 'Grid Multiple Choice'\r\n }\r\n }\r\n if (option === 'grid_likert_scale') {\r\n return {\r\n value: 'grid_likert_scale',\r\n label: 'Grid Likert Scale'\r\n }\r\n }\r\n return null\r\n })\r\n\r\n // Render a multi-select box\r\n return (\r\n {\r\n\r\n\r\n setFilter(e.target.value || undefined)\r\n\r\n }}\r\n >\r\n \r\n {displayOptions.map((option, i) => (\r\n\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n","import React from 'react'\r\n\r\nexport const ThemeDropDown = ({\r\n column\r\n}) => {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n\r\n const { filterValue, setFilter, preFilteredRows, id } = column\r\n\r\n\r\n //TRIED PASSING ID DIDNT WORK, need something else that filters\r\n\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n\r\n\r\n if (row.original.parent_theme) {\r\n options.add(row.original.parent_theme)\r\n }\r\n if (!row.original.parent_theme && row.original.theme) {\r\n options.add(row.original.theme)\r\n }\r\n\r\n })\r\n return [...options.values()]\r\n }, [preFilteredRows])\r\n\r\n // const cleanOptions = options.map(item => {\r\n // if (item !== null)\r\n // return item\r\n // })\r\n\r\n\r\n // const unique = [...new Set(options.map(item => {\r\n // if (item !== null) {\r\n // return item.theme_name\r\n // }\r\n // }))];\r\n\r\n\r\n\r\n\r\n // Render a multi-select box\r\n return (\r\n\r\n {\r\n\r\n\r\n setFilter(e.target.value || undefined)\r\n }}\r\n >\r\n \r\n {options.map((option, i) => (\r\n\r\n // value={JSON.stringify(option)}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n\r\n// export const ThemeDropDown = ({\r\n// column: { filterValue, setFilter, preFilteredRows, id },\r\n// }) => {\r\n// // Calculate the options for filtering\r\n// // using the preFilteredRows\r\n// const options = React.useMemo(() => {\r\n// const options = new Set()\r\n// preFilteredRows.forEach(row => {\r\n// options.add(row.values[id])\r\n// })\r\n// return [...options.values()]\r\n// }, [id, preFilteredRows])\r\n\r\n// // Render a multi-select box\r\n\r\n// return (\r\n// {\r\n// setFilter(e.target.value || undefined)\r\n// }}\r\n// >\r\n// \r\n// {options.map((option, i) => (\r\n// \r\n// ))}\r\n// \r\n// )\r\n// }\r\n\r\n","import React from 'react'\r\n\r\nexport const SubthemeDropdown = ({\r\n column\r\n}) => {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n\r\n const { filterValue, setFilter, preFilteredRows, id } = column\r\n\r\n\r\n //TRIED PASSING ID DIDNT WORK, need something else that filters\r\n\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n\r\n\r\n // if (row.original.parent_theme) {\r\n // options.add(row.original.parent_theme)\r\n // }\r\n // if (!row.original.parent_theme && row.original.theme) {\r\n // options.add(row.original.theme)\r\n // }\r\n if (row.original.theme) {\r\n options.add(row.original.theme)\r\n }\r\n\r\n })\r\n return [...options.values()]\r\n }, [preFilteredRows])\r\n\r\n\r\n\r\n return (\r\n\r\n {\r\n\r\n\r\n setFilter(e.target.value || undefined)\r\n }}\r\n >\r\n \r\n {options.map((option, i) => (\r\n\r\n // value={JSON.stringify(option)}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n","import React from 'react'\r\n\r\nexport const ReverseDropdown = ({\r\n column\r\n}) => {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n\r\n const { filterValue, setFilter, preFilteredRows, id } = column\r\n\r\n\r\n //TRIED PASSING ID DIDNT WORK, need something else that filters\r\n\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n\r\n\r\n // if (row.original.objective !== null) {\r\n options.add(row.original.objective)\r\n // }\r\n\r\n })\r\n return [...options.values()]\r\n }, [preFilteredRows])\r\n\r\n\r\n\r\n const displayOptions = options.map(option => {\r\n\r\n if (option) {\r\n return {\r\n label: 'Objective',\r\n value: true\r\n }\r\n\r\n }\r\n\r\n // if (option === null) {\r\n // return {\r\n // label: 'Not Specified',\r\n // value: null\r\n // }\r\n // }\r\n\r\n if (!option) {\r\n return {\r\n label: 'Subjective',\r\n value: false\r\n }\r\n }\r\n\r\n\r\n })\r\n\r\n\r\n return (\r\n {\r\n\r\n\r\n\r\n if (e.target.value === 'true') {\r\n setFilter(true || undefined)\r\n }\r\n\r\n if (e.target.value === 'false') {\r\n setFilter(false)\r\n }\r\n\r\n // if (e.target.value === 'null') {\r\n // setFilter(null)\r\n // }\r\n\r\n if (e.target.value === \"\") {\r\n setFilter(e.target.value || undefined)\r\n }\r\n\r\n\r\n }}\r\n >\r\n \r\n {displayOptions.map((option, i) => (\r\n\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n\r\n\r\n\r\n","export default __webpack_public_path__ + \"static/media/trashDisabled.2b6ce1d3.svg\";","export default __webpack_public_path__ + \"static/media/editiconDisabled.8fdece0c.svg\";","import React, { useState, useEffect } from 'react'\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport styled from 'styled-components'\r\nimport { useTable, useFilters, useGlobalFilter, useAsyncDebounce, usePagination, useRowSelect } from 'react-table'\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport './question-table.styles.scss';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\nimport { ColumnFilter } from './column-filter.component';\r\nimport { DropdownFilter } from './q-type-dropdown-filter.component';\r\nimport { ThemeDropDown } from './theme.dropdown.component';\r\nimport { SubthemeDropdown } from './subtheme.dropdown.component';\r\nimport { ReverseDropdown } from './reverse-coded.dropdown.component'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport FormCheck from 'react-bootstrap/FormCheck'\r\n\r\n\r\nimport editIcon from '../../../assets/editicon.svg'\r\nimport trashIcon from '../../../assets/trashicon.svg'\r\nimport editIconDisabled from '../../../assets/editiconDisabled.svg'\r\nimport trashIconDisabled from '../../../assets/trashDisabled.svg'\r\n\r\nconst Styles = styled.div`\r\npadding: 1rem;\r\n\r\noverflow-x: auto;\r\ntable {\r\n width:100%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: var(--color-i);}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n // border-bottom: 1px solid black;\r\n width: 5em\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n}\r\n`\r\n\r\n\r\nconst IndeterminateCheckbox = React.forwardRef(\r\n ({ indeterminate, ...rest }, ref) => {\r\n const defaultRef = React.useRef()\r\n const resolvedRef = ref || defaultRef\r\n\r\n React.useEffect(() => {\r\n resolvedRef.current.indeterminate = indeterminate\r\n }, [resolvedRef, indeterminate])\r\n\r\n return (\r\n <>\r\n {/* */}\r\n \r\n {/* */}\r\n {/* */}\r\n \r\n )\r\n }\r\n)\r\n\r\n//FILTERS\r\n\r\n// Define a default UI for filtering\r\nfunction DefaultColumnFilter({\r\n column: { filterValue, preFilteredRows, setFilter },\r\n}) {\r\n const count = preFilteredRows.length\r\n\r\n return (\r\n {\r\n setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely\r\n }}\r\n placeholder={`Search ${count} records...`}\r\n />\r\n )\r\n}\r\n\r\n// This is a custom filter UI for selecting\r\n// a unique option from a list\r\nfunction SelectColumnFilter({\r\n column: { filterValue, setFilter, preFilteredRows, id },\r\n}) {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n options.add(row.values[id])\r\n })\r\n return [...options.values()]\r\n }, [id, preFilteredRows])\r\n\r\n // Render a multi-select box\r\n return (\r\n {\r\n setFilter(e.target.value || undefined)\r\n }}\r\n >\r\n \r\n {options.map((option, i) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n\r\n\r\n\r\nfunction Table({ columns, data, selectedThemeType, selectedChildTheme, organisationId }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n\r\n\r\n //hidden Columns Logic:\r\n\r\n // const [hiddenColumns, setHiddenColumns] = useState([])\r\n\r\n let hiddenColumns = []\r\n\r\n\r\n\r\n if (selectedThemeType !== 'all') {\r\n if (selectedThemeType === 'allUnassigned') {\r\n hiddenColumns = ['parent_theme', 'theme']\r\n\r\n\r\n }\r\n if (selectedThemeType !== 'allUnassigned') {\r\n hiddenColumns = ['parent_theme']\r\n\r\n }\r\n\r\n if (selectedChildTheme) {\r\n hiddenColumns = ['parent_theme', 'theme']\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n const defaultColumn = React.useMemo(\r\n () => ({\r\n // Let's set up our default Filter UI\r\n Filter: DefaultColumnFilter,\r\n }),\r\n []\r\n )\r\n\r\n\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n page,\r\n prepareRow,\r\n selectedFlatRows,\r\n visibleColumns,\r\n preGlobalFilteredRows,\r\n setGlobalFilter,\r\n\r\n\r\n canPreviousPage,\r\n canNextPage,\r\n pageOptions,\r\n pageCount,\r\n gotoPage,\r\n nextPage,\r\n previousPage,\r\n setPageSize,\r\n state: { pageIndex, pageSize },\r\n } = useTable({\r\n columns,\r\n data,\r\n initialState: {\r\n pageIndex: 0,\r\n hiddenColumns: hiddenColumns,\r\n // hiddenColumns:\r\n\r\n // selectedThemeType !== 'all' ?\r\n\r\n // selectedThemeType === 'allUnassigned' ?\r\n\r\n // ['parent_theme', 'theme']\r\n\r\n // :\r\n\r\n // ['parent_theme']\r\n\r\n // : ''\r\n },\r\n defaultColumn, // Be sure to pass the defaultColumn option\r\n\r\n\r\n }, useFilters, useGlobalFilter, // useGlobalFilter!\r\n usePagination, useRowSelect,\r\n\r\n // hooks => {\r\n // hooks.visibleColumns.push(columns => [\r\n // // Let's make a column for selection\r\n // {\r\n // id: 'selection',\r\n // // The header can use the table's getToggleAllRowsSelectedProps method\r\n // // to render a checkbox\r\n // Header: ({ getToggleAllRowsSelectedProps }) => (\r\n //
\r\n // \r\n //
\r\n // ),\r\n // // The cell can use the individual row's getToggleRowSelectedProps method\r\n // // to the render a checkbox\r\n // Cell: ({ row }) => (\r\n //
\r\n // \r\n //
\r\n // ),\r\n // },\r\n // ...columns,\r\n // ])\r\n // }\r\n\r\n\r\n )\r\n\r\n\r\n // Render the UI for your table\r\n return (\r\n <>\r\n \r\n\r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {rows.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}\r\n
{column.canFilter ? column.render('Filter') : null}
\r\n
{cell.render('Cell')}
\r\n\r\n {/*
\r\n\r\n
\r\n
\r\n
\r\n {' '}\r\n {' '}\r\n {' '}\r\n {' '}\r\n
\r\n
\r\n \r\n Page{' '}\r\n \r\n {pageIndex + 1} of {pageOptions.length}\r\n {' '}\r\n \r\n \r\n | Go to page:{' '} \r\n \r\n {\r\n const page = e.target.value ? Number(e.target.value) - 1 : 0\r\n gotoPage(page)\r\n }}\r\n style={{ width: '100px' }}\r\n />\r\n
\r\n
\r\n {\r\n setPageSize(Number(e.target.value))\r\n }}\r\n >\r\n {[10, 20, 30, 40, 50].map(pageSize => (\r\n \r\n ))}\r\n \r\n
\r\n\r\n
\r\n
*/}\r\n \r\n )\r\n\r\n}\r\n\r\nconst deleteQuestion = async (e, selectedTheme, selectedChildTheme, organisationId, history, dispatch, setisLoading) => {\r\n\r\n const questionId = e.id\r\n\r\n\r\n\r\n try {\r\n\r\n if (selectedTheme?.type !== 'regular') {\r\n\r\n\r\n let response\r\n\r\n setisLoading(true)\r\n\r\n response = await axios.delete(\r\n `/questions/${questionId}?ogs=${organisationId}`).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n console.log('///selectedTheme', selectedTheme)\r\n console.log('///response', response)\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [...selectedTheme?.questions.filter(x => x.id !== response.data?.id)] }\r\n })\r\n\r\n setisLoading(false)\r\n return\r\n }\r\n\r\n\r\n if (selectedTheme?.type === 'regular') {\r\n\r\n\r\n let response\r\n\r\n setisLoading(true)\r\n\r\n let deleteDetails = {\r\n questionOp: 'delete',\r\n ogsID: 1,\r\n questionID: questionId,\r\n ...selectedChildTheme !== null ? { parentThemeID: selectedTheme?.id } : null\r\n }\r\n\r\n\r\n response = await axios.put(\r\n `/themes/questionOp/${selectedChildTheme ? selectedChildTheme?.id : selectedTheme?.id}`, deleteDetails).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n console.log('///selectedTheme', selectedTheme)\r\n console.log('///response', response)\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: [...selectedTheme?.questions.filter(x => x.id !== response.data.latestQuestion?.id)] }\r\n })\r\n\r\n setisLoading(false)\r\n\r\n }\r\n\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n\r\n}\r\n\r\nfunction ThemeQuestionTable({ questions, setEditModal, setChosenQuestions, selectedThemeType, selectedChildTheme, selectedTheme, organisationId }) {\r\n\r\n\r\n\r\n\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n const [question, setQuestion] = useState(null)\r\n\r\n let reformatedQuestion\r\n\r\n if (question)\r\n\r\n reformatedQuestion = questions.filter(x => {\r\n return x.id === question.id\r\n })\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (question !== null) {\r\n const addNewQuestion = () => {\r\n dispatch({\r\n type: 'SELECT_QUESTION',\r\n payload: reformatedQuestion[0]\r\n })\r\n }\r\n\r\n addNewQuestion();\r\n }\r\n\r\n }, [dispatch, question, reformatedQuestion]);\r\n\r\n\r\n // useEffect(() => {\r\n\r\n // // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n // if (selectedFlatRows.length > 0) {\r\n // const addNewQuestion = () => {\r\n // setChosenQuestions(selectedFlatRows)\r\n // }\r\n\r\n // addNewQuestion();\r\n // }\r\n\r\n // }, [dispatch, setChosenQuestions, selectedFlatRows]);\r\n\r\n\r\n\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n\r\n () => [\r\n\r\n\r\n {\r\n\r\n\r\n Header: 'Question',\r\n accessor: 'question_text',\r\n Filter: ColumnFilter,\r\n Cell: ({ cell }) => {\r\n /* Add data-tip */\r\n // return {row.value};\r\n\r\n\r\n\r\n //_______________________ TOOL TIPS ARE COMMENTED OUT ____________________________\r\n\r\n // if (cell.row.original.question_type === 'likert_scale') {\r\n\r\n\r\n // return <>\r\n // \r\n //
\r\n // Min label: {cell.row.original.likert_scale.min_label}\r\n // Min value: {cell.row.original.likert_scale.min_value}\r\n // Max label: {cell.row.original.likert_scale.max_label}\r\n // Max value: {cell.row.original.likert_scale.max_value}\r\n // Reverse Coded: {cell.row.original.reverse_coding_flag ? 'Yes' : 'No'}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n // if (cell.row.original.question_type === 'mcq' || cell.row.original.question_type === 'checkbox' || cell.row.original.question_type === 'dropdown') {\r\n\r\n // const choices = cell.row.original.choices.map(choice => choice.value)\r\n\r\n\r\n // return <>\r\n // \r\n //
\r\n // Choices:\r\n // {choices.join(\", \")}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n // if (cell.row.original.question_type === 'short_answer' || cell.row.original.question_type === 'paragraph') {\r\n\r\n // return {cell.row.original.question_text}\r\n // }\r\n\r\n\r\n // if (cell.row.original.question_type === 'grid_mcq') {\r\n\r\n\r\n\r\n // const rows = cell.row.original.grid_choices.filter(i => i.axis === 'row').map(value => {\r\n // if (value.axis === 'row') {\r\n // return value.value\r\n // }\r\n\r\n // return null\r\n\r\n // })\r\n\r\n\r\n // const columns = cell.row.original.grid_choices.filter(i => i.axis === 'col').map(value => {\r\n // if (value.axis === 'col') {\r\n // return value.value\r\n // }\r\n\r\n // return null\r\n\r\n // })\r\n\r\n\r\n // return <>\r\n // \r\n //
\r\n // Rows: {rows.join(\", \")}\r\n // Columns: {columns.join(\", \")}\r\n // Reverse Coded: {cell.row.original.reverse_coding_flag ? 'Yes' : 'No'}\r\n\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n\r\n return {cell.row.original.question_text}\r\n\r\n }\r\n\r\n },\r\n {\r\n Header: 'Theme',\r\n // defaultCanFilter: true,\r\n // disableFilters: true,\r\n Filter: ThemeDropDown,\r\n accessor: 'parent_theme',\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n //ORIGINAL\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme.theme_name\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n\r\n //JuST FLATTENED\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n\r\n //FLATTENED & ALWAYS parent\r\n\r\n\r\n if (cell.row.original?.parent_theme) {\r\n return cell.row.original?.parent_theme\r\n }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Subtheme',\r\n Filter: SubthemeDropdown,\r\n // disableFilters: true,\r\n\r\n accessor: 'theme',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n return cell.row.original.theme\r\n }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Perspective',\r\n accessor: 'objective',\r\n Filter: ReverseDropdown,\r\n filter: 'equals',\r\n // disableFilters: true,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n if (cell.row.original.objective) {\r\n return 'Objective'\r\n }\r\n\r\n // if (cell.row.original.objective === false) {\r\n // return 'Subjective'\r\n // }\r\n\r\n return 'Subjective'\r\n\r\n // if (cell.row.original.objective === null) {\r\n // return ' '\r\n // }\r\n\r\n\r\n }\r\n },\r\n\r\n\r\n {\r\n Header: 'Question Type',\r\n accessor: 'question_type', //NEED to change to CELL so that switches likert_scale to Liker Scale returns jsx\r\n // defaultCanFilter: true,\r\n Filter: DropdownFilter,\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n if (cell.row.original.question_type === 'likert_scale') {\r\n return 'Likert scale'\r\n }\r\n\r\n if (cell.row.original.question_type === 'mcq') {\r\n return 'Multiple Choice'\r\n }\r\n\r\n if (cell.row.original.question_type === 'checkbox') {\r\n return 'Checkbox'\r\n }\r\n\r\n if (cell.row.original.question_type === 'dropdown') {\r\n return 'Dropdown'\r\n }\r\n if (cell.row.original.question_type === 'paragraph') {\r\n return 'Paragraph'\r\n }\r\n if (cell.row.original.question_type === 'short_answer') {\r\n return 'Short Answer'\r\n }\r\n\r\n if (cell.row.original.question_type === 'grid_mcq') {\r\n return 'Grid Multiple Choice'\r\n }\r\n\r\n if (cell.row.original.question_type === 'grid_likert_scale') {\r\n return 'Grid Likert scale'\r\n }\r\n\r\n return null //to be replaced by other question type conditionals and null wont happen\r\n\r\n }\r\n },\r\n\r\n\r\n {\r\n Header: ' ',\r\n // defaultCanFilter: true,\r\n Filter: false,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n return (
\r\n{/* \r\n {cell.row.original.locked ?\r\n\r\n\r\n \r\n
\r\n This action is disabled, question belongs to a live survey.\r\n
\r\n \r\n }\r\n >\r\n edit_button_disabled\r\n \r\n\r\n : */}\r\n\r\n edit_button {\r\n setQuestion(cell.row.original)\r\n setEditModal(true)\r\n }} />\r\n {/* } */}\r\n
)\r\n }\r\n },\r\n {\r\n Header: ' ',\r\n // defaultCanFilter: true,\r\n Filter: false,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n return (
\r\n\r\n {cell.row.original.locked ?\r\n\r\n\r\n \r\n
\r\n This action is disabled, question belongs to a live survey.\r\n
\r\n \r\n }\r\n >\r\n edit_button_disabled\r\n \r\n\r\n :\r\n\r\n trash_button {\r\n\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteQuestion(cell.row.original, selectedTheme, selectedChildTheme, organisationId, history, dispatch, setisLoading)\r\n }} />}\r\n
)\r\n\r\n\r\n }\r\n }\r\n\r\n ],\r\n [setEditModal, selectedTheme, selectedChildTheme]\r\n )\r\n ;\r\n\r\n // const data = React.useMemo(() => makeData(150), [])\r\n\r\n\r\n\r\n\r\n // const formatedQuestions = questions.map(x => {\r\n\r\n // if (x.theme && x.parent_theme) {\r\n // return { ...x, parent_theme: x.parent_theme.theme_name, theme: x.theme.theme_name }\r\n // }\r\n // if (x.theme && !x.parent_theme) {\r\n // return { ...x, parent_theme: x.theme.theme_name, theme: null }\r\n // }\r\n // return x\r\n\r\n // })\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n\r\n isLoading ? (\r\n
\r\n \r\n
\r\n Deleting Question...\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n )\r\n )\r\n}\r\n\r\nexport default ThemeQuestionTable\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport axios, { cancelToken } from \"../../../misc/modifiedAxios\";\r\n// import Axios from \"axios\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport './theme-questions-display.component.scss';\r\n\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Spinner from 'react-bootstrap/spinner';\r\nimport \"../../../_vars.scss\";\r\nimport addIcon from '../../../assets/addcirclebutton.svg'\r\n\r\n// import UserItem from '../UserItem/useritem.component';\r\nimport EditThemeModal from '../../Theme-Components/EditThemeModal/edit-theme-modal-component';\r\nimport EditSubtheme from '../../Theme-Components/EditSubthemeModal/edit-subtheme-modal-component'\r\nimport ThemeQuestionTable from '../ThemeQuestionTable/theme-question-table.component';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport CreateQuestionModal from '../../Question-Components/CreateQuestionModal/create-question-modal.component'\r\nimport EditQuestionModal from '../../Question-Components/EditQuestionModal/edit-question-modal.component';\r\n\r\nconst ThemeQuestionsDisplay = () => {\r\n\r\n const CancelToken = useRef(cancelToken)\r\n const cancel = useRef(undefined)\r\n\r\n const history = useHistory()\r\n const dispatch = useDispatch()\r\n\r\n const [showCreateModal, setCreateShowModal] = useState(false);\r\n const [showEditModal, setEditModal] = useState(false);\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n const selectedTheme = useSelector((state) => state.theme.selectedTheme);\r\n\r\n\r\n const [selectedThemeId, setSelectedThemeId] = useState(null);\r\n const [selectedThemeType, setSelectedThemeType] = useState(null);\r\n\r\n\r\n\r\n const selectedChildTheme = useSelector((state) => state.theme.selectedChildTheme);\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n const questionDetails = useSelector((state) => state.theme.selectedTheme?.questions);\r\n\r\n\r\n useEffect(() => {\r\n\r\n setSelectedThemeType(selectedTheme?.type)\r\n\r\n if (selectedTheme && selectedThemeType === 'regular') {\r\n setSelectedThemeId(selectedTheme.id)\r\n }\r\n\r\n if (selectedTheme && selectedThemeType === 'all') {\r\n setSelectedThemeId('all')\r\n }\r\n\r\n if (selectedTheme && selectedThemeType === 'allUnassigned') {\r\n setSelectedThemeId('allUnassigned')\r\n }\r\n\r\n\r\n }, [selectedTheme, selectedThemeType])\r\n\r\n useEffect(() => {\r\n\r\n const getSelectedTheme = async () => {\r\n try {\r\n\r\n if (selectedThemeId) {\r\n\r\n if (cancel.current !== undefined) {//uses .current property as this is how you manipulate the object in useRef\r\n cancel.current(); // same as running cancel() because once it is defined it is assigned a function with new CancelToken (also has .current)\r\n\r\n }\r\n setisLoading(true)\r\n\r\n const response = await axios.get(selectedThemeId === 'all' ?\r\n `/questions?ogs=${organisationId}&theme=` : selectedThemeId === 'allUnassigned' ? `/questions?ogs=${organisationId}&theme=-1` : `/themes/${selectedThemeId}`,\r\n {\r\n cancelToken: new CancelToken.current(c => {\r\n cancel.current = c; // c is the identifier of the request, ON THE FIRST request it DEFINES the cancel variable, meaning\r\n }),\r\n }\r\n ).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n }\r\n );\r\n\r\n\r\n\r\n if ((response && selectedThemeId === 'all')) {\r\n\r\n\r\n // setQuestionDetails(response?.data)\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: response?.data }\r\n })\r\n }\r\n\r\n if ((response && selectedThemeId === 'allUnassigned')) {\r\n // setQuestionDetails(response?.data)\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: { ...selectedTheme, questions: response?.data }\r\n })\r\n }\r\n\r\n if (response && selectedThemeId && selectedThemeId !== 'all' && selectedThemeId !== 'allUnassigned') {\r\n\r\n\r\n\r\n let allSpecificThemesQuestions = response?.data?.child_themes.map(x => {\r\n return x.questions\r\n }).flat(1)\r\n\r\n // setQuestionDetails(allSpecificThemesQuestions)\r\n\r\n console.log('WHAT IS HERE', response.data)\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n // NOTE [REVIEW], this creates a duplicate because child themes still got their questions, could leave selectedTheme instead,\r\n // the one with metadata, from initial themes\r\n payload: { ...response.data, type: 'regular', questions: [...response.data.questions, ...allSpecificThemesQuestions] }\r\n\r\n })\r\n }\r\n\r\n }\r\n\r\n\r\n setisLoading(false)\r\n\r\n } catch (err) {\r\n console.log(err)\r\n\r\n }\r\n };\r\n\r\n getSelectedTheme();\r\n }, [history, selectedThemeId, selectedChildTheme]); //May need to take out selectedChildTheme, included because of \r\n\r\n let theme_name\r\n let theme_desc\r\n let created_at\r\n if (selectedTheme) {\r\n\r\n theme_name = selectedTheme.theme_name\r\n theme_desc = selectedTheme.theme_desc\r\n created_at = selectedTheme.created_at\r\n }\r\n\r\n\r\n let child_theme_name = ''\r\n\r\n\r\n\r\n if (selectedChildTheme) {\r\n\r\n child_theme_name = selectedChildTheme.theme_name\r\n\r\n }\r\n\r\n\r\n useEffect(() => {\r\n\r\n // dispatch({\r\n // type: 'SELECT_THEME',\r\n // payload: null\r\n // })\r\n\r\n dispatch({\r\n type: 'SELECT_THEME',\r\n payload: {\r\n id: -2,\r\n theme_desc: \"\",\r\n theme_name: \"All Questions\",\r\n type: 'all'\r\n },\r\n })\r\n dispatch({\r\n type: 'SELECT_CHILD_THEME',\r\n payload: null\r\n })\r\n\r\n\r\n }, [dispatch, organisationId]);\r\n\r\n\r\n\r\n\r\n return (\r\n\r\n\r\n
\r\n

\r\n {child_theme_name ? `${child_theme_name} in ${theme_name}` : theme_name}\r\n\r\n

\r\n {!selectedTheme ?
No Theme Selected
\r\n\r\n :\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n add_button {\r\n setCreateShowModal(true);\r\n }} />\r\n Create New Question\r\n
\r\n\r\n
\r\n\r\n\r\n {/* TABLE AND CONDITIONAL MESSAGE/SPINNERS */}\r\n {!isLoading ? (\r\n\r\n (!questionDetails ?
Theme has no Questions
:\r\n\r\n x.theme === selectedChildTheme.theme_name)\r\n :\r\n questionDetails\r\n\r\n }\r\n selectedThemeType={selectedThemeType}\r\n selectedChildTheme={selectedChildTheme}\r\n setEditModal={setEditModal}\r\n selectedTheme={selectedTheme}\r\n organisationId={organisationId}\r\n />))\r\n :\r\n (
\r\n Refreshing Questions...
)\r\n }\r\n\r\n
\r\n }\r\n \r\n {showEditModal ? : null}\r\n
\r\n );\r\n};\r\n\r\nexport default ThemeQuestionsDisplay;\r\n\r\n\r\n\r\n\r\n","import React, { useEffect } from 'react';\r\nimport axios from \"../../misc/modifiedAxios\";\r\n\r\nimport { useState } from 'react';\r\nimport '../QM/qm.styles.scss'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport SideNavBar from '../../components/Shared/SideNavBar/sidenavbar.component';\r\nimport ThemeSelection from '../../components/QM-Components/ThemeSelection/theme-selection.component';\r\nimport ThemeQuestionsDisplay from '../../components/QM-Components/ThemeQuestionsDisplay/theme-questions-display.component';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\nconst QM = () => {\r\n\r\n const [themes, setThemes] = useState([])\r\n\r\n\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const dispatch = useDispatch()\r\n\r\n const history = useHistory();\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n useEffect(() => {\r\n\r\n const jwt = localStorage.getItem('jwt')\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (!jwt) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push(\"/\")\r\n }\r\n\r\n\r\n }, []);\r\n\r\n\r\n useEffect(() => {\r\n const getThemes = async () => {\r\n try {\r\n\r\n setIsLoading(true)\r\n const response = await axios.get(\r\n `/themes?ogs=${organisationId}`,\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n }\r\n // \r\n )\r\n\r\n\r\n ;\r\n if (response.data) {\r\n setThemes(response.data)\r\n setIsLoading(false)\r\n }\r\n\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n };\r\n\r\n\r\n getThemes();\r\n }, [history, organisationId]);\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n // if (cohorts.length > 0) {\r\n\r\n\r\n\r\n const setTHemesFromRequest = () => {\r\n dispatch({\r\n type: 'SET_THEMES',\r\n payload: themes\r\n })\r\n }\r\n\r\n setTHemesFromRequest();\r\n // }\r\n\r\n setIsLoading(false)\r\n\r\n }, [themes, dispatch]);\r\n\r\n\r\n\r\n\r\n return (\r\n
\r\n <>\r\n \r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Loading Question Manager...\r\n
\r\n
\r\n ) : (\r\n <>\r\n \r\n \r\n )}\r\n \r\n\r\n
\r\n );\r\n};\r\n\r\nexport default QM;","export default __webpack_public_path__ + \"static/media/dndicon.61d402c9.svg\";","import React, { useState, useEffect } from 'react';\r\n// import Axios from 'axios';\r\nimport { Modal, Button, FormCheck } from 'react-bootstrap';\r\nimport Toggle from 'react-toggle'\r\n\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport Tabs from 'react-bootstrap/Tabs';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\nimport DatePicker from \"react-datepicker\";\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport \"../../Question-Components/CreateQuestionModal/create-question.styles.scss\";\r\nimport LikertScaleQuestion from '../../Question-Components/CreateQuestionModal/likert-question/likert-question.component';\r\nimport ChoiceQuestion from '../../Question-Components/CreateQuestionModal/choice-question/choice-questions.component'\r\nimport GridChoiceQuestion from '../../Question-Components/CreateQuestionModal/grid-question/grid-questions.component'\r\nimport GridLikertQuestion from '../../Question-Components/CreateQuestionModal/grid-likert-question/grid-likert-questions.component';\r\nimport ConfirmPopUp from '../../../misc/ConfirmPopUp';\r\n\r\nconst CreateSurveyQuestionModal = ({ showModal, setShowModal, setMasterData, masterData, setFirstInitiation }) => {\r\n const [key, setKey] = useState('type'); //Tab initial view\r\n\r\n const history = useHistory()\r\n\r\n const themes = useSelector((state) => state.theme.themes);\r\n\r\n\r\n const filteredThemes = themes.filter(x => x.type === 'regular')\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n\r\n const [selectedTheme, setSelectedTheme] = useState(null)\r\n\r\n const [selectedSubthemeId, setSelectedSubthemeId] = useState(null) //initialSelectedSubtheme?.id\r\n\r\n const dispatch = useDispatch()\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n\r\n const options = ['Likert scale', 'Multiple Choice', 'Checkbox', 'Dropdown', 'Paragraph', 'Short Answer', 'Grid Multiple Choice', 'Grid Likert scale']\r\n\r\n\r\n\r\n const [questionText, setQuestionText] = useState('')\r\n const [questionType, setQuestionType] = useState('')\r\n\r\n // const [addAnother, setAddAnother] = useState(false) //Add Another Question flag\r\n\r\n\r\n const [confirmCreated, setConfirmCreated] = useState(false)//Add Another Question Confirmation popup\r\n\r\n\r\n //_________LIKERT SCALE_________________\r\n const [minValue, setMinValue] = useState(1)\r\n const [maxValue, setMaxValue] = useState(7)\r\n const [reverse, setReverse] = useState(false)\r\n const [notApplicable, setNotApplicable] = useState(false)\r\n const [implicit, setImplicit] = useState(false)\r\n const [startDate, setStartDate] = useState(new Date());\r\n const [endDate, setEndDate] = useState(new Date());\r\n const [startLabel, setStartLabel] = useState('Strongly Disagree')\r\n const [endLabel, setEndLabel] = useState('Strongly Agree')\r\n\r\n\r\n //_________CHOICE__________________________\r\n\r\n const [formValues, setFormValues] = useState([{ value: \"\" }])\r\n\r\n\r\n const values = formValues.map(value => ({ ...value, order: formValues.indexOf(value) }))\r\n\r\n\r\n //________GRID_________________________\r\n\r\n const [rowValues, setRowValues] = useState([{ row_value: \"\" }])\r\n const [columnValues, setColumnValues] = useState([{ column_value: \"\" }])\r\n\r\n\r\n const rows = rowValues.map(row => ({ ...row, order: rowValues.indexOf(row) }))\r\n const columns = columnValues.map(column => ({ ...column, order: columnValues.indexOf(column) }))\r\n\r\n const merged = [...rows, ...columns]\r\n\r\n const gridValues = merged.map(value => {\r\n\r\n if ('row_value' in value) {\r\n return { axis: 'row', value: value.row_value, order: value.order }\r\n }\r\n\r\n if ('column_value' in value) {\r\n return { axis: 'col', value: value.column_value, order: value.order }\r\n }\r\n\r\n return null\r\n }\r\n )\r\n\r\n\r\n const submitQuestionCreate = async (addAnotherFlag) => {\r\n // e.preventDefault();\r\n setisLoading(true)\r\n\r\n let themeId\r\n\r\n if (selectedTheme?.type === \"allUnassigned\" || selectedTheme?.type === \"all\" || !selectedTheme) {\r\n themeId = null\r\n }\r\n\r\n if (selectedTheme && selectedTheme.type === 'regular' && !selectedSubthemeId) {\r\n themeId = selectedTheme.id\r\n\r\n }\r\n if (selectedTheme && selectedTheme.type === 'regular' && selectedSubthemeId) {\r\n themeId = parseInt(selectedSubthemeId)\r\n }\r\n\r\n let newQuestion\r\n\r\n try {\r\n if (questionType === 'likert_scale') {\r\n\r\n //________________LIEKRT SCALE________________\r\n newQuestion =\r\n\r\n {\r\n data: {\r\n question_text: questionText,\r\n reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n likert_scale:\r\n {\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel,\r\n na_flag: notApplicable,\r\n },\r\n choices: [],\r\n grid_choices: [],\r\n ogs: organisationId,\r\n }\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n if (questionType === 'paragraph' || questionType === 'short_answer') {\r\n\r\n\r\n //________________PARAGRAPH________________\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n // reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n choices: [],\r\n grid_choices: [],\r\n likert_scale: null,\r\n ogs: organisationId,\r\n\r\n }\r\n }\r\n\r\n }\r\n //________________________________________________\r\n\r\n //________________CHOICE _______________\r\n if (questionType === 'mcq' || questionType === 'checkbox' || questionType === 'dropdown') {\r\n\r\n\r\n\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n // reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n\r\n choices: values,\r\n grid_choices: [],\r\n likert_scale: null,\r\n ogs: organisationId,\r\n }\r\n }\r\n\r\n }\r\n\r\n if (questionType === 'grid_mcq') {\r\n\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n\r\n grid_choices: gridValues,\r\n likert_scale: null,\r\n choices: [],\r\n ogs: organisationId,\r\n\r\n }\r\n }\r\n }\r\n if (questionType === 'grid_likert_scale') {\r\n\r\n newQuestion =\r\n {\r\n data: {\r\n question_text: questionText,\r\n reverse_coded_flag: reverse,\r\n objective: implicit,\r\n start_date: startDate.toISOString().slice(0, 10),\r\n end_date: endDate.toISOString().slice(0, 10),\r\n question_type: questionType,\r\n theme: themeId,\r\n\r\n\r\n grid_likert_scale: {\r\n\r\n row_choices: gridValues.filter(function (obj) {\r\n return obj.axis !== 'col';\r\n }),//gridValues,\r\n likert_scale:\r\n {\r\n min_value: minValue,\r\n max_value: maxValue,\r\n min_label: startLabel,\r\n max_label: endLabel\r\n },\r\n },\r\n grid_choices: [],\r\n likert_scale: null,\r\n choices: [],\r\n ogs: organisationId,\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n // //________________________________________________\r\n\r\n\r\n let response\r\n\r\n\r\n // if (!themeId) {\r\n\r\n\r\n if (questionText && questionType) {\r\n\r\n response = await axios.post(\r\n `/questions`,\r\n newQuestion\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n\r\n }\r\n\r\n )\r\n\r\n // could add flag variable firstInitiion here that if false, dont set state again\r\n setFirstInitiation(false)\r\n dispatch({\r\n type: 'ADD_NEW_QUESTION',\r\n payload: response.data\r\n })\r\n\r\n\r\n\r\n }\r\n\r\n\r\n setQuestionType('')\r\n setQuestionText('')\r\n setFormValues([{ value: \"\" }])\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setImplicit(false)\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n\r\n // setSelectedTheme(initialSelectedTheme)\r\n // setSelectedSubthemeId(intialSelectedChildTheme?.id)\r\n\r\n setSelectedTheme('')\r\n setSelectedSubthemeId('')\r\n\r\n\r\n setisLoading(false)\r\n\r\n if (!addAnotherFlag) {\r\n setConfirmCreated(false)\r\n setShowModal(false);\r\n\r\n return\r\n }\r\n\r\n setConfirmCreated(true)\r\n\r\n } catch (err) {\r\n console.log(err)\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n\r\n\r\n\r\n const toggleImplicit = (e) => {\r\n setImplicit(prevImplicit => !prevImplicit)\r\n\r\n }\r\n\r\n // Retrieve themes to populate in the dropdown\r\n useEffect(() => {\r\n let controller = new AbortController();\r\n let controllerTheme = new AbortController();\r\n (async () => {\r\n try {\r\n\r\n // setIsLoading(true)\r\n // \r\n\r\n //GET AND SET THEMES\r\n\r\n const responseThemes = await axios.get(\r\n `/themes?ogs=${organisationId}`,\r\n {\r\n signal: controllerTheme.signal\r\n }\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n\r\n controllerTheme = null;\r\n\r\n dispatch({\r\n type: 'SET_THEMES',\r\n payload: responseThemes.data\r\n })\r\n\r\n // setIsLoading(false)\r\n } catch (err) {\r\n console.log(err)\r\n // setIsLoading(false)\r\n }\r\n })();\r\n\r\n return () => controller?.abort();\r\n }, [dispatch, organisationId]);\r\n\r\n\r\n // useEffect(() => {\r\n // if (addAnother) {\r\n // submitQuestionCreate();\r\n // }\r\n\r\n // }, [addAnother]);\r\n\r\n return (\r\n {\r\n setShowModal(false);\r\n setQuestionType('')\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setImplicit(false)\r\n setFormValues([{ value: \"\" }])\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n // if (initialSelectedTheme?.id === -1) {\r\n setSelectedTheme('')\r\n setSelectedSubthemeId('')\r\n // } else {\r\n // setSelectedTheme(initialSelectedTheme)\r\n // setSelectedSubthemeId(intialSelectedChildTheme)\r\n // }\r\n setKey('type')\r\n // setAddAnother(false)\r\n setConfirmCreated(false)\r\n }}>\r\n \r\n Create Question\r\n \r\n
\r\n \r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Creating Question...\r\n
\r\n
\r\n ) : (\r\n\r\n <>\r\n \r\n \r\n \r\n
\r\n Question Text:\r\n {questionType === 'short_answer' ? (Short Answer is limited to 250 characters) : (null)}\r\n
\r\n \r\n
\r\n \r\n \r\n {\r\n\r\n // if (e.target.value.trim() !== '') {\r\n setQuestionText(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n setKey(k)}\r\n className=\"mb-3 tabs-menu\">\r\n\r\n \r\n \r\n \r\n \r\n Type:\r\n \r\n \r\n \r\n \r\n {\r\n if (e.target.value === 'Likert scale')\r\n setQuestionType('likert_scale')\r\n if (e.target.value === 'Multiple Choice')\r\n setQuestionType('mcq')\r\n if (e.target.value === 'Checkbox')\r\n setQuestionType('checkbox')\r\n if (e.target.value === 'Dropdown')\r\n setQuestionType('dropdown')\r\n if (e.target.value === 'Paragraph')\r\n setQuestionType('paragraph')\r\n if (e.target.value === 'Short Answer')\r\n setQuestionType('short_answer')\r\n if (e.target.value === 'Grid Multiple Choice') {\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setQuestionType('grid_mcq')\r\n }\r\n\r\n if (e.target.value === 'Grid Likert scale') {\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setQuestionType('grid_likert_scale')\r\n }\r\n\r\n if (e.target.value === '')\r\n setQuestionType('')\r\n }}\r\n // selected=''\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n \r\n {options.map((option) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n {questionType === 'likert_scale' ? (\r\n \r\n ) : (null)}\r\n\r\n\r\n {questionType === 'mcq' || questionType === 'checkbox' || questionType === 'dropdown' ?\r\n () : (null)}\r\n\r\n {questionType === 'grid_mcq' ? () : (null)}\r\n\r\n {questionType === 'grid_likert_scale' ? () : (null)}\r\n\r\n\r\n\r\n \r\n \r\n \r\n Perspective:\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Themes:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n if (e.target.value === '') {\r\n\r\n setSelectedTheme('')\r\n setSelectedSubthemeId('')\r\n } else {\r\n let theme = themes.filter((theme) => theme.id === parseInt(e.target.value))\r\n\r\n setSelectedTheme(theme[0])\r\n setSelectedSubthemeId('')\r\n }\r\n\r\n\r\n }}\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n \r\n {filteredThemes.map((option) => {\r\n return (\r\n // selected={initialSelectedTheme?.theme_name === option.theme_name ? true : false}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n\r\n {selectedTheme && selectedTheme?.id !== -2 && selectedTheme?.id !== -1 ? \r\n \r\n \r\n Subthemes:\r\n \r\n \r\n \r\n \r\n\r\n\r\n {selectedTheme?.child_themes?.length > 0 ?\r\n\r\n {\r\n\r\n setSelectedSubthemeId(e.target.value)\r\n }}\r\n selected=''\r\n style={{\r\n marginBottom: '10px',\r\n marginTop: '10px',\r\n width: '30%',\r\n }}>\r\n \r\n\r\n {selectedTheme.child_themes?.map((option) => {\r\n return (\r\n // selected={intialSelectedChildTheme?.theme_name === option.theme_name ? true : false}\r\n \r\n );\r\n })}\r\n :
This Theme does not have Subthemes
}\r\n \r\n
\r\n : null}\r\n
\r\n\r\n\r\n\r\n \r\n )}\r\n
\r\n \r\n {\r\n\r\n setStartLabel('Strongly Disagree')\r\n setEndLabel('Strongly Agree')\r\n setQuestionType('')\r\n setFormValues([{ value: \"\" }])\r\n setColumnValues([{ column_value: \"\" }])\r\n setRowValues([{ row_value: \"\" }])\r\n setReverse(false)\r\n setNotApplicable(false)\r\n setImplicit(false)\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n // if (initialSelectedTheme?.id === -1) {\r\n setSelectedTheme('')\r\n setSelectedSubthemeId('')\r\n // } else {\r\n // setSelectedTheme(initialSelectedTheme)\r\n // setSelectedSubthemeId(intialSelectedChildTheme)\r\n // }\r\n // setAddAnother(false)\r\n setConfirmCreated(false)\r\n setKey('type')\r\n setShowModal(false);\r\n // setShortAnswer(false)\r\n }}>\r\n Cancel\r\n \r\n\r\n {\r\n setKey('type')\r\n // setAddAnother(false)\r\n setConfirmCreated(false)\r\n setShowModal(false)\r\n submitQuestionCreate(false)\r\n }}\r\n disabled={questionText && questionType ? false : true}\r\n // type='submit'\r\n className='card-button'\r\n\r\n variant='no-variant-p'>\r\n Create\r\n\r\n \r\n\r\n {\r\n // setAddAnother(true)\r\n submitQuestionCreate(true)\r\n\r\n }}\r\n // type='submit'\r\n >\r\n Create & Add Another\r\n \r\n \r\n
\r\n {confirmCreated ? \r\n : null}\r\n \r\n );\r\n};\r\n\r\nexport default CreateSurveyQuestionModal;\r\n","import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport styled from 'styled-components'\r\nimport { useTable, useFilters, useGlobalFilter, useAsyncDebounce, usePagination, useRowSelect, useMountedLayoutEffect } from 'react-table'\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport '../../../Question-Components/QuestionTable/question-table.styles.scss';\r\nimport { ColumnFilter } from '../../../QM-Components/ThemeQuestionTable/column-filter.component';\r\nimport { DropdownFilter } from '../../../QM-Components/ThemeQuestionTable/q-type-dropdown-filter.component';\r\nimport { ThemeDropDown } from '../../../QM-Components/ThemeQuestionTable/theme.dropdown.component';\r\nimport { SubthemeDropdown } from '../../../QM-Components/ThemeQuestionTable/subtheme.dropdown.component';\r\nimport { ReverseDropdown } from '../../../QM-Components/ThemeQuestionTable/reverse-coded.dropdown.component';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faEdit } from '@fortawesome/free-solid-svg-icons';\r\n\r\nconst Styles = styled.div`\r\npadding: 1rem;\r\n\r\noverflow-x: auto;\r\ntable {\r\n width:100%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n width: 5em\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n}\r\n`\r\nconst IndeterminateCheckbox = React.forwardRef(\r\n ({ indeterminate, ...rest }, ref) => {\r\n const defaultRef = React.useRef()\r\n const resolvedRef = ref || defaultRef\r\n\r\n React.useEffect(() => {\r\n resolvedRef.current.indeterminate = indeterminate\r\n }, [resolvedRef, indeterminate])\r\n\r\n return (\r\n <>\r\n \r\n \r\n )\r\n }\r\n)\r\n\r\n//FILTERS\r\n\r\n// Define a default UI for filtering\r\nfunction DefaultColumnFilter({\r\n column: { filterValue, preFilteredRows, setFilter },\r\n}) {\r\n const count = preFilteredRows.length\r\n\r\n return (\r\n {\r\n setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely\r\n }}\r\n placeholder={`Search ${count} records...`}\r\n />\r\n )\r\n}\r\n\r\n// This is a custom filter UI for selecting\r\n// a unique option from a list\r\nfunction SelectColumnFilter({\r\n column: { filterValue, setFilter, preFilteredRows, id },\r\n}) {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n options.add(row.values[id])\r\n })\r\n return [...options.values()]\r\n }, [id, preFilteredRows])\r\n\r\n // Render a multi-select box\r\n return (\r\n {\r\n setFilter(e.target.value || undefined)\r\n }}\r\n >\r\n \r\n {options.map((option, i) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n\r\n// const INITIAL_SELECTED_ROW_IDS = {};\r\n\r\nfunction Table({ columns, data, masterData, setMasterData, sectionId }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n\r\n const [tableData, setTableData] = React.useState([])\r\n\r\n const defaultColumn = React.useMemo(\r\n () => ({\r\n // Let's set up our default Filter UI\r\n Filter: DefaultColumnFilter,\r\n }),\r\n []\r\n )\r\n\r\n // const INITIAL_SELECTED_ROW_IDS = {};\r\n\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n page,\r\n prepareRow,\r\n selectedFlatRows,\r\n canPreviousPage,\r\n canNextPage,\r\n pageOptions,\r\n pageCount,\r\n gotoPage,\r\n nextPage,\r\n previousPage,\r\n setPageSize,\r\n setAllFilters,\r\n toggleRowSelected,\r\n state: { pageIndex, pageSize, selectedRowIds },\r\n } = useTable({\r\n columns,\r\n data: tableData,\r\n\r\n // initialState: {\r\n // pageIndex: 0,\r\n // selectedRowIds: selectedRows,\r\n // // selectedRowIds: INITIAL_SELECTED_ROW_IDS\r\n // },\r\n // autoResetPage: false,\r\n // autoResetFilters: false,\r\n // autoResetHiddenColumns: false,\r\n\r\n defaultColumn, // Be sure to pass the defaultColumn option\r\n\r\n\r\n }, useFilters, useGlobalFilter, // useGlobalFilter!\r\n usePagination, useRowSelect,\r\n\r\n\r\n\r\n hooks => {\r\n hooks.visibleColumns.push(columns => [\r\n // Let's make a column for selection\r\n {\r\n id: 'selection',\r\n // The header can use the table's getToggleAllRowsSelectedProps method\r\n // to render a checkbox\r\n Header: ({ getToggleAllRowsSelectedProps }) => (\r\n
\r\n \r\n
\r\n ),\r\n // The cell can use the individual row's getToggleRowSelectedProps method\r\n // to the render a checkbox\r\n Cell: ({ row }) => (\r\n
\r\n \r\n
\r\n ),\r\n },\r\n ...columns,\r\n ])\r\n }\r\n\r\n\r\n )\r\n\r\n React.useEffect(() => {\r\n // RG: from masterData, figure out all the available questions + this section's chosenQuestions\r\n\r\n let section = masterData.sections.filter(section => section.sectionId == sectionId)[0]\r\n\r\n let allChosenQuestionsInAllSections = []\r\n for (let i = 0; i < masterData.sections.length; i++) {\r\n allChosenQuestionsInAllSections = [...allChosenQuestionsInAllSections, ...masterData.sections[i].chosenQuestions]\r\n }\r\n\r\n // console.log(\"allChosenQuestionsInAllSections\", allChosenQuestionsInAllSections)\r\n\r\n // RG: Need to compare question ids and not questions.\r\n let allChosenQuestionIdsInAllSections = allChosenQuestionsInAllSections.map((question) => question.id)\r\n\r\n let allRemainingQuestions = masterData.allAvailableQuestions.filter((question) => {\r\n return !allChosenQuestionIdsInAllSections.includes(question.id)\r\n })\r\n\r\n // console.log(\"allRemainingQuestions\", allRemainingQuestions)\r\n\r\n let tableData = [...section.chosenQuestions, ...allRemainingQuestions]\r\n // console.log(\"tableData\", tableData)\r\n\r\n setTableData(tableData)\r\n\r\n }, [masterData])\r\n\r\n\r\n useMountedLayoutEffect(() => {\r\n // RG: Go through all the rows in the table and select the rows with the same question.id in section.chosenQuestions\r\n let section = masterData.sections.filter(section => section.sectionId == sectionId)[0]\r\n let chosenQuestionIds = section.chosenQuestions.map(question => question.id)\r\n\r\n rows.forEach((row) => {\r\n if (chosenQuestionIds.includes(row.original.id)) {\r\n toggleRowSelected(row.id, true)\r\n }\r\n })\r\n\r\n }, [rows]);\r\n\r\n\r\n function saveSelection(e) {\r\n e.preventDefault();\r\n // RG: get the selected questions from the selected rows. initially, it should be an empty list if no rows are selected.\r\n let chosenQuestions = selectedFlatRows.map(row => row.original)\r\n let chosenQuestionIds = selectedFlatRows.map(row => row.original.id)\r\n\r\n\r\n // RG: find the section in masterData corresponding to the sectionId and add the chosenQuestions to that section\r\n masterData.sections.map((section) => {\r\n if (section.sectionId == sectionId) {\r\n section.chosenQuestions = chosenQuestions\r\n }\r\n })\r\n\r\n setMasterData({\r\n allAvailableQuestions: data,\r\n sections: masterData.sections\r\n })\r\n\r\n }\r\n\r\n\r\n // React.useEffect(() => {\r\n // // from masterData, figure out all the available questions + this section's chosenQuestions\r\n // let section = masterData.sections.filter(section => section.sectionId == sectionId)[0]\r\n\r\n // let allChosenQuestionsInAllSections = []\r\n // for (let i = 0; i < masterData.sections.length; i++) {\r\n // allChosenQuestionsInAllSections.push(masterData.sections[i].chosenQuestions)\r\n // }\r\n\r\n // let allRemainingQuestions = masterData.allAvailableQuestions.filter((question) => {\r\n // return !allChosenQuestionsInAllSections.includes(question.id)\r\n // })\r\n\r\n // console.log(\"tableData\", [...section.chosenQuestions, ...allRemainingQuestions])\r\n\r\n // setTableData([...section.chosenQuestions, ...allRemainingQuestions])\r\n\r\n // // if( !_.isEqual(allRemainingQuestions, masterData.remainingQuestions)){\r\n\r\n // // setMasterData({\r\n // // allAvailableQuestions: data,\r\n // // sections: masterData.sections\r\n // // })\r\n // // }\r\n\r\n // }, [])\r\n\r\n // React.useEffect(() => {\r\n\r\n // console.log(\"data\", data)\r\n // console.log(\"selectedFlatRows\", selectedFlatRows)\r\n\r\n // // RG: get the selected questions from the selected rows. initially, it should be an empty list if no rows are selected.\r\n // let chosenQuestions = selectedFlatRows.map(row => row.original)\r\n // let chosenQuestionIds = selectedFlatRows.map(row => row.original.id)\r\n // console.log(\"chosenQuestions\", chosenQuestions)\r\n\r\n // // RG: find the section in masterData corresponding to the sectionId and add the chosenQuestions to that section\r\n // masterData.sections.map((section) => {\r\n // if (section.sectionId == sectionId) {\r\n // section.chosenQuestions = chosenQuestions\r\n // }\r\n // })\r\n\r\n // let remainingQuestions = data.filter((question) => {\r\n // return !chosenQuestionIds.includes(question.id)\r\n // })\r\n\r\n // console.log(\"remainingQuestions\", remainingQuestions)\r\n\r\n // if (chosenQuestions.length == 0) {\r\n // console.log(\"no change in data\")\r\n // }\r\n // else {\r\n // console.log(\"data changed\")\r\n // setMasterData({\r\n // allAvailableQuestions: data,\r\n // sections: masterData.sections\r\n // })\r\n // }\r\n // }, [setMasterData, selectedFlatRows]);\r\n\r\n /////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Keep parent/store state in sync with local state\r\n // No need to update on mount since we are passing initial state\r\n // useMountedLayoutEffect(() => {\r\n // onSelectedRowsChange && onSelectedRowsChange(selectedRowIds);\r\n // }, [onSelectedRowsChange, selectedRowIds]);\r\n\r\n // useMountedLayoutEffect(() => {\r\n // const selectedIds = Object.keys(selectedRowIds);\r\n // var selectedRowsData = selectedIds\r\n // .map(x => data[x])\r\n // .filter(function (x) {\r\n // return x != null;\r\n // });\r\n\r\n // onSelectedRowsChange(selectedRowsData);\r\n // }, [onSelectedRowsChange, selectedRowIds]);\r\n\r\n\r\n\r\n // ____________________________STABLE VERSION____________________________\r\n\r\n // useEffect(() => {\r\n\r\n // const formattedRows = selectedFlatRows.map(x => {\r\n\r\n\r\n // return { ...x.original, rowId: x.id, sectionId }\r\n // }\r\n\r\n // )\r\n // setChosenQuestions(formattedRows)\r\n\r\n // }, [selectedFlatRows]);\r\n\r\n\r\n\r\n\r\n\r\n // Render the UI for your table\r\n\r\n\r\n //============================= MASTERDATA =======================\r\n\r\n // const newArray = selectedFlatRows.map(x => {\r\n\r\n\r\n // return { ...x.original, rowId: x.id, sectionId }\r\n // })\r\n\r\n\r\n\r\n // let stringified = JSON.stringify(newArray)\r\n\r\n\r\n\r\n // if (stringified.length > 0) {\r\n // stringified = JSON.stringify([])\r\n\r\n // }\r\n\r\n\r\n\r\n\r\n // useEffect(() => {\r\n\r\n\r\n\r\n // const formattedRows = selectedFlatRows.map(x => {\r\n\r\n\r\n // return { ...x.original, rowId: x.id, sectionId }\r\n // })\r\n\r\n // // { ...masterData, sections: masterData?.sections.map(el => (el.sectionId === sectionId ? { ...el, chosenQuestions: newArray } : el)) }\r\n\r\n // // setMasterData(masterData?.sections.map(el => (el.sectionId === sectionId ? { ...el, chosenQuestions: newArray } : el)))\r\n\r\n // var a = JSON.parse(JSON.stringify(data))\r\n\r\n // var b = JSON.parse(JSON.stringify(formattedRows))\r\n\r\n // var updatedAvailableQs = a.filter(function (objFromA) {\r\n // return !b.find(function (objFromB) {\r\n // return objFromA.id === objFromB.id\r\n // })\r\n // })\r\n\r\n // let sectionsUpdated = masterData?.sections.map(el => (el.sectionId === sectionId ? { ...el, chosenQuestions: formattedRows } : el))\r\n\r\n // console.log('masterData in Usefeect', masterData)\r\n // console.log('sectionsUpdated', sectionsUpdated)\r\n\r\n // let updatedMasterData = { sections: sectionsUpdated, allAvailableQuestions: updatedAvailableQs }\r\n\r\n // // setMasterData(\r\n // // {\r\n\r\n // // ...masterData,\r\n // // sections: JSON.parse(JSON.stringify(sectionsUpdated)),\r\n // // // allAvailableQuestions: data.filter(function (objFromA) {\r\n // // // return !formattedRows.find(function (objFromB) {\r\n // // // return objFromA.id === objFromB.id\r\n // // // })\r\n // // // })\r\n // // allAvailableQuestions: updatedAvailableQs,\r\n // // // otherQuestions: updatedAvailableQs\r\n\r\n // // })\r\n\r\n // setMasterData(updatedMasterData)\r\n\r\n\r\n\r\n\r\n // }, [selectedFlatRows]);\r\n\r\n //============================================ ALTERNATIVE \r\n\r\n // useEffect(() => {\r\n // const selectedIds = Object.keys(selectedRowIds);\r\n // var selectedRowsData = selectedIds\r\n // .map(x => data[x])\r\n // .filter(function (x) {\r\n // return x != null;\r\n // });\r\n\r\n // console.log('selectedRowsData', selectedRowsData)\r\n\r\n\r\n // var a = data\r\n // var b = selectedRowsData\r\n\r\n // var updatedAvailableQs = a.filter(function (objFromA) {\r\n // return !b.find(function (objFromB) {\r\n // return objFromA.id === objFromB.id\r\n // })\r\n // })\r\n\r\n\r\n // setMasterData(\r\n // {\r\n\r\n // ...masterData,\r\n // sections: masterData?.sections.map(el => (el.sectionId === sectionId ? { ...el, chosenQuestions: selectedRowsData } : el)),\r\n // // allAvailableQuestions: data.filter(function (objFromA) {\r\n // // return !selectedRowsData.find(function (objFromB) {\r\n // // return objFromA.id === objFromB.id\r\n // // })\r\n // // })\r\n // // allAvailableQuestions: updatedAvailableQs\r\n // })\r\n\r\n\r\n // // setMasterData(selectedRowsData);\r\n // }, [selectedRowIds, setMasterData, data]);\r\n\r\n\r\n\r\n return (\r\n <>\r\n {/* RG: This button emulates the \"Save\" functionality */}\r\n
Selected Questions: {selectedFlatRows.length}
\r\n\r\n \r\n \r\n\r\n\r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {page.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}\r\n
{column.canFilter ? column.render('Filter') : null}
\r\n
{cell.render('Cell')}
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n {' '}\r\n {' '}\r\n {' '}\r\n {' '}\r\n
\r\n
\r\n \r\n Page{' '}\r\n \r\n {pageIndex + 1} of {pageOptions.length}\r\n {' '}\r\n \r\n \r\n | Go to page:{' '} \r\n \r\n {\r\n const page = e.target.value ? Number(e.target.value) - 1 : 0\r\n gotoPage(page)\r\n }}\r\n style={{ width: '100px' }}\r\n />\r\n
\r\n
\r\n {\r\n setPageSize(Number(e.target.value))\r\n }}\r\n >\r\n {[10, 20, 30, 40, 50].map(pageSize => (\r\n \r\n ))}\r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n \r\n )\r\n\r\n}\r\n\r\nfunction SurveyQuestionTable({ sectionId, masterData, setMasterData, setEditModal, setChosenQuestions, chosenQuestions }) {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const [question, setQuestion] = useState(null)\r\n\r\n\r\n const questions = masterData.allAvailableQuestions\r\n // const questions = useSelector((state) => state.question.questions);\r\n\r\n // var allPossibleQuestions = masterData?.allAvailableQuestions\r\n // var availableQuestions = masterData?.sections.map(x => x.chosenQuestions)\r\n\r\n // // console.log('availableQuestions', availableQuestions)\r\n\r\n // var updatedAvailableQs = allPossibleQuestions.filter(function (objFromA) {\r\n // return !availableQuestions[0].find(function (objFromB) {\r\n // return objFromA.id === objFromB.id\r\n // })\r\n // })\r\n\r\n\r\n // console.log('updatedAvailableQs', updatedAvailableQs)\r\n\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (question !== null) {\r\n const addNewQuestion = () => {\r\n dispatch({\r\n type: 'SELECT_QUESTION',\r\n payload: question\r\n })\r\n }\r\n\r\n addNewQuestion();\r\n }\r\n\r\n }, [dispatch, question]);\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n\r\n () => [\r\n\r\n\r\n {\r\n\r\n\r\n Header: 'Question',\r\n accessor: 'question_text',\r\n Filter: ColumnFilter,\r\n // Cell: ({ cell }) => {\r\n // /* Add data-tip */\r\n // // return {row.value};\r\n\r\n // if (cell.row.original.question_type === 'likert_scale') {\r\n\r\n // return <>\r\n // \r\n //
\r\n // Min label: {cell.row.original.likert_scale.min_label}\r\n // Min value: {cell.row.original.likert_scale.min_value}\r\n // Max label: {cell.row.original.likert_scale.max_label}\r\n // Max value: {cell.row.original.likert_scale.max_value}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n // if (cell.row.original.question_type === 'mcq' || cell.row.original.question_type === 'checkbox' || cell.row.original.question_type === 'dropdown') {\r\n\r\n // const choices = cell.row.original.choices.map(choice => choice.value)\r\n\r\n\r\n // return <>\r\n // \r\n //
\r\n // Choices:\r\n // {choices.join(\", \")}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n // if (cell.row.original.question_type === 'short_answer' || cell.row.original.question_type === 'paragraph') {\r\n\r\n // return {cell.row.original.question_text}\r\n // }\r\n\r\n\r\n // if (cell.row.original.question_type === 'grid_mcq') {\r\n\r\n\r\n\r\n // const rows = cell.row.original.grid_choices.filter(i => i.axis === 'row').map(value => {\r\n // if (value.axis === 'row') {\r\n // return value.value\r\n // }\r\n\r\n // return null\r\n\r\n // })\r\n\r\n\r\n // const columns = cell.row.original.grid_choices.filter(i => i.axis === 'col').map(value => {\r\n // if (value.axis === 'col') {\r\n // return value.value\r\n // }\r\n\r\n // return null\r\n\r\n // })\r\n\r\n // return <>\r\n // \r\n //
\r\n // Rows: {rows.join(\", \")}\r\n // Columns: {columns.join(\", \")}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n\r\n // return {cell.row.original.question_text}\r\n\r\n // }\r\n\r\n },\r\n {\r\n Header: 'Theme',\r\n // defaultCanFilter: true,\r\n // disableFilters: true,\r\n Filter: ThemeDropDown,\r\n accessor: 'parent_theme',\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n //ORIGINAL\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme.theme_name\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n\r\n //JuST FLATTENED\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n\r\n //FLATTENED & ALWAYS parent\r\n\r\n if (cell.row.original.parent_theme) {\r\n return cell.row.original.parent_theme\r\n }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Subtheme',\r\n Filter: SubthemeDropdown,\r\n // disableFilters: true,\r\n\r\n accessor: 'theme',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n return cell.row.original.theme\r\n }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n // {\r\n // Header: 'Reverse Coded',\r\n // accessor: 'reverse_coding_flag',\r\n // Filter: ReverseDropdown,\r\n // filter: 'equals',\r\n // // disableFilters: true,\r\n // Cell: ({ cell }) => {\r\n\r\n\r\n // if (cell.row.original.reverse_coding_flag) {\r\n // return 'Yes'\r\n // }\r\n // return 'No'\r\n\r\n // }\r\n // },\r\n {\r\n Header: 'Perspective',\r\n accessor: 'objective',\r\n Filter: ReverseDropdown,\r\n filter: 'equals',\r\n // disableFilters: true,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n if (cell.row.original.objective) {\r\n return 'Objective'\r\n }\r\n\r\n return 'Subjective'\r\n\r\n }\r\n },\r\n\r\n\r\n {\r\n Header: 'Question Type',\r\n accessor: 'question_type', //NEED to change to CELL so that switches likert_scale to Liker Scale returns jsx\r\n // disableFilters: true,\r\n Filter: DropdownFilter,\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n if (cell.row.original.question_type === 'likert_scale') {\r\n return 'Likert scale'\r\n }\r\n\r\n if (cell.row.original.question_type === 'mcq') {\r\n return 'Multiple Choice'\r\n }\r\n\r\n if (cell.row.original.question_type === 'checkbox') {\r\n return 'Checkbox'\r\n }\r\n\r\n if (cell.row.original.question_type === 'dropdown') {\r\n return 'Dropdown'\r\n }\r\n if (cell.row.original.question_type === 'paragraph') {\r\n return 'Paragraph'\r\n }\r\n if (cell.row.original.question_type === 'short_answer') {\r\n return 'Short Answer'\r\n }\r\n\r\n if (cell.row.original.question_type === 'grid_mcq') {\r\n return 'Grid Multiple Choice'\r\n }\r\n if (cell.row.original.question_type === 'grid_likert_scale') {\r\n return 'Grid Likert scale'\r\n }\r\n\r\n return null //to be replaced by other question type conditionals and null wont happen\r\n\r\n }\r\n },\r\n\r\n\r\n\r\n ],\r\n [setEditModal]\r\n )\r\n\r\n\r\n\r\n // let convertedRowIds\r\n // if (chosenQuestions?.length > 0) {\r\n // convertedRowIds = chosenQuestions.map(x => x?.rowId\r\n // )\r\n\r\n // }\r\n\r\n // let currentRows\r\n // if (convertedRowIds) {\r\n // currentRows = convertedRowIds.reduce((a, v) => ({ ...a, [v]: true }), {})\r\n // } else {\r\n // currentRows = {}\r\n // }\r\n\r\n\r\n // const [selectedRows, setSelectedRows] = useState(currentRows);\r\n\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n <>\r\n \r\n \r\n {/* */}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SurveyQuestionTable\r\n","import React, { useState, useEffect } from 'react';\r\n// import './add-questions-modal.styles.scss'\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport DatePicker from \"react-datepicker\";\r\n\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { MultiSelect } from \"react-multi-select-component\";\r\n\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nimport CreateSurveyQuestionModal from '../../CreateSurveyQuestions/create-survey-question-modal.component';\r\nimport SurveyQuestionTable from './survey-question-table.component'\r\n\r\nconst AddQuestionModal = ({ sectionId, masterData, setMasterData, showQuestionsModal, setShowQuestionsModal, setFirstInitiation }) => {\r\n\r\n const [showCreateModal, setCreateShowModal] = useState(false);\r\n\r\n return (\r\n\r\n \r\n \r\n\r\n Add Questions\r\n {\r\n setShowQuestionsModal(false);\r\n }}>\r\n Close\r\n \r\n \r\n\r\n \r\n\r\n {/* COMMENTED OUT BUTTON FOR PROD UNFINISHED CREATE QUESTION LOGIC (need to add new question at the top of the questions list instead of last) */}\r\n {/* {\r\n setCreateShowModal(true);\r\n }}>\r\n Create New Question\r\n */}\r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n \r\n );\r\n};\r\n\r\nexport default AddQuestionModal;\r\n","export default __webpack_public_path__ + \"static/media/dropdownicon.381bdd5c.svg\";","import React, { useState, useEffect } from 'react'\r\nimport styled from 'styled-components'\r\nimport { useTable, useFilters, useGlobalFilter, useAsyncDebounce, usePagination, useRowSelect, useMountedLayoutEffect } from 'react-table'\r\nimport { DndProvider, useDrag, useDrop } from 'react-dnd'\r\nimport { useDispatch } from 'react-redux'\r\nimport { HTML5Backend } from 'react-dnd-html5-backend'\r\nimport update from 'immutability-helper'\r\nimport { ColumnFilter } from '../../../Question-Components/QuestionTable/column-filter.component';\r\nimport { DropdownFilter } from '../../../Question-Components/QuestionTable/q-type-dropdown-filter.component';\r\nimport { ThemeDropDown } from '../../../Question-Components/QuestionTable/theme.dropdown.component';\r\nimport { SubthemeDropdown } from '../../../Question-Components/QuestionTable/subtheme.dropdown.component';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport Button from 'react-bootstrap/Button';\r\nimport FormCheck from 'react-bootstrap/FormCheck';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash, faGripLines, faEdit } from '@fortawesome/free-solid-svg-icons';\r\nimport Toggle from 'react-toggle'\r\n// import \"react-toggle/style.css\"\r\n\r\n// import makeData from './makeData'\r\n\r\nconst Styles = styled.div`\r\npadding: 1rem;\r\n\r\noverflow-x: auto;\r\ntable {\r\n width:100%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n}\r\n`\r\nconst IndeterminateCheckbox = React.forwardRef(\r\n ({ indeterminate, ...rest }, ref) => {\r\n const defaultRef = React.useRef()\r\n const resolvedRef = ref || defaultRef\r\n\r\n React.useEffect(() => {\r\n resolvedRef.current.indeterminate = indeterminate\r\n }, [resolvedRef, indeterminate])\r\n\r\n return (\r\n <>\r\n {/* */}\r\n \r\n\r\n {/* \r\n */}\r\n {/* */}\r\n {/* */}\r\n \r\n )\r\n }\r\n)\r\n\r\nconst Table = ({ columns, data, setChosenQuestions, requiredQuestions, setRequiredQuestions, setSavedQuestions, savedQuestions, onSelectedRowsChange, selectedRows, dispatch }) => {\r\n\r\n\r\n const [records, setRecords] = React.useState(data)\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n if (data !== null)\r\n setRecords(data)\r\n\r\n\r\n }, [setRecords, data]);\r\n\r\n useEffect(() => {\r\n\r\n\r\n if (records !== null) {\r\n setChosenQuestions(records)\r\n // savedQuestions.current = records\r\n // setSavedQuestions(records)\r\n // dispatch({\r\n // type: 'UPDATE_CREATE_SURVEY_ORDER',\r\n // payload: records\r\n // })\r\n }\r\n\r\n //setSavedQuestions\r\n //dispatch\r\n\r\n }, [records]);\r\n\r\n\r\n const getRowId = React.useCallback(row => {\r\n return row.id\r\n }, [])\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n page,\r\n prepareRow,\r\n selectedFlatRows,\r\n // visibleColumns,\r\n // preGlobalFilteredRows,\r\n // setGlobalFilter,\r\n\r\n\r\n canPreviousPage,\r\n canNextPage,\r\n pageOptions,\r\n pageCount,\r\n gotoPage,\r\n nextPage,\r\n previousPage,\r\n setPageSize,\r\n state: { pageIndex, pageSize, selectedRowIds },\r\n } = useTable({\r\n columns,\r\n // data,\r\n data: records,\r\n getRowId,\r\n initialState: {\r\n pageIndex: 0,\r\n selectedRowIds: selectedRows\r\n },\r\n autoResetPage: false,\r\n\r\n\r\n }, useFilters, useGlobalFilter, // useGlobalFilter!\r\n usePagination, useRowSelect,\r\n\r\n hooks => {\r\n hooks.visibleColumns.push(columns => [\r\n // Let's make a column for selection\r\n {\r\n id: 'selection',\r\n // The header can use the table's getToggleAllRowsSelectedProps method\r\n // to render a checkbox\r\n Header: ({ getToggleAllRowsSelectedProps }) => (\r\n
\r\n {/* */}\r\n Required\r\n
\r\n ),\r\n // The cell can use the individual row's getToggleRowSelectedProps method\r\n // to the render a checkbox\r\n Cell: ({ row }) => (\r\n
\r\n \r\n\r\n
\r\n ),\r\n },\r\n ...columns,\r\n ])\r\n }\r\n\r\n )\r\n\r\n\r\n useMountedLayoutEffect(() => {\r\n onSelectedRowsChange && onSelectedRowsChange(selectedRowIds);\r\n }, [onSelectedRowsChange, selectedRowIds]);\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n const requiredQuestionIds = Object.keys(selectedRowIds)\r\n\r\n const formattedIds = requiredQuestionIds.map(Number)\r\n\r\n\r\n setRequiredQuestions(formattedIds)\r\n\r\n\r\n }, [selectedRowIds, setRequiredQuestions]);\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n const moveRow = (dragIndex, hoverIndex) => {\r\n const dragRecord = records[dragIndex]\r\n\r\n // const selectedRowIdsshort = Object.keys(selectedRowIds)\r\n // const recordsWithRows = records.map(x => {\r\n // if (selectedRowIdsshort.includes(x.id.toString())) {\r\n // return { ...x, implicit_flag: true }\r\n // }\r\n // return x\r\n // })\r\n\r\n setRecords(\r\n update(records, {\r\n $splice: [\r\n [dragIndex, 1],\r\n [hoverIndex, 0, dragRecord],\r\n ],\r\n })\r\n )\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {rows.map(\r\n (row, index) =>\r\n prepareRow(row) || (\r\n \r\n )\r\n )}\r\n \r\n
{column.render('Header')}
\r\n\r\n
\r\n\r\n {/*
\r\n
\r\n
\r\n {' '}\r\n {' '}\r\n {' '}\r\n {' '}\r\n
\r\n
\r\n \r\n Page{' '}\r\n \r\n {pageIndex + 1} of {pageOptions.length}\r\n {' '}\r\n \r\n \r\n | Go to page:{' '} \r\n \r\n {\r\n const page = e.target.value ? Number(e.target.value) - 1 : 0\r\n gotoPage(page)\r\n }}\r\n style={{ width: '100px' }}\r\n />\r\n
\r\n
\r\n {\r\n setPageSize(Number(e.target.value))\r\n }}\r\n >\r\n {[10, 20, 30, 40, 50].map(pageSize => (\r\n \r\n ))}\r\n \r\n
\r\n\r\n
\r\n
*/}\r\n
\r\n )\r\n}\r\n\r\nconst DND_ITEM_TYPE = 'row'\r\n\r\nconst Row = ({ row, index, moveRow }) => {\r\n const dropRef = React.useRef(null)\r\n const dragRef = React.useRef(null)\r\n\r\n const [, drop] = useDrop({\r\n accept: DND_ITEM_TYPE,\r\n hover(item, monitor) {\r\n if (!dropRef.current) {\r\n return\r\n }\r\n const dragIndex = item.index\r\n const hoverIndex = index\r\n // Don't replace items with themselves\r\n if (dragIndex === hoverIndex) {\r\n return\r\n }\r\n // Determine rectangle on screen\r\n const hoverBoundingRect = dropRef.current.getBoundingClientRect()\r\n // Get vertical middle\r\n const hoverMiddleY =\r\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2\r\n // Determine mouse position\r\n const clientOffset = monitor.getClientOffset()\r\n // Get pixels to the top\r\n const hoverClientY = clientOffset.y - hoverBoundingRect.top\r\n // Only perform the move when the mouse has crossed half of the items height\r\n // When dragging downwards, only move when the cursor is below 50%\r\n // When dragging upwards, only move when the cursor is above 50%\r\n // Dragging downwards\r\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {\r\n return\r\n }\r\n // Dragging upwards\r\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {\r\n return\r\n }\r\n // Time to actually perform the action\r\n moveRow(dragIndex, hoverIndex)\r\n // Note: we're mutating the monitor item here!\r\n // Generally it's better to avoid mutations,\r\n // but it's good here for the sake of performance\r\n // to avoid expensive index searches.\r\n item.index = hoverIndex\r\n },\r\n })\r\n\r\n const [{ isDragging }, drag, preview] = useDrag({\r\n type: DND_ITEM_TYPE,\r\n item: () => ({ index }),\r\n collect: monitor => ({\r\n isDragging: monitor.isDragging(),\r\n }),\r\n })\r\n\r\n const opacity = isDragging ? 0 : 1\r\n\r\n preview(drop(dropRef))\r\n drag(dragRef)\r\n\r\n return (\r\n \r\n {/* move */}\r\n \r\n \r\n \r\n {row.cells.map(cell => {\r\n return {cell.render('Cell')}\r\n })}\r\n \r\n )\r\n}\r\n\r\n\r\nconst removeSelectedQuestion = (e, chosenQuestions, setChosenQuestions) => {\r\n\r\n\r\n // const updatedSelectedQuestions = chosenQuestions.filter(x => {\r\n\r\n // if (x?.original?.id !== e?.id) {\r\n // return x\r\n // }\r\n // return x\r\n // }\r\n // )\r\n\r\n const updatedSelectedQuestions = chosenQuestions.filter(x => {\r\n\r\n if (x?.id !== e?.id) {\r\n return x\r\n }\r\n }\r\n )\r\n\r\n setChosenQuestions(updatedSelectedQuestions)\r\n\r\n}\r\n\r\n\r\n\r\n\r\nconst App = ({ setEditModal, setChosenQuestions, chosenQuestions, setSavedQuestions, savedQuestions, requiredQuestions, setRequiredQuestions }) => {\r\n\r\n\r\n const dispatch = useDispatch()\r\n\r\n const [question, setQuestion] = useState(null)\r\n\r\n\r\n\r\n ///!!!!!!!!!!!!!!!!!!!!!!!!!! WILL NEED TO RENDER A QUESTION BACCK with USE SELECTOR THAT HAS BEEN SELECTED TO OLD FORMAT \r\n ///......OR JUST REFORMAT THE QUESTION HERE RETURN NEW OBJECT\r\n\r\n useEffect(() => {\r\n\r\n\r\n if (question !== null) {\r\n const addNewQuestion = () => {\r\n dispatch({\r\n type: 'SELECT_QUESTION',\r\n payload: question\r\n })\r\n }\r\n\r\n addNewQuestion();\r\n }\r\n\r\n }, [dispatch, question]);\r\n\r\n const columns = React.useMemo(\r\n () => [\r\n // {\r\n // Header: 'ID',\r\n // accessor: 'id',\r\n // },\r\n\r\n {\r\n Header: 'Question',\r\n accessor: 'question_text',\r\n Filter: ColumnFilter,\r\n Cell: ({ cell }) => {\r\n /* Add data-tip */\r\n // return {row.value};\r\n\r\n if (cell.row.original.question_type === 'likert_scale') {\r\n\r\n return <>\r\n \r\n
\r\n Min label: {cell.row.original.likert_scale.min_label}\r\n Min value: {cell.row.original.likert_scale.min_value}\r\n Max label: {cell.row.original.likert_scale.max_label}\r\n Max value: {cell.row.original.likert_scale.max_value}\r\n
\r\n \r\n }\r\n >\r\n {cell.row.original.question_text}\r\n \r\n ;\r\n }\r\n\r\n if (cell.row.original.question_type === 'mcq' || cell.row.original.question_type === 'checkbox' || cell.row.original.question_type === 'dropdown') {\r\n\r\n const choices = cell.row.original.choices.map(choice => choice.value)\r\n\r\n\r\n return <>\r\n \r\n
\r\n Choices:\r\n {choices.join(\", \")}\r\n
\r\n \r\n }\r\n >\r\n {cell.row.original.question_text}\r\n \r\n ;\r\n }\r\n\r\n if (cell.row.original.question_type === 'short_answer' || cell.row.original.question_type === 'paragraph') {\r\n\r\n return {cell.row.original.question_text}\r\n }\r\n\r\n\r\n if (cell.row.original.question_type === 'grid_mcq') {\r\n\r\n\r\n\r\n const rows = cell.row.original.grid_choices.filter(i => i.axis === 'row').map(value => {\r\n if (value.axis === 'row') {\r\n return value.value\r\n }\r\n\r\n return null\r\n\r\n })\r\n\r\n\r\n const columns = cell.row.original.grid_choices.filter(i => i.axis === 'col').map(value => {\r\n if (value.axis === 'col') {\r\n return value.value\r\n }\r\n\r\n return null\r\n\r\n })\r\n\r\n return <>\r\n \r\n
\r\n Rows: {rows.join(\", \")}\r\n Columns: {columns.join(\", \")}\r\n
\r\n \r\n }\r\n >\r\n {cell.row.original.question_text}\r\n \r\n ;\r\n }\r\n\r\n\r\n return {cell.row.original.question_text}\r\n\r\n }\r\n\r\n },\r\n\r\n {\r\n Header: 'Theme',\r\n // defaultCanFilter: true,\r\n disableFilters: true,\r\n Filter: ThemeDropDown,\r\n accessor: 'theme',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n return cell.row.original.parent_theme\r\n }\r\n if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n return cell.row.original.theme\r\n }\r\n if (!cell.row.original.theme && cell.row.original.parent_theme) {\r\n return cell.row.original.parent_theme\r\n }\r\n\r\n return ''\r\n\r\n }\r\n },\r\n {\r\n Header: 'Subtheme',\r\n Filter: SubthemeDropdown,\r\n disableFilters: true,\r\n\r\n accessor: 'parent_theme',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n return cell.row.original.theme\r\n }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Reverse Coded',\r\n accessor: 'reverse_coding_flag',\r\n Filter: ColumnFilter,\r\n disableFilters: true,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n if (cell.row.original.reverse_coding_flag) {\r\n return 'Yes'\r\n }\r\n return 'No'\r\n\r\n }\r\n },\r\n\r\n\r\n {\r\n Header: 'Question Type',\r\n accessor: 'question_type', //NEED to change to CELL so that switches likert_scale to Liker Scale returns jsx\r\n // defaultCanFilter: true,\r\n Filter: DropdownFilter,\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n if (cell.row.original.question_type === 'likert_scale') {\r\n return 'Likert scale'\r\n }\r\n\r\n if (cell.row.original.question_type === 'mcq') {\r\n return 'Multiple Choice'\r\n }\r\n\r\n if (cell.row.original.question_type === 'checkbox') {\r\n return 'Checkbox'\r\n }\r\n\r\n if (cell.row.original.question_type === 'dropdown') {\r\n return 'Dropdown'\r\n }\r\n if (cell.row.original.question_type === 'paragraph') {\r\n return 'Paragraph'\r\n }\r\n if (cell.row.original.question_type === 'short_answer') {\r\n return 'Short Answer'\r\n }\r\n\r\n if (cell.row.original.question_type === 'grid_mcq') {\r\n return 'Grid Multiple Choice'\r\n }\r\n if (cell.row.original.question_type === 'grid_likert_scale') {\r\n return 'Grid Likert scale'\r\n }\r\n\r\n return null //to be replaced by other question type conditionals and null wont happen\r\n\r\n }\r\n },\r\n // {\r\n // Header: 'Required',\r\n // // defaultCanFilter: true,\r\n // Filter: false,\r\n // Cell: ({ cell }) => {\r\n\r\n // // return \r\n\r\n // // defaultChecked={cell.row.original.implicit_flag} \r\n // return (
\r\n // handleRequired(cell.row.original, chosenQuestions, setChosenQuestions, requiredQuestions, setRequiredQuestions)} />\r\n\r\n\r\n //
)\r\n // }\r\n // },\r\n // {\r\n // Header: ' ',\r\n // // defaultCanFilter: true,\r\n // Filter: false,\r\n // Cell: ({ cell }) => {\r\n\r\n\r\n\r\n // return (
\r\n // {\r\n // setQuestion(cell.row.original)\r\n // // setEditModal(true)\r\n // }}\r\n // />\r\n //
)\r\n // }\r\n // },\r\n {\r\n Header: ' ',\r\n // defaultCanFilter: true,\r\n Filter: false,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n\r\n return (
\r\n {\r\n // setQuestion(cell.row.original)\r\n // setEditModal(true)\r\n removeSelectedQuestion(cell.row.original, chosenQuestions, setChosenQuestions)\r\n }} />\r\n
)\r\n\r\n\r\n }\r\n }\r\n\r\n ],\r\n [chosenQuestions, setChosenQuestions]\r\n )\r\n\r\n\r\n\r\n\r\n // const formatedChosenQuestions = chosenQuestions.map(x => x.original\r\n // // if (x?.original) {\r\n // // return x.original\r\n // // }\r\n // // return x\r\n // )\r\n\r\n\r\n\r\n\r\n\r\n const currentRows = requiredQuestions.reduce((a, v) => ({ ...a, [v]: true }), {})\r\n\r\n\r\n const [selectedRows, setSelectedRows] = useState(currentRows);\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n <>\r\n
Selected Questions: {chosenQuestions.length}
\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default React.memo(App)\r\n","export default __webpack_public_path__ + \"static/media/copybutton.216069f1.svg\";","export default __webpack_public_path__ + \"static/media/dropdowniconUP.63ace27d.svg\";","export default __webpack_public_path__ + \"static/media/movesection.bf6c1251.svg\";","export default __webpack_public_path__ + \"static/media/drilldownicon.4fac3e66.svg\";","export default __webpack_public_path__ + \"static/media/branchingicon.bc0ded1a.svg\";","import React, { useState } from 'react';\r\n\r\n\r\nimport { Card } from 'react-bootstrap';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport dndIcon from '../../../../../../assets/dndicon.svg'\r\nimport editIcon from '../../../../../../assets/editicon.svg'\r\nimport trashIcon from '../../../../../../assets/trashicon.svg'\r\nimport dropdownIcon from '../../../../../../assets/dropdownicon.svg'\r\nimport copyIcon from '../../../../../../assets/copybutton.svg'\r\nimport dropdownIconUp from '../../../../../../assets/dropdowniconUP.svg'\r\nimport moveSectionIcon from '../../../../../../assets/movesection.svg'\r\nimport drilldownIcon from '../../../../../../assets/drilldownicon.svg'\r\nimport branchingIcon from '../../../../../../assets/branchingicon.svg'\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport Collapse from 'react-bootstrap/Collapse';\r\n\r\nimport Dropdown from 'react-bootstrap/Dropdown';\r\nimport Form from 'react-bootstrap/Form';\r\n\r\nimport Button from 'react-bootstrap/Button';\r\nimport Modal from 'react-bootstrap/Modal';\r\n\r\n\r\n\r\nconst SectionQuestion = ({ questionDetails, masterData, setMasterData, index, currentSection, sectionId }) => {\r\n\r\n\r\n const [questionOpen, setQuestionOpen] = useState(false);\r\n\r\n const [branchedQuestions, setBranchedQuestions] = useState([]);\r\n\r\n const { question_text, question_type, implicit_flag, parent_theme, theme, choices } = questionDetails\r\n\r\n const currentSections = masterData.sections.filter(x => x.sectionId !== 1)\r\n\r\n const moveableSections = masterData.sections\r\n\r\n\r\n // console.log('currentSections', currentSections)\r\n\r\n // console.log('branchedQuestions', branchedQuestions)\r\n\r\n\r\n\r\n let displayQuestionType\r\n\r\n if (question_type === 'likert_scale') {\r\n displayQuestionType = 'Likert scale'\r\n }\r\n\r\n if (question_type === 'mcq') {\r\n displayQuestionType = 'Multiple Choice'\r\n }\r\n\r\n if (question_type === 'checkbox') {\r\n displayQuestionType = 'Checkbox'\r\n }\r\n\r\n if (question_type === 'dropdown') {\r\n displayQuestionType = 'Dropdown'\r\n }\r\n if (question_type === 'paragraph') {\r\n displayQuestionType = 'Paragraph'\r\n }\r\n if (question_type === 'short_answer') {\r\n displayQuestionType = 'Short Answer'\r\n }\r\n\r\n if (question_type === 'grid_mcq') {\r\n displayQuestionType = 'Grid Multiple Choice'\r\n }\r\n if (question_type === 'grid_likert_scale') {\r\n displayQuestionType = 'Grid Likert scale'\r\n }\r\n\r\n\r\n\r\n //MOVE SECTION DROPDOWN LOGIC\r\n\r\n\r\n const CustomToggle = React.forwardRef(({ children, onClick }, ref) => (\r\n {\r\n e.preventDefault();\r\n onClick(e);\r\n }}\r\n >\r\n {children}\r\n move_section_button\r\n\r\n \r\n ));\r\n\r\n // forwardRef again here!\r\n // Dropdown needs access to the DOM of the Menu to measure it\r\n const CustomMenu = React.forwardRef(\r\n ({ children, style, className, 'aria-labelledby': labeledBy }, ref) => {\r\n const [value, setValue] = useState('');\r\n\r\n return (\r\n \r\n {/* setValue(e.target.value)}\r\n value={value}\r\n /> */}\r\n
    \r\n {React.Children.toArray(children).filter(\r\n (child) =>\r\n !value || child.props.children.toLowerCase().startsWith(value),\r\n )}\r\n
\r\n \r\n );\r\n },\r\n );\r\n\r\n\r\n\r\n const handleMoveSection = (e) => {\r\n\r\n // console.log('masterData IN HANDLER', masterData)\r\n\r\n let questionId = questionDetails.id\r\n let newSectionId = e\r\n\r\n let destinationSection = moveableSections.filter(x => x.sectionId === newSectionId)[0]\r\n\r\n let reducedQuestion = currentSection.chosenQuestions.filter(x => x.id !== questionId)\r\n\r\n\r\n\r\n for (let i = 0; i < destinationSection.chosenQuestions.length; i++) {\r\n\r\n if (destinationSection.chosenQuestions.find(x => x.id === questionDetails.id)) {\r\n // console.log(\"STRUCK THE NON EXISTANT\")\r\n // console.log('masterData', masterData)\r\n\r\n\r\n let updatedSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return { ...x, chosenQuestions: reducedQuestion }\r\n }\r\n\r\n // if (x.sectionId === destinationSection.sectionId) {\r\n\r\n // return { ...destinationSection, chosenQuestions: [...destinationSection.chosenQuestions, questionDetails] }\r\n\r\n // }\r\n\r\n return x\r\n })\r\n setMasterData({ ...masterData, sections: updatedSections })\r\n return\r\n }\r\n\r\n\r\n destinationSection.chosenQuestions.push(questionDetails)\r\n\r\n }\r\n\r\n // console.log(\"CONTINUED RUNNING\")\r\n\r\n\r\n let updatedSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return { ...x, chosenQuestions: reducedQuestion }\r\n }\r\n\r\n if (x.sectionId === destinationSection.sectionId) {\r\n\r\n return { ...destinationSection, chosenQuestions: [...destinationSection.chosenQuestions, questionDetails] }\r\n\r\n }\r\n\r\n return x\r\n })\r\n\r\n // console.log('sections in handle', moveableSections)\r\n // console.log('questionId', questionId)\r\n // console.log('questionDetails', questionDetails)\r\n // console.log('MOVE TO', newSectionId)\r\n // console.log('Current currentSection', currentSection)\r\n // console.log('reducedQuestion', reducedQuestion)\r\n // console.log('destinationSection', destinationSection)\r\n\r\n\r\n setMasterData({ ...masterData, sections: updatedSections })\r\n // setMasterData()\r\n\r\n }\r\n\r\n\r\n const handleRemoveQuestion = (e) => {\r\n\r\n // console.log('question to remove', e)\r\n\r\n let reducedChosenQuestions = currentSection?.chosenQuestions.filter(x => x.id !== e.id)\r\n\r\n\r\n\r\n let reducedSection = { ...currentSection, chosenQuestions: reducedChosenQuestions }\r\n\r\n\r\n let updatedRemovedQSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return reducedSection\r\n }\r\n\r\n\r\n return x\r\n })\r\n\r\n\r\n // console.log('updatedRemovedQSections', updatedRemovedQSections)\r\n setMasterData({ ...masterData, sections: updatedRemovedQSections })\r\n\r\n }\r\n\r\n\r\n const handleRequired = (e) => {\r\n\r\n //if questions already had value from BE, no need local state change?\r\n\r\n\r\n\r\n\r\n let requiredQuestion = e\r\n\r\n // setRequired(prevRequired => !prevRequired)\r\n\r\n let sectionRequiredQuestion = currentSection?.chosenQuestions.map(x => {\r\n if (x.id === requiredQuestion.id) {\r\n\r\n\r\n return { ...x, required: !x.required }\r\n }\r\n\r\n return x\r\n })\r\n\r\n let adjustedCurrentSection = { ...currentSection, chosenQuestions: sectionRequiredQuestion }\r\n\r\n\r\n let requiredUpdatedSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return adjustedCurrentSection\r\n }\r\n\r\n\r\n return x\r\n })\r\n\r\n setMasterData({ ...masterData, sections: requiredUpdatedSections })\r\n\r\n\r\n }\r\n\r\n // const [modalShow, setModalShow] = React.useState(false);\r\n\r\n // function MyVerticallyCenteredModal(props) {\r\n\r\n // const [newSectionId, setNewSectionId] = useState(null)\r\n\r\n // console.log('masterData IN HANDLER', masterData)\r\n\r\n // let questionId = questionDetails.id\r\n\r\n // let destinationSection = moveableSections.filter(x => x.sectionId === newSectionId)[0]\r\n\r\n // let reducedQuestion = currentSection.chosenQuestions.filter(x => x.id !== questionId)\r\n\r\n // console.log('sections in handle', moveableSections)\r\n // console.log('questionId', questionId)\r\n // console.log('questionDetails', questionDetails)\r\n // console.log('MOVE TO', newSectionId)\r\n // console.log('Current currentSection', currentSection)\r\n // console.log('reducedQuestion', reducedQuestion)\r\n // console.log('destinationSection', destinationSection)\r\n\r\n\r\n // if (newSectionId) {\r\n\r\n\r\n // for (let i = 0; i < destinationSection?.chosenQuestions.length; i++) {\r\n\r\n // if (destinationSection?.chosenQuestions.find(x => x.id === questionDetails.id)) {\r\n // console.log(\"STRUCK THE NON EXISTANT\")\r\n // return\r\n // }\r\n\r\n // destinationSection?.chosenQuestions.push(questionDetails)\r\n\r\n // }\r\n\r\n // let updatedSections = moveableSections.map(x => {\r\n\r\n // if (x.sectionId === currentSection.sectionId) {\r\n // return { ...x, chosenQuestions: reducedQuestion }\r\n // }\r\n\r\n // if (x.sectionId === destinationSection?.sectionId) {\r\n\r\n // return { ...destinationSection, chosenQuestions: [...destinationSection?.chosenQuestions, questionDetails] }\r\n\r\n // }\r\n\r\n // return x\r\n // })\r\n\r\n\r\n\r\n // console.log('updatedSections', updatedSections)\r\n\r\n // setMasterData({ ...masterData, sections: updatedSections })\r\n\r\n // }\r\n\r\n\r\n\r\n // // setMasterData()\r\n\r\n\r\n // return (\r\n // \r\n // \r\n // \r\n // Move to Section\r\n // \r\n // \r\n // \r\n\r\n // \r\n\r\n // \r\n // \r\n // \r\n // \r\n // \r\n // );\r\n // }\r\n\r\n //_____________________________\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n\r\n \r\n {/*
\r\n dnd_button\r\n
*/}\r\n
\r\n
\r\n
\r\n {`${index + 1}. ${question_text}`}\r\n {/* */}\r\n edit_button\r\n
\r\n
\r\n {/*
\r\n Theme\r\n Subtheme\r\n
*/}\r\n
\r\n \r\n\r\n {parent_theme ? parent_theme : theme ? theme : null}\r\n {parent_theme && theme ? \r\n {' > '}\r\n : null}\r\n\r\n {parent_theme && theme ? theme : null}\r\n\r\n \r\n
\r\n
\r\n Question Type: {displayQuestionType}\r\n Perspective: {implicit_flag ? 'Subjective' : 'Objective'}\r\n
\r\n\r\n {question_type === 'mcq' || question_type === 'dropdown' ? \r\n
\r\n
\r\n Answers\r\n {choices?.map(x => {\r\n return (\r\n {x.value}\r\n\r\n )\r\n })}\r\n
\r\n
\r\n Branching\r\n {choices?.map(x => {\r\n return (\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n )\r\n })}\r\n\r\n
\r\n
\r\n
: null}\r\n\r\n
\r\n
\r\n
\r\n\r\n handleRequired(questionDetails)}\r\n />\r\n\r\n \r\n\r\n\r\n \r\n \r\n\r\n
\r\n branching_button\r\n Branching\r\n
\r\n
\r\n drilldown_button\r\n Drill-down\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n {/* move_section_button */}\r\n \r\n \r\n \r\n\r\n \r\n {moveableSections.map(x => {\r\n\r\n //need to filter if question's sectionId is not equal to sectionId in the list, then render item,\r\n //in order to not render the section to which the question already belongs to\r\n return (\r\n sectionId !== x.sectionId ? handleMoveSection(x.sectionId)}> {`Move to Section ${moveableSections.indexOf(x) + 1}`} : {`Move to Section ${moveableSections.indexOf(x) + 1}`}\r\n )\r\n\r\n })}\r\n\r\n \r\n \r\n {/* */}\r\n
\r\n\r\n
\r\n copy_button\r\n
\r\n
\r\n trash_button handleRemoveQuestion(questionDetails)} />\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {question_type === 'mcq' || question_type === 'dropdown' ? setQuestionOpen(!questionOpen)}\r\n aria-controls=\"answers-branching-main-container\"\r\n aria-expanded={questionOpen}>\r\n {questionOpen ? question-accordion-handle : question-accordion-handle }\r\n {/* */}\r\n\r\n : question-accordion-handle }\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n\r\n )\r\n\r\n}\r\n\r\nexport default SectionQuestion\r\n\r\n","import React, { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nimport \"./section-component.styles.scss\";\r\n\r\nimport AddQuestionModal from \"../AddQuestionsModal/add-questions-modal-component\";\r\nimport ViewQuestionsTable from \"../ViewQuestionsTable/view-questions-table.component\";\r\nimport { Card } from \"react-bootstrap\";\r\nimport { Container } from \"react-bootstrap\";\r\nimport { Row } from \"react-bootstrap\";\r\nimport { Col } from \"react-bootstrap\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faPlusCircle } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\";\r\nimport SectionQuestion from \"./Section Questions/SectionQuestion/section-question-component\";\r\nimport trashIcon from \"../../../../assets/trashicon.svg\";\r\nimport dndIcon from \"../../../../assets/dndicon.svg\";\r\nimport addIcon from \"../../../../assets/addcirclebutton.svg\";\r\n\r\nconst Section = ({\r\n sectionId,\r\n masterData,\r\n setMasterData,\r\n setFirstInitiation,\r\n}) => {\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n const [showQuestionsModal, setShowQuestionsModal] = useState(false);\r\n\r\n // const [localUpdatedNames, setLocalUpdatedNames] = useState(false)\r\n\r\n //try this\r\n const currentSection = masterData?.sections?.find(\r\n (item) => item.sectionId === sectionId\r\n );\r\n\r\n //SECTIONS DND ____________________\r\n\r\n function handleOnDragEnd(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(currentSection.chosenQuestions);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // console.log('items', items)\r\n\r\n // let updatedSectionsQuestions = { ...currentSection, chosenQuestions: items }\r\n let updatedSections = masterData?.sections?.map((x) => {\r\n if (x.sectionId === currentSection.sectionId) {\r\n return { ...x, chosenQuestions: items };\r\n }\r\n return x;\r\n });\r\n\r\n // console.log('DND updatedSections', updatedSections)\r\n\r\n let newMasterData = { ...masterData, sections: updatedSections };\r\n\r\n setMasterData(newMasterData);\r\n }\r\n\r\n const handleRemoveSection = (e) => {\r\n // console.log('question to remove', e)\r\n\r\n let reducedSections = masterData.sections.filter((x) => x.sectionId !== e);\r\n\r\n setMasterData({ ...masterData, sections: reducedSections });\r\n };\r\n\r\n const handleSetName = (e) => {\r\n let updatedNameSections = masterData?.sections.map((x) => {\r\n if (x.sectionId === sectionId) {\r\n return {\r\n ...x,\r\n section_name: e.target.value.replace(/[^\\x20-\\x7E]+/g, \"\"),\r\n };\r\n }\r\n\r\n return x;\r\n });\r\n\r\n // setLocalUpdatedNames(e.target.value)\r\n\r\n setMasterData({ ...masterData, sections: updatedNameSections });\r\n };\r\n\r\n const handleSetDescription = (e) => {\r\n let updatedDescriptionSections = masterData?.sections.map((x) => {\r\n if (x.sectionId === sectionId) {\r\n return {\r\n ...x,\r\n section_description: e.target.value.replace(/[^\\x20-\\x7E]+/g, \"\"),\r\n };\r\n }\r\n\r\n return x;\r\n });\r\n\r\n setMasterData({ ...masterData, sections: updatedDescriptionSections });\r\n };\r\n\r\n //SECTIONS DND END ___________________\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n Section Name:\r\n \r\n \r\n \r\n \r\n handleSetName(e)}\r\n // onFocusOut={(e) => onFocusHandle(e)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Section Description:\r\n \r\n \r\n \r\n \r\n handleSetDescription(e)}\r\n />\r\n \r\n \r\n \r\n\r\n {showQuestionsModal ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n
\r\n {\r\n setShowQuestionsModal(true);\r\n }}\r\n />\r\n Add Questions\r\n
\r\n\r\n \r\n \r\n {(provided) => (\r\n \r\n {currentSection?.chosenQuestions?.length > 0 ? (\r\n currentSection.chosenQuestions.map(\r\n (element, index) => {\r\n return (\r\n \r\n {(provided) => (\r\n //
\r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n }\r\n )\r\n ) : (\r\n \r\n {null}\r\n \r\n )}\r\n\r\n {provided.placeholder}\r\n \r\n )}\r\n
\r\n
\r\n\r\n \r\n
\r\n handleRemoveSection(sectionId)}\r\n />\r\n Delete Section\r\n
\r\n
\r\n\r\n {/* DEBUGGING DRAG AND DROP CREATING STATIC TO TEST MOVE TO SECTION */}\r\n\r\n {/* {currentSection?.chosenQuestions?.length > 0 ?\r\n\r\n currentSection.chosenQuestions.map((element, index) => {\r\n\r\n return (\r\n\r\n \r\n\r\n\r\n )\r\n\r\n })\r\n\r\n\r\n : Please add questions to include them in the survey.}\r\n\r\n\r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Section;\r\n\r\n// OLD SURVEYS QUESTIONS IN A VIEW QUESTION TABLE\r\n\r\n/* \r\n \r\n \r\n Survey's Questions:\r\n \r\n \r\n \r\n \r\n\r\n {chosenQuestions.length > 0 ?\r\n\r\n
\r\n \r\n\r\n
\r\n\r\n : Please add questions to include them in the survey.}\r\n\r\n\r\n\r\n \r\n \r\n */\r\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\n// import Axios from 'axios';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\nimport './create-survey-modal.styles.scss';\r\nimport \"../../../_vars.scss\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport DatePicker from \"react-datepicker\";\r\n\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nimport dndIcon from '../../../assets/dndicon.svg'\r\nimport addIcon from '../../../assets/addcirclebutton.svg'\r\n\r\nimport Tabs from 'react-bootstrap/Tabs';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport Section from './Section/section-component'\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\n\r\n\r\nconst CreateSurveyModal = ({ showModal, setShowModal }) => {\r\n\r\n const [key, setKey] = useState('questions'); //Tab initial view\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n const questions = useSelector((state) => state.question.questions);\r\n\r\n\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n const [masterData, setMasterData] = useState({\r\n allAvailableQuestions: [],\r\n sections: [\r\n {\r\n sectionId: 1,\r\n section_name: '',\r\n section_description: '',\r\n chosenQuestions: [],\r\n requiredQuestions: []\r\n }\r\n ]\r\n })\r\n const [firstInitiation, setFirstInitiation] = useState(true)\r\n\r\n const [uploadedFooterImageID, setUploadedFooterImageID] = useState(null)\r\n\r\n console.log('masterData', masterData)\r\n\r\n //SECTIONS DND ======\r\n\r\n function handleOnDragEnd(result) {\r\n\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(masterData?.sections);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n let newMasterData = { ...masterData, sections: items }\r\n\r\n // updateChoices(items)\r\n setMasterData(newMasterData)\r\n }\r\n\r\n\r\n //SECTIONS DND END ___________________\r\n\r\n\r\n\r\n // Questions Modal\r\n const history = useHistory()\r\n\r\n const dispatch = useDispatch()\r\n\r\n\r\n\r\n const surveyStatusOptions = [\r\n {\r\n display: 'Live',\r\n value: 'live'\r\n },\r\n {\r\n display: 'Closed',\r\n value: 'closed'\r\n },\r\n {\r\n display: 'Draft',\r\n value: 'draft'\r\n }\r\n ]\r\n const [surveyStatus, setSuveryStatus] = useState('live')\r\n\r\n\r\n //Chosen Multiselect Questions local state\r\n const [selected, setSelected] = useState([]);\r\n\r\n // for POST object, only question ids\r\n const data = selected.map(question => question.value)\r\n //______________________________\r\n\r\n //name, description not used to prevent input delays\r\n const [name, setName] = useState('');\r\n const [description, setDescription] = useState('');\r\n const descriptionRef = useRef()\r\n const nameRef = useRef()\r\n\r\n const submitConfirmMessageRef = useRef()\r\n\r\n const [startDate, setStartDate] = useState(new Date());\r\n const [endDate, setEndDate] = useState(new Date())\r\n\r\n\r\n const [createdSurvey, setCreatedSurvey] = useState(null)\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n try {\r\n\r\n setisLoading(true)\r\n\r\n\r\n const newSurvey = {\r\n // IF Survey status is Live, the chosen question's should be locked from edditing and the IDs are attached in this list:\r\n questionsList: surveyStatus === 'live' ?\r\n\r\n masterData.sections.map(section => {\r\n\r\n return section.chosenQuestions.map(question => {\r\n return question.id\r\n })\r\n }).flat()\r\n\r\n : [],\r\n\r\n\r\n data: {\r\n url: window.location.origin,\r\n og: organisationId,\r\n survey_desc: descriptionRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),\r\n start_date: startDate.toISOString(),\r\n end_date: endDate.toISOString(),\r\n survey_name: nameRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),\r\n submit_confirm_message: submitConfirmMessageRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),\r\n footer_image: uploadedFooterImageID,\r\n status: surveyStatus,\r\n sections: masterData.sections.map(section => {\r\n\r\n return {\r\n order: masterData.sections.indexOf(section),\r\n section_name: section?.section_name,\r\n section_desc: section?.section_description.replace(\r\n /[^\\x20-\\x7E\\n]+/g,///[^\\x20-\\x7E]+/g,\r\n ''\r\n ),\r\n section_questions: section.chosenQuestions.map(question => {\r\n return {\r\n\r\n order: section.chosenQuestions.indexOf(question) + 1,\r\n question: question.id,\r\n required_flag: question?.required === true ? true : false\r\n }\r\n })\r\n\r\n\r\n\r\n }\r\n\r\n })\r\n }\r\n };\r\n\r\n const response = await axios.post(\r\n `/surveys/`,\r\n newSurvey\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n setName('')\r\n setDescription('')\r\n setSelected([])\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n\r\n\r\n const { id, survey_desc, survey_name, questions, start_date, end_date, url, sid, survey_responses, status, sections } = response.data\r\n\r\n setCreatedSurvey({\r\n id,\r\n survey_desc,\r\n survey_name,\r\n questions,\r\n start_date,\r\n end_date,\r\n url,\r\n status,\r\n sid,\r\n survey_responses,\r\n sections\r\n })\r\n\r\n setisLoading(false)\r\n setShowModal(false);\r\n setName('')\r\n setDescription('')\r\n setSelected([])\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n\r\n setSuveryStatus('live')\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n // window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (createdSurvey !== null) {\r\n const setCreatedSurvey = () => {\r\n dispatch({\r\n type: 'ADD_NEW_SURVEY',\r\n payload: createdSurvey\r\n })\r\n }\r\n\r\n setCreatedSurvey();\r\n }\r\n\r\n }, [dispatch, createdSurvey]);\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n // ################### LOGIC FOR STRAPI V3 ##########################\r\n // const formatedQuestions = questions.map(x => {\r\n\r\n // if (x.theme && x.parent_theme) {\r\n // return { ...x, parent_theme: x.parent_theme.theme_name, theme: x.theme.theme_name }\r\n // }\r\n // if (x.theme && !x.parent_theme) {\r\n // return { ...x, parent_theme: x.theme.theme_name, theme: null }\r\n // }\r\n // return x\r\n\r\n // })\r\n if (firstInitiation) {\r\n\r\n\r\n setMasterData({\r\n allAvailableQuestions: questions,//formatedQuestions,\r\n sections: [\r\n {\r\n sectionId: 1,\r\n section_name: '',\r\n section_description: '',\r\n chosenQuestions: [],\r\n requiredQuestions: []\r\n }\r\n ]\r\n })\r\n\r\n } else {\r\n\r\n setMasterData({\r\n allAvailableQuestions: questions,//formatedQuestions,\r\n sections: masterData.sections\r\n })\r\n\r\n }\r\n\r\n }, [questions, showModal, firstInitiation]);\r\n\r\n\r\n\r\n const uploadImage = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n try {\r\n const formData = new FormData()\r\n\r\n formData.append('files', e.target.files[0])\r\n formData.append('path', \"1\")\r\n\r\n const response = await axios({\r\n method: 'post',\r\n url: '/upload',\r\n data: formData\r\n })\r\n\r\n setUploadedFooterImageID(response.data[0]?.id)\r\n\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n }\r\n\r\n\r\n return (\r\n {\r\n setShowModal(false);\r\n setName('')\r\n setDescription('')\r\n setSelected([])\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n\r\n setSuveryStatus('live')\r\n }}>\r\n \r\n\r\n Create Survey\r\n \r\n {/* onSubmit={submit} */}\r\n
\r\n \r\n\r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Creating Survey...\r\n
\r\n
\r\n ) : (\r\n\r\n setKey(k)}\r\n className=\"mb-3\">\r\n\r\n \r\n \r\n \r\n
\r\n Name *\r\n \r\n \r\n \r\n \r\n {\r\n\r\n // setName(e.target.value.replace(\r\n // /[^\\x20-\\x7E]+/g,\r\n // ''\r\n // ))\r\n // // }\r\n // }}\r\n ref={nameRef}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Description *\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n {(provided) => (\r\n
\r\n {masterData?.sections?.map((element, index) => {\r\n\r\n\r\n\r\n return (\r\n \r\n {(provided) => (\r\n //
\r\n\r\n
\r\n
\r\n
\r\n dnd_button\r\n
\r\n\r\n \r\n
\r\n
\r\n\r\n )}\r\n \r\n\r\n )\r\n })}\r\n {provided.placeholder}\r\n
\r\n )}\r\n\r\n \r\n \r\n\r\n \r\n
\r\n add_button {\r\n setMasterData(\r\n\r\n // [...masterData, {\r\n // sectionId: masterData.length + 1,\r\n // chosenQuestions: [],\r\n // requiredQuestions: []\r\n // }]\r\n {\r\n ...masterData,\r\n sections: [...masterData?.sections, {\r\n sectionId: masterData?.sections.length + 1,\r\n section_name: '',\r\n section_description: '',\r\n chosenQuestions: [],\r\n requiredQuestions: []\r\n }]\r\n }\r\n\r\n )\r\n }} />\r\n\r\n Add Section\r\n
\r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n Submit Confirm Message:\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n Icons:\r\n \r\n \r\n \r\n \r\n \r\n uploadImage(e)}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n {/* \r\n \r\n Start Date:\r\n \r\n \r\n \r\n \r\n setStartDate(date)}\r\n timeInputLabel=\"Time:\"\r\n dateFormat=\"dd/MM/yyyy h:mm aa\"\r\n showTimeInput\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Close Date:\r\n \r\n \r\n \r\n \r\n setEndDate(date)}\r\n timeInputLabel=\"Time:\"\r\n dateFormat=\"dd/MM/yyyy h:mm aa\"\r\n showTimeInput\r\n />\r\n \r\n */}\r\n \r\n \r\n Survey Status:\r\n\r\n {\r\n setSuveryStatus(e.target.value)\r\n }}\r\n >\r\n {surveyStatusOptions.map(x => (\r\n \r\n ))}\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n )}\r\n\r\n \r\n \r\n\r\n {/* NEW CANCEL BUTTON */}\r\n\r\n {\r\n setShowModal(false);\r\n setName('')\r\n setDescription('')\r\n setSelected([])\r\n setStartDate(new Date())\r\n setEndDate(new Date())\r\n\r\n setSuveryStatus('live')\r\n setMasterData({\r\n allAvailableQuestions: [],\r\n sections: [\r\n {\r\n sectionId: 1,\r\n section_name: '',\r\n section_description: '',\r\n chosenQuestions: [],\r\n requiredQuestions: []\r\n }\r\n ]\r\n })\r\n }} >\r\n Cancel \r\n\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateSurveyModal;\r\n\r\n\r\n\r\n\r\n","import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport styled from 'styled-components'\r\nimport { useTable, useFilters, useGlobalFilter, useAsyncDebounce, usePagination, useRowSelect, useMountedLayoutEffect } from 'react-table'\r\nimport Button from 'react-bootstrap/Button';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\n// import '../../../Question-Components/QuestionTable/question-table.styles.scss';\r\nimport { ColumnFilter } from '../../../QM-Components/ThemeQuestionTable/column-filter.component';\r\nimport { DropdownFilter } from '../../../QM-Components/ThemeQuestionTable/q-type-dropdown-filter.component';\r\nimport { ThemeDropDown } from '../../../QM-Components/ThemeQuestionTable/theme.dropdown.component';\r\nimport { SubthemeDropdown } from '../../../QM-Components/ThemeQuestionTable/subtheme.dropdown.component';\r\nimport { ReverseDropdown } from '../../../QM-Components/ThemeQuestionTable/reverse-coded.dropdown.component';\r\n\r\n\r\nconst Styles = styled.div`\r\npadding: 1rem;\r\n\r\noverflow-x: auto;\r\ntable {\r\n width:100%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n width: 5em\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n}\r\n`\r\nconst IndeterminateCheckbox = React.forwardRef(\r\n ({ indeterminate, ...rest }, ref) => {\r\n const defaultRef = React.useRef()\r\n const resolvedRef = ref || defaultRef\r\n\r\n React.useEffect(() => {\r\n resolvedRef.current.indeterminate = indeterminate\r\n }, [resolvedRef, indeterminate])\r\n\r\n return (\r\n <>\r\n \r\n \r\n )\r\n }\r\n)\r\n\r\n//FILTERS\r\n\r\n// Define a default UI for filtering\r\nfunction DefaultColumnFilter({\r\n column: { filterValue, preFilteredRows, setFilter },\r\n}) {\r\n const count = preFilteredRows.length\r\n\r\n return (\r\n {\r\n setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely\r\n }}\r\n placeholder={`Search ${count} records...`}\r\n />\r\n )\r\n}\r\n\r\n// This is a custom filter UI for selecting\r\n// a unique option from a list\r\nfunction SelectColumnFilter({\r\n column: { filterValue, setFilter, preFilteredRows, id },\r\n}) {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n options.add(row.values[id])\r\n })\r\n return [...options.values()]\r\n }, [id, preFilteredRows])\r\n\r\n // Render a multi-select box\r\n return (\r\n {\r\n setFilter(e.target.value || undefined)\r\n }}\r\n >\r\n \r\n {options.map((option, i) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n\r\n// const INITIAL_SELECTED_ROW_IDS = {};\r\n\r\nfunction Table({ columns, data, masterData, setMasterData, sectionId }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n\r\n const [tableData, setTableData] = React.useState([])\r\n\r\n const defaultColumn = React.useMemo(\r\n () => ({\r\n // Let's set up our default Filter UI\r\n Filter: DefaultColumnFilter,\r\n }),\r\n []\r\n )\r\n\r\n // const INITIAL_SELECTED_ROW_IDS = {};\r\n\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n page,\r\n prepareRow,\r\n selectedFlatRows,\r\n canPreviousPage,\r\n canNextPage,\r\n pageOptions,\r\n pageCount,\r\n gotoPage,\r\n nextPage,\r\n previousPage,\r\n setPageSize,\r\n setAllFilters,\r\n toggleRowSelected,\r\n state: { pageIndex, pageSize, selectedRowIds },\r\n } = useTable({\r\n columns,\r\n data: tableData,\r\n\r\n // initialState: {\r\n // pageIndex: 0,\r\n // selectedRowIds: selectedRows,\r\n // // selectedRowIds: INITIAL_SELECTED_ROW_IDS\r\n // },\r\n // autoResetPage: false,\r\n // autoResetFilters: false,\r\n // autoResetHiddenColumns: false,\r\n\r\n defaultColumn, // Be sure to pass the defaultColumn option\r\n\r\n\r\n }, useFilters, useGlobalFilter, // useGlobalFilter!\r\n usePagination, useRowSelect,\r\n\r\n\r\n\r\n hooks => {\r\n hooks.visibleColumns.push(columns => [\r\n // Let's make a column for selection\r\n {\r\n id: 'selection',\r\n // The header can use the table's getToggleAllRowsSelectedProps method\r\n // to render a checkbox\r\n Header: ({ getToggleAllRowsSelectedProps }) => (\r\n
\r\n \r\n
\r\n ),\r\n // The cell can use the individual row's getToggleRowSelectedProps method\r\n // to the render a checkbox\r\n Cell: ({ row }) => (\r\n
\r\n \r\n
\r\n ),\r\n },\r\n ...columns,\r\n ])\r\n }\r\n\r\n\r\n )\r\n\r\n React.useEffect(() => {\r\n // RG: from masterData, figure out all the available questions + this section's chosenQuestions\r\n\r\n let section = masterData.sections.filter(section => section.sectionId == sectionId)[0]\r\n\r\n let allChosenQuestionsInAllSections = []\r\n for (let i = 0; i < masterData.sections.length; i++) {\r\n allChosenQuestionsInAllSections = [...allChosenQuestionsInAllSections, ...masterData.sections[i].chosenQuestions]\r\n }\r\n\r\n // console.log(\"allChosenQuestionsInAllSections\", allChosenQuestionsInAllSections)\r\n\r\n // RG: Need to compare question ids and not questions.\r\n let allChosenQuestionIdsInAllSections = allChosenQuestionsInAllSections.map((question) => question.id)\r\n\r\n let allRemainingQuestions = masterData.allAvailableQuestions.filter((question) => {\r\n return !allChosenQuestionIdsInAllSections.includes(question.id)\r\n })\r\n\r\n // console.log(\"allRemainingQuestions\", allRemainingQuestions)\r\n\r\n let tableData = [...section.chosenQuestions, ...allRemainingQuestions]\r\n // console.log(\"tableData\", tableData)\r\n\r\n setTableData(tableData)\r\n\r\n }, [masterData])\r\n\r\n\r\n useMountedLayoutEffect(() => {\r\n // RG: Go through all the rows in the table and select the rows with the same question.id in section.chosenQuestions\r\n let section = masterData.sections.filter(section => section.sectionId == sectionId)[0]\r\n let chosenQuestionIds = section.chosenQuestions.map(question => question.id)\r\n\r\n rows.forEach((row) => {\r\n if (chosenQuestionIds.includes(row.original.id)) {\r\n toggleRowSelected(row.id, true)\r\n }\r\n })\r\n\r\n }, [rows]);\r\n\r\n\r\n function saveSelection(e) {\r\n e.preventDefault();\r\n // RG: get the selected questions from the selected rows. initially, it should be an empty list if no rows are selected.\r\n let chosenQuestions = selectedFlatRows.map(row => row.original)\r\n let chosenQuestionIds = selectedFlatRows.map(row => row.original.id)\r\n\r\n // RG: find the section in masterData corresponding to the sectionId and add the chosenQuestions to that section\r\n masterData.sections.map((section) => {\r\n if (section.sectionId == sectionId) {\r\n section.chosenQuestions = chosenQuestions\r\n }\r\n })\r\n\r\n setMasterData({\r\n allAvailableQuestions: data,\r\n sections: masterData.sections\r\n })\r\n\r\n }\r\n\r\n\r\n return (\r\n <>\r\n {/* RG: This button emulates the \"Save\" functionality */}\r\n
Selected Questions: {selectedFlatRows.length}
\r\n\r\n \r\n
\r\n\r\n\r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {page.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}\r\n
{column.canFilter ? column.render('Filter') : null}
\r\n
{cell.render('Cell')}
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n {' '}\r\n {' '}\r\n {' '}\r\n {' '}\r\n
\r\n
\r\n \r\n Page{' '}\r\n \r\n {pageIndex + 1} of {pageOptions.length}\r\n {' '}\r\n \r\n \r\n | Go to page:{' '} \r\n \r\n {\r\n const page = e.target.value ? Number(e.target.value) - 1 : 0\r\n gotoPage(page)\r\n }}\r\n style={{ width: '100px' }}\r\n />\r\n
\r\n
\r\n {\r\n setPageSize(Number(e.target.value))\r\n }}\r\n >\r\n {[10, 20, 30, 40, 50].map(pageSize => (\r\n \r\n ))}\r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n \r\n )\r\n\r\n}\r\n\r\nfunction SurveyInEditQuestionTable({ sectionId, masterData, setMasterData, setEditModal, setChosenQuestions, chosenQuestions }) {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const [question, setQuestion] = useState(null)\r\n\r\n\r\n\r\n const questions = masterData.allAvailableQuestions\r\n\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (question !== null) {\r\n const addNewQuestion = () => {\r\n dispatch({\r\n type: 'SELECT_QUESTION',\r\n payload: question\r\n })\r\n }\r\n\r\n addNewQuestion();\r\n }\r\n\r\n }, [dispatch, question]);\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n\r\n () => [\r\n\r\n\r\n {\r\n\r\n\r\n Header: 'Question',\r\n accessor: 'question_text',\r\n Filter: ColumnFilter,\r\n // Cell: ({ cell }) => {\r\n // /* Add data-tip */\r\n // // return {row.value};\r\n\r\n // if (cell.row.original.question_type === 'likert_scale') {\r\n\r\n // return <>\r\n // \r\n //
\r\n // Min label: {cell.row.original.likert_scale?.min_label}\r\n // Min value: {cell.row.original.likert_scale?.min_value}\r\n // Max label: {cell.row.original.likert_scale?.max_label}\r\n // Max value: {cell.row.original.likert_scale?.max_value}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n // if (cell.row.original.question_type === 'mcq' || cell.row.original.question_type === 'checkbox' || cell.row.original.question_type === 'dropdown') {\r\n\r\n // const choices = cell.row.original?.choices?.map(choice => choice.value)\r\n\r\n\r\n // return <>\r\n // \r\n //
\r\n // Choices:\r\n // {choices?.join(\", \")}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n // if (cell.row.original.question_type === 'short_answer' || cell.row.original.question_type === 'paragraph') {\r\n\r\n // return {cell.row.original.question_text}\r\n // }\r\n\r\n\r\n // if (cell.row.original.question_type === 'grid_mcq') {\r\n\r\n\r\n\r\n // const rows = cell.row.original?.grid_choices?.filter(i => i.axis === 'row').map(value => {\r\n // if (value.axis === 'row') {\r\n // return value.value\r\n // }\r\n\r\n // return null\r\n\r\n // })\r\n\r\n\r\n // const columns = cell.row.original?.grid_choices?.filter(i => i.axis === 'col').map(value => {\r\n // if (value.axis === 'col') {\r\n // return value.value\r\n // }\r\n\r\n // return null\r\n\r\n // })\r\n\r\n // return <>\r\n // \r\n //
\r\n // Rows: {rows?.join(\", \")}\r\n // Columns: {columns?.join(\", \")}\r\n //
\r\n // \r\n // }\r\n // >\r\n // {cell.row.original.question_text}\r\n // \r\n // ;\r\n // }\r\n\r\n\r\n // return {cell.row.original.question_text}\r\n\r\n // }\r\n\r\n },\r\n {\r\n Header: 'Theme',\r\n // defaultCanFilter: true,\r\n // disableFilters: true,\r\n Filter: ThemeDropDown,\r\n accessor: 'parent_theme',\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n //ORIGINAL\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme.theme_name\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n\r\n //JuST FLATTENED\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.parent_theme\r\n // }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n\r\n //FLATTENED & ALWAYS parent\r\n\r\n if (cell.row.original.parent_theme) {\r\n return cell.row.original.parent_theme\r\n }\r\n // if (cell.row.original.theme && !cell.row.original.parent_theme) {\r\n // return cell.row.original.theme\r\n // }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Subtheme',\r\n Filter: SubthemeDropdown,\r\n // disableFilters: true,\r\n\r\n accessor: 'theme',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n // if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n // return cell.row.original.theme.theme_name\r\n // }\r\n if (cell.row.original.theme && cell.row.original.parent_theme) {\r\n return cell.row.original.theme\r\n }\r\n return ''\r\n\r\n\r\n }\r\n },\r\n {\r\n Header: 'Perspective',\r\n accessor: 'objective',\r\n Filter: ReverseDropdown,\r\n filter: 'equals',\r\n // disableFilters: true,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n if (cell.row.original.objective) {\r\n return 'Objective'\r\n }\r\n\r\n return 'Subjective'\r\n\r\n }\r\n },\r\n\r\n {\r\n Header: 'Question Type',\r\n accessor: 'question_type', //NEED to change to CELL so that switches likert_scale to Liker Scale returns jsx\r\n // disableFilters: true,\r\n Filter: DropdownFilter,\r\n filter: 'equals',\r\n Cell: ({ cell }) => {\r\n\r\n if (cell.row.original.question_type === 'likert_scale') {\r\n return 'Likert scale'\r\n }\r\n\r\n if (cell.row.original.question_type === 'mcq') {\r\n return 'Multiple Choice'\r\n }\r\n\r\n if (cell.row.original.question_type === 'checkbox') {\r\n return 'Checkbox'\r\n }\r\n\r\n if (cell.row.original.question_type === 'dropdown') {\r\n return 'Dropdown'\r\n }\r\n if (cell.row.original.question_type === 'paragraph') {\r\n return 'Paragraph'\r\n }\r\n if (cell.row.original.question_type === 'short_answer') {\r\n return 'Short Answer'\r\n }\r\n\r\n if (cell.row.original.question_type === 'grid_mcq') {\r\n return 'Grid Multiple Choice'\r\n }\r\n\r\n return null //to be replaced by other question type conditionals and null wont happen\r\n\r\n }\r\n },\r\n\r\n\r\n\r\n ],\r\n [setEditModal]\r\n )\r\n\r\n\r\n\r\n // let convertedRowIds\r\n // if (chosenQuestions?.length > 0) {\r\n // convertedRowIds = chosenQuestions.map(x => x?.rowId\r\n // )\r\n\r\n // }\r\n\r\n // let currentRows\r\n // if (convertedRowIds) {\r\n // currentRows = convertedRowIds.reduce((a, v) => ({ ...a, [v]: true }), {})\r\n // } else {\r\n // currentRows = {}\r\n // }\r\n\r\n\r\n // const [selectedRows, setSelectedRows] = useState(currentRows);\r\n\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n <>\r\n \r\n \r\n {/* */}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SurveyInEditQuestionTable\r\n","import React, { useState, useEffect } from 'react';\r\n// import './add-questions-modal.styles.scss'\r\nimport { Modal, Button } from 'react-bootstrap';\r\n\r\nimport CreateSurveyQuestionModal from '../../CreateSurveyQuestions/create-survey-question-modal.component';\r\n\r\nimport SurveyInEditQuestionTable from './survey-in-edit-question-table.component';\r\n\r\nconst AddInEditQuestionModal = ({ sectionId, masterData, setMasterData, showQuestionsModal, setShowQuestionsModal, setFirstInitiation }) => {\r\n\r\n const [showCreateModal, setCreateShowModal] = useState(false);\r\n\r\n return (\r\n\r\n \r\n \r\n\r\n Add Questions\r\n {\r\n setShowQuestionsModal(false);\r\n }}>\r\n Close\r\n \r\n \r\n\r\n \r\n {/* {\r\n setCreateShowModal(true);\r\n }}>\r\n Create New Question\r\n \r\n */}\r\n\r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n \r\n );\r\n};\r\n\r\nexport default AddInEditQuestionModal;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { Card } from 'react-bootstrap';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport editIcon from '../../../../../../assets/editicon.svg'\r\nimport trashIcon from '../../../../../../assets/trashicon.svg'\r\nimport dropdownIcon from '../../../../../../assets/dropdownicon.svg'\r\nimport copyIcon from '../../../../../../assets/copybutton.svg'\r\nimport dropdownIconUp from '../../../../../../assets/dropdowniconUP.svg'\r\nimport moveSectionIcon from '../../../../../../assets/movesection.svg'\r\nimport drilldownIcon from '../../../../../../assets/drilldownicon.svg'\r\nimport branchingIcon from '../../../../../../assets/branchingicon.svg'\r\nimport Collapse from 'react-bootstrap/Collapse';\r\n\r\nimport Dropdown from 'react-bootstrap/Dropdown';\r\n\r\n\r\n\r\nconst ViewSectionQuestion = ({ questionDetails, masterData, setMasterData, index, currentSection, sectionId }) => {\r\n\r\n\r\n const [questionOpen, setQuestionOpen] = useState(false);\r\n\r\n const [branchedQuestions, setBranchedQuestions] = useState([]);\r\n\r\n const [isChecked, setIsChecked] = useState(false);\r\n\r\n const { question_text, question_type, implicit_flag, parent_theme, theme, choices, required } = questionDetails\r\n\r\n const currentSections = masterData.sections.filter(x => x.sectionId !== 1)\r\n\r\n const moveableSections = masterData.sections\r\n\r\n\r\n\r\n\r\n let displayQuestionType\r\n\r\n if (question_type === 'likert_scale') {\r\n displayQuestionType = 'Likert scale'\r\n }\r\n\r\n if (question_type === 'mcq') {\r\n displayQuestionType = 'Multiple Choice'\r\n }\r\n\r\n if (question_type === 'checkbox') {\r\n displayQuestionType = 'Checkbox'\r\n }\r\n\r\n if (question_type === 'dropdown') {\r\n displayQuestionType = 'Dropdown'\r\n }\r\n if (question_type === 'paragraph') {\r\n displayQuestionType = 'Paragraph'\r\n }\r\n if (question_type === 'short_answer') {\r\n displayQuestionType = 'Short Answer'\r\n }\r\n\r\n if (question_type === 'grid_mcq') {\r\n displayQuestionType = 'Grid Multiple Choice'\r\n }\r\n if (question_type === 'grid_likert_scale') {\r\n displayQuestionType = 'Grid Likert scale'\r\n }\r\n\r\n\r\n\r\n //MOVE SECTION DROPDOWN LOGIC\r\n\r\n\r\n const CustomToggle = React.forwardRef(({ children, onClick }, ref) => (\r\n {\r\n e.preventDefault();\r\n onClick(e);\r\n }}\r\n >\r\n {children}\r\n move_section_button\r\n\r\n \r\n ));\r\n\r\n // forwardRef again here!\r\n // Dropdown needs access to the DOM of the Menu to measure it\r\n const CustomMenu = React.forwardRef(\r\n ({ children, style, className, 'aria-labelledby': labeledBy }, ref) => {\r\n const [value, setValue] = useState('');\r\n\r\n return (\r\n \r\n {/* setValue(e.target.value)}\r\n value={value}\r\n /> */}\r\n
    \r\n {React.Children.toArray(children).filter(\r\n (child) =>\r\n !value || child.props.children.toLowerCase().startsWith(value),\r\n )}\r\n
\r\n \r\n );\r\n },\r\n );\r\n\r\n\r\n\r\n const handleMoveSection = (e) => {\r\n\r\n\r\n\r\n let questionId = questionDetails.id\r\n let newSectionId = e\r\n\r\n let destinationSection = moveableSections.filter(x => x.sectionId === newSectionId)[0]\r\n\r\n let reducedQuestion = currentSection.chosenQuestions.filter(x => x.id !== questionId)\r\n\r\n\r\n\r\n for (let i = 0; i < destinationSection.chosenQuestions.length; i++) {\r\n\r\n if (destinationSection.chosenQuestions.find(x => x.id === questionDetails.id)) {\r\n\r\n\r\n let updatedSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return { ...x, chosenQuestions: reducedQuestion }\r\n }\r\n\r\n // if (x.sectionId === destinationSection.sectionId) {\r\n\r\n // return { ...destinationSection, chosenQuestions: [...destinationSection.chosenQuestions, questionDetails] }\r\n\r\n // }\r\n\r\n return x\r\n })\r\n setMasterData({ ...masterData, sections: updatedSections })\r\n return\r\n }\r\n\r\n\r\n destinationSection.chosenQuestions.push(questionDetails)\r\n\r\n }\r\n\r\n\r\n\r\n\r\n let updatedSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return { ...x, chosenQuestions: reducedQuestion }\r\n }\r\n\r\n if (x.sectionId === destinationSection.sectionId) {\r\n\r\n return { ...destinationSection, chosenQuestions: [...destinationSection.chosenQuestions, questionDetails] }\r\n\r\n }\r\n\r\n return x\r\n })\r\n\r\n\r\n\r\n\r\n setMasterData({ ...masterData, sections: updatedSections })\r\n // setMasterData()\r\n\r\n }\r\n\r\n\r\n const handleRemoveQuestion = (e) => {\r\n\r\n\r\n\r\n let reducedChosenQuestions = currentSection?.chosenQuestions.filter(x => x.id !== e.id)\r\n\r\n\r\n\r\n let reducedSection = { ...currentSection, chosenQuestions: reducedChosenQuestions }\r\n\r\n\r\n let updatedRemovedQSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return reducedSection\r\n }\r\n\r\n\r\n return x\r\n })\r\n\r\n\r\n setMasterData({ ...masterData, sections: updatedRemovedQSections })\r\n\r\n }\r\n\r\n\r\n const handleRequired = (e) => {\r\n\r\n //if questions already had value from BE, no need local state change?\r\n\r\n let requiredQuestion = e\r\n\r\n // setRequired(prevRequired => !prevRequired)\r\n\r\n let sectionRequiredQuestion = currentSection?.chosenQuestions.map(x => {\r\n if (x.id === requiredQuestion.id) {\r\n\r\n\r\n return { ...x, required: !x.required }\r\n }\r\n\r\n return x\r\n })\r\n\r\n let adjustedCurrentSection = { ...currentSection, chosenQuestions: sectionRequiredQuestion }\r\n\r\n\r\n let requiredUpdatedSections = moveableSections.map(x => {\r\n\r\n\r\n if (x.sectionId === currentSection.sectionId) {\r\n return adjustedCurrentSection\r\n }\r\n\r\n\r\n return x\r\n })\r\n\r\n setMasterData({ ...masterData, sections: requiredUpdatedSections })\r\n\r\n\r\n }\r\n\r\n useEffect(() => {\r\n\r\n\r\n if (required !== undefined) {\r\n setIsChecked(required)\r\n }\r\n\r\n }, [required]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n {`${index + 1}. ${question_text}`}\r\n edit_button\r\n
\r\n
\r\n\r\n
\r\n \r\n\r\n {parent_theme ? parent_theme : theme ? theme : null}\r\n {parent_theme && theme ? \r\n {' > '}\r\n : null}\r\n\r\n {parent_theme && theme ? theme : null}\r\n\r\n \r\n
\r\n
\r\n Question Type: {displayQuestionType}\r\n Perspective: {implicit_flag ? 'Subjective' : 'Objective'}\r\n
\r\n\r\n {question_type === 'mcq' || question_type === 'dropdown' ? \r\n
\r\n
\r\n
\r\n Answers\r\n {choices?.map(x => {\r\n return (\r\n {x.value}\r\n\r\n )\r\n })}\r\n
\r\n
\r\n Branching\r\n {choices?.map(x => {\r\n return (\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n )\r\n })}\r\n\r\n
\r\n
\r\n
\r\n
: null}\r\n\r\n
\r\n
\r\n
\r\n\r\n handleRequired(questionDetails)}\r\n />\r\n\r\n \r\n\r\n\r\n \r\n \r\n\r\n
\r\n branching_button\r\n Branching\r\n
\r\n
\r\n drilldown_button\r\n Drill-down\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n\r\n \r\n {moveableSections.map(x => {\r\n\r\n return (\r\n sectionId !== x.sectionId ? handleMoveSection(x.sectionId)}> {`Move to Section ${moveableSections.indexOf(x) + 1}`} : {`Move to Section ${moveableSections.indexOf(x) + 1}`}\r\n )\r\n\r\n })}\r\n\r\n \r\n \r\n\r\n
\r\n\r\n
\r\n copy_button\r\n
\r\n
\r\n trash_button handleRemoveQuestion(questionDetails)} />\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {question_type === 'mcq' || question_type === 'dropdown' ? setQuestionOpen(!questionOpen)}\r\n aria-controls=\"answers-branching-main-container\"\r\n aria-expanded={questionOpen}>\r\n {questionOpen ? question-accordion-handle : question-accordion-handle }\r\n\r\n : question-accordion-handle }\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n )\r\n\r\n}\r\n\r\nexport default ViewSectionQuestion\r\n\r\n","import React, { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\n// import './section-component.styles.scss'\r\n\r\nimport AddInEditQuestionModal from \"../AddInEditQuestionsModal/add-in-questions-modal-component\";\r\nimport { Card } from \"react-bootstrap\";\r\nimport { Container } from \"react-bootstrap\";\r\nimport { Row } from \"react-bootstrap\";\r\nimport { Col } from \"react-bootstrap\";\r\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\";\r\nimport trashIcon from \"../../../../assets/trashicon.svg\";\r\nimport dndIcon from \"../../../../assets/dndicon.svg\";\r\nimport addIcon from \"../../../../assets/addcirclebutton.svg\";\r\nimport ViewSectionQuestion from \"./ViewSectionQuestions/ViewSectionQuestion/view-section-question-component\";\r\n\r\nconst ViewSection = ({ sectionId, masterData, setMasterData }) => {\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n const [showQuestionsModal, setShowQuestionsModal] = useState(false);\r\n\r\n //try this\r\n const currentSection = masterData?.sections?.find(\r\n (item) => item.sectionId === sectionId\r\n );\r\n\r\n //SECTIONS DND ____________________\r\n\r\n function handleOnDragEnd(result) {\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(currentSection.chosenQuestions);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n // let updatedSectionsQuestions = { ...currentSection, chosenQuestions: items }\r\n let updatedSections = masterData?.sections?.map((x) => {\r\n if (x.sectionId === currentSection.sectionId) {\r\n return { ...x, chosenQuestions: items };\r\n }\r\n return x;\r\n });\r\n\r\n let newMasterData = { ...masterData, sections: updatedSections };\r\n\r\n setMasterData(newMasterData);\r\n }\r\n\r\n const handleRemoveSection = (e) => {\r\n let reducedSections = masterData.sections.filter((x) => x.sectionId !== e);\r\n\r\n setMasterData({ ...masterData, sections: reducedSections });\r\n };\r\n\r\n const handleSetName = (e) => {\r\n let updatedNameSections = masterData?.sections.map((x) => {\r\n if (x.sectionId === sectionId) {\r\n return {\r\n ...x,\r\n section_name: e.target.value.replace(/[^\\x20-\\x7E]+/g, \"\"),\r\n };\r\n }\r\n\r\n return x;\r\n });\r\n\r\n setMasterData({ ...masterData, sections: updatedNameSections });\r\n };\r\n\r\n const handleSetDescription = (e) => {\r\n let updatedDescriptionSections = masterData?.sections.map((x) => {\r\n if (x.sectionId === sectionId) {\r\n return {\r\n ...x,\r\n section_description: e.target.value.replace(/[^\\x20-\\x7E]+/g, \"\"),\r\n };\r\n }\r\n\r\n return x;\r\n });\r\n\r\n setMasterData({ ...masterData, sections: updatedDescriptionSections });\r\n };\r\n\r\n //SECTIONS DND END ___________________\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Section Name:\r\n \r\n \r\n \r\n \r\n handleSetName(e)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Section Description:\r\n \r\n \r\n \r\n \r\n handleSetDescription(e)}\r\n />\r\n \r\n \r\n \r\n\r\n {showQuestionsModal ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n
\r\n {\r\n setShowQuestionsModal(true);\r\n }}\r\n />\r\n Add Questions\r\n
\r\n\r\n \r\n \r\n {(provided) => (\r\n \r\n {currentSection?.chosenQuestions?.length > 0 ? (\r\n currentSection.chosenQuestions.map(\r\n (element, index) => {\r\n return (\r\n \r\n {(provided) => (\r\n //
\r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n }\r\n )\r\n ) : (\r\n \r\n {null}\r\n \r\n )}\r\n\r\n {provided.placeholder}\r\n
\r\n )}\r\n \r\n \r\n\r\n \r\n
\r\n handleRemoveSection(sectionId)}\r\n />\r\n Delete Section\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ViewSection;\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport axios, { cancelToken } from \"../../../misc/modifiedAxios\";\r\n// import axios from 'axios'\r\nimport { Modal, Button, FormControl } from 'react-bootstrap';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'\r\nimport './edit-survey-modal.styles.scss'\r\nimport DatePicker from \"react-datepicker\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nimport dndIcon from '../../../assets/dndicon.svg'\r\nimport addIcon from '../../../assets/addcirclebutton.svg'\r\n\r\nimport Tabs from 'react-bootstrap/Tabs';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport { CSVLink } from \"react-csv\";\r\nimport \"../../../_vars.scss\"\r\nimport ViewSection from './ViewSection/view-section-component';\r\nimport Form from 'react-bootstrap/Form';\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst EditSurveyModal = ({ showEditModal, setEditModal }) => {\r\n\r\n\r\n\r\n\r\n\r\n const CancelToken = useRef(cancelToken)\r\n const cancel = useRef(undefined)\r\n\r\n\r\n const [key, setKey] = useState('questions'); //Tab initial view\r\n const history = useHistory()\r\n const [isLoading, setisLoading] = useState(false);\r\n const [isDuplicate, setIsDuplicate] = useState(false);\r\n\r\n const selectedSurveyLight = useSelector((state) => state.survey.selectedSurvey);\r\n\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n const [chosenQuestions, setChosenQuestions] = useState([])\r\n const [requiredQuestions, setRequiredQuestions] = useState([])\r\n\r\n\r\n //MASTER DATA FOR SECTIONS______________________________\r\n\r\n const questions = useSelector((state) => state.question.questions);\r\n\r\n const [masterData, setMasterData] = useState({\r\n\r\n allAvailableQuestions: [],\r\n sections: []\r\n })\r\n const [uploadedFooterImageID, setUploadedFooterImageID] = useState(null)\r\n\r\n\r\n console.log('CURRENT MASTERDATA', masterData)\r\n\r\n function handleOnDragEnd(result) {\r\n\r\n if (!result.destination) return;\r\n\r\n const items = Array.from(masterData?.sections);\r\n const [reorderedItem] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, reorderedItem);\r\n\r\n let newMasterData = { ...masterData, sections: items }\r\n\r\n // updateChoices(items)\r\n setMasterData(newMasterData)\r\n }\r\n\r\n\r\n const [selectedSurvey, setSelectedSurvey] = useState({\r\n\r\n survey_desc: '',\r\n survey_name: '',\r\n submit_confirm_message: '',\r\n start_date: '',\r\n end_date: '',\r\n status: '',\r\n sections: []\r\n\r\n });\r\n\r\n let survey_descRef = useRef()\r\n let survey_nameRef = useRef()\r\n let submit_confirm_messageRef = useRef()\r\n\r\n\r\n\r\n let selectedSurveyID = selectedSurveyLight?.id;\r\n\r\n useEffect(() => {\r\n\r\n const getSelectedSurvey = async () => {\r\n try {\r\n\r\n\r\n if (selectedSurveyID) {\r\n\r\n\r\n if (cancel.current !== undefined) {//uses .current property as this is how you manipulate the object in useRef\r\n cancel.current(); // same as running cancel() because once it is defined it is assigned a function with new CancelToken (also has .current)\r\n }\r\n setisLoading(true)\r\n\r\n const response = await axios.get(\r\n `/surveys/${selectedSurveyID}`,\r\n {\r\n cancelToken: new CancelToken.current(c => {\r\n cancel.current = c; // c is the identifier of the request, ON THE FIRST request it DEFINES the cancel variable, meaning\r\n }),\r\n }\r\n ).catch(\r\n // (error) => {\r\n // if (error.response.status === 403 || error.response.status === 401) {\r\n // localStorage.removeItem('jwt')\r\n // localStorage.removeItem('organisationId')\r\n // history.push('/')\r\n // }\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n }\r\n );\r\n\r\n if (response) {\r\n\r\n setSelectedSurvey(response.data)\r\n\r\n setisLoading(false)\r\n }\r\n\r\n }\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n\r\n }\r\n };\r\n\r\n getSelectedSurvey();\r\n }, [history, selectedSurveyID]);\r\n\r\n\r\n console.log('response: ', selectedSurvey)\r\n\r\n //________________________________________________\r\n\r\n\r\n const surveyStatusOptions = [\r\n {\r\n display: 'Live',\r\n value: 'live'\r\n },\r\n {\r\n display: 'Closed',\r\n value: 'closed'\r\n },\r\n {\r\n display: 'Draft',\r\n value: 'draft'\r\n }\r\n ]\r\n\r\n\r\n\r\n const surveyId = selectedSurvey?.id\r\n\r\n const [currentSurveyDetails, setCurrentSurveyDetails] = useState({\r\n\r\n survey_desc: '',\r\n survey_name: '',\r\n submit_confirm_message: '',\r\n start_date: '',\r\n end_date: '',\r\n status: ''\r\n\r\n })\r\n\r\n const { survey_desc, survey_name, start_date, end_date, status, submit_confirm_message } = currentSurveyDetails\r\n\r\n\r\n /// DATE FORMATTING\r\n let formatStartDate\r\n let formatEndDate\r\n\r\n\r\n if (start_date) {\r\n\r\n let startDate\r\n startDate = start_date\r\n formatStartDate = new Date(startDate)\r\n\r\n }\r\n\r\n if (end_date) {\r\n\r\n\r\n\r\n let endDate\r\n endDate = end_date\r\n\r\n formatEndDate = new Date(endDate)\r\n\r\n }\r\n\r\n\r\n\r\n\r\n //SET SURVEY DETAILS ON INITIAL RENDER OF THE SELECTED SURVEY\r\n useEffect(() => {\r\n\r\n const loadSurvey = () => {\r\n\r\n if (selectedSurvey !== null) {\r\n\r\n setCurrentSurveyDetails({\r\n\r\n survey_desc: selectedSurvey.survey_desc, //possibly can remove these two\r\n survey_name: selectedSurvey.survey_name,\r\n submit_confirm_message: selectedSurvey.submit_confirm_message,\r\n start_date: selectedSurvey.start_date,\r\n end_date: selectedSurvey.end_date,\r\n status: selectedSurvey.status\r\n // questions: selectedSurvey.questions,\r\n\r\n })\r\n survey_descRef.current = selectedSurvey.survey_desc\r\n survey_nameRef.current = selectedSurvey.survey_name\r\n submit_confirm_messageRef.current = selectedSurvey.submit_confirm_message\r\n\r\n }\r\n\r\n }\r\n\r\n loadSurvey();\r\n\r\n }, [selectedSurvey]);\r\n\r\n\r\n const dispatch = useDispatch()\r\n const [updatedSurvey, setUpdatedSurvey] = useState(null)\r\n const [createdDuplicateSurvey, setCreatedDuplicateSurvey] = useState(null)\r\n\r\n\r\n const duplicate = async () => {\r\n\r\n\r\n let convertedStartDate\r\n if (typeof currentSurveyDetails.start_date === 'object') {\r\n convertedStartDate = currentSurveyDetails.start_date.toISOString()\r\n }\r\n\r\n let convertedEndDate\r\n if (typeof currentSurveyDetails.end_date === 'object') {\r\n convertedEndDate = currentSurveyDetails.end_date.toISOString()\r\n }\r\n\r\n let duplicateName\r\n if (currentSurveyDetails.survey_name === selectedSurvey.survey_name) {\r\n // duplicateName = '[DUPLICATE] ' + selectedSurvey.survey_name\r\n duplicateName = '[DUPLICATE] ' + survey_nameRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, '')\r\n }\r\n if (currentSurveyDetails.survey_name !== selectedSurvey.survey_name) {\r\n // duplicateName = currentSurveyDetails.survey_name\r\n duplicateName = survey_nameRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, '')\r\n }\r\n\r\n\r\n try {\r\n setIsDuplicate(true)\r\n setisLoading(true)\r\n\r\n\r\n\r\n\r\n const duplicateSurvey = {\r\n\r\n // IF Survey status is Live, the chosen question's should be locked from edditing and the IDs are attached in this list:\r\n questionsList: currentSurveyDetails.status === 'live' ?\r\n\r\n masterData.sections.map(section => {\r\n\r\n return section.chosenQuestions.map(question => {\r\n return question.id\r\n })\r\n }).flat()\r\n\r\n : [],\r\n\r\n\r\n data: {\r\n og: organisationId,\r\n survey_desc: survey_descRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),\r\n survey_name: duplicateName,\r\n submit_confirm_message: submit_confirm_messageRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),\r\n footer_image: uploadedFooterImageID,\r\n sections: masterData.sections.map(section => {\r\n\r\n return {\r\n order: masterData.sections.indexOf(section),\r\n section_name: section?.section_name,\r\n section_desc: section?.section_description.replace(\r\n /[^\\x20-\\x7E\\n]+/g,///[^\\x20-\\x7E]+/g,\r\n ''\r\n ),\r\n section_questions: section.chosenQuestions.map(question => {\r\n return {\r\n\r\n order: section.chosenQuestions.indexOf(question) + 1,\r\n question: question.id,\r\n required_flag: question?.required === true ? true : false\r\n }\r\n })\r\n }\r\n\r\n }),\r\n start_date: convertedStartDate ? convertedStartDate : currentSurveyDetails.start_date,\r\n end_date: convertedEndDate ? convertedEndDate : currentSurveyDetails.end_date,\r\n status: currentSurveyDetails.status,\r\n }\r\n };\r\n\r\n const response = await axios.post(\r\n `/surveys/`,\r\n duplicateSurvey\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n\r\n const { id, survey_desc, survey_name, questions, start_date, end_date, url, status, section, footer_image, submit_confirm_message } = response.data\r\n\r\n setCreatedDuplicateSurvey({\r\n id,\r\n survey_desc,\r\n survey_name,\r\n submit_confirm_message,\r\n start_date,\r\n end_date,\r\n status,\r\n url,\r\n questions,\r\n section,\r\n footer_image,\r\n })\r\n\r\n setisLoading(false)\r\n setIsDuplicate(false)\r\n setChosenQuestions([])\r\n setRequiredQuestions([])\r\n setMasterData({\r\n\r\n allAvailableQuestions: [],\r\n sections: []\r\n })\r\n setEditModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n }\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n // STACKOVERFLOW: https://stackoverflow.com/questions/10830357/javascript-toisostring-ignores-timezone-offset Dustin Silk, 2016\r\n\r\n // const endDate = new Date(currentSurveyDetails.end_date.getTime() - (currentSurveyDetails.end_date.getTimezoneOffset() * 60000)).toISOString()\r\n // const startDate = new Date(currentSurveyDetails.start_date.getTime() - (currentSurveyDetails.start_date.getTimezoneOffset() * 60000)).toISOString()\r\n let convertedStartDate\r\n if (typeof currentSurveyDetails.start_date === 'object') {\r\n convertedStartDate = currentSurveyDetails.start_date.toISOString()\r\n }\r\n\r\n let convertedEndDate\r\n if (typeof currentSurveyDetails.end_date === 'object') {\r\n convertedEndDate = currentSurveyDetails.end_date.toISOString()\r\n }\r\n\r\n\r\n try {\r\n\r\n setIsDuplicate(false)\r\n setisLoading(true)\r\n\r\n // ----------------------------------- CHANGING THE LOCKED QUESTION LOGIC ALL SCENARIOS BASED ON SURVEY STATUS CHANGES -----------------------\r\n let questionsList\r\n // if past status is live\r\n if (selectedSurvey.status === 'live') {\r\n // if new status is live\r\n if (currentSurveyDetails.status === 'live') {\r\n questionsList = []\r\n // if new status is NOT live \r\n } else {\r\n questionsList = masterData.sections.map(section => {\r\n\r\n return section.chosenQuestions.map(question => {\r\n return question.id\r\n })\r\n }).flat()\r\n }\r\n }\r\n\r\n // if past status is live\r\n if (selectedSurvey.status !== 'live') {\r\n // if new status is live\r\n if (currentSurveyDetails.status === 'live') {\r\n questionsList = masterData.sections.map(section => {\r\n\r\n return section.chosenQuestions.map(question => {\r\n return question.id\r\n })\r\n }).flat()\r\n // if new status is NOT live \r\n } else {\r\n questionsList = []\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------------------------------\r\n\r\n const editedSurvey = {\r\n\r\n questionsList: questionsList,\r\n\r\n data: {\r\n // survey_desc: currentSurveyDetails.survey_desc.replace(\r\n // /[^\\x20-\\x7E\\n]+/g,///[^\\x20-\\x7E]+/g,\r\n // ''\r\n // ),\r\n survey_desc: survey_descRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),\r\n survey_name: survey_nameRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),//currentSurveyDetails.survey_name,\r\n submit_confirm_message: submit_confirm_messageRef.current.value.replace(/[^\\x20-\\x7E\\n]+/g, ''),\r\n footer_image: uploadedFooterImageID,\r\n status: currentSurveyDetails.status,\r\n start_date: convertedStartDate,\r\n end_date: convertedEndDate,\r\n sections: masterData.sections.map(section => {\r\n\r\n return {\r\n order: masterData.sections.indexOf(section),\r\n section_name: section?.section_name,\r\n section_desc: section?.section_description.replace(\r\n /[^\\x20-\\x7E\\n]+/g,///[^\\x20-\\x7E]+/g,\r\n ''\r\n ),\r\n section_questions: section.chosenQuestions.map(question => {\r\n return {\r\n component_id: question.component_id,\r\n\r\n order: section.chosenQuestions.indexOf(question) + 1,\r\n question: question.id,\r\n required_flag: question?.required === true ? true : false\r\n }\r\n })\r\n\r\n\r\n\r\n }\r\n\r\n })\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n const response = await axios.put(\r\n `/surveys/${surveyId}`,\r\n editedSurvey\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n\r\n })\r\n\r\n\r\n const { id, survey_desc, survey_name, questions, start_date, end_date, url, organisation, status, section, footer_image, submit_confirm_message } = response.data\r\n\r\n setUpdatedSurvey({\r\n id,\r\n survey_desc,\r\n survey_name,\r\n submit_confirm_message,\r\n start_date,\r\n end_date,\r\n status,\r\n questions,\r\n url,\r\n organisation,\r\n section,\r\n footer_image,\r\n })\r\n\r\n\r\n setisLoading(false)\r\n setChosenQuestions([])\r\n setRequiredQuestions([])\r\n setMasterData({\r\n\r\n allAvailableQuestions: [],\r\n sections: []\r\n })\r\n setEditModal(false);\r\n\r\n\r\n } catch (err) {\r\n console.log(err)\r\n\r\n }\r\n };\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (updatedSurvey !== null) {\r\n const setUpdatedSurvey = () => {\r\n dispatch({\r\n type: 'UPDATE_SURVEY_DETAILS',\r\n payload: updatedSurvey\r\n })\r\n }\r\n\r\n setUpdatedSurvey();\r\n }\r\n\r\n }, [dispatch, updatedSurvey]);\r\n\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (createdDuplicateSurvey !== null) {\r\n const setCreatedSurvey = () => {\r\n dispatch({\r\n type: 'ADD_NEW_SURVEY',\r\n payload: createdDuplicateSurvey\r\n })\r\n }\r\n\r\n setCreatedSurvey();\r\n }\r\n\r\n }, [dispatch, createdDuplicateSurvey]);\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n if (selectedSurvey?.questions) {\r\n\r\n\r\n // })\r\n\r\n\r\n const filtered = selectedSurvey?.questions.filter(x => {\r\n if (x.required_flag === true) {\r\n return x.question.id\r\n }\r\n })\r\n\r\n const initialRequiredQuestions = filtered.map(x => x.question.id)\r\n\r\n setChosenQuestions(selectedSurvey.questions)\r\n setRequiredQuestions(initialRequiredQuestions)\r\n }\r\n\r\n\r\n }, [selectedSurvey]);\r\n\r\n\r\n //_____________________________________ CSV RESPONSE _____________________________________//\r\n\r\n\r\n const [csv, setCSV] = useState([]);\r\n\r\n const getCSVRespones = () => {\r\n\r\n try {\r\n // let response\r\n\r\n\r\n // setIsDeleting(true)\r\n\r\n return (axios.get(\r\n `/surveys/responses/${surveyId}`)\r\n .catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n\r\n\r\n }))\r\n ;\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n const csvLinkEl = React.createRef();\r\n\r\n\r\n const downloadReport = async () => {\r\n const data = await getCSVRespones();\r\n\r\n setCSV(data.data.responses)\r\n\r\n\r\n }\r\n\r\n useEffect(() => {\r\n\r\n if (csv.length > 0) {\r\n csvLinkEl.current.link.click();\r\n }\r\n\r\n }, [csv])\r\n\r\n\r\n\r\n\r\n // ________________________________CSV RESPONSES END _____________________________//\r\n\r\n\r\n\r\n\r\n //INITIALISE AVAILABLE QUESTIONS FOR MASTEDATA SECTIONS\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n\r\n setMasterData({\r\n allAvailableQuestions: questions,//formatedQuestions,\r\n // Below is Formatting from BE to fit Components\r\n sections: selectedSurvey?.sections?.map(x => {\r\n\r\n\r\n return ({\r\n sectionId: selectedSurvey?.sections.indexOf(x) + 1,\r\n chosenQuestions: x.section_questions.map(y => {\r\n\r\n return ({\r\n ...y,\r\n required: y.required_flag,\r\n theme: y.theme,\r\n parent_theme: y.parent_theme,\r\n })\r\n }),\r\n section_description: x.section_desc,\r\n section_name: x.section_name\r\n\r\n })\r\n\r\n })\r\n })\r\n\r\n\r\n\r\n }, [questions, showEditModal, selectedSurvey]);\r\n //_____________________________________________________\r\n\r\n\r\n const uploadImage = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n try {\r\n const formData = new FormData()\r\n\r\n formData.append('files', e.target.files[0])\r\n formData.append('path', \"1\")\r\n\r\n const response = await axios({\r\n method: 'post',\r\n url: '/upload',\r\n data: formData\r\n })\r\n\r\n setUploadedFooterImageID(response.data[0]?.id)\r\n\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n }\r\n\r\n\r\n // const handleSetDescription = (e) => {\r\n\r\n // setCurrentSurveyDetails({\r\n // ...currentSurveyDetails, survey_desc: e.target.value\r\n // })\r\n\r\n // }\r\n\r\n return (\r\n\r\n {\r\n setChosenQuestions([])\r\n setRequiredQuestions([])\r\n setEditModal(false);\r\n\r\n }}>\r\n \r\n View\r\n {/* {\r\n setEditModal(false);\r\n }}>\r\n Close\r\n */}\r\n \r\n
\r\n \r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n {isDuplicate ? Creating Survey... : Updating Survey...}\r\n
\r\n
\r\n ) : (\r\n setKey(k)}\r\n className=\"mb-3\">\r\n \r\n \r\n \r\n \r\n Name *\r\n \r\n \r\n \r\n \r\n {\r\n\r\n // setCurrentSurveyDetails({\r\n // ...currentSurveyDetails, survey_name: e.target.value.replace(\r\n // /[^\\x20-\\x7E]+/g,\r\n // ''\r\n // )\r\n // })\r\n // // }\r\n // }}\r\n ref={survey_nameRef}\r\n />\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n Description *\r\n \r\n \r\n \r\n \r\n {\r\n\r\n // handleSetDescription(e)\r\n // // }\r\n // }}\r\n ref={survey_descRef}\r\n />\r\n \r\n \r\n \r\n\r\n \r\n \r\n {(provided) => (\r\n
\r\n {masterData?.sections?.map((element, index) => {\r\n\r\n\r\n\r\n return (\r\n\r\n\r\n \r\n {(provided) => (\r\n //
\r\n\r\n
\r\n
\r\n
\r\n dnd_button\r\n
\r\n\r\n \r\n
\r\n
\r\n\r\n )}\r\n \r\n\r\n )\r\n })}\r\n {provided.placeholder}\r\n
\r\n )}\r\n\r\n \r\n \r\n\r\n\r\n\r\n \r\n
\r\n add_button {\r\n setMasterData(\r\n\r\n {\r\n ...masterData,\r\n sections: [...masterData?.sections, {\r\n sectionId: masterData?.sections.length + 1,\r\n section_name: '',\r\n section_description: '',\r\n chosenQuestions: [],\r\n requiredQuestions: []\r\n }]\r\n }\r\n\r\n )\r\n }} />\r\n\r\n Add Section\r\n
\r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n Submit Confirm Message:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n // handleSetDescription(e)\r\n // // }\r\n // }}\r\n ref={submit_confirm_messageRef}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Icons:\r\n \r\n \r\n \r\n \r\n \r\n uploadImage(e)}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n {/* \r\n \r\n Start Date:\r\n \r\n \r\n \r\n \r\n setCurrentSurveyDetails({\r\n ...currentSurveyDetails, start_date: date\r\n })} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n End Date:\r\n \r\n \r\n \r\n \r\n setCurrentSurveyDetails({\r\n ...currentSurveyDetails, end_date: date\r\n }\r\n )}\r\n />\r\n \r\n */}\r\n \r\n \r\n Survey Status:\r\n\r\n setCurrentSurveyDetails({\r\n ...currentSurveyDetails, status: e.target.value\r\n })}\r\n\r\n\r\n >\r\n {surveyStatusOptions.map(x => (\r\n \r\n ))}\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n
\r\n Survey Responses:\r\n Response Count: {selectedSurvey?.response_count}\r\n
\r\n \r\n
\r\n \r\n \r\n\r\n {/* REFACTOR FROM CLASS COMPONENT */}\r\n\r\n
\r\n {/* */}\r\n \r\n\r\n \r\n\r\n\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n )}\r\n\r\n \r\n \r\n\r\n {\r\n duplicate();\r\n }}\r\n >\r\n Duplicate Survey\r\n \r\n
\r\n\r\n
{\r\n\r\n setChosenQuestions([])\r\n setRequiredQuestions([])\r\n // dispatch({\r\n // type: 'SELECT_SURVEY',\r\n // payload: {}\r\n // })\r\n setMasterData({\r\n\r\n allAvailableQuestions: [],\r\n sections: []\r\n })\r\n setEditModal(false);\r\n setIsDuplicate(false)\r\n\r\n }} >\r\n Cancel\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditSurveyModal;\r\n","import React from 'react'\r\n\r\nexport const DropdownFilter = ({\r\n column\r\n}) => {\r\n // Calculate the options for filtering\r\n // using the preFilteredRows\r\n\r\n const { filterValue, setFilter, preFilteredRows, id } = column\r\n\r\n\r\n const options = React.useMemo(() => {\r\n const options = new Set()\r\n preFilteredRows.forEach(row => {\r\n options.add(row.values[id])\r\n })\r\n return [...options.values()]\r\n }, [id, preFilteredRows])\r\n\r\n const displayOptions = options.map(option => {\r\n\r\n if (option === 'live') {\r\n return {\r\n value: 'live',\r\n label: 'Live'\r\n }\r\n }\r\n\r\n if (option === 'draft') {\r\n return {\r\n value: 'draft',\r\n label: 'Draft'\r\n }\r\n }\r\n\r\n\r\n if (option === 'closed') {\r\n return {\r\n value: 'closed',\r\n label: 'Closed'\r\n }\r\n }\r\n \r\n return null\r\n })\r\n\r\n // Render a multi-select box\r\n return (\r\n {\r\n\r\n\r\n setFilter(e.target.value || undefined)\r\n\r\n }}\r\n >\r\n \r\n {displayOptions.map((option, i) => (\r\n\r\n \r\n ))}\r\n \r\n )\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react'\r\nimport { useDispatch } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport styled from 'styled-components'\r\nimport { useTable, useFilters, useGlobalFilter, usePagination, useRowSelect } from 'react-table'\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport './survey-table.styles.scss'\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faShareAltSquare } from '@fortawesome/free-solid-svg-icons';\r\nimport { faPlusCircle, faTrash, faGripLines, faEdit } from '@fortawesome/free-solid-svg-icons';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nimport { ColumnFilter } from '../../Question-Components/QuestionTable/column-filter.component';\r\nimport { DropdownFilter } from './survey-status-dropdown-filter.component';\r\n\r\n\r\nimport editIcon from '../../../assets/editicon.svg'\r\nimport trashIcon from '../../../assets/trashicon.svg'\r\n\r\n\r\nconst Styles = styled.div`\r\npadding: 1rem;\r\n\r\noverflow-x: auto;\r\ntable {\r\n width:95%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n // border-bottom: 1px solid black;\r\n width: 5em\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n}\r\n`\r\n\r\n\r\n\r\nfunction Table({ columns, data }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n\r\n\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n prepareRow,\r\n } = useTable({\r\n columns,\r\n data,\r\n }, useFilters, useGlobalFilter, // useGlobalFilter!\r\n usePagination, useRowSelect)\r\n\r\n // Render the UI for your table\r\n return (\r\n \r\n\r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {rows.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}\r\n
{column.canFilter ? column.render('Filter') : null}
\r\n
{cell.render('Cell')}
\r\n )\r\n}\r\nconst deleteSurvey = async (e, history, dispatch, setisLoading) => {\r\n\r\n const surveyId = e.id\r\n\r\n try {\r\n let response\r\n\r\n setisLoading(true)\r\n\r\n response = await axios.delete(\r\n `/surveys/${surveyId}`).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n\r\n\r\n\r\n\r\n dispatch({\r\n type: 'DELETE_SURVEY',\r\n payload: response.data.data\r\n })\r\n\r\n setisLoading(false)\r\n\r\n }\r\n catch (err) {\r\n console.log('error', err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n\r\n}\r\n\r\nfunction SurveyTable({ surveys, setEditModal, setShowUrlModal }) {\r\n\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n\r\n const [survey, setSurvey] = useState(null)\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n\r\n\r\n if (survey !== null) {\r\n const selectSurvey = () => {\r\n\r\n\r\n\r\n dispatch({\r\n type: 'SELECT_SURVEY',\r\n payload: survey\r\n })\r\n }\r\n\r\n selectSurvey();\r\n }\r\n\r\n }, [dispatch, survey]);\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n\r\n () => [\r\n {\r\n Header: 'Name',\r\n accessor: 'survey_name',\r\n maxWidth: 70,\r\n minWidth: 50,\r\n width: 60,\r\n Filter: ColumnFilter,\r\n },\r\n {\r\n Header: 'Description',\r\n accessor: 'survey_desc',\r\n maxWidth: 70,\r\n minWidth: 50,\r\n width: 60,\r\n Filter: ColumnFilter,\r\n },\r\n // {\r\n // Header: 'Start Date',\r\n // accessor: 'start_date',\r\n // Cell: ({ cell }) => {\r\n\r\n // if (cell.row.original.start_date) {\r\n\r\n\r\n // var date = new Date(cell.row.original.start_date);\r\n // var dd = String(date.getDate()).padStart(2, '0');\r\n // var mm = String(date.getMonth() + 1).padStart(2, '0'); //January is 0!\r\n // var yyyy = date.getFullYear();\r\n\r\n // date = dd + '-' + mm + '-' + yyyy;\r\n\r\n\r\n // // var date = new Date(cell.row.original.start_date).toISOString()\r\n // //CUTS OFF TIME\r\n // // date = cell.row.original.start_date.slice(0, 10)\r\n // // date = date.split(\"-\").reverse().join(\"-\");\r\n // return date\r\n // }\r\n // return null\r\n\r\n // }\r\n // },\r\n // {\r\n // Header: 'End Date',\r\n // accessor: 'end_date',\r\n // Cell: ({ cell }) => {\r\n\r\n // if (cell.row.original.end_date) {\r\n\r\n // var date = new Date(cell.row.original.end_date);\r\n // var dd = String(date.getDate()).padStart(2, '0');\r\n // var mm = String(date.getMonth() + 1).padStart(2, '0'); //January is 0!\r\n // var yyyy = date.getFullYear();\r\n\r\n // date = dd + '-' + mm + '-' + yyyy;\r\n\r\n // return date\r\n // }\r\n // return null\r\n\r\n // }\r\n // },\r\n {\r\n Header: 'Status',\r\n accessor: 'status',\r\n maxWidth: 70,\r\n minWidth: 50,\r\n width: 60,\r\n Filter: DropdownFilter,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n if (cell.row.original.status) {\r\n\r\n if (cell.row.original.status === 'live') {\r\n return (\r\n
\r\n Live\r\n \r\n
)\r\n }\r\n\r\n if (cell.row.original.status === 'draft') {\r\n return (\r\n
\r\n Draft\r\n \r\n
)\r\n\r\n }\r\n\r\n if (cell.row.original.status === 'closed') {\r\n return (\r\n
\r\n Closed\r\n \r\n
)\r\n }\r\n\r\n\r\n }\r\n return null\r\n\r\n }\r\n },\r\n\r\n {\r\n Header: ' ',\r\n Filter: false,\r\n maxWidth: 70,\r\n minWidth: '40px',\r\n width: '60px',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n return {\r\n setSurvey(cell.row.original)\r\n\r\n setShowUrlModal(true)\r\n }}\r\n className='card-share-button'\r\n />\r\n\r\n }\r\n },\r\n {\r\n Header: ' ',\r\n Filter: false,\r\n maxWidth: 70,\r\n minWidth: '40px',\r\n width: '60px',\r\n Cell: ({ cell }) => {\r\n\r\n return (
\r\n edit_button {\r\n setSurvey(cell.row.original)\r\n\r\n setEditModal(true)\r\n }} />\r\n\r\n
)\r\n\r\n }\r\n },\r\n\r\n {\r\n Header: ' ',\r\n Filter: false,\r\n maxWidth: 70,\r\n minWidth: '40px',\r\n width: '60px',\r\n // defaultCanFilter: true,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n return (
\r\n trash_button {\r\n\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteSurvey(cell.row.original, history, dispatch, setisLoading)\r\n }} />\r\n
)\r\n\r\n\r\n }\r\n }\r\n\r\n ],\r\n [setEditModal, setShowUrlModal]\r\n )\r\n\r\n\r\n return (\r\n\r\n\r\n isLoading ? (\r\n
\r\n \r\n
\r\n Deleting Survey...\r\n
\r\n
\r\n )\r\n : (\r\n\r\n \r\n \r\n \r\n )\r\n )\r\n}\r\n\r\nexport default SurveyTable\r\n","import React, { useState, useEffect } from 'react';\r\nimport './survey-url-modal.styles.scss'\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport DatePicker from \"react-datepicker\";\r\n\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { MultiSelect } from \"react-multi-select-component\";\r\n\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\n\r\nconst SurveyURLModal = ({ showUrlModal, setShowUrlModal }) => {\r\n\r\n\r\n const selectedSurvey = useSelector((state) => state.survey.selectedSurvey);\r\n\r\n\r\n const [surveyUrl, serSurveyUrl] = useState('');\r\n\r\n const submit = () => {\r\n\r\n }\r\n\r\n\r\n return (\r\n\r\n {\r\n setShowUrlModal(false);\r\n // serSurveyUrl('')\r\n }}>\r\n \r\n Survey URL\r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n {selectedSurvey?.url} \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n navigator.clipboard.writeText(selectedSurvey.url)}\r\n className='card-button'\r\n />\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default SurveyURLModal;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport addIcon from '../../../assets/addcirclebutton.svg'\r\n\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport ErrorCatch from '../../Shared/Error/error-catch';\r\n\r\nimport CreateSurveyModal from '../CreateSurveyModal/create-survey-modal-component'\r\nimport EditSurveyModal from '../EditSurveyModal/edit-survey-modal-component'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport './survey-display.styles.scss';\r\nimport SurveyTable from '../SurveyTable/survey-table.component'\r\nimport SurveyURLModal from '../SurveyURLModal/survey-url-modal-component'\r\nimport { SpinnerCircularFixed } from 'spinners-react';\r\n\r\n\r\n\r\nconst SurveyDisplay = () => {\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n const surveys = useSelector((state) => state.survey.surveys);\r\n\r\n const history = useHistory()\r\n\r\n const dispatch = useDispatch()\r\n\r\n const organisationId = useSelector((state) => state.user.organisationId);\r\n\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n let controller = new AbortController();\r\n let controllerQuestions = new AbortController();\r\n (async () => {\r\n try {\r\n setisLoading(true)\r\n\r\n // GET AND SET QUESTIONS\r\n\r\n const response = await axios.get(\r\n // `http://localhost:1337/surveys?_sort=id:DESC`,\r\n \"/surveys\",\r\n {\r\n signal: controller.signal\r\n }\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n controller = null;\r\n\r\n\r\n dispatch({\r\n type: 'SET_SURVEYS',\r\n payload: response.data\r\n })\r\n\r\n\r\n //GET AND SET QUESTION GROUPS\r\n\r\n const responseQuestion = await axios.get(\r\n `/questions?ogs=${organisationId}&theme=`,\r\n {\r\n signal: controllerQuestions.signal\r\n }//change to themes\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n console.log('questionResponse', responseQuestion)\r\n\r\n\r\n\r\n controllerQuestions = null;\r\n\r\n dispatch({\r\n type: 'SET_QUESTIONS',\r\n payload: responseQuestion.data\r\n })\r\n\r\n setisLoading(false)\r\n\r\n } catch (err) {\r\n console.log(err)\r\n }\r\n })();\r\n\r\n return () => controller?.abort();\r\n }, [dispatch, history, organisationId]);\r\n\r\n\r\n\r\n const [showCreateModal, setCreateShowModal] = useState(false);\r\n const [showEditModal, setEditModal] = useState(false);\r\n const [showUrlModal, setShowUrlModal] = useState(false);\r\n\r\n\r\n return (\r\n\r\n
\r\n\r\n\r\n

\r\n Survey Details\r\n

\r\n\r\n\r\n
\r\n add_button {\r\n setCreateShowModal(true);\r\n }} />\r\n Create New Survey\r\n
\r\n\r\n\r\n\r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Loading Surveys...\r\n
\r\n
\r\n ) : (\r\n )}\r\n \r\n {showEditModal ? : null}\r\n {showUrlModal ? : null}\r\n
\r\n );\r\n\r\n};\r\n\r\nexport default SurveyDisplay;\r\n\r\n\r\n\r\n\r\n","import React, { useEffect } from 'react';\r\nimport './survey-schedule-builder.styles.scss';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport SideNavBar from '../../components/Shared/SideNavBar/sidenavbar.component';\r\n// import TabScheduleSurveySwitch from '../SurveyScheduleBuilder/tab-switch-survey-schedule.component'\r\nimport SurveyDisplay from '../../components/Survey-Components/SurveyDisplay/survey-display.component'\r\n\r\n\r\nconst SurveyScheduleBuilder = () => {\r\n\r\n const history = useHistory();\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n const jwt = localStorage.getItem('jwt')\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (!jwt) {\r\n history.push(\"/\")\r\n }\r\n\r\n\r\n }, []);\r\n\r\n\r\n return (\r\n
\r\n\r\n\r\n \r\n
\r\n {/* */}\r\n \r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default SurveyScheduleBuilder;","export default __webpack_public_path__ + \"static/media/EmpirisysSenseLogo.30b993f3.svg\";","import React from 'react';\r\nimport EmpirisysSenseLogo from '../assets/EmpirisysSenseLogo.svg';\r\nimport SCISLogo from '../assets/SCISLogo.svg';\r\nimport '../pages/Form/Form.scss';\r\n\r\nconst FormDisclaimer = (props) => {\r\n return (\r\n
\r\n Never submit authentication data such as logins and passwords through Empirisys Sense surveys.\r\n
\r\n {/* scis_logo */}\r\n empirisys_sense_logo\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FormDisclaimer;\r\n","export default __webpack_public_path__ + \"static/media/SCISLogo.dba96950.svg\";","import React from \"react\";\r\nimport { Modal, Button } from \"react-bootstrap\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Container } from \"react-bootstrap\";\r\nimport { Row } from \"react-bootstrap\";\r\nimport { Col } from \"react-bootstrap\";\r\n\r\nconst ErrorPopUp = ({ showErrorModal, setShowErrorModal, setError, error }) => {\r\n const { message, timeStamp, sessionID, status } = error;\r\n\r\n const history = useHistory();\r\n\r\n return (\r\n {\r\n setShowErrorModal(false);\r\n }}\r\n >\r\n \r\n \r\n {message}\r\n {` Error code: ${status} `}\r\n {` Session ID: ${sessionID} `}\r\n {timeStamp}\r\n
\r\n
\r\n \r\n {\r\n setShowErrorModal(false);\r\n setError({ message: \"\", status: \"\", sessionID: \"\", timeStamp: \"\" });\r\n if (localStorage.getItem(\"jwt\") !== null) {\r\n localStorage.removeItem(\"jwt\");\r\n localStorage.removeItem(\"organisationId\");\r\n history.push(\"/\");\r\n return;\r\n }\r\n }}\r\n >\r\n Close\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ErrorPopUp;\r\n","export default __webpack_public_path__ + \"static/media/SenseLogoNavy.7f5f615c.svg\";","import React from 'react';\r\nimport SenseLogoNavy from '../assets/SenseLogoNavy.svg';\r\nimport '../pages/Form/Form.scss'\r\n\r\nconst ErrorPageNotFound = ({ message }) => {\r\n return (\r\n
\r\n sense_logo\r\n {message}\r\n
\r\n );\r\n};\r\n\r\nexport default ErrorPageNotFound;\r\n","import React, { useState } from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\n\r\nconst LinkertQuestion = ({\r\n\tid,\r\n\ttext,\r\n\tquestion_type,\r\n\tsetError,\r\n\tsetAnswers,\r\n\tanswers,\r\n\tlikert_scale,\r\n\tquestionNumber,\r\n\trequired_flag,\r\n\tonInputChanged,\r\n\tsetValidatedQs\r\n}) => {\r\n\r\n\tconst radioName = uuidv4()\r\n\r\n\tconst { min_value, max_value, scale, na_flag } = likert_scale\r\n\r\n\t// NA logic, used for checking NA value, not the flag itself\r\n\tconst [notApplicable, setNotApplicable] = useState(false)\r\n\t// Value before NA was set, and if it wasn't then its null\r\n\tconst [previousChosenValue, setPreviousChosenValue] = useState(null)\r\n\r\n\tconst toggleNotApplicable = (e) => {\r\n\t\tsetNotApplicable(prevNotApplicable => !prevNotApplicable)\r\n\r\n\t\tif (!notApplicable) {\r\n\t\t\tsetAnswers({\r\n\t\t\t\t...answers,\r\n\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\tresponse: e.target.value,\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tsetAnswers({\r\n\t\t\t\t...answers,\r\n\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\tresponse: previousChosenValue,\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (required_flag) {\r\n\r\n\t\t\tif (!notApplicable) {\r\n\t\t\t\tonInputChanged(e, id)\r\n\t\t\t} else {\r\n\t\t\t\t// validation is looking for event.target.value, so therefore need to construct it into an object that mimicks that structure\r\n\t\t\t\tonInputChanged({ target: { value: previousChosenValue === null ? '' : previousChosenValue } }, id)\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\treturn (\r\n\t\t {required_flag ? \r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{questionNumber}. {text} \r\n\t\t\t\t\t*\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t
:\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{questionNumber}. {text}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\t{required_flag ? \r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tsetError('');\r\n\t\t\t\t\t\t\tsetPreviousChosenValue(e.target.value)\r\n\t\t\t\t\t\t\tsetAnswers({\r\n\t\t\t\t\t\t\t\t...answers,\r\n\t\t\t\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\t\t\t\t\tresponse: e.target.value,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tonInputChanged(e, id)\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{likert_scale.min_label}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{scale?.map(x => {\r\n\r\n\t\t\t\t\t\t\tif (scale.indexOf(x) === 0) {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{x}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t{x}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t)\r\n\r\n\t\t\t\t\t\t})}\r\n\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{likert_scale.max_label}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\r\n\t\t\t\t\t{na_flag ?
\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tThis question is not applicable to me.\r\n\t\t\t\t\t
: null}\r\n\t\t\t\t\r\n\t\t\t\t\t:\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tsetError('');\r\n\t\t\t\t\t\t\t\tsetPreviousChosenValue(e.target.value)\r\n\t\t\t\t\t\t\t\tsetAnswers({\r\n\t\t\t\t\t\t\t\t\t...answers,\r\n\t\t\t\t\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\t\t\t\t\t\tresponse: e.target.value,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{likert_scale.min_label}\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t{scale?.map(x => {\r\n\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{x}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t)\r\n\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{likert_scale.max_label}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t{na_flag ?\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tThis question is not applicable to me.\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t: null}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default LinkertQuestion;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nconst GridLikertQuestion = ({\r\n\tid,\r\n\ttext,\r\n\tquestion_type,\r\n\tgrid_likert_scale,\r\n\tsetAnswers,\r\n\tanswers,\r\n\tquestionNumber,\r\n\trequired_flag,\r\n\tonMultipleInputChanged\r\n}) => {\r\n\r\n\tconst { min_label, max_label, rows } = grid_likert_scale\r\n\r\n\tconst radioName = uuidv4()\r\n\r\n\tconst [chosenValues, setChosenValues] = useState([]);\r\n\r\n\tconst handleAddValue = (e) => {\r\n\r\n\t\t// let inputRow = e.target.name.split(' ')[0] //Old version of only getting first word of row\r\n\r\n\t\t// This way cuts off the uuid, and just saves the full string with all the words:\r\n\t\tlet str = e.target.name;\r\n\t\tlet lastIndex = str.lastIndexOf(\" \");\r\n\t\tlet inputRow = str.substring(0, lastIndex);\r\n\r\n\r\n\r\n\t\tlet foundExisting = false;\r\n\r\n\t\tconst updatedChosenValues = chosenValues.map((x) => {\r\n\t\t\tif (inputRow === x.row) {\r\n\t\t\t\tx.col = e.target.value;\r\n\t\t\t\tfoundExisting = true;\r\n\r\n\t\t\t\treturn x;\r\n\t\t\t} else {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (!foundExisting) {\r\n\t\t\tupdatedChosenValues.push({\r\n\t\t\t\trow: inputRow,\r\n\t\t\t\tcol: e.target.value,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\tsetChosenValues([...updatedChosenValues]);\r\n\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (chosenValues.length > 0) {\r\n\t\t\tconst UpdateParentAnswer = () => {\r\n\t\t\t\tlet response;\r\n\r\n\t\t\t\tresponse = {\r\n\t\t\t\t\t...answers,\r\n\r\n\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\tquestionType: `${question_type}`,\r\n\t\t\t\t\t\tresponse: chosenValues,\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetAnswers(response);\r\n\r\n\r\n\t\t\t\tif (required_flag) {\r\n\t\t\t\t\tonMultipleInputChanged(id, chosenValues, question_type)\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t};\r\n\t\t\tUpdateParentAnswer();\r\n\t\t}\r\n\t}, [chosenValues]);\r\n\r\n\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{required_flag ? \r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{questionNumber}. {text} \r\n\t\t\t\t\t\t*\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
:\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{questionNumber}. {text}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\r\n\t\t\t\r\n\r\n\r\n\t\t\t\t\r\n\r\n\r\n\r\n\r\n\t\t\t\t\t{/* JUST THE FIRST ROW WITH COLUMN HEADERS (could rework instead of loop)*/}\r\n\t\t\t\t\t{rows.map((label) => {\r\n\r\n\t\t\t\t\t\tif (label.order === 0) {\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{/*
\r\n\t\t\t\t\t\t\t\t\t\t{max_label}\r\n\t\t\t\t\t\t\t\t\t\t{min_label}\r\n\t\t\t\t\t\t\t\t\t
*/}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{label.value}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t{min_label}\r\n\t\t\t\t\t\t\t\t\t\t\t{max_label}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{label.value}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t{label.cols.map((x) => {\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{label.order === 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t?
{x.value}
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t:
{x.value}
}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t})}\r\n\r\n\t\t\t\t\t{/* INPUT RADIO BUTTONS AND LEFT SIDE LABEL LOOP ALL ROWS*/}\r\n\r\n\t\t\t\t\t{rows.map((label) => {\r\n\t\t\t\t\t\treturn (\r\n\r\n\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{label.value}\r\n\t\t\t\t\t\t\t\t\r\n\r\n\r\n\t\t\t\t\t\t\t\t{label.cols.map((x) => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t{required_flag ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default GridLikertQuestion;","import { parseZone } from 'moment';\r\nimport React, { useState } from 'react';\r\n\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nconst OpenQuestion = ({\r\n\tid,\r\n\ttext,\r\n\tquestion_type,\r\n\tsetError,\r\n\tsetAnswers,\r\n\tanswers,\r\n\tquestionNumber,\r\n\trequired_flag,\r\n\tonInputChanged,\r\n\r\n}) => {\r\n\tconst styles = {\r\n\t\tmarginBottom: '10px',\r\n\t\tmarginTop: '10px',\r\n\t};\r\n\r\n\r\n\tconst handleTextChange = (e) => {\r\n\r\n\t\tsetError('');\r\n\r\n\t\tif (required_flag) {\r\n\t\t\tonInputChanged(e)\r\n\t\t}\r\n\r\n\r\n\t\tif (e.target.value === '') {\r\n\t\t\tsetAnswers((answers) => ({\r\n\r\n\r\n\t\t\t\t...answers,\r\n\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\tresponse:\r\n\t\t\t\t\t\te.target.value.replace(\r\n\t\t\t\t\t\t\t/[^\\x20-\\x7E\\n]+/g,\r\n\t\t\t\t\t\t\t''\r\n\t\t\t\t\t\t),\r\n\t\t\t\t},\r\n\t\t\t}));\r\n\r\n\r\n\t\t} else {\r\n\t\t\tif (e.target.value.trim() !== '') {\r\n\t\t\t\tsetAnswers((answers) => ({\r\n\r\n\r\n\t\t\t\t\t...answers,\r\n\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\t\tresponse:\r\n\t\t\t\t\t\t\te.target.value.replace(\r\n\t\t\t\t\t\t\t\t/[^\\x20-\\x7E\\n]+/g,\r\n\t\t\t\t\t\t\t\t''\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t},\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{required_flag ? \r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{questionNumber}. {text} \r\n\t\t\t\t\t\t*\r\n\t\t\t\t\t
\r\n\t\t\t\t\t{question_type === 'short_answer' ? {'(max 250 characters)'} : {'(max 2500 characters)'}}\r\n\t\t\t\t\r\n\t\t\t
:\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{questionNumber}. {text}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t{question_type === 'short_answer' ? {'(max 250 characters)'} : {'(max 2500 characters)'}}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\t{required_flag ? \r\n\r\n\t\t\t\t\t{question_type === 'short_answer' ?\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t:\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\r\n\r\n\t\t\t\t\t:\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t{question_type === 'short_answer' ?\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default OpenQuestion;\r\n","import React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport Select, { components } from \"react-select\";\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport dropdownIcon from '../../../../assets/dropdownicon.svg'\r\n\r\nconst DropdownQuestion = ({\r\n\tid,\r\n\ttext,\r\n\tquestion_type,\r\n\tchoices,\r\n\tsetError,\r\n\tsetAnswers,\r\n\tanswers,\r\n\tquestionNumber,\r\n\trequired_flag,\r\n\tonInputChanged,\r\n}) => {\r\n\r\n\r\n\t// const [selectedOption, setSelectedOption] = useState({ value: '', label: 'None selected' });\r\n\tconst defaultValue = { value: '', label: 'None selected' }\r\n\r\n\tlet formattedOptions = choices.map(option => {\r\n\t\treturn { ...option, label: option.value }\r\n\r\n\t})\r\n\r\n\tlet options = [defaultValue, ...formattedOptions]\r\n\r\n\r\n\tconst DropdownIndicator = props => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\tdropdown_icon\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\r\n\tconst handleSelect = (e) => {\r\n\r\n\r\n\t\tsetAnswers({\r\n\t\t\t...answers,\r\n\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\tquestionType: `${question_type}`,\r\n\t\t\t\tresponse: e.value\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tif (required_flag) {\r\n\t\t\tonInputChanged(\r\n\t\t\t\t{\r\n\t\t\t\t\ttarget:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvalue: e.value,\r\n\t\t\t\t\t\tname: id,\r\n\t\t\t\t\t}\r\n\t\t\t\t}, id)\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{required_flag ? \r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{questionNumber}. {text} \r\n\t\t\t\t\t\t*\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
:\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{questionNumber}. {text}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t\r\n\r\n\t\t\t\t{required_flag ? \r\n\r\n\t\t\t\t\t ({\r\n\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'var(--background-color)',\r\n\t\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\t\tborder: '3px solid var(--form-text-color)',\r\n\t\t\t\t\t\t\t\tborderRadius: '8.61px',\r\n\t\t\t\t\t\t\t\theight: '50px',\r\n\t\t\t\t\t\t\t\tboxShadow: 'none',\r\n\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\tborderColor: \"revar(--form-text-color)\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\"@media only screen and (min-width: 490px)\": {\r\n\t\t\t\t\t\t\t\t\twidth: \"50%\",\r\n\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\tmenu: (baseStyles, state) => ({\r\n\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\tbackgroundColor: 'var(--background-color)',\r\n\t\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\t\tborder: '2px solid black',\r\n\t\t\t\t\t\t\t\tborderTop: 'none',\r\n\t\t\t\t\t\t\t\t\"@media only screen and (min-width: 490px)\": {\r\n\t\t\t\t\t\t\t\t\twidth: \"50%\",\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t}),\r\n\r\n\t\t\t\t\t\t\toption: (baseStyles, state) => ({\r\n\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\tbackground: state.isFocused\r\n\t\t\t\t\t\t\t\t\t? 'var(--color-r)'\r\n\t\t\t\t\t\t\t\t\t: state.isSelected\r\n\t\t\t\t\t\t\t\t\t\t? 'var(--color-p)'\r\n\t\t\t\t\t\t\t\t\t\t: null,\r\n\r\n\t\t\t\t\t\t\t\tcolor: state.isFocused\r\n\t\t\t\t\t\t\t\t\t? 'var(--color-u)'\r\n\t\t\t\t\t\t\t\t\t: state.isSelected\r\n\t\t\t\t\t\t\t\t\t\t? 'white'\r\n\t\t\t\t\t\t\t\t\t\t: 'var(--color-u)',\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\tindicatorSeparator: (baseStyles, state) => ({\r\n\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\tdisplay: 'none',\r\n\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonChange={handleSelect}\r\n\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t/>\r\n\r\n\r\n\t\t\t\t\r\n\r\n\r\n\t\t\t\t\t:\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t ({\r\n\t\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'var(--background-color)',\r\n\t\t\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\t\t\tborder: '3px solid var(--form-text-color)',\r\n\t\t\t\t\t\t\t\t\tborderRadius: '8.61px',\r\n\t\t\t\t\t\t\t\t\theight: '50px',\r\n\t\t\t\t\t\t\t\t\tboxShadow: 'none',\r\n\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\tborderColor: \"revar(--form-text-color)\"\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\"@media only screen and (min-width: 490px)\": {\r\n\t\t\t\t\t\t\t\t\t\twidth: \"50%\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\tmenu: (baseStyles, state) => ({\r\n\t\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: 'var(--background-color)',\r\n\t\t\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\t\t\tborder: '2px solid black',\r\n\t\t\t\t\t\t\t\t\tborderTop: 'none',\r\n\t\t\t\t\t\t\t\t\t\"@media only screen and (min-width: 490px)\": {\r\n\t\t\t\t\t\t\t\t\t\twidth: \"50%\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}),\r\n\r\n\t\t\t\t\t\t\t\toption: (baseStyles, state) => ({\r\n\t\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\t\tbackground: state.isFocused\r\n\t\t\t\t\t\t\t\t\t\t? 'var(--color-r)'\r\n\t\t\t\t\t\t\t\t\t\t: state.isSelected\r\n\t\t\t\t\t\t\t\t\t\t\t? 'var(--color-p)'\r\n\t\t\t\t\t\t\t\t\t\t\t: null,\r\n\r\n\t\t\t\t\t\t\t\t\tcolor: state.isFocused\r\n\t\t\t\t\t\t\t\t\t\t? 'var(--color-u)'\r\n\t\t\t\t\t\t\t\t\t\t: state.isSelected\r\n\t\t\t\t\t\t\t\t\t\t\t? 'white'\r\n\t\t\t\t\t\t\t\t\t\t\t: 'var(--color-u)',\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\tindicatorSeparator: (baseStyles, state) => ({\r\n\t\t\t\t\t\t\t\t\t...baseStyles,\r\n\t\t\t\t\t\t\t\t\tdisplay: 'none',\r\n\t\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\t}}\r\n\r\n\t\t\t\t\t\t\tonChange={handleSelect}\r\n\t\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default DropdownQuestion;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nconst MCQGridQuestion = ({\r\n\tid,\r\n\ttext,\r\n\tquestion_type,\r\n\tgrid_choices,\r\n\tsetError,\r\n\tsetAnswers,\r\n\tanswers,\r\n\trating,\r\n\tquestionNumber,\r\n\trequired_flag,\r\n\tonMultipleInputChanged\r\n}) => {\r\n\r\n\tconst radioName = uuidv4()\r\n\r\n\tconst [chosenValues, setChosenValues] = useState([]);\r\n\r\n\tconst handleAddValue = (e) => {\r\n\r\n\t\t// let inputRow = e.target.name.split(' ')[0] //Old version of only getting first word of row\r\n\r\n\t\t// This way cuts off the uuid, and just saves the full string with all the words:\r\n\t\tlet str = e.target.name;\r\n\t\tlet lastIndex = str.lastIndexOf(\" \");\r\n\t\tlet inputRow = str.substring(0, lastIndex);\r\n\r\n\r\n\r\n\t\tlet foundExisting = false;\r\n\r\n\t\tconst updatedChosenValues = chosenValues.map((x) => {\r\n\t\t\tif (inputRow === x.row) {\r\n\t\t\t\tx.col = e.target.value;\r\n\t\t\t\tfoundExisting = true;\r\n\r\n\t\t\t\treturn x;\r\n\t\t\t} else {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (!foundExisting) {\r\n\t\t\tupdatedChosenValues.push({\r\n\t\t\t\trow: inputRow,\r\n\t\t\t\tcol: e.target.value,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\tsetChosenValues([...updatedChosenValues]);\r\n\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (chosenValues.length > 0) {\r\n\t\t\tconst UpdateParentAnswer = () => {\r\n\t\t\t\tlet response;\r\n\r\n\t\t\t\tresponse = {\r\n\t\t\t\t\t...answers,\r\n\r\n\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\tquestionType: `${question_type}`,\r\n\t\t\t\t\t\tresponse: chosenValues,\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetAnswers(response);\r\n\r\n\r\n\t\t\t\tif (required_flag) {\r\n\t\t\t\t\tonMultipleInputChanged(id, chosenValues, question_type)\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t};\r\n\t\t\tUpdateParentAnswer();\r\n\t\t}\r\n\t}, [chosenValues]);\r\n\r\n\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{required_flag ? \r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{questionNumber}. {text} \r\n\t\t\t\t\t\t*\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
:\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{questionNumber}. {text}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\t{/* JUST THE FIRST ROW WITH COLUMN HEADERS (could rework instead of loop)*/}\r\n\t\t\t\t\t{grid_choices.map((label) => {\r\n\r\n\t\t\t\t\t\tif (label.order === 0) {\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{label.value}\r\n\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t{label.cols.map((x) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t{label.order === 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t?
{x.value}
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t:
{x.value}
}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t})}\r\n\r\n\t\t\t\t\t{/* INPUT RADIO BUTTONS AND LEFT SIDE LABEL LOOP ALL ROWS*/}\r\n\r\n\t\t\t\t\t{grid_choices.map((label) => {\r\n\t\t\t\t\t\treturn (\r\n\r\n\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{label.value}\r\n\t\t\t\t\t\t\t\t\r\n\r\n\r\n\t\t\t\t\t\t\t\t{label.cols.map((x) => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t{/* {label.order === 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t?
{x.value}
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t:
{x.value}
} */}\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t{required_flag ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default MCQGridQuestion;\r\n\r\n\r\n\r\n// {required_flag ?\r\n\r\n// \t\r\n\r\n// \t\t{/* JUST THE FIRST ROW WITH COLUMN HEADERS (could rework instead of loop)*/}\r\n// \t\t{grid_choices.map((label) => {\r\n\r\n// \t\t\tif (label.order === 0) {\r\n\r\n// \t\t\t\treturn (\r\n\r\n// \t\t\t\t\t
\r\n// \t\t\t\t\t\t\r\n// \t\t\t\t\t\t\t{label.value}\r\n// \t\t\t\t\t\t\r\n\r\n// \t\t\t\t\t\t{label.cols.map((x) => {\r\n// \t\t\t\t\t\t\treturn (\r\n// \t\t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t\t\t{label.order === 0\r\n// \t\t\t\t\t\t\t\t\t\t?
{x.value}
\r\n// \t\t\t\t\t\t\t\t\t\t:
{x.value}
}\r\n\r\n// \t\t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t);\r\n// \t\t\t\t\t\t})}\r\n// \t\t\t\t\t
\r\n\r\n// \t\t\t\t);\r\n// \t\t\t}\r\n\r\n// \t\t})}\r\n\r\n// \t\t{/* INPUT RADIO BUTTONS AND LEFT SIDE LABEL LOOP ALL ROWS*/}\r\n\r\n// \t\t{grid_choices.map((label) => {\r\n// \t\t\treturn (\r\n\r\n\r\n// \t\t\t\t
\r\n// \t\t\t\t\t\r\n// \t\t\t\t\t\t{label.value}\r\n// \t\t\t\t\t\r\n\r\n\r\n// \t\t\t\t\t{label.cols.map((x) => {\r\n// \t\t\t\t\t\treturn (\r\n// \t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t\t{/* {label.order === 0\r\n// \t\t\t\t\t\t\t\t\t?
{x.value}
\r\n// \t\t\t\t\t\t\t\t\t:
{x.value}
} */}\r\n// \t\t\t\t\t\t\t\t
\r\n\r\n// \t\t\t\t\t\t\t\t\t\r\n// \t\t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t);\r\n// \t\t\t\t\t})}\r\n// \t\t\t\t
\r\n\r\n// \t\t\t);\r\n// \t\t})}\r\n\r\n// \t\r\n\r\n// \t:\r\n\r\n// \t\r\n\r\n// \t\t{/* JUST THE FIRST ROW WITH COLUMN HEADERS (could rework instead of loop)*/}\r\n// \t\t{grid_choices.map((label) => {\r\n\r\n// \t\t\tif (label.order === 0) {\r\n\r\n// \t\t\t\treturn (\r\n\r\n// \t\t\t\t\t
\r\n// \t\t\t\t\t\t\r\n// \t\t\t\t\t\t\t{label.value}\r\n// \t\t\t\t\t\t\r\n\r\n// \t\t\t\t\t\t{label.cols.map((x) => {\r\n// \t\t\t\t\t\t\treturn (\r\n// \t\t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t\t\t{label.order === 0\r\n// \t\t\t\t\t\t\t\t\t\t?
{x.value}
\r\n// \t\t\t\t\t\t\t\t\t\t:
{x.value}
}\r\n\r\n// \t\t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t);\r\n// \t\t\t\t\t\t})}\r\n// \t\t\t\t\t
\r\n\r\n// \t\t\t\t);\r\n// \t\t\t}\r\n\r\n// \t\t})}\r\n\r\n// \t\t{/* INPUT RADIO BUTTONS AND LEFT SIDE LABEL LOOP ALL ROWS*/}\r\n\r\n// \t\t{grid_choices.map((label) => {\r\n// \t\t\treturn (\r\n\r\n\r\n// \t\t\t\t
\r\n// \t\t\t\t\t\r\n// \t\t\t\t\t\t{label.value}\r\n// \t\t\t\t\t\r\n\r\n\r\n// \t\t\t\t\t{label.cols.map((x) => {\r\n// \t\t\t\t\t\treturn (\r\n// \t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t\t{/* {label.order === 0\r\n// \t\t\t\t\t\t\t\t\t?
{x.value}
\r\n// \t\t\t\t\t\t\t\t\t:
{x.value}
} */}\r\n// \t\t\t\t\t\t\t\t
\r\n\r\n// \t\t\t\t\t\t\t\t\t\r\n// \t\t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t
\r\n// \t\t\t\t\t\t);\r\n// \t\t\t\t\t})}\r\n// \t\t\t\t
\r\n\r\n// \t\t\t);\r\n// \t\t})}\r\n\r\n// \t}","import React from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nconst MCQQuestion = ({\r\n\tid,\r\n\ttext,\r\n\tquestion_type,\r\n\tsetError,\r\n\tsetAnswers,\r\n\tanswers,\r\n\trating,\r\n\tchoices,\r\n\tquestionNumber,\r\n\trequired_flag,\r\n\tonInputChanged\r\n}) => {\r\n\r\n\tconst radioName = uuidv4()\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{required_flag ? \r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{questionNumber}. {text} \r\n\t\t\t\t\t\t*\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
:\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{questionNumber}. {text}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\t{required_flag ? \r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tsetError('');\r\n\t\t\t\t\t\t\tsetAnswers({\r\n\t\t\t\t\t\t\t\t...answers,\r\n\t\t\t\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\t\t\t\t\tresponse: e.target.value,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tonInputChanged(e, id)\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\tStrongly Disagree\r\n\t\t\t\t\t\t */}\r\n\r\n\t\t\t\t\t\t{choices.map((x) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{x.value}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\t:\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tsetError('');\r\n\t\t\t\t\t\t\t\tsetAnswers({\r\n\t\t\t\t\t\t\t\t\t...answers,\r\n\t\t\t\t\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\t\t\t\t\tquestionType: question_type,\r\n\t\t\t\t\t\t\t\t\t\tresponse: e.target.value,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\tStrongly Disagree\r\n\t\t\t\t\t\t */}\r\n\r\n\t\t\t\t\t\t\t{choices.map((x) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{x.value}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default MCQQuestion;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\nconst CheckboxQuestion = ({\r\n\tid,\r\n\ttext,\r\n\tquestion_type,\r\n\tsetError,\r\n\tsetAnswers,\r\n\tanswers,\r\n\trating,\r\n\tchoices,\r\n\tquestionNumber,\r\n\trequired_flag,\r\n\tonMultipleInputChanged\r\n}) => {\r\n\r\n\tconst [chosenValues, setChosenValues] = useState([]);\r\n\r\n\tconst [count, setCount] = useState(0);\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\tif (count > 0) {\r\n\t\t\tconst UpdateParentAnswer = () => {\r\n\t\t\t\tlet response;\r\n\r\n\t\t\t\tresponse = {\r\n\t\t\t\t\t...answers,\r\n\r\n\t\t\t\t\t[`Question_${parseInt(id)}`]: {\r\n\t\t\t\t\t\tquestionID: parseInt(id),\r\n\t\t\t\t\t\tquestionType: `${question_type}`,\r\n\t\t\t\t\t\tresponse: chosenValues,\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetAnswers(response);\r\n\r\n\t\t\t\tif (required_flag) {\r\n\t\t\t\t\tonMultipleInputChanged(id, chosenValues, question_type)\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t};\r\n\t\t\tUpdateParentAnswer();\r\n\t\t}\r\n\r\n\t\tsetCount(1);\r\n\t}, [chosenValues]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{required_flag ? \r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{questionNumber}. {text} \r\n\t\t\t\t\t\t*\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
:\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{questionNumber}. {text}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\t{required_flag ? (chosenValues.length > 0 ? \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{choices.map((x) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t {\r\n\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchosenValues.includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet updatedValues =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchosenValues.filter(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(x) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tx !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetChosenValues(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdatedValues\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t// let updatedValues = chosenValues.push(e.target.value)\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetChosenValues([\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...chosenValues,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\ttype='checkbox'\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={x.value}\r\n\t\t\t\t\t\t\t\t\t\t\tname={id}\r\n\t\t\t\t\t\t\t\t\t\t\tclassName='linkert-radios-mcq'\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t{x.value}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\r\n\t\t\t\t : \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{choices.map((x) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchosenValues.includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet updatedValues =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchosenValues.filter(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(x) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tx !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetChosenValues(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdatedValues\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t// let updatedValues = chosenValues.push(e.target.value)\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetChosenValues([\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...chosenValues,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\ttype='checkbox'\r\n\t\t\t\t\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={x.value}\r\n\t\t\t\t\t\t\t\t\t\t\tname={id}\r\n\t\t\t\t\t\t\t\t\t\t\tclassName='linkert-radios-mcq'\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t{x.value}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\r\n\t\t\t\t) :\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{choices.map((x) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchosenValues.includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet updatedValues =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchosenValues.filter(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(x) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tx !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetChosenValues(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdatedValues\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// let updatedValues = chosenValues.push(e.target.value)\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetChosenValues([\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...chosenValues,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.target.value,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\ttype='checkbox'\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={x.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\tname={id}\r\n\t\t\t\t\t\t\t\t\t\t\t\tclassName='linkert-radios-mcq'\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t{x.value}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default CheckboxQuestion;\r\n","import React from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\n\r\n\r\n\r\nconst ClearSurveyWarningPopUp = ({\r\n showWarningModal,\r\n setShowWarningModal,\r\n\r\n setLikerQs,\r\n setOpenQs,\r\n setDropdownQs,\r\n setMcqGridQs,\r\n setMcqQs,\r\n setGridLikertQs,\r\n setCheckboxQs,\r\n setSurvey,\r\n}) => {\r\n\r\n\r\n return (\r\n {\r\n setShowWarningModal(false);\r\n }}>\r\n \r\n \r\n This will clear all of your responses from the survey, are you sure?\r\n \r\n \r\n \r\n {\r\n setShowWarningModal(false);\r\n }}>\r\n Cancel\r\n \r\n {\r\n // setLikerQs([])\r\n // setOpenQs([])\r\n // setDropdownQs([])\r\n // setMcqGridQs([])\r\n // setMcqQs([])\r\n // setGridLikertQs([])\r\n // setCheckboxQs([])\r\n // setSurvey({})\r\n // setShowWarningModal(false);\r\n window.location.reload(false);\r\n }}>\r\n Yes\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ClearSurveyWarningPopUp;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { some, isEmpty } from 'lodash'\r\nimport { Button, Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport { FormGroup } from 'react-bootstrap';\r\n\r\nimport LinkertQuestion from '../../../components/Form/Questions/LinkertQuestion/LinkertQuestion';\r\nimport GridLikertQuestion from '../../../components/Form/Questions/GridLikertQuestion/GridLikertQuestion';\r\nimport OpenQuestion from '../../../components/Form/Questions/OpenQuestion/OpenQuestion';\r\nimport DropdownQuestion from '../../../components/Form/Questions/DropdownQuestion/DropdownQuestion';\r\nimport MCQGridQuestion from '../../../components/Form/Questions/MCQGridQuestion/MCQGridQuestion';\r\nimport MCQQuestion from '../../../components/Form/Questions/MCQQuestion/MCQQuestion';\r\nimport CheckboxQuestion from '../../../components/Form/Questions/CheckboxQuestion/CheckboxQuestion';\r\n\r\nimport ClearSurveyWarningPopUp from '../../../misc/ClearSurveyWarningPopUp';\r\n\r\nconst ActionButtons = (props) => {\r\n\r\n\tconst { setLikerQs,\r\n\t\tsetOpenQs,\r\n\t\tsetDropdownQs,\r\n\t\tsetMcqGridQs,\r\n\t\tsetMcqQs,\r\n\t\tsetGridLikertQs,\r\n\t\tsetCheckboxQs,\r\n\t\tsetSurvey,\r\n\t\tanswers\r\n\t} = props\r\n\r\n\tconst handleBack = () => {\r\n\t\tprops.previousStep();\r\n\t};\r\n\r\n\tconst handleNext = () => {\r\n\r\n\t\tprops.nextStep();\r\n\t\t// window.scrollTo(0, 0)\r\n\t\t// window.scrollTo({\r\n\t\t// \ttop: 0,\r\n\t\t// \tleft: 0,\r\n\t\t// \tbehavior: 'smooth',\r\n\t\t// })\r\n\t};\r\n\r\n\tconst handleFinish = () => {\r\n\t\tprops.lastStep();\r\n\r\n\t};\r\n\r\n\r\n\tconst [showWarningModal, setShowWarningModal] = useState(false);\r\n\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
{\r\n\r\n\t\t\t\t\t\t\tsetShowWarningModal(true)\r\n\t\t\t\t\t\t\t// setLikerQs([])\r\n\t\t\t\t\t\t\t// setOpenQs([])\r\n\t\t\t\t\t\t\t// setDropdownQs([])\r\n\t\t\t\t\t\t\t// setMcqGridQs([])\r\n\t\t\t\t\t\t\t// setMcqQs([])\r\n\t\t\t\t\t\t\t// setGridLikertQs([])\r\n\t\t\t\t\t\t\t// setCheckboxQs([])\r\n\t\t\t\t\t\t\t// setSurvey({})\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\tClear Survey\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{props.currentStep > 1 && (\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\tBack\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{props.currentStep < props.totalSteps && (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{props.currentStep === props.totalSteps && (\r\n\r\n\r\n\t\t\t\t\t\t\t// \r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t{showWarningModal ? : null}\r\n\t\t
\r\n\t);\r\n};\r\n\r\n\r\nconst FormSection = (props) => {\r\n\r\n\tlet {\r\n\t\tanswers,\r\n\t\tsetAnswers,\r\n\t\tlikertQs,\r\n\t\topenQs,\r\n\t\tdropdownQs,\r\n\t\tmcqGridQs,\r\n\t\tmcqQs,\r\n\t\tgridLikertQs,\r\n\t\tcheckboxQs,\r\n\t\tsection,\r\n\t\tactiveStep\r\n\t} = props\r\n\r\n\r\n\tlet questionNumber = 0;\r\n\r\n\r\n\tconst requiredQs = section?.section_questions?.filter(x => x.required_flag === true)\r\n\r\n\tconst formatedRequiredQs = requiredQs.map(x => { return { [x.id]: '' } })\r\n\r\n\tconst reducedFormatedQs = Object.assign({}, ...formatedRequiredQs);\r\n\t//______________ VALIDATION _______________________\r\n\r\n\tconst [validatedQs, setValidatedQs] = useState(reducedFormatedQs);\r\n\r\n\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst onInputChanged = (event, id) => {\r\n\r\n\t\tconst targetName = event.target.name;\r\n\t\tconst targetValue = event.target.value;\r\n\r\n\t\tif (id) {\r\n\r\n\t\t\treturn setValidatedQs((validatedQs) => ({\r\n\t\t\t\t...validatedQs,\r\n\t\t\t\t[id]: targetValue\r\n\t\t\t}));\r\n\r\n\t\t}\r\n\r\n\r\n\t\tsetValidatedQs((validatedQs) => ({\r\n\t\t\t...validatedQs,\r\n\t\t\t[targetName]: targetValue\r\n\t\t}));\r\n\r\n\r\n\t};\r\n\r\n\tconst onMultipleInputChanged = (id, chosenValues, question_type) => {\r\n\r\n\r\n\r\n\r\n\t\tsetValidatedQs((validatedQs) => ({\r\n\t\t\t...validatedQs,\r\n\t\t\t[id]: chosenValues.length > 0 ? chosenValues : ''\r\n\t\t}));\r\n\r\n\t};\r\n\r\n\r\n\r\n\tconst validate = () => {\r\n\r\n\t\tlet exists = Object.values(validatedQs).includes(\"\");\r\n\r\n\r\n\t\tif (exists) {\r\n\t\t\tsetError(\"Please complete all required fields marked '*'\");\r\n\t\t\twindow.scrollTo(0, 0)\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\tsetError(\"\");\r\n\t\t\tprops.nextStep();\r\n\t\t\t// props.userCallback(validatedQs);\r\n\t\t}\r\n\t};\r\n\r\n\tconst validateSubmission = () => {\r\n\t\tlet exists = Object.values(validatedQs).includes(\"\");\r\n\r\n\t\tif (exists) {\r\n\t\t\tsetError(\"Please complete all required fields marked '*'\");\r\n\t\t\twindow.scrollTo(0, 0)\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsetError(\"\");\r\n\t\t\tprops.submit();\r\n\t\t\t// props.userCallback(validatedQs);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\t// __________________ VALIDATION END _________________________\r\n\r\n\tuseEffect(() => {\r\n\r\n\t\twindow.scrollTo(0, 0)\r\n\r\n\t}, [activeStep])\r\n\r\n\treturn (\r\n\r\n\t\t<>\r\n\r\n\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{section.section_name}

\r\n\r\n\t\t\t\t\t\t {section.section_desc}\r\n\r\n\r\n\t\t\t\t\t\t{error &&

{error}

}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\r\n\r\n\t\t\t\r\n\r\n\r\n\r\n\t\t\t\t{section?.section_questions?.map((q) => {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tq.question_type ===\r\n\t\t\t\t\t\t'dropdown'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{dropdownQs.map(\r\n\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\tdropdownLine\r\n\t\t\t\t\t\t\t\t\t) => {\r\n\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\tq.id ===\r\n\t\t\t\t\t\t\t\t\t\t\tdropdownLine.id\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tquestionNumber++\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion,\r\n\t\t\t\t\t\t\t\t\t\t\t\tchoices,\r\n\t\t\t\t\t\t\t\t\t\t\t\tid,\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion_type,\r\n\t\t\t\t\t\t\t\t\t\t\t\trequired_flag\r\n\t\t\t\t\t\t\t\t\t\t\t} = dropdownLine;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tq.question_type ===\r\n\t\t\t\t\t\t'likert_scale'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{likertQs.map(\r\n\t\t\t\t\t\t\t\t\t(line) => {\r\n\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\tq.id ===\r\n\t\t\t\t\t\t\t\t\t\t\tline.id\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tquestionNumber++;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion,\r\n\t\t\t\t\t\t\t\t\t\t\t\tid,\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion_type,\r\n\t\t\t\t\t\t\t\t\t\t\t\trequired_flag,\r\n\t\t\t\t\t\t\t\t\t\t\t\tlikert_scale\r\n\t\t\t\t\t\t\t\t\t\t\t} = line;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tq.question_type ===\r\n\t\t\t\t\t\t'short_answer' ||\r\n\t\t\t\t\t\tq.question_type ===\r\n\t\t\t\t\t\t'paragraph'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{openQs.map(\r\n\t\t\t\t\t\t\t\t\t(openLine) => {\r\n\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\tq.id ===\r\n\t\t\t\t\t\t\t\t\t\t\topenLine.id\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tquestionNumber++;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion,\r\n\t\t\t\t\t\t\t\t\t\t\t\tid,\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion_type,\r\n\t\t\t\t\t\t\t\t\t\t\t\trequired_flag\r\n\t\t\t\t\t\t\t\t\t\t\t} = openLine;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tq.question_type ===\r\n\t\t\t\t\t\t'grid_mcq'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{mcqGridQs.map(\r\n\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\tdropdownLine\r\n\t\t\t\t\t\t\t\t\t) => {\r\n\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\tq.id ===\r\n\t\t\t\t\t\t\t\t\t\t\tdropdownLine.id\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tquestionNumber++;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion,\r\n\t\t\t\t\t\t\t\t\t\t\t\tgrid_choices,\r\n\t\t\t\t\t\t\t\t\t\t\t\tid,\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion_type,\r\n\t\t\t\t\t\t\t\t\t\t\t\trequired_flag\r\n\t\t\t\t\t\t\t\t\t\t\t} = dropdownLine;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (q.question_type === 'mcq') {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{mcqQs.map(\r\n\t\t\t\t\t\t\t\t\t(line) => {\r\n\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\tq.id ===\r\n\t\t\t\t\t\t\t\t\t\t\tline.id\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tquestionNumber++;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion,\r\n\t\t\t\t\t\t\t\t\t\t\t\tchoices,\r\n\t\t\t\t\t\t\t\t\t\t\t\tid,\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion_type,\r\n\t\t\t\t\t\t\t\t\t\t\t\trequired_flag\r\n\t\t\t\t\t\t\t\t\t\t\t} = line;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tq.question_type ===\r\n\t\t\t\t\t\t'checkbox'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{checkboxQs.map(\r\n\t\t\t\t\t\t\t\t\t(line) => {\r\n\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\tq.id ===\r\n\t\t\t\t\t\t\t\t\t\t\tline.id\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tquestionNumber++;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion,\r\n\t\t\t\t\t\t\t\t\t\t\t\tchoices,\r\n\t\t\t\t\t\t\t\t\t\t\t\tid,\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion_type,\r\n\t\t\t\t\t\t\t\t\t\t\t\trequired_flag\r\n\t\t\t\t\t\t\t\t\t\t\t} = line;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tq.question_type ===\r\n\t\t\t\t\t\t'grid_likert_scale'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t{gridLikertQs.map(\r\n\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\tdropdownLine\r\n\t\t\t\t\t\t\t\t\t) => {\r\n\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\tq.id ===\r\n\t\t\t\t\t\t\t\t\t\t\tdropdownLine.id\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tquestionNumber++;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion,\r\n\t\t\t\t\t\t\t\t\t\t\t\tgrid_likert_scale,\r\n\t\t\t\t\t\t\t\t\t\t\t\tid,\r\n\t\t\t\t\t\t\t\t\t\t\t\tquestion_type,\r\n\t\t\t\t\t\t\t\t\t\t\t\trequired_flag\r\n\t\t\t\t\t\t\t\t\t\t\t} = dropdownLine;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t})}\r\n\r\n\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t{/* Next Phase Clear Section:\r\n\t\t\t\t\r\n\t\t\t\t1. FormGroup change to form\r\n\t\t\t\t2. { setAnswers({}) }} />\r\n\t\t\t\t Work on this, reset the form which is a section essentially of its inputs, \r\n\t\t\t\t but also need to filter out answers from setAnswers/answers by section id, if questions include that.\r\n\t\t\t\t*/}\r\n\r\n\r\n\r\n\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default FormSection;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { NavLink, useHistory, useParams, Redirect } from \"react-router-dom\";\r\n// import Axios from 'axios';\r\nimport axios from \"../../misc/modifiedAxios\";\r\nimport { useUA } from \"use-ua-parser-js\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport \"./Form.scss\";\r\n\r\nimport FormDisclaimer from \"../../misc/FormDisclaimer\";\r\n\r\nimport { Container } from \"react-bootstrap\";\r\nimport { Row } from \"react-bootstrap\";\r\nimport { Col } from \"react-bootstrap\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { SpinnerCircularFixed } from \"spinners-react\"; //https://adexin.github.io/spinners/\r\n\r\nimport ErrorPopUp from \"../../misc/ErrorPopUp\";\r\nimport ErrorPageNotFound from \"../../misc/ErrorPageNotFound\";\r\nimport StepWizard from \"react-step-wizard\";\r\nimport FormSection from \"./FormSection/Form-Section.component\";\r\n\r\nconst Form = () => {\r\n const [activeStep, setActiveStep] = useState(0);\r\n\r\n const customTransition = {\r\n enterRight: \"none\",\r\n enterLeft: \"none\",\r\n exitRight: \"none\",\r\n exitLeft: \"none\",\r\n intro: \"none\",\r\n };\r\n\r\n const handleStepChange = (e) => {\r\n setActiveStep(e.activeStep - 1);\r\n };\r\n\r\n //_________________________ VALIDATION\r\n\r\n const [userLocationData, setUserLocationData] = useState();\r\n const userBrowserData = useUA();\r\n\r\n const [answers, setAnswers] = useState({});\r\n const [sessionID, setSessionID] = useState(\"Not set\");\r\n\r\n const [error, setError] = useState({\r\n message: \"\",\r\n status: \"\",\r\n sessionID: \"\",\r\n timeStamp: \"\",\r\n });\r\n const [showErrorModal, setShowErrorModal] = useState(false);\r\n\r\n const [noQuestions, setNoQuestions] = useState(false);\r\n const [unavailableMessage, setUnavailableMessage] = useState(\"\");\r\n const [adminUnavailableMsg, setAdminUnavailableMsg] = useState(\"\");\r\n\r\n const [likertQs, setLikerQs] = useState([]);\r\n const [openQs, setOpenQs] = useState([]);\r\n const [dropdownQs, setDropdownQs] = useState([]);\r\n const [mcqGridQs, setMcqGridQs] = useState([]);\r\n const [gridLikertQs, setGridLikertQs] = useState([]);\r\n const [mcqQs, setMcqQs] = useState([]);\r\n const [checkboxQs, setCheckboxQs] = useState([]);\r\n\r\n const [survey, setSurvey] = useState({});\r\n\r\n const [surveyStart, setSurveyStart] = useState(0);\r\n\r\n const paramsId = useParams();\r\n\r\n const responses = [];\r\n\r\n Object.keys(answers).map(function (key, index) {\r\n responses.push(answers[key]);\r\n });\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [questionLoad, setQuestionLoad] = useState(false);\r\n const [completedMessage, setCompletedMessage] = useState(false);\r\n const [keepAliveFlag, setKeepAliveFlag] = useState(true);\r\n\r\n // Should wrap in useMemo\r\n const keepAliveData = () => {\r\n // FORMATTING BROWSER DATA - changing undefined value for device type - desktop to 'desktop'\r\n let formatedUserBrowserData;\r\n\r\n if (userBrowserData.device.type === undefined) {\r\n formatedUserBrowserData = {\r\n ...userBrowserData,\r\n device: {\r\n type: \"desktop\",\r\n model:\r\n userBrowserData.device.model === undefined\r\n ? null\r\n : userBrowserData.device.model,\r\n vendor:\r\n userBrowserData.device.vendor === undefined\r\n ? null\r\n : userBrowserData.device.vendor,\r\n },\r\n };\r\n } else {\r\n formatedUserBrowserData = userBrowserData;\r\n }\r\n\r\n // OBJECT FOR KEEP ALIVE METADA\r\n\r\n console.log(\"HIT it right\");\r\n return {\r\n metadata: {\r\n location: userLocationData,\r\n browserData: formatedUserBrowserData,\r\n sessionID: sessionID,\r\n surveyPosition: activeStep + 1,\r\n },\r\n surveyID: survey.id,\r\n };\r\n };\r\n\r\n // ~~~~~~~~~~~~~~~~~~ SUBMIT RESPONSES FUNCTION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\n const submit = async () => {\r\n // e.preventDefault();\r\n\r\n const responses = [];\r\n\r\n Object.keys(answers).map(function (key, index) {\r\n responses.push(answers[key]);\r\n });\r\n\r\n setIsLoading(true);\r\n\r\n // FORMATING META DATA\r\n // duration\r\n let surveyDuration = Date.now() - surveyStart;\r\n\r\n // changing undefined value for device type - desktop to 'desktop'\r\n let formatedUserBrowserData;\r\n\r\n if (userBrowserData.device.type === undefined) {\r\n formatedUserBrowserData = {\r\n ...userBrowserData,\r\n device: {\r\n type: \"desktop\",\r\n model:\r\n userBrowserData.device.model === undefined\r\n ? null\r\n : userBrowserData.device.model,\r\n vendor:\r\n userBrowserData.device.vendor === undefined\r\n ? null\r\n : userBrowserData.device.vendor,\r\n },\r\n };\r\n } else {\r\n formatedUserBrowserData = userBrowserData;\r\n }\r\n\r\n // -------------------------\r\n\r\n try {\r\n const newSession = {\r\n metadata: {\r\n location: userLocationData,\r\n browserData: formatedUserBrowserData,\r\n sessionID: sessionID,\r\n },\r\n duration: Math.floor(surveyDuration / 1000),\r\n surveyID: survey.id,\r\n answers: responses,\r\n };\r\n\r\n const response = await axios.post(`/survey-responses/`, newSession);\r\n\r\n if (response.status === 200) {\r\n setIsLoading(false);\r\n setKeepAliveFlag(false);\r\n setCompletedMessage(true);\r\n }\r\n\r\n setIsLoading(false);\r\n\r\n // ______________________________KEEP ALIVE ON SUBMISSION WITHOUT METADATA _______________________\r\n try {\r\n await axios.put(`survey-responses/keep-alive/?sessionID=${sessionID}`, {\r\n submitted: true,\r\n surveyID: survey.id,\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n } catch (err) {\r\n err && setShowErrorModal(true);\r\n // setError('Something went wrong on our side, we were unable to save your responses. Please try again or contact the admin.')\r\n\r\n // ALTERNATIVE\r\n setError({\r\n message: `Something went wrong on our side, we were unable to save your responses. Please try again or contact the admin. `,\r\n sessionID: sessionID,\r\n timeStamp: Date(Date.now()).toString(),\r\n status: err?.response?.status ? err.response?.status : err,\r\n });\r\n setKeepAliveFlag(false);\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n // ~~~~~~~~~~~~~~~~~~ MAIN USEFFECT TRIGERRED ON LANDING OF THE PAGE, RETRIEVE SURVEY AND METADATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n useEffect(() => {\r\n const getGeolocationData = async () => {\r\n try {\r\n // _____________________RETRIEVE USER'S IP AND LOCATION WITH OTHER META DATA____________________\r\n\r\n let geoLocationData;\r\n\r\n const geolocationResponse = await fetch(\r\n // `https://api.ipify.org/?format=json`\r\n `https://ipapi.co/json/`,\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n },\r\n }\r\n );\r\n\r\n if (geolocationResponse) {\r\n geoLocationData = await geolocationResponse.json();\r\n }\r\n if (geoLocationData) {\r\n const { city, country_name, latitude, longitude, region, ip } =\r\n geoLocationData;\r\n setUserLocationData({\r\n // browser,\r\n city,\r\n country_name,\r\n latitude,\r\n longitude,\r\n region,\r\n ip,\r\n });\r\n }\r\n } catch (err) {\r\n console.log(\"err\", err);\r\n }\r\n };\r\n\r\n const getSurvey = async () => {\r\n try {\r\n setQuestionLoad(true);\r\n\r\n // _____________________RETRIEVE SURVEY____________________\r\n\r\n const response = await axios.get(\r\n `/surveys/form/${paramsId.id}` //df5a61e4-a256-4f5a-a00d-c8bf649809d5\r\n );\r\n\r\n const token = localStorage.getItem(\"jwt\");\r\n\r\n //for NOT Logged in Users CLOSED AND DRAFT\r\n if (\r\n (token === null && response?.data?.status === \"closed\") ||\r\n (token === null && response?.data?.status === \"draft\")\r\n ) {\r\n setUnavailableMessage(response?.data?.message);\r\n\r\n setQuestionLoad(false);\r\n return;\r\n }\r\n\r\n //for Logged in Users CLOSED SURVEY\r\n // if ((token && response?.data?.status === 'closed') || (token && response?.data?.status === 'draft')) {\r\n let status = \"\";\r\n if (\r\n response?.data?.status === \"closed\" ||\r\n response?.data?.status === \"draft\"\r\n ) {\r\n status = response?.data?.status;\r\n setAdminUnavailableMsg(\r\n status.charAt(0).toUpperCase() + status.slice(1)\r\n );\r\n }\r\n\r\n // setUnavailableMessage('User is logged in as Admin, the current survey status is set to = CLOSED'\r\n let likertQsArray = [];\r\n let openQsArray = [];\r\n let dropdownArray = [];\r\n let mcqGridArray = [];\r\n let mcqArray = [];\r\n let checkboxArray = [];\r\n let likertGridArray = [];\r\n\r\n if (response.data?.sections?.length === 0) {\r\n setNoQuestions(true);\r\n }\r\n\r\n for (let i = 0; i < response.data?.sections?.length; i++) {\r\n if (response.data?.sections[i]?.section_questions?.length > 0) {\r\n response.data?.sections[i]?.section_questions?.map((q) => {\r\n if (q.question_type === \"likert_scale\") {\r\n likertQsArray.push({\r\n id: q.id,\r\n question: q.question_text,\r\n question_type: q.question_type,\r\n required_flag: q.required_flag,\r\n likert_scale: q.likert_scale,\r\n });\r\n } else if (\r\n q.question_type === \"short_answer\" ||\r\n q.question_type === \"paragraph\"\r\n ) {\r\n openQsArray.push({\r\n id: q.id,\r\n question: q.question_text,\r\n question_type: q.question_type,\r\n required_flag: q.required_flag,\r\n });\r\n } else if (q.question_type === \"dropdown\") {\r\n dropdownArray.push({\r\n id: q.id,\r\n question: q.question_text,\r\n choices: q.choices,\r\n question_type: q.question_type,\r\n required_flag: q.required_flag,\r\n });\r\n } else if (q.question_type === \"grid_mcq\") {\r\n mcqGridArray.push({\r\n id: q.id,\r\n question: q.question_text,\r\n grid_choices: q.grid_choices,\r\n question_type: q.question_type,\r\n required_flag: q.required_flag,\r\n });\r\n } else if (q.question_type === \"mcq\") {\r\n mcqArray.push({\r\n id: q.id,\r\n question: q.question_text,\r\n choices: q.choices,\r\n question_type: q.question_type,\r\n required_flag: q.required_flag,\r\n });\r\n } else if (q.question_type === \"checkbox\") {\r\n checkboxArray.push({\r\n id: q.id,\r\n question: q.question_text,\r\n choices: q.choices,\r\n question_type: q.question_type,\r\n required_flag: q.required_flag,\r\n });\r\n } else if (q.question_type === \"grid_likert_scale\") {\r\n likertGridArray.push({\r\n id: q?.id,\r\n question: q?.question_text,\r\n grid_likert_scale: q?.grid_likert_scale,\r\n question_type: q?.question_type,\r\n required_flag: q?.required_flag,\r\n });\r\n }\r\n });\r\n\r\n setLikerQs(likertQsArray);\r\n setGridLikertQs(likertGridArray);\r\n setOpenQs(openQsArray);\r\n setDropdownQs(dropdownArray);\r\n setMcqGridQs(mcqGridArray);\r\n setMcqQs(mcqArray);\r\n setCheckboxQs(checkboxArray);\r\n setSurvey(response.data);\r\n setSurveyStart(Date.now());\r\n }\r\n }\r\n\r\n let newSessionID = uuidv4();\r\n\r\n setSessionID(newSessionID);\r\n\r\n setQuestionLoad(false);\r\n } catch (err) {\r\n if (err.response?.status === 404) {\r\n // setError('')\r\n setError({\r\n message:\r\n \"This survey URL does not exist. Please try again or contact the admin.\",\r\n sessionID: sessionID,\r\n timeStamp: Date(Date.now()).toString(),\r\n status: 404,\r\n });\r\n setKeepAliveFlag(false);\r\n }\r\n\r\n if (err.response?.status === 401) {\r\n setShowErrorModal(true);\r\n setError({\r\n message: \"Your Session has timed out, please login again.\",\r\n sessionID: sessionID,\r\n timeStamp: Date(Date.now()).toString(),\r\n status: 401,\r\n });\r\n setKeepAliveFlag(false);\r\n } else {\r\n setShowErrorModal(true);\r\n setError({\r\n message:\r\n \"Something went wrong on our side, we were unable to load the survey. Please try again or contact the admin.\",\r\n sessionID: sessionID,\r\n timeStamp: Date(Date.now()).toString(),\r\n status: err?.response?.status ? err.response?.status : err,\r\n });\r\n setKeepAliveFlag(false);\r\n }\r\n setQuestionLoad(false);\r\n }\r\n };\r\n\r\n getGeolocationData();\r\n\r\n getSurvey();\r\n }, []);\r\n\r\n // ~~~~~~~~~~~~~~~~~~ KEEP ALIVE ON USE EFFECT ON LANDING OF THE PAGE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\n useEffect(() => {\r\n const keepAlive = async () => {\r\n try {\r\n if (sessionID !== \"Not set\" && userLocationData) {\r\n const keepAliveWithMetaData = keepAliveData();\r\n\r\n await axios.put(\r\n `survey-responses/keep-alive/?sessionID=${sessionID}`,\r\n keepAliveWithMetaData //{ surveyPosition: activeStep + 1, surveyID: survey.id }\r\n );\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n };\r\n\r\n keepAlive();\r\n\r\n // if (keepAliveFlag) {\r\n\r\n // let timer1 = setTimeout(() => keepAlive(), 5000);\r\n\r\n // return () => {\r\n // \tclearTimeout(timer1);\r\n // };\r\n\r\n // }\r\n }, [sessionID, userLocationData]);\r\n\r\n // ~~~~~~~~~~~~~~~~~~ KEEP ALIVE USE EFFECTS ON PERIODIC TIME PASS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\n useEffect(() => {\r\n try {\r\n if (keepAliveFlag) {\r\n // FORMATTING BROWSER DATA - changing undefined value for device type - desktop to 'desktop'\r\n // let formatedUserBrowserData\r\n\r\n // if (userBrowserData.device.type === undefined) {\r\n // \tformatedUserBrowserData = {\r\n // \t\t...userBrowserData,\r\n // \t\tdevice:\r\n // \t\t{\r\n // \t\t\ttype: 'desktop',\r\n // \t\t\tmodel: userBrowserData.device.model === undefined ? null : userBrowserData.device.model,\r\n // \t\t\tvendor: userBrowserData.device.vendor === undefined ? null : userBrowserData.device.vendor\r\n // \t\t},\r\n\r\n // \t}\r\n // } else {\r\n // \tformatedUserBrowserData = userBrowserData\r\n // }\r\n\r\n // // OBJECT FOR KEEP ALIVE METADA\r\n // const keepAliveData = {\r\n // \tmetadata: {\r\n // \t\tlocation: userLocationData,\r\n // \t\tbrowserData: formatedUserBrowserData,\r\n // \t\tsessionID: sessionID,\r\n // \t\tsurveyPosition: activeStep + 1,\r\n // \t},\r\n // \tsurveyID: survey.id,\r\n // }\r\n\r\n // REQUEST EVERY INTERVAL WITH KEEPALIVE METADATA OBJECT\r\n\r\n const keepAliveWithMetaData = keepAliveData();\r\n\r\n const interval = setInterval(() => {\r\n const keepAlive = async () => {\r\n await axios.put(\r\n `survey-responses/keep-alive/?sessionID=${sessionID}`,\r\n keepAliveWithMetaData\r\n );\r\n };\r\n keepAlive();\r\n }, 60000); // 600000\r\n\r\n return () => clearInterval(interval);\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }, [keepAliveFlag, sessionID, userLocationData, activeStep]);\r\n\r\n // ~~~~~~~~~~~~~~~~~~ KEEP ALIVE USE EFFECT ON SECTION SWITCH ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n useEffect(() => {\r\n const keepAlive = async () => {\r\n try {\r\n if (sessionID !== \"Not set\") {\r\n let keepAliveWithMetaData = keepAliveData();\r\n\r\n keepAliveWithMetaData = {\r\n ...keepAliveWithMetaData,\r\n sectionUpdate: true,\r\n };\r\n\r\n await axios.put(\r\n `survey-responses/keep-alive/?sessionID=${sessionID}`,\r\n keepAliveWithMetaData //{ surveyPosition: activeStep + 1, surveyID: survey.id }\r\n );\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n };\r\n\r\n if (keepAliveFlag) {\r\n let timer1 = setTimeout(() => keepAlive(), 5000);\r\n\r\n return () => {\r\n clearTimeout(timer1);\r\n };\r\n }\r\n }, [keepAliveFlag, activeStep]);\r\n\r\n return (\r\n
\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n

Submitting your responses...

\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n \r\n
\r\n

{survey.survey_name}

\r\n\r\n {!completedMessage && activeStep === 0 ? (\r\n \r\n {survey.survey_desc}\r\n \r\n ) : null}\r\n\r\n {/* ERROR MODAL WILL BE FALSE SO WONT RENDER POP UP IF 404 */}\r\n {error.status === 404 && (\r\n \r\n )}\r\n {showErrorModal && (\r\n \r\n )}\r\n
\r\n \r\n \r\n
\r\n\r\n {adminUnavailableMsg ? (\r\n adminUnavailableMsg === \"Closed\" ? (\r\n
\r\n {`Admin Preview - Survey status is currently set to ${adminUnavailableMsg}.`}\r\n
\r\n ) : (\r\n
\r\n {`Admin Preview - Survey status is currently set to ${adminUnavailableMsg}.`}\r\n
\r\n )\r\n ) : null}\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n {questionLoad ? (\r\n
\r\n \r\n {/* */}\r\n
\r\n

Loading Form...

\r\n
\r\n
\r\n ) : unavailableMessage ? (\r\n

\r\n {unavailableMessage}\r\n

\r\n ) : noQuestions ? (\r\n
\r\n This survey has no questions\r\n
\r\n ) : !completedMessage ? (\r\n
\r\n \r\n {survey?.sections?.map((x) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : (\r\n // style={{ alignText: 'center' }} FOR EMPIRISYS SURVEY\r\n
\r\n

\r\n Thank you for submitting your response.\r\n

\r\n\r\n {/* HASH CODE IS the ID of DETECT SURVEY for BP */}\r\n\r\n {survey?.submit_confirm_message?.map((x) => {\r\n return {x};\r\n })}\r\n\r\n {survey?.id === \"pP2z8wA7D5yl64qm\" ? (\r\n \r\n Your answers will be used to gain valuable insights\r\n into various aspects of process safety and human\r\n factors management.\r\n \r\n ) : null}\r\n {survey?.id === \"pP2z8wA7D5yl64qm\" ? (\r\n \r\n Please rest assured that all your responses are kept\r\n confidential and will solely be utilised for internal\r\n research purposes.\r\n \r\n ) : null}\r\n \r\n If you have any questions, comments, or feedback don’t\r\n hesitate to contact us at{\" \"}\r\n \r\n info-sense@empirisys.io\r\n \r\n \r\n \r\n www.empirisys.io/sense\r\n \r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Form;\r\n","import React, { useState, useEffect } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport styled from 'styled-components'\r\nimport { useTable } from 'react-table'\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport './organisation-table.styles.scss'\r\nimport axios from \"../../misc/modifiedAxios\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faShareAltSquare } from '@fortawesome/free-solid-svg-icons';\r\nimport { faPlusCircle, faTrash, faGripLines, faEdit } from '@fortawesome/free-solid-svg-icons';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\n\r\n\r\n\r\n\r\nconst Styles = styled.div`\r\n padding: 1rem;\r\n\r\n \r\n table {\r\n width:98%;\r\n border-spacing: 0;\r\n // border: 1px solid black;\r\n }\r\n tr:nth-child(even){background-color: #f2f2f2;}\r\n tr:hover {background-color: #ddd;}\r\n\r\n th{\r\n border-bottom: 1px solid black;\r\n padding-left:5px\r\n },\r\n\r\n td {\r\n margin: 0;\r\n padding: 0.5rem;\r\n // border-bottom: 1px solid black;\r\n // border-right: 1px solid black;\r\n\r\n :last-child {\r\n border-right: 0;\r\n }\r\n }\r\n }\r\n`\r\n\r\n\r\n\r\nfunction Table({ columns, data }) {\r\n // Use the state and functions returned from useTable to build your UI\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n prepareRow,\r\n } = useTable({\r\n columns,\r\n data,\r\n })\r\n\r\n // Render the UI for your table\r\n return (\r\n \r\n\r\n \r\n {headerGroups.map(headerGroup => (\r\n \r\n {headerGroup.headers.map(column => (\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {rows.map((row, i) => {\r\n prepareRow(row)\r\n return (\r\n \r\n {row.cells.map(cell => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n
{column.render('Header')}
{cell.render('Cell')}
\r\n )\r\n}\r\n\r\nconst deleteOrganisation = async (e, history, dispatch, defaultOrg, user, setisLoading) => {\r\n\r\n const orgId = e.id\r\n\r\n\r\n\r\n try {\r\n let response\r\n\r\n setisLoading(true)\r\n\r\n response = await axios.delete(\r\n `/organisations/${orgId}`).catch(\r\n\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n ;\r\n\r\n\r\n let lastActiveOrg = { active_org: defaultOrg.id }\r\n\r\n\r\n const updateActiveOrg = await axios.put(`/users/${user.id}`, lastActiveOrg).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n }\r\n );\r\n\r\n\r\n\r\n\r\n\r\n\r\n localStorage.setItem(\"organisationId\", defaultOrg.id);\r\n\r\n dispatch({\r\n type: 'DELETE_ORGANISATION',\r\n payload: response.data\r\n })\r\n dispatch({\r\n type: 'SELECT_ORGANISATION',\r\n payload: null\r\n })\r\n dispatch({\r\n type: 'SET_ORGANISATION',\r\n payload: defaultOrg.id\r\n })\r\n\r\n setisLoading(false)\r\n\r\n }\r\n catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n\r\n\r\n}\r\n\r\nfunction OrganisationTable({ organisations, setEditModal, setShowUrlModal }) {\r\n\r\n const dispatch = useDispatch()\r\n const history = useHistory()\r\n\r\n const [selectedOrg, setSelectedOrg] = useState('')\r\n const defaultOrg = useSelector((state) => state.user.defaultOrg);\r\n const user = useSelector((state) => state.user.user);\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n const filteredOrgs = organisations.filter(x => x.org_name !== defaultOrg.org_name)\r\n\r\n // const [showUrlModal, setUrlModal] = useState(false);\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (selectedOrg !== null) {\r\n const selectOrg = () => {\r\n dispatch({\r\n type: 'SELECT_ORGANISATION',\r\n payload: selectedOrg\r\n })\r\n }\r\n\r\n selectOrg();\r\n }\r\n\r\n }, [dispatch, selectedOrg]);\r\n\r\n\r\n\r\n const columnsReady = React.useMemo(\r\n\r\n () => [\r\n {\r\n Header: 'ID',\r\n accessor: 'id',\r\n },\r\n\r\n {\r\n Header: 'Name',\r\n accessor: 'org_name',\r\n },\r\n {\r\n Header: 'Description',\r\n accessor: 'org_desc',\r\n },\r\n\r\n {\r\n Header: ' ',\r\n Cell: ({ cell }) => {\r\n\r\n\r\n\r\n return (
\r\n {\r\n setSelectedOrg(cell.row.original)\r\n setEditModal(true)\r\n }}\r\n />\r\n
)\r\n }\r\n },\r\n\r\n {\r\n Header: ' ',\r\n // defaultCanFilter: true,\r\n Filter: false,\r\n Cell: ({ cell }) => {\r\n\r\n\r\n return (
\r\n {\r\n\r\n window.confirm(\"Are you sure you wish to delete this item?\") &&\r\n deleteOrganisation(cell.row.original, history, dispatch, defaultOrg, user, setisLoading)\r\n }} />\r\n
)\r\n\r\n\r\n }\r\n }\r\n\r\n ],\r\n [setEditModal, setShowUrlModal]\r\n )\r\n\r\n\r\n // const data = React.useMemo(() => makeData(150), [])\r\n\r\n return (\r\n isLoading ? (\r\n
\r\n \r\n
\r\n Deleting Organisation...\r\n
\r\n
\r\n ) : (\r\n \r\n \r\n \r\n )\r\n )\r\n}\r\n\r\nexport default OrganisationTable\r\n","import React, { useState, useEffect } from 'react';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\n\r\nimport \"../../../_vars.scss\"\r\nimport { faCloudShowersHeavy } from '@fortawesome/free-solid-svg-icons';\r\n\r\nconst CreateOrganisationModal = ({ showModal, setShowModal }) => {\r\n\r\n const history = useHistory();\r\n //---useSelector get client Id\r\n //POST object\r\n\r\n const dispatch = useDispatch()\r\n const [newOrganisation, setNewOrganisation] = useState(null)\r\n const [isLoading, setisLoading] = useState(false);\r\n const [name, setName] = useState('')\r\n const [description, setDescription] = useState('')\r\n const user = useSelector((state) => state.user.user);\r\n\r\n\r\n let company\r\n let userid\r\n\r\n if (user) {\r\n userid = user.id\r\n company = user.company\r\n }\r\n\r\n const [isEnabled, setEnabled] = useState(true)\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n setEnabled(false)\r\n\r\n try {\r\n\r\n setisLoading(true)\r\n const newOrganisation = {\r\n org_name: name,\r\n org_desc: description,\r\n userID: userid,\r\n userCompany: company\r\n };\r\n\r\n\r\n const response = await axios.post(\r\n `/organisations`,\r\n newOrganisation\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n setEnabled(true)\r\n\r\n\r\n const { org_name, org_desc, id } = response.data\r\n\r\n setNewOrganisation({\r\n id,\r\n org_name,\r\n org_desc,\r\n })\r\n\r\n setName('')\r\n setDescription('')\r\n setisLoading(false)\r\n setShowModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n\r\n if (newOrganisation !== null) {\r\n\r\n const setOrganisation = () => {\r\n dispatch({\r\n type: 'ADD_NEW_ORGANISATION',\r\n payload: newOrganisation\r\n })\r\n }\r\n\r\n setOrganisation();\r\n }\r\n\r\n }, [dispatch, newOrganisation]);\r\n\r\n\r\n\r\n return (\r\n {\r\n setShowModal(false);\r\n }}>\r\n \r\n Create Organisation\r\n \r\n
\r\n \r\n\r\n\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Creating Organisation...\r\n
\r\n
\r\n ) : (\r\n\r\n <>\r\n \r\n \r\n \r\n
\r\n Name:\r\n *Please ensure the name is correct, as it cannot be changed later. \r\n
\r\n \r\n
\r\n \r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setName(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n \r\n {\r\n // setError('');\r\n\r\n //prevent only 'space' answers and clear out emojis (.replace())\r\n // if (e.target.value.trim() !== '') {\r\n\r\n setDescription(e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n ))\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n\r\n )}\r\n
\r\n \r\n {\r\n setName('')\r\n setDescription('')\r\n setisLoading(false)\r\n setShowModal(false);\r\n }}>\r\n Cancel\r\n \r\n {name ? {\r\n setShowModal(false);\r\n }}\r\n disabled={false}\r\n type='submit'\r\n className='modal-create-button'\r\n variant='no-variant-p'>\r\n Create\r\n :\r\n {\r\n setShowModal(false);\r\n }}\r\n disabled={true}\r\n type='submit'\r\n className='modal-create-button'\r\n variant='no-variant-p'>\r\n Create\r\n }\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CreateOrganisationModal;\r\n","import React, { useState, useEffect } from 'react';\r\nimport axios from \"../../../misc/modifiedAxios\";\r\nimport { Modal, Button } from 'react-bootstrap';\r\n\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\nimport { Col } from 'react-bootstrap';\r\nimport { SpinnerCircularFixed } from 'spinners-react'; //https://adexin.github.io/spinners/\r\nimport \"../../../_vars.scss\"\r\n\r\nconst EditOrganisationModal = ({ showEditModal, setEditModal }) => {\r\n\r\n\r\n const history = useHistory()\r\n\r\n const selectedOrganisation = useSelector((state) => state.user.selectedOrg);\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n\r\n // const questionGroupId = selectedOrganisation.id\r\n\r\n const [currentQuestionGroupDetails, setCurrentQuestionGroupDetails] = useState({\r\n\r\n org_desc: '',\r\n org_name: '',\r\n\r\n })\r\n\r\n const [initialName, setInitialName] = useState('')\r\n const [initialDesc, setInitialDesc] = useState('')\r\n\r\n\r\n const { org_desc, org_name } = currentQuestionGroupDetails\r\n\r\n useEffect(() => {\r\n\r\n\r\n const loadOrganisation = () => {\r\n\r\n if (selectedOrganisation !== null) {\r\n\r\n setCurrentQuestionGroupDetails({\r\n\r\n org_desc: selectedOrganisation?.org_desc,\r\n org_name: selectedOrganisation?.org_name,\r\n\r\n })\r\n\r\n setInitialName(selectedOrganisation?.org_name)\r\n setInitialDesc(selectedOrganisation?.org_desc)\r\n\r\n }\r\n\r\n }\r\n\r\n loadOrganisation();\r\n\r\n }, [selectedOrganisation]);\r\n\r\n\r\n const dispatch = useDispatch()\r\n const [updatedOrganisation, setUpdatedOrganisation] = useState(null)\r\n\r\n\r\n const submit = async (e) => {\r\n e.preventDefault();\r\n\r\n\r\n\r\n\r\n try {\r\n setisLoading(true)\r\n // const editedOrganisation = {\r\n // org_desc: currentQuestionGroupDetails.org_desc,\r\n // org_name: currentQuestionGroupDetails.org_name,\r\n\r\n // };\r\n\r\n let editedOrganisation = {}\r\n\r\n if (initialName !== currentQuestionGroupDetails?.org_name) {\r\n editedOrganisation = { ...editedOrganisation, org_name: currentQuestionGroupDetails?.org_name }\r\n }\r\n if (initialDesc !== currentQuestionGroupDetails?.org_desc) {\r\n editedOrganisation = { ...editedOrganisation, org_desc: currentQuestionGroupDetails?.org_desc }\r\n }\r\n\r\n\r\n\r\n const response = await axios.put(\r\n `/organisations/${selectedOrganisation.id}`,\r\n editedOrganisation\r\n ).catch(\r\n (error) => {\r\n if (error.response.status === 403) {\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n }\r\n\r\n if (error.response.status === 401) {\r\n\r\n alert(\"Session has expired, please re-login.\")\r\n localStorage.removeItem('jwt')\r\n localStorage.removeItem('organisationId')\r\n history.push('/')\r\n\r\n }\r\n // \r\n })\r\n\r\n const { id, org_desc, org_name } = response.data\r\n\r\n setUpdatedOrganisation({\r\n id,\r\n org_desc,\r\n org_name,\r\n })\r\n\r\n setisLoading(false)\r\n setEditModal(false);\r\n\r\n } catch (err) {\r\n console.log(err)\r\n // err && setError('Internal error, please contact survey admin');\r\n window.alert('Internal error, please contact admin');\r\n }\r\n };\r\n useEffect(() => {\r\n\r\n\r\n if (updatedOrganisation !== null) {\r\n const setUpdatedOrganisation = () => {\r\n dispatch({\r\n type: 'UPDATE_ORGANISATION',\r\n payload: updatedOrganisation\r\n })\r\n }\r\n\r\n setUpdatedOrganisation();\r\n }\r\n\r\n }, [dispatch, updatedOrganisation]);\r\n\r\n\r\n return (\r\n\r\n {\r\n setEditModal(false);\r\n }}>\r\n \r\n Edit Organisation\r\n \r\n
\r\n \r\n {isLoading ? (\r\n
\r\n \r\n
\r\n Updating Organisation...\r\n
\r\n
\r\n ) : (\r\n <>\r\n {/* \r\n \r\n \r\n Name:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n\r\n setCurrentQuestionGroupDetails({\r\n ...currentQuestionGroupDetails, org_name: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n */}\r\n\r\n \r\n \r\n \r\n Description:\r\n \r\n \r\n \r\n \r\n {\r\n\r\n setCurrentQuestionGroupDetails({\r\n ...currentQuestionGroupDetails, org_desc: e.target.value.replace(\r\n /[^\\x20-\\x7E]+/g,\r\n ''\r\n )\r\n })\r\n // }\r\n }}\r\n />\r\n \r\n \r\n \r\n\r\n\r\n\r\n )}\r\n
\r\n \r\n {\r\n setEditModal(false);\r\n }}>\r\n Cancel\r\n \r\n \r\n Save Changes\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default EditOrganisationModal;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\n\r\n\r\n\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport './organisation-display.styles.scss';\r\nimport CreateOrganisationModal from '../OrganisationCreateModal/create-organisation-modal.component';\r\nimport { SpinnerCircularFixed } from 'spinners-react';\r\nimport OrganisationTable from '../organisation-table.component'\r\nimport EditOrganisationModal from '../OrganisationEditModal/edit-organisation-modal-component';\r\n\r\nconst OrganisationDisplay = () => {\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n\r\n\r\n const user = useSelector((state) => state.user.user);\r\n\r\n const { organisations } = user\r\n const formatedOrganisations = organisations.map(x => {\r\n return {\r\n org_name: x.org_name,\r\n id: x.id\r\n }\r\n })\r\n\r\n\r\n\r\n const [showCreateModal, setCreateShowModal] = useState(false);\r\n const [showEditModal, setEditModal] = useState(false);\r\n const [showUrlModal, setShowUrlModal] = useState(false);\r\n\r\n\r\n return (\r\n\r\n
\r\n\r\n\r\n

\r\n Organisations\r\n

\r\n
\r\n {\r\n setCreateShowModal(true);\r\n }} />\r\n Create New Organisation\r\n
\r\n {/* {isLoading ? (\r\n
\r\n \r\n
\r\n Loading Organisations...\r\n
\r\n
\r\n ) : ( */}\r\n \r\n {/* )} */}\r\n \r\n {showEditModal ? : null}\r\n\r\n
\r\n );\r\n\r\n};\r\n\r\nexport default OrganisationDisplay;\r\n\r\n\r\n\r\n\r\n","import React, { useState } from \"react\";\r\nimport { useSelector } from 'react-redux'\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Tabs from 'react-bootstrap/Tabs';\r\nimport Tab from 'react-bootstrap/Tab';\r\n\r\nimport OrganisationTable from './organisation-table.component'\r\n// import OrganisationRegisterForm from './organisation-form.component.jsx'\r\nimport OrganisationDisplay from \"./OrganisationDisplay/organisation-display.component\";\r\n\r\n\r\nconst TabOrganisationSwitch = () => {\r\n //set state from url hash\r\n let history = useHistory();\r\n\r\n const { pathname } = history.location\r\n\r\n const [selectedTab, setSelectedTab] = useState(pathname.substring(pathname.lastIndexOf('/') + 1));\r\n //substring subtracts the pathnames last ending with slash \"/\"\r\n\r\n const user = useSelector((state) => state.user.user);\r\n const { organisations } = user\r\n\r\n const handleSelect = (e) => {\r\n\r\n //e is the eventKey in this case either question or theme string\r\n\r\n\r\n //set state\r\n setSelectedTab(e);\r\n //update url\r\n history.replace({ //need it for the pathname to stay in address\r\n pathname: `${e}`\r\n });\r\n }\r\n\r\n return (\r\n //set active key, if no url hash set default to home\r\n handleSelect(e)}\r\n >\r\n \r\n {selectedTab === \"register\" ? : null}\r\n \r\n \r\n );\r\n}\r\nexport default TabOrganisationSwitch;","import React, { useEffect } from 'react';\r\nimport './Organisations.scss';\r\nimport SideNavBar from '../../components/Shared/SideNavBar/sidenavbar.component';\r\nimport TabOrganisationSwitch from './tab-switch-organisations.component'\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nconst Organisations = ({ match }) => {\r\n\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n\r\n const jwt = localStorage.getItem('jwt')\r\n // if cohorts is not empty then run a dispatch, otherwise useEffect will shoot twice the dispatch 1 on empty 1 on change\r\n\r\n if (!jwt) {\r\n history.push(\"/\")\r\n }\r\n\r\n\r\n }, []);\r\n\r\n\r\n return (\r\n
\r\n\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default Organisations;","import { useState } from 'react';\r\n// import axios from '../misc/modifiedAxios';\r\nimport axios from 'axios';\r\n\r\nconst TestArea = () => {\r\n\r\n\r\n const [files, setFiles] = useState()\r\n\r\n const uploadImage = async (e) => {\r\n e.preventDefault();\r\n\r\n const formData = new FormData()\r\n\r\n formData.append('files', files[0])\r\n formData.append('path', \"1\")\r\n\r\n axios.post(\"http://localhost:1337/api/upload\", formData)\r\n .then((response) => {\r\n //after success\r\n }).catch((error) => {\r\n //handle error\r\n })\r\n }\r\n\r\n return (\r\n
\r\n setFiles(e.target.files)}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TestArea;\r\n","import './App.css';\r\nimport { Switch, Route } from 'react-router-dom';\r\n// import CohortItem from './components/CohortItem/cohortitem.component';\r\nimport Login from './pages/Login/Login'\r\nimport LoginV4 from './pages/V4 Login/LoginV4'\r\n// import HomePage from './pages/homepage/hompage.component';\r\nimport Cohorts from './pages/Cohorts/cohorts.component';\r\nimport QuestionManager from './pages/QuestionManager/question-manager.component';\r\nimport QM from './pages/QM/qm.component';\r\nimport SurveyScheduleBuilder from './pages/SurveyScheduleBuilder/survey-schedule-builder.component';\r\nimport Form from './pages/Form/Form';\r\nimport Organisations from './pages/Organisations/Organisations.jsx'\r\nimport TestArea from './pages/testarea';\r\n\r\nfunction App() {\r\n\treturn (\r\n\t\t
\r\n\t\t\t{/* */}\r\n\t\t\t\r\n\t\t\t\t{/* */}\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{/* */}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport \"@fontsource/source-sans-pro\"\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { PersistGate } from 'redux-persist/integration/react';\r\nimport newStore from './redux/store';\r\n\r\nimport './globals.css';\r\nimport './styleguide.css';\r\nimport App from './App';\r\n\r\nReactDOM.render(\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t,\r\n\tdocument.getElementById('root')\r\n);\r\n"],"sourceRoot":""}