{"version":3,"sources":["stores/lis-journal-store.js","stores/lis-print-store.js","lis-shared/tinymce/lineNumberPlugin.js","lis-shared/tinymce/copyHeadStylePlugin.js","lis-shared/tinymce/rejectedButtonPlugin.js","lis-shared/tinymce/agreedButtonPlugin.js","lis-shared/tinymce/createAmendmentPlugin.js","lis-admin/lis-version-management/components/lis-review.js","services/request.service.js","services/json-to-html.js","lis-admin/lis-version-management/components/lis-amendments.js","lis-admin/lis-version-management/components/lis-version-management.js","lis-admin/lis-version-management/components/lis-bill-grid.js","lis-admin/lis-version-management/components/lis-selectors.js","lis-admin/lis-version-management/components/lis-bill-preview.js","lis-admin/lis-version-management/components/lis-text-list.js","stores/lis-nav-store.js","stores/lis-session-store.js","lis-shared/lis-layout/components/lis-forms-component.js","lis-shared/tinymce/rightMarginPlugin.js","stores/lis-legislation-store.js","authConfig.js","stores/lis-auth-store.js","lis-shared/lis-login/components/lis-house-login-button.js","lis-shared/lis-login/components/lis-login-form.js","lis-shared/lis-layout/components/lis-house-logout-button.js","lis-shared/lis-layout/components/lis-profile-component.js","lis-shared/lis-layout/components/lis-submenu-component.js","lis-shared/lis-layout/components/lis-global-search-input-component.js","lis-shared/lis-layout/components/lis-nav-component.js","lis-shared/lis-layout/components/lis-session-selector.js","lis-shared/lis-layout/components/lis-popup-component.js","lis-shared/lis-layout/components/lis-toast-component.js","lis-shared/lis-layout/components/lis-icon-links-component.js","lis-shared/lis-layout/components/lis-layout-component.js","stores/lis-user-store.js","lis-shared/lis-login/components/lis-create-account-form.js","lis-shared/lis-login/components/lis-register-account-form.js","lis-shared/lis-login/components/lis-forgot-password-form.js","lis-shared/lis-login/components/lis-change-password-form.js","lis-admin/lis-member-management/components/lis-member-grid.js","lis-admin/lis-member-management/components/lis-contact-form.js","lis-admin/lis-member-management/components/lis-user-creation.js","lis-admin/lis-member-management/components/lis-member-form.js","lis-admin/lis-member-management/components/lis-member-management.js","lis-admin/lis-session-management/components/lis-session-grid.js","lis-admin/lis-session-management/components/lis-session-form.js","lis-admin/lis-session-management/components/lis-session-management.js","lis-admin/lis-committee-management/components/lis-committee-grid.js","lis-admin/lis-committee-management/components/lis-committee-personnel-dnd.js","lis-admin/lis-committee-management/components/lis-committee-members-dnd.js","lis-admin/lis-committee-management/components/lis-subcommittee-grid.js","stores/lis-personnel-store.js","lis-admin/lis-committee-management/components/lis-partner-committee-details.js","lis-admin/lis-committee-management/components/lis-committee-form.js","lis-admin/lis-committee-management/components/lis-committee-management.js","services/emptyCache.js","stores/lis-calendar-store.js","stores/lis-schedule-store.js","lis-admin/lis-docket-management/components/lis-docket-grid.js","lis-admin/lis-docket-management/components/lis-committee-bills-grid.js","lis-shared/lis-dockets/lis-docket-details.js","lis-admin/lis-docket-management/components/lis-docket-patron-list.js","lis-admin/lis-docket-management/components/lis-docket-form.js","lis-admin/lis-docket-management/components/lis-docket-management.js","lis-admin/lis-calendar-management/components/lis-calendar-grid.js","lis-shared/lis-calendar/lis-agenda-items.js","lis-admin/lis-calendar-management/components/lis-house-bills-grid.js","services/csv.service.js","stores/lis-votes-store.js","stores/lis-patron-store.js","lis-shared/lis-bills/lis-bill-version-list.js","stores/lis-report-store.js","lis-public/components/lis-bill-search/lis-report-maker.js","lis-shared/lis-calendar/lis-calendar-details.js","lis-shared/lis-calendar/lis-calendar-details-printout.js","lis-admin/lis-calendar-management/components/lis-house-calendar-form.js","lis-admin/lis-calendar-management/components/lis-senate-bills-grid.js","lis-admin/lis-calendar-management/components/lis-senate-calendar-form.js","lis-admin/lis-calendar-management/components/lis-calendar-form-container.js","lis-admin/lis-calendar-management/components/lis-calendar-management.js","stores/lis-minutes-store.js","lis-admin/lis-minutes-management/components/lis-minutes-grid.js","lis-shared/lis-layout/components/lis-loader-component.js","lis-admin/lis-minutes-management/components/forms/misc.js","services/event-references-helpers.js","lis-admin/lis-minutes-management/components/input-types.js","lis-admin/lis-minutes-management/components/forms/comment-box.js","lis-admin/lis-minutes-management/components/forms/non-legislative-form.js","lis-admin/lis-minutes-management/components/forms/legislative-form.js","lis-shared/lis-minutes/lis-minutes-details.js","stores/lis-communications-store.js","lis-admin/lis-minutes-management/components/lis-minutes-form.js","lis-admin/lis-minutes-management/components/lis-minutes-management.js","lis-admin/lis-bill-management/components/event-controls.js","lis-shared/lis-search/lis-search-categories.js","lis-shared/lis-search/lis-advanced-search-box.js","lis-shared/lis-search/lis-search-selections.js","lis-public/components/lis-bill-details/lis-history-form.js","lis-shared/lis-search/lis-legislation-watchlists.js","lis-shared/lis-search/lis-collection-controls.js","stores/lis-collection-store.js","lis-shared/lis-search/lis-bill-info.js","lis-admin/lis-bill-management/components/lis-bill-management.js","lis-admin/lis-communications-management/components/lis-communications-grid.js","images/houseclerk_paulnardo.png","lis-shared/lis-communications/lis-communications-details.js","images/senateclerk_susanclarkeschaar.png","lis-admin/lis-communications-management/components/lis-bills-grid.js","lis-admin/lis-communications-management/components/lis-communications-form.js","lis-admin/lis-communications-management/components/lis-communications-management.js","lis-admin/lis-vote-management/components/lis-vote-grid.js","lis-shared/lis-votes/lis-vote-details.js","lis-admin/lis-vote-management/components/lis-vote-form.js","lis-admin/lis-vote-management/components/lis-vote-management.js","lis-admin/lis-print-management/components/lis-print-room-grid.js","lis-admin/lis-print-management/components/lis-print-management.js","lis-admin/lis-report-management/components/lis-report-management.js","lis-admin/lis-amendment-management/components/lis-bill-grid.js","lis-admin/lis-amendment-management/components/lis-selectors.js","lis-admin/lis-amendment-management/components/lis-amendment-management.js","lis-admin/lis-admin-dashboard/components/lis-admin-dashboard.js","lis-admin/lis-notifications-management/components/lis-notification-management.js","stores/lis-developers-store.js","lis-admin/lis-partner-management/components/lis-partner-grid.js","lis-admin/lis-partner-management/components/lis-partner-form.js","lis-admin/lis-partner-management/components/lis-partner-management.js","lis-admin/lis-user-management/components/lis-user-management.js","lis-public/components/lis-home/lis-public-home-search.js","lis-public/components/lis-home/lis-public-home-resources.js","lis-public/components/lis-home/lis-public-home-session-info.js","lis-public/components/lis-home/lis-public-home-schedule.js","lis-public/components/lis-home/lis-public-message-of-the-day.js","lis-public/components/lis-home/lis-public-home.js","lis-public/components/lis-public-session-list.js","lis-public/components/lis-committee/lis-public-committee-list.js","lis-public/components/lis-committee/lis-public-committee-details.js","lis-public/components/lis-committee/lis-public-meeting-details.js","lis-public/components/lis-committee/lis-public-docket-details.js","lis-public/components/lis-committee/lis-public-committee-information.js","lis-public/components/lis-public-members-list.js","lis-public/components/lis-public-member-details.js","lis-shared/lis-search/lis-watchlist-notifications.js","lis-public/components/lis-bill-search/lis-search-help.js","lis-public/components/lis-bill-search/quick-add-bills.js","lis-public/components/lis-bill-search/lis-public-bill-search.js","lis-public/components/lis-bill-search/share-report.js","lis-public/components/lis-bill-search/lis-report-bill-search.js","lis-public/components/lis-bill-search/search-translator.js","lis-public/components/lis-bill-search/shorthand-url-translator.js","stores/lis-org-store.js","lis-public/components/lis-bill-details/lis-impact-statements.js","lis-public/components/lis-bill-details/collection-notes.js","lis-public/components/lis-bill-details/lis-public-bill-details.js","lis-public/components/lis-public-vote-details.js","lis-public/components/lis-public-data-files.js","lis-public/components/lis-public-communications.js","lis-public/components/lis-public-calendar-list.js","lis-public/components/lis-public-calendar-details.js","lis-public/components/lis-public-minutes.js","lis-public/components/lis-public-minutes-details.js","lis-admin/lis-update-patronage-modal.js","services/json-to-jsx.js","lis-public/components/lis-public-full-text.js","lis-shared/lis-custom-components/lis-custom-components.js","lis-shared/lis-meetings/lis-meetings-form-component.js","lis-shared/lis-meetings/lis-meetings-calendar-preview.js","lis-public/components/lis-public-schedule.js","lis-public/components/lis-public-vote-search.js","lis-public/components/lis-public-member-legislation.js","lis-public/components/lis-public-communication-details.js","stores/lis-statistics-store.js","lis-public/components/lis-committee-statistics.js","lis-public/components/lis-session-statistics.js","lis-public/components/lis-unauthorized.js","lis-public/components/lis-watchlists.js","lis-shared/lis-profile/components/lis-profile-form.js","lis-public/components/lis-privacy.js","lis-developers/public/components/lis-developers-portal.js","lis-developers/public/components/lis-document.js","lis-developers/public/components/lis-api-key-registration.js","lis-developers/public/components/lis-api-key-confirmation.js","lis-developers/public/components/lis-terms-of-service.js","lis-developers/admin/components/lis-admin-developers-portal.js","lis-developers/admin/components/lis-admin-document.js","lis-developers/admin/components/lis-admin-docs.js","lis-public/components/lis-footer.js","lis-admin/lis-configurations/lis-configurations-table.js","lis-admin/lis-configurations/lis-calendar-configurations.js","lis-admin/lis-configurations/lis-communications-configurations.js","lis-admin/lis-configurations/lis-configurations-grid.js","lis-admin/lis-configurations/lis-configurations-management.js","lis-admin/lis-journal-management/components/lis-journal-grid.js","lis-admin/lis-journal-management/components/lis-journal-details.js","lis-admin/lis-journal-management/forms/journal-vote.js","lis-admin/lis-journal-management/components/lis-journal-form.js","lis-admin/lis-journal-management/components/lis-journal-management.js","App.js","registerServiceWorker.js","configureStore.js","index.js","reducers.js","stores/lis-committee-store.js","stores/lis-members-store.js","lis-shared/lis-layout/components/lis-popout-component.js"],"names":["API_URL","window","env","API_SERVER","journalCategoryListRequest","journalCategoryListSuccess","journalCategoryListFailure","journalListRequest","journalListSuccess","journalListFailure","journalByIdRequest","journalByIdSuccess","journalByIdFailure","journalBuildSuccess","journalBuildFailure","journalGenerationSuccess","journalGenerationFailure","journalSaveSuccess","journalSaveFailure","journalDeleteSuccess","journalDeleteFailure","receiveCategoryData","receiveCategoryDataFailure","initialState","journalCategoryList","journalCategoryMessage","journalList","journalMessage","journalById","journalByIdMessage","journalBuild","journalBuildError","journalGeneration","journalGenerationError","journalSave","journalSaveError","categoryData","categoryDataError","journalDeleteError","journalActionCreators","requestJournalCategoryList","type","isFetching","receiveJournalCategoryList","list","message","journalCategoryListError","getJournalCategories","dispatch","partnerRequest","process","REACT_APP_JOURNAL_API_URL","then","result","Promise","reject","JournalCategoryTypes","map","x","label","Name","value","JournalCategoryTypeID","name","catch","err","requestJournalList","receiveJournalList","journalListError","getJournals","params","Journals","requestJournalById","receiveJournalById","journalByIdError","getJournalById","receiveJournalBuild","buildJournal","receiveJournalGeneration","bytes","generateJournal","config","method","headers","localStorage","getItem","url","fetch","a","status","body","getReader","read","error","JSON","parse","Buffer","from","buffer","toString","text","responseText","receiveJournalSave","saveJournal","responseObj","getCategoryData","decoder","TextDecoder","decode","receiveJournalDelete","deleteJournal","reducer","state","action","Object","assign","journalDelete","printDocumentsSuccess","printDocumentsFailure","printCreateSuccess","printCreateFailure","printSaveSuccess","printSaveFailure","printParchmentEmailSuccess","batchItemCompleteSuccess","batchItemCompleteFailure","printAllEnrolledSuccess","printAllEnrolledFailure","printDocuments","printDocumentsError","printCreate","printCreateError","printSave","printSaveError","printParchmentEmail","printParchmentEmailError","batchItemComplete","batchItemCompleteError","printAllEnrolledError","printActionCreators","receivePrintDocuments","resObj","getPrintDocuments","REACT_APP_PRINT_DOCUMENTS_SERVICE","PrintBatches","receivePrintCreate","createPrintDocument","receivePrintSave","savePrintDocument","receivePrintParchmentEmail","printParchmentemailError","printParchmentError","sendParchmentEmail","receiveBatchItemComplete","completeBatchItem","receivePrintAllEnrolled","printAllEnrolled","tinymce","PluginManager","add","editor","width","linePositions","bodyHeight","container","document","createElement","lineNumberContainer","on","_e","root","contentDocument","activeElement","scrollHeight","update","contentWindow","onscroll","scrollNumbers","style","margin","marginLeft","overflow","position","appendChild","contentAreaContainer","scrollTop","scrollY","childNodes","forEach","rootChild","clonedRootChild","cloneNode","insertBefore","oldDisplay","display","tagNewLines","removeChild","height","scrollingElement","bodyFontSize","getComputedStyle","getPropertyValue","innerText","beginDrawing","i","length","lineNumber","fontWeight","fontSize","top","node","oldLocation","atBillNumber","atGovernorsActions","child","includes","nodeName","testNode","nodeVal","nodeValue","innerHTML","replace","testChild","rect","getBoundingClientRect","location","bottom","push","parentNode","classList","head","querySelectorAll","element","newEl","attributes","rel","addedStyles","intialValue","hasFocus","e","points","elementsFromPoint","y","selection","select","collapse","getButton","buttonText","intialText","onAction","fire","toolbarKey","items","ui","registry","addMenuButton","callback","addNestedMenuItem","getSubmenuItems","addContextForm","scope","initValue","launch","commands","formApi","getValue","insertContent","hide","addButton","addMenuItem","selections","members","getParam","committees","addAmendmentCallback","userChamber","billNumber","allowGovernorAmendmentSponsor","amendmentOrigin","sponsor","member","committee","formItems","placeholder","unshift","concat","dialog","windowManager","open","initialPageConfig","setData","billnumber","toUpperCase","amendmentorigin","title","html","buttons","disabled","onChange","dialogApi","data","getData","enable","disable","details","redial","amendmentTypeDialog","versiontype","committeeAndMemberConfig","undefined","amendmenttype","previousValue","initialData","amendmentstobeinserted","class","isNaN","onSubmit","textToBeInserted","amendmentBuilder","endNode","getEnd","close","formData","amendmentsToBeInserted","parseInt","billNumberSection","titleSection","committeeSection","patronSection","lineSections","ReviewSection","props","selectedBillNumberIsLoaded","selectedSponsorIsLoaded","selectedMemberIsLoaded","selectedCommitteeIsLoaded","showLineNumbers","showTooltip","currentFormats","toggleShowLineNumbers","bind","toggleTooltip","setFormat","sessionId","this","setState","memberIsLoaded","actions","getMemberList","memberList","filter","m","ListDisplayName","ChamberCode","PatronDisplayName","membersCallback","finally","committeIsLoaded","getCommitteeList","committeeList","ParentCommitteeID","c","committeesCallback","committeeIsLoaded","content","handleEditorChange","wasEmpty","replaced","setWasEmpty","setReplaced","activeEditor","execCommand","setItem","getSelection","focusNode","parentElement","editorContent","versionAuthoring","loadCommittees","loadMembers","prevProps","selectedSponsor","selectedMember","selectedCommittee","className","Fragment","marginBottom","marginTop","onClick","stopPropagation","float","init","setup","addToggleButton","tooltip","bookmark","getBookmark","moveToBookmark","browser_spellcheck","plugins","allowAmendmentActions","toolbar","overrideRemoveAgreeRejectButtons","overrideRemoveCreateAmendmentButton","contextmenu","skin","paste_as_text","pasteAsText","valid_children","content_css","content_style","find","paste_word_valid_elements","paste_convert_word_fake_lists","paste_enable_default_filters","paste_data_images","paste_preprocess","plugin","args","table_default_attributes","border","formats","section","block","ldtitle","enactstatement","enactclause","catchline","rejected","i10","i0","i15","i20","customcenter","strikethrough","inline","end","textind","textbl","textbi","textasis","table","testc","tablec","tblhdn","tbllft","tblctr","tblrt","txtctr","drafter","billblank","pro","sumtext","lddata","ld","patctr","patalt","textrt","testhdrchar","texthdr","new","classes","style_formats","format","onEditorChange","reviewKey","React","Component","connect","bindActionCreators","committeeActionCreators","memberActionCreators","idToken","refreshToken","refreshTokenExpiration","claims","abortController","AbortController","signal","cancelRequest","abort","publicRequest","WebAPIKey","stringify","aborted","response","console","log","json","nonAbortable","checkToken","Authorization","FormData","token","jwtDecode","stringToken","exp","Date","getTime","getNewToken","resolve","rtoken","removeItem","user","roles","Claims","Roles","AccessToken","RefreshToken","mapJson","object","headerContent","id","nc","hierarchicalContent","nnc","nestedNestedContent","createTextNode","cssText","Style","Class","nestedContent","outerHTML","getHtml","jsonObject","AmendmentSection","shown","showAll","showInactiveAmendments","getAmendmentDescription","showAmendment","showAllAmendments","toggleInactiveAmendments","amendment","descriptionAndDisposition","Description","DocumentCode","TextDispositionID","TextDisposition","IsReprint","LDNumber","index","opposite","Array","amendments","fill","IsActive","backgroundColor","padding","checked","DraftText","renderHTML","VersionManagement","billFieldsetIsActive","amendmentFieldsetIsActive","reviewFieldsetIsActive","sessionOptions","legOptions","billVersionRef","selectedSession","selectedLegType","originalBillText","selectedBillText","selectedBillTextIndex","isLoaded","billList","selectedBill","billText","isPreviewVisible","processingFile","showPortal","billDataIsLoading","showCompletedItems","versionDate","moment","legDateOptions","selectedLegDate","selectedLegNum","showHeaders","previewContent","previewContentError","editorChanged","savedReviewContent","gettingIncompletePdf","showIncompletePdf","checkedBills","enrolledPrintQueue","useCurrentPublishDates","reviewContent","onReconvene","isDirty","showTextConfirmation","showBillConfirmation","changeCount","storedTextIndex","storedBill","storedBillIndex","sessionBillsList","checkAll","lastCheckedBills","amendmentRef","createRef","reviewRef","togglePreview","togglePortal","toggleFieldsetCollapse","handleSelectorChange","checkHandleSelectorChange","selectBill","selectBillIndex","checkBill","batchPublish","batchComplete","togglePublishDatePreference","handlePublishDateChange","toggleCompleteItems","handleSave","handleSaveCompletedItem","handleVersionDateChange","toggleHeaders","resetWarning","getJsonHeadersRequestString","getPreviewRequest","previewPdf","toggleReprint","filterReprints","setLegDateOptions","closeConfirmation","updateBillListByLegislationID","toggleCheckAll","pdfRef","isActive","reprintsFiltered","billTexts","val","newDraftText","previewRequest","doc","insertAdjacentHTML","docDivs","getElementsByTagName","j","docParagraphs","searchForLDTitleContainer","draftLDTitle","querySelector","DraftTitle","EditTitle","SessionCode","Chamber","LegislationChamberCode","VersionChamber","LegislationKey","LegislationNumber","substr","OnReconvene","LegislationClass","LegislationClassID","LegislationVersionID","getElementsByClassName","ReferredCommittee","split","trim","gettingCompletedItemPreview","previewPdfFile","src","bills","sasUrl","current","setAttribute","onload","getHtmlPreview","htmlPreview","locked","patronageInfo","textContent","htmlPreviewError","publish","isComplete","isSaving","customPublishDate","LegislationTextID","LegislationID","batchGenBillFile","SessionID","makeToast","IsPublic","newBillText","LegislationTextActionID","ModificationDate","IsComplete","HTMLFile","JSONFile","PDFFile","CandidateDate","LegislationVersion","subNumber","replaceAll","Sponsor","SponsorTypeID","CommitteeID","Patrons","CommitteeName","CommitteeNumber","VersionDate","removeAttribute","childNode","header","headerContainer","headerParagraphs","saveBillText","TextsList","billTextParams","getBillText","newbillTextList","priorBillText","findIndex","t","legFileGenParams","genBillFile","prevState","jsonPromise","bill","jsonHeadersRequestString","getJsonHeaders","jsonHeaders","LegislationTypeCode","applyPassageDates","HousePassageDate","SenatePassageDate","session","sessionList","SessionEvents","DisplayName","ActualDate","isSameOrBefore","headerDoc","SessionYear","isArray","all","replacement","paragraphs","legDates","isValid","sort","b","key","confirmed","storedKey","storedValue","showCategoryConfirmation","version","AuthoringLabel","getBillManagementList","getSessionBills","billManagementList","PendingChange","toLowerCase","legislationID","billListGetResponse","billListInState","associatedBillInStateIndex","associatedBillInGetResponse","updateDraftTextVersionDate","DOMParser","parseFromString","draftText","elements","billIndex","sbl","bt","billTextForReviewPane","target","href","confirm","click","billVersionDate","headerError","test","checkedBillsIndex","indexOf","splice","enrolledPrintQueueIndex","windowY","scrollTo","behavior","changingBillIndex","it","date","sessionBills","login","userClaims","legislationNumbers","LegislationNumbers","legislationTypeCode","housePassageDate","senatePassageDate","preDoc","preDocParagraphs","housePassage","senatePassage","legislationTextId","documentCode","overrideParam","getSessionShallowList","sessionShallowList","IsDefault","getBillVersionRef","billVersionsToUse","v","billVersionOptions","Resource","Scope","localeCompare","signedText","windowTitle","ref","paddingTop","trigger","componentRef","pageStyle","el","htmlFor","whiteSpace","scopes","marginRight","when","paddingBottom","billManagementListError","completedItems","legislationVersionID","verticalAlign","selected","legislationVersion","nav","billActionCreators","sessionActionCreators","navActionCreators","BillGridSection","selectedSessionBill","ldNumberSearch","searchingLDNumber","selectSessionBill","handleLdNumberSearchChange","searchByLDNumber","legislation","preventDefault","columns","Header","sortable","sortMethod","rowA","rowB","desc","legChamberA","legChamberB","legTypeA","legTypeB","filterable","accessor","Cell","original","to","row","patron","cursor","docCodeColumn","publishDateColumn","defaultChecked","billListIDs","left","classNamePrefix","options","sb","styles","provided","gridTemplateColumns","flex","right","readOnly","isClearable","resizable","loading","r","reactTable","minRows","defaultPageSize","pageSizeOptions","SelectorSection","handleSessionChange","handleLegTypeChange","handleLegDateChange","handleLegNumChange","isDisabled","selectedOption","triggeredAction","isSearchable","PreviewSection","Suffix","TextList","nonAmendments","originalIndex","showPageSizeOptions","showPagination","showPageJump","pageSize","getTrProps","_state","rowInfo","background","noDataText","previousLocationRequest","changeSessionRequest","makeToastRequest","toggleOverlayRequest","fileSuccess","fileFailure","reloadSessionSelectorChange","currentLocation","createBrowserHistory","previousLocation","toasts","hideSessionSelectorPaths","showOverlay","getPreviousLocation","changeSession","toggleOverlay","overlay","receiveFile","file","fileError","getFile","reloadSessionSelector","reload","getDefaultSessionAsyncRequest","getDefaultSessionAsyncSuccess","getDefaultSessionAsyncFailure","getSessionListRequest","getSessionListSuccess","getSessionListFailure","getSessionShallowListSuccess","getSessionShallowListFailure","getDefaultSessionSuccess","getSessionByIdRequest","getSessionByIdSuccess","getSessionByIdFailure","getSessionEventTypesRequest","getSessionEventTypesSuccess","getSessionEventTypesFailure","editSessionSuccess","editSessionFailure","createSessionSuccess","createSessionFailure","getSessionByCodeRequest","defaultSession","defaultSessionAsync","sessionListError","sessionEventTypes","sessionEvents","SessionType","SessionStart","BillCrossover","PrefileStart","BillCutoff","Adjournment","Reconvene","getSessionError","saveSession","saveSessionError","createSession","createSessionError","requestSessionEventTypes","receiveSessionEventTypes","sessionEventTypesError","getSessionEventTypes","SessionEventTypes","requestDefaultSessionAsync","receiveDefaultSessionAsync","defaultSessionAsyncError","getDefaultSessionAsync","receiveDefaultSession","sessiondata","setDefaultSession","defaultSessionObject","requestSessionList","receiveSessionList","getSessionList","year","Sessions","receiveSessionShallowList","sessionShallowListError","sessionShallowListMessage","requestSessionById","receiveSessionById","sessionByIdError","getSessionById","partner","sessionData","getSessionByCode","setSelectedSession","sessionObject","receiveEditSession","res","editSessionError","editSession","receiveCreateSession","defaultSessionAsyncMessage","sessionEventTypesMessage","errorMessage","InputFeedback","Label","children","originatingChamberOptions","sessionTypeOptions","stateOptions","customStyles","option","base","control","minHeight","menu","zIndex","singleValue","MenuList","maxHeight","initialOffset","itemCount","itemSize","initialScrollOffset","LargeListSelect","filterOption","createFilter","ignoreCase","ignoreAccents","matchFrom","components","Dropdown","multi","onBlur","TextInput","defaultValue","TextArea","legislationIdsListRequest","legislationIdsListSuccess","legislationIdsListFailure","billListByIdsRequest","billListByIdsSuccess","billListByIdsFailure","legislationTextsHitCountsRequest","legislationTextsHitCountsSuccess","legislationTextsHitCountsFailure","billListRequest","billListSuccess","billListFailure","mostFrequentBillListSuccess","mostFrequentBillListFailure","billSummaryRequest","billSummarySuccess","billSummaryFailure","saveBillSummaryRequest","saveBillSummarySuccess","saveBillSummaryFailure","billHistorySuccess","billHistoryFailure","billVersionRequest","billVersionSuccess","billVersionFailure","billNumbersSuccess","billNumbersFailure","legislationClassesSuccess","legislationClassesFailure","billStatusRefSuccess","billStatusRefFailure","billStatusCategoryRefSuccess","billStatusCategoryRefFailure","billEventRefSuccess","billEventRefFailure","legislationEventsByIdSuccess","legislationEventsByIdFailure","billTextSuccess","billTextFailure","ihodAmendmentSaveSuccess","ihodAmendmentSaveFailure","billVersionRefSuccess","billVersionRefFailure","sponsorRefListSuccess","sponsorRefListFailure","billSummaryRefSuccess","billSummaryRefFailure","batchPublishSuccess","batchPublishFailure","batchCompleteSuccess","batchCompleteFailure","billTextSaveSuccess","billTextSaveFailure","jsonHeadersSuccess","jsonHeadersFailure","pdfPreviewSuccess","pdfPreviewFailure","previewPdfFileSuccess","previewPdfFileFailure","htmlPreviewSuccess","htmlPreviewFailure","htmlFilePreviewSuccess","htmlFilePreviewFailure","billSaveSuccess","billSaveFailure","billFileGenSuccess","billFileGenFailure","batchBillFileGenSuccess","batchBillFileGenFailure","billManagementListSuccess","billManagementListFailure","sessionBillsSuccess","sessionBillsFailure","billEventsSuccess","billEventsFailure","billEventSaveSuccess","billEventSaveFailure","textListSuccess","textListFailure","subjectListSuccess","subjectListFailure","introDateListSuccess","introDateListFailure","legislationAmendmentListSuccess","legislationAmendmentListFailure","legislationDispositionsSuccess","legislationDispositionsFailure","legislationStatusHistorySuccess","legislationStatusHistoryFailure","deleteBlobFileSuccess","deleteBlobFileFailure","sasURLSuccess","sasURLFailure","billSuccess","billFailure","uploadImpactStatementRequest","legislationIdsList","legislationIdsListPagination","billListByIds","billListByIdsPagination","legislationTextsHitCounts","billListPagination","mostFrequentBillList","searchCriteria","billDetails","billsByMember","billHistory","billVersion","billNumbers","billSummary","billSummarySave","billVersionRefError","sponsorRefList","sponsorRefListError","billEventRef","billEventRefError","billTextError","batchPublishSave","batchPublishError","batchCompleteSave","batchCompleteError","billTextSave","billTextSaveError","jsonHeadersError","pdfPreview","pdfPreviewError","sasUrlError","htmlFilePreview","htmlFilePreviewError","billFileGen","billFileGenError","batchBillFileGen","batchBillFileGenError","billStatusReferences","legislationClasses","billStatusCategoryReferences","sessionBillsError","billEvents","billEventsError","billEventSave","billEventSaveError","textList","textListError","subjectList","subjectListError","introDateList","introDateListError","legislationAmendmentList","legislationAmendmentListError","legislationDispositions","legislationDispositionsError","legislationStatusHistory","legislationStatusHistoryError","sasURLLink","sasURLLinkError","billError","uploadImpactStatementResponse","uploadImpactStatementError","deleteBlobFileResponse","deleteBlobFileError","receiveBill","getBill","REACT_APP_LEGISLATION_API_URL","Legislations","receiveBillHistory","billHistoryError","getBillHistoryByBillID","LegislationEvents","requestBillVersion","receiveBillVersion","billVersionError","getBillVersionByBillNumber","LegislationsVersion","getBillVersionsByBillID","requestBillSummary","receiveBillSummary","billSummaryError","getBillSummary","SummaryList","LegislationSummaries","requestSaveBillSummary","receiveSaveBillSummary","saveBillSummaryError","saveBillSummary","receiveBillStatusRefs","billStatusRefsError","getBillStatusReferences","References","receiveLegislationClasses","legislationClassesError","getLegislationClasses","LegislationClasses","receiveBillStatusCategoryRefs","billStatusCategoryRefsError","getBillStatusCategoryReferences","LegislationCategoriesList","receiveBillEventRefs","billEventRefsError","getBillEventReferences","EventTypes","receiveLegislationEventsById","legislationEventsById","legislationEventsByIdError","getLegislationEventsByLegislationId","requestLegislationIdsList","receiveLegislationIdsList","pagination","FailureMessage","legislationIdsListError","getLegislationIdsList","get","requestBillListByIds","receiveBillListByIds","billListByIdsError","getBillListByIds","requestLegislationTextsHitCounts","receiveLegislationTextsHitCounts","legislationTextsHitCountsError","getLegislationTextsHitCounts","HitCounts","requestBillList","receiveBillList","billListError","getBillList","requestMostFrequentBillList","receiveMostFrequentBillList","mostFrequentBillListError","getMostFrequentBillList","receiveBillNumbers","billNumbersError","billNumberMessage","getBillNumbers","LegislationNumbersList","receiveBillVersionRef","LegislationVersionList","receiveSponsorRefList","getSponsorRefList","SponsorTypes","receiveBillSummaryRef","billSummaryRef","billSummaryRefError","getBillSummaryRef","SummaryVersions","receiveBillText","receiveBillTextSave","receiveIhodAmendmentSave","ihodAmendmentSave","ihodAmendmentSaveError","saveIhodAmendment","receiveBatchPublish","receiveCompletePublish","receiveJsonHeaders","receivePdfPreview","getPdfPreview","receivePreviewPdfFile","previewPdfFileError","sasUrlFailure","sasTokenUrl","receiveHtmlPreview","receiveHtmlFilePreview","getHtmlFilePreview","receiveBillSave","billSave","billSaveError","saveBill","receiveBillFileGen","receiveBatchBillFileGen","receiveBillManagementList","receiveSessionBills","receiveBillEvents","getBillEvents","receiveBillEventSave","saveBillEvent","receiveTextList","getTextList","LegislationTextList","receiveSubjectList","getSubjectList","REACT_APP_LEGISLATION_SUBJECT_SERVICE","SubjectsReference","subject","Subject","SubjectIndexID","receiveIntroDateList","getIntroDateList","LegislationDatesList","receiveLegislationAmendmentList","getLegislationAmendmentList","LegislationAmendmentList","receiveLegislationDispositions","getLegislationDispositions","TextDispositionList","receiveLegislationStatusHistory","getBillStatusHistory","LegislationsStatusHistory","receiveSasURL","sasURLError","getSasURL","uploadImpactStatement","append","receiveDeleteBlobFile","deleteBlobFileStatement","FilesDeleted","batchPublishSaveError","batchCompleteSaveError","msalConfig","auth","clientId","APP_ENV","authority","redirectUri","postLogoutRedirectUri","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","containsPii","LogLevel","Error","Info","info","Verbose","debug","Warning","warn","loginRequest","graphToken","loginSuccess","loginFailure","logoutSuccess","refreshTokenRequest","refreshTokenSuccess","refreshTokenFailure","houseLoginRequest","houseLoginSuccess","houseLoginFailure","decodedToken","jwtToken","userData","initials","chamber","email","resources","parsedToken","given_name","charAt","family_name","expr","isTokenExpired","parsedClaims","claimsObject","RoleName","authActionCreators","requestLogin","creds","initiateRedirect","receiveLogin","isAuthenticated","userProfile","loginError","loginUser","UserID","userId","Password","userPassword","GraphToken","requestLogout","receiveLogout","logoutUser","requestRefreshToken","receiveRefreshToken","refreshTokenError","refreshAccessToken","requestHouseLogin","receiveHouseLogin","houseLogin","authToken","expirationDate","HouseLoginButton","instance","useMsal","username","loginHint","loginRedirect","LoginForm","password","isSubmitting","checkForHouseDomain","handleChange","handleSubmit","userNameSplit","IsPasswordTemporaryOrExpired","history","failureMessage","failureCode","match","isSubmenu","autoFocus","onFocus","textDecoration","HouseLogoutButton","logoutRedirect","logout","Links","unsortedLinks","canAccessMemberMgmt","route","canAccessSessionMgmt","canAccessCommitteeMgmt","canAccessMinutesMgmt","canAccessDocketMgmt","canAccessBillMgmt","canAccessVersionMgmt","canAccessAmendmentMgmt","canAccessCommMgmt","canAccessCalendarMgmt","canAccessConfigurationsMgmt","canAccessJournalMgmt","canAccessVoteMgmt","canAccessPrintMgmt","canAccessMeetingsMgmt","canAccessPartnerMgmt","canAccessUserMgmt","canAccessBds","outside","link","idx","canAccessReportMgmt","canAccessSenateLinks","canAccessPatronStatusReport","isLoggedIn","canAccessWatchlists","UserProfile","tabIndexNum","targetFocus","slideout","slideoutToggle","isOpen","isAriaHidden","isAriaExpanded","isMenuVisible","permissions","focus","tabIndex","handleLogout","Boolean","p","bdsRole","Submenu","isAuth","SearchInputComponent","search","handleInputChange","event","getSessionPromise","regexResult","legNumbers","searchTerms","searchWithRemovedBillNumbers","resultIndex","param","selectedBillNumbers","selectedKeywords","btoa","pathname","queryString","collection","parsed","q","withRouter","NavMenu","showLogin","pathName","handleClick","handleClosingLoginOnOffClick","mousedownListener","addEventListener","removeEventListener","loginBox","profileLink","loginLink","contains","button","ProfileButton","LoginButton","isBillPath","transitionName","transitionEnterTimeout","transitionLeaveTimeout","Menu","borderRadius","menuList","indicatorSeparator","SessionSelector","HISTORICAL_DATA_REDIRECT","LegacySessionID","historicalSessionRedirect","redirect","substring","s","sessionListMessage","getSessions","reverse","overrideSession","newSession","path","RegExp","maxMenuHeight","getSelectedSessionLabel","Popup","componentWillUnmount","timerHandle","clearTimeout","closePopup","logOut","togglePopup","isIdle","setTimeout","ToastContainer","visible","dismiss","dismissed","long","Toast","item","IconLinks","budgetUrl","Layout","helpBanner","showPopup","popupMessage","dismissHelpBanner","logOutUser","contactReferencesSuccess","contactReferencesFailure","contactSaveSuccess","contactSaveFailure","personListSuccess","personListFailure","personSuccess","personFailure","personContactRequest","personContactSuccess","personContactFailure","userListSuccess","userListFailure","userSuccess","userFailure","userByEmailSuccess","userByEmailFailure","userSaveSuccess","userSaveFailure","userCreateSuccess","userCreateFailure","newUserCreateSuccess","newUserCreateFailure","personCreateSuccess","personCreateFailure","personSaveSuccess","personSaveFailure","dirListSuccess","dirListFailure","userRegisterSuccess","userRegisterFailure","userCreatePublicSuccess","userCreatePublicFailure","requestPasswordResetSuccess","requestPasswordResetFailure","passwordResetSuccess","passwordResetFailure","changePasswordSuccess","changePasswordFailure","contactReferences","contactReferencesError","contactSave","contactSaveError","userList","userListError","personList","personListError","personContact","userError","userByEmail","userByEmailError","personCreate","personCreateError","dirList","dirListError","userSave","userSaveError","userCreate","userCreateError","newUserCreate","newUserCreateError","userCreatePublic","userCreatePublicError","userRegister","userRegisterError","requestPasswordReset","requestPasswordResetError","passwordReset","passwordResetError","changePassword","changePasswordError","userActionCreators","receiveContactReferences","getContactReferences","ContactTypeReferences","receiveContactSave","saveContact","requestPersonContact","receivePersonContact","contact","personContactError","personConact","getPersonContact","receivePersonList","getPersonList","Persons","receivePerson","person","personError","getPerson","receiveUserList","getUserList","UserProfiles","receiveUser","userdata","getUser","receiveUserByEmail","userByEmaildata","getUserByEmail","receiveUserSave","userErrorSave","saveUser","receiveUserCreate","userErrorCreate","createUser","receiveNewUserCreate","newUserErrorCreate","createNewUser","receivePersonCreate","createPerson","receivePersonSave","personSave","personSaveError","savePerson","receiveDirList","getDirReferences","Directories","receiveRegisterUser","userErrorRegister","registerUser","receiveCreatePublicUser","userErrorCreatePublic","Value","startsWith","endsWith","createPublicUser","receiveRequestPasswordReset","receivePasswordReset","resetPassword","receiveChangePassword","calculateNumberOfCriteriaMet","criteriaMet","CreateAccount","firstname","lastname","passwordconfirm","showPassword","handleTextChange","toggleShowPassword","checkName","checkPassword","checkPasswordConfirm","toggleShowTooltip","handleClickOutside","createAccount","infoRef","infoButtonRef","nameError","showHelp","passwordError","currentpassword","passwordConfirmError","toolTip","isError","isCreating","FirstName","LastName","HashedWord","registerhash","accountCreated","users","passwordHelp","indicate","gridGap","autoComplete","emailRegex","RegisterAccount","checkEmail","registerAccount","emailError","encodeURIComponent","ForgotPassword","paswordResetRequested","houseDomains","senateDomains","legislativeDomains","ChangePassword","isChanging","confirmPassword","passwordChangeFinished","resettingPassword","emailaddress","newpassword","loginObj","emailAddress","resetHash","resethash","EmailAddress","passwordHasBeenResetCheckEmail","passwordistemporaryorexpired","passwordIsTemporaryOrExpired","emailSplit","MemberManagementGrid","searchFilter","handleFilterChange","filterData","formattedFilter","memberContacts","memberListContactData","MemberDisplayName","MemberNumber","getMemberListContact","checkedMembers","lineHeight","dropdownIndicator","ServiceEndDate","ServiceEndReason","headerClassName","expander","Expander","isExpanded","ContactInformation","MemberID","SubComponent","MemberInfo","contactIndex","ContactType","Address1","Address2","City","StateCode","ZipCode","PhoneNumber","contactList","contactOptions","removeContact","changeContact","Fields","addContact","UserForm","firstName","lastName","selectedDomain","handleDomainChange","userObj","LoginID","DomainName","DomainID","IdentityID","personData","domainOptions","toggleUserCreation","MemberManagementForm","userFieldsetIsActive","personalFieldsetIsActive","memberFieldsetisActive","memberData","chamberOptions","districtOptions","showUserCreation","statusOptions","showPersonCreation","memberNumberError","buildListDisplayName","handleMemberChange","handlePersonChange","handleContactChange","selectPerson","togglePersonCreation","selectUser","saveForm","getMemberData","listDisplayName","MiddleName","AlternateName","memberDisplayName","personObj","memberDataObject","fieldset","buildMemberDisplayName","stateVar","newMember","DistrictID","PartyCode","newMemberObj","sessionCode","buildPatronDisplayName","memberNumbers","createMember","memberCreate","fullName","FullName","rowIndex","saveMember","contactArray","contactObj","memberId","getMember","Person","getMemberNumbers","getPersonData","getDistricts","districtList","district","Title","getParties","getPartyCodeList","partyOptions","partyCodeList","party","getContactTypes","ContactTypeID","getStatuses","getMemberStatuses","memberStatuses","MemberStatusID","dir","PersonTable","selectedPersonIndex","handleSearchChange","formattedSearch","filteredPersonList","personIndex","PersonInformation","OwnerID","ContactInformationID","Prefix","OwnerTypeID","MemberInformation","invalidGabEmail","invalidGabPhone","markOverride","color","VotingSequence","SeatNumber","paddingLeft","ServiceBeginDate","GABEmailAddress","GABPhoneNumber","RoomNumber","CreateMember","EditMember","memberid","MemberManagement","exact","component","SessionGridComponent","filtered","currentYear","getFullYear","isCurrentBiennium","filterAll","defaultFilterMethod","onFilteredChange","Year","sessionStartObj","startDate","Filter","getProps","filterMethod","rows","yearfilter","defaultSorted","SessionManagementGrid","SessionForm","selectedSessionType","selectedSessionEventType","sessionEventData","handleEventChange","handleSessionEventTypeChange","handleCopyContinuedChange","addSessionDate","sessionCodeSuffix","romanize","Number","sessionTypeData","num","NaN","digits","String","roman","pop","join","copyContinuedLegislation","prefileDate","prefileDueDate","codeError","prefileDueDateError","prefileDateError","startDateError","displayNameError","initialSessionCode","CopyContinuedLegislation","EventTypeID","sessionEventsIsLoaded","sessionsAreLoaded","SessionTypeID","sessionHasBills","sessionBillsAreLoaded","filteredSessionEvents","eventData","eventIndex","SessionManagement","SessionManagementForm","CommitteeGridComponent","showCreateSuccess","showCreateFailure","isSubcommittee","disableChamberSelector","selectedError","currentDate","filterChamber","filterName","committeeNameInput","committeeNumberInput","committeeNameChange","committeeNumberChange","sendCreateDetails","getPartnerCommittees","houseScope","senateScope","committeeChamber","newCommittee","createNewCommittee","getCommittees","committeeName","committeeNumber","toggleChamber","tableData","partnerCommittees","partnerCommitteesError","createCommitteeMessage","committeePartnerListError","column","lowercaseRow","lowercaseFilter","CommitteeManagementGrid","getListStyle","isDraggingOver","SelectMenu","dropdown","dropdownData","isDuplicate","selectedPersonnel","handleDropDownChange","Email","onInsert","PersonnelDraggableComponent","personnel","personnelArray","Sequence","onDragEnd","staffRoleTypeID","EffectiveEndDate","AffiliationID","affiliation","StaffRoleTypeID","onPersonnelChange","rowID","tempArray","StaffID","destination","startIndex","endIndex","removed","reorder","source","keys","droppableId","snapshot","innerRef","draggableId","draggableProps","dragHandleProps","isDragging","draggableStyle","userSelect","pendingDeletion","onRemove","dropdownDataMembers","dropdownDataRoles","handleRolesDropDownChange","Seniority","handleSeniorityChange","handleEditVotingSequence","AssignDate","handleDateChange","popperPlacement","filterDate","isValidTerminationDate","placeholderText","MembersDraggableComponent","DisplaySequence","role","selectedRole","CommitteeRoleID","membersDropdown","RemoveDate","onMemberChange","newItems","memberRole","valObj","isPendingAdd","toggleInput","memberSeniority","memberVotingSequence","memberAssignDate","memberRemoveDate","tempValue","stateName","roleID","memberRoleEditStyle","sortByVotingSequence","handleEditRoles","handleSaveRoles","getCommitteeRoleName","handleEditSeniority","handleSaveSeniority","handleSaveVotingSequence","handleEditAssignDate","handleSaveAssignDate","handleEditRemoveDate","maxDate","handleSaveRemoveDate","SubcommitteeManagementGrid","subcommitteeData","subcommitteeNameInput","subcommitteeNumberInput","calculatedFullCommitteeNumber","subcommitteeNameChange","subcommitteeNumberChange","calculateFullCommitteeNumber","sendSubcommitteeCreateDetails","subcommitteeName","subcommitteeNumber","number","parentCommitteeNumber","padStart","isInteger","createSubcommittee","subcommitteeMessage","min","max","parentCommitteeID","personnelListRequest","personnelListSuccess","personnelListFailure","roleTypesRequest","roleTypesSuccess","roleTypesFailure","personnelReferencesRequest","personnelReferencesSuccess","personnelReferencesFailure","personnelSaveRequest","personnelSaveSuccess","personnelSaveFailure","personnelStaffList","personnelClerkList","personnelOtherList","personnelStaffReferences","personnelClerkReferences","personnelErrorSave","receivePersonnelSave","personnelStaffSave","personnelClerkSave","roleTypes","personnelActionCreators","requestPersonnelReferences","personnelReferences","receivePersonnelReferences","clerkReferences","staffReferences","personnelReferencesError","getPersonnelReferences","Personnels","personnelObj","isOtherDuplicate","requestPersonnelList","personnelList","receivePersonnelList","clerkList","staffList","otherList","personnelListError","getPersonnelList","isPublic","requestRoleTypes","receiveRoleTypes","roleTypesError","getRoleTypes","StaffRoleTypes","requestPersonnelSave","savePersonnel","SubCommitteesList","listCommittees","Math","random","MemberListComponent","names","PersonnelListComponent","CommitteeDetailsComponent","committeeData","subcommitteesList","Abbreviation","MeetingNote","TwitterHandle","TwitterEmail","membersByCommitteeError","memberRoles","partnerCommitteeListError","PartnerCommitteeDetails","NewCommitteeFormComponent","infoFieldsetIsActive","clerkFieldsetIsActive","staffFieldsetIsActive","membershipFieldsetIsActive","subcommFieldsetIsActive","clerks","staff","committeeMemberRoles","committeeMemberNames","subcommitteeIsLoaded","showPreview","ascending","isFormDirty","getSubcommittees","handleClerkChange","handleStaffChange","handleClose","committeeid","subcommitteeid","getPartnerCommitteeList","partnerCommitteeList","serviceEndDate","memberObject","MemberList","personnelObject","saveCommittee","saveCommitteeError","commData","savedCommittee","saveMemberCommittee","memberCommitteeSaveError","memberCommitteeSave","saved","committeeNameMissing","goBack","committeeId","committeeParams","getPartnerCommitteeById","partnerCommitteeByIdData","committeeLoaded","getCommitteeMemberRoles","committeeHouseRoles","committeeSenateRoles","chamberCode","organizeMembers","getMembersByCommittee","membersByCommittee","membersLoaded","parentCommData","parentCommitteeName","filteredStaffAndClerkReferences","OrganizationName","personnelParams","clerk","staf","personnelLoaded","AgendaURL","CommitteeFiles","isBefore","isAfter","paddingRight","CommitteeManagement","CommitteeManagementForm","emptyCache","caches","delete","getReferencesSuccess","getReferencesFailure","getCalendarListSuccess","getCalendarListFailure","createCalendarSuccess","createCalendarFailure","saveCalendarSuccess","saveCalendarFailure","saveCalendarFileSuccess","saveCalendarFileFailure","getCalendarSuccess","getCalendarFailure","getDocketListSuccess","getDocketListFailure","createDocketSuccess","createDocketFailure","saveDocketSuccess","saveDocketFailure","docketByIdRequest","docketByIdSuccess","docketByIdFailure","patronListDocketByIdRequest","patronListDocketByIdSuccess","patronListDocketByIdFailure","getCalendarCategoriesReferencesSuccess","getCalendarCategoriesReferencesFailure","getCalendarAssignmentsSuccess","getCalendarAssignmentsFailure","getAdminCalendarAssignmentsSuccess","getAdminCalendarAssignmentsFailure","saveCalendarAssignmentSuccess","saveCalendarAssignmentFailure","saveCalendarCurrentItemSuccess","saveCalendarCurrentItemFailure","replacePdfRequest","references","getReferencesError","docketList","getDocketListError","calendarList","calendarListError","calendarCreate","calendarCreateError","calendarSave","calendarSaveError","calendarFileSave","calendarFileSaveError","calendarGet","calendarGetError","calendarCategoriesReferences","calendarCategoriesReferencesError","docketByIdData","docketSave","docketSaveError","replacePdfResponse","replacePdfError","patronListDocketByIdData","sendDocketHtmlError","sendCalendarHtmlError","sendDocketHtmlResponse","sendCalendarHtmlResponse","calendarAssignments","getCalendarAssignmentsError","adminCalendarAssignments","getAdminCalendarAssignmentsError","calendarAssignmentSave","saveCalendarAssignmentsError","calendarActionCreators","requestDocketById","receiveDocketById","docketByIdError","getDocketById","Dockets","requestPatronListDocketById","receivePatronListDocketById","patronListDocketByIdError","getPatronListDocketById","ListItems","receiveReferences","getReferences","CalendarActions","receiveDocketList","getDocketList","receiveDocketCreate","docketCreate","createDocketError","createDocket","receiveDocketSave","saveDocket","HouseAgendas","receiveCalendarCategoriesReferences","includeChairmansReportCategories","CalendarCategoryTypes","cc","CategoryType","getCalendarCategoriesReferencesError","getCalendarCategoriesReferences","receiveCalendarAssignments","CalendarAssignments","getCalendarAssignments","receiveAdminCalendarAssignments","getAdminCalendarAssignments","receiveCalendarAssignmentSave","saveCalendarAssignmentError","saveCalendarAssignment","Message","receiveCalendarList","getCalendarList","Calendars","receiveCalendarCreate","createCalendarError","createCalendar","createCalendarResponse","receiveCalendarSave","saveCalendar","saveCalendarResponse","receiveCalendarFileSave","saveCalendarFile","receiveCalendarById","getCalendarById","receiveCalendarCurrentItem","calendarCurrentItem","calendarCurrentItemError","saveCalendarCurrentItem","replacePdf","sendDocketHtml","sendCalendarHtml","docketCreateError","scheduleListSuccess","scheduleListFailure","scheduleTypeListSuccess","scheduleTypeListFailure","scheduleGetSuccess","scheduleGetFailure","scheduleSaveSuccess","scheduleSaveFailure","scheduleCreateSuccess","scheduleCreateFailure","meetingsCalendarPreviewSuccess","meetingsCalendarPreviewFailure","getMeetingRoomReferencesSuccess","getMeetingRoomReferencesFailure","subcommitteeMembersRequest","subcommitteeMembersSuccess","subcommitteeMembersFailure","uploadMeetingPdfSuccess","uploadMeetingPdfFailure","scheduleList","schedule","scheduleListError","scheduleTypeListError","scheduleGetError","scheduleSaveError","scheduleCreateError","meetingRoomReferences","meetingRoomReferencesError","meetingsCalendarPreview","meetingsCalendarPreviewError","subcommitteeMembers","uploadMeetingPdf","uploadMeetingPdfError","scheduleActionCreators","receiveScheduleList","getScheduleList","parter","REACT_APP_SCHEDULE_API_URL","Schedules","receiveScheduleTypeList","scheduleTypeList","getScheduleTypeList","ScheduleTypes","receiveSchedule","scheduleError","getSchedule","receiveScheduleSave","scheduleSave","saveSchedule","receiveScheduleCreate","scheduleCreate","createSchedule","receiveMeetingRoomReferences","getMeetingRoomReferencesError","getMeetingRoomReferences","MeetingRooms","receiveMeetingsCalendarPreview","getMeetingsCalendarPreviewError","getMeetingsCalendarPreview","requestSubcommitteeMembers","receiveSubcommitteeMembers","subcommitteeMembersError","getSubcommitteeMembers","SubcomitteeMembers","receiveUploadMeetingPdf","DocketGrid","committeeOptions","subcommitteeOptions","docketDate","utc","startOf","hour","minute","createFailureMessage","isAdding","showDeleteModal","docketToDeleteIndex","getDockets","deleteDocket","checkDeleteDocket","cancelDeleteDocket","handleSessionSelectChange","handleCommitteeSelectChange","handleSubcommitteeSelectChange","newState","selectedSubcommittee","handleDropdownChange","createDocketObj","DocketDate","DocketType","DocketTypeID","VoteRoomID","ScheduleDate","ScheduleTypeID","calendar","docketBeingDeleted","DocketID","docketData","DocketCategories","DocketItems","DeletionDate","showDeleteSuccess","deleteFailureMessage","docketIndex","filteredCommittees","listParams","docketParams","DocketNumber","getItemStyle","CommitteeBillsGrid","showAuxBillForm","auxBill","savingAuxBill","toggleRow","toggleBill","toggleBillBulk","toggleEdit","saveChange","toggleAuxBillAdd","addAuxBill","setAuxBill","categorySequence","categories","catIndex","category","itemIndex","lastCheckedBill","nativeEvent","shiftKey","abs","updateDocket","sequence","nextHighestActiveLegislationNumber","currentSequences","apply","Infinity","activate","isEditing","newDescription","notesCategories","IsLegislationCategory","docketBills","flatMap","d","gap","selectAllActive","toggleAllActive","selectAllInactive","gridTemplateRows","categoryIndex","dataActive","note","dataInactive","resize","cols","LegislationDescription","DocketItemID","HouseAgendaItemID","Docket","patronList","docket","hideCaption","hidePatron","hideSummary","Summary","hideTitle","hideLDNumber","DocketDetailsComponent","HouseAgendaCategories","Staff","obj","committeeHeader","ParentCommitteeName","subcommitteeHeader","sessionHeader","memberNames","CommitteeMember","clerkNames","staffNames","hideClerk","hideStaff","scheduleIndex","ScheduleTime","RoomDescription","Comments","HouseAgendaItems","DocketPatronList","patronListDocketData","CalendarDate","Legislation","togglePatronList","PUBLISH_DOCKET","TIME_REGEX","DocketFormComponent","handleMeetingRoomChange","selectedMeetingRoom","pendingSave","committeeClerk","committeeStaff","committeeLeadership","meetingRoomsList","showPatronList","handleSequenceChange","toggleDocketSection","downloadWordFile","handleCommentHeight","docketBillParams","docketid","getDocketBills","CalendarDisplay","DisplayColumn","IsDisplayed","noSavedItems","memberDelimiter","getMeetingRoomsReferences","notesCategory","calCategory","CategoryCode","cat","time24Hr","hours","minutes","modifier","active","publishFlag","unpublishing","DocketFiles","hasNotes","ContentHTML","filename","downloadLink","legislationKey","SummaryVersion","round","commentHeight","committeeDate","dockets","disablePublish","for","fontFamily","room","DocketManagementForm","DocketManagement","render","DocketForm","CalendarGrid","nextBusinessDay","day","selectedChamber","calendarDate","calendarToBeDeleted","calendarBeingDeleted","showDeleteWarning","getCalendars","handleChamberChange","deleteCalendar","toggleDeleteCalendar","calendarNumber","isSame","createCalendarObj","CalendarType","CalendarTypeID","CalendarNumber","CalendarID","calendarData","calendarParams","ReferenceNumber","newAgendaItemText","AgendaItemsComponent","agendaItemContent","saveAgendaItems","addNote","toggleCustomNote","agendaItems","agenda","AgendaItems","newAgendaItem","AgendaId","updateAgendaItems","agendaIndex","toggleAgendaItemEditor","CalendarDescription","OrigIsActive","sortedAgendaItems","newAgendaItemContent","alert","removedItemContent","removedItem","tinyMceEditor","tinyMceId","tinyMceHtmlElem","tinyMceHeaderElem","getElementById","tinymceId","editors","_snapshot","isDragDisabled","AgendaItemId","borderRight","borderTop","borderLeft","borderBottom","onInit","setTinyMceIds","menubar","statusbar","textAlign","isNotHidden","IsHidden","CalendarCategoryTypeID","NUMERIC_SORT_CATEGORIES","sortAgendas","calendarChamber","Ranking","sortAgendasNumerically","BillsGrid","categoryDescription","associatedReferenceCategory","calendarCategories","PluralDescription","Agendas","showAgendaItemEditor","showAgendaItemEditorCategoryIndex","handleAgendaSort","toggleSelectAll","showAgendaItems","toggleEditCategoryDescription","expandTitle","getCategoryBills","setDescription","setBillsInConferenceCategoryDescription","categoryDescriptionIsEdited","changeCommitteeDropdown","changeDateDropdown","addBill","toggleShowAmendments","setRanking","handleDescriptionChange","selectAllCommending","selectAllMemorial","organizedBills","selectAll","leg","updateAgenda","categoryAsDisplayed","updatedOrganizedBills","newTypeAndPluralityLanguage","existingDescription","categoryLegislations","activeCategoryLegislations","cl","numResolutions","acl","numBills","agendas","categoryTypeId","unrankedAgendas","rankedAgendas","inactiveAgendas","rankings","gaps","sortInactiveAgendasNumerically","sortInactiveAgendas","Set","size","insertPoint","pending","duplicateCategory","duplicateAgenda","duplicateCategoryIndex","legNumbersToBeIncluded","topOrBottom","checkedAgenda","CalendarCategoryID","existingCategoryAgendaIndex","LegislationTitle","associatedCategory","showAmendments","ranking","save","editing","tempDescription","calendarCategoryOptions","billButtonText","billExists","some","selectedDate","dateList","selectedCategory","changeCategoryDropdown","addCategory","toggleHideAllCategories","hideCategories","toggleHideAllNonIncludedBills","hideAllNonIncludedBills","showTitles","toggleHideCategory","DisplayType","userRoles","deleteCategory","switchCategory","toggleCalendarPreview","changeBillDropdown","inputValue","alignItems","moveTo","showNewIndicator","AgendaID","fullCommitteeList","calendarTime","CalendarCategoryTemplateID","generateCsv","col","rowText","voteLinkRequest","voteLinkSuccess","voteLinkFailure","voteDetailsRequest","voteDetailsSuccess","voteDetailsFailure","voteActionListRequest","voteActionListSuccess","voteActionListFailure","voteListSuccess","voteListFailure","voteTypesSuccess","voteTypesFailure","voteSaveSuccess","voteSaveFailure","voteFileSuccess","voteFileFailure","voteSaveMotionSuccess","voteSaveMotionFailure","voteLinkResponse","voteLinkError","voteDetailsResponse","voteDetailsError","voteList","voteListError","voteTypes","voteTypesError","voteSave","voteSaveError","voteSaveBulk","voteSaveBulkError","voteFile","voteFileError","voteSaveMotion","voteSaveMotionError","voteActionCreators","requestVoteDetails","receiveVoteDetails","getVoteDetails","Votes","requestVoteLink","receiveVoteLink","getVoteLink","VoteLinks","requestVoteActionList","receiveVoteActionList","voteActionList","voteActionListError","getVoteActionList","VoteActions","receiveVoteList","getVoteList","ShallowVotes","receiveVoteTypes","getVoteTypes","VoteTypes","receiveVoteSave","saveVote","receiveVoteSaveBulk","saveVoteBulk","receiveVoteFile","voteFileGen","REACT_APP_VOTE_FILE_GEN_URL","receiveVoteSaveMotion","saveVoteMotion","patronListRequest","patronListSuccess","patronListFailure","patronRolesSuccess","patronRolesFailure","patronTypesSuccess","patronTypesFailure","patronSaveSuccess","patronSaveFailure","senatePatronsList","housePatronsList","chiefPatronsList","patronRoles","patronRolesError","patronTypes","patronTypesError","patronSaveList","patronSaveError","patronActionCreators","requestPatronList","receivePatronList","housePatrons","senatePatrons","chiefPatrons","patronListError","getPatronList","patronsListError","patrons","receivePatronRoles","getPatronRoles","PatronRolesList","receivePatronTypes","getPatronTypes","MemberPatronTypes","requestPatronSave","receivePatronSave","savePatrons","patronSave","VersionData","useState","showText","toggleText","impactFileUrls","pdfLink","ImpactFile","FileURL","description","pushWithKeywords","substituteLdAndDocCodeString","resource","legislationClass","legislationNumber","handleToggleDescriptionEdit","saveDescription","countMatches","LinkFile","toggleStatementForm","DraftDate","VersionList","keywordExpression","keywordParts","foundAnOperator","keywordPart","sanitizedKeywords","chars","wordToInsert","phraseToInsert","statementDate","statementDescription","descriptionEditable","reportTypesSuccess","reportTypesFailure","reportSuccess","reportFailure","billReportInformationSuccess","billReportInformationFailure","shareReportRequest","reportTypes","reportTypesError","report","reportError","shareReport","billReportInformation","billReportInformationError","reportActionCreators","receiveReportTypes","getReportTypes","REACT_APP_REPORT_FILE_GEN_SERVICE","Reports","receiveReport","getReport","ReportDataList","receiveBillReportInformation","getBillReportInformation","StronglyTypedObject","saveBillReportInformation","REACT_APP_NOTIFICATIONS_API_URL","shareReportError","ReportMaker","creating","showCatchline","showCurrentStatus","showTitle","showChiefPatron","showAllPatrons","showSummary","showNotes","selectedNotes","selectedCollection","WatchListID","showHistory","showHouseAmendments","showSenateAmendments","showConferenceAmendments","showGovernorsRecommendations","personalMessage","showStatus","showCommitteeEvent","showAllBills","showClerkNames","showDlsStaffNames","showLdNumber","startRange","endRange","rangeError","DLS_STAFF","getReportUrl","toggleShowBills","checkParams","generateBillList","recent","mostRecentAmount","showVotes","newWindow","jsonData","userCreated","reportTitle","ReportNumber","startType","endType","typeFilled","Committee","Subcommittee","showPassedHouse","showPassedSenate","showPassed","showApproved","showVetoed","showContinued","showFailed","showEmergency","showFirstHouseCommittee","showFirstSenateCommittee","showLastHouseSubcommittee","showLastSenateSubcommittee","toggleReportMaker","autoReport","lisDocDomain","STORAGE_ACCOUNT_DOMAIN","HOUSE_NUMERIC_SORT_CATEGORIES","SENATE_NUMERIC_SORT_CATEGORIES","CalendarDetailsComponent","hideAll","currentItemSelection","toggleAll","toggleCategory","fetchCsv","handleCurrentItemChange","generateClerksCopy","CalendarCategories","CalendarCategory","Patron","fileName","saveAs","Blob","showReportMaker","setCategoryReportBillList","categoryReportBillList","comments","filteredCategories","calendarFileUrl","pdfFile","CalendarFiles","URL","calendarCategoryReferences","canSetCurrentItem","isCalendarForm","IsProforma","comment","Comment","currentProceduralMotion","currentAgendaItem","currentCategoryItem","commonCurrentItemOptions","formatCreateLabel","isSavingCalendarCurrentItem","setCurrentItem","creatingCollection","ClerksCopy","editHistory","createWatchlist","createdCollections","sessionOnly","show","toggleAgenda","agendaNote","AgendaNote","AgendaActivities","sortedPatrons","patronIndex","sameAsPrevious","sameAsNext","patronDisplayName","Versions","votes","CalendarDetailsPrintout","agendaNode","dangerouslySetInnerHTML","__html","HouseCalendarFormComponent","showCategoryPreview","selectedFile","calendatDate","commentEdit","tempComments","initializeForm","handleBulkAgendaSort","addComment","removeComment","commentShift","handleProFormaChange","handlePdfFile","submitPdfFile","changeConveneTime","toggleCommentEdit","confirmCommentEdit","toggleShowTitles","setPending","fileInput","referenceCategory","OnDemand","thisDate","Map","values","agendaItem","CalendarComments","tempComment","saveRequired","forceUpdate","categoryFinder","newCalendarCategory","isNewCategory","newCategoryIndex","selectedCategoryIndex","newAgenda","duplicateBillIndex","categoryType","gettingPdf","blob","createObjectURL","newComments","newTempComments","CalendarCommentID","toISOString","newSequence","shiftUp","genCalendarPreview","calendarId","navigate","files","isSubmittingFile","versions","ver","Version","conveneTime","timeChecker","clone","showTimeSelect","showTimeSelectOnly","dateFormat","timeFormat","accept","handleCommentChange","CalendarManagementForm","findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey","ignoreCalendarDate","ignoreCandidateDate","findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey","findLastByLegChamberTypeKey","SenateBillsGrid","textHeight","sortNumeric","newAgendaSequence","categoryIsSequenced","lowerLegislationNumberAgenda","findLast","finalLowerLegislationNumberIndex","sortCategoryNumeric","SenateCalendarFormComponent","hideCategory","CalendarFormContainerComponent","isLoading","calendarBillParams","calendarid","CalendarFormContainer","CalendarManagement","minutesListRequest","minutesListSuccess","minutesListFailure","minutesCreateRequest","minutesCreateSuccess","minutesCreateFailure","categoryCreateSuccess","categoryCreateFailure","minutesBookSuccess","minutesBookFailure","minutesBookForCalendarSuccess","minutesBookForCalendarFailure","minutesBookSaveSuccess","minutesBookSaveFailure","minutesBookPublishSuccess","minutesBookPublishFailure","entriesSaveSuccess","entriesSaveFailure","entriesCreateSuccess","entriesCreateFailure","entriesCommunicationSaveSuccess","entriesCommunicationSaveFailure","actionTypesSuccess","actionTypesFailure","chairReportSuccess","chairReportFailure","committeeMinutesSummarySuccess","committeeMinutesSummaryFailure","minutesList","minutesMessage","minutesCreateMessage","minutesBook","minutesBookError","minutesBookForCalendar","minutesBookErrorForCalendarError","minutesBookSave","minutesBookSaveError","minutesBookPublish","minutesBookPublishError","clerksCopyGen","clerksCopyGenError","categoryCreate","categoryCreateError","entriesSave","entriesSaveError","entriesCreate","entriesCreateError","entriesCommunicationSave","entriesCommunicationSaveError","minutesGen","minutesGenError","actionTypes","actionTypesError","chairReport","chairReportError","committeeMinutesSummary","committeeMinutesSummaryError","minutesActionCreators","requestMinutesList","receiveMinutesList","minutesListError","getMinutesList","Minutes","requestMinutesCreate","receiveMinutesCreate","minutesCreateError","createMinutes","createMinutesError","receiveMinutesBook","getMinutesBook","MinutesBooks","receiveMinutesBookForCalendar","minutesBookForCalendarError","getMinutesBookForCalendar","receiveMinutesBookSave","saveMinutesBook","receiveMinutesBookPublish","publishMinutesBook","receiveClerksCopyGen","genClerksCopy","receiveCategoryCreate","createCategory","receiveEntriesSave","saveEntries","receiveEntriesCreate","createEntries","receiveEntriesCommunicationSave","saveEntriesCommunication","receiveActionTypes","getActionTypes","ActionReferenceTypeList","receiveChairReport","getChairReport","minutesBookID","ChairReports","receiveCommitteeMinutesSummary","getCommitteeMinutesSummary","minutesBookIDs","categoryCreateMessage","entriesSaveMessage","entriesCreateMessage","MinutesGridComponent","getMinutesData","minutesDate","sessionDropdown","selectedSessionToolbar","selectedSessionGrid","selectedRow","minutesObj","minutesId","newSelected","MinutesBookID","input","indeterminate","MinutesDate","MinutesManagementGrid","LoaderComponent","loadingCheck","prototype","call","Misc","newEntries","cancelEdit","entries","EntryText","MinutesEntries","handleSaveEntry","entry","MinutesEntryID","getReferenceList","eventCode","fullList","filteredOptions","otherVersions","otherAmendments","lt","o","otherSubs","CustomCreatableSelect","inputMinWidth","inputWidth","selectedActionType","inputSizer","newWidth","scrollWidth","inputStyle","minWidth","boxShadow","autoselected","isNewEvent","getOptionLabel","visibility","selectStyle","isValidNewOption","CustomInput","maxWidth","textListLength","InputType","handleActionTypeChange","addInput","actionTypeDropdown","referenceIndex","entryIndex","activityIndex","originalValue","reference","ActionReferenceType","ReferenceText","__isNew__","ReferenceID","LegislationEventID","EventCode","IsPassed","CommunicationDate","CommunicationNumber","CommunicationSummaries","newInput","ActionReferenceTypeID","divStyle","errorCheck","incompleteInputs","force_br_newlines","force_p_newlines","forced_root_block","memberVal","newEvent","committeeVal","eventChamber","subCommitteeVal","subCommittee","textVal","autoselect","opt","newLabel","time","timeIntervals","timeCaption","datetime","ActionReferences","ActivityReferences","EventReferences","eventList","evt","getOptionValue","communicationList","communicationVal","comm","CommunicationID","communication","legislationVal","legislationList","fetchingSessionLegislation","opacity","onKeyDown","menuIsOpen","valueContainer","CommentBox","selectedComment","selectComment","showView","toggleViews","MinutesSummary","handleCommentBoxChange","toggleBox","firstElement","getCommentPreview","Footer","innerHeight","saveComment","NonLegislativeForm","selectedMotion","insertEntry","templateInputs","motionOptions","selectedMotions","closeNewEntries","onEntryDragEnd","onActivityDragEnd","removeActivity","addBackActivity","insertMotion","handleTemplateChange","handleMotionChange","handleSelectedMotionDescriptionChange","getCatActionList","toggleMenu","addEntry","toggleCommentBox","toggleShowDeleted","getNonLegislativeActionList","handleNewMotionChange","toggleSwitchCategory","handleSwitchCategoryChange","toggleSelectEntry","toggleEditActivityDescription","menuBoxRef","MinutesActivities","newActivity","InPreview","act","eventReference","actionReferences","missingActivitiyReferences","existingActivities","textType","MinutesActivityID","editingActivityDescription","initialText","activity","VoteTally","handleActivityDescriptionChange","attr","tempVoteTally","activities","onMultipleEntryChange","currentActivitySequence","MinutesSummaries","tInput","ms","cs","commSummary","promises","ar","onEntryChange","templatedEdited","activityRefs","actIndex","MinutesCategoryID","showSwitchCategory","selectedSwitchCategory","catId","referenceParams","CalendarActionID","currentTarget","relatedTarget","showMenu","newEntry","IsOOB","commentBoxContent","showCommentBox","showDeleted","AdministrativeAction","dropdownOptions","switchingCategories","origSequence","bulkMoveEntry","showDeletedItemsCheckbox","getIndexOfFirstActivity","categoryFormDisabled","reconsiderationEvents","getCategoryDescriptionText","disableChanges","provided2","ma","contentEditable","suppressContentEditableWarning","toggleMoveEntry","tIndex","summary","summaryIndex","toggleChairsReport","MinutesNumber","EditVoteTally","forwardRef","LegislativeForm","nonLegislativeActionReferences","fullEventList","votesToBeSaved","savingVotes","togglingEdit","smallMotionForm","selectedBillNumber","savingNonLegAction","otherBillEventOptions","otherEvent","otherEventSelected","removeMotion","unSelectOtherEvent","handleOtherEventChange","getOtherBillEventOptions","filterBillEventReferences","handleBillChange","addAllEntries","toggleSmallMotionForm","handleBillNumberChange","applyLegislationToEntry","getReconsiderationEvents","unSelectOtherEventEdit","handleOtherActivityDescriptionChange","motionRef","motionDropdownRef","VoteID","activitiesToBeSaved","OtherEvent","_","newMotion","reversedActivities","OtherMotionSelected","unreversedActivities","memberListEvents","ReconsiderationGrammar","ReconsiderationDescription","billEventReferences","templateEdited","self","openMotionEditor","isNewEntry","minutesEntry","theNewActivity","needToSave","eventReferenceIndex","cb","isOOB","newInserEntries","_entryIndex","_activityIndex","recess","MinutesEntryCreate","me","firstActivityIndex","extractText","justifyContent","toggleOOB","legNumSelectStyle","onKeyUp","motion","handleOtherChange","outOfBlockEntries","inBlockEntries","auxOptions","isMulti","formatGroupLabel","formInput","ent","MinutesDetails","publicPage","nonPublicEntries","CategoryDescription","CategoryText","categoryTextPiece","p1","commListSuccess","commListFailure","commGetSuccess","commGetFailure","commSaveSuccess","commSaveFailure","commFileSaveSuccess","commFileSaveFailure","commCreateSuccess","commCreateFailure","commCategoriesSuccess","commCategoriesFailure","getCommunicationAssignmentsSuccess","getCommunicationAssignmentsFailure","getCommunicationSummaryListSuccess","getCommunicationSummaryListFailure","getAdminCommunicationAssignmentsSuccess","getAdminCommunicationAssignmentsFailure","saveCommunicationAssignmentSuccess","saveCommunicationAssignmentFailure","joinCommFileSuccess","joinCommFileFailure","commList","commListError","commCreate","commCreateError","commGet","commGetError","commSave","commSaveError","commFileSave","commFileSaveError","commCategories","commCategoriesError","commChamber","joinCommFile","joinCommFileError","communicationSummaryList","communicationSummaryListError","communicationAssignments","getCommunicationAssignmentsError","adminCommunicationAssignments","getAdminCommunicationAssignmentsError","communicationAssignmentSave","saveCommunicationAssignmentsError","communicationsActionCreators","receiveCommList","getCommList","CommunicationsList","receiveCommSummaryList","commSummaryListError","getCommunicationSummaryList","CommunicationSummariesResponse","receiveCommGet","getComm","CommunicationResponse","receiveCommCategories","getCommCategories","CommunicationCategoryTypesReference","receiveCommunicationAssignments","CommunicationAssignments","getCommunicationAssignments","receiveAdminCommunicationAssignments","getAdminCommunicationAssignments","receiveCommunicationAssignmentSave","saveCommunicationAssignmentError","saveCommunicationAssignment","receiveCommSave","saveComm","saveCommError","saveCommunicationResponse","receiveCommFileSave","saveCommFile","receiveJoinCommFile","receiveCommCreate","createComm","createCommunicationResponse","MinutesManagementForm","buildingCategoryConnection","buildingEntryConnection","isPendingChange","lastSavedTime","lastPublishedTime","entryHubConnection","categoryHubConnection","indexFieldsetIsActive","activityFieldsetIsActive","previewFieldsetIsActive","categoriesToMove","selectedCategoryToMoveTo","publishing","committeeMinutesBooks","chairReportCategoriesSetForRegeneration","regeneratingCategories","fetchedMinutesBookIDs","activityRef","entryFormRef","entryChange","multipleEntryChange","moveEntry","saveCategory","saveEntry","publishAllEntries","showActivity","duplicateChairmansCategory","receiveEntryByWebsocket","receiveCategoryByWebsocket","toggleFetchChairs","handleChairsReportDateChange","fetchChairsReports","regenerateChairsReportCategory","toggleEditCategoryText","setTempCategoryText","toggleMinutesStatus","getMinutes","editingCategoryText","MinutesCategories","tempCategoryText","newFormData","currentCategory","applicableCategories","movingCategorySource","movingEntrySource","showMoveEntryDialog","destinationCategoryIndex","sourceCategory","sourceEntry","destinationCategory","sourceCategoryIdx","destinationCategoryID","mc","sourceEntryIdx","theEntry","entryObject","MinutesEntrySave","invoke","promise","activitesForClerksCopy","categoryIdx","ReleaseToPreview","entryIdx","publishEntry","IsReleased","IsPassage","activityRect","MinutesFiles","newMinutesBook","newCategory","creatingCategory","minutesbookid","fetchingChairsReports","calendarCategoryTypeID","categoryToDuplicate","MinutesSummaryID","entryFromResult","minuteEntries","categoryFromResult","getConnectionId","conn","connectionName","connectionId","handleMessage","functionToRun","StatusCode","lastSaveErr","handleMessageOriginatedFromWebsocket","Success","entryConnection","signalR","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","startConn","categoryConnection","sequences","every","seq","communications","usedCommunicationSummary","communicationSummaries","start","withCredentials","onreconnecting","onreconnected","onclose","chairsReportStartDate","chairsReportEndDate","endOf","MinutesStatus","combinedMinutesBookIDs","uniqueCombinedMinutesBookIDs","totalIterations","newIterations","matchingIterations","existingMatchingCategory","matchingCategoryIdx","existingCategoryIndex","cmte","existingMatchingEntryIndex","existingMatchingSummaryIndex","activitySequence","committeeMinutesBookIDs","associatedCommitteeMinutesEntry","existingMs","MinutesStatusId","MinutesStatusID","MinutesCalendars","flexShrink","sty","onSequenceChange","reconnectingCategory","closedCategory","categoryID","TypeSwitcher","reconnectingEntry","closedEntry","MinutesIndex","selectedCalendarCategory","handleCalendarCategoryChange","pointerEvents","renderCategoryDescription","Preview","newPreviewArray","entryObj","overflowY","MinutesManagement","EventControls","eventDate","utcOffset","set","second","millisecond","eventSequence","addEvent","removeEvent","_a","_b","eventObj","actorType","ActorType","eventAdded","eventRemoved","billEventOptions","buttonDisabled","required","maxLength","comitteeList","singleStyles","group","groupHeading","BillCategories","selectedPatron","selectedSubject","handlePatronChange","handleCommitteeChange","handleSubjectChange","selectedBillStatusCategory","statusCategoriesList","LegislationCategoryID","introDate","introductionDate","statusCategoryName","currentStatus","honorExcludeFailed","statusCategoryId","statusCategory","excludeFailed","allLegislation","uniqueSearch","query","frequentParams","mostFrequent","frequentJson","frequentQuery","frequentLink","includeDates","makeLink","clearIndicator","AdvancedSearchBoxComponent","billStatusDateError","showFindSection","showCategorySection","toggleFindSection","toggleCategorySection","setOpenSection","toggleShowCategories","showCategories","failedToGetSessions","billStatusStartDate","billStatusEndDate","adjournmentEvent","queryObj","selectedBillRangeBeginning","selectedBillRangeEnd","selectedChapterNumber","selectedLocation","selectedSummaryVersion","selectedBillVersion","selectedPatronType","selectedBillType","selectedBillEvent","billEventStartDate","billEventEndDate","billActionStartDate","billActionEndDate","keywordUseGlobalSessionSearch","searchParam","innerWidth","handleExcludeFailedChange","toggleGroup","billFieldset","toggleHelpModal","keywordFieldset","billManagement","handleRadioChange","handleSelectChange","billVersionList","billSummaryList","statusFieldset","billStatusCategoryList","handleCurrentStatusChange","chamberChange","committeesFieldset","committeeChange","newCmte","getSelectedCommitteeLabel","subcommitteeList","subcommittee","membersFieldset","PatronTypeID","handlePatronTypeChange","subjectFieldset","clearForm","showUpdateSearchButton","SearchSelections","clear","handleSelectionClear","typeIndex","handleMultiSelectionClear","updateSearch","Selection","UpdateSearch","NEW_EVENT","historyItem","isNewlyAdded","isNewlyDeleted","dateChanged","sequenceChanged","descriptionChanged","eventCodeChanged","BillHistoryForm","checkForScrollUp","conNodeRect","scrollToEvent","checkForScrollDown","organizedEvents","newEventDate","editingEvents","currentInput","eventGroupIndex","inputNumber","changeToBill","handleEventInputChange","changeEvent","changeDate","toggleEventGroup","bulkToggleEventGroup","toggleEditDescription","changeDescription","formDescription","handleNewEventChange","handleNewEventDateChange","saveEvents","handleMovingFocus","handleMovingFocusFromBillChanger","receiveEventByWebsocket","getSessionLegislation","_inputRefs","_containerRefs","_billSwitcherRef","_addEventRef","switchedToBill","organizeEvents","historyList","addEventNode","ReactDOM","findDOMNode","numberOfEvents","hidden","isBillManagement","events","HubConnectionBuilder","entryConnectionId","handleEvent","billData","legislationEventID","eventInputValue","origEventCode","LegislationEventTypeID","hasChanged","lEvent","EventDate","origDate","newEventGroupIndex","eventGroup","newEventGroup","hideAllEvents","togglehideAllEvents","expand","currentEvent","missingActionReferences","existingEvt","descEdit","origDescription","IsMandatory","eventReferences","inputs","substitueRejectedEvents","overrideSet","wasLastEventGroup","eventsToSave","eventGroupsToSave","success","orgEvents","g","lastSavedEventGroup","savedEventsInLastSavedEventGroup","lastSavedEvent","lastSavedEventIndex","sessionID","sessionLegislation","conNode","lastItemIndexInEventGroup","changer","inputNode","lastEventGroup","lastEvent","changeToNewBillHistoryForm","nodeRect","pageYOffset","windowHeight","inputRefs","containerRefs","containers","_historyItem","toggleEditContent","AddEventForm","addEventRef","versionsList","reconsiderationActionReference","eg","latestEvent","expandAllEvents","focusOnInputContainer","onInputChange","onMenuClose","deleteEvent","previousDate","eventsInADay","valueOf","originallyDeleted","inputId","statusCode","HistoryForm","LegislationProfiles","showSection","filteredWatchlists","filteredWatchlistsValue","toggleSection","createCollection","filterWatchlist","WatchListLegislation","collections","coll","watchlists","selectedCollectionIndex","w","isAuthor","collectionIsSaving","listIndex","IsPaid","claim","selectCollection","MERGE","DELETE","CollectionControls","selectedWatchlists","selectedMergeWatchlists","editWatchlistName","newName","deleteCollection","handleWatchlistChange","handleMergeWatchlistChange","handleToggleCompositeView","toggleEditWatchlistName","saveWatchlistName","addToWatchlists","handleCollectionChange","merge","saveResultCollections","associatedWatchlist","calendarHeader","searchMade","mergeButtonDisabled","createOptionPosition","billListLength","getCollectionFailure","getCollectionSuccess","getCollectionsFailure","getCollectionsSuccess","saveCollectionsFailure","saveCollectionsSuccess","getCriteriaTypesSuccess","getCriteriaTypesFailure","notificationListSuccess","notificationListFailure","messageListSuccess","messageListFailure","adminMessageListSuccess","adminMessageListFailure","createMessageSuccess","createMessageFailure","saveMessageSuccess","saveMessageFailure","collectionsError","collectionSave","collectionSaveError","criteriaTypes","criteriaTypesError","notifications","notificationsError","messages","messagesError","adminMessages","adminMessagesError","messageCreate","messageCreateError","messageSave","messageSaveError","collectionActionCreators","receiveCollection","collectionError","getCollection","REACT_APP_LEGISLATION_COLLECTION_API_URL","WatchLists","receiveCollections","getCollections","receiveCollectionSave","saveCollections","useCreate","receiveCriteriaTypes","getCriteriaTypes","CriteriaTypes","receiveNotifications","getNotifications","Notifications","receiveMessages","getMessages","Messages","receiveAdminMessages","getAdminMessages","receiveMessageCreate","createMessage","receiveMessageSave","saveMessage","HistoryList","filterAmount","setFilterAmount","filteredBillHistory","slice","filterOptions","hIndex","opened","vIndex","VoteNumber","toggleShowLinks","BillInfoComponent","billHistoryIsLoading","showInfo","showBillHistory","showBillVersions","newBillNote","showBillNote","handleNoteChange","toggleShowInfo","getHistory","toggleVersions","toggleBillNote","toggleBillNotesFromParent","saveNote","toggleShowData","billHistoryMessage","vote","historyIndex","links","linkPromises","cmtePromise","getCommitteeById","committeeByIdData","ReferenceType","collectionBillIndex","cBill","Note","userCanUseCollections","displayCrossSession","eventsChanged","fontStyle","handleBillCheckbox","displayChapterNumber","ChapterNumber","LegislationStatus","expanded","LegislationSummary","SearchText","marginBlockEnd","BILL_COLLECTION_AUTHOR","BillManagement","billStatusCategoryListIsLoading","selectedBillAction","selectedBillSession","previousSearch","searchType","filteredPatronList","groupedCommitteeList","filteredCommitteeList","selectAllBills","legislationIDs","showSidebar","showModal","searchOnEnterPress","handleSearch","getBillsResults","sessionChange","toggleSidebar","toggleAllBills","handleEditedBills","executeSearch","toggleModal","toggleExpandAllLegislation","searchBox","base64","decodedSearch","atob","calendarCategoryDescription","getBillStatusCategoryOptions","getBillVersionOptions","getBillSummaryOptions","getBillEventOptions","msg","updated","sessions","dateParam","sessionParam","getPatrons","getSubjects","getIntroDates","groupName","clearUrl","clearBillData","isPending","displaySelectedLocation","encodedSearch","keywordVersion","KeywordLegislationVersionID","KeywordSummaryVersionID","PatronTypes","StartDate","EndDate","KeywordExpression","KeywordLocation","EventStartDate","EventEndDate","IsPending","MostFrequent","AllLegislation","CurrentStatus","ExcludeFailed","LegislationIDs","IntroductionDate","activityFieldset","closeBillInfo","pos","l","billVersionReferences","billSummaryReferences","SummaryVersionID","datesList","code","collectionIsLoading","collectionIndex","returningFromSearch","legislationIds","LegislationId","insertIdx","displaySequence","dateItem","dateItemIdx","eventItem","newEvents","deletedEvents","reDeletedEvents","dateChangedEvents","sequenceChangedEvents","descriptionChangedEvents","eventCodeChangedEvents","_bill","historyIsLoaded","billID","bool","scrollIntoView","toggleArrows","isCreatingCollection","resetUrl","saveCollection","PublicBillSearch","CommunicationsManagementGrid","commDate","loadCommsList","deleteCommunication","commParams","createObj","CommunicationType","createErrorMessage","communicationBeingDeleted","communicationData","Communication","legList","CommunicationLegislation","legNumber","billType","numbers","char","billLink","draftTitle","removeLDNum","EffectiveType","categoryStyle","CommunicationsDetailsComponent","refNum","authoring","referenceNumber","CommunicationCategories","CommunicationCategoryID","ShowSignatureNote","FooterSentence","WebkitPrintColorAdjust","houseSig","ClerkName","ClerkTitle","newDescriptions","handleTitleChange","organizedComms","getCommunicationCategoryHeight","newDraftTitle","stripTags","initialOverflow","communicationCategories","textOverflow","searchText","regexp","newSearchText","SyntaxError","numeric","CommunicationLegislationID","existsInMultipleCategories","CommunicationCategoryTypeID","IsCandidate","CommunicationsForm","failedToJoinBills","isDoubleSided","genCommDoc","hasSelectedBills","hasIncludedBills","toggleShowSignatureNote","includeAll","validateCommunicationNumber","toggleIsDoubleSided","newReferenceNumber","commId","duplicateCommNumber","commNumbers","n","newCommCategory","printAllIncluded","billsToGen","billNum","AmendmentCount","FirstChamberCount","SecondChamberCount","pdfSrc","LegislationFiles","Pdf","FileContents","urlObj","failedBills","JoinLegislation","Generated","showPdfWindow","communicationsId","communicationid","catList","roleType","clerkRoleTypeID","hasDuplicates","print","changeCategoryPositionDropdown","CommunicationsManagement","VoteGrid","voteOriginOptions","saving","getVoteTypeReferences","saveVotes","toggleDeleteVoteModal","deleteVote","voteIndex","organizedVotes","voteToDelete","votesToSave","deletingVote","VoteList","getVotes","datesToIterate","checkedVotes","invalidFinalVotePublish","voteOrigin","FinalVote","voteObj","VoteLegislation","VoteDate","CommitteeVotedOnLegislation","VoteIDs","chairmansReportFailures","createChairmansReportSummarizedOnMinutes","chairmansReportVotes","VoteTypeID","fetchingCommittees","voteDay","sortTimeDesc","endDate","IsVoice","sortVotes","voteActions","VoteDetails","voteMembers","voteData","memberYeas","nObj","ResponseCode","memberNays","memberAbstentions","memberNoVote","voteStatements","VoteStatement","voteActionDescription","LegislationActionDescription","VoteType","displayTallySheet","voteFileUrl","displayCommitteeLink","linksGridColumns","linksGridTemplateColumns","headerGridTemplateColumns","mobileLinksPosition","printedContent","removedContent","billDescription","ReferToCommitteeID","ReferToCommitteeName","statement","statementIndex","VoteComment","PassFailOptions","REFER_ACTIONS","INCORPORATED_ACTIONS","VoteForm","isPreviewing","changeVotes","selectedVoteActionDescription","selectedCalendarCategoryType","calendarCategoryTypeList","showWarning","settingIsBlock","savedIncorporated","resetForm","resetVoteMembers","getVoteActionReferences","getCalendarCategoryTypes","handleVoteActionDescriptionChange","handleCalendarCategoryTypeChange","handleVoteChange","handleVoteLegislationChange","updateStatement","toggleTallySheetPDFPreview","toggleChangeVotes","setVoteTally","toggleWarning","getVoteListForFinalVote","toggleEditVoteLegislation","getBills","handleSenateCommitteeVoteLegislationChange","originalVoteData","originalVoteMembers","VoteMember","setSelectedValue","loadingVoteActionList","voteAction","VoteActionID","VoteActionDescription","committeeSameDayVoteList","undo","editingVoteLegislation","showEditingVoteLegislationMessage","uneditedVoteLegislation","voteLegislation","deletedLegIndex","vl","legIndex","removedValue","IsBlock","ReferToCommitteeNumber","yeaVotes","vm","nayVotes","abstainVotes","isPublishing","voteId","voteid","voteParams","preventPublish","showVoteTallyWarningMessage","voteTallyInDescription","PassFail","bl","EventDeletionDate","onMouseEnter","VoteMembers","responseStyle","arrangedVoteMembers","voteColumns","memberColumn","memberVote","VoteStatements","newVoteStatement","toggleEditing","handleMemberSelection","addStatement","exitEdit","memberIndex","memberOptions","removeStatement","VoteManagement","dateIndex","committeeID","votedLegislation","votedLegislationNumbers","commCategoriesWithVotedBills","voteArray","previousVote","newDateContainer","legislationKeyA","legislationKeyB","newOrganizedVoteDate","newDate","PrintRoomGrid","showRow","printPreviewIndex","togglePrintView","batchIndex","urlBatchId","textResults","urlBatchIndex","PrintBatchID","findMember","headerStyle","headerStyleComplete","viewCompletedByBill","flatBillList","batch","BatchItems","PrintDate","printDate","flattenBatches","BatchDate","BatchSequence","BatchDescription","VendorBatch","totalPageCount","PageCount","filteredTextResults","showComplete","viewOnlyCompletedItems","introStartDate","introEndDate","formattedStartDate","formattedEndDate","isBetween","isSameOrAfter","filterTextResults","batchDate","pdfMarked","textIndex","BatchItemID","markPdf","overflowX","SasURL","versionOptions","PrintManagement","billRoomView","isSearching","selectedVersion","anyChecked","handleFilter","handleReleaseToPrint","handlePrintComplete","handlePrintAllEnrolled","toggleBillRoomView","rej","showReprints","returnItem","billInNewFilteredDataset","textId","vendorBatch","isReleased","releaseDate","batchItemsToSave","itemsToRemove","completeDate","BatchItemIDs","Editing","showBillText","BillGrid","LegislationText","ReportManagement","selectedReport","reportData","handleFormChange","handleReportTypeChange","ReportID","reportDataChamber","reportDataName","ReportName","rpt","showItem","reportDataDate","filteredReportData","reportItem","Heading","sessionisLoaded","reportTypesAreLoaded","rt","flags","uniqueHeaderItems","has","dateLabel","printRef","reportItemIndex","patronString","ByRequest","ConsentRequired","GovernorsRequest","onExpandedChange","legislationText","newExpanded","toggleExpandedBills","currentPage","autoResetExpanded","freezeWhenExpanded","expandedBills","page","pages","ceil","onPageChange","Amendments","amendmentIndex","selectAmendment","onPageSizeChange","onSessionChange","onChamberChange","chamberIsDisabled","AmendmentManagement","selectedAmendment","billFilter","firstPass","unpublished","filterBills","getEDoc","appendEdoc","filterToEDocReady","isEDocReady","amendmentsToSave","domContainer","publishedBillIndex","filteredBillList","publishedLegislationIndex","createEDoc","eDocFiltered","amendmentNumber","amendmentTexts","amendmentItems","amendmentText","AmendmentItems","LineNumber","k","thisDraftText","ClassName","LineClassName","Line","amendmentChanges","AmendmentActions","TextClassName","Lines","eDocText","appendedEDoc","keepExpanded","resultsChanged","pageIndex","amendmentsFilteredByOpposingChamber","eDoc","SponsorType","aPrefix","bPrefix","aNumber","bNumber","AdminDashboard","criteriaTypeWeights","LegEvent","showLinks","toggleLinks","toggleLoading","voteLinks","setVoteLinks","getVoteLinks","BillInfo","reasonGrouping","allBillsExpanded","toggleInfo","useEffect","deleteBillFromCollection","addBillToCollection","handleCheckbox","CriteriaType","NotificationManagement","expandLatestHistory","getWatchlists","selectWatchlist","addBillsToWatchlist","stickyHeader","notificationsRef","notificationIDs","notificationID","checkedBillIdx","NotificationID","wl","billsFound","duplicate","Committees","Reasons","Bills","WatchListLegislationID","savedWatchlistIndex","sortLegNumbers","organizedNotifications","committeesArr","previousNotification","notification","newNotificationContainer","Notification","NotificationGroupings","objName","NotificationGrouping","NotificationReason","reasonObjIdx","legListing","watchlistId","selectedWatchlist","NotificationCriterias","CriteriaValue","organizeNotifications","remove","notificationIndex","committeeGrouping","committeeGroupingIndex","reasonGroupingIndex","Reason","watchlistID","notificationGroupings","reasons","criteriaType","reason","docListSuccess","docListFailure","docSuccess","docFailure","keyRegistrationSuccess","keyRegistrationFailure","confirmKeyRegistrationSuccess","confirmKeyRegistrationFailure","savePartnerSuccess","savePartnerFailure","partnerListSuccess","partnerListFailure","getPartnerSuccess","getPartnerFailure","getPartnerKeySuccess","docList","docListError","docError","savePartnerError","keyRegistrationError","partnerListError","partnerError","partnerKeyError","developersActionCreators","receiveDocList","getDocList","ApiDocumentations","receiveDoc","getDoc","Documentation","receiveKeyRegistration","submitKeyRegistration","receiveConfirmKeyRegistration","confirmKeyRegistrationError","submitConfirmKeyRegistration","receiveSavePartner","savePartner","receivePartnerList","partnerList","getPartnerList","PartnerList","receivePartner","getPartnerError","getPartner","receivePartnerKey","partnerKey","getPartnerKeyError","getPartnerKey","PartnerGridComponent","nameSearch","orgSearch","developers","partnerName","_original","ContactName","nameFilter","partnerOrg","orgFilter","PartnerID","phoneRegex","PartnerForm","initIsActive","checkPhone","partnerId","phoneError","PartnerFormWrapper","PartnerManagement","PartnerManagementGrid","PartnerManagementForm","UserManagement","newUser","existingUser","searching","cancel","create","splitName","Search","handleMemberDropdownChange","handleSubjectDropdownChange","openToDate","ResourcesComponent","SessionInfo","adjournment","reconvene","activeSessions","activeSession","tz","guess","Schedule","Times","timeIndex","Items","OwnerName","IsCancelled","renderHtml","defaultStyle","freshMessage","BulletinMessage","MessageOfTheDay","handleBold","handleItalic","toggleLink","linking","linkUrl","linkText","setLinkUrl","setLinkText","handleLink","editMessage","anchor","adminView","previewing","toggleAdminView","toggleShowAll","newMessageRef","bulletinID","BulletinID","filteredMessages","messagesToDisplay","admin","local","gettingAdminMessages","gettingMessages","MessageList","HomeComponent","searchIsLoaded","sessionInfoIsLoaded","scheduleIsLoaded","setupPage","getMembers","getDates","getStatusCategories","dateComp","timeA","TimeDescription","timeB","organizedSchedule","scheduleArray","previousSchedule","scheduleDateTime","getScheduleDateTime","previousScheduleDateTime","organizeTimes","itemsList","organizedTimes","Time","scheduleDate","scheduleTime","sessionCodeParam","currentHour","subtract","organizeSchedule","filteredOrganizedEvents","times","thisDayMeetings","timeObj","overflowWrap","SessionInformationComponent","listSessions","PublicSessionInformation","CommitteeListComponent","activeKey","listMembers","houseCommitteesIsLoaded","senateCommitteesIsLoaded","houseCommittees","senateCommittees","conveneDate","showSenateChamber","showHouseChamber","getCommitteeLists","toggleGetMembers","listName","chairmanIndex","CommitteeRoleTitle","chairman","memberString","detailString","EffectiveBeginDate","sessioncode","listCommittee","legislationObj","selectedBillStatus","legislationLink","listHouseCommittees","listSenateCommittees","PublicCommitteeList","CURRENTLY_IN","ASSIGNED_TO","MinutesData","MinutesList","listMinutes","DocketData","formattedSessionCode","HouseAgendaDate","DocketList","count","listDockets","maxSize","SubCommittees","parentCommitteeData","getCommitteeDetails","getCommitteeMembers","getMeetings","setupDoc","committeenumber","getCommitteeByNumber","committeeByNumberData","detailsIsLoaded","membersIsLoaded","parentID","subcommitteesIsLoaded","meetingParam","minutesListIsLoaded","docketListIsLoaded","closingEvent","reconveneEvent","defaultDocket","committeeLabel","changedMembers","Change","ChangeDate","buildMembers","slideDockets","linkIndex","PublicCommitteeDetails","Entry","VoteIsPublic","senateUser","PublicMeetingDetails","subformIsLoaded","view","chairmanReport","voteSheet","setView","toggleMeetingStatus","ChairmansCategory","getVoteSheetData","getBillDetailData","getVoteDetailData","voteDetails","memberRule36","minutesBookId","meetingid","parentCommittee","entIndex","actionIndex","ChairmansLegislation","formattedBill","striptags","PublicDocketDetails","docketId","sessionIsLoaded","htmlFile","dataIsLoaded","docketFile","trimmedUrl","removeZeros","CommitteeInformationComponent","slide","MemberInfoComponent","memberID","prefileEvent","MemberStatus","memberDetails","PartyName","DistrictName","MemberInformationComponent","houseMembers","senateMembers","getMembersLists","getMemberContact","memberContactData","houseMembersIsLoaded","senateMembersIsLoaded","listHouseMembers","listSenateMembers","PublicMemberInformation","subcommittees","subcomm","CommitteeAssignments","PatronRoles","roleLinks","roleIndex","memberNumber","memberChamber","memberNumberWithoutChamber","formattedMemberNumber","b64Link","MemberDetailsComponent","memberCommittees","memberSessionContact","memberDistrictContact","memberConferenceBills","getMemberCommittees","getMemberConferenceBills","effectiveDate","getCommitteesByMember","committeesByMember","parent","memberCommitteesIsLoaded","gaAddress","mailingAddress","contactIsLoaded","memberConferenceBillsIsLoaded","patronRolesIsLoaded","membernumber","jwt","showMemberStatusPageLink","getPrototypeOf","sessionContactInfo","districtContactInfo","PublicMemberDetails","WATCHLIST_LEGISLATION","ALL_LEGISLATION","WatchlistNotifications","hideNotifications","newKeywords","toggleNotifications","handleFrequenyChange","toggleEditKeywords","handleKeywordChange","handleKeywordSave","handleCheckboxChange","Frequency","NotificationFrequencyID","criteriaTypeObj","newCriteria","criteria","indexOfCriteriaInValue","CriteriaTypeID","keywordCriteria","showKeywordEditor","isDelete","criteriaToUseIndex","kc","nk","criteriaIndices","criteriaIndex","selectedHousePatrons","selectedSenatePatrons","selectedHouseCommittees","selectedSenateCommittees","getSelectedCommitteesLabel","statusChangeCheck","docketCheck","versionCheck","impactStatementCheck","keywords","introducedCheck","keyword","keywordIndex","HelpPage","QuickAdd","handleAddBillChange","isAddingBill","toggleIsAddingBill","quickAddBills","quickAddErr","sortLegislations","aLegislationKey","bLegislationKey","validLegPrefixes","BillSearchComponent","searchedKeywords","showAllNotes","showHelpModal","compositeView","removeWatchlistBills","toggleAllNotes","unload","getReportTitle","_billResultRefs","fullLegislationList","skippedRecords","skipIdsCall","KeywordUseGlobalSessionSearch","getResultsPromise","numSearchedIds","hasResults","paginatedLegislationIds","legislationIdsResponse","LegislationIds","totalResults","hasNextPage","observer","IntersectionObserver","handleObserver","rootMargin","threshold","observe","loadingRef","LOADING","hitCountRequestBody","flat","hitCounts","hitCount","reduce","st","HitCount","entities","boundingClientRect","prevY","savedCollectionIndex","errorMsg","billsToAdd","duplicatedBills","watchlist","removedBillCount","_cb","cbIndex","legislationIndex","billsToSearchFor","ranges","exitFn","existingWatchListLegislation","rangeStartAndEnd","rangeStart","rangeStartNumber","rangeEnd","rangeEndNumber","prefix","missedBills","fb","noWhiteSpaceBill","billKey","billPrefix","range","saveWatchlist","nextPageLoadingHeight","billResultRefs","getReportTitleObject","documentElement","clientHeight","ShareReport","emailAddresses","isSharing","handleEmailAddressChange","sendReport","toggleShareForm","STAFF","weights","getBillHistoryTypeLabel","committeeClerksAndStaff","generatingBillNumbers","generatingReport","hbCount","hjCount","sbCount","sjCount","compositeSortValue","getReportData","makeHtml","makePrintout","makeSpreadsheet","toggleCompositeSort","toggleShowNotes","htmlRef","printOutRef","sessionStartDate","loadingStaffNames","loadingClerkNames","loadingLdNumber","fullTextVersions","latestFullTextVersion","LdNumber","loadingAmendments","getLdNumber","loadingHistory","allResults","results","Status","committeeEvents","firstSenateCommitteeEvent","firstHouseCommitteeEvent","lastSenateSubcommitteeEvent","lastHouseSubcommitteeEvent","loadingVotes","loadingPatrons","loadingStatusHistory","billStatuses","committeePromises","patronPromises","historyPromises","textPromises","statusHistoryPromises","showStatusBool","showCommitteeEventBool","gettingBillHistory","gettingBillStatusHistory","gettingClerkNames","gettingStaffNames","gettingPatrons","gettingVotes","gettingLdNumbers","gettingAmendments","clerkRoleType","staffRoleType","committeesAndSessionsToSearch","getCommitteeClerksOrStaff","sl","se","billHistoryChunks","Notes","Emergency","ListName","getAmendments","chunk","getBillHistory","printWindow","contentData","htmlRefNode","breaks","historyRows","historyHeaders","hyperlinkedBill","formattedName","typeA","typeB","sortBillHistoryTypes","billHistoryType","billHistoryItems","newRow","Billno","YEAS","NAYS","ABSTENTIONS","PassedHouse","PassedSenate","Passed","Failed","Continued","Approved","Vetoed","columnHeader","noteIndex","historyFileName","showShareForm","reportId","BillInformation","gettingCommittees","sortBillsNumerically","direction","shareable","pageBreakInside","billHistoryTypeIndex","billHistoryItem","billHistoryItemIndex","gridColumn","frameBorder","SearchTranslator","wordToTranslate","word","wordparam","billSearchParams","ShorthandUrlTranslator","findPatronType","agencyListSuccess","agencyListFailure","agencyList","agencyListError","orgActionCreators","receiveAgencyList","getAgencyList","REACT_APP_STATS_API_URL","Agencies","ImpactStatementForm","fiscal","selectedAgency","uploadFile","getImpactStatementDescription","handleAgencyChange","handleFileChange","submit","agencyOptions","CollectionNotes","notes","toggleExpandNotes","legId","legislationInCollection","BILL_EVENT_AUTHOR","BILL_AUTHOR","VERSION_AUTHOR","SUMMARY","DESCRIPTION","isStatic","PatronName","PatronList","patronsLength","listPatrons","BillDetailsComponent","summariesList","editingHistory","displayStatementForm","statementSubmitting","statementLegislationTextID","statementDocumentcode","showWatchlistForm","getBillDetails","getBillVersion","saveSummary","submitImpactStatement","closeStatementForm","checkForDuplicates","togglePatronModal","handleAddToWatchlists","toggleWatchlistForm","saveVersionDescription","legislationNumberDigitsWithZeroPadding","legislationNumberDigitsWithOutZeroPadding","previousSessionCode","previousLegislationNumber","summaryIsLoaded","versionsIsLoaded","patronIsLoaded","billDataIsLoaded","openBillHistory","abbrev","agencies","organizations","agency","AgencyName","AgencyNumber","originalPatronList","expandPatrons","slideVersions","partnerEditor","billId","footer","errJson","modifiedBillData","LegislationList","newBillData","deletion","LegislationSummaryID","modifiedSummaryData","toggleDeleteSummaryModal","keyState","breaklessMatch","summaryToDelete","patronUpdate","activeVersions","billHeader","billHeaderEditor","formatSummaryVersion","billSummaryEditor","summaries","PublicBillDetails","VoteDetailsComponent","voteNumber","votenumber","voteDataIsLoaded","VoteFiles","PublicVoteDetails","csv_info","csv_name","csv_file","PublicDataFiles","loadingSessions","setSession","csv","PublicCommunicationsList","senateIsLoaded","houseIsLoaded","senateCommList","houseCommList","createCommList","jsonFile","CommunicationFiles","IsGenerated","PublicCalendarList","senateCalendarList","houseCalendarList","PublicCalendarDetails","currentItemHubConnection","receiveCurrentItem","getCalendar","calendarFile","currentItemConnection","currentItem","stronglyTypedObject","calendarCategoryID","agendaID","proceduralMotion","ProceduralMotion","categoryId","agendaId","displayDescription","PublicMinutesList","senateMinutesList","houseMinutesList","MinutesunicatilonNumber","PublicMinutesDetails","minutesid","minutesFile","ltGovPromise","ltGovParams","ltGov","clerkOfSenatePromise","clerkOfSenateParams","clerkofTheSenate","categoriesToShow","RESET","isHeader","selectStyles","UpdatePatronageModal","showPatronTypeChangeWarning","newPatron","showConfirmButton","pt","handleNewPatronChange","addNewPatron","droppableProps","IsIntroducing","togglePatron","savingPatrons","updatePatrons","attributeObject","hasOwnProperty","processStyle","Url","newElements","nestedElements","properties","property","objectName","urlChecker","getJsx","NEXT","PREVIOUS","inlineStyles","PatronDisplayInfo","FullText","draftTextCopy","sponsorOptions","highlight","amendmentSelections","houseMemberOptions","senateMemberOptions","showPatronModal","initialPass","markHelpIndex","createNewAmendment","saveText","handleBillDispositionChange","toggleHighlight","highlightText","handleParamChange","handleIsActiveChange","handleIsPublicChange","isLdIncluded","triggerDownload","passageCheck","resetPatrons","navToKeywordHit","dispositionRef","sponsorRef","memberRef","committeeRef","gettingEditData","beginningOfTextParagraphClassesInPriorityOrder","beginningOfTextParagraphIndex","loopIdx","indexTracker","validateData","grandchildNode","greatGrandchildNode","DraftTextFromJson","documentCodeChanged","valid","focused","textDispositionError","sponsorError","memberError","committeeError","draftTextError","keywordsFromQueryString","markInstance","Mark","asteriskSearch","separateWordSearch","accuracy","limiters","mark","showMarkHelp","showNextMarkHelp","scrollElement","currentIdx","numElements","newIndex","Content","documentNumber","documentcode","DLSPrepared","dispo","versionSession","originalTextDisposition","OfferedDate","PrefileDate","LegislationType","DraftTextJSON","jsonFileFound","passageDates","htmlDoc","prevClass","passage","insertText","patronListBeforeEdit","currentPatronLineElement","currChamber","patronInfo","patronsSameChamber","multiplePatrons","newPatronLine","associatedPatron","calculatePatronSequence","addedPatron","removedPatron","keepPatronType","PatronDate","currentSeq","existingPatronOfSameType","existingPatronOfHigherPriority","fetchingPatronage","disableSponsor","MarkHelpBar","patronArray","senators","delegates","finishedText","getPatronText","Button","icons","icon","hyperlinkInstructions","chamberList","MeetingsForm","scheduleID","scheduleType","meetingDateTime","timeDescription","ownerName","isCancelled","onCalendar","scheduleTypeOptions","remarks","scheduleFiles","highlightFileAnchorTag","setFormIsDirty","field","lastIndexOf","createTextRange","selRange","moveStart","moveEnd","setSelectionRange","selectionStart","selectionEnd","meeting","ScheduleID","OnCalendar","createMeeting","saveMeetings","originalFile","originalFileIdx","fileURL","committeeDropDownOptions","locationList","toggleEditMeeting","f","nextProps","ScheduleFiles","MeetingsCalendarPreview","setDate","getPreview","gettingPreview","toggleMeetingsCalendarPreview","SCHEDULE_EDITOR","PublicSchedule","currentDayIndex","locationOptions","showAllDates","calendarDisabled","displayScheduleModal","displayMeetingsCalendarPreview","showConfirmation","toggleAllDates","changeDay","handleReset","openMeeting","toggleCancelMeeting","deleteMeeting","openScheduleModal","closeScheduleModal","amount","parentCmteOption","sub","preserveIndex","voteRooms","roomDescription","meetings","onFail","scheduleFile","FileID","flatMappedSchedules","isSavingDrag","showDates","meetingDate","meetingTime","lastDate","lastTime","dateDate","Meeting","Location","ScheduleType","isPartner","marginBlockStart","currentDay","keyIndex","EventFinder","todayButton","PartnerSchedule","selectedMeeting","LinkURL","ScheduleModal","showInstructions","toggleInstructions","icsLink","PublicVoteSearch","voteTypeOptions","selectedMembers","selectedVoteType","searchSelectedMember","searchSelectedSession","searchSelectedVoteType","memberListError","getMemberVotes","memberVotesError","memberVotes","VoteSearchResults","toggleShow","VoteResult","nextState","memberName","organizeVotes","ClassificationName","VoteDescription","PublicMemberLegislation","hideBills","collapseAll","showPrefileOnly","toggleShowPrefile","chambercode","getMemberLegislation","memberLegislationError","memberLegislation","filteredMembers","totalBills","prefiledBills","IsPrefile","nonPrefiledBills","memberBills","PublicCommunicationDetails","communicationFile","clerkInfo","commid","chamberStatsSuccess","chamberStatsFailure","committeeStatsSuccess","committeeStatsFailure","stat","statsError","committeeStats","committeeStatsError","statActionCreators","receiveChamberStats","chamberStats","chamberStatsError","getChamberStats","ChamberStatistics","receiveCommitteeStats","getCommitteeStats","CommitteeStatistics","CommitteeStatDetails","stats","totals","ContinuedFromTotal","HReferredTotal","SReferredTotal","HInCommitteeTotal","SInCommitteeTotal","HInSubCommitteeTotal","SInSubCommitteeTotal","HReportedTotal","SReportedTotal","HIncorporatedTotal","SIncorporatedTotal","HFailedTotal","SFailedTotal","ContinuedToTotal","HContinuedFrom","SContinuedFrom","HReferred","SReferred","HInCommittee","SInCommittee","HInSubCommittee","SInSubCommittee","HReported","SReported","HIncorporated","SIncorporated","HFailed","SFailed","HContinued","SContinued","colSpan","rowSpan","statIndex","SessionStatDetails","IntroducedTotal","InCommitteeTotal","PassedHouseTotal","PassedSenateTotal","PassedTotal","IncorporatedTotal","FailedTotal","PendingTotal","ApprovedTotal","VetoTotal","ContinuedFromLastSession","Introduced","InCommittee","Incorporated","Pending","Veto","ContinuedToNextSession","Unauthorized","WatchlistsComponent","nameSort","descSort","dateSort","billNumberSort","viewCrossReferenceList","expandedWatchlists","filteredBills","filteredBillsValue","expandAllWatchlists","expandAllBills","loadingCollections","sortByName","sortByDesc","sortByDate","sortByBillNumber","toggleBillList","toggleCrossReferenceList","toggleWatchlistList","toggleWatchlist","deleteWatchlists","updateCrossReferenceList","newLegislation","watchListIDsParam","watchListIDs","watchlistIndex","watchlistsToDelete","deletingWatchlists","legislationNumbersParam","crossRefList","isProfilePage","toggleExpandAll","ProfileForm","apiKeys","apiKeyIsLoading","getApiKeys","handleCopy","navigator","clipboard","writeText","canCreateMultipleWatchlists","APIKey","PrivacyComponent","DevsPortal","ApiName","DocumentComponent","backToList","docName","spec","nativeScrollbars","theme","colors","primary","main","http","responses","typography","headings","visited","hover","optimizeSpeed","sidebar","rightPanel","spacing","sectionHorizontal","sectionVertical","lazyRendering","KeyRegistration","urlRegex","KeyConfirmation","urlError","organization","phone","agree","checkUrl","Phone","EulaDate","TermsOfService","AdminDevsPortal","AdminDocumentComponent","AdminDocs","FooterWrapper","ConfigurationsTable","getTdProps","associatedAdminAssignment","uniqueIdentifier","adminAssignments","showDifferences","aca","associatedAdminValue","uniqueCategoryIdentifier","associatedRowCategoryCodeHasMultipleChambers","associatedRowAdminCategoryCodeHasMultipleChambers","assignments","newAssignment","getTheadProps","getTheadFilterThProps","finalState","getTheadThProps","pivotId","isNewRow","rowValue","categoryChamberIdentifier","requiredFields","newAssignmentFreshValues","p_LegislationDescription","IsUncontested","CalendarConfigurations","getAssociatedAdminAssignmentWithoutModDate","assignment","legislationClassOptions","loadedCategories","loadedAssignments","loadedAdminAssignments","loadedLegislationClassOptions","categoriesError","assignmentsError","legislationClassOptionsError","adminAssignmentsError","duplicates","showAllDifferences","filteringMismatches","assignmentMismatches","getCategories","getAssignments","getAdminAssignments","handleAssignmentChange","checkDuplicates","getUneditedAssignment","toggleDifferences","findDifferences","legClass","uid","ca","referenceEvent","editedAssignment","preSaveEventControlID","EventControlID","assignmentSave","existingAssignmentIndex","assignmentIndex","uneditedAssignment","cas","billEventOptionsError","loadedBillEventOptions","Placeholder","associatedAdminAssignmentWithoutModDate","originalWithoutModificationDate","differentInAdminDB","doesNotExistInAdminDB","originalCategoryDisplayCode","associatedAdminCategoryDisplayCode","cm","requiredFieldsNotCompleted","uneditedWithoutCategoryChamberIdentifier","originalWithoutCategoryChamberIdentifier","originalWithoutCategoryChamberIdentifierAndModificationDate","differentOrNonExistentInAdminDB","isDifferentOrNonExistentInAdminDB","CommunicationsConfigurations","refCategory","ConfigurationsGrid","categoryColumn","isAscending","arr","ConfigurationsManagement","getEventReferences","currentlyAsc","first","getAssociatedAdminAssignmentFn","originalWithoutCategoryChamberAndModificationDate","JournalGridComponent","getJournalData","handleCategoryChange","journalDate","handleSendCategory","handleDeleteJournal","journal","JournalDate","journalId","excludeDates","JournalID","JournalManagementGrid","JournalDetails","JournalEntries","JournalVote","infoBoxRef","JournalEntryID","JournalManagementForm","generateMml","JournalCategories","JournalCategoryID","journals","newJournal","generatingMml","download","revokeObjectURL","journalid","JournalIndex","ObjectName","JournalManagement","PrivateRoute","authstatus","hasPermission","checkingToken","rest","LISApp","counter","houseToken","idleTimer","onActive","onIdle","checkPermissions","setHouseToken","canAccessDocs","tokenExp","getElapsedTime","getLastActiveTime","timeout","divElement","offsetHeight","Home","SearchReportPage","SearchHelp","PublicCommitteeInformation","Login","ProfileContent","accounts","request","account","acquireTokenSilent","accessToken","expiresOn","RequestAccessToken","App","isLocalhost","hostname","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","reactRouterMiddleware","routerMiddleware","middleWares","thunk","msalInstance","PublicClientApplication","store","preloadedState","createStore","combineReducers","router","connectRouter","Users","Session","Calendar","Members","Nav","Personnel","Communications","Print","Report","Collection","Stat","Org","Dev","Journal","compose","applyMiddleware","configureStore","rootElement","iKey","ApplicationInsights","instrumentationKey","loadAppInsights","origin","ready","unregister","checkValidServiceWorker","registerServiceWorker","committeeListRequest","committeeListSuccess","committeeListFailure","createCommitteeRequest","createCommitteeSuccess","createCommitteeFailure","saveCommitteeRequest","saveCommitteeSuccess","saveCommitteeFailure","partnerCommitteeListRequest","partnerCommitteeListSuccess","partnerCommitteeListFailure","partnerCommitteesRequest","partnerCommitteesSuccess","partnerCommitteesFailure","committeeByIdRequest","committeeByIdSuccess","committeeByIdFailure","committeeByNumberRequest","committeeByNumberSuccess","committeeByNumberFailure","committeePartnerByIdRequest","committeePartnerByIdSuccess","committeePartnerByIdFailure","committeesByMemberRequest","committeesByMemberSuccess","committeesByMemberFailure","membersList","createdCommittee","receiveSaveCommittee","receiveCreateCommittee","createCommitteeError","requestPartnerCommitteeList","receivePartnerCommitteeList","requestPartnerCommittees","receivePartnerCommittees","requestCommitteesByMember","receiveCommitteesByMember","committeesByMemberError","requestCommitteeList","receiveCommitteeList","committeeListError","requestCommitteeById","receiveCommitteeById","committeeByIdError","requestCommitteeByNumber","receiveCommitteeByNumber","committeeByNumberError","requestPartnerCommitteeById","receivePartnerCommitteeById","committeePartnerByIdError","districtListSuccess","districtListFailure","memberStatusesSuccess","memberStatusesFailure","partyCodeListSuccess","partyCodeListFailure","memberNumbersRequest","memberNumbersSuccess","memberNumbersFailure","memberListRequest","memberListSuccess","memberListFailure","memberContactRequest","memberContactSuccess","memberContactFailure","memberListContactRequest","memberListContactSuccess","memberListContactFailure","memberByIdSuccess","memberByIdFailure","membersByCommitteeRequest","membersByCommitteeSuccess","membersByCommitteeFailure","committeeMemberRolesRequest","committeeMemberRolesSuccess","committeeMemberRolesFailure","memberCommitteeSaveSuccess","memberCommitteeSaveFailure","memberCreateSuccess","memberCreateFailure","memberSaveSuccess","memberSaveFailure","memberLegislationSuccess","memberLegislationFailure","memberVotesSuccess","memberVotesFailure","memberConferenceBillsSuccess","memberConferenceBillsFailure","districtListError","memberStatusesError","partyCodeListError","memberCreateError","memberSave","memberSaveError","memberConferenceBillsError","memberListContactError","receiveDistricts","Districts","receivePartyCodeList","Parties","receiveMemberStatuses","MemberStatuses","requestMembersByCommittee","receiveMembersByCommittee","requestCommitteeMemberRoles","receiveCommitteeMemberRoles","houseRoles","senateRoles","committteeMemberRolesError","committeeMemberRolesError","committeeMembersArray","CommitteeRoles","committeeMemberSenateRoles","committeeMemberHouseRoles","elemObj","requestMemberNumbers","receiveMemberNumbers","memberNumbersError","MemberNumberList","requestMemberList","receiveMemberList","ShallowMembers","receiveMember","requestMemberContact","receiveMemberContact","memberContactError","MemberContactInformationList","requestMemberListContact","receiveMemberListContact","receiveMemberCommitteeSave","receiveMemberCreate","receiveMemberSave","receiveMemberLegislation","PatronLegislation","receiveMemberVotes","REACT_APP_MEMBER_VOTE_SEARCH_SERVICE","MemberVoteList","receiveMemberConferenceBills","ConferenceLegislationList","Popout","containerEl","sourceDoc","targetDoc","windowWidth","externalWindow","styleSheets","styleSheet","cssRules","newStyleEl","cssRule","newLinkEl","createPortal"],"mappings":"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","file":"static/js/main.717058a2.chunk.js","sourcesContent":["import { partnerRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst journalCategoryListRequest = 'JOURNAL_CATEGORY_LIST_REQUEST';\nconst journalCategoryListSuccess = 'JOURNAL_CATEGORY_LIST_SUCCESS';\nconst journalCategoryListFailure = 'JOURNAL_CATEGORY_LIST_FAILURE';\n\nconst journalListRequest = 'JOURNAL_LIST_REQUEST';\nconst journalListSuccess = 'JOURNAL_LIST_SUCCESS';\nconst journalListFailure = 'JOURNAL_LIST_FAILURE';\n\nconst journalByIdRequest = 'JOURNAL_BY_ID_REQUEST';\nconst journalByIdSuccess = 'JOURNAL_BY_ID_SUCCESS';\nconst journalByIdFailure = 'JOURNAL_BY_ID_FAILURE';\n\nconst journalBuildSuccess = 'JOURNAL_BUILD_SUCCESS';\nconst journalBuildFailure = 'JOURNAL_BUILD_FAILURE';\n\nconst journalGenerationSuccess = 'JOURNAL_GENERATION_SUCCESS';\nconst journalGenerationFailure = 'JOURNAL_GENERATION_FAILURE';\n\nconst journalSaveSuccess = 'JOURNAL_SAVE_SUCCESS';\nconst journalSaveFailure = 'JOURNAL_SAVE_FAILURE';\n\nconst journalDeleteSuccess = 'JOURNAL_DELETE_SUCCESS';\nconst journalDeleteFailure = 'JOURNAL_DELETE_FAILURE';\n\nconst receiveCategoryData = 'CATEGORY_DATA_SUCCESS';\nconst receiveCategoryDataFailure = 'CATEGORY_DATA_FAILURE';\n\nconst initialState = {\n journalCategoryList: [],\n journalCategoryMessage: '',\n journalList: [],\n journalMessage: '',\n journalById: [],\n journalByIdMessage: '',\n journalBuild: [],\n journalBuildError: '',\n journalGeneration: [],\n journalGenerationError: '',\n journalSave: [],\n journalSaveError: '',\n categoryData: '',\n categoryDataError: '',\n journalDeleteError: ''\n};\n\nexport const journalActionCreators = {\n // GET JOURNAL CATEGORY LIST FOR JOURNAL MGMT GRID\n requestJournalCategoryList: () => ({\n type: journalCategoryListRequest,\n journalCategoryList: [],\n isFetching: true\n }),\n\n receiveJournalCategoryList: (list, message) => ({\n type: journalCategoryListSuccess,\n isFetching: false,\n journalCategoryList: list,\n journalCategoryMessage: message\n }),\n\n journalCategoryListError: (message) => ({\n type: journalCategoryListFailure,\n isFetching: false,\n journalCategoryList: [],\n journalCategoryMessage: message\n }),\n\n getJournalCategories: () => {\n return dispatch => {\n dispatch(journalActionCreators.requestJournalCategoryList());\n\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_JOURNAL_API_URL) + '/JournalFileGeneration/api/GetJournalCategoryTypes', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(journalActionCreators.journalCategoryListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(journalActionCreators.receiveJournalCategoryList(result[1].JournalCategoryTypes.map(x => { return { label: x.Name, value: x.JournalCategoryTypeID } })))\n } else if (result[0] === NO_CONTENT) {\n dispatch(journalActionCreators.receiveJournalCategoryList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // GET JOURNAL LIST FOR JOURNAL MGMT GRID\n requestJournalList: () => ({\n type: journalListRequest,\n journalList: [],\n isFetching: true\n }),\n\n receiveJournalList: (list, message) => ({\n type: journalListSuccess,\n isFetching: false,\n journalList: list,\n journalMessage: message\n }),\n\n journalListError: (message) => ({\n type: journalListFailure,\n isFetching: false,\n journalList: [],\n journalMessage: message\n }),\n\n getJournals: (params) => {\n return dispatch => {\n dispatch(journalActionCreators.requestJournalList());\n\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_JOURNAL_API_URL) + '/JournalFileGeneration/api/GetJournalData?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(journalActionCreators.journalListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(journalActionCreators.receiveJournalList(result[1].Journals))\n } else if (result[0] === NO_CONTENT) {\n dispatch(journalActionCreators.receiveJournalList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // GET JOURNAL BY ID FOR JOURNAL FORM\n requestJournalById: () => ({\n type: journalByIdRequest,\n journalById: [],\n isFetching: true\n }),\n\n receiveJournalById: (list, message) => ({\n type: journalByIdSuccess,\n isFetching: false,\n journalById: list,\n journalByIdMessage: message\n }),\n\n journalByIdError: (message) => ({\n type: journalByIdFailure,\n isFetching: false,\n journalById: [],\n journalByIdMessage: message\n }),\n\n getJournalById: (params) => {\n return dispatch => {\n dispatch(journalActionCreators.requestJournalById());\n\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_JOURNAL_API_URL) + '/JournalFileGeneration/api/GetJournalDataById?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(journalActionCreators.journalByIdError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(journalActionCreators.receiveJournalById(result[1].Journals))\n } else if (result[0] === NO_CONTENT) {\n dispatch(journalActionCreators.receiveJournalById([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n //BUILD JOURNAL DAY\n receiveJournalBuild: (list) => ({\n type: journalBuildSuccess,\n journalBuild: list[0],\n }),\n\n journalBuildError: (message) => ({\n type: journalBuildFailure,\n journalBuild: [],\n journalBuildError: message\n }),\n\n buildJournal: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_JOURNAL_API_URL) + '/JournalFileGeneration/api/BuildSenateJournalDay', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(journalActionCreators.journalBuildError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(journalActionCreators.receiveJournalBuild(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(journalActionCreators.journalBuildError('Journal Data not available'))\n return Promise.reject('No Journal Data')\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n //GENERATE JOURNAL DAY\n receiveJournalGeneration: (bytes) => ({\n type: journalGenerationSuccess,\n journalGeneration: bytes,\n }),\n\n journalGenerationError: (message) => ({\n type: journalGenerationFailure,\n journalGeneration: [],\n journalGenerationError: message\n }),\n\n generateJournal: (params) => {\n return dispatch => {\n let config = {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"authorization\": \"Bearer \" + localStorage.getItem('LIS_ID_TOKEN'),\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n }\n }\n let url = (API_URL || process.env.REACT_APP_JOURNAL_API_URL) + '/JournalFileGeneration/api/GenerateSenateJournalDay' + params;\n return fetch(url, config)\n .then(async result => {\n if (!result) {\n dispatch(journalActionCreators.journalGenerationError(\"File not generated\"));\n } else if (result.status === 400) {\n await result.body.getReader().read().then(({ value }) => {\n const error = JSON.parse(Buffer.from(value.buffer).toString())\n dispatch(journalActionCreators.journalGenerationError(error.Name || \"Unknown Error\"));\n })\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n } else {\n const responseText = await result.text();\n dispatch(journalActionCreators.receiveJournalGeneration(responseText));\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n //SAVE JOURNAL\n receiveJournalSave: (list) => ({\n type: journalSaveSuccess,\n journalSave: list[0],\n }),\n\n journalSaveError: (message) => ({\n type: journalSaveFailure,\n journalSave: [],\n journalSaveError: message\n }),\n\n saveJournal: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_JOURNAL_API_URL) + '/JournalFileGeneration/api/SaveJournalData', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(journalActionCreators.journalSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(journalActionCreators.receiveJournalSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(journalActionCreators.journalSaveError('Journal Data not available'))\n return Promise.reject('No Journal Data')\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCategoryData: responseObj => ({\n type: receiveCategoryData,\n categoryData: responseObj\n }),\n\n categoryDataError: message => ({\n type: receiveCategoryDataFailure,\n categoryDataError: message\n }),\n\n getCategoryData: (params) => {\n return dispatch => {\n let config = {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"authorization\": \"Bearer \" + localStorage.getItem('LIS_ID_TOKEN'),\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n }\n }\n\n let url = API_URL + '/JournalFileGeneration/api/GenerateJournalCategoryType?' + params;\n\n return fetch(url, config)\n .then(async result => {\n if (!result) {\n dispatch(journalActionCreators.categoryDataError(\"File not generated\"));\n } else if (result.status === 400) {\n await result.body.getReader().read().then(({ value }) => {\n const error = JSON.parse(Buffer.from(value.buffer).toString())\n dispatch(journalActionCreators.categoryDataError(error.Name || \"Unknown Error\"));\n })\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n } else {\n await result.body.getReader().read().then(({ value }) => {\n let decoder = new TextDecoder;\n dispatch(journalActionCreators.receiveCategoryData(decoder.decode(value)));\n })\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n //SAVE JOURNAL\n receiveJournalDelete: () => ({\n type: journalDeleteSuccess,\n }),\n\n journalDeleteError: (message) => ({\n type: journalDeleteFailure,\n journalDeleteError: message\n }),\n\n deleteJournal: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_JOURNAL_API_URL) + '/JournalFileGeneration/api/DeleteJournalDay?journalId=' + params, 'DELETE', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(journalActionCreators.journalDeleteError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(journalActionCreators.receiveJournalDelete())\n } else if (result[0] === NO_CONTENT) {\n dispatch(journalActionCreators.journalDeleteError('Journal Data not available'))\n return Promise.reject('No Journal Data')\n }\n }).catch(err => Promise.reject(err))\n }\n }\n}\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n\n case journalCategoryListRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case journalCategoryListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n journalCategoryList: action.journalCategoryList,\n journalMessage: ''\n })\n case journalCategoryListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n journalCategoryList: action.journalCategoryList,\n journalMessage: action.journalMessage\n })\n case journalListRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case journalListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n journalList: action.journalList,\n journalMessage: ''\n })\n case journalListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n journalList: action.journalList,\n journalMessage: action.journalMessage\n })\n case journalByIdRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case journalByIdSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n journalById: action.journalById,\n journalByIdMessage: ''\n })\n case journalByIdFailure:\n return Object.assign({}, state, {\n isFetching: false,\n journalById: action.journalById,\n journalByIdMessage: action.journalByIdMessage\n })\n case journalBuildSuccess:\n return Object.assign({}, state, {\n journalBuild: action.journalBuild,\n journalBuildError: ''\n })\n case journalBuildFailure:\n return Object.assign({}, state, {\n journalBuildError: action.journalBuildError\n })\n case journalGenerationSuccess:\n return Object.assign({}, state, {\n journalGeneration: action.journalGeneration,\n journalGenerationError: ''\n })\n case journalGenerationFailure:\n return Object.assign({}, state, {\n journalGenerationError: action.journalGenerationError\n })\n case journalSaveSuccess:\n return Object.assign({}, state, {\n journalSave: action.journalSave,\n journalSaveError: ''\n })\n case journalSaveFailure:\n return Object.assign({}, state, {\n journalSaveError: action.journalSaveError\n })\n case journalDeleteSuccess:\n return Object.assign({}, state, {\n journalDelete: action.journalDelete,\n journalDeleteError: ''\n })\n case journalDeleteFailure:\n return Object.assign({}, state, {\n journalDeleteError: action.journalDeleteError\n })\n case receiveCategoryData:\n return Object.assign({}, state, {\n categoryData: action.categoryData,\n categoryDataError: ''\n })\n case receiveCategoryDataFailure:\n return Object.assign({}, state, {\n categoryDataError: action.categoryDataError\n })\n default:\n return state\n }\n};","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst printDocumentsSuccess = \"PRINT_DOCUMENTS_SUCCESS\";\nconst printDocumentsFailure = \"PRINT_DOCUMENTS_FAILURE\";\n\nconst printCreateSuccess = \"PRINT_CREATE_SUCCESS\";\nconst printCreateFailure = \"PRINT_CREATE_FAILURE\";\n\nconst printSaveSuccess = \"PRINT_SAVE_SUCCESS\";\nconst printSaveFailure = \"PRINT_SAVE_FAILURE\";\n\nconst printParchmentEmailSuccess = \"PRINT_PARCHMENT_EMAIL_SUCCESS\";\nconst printParchmentEmailFailure = \"PRINT_PARCHMENT_EMAIL_FAILURE\";\n\nconst batchItemCompleteSuccess = \"BATCH_ITEM_SUCCESS\";\nconst batchItemCompleteFailure = \"BATCH_ITEM_FAILURE\";\n\nconst printAllEnrolledSuccess = \"PRINT_ALL_ENROLLED_SUCCESS\";\nconst printAllEnrolledFailure = \"PRINT_ALL_ENROLLED_FAILURE\";\n\nconst initialState = {\n printDocuments: [],\n printDocumentsError: '',\n printCreate: '',\n printCreateError: '',\n printSave: '',\n printSaveError: '',\n printParchmentEmail: '',\n printParchmentEmailError: '',\n batchItemComplete: '',\n batchItemCompleteError: '',\n printAllEnrolledError: ''\n};\n\nexport const printActionCreators = {\n\n receivePrintDocuments: resObj => ({\n type: printDocumentsSuccess,\n printDocuments: resObj\n }),\n\n printDocumentsError: (message) => ({\n type: printDocumentsFailure,\n printDocumentsError: message\n }),\n\n getPrintDocuments: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PRINT_DOCUMENTS_SERVICE) + '/PrintDocuments/api/getprintdocumentsasync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(printActionCreators.printDocumentsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(printActionCreators.receivePrintDocuments(result[1].PrintBatches))\n } else if (result[0] === NO_CONTENT) {\n dispatch(printActionCreators.receivePrintDocuments([]))\n return Promise.reject('No documents found');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePrintCreate: resObj => ({\n type: printCreateSuccess,\n printCreate: resObj\n }),\n\n printCreateError: (message) => ({\n type: printCreateFailure,\n printCreateError: message\n }),\n\n createPrintDocument: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PRINT_DOCUMENTS_SERVICE) + '/printdocuments/api/createprintdocumentasync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(printActionCreators.printCreateError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(printActionCreators.receivePrintCreate(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(printActionCreators.printCreateError('No Content'))\n return Promise.reject('No Content');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePrintSave: resObj => ({\n type: printSaveSuccess,\n printSave: resObj\n }),\n\n printSaveError: (message) => ({\n type: printSaveFailure,\n printSaveError: message\n }),\n\n savePrintDocument: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PRINT_DOCUMENTS_SERVICE) + '/printdocuments/api/saveprintdocumentasync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(printActionCreators.printSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(printActionCreators.receivePrintSave(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(printActionCreators.printSaveError('No Content'))\n return Promise.reject('No Content');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePrintParchmentEmail: resObj => ({\n type: printParchmentEmailSuccess,\n printParchmentEmail: resObj\n }),\n\n printParchmentemailError: (message) => ({\n type: printParchmentEmailFailure,\n printParchmentError: message\n }),\n\n sendParchmentEmail: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PRINT_DOCUMENTS_SERVICE) + '/PrintDocuments/api/SendPrintParchmentEmailAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(printActionCreators.printParchmentEmailError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(printActionCreators.receivePrintParchmentEmail(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(printActionCreators.printParchmentEmailError('No Content'))\n return Promise.reject('No Content');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBatchItemComplete: resObj => ({\n type: batchItemCompleteSuccess,\n batchItemComplete: resObj\n }),\n\n batchItemCompleteError: (message) => ({\n type: batchItemCompleteFailure,\n batchItemCompleteError: message\n }),\n\n completeBatchItem: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PRINT_DOCUMENTS_SERVICE) + '/printdocuments/api/CompletePrintDocumentAsync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(printActionCreators.batchItemCompleteError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(printActionCreators.receiveBatchItemComplete(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(printActionCreators.batchItemCompleteError('No Content'))\n return Promise.reject(\"No Content\");\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePrintAllEnrolled: resObj => ({\n type: printAllEnrolledSuccess\n }),\n\n printAllEnrolledError: (message) => ({\n type: printAllEnrolledFailure,\n printAllEnrolledError: message\n }),\n\n printAllEnrolled: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PRINT_DOCUMENTS_SERVICE) + '/printdocuments/api/ProcessAllEnrolledBillsAsync', 'POST', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(printActionCreators.printAllEnrolledError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(printActionCreators.receivePrintAllEnrolled(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(printActionCreators.printAllEnrolledError('No Content'))\n return Promise.reject(\"No Content\");\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n }\n};\n\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n case printDocumentsSuccess:\n return Object.assign({}, state, {\n printDocuments: action.printDocuments,\n printDocumentsError: action.printDocumentsError\n })\n case printDocumentsFailure:\n return Object.assign({}, state, {\n printDocumentsError: action.printDocumentsError\n })\n case printCreateSuccess:\n return Object.assign({}, state, {\n printCreate: action.printCreate,\n printCreateError: action.printCreateError\n })\n case printCreateFailure:\n return Object.assign({}, state, {\n printCreateError: action.printCreateError\n })\n case printSaveSuccess:\n return Object.assign({}, state, {\n printSave: action.printSave,\n printSaveError: action.printSaveError\n })\n case printSaveFailure:\n return Object.assign({}, state, {\n printSaveError: action.printSaveError\n })\n case printParchmentEmailSuccess:\n return Object.assign({}, state, {\n printParchmentEmail: action.printParchmentEmail,\n printParchmentEmailError: action.printParchmentEmailError\n })\n case printSaveFailure:\n return Object.assign({}, state, {\n printParchmentEmailError: action.printParchmentEmailError\n })\n case batchItemCompleteSuccess:\n return Object.assign({}, state, {\n batchItemComplete: action.batchItemComplete,\n batchItemCompleteError: action.batchItemCompleteError\n })\n case batchItemCompleteFailure:\n return Object.assign({}, state, {\n batchItemCompleteError: action.batchItemCompleteError\n })\n case printAllEnrolledSuccess:\n return Object.assign({}, state, {\n printAllEnrolledError: action.printAllEnrolledError\n })\n case printAllEnrolledFailure:\n return Object.assign({}, state, {\n printAllEnrolledError: action.printAllEnrolledError\n })\n default:\n return state\n }\n};","import tinymce from 'tinymce/tinymce';\n\ntinymce.PluginManager.add('linenumbers', function (editor) {\n const width = '40px'\n let linePositions = [];\n let bodyHeight = 0;\n const container = document.createElement('div');\n const lineNumberContainer = document.createElement('div');\n // NodeChange stops firing when text start to wrap. input does not fire when font size is changed.\n // Neither of these fire when a the tinymce react component changes state so SetContent is used as well.\n // So this function is ran regardless of which event happens\n editor.on('NodeChange input SetContent', _e => {\n const root = editor.contentDocument.activeElement;\n // The line numbers only need to be updated when the vertical size of the content changes. Any more would be unnecessary since the line numbers wouldn't change\n if (bodyHeight !== root.scrollHeight) {\n update();\n bodyHeight = root.scrollHeight;\n }\n });\n // Where text wraps have a chance of changing when the windows resizes \n editor.on('ResizeWindow', _e => {\n update();\n });\n editor.on('init', _e => {\n editor.contentWindow.onscroll = () => scrollNumbers();\n //Style the tinymce body to allow room for the line numbers on the left side\n const root = editor.contentDocument.activeElement;\n root.style.margin = 0;\n root.style.marginLeft = width;\n bodyHeight = root.scrollHeight;\n // Style the line number container and container to allow for the content to scroll\n container.style.width = width;\n container.style.overflow = 'hidden';\n lineNumberContainer.style.position = 'relative'; // Needs to be relative or else the line numbers will not scroll\n container.appendChild(lineNumberContainer);\n editor.contentAreaContainer.appendChild(container);\n //Account for content already in the editor on initiation\n update();\n });\n editor.on('ScrollContent', _e => {\n update();\n });\n\n // Scroll the collection of line numbers with the tinymce window\n // This is so the line numbers will stay next to their line\n const scrollNumbers = () => {\n const contentWindow = editor.contentWindow;\n container.scrollTop = contentWindow.scrollY;\n }\n\n // Updates the line numbers to the correct amount and position\n // Only runs at tinymce initiation and when the tinymce body changes height\n const update = () => {\n const root = editor.contentDocument.activeElement;\n linePositions = [];\n\n //If line numbering is disabled by the user then escape and clear line numbers\n if (localStorage.getItem(\"showLineNumbers\") === \"false\") {\n lineNumberContainer.innerText = '';\n return;\n }\n\n root.childNodes.forEach(rootChild => {\n // Since the content of the html is going to be changed to find where the lines end it is safer to make a copy of the editor body\n let clonedRootChild = rootChild.cloneNode(true);\n root.insertBefore(clonedRootChild, rootChild);\n // Hide the original editor body so that its height does not offset the line positions\n const oldDisplay = rootChild.style.display;\n rootChild.style.display = 'none';\n if(clonedRootChild.style.display != \"none\") {\n tagNewLines(clonedRootChild, root.scrollHeight * -1);\n }\n // Remove the node used to find line positions and show the original editor body again\n root.removeChild(clonedRootChild);\n rootChild.style.display = oldDisplay;\n });\n lineNumberContainer.style.height = editor.contentDocument.scrollingElement.scrollHeight + 'px';\n // Get the font size. Most browsers default it to 16px\n const bodyFontSize = window.getComputedStyle(root).getPropertyValue('font-size') || \"16px\";\n lineNumberContainer.innerText = ''\n\n let beginDrawing = false;\n\n for (let i = 0; i < linePositions.length; i++) {\n //Attempt to limit the amount of line numbers being drawn at any given time based on the scroll position of the window\n if ((editor.contentWindow.scrollY === 0 && i < 100)\n || (i < 225 && editor.contentWindow.scrollY < 7500)\n || (editor.contentWindow.scrollY / i > 28.5 && editor.contentWindow.scrollY / i < 33.5)) {\n let lineNumber = document.createElement('div');\n lineNumber.style.position = 'absolute'\n lineNumber.style.fontWeight = '700';\n lineNumber.style.fontSize = bodyFontSize;\n //Set the position of the line number. Need to account for how the position changes with the scroll height\n lineNumber.style.top = linePositions[i].top + editor.contentWindow.scrollY + 'px';\n lineNumber.innerText = i + 1;\n lineNumberContainer.appendChild(lineNumber)\n beginDrawing = true;\n } else if (beginDrawing) {\n //Exit the loop now that we're outside of the drawing range\n return;\n }\n }\n }\n\n // This is a recursive function.\n // It takes text nodes and converts them to an element that can be used to find the node's position\n // The function calls itself when reaching a non-text node so that it can traverse that node's children until it reaches a text node\n const tagNewLines = (node, oldLocation) => {\n let atBillNumber = false;\n let atGovernorsActions = false;\n node.childNodes.forEach(child => {\n if ([\"#text\", \"U\", \"S\", \"LI\", \"STRONG\", \"EM\", \"SPAN\"].includes(child.nodeName)) {\n let testNode = document.createElement('span');\n //Surround each word with an <n> tag\n //There is not a way to find the location of each seperate word\n //So an element is created with the word as the content. That way the location of the element can be found\n let nodeVal = child.nodeValue || child.innerText;\n testNode.innerHTML = nodeVal.replace(/[^\\s-]+/g, '<n>$&</n>');\n //Get rid of the text node and replace it with the new element \n node.insertBefore(testNode, child);\n node.removeChild(child);\n testNode.childNodes.forEach(testChild => {\n if (testChild.nodeName === \"#text\") {\n // Leftover text nodes will always be either the whitespace between the words or dashes between the words\n // Their location does not need to be checked because text is wrapped on words\n return;\n }\n const rect = testChild.getBoundingClientRect()\n const location = rect.bottom;\n const height = rect.height;\n if (testChild.nodeName === 'N') {\n // Account for the height of an element because an element that is taller then the last element doesn't mean it is on a new line\n if (location >= oldLocation + height) {\n // This word is on a different line then the previous. Save the position so that it can be referenced later when placing the line numbers\n linePositions.push(testChild.getBoundingClientRect());\n }\n }\n oldLocation = location;\n });\n } else if (child.nodeName === \"TR\") {\n //Add a line for each table row\n linePositions.push(child.getBoundingClientRect());\n } else if (child.nodeName === 'BR') {\n // BR tags also count as new lines only when they are by themselves on a line\n if (child.parentNode.childNodes.length === 1) {\n linePositions.push(child.getBoundingClientRect());\n }\n } else {\n //Continuously check for the bill number or the VA acts of assembly line until we find it\n //Don't start tagging lines until we reach one of these lines\n if (child.classList && child.classList.value == \"billnumber\" || child.innerText === \"VIRGINIA ACTS OF ASSEMBLY -- CHAPTER\") {\n atBillNumber = true;\n oldLocation = tagNewLines(child, oldLocation);\n //Skip tagging the patron line\n } else if (atBillNumber === true && child.classList.value != \"patronLine\") {\n //Traverse through this element's children until a text node is reached\n oldLocation = tagNewLines(child, oldLocation)\n }\n //Continuously check for governor actions lines until we find it\n //Don't start tagging lines until after these lines\n if (child.classList && child.classList.value == \"governorsactions\") {\n atGovernorsActions = true;\n } else if (atGovernorsActions === true && child.classList.value != \"governorsactions\") {\n //Traverse through this element's children until a text node is reached\n oldLocation = tagNewLines(child, oldLocation)\n }\n //Go into the table so we can tag the child <tr>s \n if (child.nodeName === 'TBODY') {\n oldLocation = tagNewLines(child, oldLocation)\n }\n }\n });\n // Return the last element's location to be compared against the next element's location\n return oldLocation;\n }\n});","import tinymce from 'tinymce/tinymce';\n\ntinymce.PluginManager.add('copyheadstyle', function (editor) {\n // Since TinyMCE is in an iframe the <style> tags and <link> tags from the root document need to be copied into the iframe\n editor.on('init', _e => {\n const styleTags = document.head.querySelectorAll('style');\n styleTags.forEach(element => {\n const newEl = element.cloneNode(true);\n editor.contentDocument.head.appendChild(newEl);\n });\n const linkTags = document.head.querySelectorAll('link');\n linkTags.forEach(element => {\n if(element.attributes.rel && element.attributes.rel.nodeValue === \"stylesheet\") {\n const newEl = element.cloneNode(true);\n editor.contentDocument.head.appendChild(newEl);\n }\n });\n\n let addedStyles = document.createElement('style');\n //This is a fix for firefox since the body element's height is 100% be default\n addedStyles.innerHTML += 'body {height: auto;}';\n //They do not want links to be seen in the editor.\n addedStyles.innerHTML += \"a, a:link, a:hover, a:link:hover {color: #333333; text-decoration: none;}\"\n editor.contentDocument.head.appendChild(addedStyles);\n });\n \n});","import tinymce from 'tinymce/tinymce';\n\ntinymce.PluginManager.add('rejectedbutton', function (editor) {\n let intialValue = \"REJECTED\";\n let hasFocus = false;\n editor.on(\"contextmenu\", e => {\n // Right clicking the tinymce editor when the editor is not in focus does not add the cursor in the right area.\n // This is used to counteract that and place the cursor in the about the right spot\n // At the front of the clicked element\n if(!hasFocus) {\n const points = editor.contentDocument.elementsFromPoint(e.x, e.y);\n if(points.length > 0) {\n editor.selection.select(points[0], true);\n editor.selection.collapse(true);\n }\n hasFocus = true;\n }\n });\n // Since the contextmenu event fires after focus is gained the state of focus has to be manually controlled here.\n editor.on(\"click\", () => hasFocus = true);\n editor.on(\"blur\", () => hasFocus = false);\n\n const getButton = (buttonText, intialText) => {\n return {\n type: \"menuitem\",\n text: buttonText,\n onAction: () => {\n intialValue = intialText;\n editor.fire(\"contexttoolbar-show\", {toolbarKey:\"rejectedinput\"});\n }\n }\n }\n const items = [\n getButton(\"Rejected\", \"REJECTED\"),\n getButton(\"Withdrawn\", \"WITHDRAWN\"),\n getButton(\"Ruled Out Of Order\", \"RULED OUT OF ORDER\"),\n getButton(\"Passed By\", \"PASSED BY\"),\n getButton(\"Not Specific Or Severable\", \"NOT SPECIFIC OR SEVERABLE\"),\n getButton(\"Ruled Not Germane\", \"RULED NOT GERMANE\"),\n ]\n // Create buttons in the toolbar to add the rejected text\n editor.ui.registry.addMenuButton('rejectedbuttons', {\n text:\"Rejected\",\n fetch: callback => {\n callback(items)\n }\n });\n // Create button in the right-click context menu to add the rejected text\n editor.ui.registry.addNestedMenuItem('rejectedbuttonscontext', {\n text: \"Rejected\",\n getSubmenuItems: () => {\n return items;\n }\n });\n\n editor.ui.registry.addContextForm(\"rejectedinput\", {\n position: \"selection\",\n scope: \"node\",\n initValue: () => intialValue,\n launch: {\n type: 'contextformbutton',\n text: 'Submit'\n },\n commands: [{\n type: \"contextformbutton\",\n text: 'Submit',\n onAction: formApi => {\n const value = formApi.getValue();\n editor.insertContent(`<span class=\"rejected\"> [${value}] </span>`);\n formApi.hide();\n }\n }]\n })\n});","import tinymce from 'tinymce/tinymce';\n\ntinymce.PluginManager.add('agreedbutton', function (editor) {\n let intialValue = \"AGREED\";\n let hasFocus = false;\n editor.on(\"contextmenu\", e => {\n // Right clicking the tinymce editor when the editor is not in focus does not add the cursor in the right area.\n // This is used to counteract that and place the cursor in the about the right spot\n // At the front of the clicked element\n if(!hasFocus) {\n const points = editor.contentDocument.elementsFromPoint(e.x, e.y);\n if(points.length > 0) {\n editor.selection.select(points[0], true);\n editor.selection.collapse(true);\n }\n hasFocus = true;\n }\n });\n // Since the contextmenu event fires after focus is gained the state of focus has to be manually controlled here.\n editor.on(\"click\", () => hasFocus = true);\n editor.on(\"blur\", () => hasFocus = false);\n\n // Create buttons in the toolbar to add the agreed to text\n editor.ui.registry.addButton('agreedbutton', {\n text:\"Agreed\",\n onAction: () => {\n editor.fire(\"contexttoolbar-show\", {toolbarKey:\"agreedinput\"});\n }\n });\n // Create button in the right-click context menu to add the agreed to text\n editor.ui.registry.addMenuItem('agreedbuttoncontext', {\n text:\"Agreed\",\n onAction: () => {\n editor.fire(\"contexttoolbar-show\", {toolbarKey:\"agreedinput\"});\n }\n });\n\n editor.ui.registry.addContextForm(\"agreedinput\", {\n position: \"selection\",\n scope: \"node\",\n initValue: () => intialValue,\n launch: {\n type: 'contextformbutton',\n text: 'Submit'\n },\n commands: [{\n type: \"contextformbutton\",\n text: 'Submit',\n onAction: formApi => {\n const value = formApi.getValue();\n intialValue = value\n editor.insertContent(`<span class=\"agreed\"> [${value}] </span>`);\n formApi.hide();\n }\n }]\n })\n});","import tinymce from 'tinymce/tinymce';\n\ntinymce.PluginManager.add('createamendment', function (editor) {\n let selections = {};\n let members = editor.getParam(\"members\") || [];\n let committees = editor.getParam(\"committees\") || [];\n let addAmendmentCallback = editor.getParam(\"addAmendmentCallback\");\n let userChamber = editor.getParam(\"userChamber\");\n let billNumber = editor.getParam(\"billNumber\");\n let allowGovernorAmendmentSponsor = editor.getParam(\"allowGovernorAmendmentSponsor\");\n let amendmentOrigin = editor.getParam(\"amendmentOrigin\");\n if (amendmentOrigin && amendmentOrigin === \"H\") { amendmentOrigin = \"HOUSE\" }\n else if (amendmentOrigin && amendmentOrigin === \"S\") { amendmentOrigin = \"SENATE\" }\n else if (allowGovernorAmendmentSponsor && amendmentOrigin && amendmentOrigin === \"G\") { amendmentOrigin = \"GOVERNOR\" }\n let sponsor = editor.getParam(\"sponsor\");\n let member = editor.getParam(\"member\");\n let committee = editor.getParam(\"committee\");\n\n let formItems = [];\n const placeholder = {\n text: \"Select\",\n value: \"\"\n }\n if (members.length > 0) {\n members.unshift(placeholder);\n formItems = formItems.concat({\n type: \"selectbox\",\n name: \"member\",\n label: \"Choose a member\",\n items: members\n });\n }\n if (committees.length > 0) {\n committees.unshift(placeholder);\n formItems = formItems.concat({\n type: \"selectbox\",\n name: \"committee\",\n label: \"Choose a committee\",\n items: committees\n });\n }\n editor.ui.registry.addButton('createamendment', {\n text: 'Add Amendment',\n onAction: () => {\n const dialog = editor.windowManager.open(initialPageConfig);\n if (billNumber) {\n dialog.setData({ billnumber: billNumber });\n }\n if (amendmentOrigin && ['HOUSE', 'SENATE', 'GOVERNOR'].includes(amendmentOrigin.toUpperCase())) {\n dialog.setData({ amendmentorigin: amendmentOrigin });\n }\n }\n })\n\n const initialPageConfig = {\n title: \"Insert Amendment\",\n body: {\n type: \"panel\",\n items: [\n {\n type: \"input\",\n name: \"billnumber\",\n label: \"Type in a bill number\"\n },\n {\n type: 'htmlpanel',\n html: '<p class=\"small-text\">Select the origin of the amendments and press Next to continue or Cancel to exit</p>'\n },\n {\n type: \"selectbox\",\n name: \"amendmentorigin\",\n label: \"Amendment origin\",\n items: userChamber === \"Admin\"\n ? [\n { value: \"HOUSE\", text: \"House\" },\n { value: \"SENATE\", text: \"Senate\" },\n ...(allowGovernorAmendmentSponsor ? [{ value: \"GOVERNOR\", text: \"Governor\" }] : [])\n ]\n : userChamber === \"H\"\n ? [\n { value: \"HOUSE\", text: \"House\" },\n ...(allowGovernorAmendmentSponsor ? [{ value: \"GOVERNOR\", text: \"Governor\" }] : [])\n ]\n : [\n { value: \"SENATE\", text: \"Senate\" },\n ...(allowGovernorAmendmentSponsor ? [{ value: \"GOVERNOR\", text: \"Governor\" }] : [])\n ]\n },\n ]\n },\n buttons: [\n {\n type: \"cancel\",\n name: \"cancel\",\n text: \"Cancel\"\n },\n {\n type: \"custom\",\n name: \"next\",\n text: \"Next\",\n disabled: !billNumber || billNumber.length <= 2\n }\n ],\n onChange: (dialogApi) => {\n const data = dialogApi.getData();\n // bill numbers will always have more than two characters\n if (data.billnumber.length > 2 && data.amendmentorigin) {\n dialogApi.enable('next')\n } else {\n dialogApi.disable('next')\n }\n },\n onAction: (dialogApi, details) => {\n if (details.name === 'next') {\n selections = { ...selections, ...dialogApi.getData() }\n if ((!selections.amendmentorigin || selections.amendmentorigin !== \"GOVERNOR\") && (members.length > 0 || committees.length > 0)) {\n dialogApi.redial(committeeAndMemberConfig);\n if (sponsor && sponsor === \"Member\") {\n dialogApi.disable('committee')\n if (member) {\n dialogApi.setData({ member: member })\n }\n } else if (sponsor && sponsor === \"Committee\") {\n dialogApi.disable('member')\n if (committee) {\n dialogApi.setData({ committee: committee })\n }\n }\n } else {\n dialogApi.redial(amendmentTypeDialog);\n if (selections.amendmentorigin === 'GOVERNOR' && !selections.versiontype) {\n dialogApi.setData({ versiontype: 'enrolled' })\n } else if (selections.versiontype) {\n dialogApi.setData({ versiontype: selections.versiontype })\n }\n }\n }\n }\n }\n\n const committeeAndMemberConfig = {\n title: \"Insert Amendment\",\n body: {\n type: \"panel\",\n items: formItems\n },\n buttons: [\n {\n type: \"custom\",\n name: \"previous\",\n text: \"Previous\"\n },\n {\n type: \"custom\",\n name: \"next\",\n text: \"Next\",\n }\n ],\n onChange: (dialogApi) => {\n const data = dialogApi.getData();\n if (data.member !== undefined) {\n if (data.member !== '') {\n dialogApi.disable('committee')\n dialogApi.setData({ amendmenttype: \"floor\" })\n } else {\n dialogApi.enable('committee')\n dialogApi.setData({ amendmenttype: \"\" })\n }\n }\n\n if (data.committee !== undefined) {\n if (data.committee !== '') {\n dialogApi.disable('member')\n dialogApi.setData({ amendmenttype: \"committee\" })\n } else {\n dialogApi.enable('member')\n dialogApi.setData({ amendmenttype: \"\" })\n }\n }\n },\n onAction: (dialogApi, details) => {\n selections = { ...selections, ...dialogApi.getData() }\n if (details.name === 'next') {\n dialogApi.redial(amendmentTypeDialog);\n if (selections.amendmentorigin === 'GOVERNOR' && !selections.versiontype) {\n dialogApi.setData({ versiontype: 'enrolled' })\n } else if (selections.versiontype) {\n dialogApi.setData({ versiontype: selections.versiontype })\n }\n }\n if (details.name === \"previous\") {\n dialogApi.redial(initialPageConfig);\n if (selections.billnumber) {\n dialogApi.setData({ billnumber: selections.billnumber });\n } else if (billNumber) {\n dialogApi.setData({ billnumber: billNumber });\n }\n if (selections.amendmentorigin) {\n dialogApi.setData({ amendmentorigin: selections.amendmentorigin });\n } else if (amendmentOrigin && ['HOUSE', 'SENATE', 'GOVERNOR'].includes(amendmentOrigin.toUpperCase())) {\n dialogApi.setData({ amendmentorigin: amendmentOrigin });\n }\n }\n }\n }\n\n let previousValue = \"1\";\n const amendmentTypeDialog = {\n title: \"Insert Amendment\",\n initialData: {\n amendmentstobeinserted: previousValue\n },\n body: {\n type: \"panel\",\n items: [\n {\n type: \"selectbox\",\n name: \"versiontype\",\n label: \"Version type\",\n items: [\n { value: \"introduced\", text: \"Introduced\" },\n { value: \"substitute\", text: \"Substitute\" },\n { value: \"engrossed\", text: \"Engrossed\" },\n { value: \"enrolled\", text: \"Enrolled\" }\n ]\n },\n {\n type: \"input\",\n name: \"amendmentstobeinserted\",\n label: \"Number of amendments to be inserted\",\n width: 45,\n class: \"fake-class\"\n }\n ]\n },\n buttons: [\n {\n type: \"custom\",\n name: \"previous\",\n text: \"Previous\"\n },\n {\n type: \"submit\",\n name: \"submitbutton\",\n text: \"OK\"\n }\n ],\n onChange: (dialogApi, details) => {\n if (details.name === \"amendmentstobeinserted\") {\n const data = dialogApi.getData();\n // The amount of amendments to be inserted need to be a number\n if (isNaN(data.amendmentstobeinserted)) {\n dialogApi.setData({ amendmentstobeinserted: previousValue })\n } else {\n previousValue = data.amendmentstobeinserted\n if (data.amendmentstobeinserted) {\n dialogApi.enable('submitbutton')\n } else {\n dialogApi.disable('submitbutton')\n }\n }\n }\n },\n onAction: (dialogApi, details) => {\n if (details.name === 'previous') {\n selections = { ...selections, ...dialogApi.getData() }\n if ((!selections.amendmentorigin || selections.amendmentorigin !== \"GOVERNOR\") && (members.length > 0 || committees.length > 0)) {\n dialogApi.redial(committeeAndMemberConfig);\n if (selections.member) {\n dialogApi.disable('committee')\n dialogApi.setData({ member: selections.member })\n } else if (selections.committee) {\n dialogApi.disable('member')\n dialogApi.setData({ committee: selections.committee })\n } else if (sponsor && sponsor === \"Member\") {\n dialogApi.disable('committee')\n if (member) {\n dialogApi.setData({ member: member })\n }\n } else if (sponsor && sponsor === \"Committee\") {\n dialogApi.disable('member')\n if (committee) {\n dialogApi.setData({ committee: committee })\n }\n }\n } else {\n dialogApi.redial(initialPageConfig);\n if (selections.billnumber) {\n dialogApi.setData({ billnumber: selections.billnumber });\n } else if (billNumber) {\n dialogApi.setData({ billnumber: billNumber });\n }\n if (selections.amendmentorigin) {\n dialogApi.setData({ amendmentorigin: selections.amendmentorigin });\n } else if (amendmentOrigin && ['HOUSE', 'SENATE', 'GOVERNOR'].includes(amendmentOrigin.toUpperCase())) {\n dialogApi.setData({ amendmentorigin: amendmentOrigin });\n }\n }\n }\n },\n onSubmit: dialogApi => {\n selections = { ...selections, ...dialogApi.getData() }\n const textToBeInserted = amendmentBuilder(selections);\n // Insert the text after whatever the current selection is\n const endNode = editor.selection.getEnd();\n editor.selection.select(endNode);\n editor.selection.collapse();\n editor.insertContent(textToBeInserted);\n\n if (addAmendmentCallback) {\n addAmendmentCallback(selections);\n }\n\n dialogApi.close();\n }\n }\n});\n\nconst amendmentBuilder = formData => {\n const amendmentsToBeInserted = parseInt(formData.amendmentstobeinserted, 10)\n const billNumberSection = formData.amendmentorigin === 'GOVERNOR' ? '' : `<p class=\"textbl\">(${formData.billnumber.toUpperCase()})</p>`;\n const titleSection = formData.amendmentorigin === 'GOVERNOR' ? '' : `<p class=\"textbl\">AMENDMENT${amendmentsToBeInserted > 1 ? \"S\" : \"\"} PROPOSED BY ${formData.amendmentorigin !== \"CONFERENCE\" ? \"THE\" : \"\"} ${formData.amendmentorigin}</p>`\n const committeeSection = formData.committee ? `<p class='i0'>${formData.committee.toUpperCase()}</p>` : \"\";\n const patronSection = formData.member ? `<p class='i0'>${formData.member.toUpperCase()}</p>` : \"\";\n let lineSections = '';\n for (let i = 1; i <= amendmentsToBeInserted; i++) {\n const lineSection = (i > 1 ? `<p></p>` : '') + (patronSection || committeeSection) + `\n <p class='textbi'>${i}. Line #, ${formData.versiontype}, after </p>\n <p class='i10'>strike</p>\n <p class='i15'></p>\n <p class='i10'>insert</p>\n <p class='i15'></p>\n `;\n lineSections += lineSection\n }\n\n return billNumberSection + titleSection + lineSections;\n}","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport 'tinymce/themes/silver/theme';\nimport 'tinymce/icons/default'\nimport 'tinymce/plugins/paste/plugin';\nimport 'tinymce/plugins/link/plugin';\nimport 'tinymce/plugins/save/plugin';\nimport 'tinymce/plugins/lists/plugin';\nimport 'tinymce/plugins/code/plugin';\nimport 'tinymce/plugins/preview/plugin';\nimport 'tinymce/plugins/searchreplace/plugin';\nimport 'tinymce/plugins/pagebreak/plugin';\nimport 'tinymce/plugins/table/plugin';\nimport '../../../stylesheets/tinymce/oxide/skin.min.css';\nimport '../../../stylesheets/tinymce/legislation_text_stylesheet.scss';\nimport '../../../stylesheets/tinymce/custom.scss';\nimport { Editor } from '@tinymce/tinymce-react';\nimport '../../../lis-shared/tinymce/lineNumberPlugin';\nimport '../../../lis-shared/tinymce/copyHeadStylePlugin';\nimport '../../../lis-shared/tinymce/rejectedButtonPlugin';\nimport '../../../lis-shared/tinymce/agreedButtonPlugin';\nimport '../../../lis-shared/tinymce/createAmendmentPlugin';\nimport '../../../lis-shared/tinymce/rightMarginPlugin';\nimport tinymce from 'tinymce';\n\nclass ReviewSection extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n members: [],\n committees: [],\n selectedBillNumberIsLoaded: true,\n selectedSponsorIsLoaded: true,\n selectedMemberIsLoaded: true,\n selectedCommitteeIsLoaded: true,\n showLineNumbers: true,\n showTooltip: false,\n currentFormats: \"\"\n }\n\n this.toggleShowLineNumbers = this.toggleShowLineNumbers.bind(this);\n this.toggleTooltip = this.toggleTooltip.bind(this);\n this.setFormat = this.setFormat.bind(this);\n }\n\n loadMembers(sessionId) {\n this.setState({ memberIsLoaded: false })\n this.props.actions.getMemberList(`sessionID=${sessionId}`)\n .then(() => {\n const members = this.props.members.memberList\n .filter(m => m.ListDisplayName)\n .map(m => ({ value: (m.ChamberCode === \"H\" ? \"DEL. \" : \"SEN. \") + m.PatronDisplayName, text: m.ListDisplayName }));\n this.setState({\n members: members\n }, () => {\n if (this.props.membersCallback) {\n this.props.membersCallback(this.props.members.memberList)\n }\n });\n }).finally(() => {\n this.setState({\n memberIsLoaded: true\n })\n });\n }\n\n loadCommittees(sessionId) {\n this.setState({ committeIsLoaded: false })\n this.props.actions.getCommitteeList(`sessionID=${sessionId}` + \"&includeSubCommittees=true\")\n .then(() => {\n const committees = this.props.committee.committeeList.filter(x => !x.ParentCommitteeID).map(c => ({ value: c.Name, text: c.Name }));\n this.setState({\n committees: committees\n }, () => {\n if (this.props.committeesCallback) {\n this.props.committeesCallback(this.props.committee.committeeList)\n }\n });\n }).finally(() => {\n this.setState({\n committeeIsLoaded: true\n })\n });\n }\n\n handleEditorChange(content) {\n this.props.handleEditorChange(content);\n //Hack to set the cursor position to the right of the first character entered\n //This is because the editor sets the cursor position to index 0 after automatically applying the default style to the first paragraph\n\n //We replace the content of the editor with itself after entering the first character and automatically applying the default format in the parent component\n //This places the cursor on the right hand side of the character\n //The booleans are used to prevent an infinite loop of handleEditorChange calls\n\n //If the editor had no content after the last keydown then mark the editor as having been empty\n if (content.length === 0 && !this.props.wasEmpty) {\n this.props.setWasEmpty(true);\n //Else if the content length is 24 (Paragraph tag with the section class apllied containing one character)\n //And the editor was previously empty\n //And there has been no replacement yet\n //Then mark that the edior was not empty after the last keydown, that the text has been replaced, and then execute the replacement\n } else if (content.length == 24 && this.props.wasEmpty && !this.props.replaced) {\n this.props.setWasEmpty(false, () => {\n this.props.setReplaced(true, () => {\n tinymce.activeEditor.execCommand('selectAll');\n tinymce.activeEditor.execCommand('mceReplaceContent', true, content);\n });\n })\n //Else this was any other kind of keydown event, mark that the editor was not empty, and that no replacement took place\n } else {\n this.props.setWasEmpty(false, () => {\n this.props.setReplaced(false);\n })\n }\n }\n\n toggleShowLineNumbers() {\n this.setState({\n showLineNumbers: !this.state.showLineNumbers\n }, () => {\n if (this.state.showLineNumbers) {\n localStorage.setItem(\"showLineNumbers\", true)\n tinymce.activeEditor.execCommand(\"mceInsertNewLine\");\n tinymce.activeEditor.execCommand(\"Undo\");\n } else {\n localStorage.setItem(\"showLineNumbers\", false)\n tinymce.activeEditor.execCommand(\"mceInsertNewLine\");\n tinymce.activeEditor.execCommand(\"Undo\");\n }\n })\n }\n\n toggleTooltip() {\n this.setState({\n showTooltip: !this.state.showTooltip\n })\n }\n\n setFormat() {\n this.setState({\n currentFormats: tinymce.activeEditor.contentWindow.getSelection().focusNode.parentElement.classList[0] //We can always assume classList[0] because we only allow one format at a time\n })\n }\n\n componentDidMount() {\n //Default line numbers off for very large bills to prevent crashing on initial laod\n if (this.props.editorContent.length < 80000 && !this.props.versionAuthoring) {\n localStorage.setItem(\"showLineNumbers\", true);\n } else {\n this.setState({\n showLineNumbers: false\n }, () => {\n localStorage.setItem(\"showLineNumbers\", false);\n })\n }\n\n if (this.props.sessionId) {\n this.loadCommittees(this.props.sessionId);\n this.loadMembers(this.props.sessionId);\n } else {\n this.setState({\n committeeIsLoaded: true,\n memberIsLoaded: true\n })\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.sessionId !== this.props.sessionId) {\n this.loadCommittees(this.props.sessionId);\n this.loadMembers(this.props.sessionId);\n }\n\n //below is annoying and seems useless but is needed in order to get the add amendment wizard to auto-populate based on user's sponsor/member/cmte choices\n if (prevProps.billNumber !== this.props.billNumber || prevProps.selectedSponsor !== this.props.selectedSponsor || prevProps.selectedMember !== this.props.selectedMember || prevProps.selectedCommittee !== this.props.selectedCommittee) {\n this.setState({ selectedBillNumberIsLoaded: false, selectedSponsorIsLoaded: false, selectedMemberIsLoaded: false, selectedCommitteeIsLoaded: false, }, () => {\n this.setState({ selectedBillNumberIsLoaded: true, selectedSponsorIsLoaded: true, selectedMemberIsLoaded: true, selectedCommitteeIsLoaded: true })\n })\n }\n }\n\n render() {\n if (!this.state.memberIsLoaded || !this.state.committeeIsLoaded || !this.state.selectedBillNumberIsLoaded || !this.state.selectedSponsorIsLoaded || !this.state.selectedMemberIsLoaded || !this.state.selectedCommitteeIsLoaded) {\n return <div className=\"spinner center-spinner\"></div>;\n }\n\n const setup = (editor) => {\n editor.ui.registry.addToggleButton('bracketbutton', {\n text: \"[ ]\",\n tooltip: \"Insert Brackets\",\n onAction: function () {\n editor.insertContent('<span class=\"bracket\">[</span> ');\n let bookmark = editor.selection.getBookmark(2);\n editor.insertContent('<span class=\"bracket\">]</span>')\n editor.selection.moveToBookmark(bookmark);\n }\n });\n editor.ui.registry.addToggleButton('lBracketbutton', {\n text: \"[\",\n tooltip: \"Insert Left Bracket\",\n onAction: function () {\n editor.insertContent('<span class=\"bracket\">[</span>');\n }\n });\n editor.ui.registry.addToggleButton('rBracketbutton', {\n text: \"]\",\n tooltip: \"Insert Right Bracket\",\n onAction: function () {\n editor.insertContent('<span class=\"bracket\">]</span>');\n }\n });\n editor.ui.registry.addToggleButton('sectionButton', {\n text: \"§\",\n tooltip: \"Insert Section Symbol\",\n onAction: function () {\n editor.insertContent('§');\n }\n });\n editor.on(\"keydown\", (e) => {\n this.setFormat();\n });\n editor.on(\"click\", (e) => {\n this.setFormat();\n })\n }\n\n return (\n <React.Fragment key={this.props.reviewKey}>\n <div className='inner-grid eight-and-one'>\n <div />\n <div style={{ display: \"inline-flex\", marginBottom: \"20px\", marginTop: this.props.location === \"/amendment-management\" ? \"13px\" : \"8px\" }}>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip() }} className=\"button info\" style={{ margin: \"10px 10px 0 0\" }}>Info</a>\n <button type=\"button\" className=\"button primary\" onClick={() => this.toggleShowLineNumbers()}>{(this.state.showLineNumbers ? \"Hide\" : \"Show\") + \" Line Numbers\"}</button>\n {this.state.showTooltip &&\n <div className=\"info-box editor-tooltip\">\n <p>Hiding line numbers will improve the response time of the editor. You may turn them back on at any point during editing. It may take some time to turn on line numbers for exceptionally large bills.</p>\n </div>\n }\n </div>\n </div>\n <div style={{ width: \"100%\", height: \"40px\" }}>\n {this.state.currentFormats &&\n <span style={{ float: \"right\" }}>{\"Format: \" + this.state.currentFormats}</span>\n }\n </div>\n <Editor\n value={this.props.editorContent}\n init={{\n setup: setup,\n browser_spellcheck: true,\n height: this.props.height || 500,\n plugins: 'paste save lists preview searchreplace pagebreak code linenumbers table copyheadstyle rightmargin' + (this.props.allowAmendmentActions ? ' rejectedbutton agreedbutton createamendment' : ''),\n toolbar: 'undo redo | styleselect | fontsizeselect | bold italic strikethrough underline | alignleft aligncenter alignright | bracketButton lBracketbutton rBracketbutton | sectionButton | ' + (this.props.allowAmendmentActions && !this.props.overrideRemoveAgreeRejectButtons ? ' | rejectedbuttons agreedbutton' : '') + (this.props.allowAmendmentActions && !this.props.overrideRemoveCreateAmendmentButton ? ' | createamendment' : ''),\n contextmenu: this.props.allowAmendmentActions ? 'rejectedbuttonscontext agreedbuttoncontext' : '',\n skin: false,\n paste_as_text: this.props.pasteAsText || this.props.pasteAsText === undefined,\n members: this.state.members,\n committees: this.state.committees,\n valid_children: '+body[style]',\n content_css: false,\n content_style: 'table { border-collapse: collapse; border: 1px solid #FFFFFF; }' + 'td { padding: 12px 0px; }',\n userChamber: this.props.userChamber,\n billNumber: this.props.billNumber,\n sponsor: this.props.selectedSponsor ? this.props.selectedSponsor.value : '',\n member: this.props.selectedMember && this.state.members.find(m => m.text === this.props.selectedMember.value.ListDisplayName) ? this.state.members.find(m => m.text === this.props.selectedMember.value.ListDisplayName).value : '',\n committee: this.props.selectedCommittee && this.state.committees.find(c => c.text === this.props.selectedCommittee.value.Name) ? this.state.committees.find(c => c.text === this.props.selectedCommittee.value.Name).value : '',\n amendmentOrigin: this.props.selectedMember && this.state.members.find(m => m.text === this.props.selectedMember.value.ListDisplayName) ? this.props.selectedMember.value.ChamberCode : this.props.selectedCommittee && this.state.committees.find(c => c.text === this.props.selectedCommittee.value.Name) ? this.props.selectedCommittee.value.ChamberCode : this.props.amendmentOrigin ? this.props.amendmentOrigin : '',\n allowGovernorAmendmentSponsor: this.props.allowGovernorAmendmentSponsor,\n paste_word_valid_elements: 'p,table,tbody,td,tr,s,u,b,sup,sub',\n paste_convert_word_fake_lists: false, //doesn't convert indented <p> tags to <ul>,<ol> etc...\n paste_enable_default_filters: false, //doesn't add the TinyMCE classes\n paste_data_images: true,\n paste_preprocess: function (plugin, args) { //removes the Word \"curved quotes\"\n args.content = args.content.replace('“', '\"').replace('”', '\"').replace('\"', '\"').replace('\"', '\"');\n },\n table_default_attributes: {\n border: '0'\n },\n formats: {\n section: {\n block: 'p', attributes: { class: 'section' }\n },\n ldtitle: {\n block: 'p', attributes: { class: 'ldtitle' }\n },\n enactstatement: {\n block: 'p', attributes: { class: 'enactstm' }\n },\n enactclause: {\n block: 'p', attributes: { class: 'enactcls' }\n },\n billnumber: {\n block: 'p', attributes: { class: 'billno' }\n },\n catchline: {\n block: 'p', attributes: { class: 'catchln' }\n },\n rejected: {\n block: 'p', attributes: { class: 'rejected' }\n },\n i10: {\n block: 'p', attributes: { class: 'i10' }\n },\n i0: {\n block: 'p', attributes: { class: 'i0' }\n },\n i15: {\n block: 'p', attributes: { class: 'i15' }\n },\n i20: {\n block: 'p', attributes: { class: 'i20' }\n },\n customcenter: {\n block: 'p', attributes: { class: 'center' }\n },\n strikethrough: {\n inline: 's'\n },\n end: {\n block: 'p', attributes: { class: 'end' }\n },\n textind: {\n block: 'p', attributes: { class: 'textind' }\n },\n textbl: {\n block: 'p', attributes: { class: 'textbl' }\n },\n textbi: {\n block: 'p', attributes: { class: 'textbi' }\n },\n textasis: {\n block: 'p', attributes: { class: 'textasis' }\n },\n table: {\n block: 'p', attributes: { class: 'table' }\n },\n testc: {\n block: 'p', attributes: { class: 'testc' }\n },\n tablec: {\n block: 'p', attributes: { class: 'tablec' }\n },\n tblhdn: {\n block: 'p', attributes: { class: 'tblhdn' }\n },\n tbllft: {\n block: 'p', attributes: { class: 'tbllft' }\n },\n tblctr: {\n block: 'p', attributes: { class: 'tblctr' }\n },\n tblrt: {\n block: 'p', attributes: { class: 'tblrt' }\n },\n txtctr: {\n block: 'p', attributes: { class: 'txtctr' }\n },\n drafter: {\n block: 'p', attributes: { class: 'drafter' }\n },\n billblank: {\n block: 'p', attributes: { class: 'billblank' }\n },\n pro: {\n block: 'p', attributes: { class: 'pro' }\n },\n sumtext: {\n block: 'p', attributes: { class: 'sumtext' }\n },\n lddata: {\n block: 'p', attributes: { class: 'lddata' }\n },\n ld: {\n block: 'p', attributes: { class: 'ld' }\n },\n patctr: {\n block: 'p', attributes: { class: 'patctr' }\n },\n patalt: {\n block: 'p', attributes: { class: 'patalt' }\n },\n textrt: {\n block: 'p', attributes: { class: 'textrt' }\n },\n testhdrchar: {\n block: 'p', attributes: { class: 'testhdrchar' }\n },\n texthdr: {\n block: 'p', attributes: { class: 'texthdr' }\n },\n new: {\n block: 'p', classes: 'new'\n }\n },\n style_formats: [\n { title: 'Section', format: 'section' },\n { title: 'LD Title', format: 'ldtitle' },\n { title: 'Enact Statement', format: 'enactstatement' },\n { title: 'Enact Clause', format: 'enactclause' },\n { title: 'Bill Number', format: 'billnumber' },\n { title: 'Catchline', format: 'catchline' },\n { title: 'Rejected', format: 'rejected' },\n { title: 'i10', format: 'i10' },\n { title: 'i0', format: 'i0' },\n { title: 'i15', format: 'i15' },\n { title: 'i20', format: 'i20' },\n { title: 'Center', format: 'customcenter' },\n { title: \"End\", format: \"end\" },\n { title: \"Textind\", format: \"textind\" },\n { title: \"Textbl\", format: \"textbl\" },\n { title: \"Textbi\", format: \"textbi\" },\n { title: \"Textasis\", format: \"textasis\" },\n { title: \"Table\", format: \"table\" },\n { title: \"Testc\", format: \"testc\" },\n { title: \"Tablec\", format: \"tablec\" },\n { title: \"Tblhdn\", format: \"tblhdn\" },\n { title: \"Tbllft\", format: \"tbllft\" },\n { title: \"Tblctr\", format: \"tblctr\" },\n { title: \"Tblrt\", format: \"tblrt\" },\n { title: \"Txtctr\", format: \"txtctr\" },\n { title: \"Drafter\", format: \"drafter\" },\n { title: \"Billblank\", format: \"billblank\" },\n { title: \"Pro\", format: \"pro\" },\n { title: \"Sumtext\", format: \"sumtext\" },\n { title: \"Lddata\", format: \"lddata\" },\n { title: \"Ld\", format: \"ld\" },\n { title: \"Patctr\", format: \"patctr\" },\n { title: \"Patalt\", format: \"patalt\" },\n { title: \"Textrt\", format: \"textrt\" },\n { title: \"Testhdrchar\", format: \"testhdrchar\" },\n { title: \"Texthdr\", format: \"texthdr\" },\n { title: \"New\", format: \"new\" }\n ],\n }}\n onEditorChange={(e) => this.handleEditorChange(e)}\n />\n </React.Fragment>\n );\n }\n}\n\n\nexport default connect(\n (state) => {\n const { committee, members } = state;\n return {\n committee,\n members\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, memberActionCreators), dispatch)\n }\n }\n)(ReviewSection)","import jwtDecode from 'jwt-decode';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst idToken = 'LIS_ID_TOKEN';\nconst refreshToken = 'LIS_REFRESH_TOKEN';\nconst refreshTokenExpiration = 'LIS_REFRESH_TOKEN_EXPIRATION';\nconst claims = \"LIS_CLAIMS\";\nconst graphToken = 'GRAPH_ID_TOKEN';\n\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nlet abortController = new window.AbortController();\nlet signal = abortController ? abortController.signal : \"\";\n\nexport const cancelRequest = () => {\n if (abortController)\n abortController.abort();\n}\n\n//The only difference between publicRequest and partnerRequest is that partnerRequest checks to see if the token is valid and sends it with the fetch\nexport const publicRequest = (url, method, headers, body, params) => {\n let config = {\n method: method,\n }\n if (headers) {\n headers.WebAPIKey = process.env.REACT_APP_API_KEY;\n config.headers = headers;\n } else {\n config.headers = {\n WebAPIKey: process.env.REACT_APP_API_KEY\n }\n }\n if (body) {\n config.body = JSON.stringify(body)\n }\n if (signal && signal != \"\" && signal.aborted === true) {\n //Refresh the abortController because you can't reset the abort property of a signal\n abortController = new window.AbortController();\n signal = abortController ? abortController.signal : \"\";\n }\n if (signal && signal != \"\") {\n config.signal = signal;\n }\n return fetch(url + params, config)\n .then(response => {\n if (response.status === 204) {\n //Some endpoints do not return anything if there is no data to be returned. So NO_CONTENT must be specified as it is not always an error\n throw [NO_CONTENT, 'No Content'];\n } else if (response.status > 399) {\n //There was a request failure. Return the response. Do not try to convert it to a JSON object as there is no guarantee that it is formatted as a json\n return (response.text()\n .then(text => {\n console.log(text);\n return Promise.reject([REQUEST_FAILURE, text])\n })\n )\n }\n return response\n\n })\n .then(response =>\n //Our request is successful. Convert it to JSON\n response.json().then(data => ({ data, response }))\n )\n .then(({ data, response }) => {\n return [REQUEST_SUCCESS, data, response.headers]\n })\n .catch(err => err);\n}\n\nexport const partnerRequest = (url, method, headers, body, params, nonAbortable) => {\n //Check the token first to see if it is valid\n return checkToken()\n .then(() => {\n //Just in case the method is initiated with a blank string as the headers\n if (!headers) {\n headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n }\n headers.Authorization = \"Bearer \" + localStorage.getItem(idToken);\n headers.WebAPIKey = process.env.REACT_APP_API_KEY;\n let config = {\n method: method,\n headers: headers,\n }\n if (body) {\n if (body instanceof FormData) {\n config.body = body\n } else {\n config.body = JSON.stringify(body);\n }\n }\n if (signal && signal != \"\" && signal.aborted === true) {\n //Refresh the abortController because you can't reset the abort property of a signal\n abortController = new window.AbortController();\n signal = abortController ? abortController.signal : \"\";\n }\n if (signal && !nonAbortable) {\n config.signal = signal;\n }\n return fetch(url + params, config)\n })\n .then(response => {\n if (response.status === 204) {\n throw [NO_CONTENT, 'No Content'];\n } else if (response.status > 399) {\n return (response.text()\n .then(text => {\n return Promise.reject([REQUEST_FAILURE, text])\n })\n )\n }\n return response\n\n })\n .then(response =>\n response.json().then(data => ({ data, response }))\n )\n .then(({ data, response }) => {\n return [REQUEST_SUCCESS, data, response.headers]\n })\n .catch(err => err);\n\n}\n\nexport const checkToken = () => {\n let token = localStorage.getItem(idToken);\n\n if (token !== null && token !== 'undefined') {\n const decode = jwtDecode(token);\n const stringToken = JSON.stringify(decode);\n const parsedToken = JSON.parse(stringToken);\n //If true then then expiration hasn't passed yet. So return a promise so partnerRequest can keep on running\n if (parsedToken.exp < new Date().getTime() / 1000) {\n return getNewToken(function (result) {\n return result\n })\n } else {\n return new Promise(function (resolve, reject) { resolve(true) });\n }\n } else {\n return Promise.reject([REQUEST_FAILURE, 'Error: No Token']);\n }\n}\n\nconst getNewToken = (callback) => {\n let rtoken = localStorage.getItem(refreshToken);\n let config = {\n method: 'POST',\n headers: {\n \"authorization\": rtoken,\n \"content-type\": \"application/json; charset=utf-8\",\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n }\n }\n return fetch((API_URL || process.env.REACT_APP_AUTH_API_URL) + '/Authentication/api/RefreshAccessTokenAsync', config)\n .then(response => {\n if (response.status === 204) { return Promise.reject('Error: No Content') }\n else if (response.status === 401) {\n //The user's token is expired. Log them out\n localStorage.removeItem(idToken);\n localStorage.removeItem(refreshToken);\n localStorage.removeItem(refreshTokenExpiration);\n localStorage.removeItem(claims);\n localStorage.removeItem(graphToken);\n\n return Promise.reject(\"Error: Refresh Token Expired\");\n }\n else if (response.status > 399) { return Promise.reject([REQUEST_FAILURE, response.text()]) }\n else { return response }\n })\n .then(response =>\n response.json().then(user => ({ user, response }))\n ).then(({ user, response }) => {\n // If refresh was successful, set the tokens in local storage\n let roles = [];\n if (user.Claims && user.Claims.Roles) {\n roles = user.Claims.Roles;\n }\n localStorage.setItem(claims, JSON.stringify(roles));\n localStorage.setItem(idToken, user.AccessToken);\n localStorage.setItem(refreshToken, user.RefreshToken);\n //604800000 is 7 days in milliseconds\n localStorage.setItem(refreshTokenExpiration, new Date().getTime() + 604800000)\n callback(0);\n }).catch(err => callback([REQUEST_FAILURE, Promise.reject(err)]))\n}","const getHtml = (jsonObject) => {\n //Check that the param is an object before beginning\n if (typeof jsonObject !== 'object' || jsonObject === null) {\n console.error(\"jsonObject param is not an object\")\n return null;\n }\n return mapJson(jsonObject);\n}\n\n\nconst mapJson = (object) => {\n if (typeof object === \"string\") {\n return object;\n }\n\n let headerContent = document.createElement('div');\n headerContent.id = \"header-content\";\n\n for (const c of object[\"Content\"]) {\n if (c !== \"\") {\n if (c[\"Content\"] && c[\"Content\"].length > 1) {\n let content = document.createElement(c[\"TagName\"]);\n\n for (const nc of c[\"Content\"]) {\n //If the nested content has its own content then build out an element for it\n //Otherwise it's a string, so just append it to the parent content \n if (nc[\"Content\"]) {\n //We have nested content within the nested content\n if (nc[\"Content\"].length > 1) {\n let hierarchicalContent = document.createElement(nc[\"TagName\"]);\n for (const nnc of nc[\"Content\"]) {\n if (nnc[\"Content\"]) {\n let nestedNestedContent = document.createElement(nnc[\"TagName\"]);\n nestedNestedContent.appendChild(document.createTextNode(nnc[\"Content\"]));\n nestedNestedContent.style.cssText = (nnc[\"Attributes\"] && nnc[\"Attributes\"].Style) ? nnc[\"Attributes\"].Style : \"\";\n if (nnc[\"Attributes\"] && nnc[\"Attributes\"].Class) {\n nestedNestedContent.classList = nnc[\"Attributes\"].Class;\n }\n hierarchicalContent.appendChild(nestedNestedContent);\n content.appendChild(hierarchicalContent);\n } else {\n hierarchicalContent.appendChild(document.createTextNode(nnc));\n content.appendChild(hierarchicalContent)\n }\n }\n } else {\n let nestedContent = document.createElement(nc[\"TagName\"]);\n nestedContent.appendChild(document.createTextNode(nc[\"Content\"]));\n nestedContent.style.cssText = (nc[\"Attributes\"] && nc[\"Attributes\"].Style) ? nc[\"Attributes\"].Style : \"\";\n if (nc[\"Attributes\"] && nc[\"Attributes\"].Class) {\n nestedContent.classList = nc[\"Attributes\"].Class;\n }\n content.appendChild(nestedContent);\n }\n } else {\n content.appendChild(document.createTextNode(nc));\n }\n }\n\n content.style.cssText = c[\"Attributes\"].Style ? c[\"Attributes\"].Style : \"\";\n if (c[\"Attributes\"].Class) {\n content.classList = c[\"Attributes\"].Class;\n }\n headerContent.appendChild(content)\n } else {\n let content = document.createElement(c[\"TagName\"]);\n content.appendChild(document.createTextNode(c[\"Content\"]));\n content.style.cssText = c[\"Attributes\"].Style ? c[\"Attributes\"].Style : \"\";\n if (c[\"Attributes\"].Class) {\n content.classList = c[\"Attributes\"].Class;\n }\n headerContent.appendChild(content)\n }\n }\n }\n\n return headerContent.outerHTML.toString()\n}\n\nexport default getHtml;","import React from 'react';\nimport renderHTML from 'react-render-html';\n\nclass AmendmentSection extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n shown: [],\n showAll: false,\n showInactiveAmendments: false\n }\n\n this.getAmendmentDescription = this.getAmendmentDescription.bind(this);\n this.showAmendment = this.showAmendment.bind(this);\n this.showAllAmendments = this.showAllAmendments.bind(this);\n this.toggleInactiveAmendments = this.toggleInactiveAmendments.bind(this);\n }\n\n getAmendmentDescription(amendment) {\n let descriptionAndDisposition = amendment.Description;\n\n if (!amendment.DocumentCode || amendment.DocumentCode === \"\") {\n return descriptionAndDisposition;\n }\n\n if (amendment.TextDispositionID === 12) {\n return descriptionAndDisposition + \" Engrossed\"\n }\n\n if (amendment.TextDisposition === \"Hold\") {\n return descriptionAndDisposition;\n } else if (amendment.TextDisposition !== \"Posted\") {\n descriptionAndDisposition = `${amendment.Description} ${amendment.TextDisposition || ''}`;\n }\n\n if (amendment.IsReprint && !descriptionAndDisposition.includes(\"(Reprint)\")) {\n descriptionAndDisposition = descriptionAndDisposition + \" (Reprint)\";\n }\n\n if (amendment.LDNumber) {\n descriptionAndDisposition = descriptionAndDisposition + \" - \" + amendment.LDNumber;\n }\n\n return descriptionAndDisposition;\n }\n\n showAmendment(e, index) {\n if (e) {\n e.stopPropagation();\n }\n let shown = [...this.state.shown];\n shown[index] = !shown[index];\n this.setState({\n shown: shown\n });\n }\n\n showAllAmendments(e) {\n if (e) {\n e.stopPropagation();\n }\n const opposite = !this.state.showAll;\n let shown = new Array(this.props.amendments.length).fill(opposite);\n this.setState({\n showAll: opposite,\n shown: shown\n });\n }\n\n toggleInactiveAmendments() {\n this.setState(state => ({\n showInactiveAmendments: !state.showInactiveAmendments\n }));\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.amendments !== prevProps.amendments) {\n this.setState({\n shown: [],\n showAll: false,\n showInactiveAmendments: false\n });\n }\n }\n\n render() {\n const { shown, showAll, showInactiveAmendments } = this.state;\n let amendments = [...this.props.amendments];\n if (!showInactiveAmendments) {\n amendments = amendments.filter(amendment => amendment.IsActive);\n }\n return (\n <div style={{ backgroundColor: 'white', padding: \"10px\" }}>\n <div className=\"flex-row\">\n <div className=\"flex-row flex-vertical-center\">\n {this.props.amendments.find(amendment => !amendment.IsActive) &&\n <React.Fragment>\n <input style={{ margin: '0px 5px' }} type=\"checkbox\" onChange={this.toggleInactiveAmendments} checked={showInactiveAmendments} />\n <label>Show Inactive Amendments</label>\n </React.Fragment>\n }\n </div>\n <div>\n {this.props.amendments.length > 0 &&\n <button onClick={this.showAllAmendments} className=\"button-link\" type=\"button\">{showAll ? \"Collapse All +/-\" : \"Expand All +/-\"}</button>\n }\n </div>\n </div>\n {amendments.map((amendment, index) =>\n <div key={index}>\n <div>\n <button onClick={e => this.showAmendment(e, index)} className={`data-url ${shown[index] ? \"arrow-up\" : \"arrow-down\"}`}></button>\n <label className=\"small-text\">{this.getAmendmentDescription(amendment)}</label>\n {!amendment.IsActive && <label>{\" (INACTIVE)\"}</label>}\n </div>\n {shown[index] &&\n <div className=\"dlas-forms amendments-review\">\n {amendment.DraftText ? renderHTML(amendment.DraftText) : ''}\n </div>\n }\n {index !== amendments.length - 1 && <hr />}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default AmendmentSection;\n","import React from 'react';\nimport { Prompt } from 'react-router';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport moment from 'moment-timezone';\nimport ReactToPrint from 'react-to-print';\nimport Popout from '../../../lis-shared/lis-layout/components/lis-popout-component';\nimport DatePicker from 'react-datepicker';\nimport getHtml from '../../../services/json-to-html';\n\nimport BillGridSection from './lis-bill-grid';\nimport SelectorSection from './lis-selectors';\nimport AmendmentSection from './lis-amendments';\nimport ReviewSection from './lis-review';\nimport PreviewSection from './lis-bill-preview';\nimport TextList from './lis-text-list';\nimport { printActionCreators } from '../../../stores/lis-print-store';\n\nclass VersionManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n billFieldsetIsActive: true,\n amendmentFieldsetIsActive: false,\n reviewFieldsetIsActive: false,\n sessionOptions: [],\n legOptions: [],\n billVersionRef: [],\n selectedSession: '',\n selectedLegType: '',\n originalBillText: [],\n selectedBillText: '',\n selectedBillTextIndex: -1,\n isLoaded: true,\n billList: [],\n selectedBill: '',\n billText: '',\n amendments: [],\n isPreviewVisible: false,\n processingFile: false,\n showPortal: false,\n billDataIsLoading: null,\n showCompletedItems: false,\n versionDate: moment(),\n legDateOptions: [],\n selectedLegDate: '',\n selectedLegNum: '',\n showHeaders: true,\n headers: null,\n reviewKey: 1,\n previewContent: '',\n previewContentError: '',\n editorChanged: false,\n savedReviewContent: '',\n gettingIncompletePdf: false,\n showIncompletePdf: false,\n checkedBills: [],\n enrolledPrintQueue: [],\n useCurrentPublishDates: true,\n reviewContent: '',\n onReconvene: false,\n isDirty: false,\n showTextConfirmation: false,\n showBillConfirmation: false,\n changeCount: 0,\n storedTextIndex: 0,\n storedBill: \"\",\n storedBillIndex: 0,\n sessionBillsList: [],\n wasEmpty: false,\n replaced: false,\n checkAll: false,\n lastCheckedBills: []\n };\n\n //Ref used to scroll down to amendment section\n this.amendmentRef = React.createRef();\n this.reviewRef = React.createRef();\n\n this.togglePreview = this.togglePreview.bind(this);\n this.togglePortal = this.togglePortal.bind(this);\n this.toggleFieldsetCollapse = this.toggleFieldsetCollapse.bind(this);\n this.handleSelectorChange = this.handleSelectorChange.bind(this);\n this.checkHandleSelectorChange = this.checkHandleSelectorChange.bind(this);\n this.selectBill = this.selectBill.bind(this);\n this.selectBillIndex = this.selectBillIndex.bind(this);\n this.checkBill = this.checkBill.bind(this);\n this.batchPublish = this.batchPublish.bind(this);\n this.batchComplete = this.batchComplete.bind(this);\n this.togglePublishDatePreference = this.togglePublishDatePreference.bind(this);\n this.handlePublishDateChange = this.handlePublishDateChange.bind(this);\n this.toggleCompleteItems = this.toggleCompleteItems.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveCompletedItem = this.handleSaveCompletedItem.bind(this);\n this.handleVersionDateChange = this.handleVersionDateChange.bind(this);\n this.toggleHeaders = this.toggleHeaders.bind(this);\n this.resetWarning = this.resetWarning.bind(this);\n this.getJsonHeadersRequestString = this.getJsonHeadersRequestString.bind(this);\n this.getPreviewRequest = this.getPreviewRequest.bind(this);\n this.previewPdf = this.previewPdf.bind(this);\n this.toggleReprint = this.toggleReprint.bind(this);\n this.filterReprints = this.filterReprints.bind(this);\n this.setLegDateOptions = this.setLegDateOptions.bind(this);\n this.closeConfirmation = this.closeConfirmation.bind(this);\n this.updateBillListByLegislationID = this.updateBillListByLegislationID.bind(this);\n this.setWasEmpty = this.setWasEmpty.bind(this);\n this.setReplaced = this.setReplaced.bind(this);\n this.toggleCheckAll = this.toggleCheckAll.bind(this);\n\n this.pdfRef = React.createRef();\n }\n\n toggleFieldsetCollapse(isActive) {\n this.setState(state => ({\n [isActive]: !state[isActive]\n }));\n }\n\n filterReprints() {\n this.setState({ reprintsFiltered: !this.state.reprintsFiltered }, () => {\n this.setLegDateOptions(this.state.billList);\n })\n }\n\n toggleReprint() {\n let billTexts = [...this.state.originalBillText];\n billTexts[this.state.selectedBillTextIndex].IsReprint = !billTexts[this.state.selectedBillTextIndex].IsReprint;\n this.setState({ billTexts });\n }\n\n setWasEmpty(val, callback) {\n this.setState({ wasEmpty: val }, () => {\n if (callback) {\n callback();\n }\n })\n }\n\n setReplaced(val, callback) {\n this.setState({ replaced: val }, () => {\n if (callback) {\n callback();\n }\n })\n }\n\n getPreviewRequest() {\n let previewRequest = { ...this.state.originalBillText[this.state.selectedBillTextIndex] };\n\n let newDraftText;\n let doc = document.createElement('div');\n //Use what's in the editor for completed items, otherwise use what's been saved\n doc.insertAdjacentHTML(\"afterbegin\", this.state.showCompletedItems ? this.state.reviewContent : previewRequest.DraftText);\n if (!this.state.showCompletedItems) {\n //Remove ldtitle from document\n let docParagraphs = doc.getElementsByTagName('p');\n\n for (let j = 0; j < docParagraphs.length; j++) {\n //Do not remove the patronLine from the original text before requesting preview for incomplete items\n if (['section', 'enactstm'].includes(docParagraphs[j].classList[0])) {\n break; //reached the actal body of the text, don't remove any more\n } else if (['ldtitle', 'ld'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--\n }\n }\n } else {\n //remove header-content from document\n let docDivs = doc.getElementsByTagName('div');\n for (let j = 0; j < docDivs.length; j++) {\n //Do not remove the patronLine from the original text before requesting preview for incomplete items\n if (this.state.showCompletedItems) {\n if (docDivs[j].id === 'header-content') {\n doc.removeChild(docDivs[j]);\n }\n }\n }\n }\n\n newDraftText = doc.innerHTML;\n\n previewRequest.DraftText = newDraftText;\n if (this.state.showCompletedItems) {\n //Try to find the draft title in the text and set it\n //For incomplete items, the text has to have already been saved before previewing, which means the DraftTitle attribute will already be set appropriately\n //but for completed items, they preview without saving, so the DraftTitle needs to be updated in the request we send to the API in order for the title in the headers (programmatically added) to be correct\n let searchForLDTitleContainer = document.createElement('div');\n searchForLDTitleContainer.innerHTML = this.state.reviewContent;\n //The first element in the content with this class is the draft title\n let draftLDTitle = searchForLDTitleContainer.querySelector('.ldtitle');\n if (draftLDTitle && draftLDTitle.innerHTML !== '') {\n previewRequest.DraftTitle = draftLDTitle.innerHTML;\n previewRequest.EditTitle = draftLDTitle.innerHTML;\n }\n }\n previewRequest.SessionCode = this.state.selectedSession.SessionCode;\n previewRequest.Chamber = previewRequest.LegislationChamberCode === \"H\" ? \"House\" : \"Senate\";\n previewRequest.VersionChamber = previewRequest.ChamberCode === \"H\" ? \"House\" : \"Senate\";\n previewRequest.LegislationKey = previewRequest.LegislationNumber.substr(2, previewRequest.LegislationNumber.length);\n previewRequest.OnReconvene = this.state.onReconvene;\n previewRequest.LegislationClass = this.state.selectedBill.LegislationClass;\n previewRequest.LegislationClassID = this.state.selectedBill.LegislationClassID;\n\n //Pull the ReferredCommittee out of the doc in case the text version hasn't been saved before and doesn't already have a ReferredCommittee\n //Only when authoring engrossed or renengrossed\n if (this.state.selectedLegType.LegislationVersionID === 6 || this.state.selectedLegType.LegislationVersionID === 2) {\n let headers = document.createElement('div');\n headers.insertAdjacentHTML(\"afterbegin\", this.state.headers);\n\n if (headers.getElementsByClassName(\"CommitteeReferral\")[0]) {\n previewRequest.ReferredCommittee = headers.getElementsByClassName(\"CommitteeReferral\")[0].innerText.split(\"Committee on the \")[1]\n ? headers.getElementsByClassName(\"CommitteeReferral\")[0].innerText.split(\"Committee on the \")[1].trim()\n : headers.getElementsByClassName(\"CommitteeReferral\")[0].innerText.split(\"Committee for \")[1]\n ? headers.getElementsByClassName(\"CommitteeReferral\")[0].innerText.split(\"Committee for \")[1].trim()\n : headers.getElementsByClassName(\"CommitteeReferral\")[0].innerText.split(\"Committee on \")[1].trim();\n }\n }\n\n return previewRequest;\n }\n\n previewPdf() {\n if (!this.state.showCompletedItems) {\n this.setState({ showIncompletePdf: true, gettingIncompletePdf: true })\n } else {\n this.setState({ showIncompletePdf: false, gettingCompletedItemPreview: true })\n }\n const previewRequest = this.getPreviewRequest();\n\n this.props.actions.previewPdfFile(previewRequest)\n .then(() => {\n if (this.state.showCompletedItems) {\n this.setState({\n previewContent: 'true', //just makes it so the preview page will indeed show\n isPreviewVisible: !this.state.isPreviewVisible,\n gettingCompletedItemPreview: false\n }, () => {\n document.querySelector(\"iframe\").src = this.props.bills.sasUrl;\n })\n } else {\n if (this.pdfRef && this.pdfRef.current) {\n let pdfRef = this.pdfRef.current;\n pdfRef.setAttribute('src', this.props.bills.sasUrl);\n pdfRef.onload = () => {\n this.setState({\n gettingIncompletePdf: false\n });\n };\n }\n }\n }).catch((e) => {\n console.log(e);\n this.setState({ gettingCompletedItemPreview: false, gettingIncompletePdf: false })\n })\n }\n\n togglePreview() {\n if (!this.state.isPreviewVisible) {\n if (this.state.showCompletedItems) {\n this.previewPdf();\n } else {\n const previewRequest = this.getPreviewRequest();\n this.props.actions.getHtmlPreview(previewRequest)\n .then(() => {\n if (this.props.bills.htmlPreview && this.props.bills.htmlPreview.body && !this.props.bills.htmlPreview.body.locked) {\n //checking 'locked' prevents this if-block from returning true because of an old htmlPreview - \n //for example, hitting preview on a bill that results in a valid htmlPreview obj, then switching bills to one that does not result in a valid htmlPreview would break here \n //because 'this.props.bills.htmlPreview.body' is still true, but getReader is invalid on it since it is locked\n this.props.bills.htmlPreview.body.getReader().read().then(({ value }) => {\n this.setState({\n isPreviewVisible: !this.state.isPreviewVisible,\n showIncompletePdf: false,\n previewContent: Buffer.from(value.buffer).toString(),\n previewContentError: ''\n }, () => {\n if (document.getElementsByClassName(\"billpatron\")[0] && this.state.selectedLegType.Name === \"Engrossed\" && this.state.patronageInfo) {\n document.getElementsByClassName(\"billpatron\")[0].textContent = this.state.patronageInfo\n }\n })\n })\n } else if (this.props.bills.htmlPreviewError) {\n this.setState({\n isPreviewVisible: !this.state.isPreviewVisible,\n showIncompletePdf: false,\n previewContent: '',\n previewContentError: this.props.bills.htmlPreviewError\n })\n }\n })\n\n if (this.state.selectedLegType.Name === \"Enrolled\") {\n this.props.actions.previewPdfFile(previewRequest)\n .then(() => {\n //don't do anything; this just puts a non-public/SasURL-driven blob in blob storage that can later be used in print management\n });\n }\n }\n } else {\n this.setState({\n isPreviewVisible: !this.state.isPreviewVisible,\n showIncompletePdf: false,\n previewContent: \"\"\n })\n }\n }\n\n togglePortal(state, e) {\n if (e) {\n e.stopPropagation();\n }\n this.setState({\n showPortal: !state\n });\n }\n\n handleSave(publish, isComplete) {\n this.setState({ isSaving: true, enrolledPrintQueue: [], checkedBills: [], useCurrentPublishDates: true, customPublishDate: null });\n\n //if publishing any of the below versions, skip all the processing and just use the batch publish endpoint (US10097)\n if (publish && [\"Engrossed\", \"Reengrossed\", \"Enrolled\", \"Reenrolled\", \"Chaptered\"].includes(this.state.selectedLegType.Name)) {\n this.props.actions.batchPublish({ \"PublishDate\": null, \"legislationTextIDs\": [this.state.originalBillText[this.state.selectedBillTextIndex].LegislationTextID], \"legislationIDs\": [this.state.selectedBill.LegislationID] })\n .then(() => {\n this.props.actions.batchGenBillFile(\"?sessionID=\" + this.state.selectedSession.SessionID, [this.state.originalBillText[this.state.selectedBillTextIndex].LegislationTextID])\n .then(() => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }])\n\n this.setState({\n isPreviewVisible: false,\n selectedBill: '',\n reviewContent: '',\n savedReviewContent: '',\n editorChanged: false,\n selectedBillTextIndex: -1,\n reviewFieldsetIsActive: false,\n amendmentFieldsetIsActive: false,\n billFieldsetIsActive: true,\n reviewKey: 1,\n isSaving: false,\n isDirty: false\n });\n this.handleSelectorChange('selectedSession', this.state.selectedSession);\n }).catch((err) => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"File Generation Failed\", type: \"failure\" }]);\n this.setState({ isSaving: false });\n })\n }).catch((err) => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Publish Failed\", type: \"failure\" }]);\n this.setState({ isSaving: false });\n })\n } else {\n let originalBillText = [...this.state.originalBillText];\n let selectedBillTextIndex = this.state.selectedBillTextIndex;\n if (!publish && [\"Gov Recommendation\", \"Veto Explanation\"].includes(this.state.selectedLegType.Name) && selectedBillTextIndex === -1) {\n //they manually added this bill, so we need to set a new object in the event that there wasn't a bill text object already\n originalBillText.push({\n LegislationVersionID: this.state.selectedLegType.LegislationVersionID,\n LegislationID: this.state.selectedBill.LegislationID,\n DraftTitle: \"\",\n EditTitle: \"\",\n IsPublic: false,\n isDirty: false\n });\n selectedBillTextIndex = originalBillText.length - 1;\n }\n // if the selected bill text is published or is not the correct version then a new version needs to be created.\n if (originalBillText[selectedBillTextIndex].IsPublic || this.state.selectedLegType.LegislationVersionID !== originalBillText[selectedBillTextIndex].LegislationVersionID) {\n let newBillText = { ...originalBillText[selectedBillTextIndex] };\n //Delete ID and mod date since this is a new text entry onto the bill\n delete newBillText.LegislationTextID;\n delete newBillText.LegislationTextActionID;\n delete newBillText.ModificationDate;\n delete newBillText.Description;\n delete newBillText.TextDisposition;\n delete newBillText.TextDispositionID;\n delete newBillText.IsComplete;\n delete newBillText.HTMLFile;\n delete newBillText.JSONFile;\n delete newBillText.PDFFile;\n delete newBillText.IsReprint;\n //Delete the document code so that the DB can construct it if it is not preengrossing; if it is preengrossing, we need to set it ourselves since we are the ones with knowledge of the base document\n if (this.state.selectedLegType.Name !== \"Engrossed\" || this.state.selectedBill.CandidateDate) {\n delete newBillText.DocumentCode;\n } else {\n if (newBillText.LegislationVersion === \"Introduced\") {\n newBillText.DocumentCode = this.state.selectedBill.LegislationNumber + \"E\";\n } else if (newBillText.LegislationVersion === \"Substitute\") {\n const subNumber = newBillText.DocumentCode.replaceAll(/\\D{2,3}\\d+/g, \"\"); //e.g. HB8660H1 -> H1\n newBillText.DocumentCode = this.state.selectedBill.LegislationNumber + \"E\" + subNumber;\n } else {\n //we were promised multiple times it would only ever be an introduced or substitute, but I'm going to delete the doc code if it isn't for whatever reason, and hope the DB sets it correctly\n delete newBillText.DocumentCode;\n }\n }\n newBillText.LegislationVersionID = this.state.selectedLegType.LegislationVersionID;\n delete newBillText.LegislationVersion;\n //delete the chambercode and set sponsor to Governor if Governor's Recommendation or Governor's Veto\n if ([\"Gov Recommendation\", \"Veto Explanation\"].includes(this.state.selectedLegType.Name)) {\n delete newBillText.ChamberCode;\n newBillText.Sponsor = \"Governor\";\n newBillText.SponsorTypeID = 1;\n } else if (this.state.selectedLegType.Name === \"Engrossed\") {\n delete newBillText.Sponsor;\n delete newBillText.SponsorTypeID;\n delete newBillText.CommitteeID;\n delete newBillText.Patrons;\n }\n\n originalBillText.push(newBillText);\n selectedBillTextIndex = originalBillText.length - 1;\n }\n // Set the session code. This must be done for file generation to properly work\n originalBillText[selectedBillTextIndex].SessionCode = this.state.selectedBill.SessionCode;\n // Set the chamber code to the legislation's chamber code if it is an enrolled/reenrolled version, and remove committee info\n if ([\"Enrolled\", \"Reenrolled\"].includes(this.state.selectedLegType.Name)) {\n originalBillText[selectedBillTextIndex].ChamberCode = this.state.selectedBill.ChamberCode;\n delete originalBillText[selectedBillTextIndex].CommitteeID;\n delete originalBillText[selectedBillTextIndex].CommitteeName;\n delete originalBillText[selectedBillTextIndex].CommitteeNumber;\n }\n //Try to find the draft title in the text and set it\n let searchForLDTitleContainer = document.createElement('div');\n searchForLDTitleContainer.innerHTML = this.state.reviewContent;\n //The first element in the content with this class is the draft title\n let draftLDTitle = searchForLDTitleContainer.querySelector('.ldtitle');\n if (draftLDTitle && draftLDTitle.innerHTML !== '') {\n originalBillText[selectedBillTextIndex].DraftTitle = draftLDTitle.innerHTML;\n originalBillText[selectedBillTextIndex].EditTitle = draftLDTitle.innerHTML;\n }\n\n //add LegislationClassID/LegislationClass to the LegislationText obj\n originalBillText[selectedBillTextIndex].LegislationClass = this.state.selectedBill.LegislationClass\n originalBillText[selectedBillTextIndex].LegislationClassID = this.state.selectedBill.LegislationClassID\n\n if (isComplete) { originalBillText[selectedBillTextIndex].IsComplete = true }\n\n originalBillText[selectedBillTextIndex].VersionDate = this.state.versionDate;\n originalBillText[selectedBillTextIndex].DraftText = this.state.reviewContent;\n originalBillText[selectedBillTextIndex].IsActive = true;\n originalBillText[selectedBillTextIndex].IsPublic = publish;\n\n //Remove ldtitle from document if the header is present in the header and the header also contains the ldtitle\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", originalBillText[selectedBillTextIndex].DraftText);\n\n //Remove any tags TinyMCE may have added when pasting from Word\n doc.childNodes.forEach(node => {\n if (node.nodeName !== \"#text\") {\n node.removeAttribute('data-mce-fragment');\n if (node.childNodes.length > 0) {\n node.childNodes.forEach(childNode => {\n if (childNode.nodeName !== \"#text\") {\n childNode.removeAttribute('data-mce-fragment');\n }\n })\n }\n }\n });\n\n let header = doc.getElementsByTagName('div');\n let newDraftText;\n\n if (header[0]) {\n //Store the header somewhere while we find and iterate over paragraphs in the rest of the doc\n let headerContainer = header[0].innerHTML;\n let headerParagraphs = header[0].getElementsByTagName('p');\n\n for (let i = 0; i < headerParagraphs.length; i++) {\n if (['ldtitle', 'ld', 'patronLine', 'patctr'].includes(headerParagraphs[i].classList[0])) {\n //Temporarily remove header \n header[0].innerHTML = \"\";\n\n //We found the ldtitle or patronage in the header, so iterate over the paragraphs to find any duplicate ldtitles or patronages and eliminate them\n let docParagraphs = doc.getElementsByTagName('p');\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (['section', 'enactstm'].includes(docParagraphs[j].classList[0])) {\n break; //reached the actal body of the text, don't remove any more\n } else if (['ldtitle', 'ld', 'patronLine', 'patctr', 'center'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--\n }\n }\n }\n }\n //Reattach the header\n header[0].innerHTML = headerContainer;\n\n newDraftText = doc.innerHTML\n }\n\n if (newDraftText != undefined) {\n originalBillText[selectedBillTextIndex].DraftText = newDraftText\n }\n\n if (this.state.onReconvene) {\n originalBillText[selectedBillTextIndex].OnReconvene = true;\n }\n\n this.props.actions.saveBillText({ TextsList: [originalBillText[selectedBillTextIndex]] })\n .then(() => {\n let billTextParams = \"?legislationID=\" + this.state.selectedBill.LegislationID;\n this.props.actions.getBillText(billTextParams, true)\n .then(() => {\n const newbillTextList = [...this.props.bills.billText];\n const priorBillText = originalBillText[selectedBillTextIndex];\n // Need to figure out what the index of the bill text we saved was. It isn't always the same one that was sent.\n if (priorBillText && priorBillText.LegislationTextID) {\n selectedBillTextIndex = newbillTextList.findIndex(t => t.LegislationTextID === priorBillText.LegislationTextID)\n } else {\n // Hopefully this finds it, but since the API might change the draft text around the second findIndex function is used.\n selectedBillTextIndex = newbillTextList.findIndex(t => t.DraftText === priorBillText.DraftText && t.LegislationVersionID === priorBillText.LegislationVersionID);\n selectedBillTextIndex = selectedBillTextIndex !== -1 ? selectedBillTextIndex : newbillTextList.findIndex(t => t.LegislationVersionID === priorBillText.LegislationVersionID)\n }\n if (publish) {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }])\n //Bill's status has changed. So move it out of the grid and of the review pane\n this.setState({\n isSaving: false,\n isPreviewVisible: false,\n selectedBill: '',\n reviewContent: '',\n savedReviewContent: '',\n editorChanged: false,\n selectedBillTextIndex: -1,\n reviewFieldsetIsActive: false,\n amendmentFieldsetIsActive: false,\n billFieldsetIsActive: true,\n reviewKey: 1,\n isDirty: false\n });\n this.handleSelectorChange('selectedSession', this.state.selectedSession);\n //Create the pdf version of the bill if the bill is published\n const legFileGenParams = \"?legislationID=\" + newbillTextList[selectedBillTextIndex].LegislationID\n + \"&legislationTextID=\" + newbillTextList[selectedBillTextIndex].LegislationTextID\n + \"&legislationVersionID=\" + newbillTextList[selectedBillTextIndex].LegislationVersionID\n + \"&sessionID=\" + this.state.selectedSession.SessionID;\n this.props.actions.genBillFile(legFileGenParams)\n } else {\n // Refresh the bill info in the billList state (billGridSection)\n if (newbillTextList[selectedBillTextIndex]) {\n this.updateBillListByLegislationID(newbillTextList[selectedBillTextIndex].LegislationID);\n }\n // Get the text again to get the mod dates\n this.setState(prevState => ({\n originalBillText: newbillTextList,\n selectedBillTextIndex: selectedBillTextIndex,\n savedReviewContent: prevState.reviewContent,\n editorChanged: true //have to do this to mimic the automatic editing the editor does when it is first initialized (see handleEditorChange method comments for more info)\n }), () => {\n originalBillText = [...this.state.originalBillText];\n selectedBillTextIndex = this.state.selectedBillTextIndex;\n\n if (originalBillText[selectedBillTextIndex]) {\n let newDraftText, jsonPromise;\n\n //update headers; e.g. if chaptered, chapter number may have changed\n if (this.state.selectedLegType.Name === \"Engrossed\"\n || this.state.selectedLegType.Name === \"Reengrossed\"\n || this.state.selectedLegType.Name === \"Chaptered\"\n || this.state.selectedLegType.Name === \"Enrolled\"\n || this.state.selectedLegType.Name === \"Reenrolled\") {\n const billText = originalBillText[selectedBillTextIndex];\n const bill = this.state.selectedBill;\n const jsonHeadersRequestString = this.getJsonHeadersRequestString(billText.LegislationTextID, billText.DocumentCode);\n\n jsonPromise = this.props.actions.getJsonHeaders(jsonHeadersRequestString)\n .then(() => {\n if (this.props.bills.jsonHeaders) {\n let headers = getHtml(this.props.bills.jsonHeaders);\n\n //Add the PassageDates to the draft text if this is a resolution and in the enrolled queue\n if ((this.state.selectedLegType.Name === \"Chaptered\" || this.state.selectedLegType.Name === \"Enrolled\") && (bill.LegislationTypeCode === \"J\" || bill.LegislationTypeCode === \"R\")) {\n headers = this.applyPassageDates(headers, billText, bill.LegislationTypeCode, bill.HousePassageDate, bill.SenatePassageDate);\n }\n\n let reviewContent = headers + billText.DraftText;\n\n //Remove ldtitle from document if the header is present and the header also contains the ldtitle\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", reviewContent);\n let header = doc.getElementsByTagName('div');\n\n if (header[0] != undefined) {\n //Store the header somewhere while we find and iterate over paragraphs in the rest of the doc\n let headerContainer = header[0].innerHTML;\n let headerParagraphs = header[0].getElementsByTagName('p');\n\n for (let i = 0; i < headerParagraphs.length; i++) {\n if (['ldtitle', 'ld', 'patronLine', 'patctr'].includes(headerParagraphs[i].classList[0])) {\n //Temporarily remove header \n header[0].innerHTML = \"\";\n\n //We found the ldtitle or patronage in the header, so iterate over the paragraphs to find any duplicate ldtitles or patronages and eliminate them\n let docParagraphs = doc.getElementsByTagName('p');\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (billText.LegislationVersion === \"Substitute\" && ['pro', 'center', 'patronLine', 'patctr', 'textbl', 'ldtitle', 'ld'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--;\n } else if (billText.LegislationVersion === \"Substitute\") {\n continue;\n }\n\n if (docParagraphs[j] && ['section', 'enactstm'].includes(docParagraphs[j].classList[0])) {\n break; //reached the actal body of the text, don't remove any more\n } else if (docParagraphs[j] && ['ldtitle', 'ld', 'patronLine', 'patctr', 'center'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--\n }\n }\n } else if (this.state.selectedLegType.Name === \"Engrossed\" && doc.getElementsByClassName(\"billpatron\")[0]) {\n //Not needed on save, but part of copy-paste; If working on an engrossed version, store the headers' patronage info which is needed for the preview (the object returned in the GetLegislationTextById call is not always correct)\n //patronageInfo = doc.getElementsByClassName(\"billpatron\")[0].textContent\n }\n }\n\n if (this.state.selectedLegType.Name === \"Reenrolled\"\n && this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\")\n && moment(this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\").ActualDate).isSameOrBefore(moment(billText.VersionDate) ?? moment(), \"day\")) {\n //Set the header to reconvened session and reattach the header \n let headerDoc = document.createElement('div');\n headerDoc.insertAdjacentHTML(\"afterbegin\", headerContainer);\n let paragraphs = headerDoc.getElementsByTagName('p');\n paragraphs[0].innerHTML = this.state.selectedSession.SessionYear + \" RECONVENED SESSION\";\n\n header[0].appendChild(headerDoc);\n\n this.setState({\n onReconvene: true\n })\n } else {\n //Reattach the header\n header[0].innerHTML = headerContainer;\n this.setState({\n onReconvene: false\n })\n }\n\n newDraftText = doc.innerHTML\n }\n\n if (newDraftText != undefined) {\n this.setState({\n reviewContent: newDraftText\n })\n }\n }\n }).catch(e => {\n console.log(e)\n this.setState({ reviewContent: `<p class=\"message-error\">${typeof e === 'object' && !Array.isArray ? JSON.parse(e).Name || \"Unknown Error\" : e}</p>` });\n })\n } else {\n //Remove ldtitle from document if the header is present and the header also contains the ldtitle\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", originalBillText[selectedBillTextIndex].DraftText);\n let header = doc.getElementsByTagName('div');\n\n if (header[0]) {\n //Store the header somewhere while we find and iterate over paragraphs in the rest of the doc\n let headerContainer = header[0].innerHTML;\n let headerParagraphs = header[0].getElementsByTagName('p');\n\n for (let i = 0; i < headerParagraphs.length; i++) {\n if (['ldtitle', 'ld', 'patronLine', 'patctr'].includes(headerParagraphs[i].classList[0])) {\n //Temporarily remove header \n header[0].innerHTML = \"\";\n\n //We found the ldtitle or patronage in the header, so iterate over the paragraphs to find any duplicate ldtitles or patronages and eliminate them\n let docParagraphs = doc.getElementsByTagName('p');\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (['section', 'enactstm'].includes(docParagraphs[j].classList[0])) {\n break; //reached the actal body of the text, don't remove any more\n } else if (['ldtitle', 'ld', 'patronLine', 'patctr', 'center'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--\n }\n }\n }\n }\n //Reattach the header\n header[0].innerHTML = headerContainer;\n\n newDraftText = doc.innerHTML;\n }\n\n if (newDraftText != undefined) {\n originalBillText[selectedBillTextIndex].DraftText = newDraftText;\n\n this.setState({\n originalBillText: originalBillText,\n })\n }\n }\n\n Promise.all([jsonPromise]).finally(() => {\n this.setState(prevState => ({ isDirty: false, isSaving: false, savedReviewContent: prevState.reviewContent, editorChanged: false }));\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }])\n });\n }\n\n });\n }\n })\n\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false\n });\n });\n }\n }\n\n handleSaveCompletedItem() {\n this.setState({ isSaving: true, enrolledPrintQueue: [], checkedBills: [], useCurrentPublishDates: true, customPublishDate: null });\n\n let billText = [...this.state.originalBillText];\n let selectedBillTextIndex = this.state.selectedBillTextIndex;\n billText[selectedBillTextIndex].DraftText = this.state.reviewContent;\n //Try to find the draft title in the text and set it\n let searchForLDTitleContainer = document.createElement('div');\n searchForLDTitleContainer.innerHTML = this.state.reviewContent;\n\n //Remove any tags TinyMCE may have added when pasting from Word (Borrowing the doc we're using for ldtitle search)\n searchForLDTitleContainer.childNodes.forEach(node => {\n if (node.nodeName !== \"#text\") {\n node.removeAttribute('data-mce-fragment');\n if (node.childNodes.length > 0) {\n node.childNodes.forEach(childNode => {\n if (childNode.nodeName !== \"#text\") {\n childNode.removeAttribute('data-mce-fragment');\n }\n })\n }\n }\n });\n\n //The first element in the content with this class is the draft title\n let draftLDTitle = searchForLDTitleContainer.querySelector('.ldtitle');\n if (draftLDTitle && draftLDTitle.innerHTML !== '') {\n billText[selectedBillTextIndex].DraftTitle = draftLDTitle.innerHTML;\n billText[selectedBillTextIndex].EditTitle = draftLDTitle.innerHTML;\n }\n\n //add LegislationClassID/LegislationClass to the LegislationText obj\n billText.forEach(text => {\n text.LegislationClass = this.state.selectedBill.LegislationClass\n text.LegislationClassID = this.state.selectedBill.LegislationClassID\n })\n\n this.props.actions.saveBillText({ TextsList: billText })\n .then(() => {\n this.setState({ isSaving: false });\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n let billTextParams = \"?legislationID=\" + this.state.selectedBill.LegislationID;\n this.props.actions.getBillText(billTextParams, true)\n .then(() => {\n const newbillTextList = [...this.props.bills.billText];\n const priorBillText = billText[selectedBillTextIndex];\n // Need to figure out what the index of the bill text we saved was. It isn't always the same one that was sent.\n if (priorBillText && priorBillText.LegislationTextID) {\n selectedBillTextIndex = newbillTextList.findIndex(t => t.LegislationTextID === priorBillText.LegislationTextID)\n } else {\n // Hopefully this finds it, but since the API might change the draft text around the second findIndex function is used.\n selectedBillTextIndex = newbillTextList.findIndex(t => t.DraftText === priorBillText.DraftText && t.LegislationVersionID === priorBillText.LegislationVersionID);\n selectedBillTextIndex = selectedBillTextIndex !== -1 ? selectedBillTextIndex : newbillTextList.findIndex(t => t.LegislationVersionID === priorBillText.LegislationVersionID)\n }\n\n this.handleSelectorChange('selectedSession', this.state.selectedSession);\n const legFileGenParams = \"?legislationID=\" + newbillTextList[selectedBillTextIndex].LegislationID\n + \"&legislationTextID=\" + newbillTextList[selectedBillTextIndex].LegislationTextID\n + \"&legislationVersionID=\" + newbillTextList[selectedBillTextIndex].LegislationVersionID\n + \"&sessionID=\" + this.state.selectedSession.SessionID;\n this.props.actions.genBillFile(legFileGenParams)\n\n this.setState({\n isPreviewVisible: false,\n selectedBill: '',\n reviewFieldsetIsActive: false,\n amendmentFieldsetIsActive: false,\n billFieldsetIsActive: true,\n originalBillText: [],\n billText: '',\n reviewContent: '',\n savedReviewContent: '',\n editorChanged: false,\n selectedBillTextIndex: -1,\n reviewKey: 1,\n isDirty: false\n });\n })\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false\n });\n });\n }\n\n handleEditorChange(content) {\n let replacement = false;\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", content);\n\n //Remove the header information from the dom so none of the <p> tags within get styled\n let header = doc.getElementsByTagName('div');\n this.setState({\n header: header[0] ? header[0].innerHTML : \"\"\n }, () => {\n if (header[0] !== undefined) {\n header[0].innerHTML = \"\";\n }\n\n let paragraphs = doc.getElementsByTagName('p');\n\n //Loop the paragraphs and add the section class to each paragraph with a class list length of 0\n for (let i = 0; i < paragraphs.length; i++) {\n if (paragraphs[i].classList.length === 0) {\n paragraphs[i].classList.add(\"section\");\n replacement = true;\n }\n }\n\n if (header[0] !== undefined) {\n header[0].innerHTML = this.state.header;\n }\n\n //If we've added a section class to a classless <p> tag then replace the content with the dom HTML\n //Otherwise update normally\n //This check is done because updating reviewContent in this way was causing tinyMCE to move the cursor position back to the first line\n if (replacement) {\n this.setState(prevState => ({\n reviewContent: doc.innerHTML,\n savedReviewContent: !prevState.editorChanged ? doc.innerHTML : prevState.savedReviewContent, //see notes below\n editorChanged: true,\n changeCount: this.state.changeCount + 1,\n isDirty: this.state.changeCount > 0 && this.state.reviewContent !== doc.innerHTML ? true : false\n }));\n } else {\n this.setState(prevState => ({\n reviewContent: content,\n savedReviewContent: !prevState.editorChanged ? content : prevState.savedReviewContent, //see notes below\n editorChanged: true,\n changeCount: this.state.changeCount + 1,\n isDirty: this.state.changeCount > 0 && this.state.reviewContent !== doc.innerHTML ? true : false\n }))\n }\n })\n\n //I know changeCount is hack-y, using editorChanged wasn't working as expected -JGB\n\n //handleEditorChange gets called when the editor is initalized, as some of the content is modified slightly; \n //we therefore need to update the savedReviewContent state on this FIRST call only, as this will be the comparison used to know if the editor has been changed by the user\n }\n\n setLegDateOptions(billList) {\n let legDates;\n if (this.state.showCompletedItems) {\n legDates = billList.map(x => { if (moment(x.VersionDate).isValid() && (!this.state.reprintsFiltered || x.IsReprint)) return { label: moment(x.VersionDate).format(\"MM/DD/YYYY\"), value: x.VersionDate } })\n } else {\n legDates = billList.map(x => { if (moment(x.CandidateDate).isValid()) return { label: moment(x.CandidateDate).format(\"MM/DD/YYYY\"), value: x.CandidateDate } })\n }\n let legDateOptions = legDates.filter((e, i) => legDates.findIndex(a => a && e && (a[\"label\"] === e[\"label\"])) === i);\n legDateOptions.sort((a, b) => { return moment(a.value) - moment(b.value) })\n\n this.setState({\n billList: billList,\n legDateOptions: legDateOptions\n });\n }\n\n checkHandleSelectorChange(key, value, confirmed) {\n if (this.state.isDirty && !confirmed) {\n this.setState({\n storedKey: key,\n storedValue: value,\n showCategoryConfirmation: true\n })\n } else if (confirmed) {\n this.handleSelectorChange(this.state.storedKey, this.state.storedValue)\n } else {\n this.handleSelectorChange(key, value)\n }\n\n this.setState({\n checkedBills: [],\n checkAll: false\n })\n }\n\n handleSelectorChange(key, value) {\n //An option in the Selector section has been changed.\n if (this.state[key] !== undefined) {\n this.setState({\n [key]: value,\n showCategoryConfirmation: false\n }, () => {\n if (['showCompletedItems', 'selectedSession', 'selectedLegType'].includes(key)) {\n this.setState({\n enrolledPrintQueue: [],\n checkedBills: [],\n useCurrentPublishDates: true,\n customPublishDate: null,\n });\n //If switching between completed items and incomplete items, change the version type dropdown list\n if (key === 'showCompletedItems') {\n let legOptions = [...this.state.legOptions];\n legOptions.forEach(version => {\n version.label = this.state.showCompletedItems ? version.Name : version.AuthoringLabel;\n this.setState({ legOptions })\n })\n }\n }\n //If both a session is selected and a legislation type then load a list of bills that adhere to the two selected criteria\n //Close the review and amendment field because the selected bill is no longer valid for the selected criteria\n if (this.state.selectedLegType && this.state.selectedSession) {\n this.setState({\n isLoaded: false,\n selectedBill: '',\n originalBillText: [],\n reviewContent: '',\n amendmentFieldsetIsActive: false,\n reviewFieldsetIsActive: false,\n reprintsFiltered: key === \"selectedLegNum\" || key === \"selectedLegDate\" ? this.state.reprintsFiltered : false,\n reviewKey: 1\n });\n\n const params = \"?sessionID=\" + this.state.selectedSession.SessionID + \"&legislationVersionID=\" + this.state.selectedLegType.LegislationVersionID + \"&IsComplete=\" + (this.state.showCompletedItems ? 'true' : 'false');\n this.props.actions.getBillManagementList(params)\n .then(() => {\n if ([\"Gov Recommendation\", \"Veto Explanation\"].includes(this.state.selectedLegType.Name)) {\n //Get bills in the session for the bill dropdown\n this.getSessionBills();\n }\n\n let billList = [...this.props.bills.billManagementList];\n\n if (this.state.showCompletedItems) { billList = billList.filter(text => !text.PendingChange) }\n\n if (key === \"selectedLegNum\" || key === \"selectedLegDate\") {\n if (key === \"selectedLegNum\" && value.value !== \"clear\") {\n billList = billList.filter(x => x.LegislationNumber.toLowerCase().includes(value.value.toLowerCase()))\n }\n\n if (key === \"selectedLegDate\" && value.value != \"clear\") {\n billList = billList.filter(x => moment(this.state.showCompletedItems ? x.VersionDate : x.CandidateDate).format(\"MM/DD/YYYY\") === moment(value.value).format(\"MM/DD/YYYY\"));\n }\n\n //Apply previously set filters if needed\n if (key === \"selectedLegDate\" && this.state.selectedLegNum !== '' && this.state.selectedLegNum.value !== 'clear') {\n billList = billList.filter(x => x.LegislationNumber.toLowerCase().includes(this.state.selectedLegNum.value.toLowerCase()))\n }\n\n if (key === \"selectedLegNum\" && this.state.selectedLegDate !== '' && this.state.selectedLegDate.value !== \"clear\") {\n billList = billList.filter(x => moment(this.state.showCompletedItems ? x.VersionDate : x.CandidateDate).format(\"MM/DD/YYYY\") === moment(this.state.selectedLegDate.value).format(\"MM/DD/YYYY\"));\n }\n } else {\n this.setState({\n selectedLegNum: '',\n selectedLegDate: ''\n })\n }\n\n this.setLegDateOptions(billList);\n\n this.setState({\n isLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n billList: [], // makes it apparent that something may have gone wrong but also prevents the list retaining old values\n isLoaded: true\n });\n });\n\n }\n });\n }\n }\n\n updateBillListByLegislationID(legislationID) {\n const params = \"?sessionID=\" + this.state.selectedSession.SessionID + \"&legislationID=\" + legislationID + \"&legislationVersionID=\" + this.state.selectedLegType.LegislationVersionID + \"&IsComplete=\" + (this.state.showCompletedItems ? 'true' : 'false');\n this.props.actions.getBillManagementList(params)\n .then(() => {\n let billListGetResponse = [...this.props.bills.billManagementList];\n let billListInState = [...this.state.billList];\n\n const associatedBillInStateIndex = billListInState.findIndex(b => b.LegislationID === legislationID);\n if (associatedBillInStateIndex > -1) {\n const associatedBillInGetResponse = billListGetResponse.find(b => b.LegislationID === legislationID);\n if (associatedBillInGetResponse) {\n billListInState[associatedBillInStateIndex] = associatedBillInGetResponse;\n this.setState({ billList: billListInState })\n }\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n billList: [] // makes it apparent that something may have gone wrong but also prevents the list retaining old values\n });\n });\n }\n\n handleVersionDateChange(value) {\n //Need to +1 the key to refresh the editor content\n let key = this.state.reviewKey + 1;\n\n this.setState({\n versionDate: value,\n reviewContent: this.updateDraftTextVersionDate(this.state.reviewContent, value),\n reviewKey: key\n }, () => {\n //If the bill is reenrolled check the version publish date against the reconvene date to decide whether to set the header to SESSION or RECONVENED SESSION\n if (this.state.selectedLegType.Name === \"Reenrolled\") {\n let doc = new DOMParser().parseFromString(this.state.reviewContent, \"text/html\");\n let paragraphs = doc.getElementsByTagName('p');\n\n if (this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\")\n && moment(this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\").ActualDate).isSameOrBefore(this.state.versionDate, \"day\")) {\n paragraphs[0].innerHTML = this.state.selectedSession.SessionYear + \" RECONVENED SESSION\";\n\n this.setState({\n reviewContent: doc.body.innerHTML,\n onReconvene: true\n })\n } else {\n paragraphs[0].innerHTML = this.state.selectedSession.SessionYear + \" SESSION\";\n\n this.setState({\n reviewContent: doc.body.innerHTML,\n onReconvene: false\n })\n }\n }\n })\n }\n\n updateDraftTextVersionDate(draftText, versionDate) {\n let doc = new DOMParser().parseFromString(draftText, \"text/html\");\n let elements = doc.getElementsByClassName('versiondate');\n\n //elements is an array, may as well iterate over it, especially since some bad data has had multiple tags with class versiondate \n for (var i = 0; i < elements.length; i++) {\n elements[i].innerText = moment(versionDate).format(\"LL\");\n }\n\n return doc.body.innerHTML;\n }\n\n selectBill(bill, billIndex, confirmed, LDNumber, callback) {\n if (this.state.isDirty && !confirmed) {\n this.setState({\n showBillConfirmation: () => this.selectBill(bill, billIndex, true, LDNumber, callback),\n storedBill: bill,\n storedBillIndex: billIndex\n })\n } else {\n this.setState({\n showBillConfirmation: false,\n replaced: false,\n wasEmpty: false,\n isDirty: false,\n changeCount: 0\n }, () => {\n //A bill has been selected. Load the amendments and legislation text then scroll down to it\n let billTextParams = bill ? \"?legislationID=\" + (bill.LegislationID) : ('?LDNumber=' + LDNumber + '&sessionID=' + this.state.selectedSession.SessionID);\n this.setState({\n billDataIsLoading: billIndex\n }, () => {\n this.props.actions.getBillText(billTextParams, true)\n .then(() => {\n if (!bill) {\n bill = (this.state.sessionBillsList.find(sbl => sbl.SessionID === this.state.selectedSession.SessionID) ? this.state.sessionBillsList.find(sbl => sbl.SessionID === this.state.selectedSession.SessionID).bills : []).find(b => b.LegislationID === this.props.bills.billText.find(bt => bt.LegislationID).LegislationID)\n }\n if (!bill) {\n this.setState({\n billDataIsLoading: null\n })\n this.props.actions.makeToast([{ message: \"Bill data not found for LD Number provided\", type: \"failure\" }]);\n return;\n }\n //The first step to deciding what text should show by default is to filter out all the amendments and conference reports\n let billTextForReviewPane = this.props.bills.billText.filter(text => ![\"Amendment\", \"Conference Report\"].includes(text.LegislationVersion) && (text.LegislationVersion !== \"Gov Recommendation\" || this.state.selectedLegType.Name === \"Gov Recommendation\"))\n let billText;\n if (!this.state.showCompletedItems && [\"Gov Recommendation\", \"Veto Explanation\"].includes(this.state.selectedLegType.Name) && isNaN(billIndex) && this.props.bills.billText.find(bt => bt.LegislationVersion === this.state.selectedLegType.Name)) {\n //they are adding a bill to the queue via the session bill selector, but there is already a gov rec on their desired bill\n //notify them as such, and if there is a public version, propose a link to red edit for them to edit/re-publish this version;\n //otherwise, select the non-public version for editing\n //if we allowed them to edit the existing public version (if present), it could result in the version being saved but not having file gen run (if they save but don't publish)\n if (this.props.bills.billText.find(bt => bt.LegislationVersion === this.state.selectedLegType.Name && bt.IsPublic)) {\n this.setState({\n billDataIsLoading: null\n })\n if (callback) callback();\n let a = document.createElement('a');\n a.target = '_blank';\n a.href = `/bill-details/${this.state.selectedSession.SessionCode}/${bill.LegislationNumber}/text/${this.props.bills.billText.find(bt => bt.LegislationVersion === this.state.selectedLegType.Name)?.DocumentCode}`;\n document.body.appendChild(a);\n if (confirm(`This bill already has a PUBLISHED ${this.state.selectedLegType.Name === \"Gov Recommendation\" ? \"Governor's Recommendation\" : \"Veto Explanation\"}. Press OK to be taken to the red-edit page for this existing version.`)) {\n a.click();\n }\n document.body.removeChild(a);\n return;\n } else {\n billText = this.props.bills.billText.find(bt => bt.LegislationVersion === this.state.selectedLegType.Name);\n }\n }\n //If there is one that matches the legislation text id, use that one for the review pane\n billText = billText ?? billTextForReviewPane.find(bt => bt.LegislationTextID === bill.LegislationTextID);\n //If the search is by LD Number and there is only one returned, use that one\n if (LDNumber && billTextForReviewPane.length === 1) {\n billText = billTextForReviewPane[0];\n }\n //Otherwise, if there is an unpublished active version, then set that one as the main text since unpublished changes are from a previous save \n if (!billText) {\n billText = !isNaN(billIndex) ? billTextForReviewPane.find(text => !text.IsPublic && text.IsActive) : { DraftText: '' }; //if selecting a session bill, just use new object with only draft text\n }\n //If one isn't found then select the text that is active\n if (!billText) {\n billText = billTextForReviewPane.find(text => text.IsActive);\n }\n //If there still isn't one then select the first one in the list, or nothing if the list is empty\n if (!billText) {\n billText = billTextForReviewPane.length > 0 ? billTextForReviewPane[0] : { DraftText: '' }\n }\n //If the text is already of the version specified in the selector, then it has been previously saved (e.g. not just the base doc anymore)\n //Therefore, for the version date, use the existing version date if it has already been saved, otherwise default to today's date\n const billVersionDate = billText && this.state.selectedLegType.LegislationVersionID === billText.LegislationVersionID ? moment(billText.VersionDate) : moment();\n //Now get the index of the selected bill text\n const selectedBillTextIndex = this.props.bills.billText.findIndex(text => text.LegislationTextID === billText.LegislationTextID);\n const amendments = this.props.bills.billText.filter(text => [\"Amendment\", \"Conference Report\", \"Gov Recommendation\"].includes(text.LegislationVersion));\n\n // Get the json headers if the selected version queue is \"Engrossed\" and we are not in completed items\n let jsonPromise, headers, reviewContent, patronageInfo;\n let headerError = false;\n\n if (this.state.selectedLegType.Name === \"Engrossed\"\n || this.state.selectedLegType.Name === \"Reengrossed\"\n || this.state.selectedLegType.Name === \"Chaptered\"\n || this.state.selectedLegType.Name === \"Enrolled\"\n || this.state.selectedLegType.Name === \"Reenrolled\") {\n\n const jsonHeadersRequestString = this.getJsonHeadersRequestString(billText.LegislationTextID, bill.DocumentCode);\n\n jsonPromise = this.props.actions.getJsonHeaders(jsonHeadersRequestString)\n .then(() => {\n if (this.props.bills.jsonHeaders) {\n headers = getHtml(this.props.bills.jsonHeaders);\n\n //Add the PassageDates to the draft text if this is a resolution and in the enrolled queue\n if ((this.state.selectedLegType.Name === \"Chaptered\" || this.state.selectedLegType.Name === \"Enrolled\") && (bill.LegislationTypeCode === \"J\" || bill.LegislationTypeCode === \"R\")) {\n headers = this.applyPassageDates(headers, billText, bill.LegislationTypeCode, bill.HousePassageDate, bill.SenatePassageDate);\n }\n\n reviewContent = headers + billText.DraftText;\n\n //Remove ldtitle from document if the header is present and the header also contains the ldtitle\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", reviewContent);\n let header = doc.getElementsByTagName('div');\n let newDraftText;\n\n if (header[0] != undefined) {\n //Store the header somewhere while we find and iterate over paragraphs in the rest of the doc\n let headerContainer = header[0].innerHTML;\n let headerParagraphs = header[0].getElementsByTagName('p');\n\n for (let i = 0; i < headerParagraphs.length; i++) {\n if (['ldtitle', 'ld', 'patronLine', 'patctr'].includes(headerParagraphs[i].classList[0])) {\n //Temporarily remove header \n header[0].innerHTML = \"\";\n\n //We found the ldtitle or patronage in the header, so iterate over the paragraphs to find any duplicate ldtitles or patronages and eliminate them\n let docParagraphs = doc.getElementsByTagName('p');\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (billText.LegislationVersion === \"Substitute\" && ['pro', 'center', 'patronLine', 'patctr', 'ldtitle', 'ld'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--;\n } else if (billText.LegislationVersion === \"Substitute\") {\n continue;\n }\n\n if (docParagraphs[j] && ['section', 'enactstm'].includes(docParagraphs[j].classList[0])) {\n break; //reached the actal body of the text, don't remove any more\n } else if (docParagraphs[j] && ['ldtitle', 'ld', 'patronLine', 'patctr', 'center'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--\n }\n }\n } else if (this.state.selectedLegType.Name === \"Engrossed\" && doc.getElementsByClassName(\"billpatron\")[0]) {\n //If working on an engrossed version, store the headers' patronage info which is needed for the preview (the object returned in the GetLegislationTextById call is not always correct)\n patronageInfo = doc.getElementsByClassName(\"billpatron\")[0].textContent\n }\n }\n\n if (this.state.selectedLegType.Name === \"Reenrolled\"\n && this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\")\n && moment(this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\").ActualDate).isSameOrBefore(billVersionDate, \"day\")) {\n //Set the header to reconvened session and reattach the header \n let headerDoc = document.createElement('div');\n headerDoc.insertAdjacentHTML(\"afterbegin\", headerContainer);\n let paragraphs = headerDoc.getElementsByTagName('p');\n paragraphs[0].innerHTML = this.state.selectedSession.SessionYear + \" RECONVENED SESSION\";\n\n header[0].appendChild(headerDoc);\n\n this.setState({\n onReconvene: true\n })\n } else {\n //Reattach the header\n header[0].innerHTML = headerContainer;\n this.setState({\n onReconvene: false\n })\n }\n\n newDraftText = doc.innerHTML\n }\n\n if (newDraftText != undefined) {\n reviewContent = newDraftText\n }\n }\n }).catch(e => {\n console.log(e)\n reviewContent = `<p class=\"message-error\">${typeof e === 'object' && !Array.isArray ? JSON.parse(e).Name || \"Unknown Error\" : e}</p>`;\n headerError = true;\n })\n } else {\n reviewContent = billText.DraftText\n }\n\n Promise.all([jsonPromise])\n .finally(() => {\n let storedBill;\n\n if (bill) {\n bill.SessionCode = this.state.selectedSession.SessionCode;\n } else {\n storedBill = { ...this.state.storedBill }\n storedBill.SessionCode = this.state.selectedSession.SessionCode;\n }\n\n //if this is a gov rec/veto version that has NOT already been saved, display the header info\n if (!this.state.showCompletedItems && [\"Gov Recommendation\", \"Veto Explanation\"].includes(this.state.selectedLegType.Name) && !(/^\\<p class=['\"].*['\"]>\\([HS][BJR]\\d{1,5}\\)\\<\\/p>\\s{0,1}\\<p class=['\"].*['\"]>GOVERNOR'S (RECOMMENDATION|VETO)\\<\\/p>/).test(reviewContent)) {\n //if it has bill number, but not the GOVERNOR'S RECOMMENDATION or GOVERNOR'S VETO line, remove the existing bill number line before we add both (to prevent duplicate bill # lines)\n //if it has no bill number, but does have the GOVERNOR'S RECOMMENDATION or GOVERNOR'S VETO line, remove the existing GOV line before we add both (to prevent duplicate GOV lines)\n reviewContent = reviewContent.replace(/^(\\<p class=['\"].*['\"]>\\([HS][BJR]\\d{1,5}\\)\\<\\/p>\\s{0,1}|\\<p class=['\"].*['\"]>GOVERNOR'S (RECOMMENDATION|VETO)\\<\\/p>\\s{0,1})/, \"\");\n reviewContent = \"<p class='textbl'>\" + \"(\" + (bill.LegislationNumber) + \")</p><p class='textbl'>\" + (this.state.selectedLegType.Name === \"Gov Recommendation\" ? \"GOVERNOR'S RECOMMENDATION\" : \"GOVERNOR'S VETO\") + \"</p>\" + this.updateDraftTextVersionDate(reviewContent, billVersionDate);\n } else {\n //default version date within the draft text if present\n reviewContent = this.updateDraftTextVersionDate(reviewContent, billVersionDate)\n }\n\n //remove selected bill from checkBills/enrolledPrintQueue arrays so they don't publish it from batch publish, or batch print, while they have maybe made unsaved changes in the tinymce editor\n let checkedBills = [...this.state.checkedBills];\n const checkedBillsIndex = checkedBills.map(b => b.LegislationID).indexOf((bill.LegislationID));\n if (checkedBillsIndex !== -1) {\n checkedBills.splice(checkedBillsIndex, 1);\n }\n let enrolledPrintQueue = [...this.state.enrolledPrintQueue];\n const enrolledPrintQueueIndex = enrolledPrintQueue.map(b => b.LegislationID).indexOf((bill.LegislationID));\n if (enrolledPrintQueueIndex !== -1) {\n enrolledPrintQueue.splice(enrolledPrintQueueIndex, 1);\n }\n\n this.setState({\n headers: headers,\n patronageInfo: patronageInfo,\n billDataIsLoading: null,\n selectedBill: bill ? bill : storedBill,\n originalBillText: this.props.bills.billText,\n amendments: amendments,\n amendmentFieldsetIsActive: true,\n reviewFieldsetIsActive: true,\n billFieldsetIsActive: false,\n reviewContent: reviewContent,\n savedReviewContent: reviewContent,\n editorChanged: false,\n checkedBills,\n enrolledPrintQueue,\n headerError: headerError,\n selectedBillTextIndex: selectedBillTextIndex,\n versionDate: billVersionDate,\n reviewKey: 1\n }, () => {\n //Get the size and position of the amendment or review form and scroll down to it\n const rect = this.state.showCompletedItems ? this.reviewRef.current.getBoundingClientRect() : this.amendmentRef.current.getBoundingClientRect();\n const windowY = window.scrollY;\n window.scrollTo({\n top: rect.top + windowY,\n behavior: 'smooth'\n });\n if (callback) callback();\n });\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({\n billDataIsLoading: null\n });\n this.props.actions.makeToast([{ message: \"Failed to get Bill Text\", type: \"failure\" }]);\n if (callback) callback();\n });\n });\n })\n }\n }\n\n closeConfirmation() {\n this.setState({\n showTextConfirmation: false,\n showBillConfirmation: false,\n showCategoryConfirmation: false\n })\n }\n\n selectBillIndex(index, confirmed) {\n if (this.state.isDirty && !confirmed) {\n this.setState({\n showTextConfirmation: true,\n storedTextIndex: index\n })\n } else {\n this.setState({\n showTextConfirmation: false,\n isDirty: false,\n wasEmpty: false,\n replaced: false,\n changeCount: 0,\n changingBillIndex: index\n }, () => {\n if (this.state.originalBillText[index]) {\n const selectedBillText = this.state.originalBillText[index];\n\n //If the text is already of the version specified in the selector, then it has been previously saved (e.g. not just the base doc anymore)\n //Therefore, for the version date, use the existing version date if it has already been saved, otherwise default to today's date\n const billVersionDate = this.state.selectedLegType.LegislationVersionID === selectedBillText.LegislationVersionID ? moment(selectedBillText.VersionDate) : moment();\n\n let jsonPromise, headers, reviewContent, patronageInfo;\n let headerError = false;\n const bill = this.state.billList.find(it => it.LegislationID === this.state.originalBillText[index].LegislationID) || (this.state.sessionBillsList.find(sbl => sbl.SessionID === this.state.selectedSession.SessionID) && this.state.sessionBillsList.find(sbl => sbl.SessionID === this.state.selectedSession.SessionID).bills.find(it => it.LegislationID === this.state.originalBillText[index].LegislationID));\n\n if (this.state.selectedLegType.Name === \"Engrossed\"\n || this.state.selectedLegType.Name === \"Reengrossed\"\n || this.state.selectedLegType.Name === \"Chaptered\"\n || this.state.selectedLegType.Name === \"Enrolled\"\n || this.state.selectedLegType.Name === \"Reenrolled\") {\n\n const jsonHeadersRequestString = this.getJsonHeadersRequestString(this.state.originalBillText[index].LegislationTextID, bill.DocumentCode);\n\n jsonPromise = this.props.actions.getJsonHeaders(jsonHeadersRequestString)\n .then(() => {\n if (this.props.bills.jsonHeaders) {\n headers = getHtml(this.props.bills.jsonHeaders);\n\n //Add the PassageDates to the draft text if this is a resolution and in the enrolled queue\n if ((this.state.selectedLegType.Name === \"Chaptered\" || this.state.selectedLegType.Name === \"Enrolled\") && (bill.LegislationTypeCode === \"J\" || bill.LegislationTypeCode === \"R\")) {\n headers = this.applyPassageDates(headers, selectedBillText, bill.LegislationTypeCode, bill.HousePassageDate, bill.SenatePassageDate)\n }\n\n reviewContent = headers + this.state.originalBillText[index].DraftText;\n\n //Remove ldtitle from document if the header is present and the header also contains the ldtitle\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", reviewContent);\n let header = doc.getElementsByTagName('div');\n let newDraftText;\n\n if (header[0] != undefined) {\n //Store the header somewhere while we find and iterate over paragraphs in the rest of the doc\n let headerContainer = header[0].innerHTML;\n let headerParagraphs = header[0].getElementsByTagName('p');\n\n for (let i = 0; i < headerParagraphs.length; i++) {\n if (['ldtitle', 'ld', 'patronLine', 'patctr'].includes(headerParagraphs[i].classList[0])) {\n //Temporarily remove header \n header[0].innerHTML = \"\";\n\n //We found the ldtitle or patronage in the header, so iterate over the paragraphs to find any duplicate ldtitles or patronages and eliminate them\n let docParagraphs = doc.getElementsByTagName('p');\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (selectedBillText.LegislationVersion === \"Substitute\" && ['pro', 'center', 'patronLine', 'patctr', 'ldtitle', 'ld'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--;\n } else if (selectedBillText.LegislationVersion === \"Substitute\") {\n continue;\n }\n\n if (docParagraphs[j] && ['section', 'enactstm'].includes(docParagraphs[j].classList[0])) {\n break; //reached the actal body of the text, don't remove any more\n } else if (docParagraphs[j] && ['ldtitle', 'ld', 'patronLine', 'patctr', 'center'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--\n }\n }\n } else if (this.state.selectedLegType.Name === \"Engrossed\" && doc.getElementsByClassName(\"billpatron\")[0]) {\n //If working on an engrossed version, store the headers' patronage info which is needed for the preview (the object returned in the GetLegislationTextById call is not always correct)\n patronageInfo = doc.getElementsByClassName(\"billpatron\")[0].textContent\n }\n }\n\n if (this.state.selectedLegType.Name === \"Reenrolled\"\n && this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\")\n && moment(this.props.session.sessionList.find(x => x.SessionID === this.state.selectedSession.SessionID).SessionEvents.find(x => x.DisplayName === \"Reconvene\").ActualDate).isSameOrBefore(billVersionDate, \"day\")) {\n //Set the header to reconvened session and reattach the header \n let headerDoc = document.createElement('div');\n headerDoc.insertAdjacentHTML(\"afterbegin\", headerContainer);\n let paragraphs = headerDoc.getElementsByTagName('p');\n paragraphs[0].innerHTML = this.state.selectedSession.SessionYear + \" RECONVENED SESSION\";\n\n header[0].appendChild(headerDoc);\n\n this.setState({\n onReconvene: true\n })\n } else {\n //Reattach the header\n header[0].innerHTML = headerContainer;\n\n this.setState({\n onReconvene: false\n })\n }\n\n newDraftText = doc.innerHTML\n }\n\n if (newDraftText != undefined) {\n reviewContent = newDraftText\n }\n }\n }).catch(e => {\n console.log(e)\n reviewContent = `<p class=\"message-error\">${typeof e === 'object' && !Array.isArray ? JSON.parse(e).Name || \"Unknown Error\" : e}</p>`;\n headerError = true;\n })\n } else {\n reviewContent = this.state.originalBillText[index].DraftText;\n }\n\n Promise.all([jsonPromise])\n .finally(() => {\n //if this is a gov rec/veto version that has NOT already been saved, display the header info\n if (!this.state.showCompletedItems && [\"Gov Recommendation\", \"Veto Explanation\"].includes(this.state.selectedLegType.Name) && ![\"Gov Recommendation\", \"Veto Explanation\"].includes(this.state.originalBillText[index].LegislationVersion)) {\n reviewContent = \"<p class='textbl'>\" + \"(\" + bill.LegislationNumber + \")</p><p class='textbl'>\" + (this.state.selectedLegType.Name === \"Gov Recommendation\" ? \"GOVERNOR'S RECOMMENDATION\" : \"GOVERNOR'S VETO\") + \"</p><p></p>\"\n } else {\n //default version date within the draft text if present\n reviewContent = this.updateDraftTextVersionDate(reviewContent, billVersionDate)\n }\n\n this.setState({\n headers: headers,\n patronageInfo: patronageInfo,\n selectedBillTextIndex: index,\n reviewContent: reviewContent,\n savedReviewContent: reviewContent,\n editorChanged: false,\n headerError: headerError,\n versionDate: billVersionDate,\n reviewKey: 1,\n changingBillIndex: false\n })\n })\n }\n })\n }\n }\n\n toggleCheckAll() {\n const opposite = !this.state.checkAll;\n let checkedBills = [...this.state.checkedBills];\n\n this.state.billList.forEach(bill => {\n const billIndex = checkedBills.findIndex(b => b.LegislationTextID === bill.LegislationTextID)\n if (!opposite) {\n checkedBills.splice(billIndex, 1);\n } else if (billIndex === -1) {\n checkedBills.push(bill);\n }\n });\n this.setState({\n checkedBills: checkedBills,\n checkAll: opposite\n })\n }\n\n checkBill(bill, enrolledPrintQueue, e) {\n let checkedBills = enrolledPrintQueue ? [...this.state.enrolledPrintQueue] : [...this.state.checkedBills];\n const billIndex = checkedBills.findIndex(b => b.LegislationTextID === bill.LegislationTextID)\n\n if (billIndex !== -1) {\n checkedBills.splice(billIndex, 1);\n } else {\n checkedBills.push(bill);\n }\n if (enrolledPrintQueue) {\n this.setState({ enrolledPrintQueue: checkedBills });\n } else {\n this.setState({ checkedBills }, () => {\n if (!this.state.checkedBills.length) {\n this.setState({\n customPublishDate: null,\n useCurrentPublishDates: true\n })\n }\n });\n }\n }\n\n togglePublishDatePreference() {\n this.setState({ useCurrentPublishDates: !this.state.useCurrentPublishDates }, () => {\n if (this.state.useCurrentPublishDates) {\n this.setState({ customPublishDate: null })\n }\n })\n }\n\n handlePublishDateChange(date) {\n this.setState({ customPublishDate: date })\n }\n\n getSessionBills() {\n if (!this.state.sessionBillsList || !this.state.sessionBillsList.length || !this.state.sessionBillsList.find(sbl => sbl.SessionID === this.state.selectedSession.SessionID))\n //Get bills in the session for the bill dropdown\n this.props.actions.getSessionBills('?sessionID= ' + this.state.selectedSession.SessionID).then(() => {\n let bills = [...this.props.bills.sessionBills].filter(b => b.LegislationTypeCode === \"B\" && (this.props.login.userClaims.roles.find((x) => x === \"Admin\") ? true : this.props.login.userClaims.roles.find((x) => x === \"HouseLegislationAuthor\") ? b.ChamberCode === \"H\" : b.ChamberCode === \"S\"));\n bills.forEach(bill => {\n bill.label = bill.LegislationNumber\n bill.value = bill.LegislationID\n });\n let sessionBillsList = [...this.state.sessionBillsList];\n sessionBillsList.push({ SessionID: this.state.selectedSession.SessionID, bills: bills })\n this.setState({\n sessionBillsList\n })\n })\n }\n\n batchPublish() {\n this.setState({ isSaving: true }, () => {\n this.props.actions.batchPublish({ \"PublishDate\": !this.state.useCurrentPublishDates && this.state.customPublishDate ? this.state.customPublishDate : null, \"legislationTextIDs\": this.state.checkedBills.map(bills => bills.LegislationTextID), \"legislationIDs\": this.state.checkedBills.map(bills => bills.LegislationID) })\n .then(() => {\n this.props.actions.batchGenBillFile(\"?sessionID=\" + this.state.selectedSession.SessionID, this.state.checkedBills.map(bills => bills.LegislationTextID))\n .then(() => {\n this.props.actions.makeToast([{ message: \"Publish Successful - Processing Files...\", type: \"success\" }])\n\n this.setState({\n checkedBills: [],\n checkAll: false,\n enrolledPrintQueue: [],\n useCurrentPublishDates: true,\n customPublishDate: null,\n isLoaded: false,\n selectedBill: '',\n originalBillText: [],\n reviewContent: '',\n amendmentFieldsetIsActive: false,\n reviewFieldsetIsActive: false,\n reviewKey: 1,\n isSaving: false\n }, () => {\n const params = \"?sessionID=\" + this.state.selectedSession.SessionID + \"&legislationVersionID=\" + this.state.selectedLegType.LegislationVersionID + \"&IsComplete=\" + (this.state.showCompletedItems ? 'true' : 'false');\n this.props.actions.getBillManagementList(params)\n .then(() => {\n let billList = [...this.props.bills.billManagementList];\n\n if (this.state.showCompletedItems) { billList = billList.filter(text => !text.PendingChange) }\n\n this.setState({\n selectedLegDate: '',\n selectedLegNum: ''\n })\n\n this.setLegDateOptions(billList);\n this.setState({\n isLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n billList: [], // makes it apparent that something may have gone wrong but also prevents the list retaining old values\n isLoaded: true\n });\n });\n });\n }).catch((err) => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"File Generation Failed\", type: \"failure\" }]);\n this.setState({ isSaving: false });\n })\n }).catch((err) => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Publish Failed\", type: \"failure\" }]);\n this.setState({ isSaving: false });\n })\n })\n }\n\n batchComplete() {\n this.setState({ isSaving: true }, () => {\n this.props.actions.batchComplete({ \"IsComplete\": true, \"IsReleased\": false, \"legislationTextIDs\": this.state.enrolledPrintQueue.map(bills => ({ LegislationTextID: bills.LegislationTextID })) })\n .then(() => {\n let legislationNumbers = {\n LegislationNumbers: []\n };\n this.state.enrolledPrintQueue.forEach(x => {\n legislationNumbers.LegislationNumbers.push({\n LegislationNumber: x.LegislationNumber\n })\n })\n this.props.actions.sendParchmentEmail(legislationNumbers)\n .then(() => {\n this.props.actions.makeToast([{ message: \"Print Parchment Successful\", type: \"success\" }])\n\n this.setState({\n checkedBills: [],\n enrolledPrintQueue: [],\n useCurrentPublishDates: true,\n customPublishDate: null,\n isLoaded: false,\n selectedBill: '',\n originalBillText: [],\n reviewContent: '',\n amendmentFieldsetIsActive: false,\n reviewFieldsetIsActive: false,\n reviewKey: 1,\n isSaving: false\n }, () => {\n const params = \"?sessionID=\" + this.state.selectedSession.SessionID + \"&legislationVersionID=\" + this.state.selectedLegType.LegislationVersionID + \"&IsComplete=\" + (this.state.showCompletedItems ? 'true' : 'false');\n this.props.actions.getBillManagementList(params)\n .then(() => {\n let billList = [...this.props.bills.billManagementList];\n\n if (this.state.showCompletedItems) { billList = billList.filter(text => !text.PendingChange) }\n\n this.setState({\n selectedLegDate: '',\n selectedLegNum: ''\n })\n\n this.setLegDateOptions(billList);\n this.setState({\n isLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n billList: [], // makes it apparent that something may have gone wrong but also prevents the list retaining old values\n isLoaded: true\n });\n });\n });\n })\n }).catch((err) => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Print Parchment Failed\", type: \"failure\" }]);\n this.setState({ isSaving: false });\n })\n })\n }\n\n applyPassageDates(headers, billText, legislationTypeCode, housePassageDate, senatePassageDate) {\n //Check the text of the header and doc to make sure the passage dates haven't already been added\n let preDoc = document.createElement('div');\n preDoc.insertAdjacentHTML(\"afterbegin\", headers + billText.DraftText);\n let preDocParagraphs = preDoc.getElementsByTagName(\"p\");\n let housePassage = false\n let senatePassage = false;\n\n for (let i = 0; i < preDocParagraphs.length; i++) {\n if (preDocParagraphs[i].classList && preDocParagraphs[i].classList[0] === \"house-passage\") {\n housePassage = true;\n }\n\n if (preDocParagraphs[i].classList && preDocParagraphs[i].classList[0] === \"senate-passage\") {\n senatePassage = true;\n }\n }\n\n //Add the passage dates if they exist in the data but aren't in the DraftText yet - add both chambers for joint resolutions, or just the originating chamber for normal resolutions\n if (billText.ChamberCode === \"H\") {\n headers = housePassageDate && housePassageDate != \"\" && !housePassage ? headers + \"<p class='house-passage center'>Agreed to by the House of Delegates, \" + moment(housePassageDate).format(\"LL\") + \"</p>\" : headers;\n if (legislationTypeCode === \"J\") {\n headers = senatePassageDate && senatePassageDate != \"\" && !senatePassage ? headers + \"<p class='senate-passage center'>Agreed to by the Senate, \" + moment(senatePassageDate).format(\"LL\") + \"</p><p></p>\" : headers;\n } else {\n headers = headers + \"<p></p>\";\n }\n } else {\n headers = senatePassageDate && senatePassageDate != \"\" && !senatePassage ? headers + \"<p class='senate-passage center'>Agreed to by the Senate, \" + moment(senatePassageDate).format(\"LL\") + \"</p>\" : headers;\n if (legislationTypeCode === \"J\") {\n headers = housePassageDate && housePassageDate != \"\" && !housePassage ? headers + \"<p class='house-passage center'>Agreed to by the House of Delegates, \" + moment(housePassageDate).format(\"LL\") + \"</p><p></p>\" : headers;\n } else {\n headers = headers + \"<p></p>\";\n }\n }\n\n return headers;\n }\n\n getJsonHeadersRequestString(legislationTextId, documentCode) {\n let overrideParam = this.state.selectedLegType.Name.toLowerCase();\n\n let jsonHeadersRequestString = \"?legislationTextID=\" + legislationTextId + \"&sessionID=\" + this.state.selectedSession.SessionID + \"&overrideLegislationVersion=\" + overrideParam + \"&onlyHeader=true\";\n if (this.state.selectedLegType.Name === \"Chaptered\") {\n //For chaptered legislation, add overrideDocumentCode param and use the future chapter number to be displayed in the headers\n jsonHeadersRequestString += \"&overrideDocumentCode=\" + documentCode;\n }\n\n return jsonHeadersRequestString\n }\n\n toggleCompleteItems() {\n this.handleSelectorChange('showCompletedItems', !this.state.showCompletedItems);\n }\n\n componentDidMount() {\n //Get the list of active sessions for the session dropdown\n this.props.actions.getSessionShallowList(\"IsActive=true\")\n .then(() => {\n let sessionList = [...this.props.session.sessionShallowList];\n sessionList.forEach((session, index) => {\n session.label = session.SessionYear + ' ' + session.DisplayName;\n session.value = session.SessionID;\n //Set the last session in the list as the selected session\n if (session.IsDefault) {\n this.handleSelectorChange('selectedSession', session);\n }\n });\n this.setState({\n sessionOptions: sessionList\n });\n });\n\n this.props.actions.getBillVersionRef()\n .then(() => {\n const billVersionRef = [...this.props.bills.billVersionRef];\n // Only list the important versions in the dropdown. AKA any version that has an AuthoringLabel is important \n const billVersionsToUse = billVersionRef.filter(v => v.AuthoringLabel);\n let billVersionOptions = []\n billVersionsToUse.forEach(version => {\n //Do not add Chaptered to the version list dropdown if Senate user\n if (version.Name !== \"Chaptered\" || this.props.login.userClaims.claims.find(x => x.Resource === \"LegislationText\" && (x.Scope === \"All\" || x.Scope === \"House\"))) {\n version.label = this.state.showCompletedItems ? version.Name : version.AuthoringLabel;\n version.value = version.LegislationVersionID;\n billVersionOptions.push(version);\n }\n });\n this.setState({\n billVersionRef: billVersionRef,\n legOptions: billVersionOptions.sort((a, b) => a.label.localeCompare(b.label)),\n });\n });\n }\n\n toggleHeaders() {\n this.setState(prevState => ({\n showHeaders: !prevState.showHeaders\n }))\n }\n\n resetWarning() {\n this.setState({\n reviewKey: 1\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { selectedBill, originalBillText, headers } = this.state;\n // Bills that were chaptered, vetoed, or had recommendations added need the date that they were originally signed by the governor visible to the user\n const signedText = originalBillText.find(text =>\n text.LegislationVersion === 'Veto Explanation' ||\n text.LegislationVersion === 'Gov Recommendation' ||\n text.LegislationVersion === 'Chaptered');\n if (this.state.isPreviewVisible) {\n return (\n <div>\n {this.state.showIncompletePdf &&\n <Popout togglePortal={this.togglePortal} windowTitle=\"PDF Preview\">\n {this.state.gettingIncompletePdf &&\n <div className=\"center-spinner spinner\" />\n }\n <iframe style={{ display: this.state.gettingIncompletePdf ? 'none' : 'block', width: '100%', height: '100%' }} ref={this.pdfRef}></iframe>\n </Popout>\n }\n <div className=\"flex-row align-center bottomline\">\n <h2>{this.state.selectedSession.SessionYear} {this.state.selectedSession.DisplayName} / {selectedBill.LegislationNumber}</h2>\n <div>\n {!this.state.showCompletedItems && ['chaptered', 'enrolled', 'reenrolled', 'engrossed', 'reengrossed'].includes(this.state.selectedLegType.Name.toLowerCase()) &&\n <span><button type=\"button\" className=\"button pdf\" style={{ paddingTop: '5px' }} onClick={this.previewPdf}>PDF</button></span>\n }\n <ReactToPrint\n trigger={() => <span><button type=\"button\" className=\"button print\">Print</button></span>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n </div>\n {this.state.previewContent !== '' && this.state.showCompletedItems\n ? <iframe ref={el => (this.componentRef = el)} src={this.state.previewContent} type=\"application/pdf\" width=\"100%\" height=\"1080px\" style={{ marginBottom: \"45px\" }}></iframe>\n : <PreviewSection ref={el => (this.componentRef = el)}\n headers={headers}\n selectedBill={selectedBill}\n editorContent={this.state.previewContent}\n error={this.state.previewContentError}\n selectedLegType={this.state.selectedLegType}\n billVersionRef={this.state.billVersionRef}\n />\n }\n <div className={\"align-right floating-button-bar inline-list\" + (!this.state.showCompletedItems && this.state.selectedLegType.Name === 'Enrolled' ? \" print-parchment\" : \"\")}>\n {\n this.state.showCompletedItems ?\n <button disabled={this.state.isSaving} onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n : this.state.selectedLegType.Name === 'Enrolled' &&\n <React.Fragment>\n <button disabled={this.state.isSaving} onClick={() => { this.handleSave(false, true); this.props.actions.sendParchmentEmail({ LegislationNumbers: [{ LegislationNumber: this.state.selectedBill.LegislationNumber }] }); }} className=\"button\">Print Parchment</button>\n <div />\n </React.Fragment>\n }\n {this.state.showCompletedItems ?\n <React.Fragment>\n <div className=\"flex-row flex-vertical-center flex-end\">\n <div className=\"toggle-switch\" onClick={this.toggleReprint}>\n <input id=\"official-reprint-button\" checked={this.state.originalBillText[this.state.selectedBillTextIndex] && this.state.originalBillText[this.state.selectedBillTextIndex].IsReprint} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"official-reprint-button\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"no-wrap\", marginTop: '0px', fontSize: '14px' }}>Mark As Official Reprint</label>\n <button disabled={this.state.isSaving || !this.state.selectedBill || (!this.props.login.userClaims.scopes.find((x) => x === \"Senate\") && this.props.login.userClaims.roles.find((x) => x === \"HouseLegislationFilePublisher\") === undefined)} onClick={this.handleSaveCompletedItem} className=\"button\">{this.state.isSaving ? \"Republishing...\" : \"Republish\"}</button>\n </div>\n </React.Fragment>\n :\n <React.Fragment>\n <button disabled={this.state.isSaving} onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n {(this.state.selectedBill.CandidateDate || ([2, 3, 6, 7, 9, 10].includes(this.state.selectedLegType.LegislationVersionID) && !this.state.selectedBill.CandidateDate)) &&\n <button disabled={this.state.isSaving || !this.state.selectedBill || !this.state.originalBillText[this.state.selectedBillTextIndex].DocumentCode || (!this.props.login.userClaims.scopes.find((x) => x === \"Senate\") && this.props.login.userClaims.roles.find((x) => x === \"HouseLegislationFilePublisher\") === undefined)} onClick={() => this.handleSave(true)} className=\"button\">{this.state.isSaving ? \"Publishing...\" : \"Publish\"}</button>\n }\n </React.Fragment>\n }\n </div>\n </div >\n );\n } else {\n return (\n <div>\n {(this.state.showTextConfirmation || this.state.showBillConfirmation) &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content\">\n <p>You have unsaved changes. Are you sure you want to open a different document?</p>\n <button className=\"button secondary float-right\" onClick={() => this.closeConfirmation()}>No</button>\n <button className=\"button primary float-right\" onClick={() => this.state.showTextConfirmation ? this.selectBillIndex(this.state.storedTextIndex, true) : this.state.showBillConfirmation()} style={{ marginRight: \"10px\" }}>Yes</button>\n <br />\n </div>\n </div>\n }\n {this.state.showCategoryConfirmation &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content\">\n <p>You have unsaved changes. Are you sure you want to select a different option?</p>\n <button className=\"button secondary float-right\" onClick={() => this.closeConfirmation()}>No</button>\n <button className=\"button primary float-right\" onClick={() => this.checkHandleSelectorChange(this.state.storedKey, this.state.storedValue, true)} style={{ marginRight: \"10px\" }}>Yes</button>\n <br />\n </div>\n </div>\n }\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n <div className=\"header-half\">\n <h1>Version Authoring{this.state.showCompletedItems && ' (Published Versions)'}</h1>\n <p>\n <button onClick={() => this.toggleCompleteItems()} className=\"button\" type=\"button\">{this.state.showCompletedItems ? 'Back' : 'View Published Versions'}</button>\n </p>\n </div>\n <div className=\"user-forms dlas-forms\" style={{ paddingBottom: \"40px\" }}>\n <fieldset className={this.state.billFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'billFieldsetIsActive')}>Bills {this.state.processingFile && <span> | <i>Creating file...</i></span>}</legend>\n <div>\n <SelectorSection\n onChange={this.checkHandleSelectorChange}\n sessionOptions={this.state.sessionOptions}\n legOptions={this.state.legOptions}\n selectedSession={this.state.selectedSession}\n selectedLegType={this.state.selectedLegType}\n selectedLegDate={this.state.selectedLegDate}\n selectedLegNum={this.state.selectedLegNum}\n legDateOptions={this.state.legDateOptions}\n disable={this.state.isSaving}\n />\n <span className=\"insert-message small-text fail\">{this.props.bills.billManagementListError}</span>\n <BillGridSection\n billList={this.state.billList.filter(b => !this.state.reprintsFiltered ? true : b.IsReprint)}\n selectBill={this.selectBill}\n selectedBill={this.state.selectedBill}\n checkBill={this.checkBill}\n checkedBills={this.state.checkedBills}\n enrolledPrintQueue={this.state.enrolledPrintQueue}\n batchPublish={this.batchPublish}\n batchComplete={this.batchComplete}\n isSaving={this.state.isSaving}\n isLoaded={this.state.isLoaded}\n billDataIsLoading={this.state.billDataIsLoading}\n completedItems={this.state.showCompletedItems}\n legislationVersionID={this.state.selectedLegType.LegislationVersionID}\n useCurrentPublishDates={this.state.useCurrentPublishDates}\n togglePublishDatePreference={this.togglePublishDatePreference}\n handlePublishDateChange={this.handlePublishDateChange}\n customPublishDate={this.state.customPublishDate}\n reprintsFiltered={this.state.reprintsFiltered}\n filterReprints={this.filterReprints}\n sessionBillsList={this.state.sessionBillsList.find(sbl => sbl.SessionID === this.state.selectedSession.SessionID) ? this.state.sessionBillsList.find(sbl => sbl.SessionID === this.state.selectedSession.SessionID).bills : []}\n toggleCheckAll={this.toggleCheckAll}\n checkAll={this.state.checkAll}\n />\n </div>\n </fieldset>\n {!this.state.showCompletedItems &&\n <fieldset ref={this.amendmentRef} className={this.state.amendmentFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'amendmentFieldsetIsActive')}>\n Amendments {this.state.amendments.length > 0 && <span style={{ verticalAlign: 'bottom' }} className=\"icon popout\" onClick={(e) => this.togglePortal(this.state.showPortal, e)}></span>}\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle={this.state.selectedBill.LegislationNumber + ' Amendments'}>\n <AmendmentSection\n amendments={this.state.amendments}\n />\n </Popout>\n }\n </legend>\n <div>\n <AmendmentSection\n amendments={this.state.amendments}\n />\n </div>\n </fieldset>\n }\n <fieldset ref={this.reviewRef} className={this.state.reviewFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'reviewFieldsetIsActive')}><span>Review </span>\n {selectedBill &&\n <span>\n | {selectedBill.LegislationNumber}\n {signedText && signedText.VersionDate &&\n <React.Fragment> | Signed: {moment(signedText.VersionDate).format('MM/DD/YYYY')} </React.Fragment>\n }\n </span>\n }</legend>\n {!this.state.showCompletedItems && selectedBill &&\n <>\n <label htmlFor=\"version-date-picker\">Version Publish Date</label>\n <DatePicker\n id=\"version-date-picker\"\n selected={this.state.versionDate}\n onChange={this.handleVersionDateChange}\n />\n </>\n }\n <div>\n {!this.state.showCompletedItems &&\n <React.Fragment>\n <TextList\n originalBillText={this.state.originalBillText}\n selectedBillTextIndex={this.state.selectedBillTextIndex}\n selectBillIndex={this.selectBillIndex}\n selectedLegType={this.state.selectedLegType}\n changingBillIndex={this.state.changingBillIndex}\n />\n </React.Fragment>\n }\n <ReviewSection\n editorContent={this.state.reviewContent}\n handleEditorChange={this.handleEditorChange}\n sessionId={this.state.selectedSession.SessionID}\n reviewKey={this.state.reviewKey}\n resetWarning={this.resetWarning}\n setWasEmpty={this.setWasEmpty}\n wasEmpty={this.state.wasEmpty}\n setReplaced={this.setReplaced}\n replaced={this.state.replaced}\n billNumber={this.state.selectedBill.LegislationNumber}\n userChamber={this.props.login.userClaims.roles.find((x) => x === \"Admin\") ? \"Admin\" : this.props.login.userClaims.roles.find((x) => x === \"HouseLegislationAuthor\") ? \"H\" : \"S\"}\n allowAmendmentActions={this.state.selectedLegType.Name === \"Gov Recommendation\"}\n allowGovernorAmendmentSponsor={this.state.selectedLegType.Name === \"Gov Recommendation\"}\n amendmentOrigin={this.state.selectedLegType.Name === \"Gov Recommendation\" ? \"G\" : \"\"}\n overrideRemoveAgreeRejectButtons={true}\n legislationVersion={originalBillText[this.state.selectedBillTextIndex] && originalBillText[this.state.selectedBillTextIndex].LegislationVersion}\n pasteAsText={this.state.selectedLegType.Name !== \"Gov Recommendation\"}\n versionAuthoring={true}\n />\n {this.state.reviewContent != \"\" &&\n <div className=\"align-right floating-button-bar inline-list\">\n {!this.state.showCompletedItems && <button type=\"button\" className=\"button\" disabled={this.state.isSaving || !this.state.selectedBill || this.state.headerError} onClick={() => this.handleSave(false)}>{this.state.isSaving ? \"Saving...\" : \"Save\"}</button>}\n <button type=\"button\" className=\"button\" disabled={this.state.gettingCompletedItemPreview || this.state.isSaving || !this.state.selectedBill || !this.state.originalBillText[this.state.selectedBillTextIndex] || this.state.headerError || (!this.state.showCompletedItems && (this.state.reviewContent !== this.state.savedReviewContent || this.state.selectedLegType && this.state.originalBillText[this.state.selectedBillTextIndex] && this.state.selectedLegType.LegislationVersionID !== this.state.originalBillText[this.state.selectedBillTextIndex].LegislationVersionID))} onClick={this.togglePreview}>{this.state.gettingCompletedItemPreview ? 'Getting Preview' : 'Preview'}</button>\n </div>\n }\n </div>\n </fieldset>\n </div>\n </div>\n );\n }\n }\n}\nexport default connect(\n (state) => {\n const { bills, session, nav, login } = state;\n return {\n bills,\n session,\n nav,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, sessionActionCreators, navActionCreators, printActionCreators), dispatch)\n }\n }\n)(VersionManagement)","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport DatePicker from 'react-datepicker';\nimport ReactTable from 'react-table';\nimport moment from 'moment-timezone';\nimport { LargeListSelect } from '../../../lis-shared/lis-layout/components/lis-forms-component';\n\nclass BillGridSection extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedSessionBill: null,\n ldNumberSearch: '',\n searchingLDNumber: false\n }\n\n this.selectSessionBill = this.selectSessionBill.bind(this);\n this.handleLdNumberSearchChange = this.handleLdNumberSearchChange.bind(this);\n this.searchByLDNumber = this.searchByLDNumber.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if ((this.state.selectedSessionBill && prevProps.selectedBill.LegislationNumber !== this.props.selectedBill.LegislationNumber && this.props.selectedBill.LegislationNumber !== this.state.selectedSessionBill.LegislationNumber) || prevProps.legislationVersionID !== this.props.legislationVersionID) {\n this.setState({ selectedSessionBill: null })\n }\n }\n\n selectSessionBill(legislation) {\n this.setState({ selectedSessionBill: legislation })\n this.props.selectBill(legislation, legislation.LegislationNumber);\n }\n\n handleLdNumberSearchChange(val) {\n this.setState({ ldNumberSearch: val })\n }\n\n searchByLDNumber(e) {\n if (e) e.preventDefault()\n this.setState({ searchingLDNumber: true }, () => {\n this.props.selectBill(null, null, null, this.state.ldNumberSearch, () => {\n this.setState({ searchingLDNumber: false })\n });\n })\n }\n\n render() {\n let columns = [\n {\n Header: 'Bill #',\n sortable: true,\n sortMethod: ((rowA, rowB, desc) => {\n const legChamberA = rowA[0];\n const legChamberB = rowB[0];\n if (legChamberA !== legChamberB) {\n return legChamberA.localeCompare(legChamberB);\n }\n\n const legTypeA = rowA[1];\n const legTypeB = rowB[1];\n if (legTypeA !== legTypeB) {\n return legTypeA.localeCompare(legTypeB);\n }\n\n const legKeyA = rowA.substr(2);\n const legKeyB = rowB.substr(2);\n return legKeyA - legKeyB;\n }),\n filterable: false,\n width: 90,\n accessor: \"LegislationNumber\",\n Cell: ({ original, index }) => {\n const checked = this.props.enrolledPrintQueue.find(b => b.LegislationTextID === original.LegislationTextID);\n if (original.SessionCode) {\n return <div>\n <Link to={`/bill-details/${original.SessionCode}/${original.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{original.LegislationNumber}</Link>\n {!this.props.completedItems && original.VersionDate && this.props.legislationVersionID === 3 && <input id=\"sr-publish\" type=\"checkbox\" style={{ float: 'right' }} disabled={this.props.selectedBill && this.props.selectedBill.LegislationTextID === original.LegislationTextID ? true : false} onChange={(e) => this.props.checkBill(original, true, e)} checked={checked ? checked : false} />}\n </div>\n } else {\n return (<span>{original.LegislationNumber}</span>)\n }\n }\n },\n {\n Header: 'Patron',\n sortable: true,\n filterable: false,\n accessor: \"Patrons\",\n width: 100,\n Cell: row =>\n <span>{row.value && row.value.map((patron, index) => <React.Fragment key={index}>{patron.PatronDisplayName}{index !== row.value.length - 1 && \", \"}</React.Fragment>)}</span>\n },\n {\n Header: 'Caption',\n sortable: true,\n filterable: false,\n accessor: \"Description\",\n Cell: row => <span>{row.value}</span>\n },\n {\n Header: this.props.completedItems\n ? <>Published Date <input\n id={'pd-checkbox-selectall'}\n type=\"checkbox\"\n className=\"checkbox\"\n checked={this.props.checkAll}\n onChange={this.props.toggleCheckAll}\n /></>\n : this.props.legislationVersionID === 2 ? 'Engrossed On' : this.props.legislationVersionID === 6 ? 'Reengrossed On' : [3, 7].includes(this.props.legislationVersionID) ? 'Passed on' : 'Candidate Date',\n sortable: false,\n filterable: false,\n accessor: this.props.completedItems ? \"\" : \"CandidateDate\",\n width: 135,\n Cell: ({ original, index }) => {\n if (!this.props.completedItems) { return <span>{original.CandidateDate ? moment(original.CandidateDate).format(\"MM/DD/YYYY\") : [2, 3, 6, 7].includes(this.props.legislationVersionID) ? \"Pending\" : \"\"}</span> }\n else {\n const checked = this.props.checkedBills.find(b => b.LegislationTextID === original.LegislationTextID);\n return (<div>\n <span>{checked && this.props.customPublishDate ? moment(this.props.customPublishDate).format(\"MM/DD/YYYY\") : original.VersionDate ? moment(original.VersionDate).format(\"MM/DD/YYYY\") : \"\"}</span>\n {original.VersionDate && <input id=\"sr-publish\" type=\"checkbox\" style={{ float: 'right' }} disabled={this.props.selectedBill && this.props.selectedBill.LegislationTextID === original.LegislationTextID ? true : false} onChange={(e) => this.props.checkBill(original, false, e)} checked={checked ? checked : false} />}\n </div>)\n }\n }\n },\n {\n Header: 'Actions',\n sortable: false,\n filterable: false,\n accessor: \"\",\n width: 90,\n Cell: ({ original, index }) =>\n <div className=\"committee-action-column\">\n {this.props.billDataIsLoading === index ?\n <div><span className=\"small-spinner\"></span></div>\n :\n <button className=\"button edit\" type=\"button\" onClick={() => this.props.selectBill(original, index)}>Edit</button>\n }\n {original.PendingChange\n ? <span className=\"icon flag\"></span>\n : <div />\n }\n {original.IsComplete\n ? !this.props.completedItems\n ? [3, 7].includes(this.props.legislationVersionID) && <i className=\"icon paper-yellow\" style={{ cursor: \"default\" }} />\n : <a className=\"icon book\" href={`/bill-details/${original.SessionCode}/${original.LegislationNumber}/text/${original.DocumentCode}`} target=\"_blank\" rel=\"noreferrer\" />\n : null\n }\n </div>\n }\n ];\n\n if (this.props.completedItems) {\n let docCodeColumn = {\n Header: 'Doc Code',\n sortable: true,\n filterable: false,\n accessor: \"DocumentCode\",\n width: 110,\n Cell: row =>\n <span>{row.value}</span>\n }\n\n columns.splice(1, 0, docCodeColumn)\n }\n\n if (!this.props.completedItems) {\n let publishDateColumn = {\n Header: <>Publish On <input\n id={'pd-checkbox-selectall'}\n type=\"checkbox\"\n className=\"checkbox\"\n checked={this.props.checkAll}\n onChange={this.props.toggleCheckAll}\n /></>,\n sortable: false,\n filterable: false,\n accessor: \"\",\n width: 135,\n Cell: ({ original, index }) => {\n const checked = this.props.checkedBills.find(b => b.LegislationTextID === original.LegislationTextID);\n return (<div>\n <span>{checked && this.props.customPublishDate ? moment(this.props.customPublishDate).format(\"MM/DD/YYYY\") : original.VersionDate ? moment(original.VersionDate).format(\"MM/DD/YYYY\") : \"\"}</span>\n {original.VersionDate && <input id=\"sr-publish\" type=\"checkbox\" style={{ float: 'right' }} disabled={((this.props.selectedBill && this.props.selectedBill.LegislationID === original.LegislationID) || (!original.CandidateDate && ![2, 3, 6, 7].includes(this.props.legislationVersionID))) ? true : false} onChange={(e) => this.props.checkBill(original, false, e)} defaultChecked={checked} />}\n </div>)\n }\n }\n\n columns.splice(4, 0, publishDateColumn)\n }\n\n const billListIDs = this.props.billList && this.props.billList.length ? this.props.billList.map(b => b.LegislationID) : null;\n return (\n <div>\n <div>\n <div style={{ display: 'flex', height: (this.props.billList && this.props.billList.length) || [9, 10].includes(this.props.legislationVersionID) ? '25px' : null }}>\n <div style={{ width: '90px' }}>\n {this.props.completedItems && ((this.props.billList && this.props.billList.length) || this.props.reprintsFiltered) ? <button type=\"button\" className=\"button\" onClick={this.props.filterReprints} style={{ left: '0px', position: 'absolute' }}>{this.props.reprintsFiltered ? 'Show All Legislation' : 'Only Show Reprints'}</button> : null}\n {!this.props.completedItems && [9, 10].includes(this.props.legislationVersionID) &&\n <div style={{ display: 'flex' }}>\n <LargeListSelect\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n placeholder={\"Add a bill...\"}\n options={[...this.props.sessionBillsList].filter(sb => billListIDs && billListIDs.length ? !billListIDs.includes(sb.LegislationID) : true)}\n onChange={(value) => { this.selectSessionBill(value) }}\n styles={{ container: provided => ({ ...provided, width: '130px', position: 'absolute' }) }}\n value={this.state.selectedSessionBill}\n />\n <div style={{ left: '135px', position: 'absolute' }}>\n {this.state.selectedSessionBill && this.props.billDataIsLoading === this.state.selectedSessionBill.LegislationNumber ?\n <span className=\"small-spinner\"></span> : this.props.legislationVersionID === 10 ? <span style={{ fontSize: '12px' }}>OR</span> : null\n }\n </div>\n {this.props.legislationVersionID === 10 &&\n <form className=\"inner-grid\" style={{ left: '160px', width: '180px', position: 'absolute', gridTemplateColumns: '1fr min-content' }}>\n <input\n placeholder='Add by LD Number'\n onChange={(e) => this.handleLdNumberSearchChange(e.target.value)}\n value={this.state.ldNumberSearch}\n />\n {this.state.ldNumberSearch && <button className=\"button\" type=\"submit\" disabled={this.state.searchingLDNumber} onClick={(e) => this.searchByLDNumber(e)}>{this.state.searchingLDNumber ? <div><span className=\"small-spinner\"></span></div> : 'Search'}</button>}\n </form>\n }\n </div>\n }\n {!this.props.completedItems && this.props.legislationVersionID === 3 &&\n <button type=\"button\" className=\"button\" disabled={this.props.isSaving || !this.props.enrolledPrintQueue || !this.props.enrolledPrintQueue.length} onClick={this.props.batchComplete} style={{ position: 'relative' }}>Print Parchment</button>\n }\n </div>\n <div style={{ width: \"65px\"}}/>\n <div style={{ width: '200px' }}>\n {!this.props.completedItems && this.props.legislationVersionID === 3 && ((this.props.billList && this.props.billList.length) || this.props.reprintsFiltered) &&\n <button type=\"button\" className=\"button\" disabled={this.props.isSaving || !this.props.enrolledPrintQueue || !this.props.enrolledPrintQueue.length || !this.props.checkedBills || !this.props.checkedBills.length} onClick={() => { this.props.batchComplete(); this.props.batchPublish(); }} style={{ position: 'relative' }}>{\"Print Parchment & \" + (this.props.completedItems ? 'Republish' : 'Publish')}</button>\n }\n </div>\n <div style={{ flex: '100 0 auto', width: '100px' }} />\n <div style={{ width: '135px' }} />\n <div style={{ width: '135px' }}>\n {((this.props.billList && this.props.billList.length) || this.props.reprintsFiltered) ? <button type=\"button\" className=\"button\" disabled={this.props.isSaving || !this.props.checkedBills || !this.props.checkedBills.length} onClick={this.props.batchPublish} style={{ width: '135px', position: 'absolute' }}>{this.props.completedItems ? 'Batch Republish' : 'Batch Publish'}</button> : null}\n {this.props.checkedBills && this.props.checkedBills.length ?\n <div className=\"flex-row flex-vertical-center flex-start\" style={{ right: '91px', marginRight: '135px', position: 'absolute', height: '35px' }} >\n <div className=\"toggle-switch\" onClick={this.props.togglePublishDatePreference}>\n <input id=\"sr-status-change\" disabled={this.props.isSaving} readOnly checked={!this.props.useCurrentPublishDates} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-status-change\" style={{ padding: '0.25em 5px', margin: '0px' }}>Use custom publish date</label>\n </div>\n :\n null\n }\n {this.props.checkedBills && this.props.checkedBills.length && !this.props.useCurrentPublishDates ?\n <div id=\"publish-date-datepicker\" style={{ marginRight: '330px', position: 'absolute' }}>\n <DatePicker\n isClearable\n selected={this.props.customPublishDate}\n onChange={this.props.handlePublishDateChange}\n />\n </div>\n :\n null\n }\n </div>\n <div style={{ width: '90px' }} />\n </div>\n </div>\n {\n this.props.reprintsFiltered && this.props.checkedBills && this.props.checkedBills.length && this.props.checkedBills.filter(b => !b.IsReprint).length ?\n <div style={{ display: 'flex' }}>\n <span className=\"input-feedback\" style={{ marginBottom: '0px' }}>You have checked legislation that are no longer in view as you are only viewing reprints.</span>\n </div>\n : null\n }\n <div>\n <ReactTable\n resizable={false}\n data={this.props.billList}\n loading={!this.props.isLoaded}\n ref={r => this.reactTable = r}\n columns={columns}\n minRows={1}\n defaultPageSize={20}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight react-table-hide-no-data\"\n />\n </div>\n </div>\n );\n }\n}\n\nexport default BillGridSection;","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\n\nclass SelectorSection extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n };\n\n this.handleSessionChange = this.handleSessionChange.bind(this);\n this.handleLegTypeChange = this.handleLegTypeChange.bind(this);\n this.handleLegDateChange = this.handleLegDateChange.bind(this);\n this.handleLegNumChange = this.handleLegNumChange.bind(this);\n }\n\n handleSessionChange(value) {\n this.props.onChange('selectedSession', value);\n }\n\n handleLegTypeChange(value) {\n this.props.onChange('selectedLegType', value);\n }\n\n handleLegDateChange(value) {\n this.props.onChange('selectedLegDate', value)\n }\n\n handleLegNumChange(value) {\n if (value === \"\") {\n value = \"clear\";\n }\n\n this.props.onChange('selectedLegNum', { value: value })\n }\n\n render() {\n return (\n <div className=\"inner-grid four\">\n <div>\n <Fields.Dropdown\n isDisabled={this.props.disable}\n value={this.props.selectedSession}\n options={this.props.sessionOptions}\n id=\"sessionDropdown\"\n onChange={this.handleSessionChange}\n placeholder=\"Select Session\"\n />\n </div>\n <div>\n <Fields.Dropdown\n isDisabled={this.props.disable}\n value={this.props.selectedLegType}\n options={this.props.legOptions}\n id=\"legDropdown\"\n onChange={this.handleLegTypeChange}\n placeholder=\"Select Legislation Version\"\n />\n </div>\n <div>\n <Fields.Dropdown\n value={this.props.selectedLegDate}\n placeholder=\"Filter by Date\"\n options={this.props.legDateOptions}\n id=\"billDateSearch\"\n onChange={(selectedOption, triggeredAction) => {\n if (triggeredAction.action === 'clear') {\n this.handleLegDateChange({ value: \"clear\" })\n } else {\n this.handleLegDateChange(selectedOption)\n }\n }}\n isDisabled={this.props.disable || this.props.selectedLegType === \"\"}\n isSearchable\n isClearable\n />\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 50px\" }}>\n <input\n value={this.props.selectedLegNum.value === \"clear\" ? \"\" : this.props.selectedLegNum.value}\n id=\"billNumSearch\"\n onChange={(e) => this.handleLegNumChange(e.target.value)}\n disabled={this.props.disable || this.props.selectedLegType === \"\"}\n style={{ height: \"100%\", width: \"100%\" }}\n placeholder=\"Filter by Bill Number\"\n />\n <a className='icon delete' style={{ marginTop: \"10px\", marginLeft: \"15px\" }} onClick={() => this.handleLegNumChange(\"clear\")}></a>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { session, bills } = state;\n return {\n session,\n bills\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, billActionCreators), dispatch)\n }\n }\n)(SelectorSection)","import React from 'react';\nimport renderHTML from 'react-render-html';\n\nclass PreviewSection extends React.Component {\n render() {\n const { billVersionRef, selectedLegType, editorContent, selectedBill, error } = this.props;\n const version = billVersionRef.find(version => version.LegislationVersionID === selectedLegType.LegislationVersionID);\n // A list of versions that get vertical text running down the side of the document\n const verticalTextVersionTypes = ['Substitute', 'Introduced', 'Engrossed', 'Enrolled'];\n\n return (\n <div className=\"inner-grid two-col-sidebar version-print-preview\" style={{marginBottom: \"45px\"}}>\n {error ?\n <div className=\"message-error\">{error}</div>\n :\n <React.Fragment>\n <div>\n {editorContent ? renderHTML(editorContent.replaceAll(\" \", \"\")) : ''}\n </div>\n {verticalTextVersionTypes.find(type => type === version.Name) &&\n <div className=\"status-text\">\n <div className=\"vertical-text-lg\">{version.Name}</div>\n <div className=\"vertical-text-sm\"><span>{selectedBill.LegislationNumber}{version ? version.Suffix : ''}</span></div>\n </div>\n }\n </React.Fragment>\n }\n </div>\n );\n }\n}\n\nexport default PreviewSection;","import React from 'react';\nimport ReactTable from \"react-table\";\n\nclass TextList extends React.Component {\n\n render() {\n let nonAmendments = [];\n this.props.originalBillText.forEach((text, index) => {\n if (![\"Amendment\", \"Conference Report\"].includes(text.LegislationVersion) && (text.LegislationVersion !== \"Gov Recommendation\" || this.props.selectedLegType.Name === \"Gov Recommendation\")) {\n nonAmendments.push({ ...text, originalIndex: index })\n }\n });\n return (\n <div>\n <ReactTable\n data={nonAmendments}\n showPageSizeOptions={false}\n showPagination={false}\n showPageJump={false}\n pageSize={nonAmendments.length}\n getTrProps={(_state, rowInfo) => {\n const original = rowInfo ? rowInfo.original : null;\n return {\n style: {\n background: original && original.originalIndex === this.props.selectedBillTextIndex ? '#89ff89' : '',\n cursor: 'pointer'\n },\n onClick: () => {\n this.props.selectBillIndex(original.originalIndex);\n }\n }\n }}\n noDataText=\"\"\n columns={[\n {\n id: \"checkbox\",\n className: \"checkbox-column\",\n Cell: ({ original }) => this.props.changingBillIndex !== false && this.props.changingBillIndex === original.originalIndex ? <span className=\"small-spinner\"></span> : <span className={original.originalIndex === this.props.selectedBillTextIndex ? \"icon checkmark\" : \"\"}></span>,\n sortable: false,\n filterable: false,\n width: 45\n },\n {\n Cell: ({ original }) => <span>{`${original.DocumentCode} ${!original.IsActive ? \"INACTIVE\" : ''} ${!original.IsPublic ? \"NOT PUBLISHED\" : ''}`}</span>\n }\n ]}\n className=\"-striped -highlight\"\n />\n </div>\n );\n\n }\n}\nexport default TextList;","import { createBrowserHistory } from \"history\";\nimport { publicRequest } from \"../services/request.service\";\n\nconst previousLocationRequest = \"REQUEST_PREVIOUS_LOCATION\";\nconst changeSessionRequest = \"CHANGE_SESSION\";\nconst makeToastRequest = \"MAKE_TOAST\";\nconst toggleOverlayRequest = \"TOGGLE_OVERLAY\"\nconst fileSuccess = \"FILE_SUCCESS\";\nconst fileFailure = \"FILE_FAILURE\";\nconst reloadSessionSelectorChange = \"RELOAD_SESSION_SELECTOR_CHANGE\";\n\nconst history = createBrowserHistory;\n\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst initialState = {\n currentLocation: history.location,\n previousLocation: '',\n session: '',\n toasts: [],\n hideSessionSelectorPaths: [\n '/profile',\n '/developers',\n 'change-password',\n 'passwordreset',\n '/forgot-password',\n '/register-account',\n '/committee-management',\n '/session-management',\n '/docket-management',\n '/calendar-management',\n '/minutes-management',\n '/journal-management',\n '/communications-management',\n '/configurations-management',\n '/version-management',\n '/bill-search-report',\n '/bill-details',\n '/vote-details',\n '/vote-management',\n '/vote-search',\n '/member-management',\n '/print-management',\n '/pdf',\n '\\/calendar\\/[0-9]+',\n '/member-legislation',\n 'notifications',\n '/apiregistration'\n ],\n showOverlay: false\n};\n\nexport const navActionCreators = {\n getPreviousLocation: (previousLocation) => ({\n type: previousLocationRequest,\n previousLocation: previousLocation\n }),\n\n changeSession: (session) => ({\n type: changeSessionRequest,\n session: session\n }),\n\n makeToast: (message) => ({\n type: makeToastRequest,\n toasts: message\n }),\n\n toggleOverlay: (overlay) => ({\n type: toggleOverlayRequest,\n showOverlay: overlay\n }),\n\n receiveFile: (result) => ({\n type: fileSuccess,\n file: result\n }),\n\n fileError: (message) => ({\n type: fileFailure,\n fileError: message\n }),\n\n getFile(url) {\n return dispatch => {\n let config = {\n method: 'GET',\n headers: { \"WebAPIKey\": process.env.REACT_APP_API_KEY }\n }\n return fetch(url, config)\n .then(response => {\n if (response.status === 204) {\n dispatch(navActionCreators.fileError('No Content'));\n return Promise.reject('No Content');\n } else if (response.status > 399) {\n return (response.text()\n .then(text => {\n dispatch(navActionCreators.fileError(text));\n return Promise.reject(text)\n })\n )\n }\n return response.text();\n })\n .then((data) => {\n dispatch(navActionCreators.receiveFile(data));\n }).catch(err => {\n console.log(err);\n return Promise.reject(err);\n });\n }\n },\n\n reloadSessionSelector: (reload) => ({\n type: reloadSessionSelectorChange,\n reloadSessionSelector: reload\n })\n};\n\nexport const reducer = (state, action) => {\n state = state || initialState;\n switch (action.type) {\n case previousLocationRequest:\n return Object.assign({}, state, {\n previousLocation: action.previousLocation\n });\n case changeSessionRequest:\n return Object.assign({}, state, {\n session: action.session\n });\n case makeToastRequest:\n return Object.assign({}, state, {\n toasts: action.toasts\n });\n case toggleOverlayRequest:\n return Object.assign({}, state, {\n showOverlay: action.showOverlay\n });\n case fileSuccess:\n return Object.assign({}, state, {\n file: action.file\n });\n case fileFailure:\n return Object.assign({}, state, {\n fileError: action.fileError\n });\n case reloadSessionSelectorChange:\n return Object.assign({}, state, {\n reloadSessionSelector: action.reloadSessionSelector\n });\n default:\n return state;\n }\n};\n","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst getDefaultSessionAsyncRequest = 'GET_DEFAULT_SESSION_ASYNC_REQUEST';\nconst getDefaultSessionAsyncSuccess = 'GET_DEFAULT_SESSION_ASYNC_SUCCESS';\nconst getDefaultSessionAsyncFailure = 'GET_DEFAULT_SESSION_ASYNC_FAILURE';\n\nconst getSessionListRequest = 'GET_SESSION_LIST_REQUEST';\nconst getSessionListSuccess = 'GET_SESSION_LIST_SUCCESS';\nconst getSessionListFailure = 'GET_SESSION_LIST_FAILURE';\n\nconst getSessionShallowListSuccess = 'GET_SESSION_SHALLOW_LIST_SUCCESS';\nconst getSessionShallowListFailure = 'GET_SESSION_SHALLOW_LIST_FAILURE';\n\nconst getDefaultSessionSuccess = 'GET_DEFAULT_SESSION_SUCCESS';\n\nconst getSessionByIdRequest = 'GET_SESSION_BY_ID_REQUEST';\nconst getSessionByIdSuccess = 'GET_SESSION_BY_ID_SUCCESS';\nconst getSessionByIdFailure = 'GET_SESSION_BY_ID_FAILURE';\n\nconst getSessionEventTypesRequest = 'GET_SESSION_EVENT_TYPES_REQUEST';\nconst getSessionEventTypesSuccess = 'GET_SESSION_EVENT_TYPES_SUCCESS';\nconst getSessionEventTypesFailure = 'GET_SESSION_EVENT_TYPES_FAILURE';\n\nconst editSessionRequest = 'EDIT_SESSION_REQUEST';\nconst editSessionSuccess = 'EDIT_SESSION_SUCCESS';\nconst editSessionFailure = 'EDIT_SESSION_FAILURE';\n\nconst createSessionRequest = 'CREATE_SESSION_REQUEST';\nconst createSessionSuccess = 'CREATE_SESSION_SUCCESS';\nconst createSessionFailure = 'CREATE_SESSION_FAILURE';\n\nconst getSessionByCodeRequest = 'GET_SESSION_BY_CODE_REQUEST';\n\nconst initialState = {\n defaultSession: [], // sets default session from the session list\n defaultSessionAsync: [], // sets default session from a call to API to find the default\n sessionList: [],\n sessionListError: '',\n sessionShallowList: [],\n sessionEventTypes: [],\n sessionEvents: [],\n selectedSession: {\n SessionCode: '',\n DisplayName: '',\n SessionID: '',\n SessionYear: '',\n SessionType: { value: '', label: '' },\n IsDefault: false,\n SessionStart: null,\n BillCrossover: null,\n PrefileStart: null,\n BillCutoff: null,\n Adjournment: null,\n Reconvene: null,\n SessionEvents: []\n },\n getSessionError: '',\n saveSession: '',\n saveSessionError: '',\n createSession: '',\n createSessionError: ''\n};\n\nexport const sessionActionCreators = {\n\n requestSessionEventTypes: () => ({\n type: getSessionEventTypesRequest,\n sessionEventTypes: [],\n isFetching: true\n }),\n\n receiveSessionEventTypes: (responseObj) => ({\n type: getSessionEventTypesSuccess,\n isFetching: false,\n sessionEventTypes: responseObj\n }),\n\n sessionEventTypesError: (message) => ({\n type: getSessionEventTypesFailure,\n isFetching: false,\n sessionEventTypes: [],\n sessionEventTypesError: message\n }),\n\n getSessionEventTypes: () => {\n return dispatch => {\n dispatch(sessionActionCreators.requestSessionEventTypes());\n\n return publicRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/GetSessionEventTypeReferencesAsync/', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(sessionActionCreators.sessionEventTypesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(sessionActionCreators.receiveSessionEventTypes(result[1].SessionEventTypes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(sessionActionCreators.sessionEventTypesError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n requestDefaultSessionAsync: () => ({\n type: getDefaultSessionAsyncRequest,\n defaultSessionAsync: [],\n isFetching: true\n }),\n\n receiveDefaultSessionAsync: (responseObj) => ({\n type: getDefaultSessionAsyncSuccess,\n isFetching: false,\n defaultSessionAsync: responseObj\n }),\n\n defaultSessionAsyncError: (message) => ({\n type: getDefaultSessionAsyncFailure,\n isFetching: false,\n defaultSessionAsync: [],\n defaultSessionAsyncError: message\n }),\n\n getDefaultSessionAsync: () => {\n return dispatch => {\n dispatch(sessionActionCreators.requestDefaultSessionAsync());\n\n return publicRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/getDefaultSessionAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(sessionActionCreators.defaultSessionAsyncError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n let session = result[1];\n dispatch(sessionActionCreators.receiveDefaultSessionAsync(session))\n } else if (result[0] === NO_CONTENT) {\n dispatch(sessionActionCreators.defaultSessionAsyncError('No Content'))\n return Promise.reject('No Content')\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveDefaultSession: (sessiondata) => ({\n type: getDefaultSessionSuccess,\n defaultSession: sessiondata\n }),\n\n setDefaultSession: (defaultSessionObject) => {\n return dispatch => {\n dispatch(sessionActionCreators.receiveDefaultSession(defaultSessionObject));\n }\n },\n\n requestSessionList: () => ({\n type: getSessionListRequest,\n sessionList: [],\n isFetching: true\n }),\n\n receiveSessionList: (sessiondata) => ({\n type: getSessionListSuccess,\n isFetching: false,\n sessionList: sessiondata\n }),\n\n sessionListError: (message) => ({\n type: getSessionListFailure,\n isFetching: false,\n sessionList: [],\n sessionListError: message\n }),\n\n getSessionList: (year = '') => {\n return dispatch => {\n dispatch(sessionActionCreators.requestSessionList());\n let params = ''\n if (year) params += 'year=' + year\n\n return publicRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/GetSessionListAsync/?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(sessionActionCreators.sessionListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(sessionActionCreators.receiveSessionList(result[1].Sessions))\n } else if (result[0] === NO_CONTENT) {\n dispatch(sessionActionCreators.receiveSessionList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveSessionShallowList: (sessiondata) => ({\n type: getSessionShallowListSuccess,\n sessionShallowList: sessiondata\n }),\n\n sessionShallowListError: (message) => ({\n type: getSessionShallowListFailure,\n sessionShallowList: [],\n sessionShallowListMessage: message\n }),\n\n getSessionShallowList: (params) => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/GetSessionShallowListAsync/?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(sessionActionCreators.sessionShallowListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n let session = result[1];\n dispatch(sessionActionCreators.receiveSessionShallowList(session.Sessions))\n } else if (result[0] === NO_CONTENT) {\n dispatch(sessionActionCreators.sessionShallowListError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n requestSessionById: () => ({\n type: getSessionByIdRequest,\n selectedSession: '',\n isFetching: true\n }),\n\n receiveSessionById: (sessiondata, sessionEvents) => ({\n type: getSessionByIdSuccess,\n isFetching: false,\n selectedSession: sessiondata,\n sessionEvents: sessionEvents\n }),\n\n sessionByIdError: (message) => ({\n type: getSessionByIdFailure,\n isFetching: false,\n selectedSession: '',\n message\n }),\n\n getSessionById: (params, partner) => {\n return dispatch => {\n dispatch(sessionActionCreators.requestSessionById());\n let request;\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/GetPartnerSessionByIdAsync/', 'GET', '', '', params) \n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/GetSessionByIdAsync/', 'GET', '', '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(sessionActionCreators.sessionByIdError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n const sessionData = result[1].Sessions[0];\n dispatch(sessionActionCreators.receiveSessionById(sessionData, sessionData.SessionEvents))\n } else if (result[0] === NO_CONTENT) {\n dispatch(sessionActionCreators.sessionByIdError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n getSessionByCode: (params) => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/GetSessionByCodeAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch({\n type: getSessionByCodeRequest,\n getSessionError: result[1]\n });\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch({\n type: getSessionByCodeRequest,\n selectedSession: result[1].Sessions[0]\n });\n } else if (result[0] === NO_CONTENT) {\n dispatch({\n type: getSessionByCodeRequest,\n getSessionError: \"No Content\"\n });\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n setSelectedSession: (sessionObject, sessionEvents) => {\n return dispatch => {\n dispatch(sessionActionCreators.receiveSessionById(sessionObject, sessionEvents));\n }\n },\n\n receiveEditSession: (res) => ({\n type: editSessionSuccess,\n isFetching: false,\n saveSession: res\n }),\n editSessionError: (res) => ({\n type: editSessionFailure,\n isFetching: false,\n saveSessionError: res\n }),\n editSession: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/SaveSessionAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(sessionActionCreators.editSessionError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(sessionActionCreators.receiveEditSession(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(sessionActionCreators.editSessionError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCreateSession: (res) => ({\n type: createSessionSuccess,\n isFetching: false,\n createSession: res\n }),\n createSessionError: (res) => ({\n type: createSessionFailure,\n isFetching: false,\n createSessionError: res\n }),\n createSession: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_SESSION_API_URL) + '/Session/api/CreateSessionAsync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(sessionActionCreators.createSessionError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(sessionActionCreators.receiveCreateSession(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(sessionActionCreators.createSessionError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n }\n};\n\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n case getDefaultSessionAsyncRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case getDefaultSessionAsyncSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n defaultSessionAsync: action.defaultSessionAsync,\n defaultSessionAsyncMessage: ''\n })\n case getDefaultSessionAsyncFailure:\n return Object.assign({}, state, {\n isFetching: false,\n defaultSessionAsyncError: action.defaultSessionAsyncMessage\n })\n case getSessionEventTypesRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case getSessionEventTypesSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n sessionEventTypes: action.sessionEventTypes,\n sessionEventTypesMessage: ''\n })\n case getSessionEventTypesFailure:\n return Object.assign({}, state, {\n isFetching: false,\n sessionEventTypesMessage: action.sessionEventTypesMessage\n })\n case getSessionListRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case getSessionListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n sessionList: action.sessionList,\n sessionListError: ''\n })\n case getSessionListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n sessionListError: action.sessionListError\n })\n case getSessionShallowListSuccess:\n return Object.assign({}, state, {\n sessionShallowList: action.sessionShallowList,\n sessionShallowListMessage: ''\n })\n case getSessionShallowListFailure:\n return Object.assign({}, state, {\n sessionShallowListMessage: action.sessionShallowListMessage\n })\n case getDefaultSessionSuccess:\n return Object.assign({}, state, {\n defaultSession: action.defaultSession\n })\n case getSessionByIdRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case getSessionByIdSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n selectedSession: action.selectedSession,\n sessionEvents: action.sessionEvents,\n errorMessage: ''\n })\n case getSessionByIdFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n })\n case editSessionRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case editSessionSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n saveSession: action.saveSession,\n saveSessionError: ''\n })\n case editSessionFailure:\n return Object.assign({}, state, {\n isFetching: false,\n saveSessionError: action.saveSessionError\n })\n case createSessionRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case createSessionSuccess:\n return Object.assign({}, state, {\n createSession: action.createSession,\n createSessionError: ''\n })\n case createSessionFailure:\n return Object.assign({}, state, {\n createSessionError: action.createSessionError\n })\n case getSessionByCodeRequest:\n return Object.assign({}, state, {\n selectedSession: action.selectedSession || state.selectedSession,\n getSessionError: action.getSessionError || ''\n });\n default:\n return state\n }\n};","import React from 'react';\nimport classnames from 'classnames';\nimport Select, { createFilter } from 'react-select';\nimport DatePicker from 'react-datepicker';\nimport { FixedSizeList as List } from \"react-window\";\n\nconst InputFeedback = ({ error }) =>\n error ? (\n <div className=\"input-feedback\">{error}</div>\n ) : null;\n\nconst Label = ({\n error,\n className,\n children,\n ...props\n}) => {\n return (\n <label className=\"label\" {...props}>\n {children}\n </label>\n );\n};\n\n\n//ADVANCED SEARCH OPTIONS\n\nexport const patronTypeOptions = [\n { value: '1', label: 'Chief Patron' },\n { value: '2', label: 'Co-Patron' },\n { value: '3', label: 'Other' }\n];\n\nexport const searchTypeOptions = [\n { value: 'all', label: 'All' },\n { value: 'billNumber', label: 'Bill Number' },\n { value: 'catchline', label: 'Catchline' }\n];\n\nexport const billActionsOptions = [\n { value: 'introduced', label: 'Introduced' },\n { value: 'passedHouse', label: 'Passed House' },\n { value: 'passedSenate', label: 'Passed Senate' },\n { value: 'passedBoth', label: 'Passed Both' },\n { value: 'approvedEnacted', label: 'Approved/Enacted' }\n];\n\nexport const originatingChamberOptions = [\n { value: 'H', label: 'House' },\n { value: 'S', label: 'Senate' }\n];\n\n//EDIT/CREATE SESSION OPTIONS\n\nexport const sessionOptions = [\n { value: 'Current Biennium', label: 'Current Biennium' },\n { value: 'All Sessions', label: 'All Sessions' }\n];\n\nexport const districtOptions = [\n { value: 'District 1', label: 'District 1' },\n { value: 'District 2', label: 'District 2' }\n];\n\nexport const activeSessionOptions = [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'none', label: 'None' }\n];\n\nexport const sessionTypeOptions = [\n { value: 1, label: 'Regular' },\n { value: 2, label: 'Special' }\n];\n\n//EDIT/CREATE USER OPTIONS\n\nexport const orgOptions = [\n { value: 'OrgName1', label: 'OrgName1' },\n { value: 'OrgName2', label: 'OrgName2' },\n { value: 'OrgName4', label: 'OrgName4' },\n { value: 'OrgName5', label: 'OrgName5' },\n { value: 'OrgName6', label: 'OrgName6' }\n];\n\n\nexport const stateOptions = [\n {\n \"value\": \"Alabama\",\n \"label\": \"AL\"\n },\n {\n \"value\": \"Alaska\",\n \"label\": \"AK\"\n },\n {\n \"value\": \"American Samoa\",\n \"label\": \"AS\"\n },\n {\n \"value\": \"Arizona\",\n \"label\": \"AZ\"\n },\n {\n \"value\": \"Arkansas\",\n \"label\": \"AR\"\n },\n {\n \"value\": \"California\",\n \"label\": \"CA\"\n },\n {\n \"value\": \"Colorado\",\n \"label\": \"CO\"\n },\n {\n \"value\": \"Connecticut\",\n \"label\": \"CT\"\n },\n {\n \"value\": \"Delaware\",\n \"label\": \"DE\"\n },\n {\n \"value\": \"District Of Columbia\",\n \"label\": \"DC\"\n },\n {\n \"value\": \"Federated States Of Micronesia\",\n \"label\": \"FM\"\n },\n {\n \"value\": \"Florida\",\n \"label\": \"FL\"\n },\n {\n \"value\": \"Georgia\",\n \"label\": \"GA\"\n },\n {\n \"value\": \"Guam\",\n \"label\": \"GU\"\n },\n {\n \"value\": \"Hawaii\",\n \"label\": \"HI\"\n },\n {\n \"value\": \"Idaho\",\n \"label\": \"ID\"\n },\n {\n \"value\": \"Illinois\",\n \"label\": \"IL\"\n },\n {\n \"value\": \"Indiana\",\n \"label\": \"IN\"\n },\n {\n \"value\": \"Iowa\",\n \"label\": \"IA\"\n },\n {\n \"value\": \"Kansas\",\n \"label\": \"KS\"\n },\n {\n \"value\": \"Kentucky\",\n \"label\": \"KY\"\n },\n {\n \"value\": \"Louisiana\",\n \"label\": \"LA\"\n },\n {\n \"value\": \"Maine\",\n \"label\": \"ME\"\n },\n {\n \"value\": \"Marshall Islands\",\n \"label\": \"MH\"\n },\n {\n \"value\": \"Maryland\",\n \"label\": \"MD\"\n },\n {\n \"value\": \"Massachusetts\",\n \"label\": \"MA\"\n },\n {\n \"value\": \"Michigan\",\n \"label\": \"MI\"\n },\n {\n \"value\": \"Minnesota\",\n \"label\": \"MN\"\n },\n {\n \"value\": \"Mississippi\",\n \"label\": \"MS\"\n },\n {\n \"value\": \"Missouri\",\n \"label\": \"MO\"\n },\n {\n \"value\": \"Montana\",\n \"label\": \"MT\"\n },\n {\n \"value\": \"Nebraska\",\n \"label\": \"NE\"\n },\n {\n \"value\": \"Nevada\",\n \"label\": \"NV\"\n },\n {\n \"value\": \"New Hampshire\",\n \"label\": \"NH\"\n },\n {\n \"value\": \"New Jersey\",\n \"label\": \"NJ\"\n },\n {\n \"value\": \"New Mexico\",\n \"label\": \"NM\"\n },\n {\n \"value\": \"New York\",\n \"label\": \"NY\"\n },\n {\n \"value\": \"North Carolina\",\n \"label\": \"NC\"\n },\n {\n \"value\": \"North Dakota\",\n \"label\": \"ND\"\n },\n {\n \"value\": \"Northern Mariana Islands\",\n \"label\": \"MP\"\n },\n {\n \"value\": \"Ohio\",\n \"label\": \"OH\"\n },\n {\n \"value\": \"Oklahoma\",\n \"label\": \"OK\"\n },\n {\n \"value\": \"Oregon\",\n \"label\": \"OR\"\n },\n {\n \"value\": \"Palau\",\n \"label\": \"PW\"\n },\n {\n \"value\": \"Pennsylvania\",\n \"label\": \"PA\"\n },\n {\n \"value\": \"Puerto Rico\",\n \"label\": \"PR\"\n },\n {\n \"value\": \"Rhode Island\",\n \"label\": \"RI\"\n },\n {\n \"value\": \"South Carolina\",\n \"label\": \"SC\"\n },\n {\n \"value\": \"South Dakota\",\n \"label\": \"SD\"\n },\n {\n \"value\": \"Tennessee\",\n \"label\": \"TN\"\n },\n {\n \"value\": \"Texas\",\n \"label\": \"TX\"\n },\n {\n \"value\": \"Utah\",\n \"label\": \"UT\"\n },\n {\n \"value\": \"Vermont\",\n \"label\": \"VT\"\n },\n {\n \"value\": \"Virgin Islands\",\n \"label\": \"VI\"\n },\n {\n \"value\": \"Virginia\",\n \"label\": \"VA\"\n },\n {\n \"value\": \"Washington\",\n \"label\": \"WA\"\n },\n {\n \"value\": \"West Virginia\",\n \"label\": \"WV\"\n },\n {\n \"value\": \"Wisconsin\",\n \"label\": \"WI\"\n },\n {\n \"value\": \"Wyoming\",\n \"label\": \"WY\"\n }\n]\n\n// Styles for select dropdowns to make them same size as other fields\nconst customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n menu: (base) => ({\n ...base,\n zIndex: '102' //show over fixed floating save bars\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n}\n\nexport class CustomSelect extends React.Component {\n handleChange = value => {\n this.props.onChange(this.props.id, value);\n };\n handleBlur = () => {\n this.props.onBlur(this.props.id, true);\n };\n\n render() {\n return (\n <div>\n <label>{this.props.label}</label>\n <Select\n className={this.props.className}\n placeholder={this.props.placeholder}\n styles={customStyles}\n options={this.props.options}\n isMulti={this.props.isMulti}\n isDisabled={this.props.isDisabled}\n onChange={this.handleChange}\n onBlur={this.handleBlur}\n value={this.props.value}\n filterOption={this.props.filterOption}\n />\n </div>\n );\n }\n}\n\nexport class CustomDatepicker extends React.Component {\n handleChange = value => {\n this.props.onChange(this.props.id, value);\n };\n handleBlur = () => {\n this.props.onBlur(this.props.id, true);\n };\n\n render() {\n return (\n <div>\n <label>{this.props.label}</label>\n <DatePicker\n id={this.props.id}\n className={this.props.className}\n selected={this.props.value}\n onChange={this.handleChange}\n disabled={this.props.disabled}\n placeholderText={this.props.placeholderText}\n popperPlacement={this.props.popperPlacement}\n withPortal={this.props.withPortal}\n filterDate={this.props.filterDate}\n />\n </div>\n );\n }\n}\n\nclass MenuList extends React.Component {\n render() {\n const { options, children, maxHeight, getValue } = this.props;\n const [value] = getValue();\n const height = this.props.height || 35;\n const initialOffset = options.indexOf(value) * height;\n return (\n <List\n height={maxHeight}\n itemCount={children.length}\n itemSize={height}\n initialScrollOffset={initialOffset}\n >\n {({ index, style }) => <div style={style}>{children[index]}</div>}\n </List>\n );\n }\n}\n\n//React-select does not work well with large lists greater than 1000 items. This component utilizes react-window to only render a portion of the list so perfomance is not degraded.\nexport class LargeListSelect extends React.Component {\n render() {\n return (<Select\n {...this.props}\n filterOption={createFilter({ ignoreCase: true, ignoreAccents: false, matchFrom: 'any', stringify: option => `${option.label}`, trim: true, })}\n components={{ MenuList }}\n />)\n }\n}\n\nexport const Dropdown = ({\n options,\n styles,\n value,\n onChange,\n multi,\n onBlur,\n ...props\n}) => {\n return (\n <Select\n options={options}\n styles={customStyles}\n multi={multi}\n onChange={onChange}\n onBlur={onBlur}\n value={value}\n {...props}\n />\n );\n};\n\nexport const TextInput = ({\n type,\n id,\n label,\n error,\n value,\n onChange,\n className,\n defaultValue,\n ...props\n}) => {\n return (\n <div>\n <Label htmlFor={id} error={error}>\n {label}\n </Label>\n <input\n id={id}\n className={className}\n type={type}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n {...props}\n />\n <InputFeedback error={error} />\n </div>\n );\n};\n\nexport const TextArea = ({\n id,\n label,\n error,\n value,\n onChange,\n className,\n ...props\n}) => {\n return (\n <div>\n <Label htmlFor={id} error={error}>\n {label}\n </Label>\n <textarea\n id={id}\n className={className}\n value={value}\n onChange={onChange}\n {...props}\n />\n <InputFeedback error={error} />\n </div>\n );\n};\n\nexport const CheckboxInput = ({\n type,\n id,\n label,\n error,\n value,\n onChange,\n className,\n ...props\n}) => {\n const classes = classnames(\n 'input-group',\n {\n 'animated shake error': !!error,\n },\n className\n );\n return (\n <div className={classes}>\n <Label htmlFor={id} error={error}>\n {label}\n </Label>\n <label className=\"checkbox-label\">\n <input\n id={id}\n className=\"formCheckbox\"\n type={type}\n checked={value}\n value={value}\n onChange={onChange}\n {...props}\n />\n <span>\n {value ? 'Yes' : 'No'}\n </span>\n </label>\n <InputFeedback error={error} />\n </div>\n );\n};","tinymce.PluginManager.add('rightmargin', function (editor) {\n const width = '10px' \n const container = document.createElement('div');\n editor.on('init', _e => { \n const root = editor.contentDocument.activeElement; \n root.style.marginRight = width; \n editor.contentAreaContainer.appendChild(container);\n });\n})","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst legislationIdsListRequest = \"GET_LEGISLATION_IDS_LIST_REQUEST\";\nconst legislationIdsListSuccess = \"GET_LEGISLATION_IDS_LIST_SUCCESS\";\nconst legislationIdsListFailure = \"GET_LEGISLATION_IDS_LIST_FAILURE\";\n\nconst billListByIdsRequest = \"GET_BILL_LIST_BY_IDS_REQUEST\";\nconst billListByIdsSuccess = \"GET_BILL_LIST_BY_IDS_SUCCESS\";\nconst billListByIdsFailure = \"GET_BILL_LIST_BY_IDS_FAILURE\";\n\nconst legislationTextsHitCountsRequest = \"GET_LEGISLATION_TEXTS_HIT_COUNTS_REQUEST\";\nconst legislationTextsHitCountsSuccess = \"GET_LEGISLATION_TEXTS_HIT_COUNTS_SUCCESS\";\nconst legislationTextsHitCountsFailure = \"GET_LEGISLATION_TEXTS_HIT_COUNTS_FAILURE\";\n\nconst billListRequest = \"GET_BILL_LIST_REQUEST\";\nconst billListSuccess = \"GET_BILL_LIST_SUCCESS\";\nconst billListFailure = \"GET_BILL_LIST_FAILURE\";\n\nconst mostFrequentBillListRequest = \"GET_MOST_FREQUENT_BILL_LIST_REQUEST\";\nconst mostFrequentBillListSuccess = \"GET_MOST_FREQUENT_BILL_LIST_SUCCESS\";\nconst mostFrequentBillListFailure = \"GET_MOST_FREQUENT_BILL_LIST_FAILURE\";\n\nconst billSummaryRequest = \"GET_BILL_SUMMARY_REQUEST\";\nconst billSummarySuccess = \"GET_BILL_SUMMARY_SUCCESS\";\nconst billSummaryFailure = \"GET_BILL_SUMMARY_FAILURE\";\n\nconst saveBillSummaryRequest = \"SAVE_BILL_SUMMARY_REQUEST\";\nconst saveBillSummarySuccess = \"SAVE_BILL_SUMMARY_SUCCESS\";\nconst saveBillSummaryFailure = \"SAVE_BILL_SUMMARY_FAILURE\";\n\nconst billHistorySuccess = \"GET_BILL_HISTORY_SUCCESS\";\nconst billHistoryFailure = \"GET_BILL_HISTORY_FAILURE\";\n\nconst billVersionRequest = \"GET_BILL_VERSION_REQUEST\";\nconst billVersionSuccess = \"GET_BILL_VERSION_SUCCESS\";\nconst billVersionFailure = \"GET_BILL_VERSION_FAILURE\";\n\nconst billNumbersSuccess = \"GET_BILL_NUMBERS_SUCCESS\";\nconst billNumbersFailure = \"GET_BILL_NUMBERS_FAILURE\";\n\nconst legislationClassesSuccess = \"GET_LEGISLATION_CLASSES_SUCCESS\";\nconst legislationClassesFailure = \"GET_LEGISLATION_CLASSES_FAILURE\";\n\nconst billStatusRefSuccess = \"GET_BILL_STATUS_REF_SUCCESS\";\nconst billStatusRefFailure = \"GET_BILL_STATUS_REF_FAILURE\";\n\nconst billStatusCategoryRefSuccess = \"GET_BILL_STATUS_CATEGORY_REF_SUCCESS\";\nconst billStatusCategoryRefFailure = \"GET_BILL_STATUS_CATEGORY_REF_FAILURE\";\n\nconst billEventRefSuccess = \"GET_BILL_EVENT_REF_SUCCESS\";\nconst billEventRefFailure = \"GET_BILL_EVENT_REF_FAILURE\";\n\nconst legislationEventsByIdSuccess = \"GET_LEGISLATION_EVENTS_BY_ID_SUCCESS\";\nconst legislationEventsByIdFailure = \"GET_LEGISLATION_EVENTS_BY_ID_FAILURE\";\n\nconst billTextSuccess = \"GET_BILL_TEXT_SUCCESS\";\nconst billTextFailure = \"GET_BILL_TEXT_FAILURE\";\n\nconst ihodAmendmentSaveSuccess = \"IHOD_AMENDMENT_SAVE_SUCCESS\";\nconst ihodAmendmentSaveFailure = \"IHOD_AMENDMENT_SAVE_FAILURE\";\n\nconst billVersionRefSuccess = \"GET_BILL_VERSION_REF_SUCCESS\";\nconst billVersionRefFailure = \"GET_BILL_VERSION_REF_FAILURE\";\n\nconst sponsorRefListSuccess = \"GET_SPONSOR_REF_LIST_SUCCESS\";\nconst sponsorRefListFailure = \"GET_SPONSOR_REF_LIST_FAILURE\";\n\nconst billSummaryRefSuccess = \"GET_BILL_SUMMARY_REF_SUCCESS\";\nconst billSummaryRefFailure = \"GET_BILL_SUMMARY_REF_FAILURE\";\n\nconst batchPublishSuccess = \"GET_BATCH_PUBLISH_SUCCESS\";\nconst batchPublishFailure = \"GET_BATCH_PUBLISH_FAILURE\";\n\nconst batchCompleteSuccess = \"GET_BATCH_COMPLETE_SUCCESS\";\nconst batchCompleteFailure = \"GET_BATCH_COMPLETE_FAILURE\";\n\nconst billTextSaveSuccess = \"GET_BILL_TEXT_SAVE_SUCCESS\";\nconst billTextSaveFailure = \"GET_BILL_TEXT_SAVE_FAILURE\";\n\nconst jsonHeadersSuccess = \"GET_JSON_HEADERS_SUCCESS\";\nconst jsonHeadersFailure = \"GET_JSON_HEADERS_FAILURE\";\n\nconst pdfPreviewSuccess = \"GET_VERSION_PREVIEW_SUCCESS\";\nconst pdfPreviewFailure = \"GET_VERSION_PREVIEW_FAILURE\";\n\nconst previewPdfFileSuccess = \"PREVIEW_PDF_FILE_SUCCESS\";\nconst previewPdfFileFailure = \"PREVIEW_PDF_FILE_FAILURE\";\n\nconst htmlPreviewSuccess = \"GET_HTML_PREVIEW_SUCCESS\";\nconst htmlPreviewFailure = \"GET_HTML_PREVIEW_FAILURE\";\n\nconst htmlFilePreviewSuccess = \"GET_HTML_FILE_PREVIEW_SUCCESS\";\nconst htmlFilePreviewFailure = \"GET_HTML_FILE_PREVIEW_FAILURE\";\n\nconst billSaveSuccess = \"GET_BILL_SAVE_SUCCESS\";\nconst billSaveFailure = \"GET_BILL_SAVE_FAILURE\";\n\nconst billFileGenSuccess = \"GET_BILL_FILE_GEN_SUCCESS\";\nconst billFileGenFailure = \"GET_BILL_FILE_GEN_FAILURE\";\n\nconst batchBillFileGenSuccess = \"GET_BATCH_BILL_FILE_GEN_SUCCESS\";\nconst batchBillFileGenFailure = \"GET_BATCH_BILL_FILE_GEN_FAILURE\";\n\nconst billManagementListSuccess = \"GET_BILL_MANAGEMENT_LIST_SUCCESS\";\nconst billManagementListFailure = \"GET_BILL_MANAGEMENT_LIST_FAILURE\";\n\nconst sessionBillsSuccess = \"GET_BILL_BY_SESSION_SUCCESS\";\nconst sessionBillsFailure = \"GET_BILL_BY_SESSION_FAILURE\";\n\nconst billEventsSuccess = \"GET_BILL_EVENT_TYPES_SUCCESS\";\nconst billEventsFailure = \"GET_BILL_EVENT_TYPES_FAILURE\";\n\nconst billEventSaveSuccess = \"GET_BILL_EVENT_SAVE_SUCCESS\";\nconst billEventSaveFailure = \"GET_BILL_EVENT_SAVE_FAILURE\";\n\nconst textListSuccess = \"GET_TEXT_LIST_SUCCESS\";\nconst textListFailure = \"GET_TEXT_LIST_FAILURE\";\n\nconst subjectListSuccess = \"GET_SUBJECT_LIST_SUCCESS\";\nconst subjectListFailure = \"GET_SUBJECT_LIST_FAILURE\";\n\nconst introDateListSuccess = \"GET_INTRO_DATE_LIST_SUCCESS\";\nconst introDateListFailure = \"GET_INTRO_DATE_LIST_FAILURE\";\n\nconst legislationAmendmentListSuccess = \"GET_LEGISLATION_AMENDMENT_LIST_SUCCESS\";\nconst legislationAmendmentListFailure = \"GET_LEGISLATION_AMENDMENT_LIST_FAILURE\";\n\nconst legislationDispositionsSuccess = \"GET_LEGISLATION_DISPOSITION_LIST_SUCCESS\";\nconst legislationDispositionsFailure = \"GET_LEGISLATION_DISPOSITION_LIST_FAILURE\";\n\nconst legislationStatusHistorySuccess = \"GET_LEGISLATION_STATUS_HISTORY_SUCCESS\";\nconst legislationStatusHistoryFailure = \"GET_LEGISLATION_STATUS_HISTORY_FAILURE\";\n\nconst deleteBlobFileSuccess = \"DELETE_BLOB_FILE_SUCCESS\";\nconst deleteBlobFileFailure = \"DELETE_BLOB_FILE_FAILURE\";\n\nconst sasURLSuccess = \"GET_SAS_URL_SUCCESS\";\nconst sasURLFailure = \"GET_SAS_URL_FAILURE\";\n\nconst billSuccess = \"GET_BILL_BY_ID_SUCCESS\";\nconst billFailure = \"GET_BILL_BY_ID_FAILURE\";\n\nconst uploadImpactStatementRequest = \"UPLOAD_IMPACT_STATEMENT_REQUEST\";\n\nconst initialState = {\n legislationIdsList: [],\n legislationIdsListPagination: null,\n billListByIds: [],\n billListByIdsPagination: null,\n legislationTextsHitCounts: [],\n billList: [],\n billListPagination: null,\n mostFrequentBillList: [],\n billManagementList: [],\n billManagementListError: '',\n searchCriteria: [],\n billDetails: [],\n billsByMember: [],\n billHistory: [],\n billVersion: [],\n billNumbers: [],\n billSummary: [],\n billSummarySave: [],\n billVersionRef: [],\n billVersionRefError: '',\n sponsorRefList: [],\n sponsorRefListError: '',\n billEventRef: '',\n billEventRefError: '',\n billText: [],\n billTextError: '',\n batchPublishSave: [],\n batchPublishError: '',\n batchCompleteSave: [],\n batchCompleteError: '',\n billTextSave: [],\n billTextSaveError: '',\n jsonHeaders: [],\n jsonHeadersError: '',\n pdfPreview: '',\n pdfPreviewError: '',\n sasUrl: '',\n sasUrlError: '',\n htmlPreview: '',\n htmlPreviewError: '',\n htmlFilePreview: '',\n htmlFilePreviewError: '',\n billFileGen: '',\n billFileGenError: '',\n batchBillFileGen: '',\n batchBillFileGenError: '',\n billStatusReferences: [],\n legislationClasses: [],\n billStatusCategoryReferences: [],\n sessionBills: [],\n sessionBillsError: '',\n billEvents: [],\n billEventsError: '',\n billEventSave: '',\n billEventSaveError: '',\n textList: [],\n textListError: '',\n subjectList: [],\n subjectListError: '',\n introDateList: [],\n introDateListError: '',\n legislationAmendmentList: [],\n legislationAmendmentListError: '',\n legislationDispositions: [],\n legislationDispositionsError: '',\n legislationStatusHistory: [],\n legislationStatusHistoryError: '',\n sasURLLink: '',\n sasURLLinkError: '',\n bill: '',\n billError: '',\n uploadImpactStatementResponse: '',\n uploadImpactStatementError: '',\n deleteBlobFileResponse: '',\n deleteBlobFileError: '',\n};\n\nexport const billActionCreators = {\n\n receiveBill: responseObj => ({\n type: billSuccess,\n bill: responseObj\n }),\n\n billError: message => ({\n type: billFailure,\n billError: message\n }),\n\n getBill: (params, partner) => {\n return dispatch => {\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetPartnerLegislationByIdAsync/', 'GET', '', '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetLegislationByIdAsync/', 'GET', '', '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBill(result[1].Legislations[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillHistory: responseObj => ({\n type: billHistorySuccess,\n billHistory: responseObj\n }),\n\n billHistoryError: message => ({\n type: billHistoryFailure,\n billHistoryError: message\n }),\n\n getBillHistoryByBillID: (params, partner) => {\n return dispatch => {\n let request = '';\n\n let headers = {\n 'cache-control': 'no-cache'\n }\n\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/api/GetLegislationEventListAsync/', 'GET', headers, '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/api/GetLegislationEventByLegislationIDAsync/', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billHistoryError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillHistory(result[1].LegislationEvents))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillHistory([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n //BILL VERSIONS\n requestBillVersion: () => ({\n type: billVersionRequest,\n isFetching: true\n }),\n\n receiveBillVersion: responseObj => ({\n type: billVersionSuccess,\n isFetching: false,\n billVersion: responseObj\n }),\n\n billVersionError: message => ({\n type: billVersionFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getBillVersionByBillNumber: (params) => {\n return dispatch => {\n dispatch(billActionCreators.requestBillVersion());\n\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_VERSION_API_URL) + '/LegislationVersion/api/GetLegislationVersionbyBillNumberAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billVersionError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillVersion(result[1].LegislationsVersion))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billVersionError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n getBillVersionsByBillID: (params) => {\n return dispatch => {\n dispatch(billActionCreators.requestBillVersion());\n\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_VERSION_API_URL) + '/LegislationVersion/api/GetLegislationVersionbyLegislationIDAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billVersionError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillVersion(result[1].LegislationsVersion))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billVersionError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n //BILL SUMMARIES\n requestBillSummary: () => ({\n type: billSummaryRequest,\n isFetching: true\n }),\n\n receiveBillSummary: responseObj => ({\n type: billSummarySuccess,\n isFetching: false,\n billSummary: responseObj\n }),\n\n billSummaryError: message => ({\n type: billSummaryFailure,\n isFetching: false,\n billSummary: [],\n errorMessage: message\n }),\n\n getBillSummary: (params, partner) => {\n\n return dispatch => {\n dispatch(billActionCreators.requestBillSummary());\n\n let request;\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_SUMMARY_SERVICE) + '/LegislationSummary/api/GetLegislationSummaryByIDAsync', 'GET', '', '', params);\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_SUMMARY_SERVICE) + '/LegislationSummary/api/GetLegislationSummaryListAsync', 'GET', '', '', params);\n }\n\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billSummaryError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillSummary(partner ? result[1].SummaryList : result[1].LegislationSummaries))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billSummaryError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n //SAVE BILL SUMMARY\n requestSaveBillSummary: () => ({\n type: saveBillSummaryRequest,\n isFetching: true\n }),\n\n receiveSaveBillSummary: responseObj => ({\n type: saveBillSummarySuccess,\n isFetching: false,\n billSummarySave: responseObj\n }),\n\n saveBillSummaryError: message => ({\n type: saveBillSummaryFailure,\n isFetching: false,\n billSummarySave: [],\n errorMessage: message\n }),\n\n saveBillSummary: (body) => {\n return dispatch => {\n dispatch(billActionCreators.requestSaveBillSummary());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationSummary/api/SaveLegislationSummaryAsync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.saveBillSummaryError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveSaveBillSummary(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveSaveBillSummary([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n //BILL STATUS REFERENCES\n receiveBillStatusRefs: responseObj => ({\n type: billStatusRefSuccess,\n isFetching: false,\n billStatusReferences: responseObj\n }),\n\n billStatusRefsError: message => ({\n type: billStatusRefFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getBillStatusReferences: () => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_ADVANCED_SEARCH_API_URL) + '/AdvancedLegislationSearch/api/GetStatusReferencesAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billStatusRefsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillStatusRefs(result[1].References))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billStatusRefsError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n //LEGISLATION CLASSES\n receiveLegislationClasses: responseObj => ({\n type: legislationClassesSuccess,\n isFetching: false,\n legislationClasses: responseObj\n }),\n\n legislationClassesError: message => ({\n type: legislationClassesFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getLegislationClasses: () => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetLegislationClassesAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.legislationClassesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveLegislationClasses(result[1].LegislationClasses))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.legislationClassesError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n //BILL STATUS CATEGORY REFERENCES\n receiveBillStatusCategoryRefs: responseObj => ({\n type: billStatusCategoryRefSuccess,\n isFetching: false,\n billStatusCategoryReferences: responseObj\n }),\n\n billStatusCategoryRefsError: message => ({\n type: billStatusCategoryRefFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getBillStatusCategoryReferences: () => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_ADVANCED_SEARCH_API_URL) + '/AdvancedLegislationSearch/api/GetLegislationCategoryReferencesAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billStatusCategoryRefsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillStatusCategoryRefs(result[1].LegislationCategoriesList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billStatusCategoryRefsError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveBillEventRefs: responseObj => ({\n type: billEventRefSuccess,\n billEventRef: responseObj\n }),\n\n billEventRefsError: message => ({\n type: billEventRefFailure,\n billEventRefError: message\n }),\n\n getBillEventReferences: (params) => {\n return dispatch => {\n\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/api/getLegislationEventTypeReferencesAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billEventRefsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillEventRefs(result[1].EventTypes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billEventRefsError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveLegislationEventsById: responseObj => ({\n type: legislationEventsByIdSuccess,\n legislationEventsById: responseObj\n }),\n\n legislationEventsByIdError: message => ({\n type: legislationEventsByIdFailure,\n legislationEventsByIdError: message\n }),\n\n //Events for reconsideration\n getLegislationEventsByLegislationId: (params) => {\n return dispatch => {\n\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/api/GetLegislationEventByLegislationIDAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.legislationEventsByIdError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveLegislationEventsById(result[1].LegislationEvents))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.legislationEventsByIdError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // ADVANCED BILL SEARCH\n requestLegislationIdsList: () => ({\n type: legislationIdsListRequest,\n isFetching: true\n }),\n\n receiveLegislationIdsList: (responseObj, pagination) => ({\n type: legislationIdsListSuccess,\n isFetching: false,\n legislationIdsList: responseObj,\n legislationIdsListPagination: pagination,\n errorMessage: responseObj.FailureMessage\n }),\n\n legislationIdsListError: message => ({\n type: legislationIdsListFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getLegislationIdsList: (body, pagination) => {\n return dispatch => {\n dispatch(billActionCreators.requestLegislationIdsList());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n if (pagination) { headers['X-Pagination'] = JSON.stringify(pagination) }\n let request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetLegislationIdsListAsync', 'POST', headers, body, '');\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.legislationIdsListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveLegislationIdsList(result[1], result[2] && result[2].get('X-Pagination') ? JSON.parse(result[2].get('X-Pagination')) : null))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveLegislationIdsList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n requestBillListByIds: () => ({\n type: billListByIdsRequest,\n isFetching: true\n }),\n\n receiveBillListByIds: (responseObj, pagination) => ({\n type: billListByIdsSuccess,\n isFetching: false,\n billListByIds: responseObj,\n billListByIdsPagination: pagination,\n errorMessage: responseObj.FailureMessage\n }),\n\n billListByIdsError: message => ({\n type: billListByIdsFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getBillListByIds: (body, pagination) => {\n return dispatch => {\n dispatch(billActionCreators.requestBillListByIds());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n if (pagination) { headers['X-Pagination'] = JSON.stringify(pagination) }\n let request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetLegislationByLegislationIDsAsync', 'POST', headers, body, '');\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billListByIdsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillListByIds(result[1].Legislations, result[2] && result[2].get('X-Pagination') ? JSON.parse(result[2].get('X-Pagination')) : null))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillListByIds([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n requestLegislationTextsHitCounts: () => ({\n type: legislationTextsHitCountsRequest,\n isFetching: true\n }),\n\n receiveLegislationTextsHitCounts: (responseObj) => ({\n type: legislationTextsHitCountsSuccess,\n isFetching: false,\n legislationTextsHitCounts: responseObj,\n errorMessage: responseObj.FailureMessage\n }),\n\n legislationTextsHitCountsError: message => ({\n type: legislationTextsHitCountsFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getLegislationTextsHitCounts: (body) => {\n return dispatch => {\n dispatch(billActionCreators.requestLegislationTextsHitCounts());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/GetLegislationTextsHitCountsAsync', 'POST', headers, body, '');\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.legislationTextsHitCountsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveLegislationTextsHitCounts(result[1].HitCounts))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveLegislationTextsHitCounts([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n requestBillList: () => ({\n type: billListRequest,\n isFetching: true\n }),\n\n receiveBillList: (responseObj, pagination) => ({\n type: billListSuccess,\n isFetching: false,\n billList: responseObj,\n billListPagination: pagination,\n errorMessage: responseObj.FailureMessage\n }),\n\n billListError: message => ({\n type: billListFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getBillList: (body, partner, pagination) => {\n return dispatch => {\n dispatch(billActionCreators.requestBillList());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n if (pagination) { headers['X-Pagination'] = JSON.stringify(pagination) }\n let request = '';\n if (partner) {\n // THIS REQUEST NOT CURRENTLY IN USE. ADD THE SERVICE NAME TO THE REQUEST URL ONCE AVAILABLE\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_ADVANCED_SEARCH_API_URL) + '/AdvancedLegislationSearch/api/GetPartnerLegislationListAsync', 'GET', '', '', '');\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_ADVANCED_SEARCH_API_URL) + '/AdvancedLegislationSearch/api/GetLegislationListAsync', 'POST', headers, body, '');\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillList(result[1].Legislations, result[2] && result[2].get('X-Pagination') ? JSON.parse(result[2].get('X-Pagination')) : null))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n requestMostFrequentBillList: () => ({\n type: mostFrequentBillListRequest,\n isFetching: true\n }),\n\n receiveMostFrequentBillList: responseObj => ({\n type: mostFrequentBillListSuccess,\n isFetching: false,\n mostFrequentBillList: responseObj,\n errorMessage: responseObj.FailureMessage\n }),\n\n mostFrequentBillListError: message => ({\n type: mostFrequentBillListFailure,\n isFetching: false,\n errorMessage: message\n }),\n\n getMostFrequentBillList: params => {\n return dispatch => {\n dispatch(billActionCreators.requestMostFrequentBillList());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_ADVANCED_SEARCH_API_URL) + '/AdvancedLegislationSearch/api/GetMostFrequentLegislationsAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.mostFrequentBillListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveMostFrequentBillList(result[1].Legislations))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveMostFrequentBillList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillNumbers: responseObj => ({\n type: billNumbersSuccess,\n billNumbers: responseObj\n }),\n\n billNumbersError: message => ({\n type: billNumbersFailure,\n isFetching: false,\n billNumberMessage: message\n }),\n\n getBillNumbers: (params) => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_ADVANCED_SEARCH_API_URL) + '/AdvancedLegislationSearch/api/GetLegislativeNumbersAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billNumbersError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBillNumbers(result[1].LegislationNumbersList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillNumbers([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillVersionRef: responseObj => ({\n type: billVersionRefSuccess,\n billVersionRef: responseObj\n }),\n\n billVersionRefError: message => ({\n type: billVersionRefFailure,\n billVersionRefError: message\n }),\n\n getBillVersionRef: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/GetLegislationVersionListAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billVersionRefError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBillVersionRef(result[1].LegislationVersionList));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billVersionRefError('No Content'));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveSponsorRefList: responseObj => ({\n type: sponsorRefListSuccess,\n sponsorRefList: responseObj\n }),\n\n sponsorRefListError: message => ({\n type: sponsorRefListFailure,\n sponsorRefListError: message\n }),\n\n getSponsorRefList: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/GetSponsorTypeListAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.sponsorRefListError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveSponsorRefList(result[1].SponsorTypes));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.sponsorRefListError('No Content'));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillSummaryRef: responseObj => ({\n type: billSummaryRefSuccess,\n billSummaryRef: responseObj\n }),\n\n billSummaryRefError: message => ({\n type: billSummaryRefFailure,\n billSummaryRefError: message\n }),\n\n getBillSummaryRef: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_SUMMARY_SERVICE) + '/LegislationSummary/api/GetSummaryVersionsReferenceAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billSummaryRefError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBillSummaryRef(result[1].SummaryVersions));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billSummaryRefError('No Content'));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillText: responseObj => ({\n type: billTextSuccess,\n billText: responseObj\n }),\n\n billTextError: message => ({\n type: billTextFailure,\n billTextError: message\n }),\n\n getBillText: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/GetPartnerLegislationTextByIDAsync', 'GET', headers, '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/GetLegislationTextByIDAsync', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billTextError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBillText(result[1].TextsList));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillText([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillTextSave: responseObj => ({\n type: billTextSaveSuccess,\n billTextSave: responseObj\n }),\n\n billTextSaveError: message => ({\n type: billTextSaveFailure,\n billTextSaveError: message\n }),\n\n saveBillText: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/SaveLegislationTextAsync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billTextSaveError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBillTextSave(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillTextSave([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveIhodAmendmentSave: responseObj => ({\n type: ihodAmendmentSaveSuccess,\n ihodAmendmentSave: responseObj\n }),\n\n ihodAmendmentSaveError: message => ({\n type: ihodAmendmentSaveFailure,\n ihodAmendmentSaveError: message\n }),\n\n saveIhodAmendment: (params) => {\n let config = {\n method: 'POST',\n headers: {\n \"content-type\": \"application/json; charset=utf-8\",\n }\n }\n\n return dispatch => {\n return fetch(\"https://ihod-lisva.herokuapp.com/floor_amendments/create_amendment\" + params, config)\n .then(() => {\n dispatch(billActionCreators.receiveIhodAmendmentSave([]));\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBatchPublish: responseObj => ({\n type: batchPublishSuccess,\n batchPublishSave: responseObj\n }),\n\n batchPublishError: message => ({\n type: batchPublishFailure,\n batchPublishError: message\n }),\n\n batchPublish: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/PublishLegislationTextsAsync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.batchPublishError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBatchPublish(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBatchPublish([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCompletePublish: responseObj => ({\n type: batchCompleteSuccess,\n batchCompleteSave: responseObj\n }),\n\n batchCompleteError: message => ({\n type: batchCompleteFailure,\n batchCompleteError: message\n }),\n\n batchComplete: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/CompletePrintLegislationTextsAsync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.batchCompleteError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveCompletePublish(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveCompletePublish([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveJsonHeaders: responseObj => ({\n type: jsonHeadersSuccess,\n jsonHeaders: responseObj\n }),\n\n jsonHeadersError: message => ({\n type: jsonHeadersFailure,\n jsonHeadersError: message\n }),\n\n getJsonHeaders: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/PreviewJSONById', 'POST', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.jsonHeadersError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveJsonHeaders(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveJsonHeaders([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePdfPreview: responseObj => ({\n type: pdfPreviewSuccess,\n pdfPreview: responseObj\n }),\n\n pdfPreviewError: message => ({\n type: pdfPreviewFailure,\n pdfPreviewError: message\n }),\n\n getPdfPreview: (body) => {\n return dispatch => {\n let config = {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"authorization\": \"Bearer \" + localStorage.getItem('LIS_ID_TOKEN'),\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n },\n body: JSON.stringify(body)\n }\n\n let url = (API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/PreviewPDFFile';\n\n return fetch(url, config)\n .then(result => {\n if (result) {\n dispatch(billActionCreators.receivePdfPreview(result));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n } else {\n dispatch(billActionCreators.pdfPreviewError(\"No preview file\"));\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePreviewPdfFile: responseObj => ({\n type: previewPdfFileSuccess,\n sasUrl: responseObj\n }),\n\n previewPdfFileError: message => ({\n type: previewPdfFileFailure,\n sasUrlFailure: message\n }),\n\n previewPdfFile: (body) => {\n return dispatch => {\n let headers = {\n \"Content-Type\": \"application/json; charset=utf-8\"\n }\n\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/PreviewStoredPDFFileAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.previewPdfFileError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receivePreviewPdfFile(result[1].sasTokenUrl));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.previewPdfFileError([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveHtmlPreview: responseObj => ({\n type: htmlPreviewSuccess,\n htmlPreview: responseObj\n }),\n\n htmlPreviewError: message => ({\n type: htmlPreviewFailure,\n htmlPreviewError: message\n }),\n\n getHtmlPreview: (body) => {\n return dispatch => {\n let config = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"authorization\": \"Bearer \" + localStorage.getItem('LIS_ID_TOKEN'),\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n },\n body: JSON.stringify(body)\n }\n\n let url = (API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/PreviewHTMLFile';\n\n return fetch(url, config)\n .then(async result => {\n if (!result) {\n dispatch(billActionCreators.htmlPreviewError(\"Preview file not generated\"));\n } else if (result.status === 400) {\n await result.body.getReader().read().then(({ value }) => {\n const error = JSON.parse(Buffer.from(value.buffer).toString())\n dispatch(billActionCreators.htmlPreviewError(error.Name || \"Unknown Error\"));\n })\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n } else {\n dispatch(billActionCreators.receiveHtmlPreview(result));\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveHtmlFilePreview: responseObj => ({\n type: htmlFilePreviewSuccess,\n htmlFilePreview: responseObj\n }),\n\n htmlFilePreviewError: message => ({\n type: htmlFilePreviewFailure,\n htmlFilePreviewError: message\n }),\n\n getHtmlFilePreview: (params) => {\n return dispatch => {\n let config = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"authorization\": \"Bearer \" + localStorage.getItem('LIS_ID_TOKEN'),\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n }\n }\n\n let url = (API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/PreviewLegislationHTMLFileAsync' + params;\n\n return fetch(url, config)\n .then(async result => {\n if (!result) {\n dispatch(billActionCreators.htmlFilePreviewError(\"Preview file not generated\"));\n } else if (result.status === 400) {\n await result.body.getReader().read().then(({ value }) => {\n const error = JSON.parse(Buffer.from(value.buffer).toString())\n dispatch(billActionCreators.htmlFilePreviewError(error.Name || \"Unknown Error\"));\n })\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n } else {\n await result.body.getReader().read().then(({ value }) => {\n let decoder = new TextDecoder;\n dispatch(billActionCreators.receiveHtmlFilePreview(decoder.decode(value)));\n })\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillSave: responseObj => ({\n type: billSaveSuccess,\n billSave: responseObj\n }),\n\n billSaveError: message => ({\n type: billSaveFailure,\n billSaveError: message\n }),\n\n saveBill: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/SaveLegislationAsync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billSaveError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBillSave(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillSave([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillFileGen: responseObj => ({\n type: billFileGenSuccess,\n billFileGen: responseObj\n }),\n\n billFileGenError: message => ({\n type: billFileGenFailure,\n billFileGenError: message\n }),\n\n genBillFile: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/ProcessLegislationFilesAsync', 'POST', headers, '', params, true)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billFileGenError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBillFileGen(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billFileGenError('No Content'));\n return Promise.reject('No Content')\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveBatchBillFileGen: responseObj => ({\n type: batchBillFileGenSuccess,\n batchBillFileGen: responseObj\n }),\n\n batchBillFileGenError: message => ({\n type: batchBillFileGenFailure,\n batchBillFileGenError: message\n }),\n\n batchGenBillFile: (params, body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/ProcessBatchLegislationFilesAsync', 'POST', headers, body, params, true)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.batchBillFileGenError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveBatchBillFileGen(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.batchBillFileGenError('No Content'));\n return Promise.reject('No Content')\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillManagementList: responseObj => ({\n type: billManagementListSuccess,\n billManagementList: responseObj,\n }),\n\n billManagementListError: message => ({\n type: billManagementListFailure,\n billManagementListError: message\n }),\n\n getBillManagementList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/getLegislationManagementListAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billManagementListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillManagementList(result[1].Legislations))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveBillManagementList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveSessionBills: responseObj => ({\n type: sessionBillsSuccess,\n sessionBills: responseObj,\n }),\n\n sessionBillsError: message => ({\n type: sessionBillsFailure,\n sessionBillsError: message\n }),\n\n getSessionBills: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/getLegislationSessionListAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.sessionBillsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveSessionBills(result[1].Legislations))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveSessionBills([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillEvents: responseObj => ({\n type: billEventsSuccess,\n billEvents: responseObj,\n }),\n\n billEventsError: message => ({\n type: billEventsFailure,\n billEventsError: message\n }),\n\n getBillEvents: (params = '') => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/api/getlegislationeventtypereferencesasync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billEventsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillEvents(result[1].EventTypes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billEventsError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveBillEventSave: responseObj => ({\n type: billEventSaveSuccess,\n billEventSave: responseObj,\n }),\n\n billEventSaveError: message => ({\n type: billEventSaveFailure,\n billEventSaveError: message\n }),\n\n saveBillEvent: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/api/savelegislationeventasync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.billEventSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(billActionCreators.receiveBillEventSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.billEventSaveError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveTextList: responseObj => ({\n type: textListSuccess,\n textList: responseObj,\n }),\n\n textListError: message => ({\n type: textListFailure,\n textListError: message\n }),\n\n getTextList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/getlegislationtextlistasync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.textListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveTextList(result[1].LegislationTextList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveTextList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveSubjectList: responseObj => ({\n type: subjectListSuccess,\n subjectList: responseObj,\n }),\n\n subjectListError: message => ({\n type: subjectListFailure,\n subjectListError: message\n }),\n\n getSubjectList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_SUBJECT_SERVICE) + '/LegislationSubject/api/GetSubjectReferencesAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.subjectListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n const subjectList = result[1].SubjectsReference;\n subjectList.forEach(subject => {\n subject.label = subject.Subject;\n subject.value = subject.SubjectIndexID;\n })\n dispatch(billActionCreators.receiveSubjectList(subjectList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveSubjectList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveIntroDateList: responseObj => ({\n type: introDateListSuccess,\n introDateList: responseObj,\n }),\n\n introDateListError: message => ({\n type: introDateListFailure,\n introDateListError: message\n }),\n\n getIntroDateList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_ADVANCED_SEARCH_API_URL) + '/AdvancedLegislationSearch/api/GetIntroductionDateListAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.introDateListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveIntroDateList(result[1].LegislationDatesList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveIntroDateList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveLegislationAmendmentList: responseObj => ({\n type: legislationAmendmentListSuccess,\n legislationAmendmentList: responseObj,\n }),\n\n legislationAmendmentListError: message => ({\n type: legislationAmendmentListFailure,\n legislationAmendmentListError: message\n }),\n\n getLegislationAmendmentList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetLegislationAmendmentListAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.legislationAmendmentListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveLegislationAmendmentList(result[1].LegislationAmendmentList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveLegislationAmendmentList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveLegislationDispositions: responseObj => ({\n type: legislationDispositionsSuccess,\n legislationDispositions: responseObj,\n }),\n\n legislationDispositionsError: message => ({\n type: legislationDispositionsFailure,\n legislationDispositionsError: message\n }),\n\n getLegislationDispositions: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_TEXT_API_URL) + '/LegislationText/api/GetTextDispositionsReferenceAsync/', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.legislationDispositionsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveLegislationDispositions(result[1].TextDispositionList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveLegislationDispositions([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveLegislationStatusHistory: responseObj => ({\n type: legislationStatusHistorySuccess,\n legislationStatusHistory: responseObj,\n }),\n\n legislationStatusHistoryError: message => ({\n type: legislationStatusHistoryFailure,\n legislationStatusHistoryError: message\n }),\n\n getBillStatusHistory: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetLegislationStatusHistoryByLegislationIDAsync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.legislationStatusHistoryError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveLegislationStatusHistory(result[1].LegislationsStatusHistory))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveLegislationStatusHistory([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveSasURL: responseObj => ({\n type: sasURLSuccess,\n sasURLLink: responseObj,\n }),\n\n sasURLError: message => ({\n type: sasURLFailure,\n sasURLLinkError: message\n }),\n\n getSasURL: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/GetSASUrlForPreviewAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.sasUrlError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveSasURL(result[1].sasTokenUrl))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveSasURL([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n uploadImpactStatement: (params, file) => {\n return dispatch => {\n const headers = {\n 'cache-control': 'no-cache'\n }\n let formData = new FormData();\n formData.append('fiscalImpactPDF', file);\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/SaveImpactStatementFileAsync', 'POST', headers, formData, params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch({\n type: uploadImpactStatementRequest,\n uploadImpactStatementError: result[1]\n });\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch({\n type: uploadImpactStatementRequest,\n uploadImpactStatementResponse: result[1]\n });\n } else if (result[0] === NO_CONTENT) {\n dispatch({\n type: uploadImpactStatementRequest,\n uploadImpactStatementError: \"No Content\"\n });\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveDeleteBlobFile: responseObj => ({\n type: deleteBlobFileSuccess,\n deleteBlobFileResponse: responseObj,\n }),\n\n deleteBlobFileError: message => ({\n type: deleteBlobFileFailure,\n deleteBlobFileError: message\n }),\n\n deleteBlobFileStatement: (params) => {\n return dispatch => {\n const headers = {\n 'cache-control': 'no-cache'\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/api/DeleteFileFromBlobStorageAsync', 'DELETE', headers, null, params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(billActionCreators.deleteBlobFileError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(billActionCreators.receiveDeleteBlobFile(result[1].FilesDeleted))\n } else if (result[0] === NO_CONTENT) {\n dispatch(billActionCreators.receiveDeleteBlobFile([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n }\n};\n\nexport const reducer = (state, action) => {\n state = state || initialState;\n\n switch (action.type) {\n case billFailure:\n return Object.assign({}, state, {\n billError: action.billError\n });\n case billSuccess:\n return Object.assign({}, state, {\n bill: action.bill,\n billError: ''\n });\n case billStatusRefFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case billStatusRefSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billStatusReferences: action.billStatusReferences,\n errorMessage: ''\n });\n case legislationClassesFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case legislationClassesSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n legislationClasses: action.legislationClasses,\n errorMessage: ''\n });\n case billStatusCategoryRefFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case billStatusCategoryRefSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billStatusCategoryReferences: action.billStatusCategoryReferences,\n errorMessage: ''\n });\n case billNumbersFailure:\n return Object.assign({}, state, {\n isFetching: false,\n billNumberMessage: action.billNumberMessage\n });\n case billNumbersSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billNumbers: action.billNumbers,\n billNumberMessage: ''\n });\n case legislationIdsListRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case legislationIdsListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n legislationIdsList: action.legislationIdsList,\n legislationIdsListPagination: action.legislationIdsListPagination,\n errorMessage: ''\n });\n case legislationIdsListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case billListByIdsRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case billListByIdsSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billListByIds: action.billListByIds,\n billListByIdsPagination: action.billListByIdsPagination,\n errorMessage: ''\n });\n case billListByIdsFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case legislationTextsHitCountsRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case legislationTextsHitCountsSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n legislationTextsHitCounts: action.legislationTextsHitCounts,\n errorMessage: ''\n });\n case legislationTextsHitCountsFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case billListRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case billListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billList: action.billList,\n billListPagination: action.billListPagination,\n errorMessage: ''\n });\n case billListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case mostFrequentBillListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n mostFrequentBillList: action.mostFrequentBillList,\n errorMessage: ''\n });\n case mostFrequentBillListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case billSummaryRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case billSummarySuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billSummary: action.billSummary,\n errorMessage: ''\n });\n case billSummaryFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case saveBillSummaryRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case saveBillSummarySuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billSummarySave: action.billSummarySave,\n errorMessage: ''\n });\n case saveBillSummaryFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case billHistorySuccess:\n return Object.assign({}, state, {\n billHistory: action.billHistory,\n billHistoryError: ''\n });\n case billHistoryFailure:\n return Object.assign({}, state, {\n billHistoryError: action.errorMessage\n });\n case billVersionRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case billVersionSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n billVersion: action.billVersion,\n errorMessage: ''\n });\n case billVersionFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case sponsorRefListSuccess:\n return Object.assign({}, state, {\n sponsorRefList: action.sponsorRefList,\n sponsorRefListError: ''\n });\n case sponsorRefListFailure:\n return Object.assign({}, state, {\n sponsorRefListError: action.sponsorRefListError\n });\n case billVersionRefSuccess:\n return Object.assign({}, state, {\n billVersionRef: action.billVersionRef,\n billVersionRefError: ''\n });\n case billVersionRefFailure:\n return Object.assign({}, state, {\n billVersionRefError: action.billVersionRefError\n });\n case billSummaryRefSuccess:\n return Object.assign({}, state, {\n billSummaryRef: action.billSummaryRef,\n billSummaryRefError: ''\n });\n case billSummaryRefFailure:\n return Object.assign({}, state, {\n billSummaryRefError: action.billSummaryRefError\n });\n case billEventRefSuccess:\n return Object.assign({}, state, {\n billEventRef: action.billEventRef,\n billEventRefError: ''\n });\n case billEventRefFailure:\n return Object.assign({}, state, {\n billEventRefError: action.billEventRefError\n });\n case legislationEventsByIdSuccess:\n return Object.assign({}, state, {\n legislationEventsById: action.legislationEventsById,\n legislationEventsByIdError: ''\n });\n case legislationEventsByIdFailure:\n return Object.assign({}, state, {\n legislationEventsByIdError: action.legislationEventsByIdError\n });\n case billTextSuccess:\n return Object.assign({}, state, {\n billText: action.billText,\n billTextError: ''\n });\n case billTextFailure:\n return Object.assign({}, state, {\n billTextError: action.billTextError\n });\n case batchPublishSuccess:\n return Object.assign({}, state, {\n batchPublishSave: action.batchPublishSave,\n batchPublishSaveError: ''\n });\n case batchPublishFailure:\n return Object.assign({}, state, {\n batchPublishError: action.batchPublishError\n });\n case batchCompleteSuccess:\n return Object.assign({}, state, {\n batchCompleteSave: action.batchCompleteSave,\n batchCompleteSaveError: ''\n });\n case batchCompleteFailure:\n return Object.assign({}, state, {\n batchCompleteError: action.batchCompleteError\n });\n case billTextSaveSuccess:\n return Object.assign({}, state, {\n billTextSave: action.billTextSave,\n billTextSaveError: ''\n });\n case billTextSaveFailure:\n return Object.assign({}, state, {\n billTextSaveError: action.billTextSaveError\n });\n case ihodAmendmentSaveSuccess:\n return Object.assign({}, state, {\n ihodAmendmentSave: action.ihodAmendmentSave,\n ihodAmendmentSaveError: ''\n });\n case ihodAmendmentSaveFailure:\n return Object.assign({}, state, {\n ihodAmendmentSaveError: action.ihodAmendmentSaveError\n });\n case jsonHeadersSuccess:\n return Object.assign({}, state, {\n jsonHeaders: action.jsonHeaders,\n jsonHeadersError: ''\n });\n case jsonHeadersFailure:\n return Object.assign({}, state, {\n jsonHeadersError: action.jsonHeadersError\n });\n case pdfPreviewSuccess:\n return Object.assign({}, state, {\n pdfPreview: action.pdfPreview,\n pdfPreviewError: ''\n });\n case pdfPreviewFailure:\n return Object.assign({}, state, {\n pdfPreviewError: action.pdfPreviewError\n });\n case previewPdfFileSuccess:\n return Object.assign({}, state, {\n sasUrl: action.sasUrl,\n sasUrlError: ''\n });\n case previewPdfFileFailure:\n return Object.assign({}, state, {\n sasUrlError: action.sasUrlError\n });\n case htmlPreviewSuccess:\n return Object.assign({}, state, {\n htmlPreview: action.htmlPreview,\n htmlPreviewError: ''\n });\n case htmlPreviewFailure:\n return Object.assign({}, state, {\n htmlPreviewError: action.htmlPreviewError\n });\n case htmlFilePreviewSuccess:\n return Object.assign({}, state, {\n htmlFilePreview: action.htmlFilePreview,\n htmlFilePreviewError: ''\n });\n case htmlFilePreviewFailure:\n return Object.assign({}, state, {\n htmlFilePreviewError: action.htmlFilePreviewError\n });\n case billSaveSuccess:\n return Object.assign({}, state, {\n billSave: action.billSave,\n billSaveError: ''\n });\n case billSaveFailure:\n return Object.assign({}, state, {\n billSaveError: action.billSaveError\n });\n case billFileGenSuccess:\n return Object.assign({}, state, {\n billFileGen: action.billFileGen,\n billFileGenError: ''\n });\n case billFileGenFailure:\n return Object.assign({}, state, {\n billFileGenError: action.billFileGenError\n });\n case batchBillFileGenSuccess:\n return Object.assign({}, state, {\n batchBillFileGen: action.batchBillFileGen,\n batchBillFileGenError: ''\n });\n case batchBillFileGenFailure:\n return Object.assign({}, state, {\n batchBillFileGenError: action.batchBillFileGenError\n });\n case billManagementListSuccess:\n return Object.assign({}, state, {\n billManagementList: action.billManagementList,\n billManagementListError: ''\n });\n case billManagementListFailure:\n return Object.assign({}, state, {\n billManagementListError: action.billManagementListError\n });\n case sessionBillsSuccess:\n return Object.assign({}, state, {\n sessionBills: action.sessionBills,\n sessionBillsError: ''\n });\n case sessionBillsFailure:\n return Object.assign({}, state, {\n sessionBillsError: action.sessionBillsError\n });\n case billEventsSuccess:\n return Object.assign({}, state, {\n billEvents: action.billEvents,\n billEventsError: ''\n });\n case billEventsFailure:\n return Object.assign({}, state, {\n billEventsError: action.billEventsError\n });\n case billEventSaveSuccess:\n return Object.assign({}, state, {\n billEventSave: action.billEventSave,\n billEventSaveError: ''\n });\n case billEventSaveFailure:\n return Object.assign({}, state, {\n billEventSaveError: action.billEventSaveError\n });\n case textListSuccess:\n return Object.assign({}, state, {\n textList: action.textList,\n textListError: ''\n });\n case textListFailure:\n return Object.assign({}, state, {\n textListError: action.textListError\n });\n case subjectListSuccess:\n return Object.assign({}, state, {\n subjectList: action.subjectList,\n subjectListError: ''\n });\n case subjectListFailure:\n return Object.assign({}, state, {\n subjectListError: action.subjectListError\n });\n case introDateListSuccess:\n return Object.assign({}, state, {\n introDateList: action.introDateList,\n introDateListError: ''\n });\n case introDateListFailure:\n return Object.assign({}, state, {\n introDateListError: action.introDateListError\n });\n case legislationAmendmentListSuccess:\n return Object.assign({}, state, {\n legislationAmendmentList: action.legislationAmendmentList,\n legislationAmendmentListError: ''\n });\n case legislationAmendmentListFailure:\n return Object.assign({}, state, {\n legislationAmendmentListError: action.legislationAmendmentListError\n });\n case legislationDispositionsSuccess:\n return Object.assign({}, state, {\n legislationDispositions: action.legislationDispositions,\n legislationDispositionsError: ''\n });\n case legislationDispositionsFailure:\n return Object.assign({}, state, {\n legislationDispositionsError: action.legislationDispositionsError\n });\n case legislationStatusHistorySuccess:\n return Object.assign({}, state, {\n legislationStatusHistory: action.legislationStatusHistory,\n legislationStatusHistoryError: ''\n });\n case legislationStatusHistoryFailure:\n return Object.assign({}, state, {\n legislationStatusHistoryError: action.legislationStatusHistoryError\n });\n case sasURLSuccess:\n return Object.assign({}, state, {\n sasURLLink: action.sasURLLink,\n sasURLLinkError: ''\n });\n case sasURLFailure:\n return Object.assign({}, state, {\n sasURLLinkError: action.sasURLLinkError\n });\n case uploadImpactStatementRequest:\n return Object.assign({}, state, {\n uploadImpactStatementResponse: action.uploadImpactStatementResponse || state.uploadImpactStatementResponse,\n uploadImpactStatementError: action.uploadImpactStatementError || ''\n });\n case deleteBlobFileSuccess:\n return Object.assign({}, state, {\n deleteBlobFileResponse: action.deleteBlobFileResponse,\n deleteBlobFileError: ''\n });\n case deleteBlobFileFailure:\n return Object.assign({}, state, {\n deleteBlobFileError: action.deleteBlobFileError\n });\n default:\n return state;\n }\n};\n","import { LogLevel } from \"@azure/msal-browser\";\n\nexport const msalConfig = {\n auth: {\n clientId: [\"dev\", \"test\", \"qa\"].includes(window.env.APP_ENV.toLowerCase()) ? \"d0952a15-c248-42cb-a3d5-31a104e6fe94\" : \"370fbf66-8bed-4f65-8938-9d97d9ff8e07\",\n authority: \"https://login.microsoftonline.com/house.virginia.gov\",\n redirectUri: [\"dev\", \"test\", \"qa\"].includes(window.env.APP_ENV.toLowerCase()) ? \"https://\" + window.env.APP_ENV + \".lis.virginia.gov\" : \"https://lis.virginia.gov\",\n postLogoutRedirectUri: [\"dev\", \"test\", \"qa\"].includes(window.env.APP_ENV.toLowerCase()) ? \"https://\" + window.env.APP_ENV + \".lis.virginia.gov\" : \"https://lis.virginia.gov\"\n },\n cache: {\n cacheLocation: \"localStorage\",\n storeAuthStateInCookie: false,\n },\n system: {\n loggerOptions: {\n loggerCallback: (level, message, containsPii) => {\n if (containsPii) {\n return;\n }\n switch (level) {\n case LogLevel.Error:\n console.error(message);\n return;\n case LogLevel.Info:\n console.info(message);\n return;\n case LogLevel.Verbose:\n console.debug(message);\n return;\n case LogLevel.Warning:\n console.warn(message);\n return;\n default:\n return;\n }\n } \n }\n }\n};\n\nexport const loginRequest = {\n scopes: [\"User.Read\"]\n};\n\nexport const logoutRequest = {\n scopes: [\"User.Read\"]\n};\n\nexport const graphConfig = {\n graphMeEndpoint: \"https://graph.microsoft.com/v1.0/me\"\n};","import jwtDecode from 'jwt-decode';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst graphToken = 'GRAPH_ID_TOKEN';\nconst idToken = 'LIS_ID_TOKEN';\nconst refreshToken = 'LIS_REFRESH_TOKEN';\nconst refreshTokenExpiration = 'LIS_REFRESH_TOKEN_EXPIRATION';\nconst claims = \"LIS_CLAIMS\";\n\nconst loginRequest = 'LOGIN_REQUEST';\nconst loginSuccess = 'LOGIN_SUCCESS';\nconst loginFailure = 'LOGIN_FAILURE';\n\nconst logoutRequest = 'LOGOUT_REQUEST';\nconst logoutSuccess = 'LOGOUT_SUCCESS';\n\nconst refreshTokenRequest = 'REFRESH_TOKEN_REQUEST';\nconst refreshTokenSuccess = 'REFRESH_TOKEN_SUCCESS';\nconst refreshTokenFailure = 'REFRESH_TOKEN_FAILURE';\n\nconst houseLoginRequest = 'HOUSE_ACCESS_TOKEN_REQUEST';\nconst houseLoginSuccess = 'HOUSE_ACCESS_TOKEN_SUCCESS';\nconst houseLoginFailure = 'HOUSE_ACCESS_TOKEN_FAILURE';\n\n//const initialState = {\n// loggedIn: false\n//};\n\n// Decode the token, if it exists\n\nconst decodedToken = () => {\n const jwtToken = localStorage.getItem(idToken);\n\n const userData = {\n initials: '',\n name: '',\n chamber: '',\n email: '',\n claims: [],\n roles: [],\n scopes: [],\n resources: [] \n };\n\n if (jwtToken !== null && jwtToken !== 'undefined') {\n const decode = jwtDecode(jwtToken);\n const stringToken = JSON.stringify(decode);\n const parsedToken = JSON.parse(stringToken);\n userData.initials = parsedToken.given_name.charAt(0) + parsedToken.family_name.charAt(0);\n userData.name = parsedToken.given_name + ' ' + parsedToken.family_name;\n userData.expr = parsedToken.exp;\n userData.email = parsedToken.email\n }\n return userData;\n}\n\nconst isTokenExpired = () => {\n const jwtToken = localStorage.getItem(idToken);\n\n var expr = '';\n\n if (jwtToken !== null && jwtToken !== 'undefined') {\n const decode = jwtDecode(jwtToken);\n const stringToken = JSON.stringify(decode);\n const parsedToken = JSON.parse(stringToken);\n\n expr = parsedToken.exp;\n return expr < new Date().getTime() / 1000;\n } else {\n return true;\n }\n}\n\nconst parsedClaims = () => {\n const claimsObject = JSON.parse(localStorage.getItem(claims));\n\n let userClaims = {\n scopes: [],\n roles: [],\n resources: [],\n claims: []\n };\n\n if (claimsObject)\n for (let i = 0; i < claimsObject.length; i++) {\n userClaims.scopes.push(claimsObject[i].Scope)\n userClaims.roles.push(claimsObject[i].RoleName)\n userClaims.resources.push(claimsObject[i].Resource)\n userClaims.claims.push(claimsObject[i])\n }\n\n return userClaims;\n}\n\nexport const authActionCreators = {\n\n // LOGIN THE USER\n\n requestLogin: (creds) => ({\n type: loginRequest,\n isFetching: true,\n initiateRedirect: false,\n creds\n }),\n\n receiveLogin: (user) => ({\n type: loginSuccess,\n isFetching: false,\n initiateRedirect: true,\n isAuthenticated: true,\n isTokenExpired: isTokenExpired(user.AccessToken),\n userProfile: decodedToken(user.AccessToken),\n userClaims: parsedClaims()\n }),\n\n loginError: (message) => ({\n type: loginFailure,\n isFetching: false,\n isAuthenticated: false,\n message\n }),\n\n loginUser: (creds) => {\n let config = {\n method: 'POST',\n headers: { \"Content-Type\": \"application/json; charset=utf-8\", \"WebAPIKey\": process.env.REACT_APP_API_KEY },\n body: JSON.stringify({ UserID: creds.userId, Password: creds.userPassword })\n }\n return dispatch => {\n // dispatch requestLogin and kickoff the call to the API\n dispatch(authActionCreators.requestLogin(creds));\n\n return fetch((API_URL || process.env.REACT_APP_AUTH_API_URL) + '/Authentication/api/LoginAsync', config)\n .then(response =>\n response.json().then(user => ({ user, response }))\n ).then(({ user, response }) => {\n if (response.status >= 400) {\n // If there was a problem, \n // dispatch the error condition\n dispatch(authActionCreators.loginError(user.FailureMessage))\n return Promise.reject(user)\n } else {\n // If login was successful, set the token in local storage\n let roles = [];\n if (user.Claims && user.Claims.Roles) {\n roles = user.Claims.Roles;\n }\n localStorage.setItem(claims, JSON.stringify(roles));\n localStorage.setItem(idToken, user.AccessToken);\n localStorage.setItem(refreshToken, user.RefreshToken);\n localStorage.setItem(graphToken, user.GraphToken);\n //604800000 is 7 days in milliseconds\n localStorage.setItem(refreshTokenExpiration, new Date().getTime() + 604800000);\n // Dispatch the success action\n dispatch(authActionCreators.receiveLogin(user))\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // LOGOUT THE USER\n\n requestLogout: () => ({\n type: logoutRequest,\n isFetching: true,\n initiateRedirect: false,\n isAuthenticated: true\n }),\n\n receiveLogout: () => ({\n type: logoutSuccess,\n isFetching: false,\n initiateRedirect: false,\n isAuthenticated: false,\n userProfile: false,\n userClaims: false\n }),\n\n logoutUser: () => {\n return dispatch => {\n dispatch(authActionCreators.requestLogout());\n localStorage.removeItem(idToken);\n localStorage.removeItem(refreshToken);\n localStorage.removeItem(refreshTokenExpiration);\n localStorage.removeItem(claims);\n localStorage.removeItem(graphToken);\n dispatch(authActionCreators.receiveLogout())\n }\n },\n\n // RERESH ACCESS TOKEN\n\n requestRefreshToken: () => ({\n type: refreshTokenRequest,\n isFetching: true\n }),\n\n receiveRefreshToken: (user) => ({\n type: refreshTokenSuccess,\n isFetching: false,\n userProfile: decodedToken(user.AccessToken),\n userClaims: parsedClaims(),\n isTokenExpired: isTokenExpired(user.AccessToken)\n }),\n\n refreshTokenError: (message) => ({\n type: refreshTokenFailure,\n message\n }),\n\n refreshAccessToken: () => {\n let rtoken = localStorage.getItem(refreshToken);\n\n let config = {\n method: 'POST',\n headers: {\n \"authorization\": rtoken,\n \"content-type\": \"application/json; charset=utf-8\",\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n }\n }\n\n return dispatch => {\n // dispatch requestLogin and kickoff the call to the API\n dispatch(authActionCreators.requestRefreshToken());\n\n return fetch((API_URL || process.env.REACT_APP_AUTH_API_URL) + '/Authentication/api/RefreshAccessTokenAsync', config)\n .then(response => {\n if (response.status > 399) {\n dispatch(authActionCreators.refreshTokenError(response));\n return Promise.reject(response);\n }\n return response\n })\n .then(response =>\n response.json().then(user => ({ user, response }))\n ).then(({ user, response }) => {\n // If refresh was successful, set the tokens in local storage\n let roles = [];\n if (user.Claims && user.Claims.Roles) {\n roles = user.Claims.Roles;\n }\n localStorage.setItem(claims, JSON.stringify(roles)); \n localStorage.setItem(idToken, user.AccessToken);\n localStorage.setItem(refreshToken, user.RefreshToken);\n //604800000 is 7 days in milliseconds\n localStorage.setItem(refreshTokenExpiration, new Date().getTime() + 604800000);\n // Dispatch the success action\n dispatch(authActionCreators.receiveRefreshToken(user))\n }).catch(err => console.log(\"Error: \", err))\n }\n },\n\n requestHouseLogin: () => ({\n type: houseLoginRequest,\n isFetching: true\n }),\n\n receiveHouseLogin: (user) => ({\n type: houseLoginSuccess,\n isFetching: false,\n initiateRedirect: true,\n isAuthenticated: true,\n isTokenExpired: isTokenExpired(user.AccessToken),\n userProfile: decodedToken(user.AccessToken),\n userClaims: parsedClaims()\n }),\n\n houseLoginFailure: (message) => ({\n isFetching: false,\n type: houseLoginFailure,\n message\n }),\n\n houseLogin: (authToken, refreshToken, expirationDate) => {\n let config = {\n method: 'POST',\n headers: { \"Content-Type\": \"application/json; charset=utf-8\", \"WebAPIKey\": process.env.REACT_APP_API_KEY }, \n }\n\n return dispatch => {\n dispatch(authActionCreators.requestHouseLogin());\n\n return fetch((API_URL || process.env.REACT_APP_AUTH_API_URL) + '/Authentication/api/GetAccessTokenAsync?accesstoken=' + authToken, config)\n .then(response =>\n response.json().then(user => ({ user, response }))\n ).then(({ user, response }) => {\n if (response.status >= 400) { \n dispatch(authActionCreators.houseLoginFailure(user.FailureMessage))\n return Promise.reject(user)\n } else {\n let roles = [];\n if (user.Claims && user.Claims.Roles) {\n roles = user.Claims.Roles;\n }\n localStorage.setItem(claims, JSON.stringify(roles));\n localStorage.setItem(idToken, user.AccessToken);\n localStorage.setItem(refreshToken, refreshToken);\n localStorage.setItem(graphToken, user.GraphToken);\n localStorage.setItem(refreshTokenExpiration, expirationDate.getTime() + 604800000);\n\n dispatch(authActionCreators.receiveHouseLogin(user))\n }\n }).catch(err => Promise.reject(err))\n }\n }\n};\n\nexport const reducer = (state, action) => {\n\n state = {\n ...state,\n isFetching: false,\n initiateRedirect: false,\n isAuthenticated: isTokenExpired() ? false : true,\n userProfile: decodedToken(),\n userClaims: parsedClaims(),\n isTokenExpired: isTokenExpired() \n }\n\n switch (action.type) {\n case loginRequest:\n return Object.assign({}, state, {\n isFetching: true,\n initiateRedirect: false,\n user: action.creds\n })\n case loginSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n initiateRedirect: true,\n isAuthenticated: true,\n errorMessage: '',\n userProfile: action.userProfile,\n userClaims: action.userClaims,\n isTokenExpired: action.isTokenExpired\n })\n case loginFailure:\n return Object.assign({}, state, {\n isFetching: false,\n initiateRedirect: false,\n isAuthenticated: false,\n errorMessage: action.message\n })\n case refreshTokenRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case refreshTokenSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n userProfile: action.userProfile,\n userClaims: action.userClaims,\n isTokenExpired: action.isTokenExpired,\n errorMessage: ''\n })\n case refreshTokenFailure:\n return Object.assign({}, state, {\n isFetching: false,\n initiateRedirect: false,\n isAuthenticated: false,\n errorMessage: action.message\n })\n case logoutSuccess:\n return Object.assign({}, state, {\n isFetching: true,\n initiateRedirect: false,\n isAuthenticated: false\n })\n case houseLoginRequest:\n return Object.assign({}, state, {\n isFetching: true,\n initiateRedirect: false\n })\n case houseLoginFailure:\n return Object.assign({}, state, {\n isFetching: false,\n initiateRedirect: false,\n isAuthenticated: false,\n errorMessage: action.message\n })\n case houseLoginSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n initiateRedirect: true,\n isAuthenticated: true,\n errorMessage: '',\n userProfile: action.userProfile,\n userClaims: action.userClaims,\n isTokenExpired: action.isTokenExpired\n })\n default:\n return state\n }\n};","import React from \"react\";\nimport { useMsal } from \"@azure/msal-react\";\nimport { loginRequest } from \"../../../authConfig\";\n\nconst HouseLoginButton = (props) => {\n const { instance } = useMsal();\n const user = props.username;\n const handleLogin = (loginType) => {\n if (loginType === \"redirect\") {\n loginRequest.loginHint = user\n instance.loginRedirect(loginRequest).catch(e => {\n console.log(e);\n });\n }\n }\n return (\n <button className=\"button secondary\" type=\"submit\" onClick={() => handleLogin(\"redirect\")}>Login</button>\n );\n}\n\nexport default HouseLoginButton;","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport * as Fields from '../../lis-layout/components/lis-forms-component';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport HouseLoginButton from './lis-house-login-button';\n\nclass LoginForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n username: '',\n password: '',\n isSubmitting: false,\n errorMessage: '',\n houseLogin: false\n };\n\n this.checkForHouseDomain = this.checkForHouseDomain.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n checkForHouseDomain() {\n let userNameSplit = this.state.username.split(\"@\");\n\n this.setState({\n houseLogin: userNameSplit[1] && userNameSplit[1] === \"house.virginia.gov\" ? true : false\n })\n }\n\n handleChange(key, val) {\n this.setState({\n [key]: val\n }, () => {\n if (key === \"username\") {\n this.checkForHouseDomain();\n }\n });\n }\n\n handleSubmit(e) {\n e.preventDefault();\n if (this.state.houseLogin) { return; }\n this.setState({\n isSubmitting: true\n })\n const params = {\n userId: this.state.username,\n userPassword: this.state.password\n }\n this.props.actions.loginUser(params)\n .catch(err => {\n if (err.IsPasswordTemporaryOrExpired) {\n this.props.history.push('/change-password?emailaddress=' + params.userId + '&passwordistemporaryorexpired=true');\n } else {\n const failureMessage = err.FailureMessage;\n const failureCode = failureMessage?.match(/Login failed \\(\\d+\\)/);\n this.setState({\n errorMessage: failureCode ? <span className=\"message-error\">Login failed. Invalid Email or Password. Please try again or <a style={{ display: \"inline-block\", padding: \"0px\", margin: \"0px\" }} href={`mailto:LIS@dlas.virginia.gov?subject=Login failed - invalid User ID or Password -- ${failureCode[0].match(/\\(\\d+\\)/)}`}>contact us</a> for assistance if the issue persists.</span> : <span className=\"message-error\">{failureMessage ?? JSON.stringify(err)}</span>,\n isSubmitting: false\n });\n }\n })\n }\n\n render() {\n const {\n isSubmitting,\n errorMessage,\n username,\n password,\n houseLogin\n } = this.state;\n\n const {\n isSubmenu\n } = this.props;\n\n return (\n <div className={!isSubmenu && \"inner-grid two multi-row\"}>\n <div className=\"dlas-forms\">\n <form onSubmit={this.handleSubmit}>\n <div>\n <div className=\"single-row\">\n {isSubmenu\n ? <span className=\"bold txt-blue\">Log In to LIS</span>\n : <h3>Log In to LIS</h3>}\n </div>\n <div className=\"single-row\">\n <Fields.TextInput\n id=\"userId\"\n autoFocus={true}\n type=\"text\"\n placeholder=\"Email\"\n value={username}\n onChange={e => this.handleChange('username', e.target.value)}\n />\n </div>\n <div className=\"single-row\">\n {!houseLogin\n ? <Fields.TextInput\n id=\"userPassword\"\n type=\"password\"\n placeholder=\"Password\"\n value={password}\n onChange={e => this.handleChange('password', e.target.value)}\n onFocus={() => this.checkForHouseDomain()}\n />\n : <HouseLoginButton username={username} />\n }\n </div>\n <div className=\"single-row\" style={!isSubmenu ? { marginTop: \"10px\" } : {}}>\n {!houseLogin && <button className=\"button secondary\" type=\"submit\" disabled={!username || !password || isSubmitting}>Login</button>}\n </div>\n {!houseLogin && errorMessage}\n </div>\n </form>\n {isSubmenu && <hr className=\"faded-line full-width\" />}\n <div className=\"flex-row\" style={!isSubmenu ? { marginTop: \"10px\" } : {}}>\n <Link style={{ textDecoration: \"none\" }} to=\"/forgot-password\">Forgot Password</Link>\n <Link style={{ textDecoration: \"none\" }} to=\"/register-account\">Register Account</Link>\n </div>\n </div>\n {!isSubmenu &&\n <div className=\"txt-blue\">\n <h3><b>Track up to 5 bills for free</b></h3>\n <p>Your new free account will allow you to track up to 5 bills in one Watchlist and set up notifications.</p>\n <p>Email notification triggers an email when bills are sponsored by a member of the General Assembly, referred to a House or Senate Committee or contain a specific key word(s), phrases, or Code section(s).</p>\n\n <h3><b>Lobbyist-in-a-Box Subscription</b></h3>\n <p>A subscription to Lobbyist-in-a-Box offers up to 100 Watchlists (previously called \"Profiles\") containing 300 bills each.</p>\n <p>The cost of this service is $400 per user for state agencies, and $600 per user for all other subscribers. More user accounts can be added, please refer to the Subscription Information on the <a style={{ textDecoration: \"none\" }} target=\"_blank\" rel=\"noreferrer\" href=\"http://help.lis.virginia.gov/liab/index.asp\">LIS Learning Center</a> for additional options and fees, the 2-Step Registration and Payment process, and complete LIAB registration instructions.</p>\n <p><span className=\"bold\">Need additional information or assistance?</span> Please send an e-mail message to <a style={{ textDecoration: \"none\" }} href=\"mailto:lis@dlas.virginia.gov\">lis@dlas.virginia.gov</a>.</p>\n <p>For questions relating to LIAB Subscription payment procedures, please contact Virginia Interactive, LLC (VI) dba Tyler Virginia at <a style={{ textDecoration: \"none\" }} href=\"mailto:va-customerservice@tylertech.com\">va-customerservice@tylertech.com</a> or (804) 318-4133.</p>\n </div>\n }\n </div>\n );\n\n }\n};\n\nexport default connect(\n (state) => {\n const { login, nav } = state;\n return {\n login,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, navActionCreators), dispatch)\n }\n }\n)(LoginForm);\n\n\n\n\n\n","import React from \"react\";\nimport { useMsal } from \"@azure/msal-react\";\n\nconst graphToken = 'GRAPH_ID_TOKEN';\nconst idToken = 'LIS_ID_TOKEN';\nconst refreshToken = 'LIS_REFRESH_TOKEN';\nconst refreshTokenExpiration = 'LIS_REFRESH_TOKEN_EXPIRATION';\nconst claims = \"LIS_CLAIMS\";\n\nconst HouseLogoutButton = (props) => {\n const { instance } = useMsal();\n\n const handleLogout = (logoutType) => {\n if (logoutType === \"redirect\") {\n localStorage.removeItem(idToken);\n localStorage.removeItem(refreshToken);\n localStorage.removeItem(refreshTokenExpiration);\n localStorage.removeItem(claims);\n localStorage.removeItem(graphToken);\n instance.logoutRedirect()\n .then(() => {\n props.logout();\n })\n }\n }\n\n return (\n <button type=\"button\" className=\"button profile-action danger\" onClick={() => handleLogout(\"redirect\")}>Logout</button>\n );\n}\n\nexport default HouseLogoutButton","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport HouseLogoutButton from './lis-house-logout-button';\n\nconst Links = (props) => {\n let unsortedLinks = [];\n props.canAccessMemberMgmt &&\n unsortedLinks.push({\n route: \"/member-management\", label: \"Member Management\"\n });\n props.canAccessSessionMgmt &&\n unsortedLinks.push({\n route: \"/session-management\", label: \"Session Management\"\n });\n props.canAccessCommitteeMgmt &&\n unsortedLinks.push({\n route: \"/committee-management\", label: \"Committee Management\"\n });\n props.canAccessMinutesMgmt &&\n unsortedLinks.push({\n route: \"/minutes-management\", label: \"Minutes Management\"\n });\n props.canAccessDocketMgmt &&\n unsortedLinks.push({\n route: \"/docket-management\", label: \"Docket Management\"\n });\n props.canAccessBillMgmt &&\n unsortedLinks.push({\n route: \"/bill-management\", label: \"Bill Management\"\n });\n props.canAccessVersionMgmt &&\n unsortedLinks.push({\n route: \"/version-management\", label: \"Version Management\"\n });\n props.canAccessAmendmentMgmt &&\n unsortedLinks.push({\n route: \"/amendment-management\", label: \"Amendment Management\"\n });\n props.canAccessCommMgmt &&\n unsortedLinks.push({\n route: \"/communications-management\", label: \"Communications Management\"\n });\n props.canAccessCalendarMgmt &&\n unsortedLinks.push({\n route: \"/calendar-management\", label: \"Calendar Management\"\n });\n props.canAccessConfigurationsMgmt &&\n unsortedLinks.push({\n route: \"/configurations-management\", label: \"Configurations Management\"\n });\n props.canAccessJournalMgmt &&\n unsortedLinks.push({\n route: \"/journal-management\", label: \"Journal Management\"\n });\n props.canAccessVoteMgmt &&\n unsortedLinks.push({\n route: \"/vote-management\", label: \"Vote Management\"\n });\n props.canAccessPrintMgmt &&\n unsortedLinks.push({\n route: \"/print-management\", label: \"Print Management\"\n });\n props.canAccessMeetingsMgmt &&\n unsortedLinks.push({\n route: \"/schedule\", label: \"Meetings Management\"\n });\n props.canAccessPartnerMgmt &&\n unsortedLinks.push({\n route: \"/partner-management\", label: \"Partner Management\"\n });\n props.canAccessUserMgmt &&\n unsortedLinks.push({\n route: \"/user-management\", label: \"User Management\"\n });\n props.canAccessBds &&\n unsortedLinks.push({\n route: window.env?.APP_ENV === \"Production\" ? \"http://leg5.state.va.us/bd/frmBDSlogin.aspx\" : (\"http://test-bds.dlas.virginia.gov/default.aspx?srv=6&ses=\" + props.selectedSession.SessionCode.substr(2, 5) + \"&usr=D\"), label: \"Bill Drafting System (BDS)\", outside: true\n });\n\n return (\n <div>\n {unsortedLinks.sort((a, b) => a.label.localeCompare(b.label)).map((link, idx) => {\n return !link.outside ? <li key={idx}><Link to={link.route}>{link.label}</Link></li> : <li key={idx}><a href={link.route}>{link.label}</a></li>\n })\n }\n {\n props.canAccessReportMgmt &&\n <li><Link to=\"/report-management\">Rule Reports</Link></li>\n }\n {\n props.canAccessSenateLinks &&\n <React.Fragment>\n <li><a href=\"http://apps.dlas.virginia.gov/newamendments/ViewAmendmentsCommittee.aspx?hou=S\" target=\"_blank\" rel=\"noopener noreferrer\">Senate Committee Amendments</a></li>\n <li><a href=\"https://apps.dlas.virginia.gov/ComSubNew/Default.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">Senate Committee Substitutes</a></li>\n <li><a href=\"https://apps.dlas.virginia.gov/newamendments/frmFloorAmendments.aspx?hou=S\" target=\"_blank\" rel=\"noopener noreferrer\">Senate Floor Amendments</a></li>\n <li><a href=\"https://apps.dlas.virginia.gov/newamendments/frmFloorSubstitutes.aspx?hou=S\" target=\"_blank\" rel=\"noopener noreferrer\">Senate Floor Substitutes</a></li>\n <li><a href=\"https://apps.dlas.virginia.gov/comsubnew/frmCommitteeSummary.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">Senate Committee Vote Summary</a></li>\n <li><a href=\"http://leg4.state.va.us/dockets/frmLogin.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">Senate Patron Notification System</a></li>\n <li><a href=\"https://apps.senate.virginia.gov/calendar/comListVoting.php\" target='_blank'>Committee Room Docket Load</a></li> \n <li><a href=\"https://apps.dlas.virginia.gov/comsubnew/frmLogin.aspx\" target='_blank'>Committee Vote Push</a></li> \n </React.Fragment>\n }\n {\n props.canAccessPatronStatusReport &&\n <li><a href=\"http://efile.dlas.virginia.gov/frmMemberBD.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">Patron Status Report</a></li>\n }\n {\n props.isLoggedIn &&\n <li><Link to=\"/watchlists\">{props.canAccessWatchlists ? \"My Watchlists\" : \"My Watchlist\"}</Link></li>\n }\n </div>\n )\n}\n\nclass UserProfile extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n tabIndexNum: '-1',\n }\n\n this.targetFocus = React.createRef();\n }\n\n handleLogout(props) {\n this.props.actions.logoutUser();\n if (this.props.login.slideout) {\n this.props.login.slideoutToggle();\n }\n }\n\n render() {\n const {\n isOpen,\n isAriaHidden,\n isAriaExpanded,\n isMenuVisible,\n slideout,\n permissions\n } = this.props;\n\n const {\n tabIndexNum\n } = this.state;\n\n if (isOpen) {\n this.targetFocus.current.focus();\n }\n\n return (\n <div>\n {!slideout\n ?\n <div>\n <p className=\"welcome-txt\">Hi, {this.props.login.userProfile.name}</p>\n <ul>\n <Links\n canAccessMemberMgmt={Boolean(permissions.find(p => p.canAccessMemberMgmt))}\n canAccessSessionMgmt={Boolean(permissions.find(p => p.canAccessSessionMgmt))}\n canAccessCommitteeMgmt={Boolean(permissions.find(p => p.canAccessCommitteeMgmt))}\n canAccessMinutesMgmt={Boolean(permissions.find(p => p.canAccessMinutesMgmt))}\n canAccessDocketMgmt={Boolean(permissions.find(p => p.canAccessDocketMgmt))}\n canAccessVersionMgmt={Boolean(permissions.find(p => p.canAccessVersionMgmt))}\n canAccessAmendmentMgmt={Boolean(permissions.find(p => p.canAccessAmendmentMgmt))}\n canAccessBillMgmt={Boolean(permissions.find(p => p.canAccessBillMgmt))}\n canAccessCommMgmt={Boolean(permissions.find(p => p.canAccessCommMgmt))}\n canAccessCalendarMgmt={Boolean(permissions.find(p => p.canAccessCalendarMgmt))}\n canAccessConfigurationsMgmt={Boolean(permissions.find(p => p.canAccessConfigurationsMgmt))}\n canAccessJournalMgmt={Boolean(permissions.find(p => p.canAccessJournalMgmt))}\n canAccessVoteMgmt={Boolean(permissions.find(p => p.canAccessVoteMgmt))}\n canAccessPrintMgmt={Boolean(permissions.find(p => p.canAccessPrintMgmt))}\n canAccessReportMgmt={Boolean(permissions.find(p => p.canAccessReportMgmt))}\n canAccessMeetingsMgmt={Boolean(permissions.find(p => p.canAccessMeetingsMgmt))}\n canAccessWatchlists={Boolean(permissions.find(p => p.canAccessWatchlists))}\n canAccessPartnerMgmt={Boolean(permissions.find(p => p.canAccessPartnerMgmt))}\n canAccessUserMgmt={Boolean(permissions.find(p => p.canAccessUserMgmt))}\n canAccessSenateLinks={Boolean(permissions.find(p => p.canAccessSenateLinks))}\n canAccessPatronStatusReport={Boolean(permissions.find(p => p.canAccessPatronStatusReport))}\n canAccessBds={Boolean(permissions.find(p => p.canAccessBds))}\n isLoggedIn={this.props.login.isAuthenticated}\n bdsRole={this.props.login.bdsRole}\n selectedSession={this.props.session.selectedSession}\n />\n </ul>\n <p className=\"profile-action-container\">\n <Link to=\"/profile\" className=\"button profile-action informational\" style={{ margin: '0px', padding: '7px 20px' }}>Profile</Link>\n {this.props.login.userProfile.email.split(\"@\")[1] === \"house.virginia.gov\"\n ? <HouseLogoutButton\n logout={this.props.actions.logoutUser}\n />\n : <button className=\"button profile-action danger\" onClick={this.handleLogout.bind(this)}>Logout</button>}\n </p>\n </div>\n :\n <nav id=\"slideout-menu\" tabIndex={tabIndexNum} aria-expanded={isAriaExpanded} aria-hidden={isAriaHidden}>\n <div className={isMenuVisible ? 'slideout-inner show' : 'slideout-inner'}>\n <ul>\n <li className=\"menu-heading\">LIS</li>\n <li className='small-li'><a ref={this.targetFocus} href=\"http://virginiageneralassembly.gov/\">VIRGINIA GENERAL ASSEMBLY</a></li>\n <li className='small-li'><a href=\"http://help.lis.virginia.gov/\" target=\"_blank\" rel=\"noreferrer\">LIS LEARNING CENTER</a></li>\n <li className='small-li'><Link to=\"/home\">LIS HOME</Link></li>\n {\n this.props.login.isAuthenticated &&\n <li className='small-li'><Link to=\"/profile\">PROFILE</Link></li>\n }\n {this.props.login.userProfile.name === \"\"\n ?\n <React.Fragment>\n <li className='small-li'><Link to=\"/register-account\">REGISTER ACCOUNT</Link></li>\n <li className='small-li'><Link to=\"/login\">LOGIN</Link></li>\n </React.Fragment>\n : this.props.login.userProfile.email.split(\"@\")[1] === \"house.virginia.gov\"\n ? <HouseLogoutButton />\n : <li className='small-li' onClick={this.handleLogout.bind(this)}><a className=\"slideout-nav-logout\">LOGOUT</a></li>\n }\n <li><Link to={`/`}>Session Information</Link></li>\n <li><Link to=\"/bill-search\">Bills & Resolutions</Link></li>\n <li><a target=\"_blank\" href={\"https://budget.lis.virginia.gov/\"}>State Budget</a></li>\n <li><a target=\"_blank\" href=\"https://law.lis.virginia.gov/\">Virginia Law</a></li>\n <li><a target=\"_blank\" href=\"https://rga.lis.virginia.gov/\">Reports to the General Assembly</a></li>\n <Links\n canAccessMemberMgmt={Boolean(permissions.find(p => p.canAccessMemberMgmt))}\n canAccessSessionMgmt={Boolean(permissions.find(p => p.canAccessSessionMgmt))}\n canAccessCommitteeMgmt={Boolean(permissions.find(p => p.canAccessCommitteeMgmt))}\n canAccessMinutesMgmt={Boolean(permissions.find(p => p.canAccessMinutesMgmt))}\n canAccessDocketMgmt={Boolean(permissions.find(p => p.canAccessDocketMgmt))}\n canAccessBillMgmt={Boolean(permissions.find(p => p.canAccessBillMgmt))}\n canAccessVersionMgmt={Boolean(permissions.find(p => p.canAccessVersionMgmt))}\n canAccessAmendmentMgmt={Boolean(permissions.find(p => p.canAccessAmendmentMgmt))}\n canAccessCommMgmt={Boolean(permissions.find(p => p.canAccessCommMgmt))}\n canAccessCalendarMgmt={Boolean(permissions.find(p => p.canAccessCalendarMgmt))}\n canAccessConfigurationsMgmt={Boolean(permissions.find(p => p.canAccessConfigurationsMgmt))}\n canAccessJournalMgmt={Boolean(permissions.find(p => p.canAccessJournalMgmt))}\n canAccessVoteMgmt={Boolean(permissions.find(p => p.canAccessVoteMgmt))}\n canAccessPrintMgmt={Boolean(permissions.find(p => p.canAccessPrintMgmt))}\n canAccessReportMgmt={Boolean(permissions.find(p => p.canAccessReportMgmt))}\n canAccessMeetingsMgmt={Boolean(permissions.find(p => p.canAccessMeetingsMgmt))}\n canAccessWatchlists={Boolean(permissions.find(p => p.canAccessWatchlists))}\n canAccessPartnerMgmt={Boolean(permissions.find(p => p.canAccessPartnerMgmt))}\n canAccessUserMgmt={Boolean(permissions.find(p => p.canAccessUserMgmt))}\n canAccessSenateLinks={Boolean(permissions.find(p => p.canAccessSenateLinks))}\n canAccessPatronStatusReport={Boolean(permissions.find(p => p.canAccessPatronStatusReport))}\n canAccessBds={Boolean(permissions.find(p => p.canAccessBds))}\n isLoggedIn={this.props.login.isAuthenticated}\n selectedSession={this.props.session.selectedSession}\n />\n <li></li>\n </ul>\n </div>\n </nav>\n }\n </div>\n )\n }\n};\n\nexport default connect(\n (state) => {\n const { login, session } = state;\n return {\n session,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators), dispatch)\n }\n }\n)(UserProfile)","import React from 'react';\nimport Login from '../../lis-login/components/lis-login-form';\nimport UserProfile from './lis-profile-component';\n\n\nclass Submenu extends React.Component {\n\n render() {\n const {\n isAuth\n } = this.props;\n\n if (!isAuth) {\n return (\n <ul className=\"nav-submenu\">\n <Login\n history={this.props.history}\n isSubmenu={true}\n />\n </ul>\n )\n }\n else {\n return (\n <ul className=\"nav-submenu\">\n <UserProfile permissions={this.props.permissions} />\n </ul>\n )\n }\n }\n}\n\nexport default Submenu;","import React from 'react';\nimport { withRouter } from 'react-router';\nimport { connect } from 'react-redux';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { bindActionCreators } from 'redux';\nimport queryString from 'query-string';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\n\nclass SearchInputComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n search: ''\n };\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n handleInputChange(event) {\n this.setState({ search: event.target.value });\n }\n\n handleSubmit(event) {\n event.preventDefault();\n event.stopPropagation();\n\n //If nothing is in the search box then don't search\n if (this.state.search.replace(/\\s/g, '') === '') {\n return;\n }\n\n let session, getSessionPromise;\n if (this.props.session.sessionList && this.props.session.sessionList.length) {\n session = this.props.session.sessionList.find(session => session.SessionCode === this.props.nav.session).SessionID;\n } else {\n getSessionPromise = this.props.actions.getSessionByCode(this.props.nav.session)\n .then(() => {\n session = this.props.session.selectedSession.SessionID;\n })\n }\n\n Promise.all([getSessionPromise]).finally(() => {\n // Check to see if the search term contains a bill number\n // This regex means 'match any of the bill prefixes even if it is seperated by non alpha-numberic characters. Only match if it is followed by a number. Also, include the number in the match'\n // A greater than sign (>) or less than sign (<) is a symbol used to search multiple bills. It also is part of a valid bill number\n const regexResult = this.state.search.match(/[HS][^0-9A-Z]*[BJR][^0-9A-Z]*(?=[0-9])[0-9]+[<>-]?/gi);\n let legNumbers = '';\n let searchTerms = '';\n if (regexResult) {\n //bill number(s) found\n legNumbers = '';\n let foundRange = false;\n let searchWithRemovedBillNumbers = this.state.search;\n regexResult.forEach((result, resultIndex) => {\n foundRange = result.match(/-/g);\n //If it has a dash then it is a range of bills and should not get a comma after it\n if (foundRange !== null) {\n //Remove all the characters that are not a letter, number, or dash\n legNumbers += result.replace(/[^A-Za-z0-9\\-]+/g, '');\n } else {\n //Remove all the characters that are not a letter, number, greater than sign, or less than sign\n legNumbers += result.replace(/[^A-Za-z0-9<>]+/g, '');\n //Add a comma between the legislation numbers so the api can search for multiple legislation numbers\n if (regexResult.length !== resultIndex + 1) {\n legNumbers += ','\n }\n }\n // Remove the bill numbers from the search string. If there is anything left then add them as search terms\n searchWithRemovedBillNumbers = searchWithRemovedBillNumbers.replace(result, '')\n });\n searchTerms = searchWithRemovedBillNumbers;\n // Remove any commas since those were probably added by the user to seperate the bill numbers\n searchTerms = searchTerms.replace(',', '');\n\n } else {\n searchTerms = this.state.search;\n }\n\n if (/[A-Za-z0-9]+/g.test(searchTerms)) {\n searchTerms = searchTerms.trim();\n } else {\n // Don't add search terms if there are no letters or numbers in it\n searchTerms = '';\n }\n const param = {\n selectedBillNumbers: legNumbers,\n selectedKeywords: searchTerms,\n selectedSession: session\n }\n const link = window.btoa(JSON.stringify(param));\n let url = '/bill-search?q=' + link;\n if (this.props.location.pathname === '/bill-search') {\n //if they have selected a watchlist, keep the watchlist set in the url\n if (queryString.parse(this.props.location.search).collection) url += \"&collection=\" + queryString.parse(this.props.location.search).collection;\n //if they are re-executing the same search (i.e. same parameters) as they're currently viewing (essentially a refresh), just add a rnd so the url changes (needed for search to execute)\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q && parsed.q === link) {\n url += '&rnd=' + new Date().getTime();\n }\n }\n this.props.history.push(url);\n });\n }\n\n render() {\n return (\n <div className=\"global-search-box\">\n <form>\n <label htmlFor=\"quick-search\" className=\"screen-reader-only\">Search for keyword or bill number</label>\n <input type=\"text\" id=\"quick-search\" className=\"quick-search\" onChange={this.handleInputChange} value={this.state.search} placeholder=\"Search for keyword or bill number\" />\n <input type=\"submit\" aria-label=\"search\" value=\"GO\" onClick={this.handleSubmit} className=\"input-searchbtn\" />\n </form>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, session } = state;\n return {\n nav,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(withRouter(SearchInputComponent))","import React from 'react';\nimport { Link, withRouter } from 'react-router-dom';\nimport { CSSTransitionGroup } from 'react-transition-group';\nimport Submenu from './lis-submenu-component';\nimport SearchInput from './lis-global-search-input-component';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\n\nclass NavMenu extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showLogin: false,\n pathName: ''\n };\n this.handleClick = this.handleClick.bind(this);\n this.handleClosingLoginOnOffClick = this.handleClosingLoginOnOffClick.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n }\n\n componentDidMount() {\n const pathName = this.props.location.pathname;\n this.setState({ pathName: pathName })\n\n document.body.addEventListener('mousedown', this.mousedownListener);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.location !== prevProps.location) {\n this.setState(prevState => ({\n showLogin: false,\n pathName: this.props.location.pathname\n }));\n }\n if (this.props.location.pathname !== prevProps.location.pathname && this.props.isOpen) {\n this.props.slideoutToggle();\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('mousedown', this.mousedownListener)\n }\n\n mousedownListener(e) {\n if (this.state.showLogin) {\n const loginBox = document.getElementsByClassName(\"nav-submenu\")[0];\n const profileLink = document.getElementsByClassName(\"profile-link\")[0];\n const loginLink = document.getElementsByClassName(\"login-link\")[0];\n if ((!loginBox || (loginBox !== e.target && !loginBox.contains(e.target))) &&\n (!loginLink || (loginLink !== e.target && !loginLink.contains(e.target))) &&\n (!profileLink || (profileLink !== e.target && !profileLink.contains(e.target)))) {\n this.handleClosingLoginOnOffClick();\n }\n }\n }\n\n handleClosingLoginOnOffClick() {\n if (this.state.showLogin) {\n this.setState({\n showLogin: false\n });\n }\n }\n\n handleClick() {\n this.setState(prevState => ({\n showLogin: !prevState.showLogin\n }));\n }\n\n slideoutToggle() {\n this.props.slideoutToggle();\n }\n\n render() {\n const { isAuthenticated, userProfile } = this.props.login;\n // Make dynamic button based on user's auth state\n let button;\n if (!isAuthenticated) {\n button = <LoginButton onClick={this.handleClick} />;\n } else {\n button = <ProfileButton onClick={this.handleClick} name={userProfile.initials} />\n }\n // Make dynamic header based on URL path\n let header;\n let isBillPath = this.state.pathName.includes('/bill-search');\n if (isBillPath) {\n header = <h1>Bills & Resolutions </h1>\n } else {\n header = <h1>Legislative Information System </h1>\n }\n // Assemble session-aware budget url\n let budgetUrl = \"https://budget.lis.virginia.gov/\";\n if (this.props.session) {\n // budgetUrl += `default/${this.props.session.SessionCode.substr(0, 4)}/${this.props.session.SessionCode.substr(4)}`\n }\n\n return (\n <nav>\n <div className=\"lis-links-content full\">\n <ul>\n <li><a href=\"http://virginiageneralassembly.gov/\">Virginia General Assembly</a> /</li>\n <li><a href=\"http://help.lis.virginia.gov/\" target=\"_blank\" rel=\"noreferrer\">LIS Learning Center</a> /</li>\n <li><Link to=\"/privacy\" target=\"_blank\" rel=\"noreferrer\">Privacy Policy</Link> /</li>\n <li>\n <Link to=\"/home\">LIS Home</Link> /\n </li>\n {!isAuthenticated && <li>\n <Link to=\"/register-account\">Register Account</Link> /\n </li>}\n <li onClick={e => e.stopPropagation()} className=\"parent-link\">\n {button}\n <div className=\"submenu-container\">\n <CSSTransitionGroup\n transitionName=\"slide\"\n transitionEnterTimeout={300}\n transitionLeaveTimeout={300}\n >\n {this.state.showLogin && <Submenu history={this.props.history} isAuth={isAuthenticated} permissions={this.props.permissions} />}\n </CSSTransitionGroup>\n </div>\n </li>\n </ul>\n </div>\n <div className=\"grid-wrapper one-and-three halves\">\n <div className=\"menu-title\">\n <Link to=\"/home\">LIS</Link>\n </div>\n <div className=\"menu-links\">\n <div className=\"menu-btn\">\n <button type=\"button\" onClick={this.slideoutToggle.bind(this)} href=\"#menu\" tabIndex=\"0\" aria-label=\"Menu\">Menu</button>\n </div>\n <ul>\n <li>\n <Link className=\"txt-blue\" to={`/`}>Session Information</Link>\n </li>\n <li>\n <Link className=\"txt-dark-blue\" to=\"/bill-search\">Bills & Resolutions</Link>\n </li>\n <li>\n <a className=\"txt-green\" target=\"_blank\" href={`${budgetUrl}`}>State Budget</a>\n </li>\n <li>\n <a className=\"txt-light-green\" target=\"_blank\" href=\"https://law.lis.virginia.gov/\">Virginia Law</a>\n </li>\n <li>\n <a className=\"txt-orange\" target=\"_blank\" href=\"https://rga.lis.virginia.gov/\">Reports to the General Assembly</a>\n </li>\n </ul>\n </div>\n </div>\n <div id=\"site-title-container\" className={isBillPath ? 'bill-theme' : null}>\n <div className=\"site-title-content grid-wrapper three-and-two\">\n {header}\n <SearchInput />\n </div>\n </div>\n </nav>\n )\n }\n}\n\nfunction LoginButton(props) {\n return (\n <a className=\"login-link\" onClick={props.onClick}>\n Login\n </a>\n );\n}\n\nfunction ProfileButton(props) {\n return (\n <a className=\"profile-link\" onClick={props.onClick}>\n {props.name}\n </a>\n );\n}\n\nconst Menu = connect(\n (state) => {\n const { login, nav } = state;\n return {\n login,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, authActionCreators), dispatch)\n }\n }\n)(NavMenu)\n\nexport default withRouter(Menu);","import React from 'react';\nimport Select from 'react-select';\nimport { Link } from 'react-router-dom';\nimport { withRouter } from 'react-router';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nconst customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '14px',\n fontWeight: state.data.IsActive ? 'bold' : 'normal'\n }),\n control: (base) => ({\n ...base,\n fontSize: '14px',\n background: '#f1f1f1',\n border: '1px solid #d8d8d8',\n borderRadius: '0 0 5px 5px'\n }),\n menu: (base) => ({\n ...base,\n width: '245px',\n marginTop: '1px',\n\n }),\n menuList: (base) => ({\n ...base,\n marginTop: '1px'\n }),\n indicatorSeparator: (base) => ({\n ...base,\n display: \"none\"\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n}\n\nclass SessionSelector extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n data: [],\n selectedSession: {},\n sessionListMessage: '',\n sessionOptions: []\n };\n\n this.getSessions = this.getSessions.bind(this);\n }\n\n componentDidMount() {\n this.getSessions();\n }\n\n getSessions() {\n this.props.actions.getSessionList().then(() => {\n if (this.props.session.sessionList.length > 0) {\n // FORMAT DATA FOR DROPDOWN\n let sessionList = [...this.props.session.sessionList]\n sessionList.forEach(session => {\n session.value = session.SessionID;\n session.label = session.SessionYear + ' ' + session.DisplayName + (session.IsActive ? ' (Active)' : '');\n if (session.SessionCode === this.props.nav.session) {\n this.setState({\n selectedSession: session\n });\n } else if (session.IsDefault && !this.props.nav.session) {\n this.props.actions.changeSession(session.SessionCode);\n this.setState({\n selectedSession: session\n });\n }\n });\n sessionList = sessionList.reverse();\n this.setState({\n sessionOptions: sessionList\n });\n } else {\n this.setState({\n sessionListMessage: this.props.session.sessionListMessage\n });\n }\n });\n }\n\n handleChange = value => {\n if (window.env && window.env.HISTORICAL_DATA_REDIRECT && value && !value.IsDefault && value.LegacySessionID && value.SessionCode != \"20242\") {\n this.setState({\n historicalSessionRedirect: (redirect) => {\n if (redirect) {\n let a = document.createElement('a');\n a.target = '_blank';\n a.href = `https://legacylis.virginia.gov/cgi-bin/legp604.exe?ses=${value.SessionCode.substring(2)}&typ=lnk&val=${value.LegacySessionID}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n this.setState({ historicalSessionRedirect: false })\n }\n })\n return;\n }\n if (value && value.SessionCode) {\n this.setState({\n selectedSession: this.state.sessionOptions.find(s => s.SessionCode === value.SessionCode)\n });\n this.props.actions.changeSession(value.SessionCode);\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.nav.session !== this.props.nav.session || (prevState.sessionOptions.length !== this.state.sessionOptions.length && this.state.selectedSession?.SessionCode !== this.props.nav.session)) {\n const selectedSession = this.state.sessionOptions.find(option => option.SessionCode?.toString() === this.props.nav.session?.toString())\n if (selectedSession) {\n this.setState({\n selectedSession: selectedSession\n })\n }\n }\n if (prevProps.nav.reloadSessionSelector !== this.props.nav.reloadSessionSelector && this.props.nav.reloadSessionSelector === true) {\n this.getSessions();\n this.props.actions.reloadSessionSelector(false);\n }\n\n if (this.props.overrideSession != \"\") {\n this.handleChange(this.props.overrideSession)\n }\n }\n\n getSelectedSessionLabel(selectedSession) {\n let newSession = { ...selectedSession } //don't modify existing session values stored at state level & used in dropdown\n if (newSession && newSession.label) {\n newSession.label = newSession.label.replace(' (Active)', '')\n }\n return newSession;\n }\n\n render() {\n const { sessionOptions, selectedSession } = this.state;\n const hide = this.props.nav.hideSessionSelectorPaths.find(path => new RegExp(path, 'g').test(this.props.location.pathname))\n\n return (\n <div className=\"full\" id=\"session-select-container\">\n {this.state.historicalSessionRedirect &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content fit-content center-content\">\n <p>For historical data, please use <b>Legacy LIS</b>, available at <b><a href=\"https://legacylis.virginia.gov\" target=\"_blank\" rel=\"noreferrer\">https://legacylis.virginia.gov</a></b>.</p>\n <p>Click 'Go' to be taken to Legacy LIS, or 'Close' to remain here.</p>\n <div className=\"inline-list\">\n <button className=\"button primary float-right\" onClick={() => this.state.historicalSessionRedirect(true)}>Go</button>\n <button className=\"button secondary float-right\" onClick={() => this.state.historicalSessionRedirect(false)}>Close</button>\n </div>\n <br />\n </div>\n </div>\n\n }\n <div className={hide && this.props.location.pathname !== \"/profile\" ? \"session-select-tab hidden\" : \"session-select-tab\"}>\n <Select\n id=\"sessionSelector\"\n classNamePrefix=\"global-session-selector\"\n isSearchable={false}\n options={sessionOptions}\n maxMenuHeight={170}\n value={this.getSelectedSessionLabel(selectedSession)}\n onChange={this.handleChange}\n styles={customStyles}\n />\n </div>\n <div className=\"link-wrapper\">\n <Link to=\"/bill-search\">Advanced Search</Link>\n </div>\n </div>\n )\n\n }\n};\n\nexport default connect(\n (state) => {\n const { session, nav } = state;\n return {\n session,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, navActionCreators), dispatch)\n }\n }\n)(withRouter(SessionSelector))","import React from 'react';\nimport { checkToken } from '../../../services/request.service'\n\nclass Popup extends React.Component  {\n constructor(props) {\n super(props);\n this.state = {\n };\n this.closePopup = this.closePopup.bind(this);\n this.logOut = this.logOut.bind(this);\n }\n\n closePopup() {\n checkToken()\n .then(this.props.togglePopup());\n }\n\n logOut() {\n this.props.logOut();\n this.props.togglePopup();\n }\n\n componentDidMount() {\n if (this.props.isIdle) {\n this.timerHandle = setTimeout(() => {\n this.props.logOut();\n this.props.togglePopup();\n this.timerHandle = 0\n }, 60000 * 15);\n }\n }\n\n componentWillUnmount = () => {\n if (this.timerHandle) {\n clearTimeout(this.timerHandle);\n this.timerHandle = 0;\n }\n };\n\n render() {\n return (\n <div className='popup'>\n <div className='popup-inner'>\n <p>{this.props.text}</p>\n\n <div>\n <button className=\"button primary\" onClick={this.closePopup}>Yes</button>\n <button className=\"button secondary\" onClick={this.logOut}>No</button>\n </div>\n {/*this.props.deletionWarning &&\n <div>\n <button className=\"button primary\" onClick={this.props.togglePopup}>Continue</button>\n <button className=\"button secondary\" onClick={this.props.logOut}>Cancel</button>\n </div>\n */}\n </div>\n </div>\n );\n }\n}\n\nexport default Popup;","import React from 'react';\n\nclass ToastContainer extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n toasts: this.props.toasts,\n visible: false\n }\n\n this.dismiss = this.dismiss.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.toasts !== this.props.toasts) {\n this.setState({\n visible: true,\n dismissed: false\n }, function () {\n setTimeout(() => {\n this.setState({\n visible: false\n })\n }, 3000)\n })\n }\n }\n\n dismiss() {\n this.setState({\n visible: false,\n dismissed: true\n })\n }\n\n render() {\n\n const { toasts } = this.props\n const visible = this.state.visible\n return (\n <div className={\"toast-container \" + (\n visible\n ? this.props.toasts[0] && this.props.toasts[0].long\n ? \"show-long\"\n : 'show'\n : this.props.toasts[0] && this.props.toasts[0].long\n ? 'hide-long'\n : 'hide'\n )}>\n <Toast toasts={toasts} dismiss={this.dismiss} visible={visible} dismissed={this.state.dismissed} />\n </div>\n )\n }\n}\nclass Toast extends React.Component {\n render() {\n const items = this.props.toasts.map((item, index) => {\n return (\n <div key={index} className={`toast ${item.type}${this.props.visible ? '' : ` hide${item.long ? '-long' : ''}`}${this.props.dismissed ? ' dismissed' : ''}`}>\n <div className='toast-inner'>\n <p>{item.message}</p>\n {item.long && <button className=\"icon cross\" onClick={() => this.props.dismiss()} style={{ margin: \"30px 0px 0px 15px\" }} />}\n </div>\n </div>\n );\n })\n\n return (<React.Fragment>{items}</React.Fragment>);\n }\n}\n\nexport default ToastContainer;","import React from \"react\"\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { Link, withRouter } from 'react-router-dom';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nclass IconLinks extends React.Component {\n constructor(props) {\n super(props);\n\n }\n\n render() {\n const { selectedSession } = this.props;\n let budgetUrl = \"https://budget.lis.virginia.gov/\";\n if (selectedSession) {\n //budgetUrl += `default/${selectedSession.SessionCode.substr(0, 4)}/${selectedSession.SessionCode.substr(4)}`\n }\n\n return (\n <div className=\"landing home-icon-links\">\n <div className=\"grid-wrapper four-icons\">\n <div className=\"landing legislation\">\n <Link className=\"info-link legislation\" to=\"/bill-search\"></Link>\n <Link to=\"/bill-search\">Bills & Resolutions</Link>\n </div>\n <div className=\"landing state-budget\">\n <a className=\"info-link state-budget\" href={`${budgetUrl}`}></a>\n <a href={`${budgetUrl}`}>State Budget</a>\n </div>\n <div className=\"landing virginia-law\">\n <a className=\"info-link virginia-law\" href={`https://law.lis.virginia.gov/`}></a>\n <a href={`https://law.lis.virginia.gov/`}>Virginia Law</a>\n </div>\n <div className=\"landing legislative-resources\">\n <a className=\"info-link legislative-resources\" href={`https://rga.lis.virginia.gov/`}></a>\n <a href={`https://rga.lis.virginia.gov/`}>Reports to the General Assembly</a>\n </div>\n </div>\n </div>\n )\n }\n}\n\nconst Links = connect(\n (state) => {\n const { nav } = state;\n return {\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators), dispatch)\n }\n }\n)(IconLinks)\n\nexport default withRouter(Links)","import React from 'react';\nimport Menu from './lis-nav-component';\nimport SessionSelector from './lis-session-selector';\nimport Popup from './lis-popup-component';\nimport Profile from './lis-profile-component';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport ToastContainer from './lis-toast-component';\nimport IconLinks from './lis-icon-links-component';\n\nclass Layout extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n helpBanner: !localStorage.getItem(\"HELP_BANNER_DISMISSED\"),\n showPopup: false,\n popupMessage: '',\n isIdle: false,\n isAriaExpanded: false,\n isAriaHidden: true,\n isMenuVisible: false,\n isOpen: false,\n overrideSession: \"\"\n };\n\n this.dismissHelpBanner = this.dismissHelpBanner.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (!prevProps.isIdle && this.props.isIdle) {\n this.setState({\n showPopup: true\n })\n }\n\n if (this.props.location.pathname === \"/home\" && prevProps.location.pathname !== \"/home\" && this.state.overrideSession === \"\") {\n let session = this.props.session.sessionList.find(x => x.IsDefault);\n if (session) {\n this.props.actions.changeSession(session.SessionCode)\n this.setState({ overrideSession: session })\n }\n } else if (this.state.overrideSession !== \"\") {\n this.setState({\n overrideSession: \"\"\n })\n }\n }\n\n logOutUser() {\n this.props.actions.logoutUser();\n }\n\n togglePopup() {\n this.setState(state => ({\n showPopup: !state.showPopup\n }));\n }\n\n slideoutToggle() {\n this.setState(prevState => ({\n isMenuVisible: !prevState.isMenuVisible,\n isAriaHidden: !prevState.isAriaHidden,\n isAriaExpanded: !prevState.isAriaExpanded,\n isOpen: !prevState.isOpen\n }));\n }\n\n dismissHelpBanner() {\n localStorage.setItem(\"HELP_BANNER_DISMISSED\", true);\n this.setState({ helpBanner: false })\n }\n\n render() {\n const {\n popupMessage\n } = this.props;\n const { isOpen, isAriaHidden, isAriaExpanded, isMenuVisible, helpBanner } = this.state;\n\n return (\n <div className={isOpen ? 'open-state' : null}>\n {isOpen &&\n <div className=\"slideout-overlay\" onClick={this.slideoutToggle.bind(this)} />\n }\n {window.env?.APP_ENV?.toLowerCase() !== \"production\" && window.env?.API_SERVER?.toLowerCase() !== \"https://lis.virginia.gov\" && <div className=\"alert alert-warning mb-0\"><b>This is a non-production environment</b>. This environment is NOT for public access. You may access LIS at <a href=\"https://lis.virginia.gov\">LIS.virginia.gov</a>.</div>}\n {this.props.login.userClaims?.claims?.find(c => c.RoleName?.toLowerCase() === \"admin\") && (window.env?.APP_ENV?.toLowerCase() === \"production\" || window.env?.API_SERVER?.toLowerCase() === \"https://lis.virginia.gov\") && <div className=\"alert alert-danger mb-0\"><b>PLEASE BEWARE</b>: YOU ARE IN THE PRODUCTION LIS ENVIRONMENT AND ANY ACTIONS TAKEN WILL BE SUBMITTED IN THE PRODUCTION DATABASE.</div>}\n {helpBanner && <div className=\"help-banner\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\" onClick={this.dismissHelpBanner}><span aria-hidden=\"true\">×</span></button>Get acquainted with our new Virginia State Legislative Information System! <a href=\"https://help.lis.virginia.gov/start/index.asp\" target=\"_blank\" rel=\"noreferrer\">LIS Learning Center</a></div>}\n <Menu slideoutToggle={this.slideoutToggle.bind(this)} isOpen={this.state.isOpen} session={this.props.session.sessionList.find(x => x.SessionCode === this.props.nav.session)} permissions={this.props.permissions} />\n <Profile\n isMenuVisible={isMenuVisible}\n isAriaExpanded={isAriaExpanded}\n isAriaHidden={isAriaHidden}\n slideoutToggle={this.slideoutToggle.bind(this)}\n isOpen={isOpen}\n slideout={true}\n selectedSession={this.props.selectedSession}\n permissions={this.props.permissions}\n />\n <SessionSelector overrideSession={this.state.overrideSession} />\n <ToastContainer toasts={this.props.nav.toasts} />\n <main>\n <section>\n <div className=\"full\">\n <div className=\"content-wrapper\">\n {this.props.children}\n </div>\n </div>\n </section>\n </main>\n {this.state.showPopup ?\n <Popup\n text={popupMessage}\n showPopup={this.state.showPopup}\n togglePopup={this.togglePopup.bind(this)}\n logOut={this.logOutUser.bind(this)}\n isIdle={this.props.isIdle}\n />\n : null\n }\n {this.props.location.pathname != \"/\" && !this.props.location.pathname.includes('/home')\n ?\n null\n :\n <IconLinks selectedSession={this.props.session.selectedSession} />\n }\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { login, nav, session } = state;\n return {\n login,\n nav,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, navActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(Layout)","import { partnerRequest, publicRequest } from '../services/request.service';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\nconst graphToken = 'GRAPH_ID_TOKEN';\n\nconst contactReferencesSuccess = 'CONTACT_REF_LIST_SUCCESS';\nconst contactReferencesFailure = 'CONTACT_REF_LIST_FAILURE';\n\nconst contactSaveSuccess = 'CONTACT_SAVE_SUCCESS';\nconst contactSaveFailure = 'CONTACT_SAVE_FAILURE';\n\nconst personListSuccess = 'PERSON_LIST_SUCCESS';\nconst personListFailure = 'PERSON_LIST_FAILURE';\n\nconst personSuccess = 'PERSON_SUCCESS';\nconst personFailure = 'PERSON_FAILURE';\n\nconst personContactRequest = 'PERSON_CONTACT_REQUEST';\nconst personContactSuccess = 'PERSON_CONTACT_SUCCESS';\nconst personContactFailure = 'PERSON_CONTACT_FAILURE';\n\nconst userListSuccess = 'USER_LIST_SUCCESS';\nconst userListFailure = 'USER_LIST_FAILURE';\n\nconst userSuccess = 'USER_SUCCESS';\nconst userFailure = 'USER_FAILURE';\n\nconst userByEmailSuccess = 'USER_BY_EMAIL_SUCCESS';\nconst userByEmailFailure = 'USER_BY_EMAIL_FAILURE';\n\nconst userSaveSuccess = 'USER_SAVE_SUCCESS';\nconst userSaveFailure = 'USER_SAVE_FAILURE';\n\nconst userCreateSuccess = 'USER_CREATE_SUCCESS';\nconst userCreateFailure = 'USER_CREATE_FAILURE';\n\nconst newUserCreateSuccess = 'NEW_USER_CREATE_SUCCESS';\nconst newUserCreateFailure = 'NEW_USER_CREATE_FAILURE';\n\nconst personCreateSuccess = 'PERSON_CREATE_SUCCESS';\nconst personCreateFailure = 'PERSON_CREATE_FAILURE';\n\nconst personSaveSuccess = 'PERSON_SAVE_SUCCESS';\nconst personSaveFailure = 'PERSON_SAVE_FAILURE';\n\nconst dirListSuccess = 'DIRECTORIES_LIST_SUCCESS';\nconst dirListFailure = 'DIRECTORIES_LIST_FAILURE';\n\nconst userRegisterSuccess = 'USER_REGISTER_SUCCESS';\nconst userRegisterFailure = 'USER_REGISTER_FAILURE';\n\nconst userCreatePublicSuccess = 'USER_CREATE_PUBLIC_SUCCESS';\nconst userCreatePublicFailure = 'USER_CREATE_PUBLIC_FAILURE';\n\nconst requestPasswordResetSuccess = 'REQUEST_PASSWORD_RESET_SUCCESS';\nconst requestPasswordResetFailure = 'REQUEST_PASSWORD_RESET_FAILURE';\n\nconst passwordResetSuccess = 'PASSWORD_RESET_SUCCESS';\nconst passwordResetFailure = 'PASSWORD_RESET_FAILURE';\n\nconst changePasswordSuccess = 'CHANGE_PASSWORD_SUCCESS';\nconst changePasswordFailure = 'CHANGE_PASSWORD_FAILURE';\n\nconst initialState = {\n contactReferences: [],\n contactReferencesError: '',\n contactSave: '',\n contactSaveError: null,\n userList: [],\n userListError: '',\n personList: [],\n personListError: '',\n personContact: [],\n user: '',\n userError: null,\n userByEmail: '',\n userByEmailError: null,\n personCreate: '',\n personCreateError: null,\n dirList: [],\n dirListError: '',\n userSave: '',\n userSaveError: null,\n userCreate: '',\n userCreateError: null,\n newUserCreate: '',\n newUserCreateError: null,\n userCreatePublic: '',\n userCreatePublicError: '',\n userRegister: '',\n userRegisterError: '',\n requestPasswordReset: '',\n requestPasswordResetError: '',\n passwordReset: '',\n passwordResetError: '',\n changePassword: '',\n changePasswordError: ''\n};\n\nexport const userActionCreators = {\n\n receiveContactReferences: (resObj) => ({\n type: contactReferencesSuccess,\n contactReferences: resObj,\n }),\n\n contactReferencesError: (message) => ({\n type: contactReferencesFailure,\n contactReferencesError: message\n }),\n\n getContactReferences: () => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_CONTACT_API_URL) + '/Contact/api/getcontacttypereferencesasync/', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.contactReferencesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(userActionCreators.receiveContactReferences(result[1].ContactTypeReferences))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.contactReferencesError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveContactSave: (resObj) => ({\n type: contactSaveSuccess,\n contactSave: resObj,\n }),\n\n contactSaveError: (message) => ({\n type: contactSaveFailure,\n contactSaveError: message\n }),\n\n saveContact: (body) => {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_CONTACT_API_URL) + '/Contact/api/savecontactasync/', 'POST', '', body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.contactSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(userActionCreators.receiveContactSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.contactSaveError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n requestPersonContact: () => ({\n type: personContactRequest,\n personContact: [],\n isFetching: true\n }),\n\n receivePersonContact: (contact, message) => ({\n type: personContactSuccess,\n isFetching: false,\n personContact: contact,\n message\n }),\n\n personContactError: (message) => ({\n type: personContactFailure,\n isFetching: false,\n personConact: [],\n message\n }),\n\n getPersonContact: (params) => {\n return dispatch => {\n dispatch(userActionCreators.requestPersonContact());\n\n return publicRequest((API_URL || process.env.REACT_APP_CONTACT_API_URL) + '/Contact/api/getContactsByOwnerAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.personContactError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(userActionCreators.receivePersonContact(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.personContactError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receivePersonList: (resObj) => ({\n type: personListSuccess,\n personList: resObj\n }),\n\n personListError: (message) => ({\n type: personListFailure,\n personListError: message\n }),\n\n getPersonList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PERSON_API_URL) + '/Person/api/getPartnerPersonListAsync?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.personListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(userActionCreators.receivePersonList(result[1].Persons))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.personListError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receivePerson: (resObj) => ({\n type: personSuccess,\n person: resObj\n }),\n\n personError: (message) => ({\n type: personFailure,\n personError: message\n }),\n\n getPerson: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PERSON_API_URL) + '/Person/api/getPartnerPersonByIdAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.personError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(userActionCreators.receivePerson(result[1].Persons[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.personError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveUserList: (resObj) => ({\n type: userListSuccess,\n userList: resObj,\n }),\n\n userListError: (message) => ({\n type: userListFailure,\n userListError: message\n }),\n\n getUserList: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/ListUsersAsync/', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.userListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(userActionCreators.receiveUserList(result[1].UserProfiles))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.userListError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveUser: (userdata) => ({\n type: userSuccess,\n user: userdata\n }),\n\n userError: (message) => ({\n type: userFailure,\n userError: message\n }),\n\n getUser: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/GetUserAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.userError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveUser(result[1].UserProfiles[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.userError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveUserByEmail: (userByEmaildata) => ({\n type: userByEmailSuccess,\n userByEmail: userByEmaildata\n }),\n\n userByEmailError: (message) => ({\n type: userByEmailFailure,\n userByEmailError: message\n }),\n\n getUserByEmail: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/GetUserByEmailAddressAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.userByEmailError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveUserByEmail(result[1].UserProfiles[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.receiveUserByEmail(\"\"))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveUserSave: (message) => ({\n type: userSaveSuccess,\n userSave: message\n }),\n\n userErrorSave: (message) => ({\n type: userSaveFailure,\n userSaveError: message\n }),\n\n saveUser: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\",\n 'GraphAuthorization': 'Bearer ' + localStorage.getItem(graphToken)\n\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/SaveUserAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.userErrorSave(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(userActionCreators.receiveUserSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.userErrorSave('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveUserCreate: (message) => ({\n type: userCreateSuccess,\n userCreate: message\n }),\n\n userErrorCreate: (message) => ({\n type: userCreateFailure,\n userCreateError: message\n }),\n\n\n createUser: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\",\n 'GraphAuthorization': 'Bearer ' + localStorage.getItem(graphToken)\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/CreateUserAsync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.userErrorCreate(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveUserCreate(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.userErrorCreate('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveNewUserCreate: (message) => ({\n type: newUserCreateSuccess,\n newUserCreate: message\n }),\n\n newUserErrorCreate: (message) => ({\n type: newUserCreateFailure,\n newUserCreateError: message\n }),\n\n\n createNewUser: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\",\n 'GraphAuthorization': 'Bearer ' + localStorage.getItem(graphToken)\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/CreateNewUserAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.newUserErrorCreate(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveNewUserCreate(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.newUserErrorCreate('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receivePersonCreate: (resObj) => ({\n type: personCreateSuccess,\n personCreate: resObj\n }),\n\n personCreateError: (message) => ({\n type: personCreateFailure,\n personCreateError: message\n }),\n\n\n createPerson: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PERSON_API_URL) + '/Person/api/createpersonasync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.personCreateError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receivePersonCreate(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.personCreateError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receivePersonSave: (resObj) => ({\n type: personSaveSuccess,\n personSave: resObj\n }),\n\n personSaveError: (message) => ({\n type: personSaveFailure,\n personSaveError: message\n }),\n\n\n savePerson: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PERSON_API_URL) + '/Person/api/savepersonasync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.personSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receivePersonSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.personSaveError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveDirList: (resObj) => ({\n type: dirListSuccess,\n dirList: resObj\n }),\n\n dirListError: (message) => ({\n type: dirListFailure,\n dirListError: message\n }),\n\n\n getDirReferences: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/GetDirectoryReferencesAsync/', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.dirListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveDirList(result[1].Directories))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.dirListError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveRegisterUser: (message) => ({\n type: userRegisterSuccess,\n userRegister: message\n }),\n\n userErrorRegister: (message) => ({\n type: userRegisterFailure,\n userRegisterError: message\n }),\n\n registerUser: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/registerpublicuserasync/', 'POST', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.userErrorRegister(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveRegisterUser(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.userErrorRegister('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCreatePublicUser: (message) => ({\n type: userCreatePublicSuccess,\n userCreatePublic: message\n }),\n\n userErrorCreatePublic: (message) => {\n let error = message;\n try {\n error = JSON.parse(message);\n if (error.Value) { error = error.Value }\n } catch (err) {\n error = message;\n }\n if (typeof error === 'string' && error.startsWith('\"') && error.endsWith('\"')) {\n error = error.substr(1, error.length - 2);\n }\n\n return ({\n type: userCreatePublicFailure,\n userCreatePublicError: error\n })\n },\n\n createPublicUser: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/createpublicuserasync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.userErrorCreatePublic(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveCreatePublicUser(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.userErrorCreatePublic('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveRequestPasswordReset: (message) => ({\n type: requestPasswordResetSuccess,\n requestPasswordReset: message\n }),\n\n requestPasswordResetError: (message) => ({\n type: requestPasswordResetFailure,\n requestPasswordResetError: message\n }),\n\n requestPasswordReset: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/RequestResetUserPasswordAsync/', 'POST', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.requestPasswordResetError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveRequestPasswordReset(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.requestPasswordResetError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receivePasswordReset: (message) => ({\n type: passwordResetSuccess,\n passwordReset: message\n }),\n\n passwordResetError: (message) => {\n let error = message;\n try {\n error = JSON.parse(message);\n } catch (err) {\n error = message;\n }\n return ({\n type: passwordResetFailure,\n passwordResetError: error\n })\n },\n\n resetPassword: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/User/api/ResetUserPasswordAsync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.passwordResetError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receivePasswordReset(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.passwordResetError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveChangePassword: (message) => ({\n type: changePasswordSuccess,\n changePassword: message\n }),\n\n changePasswordError: (message) => {\n let error = message;\n try {\n error = JSON.parse(message);\n if (error.Value) { error = error.Value }\n } catch (err) {\n error = message;\n }\n if (typeof error === 'string' && error.startsWith('\"') && error.endsWith('\"')) {\n error = error.substr(1, error.length - 2);\n }\n if (error === \"Login failed (150)\") {\n error = \"Invalid current password.\";\n }\n return ({\n type: changePasswordFailure,\n changePasswordError: error\n })\n },\n\n changePassword: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_AUTH_API_URL) + '/Authentication/api/ChangePasswordAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(userActionCreators.changePasswordError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(userActionCreators.receiveChangePassword(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(userActionCreators.changePasswordError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n }\n};\n\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n case contactReferencesSuccess:\n return Object.assign({}, state, {\n contactReferences: action.contactReferences,\n contactReferencesError: ''\n })\n case contactReferencesFailure:\n return Object.assign({}, state, {\n contactReferencesError: action.contactReferencesError\n })\n case contactSaveSuccess:\n return Object.assign({}, state, {\n contactSave: action.contactSave,\n contactSaveError: null\n })\n case contactSaveFailure:\n return Object.assign({}, state, {\n contactSaveError: action.contactSaveError\n })\n case personContactRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case personContactSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n personContact: action.personContact,\n message: ''\n })\n case personContactFailure:\n return Object.assign({}, state, {\n isFetching: false,\n personContact: action.personContact,\n message: action.message\n })\n case personListSuccess:\n return Object.assign({}, state, {\n personList: action.personList,\n personListError: ''\n })\n case personListFailure:\n return Object.assign({}, state, {\n personListError: action.personListError\n })\n case personSuccess:\n return Object.assign({}, state, {\n person: action.person,\n personError: ''\n })\n case personFailure:\n return Object.assign({}, state, {\n personError: action.personError\n })\n case userListSuccess:\n return Object.assign({}, state, {\n userList: action.userList,\n userListError: ''\n })\n case userListFailure:\n return Object.assign({}, state, {\n userListError: action.userListError\n })\n case userSuccess:\n return Object.assign({}, state, {\n user: action.user,\n userError: null\n })\n case userFailure:\n return Object.assign({}, state, {\n userError: action.userError\n })\n case userByEmailSuccess:\n return Object.assign({}, state, {\n userByEmail: action.userByEmail,\n userByEmailError: null\n })\n case userByEmailFailure:\n return Object.assign({}, state, {\n userByEmailError: action.userByEmailError\n })\n case userSaveSuccess:\n return Object.assign({}, state, {\n userSave: action.userSave,\n userSaveError: null\n })\n case userSaveFailure:\n return Object.assign({}, state, {\n userSaveError: action.userSaveError\n })\n case userCreateSuccess:\n return Object.assign({}, state, {\n userCreate: action.userCreate,\n userCreateError: null\n })\n case userCreateFailure:\n return Object.assign({}, state, {\n userCreateError: action.userCreateError\n })\n case newUserCreateSuccess:\n return Object.assign({}, state, {\n newUserCreate: action.newUserCreate,\n newUserCreateError: null\n })\n case newUserCreateFailure:\n return Object.assign({}, state, {\n newUserCreateError: action.newUserCreateError\n })\n case personCreateSuccess:\n return Object.assign({}, state, {\n personCreate: action.personCreate,\n personCreateError: null\n })\n case personCreateFailure:\n return Object.assign({}, state, {\n personCreateError: action.personCreateError\n })\n case personSaveSuccess:\n return Object.assign({}, state, {\n personSave: action.personSave,\n personSaveError: null\n })\n case personSaveFailure:\n return Object.assign({}, state, {\n personSaveError: action.personSaveError\n })\n case dirListSuccess:\n return Object.assign({}, state, {\n dirList: action.dirList,\n dirListError: ''\n })\n case dirListFailure:\n return Object.assign({}, state, {\n dirListError: action.dirListError\n })\n case userRegisterSuccess:\n return Object.assign({}, state, {\n userRegister: action.userRegister,\n userRegisterError: ''\n })\n case userRegisterFailure:\n return Object.assign({}, state, {\n userRegisterError: action.userRegisterError\n })\n case userCreatePublicSuccess:\n return Object.assign({}, state, {\n userCreatePublic: action.userCreatePublic,\n userCreatePublicError: ''\n })\n case userCreatePublicFailure:\n return Object.assign({}, state, {\n userCreatePublicError: action.userCreatePublicError\n })\n case requestPasswordResetSuccess:\n return Object.assign({}, state, {\n requestPasswordReset: action.requestPasswordReset,\n requestPasswordResetError: ''\n })\n case requestPasswordResetFailure:\n return Object.assign({}, state, {\n requestPasswordResetError: action.requestPasswordResetError\n })\n case passwordResetSuccess:\n return Object.assign({}, state, {\n passwordReset: action.passwordReset,\n passwordResetError: ''\n })\n case passwordResetFailure:\n return Object.assign({}, state, {\n passwordResetError: action.passwordResetError\n })\n case changePasswordSuccess:\n return Object.assign({}, state, {\n changePassword: action.changePassword,\n changePasswordError: ''\n })\n case changePasswordFailure:\n return Object.assign({}, state, {\n changePasswordError: action.changePasswordError\n })\n default:\n return state\n }\n};","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { userActionCreators } from '../../../stores/lis-user-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { Link } from 'react-router-dom';\n\nconst calculateNumberOfCriteriaMet = (password) => {\n let criteriaMet = 0;\n if (password.search(/[a-z]/) > -1) { criteriaMet++; }\n if (password.search(/[A-Z]/) > -1) { criteriaMet++; }\n if (password.search(/\\d/) > -1) { criteriaMet++; }\n if (password.search(/[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>]/) > -1) { criteriaMet++; }\n\n return criteriaMet;\n}\n\nclass CreateAccount extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n firstname: '',\n lastname: '',\n password: '',\n passwordconfirm: '',\n showPassword: false\n };\n\n this.handleTextChange = this.handleTextChange.bind(this);\n this.toggleShowPassword = this.toggleShowPassword.bind(this);\n this.checkName = this.checkName.bind(this);\n this.checkPassword = this.checkPassword.bind(this);\n this.checkPasswordConfirm = this.checkPasswordConfirm.bind(this);\n this.toggleShowTooltip = this.toggleShowTooltip.bind(this);\n this.handleClickOutside = this.handleClickOutside.bind(this);\n this.createAccount = this.createAccount.bind(this);\n\n this.infoRef = React.createRef();\n this.infoButtonRef = React.createRef();\n }\n\n toggleShowPassword() {\n this.setState(state => ({\n showPassword: !state.showPassword\n }));\n }\n\n handleTextChange(e, key) {\n const val = e.target.value;\n this.setState({\n [key]: val\n });\n }\n\n checkName() {\n if (!this.state.firstname || !this.state.lastname) {\n this.setState({\n nameError: 'first and last name are required'\n });\n return true;\n }\n this.setState({\n nameError: false\n });\n }\n\n checkPassword() {\n this.setState({ showHelp: false })\n if (this.state.password.length < 10) {\n this.setState({ passwordError: 'password must be at least 10 characters long' });\n return true;\n }\n if (this.state.password.length > 256) {\n this.setState({ passwordError: 'password must be 256 characters or fewer' });\n return true;\n }\n if (this.state.password.search(/^(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*[\\d@$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>])|(?=.*[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>])(?=.*\\d))|(?=.*[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>])(?=.*[A-Z])(?=.*\\d)).{10,256}$/) === -1) {\n this.setState({ passwordError: 'invalid password', showHelp: true });\n return true;\n } else {\n this.setState({ showHelp: false })\n }\n if (this.state.password === this.state.currentpassword) {\n this.setState({ passwordError: 'new password cannot be the same as your current password' });\n return true;\n }\n this.setState({\n passwordError: ''\n });\n }\n\n checkPasswordConfirm() {\n if (this.state.password && this.state.passwordconfirm !== this.state.password) {\n this.setState({\n passwordConfirmError: 'passwords do not match'\n });\n return true;\n }\n this.setState({\n passwordConfirmError: ''\n });\n }\n\n toggleShowTooltip() {\n this.setState(state => ({\n toolTip: !state.toolTip\n }), () => {\n if (this.state.toolTip) {\n document.addEventListener('mousedown', this.handleClickOutside);\n }\n });\n }\n\n handleClickOutside(event) {\n if (this.infoRef && !this.infoRef.current.contains(event.target) && this.infoButtonRef && !this.infoButtonRef.current.contains(event.target)) {\n document.removeEventListener('mousedown', this.handleClickOutside);\n this.setState({ toolTip: false })\n }\n }\n\n createAccount(e) {\n e.preventDefault();\n let isError = false;\n isError = this.checkName() || isError;\n isError = this.checkPassword() || isError;\n isError = this.checkPasswordConfirm() || isError;\n if (isError) {\n return\n }\n\n this.setState({\n isCreating: true,\n message: ''\n });\n const params = {\n FirstName: this.state.firstname,\n LastName: this.state.lastname,\n Password: this.state.password,\n HashedWord: this.props.match.params.registerhash\n };\n this.props.actions.createPublicUser(params)\n .then(() => {\n this.setState({\n isCreating: false,\n accountCreated: true,\n message: ''\n });\n setTimeout(() => {\n this.props.history.push('/login');\n }, 5000)\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n message: this.props.users.userCreatePublicError ? this.props.users.userCreatePublicError : err.toString(),\n isCreating: false\n });\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { showPassword, firstname, lastname, password, passwordconfirm, passwordError, passwordConfirmError, nameError, isCreating, accountCreated } = this.state;\n if (accountCreated) {\n return (\n <div className=\"center\">\n <h2>You have finished creating your account</h2>\n <h3>You will be redirected to the login form in 5 seconds</h3>\n <div className=\"small-text\">Click <Link to='/login'>Here</Link> to go there now</div>\n </div>)\n }\n\n const passwordHelp = (indicate) => (\n <React.Fragment>\n <span>Your password must meet the following criteria:</span>\n <ul>\n <li> Must be between 10 and 256 characters {indicate && <span className={`icon ${password.length < 10 || password.length > 256 ? 'delete' : 'save'}`} />}</li>\n <li> Must contain at least three of the following four types of characters: {indicate && <span className={`icon ${calculateNumberOfCriteriaMet(password) < 3 ? 'delete' : 'save'}`} />}</li>\n <ol>\n <li> lowercase letter {indicate && <span className={`icon ${password.search(/[a-z]/) === -1 ? 'delete' : 'save'}`} />}</li>\n <li> uppercase letter {indicate && <span className={`icon ${password.search(/[A-Z]/) === -1 ? 'delete' : 'save'}`} />}</li>\n <li> number {indicate && <span className={`icon ${password.search(/\\d/) === -1 ? 'delete' : 'save'}`} />}</li>\n <li> special character {indicate && <span className={`icon ${password.search(/[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>]/) === -1 ? 'delete' : 'save'}`} />}</li>\n </ol>\n </ul>\n </React.Fragment>\n )\n\n return (\n <div className=\"dlas-forms create-account\">\n <h1>Finish Account Creation</h1>\n <hr className=\"faded-line\" />\n <div className=\"inner-grid two multi-row\" style={{ gridGap: '50px' }}>\n <form>\n <br />\n <div className=\"inner-grid two\">\n <div>\n <label htmlFor=\"sr-first-name\">First name</label>\n <input id=\"sr-first-name\" value={firstname} onChange={e => this.handleTextChange(e, \"firstname\")} type=\"text\" />\n </div>\n <div>\n <label htmlFor=\"sr-last-name\">Last name</label>\n <input id=\"sr-last-name\" value={lastname} onChange={e => this.handleTextChange(e, \"lastname\")} type=\"text\" />\n </div>\n </div>\n <span className=\"small-text fail\">{nameError}</span>\n <div>\n <label htmlFor=\"sr-password\">Password</label>\n <button onClick={this.toggleShowTooltip} type=\"button\" className=\"button info\" ref={this.infoButtonRef} > Info</button>\n <div className=\"info-box\" ref={this.infoRef} style={{ display: this.state.toolTip ? 'block' : 'none' }}>\n {passwordHelp(false)}\n </div>\n <input id=\"sr-password\" onBlur={this.checkPassword} value={password} onChange={e => this.handleTextChange(e, \"password\")} autoComplete=\"new-password\" type={showPassword ? 'text' : 'password'} />\n <span className=\"small-text fail\">{passwordError}</span>\n {this.state.showHelp && <React.Fragment><br />{passwordHelp(true)}</React.Fragment>}\n </div>\n <div>\n <label htmlFor=\"sr-password-confirm\">Password Confirmation</label>\n <input id=\"sr-password-confirm\" onBlur={this.checkPasswordConfirm} onChange={e => this.handleTextChange(e, \"passwordconfirm\")} value={passwordconfirm} type={showPassword ? 'text' : 'password'} />\n <span className=\"small-text fail\">{passwordConfirmError}</span>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={this.toggleShowPassword}>\n <input id=\"sr-show-password\" checked={showPassword} type=\"checkbox\" style={{ width: \"inherit\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-show-password\" className=\"checkbox-label no-background\">Show password</label>\n </div>\n <div>\n <br />\n {isCreating ?\n <div><span className=\"small-spinner\"></span></div>\n :\n <button onClick={this.createAccount} className=\"button\" type=\"submit\">Create Account</button>\n }\n </div>\n <div className=\"small-text fail\">{this.state.message}</div>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { users } = state;\n return {\n users\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, userActionCreators), dispatch)\n }\n }\n)(CreateAccount)","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { userActionCreators } from '../../../stores/lis-user-store';\nimport { cancelRequest } from '../../../services/request.service';\n\nconst emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nclass RegisterAccount extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n firstname: '',\n lastname: '',\n email: '',\n password: '',\n passwordconfirm: '',\n showPassword: false\n };\n\n this.handleTextChange = this.handleTextChange.bind(this);\n this.checkEmail = this.checkEmail.bind(this);\n this.registerAccount = this.registerAccount.bind(this);\n }\n\n handleTextChange(e, key) {\n const val = e.target.value;\n this.setState({\n [key]: val\n });\n }\n\n checkEmail() {\n const email = this.state.email.toLowerCase();\n\n if (!emailRegex.test(email)) {\n this.setState({\n emailError: 'A valid email is required'\n });\n return true;\n }\n this.setState({\n emailError: ''\n });\n }\n\n registerAccount(e) {\n e.preventDefault();\n let isError = this.checkEmail()\n if (isError) {\n return\n }\n\n this.setState({\n isCreating: true\n });\n const params = `?emailaddress=${encodeURIComponent(this.state.email)}`;\n this.props.actions.registerUser(params)\n .then(() => {\n this.setState({\n isCreating: false,\n accountCreated: true,\n message: ''\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n message: err.toString(),\n isCreating: false\n });\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { email, emailError, isCreating, accountCreated } = this.state;\n if (accountCreated) {\n return (\n <div className=\"center\">\n <h2>Please check your email to complete registration</h2>\n <h3>Don't forget to check your spam folder</h3>\n </div>)\n }\n return (\n <div className=\"dlas-forms\">\n <h1>Register for a Lobbyist-in-a-Box Account</h1>\n <hr className=\"faded-line\" />\n <div className=\"inner-grid two multi-row\" style={{ gridGap: '50px' }}>\n <form>\n <h3 htmlFor=\"sr-email\">Email</h3>\n <div className=\"inner-grid three-and-one\">\n <div>\n <input id=\"sr-email\" style={{ margin: \"0\" }} onBlur={this.checkEmail} value={email} onChange={e => this.handleTextChange(e, \"email\")} type=\"text\" />\n <span className=\"small-text fail\">{emailError}</span>\n </div>\n <div>\n {isCreating ?\n <div><span className=\"small-spinner\"></span></div>\n :\n <button onClick={this.registerAccount} className=\"button\" type=\"submit\">Register Account</button>\n }\n </div>\n </div>\n <div className=\"small-text fail\" style={{ marginTop: \"10px\" }}>\n {this.state.message && this.state.message}\n </div>\n <div>\n <Link to='/login' style={{ marginTop: \"10px\", textDecoration: \"none\" }}>\n Already have an account? Log in.\n </Link>\n </div>\n </form>\n <div className=\"txt-blue\">\n <h3><b>Track up to 5 bills for free</b></h3>\n <p>Your new free account will allow you to track up to 5 bills in one Watchlist and set up notifications.</p>\n <p>Email notification triggers an email when bills are sponsored by a member of the General Assembly, referred to a House or Senate Committee or contain a specific key word(s), phrases, or Code section(s).</p>\n\n <h3><b>Lobbyist-in-a-Box Subscription</b></h3>\n <p>A subscription to Lobbyist-in-a-Box offers up to 100 Watchlists (previously called \"Profiles\") containing 300 bills each.</p>\n <p>The cost of this service is $400 per user for state agencies, and $600 per user for all other subscribers. More user accounts can be added, please refer to the Subscription Information on the <a style={{ textDecoration: \"none\" }} target=\"_blank\" rel=\"noreferrer\" href=\"http://help.lis.virginia.gov/liab/index.asp\">LIS Learning Center</a> for additional options and fees, the 2-Step Registration and Payment process, and complete LIAB registration instructions.</p>\n <p><span className=\"bold\">Need additional information or assistance?</span> Please send an e-mail message to <a style={{ textDecoration: \"none\" }} href=\"mailto:lis@dlas.virginia.gov\">lis@dlas.virginia.gov</a>.</p>\n <p>For questions relating to LIAB Subscription payment procedures, please contact Virginia Interactive, LLC (VI) dba Tyler Virginia at <a style={{ textDecoration: \"none\" }} href=\"mailto:va-customerservice@tylertech.com\">va-customerservice@tylertech.com</a> or (804) 318-4133.</p>\n </div>\n </div>\n </div>)\n }\n}\n\nexport default connect(\n (state) => {\n const { users } = state;\n return {\n users\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, userActionCreators), dispatch)\n }\n }\n)(RegisterAccount)","import React from 'react';\nimport * as Fields from '../../lis-layout/components/lis-forms-component';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { userActionCreators } from '../../../stores/lis-user-store';\nimport { cancelRequest } from '../../../services/request.service';\n\nclass ForgotPassword extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n errorMessage: '',\n isFetching: false,\n paswordResetRequested: false,\n email: ''\n };\n\n this.requestPasswordReset = this.requestPasswordReset.bind(this);\n this.handleChange = this.handleChange.bind(this);\n }\n\n requestPasswordReset(e) {\n e.preventDefault();\n this.setState({\n errorMessage: '',\n isFetching: true\n });\n this.props.actions.requestPasswordReset('?emailAddress=' + encodeURIComponent(this.state.email))\n .then(() => {\n this.setState({\n isFetching: false,\n paswordResetRequested: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isFetching: false,\n errorMessage: err.toString()\n });\n })\n }\n\n handleChange(e) {\n this.setState({\n email: e.target.value\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { errorMessage, isFetching, paswordResetRequested, email } = this.state;\n if (paswordResetRequested) {\n return (\n <div className=\"center\">\n <h2>An email has been sent to your inbox with information on how to reset your password</h2>\n <h3>Please check your email to complete password reset</h3>\n <div className=\"small-text\">Don't forget to check your spam folder</div>\n </div>)\n }\n return (\n <div className=\"dlas-forms\">\n <h1>Request Lobbyist-in-a-Box Password Reset</h1>\n <hr className=\"faded-line\" />\n <form>\n <div>\n <span className=\"error-message\">{errorMessage}</span>\n <div className=\"inner-grid three\">\n <div className=\"single-row\">\n <Fields.TextInput\n id=\"email\"\n label=\"Email\"\n placeholder=\"Email\"\n onChange={this.handleChange}\n value={email}\n />\n </div>\n </div>\n <div>\n {isFetching ?\n <div><span className=\"spinner small-spinner\"></span></div>\n :\n <button disabled={!email} onClick={this.requestPasswordReset} className=\"button\" type=\"submit\">Request password reset</button>\n }\n </div>\n </div>\n </form>\n </div>\n );\n }\n};\n\nexport default connect(\n (state) => {\n const { users } = state;\n return {\n users\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, userActionCreators), dispatch)\n }\n }\n)(ForgotPassword);\n\n\n\n\n\n\n","import React from 'react';\nimport queryString from 'query-string';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { userActionCreators } from '../../../stores/lis-user-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { Link } from 'react-router-dom';\n\nconst houseInstructions = \"Please contact the House of Delegates administrator at (804) 698-1560.\";\nconst senateInstructions = \"Please email Senate Technology at sis@senate.virginia.gov or call 804-698-7470.\";\nconst legislativeInstructions = \"Please call the DLAS help desk at 804-786-9631 or email LIS@dlas.virginia.gov.\";\n\nconst houseDomains = [\n \"house.virginia.gov\"\n];\n\nconst senateDomains = [\n \"senate.virginia.gov\"\n];\n\nconst legislativeDomains = [\n \"dlas.virginia.gov\",\n \"dls.virginia.gov\",\n \"sfac.virginia.gov\",\n \"hac.virginia.gov\",\n \"vcoy.virginia.gov\",\n \"jchc.virginia.gov\",\n \"vscc.virginia.gov\",\n \"dcp.virginia.gov\",\n \"vcf.virginia.gov\",\n \"jlarc.virginia.gov\"\n];\n\nconst calculateNumberOfCriteriaMet = (password) => {\n let criteriaMet = 0;\n if (password.search(/[a-z]/) > -1) { criteriaMet++; }\n if (password.search(/[A-Z]/) > -1) { criteriaMet++; }\n if (password.search(/\\d/) > -1) { criteriaMet++; }\n if (password.search(/[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>]/) > -1) { criteriaMet++; }\n\n return criteriaMet;\n}\n\nclass ChangePassword extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n errorMessage: '',\n isChanging: false,\n passwordReset: false,\n confirmPassword: '',\n passwordChangeFinished: false,\n password: '',\n passwordconfirm: '',\n currentpassword: '',\n resettingPassword: false,\n passwordResetError: '',\n showPassword: false,\n passwordError: false,\n passwordConfirmError: false\n };\n\n this.changePassword = this.changePassword.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.toggleShowPassword = this.toggleShowPassword.bind(this);\n this.checkPassword = this.checkPassword.bind(this);\n this.checkPasswordConfirm = this.checkPasswordConfirm.bind(this);\n this.toggleShowTooltip = this.toggleShowTooltip.bind(this);\n this.handleClickOutside = this.handleClickOutside.bind(this);\n\n this.infoRef = React.createRef();\n this.infoButtonRef = React.createRef();\n }\n\n changePassword(e) {\n e.preventDefault();\n let isError = false;\n isError = this.checkPassword() || isError;\n isError = this.checkPasswordConfirm() || isError;\n if (isError) {\n return\n }\n\n this.setState({\n isChanging: true,\n errorMessage: ''\n });\n const parsed = queryString.parse(this.props.location.search); //note this will replace all '+' signs with ' ' spaces, which we have to account for below\n const emailaddress = parsed.emailaddress ? parsed.emailaddress.replaceAll(\" \", \"+\") : this.props.login.userProfile.email; //email address if registration or temp/expired password, userProfile prop if logged in and changing\n const body = {\n username: emailaddress,\n password: this.state.currentpassword,\n newpassword: this.state.password\n };\n this.props.actions.changePassword(body)\n .then(() => {\n this.setState({\n isChanging: false,\n passwordChangeFinished: true\n });\n //Login to get access token and refresh token\n const loginObj = { userId: emailaddress, userPassword: this.state.password };\n this.props.actions.loginUser(loginObj);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n errorMessage: this.props.users.changePasswordError ? this.props.users.changePasswordError : err.toString(),\n isChanging: false\n });\n })\n }\n\n handleChange(key, val) {\n this.setState({\n [key]: val\n });\n }\n\n toggleShowPassword() {\n this.setState(state => ({\n showPassword: !state.showPassword\n }));\n }\n\n checkPassword() {\n this.setState({ showHelp: false })\n if (this.state.password.length < 10) {\n this.setState({ passwordError: 'password must be at least 10 characters long' });\n return true;\n }\n if (this.state.password.length > 256) {\n this.setState({ passwordError: 'password must be 256 characters or fewer' });\n return true;\n }\n if (this.state.password.search(/^(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*[\\d@$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>])|(?=.*[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>])(?=.*\\d))|(?=.*[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>])(?=.*[A-Z])(?=.*\\d)).{10,256}$/) === -1) {\n this.setState({ passwordError: 'invalid password', showHelp: true });\n return true;\n } else {\n this.setState({ showHelp: false })\n }\n if (this.state.password === this.state.currentpassword) {\n this.setState({ passwordError: 'new password cannot be the same as your current password' });\n return true;\n }\n this.setState({\n passwordError: ''\n });\n }\n\n checkPasswordConfirm() {\n if (this.state.password && this.state.passwordconfirm !== this.state.password) {\n this.setState({\n passwordConfirmError: 'passwords do not match'\n });\n return true;\n }\n this.setState({\n passwordConfirmError: ''\n });\n }\n\n toggleShowTooltip() {\n this.setState(state => ({\n toolTip: !state.toolTip\n }), () => {\n if (this.state.toolTip) {\n document.addEventListener('mousedown', this.handleClickOutside);\n }\n });\n }\n\n handleClickOutside(event) {\n if (this.infoRef && !this.infoRef.current.contains(event.target) && this.infoButtonRef && !this.infoButtonRef.current.contains(event.target)) {\n document.removeEventListener('mousedown', this.handleClickOutside);\n this.setState({ toolTip: false })\n }\n }\n\n componentDidMount() {\n if (this.props.location.pathname.includes('passwordreset')) {\n this.setState({\n resettingPassword: true\n });\n const resetHash = this.props.match.params.resethash;\n let emailAddress;\n if (this.props.location.search) {\n emailAddress = queryString.parse(this.props.location.search).emailaddress;\n if (emailAddress) { emailAddress = emailAddress.replaceAll(\" \", \"+\") }\n }\n this.props.actions.resetPassword({ HashedWord: resetHash, EmailAddress: emailAddress })\n .then(() => {\n this.setState({\n resettingPassword: false\n });\n this.props.history.push('/change-password' + this.props.location.search);\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n this.setState({\n passwordResetError: this.props.users.passwordResetError.Value ? this.props.users.passwordResetError.Value : err.toString()\n });\n })\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { errorMessage, isChanging, passwordChangeFinished, password, passwordconfirm, currentpassword, resettingPassword, passwordResetError, showPassword, passwordError, passwordConfirmError } = this.state;\n const passwordHasBeenResetCheckEmail = this.props.location.search && queryString.parse(this.props.location.search).emailaddress && !queryString.parse(this.props.location.search).passwordistemporaryorexpired;\n const passwordIsTemporaryOrExpired = this.props.location.search && queryString.parse(this.props.location.search).emailaddress && queryString.parse(this.props.location.search).passwordistemporaryorexpired;\n const emailSplit = this.props.login.userProfile.email.split(\"@\");\n\n const passwordHelp = (indicate) => (\n <React.Fragment>\n <span>Your password must meet the following criteria:</span>\n <ul>\n <li> Must be between 10 and 256 characters {indicate && <span style={{ verticalAlign: 'middle' }} className={`icon ${password.length < 10 || password.length > 256 ? 'delete' : 'save'}`} />}</li>\n <li> Must contain at least three of the following four types of characters: {indicate && <span style={{ verticalAlign: 'middle' }} className={`icon ${calculateNumberOfCriteriaMet(password) < 3 ? 'delete' : 'save'}`} />}</li>\n <ol>\n <li> lowercase letter {indicate && <span style={{ verticalAlign: 'middle' }} className={`icon ${password.search(/[a-z]/) === -1 ? 'delete' : 'save'}`} />}</li>\n <li> uppercase letter {indicate && <span style={{ verticalAlign: 'middle' }} className={`icon ${password.search(/[A-Z]/) === -1 ? 'delete' : 'save'}`} />}</li>\n <li> number {indicate && <span style={{ verticalAlign: 'middle' }} className={`icon ${password.search(/\\d/) === -1 ? 'delete' : 'save'}`} />}</li>\n <li> special character {indicate && <span style={{ verticalAlign: 'middle' }} className={`icon ${password.search(/[@^$!%*?=\\-_+&\\[\\]{}|\\\\:'\\,\\.\\?\\/`~\"\"\\(\\);<>]/) === -1 ? 'delete' : 'save'}`} />}</li>\n </ol>\n </ul>\n </React.Fragment>\n )\n\n if (resettingPassword) {\n if (passwordResetError) {\n return (<div className=\"center\">\n <div className=\"fail\">There was a problem resetting your password</div>\n <div>{passwordResetError.toLowerCase().includes('information could not be found in cache') ? <Link to=\"/forgot-password\">Try again</Link> : passwordResetError}</div>\n </div>)\n }\n return (<div className=\"spinner center-spinner\">Resetting Password</div>)\n }\n if (passwordChangeFinished) {\n return (\n <div className=\"center\">\n <h2>Your password has been changed</h2>\n <Link to=\"/home\">Home</Link>\n </div>)\n }\n return (\n <div className=\"dlas-forms change-password\">\n {/* Find out if a reserved domain is present on either side of the @ in the event that the login email is formatted as user#domain@dlasva.onmicrosoft.com instead of user@domain*/}\n {legislativeDomains.find(x => x === emailSplit[1]) || legislativeDomains.findIndex(x => emailSplit[0].includes(x)) >= 0\n ? <div className=\"homepage-links\"><p>{legislativeInstructions}</p> <Link to=\"/profile\">Return to Profile</Link></div>\n : houseDomains.find(x => x === emailSplit[1]) || houseDomains.findIndex(x => emailSplit[0].includes(x)) >= 0\n ? <div className=\"homepage-links\"><p>{houseInstructions}</p> <Link to=\"/profile\">Return to Profile</Link></div>\n : senateDomains.find(x => x === emailSplit[1]) || senateDomains.findIndex(x => emailSplit[0].includes(x)) >= 0\n ? <div className=\"homepage-links\"><p>{senateInstructions}</p> <Link to=\"/profile\">Return to Profile</Link></div>\n : <React.Fragment>\n <h1>New Password</h1>\n <hr className=\"faded-line\" />\n <div>\n {passwordHasBeenResetCheckEmail ?\n <p>Your password has been reset. Check your email for your temporary password.</p>\n : passwordIsTemporaryOrExpired ?\n <p>Your password is temporary or expired. Please change your password below.</p>\n :\n null\n }\n </div>\n <div className=\"inner-grid two multi-row\" style={{ gridGap: '50px' }}>\n <form>\n <div>\n <label htmlFor=\"sr-current-password\">{passwordHasBeenResetCheckEmail ? \"Temporary\" : \"Current\"} Password</label>\n <input disabled={isChanging} id=\"sr-current-password\" value={currentpassword} onChange={e => this.handleChange(\"currentpassword\", e.target.value)} type={showPassword ? 'text' : 'password'} />\n </div>\n <div>\n <label htmlFor=\"sr-new-password\">New Password</label>\n <button onClick={this.toggleShowTooltip} type=\"button\" className=\"button info\" ref={this.infoButtonRef} > Info</button>\n <div className=\"info-box\" ref={this.infoRef} style={{ display: this.state.toolTip ? 'block' : 'none' }}>\n {passwordHelp(false)}\n </div>\n <input disabled={isChanging} id=\"sr-new-password\" autoComplete=\"false\" onBlur={this.checkPassword} value={password} onChange={e => this.handleChange(\"password\", e.target.value)} type={showPassword ? 'text' : 'password'} />\n <span className=\"small-text fail\">{passwordError}</span>\n {this.state.showHelp && <div style={{ fontSize: '0.8em' }}>{passwordHelp(true)}</div>}\n </div>\n <div>\n <label htmlFor=\"sr-password-confirm\">New Password Confirmation</label>\n <input disabled={isChanging} id=\"sr-password-confirm\" autoComplete=\"false\" onBlur={this.checkPasswordConfirm} onChange={e => this.handleChange(\"passwordconfirm\", e.target.value)} value={passwordconfirm} type={showPassword ? 'text' : 'password'} />\n <span className=\"small-text fail\">{passwordConfirmError}</span>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={this.toggleShowPassword}>\n <input id=\"sr-show-password\" checked={showPassword} type=\"checkbox\" style={{ width: \"inherit\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-show-password\" className=\"checkbox-label no-background\">Show password</label>\n </div>\n <div>\n {isChanging ?\n <div><span className=\"spinner small-spinner\"></span></div>\n :\n <button onClick={this.changePassword} className=\"button\" type=\"submit\">Change password</button>\n }\n </div>\n <span className=\"small-text fail\">{errorMessage}</span>\n </form>\n </div>\n </React.Fragment>\n }\n </div>\n );\n }\n};\n\nexport default connect(\n (state) => {\n const { users, login } = state;\n return {\n users,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, userActionCreators, authActionCreators), dispatch)\n }\n }\n)(ChangePassword);\n\n\n\n\n\n\n","import React from \"react\";\nimport { Link } from 'react-router-dom';\nimport ReactTable from \"react-table\";\nimport '../../../stylesheets/shared/react-table.css';\nimport '../../../stylesheets/lis-member-management/member-management.css';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { userActionCreators } from '../../../stores/lis-user-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport Select from 'react-select';\nimport { sessionActionCreators } from \"../../../stores/lis-session-store\";\nimport { cancelRequest } from '../../../services/request.service';\nimport moment from 'moment-timezone';\n\nclass MemberManagementGrid extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sessionOptions: [],\n selectedSession: '',\n isLoaded: true,\n searchFilter: '',\n memberList: []\n };\n\n this.handleSessionChange = this.handleSessionChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.filterData = this.filterData.bind(this);\n this.getData = this.getData.bind(this);\n\n }\n\n handleSessionChange(val) {\n this.setState({\n selectedSession: val\n }, () => this.getData());\n }\n\n handleFilterChange(e) {\n const val = e.target.value;\n this.setState({\n searchFilter: val\n }, () => this.filterData());\n }\n\n filterData() {\n const filter = this.state.searchFilter;\n const formattedFilter = filter.toLowerCase().replace(/ /g, '');\n let memberContacts = [...this.props.members.memberListContactData];\n if (filter !== '') {\n memberContacts = memberContacts.filter(contact => {\n if (contact.MemberDisplayName && contact.MemberDisplayName.toLowerCase().includes(formattedFilter)) {\n return true;\n }\n if (contact.MemberNumber && contact.MemberNumber.toLowerCase().includes(formattedFilter)) {\n return true;\n }\n return false;\n });\n }\n this.setState({\n memberList: memberContacts.filter(member => {\n if (this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\")) {\n return true;\n } else if (member.ChamberCode === \"H\" && this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseMemberEditor\") ||\n member.ChamberCode === \"S\" && this.props.login.userClaims.claims.find(x => x.RoleName === \"SenateMemberEditor\")) {\n return true;\n }\n return false;\n })\n });\n }\n\n getData() {\n this.setState({\n isLoaded: false\n });\n let params = 'isPublic=false&sessionID=' + this.state.selectedSession.SessionID;\n this.props.actions.getMemberListContact(params)\n .then(() => {\n this.setState({\n isLoaded: true,\n checkedMembers: []\n });\n this.filterData();\n });\n\n //Get the member list so we can check for identical patron names on save on the member form\n this.props.actions.getMemberList(params);\n }\n\n componentDidMount() {\n this.props.actions.getSessionList()\n .then(() => {\n let sessionOptions = [...this.props.session.sessionList];\n let selectedSession = '';\n sessionOptions.forEach(session => {\n session.label = session.SessionYear + ' ' + session.DisplayName;\n session.value = session.SessionID;\n if (session.IsDefault) {\n selectedSession = session;\n }\n });\n this.setState({\n sessionOptions: sessionOptions,\n selectedSession: selectedSession\n }, () => this.getData());\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { sessionOptions, selectedSession, memberList, checkedMembers, searchFilter } = this.state;\n\n const customStyles = {\n container: base => ({\n ...base,\n lineHeight: 'normal',\n }),\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n dropdownIndicator: base => ({\n ...base,\n padding: '0px 8px'\n })\n }\n return (\n <div>\n <h1>Member Management</h1>\n <div className=\"toolbar user-toolbar\">\n <div className=\"dlas-forms\">\n <div>\n <label>Session</label>\n <Select\n options={sessionOptions}\n value={selectedSession}\n id=\"session-dropdown\"\n onChange={this.handleSessionChange}\n styles={customStyles}\n />\n </div>\n <div>\n <label>Search Member</label>\n <input\n id='member-filter'\n onChange={this.handleFilterChange}\n value={searchFilter}\n />\n </div>\n <div>\n <Link className=\"button add-wide\" to={`/member-management/${this.state.selectedSession.SessionCode}/create-member`}>Add Member</Link>\n </div>\n </div>\n </div>\n <ReactTable\n loading={!this.state.isLoaded}\n data={memberList}\n columns={[\n {\n Header: \"Member ID\",\n accessor: \"MemberNumber\",\n width: 150\n },\n {\n Header: \"Name\",\n accessor: \"MemberDisplayName\",\n Cell: row => {\n return row.original.MemberDisplayName + (row.original.ServiceEndDate && row.original.ServiceEndReason ? \" (\" + row.original.ServiceEndReason + \")\" : \"\")\n }\n },\n {\n Header: \"Member Status\",\n accessor: \"MemberStatus\",\n width: 200\n },\n {\n Header: \"Action\",\n headerClassName: \"header-action\",\n accessor: \"action\",\n className: \"action-column\",\n width: 50,\n expander: true,\n Expander: ({ isExpanded, original }) => {\n if (original.ContactInformation && original.ContactInformation.length > 0) {\n return (\n <button className=\"button view\">View</button>\n );\n } else {\n return (false);\n }\n }\n },\n {\n Header: \"\",\n accessor: \"edit\",\n headerClassName: \"all-column\",\n width: 40,\n Cell: row => {\n return (\n <Link to={`/member-management/${this.state.selectedSession.SessionCode}/edit-member/${row.original.MemberID}`} className=\"button edit\">Edit</Link>\n )\n }\n }\n ]}\n defaultPageSize={10}\n className=\"-striped -highlight\"\n SubComponent={row => {\n return (\n <div>\n <MemberInfo member={row.original} />\n </div>\n )\n }}\n />\n <br />\n </div>\n );\n }\n}\n\nconst MemberInfo = props => {\n\n return (\n <div className=\"flex-row space-around\">\n {props.member.ContactInformation.map((contact, contactIndex) =>\n <div key={contactIndex} className=\"member-contact-container\">\n <span className=\"member-contact-type\">{contact.ContactType}</span>\n <div className=\"inner-grid two\">\n <div>\n <div>\n <span className=\"member-contact-title\">Address:</span>\n </div>\n <div>\n <span>{contact.Address1}</span>\n </div>\n <div>\n <span>{contact.Address2}</span>\n </div>\n <div>\n <span>{contact.City} {contact.StateCode}, {contact.ZipCode}</span>\n </div>\n </div>\n {(contact.PhoneNumber || contact.EmailAddress) &&\n <div>\n <div>\n <span className=\"member-contact-title\">Contact:</span>\n </div>\n <div>\n <span>{contact.PhoneNumber}</span>\n </div>\n <div>\n <span>{contact.EmailAddress}</span>\n </div>\n </div>\n }\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default connect(\n (state) => {\n const { users, members, session, login } = state;\n return {\n users,\n members,\n session,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, userActionCreators, memberActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(MemberManagementGrid)","import React from 'react';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport '../../../stylesheets/lis-member-management/member-management.css';\nimport Select from 'react-select';\n\nconst customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n}\n\nconst ContactInformation = props => {\n const { contactList, contactOptions } = props;\n return (\n <div>\n <h3>Contact Information</h3>\n {contactList.map((contact, contactIndex) => {\n if (!contact.IsActive) {\n return (<div key={contactIndex}></div>)\n }\n return(<div key={contactIndex}>\n <div className=\"flex-row\">\n <div className=\"multi-row four no-margin\"/> \n <div>\n <button type=\"button\" onClick={() => props.removeContact(contactIndex)} className=\"button danger\">Remove Contact</button>\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <div>\n <span className=\"member-contact-title\">Mailing Address</span>\n </div>\n <div className=\"multi-row three no-margin\">\n <div>\n <label>Address Line 1</label>\n <input\n type=\"text\"\n placeholder=\"Address Line 1\"\n value={contact.Address1}\n onChange={(e) => props.changeContact(contactIndex, 'Address1', e.target.value)}\n />\n </div>\n </div>\n <div className=\"multi-row three no-margin\">\n <div>\n <label>Address Line 2</label>\n <input\n type=\"text\"\n placeholder=\"Address Line 2\"\n value={contact.Address2}\n onChange={(e) => props.changeContact(contactIndex, 'Address2', e.target.value)}\n />\n </div>\n </div>\n <div className=\"multi-row three no-margin\">\n <div>\n <label>City</label>\n <input\n type=\"text\"\n placeholder=\"City\"\n value={contact.City}\n onChange={(e) => props.changeContact(contactIndex, 'City', e.target.value)}\n />\n </div>\n <div>\n <label>State</label>\n <Select\n styles={customStyles}\n options={Fields.stateOptions}\n value={Fields.stateOptions.find(option => option.label === contact.StateCode)}\n onChange={(val) => props.changeContact(contactIndex, 'StateCode', val.label)}\n />\n </div>\n <div>\n <label>Zip Code</label>\n <input\n type=\"number\"\n placeholder=\"Zip Code\"\n value={contact.ZipCode}\n onChange={(e) => props.changeContact(contactIndex, 'ZipCode', e.target.value)}\n />\n </div>\n </div>\n </div>\n <div>\n <div>\n <span className=\"member-contact-title\">Contact</span>\n </div>\n <div className=\"multi-row three no-margin\">\n <div>\n <label>Phone Number</label>\n <input\n type=\"text\"\n placeholder=\"Phone Number\"\n value={contact.PhoneNumber}\n onChange={(e) => props.changeContact(contactIndex, 'PhoneNumber', e.target.value)}\n />\n </div>\n </div>\n <div className=\"multi-row three no-margin\">\n <div>\n <label>Email Address</label>\n <input\n type=\"text\"\n placeholder=\"Email Address\"\n value={contact.EmailAddress}\n onChange={(e) => props.changeContact(contactIndex, 'EmailAddress', e.target.value)}\n />\n </div>\n </div>\n </div>\n </div>\n <hr />\n </div>\n )})}\n <button type=\"button\" className=\"button\" onClick={props.addContact}>Add Contact</button>\n </div>\n );\n\n}\n\nexport default ContactInformation;\n\n\n\n\n\n\n\n\n","import React from 'react';\nimport '../../../stylesheets/lis-member-management/member-management.css';\nimport Select from 'react-select';\n\nconst customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n}\n\nclass UserForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n username: '',\n firstName: '',\n lastName: '',\n selectedDomain: '',\n }\n this.handleTextChange = this.handleTextChange.bind(this);\n this.handleDomainChange = this.handleDomainChange.bind(this);\n this.saveUser = this.saveUser.bind(this);\n }\n\n handleTextChange(key, val) {\n this.setState({\n [key]: val\n });\n }\n\n handleDomainChange(val) {\n this.setState({\n selectedDomain: val\n });\n }\n\n saveUser() {\n // Create the request object. The actual request is made in the parent component\n // The email address will be used as the username\n const userObj = {\n LoginID: this.state.username + \"@\" + this.state.selectedDomain.DomainName,\n FirstName: this.state.firstName,\n LastName: this.state.lastName,\n DomainID: this.state.selectedDomain.DomainID,\n IdentityID: this.props.personData.IdentityID,\n IsActive: true\n }\n this.props.saveUser(userObj);\n }\n\n componentDidMount() {\n if (this.props.personData.FirstName) {\n this.setState({\n firstName: this.props.personData.FirstName\n });\n }\n if (this.props.personData.LastName) {\n this.setState({\n lastName: this.props.personData.LastName\n });\n }\n }\n\n render() {\n const { domainOptions, isSaving } = this.props;\n const { username, selectedDomain, firstName, lastName } = this.state;\n return (\n <div>\n <h3>Connect a User</h3>\n <form className=\"dlas-forms user-forms\">\n <div className=\"multi-row fifth-even no-margin\">\n <div>\n <label>Username</label>\n <input type=\"text\"\n placeholder=\"Username\"\n value={username}\n onChange={(e) => this.handleTextChange(\"username\", e.target.value)}\n />\n </div>\n <div>\n <label>Directory</label>\n <Select\n styles={customStyles}\n options={domainOptions}\n value={selectedDomain}\n onChange={this.handleDomainChange}\n />\n </div>\n </div>\n <div className=\"multi-row fifth-even no-margin\">\n <div>\n <label>First Name</label>\n <input type=\"text\"\n placeholder=\"First Name\"\n value={firstName}\n onChange={(e) => this.handleTextChange(\"firstName\", e.target.value)}\n />\n </div>\n <div>\n <label>Last Name</label>\n <input type=\"text\"\n placeholder=\"Last Name\"\n value={lastName}\n onChange={(e) => this.handleTextChange(\"lastName\", e.target.value)}\n />\n </div>\n </div>\n </form>\n <div className=\"button-bar\">\n <div>\n <button onClick={this.props.toggleUserCreation} disabled={isSaving} type=\"button\" className=\"button secondary\">Close</button>\n </div>\n <div className=\"align-right\">\n <button onClick={this.saveUser} disabled={isSaving || (!username || !selectedDomain)} type=\"button\" className=\"button\">Save & Close</button>\n </div>\n </div>\n <div>\n <div className=\"input-feedback\">{this.props.userError}</div>\n </div>\n </div>\n );\n }\n}\n\nexport default UserForm;\n\n\n\n\n\n\n\n\n","import React from 'react';\nimport '../../../stylesheets/lis-member-management/member-management.css';\nimport { bindActionCreators } from 'redux';\nimport { Link, Prompt } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { userActionCreators } from '../../../stores/lis-user-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { sessionActionCreators } from \"../../../stores/lis-session-store\";\nimport ReactTooltip from 'react-tooltip';\nimport Select from 'react-select';\nimport moment from 'moment-timezone';\nimport DatePicker from 'react-datepicker';\nimport ReactTable from \"react-table\";\nimport ContactInformation from './lis-contact-form';\nimport UserForm from './lis-user-creation';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\n\nconst customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n paddingBottom: '4px !important'\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n menuList: (base) => ({\n ...base,\n paddingBottom: '4px !important'\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n}\n\nclass MemberManagementForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: false,\n isSaving: false,\n userFieldsetIsActive: true,\n personalFieldsetIsActive: true,\n memberFieldsetisActive: true,\n memberData: '',\n personData: '',\n userData: [],\n chamberOptions: [\n { label: 'House', value: 'H' },\n { label: 'Senate', value: 'S' }\n ],\n districtOptions: [],\n contactOptions: [],\n userList: [],\n personList: [],\n showUserCreation: false,\n domainOptions: [],\n statusOptions: [],\n showPersonCreation: true,\n memberNumberError: false,\n isDirty: false\n };\n\n this.buildListDisplayName = this.buildListDisplayName.bind(this);\n this.toggleFieldsetCollapse = this.toggleFieldsetCollapse.bind(this);\n this.handleMemberChange = this.handleMemberChange.bind(this);\n this.handlePersonChange = this.handlePersonChange.bind(this);\n this.handleContactChange = this.handleContactChange.bind(this);\n this.selectPerson = this.selectPerson.bind(this);\n this.createPerson = this.createPerson.bind(this);\n this.toggleUserCreation = this.toggleUserCreation.bind(this);\n this.togglePersonCreation = this.togglePersonCreation.bind(this);\n this.saveUser = this.saveUser.bind(this);\n this.selectUser = this.selectUser.bind(this);\n this.saveForm = this.saveForm.bind(this);\n this.getMemberData = this.getMemberData.bind(this);\n }\n\n buildListDisplayName(personData) {\n let listDisplayName = '';\n listDisplayName = personData.LastName && personData.LastName != \"\" ? listDisplayName + \" \" + personData.LastName + \",\" : listDisplayName;\n listDisplayName = personData.FirstName && personData.FirstName != \"\" ? listDisplayName + \" \" + personData.FirstName : listDisplayName;\n listDisplayName = personData.MiddleName && personData.MiddleName != \"\" ? listDisplayName + \" \" + personData.MiddleName : listDisplayName;\n listDisplayName = personData.AlternateName && personData.AlternateName != \"\" ? listDisplayName + \" \" + personData.AlternateName : listDisplayName;\n listDisplayName = personData.Suffix && personData.Suffix != \"\" ? listDisplayName + \" \" + personData.Suffix : listDisplayName;\n\n return listDisplayName;\n }\n\n buildMemberDisplayName(personData) {\n let memberDisplayName = '';\n memberDisplayName = personData.FirstName && personData.FirstName != \"\" ? memberDisplayName + \" \" + personData.FirstName : memberDisplayName;\n memberDisplayName = personData.MiddleName && personData.MiddleName != \"\" ? memberDisplayName + \" \" + personData.MiddleName : memberDisplayName;\n memberDisplayName = personData.AlternateName && personData.AlternateName != \"\" ? memberDisplayName + \" \" + personData.AlternateName : memberDisplayName;\n memberDisplayName = personData.LastName && personData.LastName != \"\" ? memberDisplayName + \" \" + personData.LastName : memberDisplayName;\n memberDisplayName = personData.Suffix && personData.Suffix != \"\" ? memberDisplayName + \" \" + personData.Suffix : memberDisplayName;\n\n return memberDisplayName;\n }\n\n buildPatronDisplayName(personObj, memberDataObject) {\n let patronDisplayName = '';\n\n //Set the PatronDisplayName to last name, unless the last name is not unique\n if (this.props.members.memberList.find(x => x.ListDisplayName && x.ListDisplayName.split(\",\")[0] === personObj.LastName && (memberDataObject ? x.MemberID !== memberDataObject.MemberID : true))\n || this.props.members.memberList.find(x => x.PatronDisplayName && x.PatronDisplayName.split(\",\")[0] === personObj.LastName && (memberDataObject ? x.MemberID !== memberDataObject.MemberID : true))) {\n patronDisplayName = personObj.LastName + \", \" + personObj.FirstName[0] + \". \" + (personObj.MiddleName ? personObj.MiddleName[0] + \".\" : \"\")\n } else {\n patronDisplayName = personObj.LastName\n }\n\n return patronDisplayName;\n }\n\n toggleFieldsetCollapse(fieldset) {\n this.setState(state => ({\n [fieldset]: !state[fieldset]\n }));\n };\n\n handleMemberChange(key, value) {\n let memberData = { ...this.state.memberData };\n if (key === 'MemberNumber') {\n value = value ? value.toUpperCase() : value;\n if (value && ['H', 'S'].includes(value[0])) {\n memberData['ChamberCode'] = value[0];\n } else {\n memberData['ChamberCode'] = null;\n memberData['DistrictID'] = null;\n }\n }\n\n if ([\"ListDisplayName\", \"PatronDisplayName\", \"MemberDisplayName\"].includes(key)) {\n memberData[\"override\"] = true;\n memberData[\"markOverride\"] = false;\n }\n\n memberData[key] = value;\n this.setState({\n memberData: memberData,\n isDirty: true,\n });\n }\n\n handlePersonChange(key, value) {\n let personData = { ...this.state.personData };\n let memberData = { ...this.state.memberData };\n personData[key] = value;\n\n if ([\"FirstName\", \"MiddleName\", \"AlternateName\", \"LastName\", \"Suffix\"].includes(key)) {\n if (memberData[\"override\"] === true) {\n memberData[\"markOverride\"] = true;\n memberData[\"namesChanged\"] = true;\n } else {\n memberData[\"namesChanged\"] = true;\n }\n }\n\n memberData.ListDisplayName = this.buildListDisplayName(personData).trim();\n memberData.MemberDisplayName = this.buildMemberDisplayName(personData).trim();\n\n this.setState({\n personData: personData,\n memberData: memberData,\n isDirty: true\n });\n }\n\n handleContactChange(stateVar, value) {\n this.setState({\n [stateVar]: value,\n isDirty: true\n });\n }\n\n selectPerson(person) {\n this.setState({\n personData: person\n }, () => {\n let newMember = {};\n if (person.FirstName && person.LastName) {\n newMember.MemberDisplayName = this.buildMemberDisplayName(person);\n newMember.ListDisplayName = this.buildListDisplayName(person);\n } else {\n newMember.MemberDisplayName = '';\n newMember.ListDisplayName = '';\n }\n this.setState({\n memberData: newMember\n });\n });\n }\n\n createPerson() {\n // Check to make sure the required fields are filled out\n if (!this.state.memberData.MemberNumber || !this.state.memberData.ChamberCode || !this.state.memberData.DistrictID || !this.state.memberData.PartyCode || (!this.state.personData.IdentityID && (!this.state.memberData.MemberDisplayName || !this.state.memberData.ListDisplayName))) {\n return;\n }\n this.setState({\n isSaving: true\n }, () => {\n const personObj = {\n ...this.state.personData,\n }\n // If the person object has an IdentityID then the user has selected a person from the person list.\n // So there is no need to create a new person\n let createPerson = ''\n if (personObj.IdentityID) {\n createPerson = () => Promise.resolve();\n } else {\n createPerson = this.props.actions.createPerson(personObj)\n .then(() => {\n // The person has been succesfully created. Time to create the member\n // The response from the person creation will return an ID\n return Promise.resolve();\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Person Creation Failure\", type: \"failure\" }]);\n return Promise.reject(err);\n });\n }\n Promise.all([createPerson])\n .then(() => {\n const newMemberObj = {\n ...this.state.memberData,\n SessionCode: this.props.sessionCode,\n IdentityID: personObj.IdentityID || this.props.users.personCreate,\n };\n newMemberObj.PatronDisplayName = this.buildPatronDisplayName(personObj);\n\n //Make sure member number is unique\n if (this.props.members.memberNumbers.find(x => x.MemberNumber === this.state.memberData.MemberNumber)) {\n this.setState({\n memberNumberError: true,\n isSaving: false\n })\n return;\n }\n\n this.props.actions.createMember(newMemberObj)\n .then(() => {\n const member = this.props.members.memberCreate;\n this.setState({ isDirty: false }, () => {\n // If everything was succesful then send the user to the edit page for the newly created member\n this.props.history.push(`/member-management/${member.SessionCode}/edit-member/${member.MemberID}`)\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Member Creation Failure\", type: \"failure\" }]);\n this.setState({\n isSaving: false,\n memberNumberError: false\n });\n })\n });\n });\n }\n\n toggleUserCreation() {\n this.setState(state => ({\n showUserCreation: !state.showUserCreation\n }));\n }\n\n togglePersonCreation() {\n this.setState(state => ({\n showPersonCreation: !state.showPersonCreation,\n personData: ''\n }));\n }\n\n saveUser(userObj) {\n this.setState({\n isSaving: true\n }, () => {\n this.props.actions.createUser(userObj)\n .then(() => {\n this.props.actions.makeToast([{ message: \"User Creation Success\", type: \"success\" }]);\n // Add the new user to the top of the user table\n // The password is returned which will be used in the table\n let fullName = (userObj.FirstName || '') + ' ' + (userObj.LastName || '');\n userObj = {\n ...userObj,\n ...this.props.users.userCreate,\n FullName: fullName\n }\n let userData = [...this.state.userData];\n userData.unshift(userObj);\n this.setState({\n isSaving: false,\n showUserCreation: false,\n userData: userData\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"User Creation Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false\n });\n })\n });\n }\n\n selectUser(rowIndex) {\n const userData = [...this.state.userData];\n userData[rowIndex].IsActive = !userData[rowIndex].IsActive;\n this.setState({\n userData: userData\n });\n }\n\n saveForm() {\n // Check to make sure the required fields are filled out\n if (!this.state.memberData.MemberNumber || !this.state.memberData.ChamberCode || !this.state.memberData.DistrictID || !this.state.memberData.PartyCode || !this.state.personData.FullName) {\n return;\n }\n //Make sure member number is unique \n if (this.props.members.memberNumbers.filter(x => x.MemberID !== this.state.memberData.MemberID).find(x => x.MemberNumber === this.state.memberData.MemberNumber)) {\n this.setState({\n memberNumberError: true\n })\n return;\n }\n this.setState({\n isSaving: true,\n memberNumberError: false\n }, () => {\n const { memberData, personData } = this.state;\n let memberDataObject = { ...memberData };\n\n //Set the PatronDisplayName to last name, unless the last name is not unique\n //Ignore if names have been overridden by the user and the user hasn't gone back and overwritten the override\n //Ignore if there have been no changes to the name fields\n if ((memberData[\"override\"] && !memberData[\"markOverride\"]) || !memberData[\"namesChanged\"]) {\n //Do nothing\n } else {\n memberDataObject.PatronDisplayName = this.buildPatronDisplayName(personData, memberDataObject);\n }\n\n memberDataObject.ChamberCode = memberDataObject.MemberNumber[0];\n\n //Pressing the save button will save the member info, the person info, and the contact info for user, member, and person\n const saveMember = this.props.actions.saveMember(memberDataObject)\n .then(() => {\n return Promise.resolve();\n }).catch(err => Promise.reject(err));\n //Check to see if the person already exists before deciding to save or create the person\n const savePerson = personData.IdentityID\n ? this.props.actions.savePerson(personData)\n .then(() => {\n return Promise.resolve();\n }).catch(err => Promise.reject(err))\n : this.props.actions.createPerson(personData)\n .then(() => {\n return Promise.resolve();\n }).catch(err => Promise.reject(err))\n\n let contactArray = [];\n let saveContact;\n if (memberData.ContactInformation.length > 0) {\n contactArray = [\n ...contactArray,\n ...memberData.ContactInformation\n ];\n }\n if (personData && personData.ContactInformation.length > 0) {\n contactArray = [\n ...contactArray,\n ...personData.ContactInformation\n ];\n }\n if (contactArray.length === 0) {\n saveContact = () => Promise.resolve();\n }\n const contactObj = { ContactInformation: contactArray }\n saveContact = this.props.actions.saveContact(contactObj)\n .then(() => {\n if (this.props.users.contactSaveError !== null) {\n Promise.reject(this.props.users.contactSaveError)\n } else {\n return Promise.resolve();\n }\n }).catch(err => Promise.reject(err));\n\n Promise.all([\n saveMember,\n savePerson,\n saveContact\n ])\n .then(() => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n this.getMemberData(this.props.memberId);\n this.setState({\n isSaving: false,\n isDirty: false\n });\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: err.includes(\"Historical Member records can not be updated\") ? \"Updating historical members is prohibited.\" : \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false,\n });\n });\n });\n }\n\n async getMemberData(memberId) {\n await this.props.actions.getMember(memberId + '?sessionCode=' + this.props.sessionCode, true)\n .then(() => {\n let memberData = { ...this.props.members.member };\n let personData = memberData.Person.length > 0 ? { ...memberData.Person[0] } : '';\n let userData = [];\n if (personData) {\n userData = personData.UserProfile;\n\n if (!memberData.ListDisplayName) {\n memberData.ListDisplayName = this.buildListDisplayName(personData).trim();\n }\n if (!memberData.MemberDisplayName) {\n memberData.MemberDisplayName = this.buildMemberDisplayName(personData).trim();\n }\n if (!memberData.PatronDisplayName) {\n memberData.PatronDisplayName = this.buildPatronDisplayName(personData, memberData);\n }\n }\n\n this.setState({\n memberData: memberData,\n personData: personData,\n userData: userData\n });\n return Promise.resolve();\n }).catch(err => Promise.reject(err));\n }\n\n componentDidMount() {\n this.props.actions.getMemberNumbers();\n const memberId = this.props.memberId;\n let getMemberData = '';\n let getPersonData = ''\n //It will undefined if the user is creating a new member instead of editing an existing one.\n if (memberId === undefined) {\n getMemberData = () => Promise.resolve();\n // If a new member is being created then a list of persons needs to be fetched to allow the user to associate\n // the new member to an existing person\n getPersonData = this.props.actions.getPersonList('')\n .then(() => {\n this.setState({\n memberData: '',\n personData: '',\n userData: [],\n personList: this.props.users.personList,\n showPersonCreation: false\n });\n return Promise.resolve();\n })\n } else {\n getPersonData = () => Promise.resolve();\n getMemberData = this.getMemberData(memberId)\n }\n // Get list of districts for the district dropdown in member information\n const getDistricts = this.props.actions.getDistricts()\n .then(() => {\n let districtOptions = [...this.props.members.districtList];\n districtOptions.forEach(district => {\n district.label = `(${district.ChamberCode}) ${district.Title}`;\n district.value = district.DistrictID;\n });\n this.setState({\n districtOptions: districtOptions\n });\n return Promise.resolve();\n });\n const getParties = this.props.actions.getPartyCodeList()\n .then(() => {\n let partyOptions = [...this.props.members.partyCodeList];\n partyOptions.forEach(party => {\n party.label = party.PartyCode;\n party.value = party.PartyCode;\n });\n this.setState({\n partyOptions: partyOptions\n });\n return Promise.resolve();\n });\n // Get the list of contact types used in the contact sections\n const getContactTypes = this.props.actions.getContactReferences()\n .then(() => {\n let contactOptions = [...this.props.users.contactReferences];\n contactOptions.forEach(type => {\n type.label = type.ContactType;\n type.value = type.ContactTypeID;\n });\n this.setState({\n contactOptions: contactOptions\n });\n return Promise.resolve();\n })\n // Get list of possible member status for the dropdown in member information\n const getStatuses = this.props.actions.getMemberStatuses()\n .then(() => {\n let statusOptions = [...this.props.members.memberStatuses];\n statusOptions.forEach(status => {\n status.label = status.Name;\n status.value = status.MemberStatusID;\n });\n this.setState({\n statusOptions: statusOptions\n });\n return Promise.resolve();\n });\n\n\n // Once all those requests are finished then show the page\n Promise.all([\n getMemberData,\n getPersonData,\n getDistricts,\n getParties,\n getContactTypes,\n getStatuses\n ])\n .then(() => {\n this.setState({\n isLoaded: true\n });\n })\n .catch(err => {\n console.log(err)\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true,\n message: 'Error returned when retrieving the data: ' + err\n });\n });\n\n //Get a list of AD directories. Used for creating a user. This does not appear on the main form so the page can be loaded before finishing this request\n this.props.actions.getDirReferences()\n .then(() => {\n let dirList = [...this.props.users.dirList];\n dirList.forEach(dir => {\n dir.label = dir.DomainName;\n dir.value = dir.DomainID;\n });\n this.setState({\n domainOptions: dirList\n });\n return Promise.resolve();\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n\n render() {\n if (!this.state.isLoaded) {\n return (\n <div className=\"center-spinner spinner\">Loading results...</div>\n );\n }\n if (this.state.message) {\n return (\n <div className=\"dlas-forms\">\n <span>{this.state.message}</span>\n </div>\n );\n\n }\n return (\n <div className=\"dlas-forms user-forms\">\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n {this.state.showUserCreation &&\n <div className=\"overlay\">\n <div className=\"full\">\n <div className=\"overlay-content animated-fade-in-up\">\n <UserForm\n toggleUserCreation={this.toggleUserCreation}\n isSaving={this.state.isSaving}\n domainOptions={this.state.domainOptions}\n saveUser={this.saveUser}\n userError={this.props.users.userCreateError}\n personData={this.state.personData}\n />\n </div>\n </div>\n </div>\n }\n <form>\n <fieldset className={this.state.personalFieldsetIsActive ? 'fieldset-collapse' : 'fieldset-collapse fieldset-closed'}>\n <legend onClick={() => this.toggleFieldsetCollapse('personalFieldsetIsActive')}>Personal Information</legend>\n {this.state.showPersonCreation ?\n <PersonInformation\n person={this.state.personData}\n contactOptions={this.state.contactOptions}\n handlePersonChange={this.handlePersonChange}\n handleContactChange={this.handleContactChange}\n memberId={this.props.memberId}\n togglePersonCreation={this.togglePersonCreation}\n />\n :\n <PersonTable\n personList={this.state.personList}\n togglePersonCreation={this.togglePersonCreation}\n selectPerson={this.selectPerson}\n />\n }\n </fieldset>\n <fieldset className={this.state.memberFieldsetisActive ? 'fieldset-collapse' : 'fieldset-collapse fieldset-closed'}>\n <legend onClick={() => this.toggleFieldsetCollapse('memberFieldsetisActive')}>Member Information</legend>\n <MemberInformation\n member={this.state.memberData}\n chamberOptions={this.state.chamberOptions}\n districtOptions={this.state.districtOptions}\n statusOptions={this.state.statusOptions}\n partyOptions={this.state.partyOptions}\n contactOptions={this.state.contactOptions}\n handleMemberChange={this.handleMemberChange}\n handleContactChange={this.handleContactChange}\n memberId={this.props.memberId}\n memberNumberError={this.state.memberNumberError}\n />\n </fieldset>\n <div className=\"button-bar\">\n <div>\n <Link to=\"/member-management\" className=\"button secondary\">Close</Link>\n </div>\n <div className=\"align-right\">\n {!this.props.memberId ?\n <button disabled={this.state.isSaving} type=\"button\" onClick={this.createPerson} className=\"button\">Create</button>\n :\n <button disabled={this.state.isSaving} className=\"button\" onClick={this.saveForm} type=\"button\">Save</button>\n }\n\n </div>\n </div>\n </form>\n </div>\n );\n }\n};\n\n\nclass UserInformation extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showPassword: []\n };\n this.toggleShowPassword = this.toggleShowPassword.bind(this);\n }\n\n toggleShowPassword(e, userIndex) {\n if (e) {\n e.stopPropagation();\n }\n let showPassword = this.state.showPassword;\n showPassword[userIndex] = !showPassword[userIndex];\n this.setState({\n showPassword: showPassword\n });\n }\n\n render() {\n const { user, person } = this.props;\n\n return (<div>\n <div className=\"align-right\">\n <button type=\"button\" onClick={this.props.toggleUserCreation} className=\"button add-wide\">Add User</button>\n </div>\n <ReactTable\n data={user}\n getTrProps={(state, rowInfo) => {\n let background = '';\n if (rowInfo) {\n background = rowInfo.original.IsActive ? '#89ff89' : '';\n }\n return {\n style: {\n background: background,\n cursor: rowInfo ? 'pointer' : 'default'\n },\n onClick: () => this.props.selectUser(rowInfo.index)\n }\n }}\n noDataText=\"No Users Found\"\n columns={[\n {\n id: \"checkbox\",\n accessor: \"\",\n className: \"checkbox-column\",\n Cell: ({ original }) => {\n return <span\n className={original.IsActive ? \"icon checkmark\" : \"\"}>\n </span>;\n },\n sortable: false,\n filterable: false,\n width: 45\n },\n {\n Header: \"Login\",\n Cell: ({ original, index }) => {\n return (\n <div className=\"flex-row\">\n <div>{original.LoginID}</div>\n {original.Password &&\n <div>\n {this.state.showPassword[index] ?\n <span style={{ fontWeight: 700 }}>{original.Password} <button type=\"button\" onClick={(e) => this.toggleShowPassword(e, index)} className=\"button small-button\">Hide</button></span>\n :\n <button type=\"button\" onClick={(e) => this.toggleShowPassword(e, index)} className=\"button small-button\">Show Password</button>\n }\n </div>\n }\n </div>\n );\n }\n },\n {\n Header: \"Organization\",\n accessor: \"OrganizationName\",\n width: 300\n },\n ]}\n defaultPageSize={5}\n className=\"-striped -highlight\"\n />\n </div>)\n }\n}\n\nclass PersonTable extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedPersonIndex: null,\n search: '',\n personList: []\n };\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.selectPerson = this.selectPerson.bind(this);\n }\n\n handleSearchChange(e) {\n const val = e.target.value;\n let personList = [...this.props.personList];\n const formattedSearch = val.toLowerCase().replace(/ /g, '');\n let filteredPersonList = null;\n if (formattedSearch !== '') {\n filteredPersonList = personList.filter(person => {\n if (person.FullName) {\n return person.FullName.toLowerCase().includes(formattedSearch);\n }\n });\n }\n this.setState({\n search: val,\n personList: filteredPersonList || personList,\n selectedPersonIndex: null\n });\n }\n\n selectPerson(personIndex) {\n this.setState({\n selectedPersonIndex: personIndex\n });\n this.props.selectPerson(this.state.personList[personIndex]);\n }\n\n componentDidMount() {\n this.setState({\n personList: this.props.personList\n });\n }\n\n render() {\n return (\n <div>\n <div className=\"flex-row\">\n <input\n type=\"text\"\n onChange={this.handleSearchChange}\n value={this.state.search}\n placeholder=\"Search\"\n />\n <button onClick={this.props.togglePersonCreation} type=\"button\" className=\"button add-wide\">Add Person</button>\n </div>\n {!this.state.selectedPersonIndex && this.state.selectedPersonIndex != 0 && <div className=\"input-feedback align-right\">Person is required.</div>}\n <br />\n <ReactTable\n data={this.state.personList}\n getTrProps={(state, rowInfo) => {\n return {\n style: {\n background: rowInfo && rowInfo.index === this.state.selectedPersonIndex ? '#89ff89' : '',\n cursor: rowInfo ? 'pointer' : 'default'\n },\n onClick: () => this.selectPerson(rowInfo.index)\n }\n }}\n noDataText=\"No Persons Found\"\n columns={[\n {\n id: \"checkbox\",\n accessor: \"\",\n className: \"checkbox-column\",\n Cell: ({ original, index }) => {\n return <span className={index === this.state.selectedPersonIndex ? \"icon checkmark\" : \"\"}></span>;\n },\n sortable: false,\n filterable: false,\n width: 45\n },\n {\n Header: \"Name\",\n accessor: \"FullName\"\n },\n ]}\n defaultPageSize={5}\n className=\"-striped -highlight\"\n />\n </div>\n );\n }\n}\n\nclass PersonInformation extends React.Component {\n\n constructor(props) {\n super(props);\n this.changeContact = this.changeContact.bind(this);\n this.addContact = this.addContact.bind(this);\n this.removeContact = this.removeContact.bind(this);\n }\n\n changeContact(contactIndex, key, value) {\n let person = { ...this.props.person };\n person.ContactInformation[contactIndex][key] = value;\n this.props.handleContactChange(\"personData\", person);\n }\n\n addContact() {\n let person = { ...this.props.person };\n person.ContactInformation.push({\n OwnerID: person.IdentityID,\n IsActive: true,\n IsPublic: true\n });\n this.props.handleContactChange(\"personData\", person);\n }\n\n removeContact(contactIndex) {\n let person = { ...this.props.person };\n // If it doesn't have an ID then that means it hasn't been saved yet. So remove it from the array\n if (!person.ContactInformation[contactIndex].ContactInformationID) {\n person.ContactInformation.splice(contactIndex, 1)\n } else {\n person.ContactInformation[contactIndex].IsActive = false;\n }\n this.props.handleContactChange(\"personData\", person);\n }\n\n render() {\n const { person, contactOptions } = this.props;\n return (\n <div>\n {/* if the memberid is there then a member already exists and already associated to a person */}\n {!this.props.memberId &&\n <div className=\"align-right\">\n <button type=\"button\" className=\"button\" onClick={this.props.togglePersonCreation}>Use Existing Person</button>\n </div>\n }\n <div className=\"multi-row sixth-even no-margin\">\n <div>\n <label>Prefix</label>\n <input type=\"text\"\n placeholder=\"Prefix\"\n value={person.Prefix}\n onChange={(e) => this.props.handlePersonChange('Prefix', e.target.value)}\n />\n </div>\n <div>\n <label>First Name</label>\n <input type=\"text\"\n placeholder=\"First Name\"\n value={person.FirstName}\n onChange={(e) => this.props.handlePersonChange('FirstName', e.target.value)}\n />\n </div>\n <div>\n <label>Middle Name</label>\n <input type=\"text\"\n placeholder=\"Middle Name\"\n value={person.MiddleName}\n onChange={(e) => this.props.handlePersonChange('MiddleName', e.target.value)}\n />\n </div>\n <div>\n <label>Nickname</label>\n <input type=\"text\"\n placeholder=\"Nickname\"\n value={person.AlternateName}\n onChange={(e) => this.props.handlePersonChange('AlternateName', e.target.value)}\n />\n </div>\n <div>\n <label>Last Name</label>\n <input type=\"text\"\n placeholder=\"Last Name\"\n value={person.LastName}\n onChange={(e) => this.props.handlePersonChange('LastName', e.target.value)}\n />\n </div>\n <div>\n <label>Suffix</label>\n <input type=\"text\"\n placeholder=\"Suffix\"\n value={person.Suffix}\n onChange={(e) => this.props.handlePersonChange('Suffix', e.target.value)}\n />\n </div>\n </div>\n <div>\n {/* Do not allow the user to create a contact for a person that hasn't been created yet */}\n {this.props.memberId &&\n <ContactInformation\n changeContact={this.changeContact}\n contactOptions={contactOptions.filter(option => option.OwnerTypeID === 1)}\n removeContact={this.removeContact}\n addContact={this.addContact}\n contactList={person.ContactInformation || []}\n />\n }\n </div>\n </div>);\n }\n}\n\nclass MemberInformation extends React.Component {\n\n constructor(props) {\n super(props);\n this.changeContact = this.changeContact.bind(this);\n this.addContact = this.addContact.bind(this);\n this.removeContact = this.removeContact.bind(this);\n }\n\n changeContact(contactIndex, key, value) {\n let member = { ...this.props.member };\n member.ContactInformation[contactIndex][key] = value;\n this.props.handleContactChange(\"memberData\", member);\n }\n\n addContact() {\n let member = { ...this.props.member };\n member.ContactInformation.push({\n OwnerID: member.MemberID,\n IsActive: true,\n IsPublic: true\n });\n this.props.handleContactChange(\"memberData\", member);\n }\n\n removeContact(contactIndex) {\n let member = { ...this.props.member };\n // If it doesn't have an ID then that means it hasn't been saved yet. So remove it from the array\n if (!member.ContactInformation[contactIndex].ContactInformationID) {\n member.ContactInformation.splice(contactIndex, 1)\n } else {\n member.ContactInformation[contactIndex].IsActive = false;\n }\n this.props.handleContactChange(\"memberData\", member);\n }\n\n render() {\n const { member, chamberOptions, districtOptions, statusOptions, partyOptions, contactOptions, invalidGabEmail, invalidGabPhone, memberNumberError } = this.props;\n return (\n <div>\n <div className=\"multi-row sixth-even no-margin\">\n <div>\n <label>Member Display Name</label>\n <i data-tip={`Member display name is how the member's name appears on the primary member listing page and the patronage section of a bill's detail and bill limits page.\\nThe member display name is updated automatically when the name fields above are modified, but can be overridden here.`} className=\"icon notification member-form\" />\n <ReactTooltip key={new Date()} />\n <input type=\"text\"\n placeholder=\"Member Display Name\"\n value={member.MemberDisplayName}\n onChange={(e) => this.props.handleMemberChange('MemberDisplayName', e.target.value)}\n style={member.markOverride ? { color: \"red\" } : {}} />\n </div>\n <div>\n <label>Member Patron Name</label>\n <i data-tip={`Patron display name is how the member's last name is shown on the bill versions, calendar, communication, docket, etc.\\nThe patron display name is set when the member is saved unless the value has been overridden here.`} className=\"icon notification member-form\" />\n <ReactTooltip key={new Date()} />\n <input type=\"text\"\n placeholder=\"Member Patron Name\"\n value={member.PatronDisplayName}\n onChange={(e) => this.props.handleMemberChange('PatronDisplayName', e.target.value)}\n style={member.markOverride ? { color: \"red\" } : {}}\n />\n </div>\n <div>\n <label>List Display Name</label>\n <i data-tip={`List display name is how the member's name appears on BDS/eFile, member and watchlist notification searching, and how my legislator voted.\\nThe list display name is updated automatically when the name fields are modified, but can be overridden here.`} className=\"icon notification member-form\" />\n <ReactTooltip key={new Date()} />\n <input type=\"text\"\n placeholder=\"List Display Name\"\n value={member.ListDisplayName}\n onChange={(e) => this.props.handleMemberChange('ListDisplayName', e.target.value)}\n style={member.markOverride ? { color: \"red\" } : {}}\n />\n </div>\n <div>\n <label>Member Number</label>\n <input type=\"text\"\n placeholder=\"Member Number\"\n value={member.MemberNumber}\n onChange={(e) => this.props.handleMemberChange('MemberNumber', e.target.value)}\n />\n {!member.MemberNumber && <div className=\"input-feedback\">Member Number is required.</div>}\n {memberNumberError && <div className=\"input-feedback\">Member Number is already in use.</div>}\n </div>\n <div />\n </div>\n <div className=\"multi-row sixth-even no-margin\">\n <div>\n <label>Party Code</label>\n <Select\n styles={customStyles}\n value={partyOptions.find(option => option.value === member.PartyCode)}\n key={member.PartyCode}\n options={partyOptions}\n onChange={(val) => this.props.handleMemberChange('PartyCode', val.value)}\n />\n {!member.PartyCode && <div className=\"input-feedback\">Party Code is required.</div>}\n </div>\n <div>\n <label>District</label>\n <Select\n styles={customStyles}\n value={districtOptions.find(option => option.value === member.DistrictID && option.ChamberCode === member.ChamberCode)}\n key={member.DistrictID}\n isDisabled={!member.ChamberCode}\n options={districtOptions.filter(option => option.ChamberCode === member.ChamberCode)}\n onChange={(val) => this.props.handleMemberChange('DistrictID', val.value)}\n />\n {!member.DistrictID && <div className=\"input-feedback\">District is required.</div>}\n </div>\n <div>\n <label>Voting Sequence</label>\n <input type=\"number\"\n placeholder=\"Voting Sequence\"\n value={member.VotingSequence}\n onChange={(e) => this.props.handleMemberChange('VotingSequence', e.target.value)}\n />\n </div>\n <div>\n <label>Seat Number</label>\n <input type=\"number\"\n placeholder=\"Seat Number\"\n value={member.SeatNumber}\n onChange={(e) => this.props.handleMemberChange('SeatNumber', e.target.value)}\n />\n </div>\n <div>\n <label>Status</label>\n <Select\n styles={customStyles}\n options={statusOptions}\n key={member.MemberStatusID}\n value={statusOptions.find(option => option.value === member.MemberStatusID)}\n onChange={(val) => this.props.handleMemberChange('MemberStatusID', val.value)}\n />\n </div>\n <div>\n <label htmlFor=\"is-public-button\" className=\"checkbox-label no-background\" style={{ paddingLeft: '0px' }}>Is Public?</label>\n <div className=\"toggle-switch\" onClick={() => this.props.handleMemberChange('IsPublic', !member.IsPublic)}>\n <input id=\"is-public-button\" checked={member.IsPublic} type=\"checkbox\" style={{ width: 'inherit' }} />\n <span className=\"slider\"></span>\n </div>\n </div>\n </div>\n <div className=\"multi-row sixth-even no-margin\">\n <div>\n <label>Service Start Date</label>\n <DatePicker\n selected={member.ServiceBeginDate ? moment(member.ServiceBeginDate) : null}\n key={member.ServiceBeginDate}\n onChange={(val) => this.props.handleMemberChange('ServiceBeginDate', val)}\n isClearable\n />\n </div>\n <div>\n <label>Service End Date</label>\n <DatePicker\n selected={member.ServiceEndDate ? moment(member.ServiceEndDate) : null}\n key={member.ServiceEndDate}\n onChange={(val) => this.props.handleMemberChange('ServiceEndDate', val)}\n isClearable\n />\n </div>\n <div>\n <label>Service End Reason</label>\n <input\n type=\"text\"\n placeholder=\"Ex. Retired\"\n value={member.ServiceEndReason}\n onChange={(e) => this.props.handleMemberChange('ServiceEndReason', e.target.value)}\n disabled={!member.ServiceEndDate}\n />\n </div>\n <div>\n <label>GAB Email Address</label>\n <input type=\"text\"\n placeholder=\"GAB Email Address\"\n value={member.GABEmailAddress}\n onChange={(e) => this.props.handleMemberChange('GABEmailAddress', e.target.value)}\n />\n </div>\n <div>\n <label>GAB Phone Number</label>\n <input type=\"text\"\n placeholder=\"GAB Phone Number\"\n value={member.GABPhoneNumber}\n onChange={(e) => this.props.handleMemberChange('GABPhoneNumber', e.target.value)}\n />\n </div>\n <div>\n <label>Room Number</label>\n <input type=\"text\"\n placeholder=\"Room Number\"\n value={member.RoomNumber}\n onChange={(e) => this.props.handleMemberChange('RoomNumber', e.target.value)}\n />\n </div>\n </div>\n <div>\n {/* Do not allow the user to create a contact for a member that hasn't been created yet */}\n {this.props.memberId &&\n <ContactInformation\n changeContact={this.changeContact}\n contactOptions={contactOptions.filter(option => option.OwnerTypeID === 3)}\n removeContact={this.removeContact}\n addContact={this.addContact}\n contactList={member.ContactInformation || []}\n />\n }\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, users, members, session } = state;\n return {\n nav,\n users,\n members,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, userActionCreators, memberActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(MemberManagementForm)\n\n\n\n\n\n\n\n\n","import React from 'react';\nimport { Route } from 'react-router';\nimport MemberManagementGrid from './lis-member-grid';\nimport MemberManagementForm from './lis-member-form';\n\nconst CreateMember = props => <div><h1>Create Member</h1><MemberManagementForm history={props.history} sessionCode={props.match.params.sessionCode} /></div>;\nconst EditMember = props => <div><h1>Edit Member</h1><MemberManagementForm history={props.history} sessionCode={props.match.params.sessionCode} memberId={props.match.params.memberid} /></div>;\n\nclass MemberManagement extends React.Component {\n\n render() {\n return (\n <div>\n <Route exact path={this.props.match.path} component={MemberManagementGrid} />\n <Route path={`${this.props.match.path}/:sessionCode/create-member`} component={CreateMember} />\n <Route path={`${this.props.match.path}/:sessionCode/edit-member/:memberid`} component={EditMember} />\n </div>\n )\n }\n}\n\nexport default MemberManagement;","import React from \"react\";\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport '../../../stylesheets/shared/react-table.css';\nimport moment from 'moment-timezone';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { cancelRequest } from '../../../services/request.service';\n\nfunction isEmpty(obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key))\n return false;\n }\n return true;\n}\n\nclass SessionGridComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n defaultSession: '',\n error: null,\n isLoaded: false,\n data: [], \n filtered: [{ id: 'all', value: 'true' }],\n currentYear: (new Date()).getFullYear(),\n isCurrentBiennium: true,\n filterAll: 'true', \n }; \n this.filterAll = this.filterAll.bind(this);\n this.getSessionList = this.getSessionList.bind(this);\n }\n\n //When component has mounted, make the call to the list users API\n componentDidMount() {\n this.getSessionList();\n }\n\n onFilteredChange(filtered) {\n if (filtered.length > 1 && this.state.filterAll.length) {\n // NOTE: this removes any FILTER ALL filter\n const filterAll = '';\n this.setState({ filtered: filtered.filter((item) => item.id !== 'all'), filterAll })\n }\n else\n this.setState({ filtered });\n }\n\n getSessionList() {\n this.props.actions.getSessionList().then(() => {\n const defaultSession = this.props.session.sessionList.find(session => session.IsDefault === true)\n this.setState({\n data: this.props.session.sessionList,\n isLoaded: true,\n defaultSession: defaultSession ? defaultSession.SessionYear + ' ' + defaultSession.DisplayName : \"\"\n })\n })\n }\n\n getTrProps = (state, rowInfo, instance) => {\n if (rowInfo) {\n return {\n style: {\n background: rowInfo.original.IsDefault ? 'rgb(202, 225, 241)' : null,\n }\n }\n }\n return true;\n }\n\n\n filterAll(e) {\n const { value } = e.target;\n const filterAll = value;\n const filtered = [{ id: 'all', value: filterAll }];\n // NOTE: this completely clears any COLUMN filters\n this.setState({ filterAll, filtered });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { defaultSession } = this.state;\n return (\n <div>\n <div className=\"header-half\">\n <h1>Session Management</h1>\n <p>Default Display Session: <span> {defaultSession}</span></p>\n </div>\n\n <div className=\"toolbar session-toolbar\">\n <div className=\"dlas-forms\">\n <select value={this.state.filterAll} onChange={this.filterAll}>\n <option value=\"true\">Current Biennium</option>\n <option value=\"false\">All Sessions</option>\n </select> \n </div>\n <div>\n <Link to=\"/session-management/edit-session\" className=\"button add-wide\">New Session</Link>\n </div>\n </div>\n <ReactTable\n filtered={this.state.filtered}\n resizable={false}\n loading={!this.state.isLoaded}\n defaultFilterMethod={(filter, row) => {\n if (filter.value === \"false\") {\n return true;\n }\n if (filter.value === \"true\") {\n return row.SessionYear === this.state.currentYear || row.SessionYear === this.state.currentYear - 1;\n }\n }}\n data={this.state.data}\n ref={r => this.reactTable = r}\n onFilteredChange={this.onFilteredChange.bind(this)}\n SubComponent={row => {\n return (\n <div className={row.original.IsDefault ? 'selected-session' : null} style={{ padding: \"10px\" }}>\n <ul>\n <li>{row.original.Name}</li>\n <li>{row.original.Year}</li>\n <li>{row.original.SessionType}</li>\n </ul>\n </div>\n );\n }}\n columns={[\n {\n Header: \"Year\",\n accessor: \"SessionYear\",\n id: \"yearfilter\",\n width: 80\n },\n {\n Header: \"Type\",\n accessor: \"SessionType\",\n width: 85\n },\n {\n Header: \"Name\",\n accessor: \"DisplayName\",\n width: 180\n },\n {\n Header: \"Prefile Start\",\n Cell: ({ original }) => {\n if (original.SessionEvents !== undefined) {\n for (var i = 0; i < original.SessionEvents.length; i++) {\n //check for Session Start event type ID\n if (original.SessionEvents[i].DisplayName === \"Prefile Date\") {\n return moment(original.SessionEvents[i].ActualDate).format('L')\n }\n }\n return false;\n } else {\n return ' '\n }\n }\n },\n {\n Header: \"Session Start\",\n Cell: ({ original }) => {\n const sessionStartObj = original.SessionEvents && original.SessionEvents.length && original.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate) : '';\n return moment(startDate).format(\"MM/DD/YYYY\");\n }\n },\n {\n Header: \"Bill Cutoff\",\n Cell: ({ original }) => {\n if (original.SessionEvents !== undefined) {\n for (var i = 0; i < original.SessionEvents.length; i++) {\n if (original.SessionEvents[i].DisplayName === \"Bill Cutoff\") {\n return moment(original.SessionEvents[i].ActualDate).format('L')\n }\n }\n return false;\n } else {\n return ' '\n }\n }\n },\n {\n Header: \"Crossover\",\n Cell: ({ original }) => {\n if (original.SessionEvents !== undefined) {\n for (var i = 0; i < original.SessionEvents.length; i++) {\n if (original.SessionEvents[i].DisplayName === \"Crossover\") {\n return moment(original.SessionEvents[i].ActualDate).format('L')\n }\n }\n return false;\n } else {\n return ' '\n }\n }\n },\n {\n Header: \"Adjournment\",\n Cell: ({ original }) => {\n if (original.SessionEvents !== undefined) {\n for (var i = 0; i < original.SessionEvents.length; i++) {\n if (original.SessionEvents[i].DisplayName === \"Adjournment\") {\n return moment(original.SessionEvents[i].ActualDate).format('L')\n }\n }\n return false\n } else {\n return ' '\n }\n }\n },\n {\n Header: \"Reconvene\",\n Cell: ({ original }) => {\n if (original.SessionEvents !== undefined) {\n for (var i = 0; i < original.SessionEvents.length; i++) {\n if (original.SessionEvents[i].DisplayName === \"Reconvene\") {\n return moment(original.SessionEvents[i].ActualDate).format('L')\n }\n }\n return false;\n } else {\n return ' '\n }\n }\n },\n {\n Header: \"Action\",\n headerClassName: \"header-action\",\n accessor: \"action\",\n className: \"action-column\",\n width: 50,\n expander: true,\n Expander: ({ isExpanded, ...rest }) => {\n return (\n <button className=\"button view\">View</button>\n );\n }\n },\n {\n Header: \"\",\n accessor: \"edit\",\n headerClassName: \"all-column\",\n width: 40,\n Cell: row => {\n return (\n <Link to={`/session-management/edit-session/${row.original.SessionID}`} className=\"button edit\">Edit</Link>\n )\n }\n },\n {\n Header: \"All\",\n id: 'all',\n headerClassName: \"all-column\",\n width: 0,\n resizable: false,\n sortable: false,\n Filter: () => { },\n getProps: () => {\n return {\n style: { padding: \"0px\"}\n }\n },\n filterMethod: (filter, rows) => {\n if (filter.value === \"false\") {\n return true;\n }\n if (filter.value === \"true\") {\n return rows.yearfilter === this.state.currentYear || rows.yearfilter === this.state.currentYear - 1;\n }\n }\n }\n ]}\n defaultSorted={[\n {\n id: \"yearfilter\",\n desc: true\n }\n ]}\n defaultPageSize={10}\n className=\"session-table -striped -highlight\"\n getTrProps={this.getTrProps}\n />\n <br />\n\n </div>\n );\n }\n}\n\nconst SessionManagementGrid = connect(\n (state) => {\n const { session } = state;\n return {\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators), dispatch)\n }\n }\n)(SessionGridComponent)\n\nexport default SessionManagementGrid;","import React from 'react';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport DatePicker from 'react-datepicker';\nimport Select from 'react-select';\nimport moment from 'moment-timezone';\nimport { Link, Prompt } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport { cancelRequest } from '../../../services/request.service';\n\nclass SessionForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sessionEvents: [],\n sessionData: '',\n selectedSessionType: '',\n selectedSessionEventType: '',\n sessionEventData: [],\n isSaving: false,\n isDirty: false\n };\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleEventChange = this.handleEventChange.bind(this);\n this.handleSessionEventTypeChange = this.handleSessionEventTypeChange.bind(this);\n this.handleCopyContinuedChange = this.handleCopyContinuedChange.bind(this);\n this.addSessionDate = this.addSessionDate.bind(this);\n this.saveForm = this.saveForm.bind(this);\n }\n\n handleInputChange(value, key) {\n let sessionData = { ...this.state.sessionData };\n if (key === 'SessionCode') {\n //we allow for more than just single-digit special session # (e.g. Special Session V) despite the fact that this will never (say never) happen\n value = value.replace(/[^0-9]/, \"\").substr(0, 6);\n const sessionCodeSuffix = value && value.length >= 5 ? value.substr(4) : null;\n if (sessionCodeSuffix) {\n sessionData['SessionYear'] = value.substr(0, 4);\n sessionData['SessionType'] = sessionCodeSuffix === '1' ? 'Regular' : 'Special';\n sessionData['DisplayName'] = sessionData['SessionType'] + ' Session';\n if (sessionData['SessionType'] === 'Special') {\n sessionData['DisplayName'] += ' ' + this.romanize(Number(sessionCodeSuffix) - 1);\n }\n const sessionTypeData = Fields.sessionTypeOptions.find(type => type.label === sessionData['SessionType']);\n sessionData['SessionTypeID'] = sessionTypeData ? sessionTypeData.value : null; //null will fail but I think it's better than guessing\n } else {\n sessionData['DisplayName'] = null;\n sessionData['SessionYear'] = null;\n sessionData['SessionType'] = null;\n sessionData['SessionTypeID'] = null;\n }\n }\n sessionData[key] = value;\n this.setState({\n sessionData: sessionData,\n isDirty: true\n });\n }\n\n romanize(num) {\n if (isNaN(num))\n return NaN;\n var digits = String(+num).split(\"\"),\n key = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\n \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\n \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"],\n roman = \"\",\n i = 3;\n while (i--)\n roman = (key[+digits.pop() + (i * 10)] || \"\") + roman;\n return Array(+digits.join(\"\") + 1).join(\"M\") + roman;\n }\n\n handleEventChange(value, index) {\n let sessionEventData = [...this.state.sessionEventData];\n if (value) {\n sessionEventData[index].ActualDate = value;\n } else {\n // If the user clicks the 'X' button on a date then remove it from the session event list\n sessionEventData.splice(index, 1);\n }\n this.setState({\n sessionEventData: sessionEventData\n });\n }\n\n handleSessionEventTypeChange(value) {\n this.setState({\n selectedSessionEventType: value\n });\n }\n\n handleCopyContinuedChange(value) {\n this.setState({\n copyContinuedLegislation: value,\n isDirty: true\n })\n }\n\n addSessionDate() {\n if (this.state.selectedSessionEventType) {\n // Set the correct values for the new event date\n let selectedSessionEventType = { ...this.state.selectedSessionEventType };\n selectedSessionEventType.DisplayName = selectedSessionEventType.Name;\n selectedSessionEventType.ActualDate = moment();\n // Add it to the session events \n let sessionEventData = [...this.state.sessionEventData];\n sessionEventData.push(selectedSessionEventType);\n this.setState({\n sessionEventData: sessionEventData,\n selectedSessionEventType: '',\n isDirty: true\n });\n }\n\n }\n\n saveForm() {\n let sessionData = this.state.sessionData;\n let sessionEventData = this.state.sessionEventData;\n let startDate = sessionEventData.find(date => date.DisplayName === \"Session Start\");\n let prefileDate = sessionEventData.find(date => date.DisplayName === \"Prefile Date\");\n let prefileDueDate = sessionEventData.find(date => date.DisplayName === \"Prefile Draft Due\");\n // Lets do some validation\n let error = false;\n if (!sessionData.SessionCode || sessionData.SessionCode.length < 5) {\n this.setState({ codeError: true });\n error = true;\n }\n if (!startDate || !startDate.ActualDate) {\n this.setState({ startDateError: true });\n error = true;\n } else if (!prefileDate || !prefileDate.ActualDate) {\n this.setState({ prefileDateError: true });\n error = true;\n } else if (sessionData.SessionType === \"Regular\" && (!prefileDueDate || !prefileDueDate.ActualDate)) {\n this.setState({ prefileDueDateError: true });\n error = true;\n }\n if (!sessionData.DisplayName) {\n this.setState({ displayNameError: true });\n error = true;\n }\n if (!error) {\n if ((!this.props.match.params.id || Number(this.state.initialSessionCode) !== Number(sessionData.SessionCode)) && this.state.sessionList.find(session => Number(session.SessionCode) === Number(sessionData.SessionCode))) {\n this.props.actions.makeToast([{ message: \"Session Code Already In Use\", type: \"failure\" }]);\n return;\n }\n this.setState({\n isSaving: true\n });\n sessionData.SessionEvents = sessionEventData;\n sessionData.CopyContinuedLegislation = this.state.copyContinuedLegislation ? this.state.copyContinuedLegislation.value : false;\n let action = '';\n if (this.props.match.params.id) {\n action = this.props.actions.editSession(sessionData);\n } else {\n action = this.props.actions.createSession(sessionData);\n }\n action\n .then(() => {\n this.setState({\n isSaving: false,\n isDirty: false\n }, () => {\n this.props.history.push('/session-management');\n this.props.actions.makeToast([{ message: \"Session Saved\", type: \"success\" }]);\n this.props.actions.reloadSessionSelector(true);\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false,\n });\n });\n }\n }\n\n componentDidMount() {\n //Get the session events\n this.props.actions.getSessionEventTypes()\n .then(() => {\n let sessionEventTypes = [...this.props.session.sessionEventTypes];\n sessionEventTypes.forEach(event => {\n event.label = event.Name;\n event.value = event.EventTypeID;\n })\n this.setState({\n sessionEvents: sessionEventTypes,\n sessionEventsIsLoaded: true\n });\n });\n this.props.actions.getSessionList()\n .then(() => {\n const sessionList = [...this.props.session.sessionList];\n this.setState({ sessionList, sessionsAreLoaded: true })\n })\n if (this.props.match.params.id) {\n // This is an existing session. Go ahead and get the data\n this.props.actions.getSessionById(this.props.match.params.id, true)\n .then(() => {\n const selectedSession = this.props.session.selectedSession\n const selectedSessionType = Fields.sessionTypeOptions.find(type => type.value == selectedSession.SessionTypeID);\n this.setState({\n sessionData: selectedSession,\n initialSessionCode: selectedSession.SessionCode,\n selectedSessionType: selectedSessionType || '',\n sessionEventData: selectedSession.SessionEvents || [],\n isLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true,\n message: err.toString()\n });\n })\n //if session already has bills, do not allow session code change\n this.props.actions.getSessionBills('?sessionID= ' + this.props.match.params.id)\n .then(() => {\n if (this.props.bills.sessionBills && this.props.bills.sessionBills.length > 0) {\n this.setState({ sessionHasBills: true })\n }\n this.setState({ sessionBillsAreLoaded: true })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n sessionBillsAreLoaded: true,\n sessionHasBills: true //default to not allowing them to change the session code if the request fails..\n });\n })\n } else {\n this.setState({\n isLoaded: true,\n sessionBillsAreLoaded: true\n });\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { sessionData, sessionEventData, sessionEvents, selectedSessionEventType, selectedSessionType, copyContinuedLegislation } = this.state;\n if (this.state.message) {\n <div className=\"fail\">{this.state.message}</div>\n }\n const customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n }\n //Filter out the events that have already been added to the session\n const filteredSessionEvents = sessionEvents.filter(event => {\n if (sessionEventData.findIndex(eventData => eventData.EventTypeID === event.EventTypeID) < 0) {\n return event;\n }\n });\n if (this.state.isLoaded && this.state.sessionEventsIsLoaded && this.state.sessionsAreLoaded && this.state.sessionBillsAreLoaded) {\n return (\n <div className=\"user-forms\">\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <div className=\"dlas-forms\">\n <form>\n <legend>\n <span>Session Setup</span>\n {sessionData.SessionYear && sessionData.DisplayName &&\n <span style={{ float: 'right' }}>{sessionData.SessionYear + \" \" + sessionData.DisplayName}</span>\n }\n </legend>\n <div className=\"multi-row fifth-even no-margin\">\n <div>\n <label className=\"label\" htmlFor=\"session-code\">Session Code</label>\n <input\n id=\"session-code\"\n className={this.state.codeError && (!sessionData.SessionCode || sessionData.SessionCode.length < 5) ? 'input-error' : ''}\n type=\"text\"\n placeholder=\"Session Code\"\n disabled={this.state.sessionHasBills}\n value={sessionData.SessionCode || ''}\n onChange={(e) => this.handleInputChange(e.target.value, 'SessionCode')}\n />\n </div>\n\n {sessionEventData.map((event, eventIndex) =>\n <div key={eventIndex}>\n <label className=\"label\">{event.DisplayName}</label>\n <DatePicker\n selected={event.ActualDate ? moment(event.ActualDate) : null}\n isClearable\n onChange={(value) => {\n this.handleEventChange(moment(value), eventIndex)\n }}\n />\n </div>\n\n )}\n </div>\n <div className=\"multi-row fifth-even no-margin\">\n <div>\n {filteredSessionEvents.length > 0 &&\n <div>\n <label>Add Session Date</label>\n <Select\n styles={customStyles}\n className={(this.state.startDateError && !sessionEventData.find(date => date.DisplayName === \"Session Start\")) || (this.state.prefileDateError && !sessionEventData.find(it => it.DisplayName === \"Prefile Date\")) || (sessionData.SessionType === \"Regular\" && this.state.prefileDueDateError && !sessionEventData.find(it => it.DisplayName === \"Prefile Draft Due\")) ? 'input-error' : ''}\n id=\"SessionDateTypeSelector\"\n value={selectedSessionEventType}\n options={filteredSessionEvents}\n onChange={this.handleSessionEventTypeChange}\n />\n {this.state.startDateError && !sessionEventData.find(date => date.DisplayName === \"Session Start\") &&\n <span className=\"input-feedback\">Please select a Session Start Date</span>\n }\n {this.state.prefileDateError && !sessionEventData.find(it => it.DisplayName === \"Prefile Date\") &&\n <span className=\"input-feedback\">Please select a Session Prefile Date</span>\n }\n {sessionData.SessionType === \"Regular\" && this.state.prefileDueDateError && !sessionEventData.find(it => it.DisplayName === \"Prefile Draft Due\") &&\n <span className=\"input-feedback\">Please select a Session Prefile Due Date</span>\n }\n </div>\n }\n </div>\n <div>\n {filteredSessionEvents.length > 0 &&\n <div>\n <br />\n <button\n disabled={!selectedSessionEventType}\n className=\"button\"\n type=\"button\"\n onClick={this.addSessionDate}>\n Add</button>\n </div>\n }\n </div>\n <div>\n <label htmlFor=\"is-active-button\" className=\"checkbox-label no-background\" style={{ paddingLeft: '0px' }}>Session Active</label>\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(!sessionData.IsActive, 'IsActive')}>\n <input id=\"is-active-button\" checked={sessionData.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n <div>\n <label htmlFor=\"is-default-button\" className=\"checkbox-label no-background\" style={{ paddingLeft: '0px' }}>Default Display Session</label>\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(!sessionData.IsDefault, 'IsDefault')}>\n <input id=\"is-default-button\" checked={sessionData.IsDefault} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n <div>\n <label htmlFor=\"CopyContinuedLegislation\">Copy Continued Bills</label>\n <Select\n styles={customStyles}\n id=\"CopyContinuedLegislation\"\n value={copyContinuedLegislation}\n options={[\n { label: \"Select...\", value: false },\n { label: \"Yes\", value: true },\n ]}\n onChange={this.handleCopyContinuedChange}\n />\n </div>\n </div>\n <div className=\"button-bar\">\n <div>\n </div>\n <div className=\"align-right\">\n <Link to=\"/session-management\" className=\"button secondary\">Cancel</Link>\n <button className=\"button\" type=\"button\" disabled={this.state.isSaving} onClick={this.saveForm}>Save</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n );\n } else {\n return (<div className=\"center-spinner spinner\">Loading...</div>)\n }\n }\n};\n\nexport default connect(\n (state) => {\n const { session, nav, bills } = state;\n return {\n nav,\n session,\n bills\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, sessionActionCreators, navActionCreators), dispatch)\n }\n }\n)(SessionForm)","import React from 'react';\nimport { Route } from 'react-router';\nimport SessionManagementGrid from './lis-session-grid';\nimport SessionManagementForm from './lis-session-form';\n\n\nclass SessionManagement extends React.Component {\n\n render() { \n\n return (\n <div>\n <Route exact path={this.props.match.path} component={SessionManagementGrid} />\n <Route exact path={`${this.props.match.path}/edit-session`} component={SessionManagementForm} />\n <Route exact path={`${this.props.match.path}/edit-session/:id`} component={SessionManagementForm} />\n </div>\n )\n }\n}\n\nexport default SessionManagement;","import React from \"react\";\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport '../../../stylesheets/shared/react-table.css';\nimport moment from 'moment-timezone';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\n\nclass CommitteeGridComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCreateSuccess: false,\n showCreateFailure: false,\n isSubcommittee: false,\n error: null,\n isLoaded: false,\n disableChamberSelector: false,\n selectedError: null,\n filtered: [],\n currentDate: new Date(),\n filterChamber: '',\n filterAll: '',\n filterName: '',\n committeeNameInput: '',\n committeeNumberInput: '',\n chamberOptions: [\n { label: 'House', value: 'H' },\n { label: 'Senate', value: 'S' }\n ]\n };\n\n this.filterAll = this.filterAll.bind(this);\n this.committeeNameChange = this.committeeNameChange.bind(this);\n this.committeeNumberChange = this.committeeNumberChange.bind(this);\n this.filterChamber = this.filterChamber.bind(this);\n this.sendCreateDetails = this.sendCreateDetails.bind(this);\n };\n\n getCommittees() {\n var params = \"PendingChange=\" + true;\n this.props.actions.getPartnerCommittees(params).then(() => {\n //Get rid of the tables loading screen because the data is loaded\n this.setState({\n isLoaded: true\n })\n //set the default chamber to house or senate depending on the user's role\n let filterChamber = '';\n let disableChamberSelector = false;\n const scopes = this.props.login.userClaims.scopes;\n const houseScope = scopes.find(scope => scope === \"House\");\n const senateScope = scopes.find(scope => scope === \"Senate\");\n //Checks to see if the user doesn't have both roles (like if they weren't admin). If they have both roles then leave the preselected chamber as all\n if ((houseScope && !senateScope) || (!houseScope && senateScope)) {\n //Find which role the user has\n const scope = scopes.find(scope => scope === \"House\" || scope === \"Senate\");\n filterChamber = this.state.chamberOptions.find(chamber => chamber.label === scope).value;\n disableChamberSelector = true;\n } else {\n filterChamber = this.props.committee.committeeChamber;\n }\n this.setState({\n filterChamber: filterChamber,\n disableChamberSelector: disableChamberSelector\n });\n });\n }\n\n sendCreateDetails() {\n var newCommittee = {\n Name: this.state.committeeNameInput,\n CommitteeNumber: this.state.committeeNumberInput,\n ChamberCode: this.state.filterChamber,\n IsPublic: 0\n }\n this.props.actions.createNewCommittee(newCommittee).then(() => {\n this.setState({\n showCreateSuccess: true,\n showCreateFailure: false\n });\n setTimeout(function () {\n this.setState({\n showCreateSuccess: false,\n showCreateFailure: false\n });\n }.bind(this), 5000);\n this.getCommittees()\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n showCreateSuccess: false,\n showCreateFailure: true\n })\n setTimeout(function () {\n this.setState({\n showCreateSuccess: false,\n showCreateFailure: false\n });\n }.bind(this), 5000);\n this.getCommittees()\n })\n }\n\n onFilteredChange(filtered) {\n if (filtered.length > 1 && this.state.filterAll.length) {\n // NOTE: this removes any FILTER ALL filter\n const filterAll = '';\n this.setState({ filtered: filtered.filter((item) => item.id !== 'all'), filterAll })\n }\n else\n this.setState({ filtered });\n }\n\n committeeNameChange(e) {\n const { value } = e.target;\n const committeeName = value;\n // NOTE: this completely clears any COLUMN filters\n this.setState({ committeeNameInput: committeeName });\n }\n\n committeeNumberChange(e) {\n const { value } = e.target;\n const committeeNumber = value;\n // NOTE: this completely clears any COLUMN filters\n this.setState({ committeeNumberInput: committeeNumber });\n }\n\n componentDidMount() {\n this.getCommittees()\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n filterAll(e) {\n const { value } = e.target;\n const filterAll = value;\n const filtered = [{ id: 'all', value: filterAll }];\n // NOTE: this completely clears any COLUMN filters\n this.setState({ filterAll, filtered });\n }\n\n filterChamber(e) {\n const { value } = e.target;\n const filterChamber = value;\n this.setState({ filterChamber }, () => {\n this.props.actions.toggleChamber(filterChamber);\n });\n }\n\n render() {\n const { committee } = this.props;\n //Filter the table if the user has selected a chamber\n const tableData = this.state.filterChamber ?\n this.props.committee.partnerCommittees.filter(committee => committee.ChamberCode === this.state.filterChamber)\n :\n this.props.committee.partnerCommittees;\n return (\n <div>\n <div className=\"header-half\">\n <h1>Committee Management</h1>\n </div>\n <div className=\"toolbar committee-bar\">\n <div className=\"dlas-forms\">\n {this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\") &&\n <div>\n <label>Chamber</label>\n <select value={this.state.filterChamber} onChange={this.filterChamber} disabled={this.state.disableChamberSelector}>\n <option value=\"\">All</option>\n <option value=\"S\">Senate</option>\n <option value=\"H\">House</option>\n </select>\n </div>\n }\n <div>\n <label>Committee Name</label>\n <input value={this.state.filterAll} onChange={this.filterAll} />\n </div>\n </div>\n </div>\n {committee.partnerCommitteesError &&\n <p className=\"small-text message-error\">{committee.partnerCommitteesError}</p>\n }\n {committee.createCommitteeMessage &&\n <p className=\"small-text message-error\">{committee.createCommitteeMessage}</p>\n }\n <ReactTable\n filtered={this.state.filtered}\n resizable={false}\n defaultFilterMethod={(filter, row) =>\n String(row[filter.id]) === filter.value}\n defaultSorted={[\n {\n id: \"Name\"\n }\n ]}\n data={tableData}\n noDataText={committee.committeePartnerListError}\n loading={!this.state.isLoaded}\n ref={r => this.reactTable = r}\n onFilteredChange={this.onFilteredChange.bind(this)}\n columns={[\n {\n Header: \"Committee Name\",\n columns: [\n {\n Header: (\n <div className=\"dlas-forms\">\n {!this.state.showCreateSuccess && !this.state.showCreateFailure &&\n <div className=\"committee-grid-header-inputs\">\n <input id=\"insert-new-committee\" type=\"text\" value={this.state.committeeNameInput} placeholder=\"Type new committee name and committee number, click create\" onChange={this.committeeNameChange} disabled={this.state.isSubcommittee} />\n <input id=\"insert-new-committee-number\" type=\"text\" value={this.state.committeeNumberInput} placeholder=\"Committee number\" onChange={this.committeeNumberChange} />\n </div>\n }\n {this.state.showCreateSuccess &&\n <span className=\"insert-message\">Committee was created successfully!</span>\n }\n {this.state.showCreateFailure &&\n <span className=\"insert-message fail\">Committee creation failed</span>\n }\n </div>\n ),\n headerClassName: \"header-insert\",\n accessor: \"Name\",\n sortable: false,\n filterAll: true,\n Cell: row => {\n return (\n <span id={'cm-namecell-' + row.index}>{row.original.Name}</span>\n )\n }\n }\n ]\n },\n {\n Header: \"Service Start Date\",\n columns: [\n {\n headerClassName: \"header-insert\",\n accessor: \"PendingChange\",\n sortable: false,\n filterAll: true,\n width: 150,\n Cell: row => {\n if (row.original.ServiceBeginDate === '0001-01-01T00:00:00') {\n return <span className=\"txt-greyed\" id={'cm-pending-' + row.index}>Pending</span>\n }\n else {\n return <span id={'cm-pending-' + row.index}>{row.original.ServiceBeginDate ? moment(row.original.ServiceBeginDate).format('L') : ''}</span>\n }\n }\n }\n ]\n },\n {\n Header: \"Actions\",\n headerClassName: \"submit-action\",\n columns: [\n\n {\n Header: (<span><button id=\"submit-new-committee\" onClick={this.sendCreateDetails} disabled={!this.state.filterChamber || !this.state.committeeNameInput || !this.state.committeeNumberInput} className=\"button\">Create</button></span>),\n headerClassName: \"header-action\",\n accessor: \"action\",\n sortable: false,\n className: \"action-column\",\n width: 120,\n Cell: row => {\n return (\n <div className=\"committee-action-column\">\n <Link id={'cm-edit-' + row.index} to={`/committee-management/edit-committee/${row.original.CommitteeID}`} className=\"button edit\">Edit</Link>\n <Link id={'cm-flag-' + row.index} to={`/docket-management/${row.original.CommitteeID}`} className=\"button paper\">Docket</Link>\n {row.original.PendingChange ? <span id={'cm-flag-' + row.index} className=\"button flag\">Flag</span> : <span></span>}\n </div>\n )\n }\n },\n {\n Header: \"All\",\n id: 'all',\n className: \"all-column\",\n headerClassName: \"all-header\",\n width: 0,\n resizable: false,\n sortable: false,\n Filter: () => { },\n getProps: () => {\n return {\n style: { padding: \"0px\" }\n }\n },\n filterMethod: (filter, row, column) => {\n // convert to lowercase before comparing\n var lowercaseRow = row.Name.toLowerCase();\n var lowercaseFilter = filter.value.toLowerCase();\n if (lowercaseRow.includes(lowercaseFilter)) {\n return true\n }\n },\n }\n ]\n },\n ]}\n defaultPageSize={15}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight\"\n />\n <br />\n\n </div>\n );\n }\n}\n\nconst CommitteeManagementGrid = connect(\n (state) => {\n const { login, committee, nav } = state;\n return {\n login,\n committee,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, committeeActionCreators, navActionCreators), dispatch)\n }\n }\n)(CommitteeGridComponent)\n\n\nexport default CommitteeManagementGrid;","import React from 'react';\nimport moment from 'moment-timezone';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\n\n\n// THE REORDER FUNCTION THAT FIRES WHEN ITEM IS DROPPED\nconst reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n\n result.splice(endIndex, 0, removed);\n // Reorder the Sequence value too!\n result.forEach(function (element, index) {\n element.Sequence = index + 1\n });\n return result;\n};\n\n// STYLE TO SHOW WHEN ITEM IS BEING DRAGGED\nconst getItemStyle = (isDragging, draggableStyle, pendingDeletion) => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n // change background colour if dragging\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: pendingDeletion ? 'red' : 'none',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%',\n});\n\n\nclass PersonnelDraggableComponent extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedPersonnel: ''\n };\n this.onDragEnd = this.onDragEnd.bind(this);\n this.onInsert = this.onInsert.bind(this);\n this.handleDropDownChange = this.handleDropDownChange.bind(this);\n }\n\n onInsert(staffRoleTypeID) {\n let selectedPersonnel = this.state.selectedPersonnel\n //Make sure that a member is selected before trying to add \n if (selectedPersonnel.IdentityID) {\n delete selectedPersonnel.EffectiveEndDate;\n //set isPublic to false by default just in case the user doesn't want to publish just yet\n selectedPersonnel.IsPublic = false;\n //Set the correct committee ID\n selectedPersonnel.AffiliationID = this.props.affiliation;\n //Set the correct StaffRoleTypeID (1 = clerk, 2 = staff)\n selectedPersonnel.StaffRoleTypeID = staffRoleTypeID\n selectedPersonnel.Sequence = this.props.items.length + 1;\n this.props.onPersonnelChange([...this.props.items, selectedPersonnel]);\n this.setState({\n selectedPersonnel: ''\n })\n }\n }\n\n onRemove(rowID) {\n var tempArray = this.props.items\n\n tempArray.forEach(function (element) {\n if (element.StaffID === rowID) {\n //the element has already been marked to be deleted. un-mark it\n if (element.EffectiveEndDate) {\n delete element.EffectiveEndDate;\n } else {\n element.EffectiveEndDate = moment(new Date()).format(\"YYYY-MM-DDTHH:mm:ss.SS[Z]\");\n }\n }\n })\n this.props.onPersonnelChange(tempArray)\n\n }\n\n handleDropDownChange = value => {\n //this function runs again after the member is inserted. It does not have a value so the dropdown text is replaced with the word 'Select'\n if (value) {\n var personnel = value;\n var personnelArray = {\n ...personnel,\n Sequence: this.props.items.length\n }\n this.setState({\n selectedPersonnel: personnelArray\n });\n } else {\n this.setState({\n selectedPersonnel: 'Select...'\n })\n }\n }\n\n onDragEnd(result) {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n const items = reorder(\n this.props.items,\n result.source.index,\n result.destination.index\n );\n\n this.props.onPersonnelChange(items);\n }\n\n\n render() {\n const { items, dropdownData, name } = this.props;\n const { selectedPersonnel } = this.state;\n const headers = ['Name', 'Phone', 'Email'];\n const keys = ['FullName', 'PhoneNumber', 'Email']\n return (\n <DragDropContext onDragEnd={this.onDragEnd}>\n <Droppable droppableId={`${name}-droppable`}>\n {(provided, snapshot) => (\n <table\n className=\"dnd-grid-table personnel-grid\"\n ref={provided.innerRef}\n style={getListStyle(snapshot.isDraggingOver)}\n >\n <thead className=\"dnd-grid-header\" style={getListStyle(snapshot.isDraggingOver)}>\n <tr>\n <th scope=\"col\" id={name + '-grabber-column'}></th>\n <th scope=\"col\" id={name + '-display-column'}>Display #</th>\n {headers.map((item, index) => (\n <th key={index} scope=\"col\" id={name + '-' + item + '-column'} >{item}</th>\n ))}\n <th scope=\"col\" id={name + '-actions-column'}>Actions</th>\n </tr>\n </thead>\n <tbody>\n <SelectMenu\n items={items}\n name={name}\n dropdownData={dropdownData}\n handleDropDownChange={this.handleDropDownChange}\n selectedPersonnel={selectedPersonnel}\n onInsert={this.onInsert.bind(this, this.props.staffRoleTypeID)}\n />\n\n {this.props.items.map((item, index) => (\n <Draggable key={`${item.StaffID}-${item.Sequence}`} draggableId={`${item.StaffID}-${item.Sequence}`} index={index}>\n {(provided, snapshot) => (\n <tr\n className={item.EffectiveEndDate ? 'pending-delete' : ''}\n id={name + '-' + item.StaffID}\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style\n )}\n >\n <td><button id={name + '-' + item.StaffID + '-grabber-button'} className=\"button draggable\">Drag and drop</button></td>\n <td id={name + '-' + item.StaffID + '-index'}>{index + 1}</td>\n\n {keys.map((key, index) => (\n <td key={index} id={name + '-' + item.StaffID + '-' + key}>{item[key]}</td>\n ))}\n <td><button id={name + '-' + item.StaffID + '-delete-button'} type=\"button\" onClick={this.onRemove.bind(this, item.StaffID)} className={item.EffectiveEndDate ? \"button add\" : \"button remove\"}>Delete</button></td>\n </tr>\n )}\n </Draggable>\n ))}\n\n {provided.placeholder}\n </tbody>\n </table>\n )}\n </Droppable>\n </DragDropContext>\n );\n }\n}\n\nfunction SelectMenu(props) {\n\n let dropdown = [];\n //Remove personnel from dropdown that already belong to the committee\n props.dropdownData.forEach(function (element) {\n let isDuplicate = false;\n props.items.forEach(function (item) {\n if (item.IdentityID === element.IdentityID) {\n isDuplicate = true;\n }\n });\n if (!isDuplicate) {\n dropdown.push(element);\n }\n })\n\n return (\n <tr id={props.name + '-insert-row'} className=\"dnd-insert-row\">\n <td></td>\n <td></td>\n <td><Fields.Dropdown\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n value={props.selectedPersonnel}\n options={dropdown}\n id={props.name + '-dropdown'}\n onChange={props.handleDropDownChange} />\n </td>\n <td id={props.name + '-phone-td'}>{props.selectedPersonnel.PhoneNumber}</td>\n <td id={props.name + '-email-td'}>{props.selectedPersonnel.Email}</td>\n <td><button type=\"button\" id={props.name + '-insert-button'} className=\"button\" onClick={props.onInsert}>Insert</button></td>\n </tr>\n )\n}\n\nexport default PersonnelDraggableComponent;","import React from 'react';\nimport DatePicker from \"react-datepicker\";\nimport moment from 'moment-timezone';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\n\n// STYLE TO SHOW WHEN ITEM IS BEING DRAGGED\nconst getItemStyle = (isDragging, draggableStyle, pendingDeletion) => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n // change background colour if dragging\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: pendingDeletion ? 'red' : 'none',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%',\n});\n\n\nclass MembersDraggableComponent extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n dropdownDataRoles: [{ value: 0, label: 'Role' }],\n membersDropdown: [],\n selectedMember: 'Select...',\n selectedRole: { value: 0, label: 'Role' }\n };\n this.onDragEnd = this.onDragEnd.bind(this);\n this.onInsert = this.onInsert.bind(this);\n this.handleDropDownChange = this.handleDropDownChange.bind(this);\n this.handleRolesDropDownChange = this.handleRolesDropDownChange.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleSeniorityChange = this.handleSeniorityChange.bind(this);\n }\n\n // HANDLE DATE ASSIGNED IN ADD NEW MEMBER ROW\n handleDateChange(date) {\n this.setState(state => ({\n selectedMember: { ...state.selectedMember, AssignDate: moment(date) }\n }));\n }\n\n // HANDLE SENIORITY CHANGE IN ADD NEW MEMBER ROW\n handleSeniorityChange(e) {\n let value = e.target.value;\n this.setState(state => ({\n selectedMember: { ...state.selectedMember, Seniority: value }\n }));\n }\n\n // HANDLE MEMBER DROPDOWN CHANGE IN ADD NEW MEMBER ROW\n handleDropDownChange = member => {\n if (member) {\n //The AssignDate is deleted because the subcommittee dropdown has it defined and\n //the date is not formatted correctly for the DatePicker. Since a new date is being assigned anyway I am just going to delete this value\n delete member.AssignDate;\n this.setState(state => ({\n selectedMember: {\n AssignDate: state.selectedMember.AssignDate,\n ...member,\n DisplaySequence: this.props.items.length,\n }\n }));\n } else {\n this.setState({\n selectedMember: 'Select...'\n });\n }\n }\n\n // ADD THE SELECTED MEMBER TO THE GRID\n onInsert() {\n\n let selectedMember = this.state.selectedMember\n //Make sure that a member is selected before trying to add \n if (selectedMember.MemberID && this.state.selectedRole.value) {\n delete selectedMember.RemoveDate;\n //Add isPublic=false so duplicate entries are not created\n selectedMember.IsPublic = false;\n //If the user didn't set the date then assign today's date\n if (!selectedMember.AssignDate) selectedMember.AssignDate = moment(new Date()).format(\"YYYY-MM-DDTHH:mm:ss.SS[Z]\");\n selectedMember.DisplaySequence = this.props.items.length + 1;\n selectedMember.CommitteeID = this.props.affiliation;\n selectedMember.CommitteeRoleID = this.state.selectedRole.value;\n this.props.onMemberChange([...this.props.items, selectedMember])\n this.handleDropDownChange();\n }\n\n }\n\n // REMOVE A MEMBER FROM THE GRID\n onRemove(rowID) {\n\n var tempArray = this.props.items\n\n tempArray.forEach(function (element) {\n if (element.MemberID === rowID) {\n //the element has already been marked to be deleted. un-mark it\n if (element.RemoveDate) {\n delete element.RemoveDate;\n } else {\n element.RemoveDate = moment(new Date()).format(\"YYYY-MM-DDTHH:mm:ss.SS[Z]\");\n }\n }\n })\n this.props.onMemberChange(tempArray);\n }\n\n // FILTER DATEPICKER TO SHOW TODAY & PAST DAYS ONLY - IN ADD NEW MEMBER ROW\n isValidTerminationDate = (date) => {\n const day = date;\n return day <= new Date()\n }\n\n // HANDLE ROLE DROPDOWN CHANGE\n handleRolesDropDownChange = value => {\n var role = value;\n var selected = this.state.selectedMember;\n this.setState({\n selectedRole: role,\n selectedMember: { ...selected, CommitteeRoleID: role.value }\n })\n }\n\n // WHEN DRAGGED ITEM HAS BEEN PLACED\n onDragEnd(result) {\n if (!result.destination) {\n return;\n }\n let newItems = [...this.props.items];\n let [removed] = newItems.splice(result.source.index, 1);\n\n newItems.splice(result.destination.index, 0, removed);\n // Reorder the DisplaySequence value too!\n newItems.forEach((element, index) => {\n element.DisplaySequence = index + 1\n });\n this.props.onMemberChange(newItems);\n }\n\n // HANDLE EDITING OF ROLES INPUT (IN TABLE ROWS) - WILL NOT SET PROPS\n handleEditRoles(memberRole, valObj) {\n this.setState({ [memberRole]: valObj })\n }\n\n // HANDLE SAVING OF ROLES INPUT\n handleSaveRoles(index, memberRole, member) {\n const valObj = this.state[memberRole];\n const items = this.props.items.map((item, i) => {\n if (i === index) {\n return { ...item, CommitteeRoleID: valObj.value, isPendingAdd: true };\n } else {\n return item;\n }\n });\n\n this.props.onMemberChange(items);\n\n this.toggleInput(member)\n }\n\n // HANDLE EDITING OF SENIORITY INPUT - WILL NOT SET PROPS\n handleEditSeniority(memberSeniority, e) {\n this.setState({ [memberSeniority]: e.target.value })\n }\n\n // HANDLE SAVING OF SENIORITY INPUT\n handleSaveSeniority(index, memberSeniority, member) {\n const value = this.state[memberSeniority];\n const items = this.props.items.map((item, i) => {\n if (i === index) {\n return { ...item, Seniority: value, isPendingAdd: true };\n } else {\n return item;\n }\n });\n\n this.props.onMemberChange(items);\n\n this.toggleInput(member)\n }\n\n // HANDLE EDITING OF SENIORITY INPUT - WILL NOT SET PROPS\n handleEditVotingSequence(memberVotingSequence, e) {\n this.setState({ [memberVotingSequence]: e.target.value })\n }\n\n // HANDLE SAVING OF VOTE SEQUENCE INPUT\n handleSaveVotingSequence(index, memberVotingSequence, member) {\n const value = this.state[memberVotingSequence];\n const items = this.props.items.map((item, i) => {\n if (i === index) {\n return { ...item, VotingSequence: value, isPendingAdd: true };\n } else {\n return item;\n }\n });\n\n this.props.onMemberChange(items);\n\n this.toggleInput(member)\n }\n\n // HANDLE EDITING OF ASSIGN DATE INPUT - WILL NOT SET PROPS\n handleEditAssignDate(memberAssignDate, value) {\n this.setState({ [memberAssignDate]: value })\n }\n\n // HANDLE SAVING OF ASSIGN DATE INPUT\n handleSaveAssignDate(index, memberAssignDate, member) {\n let memberId;\n\n const value = this.state[memberAssignDate];\n const items = this.props.items.map((item, i) => {\n if (i === index) {\n memberId = item.MemberID\n return { ...item, AssignDate: value, isPendingAdd: true };\n } else {\n return item;\n }\n });\n\n this.props.onMemberChange(items);\n\n this.toggleInput(member, memberId + \"tempAssignDateValue\")\n }\n\n // HANDLE EDITING OF ASSIGN DATE INPUT - WILL NOT SET PROPS\n handleEditRemoveDate(memberRemoveDate, value) {\n this.setState({ [memberRemoveDate]: value })\n }\n\n // HANDLE SAVING OF ASSIGN DATE INPUT\n handleSaveRemoveDate(index, memberRemoveDate, member) {\n let memberId;\n\n const value = memberRemoveDate === \"Now\" ? moment() : this.state[memberRemoveDate];\n const items = this.props.items.map((item, i) => {\n if (i === index) {\n memberId = item.MemberID\n return { ...item, RemoveDate: value, isPendingAdd: true };\n } else {\n return item;\n }\n });\n\n this.props.onMemberChange(items);\n\n this.toggleInput(member, memberId + \"tempRemoveDateValue\")\n }\n\n // SHOW INPUT OR NOT\n toggleInput(value, tempValue, e) {\n var stateName = value;\n\n this.setState(prevState => ({\n [stateName]: !prevState[stateName], \n }), () => {\n //Delete the temp value from state\n if(typeof tempValue === 'string') { \n this.setState({\n [tempValue]: undefined\n })\n }\n });\n }\n\n // FILTER TO DISPLAY ROLE NAMES BASED ON ROLE IDS\n getCommitteeRoleName(roleID) {\n var result = 'Member';\n this.props.dropdownDataRoles.forEach(function (element) {\n if (roleID === element.value) {\n result = element.label\n }\n })\n return result;\n }\n\n render() {\n const memberRoleEditStyle = {\n gridTemplateColumns: '1fr 15px 15px',\n gridGap: '5px',\n backgroundColor: '#f3f5f5',\n };\n const { dropdownDataRoles, name, dropdownDataMembers, items } = this.props;\n const { selectedMember } = this.state;\n\n return (\n <DragDropContext onDragEnd={this.onDragEnd}>\n <Droppable droppableId=\"memberDroppable\">\n {(provided, snapshot) => (\n <table\n className=\"dnd-grid-table members-grid\"\n ref={provided.innerRef}\n style={getListStyle(snapshot.isDraggingOver)}\n >\n <thead className=\"dnd-grid-header\" style={getListStyle(snapshot.isDraggingOver)}>\n <tr>\n <th scope=\"col\" id={name + '-grabber-column'}></th>\n <th scope=\"col\" id={name + '-display-column'}>Display #</th>\n <th scope=\"col\" id={name + '-membername-column'}>Member Name</th>\n <th scope=\"col\" id={name + '-role-column'}>{this.props.isSubcommittee ? \"Subcommittee Role\" : \"Committee Role\"}</th>\n <th scope=\"col\" id={name + '-party-column'}>Party</th>\n <th scope=\"col\" id={name + '-seniority-column'}>Seniority</th>\n <th scope=\"col\" id={name + '-voting-sequence-column'} className=\"voting-sequence-header\" onClick={this.props.sortByVotingSequence}>Voting Sequence</th>\n <th scope=\"col\" id={name + '-date-column'}>Date Assigned</th>\n <th scope=\"col\" id={name + '-date-column'}>Date Removed</th>\n <th scope=\"col\" id={name + '-actions-column'}>Actions</th>\n </tr>\n </thead>\n <tbody>\n <SelectMenu\n items={items}\n name={name}\n dropdownDataMembers={dropdownDataMembers}\n dropdownDataRoles={dropdownDataRoles}\n handleDropDownChange={this.handleDropDownChange}\n handleRolesDropDownChange={this.handleRolesDropDownChange}\n selectedMember={selectedMember}\n handleSeniorityChange={this.handleSeniorityChange}\n handleDateChange={this.handleDateChange}\n isValidTerminationDate={this.isValidTerminationDate}\n onInsert={this.onInsert}\n />\n {items.map((item, index) => (\n <Draggable key={`${item.MemberID}-${item.DisplaySequence}`} draggableId={`${item.MemberID}-${item.DisplaySequence}`} index={index}>\n {(provided, snapshot) => (\n <tr\n className={item.RemoveDate ? 'pending-delete' : 'nothing'}\n id={name + '-' + item.MemberID}\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style\n )}\n >\n <td><button className=\"button draggable\">Drag and drop</button></td>\n <td>{index + 1}</td>\n <td>{item.MemberDisplayName}</td>\n <td className={this.state[item.MemberID + 'showRoles'] ? 'td-split' : null} style={this.state[item.MemberID + 'showRoles'] ? memberRoleEditStyle : null}>\n {this.state[item.MemberID + 'showRoles'] ?\n <React.Fragment>\n <Fields.Dropdown\n options={dropdownDataRoles}\n id={name + '-dropdownRoles'}\n defaultValue={this.props.dropdownDataRoles.find(role => role.value === item.CommitteeRoleID)}\n onChange={this.handleEditRoles.bind(this, item.MemberID + 'tempRoleValue')} />\n <a\n disabled={!this.state[item.MemberID + 'tempRoleValue']}\n className=\"icon save\"\n onClick={this.handleSaveRoles.bind(this, index, item.MemberID + 'tempRoleValue', item.MemberID + 'showRoles')} ></a>\n <a\n onClick={this.toggleInput.bind(this, item.MemberID + 'showRoles')}\n className=\"icon grey-delete\"></a>\n </React.Fragment>\n :\n <div\n className={!this.state[item.MemberID + 'showRoles'] ? 'hide-input' : null}\n id={item.MemberID + 'showRoles'}\n onClick={this.toggleInput.bind(this, item.MemberID + 'showRoles')}>\n {this.getCommitteeRoleName(item.CommitteeRoleID)}\n </div>\n }\n </td>\n <td>{item.PartyCode}</td>\n <td className={this.state[item.MemberID + 'showSeniority'] ? 'td-split' : null} style={this.state[item.MemberID + 'showSeniority'] ? memberRoleEditStyle : null}>\n {this.state[item.MemberID + 'showSeniority'] ?\n <React.Fragment>\n <input\n className=\"input-small\"\n id={item.MemberID + 'editSeniorityInput'}\n type=\"text\"\n defaultValue={item.Seniority}\n placeholder={item.Seniority}\n onChange={this.handleEditSeniority.bind(this, item.MemberID + 'tempSeniorityValue')} />\n <a\n disabled={!this.state[item.MemberID + 'tempSeniorityValue']}\n className=\"icon save\"\n onClick={this.handleSaveSeniority.bind(this, index, item.MemberID + 'tempSeniorityValue', item.MemberID + 'showSeniority')} ></a>\n <a\n onClick={this.toggleInput.bind(this, item.MemberID + 'showSeniority')}\n className=\"icon grey-delete\"></a>\n </React.Fragment>\n :\n <span\n className={!this.state[item.MemberID + 'showSeniority'] ? 'hide-input' : null}\n id={item.MemberID + 'showSeniority'}\n onClick={this.toggleInput.bind(this, item.MemberID + 'showSeniority')}>\n {!this.state[item.MemberID + 'showSeniority'] && item.Seniority > 0 ? item.Seniority : ''}\n </span>\n }\n </td>\n <td className={this.state[item.MemberID + 'showVotingSequence'] ? 'td-split' : null} style={this.state[item.MemberID + 'showVotingSequence'] ? memberRoleEditStyle : null}>\n {this.state[item.MemberID + 'showVotingSequence'] ?\n <React.Fragment>\n <input\n className=\"input-small\"\n id={item.MemberID + 'editVotingSequenceInput'}\n type=\"text\"\n defaultValue={item.VotingSequence}\n placeholder={item.VotingSequence}\n onChange={this.handleEditVotingSequence.bind(this, item.MemberID + 'tempVotingSequenceValue')} />\n <a\n disabled={!this.state[item.MemberID + 'tempVotingSequenceValue']}\n className=\"icon save\"\n onClick={this.handleSaveVotingSequence.bind(this, index, item.MemberID + 'tempVotingSequenceValue', item.MemberID + 'showVotingSequence')} ></a>\n <a\n onClick={this.toggleInput.bind(this, item.MemberID + 'showVotingSequence')}\n className=\"icon grey-delete\"></a>\n </React.Fragment>\n :\n <span\n className={!this.state[item.MemberID + 'showVotingSequence'] ? 'hide-input' : null}\n id={item.MemberID + 'showVotingSequence'}\n onClick={this.toggleInput.bind(this, item.MemberID + 'showVotingSequence')}>\n {!this.state[item.MemberID + 'showVotingSequence'] ? (item.VotingSequence ? item.VotingSequence : 0) : ''}\n </span>\n }\n </td>\n <td className={this.state[item.MemberID + 'showAssignDate'] ? 'td-split' : null} style={this.state[item.MemberID + 'showAssignDate'] ? memberRoleEditStyle : null}>\n {this.state[item.MemberID + 'showAssignDate'] ?\n <React.Fragment>\n <DatePicker\n id={item.MemberID + 'editAssignDateInput'}\n className=\"datepicker-filter\"\n value={this.state[item.MemberID + 'tempAssignDateValue'] ? moment(this.state[item.MemberID + 'tempAssignDateValue']).format(\"L\") : moment(item.AssignDate).format(\"L\")}\n onChange={this.handleEditAssignDate.bind(this, item.MemberID + 'tempAssignDateValue')} />\n <a\n disabled={!this.state[item.MemberID + 'tempAssignDateValue']}\n className=\"icon save\"\n onClick={!this.state[item.MemberID + 'tempAssignDateValue'] ? this.toggleInput.bind(this, item.MemberID + 'showAssignDate', item.MemberID + 'tempAssignDateValue') : this.handleSaveAssignDate.bind(this, index, item.MemberID + 'tempAssignDateValue', item.MemberID + 'showAssignDate')}\n >\n </a>\n <a\n onClick={this.toggleInput.bind(this, item.MemberID + 'showAssignDate', item.MemberID + 'tempAssignDateValue')}\n className=\"icon grey-delete\"></a>\n </React.Fragment>\n : \n <span\n className={!this.state[item.MemberID + 'showAssignDate'] ? 'hide-input' : null}\n id={item.MemberID + 'showAssignDate'}\n onClick={this.toggleInput.bind(this, item.MemberID + 'showAssignDate')}>\n {!this.state[item.MemberID + 'showAssignDate'] ? (item.AssignDate ? moment(item.AssignDate).format('L') : \"\") : ''}\n </span>\n }\n </td>\n <td className={this.state[item.MemberID + 'showRemoveDate'] ? 'td-split' : null} style={this.state[item.MemberID + 'showRemoveDate'] ? memberRoleEditStyle : null}>\n {this.state[item.MemberID + 'showRemoveDate'] ?\n <React.Fragment>\n <DatePicker\n id={item.MemberID + 'editRemoveDateInput'}\n className=\"datepicker-filter\"\n value={this.state[item.MemberID + 'tempRemoveDateValue'] ? moment(this.state[item.MemberID + 'tempRemoveDateValue']).format(\"L\") : moment(item.RemoveDate).format(\"L\")}\n onChange={this.handleEditRemoveDate.bind(this, item.MemberID + 'tempRemoveDateValue')} \n maxDate={moment()}\n />\n <a\n disabled={!this.state[item.MemberID + 'tempRemoveDateValue']}\n className=\"icon save\"\n onClick={!this.state[item.MemberID + 'tempRemoveDateValue'] ? this.handleSaveRemoveDate.bind(this, index, \"Now\", item.MemberID + 'showRemoveDate') : this.handleSaveRemoveDate.bind(this, index, item.MemberID + 'tempRemoveDateValue', item.MemberID + 'showRemoveDate')}\n >\n </a>\n <a\n onClick={this.toggleInput.bind(this, item.MemberID + 'showRemoveDate', item.MemberID + 'tempRemoveDateValue')}\n className=\"icon grey-delete\"></a>\n </React.Fragment>\n : \n <span\n className={!this.state[item.MemberID + 'showRemoveDate'] ? 'hide-input' : null}\n id={item.MemberID + 'showRemoveDate'}\n onClick={this.toggleInput.bind(this, item.MemberID + 'showRemoveDate')}>\n {!this.state[item.MemberID + 'tempRemoveDateValue'] ? (item.RemoveDate ? moment(item.RemoveDate).format('L') : \"\") : ''}\n </span>\n }\n </td>\n <td>{item.RemoveDate ? <button type=\"button\" onClick={this.onRemove.bind(this, item.MemberID)} className=\"button add\">Delete</button> : \"\"}</td>\n </tr>\n )}\n </Draggable>\n ))}\n\n {provided.placeholder}\n </tbody>\n </table>\n )}\n </Droppable>\n </DragDropContext>\n );\n }\n}\n\n\nfunction SelectMenu(props) {\n\n var dropdown = [];\n\n props.dropdownDataMembers.forEach(function (element) {\n let isDuplicate = false;\n props.items.forEach(function (item) {\n if (item.MemberID === element.MemberID) {\n isDuplicate = true;\n }\n });\n if (!isDuplicate) {\n dropdown.push(element);\n }\n })\n\n return (\n <tr id={props.name + '-insert-row'} className=\"dnd-insert-row\">\n <td></td>\n <td></td>\n <td><Fields.Dropdown className=\"grid-selector-dropdown\" classNamePrefix=\"grid-selector-dropdown\" value={props.selectedMember} options={dropdown} id={props.name + '-dropdownMembers'} onChange={props.handleDropDownChange} /></td>\n <td><Fields.Dropdown className=\"grid-selector-dropdown\" classNamePrefix=\"grid-selector-dropdown\" options={props.dropdownDataRoles} id={props.name + '-dropdownRoles'} onChange={props.handleRolesDropDownChange} /></td>\n <td>{props.selectedMember.PartyCode}</td>\n <td><input id=\"seniorityInput\" type=\"text\" className=\"dnd-field\" value={props.selectedMember.Seniority} onChange={props.handleSeniorityChange} /></td>\n <td><input id=\"votingSequenceInput\" type=\"text\" className=\"dnd-field\" value={props.selectedMember.VotingSequence} onChange={props.handleEditVotingSequence} /></td>\n <td>\n <DatePicker\n id=\"dateAssignedInput\"\n className=\"dnd-field\"\n selected={props.selectedMember.AssignDate}\n onChange={props.handleDateChange}\n popperPlacement=\"top-start\"\n autoComplete=\"off\"\n filterDate={props.isValidTerminationDate}\n placeholderText=\"Date Assigned\"\n\n />\n </td>\n <td></td>\n <td><button type=\"button\" id={props.name + '-insert-button'} className=\"button\" onClick={props.onInsert}>Insert</button></td>\n </tr>\n )\n}\nexport default MembersDraggableComponent;","import React from \"react\";\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport '../../../stylesheets/shared/react-table.css';\nimport moment from 'moment-timezone';\n\n\nclass SubcommitteeManagementGrid extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n error: null,\n selected: {},\n selectedError: null,\n currentDate: new Date(),\n subcommitteeData: [],\n showCreateSuccess: false,\n subcommitteeNameInput: '',\n subcommitteeNumberInput: '',\n calculatedFullCommitteeNumber: ''\n\n };\n this.subcommitteeNameChange = this.subcommitteeNameChange.bind(this);\n this.subcommitteeNumberChange = this.subcommitteeNumberChange.bind(this);\n this.calculateFullCommitteeNumber = this.calculateFullCommitteeNumber.bind(this);\n this.sendSubcommitteeCreateDetails = this.sendSubcommitteeCreateDetails.bind(this);\n\n };\n\n subcommitteeNameChange(e) {\n const { value } = e.target;\n const subcommitteeName = value;\n this.setState({ subcommitteeNameInput: subcommitteeName });\n }\n\n subcommitteeNumberChange(e) {\n let { value } = e.target;\n if (value.length < 4) {\n value = value ? parseInt(value) : '';\n const subcommitteeNumber = value;\n const calculatedFullCommitteeNumber = this.calculateFullCommitteeNumber(subcommitteeNumber);\n this.setState({ subcommitteeNumberInput: subcommitteeNumber, calculatedFullCommitteeNumber });\n }\n }\n\n calculateFullCommitteeNumber(number) {\n if (!number) { return '' }\n let calculatedFullCommitteeNumber = this.props.parentCommitteeNumber;\n calculatedFullCommitteeNumber += String(number).padStart(3, '0');\n return calculatedFullCommitteeNumber;\n }\n\n sendSubcommitteeCreateDetails() {\n if (!Number.isInteger(this.state.subcommitteeNumberInput) || this.state.subcommitteeNumberInput < 1 || this.state.subcommitteeNumberInput > 999) {\n this.setState({ error: 'Subcommittee number must be between 1 and 999' });\n return;\n } else {\n this.setState({ error: null })\n }\n let params = {\n Name: this.state.subcommitteeNameInput,\n CommitteeNumber: this.state.calculatedFullCommitteeNumber,\n }\n this.props.createSubcommittee(params);\n }\n\n render() {\n return (\n <div>\n <ReactTable\n resizable={false}\n data={this.props.subcommitteeData}\n ref={r => this.reactTable = r}\n noDataText={this.props.subcommitteeMessage}\n loading={!this.props.isLoaded}\n columns={[\n {\n Header: \"Subcommittee Name\",\n columns: [\n\n {\n Header: (\n <div className=\"dlas-forms\">\n {!this.state.showCreateSuccess && !this.state.showCreateFailure &&\n <div className=\"committee-grid-header-inputs subcommittee\">\n <div><input id=\"insert-new-committee\" type=\"text\" value={this.state.subcommitteeNameChange} placeholder=\"Type new subcommittee name and subcommittee number, click create\" onChange={this.subcommitteeNameChange} /></div>\n <div>\n <input id=\"insert-new-committee-number\" type=\"number\" min={1} max={999} value={this.state.subcommitteeNumberInput.toString()} placeholder=\"Subcommittee number\" onChange={this.subcommitteeNumberChange} />\n {this.state.calculatedFullCommitteeNumber && <span className=\"subcommittee-number\">({this.state.calculatedFullCommitteeNumber})</span>}\n {this.state.error && <div className=\"input-feedback\">{this.state.error}</div>}\n </div>\n </div>\n }\n {this.props.showCreateSuccess &&\n <span className=\"insert-message\">Subcommittee was created successfully!</span>\n }\n {this.props.showCreateFailure &&\n <span className=\"insert-message fail\">Subcommittee creation failed</span>\n }\n </div>\n ),\n headerClassName: \"header-insert\",\n accessor: \"Name\",\n sortable: false,\n filterAll: true,\n Cell: row => {\n return (\n <span id={'cm-namecell-' + row.index}>{row.original.Name}</span>\n )\n }\n }\n ]\n },\n {\n Header: \"Service Start Date\",\n columns: [\n {\n headerClassName: \"header-insert\",\n accessor: \"PendingChange\",\n sortable: false,\n filterAll: true,\n width: 150,\n Cell: row => {\n if (row.original.ServiceBeginDate === '0001-01-01T00:00:00') {\n return <span className=\"txt-greyed\" id={'cm-pending-' + row.index}>Pending</span>\n }\n else {\n return <span id={'cm-pending-' + row.index}>{row.original.ServiceBeginDate ? moment(row.original.ServiceBeginDate).format('L') : ''}</span>\n }\n\n }\n }\n ]\n },\n {\n Header: \"Actions\",\n headerClassName: \"submit-action\",\n columns: [\n\n {\n Header: (<span><button type=\"button\" id=\"submit-new-committee\" disabled={!this.state.subcommitteeNameInput || !this.state.subcommitteeNumberInput} onClick={this.sendSubcommitteeCreateDetails} className=\"button\">Create</button></span>),\n headerClassName: \"header-action\",\n accessor: \"action\",\n sortable: false,\n className: \"action-column\",\n width: 50,\n Cell: row => {\n return (\n <Link id={'cm-edit-' + row.index} to={`/committee-management/edit-subcommittee/${this.props.parentCommitteeID}/${row.original.CommitteeID}/`} className=\"button edit\">Edit</Link>\n )\n }\n },\n {\n Header: \"\",\n headerClassName: \"flag-header\",\n accessor: \"PendingChange\",\n width: 40,\n Cell: row => {\n if (row.original.PendingChange) {\n return <span id={'cm-flag-' + row.index} className=\"button flag\">Flag</span>\n } else {\n return <span></span>\n }\n }\n }\n ]\n },\n ]}\n defaultSorted={[\n {\n id: \"Name\",\n desc: false\n }\n ]}\n showPagination={true}\n defaultPageSize={10}\n className=\"subcommittee-table -striped -highlight\"\n />\n </div>\n );\n }\n}\n\n\nexport default SubcommitteeManagementGrid;","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst personnelListRequest = 'PERSONNEL_LIST_REQUEST';\nconst personnelListSuccess = 'PERSONNEL_LIST_SUCCESS';\nconst personnelListFailure = 'PERSONNEL_LIST_FAILURE';\n\nconst roleTypesRequest = 'ROLE_TYPES_REQUEST';\nconst roleTypesSuccess = 'ROLE_TYPES_SUCCESS';\nconst roleTypesFailure = 'ROLE_TYPES_FAILURE';\n\nconst personnelReferencesRequest = 'PERSONNEL_REFERENCES_REQUEST';\nconst personnelReferencesSuccess = 'PERSONNEL_REFERENCES_SUCCESS';\nconst personnelReferencesFailure = 'PERSONNEL_REFERENCES_FAILURE';\n\nconst personnelSaveRequest = 'PERSONNEL_SAVE_REQUEST';\nconst personnelSaveSuccess = 'PERSONNEL_SAVE_SUCCESS';\nconst personnelSaveFailure = 'PERSONNEL_SAVE_FAILURE';\n\n\nconst initialState = {\n personnelStaffList: [],\n personnelClerkList: [],\n personnelOtherList: [],\n personnelStaffReferences: [],\n personnelClerkReferences: [],\n personnelErrorSave: '',\n receivePersonnelSave: '',\n personnelStaffSave: '',\n personnelClerkSave: '',\n roleTypes: []\n};\n\nexport const personnelActionCreators = {\n // GET PERSONNEL REFERENCES FOR COMM MGMT DROPDOWNS\n requestPersonnelReferences: () => ({\n type: personnelReferencesRequest,\n personnelReferences: [],\n isFetching: true\n }),\n\n receivePersonnelReferences: (clerkReferences, staffReferences, message) => ({\n type: personnelReferencesSuccess,\n isFetching: false,\n personnelStaffReferences: staffReferences,\n personnelClerkReferences: clerkReferences,\n message\n }),\n\n personnelReferencesError: (message) => ({\n type: personnelReferencesFailure,\n isFetching: false,\n personnelStaffReferences: [],\n personnelClerkReferences: [],\n message\n }),\n\n getPersonnelReferences: (params) => {\n return dispatch => {\n dispatch(personnelActionCreators.requestPersonnelReferences());\n\n return publicRequest((API_URL || process.env.REACT_APP_PERSONNEL_API_URL) + '/Personnel/api/GetReferencesAsync?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(personnelActionCreators.personnelReferencesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n let personnelReferences = result[1];\n var personnelClerkReferences = [];\n var personnelStaffReferences = [];\n\n // STAFF = 2\n // CLERK = 1\n // FILTER OUT DUPLICATES----\n for (var i = 0; i < personnelReferences.Personnels.length; i++) {\n var personnelObj = { ...personnelReferences.Personnels[i], value: personnelReferences.Personnels[i].StaffID, label: personnelReferences.Personnels[i].FullName }\n\n if (personnelReferences.Personnels[i].StaffRoleTypeID === 2) {\n var isDuplicate = false;\n personnelStaffReferences.forEach(element => {\n if (element.IdentityID === personnelObj.IdentityID) {\n isDuplicate = true;\n }\n });\n if (!isDuplicate) {\n personnelStaffReferences.push(personnelObj)\n }\n } else {\n var isOtherDuplicate = false;\n personnelClerkReferences.forEach(element => {\n if (element.IdentityID === personnelObj.IdentityID) {\n isOtherDuplicate = true;\n }\n })\n if (!isOtherDuplicate) {\n personnelClerkReferences.push(personnelObj);\n }\n }\n }\n dispatch(personnelActionCreators.receivePersonnelReferences(personnelClerkReferences, personnelStaffReferences))\n } else if (result[0] === NO_CONTENT) {\n dispatch(personnelActionCreators.personnelReferencesError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n\n // GET PERSONNEL STAFF AND CLERKS FOR COMM MGMT FORM GRID\n requestPersonnelList: () => ({\n type: personnelListRequest,\n personnelList: [],\n isFetching: true\n }),\n\n receivePersonnelList: (clerkList, staffList, otherList, message) => ({\n type: personnelListSuccess,\n isFetching: false,\n personnelStaffList: staffList,\n personnelClerkList: clerkList,\n personnelOtherList: otherList,\n message\n }),\n\n personnelListError: (message) => ({\n type: personnelListFailure,\n isFetching: false,\n personnelList: [],\n message\n }),\n\n getPersonnelList: (params, isPublic) => {\n\n return dispatch => {\n dispatch(personnelActionCreators.requestPersonnelList());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (isPublic) {\n request = publicRequest((API_URL || process.env.REACT_APP_PERSONNEL_API_URL) + '/Personnel/api/getPersonnelListAsync?', 'GET', headers, '', params);\n } else {\n request = partnerRequest((API_URL || process.env.REACT_APP_PERSONNEL_API_URL) + '/Personnel/api/getPartnerPersonnelListAsync?', 'GET', headers, '', params);\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(personnelActionCreators.personnelListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n let personnelList = result[1]\n const personnelClerkList = personnelList.Personnels.filter(personnel => personnel.StaffRoleTypeID === 1)\n const personnelStaffList = personnelList.Personnels.filter(personnel => personnel.StaffRoleTypeID === 2)\n const personnelOtherList = personnelList.Personnels.filter(personnel => personnel.StaffRoleTypeID !== 1 && personnel.StaffRoleTypeID !== 2)\n dispatch(personnelActionCreators.receivePersonnelList(personnelClerkList, personnelStaffList, personnelOtherList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(personnelActionCreators.receivePersonnelList([], []))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n // GET PERSONNEL STAFF AND CLERKS FOR COMM MGMT FORM GRID\n requestRoleTypes: () => ({\n type: roleTypesRequest,\n roleTypes: [],\n isFetching: true\n }),\n\n receiveRoleTypes: (roleTypes, message) => ({\n type: roleTypesSuccess,\n isFetching: false,\n roleTypes: roleTypes,\n message\n }),\n\n roleTypesError: (message) => ({\n type: roleTypesFailure,\n isFetching: false,\n roleTypes: [],\n message\n }),\n\n getRoleTypes: (params) => {\n\n return dispatch => {\n dispatch(personnelActionCreators.requestRoleTypes());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_PERSONNEL_API_URL) + '/Personnel/api/GetStaffRoleTypesAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(personnelActionCreators.roleTypesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(personnelActionCreators.receiveRoleTypes(result[1].StaffRoleTypes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(personnelActionCreators.receiveRoleTypes([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n requestPersonnelSave: () => ({\n type: personnelSaveRequest,\n isFetching: true\n }),\n\n receivePersonnelSave: (personnelClerkSave, personnelStaffSave) => ({\n type: personnelSaveSuccess,\n isFetching: false,\n personnelClerkSave: personnelClerkSave,\n personnelStaffSave: personnelStaffSave\n }),\n\n personnelErrorSave: (message) => ({\n type: personnelSaveFailure,\n isFetching: false,\n personnelErrorSave: message\n }),\n\n savePersonnel: (body) => {\n\n return dispatch => {\n dispatch(personnelActionCreators.requestPersonnelSave());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_PERSONNEL_API_URL) + '/Personnel/api/SavePersonnelAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(personnelActionCreators.personnelErrorSave(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n const personnelList = result[1]\n const personnelClerkList = personnelList.filter(personnel => personnel.StaffRoleTypeID === 1)\n const personnelStaffList = personnelList.filter(personnel => personnel.StaffRoleTypeID === 2)\n dispatch(personnelActionCreators.receivePersonnelSave(personnelClerkList, personnelStaffList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(personnelActionCreators.receivePersonnelSave([], []))\n throw 'No personnel found'\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n }\n};\n\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n case personnelReferencesRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case personnelReferencesSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n personnelStaffReferences: action.personnelStaffReferences,\n personnelClerkReferences: action.personnelClerkReferences,\n message: ''\n })\n case personnelReferencesFailure:\n return Object.assign({}, state, {\n isFetching: false,\n message: action.message\n })\n case personnelListRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case personnelListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n personnelStaffList: action.personnelStaffList,\n personnelClerkList: action.personnelClerkList,\n personnelOtherList: action.personnelOtherList,\n message: ''\n })\n case personnelListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n message: action.message\n })\n case roleTypesRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case roleTypesSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n roleTypes: action.roleTypes,\n message: ''\n })\n case roleTypesFailure:\n return Object.assign({}, state, {\n isFetching: false,\n message: action.message\n }) \n case personnelSaveRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case personnelSaveSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n personnelStaffSave: action.personnelStaffSave,\n personnelClerkSave: action.personnelClerkSave,\n personnelErrorSave: ''\n })\n case personnelSaveFailure:\n return Object.assign({}, state, {\n isFetching: false,\n personnelErrorSave: action.personnelErrorSave\n })\n default:\n return state\n }\n};","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { personnelActionCreators } from '../../../stores/lis-personnel-store';\n\nfunction SubCommitteesList(props) {\n const listCommittees = props.committees.map(committee => {\n let key = Math.random().toString();\n return (\n <div key={key} className=\"inner-grid two\" >\n <div>\n <Link to=\"/committee-details\">{committee.Name}</Link>\n </div>\n <div>\n {committee.PendingChange && <p>Not Published</p>}\n </div>\n </div>\n )\n })\n return (\n <React.Fragment>\n {listCommittees}\n </React.Fragment>\n )\n}\n\nfunction MemberListComponent(props) {\n let key = '';\n const names = props.members.map(member => {\n //If the member is to be removed on the next save then don't show them in the preview\n if (!member.EffectiveEndDate) {\n key = Math.random().toString();\n //Add the role label to the display, unless the role is 'Member' to keep things less redundant\n let role = props.roles.find(role => role.value === member.CommitteeRoleID)\n if (role && role.label !== 'Member') {\n return (\n <div key={key} className=\"inner-grid two\">\n <div>\n <p><b>{role.label}</b>: {member.MemberDisplayName} </p>\n </div>\n <div>\n <p>{member.Seniority}</p>\n </div>\n </div>\n )\n } else {\n return (\n <div key={key} className=\"inner-grid two\">\n <div>\n <p>{member.MemberDisplayName}</p>\n </div>\n <div>\n <p>{member.Seniority}</p>\n </div>\n </div>\n )\n }\n }\n });\n return (\n <React.Fragment>\n {names}\n </React.Fragment>\n );\n}\n\nfunction PersonnelListComponent(props) {\n let key = '';\n //Creates the list of names\n const names = props.personnel.map(personnel => {\n key = Math.random().toString();\n return (\n <div key={key} className=\"inner-grid two\">\n <div>\n <p>{personnel.FullName}</p>\n </div>\n <div>\n <p>{personnel.PhoneNumber}</p>\n </div>\n </div>)\n });\n return (\n <React.Fragment>\n {names}\n </React.Fragment>\n );\n}\n\nclass CommitteeDetailsComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n roles: [],\n };\n }\n\n render() {\n const { committeeData, clerkList, staffList, memberList, subcommitteesList } = this.props;\n\n return (\n <div className=\"partner-details\">\n <div>\n <h3>{committeeData.Name}</h3>\n </div>\n <div className=\"details-section inner-grid three\">\n <div className=\"details-category\">\n <h4>COMMITTEE INFORMATION</h4>\n </div>\n <div className=\"span-two\">\n <div className=\"inner-grid two\">\n <div>\n <p>Abbreviation:</p>\n </div>\n <div>\n <p>{committeeData.Abbreviation}</p>\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <p>Committee Number:</p>\n </div>\n <div>\n <p>{committeeData.CommitteeNumber}</p>\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <p>Chamber:</p>\n </div>\n <div>\n <p>{(committeeData.ChamberCode === 'S') ? 'Senate' : 'House'}</p>\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <p>Description:</p>\n </div>\n <div>\n <p>{committeeData.Description}</p>\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <p>Meeting Notes:</p>\n </div>\n <div>\n <p>{committeeData.MeetingNote}</p>\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <p>Twitter Handle:</p>\n </div>\n <div>\n <p>{committeeData.TwitterHandle}</p>\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <p>Twitter Email:</p>\n </div>\n <div>\n <p>{committeeData.TwitterEmail}</p>\n </div>\n </div>\n </div>\n </div>\n <div className=\"details-section inner-grid three\">\n <div className=\"details-category\">\n <h4>CLERK INFORMATION</h4>\n </div>\n {clerkList === undefined || clerkList.length === 0 ? (\n <div className=\"span-two\"><p>N/A</p></div>\n ) : (\n <div className=\"span-two\"><PersonnelListComponent personnel={clerkList} /></div>\n )}\n </div>\n <div className=\"details-section inner-grid three\">\n <div className=\"details-category\">\n <h4>STAFF INFORMATION</h4>\n </div>\n {staffList === undefined || staffList.length === 0 ? (\n <div className=\"span-two\"><p>N/A</p></div>\n ) : (\n <div className=\"span-two\"><PersonnelListComponent personnel={staffList} /></div>\n )}\n </div>\n <div className=\"details-section inner-grid three\">\n <div className=\"details-category\">\n <h4>Member Information</h4>\n </div>\n {memberList === undefined || memberList.length === 0 ? (\n <div className=\"span-two\"><p>{this.props.members.membersByCommitteeError}</p></div>\n ) : (\n <div className=\"span-two\"><MemberListComponent members={memberList} roles={this.props.memberRoles} /></div>\n )}\n </div>\n {subcommitteesList !== undefined && subcommitteesList.length > 0 &&\n <div className=\"details-section inner-grid three\">\n <div>\n <h4>Subcommittees</h4>\n </div>\n {subcommitteesList === undefined || subcommitteesList.length === 0 ? (\n <div className=\"span-two\"><p>{this.props.committee.partnerCommitteeListError}</p></div>\n ) : (\n <div className=\"span-two\"><SubCommitteesList committees={subcommitteesList} /></div>\n )}\n </div>\n }\n </div>\n )\n }\n}\n\nconst PartnerCommitteeDetails = connect(\n (state) => {\n const { committee, members, personnel } = state;\n return {\n committee,\n members,\n personnel\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, memberActionCreators, personnelActionCreators), dispatch)\n }\n }\n)(CommitteeDetailsComponent)\n\nexport default PartnerCommitteeDetails;\n","import React from 'react';\nimport { Prompt } from 'react-router';\nimport ReactToPrint from 'react-to-print';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport DatePicker from 'react-datepicker';\nimport PersonnelDraggableComponent from './lis-committee-personnel-dnd';\nimport MembersDraggableComponent from './lis-committee-members-dnd';\nimport SubcommitteeManagementGrid from './lis-subcommittee-grid';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { personnelActionCreators } from '../../../stores/lis-personnel-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport CommitteeDetailsComponent from './lis-partner-committee-details';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport * as moment from 'moment-timezone';\n\nclass NewCommitteeFormComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n infoFieldsetIsActive: true, // SET FIELDSET SECTIONS TO BE VISIBLE ON LOAD (OR NOT)\n clerkFieldsetIsActive: true,\n staffFieldsetIsActive: true,\n membershipFieldsetIsActive: true,\n subcommFieldsetIsActive: true,\n isSaving: false,\n selectedCommittee: {},\n members: [],\n clerks: [],\n staff: [],\n personnelReferences: [],\n committeeMemberRoles: [],\n committeeMemberNames: [],\n subcommitteeIsLoaded: false,\n subcommitteeData: [],\n showPreview: false,\n ascending: false,\n isFormDirty: false\n };\n this.createSubcommittee = this.createSubcommittee.bind(this);\n this.togglePreview = this.togglePreview.bind(this);\n this.getSubcommittees = this.getSubcommittees.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleMemberChange = this.handleMemberChange.bind(this);\n this.handleClerkChange = this.handleClerkChange.bind(this);\n this.handleStaffChange = this.handleStaffChange.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n this.sortByVotingSequence = this.sortByVotingSequence.bind(this);\n this.handleClose = this.handleClose.bind(this);\n }\n\n togglePreview() {\n this.setState(state => ({\n showPreview: !state.showPreview\n }));\n }\n\n // TOGGLE FIELDSET VISIBILITY\n toggleFieldsetCollapse(isActive) {\n this.setState(state => ({\n [isActive]: !state[isActive]\n }));\n };\n\n // CALLBACK FOR CREATING NEW SUBCOMMITTEE\n createSubcommittee(params) {\n params = {\n ...params,\n ChamberCode: this.state.selectedCommittee.ChamberCode,\n ParentCommitteeID: this.props.match.params.committeeid,\n IsPublic: 0\n };\n this.props.actions.createNewCommittee(params).then(() => {\n this.setState({\n showCreateSuccess: true\n });\n setTimeout(function () {\n this.setState({ showCreateSuccess: false });\n }.bind(this), 5000);\n this.getSubcommittees();\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({ showCreateFailure: true });\n setTimeout(function () {\n this.setState({ showCreateFailure: false });\n }.bind(this), 5000);\n })\n }\n\n getSubcommittees() {\n if (!this.props.match.params.subcommitteeid) {\n var params = 'parentCommitteeID=' + this.props.match.params.committeeid + '&isPublic=false';\n this.props.actions.getPartnerCommitteeList(params).then(() => {\n this.setState({\n subcommitteeData: this.props.committee.partnerCommitteeList,\n subcommitteeMessage: this.props.committee.partnerCommitteeListError,\n subcommitteeIsLoaded: true\n })\n });\n }\n\n }\n\n handleMemberChange(members) {\n this.setState({\n members: members,\n isFormDirty: true\n })\n }\n\n handleClerkChange(clerks) {\n this.setState({\n clerks: clerks,\n isFormDirty: true\n })\n }\n\n handleStaffChange(staff) {\n this.setState({\n staff: staff,\n isFormDirty: true\n })\n }\n\n handleDateChange(val, serviceEndDate) {\n let selectedCommittee = { ...this.state.selectedCommittee };\n if (serviceEndDate) {\n selectedCommittee.ServiceEndDate = moment(val);\n } else {\n selectedCommittee.ServiceBeginDate = moment(val);\n }\n this.setState({\n selectedCommittee: selectedCommittee,\n isFormDirty: true\n });\n }\n\n handleChange(key, value) {\n if (this.state.selectedCommittee[key] !== undefined || key === 'AgendaURL') {\n let selectedCommittee = { ...this.state.selectedCommittee };\n selectedCommittee[key] = value;\n this.setState({\n selectedCommittee: selectedCommittee,\n isFormDirty: true\n });\n }\n }\n\n handleSave(publish) {\n //Turn off save/publish button\n this.setState({ isSaving: true });\n //Check to see that the committee has a name.\n if (!this.state.selectedCommittee.Name) {\n this.setState({\n committeeNameMissing: true\n });\n return;\n }\n let members = [...this.state.members];\n //Combine the personnel list back together so we do not have to make an extra request\n let personnelList = [...this.state.clerks, ...this.state.staff];\n let selectedCommittee = { ...this.state.selectedCommittee };\n personnelList.forEach(personnel => personnel.AffiliationID = selectedCommittee.CommitteeID);\n selectedCommittee.IsPublic = publish;\n if (publish) {\n members.forEach(member => { member.IsPublic = true })\n personnelList.forEach(personnel => { personnel.IsPublic = true })\n }\n const memberObject = { MemberList: members }\n const personnelObject = { Personnels: personnelList };\n //Save committee details\n const saveCommittee = this.props.actions.saveCommittee(selectedCommittee)\n .then(() => {\n if (this.props.committee.saveCommitteeError) {\n return Promise.reject(this.props.committee.saveCommitteeError);\n } else {\n const commData = this.props.committee.savedCommittee\n this.setState({\n selectedCommittee: {\n ...commData,\n TwitterHandle: commData.TwitterHandle ? commData.TwitterHandle : '',\n TwitterEmail: commData.TwitterEmail ? commData.TwitterEmail : '',\n Description: commData.Description ? commData.Description : '',\n MeetingNote: commData.MeetingNote ? commData.MeetingNote : '',\n Abbreviation: commData.Abbreviation ? commData.Abbreviation : '',\n ServiceEndDate: commData.ServiceEndDate ? commData.ServiceEndDate : null\n }\n });\n return Promise.resolve();\n }\n });\n //Save personnel to committee\n const savePersonnel = personnelObject.Personnels.length > 0 ? this.props.actions.savePersonnel(personnelObject)\n .then(() => {\n if (this.props.personnel.personnelErrorSave) {\n return Promise.reject(this.props.personnel.personnelErrorSave);\n } else {\n this.setState({\n clerks: this.props.personnel.personnelClerkSave,\n staff: this.props.personnel.personnelStaffSave\n });\n return Promise.resolve();\n }\n })\n : Promise.resolve(true);\n //Save members to committee\n const saveMember = memberObject.MemberList.length > 0 ? this.props.actions.saveMemberCommittee(memberObject)\n .then(() => {\n if (this.props.members.memberCommitteeSaveError) {\n return Promise.reject(this.props.members.memberCommitteeSaveError);\n } else {\n this.setState({\n members: this.props.members.memberCommitteeSave\n });\n return Promise.resolve();\n }\n })\n : Promise.resolve(true);\n\n //Save the data then grab the new list of personnel and members and update the view. This is done because if the user wants to save again they need updated mod dates\n Promise.all([\n saveMember,\n savePersonnel,\n saveCommittee\n ])\n //Will only run if the 3 promises above resolve\n .then(() => {\n this.props.actions.makeToast([{ message: \"Committee Saved\", type: \"success\" }])\n this.setState({ isSaving: false, saved: true, isFormDirty: false }, () => {\n if (publish === true) {\n this.props.history.push(\"/committee-management\");\n }\n });\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n //Part or all of the save has failed so send a mean red bar to the user\n this.props.actions.makeToast([{ message: \"Committee Save Failed\", type: \"failure\" }])\n this.setState({ isSaving: false });\n });\n }\n\n sortByVotingSequence() {\n let members = [...this.state.members];\n if (this.state.ascending) {\n members.sort((a, b) => b.VotingSequence - a.VotingSequence);\n } else {\n members.sort((a, b) => a.VotingSequence - b.VotingSequence);\n }\n\n this.setState({\n members: members,\n ascending: !this.state.ascending\n })\n }\n\n handleClose() {\n this.props.history.goBack();\n }\n\n componentDidMount() {\n const committeeId = this.props.match.params.subcommitteeid ? this.props.match.params.subcommitteeid : this.props.match.params.committeeid\n const committeeParams = committeeId + '?isPublic=0';\n this.props.actions.getPartnerCommitteeById(committeeParams)\n .then(() => {\n // Checking to see if keys exist and setting initial value if not\n // otherwise react throws an error in the form fields\n const commData = this.props.committee.partnerCommitteeByIdData\n this.setState({\n selectedCommittee: {\n ...this.props.committee.partnerCommitteeByIdData,\n TwitterHandle: commData.TwitterHandle ? commData.TwitterHandle : '',\n TwitterEmail: commData.TwitterEmail ? commData.TwitterEmail : '',\n Description: commData.Description ? commData.Description : '',\n MeetingNote: commData.MeetingNote ? commData.MeetingNote : '',\n Abbreviation: commData.Abbreviation ? commData.Abbreviation : '',\n ServiceEndDate: commData.ServiceEndDate ? commData.ServiceEndDate : null\n },\n committeeLoaded: true\n })\n return commData\n })\n .then((commData) => {\n // GET MEMBER ROLES FOR THE MEMBERSHIP DROPDOWN\n this.props.actions.getCommitteeMemberRoles().then(() => {\n this.setState({\n committeeMemberRoles: commData.ChamberCode === 'H' ? this.props.members.committeeHouseRoles : this.props.members.committeeSenateRoles\n })\n })\n const chamberCode = 'chamberCode=' + commData.ChamberCode;\n\n //Get members list and set it to the committeeMemberNames key\n const organizeMembers = members => {\n if (members) {\n members.forEach(member => {\n member.label = member.MemberDisplayName;\n member.value = member.MemberID;\n });\n this.setState({\n committeeMemberNames: members\n })\n }\n }\n\n //Get the session list so the default session ID can be found\n this.props.actions.getSessionList()\n .then(() => {\n let defaultSession = null;\n this.props.session.sessionList.forEach(session => {\n if (session.IsDefault) {\n defaultSession = '&sessionID=' + session.SessionID;\n }\n });\n //Get list of current members of committee\n this.props.actions.getMembersByCommittee(`isPublic=false&CommitteeID=${committeeId}${defaultSession}`, true)\n .then(() => {\n // Set the DisplaySequence to the correct order. It should be linear.\n let members = [...this.props.members.membersByCommittee];\n members.forEach((member, index) => member.DisplaySequence = index + 1)\n this.setState({\n members: members,\n membersLoaded: true\n });\n });\n if (this.props.match.params.subcommitteeid) {\n //Since this is a subcommittee get the name of the parent committee and put it in the form\n this.props.actions.getPartnerCommitteeById(`${this.props.match.params.committeeid}?IsPublic=0`).then(() => {\n const parentCommData = this.props.committee.partnerCommitteeByIdData;\n this.setState({\n parentCommitteeName: parentCommData.Name\n });\n });\n //Also only include the list of members in the parent committee for the member list\n this.props.actions.getMembersByCommittee(`isPublic=false&CommitteeID=${this.props.match.params.committeeid}${defaultSession}`, true)\n .then(() => organizeMembers(this.props.members.membersByCommittee));\n } else {\n //If this is not a subcommittee then get the full member list\n this.props.actions.getMemberList(chamberCode + defaultSession)\n .then(() => organizeMembers(this.props.members.memberList));\n }\n })\n\n\n // Get personnel list for staff and clerk dropdowns\n this.props.actions.getPersonnelReferences('')\n .then(() => {\n const filteredStaffAndClerkReferences = this.props.personnel.personnelStaffReferences.concat(this.props.personnel.personnelClerkReferences).filter(personnel => personnel.OrganizationName && personnel.OrganizationName.toLowerCase() === (chamberCode === \"H\" ? \"house\" : \"senate\"))\n this.setState({\n personnelReferences: filteredStaffAndClerkReferences\n });\n });\n\n\n });\n\n // GET STAFF AND CLERK PERSONNEL BY COMMITTEE ID\n const personnelParams = 'affiliationID=' + committeeId + '&isPublic=false';\n this.props.actions.getPersonnelList(personnelParams)\n .then(() => {\n // Set the Sequence to the correct order. It should be linear.\n let clerks = [];\n let staff = [];\n this.props.personnel.personnelClerkList.forEach((clerk, index) => clerks.push({ ...clerk, Sequence: index + 1 }));\n this.props.personnel.personnelStaffList.forEach((staf, index) => staff.push({ ...staf, Sequence: index + 1 }));\n this.setState({\n clerks: clerks,\n staff: staff,\n personnelLoaded: true\n })\n });\n this.getSubcommittees();\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const {\n Abbreviation,\n ChamberCode,\n CommitteeID,\n CommitteeNumber,\n Description,\n ServiceBeginDate,\n ServiceEndDate,\n MeetingNote,\n Name,\n TwitterHandle,\n TwitterEmail,\n CommitteeFiles,\n AgendaURL\n } = this.state.selectedCommittee;\n\n const { isSaving, committeeLoaded, personnelLoaded, membersLoaded, saved, isFormDirty } = this.state;\n\n let filterStartDate = (date) => {\n let result = true; \n if (moment(ServiceEndDate).isBefore(date, \"days\")) {\n result = false;\n }\n return result;\n }\n\n let filterEndDate = (date) => {\n let result = true;\n if (date >= new Date()) {\n result = false;\n }\n if (moment(ServiceBeginDate).isAfter(date, \"days\")) {\n result = false;\n }\n return result;\n }\n\n if (!committeeLoaded || !personnelLoaded || !membersLoaded) {\n return (<div>\n <div className=\"center-spinner spinner\"></div>\n </div>)\n }\n if (this.state.showPreview) {\n return (\n <div>\n <div className=\"flex-row\">\n <h2>Committee Management Review</h2>\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print\"> Print</a>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <div ref={el => (this.componentRef = el)}>\n <CommitteeDetailsComponent\n committeeData={this.state.selectedCommittee}\n clerkList={this.state.clerks}\n staffList={this.state.staff}\n memberList={this.state.members}\n memberRoles={this.state.committeeMemberRoles}\n subcommitteesList={this.state.subcommitteeData}\n />\n </div>\n <div className=\"button-bar\">\n <div></div>\n <div className=\"align-right\">\n <button onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n <button\n onClick={() => this.handleSave(true)}\n disabled={isSaving || !saved}\n className=\"button\">Publish\n </button>\n </div>\n </div>\n </div>)\n } else {\n return (\n <React.Fragment>\n <div>\n <Prompt\n when={isFormDirty === true}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <h1>{this.props.match.params.subcommitteeid ? 'Edit Subcommittee' : 'Edit Committee'} </h1>\n <div className=\"user-forms\" style={{ paddingBottom: this.props.match.params.subcommitteeid ? \"150px\" : \"75px\" }}>\n <div className=\"dlas-forms\">\n <form>\n <fieldset className={this.state.infoFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'infoFieldsetIsActive')}>{!this.props.match.params.subcommitteeid ? 'Committee Information' : 'Subcommittee Information'}</legend>\n <div className={!this.props.match.params.subcommitteeid ? 'multi-row sixth-40-1 no-margin' : 'multi-row sixth-20-1 no-margin'}>\n {this.props.match.params.subcommitteeid &&\n <div>\n <Fields.TextInput\n id=\"Name\"\n label=\"SubCommittee Name\"\n type=\"text\"\n placeholder=\"SubCommittee Name\"\n value={Name}\n onChange={(val) => this.handleChange(\"Name\", val.target.value)}\n onBlur={(val) => {\n if (!val.target.value) {\n this.setState({ committeeNameMissing: true });\n } else {\n this.setState({ committeeNameMissing: false });\n }\n }}\n />\n {this.state.committeeNameMissing && <div className=\"input-feedback\">Committee Name is required</div>}\n </div>\n }\n <div>\n <Fields.TextInput\n id=\"Name\"\n label=\"Committee Name\"\n type=\"text\"\n placeholder=\"Committee Name\"\n value={this.props.match.params.subcommitteeid ? this.state.parentCommitteeName : Name}\n onChange={(val) => this.handleChange(\"Name\", val.target.value)}\n disabled={this.props.match.params.subcommitteeid}\n onBlur={(val) => {\n if (!val.target.value) {\n this.setState({ committeeNameMissing: true });\n } else {\n this.setState({ committeeNameMissing: false });\n }\n }}\n />\n {this.state.committeeNameMissing && !this.props.match.params.subcommitteeid && <div className=\"input-feedback\">Committee Name is required</div>}\n </div>\n\n <div>\n <Fields.TextInput\n id=\"Abbreviation\"\n label=\"Abbreviation\"\n type=\"text\"\n placeholder=\"ABRV\"\n value={Abbreviation}\n onChange={(val) => this.handleChange(\"Abbreviation\", val.target.value)}\n />\n </div>\n <div>\n <label>Committee #</label>\n <input type=\"text\" id=\"CommitteeNumber\" value={CommitteeNumber} disabled />\n </div>\n <div>\n <label>Chamber</label>\n <input type=\"text\" id=\"ChamberCode\" value={ChamberCode} disabled />\n </div>\n <div>\n <label>Service Start Date</label>\n <DatePicker\n selected={ServiceBeginDate ? moment(ServiceBeginDate) : null}\n onChange={(val) => this.handleDateChange(val, false)}\n popperPlacement=\"top-start\"\n placeholderText=\"Never\"\n isClearable\n filterDate={filterStartDate}\n />\n </div>\n <div>\n <label>Service End Date</label>\n <DatePicker\n selected={ServiceEndDate ? moment(ServiceEndDate) : null}\n onChange={(val) => this.handleDateChange(val, true)}\n popperPlacement=\"top-start\"\n placeholderText=\"Never\"\n isClearable\n filterDate={filterEndDate}\n />\n </div>\n </div>\n <div className=\"single-row no-margin\">\n <div>\n <Fields.TextInput\n id=\"MeetingNote\"\n label=\"Meeting Notes\"\n type=\"text\"\n placeholder=\"Meeting Notes\"\n value={MeetingNote}\n onChange={(val) => this.handleChange(\"MeetingNote\", val.target.value)}\n />\n </div>\n </div>\n <div className=\"single-row no-margin\">\n <div>\n <Fields.TextInput\n id=\"AgendaURL\"\n label=\"Agenda URL\"\n type=\"text\"\n placeholder=\"Agenda URL\"\n value={AgendaURL}\n onChange={(val) => this.handleChange(\"AgendaURL\", val.target.value)}\n />\n </div>\n </div>\n </fieldset>\n <fieldset className={this.state.clerkFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'}>\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'clerkFieldsetIsActive')}>{!this.props.match.params.subcommitteeid ? 'Committee Clerk' : 'Subcommittee Clerk'}</legend>\n <div className=\"draggable-grid comm-mgmt-clerk\">\n <div>\n <PersonnelDraggableComponent\n onPersonnelChange={this.handleClerkChange}\n items={this.state.clerks}\n name=\"ClerkGrid\"\n affiliation={this.props.match.params.subcommitteeid ? this.props.match.params.committeeid : this.props.match.params.committeeid}\n dropdownData={this.state.personnelReferences}\n staffRoleTypeID={1}\n />\n </div>\n </div>\n </fieldset>\n <fieldset className={this.state.staffFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'}>\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'staffFieldsetIsActive')}>{!this.props.match.params.subcommitteeid ? 'Committee Staff' : 'Subcommittee Staff'}</legend>\n <div className=\"draggable-grid comm-mgmt-staff\">\n <div>\n <PersonnelDraggableComponent\n onPersonnelChange={this.handleStaffChange}\n items={this.state.staff}\n name=\"StaffGrid\"\n affiliation={this.props.match.params.subcommitteeid ? this.props.match.params.subcommitteeid : this.props.match.params.committeeid}\n dropdownData={this.state.personnelReferences}\n staffRoleTypeID={2}\n />\n </div>\n </div>\n </fieldset>\n <fieldset className={this.state.membershipFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'}>\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'membershipFieldsetIsActive')}>{!this.props.match.params.subcommitteeid ? 'Committee Membership' : 'Subcommittee Membership'}</legend>\n <div className=\"draggable-grid comm-mgmt-staff\">\n <div>\n <MembersDraggableComponent\n name=\"MembersGrid\"\n affiliation={this.props.match.params.subcommitteeid ? this.props.match.params.subcommitteeid : this.props.match.params.committeeid}\n dropdownDataRoles={this.state.committeeMemberRoles}\n dropdownDataMembers={this.state.committeeMemberNames}\n onMemberChange={this.handleMemberChange}\n items={this.state.members}\n isSubcommittee={this.props.match.params.subcommitteeid ? true : false}\n sortByVotingSequence={this.sortByVotingSequence}\n ascending={this.state.ascending}\n />\n </div>\n </div>\n </fieldset>\n {!this.props.match.params.subcommitteeid &&\n <fieldset className={this.state.subcommFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'}>\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'subcommFieldsetIsActive')}>Subcommittee</legend>\n <SubcommitteeManagementGrid\n showCreateSuccess={this.state.showCreateSuccess}\n showCreateFailure={this.state.showCreateFailure}\n parentCommitteeID={CommitteeID}\n parentCommitteeNumber={CommitteeNumber}\n subcommitteeData={this.state.subcommitteeData}\n isLoaded={this.state.subcommitteeIsLoaded}\n subcommitteeMessage={this.state.subcommitteeMessage}\n createSubcommittee={this.createSubcommittee}\n />\n </fieldset>\n }\n <div className=\"button-bar floating-button-bar\" style={{ paddingBottom: \"15px\", paddingRight: \"15px\" }}>\n <button className=\"button secondary\" type=\"button\" onClick={() => this.handleClose()} style={{ width: \"100px\" }}>Close</button>\n <div className=\"align-right\">\n <button className=\"button\" onClick={() => this.handleSave(false)} type=\"button\" disabled={isSaving}>Save</button>\n <button className=\"button\" type=\"button\" disabled={isSaving || !saved} onClick={this.togglePreview}>Preview</button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </React.Fragment>\n );\n }\n }\n};\n\nexport default connect(\n (state) => {\n const { session, committee, personnel, members, nav } = state;\n return {\n session,\n committee,\n personnel,\n members,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, committeeActionCreators, personnelActionCreators, memberActionCreators, navActionCreators), dispatch)\n }\n }\n)(NewCommitteeFormComponent)\n\n\n\n\n\n\n\n\n","import React from 'react';\nimport { Route } from 'react-router';\nimport CommitteeManagementGrid from './lis-committee-grid';\nimport CommitteeManagementForm from './lis-committee-form'; \n\n\nclass CommitteeManagement extends React.Component {\n render() {\n return (\n <div>\n <Route exact path={this.props.match.path} component={CommitteeManagementGrid} />\n <Route path={`${this.props.match.path}/edit-committee/:committeeid`} component={CommitteeManagementForm} />\n <Route path={`${this.props.match.path}/edit-subcommittee/:committeeid/:subcommitteeid`} component={CommitteeManagementForm} />\n </div>\n )\n }\n}\n\nexport default CommitteeManagement;","const emptyCache = (cache) => {\n if ('caches' in window) {\n caches.keys().then((names) => {\n names.forEach(name => {\n caches.delete(name);\n })\n });\n window.location.reload(true);\n }\n}\n\nexport default emptyCache","import { partnerRequest, publicRequest } from '../services/request.service'\nimport emptyCache from '../services/emptyCache';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst getReferencesSuccess = \"GET_REFERENCES_SUCCESS\";\nconst getReferencesFailure = \"GET_REFERENCES_FAILURE\";\n\nconst getCalendarListSuccess = \"GET_CALENDAR_LIST_SUCCESS\";\nconst getCalendarListFailure = \"GET_CALENDAR_LIST_FAILURE\";\n\nconst createCalendarSuccess = \"CREATE_CALENDAR_SUCCESS\";\nconst createCalendarFailure = \"CREATE_CALENDAR_FAILURE\";\n\nconst saveCalendarSuccess = \"SAVE_CALENDAR_SUCCESS\";\nconst saveCalendarFailure = \"SAVE_CALENDAR_FAILURE\";\n\nconst saveCalendarFileSuccess = \"SAVE_CALENDAR_FILE_SUCCESS\";\nconst saveCalendarFileFailure = \"SAVE_CALENDAR_FILE_FAILURE\";\n\nconst getCalendarSuccess = \"GET_CALENDAR_SUCCESS\";\nconst getCalendarFailure = \"GET_CALENDAR_FAILURE\"\n\nconst getDocketListSuccess = \"GET_DOCKET_LIST_SUCCESS\";\nconst getDocketListFailure = \"GET_DOCKET_LIST_FAILURE\";\n\nconst createDocketSuccess = \"CREATE_DOCKET_SUCCESS\";\nconst createDocketFailure = \"CREATE_DOCKET_FAILURE\";\n\nconst saveDocketSuccess = \"SAVE_DOCKET_SUCCESS\";\nconst saveDocketFailure = \"SAVE_DOCKET_FAILURE\";\n\nconst docketByIdRequest = \"GET_DOCKET_BY_ID_REQUEST\";\nconst docketByIdSuccess = \"GET_DOCKET_BY_ID_SUCCESS\";\nconst docketByIdFailure = \"GET_DOCKET_BY_ID_FAILURE\";\n\nconst patronListDocketByIdRequest = \"GET_PATRON_LIST_DOCKET_BY_ID_REQUEST\";\nconst patronListDocketByIdSuccess = \"GET_PATRON_LIST_DOCKET_BY_ID_SUCCESS\";\nconst patronListDocketByIdFailure = \"GET_PATRON_LIST_DOCKET_BY_ID_FAILURE\";\n\nconst getCalendarCategoriesReferencesSuccess = \"GET_CALENDAR_CATEGORIES_REFERENCES_SUCCESS\";\nconst getCalendarCategoriesReferencesFailure = \"GET_CALENDAR_CATEGORIES_REFERENCES_FAILURE\";\n\nconst getCalendarAssignmentsSuccess = \"GET_CALENDAR_MAPPINGS_SUCCESS\";\nconst getCalendarAssignmentsFailure = \"GET_CALENDAR_MAPPINGS_FAILURE\";\n\nconst getAdminCalendarAssignmentsSuccess = \"GET_ADMIN_CALENDAR_MAPPINGS_SUCCESS\";\nconst getAdminCalendarAssignmentsFailure = \"GET_ADMIN_CALENDAR_MAPPINGS_FAILURE\";\n\nconst saveCalendarAssignmentSuccess = \"SAVE_CALENDAR_MAPPING_SUCCESS\";\nconst saveCalendarAssignmentFailure = \"SAVE_CALENDAR_MAPPING_FAILURE\";\n\nconst saveCalendarCurrentItemSuccess = \"SAVE_CALENDAR_CURRENT_ITEM_SUCCESS\";\nconst saveCalendarCurrentItemFailure = \"SAVE_CALENDAR_CURRENT_ITEM_FAILURE\";\n\nconst replacePdfRequest = \"REPLACE_PDF_REQUEST\";\n\nconst sendDocketHtmlRequest = \"SEND_HTML_REQUEST\";\n\nconst sendCalendarHtmlRequest = \"SEND_HTML_REQUEST\";\n\nconst initialState = {\n references: [],\n getReferencesError: '',\n docketList: [],\n getDocketListError: '',\n calendarList: [],\n calendarListError: '',\n calendarCreate: '',\n calendarCreateError: '',\n calendarSave: '',\n calendarSaveError: '',\n calendarFileSave: '',\n calendarFileSaveError: '',\n calendarGet: '',\n calendarGetError: '',\n calendarCategoriesReferences: [],\n calendarCategoriesReferencesError: '',\n docketByIdData: '',\n docketSave: '',\n docketSaveError: '',\n replacePdfResponse: '',\n replacePdfError: '',\n patronListDocketByIdData: '',\n sendDocketHtmlError: '',\n sendCalendarHtmlError: '',\n sendDocketHtmlResponse: '',\n sendCalendarHtmlResponse: '',\n calendarAssignments: [],\n getCalendarAssignmentsError: '',\n adminCalendarAssignments: [],\n getAdminCalendarAssignmentsError: '',\n calendarAssignmentSave: [],\n saveCalendarAssignmentsError: ''\n};\n\nexport const calendarActionCreators = {\n\n // GET CALENDAR BY ID FOR DOCKET MANAGEMENT (W/ PARTNER AUTH)\n requestDocketById: () => ({\n type: docketByIdRequest,\n isFetching: true\n }),\n\n receiveDocketById: responseObj => ({\n type: docketByIdSuccess,\n isFetching: false,\n docketByIdData: responseObj\n }),\n\n docketByIdError: message => ({\n type: docketByIdFailure,\n isFetching: false,\n message\n }),\n\n getDocketById: (params, partner) => {\n return dispatch => {\n dispatch(calendarActionCreators.requestDocketById());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetPartnerDocketsByIdAsync', 'GET', headers, '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetDocketsByIdAsync', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.docketByIdError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveDocketById(result[1].Dockets[0]))\n return result[1].Dockets[0];\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.docketByIdError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n requestPatronListDocketById: () => ({\n type: patronListDocketByIdRequest,\n isFetching: true\n }),\n\n receivePatronListDocketById: responseObj => ({\n type: patronListDocketByIdSuccess,\n isFetching: false,\n patronListDocketByIdData: responseObj\n }),\n\n patronListDocketByIdError: message => ({\n type: patronListDocketByIdFailure,\n isFetching: false,\n message\n }),\n\n getPatronListDocketById: (params) => {\n return dispatch => {\n dispatch(calendarActionCreators.requestPatronListDocketById());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetCalendarPatronListAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.patronListDocketByIdError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receivePatronListDocketById(result[1].ListItems[0]))\n return result.ListItems;\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.patronListDocketByIdError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveReferences: (responseObj) => ({\n type: getReferencesSuccess,\n references: responseObj\n }),\n\n getReferencesError: error => ({\n type: getReferencesFailure,\n getReferencesError: error\n }),\n\n getReferences: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetCalendarActionsReferenceAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.getReferencesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveReferences(result[1].CalendarActions))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.receiveReferences([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveDocketList: (responseObj) => ({\n type: getDocketListSuccess,\n docketList: responseObj\n }),\n\n getDocketListError: error => ({\n type: getDocketListFailure,\n getDocketListError: error\n }),\n\n getDocketList: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetDocketPartnerListAsync', 'GET', headers, '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetDocketListAsync', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.getDocketListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(calendarActionCreators.receiveDocketList(result[1].Dockets))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.receiveDocketList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveDocketCreate: (responseObj) => ({\n type: createDocketSuccess,\n docketCreate: responseObj\n }),\n\n createDocketError: error => ({\n type: createDocketFailure,\n createDocketError: error\n }),\n\n createDocket: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/CreateDocketsAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.createDocketError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveDocketCreate(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.createDocketError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveDocketSave: (responseObj) => ({\n type: saveDocketSuccess,\n docketSave: responseObj\n }),\n\n docketSaveError: error => ({\n type: saveDocketFailure,\n docketSaveError: error\n }),\n\n saveDocket: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/SaveDocketsAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.docketSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n //If the response is an ID then the docket was deleted\n if (parseInt(result[1])) {\n dispatch(calendarActionCreators.receiveDocketSave(result[1]))\n } else {\n // Dispatch the success action \n dispatch(calendarActionCreators.receiveDocketSave(result[1].Dockets[0] || result[1].HouseAgendas[0]))\n }\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.docketSaveError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarCategoriesReferences: (responseObj, includeChairmansReportCategories) => ({\n type: getCalendarCategoriesReferencesSuccess,\n calendarCategoriesReferences: includeChairmansReportCategories ? responseObj.CalendarCategoryTypes : responseObj.CalendarCategoryTypes.filter(cc => cc.CategoryType !== 'Chairmans Report')\n }),\n\n getCalendarCategoriesReferencesError: error => ({\n type: getCalendarCategoriesReferencesFailure,\n getCalendarCategoriesReferencesError: error\n }),\n\n getCalendarCategoriesReferences: (params = '', includeChairmansReportCategories = false) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetCalendarCategoryTypesReferenceAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.getCalendarCategoriesReferencesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveCalendarCategoriesReferences(result[1], includeChairmansReportCategories))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.getCalendarCategoriesReferencesError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarAssignments: (responseObj) => ({\n type: getCalendarAssignmentsSuccess,\n calendarAssignments: responseObj.CalendarAssignments\n }),\n\n getCalendarAssignmentsError: error => ({\n type: getCalendarAssignmentsFailure,\n getCalendarAssignmentsError: error\n }),\n\n getCalendarAssignments: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetCalendarAssignmentAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.getCalendarAssignmentsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveCalendarAssignments(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.getCalendarAssignmentsError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveAdminCalendarAssignments: (responseObj) => ({\n type: getAdminCalendarAssignmentsSuccess,\n adminCalendarAssignments: responseObj.CalendarAssignments\n }),\n\n getAdminCalendarAssignmentsError: error => ({\n type: getAdminCalendarAssignmentsFailure,\n getAdminCalendarAssignmentsError: error\n }),\n\n getAdminCalendarAssignments: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetAdminCalendarAssignmentAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.getAdminCalendarAssignmentsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveAdminCalendarAssignments(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.getAdminCalendarAssignmentsError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarAssignmentSave: (responseObj) => ({\n type: saveCalendarAssignmentSuccess,\n calendarAssignmentSave: responseObj\n }),\n\n saveCalendarAssignmentError: error => ({\n type: saveCalendarAssignmentFailure,\n saveCalendarAssignmentsError: error\n }),\n\n saveCalendarAssignment: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/SaveCalendarAssignmentAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.saveCalendarAssignmentError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveCalendarAssignmentSave(JSON.parse(result[1].Message)))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.saveCalendarAssignmentError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarList: (responseObj) => ({\n type: getCalendarListSuccess,\n calendarList: responseObj,\n\n }),\n\n calendarListError: error => ({\n type: getCalendarListFailure,\n calendarListError: error\n }),\n\n getCalendarList: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetCalendarPartnerListAsync', 'GET', headers, '', params);\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetCalendarListAsync', 'GET', headers, '', params);\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.calendarListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveCalendarList(result[1].Calendars))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.receiveCalendarList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarCreate: (responseObj) => ({\n type: createCalendarSuccess,\n calendarCreate: responseObj,\n }),\n\n createCalendarError: error => ({\n type: createCalendarFailure,\n calendarCreateError: error\n }),\n\n createCalendar: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/CreateCalendarAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.createCalendarError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n const createCalendarResponse = JSON.parse(result[1].Message);\n dispatch(calendarActionCreators.receiveCalendarCreate(createCalendarResponse[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.createCalendarError('No Content'))\n return Promise.reject('No Content')\n } else {\n dispatch(calendarActionCreators.createCalendarError('fail'));\n return Promise.reject('fail');\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarSave: (responseObj) => ({\n type: saveCalendarSuccess,\n calendarSave: responseObj\n }),\n\n calendarSaveError: error => ({\n type: saveCalendarFailure,\n calendarSaveError: error\n }),\n\n saveCalendar: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/SaveCalendarAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.calendarSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n try {\n const saveCalendarResponse = JSON.parse(result[1].Message);\n dispatch(calendarActionCreators.receiveCalendarSave(saveCalendarResponse[0]));\n } catch {\n // Message does not contain json. \n dispatch(calendarActionCreators.receiveCalendarSave(result[1].Message));\n }\n // The calendar save can go fine but the failure message can contain information about the minutes save failing\n if (result[1].FailureMessage) {\n return result[1].FailureMessage;\n }\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.calendarSaveError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarFileSave: (responseObj) => ({\n type: saveCalendarFileSuccess,\n calendarFileSave: responseObj\n }),\n\n calendarFileSaveError: error => ({\n type: saveCalendarFileFailure,\n calendarFileSaveError: error\n }),\n\n saveCalendarFile: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_FILE_API_URL) + '/CalendarFileGeneration/api/ProcessCalendarFileAsync', 'GET', headers, '', params, true)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.calendarFileSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(calendarActionCreators.receiveCalendarFileSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.calendarFileSaveError('No Content'))\n return Promise.reject('No Content')\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCalendarById: responseObj => ({\n type: getCalendarSuccess,\n calendarGet: responseObj\n }),\n\n calendarGetError: message => ({\n type: getCalendarFailure,\n calendarGetError: message\n }),\n\n getCalendarById: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetPartnerCalendarsByIdAsync', 'GET', headers, '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/GetCalendarsByIdAsync', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.calendarGetError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(calendarActionCreators.receiveCalendarById(result[1].Calendars[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.calendarGetError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCalendarCurrentItem: responseObj => ({\n type: saveCalendarCurrentItemSuccess,\n calendarCurrentItem: responseObj\n }),\n\n calendarCurrentItemError: message => ({\n type: saveCalendarCurrentItemFailure,\n calendarCurrentItemError: message\n }),\n\n saveCalendarCurrentItem: body => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/api/SaveCalendarCurrentItemAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(calendarActionCreators.calendarCurrentItemError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n try {\n const response = JSON.parse(result[1].Message);\n dispatch(calendarActionCreators.receiveCalendarCurrentItem(response[0]))\n } catch {\n dispatch(calendarActionCreators.calendarCurrentItemError('Response malformed: ' + result[1]))\n return Promise.reject('Response malformed: ' + result[1])\n }\n } else if (result[0] === NO_CONTENT) {\n dispatch(calendarActionCreators.calendarCurrentItemError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n replacePdf: (params, body) => {\n return dispatch => {\n const headers = {\n 'cache-control': 'no-cache'\n }\n let formData = new FormData();\n formData.append('replacementPdfFile', body);\n return partnerRequest((API_URL || process.env.REACT_APP_CALENDAR_FILE_API_URL) + '/CalendarFileGeneration/api/UploadReplacementCalendarFileAsync', 'POST', headers, formData, params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch({\n type: replacePdfRequest,\n replacePdfError: result[1]\n });\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch({\n type: replacePdfRequest,\n replacePdfResponse: result[1]\n });\n emptyCache();\n } else if (result[0] === NO_CONTENT) {\n dispatch({\n type: replacePdfRequest,\n replacePdfError: \"No Content\"\n });\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n sendDocketHtml: (body) => {\n return dispatch => {\n const headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n\n return partnerRequest(\"https://apps.dlas.virginia.gov/senatevote/api/savedocketasync\", 'POST', headers, body, '')\n .then(result => {\n dispatch({\n type: sendDocketHtmlRequest,\n sendDocketHtmlResponse: result\n });\n }).catch(err => Promise.reject(err))\n }\n },\n\n sendCalendarHtml: (body) => {\n return dispatch => {\n const headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n\n return partnerRequest(\"https://apps.dlas.virginia.gov/SenateVote/api/saveCalendarAsync\", 'POST', headers, body, '')\n .then(result => {\n dispatch({\n type: sendCalendarHtmlRequest,\n sendCalendarHtmlResponse: result\n });\n }).catch(err => Promise.reject(err))\n }\n }\n};\n\nexport const reducer = (state, action) => {\n state = state || initialState;\n\n switch (action.type) {\n case docketByIdRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case docketByIdSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n docketByIdData: action.docketByIdData,\n errorMessage: ''\n });\n case docketByIdFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case patronListDocketByIdRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case patronListDocketByIdSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n patronListDocketByIdData: action.patronListDocketByIdData,\n errorMessage: ''\n });\n case patronListDocketByIdFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.errorMessage\n });\n case getReferencesFailure:\n return Object.assign({}, state, {\n getReferencesError: action.getReferencesError\n });\n case getReferencesSuccess:\n return Object.assign({}, state, {\n references: action.references,\n getReferencesError: ''\n });\n case getDocketListFailure:\n return Object.assign({}, state, {\n getDocketListError: action.getDocketListError\n });\n case getDocketListSuccess:\n return Object.assign({}, state, {\n docketList: action.docketList,\n getDocketListError: ''\n });\n case createDocketFailure:\n return Object.assign({}, state, {\n docketCreateError: action.docketCreateError\n });\n case createDocketSuccess:\n return Object.assign({}, state, {\n docketCreate: action.docketCreate,\n docketCreateError: ''\n });\n case saveDocketFailure:\n return Object.assign({}, state, {\n docketSaveError: action.docketSaveError\n });\n case saveDocketSuccess:\n return Object.assign({}, state, {\n docketSave: action.docketSave,\n docketSaveError: ''\n });\n case getCalendarCategoriesReferencesFailure:\n return Object.assign({}, state, {\n getCalendarCategoriesReferencesError: action.getCalendarCategoriesReferencesError\n });\n case getCalendarCategoriesReferencesSuccess:\n return Object.assign({}, state, {\n calendarCategoriesReferences: action.calendarCategoriesReferences,\n getCalendarCategoriesReferencesError: ''\n });\n case getCalendarAssignmentsFailure:\n return Object.assign({}, state, {\n getCalendarAssignmentsError: action.getCalendarAssignmentsError\n });\n case getCalendarAssignmentsSuccess:\n return Object.assign({}, state, {\n calendarAssignments: action.calendarAssignments,\n getCalendarAssignmentsError: ''\n });\n case getAdminCalendarAssignmentsFailure:\n return Object.assign({}, state, {\n getAdminCalendarAssignmentsError: action.getAdminCalendarAssignmentsError\n });\n case getAdminCalendarAssignmentsSuccess:\n return Object.assign({}, state, {\n adminCalendarAssignments: action.adminCalendarAssignments,\n getAdminCalendarAssignmentsError: ''\n });\n case saveCalendarAssignmentFailure:\n return Object.assign({}, state, {\n saveCalendarAssignmentsError: action.saveCalendarAssignmentsError\n });\n case saveCalendarAssignmentSuccess:\n return Object.assign({}, state, {\n calendarAssignmentSave: action.calendarAssignmentSave,\n saveCalendarAssignmentsError: ''\n });\n case getCalendarListFailure:\n return Object.assign({}, state, {\n calendarListError: action.calendarListError\n });\n case getCalendarListSuccess:\n return Object.assign({}, state, {\n calendarList: action.calendarList,\n calendarListError: ''\n });\n case createCalendarFailure:\n return Object.assign({}, state, {\n calendarCreateError: action.calendarCreateError\n });\n case createCalendarSuccess:\n return Object.assign({}, state, {\n calendarCreate: action.calendarCreate,\n calendarCreateError: ''\n });\n case saveCalendarFailure:\n return Object.assign({}, state, {\n calendarSaveError: action.calendarSaveError\n });\n case saveCalendarSuccess:\n return Object.assign({}, state, {\n calendarSave: action.calendarSave,\n calendarSaveError: ''\n });\n case saveCalendarFileFailure:\n return Object.assign({}, state, {\n calendarFileSaveError: action.calendarFileSaveError\n });\n case saveCalendarFileSuccess:\n return Object.assign({}, state, {\n calendarFileSave: action.calendarFileSave,\n calendarFileSaveError: ''\n });\n case getCalendarFailure:\n return Object.assign({}, state, {\n calendarGetError: action.calendarGetError\n });\n case getCalendarSuccess:\n return Object.assign({}, state, {\n calendarGet: action.calendarGet,\n calendarGetError: ''\n });\n case saveCalendarCurrentItemFailure:\n return Object.assign({}, state, {\n calendarCurrentItemError: action.calendarCurrentItemError\n });\n case saveCalendarCurrentItemSuccess:\n return Object.assign({}, state, {\n calendarCurrentItem: action.calendarCurrentItem,\n calendarCurrentItemError: ''\n });\n case replacePdfRequest:\n return Object.assign({}, state, {\n replacePdfResponse: action.replacePdfResponse || state.replacePdfResponse,\n replacePdfError: action.replacePdfError || ''\n });\n default:\n return state;\n }\n};\n","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst scheduleListSuccess = 'SCHEDULE_LIST_SUCCESS';\nconst scheduleListFailure = 'SCHEDULE_LIST_FAILURE';\n\nconst scheduleTypeListSuccess = 'SCHEDULE_TYPE_LIST_SUCCESS';\nconst scheduleTypeListFailure = 'SCHEDULE_TYPE_LIST_FAILURE';\n\nconst scheduleGetSuccess = 'SCHEDULE_GET_SUCCESS';\nconst scheduleGetFailure = 'SCHEDULE_GET_FAILURE';\n\nconst scheduleSaveSuccess = 'SCHEDULE_SAVE_SUCCESS';\nconst scheduleSaveFailure = 'SCHEDULE_SAVE_FAILURE';\n\nconst scheduleCreateSuccess = 'SCHEDULE_CREATE_SUCCESS';\nconst scheduleCreateFailure = 'SCHEDULE_CREATE_FAILURE';\n\nconst meetingsCalendarPreviewSuccess = \"MEETINGS_CALENDAR_PREVIEW_SUCCESS\";\nconst meetingsCalendarPreviewFailure = \"MEETINGS_CALENDAR_PREVIEW_FAILURE\";\n\nconst getMeetingRoomReferencesSuccess = \"GET_MEETING_ROOM_REFERENCES_SUCCESS\";\nconst getMeetingRoomReferencesFailure = \"GET_MEETING_ROOM_REFERENCES_FAILURE\";\n\nconst subcommitteeMembersRequest = \"GET_SUBCOMMITTEE_MEMBERS_REQUEST\";\nconst subcommitteeMembersSuccess = \"GET_SUBCOMMITTEE_MEMBERS_SUCCESS\";\nconst subcommitteeMembersFailure = \"GET_SUBCOMMITTEE_MEMBERS_FAILURE\";\n\nconst uploadMeetingPdfSuccess = \"UPLOAD_MEETING_PDF_SUCCESS\";\nconst uploadMeetingPdfFailure = \"UPLOAD_MEETING_PDF_FAILURE\";\n\nconst initialState = {\n scheduleList: [],\n schedule: {},\n scheduleListError: '',\n scheduleTypeListError: '',\n scheduleGetError: '',\n scheduleSaveError: '',\n scheduleCreateError: '',\n meetingRoomReferences: [],\n meetingRoomReferencesError: '',\n meetingsCalendarPreview: '',\n meetingsCalendarPreviewError: '',\n subcommitteeMembers: '',\n uploadMeetingPdf: '',\n uploadMeetingPdfError: ''\n};\n\nexport const scheduleActionCreators = {\n\n receiveScheduleList: (content) => ({\n type: scheduleListSuccess,\n scheduleList: content\n }),\n\n scheduleListError: (message) => ({\n type: scheduleListFailure,\n scheduleListError: message\n }),\n\n getScheduleList: (params, parter) => {\n return dispatch => {\n let request = \"\";\n if (parter) {\n request = partnerRequest((API_URL || process.env.REACT_APP_SCHEDULE_API_URL) + '/Schedule/api/GetPartnerScheduleListAsync?', 'GET', '', '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_SCHEDULE_API_URL) + '/Schedule/api/GetScheduleListAsync?', 'GET', '', '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.scheduleListError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(scheduleActionCreators.receiveScheduleList(result[1].Schedules));\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.receiveScheduleList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveScheduleTypeList: (content) => ({\n type: scheduleTypeListSuccess,\n scheduleTypeList: content\n }),\n\n scheduleTypeListError: (message) => ({\n type: scheduleTypeListFailure,\n scheduleTypeListError: message\n }),\n\n getScheduleTypeList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_SCHEDULE_API_URL) + '/Schedule/api/GetScheduleTypesReferenceAsync?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.scheduleTypeListError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(scheduleActionCreators.receiveScheduleTypeList(result[1].ScheduleTypes));\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.receiveScheduleTypeList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveSchedule: (content) => ({\n type: scheduleGetSuccess,\n schedule: content\n }),\n\n scheduleError: (message) => ({\n type: scheduleGetFailure,\n scheduleGetError: message\n }),\n\n getSchedule: (params) => {\n return dispatch => {\n\n return partnerRequest((API_URL || process.env.REACT_APP_SCHEDULE_API_URL) + '/Schedule/api/GetPartnerSchedulebyIdAsync?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.scheduleError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(scheduleActionCreators.receiveSchedule(result[1].Schedules[0]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.receiveSchedule([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveScheduleSave: (message) => ({\n type: scheduleSaveSuccess,\n scheduleSave: message\n }),\n\n scheduleSaveError: (message) => ({\n type: scheduleSaveFailure,\n scheduleSaveError: message\n }),\n\n saveSchedule: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_SCHEDULE_API_URL) + '/Schedule/api/SaveScheduleAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.scheduleSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(scheduleActionCreators.receiveScheduleSave(result[1]))\n return Promise.resolve(result[1])\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.receiveScheduleSave(\"\"))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveScheduleCreate: (message) => ({\n type: scheduleCreateSuccess,\n scheduleCreate: message\n }),\n\n scheduleCreateError: (message) => ({\n type: scheduleCreateFailure,\n scheduleCreateError: message\n }),\n\n createSchedule: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_SCHEDULE_API_URL) + '/Schedule/api/CreateScheduleAsync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.scheduleCreateError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(scheduleActionCreators.receiveScheduleCreate(result[1]))\n return Promise.resolve(result[1])\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.scheduleCreateError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMeetingRoomReferences: (responseObj) => ({\n type: getMeetingRoomReferencesSuccess,\n meetingRoomReferences: responseObj\n }),\n\n getMeetingRoomReferencesError: error => ({\n type: getMeetingRoomReferencesFailure,\n getMeetingRoomReferencesError: error\n }),\n\n getMeetingRoomReferences: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_SCHEDULE_API_URL) + '/Schedule/api/GetMeetingRoomsReferenceAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.getMeetingRoomReferencesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(scheduleActionCreators.receiveMeetingRoomReferences(result[1].MeetingRooms))\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.getMeetingRoomReferencesError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveMeetingsCalendarPreview: (responseObj) => ({\n type: meetingsCalendarPreviewSuccess,\n meetingsCalendarPreview: responseObj\n }),\n\n getMeetingsCalendarPreviewError: error => ({\n type: meetingsCalendarPreviewFailure,\n getMeetingsCalendarPreviewError: error\n }),\n\n getMeetingsCalendarPreview: (params) => {\n return dispatch => {\n let config = {\n method: 'GET',\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"authorization\": \"Bearer \" + localStorage.getItem('LIS_ID_TOKEN'),\n \"WebAPIKey\": process.env.REACT_APP_API_KEY\n },\n }\n\n let url = (API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/Schedule/api/PreviewSchedulePDF' + params;\n\n return fetch(url, config)\n .then(result => {\n if (result) {\n dispatch(scheduleActionCreators.receiveMeetingsCalendarPreview(result))\n } else if (!result) {\n dispatch(scheduleActionCreators.getMeetingsCalendarPreviewError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n requestSubcommitteeMembers: () => ({\n type: subcommitteeMembersRequest,\n isFetching: true\n }),\n\n receiveSubcommitteeMembers: (responseObj) => ({\n type: subcommitteeMembersSuccess,\n isFetching: false,\n subcommitteeMembers: responseObj\n }),\n\n subcommitteeMembersError: message => ({\n type: subcommitteeMembersFailure,\n isFetching: false,\n subcommitteeMembersError: message\n }),\n\n getSubcommitteeMembers: (params) => {\n return dispatch => {\n dispatch(scheduleActionCreators.requestSubcommitteeMembers());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n\n return partnerRequest(API_URL + '/Schedule/api/GetPartnerScheduleSubcommitteeMemberListAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.subcommitteeMembersError(result))\n return Promise.reject(result)\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.receiveSubcommitteeMembers(\"\"))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n } else if (result[1]) {\n // Dispatch the success action\n dispatch(scheduleActionCreators.receiveSubcommitteeMembers(result[1].SubcomitteeMembers))\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveUploadMeetingPdf: (responseObj) => ({\n type: uploadMeetingPdfSuccess,\n isFetching: false,\n uploadMeetingPdf: responseObj\n }),\n\n uploadMeetingPdfError: message => ({\n type: uploadMeetingPdfFailure,\n isFetching: false,\n uploadMeetingPdfError: message\n }),\n\n uploadMeetingPdf: (params, file) => {\n return dispatch => {\n let headers = {\n 'cache-control': 'no-cache'\n }\n let formData = new FormData();\n formData.append('pdfFile', file);\n return partnerRequest(API_URL + '/Schedule/api/UploadScheduleFileAsync', 'POST', headers, formData, params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(scheduleActionCreators.uploadMeetingPdfError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === NO_CONTENT) {\n dispatch(scheduleActionCreators.receiveUploadMeetingPdf([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n } else if (result[1]) {\n // Dispatch the success action\n dispatch(scheduleActionCreators.receiveUploadMeetingPdf(result[1]))\n }\n }).catch(err => Promise.reject(err));\n }\n }\n};\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n switch (action.type) {\n case scheduleListSuccess:\n return Object.assign({}, state, {\n scheduleList: action.scheduleList,\n scheduleListError: ''\n })\n case scheduleListFailure:\n return Object.assign({}, state, {\n scheduleListError: action.scheduleListError\n })\n case scheduleTypeListSuccess:\n return Object.assign({}, state, {\n scheduleTypeList: action.scheduleTypeList,\n scheduleTypeListError: ''\n })\n case scheduleTypeListFailure:\n return Object.assign({}, state, {\n scheduleTypeListError: action.scheduleTypeListError\n })\n case scheduleGetSuccess:\n return Object.assign({}, state, {\n schedule: action.schedule,\n scheduleGetError: ''\n })\n case scheduleGetFailure:\n return Object.assign({}, state, {\n scheduleGetError: action.scheduleGetError\n })\n case scheduleSaveSuccess:\n return Object.assign({}, state, {\n scheduleSaveSuccess: action.scheduleSave,\n scheduleSaveError: ''\n })\n case scheduleSaveFailure:\n return Object.assign({}, state, {\n scheduleSaveError: action.scheduleSaveError\n })\n case scheduleCreateSuccess:\n return Object.assign({}, state, {\n scheduleCreateSuccess: action.scheduleCreate,\n scheduleCreateError: ''\n })\n case scheduleCreateFailure:\n return Object.assign({}, state, {\n scheduleCreateError: action.scheduleCreateError\n })\n case meetingsCalendarPreviewSuccess:\n return Object.assign({}, state, {\n meetingsCalendarPreview: action.meetingsCalendarPreview,\n meetingsCalendarPreviewError: ''\n });\n case meetingsCalendarPreviewFailure:\n return Object.assign({}, state, {\n meetingsCalendarPreviewError: action.meetingsCalendarPreviewError\n });\n case getMeetingRoomReferencesFailure:\n return Object.assign({}, state, {\n getMeetingRoomReferencesError: action.getMeetingRoomReferencesError\n });\n case getMeetingRoomReferencesSuccess:\n return Object.assign({}, state, {\n meetingRoomReferences: action.meetingRoomReferences,\n getMeetingRoomReferencesError: ''\n });\n case subcommitteeMembersRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case subcommitteeMembersSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n subcommitteeMembers: action.subcommitteeMembers,\n errorMessage: ''\n });\n case subcommitteeMembersFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case uploadMeetingPdfSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n uploadMeetingPdf: action.uploadMeetingPdf,\n uploadMeetingPdfError: ''\n });\n case uploadMeetingPdfFailure:\n return Object.assign({}, state, {\n isFetching: false,\n uploadMeetingPdfError: action.uploadMeetingPdfError\n });\n default:\n return state\n }\n};","import React from 'react';\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { connect } from 'react-redux';\nimport moment from 'moment-timezone';\nimport DatePicker from \"react-datepicker\";\nimport { cancelRequest } from '../../../services/request.service';\nimport { scheduleActionCreators } from '../../../stores/lis-schedule-store';\n\nclass DocketGrid extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n isLoaded: false,\n sessionOptions: [],\n committeeOptions: [],\n subcommitteeOptions: [],\n docketList: [],\n docketDate: moment().utc().startOf('day').hour(16).minute(30),\n showCreateSuccess: false,\n createFailureMessage: '',\n isAdding: false,\n showDeleteModal: false,\n docketToDeleteIndex: \"\"\n }\n\n this.getCommittees = this.getCommittees.bind(this);\n this.getSubcommittees = this.getSubcommittees.bind(this);\n this.getDockets = this.getDockets.bind(this);\n this.createDocket = this.createDocket.bind(this);\n this.deleteDocket = this.deleteDocket.bind(this);\n this.checkDeleteDocket = this.checkDeleteDocket.bind(this);\n this.cancelDeleteDocket = this.cancelDeleteDocket.bind(this);\n\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleSessionSelectChange = this.handleSessionSelectChange.bind(this);\n this.handleCommitteeSelectChange = this.handleCommitteeSelectChange.bind(this);\n this.handleSubcommitteeSelectChange = this.handleSubcommitteeSelectChange.bind(this);\n }\n\n handleSessionSelectChange(value) {\n //The session selectors value has been changed. Remove the committee and subcommittee selections as their dropdown options are going to change\n const newState = {\n selectedSession: value,\n selectedCommittee: '',\n selectedSubcommittee: ''\n };\n this.props.handleDropdownChange(newState, () => {\n this.props.history.push(`/docket-management`);\n //Get the new list of committees that belong to the selected session\n this.getCommittees(value);\n });\n this.setState({\n docketList: []\n });\n }\n\n handleCommitteeSelectChange(value) {\n //A committee has been selected. Remove the selected subcommittee because the sucommittee dropdown options are going to change\n const newState = {\n selectedCommittee: value,\n selectedSubcommittee: ''\n };\n this.props.handleDropdownChange(newState, () => {\n this.props.history.push(`/docket-management/${value.CommitteeID}`);\n //Get the new list of available subcommittees\n this.getSubcommittees(value.CommitteeID);\n //Get the dockets for the committee to be displayed in the grid\n this.getDockets();\n });\n }\n\n handleSubcommitteeSelectChange(value) {\n const newState = {\n selectedSubcommittee: value || ''\n };\n this.props.handleDropdownChange(newState, () => {\n this.getDockets();\n });\n }\n\n handleDateChange(value) {\n if (value) {\n //Default docket/schedule to 4:30pm\n value.utc().startOf('day').hour(16).minute(30);\n }\n //Used when inserting a new docket\n this.setState({\n docketDate: value\n });\n }\n\n createDocket() {\n if (this.props.selectedSession && this.props.selectedCommittee) {\n this.setState({\n isAdding: true\n }, () => {\n const committeeId = this.props.selectedSubcommittee ? this.props.selectedSubcommittee.CommitteeID : this.props.selectedCommittee.CommitteeID;\n let createDocketObj = {\n Dockets: [{\n DocketDate: this.state.docketDate,\n IsPublic: false,\n DocketType: \"Committee\",\n DocketTypeID: 2,\n ChamberCode: this.props.selectedCommittee.ChamberCode,\n CommitteeID: committeeId,\n SessionID: this.props.selectedSession.SessionID,\n VoteRoomID: 1,\n Schedules: [\n {\n ScheduleDate: this.state.docketDate,\n ScheduleTypeID: 6\n }\n ]\n }]\n };\n this.props.actions.createDocket(createDocketObj)\n .then(() => {\n this.setState({ showCreateSuccess: true });\n this.getDockets(committeeId)\n setTimeout(() => {\n this.setState({\n showCreateSuccess: false,\n isAdding: false,\n createFailureMessage: ''\n })\n }, 3000);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n createFailureMessage: this.props.calendar.docketCreateError\n });\n setTimeout(() => {\n this.setState({\n showCreateSuccess: false,\n isAdding: false,\n createFailureMessage: ''\n })\n }, 3000);\n });\n });\n } else {\n this.setState({\n createFailureMessage: \"Please select a committee\"\n });\n setTimeout(() => {\n this.setState({\n createFailureMessage: '',\n });\n }, 3000);\n }\n }\n\n deleteDocket(rowIndex) {\n this.setState({\n docketBeingDeleted: rowIndex\n });\n // Get docket to be deleted\n this.props.actions.getDocketById('?docketId=' + this.state.docketList[rowIndex].DocketID, true)\n .then(() => {\n let docketData = this.props.calendar.docketByIdData;\n docketData.DocketCategories.forEach(x => x.DocketItems.forEach(y => y.IsActive = false));\n docketData.DeletionDate = moment();\n\n docketData.Schedules.forEach(x => x.DeletionDate = moment());\n let params = {\n Schedules: docketData.Schedules\n };\n this.props.actions.saveSchedule(params)\n\n return this.props.actions.saveDocket({ Dockets: [docketData] })\n }).then(() => {\n this.setState({\n showDeleteSuccess: true,\n docketBeingDeleted: -1,\n showDeleteModal: false,\n docketToDeleteIndex: \"\"\n });\n this.getDockets();\n setTimeout(() => {\n this.setState({\n showDeleteSuccess: false\n })\n }, 3000);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n docketBeingDeleted: -1,\n deleteFailureMessage: 'Docket failed to be deleted',\n showDeleteModal: false,\n docketToDeleteIndex: \"\"\n });\n console.log(err)\n setTimeout(() => {\n this.setState({\n deleteFailureMessage: '',\n });\n }, 3000);\n });\n }\n\n checkDeleteDocket(docketIndex) {\n this.setState({\n showDeleteModal: true,\n docketToDeleteIndex: docketIndex\n })\n }\n\n cancelDeleteDocket() {\n this.setState({\n showDeleteModal: false,\n docketToDeleteIndex: \"\"\n })\n }\n\n componentDidMount() {\n let selectedSession = this.props.selectedSession;\n this.props.actions.getSessionList().then(() => {\n //Format data for dropdown\n const sessionList = [...this.props.session.sessionList];\n sessionList.forEach(session => {\n session.value = session.SessionID;\n session.label = session.SessionYear + ' ' + session.DisplayName;\n // Select default session if one is not already selected\n if (session.IsDefault && !selectedSession) {\n selectedSession = session;\n }\n });\n this.setState({\n sessionOptions: sessionList.reverse()\n });\n const newState = {\n selectedSession: selectedSession,\n }\n this.props.handleDropdownChange(newState, () => {\n //Checks to see if the committeeId is in the url, if so then get the subcommittees for that committee if one has not already been selected\n let committeeId = parseInt(this.props.match.params.committeeid, 10);\n if (this.props.selectedCommittee) {\n this.getCommittees(selectedSession, this.props.selectedCommittee.CommitteeID);\n this.getSubcommittees(this.props.selectedCommittee.CommitteeID);\n } else if (!isNaN(committeeId)) {\n this.getCommittees(selectedSession, committeeId);\n this.getSubcommittees(committeeId);\n } else {\n this.getCommittees(selectedSession)\n }\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getCommittees(session, committeeId) {\n //Get the committee list based off the session data\n this.props.actions.getCommitteeList('sessionID=' + session.SessionID)\n .then(() => {\n // If the user is a senate user then only show the senate committees\n // If the user is a house user then only show the house committees\n // If the user is both then show all committees\n let committees = [...this.props.committee.committeeList]\n let filteredCommittees = [];\n committees.forEach(committee => {\n if (committee.ChamberCode === 'S') {\n committee.label = committee.Name;\n committee.value = committee.CommitteeID;\n if (committee.CommitteeID === committeeId) {\n this.getSubcommittees(committeeId);\n this.props.handleDropdownChange({ selectedCommittee: committee }, () => {\n // Don't want to get the dockets for the parent committee if a subcommittee is selected.\n if (!this.props.selectedSubcommittee) {\n this.getDockets();\n }\n })\n }\n filteredCommittees.push(committee);\n }\n });\n\n this.setState({\n committeeOptions: filteredCommittees,\n isLoaded: true\n });\n });\n }\n\n getSubcommittees(committeeId) {\n let listParams = 'sessionID=' + this.props.selectedSession.SessionID + '&parentCommitteeID=' + committeeId\n this.props.actions.getCommitteeList(listParams)\n .then(() => {\n let committees = [...this.props.committee.committeeList]\n committees.forEach(committee => {\n committee.label = committee.Name;\n committee.value = committee.CommitteeID;\n if (this.props.selectedSubcommittee.CommitteeID === committee.CommitteeID) {\n this.getDockets();\n }\n });\n this.setState({\n subcommitteeOptions: committees\n });\n });\n }\n\n getDockets() {\n const { selectedSession, selectedCommittee, selectedSubcommittee } = this.props;\n this.setState({\n isLoaded: false\n });\n //Get the dockets\n let committeeId = selectedSubcommittee ? selectedSubcommittee.CommitteeID : selectedCommittee.CommitteeID;\n const docketParams = \"?sessionID=\" + selectedSession.SessionID + \"&chamberCode=\" + selectedCommittee.ChamberCode + \"&committeeID=\" + committeeId + \"&isPublic=false\";\n //The second parameter lets the store know to use the partner request instead of the public\n this.props.actions.getDocketList(docketParams, true)\n .then(() => {\n this.setState({\n isLoaded: true,\n docketList: this.props.calendar.docketList\n });\n });\n }\n\n render() {\n return (\n <div>\n {this.state.showDeleteModal &&\n <div className='schedule-modal'>\n <div className='schedule-modal-content'>\n <div className='grid-wrapper two'>\n <div className='inner-grid eight-one-and-one'>\n <span>Are you sure you want to delete docket {moment(this.state.docketList[this.state.docketToDeleteIndex].DocketDate).format(\"MM/DD/YYYY\") + (this.state.docketList[this.state.docketToDeleteIndex].DocketNumber > 1 ? \" (\" + this.state.docketList[this.state.docketToDeleteIndex].DocketNumber + \")\" : \"\")}?</span>\n {this.state.docketBeingDeleted === this.state.docketToDeleteIndex\n ? <div className=\"small-spinner\"></div>\n : <button className='button primary' onClick={() => this.deleteDocket(this.state.docketToDeleteIndex)}>Yes</button>\n }\n <button className='button secondary' onClick={() => this.cancelDeleteDocket()}>No</button>\n </div>\n </div>\n </div>\n </div>\n }\n <div className=\"header-half\">\n <h1>Docket Management</h1>\n </div>\n\n <div className=\"toolbar inner-grid four\">\n <div>\n <Fields.Dropdown\n value={this.props.selectedSession}\n options={this.state.sessionOptions}\n id=\"sessionDropdown\"\n onChange={this.handleSessionSelectChange}\n />\n </div>\n <div>\n <Fields.Dropdown\n value={this.props.selectedCommittee}\n placeholder=\"Committee\"\n options={this.state.committeeOptions}\n id=\"committeeDropdown\"\n onChange={this.handleCommitteeSelectChange}\n />\n </div>\n <div>\n <Fields.Dropdown\n value={this.props.selectedSubcommittee}\n placeholder=\"Subcommittee?\"\n options={this.state.subcommitteeOptions}\n id=\"subcommitteeDropdown\"\n isClearable\n onChange={this.handleSubcommitteeSelectChange}\n />\n </div>\n </div>\n <ReactTable\n resizable={false}\n data={this.state.docketList}\n loading={!this.state.isLoaded}\n ref={r => this.reactTable = r}\n columns={[\n {\n Header: 'Dockets',\n width: 'auto',\n sortable: false,\n filterable: false,\n columns: [\n {\n headerClassName: \"docket-datepicker-container\",\n accessor: \"DocketDate\",\n sortable: false,\n Header: (\n <div className=\"dlas-forms datepicker-container\">\n {!this.state.showCreateSuccess && !this.state.createFailureMessage && !this.state.showDeleteSuccess && !this.state.deleteFailureMessage &&\n <DatePicker\n className=\"dnd-field\"\n selected={this.state.docketDate}\n onChange={this.handleDateChange}\n placeholderText=\"Docket Date\"\n />\n }\n {this.state.showCreateSuccess &&\n <span className=\"insert-message\">Docket was created successfully!</span>\n }\n {this.state.createFailureMessage &&\n <span className=\"insert-message fail\">{this.state.createFailureMessage}</span>\n }\n {this.state.showDeleteSuccess &&\n <span className=\"insert-message\">Docket was deleted successfully!</span>\n }\n {this.state.deleteFailureMessage &&\n <span className=\"insert-message fail\">{this.state.deleteFailureMessage}</span>\n }\n </div>\n ),\n\n Cell: ({ original }) => {\n return <span>{moment(original.DocketDate).format(\"MM/DD/YYYY\")}{original.DocketNumber > 1 ? ` (${original.DocketNumber})` : ''}</span>\n }\n }\n ]\n },\n {\n Header: 'Actions',\n headerClassName: \"submit-action\",\n sortable: false,\n filterable: false,\n columns: [\n {\n Header: () => {\n return <span><button className=\"button\" onClick={this.createDocket} disabled={this.state.isAdding}>Create</button></span>\n },\n headerClassName: \"header-action\",\n accessor: \"action\",\n sortable: false,\n className: \"action-column\",\n width: 90,\n Cell: row => {\n if (this.state.docketBeingDeleted === row.index) {\n return (\n <div className=\"small-spinner\"></div>\n )\n }\n return (\n <div className=\"committee-action-column-two\">\n <Link to={`/docket-management/${row.original.CommitteeID}/edit-docket/${row.original.DocketID}`} className=\"icon edit\"></Link>\n {row.original.IsPublic\n ? <Link target=\"_blank\" to={`/session-details/${row.original.SessionCode}/committee-information/${this.props.selectedSubcommittee ? this.props.selectedSubcommittee.CommitteeNumber : this.props.selectedCommittee.CommitteeNumber}/dockets/${row.original.DocketID}`} className=\"icon book\"></Link>\n : <span onClick={() => this.checkDeleteDocket(row.index)} className=\"icon delete\"></span>\n }\n </div>\n );\n }\n }\n ]\n }\n ]}\n defaultPageSize={15}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight\"\n />\n <br />\n\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { committee, session, calendar, login } = state;\n return {\n committee,\n session,\n calendar,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, sessionActionCreators, calendarActionCreators, authActionCreators, scheduleActionCreators), dispatch)\n }\n }\n)(DocketGrid)","import React from \"react\";\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport Select from \"react-select\";\nimport { Link } from 'react-router-dom';\n\nconst getItemStyle = (isDragging, draggableStyle, pendingDeletion) => ({\n userSelect: 'none',\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: pendingDeletion ? 'red' : 'none',\n ...draggableStyle\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%'\n});\n\nclass CommitteeBillsGrid extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lastCheckedBills: [],\n showAuxBillForm: false,\n auxBill: \"\",\n savingAuxBill: false\n }\n\n this.toggleRow = this.toggleRow.bind(this);\n this.toggleBill = this.toggleBill.bind(this);\n this.toggleBillBulk = this.toggleBillBulk.bind(this);\n this.onDragEnd = this.onDragEnd.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.saveChange = this.saveChange.bind(this);\n this.toggleAuxBillAdd = this.toggleAuxBillAdd.bind(this);\n this.addAuxBill = this.addAuxBill.bind(this);\n this.setAuxBill = this.setAuxBill.bind(this);\n }\n\n toggleRow(LegislationID, categorySequence, e) {\n //the categories array is split up in the view into non-legislative and active/inactive sections.\n //So to find the correct array item to update the category's and item's Sequence property is used\n let categories = [...this.props.categories];\n const catIndex = categories.findIndex(category => category.Sequence === categorySequence);\n let items = categories[catIndex].DocketItems;\n let itemIndex = items.findIndex(bill => bill.LegislationID === LegislationID);\n\n let lastCheckedBills = this.state.lastCheckedBills;\n let lastCheckedBill = lastCheckedBills[categorySequence];\n if (e.nativeEvent.shiftKey && !isNaN(lastCheckedBill) && lastCheckedBill !== -1) {\n for (let i = 0; i < Math.abs(itemIndex - lastCheckedBill); i++) {\n const index = lastCheckedBill + i * (itemIndex - lastCheckedBill) / Math.abs(itemIndex - lastCheckedBill);\n items[index].checked = true;\n }\n } else {\n lastCheckedBill = itemIndex;\n }\n\n items[itemIndex].checked = !items[itemIndex].checked;\n this.props.updateDocket(categories);\n\n lastCheckedBills[categorySequence] = lastCheckedBill;\n this.setState({\n lastCheckedBills: lastCheckedBills\n });\n }\n\n toggleBill(legislationID, categorySequence) {\n let categories = [...this.props.categories];\n const catIndex = categories.findIndex(category => category.Sequence === categorySequence);\n let items = categories[catIndex].DocketItems;\n const itemIndex = items.findIndex(bill => bill.LegislationID === legislationID);\n\n //Check the IsActive before setting it to see if we're going from inactive to active.\n //If so then assign the sequence as the last sequence in the category.\n //Otherwise remove the sequence and resequence existing included items from 1\n if (items[itemIndex].IsActive) {\n items[itemIndex].Sequence = null;\n items[itemIndex].IsActive = false;\n let sequence = 1;\n for (let i = 0; i < items.length; i++) {\n if (items[i].IsActive === true) {\n items[i].Sequence = sequence;\n sequence = sequence + 1;\n }\n }\n } else {\n items[itemIndex].IsActive = true;\n //insert the newly included bill alphabetically\n const nextHighestActiveLegislationNumber = items.filter(i => i.IsActive && i.Sequence).find(i => i.LegislationNumber.substr(0, 2).localeCompare(items[itemIndex].LegislationNumber.substr(0, 2)) === 1 || (i.LegislationNumber.substr(0, 2).localeCompare(items[itemIndex].LegislationNumber.substr(0, 2)) === 0 && i.LegislationKey > items[itemIndex].LegislationKey));\n if (nextHighestActiveLegislationNumber) {\n const sequence = nextHighestActiveLegislationNumber.Sequence\n items.filter(i => i.IsActive && i.Sequence >= nextHighestActiveLegislationNumber.Sequence).forEach(i => i.Sequence++)\n items[itemIndex].Sequence = sequence;\n } else {\n const currentSequences = items.filter(i => i.Sequence).map(i => { return i.Sequence; });\n if (currentSequences.length) {\n items[itemIndex].Sequence = (Math.max.apply(Math, currentSequences) + 1) || 1;\n } else {\n items[itemIndex].Sequence = 1;\n }\n }\n }\n\n items[itemIndex].checked = false;\n //Must resort on the Sequence to prevent the index-based reordering in onDragEnd from breaking after bills are included or unincluded\n items.sort((a, b) => (a.Sequence != null ? a.Sequence : Infinity) - (b.Sequence != null ? b.Sequence : Infinity))\n\n this.props.updateDocket(categories);\n }\n\n toggleBillBulk(activate) {\n let categories = [...this.props.categories];\n categories.forEach(category => {\n category.DocketItems.forEach(bill => {\n if (bill.checked) {\n bill.IsActive = activate;\n bill.checked = false;\n\n if (activate) {\n //insert the newly included bill alphabetically\n const nextHighestActiveLegislationNumber = category.DocketItems.filter(i => i.IsActive && i.Sequence).find(i => i.LegislationNumber.substr(0, 2).localeCompare(bill.LegislationNumber.substr(0, 2)) === 1 || (i.LegislationNumber.substr(0, 2).localeCompare(bill.LegislationNumber.substr(0, 2)) === 0 && i.LegislationKey > bill.LegislationKey));\n if (nextHighestActiveLegislationNumber) {\n const sequence = nextHighestActiveLegislationNumber.Sequence\n category.DocketItems.filter(i => i.IsActive && i.Sequence >= nextHighestActiveLegislationNumber.Sequence).forEach(i => i.Sequence++)\n bill.Sequence = sequence;\n } else {\n const currentSequences = category.DocketItems.filter(i => i.Sequence).map(i => { return i.Sequence; });\n if (currentSequences.length) {\n bill.Sequence = (Math.max.apply(Math, currentSequences) + 1) || 1;\n } else {\n bill.Sequence = 1;\n }\n }\n } else {\n bill.Sequence = null;\n let sequence = 1;\n for (let i = 0; i < category.DocketItems.length; i++) {\n if (category.DocketItems[i].IsActive === true) {\n category.DocketItems[i].Sequence = sequence;\n sequence = sequence + 1;\n }\n }\n }\n }\n });\n\n //Must resort on the Sequence to prevent the index-based reordering in onDragEnd from breaking after bills are included or unincluded\n category.DocketItems.sort((a, b) => (a.Sequence != null ? a.Sequence : Infinity) - (b.Sequence != null ? b.Sequence : Infinity))\n });\n\n this.props.updateDocket(categories);\n }\n\n onDragEnd(result, categorySequence) {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n // Only active bills can be dragged\n let categories = [...this.props.categories];\n const catIndex = categories.findIndex(category => category.Sequence === categorySequence);\n let items = categories[catIndex].DocketItems;\n items.sort((a, b) => (a.Sequence != null ? a.Sequence : Infinity) - (b.Sequence != null ? b.Sequence : Infinity))\n let [removed] = items.splice(result.source.index, 1);\n items.splice(result.destination.index, 0, removed);\n\n // Reorder the Sequence value too because the sequence value is used to show what order the preview is in\n items.forEach(function (element, index) {\n if (element.IsActive) {\n element.Sequence = index + 1;\n }\n });\n\n //Send the new values up to the parent to be set in the parent's state\n this.props.updateDocket(categories);\n }\n\n toggleEdit(categorySequence, legislationID) {\n let categories = [...this.props.categories];\n const catIndex = categories.findIndex(category => category.Sequence === categorySequence);\n let items = categories[catIndex].DocketItems;\n const itemIndex = items.findIndex(bill => bill.LegislationID === legislationID);\n //This key is used to tell the DOM whether to display an input or a span\n items[itemIndex].isEditing = !items[itemIndex].isEditing;\n //Create a key called newDescription that will hold the text that the user types in\n items[itemIndex].newDescription = items[itemIndex].Description;\n this.props.updateDocket(categories);\n }\n\n handleChange(categorySequence, legislationID, e) {\n let categories = [...this.props.categories];\n const catIndex = categories.findIndex(category => category.Sequence === categorySequence);\n let items = categories[catIndex].DocketItems;\n const itemIndex = items.findIndex(bill => bill.LegislationID === legislationID);\n items[itemIndex].newDescription = e.target.value;\n this.props.updateDocket(categories);\n }\n\n saveChange(categorySequence, legislationID) {\n //Turn input back into span\n let categories = [...this.props.categories];\n const catIndex = categories.findIndex(category => category.Sequence === categorySequence);\n let items = categories[catIndex].DocketItems;\n const itemIndex = items.findIndex(bill => bill.LegislationID === legislationID);\n items[itemIndex].isEditing = false;\n // since the user saved changes they probably want to add it to the docket\n items[itemIndex].IsActive = true;\n //Set description to the text that the user has typed in. If new description is null then set it to the current description\n items[itemIndex].Description = items[itemIndex].newDescription;\n this.props.updateDocket(categories);\n }\n\n toggleAuxBillAdd() {\n this.setState({\n showAuxBillForm: !this.state.showAuxBillForm,\n auxBill: ''\n })\n }\n\n setAuxBill(value) {\n this.setState({\n auxBill: value\n })\n }\n\n addAuxBill() {\n this.setState({\n savingAuxBill: true\n }, () => {\n this.props.getBill(this.state.auxBill.LegislationID, this.state.auxBill.LegislationKey);\n\n this.setState({\n savingAuxBill: false,\n auxBill: '',\n showAuxBillForm: false\n })\n })\n }\n\n render() {\n const notesCategories = this.props.categories.filter(category => !category.IsLegislationCategory);\n const categories = this.props.categories.filter(category => category.IsLegislationCategory);\n const docketBills = categories.flatMap(c => c.DocketItems.map(d => d.LegislationNumber));\n return (\n <div className=\"drag-container\">\n <div className=\"inner-grid three-and-two\" style={{ gap: '50px' }}>\n <div>\n <button type=\"button\" className=\"button m-right\" onClick={() => this.toggleBillBulk(false)} >Remove from Docket</button>\n <button type=\"button\" className=\"button m-right\" onClick={() => this.toggleBillBulk(true)} >Add to Docket</button>\n <div style={{ display: 'inline-block' }}>\n <label htmlFor=\"allActive\">Select All Active</label>\n <input type=\"checkbox\" name=\"allActive\" checked={this.props.selectAllActive} onChange={() => this.props.toggleAllActive(true)} />\n <label htmlFor=\"allInActive\">Select All Inactive</label>\n <input type=\"checkbox\" name=\"allInActive\" checked={this.props.selectAllInactive} onChange={() => this.props.toggleAllActive(false)} />\n </div>\n </div>\n {this.state.showAuxBillForm\n ?\n <div style={{ display: \"grid\", gridTemplateRows: \"1fr 1fr\", marginTop: \"6px\" }}>\n <div className=\"inner-grid\" style={{ gridTemplateColumns: \"25px 1fr\" }}>\n <a className=\"icon delete\" onClick={this.toggleAuxBillAdd} />\n <span style={{ fontSize: \"14px\" }}>This form may be used to add any bill in the session to this docket. Use with caution.</span>\n </div>\n <div className=\"inner-grid\" style={{ gridTemplateColumns: \"1fr 150px\" }}>\n <Select\n options={this.props.sessionBills.filter(bill => !docketBills.includes(bill.LegislationNumber))}\n onChange={this.setAuxBill}\n isSearchable={true}\n />\n <button type=\"button\" className=\"button\" onClick={this.addAuxBill} disabled={this.state.savingAuxBill}>Add Bill to List</button>\n </div>\n </div>\n :\n <a className=\"icon warning\" onClick={this.toggleAuxBillAdd} style={{ marginTop: \"6px\" }} />\n }\n </div>\n {notesCategories.map((category, categoryIndex) => {\n const dataActive = category.DocketItems.filter(note => note.IsActive);\n const dataInactive = category.DocketItems.filter(note => !note.IsActive);\n return (<DragDropContext key={categoryIndex} onDragEnd={(result) => this.onDragEnd(result, category.Sequence)}>\n <Droppable droppableId=\"droppable1\">\n {(provided, snapshot) => (\n <table\n className=\"dnd-grid-table margin dockets-agenda-notes-grid\"\n ref={provided.innerRef}\n\n >\n <thead className=\"dnd-grid-header\" style={getListStyle(snapshot.isDraggingOver)}>\n <tr>\n <th scope=\"col\" id={'-grabber-column'}></th>\n <th scope=\"col\" id={'-display-column'}></th>\n <th scope=\"col\" id={'-sequence-column'}>\n </th>\n <th scope=\"col\" id={'-bill-column'}>Notes</th>\n <th scope=\"col\">Status</th>\n <th scope=\"col\" id={'-actions-column'}>Action</th>\n </tr>\n </thead>\n <tbody>\n {dataActive.map((item, index) => (\n <Draggable key={index} draggableId={\"notes\" + index} index={index}>\n {(provided, snapshot) => (\n <tr\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className={item.IsActive ? 'selected' : 'not-selected'}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style\n )}>\n <td><button id={item.LegislationNumber + '-grabber-button'} className=\"button draggable\">Drag and drop</button></td>\n <td>{index + 1}</td>\n <td>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={item.checked || ''}\n onChange={(e) => this.toggleRow(item.LegislationID, category.Sequence, e)} />\n </td>\n <td>\n {item.isEditing ?\n <div style={{ width: '100%' }}>\n <div className=\"bill-grid-actions\">\n <button onClick={() => this.saveChange(category.Sequence, item.LegislationID)} type=\"button\" className=\"icon save float-right\"></button>\n <button onClick={() => this.toggleEdit(category.Sequence, item.LegislationID)} type=\"button\" className=\"icon delete float-right\"></button>\n </div>\n <div>\n <textarea value={item.newDescription || item.Description} style={{ resize: 'vertical', width: '75%' }} cols=\"2\" onChange={(e) => this.handleChange(category.Sequence, item.LegislationID, e)}></textarea>\n </div>\n </div>\n :\n <div style={{ width: '100%' }}>\n <span>{item.Description || item.LegislationDescription}</span>\n <button onClick={() => this.toggleEdit(category.Sequence, item.LegislationID)} type=\"button\" className=\"icon edit float-right\"></button>\n </div>\n }\n </td>\n <td>\n <span className=\"message-success\">Included</span>\n </td>\n <td>\n <div onClick={() => this.toggleBill(item.LegislationID, category.Sequence)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={item.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </td>\n </tr>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n {dataInactive.map((item, index) => (\n <tr key={index} className=\"tr-inactive\">\n <td></td>\n <td>{/* index + 1 */}</td>\n <td>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={item.checked || ''}\n onChange={(e) => this.toggleRow(item.LegislationID, category.Sequence, e)} />\n </td>\n <td>\n {item.isEditing ?\n <div style={{ width: '100%' }}>\n <div className=\"bill-grid-actions\">\n <button onClick={() => this.saveChange(category.Sequence, item.LegislationID)} type=\"button\" className=\"icon save float-right\"></button>\n <button onClick={() => this.toggleEdit(category.Sequence, item.LegislationID)} type=\"button\" className=\"icon delete float-right\"></button>\n </div>\n <div>\n <textarea value={item.newDescription || item.Description} style={{ resize: 'vertical', width: '75%' }} cols=\"2\" onChange={(e) => this.handleChange(category.Sequence, item.LegislationID, e)}></textarea>\n </div>\n </div>\n :\n <div style={{ width: '100%' }}>\n <span>{item.Description || item.LegislationDescription}</span>\n <button onClick={() => this.toggleEdit(category.Sequence, item.LegislationID)} type=\"button\" className=\"icon edit float-right\"></button>\n </div>\n }\n </td>\n <td>\n <span>Not Included</span>\n </td>\n <td>\n <div onClick={() => this.toggleBill(item.LegislationID, category.Sequence)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={item.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </Droppable>\n </DragDropContext>)\n })}\n\n {categories.map((category, categoryIndex) => {\n const dataActive = category.DocketItems.filter(bill => bill.IsActive);\n const dataInactive = category.DocketItems.filter(bill => !bill.IsActive);\n return (<DragDropContext key={categoryIndex} onDragEnd={(result) => this.onDragEnd(result, category.Sequence)}>\n <Droppable droppableId=\"droppable\">\n {(provided, snapshot) => (\n <table\n className=\"dnd-grid-table margin dockets-agenda-grid\"\n ref={provided.innerRef}\n\n >\n <thead className=\"dnd-grid-header\" style={getListStyle(snapshot.isDraggingOver)}>\n <tr>\n <th scope=\"col\" id={'-grabber-column'}></th>\n <th scope=\"col\" id={'-display-column'}></th>\n <th scope=\"col\" id={'-sequence-column'}>\n </th>\n <th scope=\"col\" id={'-bill-column'}>Bill #</th>\n <th scope=\"col\" id={'-patron-column'}>Patron</th>\n <th scope=\"col\" id={'-caption-column'}>Caption</th>\n <th scope=\"col\">Status</th>\n <th scope=\"col\" id={'-actions-column'}>Action</th>\n </tr>\n </thead>\n <tbody>\n {dataActive.map((item, index) => (\n <Draggable key={index} draggableId={\"bills\" + index} index={index}>\n {(provided, snapshot) => (\n <tr\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className={item.IsActive ? 'selected' : 'not-selected'}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style\n )}>\n <td><button id={item.LegislationNumber + '-grabber-button'} className=\"button draggable\">Drag and drop</button></td>\n <td>{index + 1}</td>\n <td>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={item.checked || ''}\n onChange={(e) => this.toggleRow(item.LegislationID, category.Sequence, e)} />\n </td>\n <td>\n <Link to={`/bill-details/${this.props.sessionCode}/${item.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{item.LegislationNumber}</Link>\n </td>\n <td>\n {item.Patrons[0] && item.Patrons[0].PatronDisplayName}\n </td>\n <td>\n {item.LegislationDescription}\n </td>\n <td>\n <span className=\"message-success\">Included</span>\n </td>\n <td>\n <div onClick={() => this.toggleBill(item.LegislationID, category.Sequence)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={item.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </td>\n </tr>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n {dataInactive.map((item, index) => (\n <tr key={index} className=\"tr-inactive\">\n <td></td>\n <td>{/* index + 1 */}</td>\n <td>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={item.checked || ''}\n onChange={(e) => this.toggleRow(item.LegislationID, category.Sequence, e)} />\n </td>\n <td className=\"new-container\">\n <Link to={`/bill-details/${this.props.sessionCode}/${item.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\" style={{ color: 'inherit' }}>{item.LegislationNumber}</Link>\n {!item.DocketItemID && !item.HouseAgendaItemID &&\n <span className=\"corner-new\">NEW</span>\n }\n </td>\n <td>\n {item.Patrons[0] && item.Patrons[0].PatronDisplayName}\n </td>\n <td>\n {item.LegislationDescription}\n </td>\n <td>\n <span>Not Included</span>\n </td>\n <td>\n <div onClick={() => this.toggleBill(item.LegislationID, category.Sequence)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={item.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </Droppable>\n </DragDropContext>)\n })}\n </div>\n );\n }\n}\n\nexport default CommitteeBillsGrid;","import React from 'react';\nimport renderHTML from 'react-render-html';\nimport moment from 'moment-timezone';\nimport { Link } from 'react-router-dom';\n\n\nconst Docket = props => {\n const patronList = props.docket.Patrons.map((patron, index) => {\n return (<React.Fragment key={patron.MemberID}>{patron.PatronDisplayName}{index !== props.docket.Patrons.length - 1 && \", \"}</React.Fragment>)\n });\n return (\n <div>\n <div className=\"details-header parent-li\" style={{ display: \"inline-flex\" }}>\n <h4 className=\"bilnum\"><Link to={`/bill-details/${props.data.SessionCode}/${props.docket.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{props.docket.LegislationNumber}</Link>{!props.hideCaption && \" - \" + props.docket.LegislationDescription}</h4>\n </div>\n <div className=\"list-desc\">\n <div className=\"bold\">\n {!props.hidePatron &&\n patronList.length > 1\n ? <p className=\"patalt\">Patrons: {patronList}</p>\n : !props.hidePatron && <p className=\"patalt\">Patron: {patronList}</p>\n }\n </div>\n <div style={{ marginBottom: '10px' }}>\n {!props.hideSummary &&\n <React.Fragment>\n {props.docket.Summary ? renderHTML(props.docket.Summary) : ''}\n </React.Fragment>\n }\n </div>\n <div>\n {!props.hideTitle &&\n <p>{props.docket.DraftTitle ? renderHTML(props.docket.DraftTitle) : ''}</p>\n }\n </div>\n <div>\n {!props.hideLDNumber &&\n <p className=\"ldrt\">{props.docket.LDNumber}</p>\n }\n </div>\n </div>\n </div>\n )\n}\n\nclass DocketDetailsComponent extends React.Component {\n render() {\n const { data, session } = this.props;\n const categories = data.DocketCategories || data.HouseAgendaCategories;\n const clerks = data.Staff.filter(obj => obj.StaffRoleTypeID === 1);\n const staff = data.Staff.filter(obj => obj.StaffRoleTypeID === 2);\n const committeeHeader = (data.ChamberCode === \"S\" ? \"Senate\" : \"House\") + \" Committee \" + (data.ParentCommitteeName\n ? data.ParentCommitteeName === \"Judiciary\"\n ? \"on the \" + data.ParentCommitteeName\n : data.ParentCommitteeName === \"Courts of Justice\"\n ? \"for \" + data.ParentCommitteeName\n : \"on \" + data.ParentCommitteeName\n : data.CommitteeName === \"Judiciary\"\n ? \"on the \" + data.CommitteeName\n : data.CommitteeName === \"Courts of Justice\"\n ? \"for \" + data.CommitteeName\n : \"on \" + data.CommitteeName\n );\n const subcommitteeHeader = data.ParentCommitteeName && \"Subcommittee on \" + data.CommitteeName;\n const sessionHeader = session.SessionYear + \" \" + session.DisplayName;\n const memberNames = data.CommitteeMember.map((member, index) => {\n //Display Co-chair instead of Chair if there is more than one chairman on the committee\n return (<React.Fragment key={member.MemberID}>\n {data.CommitteeMember.length === 1 ? \"Chair: \" : \"Co-Chair: \"} {member.MemberDisplayName}{index !== data.CommitteeMember.length - 1 && \", \"}\n </React.Fragment>);\n });\n const clerkNames = clerks.map((clerk, index) => {\n //Display Co-chair instead of Chair if there is more than one chairman on the committee\n return (<React.Fragment key={clerk.StaffID}>\n {clerk.FullName}{index !== clerks.length - 1 && \", \"}\n </React.Fragment>);\n });\n const staffNames = staff.map((staf, index) => {\n //Display Co-chair instead of Chair if there is more than one chairman on the committee\n return (<React.Fragment key={staf.StaffID}>\n {staf.FullName}{index !== staff.length - 1 && \", \"}\n </React.Fragment>);\n });\n return (\n <div className=\"bill-theme public-details inner-grid docket-details-wrapper\">\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <hr />\n <div>\n <div className=\"details-header parent-li\">\n <h3 className=\"center\">{committeeHeader}</h3>\n </div>\n {subcommitteeHeader &&\n <div className=\"details-header parent-li\">\n <h3 className=\"center\">{subcommitteeHeader}</h3>\n </div>\n }\n <div className=\"list-desc\">\n <p>{memberNames}</p>\n <br />\n {!this.props.hideClerk &&\n <p className=\"i0\">{clerks.length === 1 ? \"Clerk: \" : \"Clerks: \"} {clerkNames}</p>\n }\n {!this.props.hideStaff && staffNames.length > 0 &&\n <p className=\"i0\">Staff: {staffNames}</p>\n }\n {data.Schedules.map((schedule, scheduleIndex) =>\n <React.Fragment key={scheduleIndex}>\n <p className=\"i0\">Date of Meeting: {moment(data.DocketDate).format(\"MM/DD/YYYY\")}</p>\n {schedule.ScheduleTime && <p className=\"i0\">{\"Time: \" + schedule.ScheduleTime}</p>}\n <p className=\"i0\">Room: {schedule.RoomDescription ? schedule.RoomDescription : \"None\"}</p>\n <p className=\"i0\" style={{ whiteSpace: 'pre-wrap' }}>Comments: {schedule.Comments ? schedule.Comments : \"None\"}</p>\n </React.Fragment>\n )}\n </div>\n </div>\n {categories.map((category, categoryIndex) => {\n let items = category.DocketItems || category.HouseAgendaItems;\n items = items.filter(item => item.IsActive);\n if (category.IsLegislationCategory) {\n return (\n <div key={categoryIndex}>\n {items.length > 0 && items.map(item => <Docket key={item.LegislationID} docket={item} {...this.props} />)}\n </div>\n );\n } else {\n return (\n <div>\n {items.length > 0 &&\n <React.Fragment>\n <div className=\"details-header parent-li\">\n <h4>Notes</h4>\n </div>\n {items.map((item, index) =>\n <div key={index}>\n <div className=\"list-desc\">\n <div>\n <p>{item.Description}</p>\n </div>\n </div>\n </div>\n )}\n </React.Fragment>\n }\n </div>);\n }\n })}\n </div>\n )\n }\n}\n\nexport default DocketDetailsComponent;\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport ReactToPrint from 'react-to-print';\n\nclass DocketPatronList extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n <div>\n <ReactToPrint\n trigger={() => <span><button style={{ float: \"right\" }} type=\"button\" className=\"button print\">Print</button></span>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n <div style={{ paddingBottom: \"40px\" }} ref={el => (this.componentRef = el)}>\n <h3>{this.props.patronListDocketData.CommitteeName}</h3>\n <p>{moment(this.props.patronListDocketData.CalendarDate).format(\"MMMM Do YYYY\")}</p>\n {this.props.patronListDocketData.IsPublic ? <p>Published</p> : <p className=\"dirty\">Not Published</p>}\n <hr />\n {this.props.patronListDocketData && this.props.patronListDocketData.Patrons.map((patron, i) => {\n return (\n <div style={{ marginTop: \"20px\", marginBottom: \"20px\" }} key={i}>\n <span>\n {patron.PatronDisplayName} -\n {patron.Legislation && patron.Legislation.map((item, j) => {\n return (\n <span> {j < patron.Legislation.length - 1 ? item.LegislationNumber + \", \" : item.LegislationNumber}</span>\n )\n })}\n </span>\n </div>\n )\n })}\n </div>\n <div className=\"button-bar floating-button-bar\" style={{ paddingBottom: \"15px\", paddingRight: \"15px\" }}>\n <button onClick={() => this.props.togglePatronList()} className=\"button\" type=\"button\" style={{ width: \"175px\" }}>Return to Docket Form</button>\n <div />\n </div>\n </div>\n )\n }\n}\n\nexport default DocketPatronList;","import React from 'react';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport ReactToPrint from \"react-to-print\";\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport CommitteeBillsGrid from './lis-committee-bills-grid';\nimport DocketDetailsComponent from '../../../lis-shared/lis-dockets/lis-docket-details'\nimport DocketPatronList from './lis-docket-patron-list';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { scheduleActionCreators } from '../../../stores/lis-schedule-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport moment from 'moment-timezone';\nimport DatePicker from 'react-datepicker';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { Prompt } from 'react-router';\n\nconst PUBLISH_DOCKET = true;\nconst UNPUBLISH_DOCKET = false;\nconst SAVE_DOCKET = false;\n\nconst TIME_REGEX = /[0-9]:[0-9]{2}\\s[AP]M/i;\n\nclass DocketFormComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoaded: false,\n data: '',\n categories: [],\n selectAllActive: false,\n selectAllInactive: false,\n showPreview: false,\n isSaving: false,\n pendingSave: false,\n committeeClerk: [],\n committeeStaff: [],\n committeeLeadership: '',\n meetingRoomsList: [],\n selectedSession: '',\n hideClerk: false,\n hideStaff: false,\n hidePatron: false,\n hideSummary: false,\n hideTitle: false,\n hideLDNumber: false,\n hideCaption: false,\n showPatronList: false,\n patronListDocketByIdData: '',\n sessionBills: [],\n isDirty: false\n };\n this.togglePreview = this.togglePreview.bind(this);\n this.updateDocket = this.updateDocket.bind(this);\n this.toggleAllActive = this.toggleAllActive.bind(this);\n this.handleSequenceChange = this.handleSequenceChange.bind(this);\n this.saveDocket = this.saveDocket.bind(this);\n this.handleMeetingRoomChange = this.handleMeetingRoomChange.bind(this);\n this.toggleDocketSection = this.toggleDocketSection.bind(this);\n this.downloadWordFile = this.downloadWordFile.bind(this);\n this.togglePatronList = this.togglePatronList.bind(this);\n this.getBill = this.getBill.bind(this);\n this.handleCommentHeight = this.handleCommentHeight.bind(this);\n }\n\n componentDidMount() {\n var id = this.props.match.params.docketid;\n var docketBillParams = '?docketId=' + id;\n this.props.actions.getDocketById(docketBillParams, true)\n .then(() => {\n this.props.actions.getCommitteeList(\"includeSubcommittees=true&effectiveDate=\" + this.props.session.sessionList.find(x => x.SessionID === this.props.calendar.docketByIdData.SessionID).SessionEvents.find(x => x.EventTypeID === 1).ActualDate)\n this.getDocketBills(this.props.calendar.docketByIdData);\n if (this.props.calendar.docketByIdData.CalendarDisplay) {\n for (let i = 0; i < this.props.calendar.docketByIdData.CalendarDisplay.length; i++) {\n switch (this.props.calendar.docketByIdData.CalendarDisplay[i].DisplayColumn) {\n case (\"Staffs Name\"):\n this.setState({\n hideClerk: !this.props.calendar.docketByIdData.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Clerk Name\"):\n this.setState({\n hideStaff: !this.props.calendar.docketByIdData.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Chief Patron\"):\n this.setState({\n hidePatron: !this.props.calendar.docketByIdData.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Summary\"):\n this.setState({\n hideSummary: !this.props.calendar.docketByIdData.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Title\"):\n this.setState({\n hideTitle: !this.props.calendar.docketByIdData.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"LD Number\"):\n this.setState({\n hideLDNumber: !this.props.calendar.docketByIdData.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Caption\"):\n this.setState({\n hideCaption: !this.props.calendar.docketByIdData.CalendarDisplay[i].IsDisplayed\n });\n break;\n default:\n break;\n }\n }\n }\n\n this.props.actions.getBillNumbers('?sessionID=' + this.props.calendar.docketByIdData.SessionID).then(() => {\n let billNumbers = this.props.bills.billNumbers;\n billNumbers.forEach(bill => {\n bill.label = bill.LegislationNumber;\n bill.value = bill.LegislationNumber;\n })\n this.setState({\n sessionBills: billNumbers\n });\n })\n\n this.props.actions.getCalendarCategoriesReferences();\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n message: 'Failed to retrieve data'\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n togglePreview() {\n this.setState(state => ({\n showPreview: !state.showPreview\n }), () => {\n if (this.state.showPreview) {\n window.scrollTo({\n top: 0,\n left: 0,\n });\n }\n });\n }\n\n // GET MEETING ROOMS REFERENCES\n getMeetingRoomsReferences(chamberCode) {\n var params = '?chamberCode=' + chamberCode;\n\n this.props.actions.getMeetingRoomReferences(params).then(() => {\n const meetingRoomsList = Array.from(this.props.schedule.meetingRoomReferences, obj => {\n const rObj = {\n ...obj,\n value: obj.VoteRoomID,\n label: obj.Description + ' ' + (obj.RoomNumber || '')\n };\n return rObj;\n });\n this.setState({\n meetingRoomsList: meetingRoomsList,\n });\n })\n }\n\n // GET BILLS FOR DOCKET GRID\n getDocketBills(data) {\n const categories = data.DocketCategories;\n\n //This will be used to tell if any bills have already been saved to the docket. If they have then enable the preview button.\n //If not then grey out the preview button until a save has been performed\n let noSavedItems = true;\n let billList = [];\n categories.forEach(category => {\n billList = category.DocketItems;\n billList.forEach(element => {\n //Item has a docket ID so this means that a bill has been previously saved to this docket\n if (element.DocketItemID) {\n noSavedItems = false;\n }\n });\n });\n\n\n // Set Clerk & Staff\n let committeeClerk = [];\n let committeeStaff = [];\n\n\n if (data.Staff) {\n committeeClerk = data.Staff.filter(clerk => clerk.StaffRoleTypeID === 1);\n committeeStaff = data.Staff.filter(staff => staff.StaffRoleTypeID === 2);\n }\n\n // Set Committee Leadership\n let committeeLeadership = '';\n\n if (data.CommitteeMember) {\n data.CommitteeMember.forEach((element, i) => {\n var memberDelimiter = data.CommitteeMember.length === 1 || i + 1 !== data.CommitteeMember.length ? '' : ', ';\n committeeLeadership = committeeLeadership + memberDelimiter + element.Title + ': ' + element.MemberDisplayName;\n });\n }\n\n this.setState({\n pendingSave: noSavedItems,\n committeeLeadership: committeeLeadership,\n committeeClerk: committeeClerk,\n committeeStaff: committeeStaff,\n data: data,\n isLoaded: true\n }, () => {\n this.getMeetingRoomsReferences(data.ChamberCode)\n this.props.actions.getSessionById(data.SessionID)\n .then(() =>\n this.setState({ selectedSession: this.props.session.selectedSession })\n );\n this.state.data.Schedules.forEach((schedule, i) => {\n this.handleCommentHeight(i)\n })\n });\n\n //Get the calendar category types. This is used to create a blank notes category\n this.props.actions.getCalendarCategoriesReferences()\n .then(() => {\n // Find out of there is a notes category already saved to the docket. If there isn't then add a default one.\n // Notes categories should be the only non-legislative category\n let notesCategories = categories.filter(category => !category.IsLegislationCategory);\n if (notesCategories.length === 0) {\n // Using the Senate Docket Notes category for notes\n let notesCategory = this.props.calendar.calendarCategoriesReferences.find(calCategory => calCategory.CategoryCode === \"CSNOT\");\n if (notesCategory) {\n notesCategory.Sequence = 1;\n notesCategory.DocketItems = [\n {\n Description: '',\n Sequence: 1,\n }\n ];\n categories.unshift(notesCategory);\n }\n }\n // Set the categorys' Sequence to sequential order\n categories.forEach((cat, catIndex) => {\n cat.Sequence = catIndex + 1;\n cat.DocketItems.forEach((item, itemIndex) => {\n if (item.IsActive) {\n item.Sequence = itemIndex + 1;\n } else {\n item.Sequence = null;\n }\n });\n });\n this.setState({\n categories: categories\n });\n });\n }\n\n handleSequenceChange(categories) {\n this.setState({\n categories: categories,\n isDirty: true\n });\n }\n\n handleInputChange(index, value, key) {\n let data = { ...this.state.data };\n data.Schedules[index][key] = value;\n this.setState({\n data: data,\n isDirty: true\n }, () => {\n if (key === 'Comments') { this.handleCommentHeight(index); }\n });\n }\n\n convertTime24to12(time24Hr) {\n if (!time24Hr) return null;\n let [hours, minutes] = time24Hr.split(':');\n let modifier = 'AM';\n\n if (hours === '00') {\n hours = '12';\n } else if (parseInt(hours, 10) >= 12) {\n hours = hours === '12' ? hours : parseInt(hours, 10) - 12;\n modifier = 'PM';\n }\n\n return `${parseInt(hours)}:${minutes} ${modifier}`;\n }\n\n handleMeetingRoomChange = (index, value) => {\n let data = { ...this.state.data };\n data.Schedules[index].VoteRoomID = value.VoteRoomID;\n data.Schedules[index].RoomDescription = value.Description;\n this.setState({\n selectedMeetingRoom: value,\n isDirty: true\n });\n }\n\n updateDocket(categories) {\n this.setState({\n categories: categories,\n pendingSave: true,\n isDirty: true\n });\n }\n\n toggleAllActive(active) {\n let checked = false;\n if (active) {\n checked = !this.state.selectAllActive\n this.setState({\n selectAllActive: checked\n });\n } else {\n checked = !this.state.selectAllInactive\n this.setState({\n selectAllInactive: checked\n });\n }\n let categories = [...this.state.categories];\n categories.forEach(category => {\n let items = category.DocketItems;\n items.forEach(bill => {\n if (bill.IsActive === active || (active === false && !bill.IsActive)) {\n bill.checked = checked\n }\n });\n });\n this.updateDocket(categories);\n }\n\n saveDocket(publishFlag) {\n let data = { ...this.state.data };\n let unpublishing = false;\n if (publishFlag === PUBLISH_DOCKET) {\n //This function was initiated by the publish button so go ahead and publish the docket\n data.IsPublic = PUBLISH_DOCKET;\n // Set the schedule to public as well\n data.Schedules.forEach(schedule => schedule.IsPublic = PUBLISH_DOCKET);\n } else if (this.state.data.IsPublic) {\n //The docket is already published, unpublish the docket\n data.IsPublic = UNPUBLISH_DOCKET;\n unpublishing = true;\n //Unpublish the schedule as well\n data.Schedules.forEach(schedule => schedule.IsPublic = UNPUBLISH_DOCKET);\n } else {\n //This function was initiated by the save button so do not publish the docket\n data.IsPublic = SAVE_DOCKET;\n }\n\n //These parts are not needed when saving and will cause the save to fail\n delete data.Staff;\n delete data.CommitteeMember;\n delete data.DocketFiles\n\n let categories = [...this.state.categories];\n categories.forEach(category => {\n category.hasNotes = false;\n let items = category.DocketItems;\n items.forEach((item, index) => {\n // set IsActive to false instead of just 'null'\n if (!item.IsActive) {\n item.IsActive = false;\n } else {\n //Fix the Sequence attribute to match what is displayed on the screen\n item.Sequence = index + 1;\n }\n //Only add the notes category to the save if it has any content\n if (!category.IsLegislationCategory) {\n if (item.Description.replace(/\\s/g, '')) {\n category.hasNotes = true;\n }\n }\n });\n });\n //Filter out the notes categories that do not have any notes\n categories = categories.filter(category => {\n if (category.IsLegislationCategory || category.hasNotes) {\n return category;\n }\n });\n data.DocketCategories = categories;\n //Disable the save button and the form while it is saving\n this.setState({ isSaving: true }, () => {\n this.props.actions.saveDocket({ Dockets: [data] })\n .then(() => {\n if (this.state.showPreview || data.IsPublic) {\n let content = this.componentRef.innerHTML.replace(/\\\\\"/g, '');\n this.props.actions.sendDocketHtml({ CommitteeNumber: this.props.committee.committeeList.find(x => x.CommitteeID === data.CommitteeID).CommitteeNumber, DocketDate: data.DocketDate, DocketNumber: data.DocketNumber, ContentHTML: content });\n }\n if (publishFlag) {\n this.setState({\n isDirty: false\n }, () => {\n this.props.history.push('/docket-management');\n this.props.actions.makeToast([{ message: \"Publish Success\", type: \"success\" }])\n })\n } else {\n const docketSave = this.props.calendar.docketSave;\n //Add back a blank notes category if it is missing\n let notesCategories = docketSave.DocketCategories.filter(category => !category.IsLegislationCategory);\n if (notesCategories.length === 0) {\n // Using the Senate Docket Notes category for notes\n let notesCategory = this.props.calendar.calendarCategoriesReferences.find(calCategory => calCategory.CategoryCode === \"CSNOT\");\n if (notesCategory) {\n notesCategory.Sequence = 1;\n notesCategory.DocketItems = [\n {\n Description: '',\n Sequence: 1,\n }\n ];\n docketSave.DocketCategories.unshift(notesCategory);\n }\n }\n this.setState({\n data: docketSave,\n categories: docketSave.DocketCategories,\n pendingSave: false,\n isSaving: false,\n isDirty: false\n }, () => {\n if (unpublishing) {\n this.props.actions.makeToast([{ message: \"Unpublish Success\", type: \"success\" }])\n } else {\n this.props.actions.makeToast([{ message: \"Save Success\", type: \"success\" }])\n }\n this.state.data.Schedules.forEach((schedule, i) => {\n this.handleCommentHeight(i);\n })\n });\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({ isSaving: false });\n this.props.actions.makeToast([{ message: (this.props.calendar.docketSaveError.includes(\"Meeting Started\") ? \"Cannot Unpublish Docket After Meeting Has Started\" : \"Save Failed\"), type: \"failure\" }])\n console.log(err)\n });\n });\n\n }\n\n toggleDocketSection(section) {\n let data = { ...this.state.data };\n\n this.setState(state => ({\n [section]: !state[section]\n }), () => {\n //If the section has already been toggled then just modify the column\n //Otherwise insert the column and set it to what the column was just toggled to\n switch (section) {\n case (\"hideStaff\"):\n if (data.CalendarDisplay.find(x => x.DisplayColumn === \"Staffs Name\")) {\n data.CalendarDisplay.find(x => x.DisplayColumn === \"Staffs Name\").IsDisplayed = !this.state[section];\n } else {\n data.CalendarDisplay.push({\n DisplayColumn: \"Staffs Name\",\n IsDisplayed: !this.state[section]\n });\n }\n break;\n case (\"hideClerk\"):\n if (data.CalendarDisplay.find(x => x.DisplayColumn === \"Clerk Name\")) {\n data.CalendarDisplay.find(x => x.DisplayColumn === \"Clerk Name\").IsDisplayed = !this.state[section];\n } else {\n data.CalendarDisplay.push({\n DisplayColumn: \"Clerk Name\",\n IsDisplayed: !this.state[section]\n });\n }\n break;\n case (\"hidePatron\"):\n if (data.CalendarDisplay.find(x => x.DisplayColumn === \"Chief Patron\")) {\n data.CalendarDisplay.find(x => x.DisplayColumn === \"Chief Patron\").IsDisplayed = !this.state[section];\n } else {\n data.CalendarDisplay.push({\n DisplayColumn: \"Chief Patron\",\n IsDisplayed: !this.state[section]\n });\n }\n break;\n case (\"hideSummary\"):\n if (data.CalendarDisplay.find(x => x.DisplayColumn === \"Summary\")) {\n data.CalendarDisplay.find(x => x.DisplayColumn === \"Summary\").IsDisplayed = !this.state[section];\n } else {\n data.CalendarDisplay.push({\n DisplayColumn: \"Summary\",\n IsDisplayed: !this.state[section]\n });\n }\n break;\n case (\"hideTitle\"):\n if (data.CalendarDisplay.find(x => x.DisplayColumn === \"Title\")) {\n data.CalendarDisplay.find(x => x.DisplayColumn === \"Title\").IsDisplayed = !this.state[section];\n } else {\n data.CalendarDisplay.push({\n DisplayColumn: \"Title\",\n IsDisplayed: !this.state[section]\n });\n }\n break;\n case (\"hideLDNumber\"):\n if (data.CalendarDisplay.find(x => x.DisplayColumn === \"LD Number\")) {\n data.CalendarDisplay.find(x => x.DisplayColumn === \"LD Number\").IsDisplayed = !this.state[section];\n } else {\n data.CalendarDisplay.push({\n DisplayColumn: \"LD Number\",\n IsDisplayed: !this.state[section]\n });\n }\n break;\n case (\"hideCaption\"):\n if (data.CalendarDisplay.find(x => x.DisplayColumn === \"Caption\")) {\n data.CalendarDisplay.find(x => x.DisplayColumn === \"Caption\").IsDisplayed = !this.state[section];\n } else {\n data.CalendarDisplay.push({\n DisplayColumn: \"Caption\",\n IsDisplayed: !this.state[section]\n });\n }\n break;\n default:\n break;\n }\n this.setState({\n data: data,\n isDirty: true\n })\n });\n }\n\n downloadWordFile() {\n const html = `<html>\n <head><meta charset=\"UTF-8\"></head>\n <body>${this.componentRef.innerHTML}</body>\n </html>`;\n const filename = `${this.state.data.CommitteeName} Docket ${this.state.data.DocketDate}.doc`;\n\n let downloadLink = document.createElement('a');\n downloadLink.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + encodeURIComponent(html));\n downloadLink.setAttribute('download', filename);\n\n downloadLink.style.display = 'none';\n document.body.appendChild(downloadLink);\n downloadLink.click();\n\n document.body.removeChild(downloadLink);\n }\n\n togglePatronList() {\n //Have to pull the list fresh every time we view the patron list in case there was a save\n if (this.state.showPatronList === false) {\n this.props.actions.getPatronListDocketById(\"?calendarID=\" + this.props.match.params.docketid)\n .then(() => {\n this.setState({\n showPatronList: true\n })\n })\n } else {\n this.setState({\n showPatronList: false\n })\n }\n }\n\n getBill(legislationID, legislationKey) {\n this.props.actions.getBill(legislationID)\n .then(() => {\n let categories = [...this.state.categories];\n let bill = {\n LegislationDescription: this.props.bills.bill.Description,\n LegislationID: this.props.bills.bill.LegislationID,\n LegislationKey: legislationKey,\n LegislationNumber: this.props.bills.bill.LegislationNumber,\n Patrons: this.props.bills.bill.Patrons,\n Summary: this.props.bills.bill.SummaryVersion,\n IsActive: true\n };\n\n //If we don't already have the senate general category in this docket then add it and push the bill to it. \n //Otherwise push the new bill to the category.\n if (!categories.find(x => x.CategoryCode === \"CSGEN\")) {\n let category = this.props.calendar.calendarCategoriesReferences.find(x => x.CategoryCode === \"CSGEN\");\n //Set new category's Sequence to be the current max sequence value +1\n category.Sequence = Math.max.apply(Math, categories.map((c) => { return c.Sequence; })) + 1;\n bill.Sequence = 1;\n category.DocketItems = [bill];\n categories.push(category);\n } else {\n let index = categories.findIndex(x => x.CategoryCode === \"CSGEN\");\n //insert the newly included bill alphabetically\n const nextHighestActiveLegislationNumber = categories[index].DocketItems.filter(i => i.IsActive && i.Sequence).find(i => i.LegislationNumber.substr(0, 2).localeCompare(bill.LegislationNumber.substr(0, 2)) === 1 || (i.LegislationNumber.substr(0, 2).localeCompare(bill.LegislationNumber.substr(0, 2)) === 0 && i.LegislationKey > bill.LegislationKey));\n if (nextHighestActiveLegislationNumber) {\n const sequence = nextHighestActiveLegislationNumber.Sequence\n categories[index].DocketItems.filter(i => i.IsActive && i.Sequence >= nextHighestActiveLegislationNumber.Sequence).forEach(i => i.Sequence++)\n bill.Sequence = sequence;\n } else {\n const currentSequences = categories[index].DocketItems.filter(i => i.Sequence).map(i => { return i.Sequence; });\n if (currentSequences.length) {\n bill.Sequence = (Math.max.apply(Math, currentSequences) + 1) || 1;\n } else {\n bill.Sequence = 1;\n }\n }\n categories[index].DocketItems.push(bill);\n categories[index].DocketItems.sort((a, b) => (a.Sequence != null ? a.Sequence : Infinity) - (b.Sequence != null ? b.Sequence : Infinity))\n }\n\n this.setState({\n categories: categories\n })\n })\n }\n\n handleCommentHeight(index) {\n let data = { ...this.state.data };\n if (data.Schedules[index] && data.Schedules[index].Comments) {\n const height = Math.round(data.Schedules[index].Comments.length / 120) * 20 + 40;\n data.Schedules[index].commentHeight = height.toString() + 'px';\n this.setState({\n data\n })\n }\n }\n\n render() {\n const { committeeName, committeeDate, message, data } = this.state;\n if (message) {\n return (\n <div className=\"dlas-forms\">\n <span>{message}</span>\n </div>\n );\n } else {\n if (this.state.showPreview) {\n return (\n <div>\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <div className=\"flex-row\">\n <div className=\"advanced-search dlas-forms\">\n <h2>Docket Preview</h2>\n <div className=\"checkbox-container\">\n <div className=\"inner-grid two\">\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleDocketSection('hideStaff')} checked={!this.state.hideStaff} /> Staff name</label>\n </div>\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleDocketSection('hideClerk')} checked={!this.state.hideClerk} /> Clerk name</label>\n </div>\n </div>\n <hr className=\"faded-line\" />\n <div className=\"inner-grid two\">\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleDocketSection('hideTitle')} checked={!this.state.hideTitle} /> Title</label>\n </div>\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleDocketSection('hideSummary')} checked={!this.state.hideSummary} /> Summary</label>\n </div>\n </div>\n <hr className=\"faded-line\" />\n <div className=\"inner-grid two\">\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleDocketSection('hidePatron')} checked={!this.state.hidePatron} /> Chief Patron</label>\n </div>\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleDocketSection('hideLDNumber')} checked={!this.state.hideLDNumber} /> LD Number</label>\n </div>\n </div>\n <hr className=\"faded-line\" />\n <div className=\"inner-grid two\">\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleDocketSection('hideCaption')} checked={!this.state.hideCaption} /> Caption</label>\n </div>\n <div />\n </div>\n </div>\n </div>\n <div className=\"inline-list\">\n <button type=\"button\" onClick={this.downloadWordFile} className=\"button-link with-icon\"><span className=\"icon word\"></span> View in Word</button>\n <ReactToPrint\n trigger={() => <button type=\"button\" className=\"button-link with-icon\"><span className=\"icon print\"></span> Print</button>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n </div>\n <div ref={el => (this.componentRef = el)}>\n <DocketDetailsComponent\n data={this.state.data}\n dockets={this.state.categories}\n session={this.state.selectedSession}\n selectedMeetingRoom={this.state.selectedMeetingRoom}\n toggleDocketSection={this.toggleDocketSection}\n hideClerk={this.state.hideClerk}\n hideStaff={this.state.hideStaff}\n hidePatron={this.state.hidePatron}\n hideSummary={this.state.hideSummary}\n hideTitle={this.state.hideTitle}\n hideLDNumber={this.state.hideLDNumber}\n hideCaption={this.state.hideCaption}\n />\n </div>\n <div className=\"button-bar\">\n <div></div>\n <div className=\"align-right\">\n <button onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n <button onClick={() => this.saveDocket(PUBLISH_DOCKET)} type=\"button\" disabled={this.state.isSaving || this.state.disablePublish} className=\"button\">Publish</button>\n </div>\n </div>\n </div>\n );\n } else if (this.state.showPatronList) {\n return (\n <DocketPatronList\n patronListDocketData={this.props.calendar.patronListDocketByIdData}\n togglePatronList={this.togglePatronList}\n />\n )\n } else {\n const convertTime12to24 = (time12h) => {\n if (!time12h) return '';\n const [time, modifier] = time12h.split(' ');\n\n let [hours, minutes] = time.split(':');\n\n if (hours === '12') {\n hours = '00';\n }\n\n if (modifier === 'PM') {\n hours = parseInt(hours, 10) + 12;\n } else {\n hours = hours.padStart(2, '0');\n }\n\n return `${hours}:${minutes}`;\n }\n return (\n <React.Fragment>\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <h1>{committeeName} {committeeDate}</h1>\n <div className=\"user-forms\" style={{ paddingBottom: \"45px\" }}>\n {!this.state.isLoaded &&\n <div className=\"center-spinner spinner\">Loading results...</div>\n }\n {this.state.isLoaded &&\n <div className=\"dlas-forms\">\n <span className=\"error-message\">{message}</span>\n <form>\n <fieldset className=\"fieldset-collapse fieldset-open\">\n <legend>Docket Information for <strong>{data.CommitteeName}</strong> on <strong>{moment(data.DocketDate).format('MM/DD/YYYY')}</strong></legend>\n <div className=\"multi-row eight-and-one no-margin\">\n <div>\n <div className=\"multi-row third no-margin\">\n <div>\n <Fields.TextInput\n id=\"leadership\"\n label=\"Committee Leadership\"\n type=\"text\"\n placeholder=\"Committee Leadership\"\n value={this.state.committeeLeadership}\n disabled\n />\n </div>\n <div>\n <Fields.TextInput\n id=\"clerk\"\n label=\"Committee Clerk\"\n type=\"text\"\n placeholder=\"Committee Clerk\"\n value={this.state.committeeClerk.map(clerk => clerk.FullName).join(', ')}\n disabled\n />\n </div>\n <div>\n <Fields.TextInput\n id=\"staff\"\n label=\"Committee Staff\"\n type=\"text\"\n placeholder=\"Committee Staff\"\n value={this.state.committeeStaff.map(staff => staff.FullName).join(', ')}\n disabled\n />\n </div>\n </div>\n {data.Schedules.map((schedule, index) =>\n <React.Fragment key={index}>\n <div className=\"multi-row one-and-three no-margin\" style={{ margin: 'initial', width: '60%' }}>\n <div>\n <label for=\"meetingTime\">Meeting Time</label>\n {TIME_REGEX.test(schedule.ScheduleTime) && <div className='icon clock' title=\"Correct Time Format\"/>}\n <div>\n <input\n id=\"meetingTime\"\n value={schedule.ScheduleTime}\n style={{ maxHeight: '32px', fontFamily: 'arial' }}\n onChange={(e) => this.handleInputChange(index, e ? e.target.value : e, 'ScheduleTime')}\n />\n </div>\n </div>\n <div>\n <label>Meeting Room</label>\n <Fields.Dropdown\n value={this.state.meetingRoomsList.find(room => room.VoteRoomID === schedule.VoteRoomID)}\n placeholder=\"Meeting Room\"\n options={this.state.meetingRoomsList}\n id=\"meetingRoomsDropdown\"\n onChange={(value) => this.handleMeetingRoomChange(index, value)}\n />\n </div>\n </div>\n <div className=\"single-row no-margin\">\n <div>\n <Fields.TextArea\n id=\"comments\"\n label=\"Comments\"\n type=\"text\"\n placeholder=\"Comments\"\n value={schedule.Comments}\n style={{ height: schedule.commentHeight || '40px' }}\n onChange={(e) => this.handleInputChange(index, e.target.value, 'Comments')}\n />\n </div>\n </div>\n </React.Fragment>\n )}\n\n </div>\n <div>\n {this.state.data.IsPublic && <button type=\"button\" onClick={this.downloadWordFile} className=\"button-link with-icon\" style={{ marginLeft: \"15px\" }}><span className=\"icon word\"></span> View in Word</button>}\n <div className=\"published-status\">\n {this.state.data.IsPublic ? <span>Published</span> : <span className=\"dirty\">Not Published</span>}\n </div>\n </div>\n </div>\n <CommitteeBillsGrid\n categories={this.state.categories}\n updateDocket={this.updateDocket}\n handleSequenceChange={this.handleSequenceChange}\n toggleAllActive={this.toggleAllActive}\n chamberCode={this.state.data.ChamberCode}\n sessionCode={this.state.data.SessionCode}\n sessionBills={this.state.sessionBills}\n getBill={this.getBill}\n />\n </fieldset>\n <div className=\"button-bar floating-button-bar\" style={{ paddingBottom: \"15px\", paddingRight: \"15px\" }}>\n <button onClick={this.togglePatronList} className=\"button\" type=\"button\" style={{ width: \"150px\" }}>Show Patron List</button>\n <div className=\"align-right\">\n <button disabled={this.state.isSaving} type=\"button\" onClick={() => this.saveDocket(SAVE_DOCKET)} className=\"button\">{this.state.isSaving ? \"Saving...\" : this.state.data.IsPublic ? \"Unpublish\" : \"Save\"}</button>\n <button disabled={this.state.pendingSave} onClick={this.togglePreview} className=\"button\" type=\"button\">Preview</button>\n </div>\n </div>\n </form>\n {this.state.data.IsPublic &&\n <div ref={el => (this.componentRef = el)} style={{ display: \"none\" }}>\n <DocketDetailsComponent\n data={this.state.data}\n dockets={this.state.categories}\n session={this.state.selectedSession}\n selectedMeetingRoom={this.state.selectedMeetingRoom}\n toggleDocketSection={this.toggleDocketSection}\n hideClerk={this.state.hideClerk}\n hideStaff={this.state.hideStaff}\n hidePatron={this.state.hidePatron}\n hideSummary={this.state.hideSummary}\n hideTitle={this.state.hideTitle}\n hideLDNumber={this.state.hideLDNumber}\n hideCaption={this.state.hideCaption}\n />\n </div>\n }\n </div>\n }\n </div>\n </React.Fragment>\n );\n }\n }\n }\n};\n\nconst DocketManagementForm = connect(\n (state) => {\n const { committee, calendar, session, nav, schedule, bills } = state;\n return {\n committee,\n calendar,\n session,\n nav,\n schedule,\n bills\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, calendarActionCreators, committeeActionCreators, sessionActionCreators, navActionCreators, scheduleActionCreators), dispatch)\n }\n }\n)(DocketFormComponent)\n\nexport default DocketManagementForm;\n\n\n\n\n\n\n\n\n","import React from 'react';\nimport { Route } from 'react-router';\nimport DocketGrid from './lis-docket-grid';\nimport DocketForm from './lis-docket-form';\n\nclass DocketManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedSession: '',\n selectedCommittee: '',\n selectedSubcommittee: ''\n };\n this.handleDropdownChange = this.handleDropdownChange.bind(this);\n }\n\n handleDropdownChange(newState, callback) {\n this.setState({\n ...newState\n }, () => callback());\n }\n\n render() {\n return (\n <div>\n <Route exact path={[\"/docket-management\", \"/docket-management/:committeeid\"]} render={props => <DocketGrid\n {...props}\n selectedSession={this.state.selectedSession}\n selectedCommittee={this.state.selectedCommittee}\n selectedSubcommittee={this.state.selectedSubcommittee}\n handleDropdownChange={this.handleDropdownChange}\n />} />\n <Route path={`${this.props.match.path}/:committeeid/edit-docket/:docketid`} component={DocketForm} />\n </div>\n )\n }\n}\n\nexport default DocketManagement;","import React from 'react';\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { connect } from 'react-redux';\nimport moment from 'moment-timezone';\nimport DatePicker from \"react-datepicker\";\nimport { cancelRequest } from '../../../services/request.service';\n\nclass CalendarGrid extends React.Component {\n constructor(props) {\n super(props);\n let nextBusinessDay;\n if (moment().day() === 5 || moment().day() === 6) { // friday or saturday, show monday\n nextBusinessDay = moment().add(8 - moment().day(), 'days')\n } else { // other days, show next day\n nextBusinessDay = moment().add(1, 'days')\n }\n this.state = {\n isLoaded: true,\n selectedSession: '',\n sessionOptions: [],\n selectedChamber: '',\n chamberOptions: [\n { label: \"House\", value: \"H\" },\n { label: \"Senate\", value: \"S\" }\n ],\n calendarDate: nextBusinessDay,\n calendarList: [],\n showCreateSuccess: false,\n createFailureMessage: '',\n isAdding: false,\n calendarToBeDeleted: 0,\n calendarBeingDeleted: -1,\n showDeleteWarning: false\n }\n\n this.getCalendars = this.getCalendars.bind(this);\n this.createCalendar = this.createCalendar.bind(this);\n\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleSessionSelectChange = this.handleSessionSelectChange.bind(this);\n this.handleChamberChange = this.handleChamberChange.bind(this);\n this.deleteCalendar = this.deleteCalendar.bind(this);\n this.toggleDeleteCalendar = this.toggleDeleteCalendar.bind(this);\n }\n\n handleSessionSelectChange(value) {\n //The session selectors value has been changed. \n this.props.handleDropdownChange('selectedSession', value, () => this.getCalendars());\n }\n\n handleChamberChange(value) {\n //The chamber selectors value has been changed. \n this.props.handleDropdownChange('selectedChamber', value, () => this.getCalendars());\n }\n\n handleDateChange(value) {\n //Used when inserting a new calendar\n this.setState({\n calendarDate: moment(value)\n });\n }\n\n createCalendar() {\n if (this.props.selectedSession && this.props.selectedChamber) {\n this.setState({\n isAdding: true\n }, () => {\n //See if there are any other calendars with the selected date\n const calendarWithSameDate = this.state.calendarList.filter(calendar => moment(this.state.calendarDate).isSame(moment(calendar.CalendarDate), 'day'));\n let calendarNumber = calendarWithSameDate.length + 1;\n let createCalendarObj = {\n Calendars: [{\n CalendarDate: this.state.calendarDate.format(\"MM/DD/YYYY\"),\n IsPublic: false,\n CalendarType: \"Chamber\",\n Comments: '',\n Description: 'Calendar',\n CalendarTypeID: 1,\n SessionID: this.props.selectedSession.SessionID,\n VoteRoomID: 1,\n ChamberCode: this.props.selectedChamber.value,\n CalendarNumber: calendarNumber\n }]\n };\n this.props.actions.createCalendar(createCalendarObj)\n .then(() => {\n this.setState({\n showCreateSuccess: true,\n createFailureMessage: ''\n });\n this.getCalendars()\n setTimeout(() => {\n this.setState({\n showCreateSuccess: false,\n createFailureMessage: '',\n isAdding: false\n })\n }, 3000);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n showCreateSuccess: false,\n createFailureMessage: 'Calendar Creation Failed',\n });\n this.getCalendars()\n setTimeout(() => {\n this.setState({\n showCreateSuccess: false,\n createFailureMessage: '',\n isAdding: false\n })\n }, 3000);\n });\n });\n } else {\n this.setState({\n createFailureMessage: \"Please select a session and chamber\"\n });\n setTimeout(() => {\n this.setState({\n createFailureMessage: '',\n });\n }, 3000);\n }\n }\n\n toggleDeleteCalendar(rowIndex) {\n this.setState({\n calendarToBeDeleted: rowIndex,\n showDeleteWarning: !this.state.showDeleteWarning\n })\n }\n\n deleteCalendar(rowIndex) {\n this.setState({\n calendarBeingDeleted: rowIndex\n });\n // Before being able to delete the calendar we need to get the mod dates. So get the calendar\n this.props.actions.getCalendarById('?calendarId=' + this.state.calendarList[rowIndex].CalendarID, true)\n .then(() => {\n let calendarData = this.props.calendar.calendarGet;\n // Now that we have the calendar data add a deletion date then save it\n calendarData.DeletionDate = moment();\n return this.props.actions.saveCalendar({ Calendars: [calendarData] })\n }).then(() => {\n this.setState({\n showDeleteSuccess: true,\n calendarBeingDeleted: -1,\n showDeleteWarning: false\n });\n this.getCalendars();\n setTimeout(() => {\n this.setState({\n showDeleteSuccess: false\n })\n }, 3000);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n calendarBeingDeleted: -1,\n deleteFailureMessage: 'Calendar failed to be deleted'\n });\n console.log(err)\n setTimeout(() => {\n this.setState({\n deleteFailureMessage: '',\n });\n }, 3000);\n });\n }\n\n componentDidMount() {\n this.props.actions.getSessionShallowList('isActive=true').then(() => {\n if (this.props.session.sessionShallowList !== undefined) {\n let selectedSession = this.props.selectedSession;\n let selectedChamber = this.props.selectedChamber;\n //Format data for dropdown\n let sessionList = [...this.props.session.sessionShallowList];\n sessionList.forEach(session => {\n session.label = session.SessionYear + ' ' + session.DisplayName;\n session.value = session.SessionID;\n if (session.IsDefault && !selectedSession) {\n selectedSession = session;\n }\n });\n //set the default chamber to house or senate depending on the user's role\n let disableChamberSelector = false;\n\n if (!this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\")) {\n //Find if the user is a house calendar editor, if so select house, otherwise select senate, and disable the chamber selector\n selectedChamber = this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseCalendarEditor\") ? this.state.chamberOptions.find(chamber => chamber.label === \"House\") : this.state.chamberOptions.find(chamber => chamber.label === \"Senate\");\n disableChamberSelector = true;\n }\n this.setState({\n sessionOptions: sessionList,\n disableChamberSelector: disableChamberSelector\n });\n this.props.handleDropdownChange('selectedSession', selectedSession, () => {\n this.props.handleDropdownChange('selectedChamber', selectedChamber, () => this.getCalendars());\n });\n\n }\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getCalendars() {\n const { selectedSession, selectedChamber } = this.props;\n if (selectedSession && selectedChamber) {\n this.setState({\n isLoaded: false\n });\n //Get the calendars\n const calendarParams = \"?isPublic=false&sessionID=\" + selectedSession.SessionID + '&chamberCode=' + selectedChamber.value;\n //The second parameter lets the store know to use the partner request instead of the public\n this.props.actions.getCalendarList(calendarParams, true)\n .then(() => {\n this.setState({\n isLoaded: true,\n calendarList: this.props.calendar.calendarList\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n this.setState({\n calendarListError: err.toString()\n });\n });\n }\n }\n\n render() {\n return (\n <div>\n {this.state.showDeleteWarning &&\n <div className='schedule-modal'>\n <div style={{ height: \"120px\" }} className='schedule-modal-content'>\n <p>Are you sure you would like to delete this calendar?</p>\n <div>\n <button style={{ float: \"right\" }} type=\"button\" className='button danger' onClick={() => this.deleteCalendar(this.state.calendarToBeDeleted)}>Delete</button>\n <button style={{ float: \"right\", marginRight: \"10px\" }} type=\"button\" className='button secondary' onClick={() => this.toggleDeleteCalendar(0)}>Cancel</button>\n </div>\n </div>\n </div>\n }\n <div className=\"header-half\">\n <h1>Calendar Management</h1>\n {this.props.login.userClaims.claims.find(c => c.RoleName === \"Admin\") &&\n <div className=\"flex-row flex-vertical-center flex-end\">\n <a className=\"icon settings\" href=\"/configurations-management/calendar\" />\n </div>\n }\n </div>\n <p className=\"small-text message-error\">{this.state.calendarListError}</p>\n <div className=\"toolbar inner-grid four\">\n <div>\n <Fields.Dropdown\n value={this.props.selectedChamber}\n options={this.state.chamberOptions}\n onChange={this.handleChamberChange}\n isDisabled={this.state.disableChamberSelector}\n />\n </div>\n <div>\n <Fields.Dropdown\n value={this.props.selectedSession}\n options={this.state.sessionOptions}\n id=\"sessionDropdown\"\n onChange={this.handleSessionSelectChange}\n />\n </div>\n </div>\n <ReactTable\n resizable={false}\n data={this.state.calendarList}\n loading={!this.state.isLoaded}\n ref={r => this.reactTable = r}\n columns={[\n {\n Header: 'Calendars',\n width: 240,\n sortable: false,\n filterable: false,\n columns: [\n {\n headerClassName: \"calendar-datepicker-container\",\n accessor: \"CalendarDate\",\n width: 240,\n sortable: false,\n Header: (\n <div className=\"dlas-forms datepicker-container\">\n {!this.state.showCreateSuccess && !this.state.createFailureMessage && !this.state.showDeleteSuccess && !this.state.deleteFailureMessage &&\n <DatePicker\n className=\"dnd-field\"\n selected={this.state.calendarDate}\n onChange={this.handleDateChange}\n placeholderText=\"Calendar Date\"\n />\n }\n {this.state.showCreateSuccess &&\n <span className=\"insert-message\">Calendar was created successfully!</span>\n }\n {this.state.createFailureMessage &&\n <span className=\"insert-message fail\">{this.state.createFailureMessage}</span>\n }\n {this.state.showDeleteSuccess &&\n <span className=\"insert-message\">Calendar was deleted successfully!</span>\n }\n {this.state.deleteFailureMessage &&\n <span className=\"insert-message fail\">{this.state.deleteFailureMessage}</span>\n }\n </div>\n ),\n\n Cell: row => {\n return <span>{moment(row.value).format(\"MM/DD/YYYY\")} {row.original.CalendarNumber > 1 && <React.Fragment>(Supp. {row.original.CalendarNumber - 1})</React.Fragment>}</span>\n }\n }\n ]\n },\n {\n Header: 'Comments',\n width: 'auto',\n sortable: false,\n filterable: false,\n columns: [\n {\n headerClassName: \"docket-datepicker-container\",\n accessor: \"Comments\",\n sortable: false,\n Header: (false),\n Cell: row => {\n return <span>{row.value}</span>\n }\n }\n ]\n },\n {\n Header: 'Actions',\n headerClassName: \"submit-action\",\n sortable: false,\n filterable: false,\n columns: [\n {\n Header: () => {\n return <span><button className=\"button\" onClick={this.createCalendar} disabled={this.state.isAdding}>Create</button></span>\n },\n headerClassName: \"header-action\",\n accessor: \"action\",\n sortable: false,\n className: \"action-column\",\n width: 90,\n Cell: row => {\n if (this.state.calendarBeingDeleted === row.index) {\n return (\n <div className=\"small-spinner\"></div>\n )\n }\n return (\n <div className=\"committee-action-column-two\">\n <Link to={`/calendar-management/edit-calendar/${row.original.CalendarID}`} className=\"icon edit\"></Link>\n {row.original.IsPublic ?\n <Link target=\"_blank\" to={`/session-details/${this.props.selectedSession.SessionCode}/calendar/${row.original.ReferenceNumber}`} className=\"icon book\"></Link>\n :\n <span onClick={() => this.toggleDeleteCalendar(row.index)} className=\"icon delete\"></span>}\n </div>\n );\n }\n }\n ]\n }\n ]}\n defaultPageSize={15}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight\"\n />\n <br />\n\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { session, calendar, login } = state;\n return {\n session,\n calendar,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, calendarActionCreators, authActionCreators), dispatch)\n }\n }\n)(CalendarGrid)","import React from 'react';\nimport Popout from '../lis-layout/components/lis-popout-component';\nimport tinymce from 'tinymce/tinymce';\nimport 'tinymce/themes/silver/theme';\nimport 'tinymce/icons/default'\nimport 'tinymce/plugins/paste/plugin';\nimport 'tinymce/plugins/link/plugin';\nimport 'tinymce/plugins/save/plugin';\nimport 'tinymce/plugins/lists/plugin';\nimport 'tinymce/plugins/code/plugin';\nimport 'tinymce/plugins/preview/plugin';\nimport 'tinymce/plugins/searchreplace/plugin';\nimport 'tinymce/plugins/pagebreak/plugin';\nimport 'tinymce/plugins/table/plugin';\nimport '../../stylesheets/tinymce/oxide/skin.min.css';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\n\nconst newAgendaItemText = '<p><strong></strong></p>';\n\nconst getItemStyle = (isDragging, draggableStyle, isActive) => ({\n // some basic styles to make the items look a bit nicer\n display: 'flex',\n userSelect: 'none',\n marginBottom: '20px',\n // change background colour if dragging\n background: isDragging ? '#34495e' : !isActive ? '#f3f3f3' : 'white',\n color: isDragging ? 'white' : '#34495e',\n borderRight: '1px solid #e0e0e0',\n borderTop: '1px solid #e0e0e0',\n borderLeft: '1px solid #e0e0e0',\n borderBottom: '1px solid #e0e0e0',\n color: isActive ? '' : '#8b8b8b',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nclass AgendaItemsComponent extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n agendaItemContent: []\n }\n\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.togglePortal = this.togglePortal.bind(this);\n this.saveAgendaItems = this.saveAgendaItems.bind(this);\n this.close = this.close.bind(this);\n this.addNote = this.addNote.bind(this);\n this.toggleCustomNote = this.toggleCustomNote.bind(this);\n }\n\n addNote() {\n let agendaItems = [...this.props.agenda.AgendaItems].sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence);\n //insert the new note at the last index excluding amendments (keep amendments last)\n let index = agendaItems.findIndex(a => a.DraftText);\n if (index !== -1) {\n //there is at least one amendment, increase its display sequence because the new note will be in its previous sequence/indexc\n agendaItems.forEach((item, idx) => {\n if (idx >= index) {\n item.DisplaySequence++;\n }\n })\n }\n\n const newAgendaItem = {\n Description: newAgendaItemText,\n IsActive: true,\n Sequence: (index + 1) || agendaItems.length + 1,\n DisplaySequence: (index + 1) || agendaItems.length + 1,\n AgendaId: agendaItems && agendaItems[0] ? agendaItems[0].AgendaId : null\n }\n agendaItems.splice(index !== -1 ? index : agendaItems.length + 1, 0, newAgendaItem);\n let agendaItemContent = [...this.state.agendaItemContent];\n agendaItemContent.splice(index !== -1 ? index : agendaItems.length + 1, 0, newAgendaItem.Description);\n this.props.updateAgendaItems(agendaItems, this.props.categoryIndex, this.props.agendaIndex);\n this.setState({\n agendaItemContent: agendaItemContent\n });\n }\n\n handleEditorChange(content, itemIndex) {\n let agendaItemContent = [...this.state.agendaItemContent];\n agendaItemContent[itemIndex] = content;\n this.setState({\n agendaItemContent: agendaItemContent\n });\n }\n\n togglePortal(state) {\n this.setState({\n showPortal: !state\n }, () => {\n if (!this.state.showPortal) {\n this.props.toggleAgendaItemEditor(-1)\n }\n });\n }\n\n saveAgendaItems() {\n let agendaItems = [...this.props.agenda.AgendaItems];\n agendaItems.forEach((item, i) => {\n if (item.DraftText) {\n item.DraftText = this.state.agendaItemContent[i];\n } else if (item.CalendarDescription) {\n item.CalendarDescription = this.state.agendaItemContent[i];\n } else {\n item.Description = this.state.agendaItemContent[i];\n }\n item.Sequence = item.DisplaySequence;\n });\n this.props.updateAgendaItems(agendaItems, this.props.categoryIndex, this.props.agendaIndex);\n this.props.toggleAgendaItemEditor(-1);\n }\n\n close() {\n let agendaItems = [...this.props.agenda.AgendaItems].sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence);\n //filter out newly added items since they are cancelling, and undo re-sequencing\n agendaItems = agendaItems.filter((item) => {\n if (!item.Description || item.Description === newAgendaItemText) {\n return false;\n } else {\n return true;\n }\n })\n agendaItems.forEach(item => {\n item.IsActive = item.OrigIsActive;\n item.DisplaySequence = null;\n });\n const sortedAgendaItems = agendaItems.sort((a, b) => a.Sequence - b.Sequence);\n this.props.updateAgendaItems(sortedAgendaItems, this.props.categoryIndex, this.props.agendaIndex);\n this.props.toggleAgendaItemEditor(-1)\n }\n\n componentDidMount() {\n let agendaItems = [...this.props.agenda.AgendaItems].sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence);\n let agendaItemContent = [];\n this.props.updateAgendaItems(agendaItems, this.props.categoryIndex, this.props.agendaIndex);\n agendaItems.forEach((item, idx) => {\n item.DisplaySequence = idx + 1;\n item.OrigIsActive = item.IsActive;\n agendaItemContent.push(item.DraftText || item.CalendarDescription || item.Description);\n });\n this.setState({\n agendaItemContent: agendaItemContent\n });\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.agenda.AgendaItems !== prevProps.agenda.AgendaItems) {\n let agendaItemContent = [];\n this.props.agenda.AgendaItems.sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence).forEach(item => {\n agendaItemContent.push(item.DraftText || item.CalendarDescription || item.Description);\n });\n this.setState({\n agendaItemContent: agendaItemContent\n });\n }\n }\n\n onDragEnd(result) {\n if (!result.destination) {\n return;\n }\n let newAgendaItemContent = [];\n let agendaItemContent = [...this.state.agendaItemContent];\n let agendaItems = [...this.props.agenda.AgendaItems].sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence);\n if (agendaItems.find(a => a.DraftText) && result.destination.index >= agendaItems.findIndex(a => a.DraftText)) {\n alert(\"You cannot reposition amendments.\");\n return;\n }\n let [removedItemContent] = agendaItemContent.splice(result.source.index, 1);\n let [removedItem] = agendaItems.splice(result.source.index, 1);\n agendaItemContent.splice(result.destination.index, 0, removedItemContent);\n agendaItems.splice(result.destination.index, 0, removedItem);\n //Ensure amendments are still last, and reorder the Sequence value too!\n agendaItems.sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence)\n agendaItems.forEach((element, index) => {\n element.DisplaySequence = index + 1;\n newAgendaItemContent.push(agendaItemContent[index]);\n });\n this.props.updateAgendaItems(agendaItems, this.props.categoryIndex, this.props.agendaIndex);\n this.setState({ agendaItemContent: newAgendaItemContent });\n }\n\n toggleCustomNote(index) {\n if (index > -1) {\n let agendaItems = [...this.props.agenda.AgendaItems].sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence);\n agendaItems[index].IsActive = !agendaItems[index].IsActive;\n\n this.props.updateAgendaItems(agendaItems, this.props.categoryIndex, this.props.agendaIndex);\n\n const tinyMceEditor = document.querySelector('iframe#' + agendaItems[index].tinyMceId + '_ifr');\n if (tinyMceEditor) {\n const tinyMceHtmlElem = tinyMceEditor.contentWindow.document.querySelector('html');\n const tinyMceHeaderElem = document.getElementById(agendaItems[index].tinyMceId).parentElement.querySelector('.tox-toolbar__primary');\n if (tinyMceHtmlElem && tinyMceHeaderElem) {\n tinyMceHtmlElem.style.background = agendaItems[index].IsActive ? 'white' : '#f3f3f3';\n tinyMceHeaderElem.style.background = agendaItems[index].IsActive ? 'white' : '#f3f3f3';\n }\n }\n }\n }\n\n setTinyMceIds(tinymceId, index) {\n if (index > -1) {\n let agendaItems = [...this.props.agenda.AgendaItems].sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence);\n agendaItems[index].tinyMceId = tinymceId;\n this.props.updateAgendaItems(agendaItems, this.props.categoryIndex, this.props.agendaIndex);\n const tinyMceHeaderElem = document.getElementById(agendaItems[index].tinyMceId).parentElement.querySelector('.tox-toolbar__primary');\n if (tinyMceHeaderElem) {\n tinyMceHeaderElem.style.background = agendaItems[index].IsActive ? 'white' : '#f3f3f3';\n }\n }\n }\n\n render() {\n const editors =\n <DragDropContext onDragEnd={result => this.onDragEnd(result)}>\n <Droppable droppableId=\"droppable\">\n {(provided, _snapshot) => (\n <div ref={provided.innerRef}>\n {[...this.props.agenda.AgendaItems].sort((a, b) => (a.DraftText ? 1 : b.DraftText ? -1 : 0) || (a.DisplaySequence && b.DisplaySequence && a.DisplaySequence < b.DisplaySequence) || a.Sequence < b.Sequence).map((item, itemIndex) => {\n if (this.state.agendaItemContent[itemIndex] || this.state.agendaItemContent[itemIndex] === \"\") {\n //Have to defer the render until there's actually conent to check\n //this.state.agendaItemContent[itemIndex] was coming through undefined on the first pass and we can't re-render with the new height\n let height = this.state.agendaItemContent[itemIndex].length <= 100 ? 80 : 180\n return (\n <Draggable isDragDisabled={Boolean(item.DraftText)} key={`${item.AgendaItemId}-${itemIndex}`} draggableId={`${item.AgendaItemId}-${itemIndex}`} index={itemIndex}>\n {(provided, snapshot) => (\n <div ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style,\n item.IsActive\n )}\n >\n {!item.DraftText && <div style={{ margin: 'auto' }}><button className=\"button draggable\">Drag and drop</button></div>}\n <div style={{ width: item.DraftText ? '100%' : '97%' }}>\n <Editor\n value={this.state.agendaItemContent[itemIndex] || ''}\n disabled={!item.IsActive || item.DraftText}\n onInit={(e) => this.setTinyMceIds(e.target.id, itemIndex)}\n init={{\n browser_spellcheck: true,\n height: height,\n menubar: false,\n statusbar: false,\n plugins: 'lists searchreplace',\n toolbar: 'undo redo | bold italic strikethrough | alignleft aligncenter alignright',\n skin: false,\n valid_children: '+body[style]',\n content_css: false,\n content_style: (item.IsActive ? '' : 'html { background: #f3f3f3}') + 'table { border-collapse: collapse; border: 1px solid #FFFFFF }' + 'td { padding: 12px 0px }',\n }}\n onEditorChange={content => this.handleEditorChange(content, itemIndex)}\n />\n </div>\n <div style={{ width: '3%', margin: 'auto', textAlign: 'center' }}>\n <button className={`icon ${item.IsActive ? 'delete' : 'add'}`} onClick={() => this.toggleCustomNote(itemIndex)} />\n </div>\n </div>\n )}\n </Draggable>\n )\n }\n })\n }\n </div>\n )}\n </Droppable>\n </DragDropContext>;\n const buttons =\n <React.Fragment>\n <button type=\"button\" onClick={this.addNote} className=\"button\" style={!this.props.agenda.AgendaItems.length ? { marginTop: '20px' } : {}} >Add Note</button>\n <div className=\"flex-row\">\n <br />\n <div className=\"inline-list\">\n <button type=\"button\" onClick={this.close} className=\"button secondary\">Cancel</button>\n <button type=\"button\" onClick={this.saveAgendaItems} className=\"button\">Finish</button>\n </div>\n </div>\n </React.Fragment>\n return (<div>\n {this.state.showPortal ?\n <Popout togglePortal={this.togglePortal} windowTitle={`${this.props.agenda.LegislationNumber} ${this.props.agenda.LegislationDescription}`}>\n {editors}\n {buttons}\n </Popout>\n :\n <div onClick={() => this.props.toggleAgendaItemEditor(-1)} className=\"overlay\">\n <div className=\"full\">\n <div onClick={e => e.stopPropagation()} className=\"dlas-forms user-forms advanced-search overlay-content animated-fade-in-up\">\n <div className=\"background-blue inline-list flex-row flex-vertical-center\">\n <span className=\"icon popout\" onClick={() => this.togglePortal(this.state.showPortal)}></span>\n <span className=\"txt-white\">{this.props.agenda.LegislationNumber} {this.props.agenda.LegislationDescription}</span>\n </div>\n {editors}\n {buttons}\n </div>\n </div>\n </div>}\n </div>);\n }\n}\n\nexport default AgendaItemsComponent;\n","import React from \"react\";\nimport { LargeListSelect } from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport Select from 'react-select';\nimport ReactTooltip from 'react-tooltip';\nimport { Link } from 'react-router-dom';\nimport renderHTML from 'react-render-html';\nimport AgendaItemsComponent from '../../../lis-shared/lis-calendar/lis-agenda-items';\nimport moment from 'moment-timezone';\nimport { Editor } from '@tinymce/tinymce-react';\n\nconst isNotHidden = (agenda, category, committeeList) => (!agenda.CommitteeID && !agenda.IsHidden) || (agenda.IsActive && !agenda.IsHidden) || (committeeList.find(x => x.value == agenda.CommitteeID) && category.CalendarCategoryTypeID === 66) /* Bills or Resolutions Rereferred */\n\nconst NUMERIC_SORT_CATEGORIES = [2, 3, 4, 26, 27, 5, 41, 6, 7, 28, 29, 30, 31, 32, 57, 33, 35, 45, 9, 10, 8, 11, 13, 37, 38, 44, 46, 22];\n\nconst sortAgendas = (a, b, calendarChamber) => {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : (!a.Ranking || a.Ranking === \"\") && b.Ranking\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : moment(a.CalendarDate).isAfter(b.CalendarDate, \"day\")\n ? 1\n : moment(b.CalendarDate).isAfter(a.CalendarDate, \"day\")\n ? -1\n : moment(a.CandidateDate).isAfter(b.CandidateDate, \"day\")\n ? 1\n : moment(b.CandidateDate).isAfter(a.CandidateDate, \"day\")\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst sortAgendasNumerically = (a, b, calendarChamber) => {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst sortInactiveAgendas = (a, b, calendarChamber) => {\n return (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : moment(a.CalendarDate).isAfter(b.CalendarDate, \"day\")\n ? 1\n : moment(b.CalendarDate).isAfter(a.CalendarDate, \"day\")\n ? -1\n : moment(a.CandidateDate).isAfter(b.CandidateDate, \"day\")\n ? 1\n : moment(b.CandidateDate).isAfter(a.CandidateDate, \"day\")\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst sortInactiveAgendasNumerically = (a, b, calendarChamber) => {\n return (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n a.IsActive && findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey(a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate)\n)\n\nconst findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n (((ignoreCalendarDate || (a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isSame(b.CalendarDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCalendarDate && a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isBefore(b.CalendarDate, \"day\"))) ||\n (((ignoreCandidateDate || (a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isSame(b.CandidateDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCandidateDate && a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isBefore(b.CandidateDate, \"day\"))) ||\n ((ignoreCalendarDate || (!a.CalendarDate && !b.CalendarDate)) && (ignoreCandidateDate || (!a.CandidateDate && !b.CandidateDate)) &&\n findLastByLegChamberTypeKey(a, b, calendarChamber))\n || (!ignoreCalendarDate && !b.CalendarDate && a.CandidateDate)\n || !ignoreCandidateDate && !b.CandidateDate && a.CandidateDate\n)\n\nconst findLastByLegChamberTypeKey = (a, b, calendarChamber) => (\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === (calendarChamber === \"H\" ? 1 : -1)) ||\n (a.LegislationNumber && a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === -1) ||\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === 0 && a.LegislationKey && a.LegislationKey < parseInt(b.LegislationKey))\n)\n\nconst getItemStyle = (isDragging, draggableStyle, isActive) => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n // change background colour if dragging\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: 'none',\n borderLeft: '1px solid #e0e0e0',\n borderBottom: '1px solid #e0e0e0',\n color: isActive ? '' : '#8b8b8b',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nclass BillsGrid extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectAllActive: false,\n selectAllInactive: false,\n showAgendaItemEditor: -1,\n showAgendaItemEditorCategoryIndex: -1,\n lastCheckedBills: []\n };\n this.handleAgendaSort = this.handleAgendaSort.bind(this);\n this.toggleSelectAll = this.toggleSelectAll.bind(this);\n this.toggleRow = this.toggleRow.bind(this);\n this.toggleBill = this.toggleBill.bind(this);\n this.showAgendaItems = this.showAgendaItems.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.toggleEditCategoryDescription = this.toggleEditCategoryDescription.bind(this);\n this.saveChange = this.saveChange.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.onDragEnd = this.onDragEnd.bind(this);\n this.toggleAgendaItemEditor = this.toggleAgendaItemEditor.bind(this);\n this.expandTitle = this.expandTitle.bind(this);\n this.getCategoryBills = this.getCategoryBills.bind(this);\n this.setDescription = this.setDescription.bind(this);\n this.setBillsInConferenceCategoryDescription = this.setBillsInConferenceCategoryDescription.bind(this);\n this.categoryDescriptionIsEdited = this.categoryDescriptionIsEdited.bind(this);\n this.changeCommitteeDropdown = this.changeCommitteeDropdown.bind(this);\n this.changeDateDropdown = this.changeDateDropdown.bind(this);\n this.addBill = this.addBill.bind(this);\n this.toggleShowAmendments = this.toggleShowAmendments.bind(this);\n this.setRanking = this.setRanking.bind(this);\n this.handleDescriptionChange = this.handleDescriptionChange.bind(this);\n this.selectAllCommending = this.selectAllCommending.bind(this);\n this.selectAllMemorial = this.selectAllMemorial.bind(this);\n }\n\n toggleSelectAll(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n const opposite = !organizedBills.filter(c => !c.DeletionDate)[categoryIndex].selectAll;\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].selectAll = opposite\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(leg => { if (isNotHidden(leg, organizedBills.filter(c => !c.DeletionDate)[categoryIndex], this.props.committeeList)) leg.checked = opposite });\n this.props.updateAgenda(organizedBills);\n\n let lastCheckedBills = this.state.lastCheckedBills;\n lastCheckedBills[categoryIndex] = -1;\n this.setState({\n lastCheckedBills: lastCheckedBills\n });\n }\n\n toggleRow(categoryIndex, itemIndex, e) {\n let organizedBills = [...this.props.organizedBills];\n let lastCheckedBills = this.state.lastCheckedBills;\n let lastCheckedBill = lastCheckedBills[categoryIndex];\n if (e.nativeEvent.shiftKey && !isNaN(lastCheckedBill) && lastCheckedBill !== -1) {\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(agenda => agenda.checked = false);\n for (let i = 0; i < Math.abs(itemIndex - lastCheckedBill); i++) {\n const index = lastCheckedBill + i * (itemIndex - lastCheckedBill) / Math.abs(itemIndex - lastCheckedBill);\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[index].checked = true;\n }\n } else {\n lastCheckedBill = itemIndex;\n }\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex].checked = !organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex].checked;\n this.props.updateAgenda(organizedBills);\n\n lastCheckedBills[categoryIndex] = lastCheckedBill;\n this.setState({\n lastCheckedBills: lastCheckedBills\n });\n }\n\n categoryDescriptionIsEdited(categoryAsDisplayed, associatedReferenceCategory) {\n if (this.props.chamberCode === 'H' && categoryAsDisplayed.CategoryCode === \"SENBRC\" || categoryAsDisplayed.CategoryCode === \"HOUBRC\") {\n return !(\n [\"House Bill in Conference\", \"Senate Bill in Conference\",\n \"House Bills in Conference\", \"Senate Bills in Conference\",\n \"House Joint Resolution in Conference\", \"Senate Joint Resolution in Conference\",\n \"House Joint Resolutions in Conference\", \"Senate Joint Resolutions in Conference\",\n \"House Bill and Joint Resolution in Conference\", \"Senate Bill and Joint Resolution in Conference\",\n \"House Bills and Joint Resolution in Conference\", \"Senate Bills and Joint Resolution in Conference\",\n \"House Bill and Joint Resolutions in Conference\", \"Senate Bill and Joint Resolutions in Conference\",\n \"House Bills and Joint Resolutions in Conference\", \"Senate Bills and Joint Resolutions in Conference\",\n ].includes(categoryAsDisplayed.Description))\n } else {\n if (associatedReferenceCategory && associatedReferenceCategory.Description !== categoryAsDisplayed.Description && associatedReferenceCategory.PluralDescription !== categoryAsDisplayed.Description) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n setDescription(organizedBills, categoryIndex) {\n let updatedOrganizedBills = [...organizedBills];\n\n if (categoryIndex) {\n //if it's been edited, leave it at that\n const associatedReferenceCategory = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID);\n if (this.categoryDescriptionIsEdited(updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex], associatedReferenceCategory)) {\n //leave it alone\n } else {\n //otherwise, set description based on singular/plural reference description\n if (this.props.chamberCode === 'H' && updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CategoryCode === \"SENBRC\" || updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CategoryCode === \"HOUBRC\") {\n updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Description = this.setBillsInConferenceCategoryDescription(updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex]);\n } else {\n if (associatedReferenceCategory) {\n if (updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(x => x.IsActive).length > 1) {\n updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Description = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID).PluralDescription;\n } else {\n updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Description = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID).Description;\n }\n }\n }\n }\n } else {\n //iterate through all\n updatedOrganizedBills.forEach((cat, index) => {\n //if it's been edited, leave it at that\n const associatedReferenceCategory = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills[index].CalendarCategoryTypeID)\n if (this.categoryDescriptionIsEdited(cat, associatedReferenceCategory)) {\n return;\n }\n\n //otherwise, set description based on singular/plural reference description\n if (this.props.chamberCode === 'H' && cat.CategoryCode === \"SENBRC\" || cat.CategoryCode === \"HOUBRC\") {\n updatedOrganizedBills[index].Description = this.setBillsInConferenceCategoryDescription(cat);\n } else {\n if (associatedReferenceCategory) { //calendarCategories prop only contains same chamber categories, so could cause an NRE if iterating over an opposite-chamber category\n if (updatedOrganizedBills[index].Agendas.filter(x => x.IsActive).length > 1) {\n updatedOrganizedBills[index].Description = associatedReferenceCategory.PluralDescription;\n } else {\n updatedOrganizedBills[index].Description = associatedReferenceCategory.Description;\n }\n }\n }\n })\n }\n\n return updatedOrganizedBills;\n }\n\n setBillsInConferenceCategoryDescription(category) {\n let existingDescription = category.Description;\n let newTypeAndPluralityLanguage;\n let newDescription;\n\n //get all legislations in this category\n const categoryLegislations = category.Agendas;\n if (categoryLegislations) {\n //filter to only the active legislations\n const activeCategoryLegislations = categoryLegislations.filter(cl => cl.IsActive);\n if (!activeCategoryLegislations.length) {\n //not any active legislations - should only say 'bill'\n newTypeAndPluralityLanguage = 'Bill';\n } else {\n const numResolutions = activeCategoryLegislations.filter(acl => acl.LegislationNumber[1] !== \"B\").length;\n const numBills = activeCategoryLegislations.filter(acl => acl.LegislationNumber[1] === \"B\").length;\n if (numResolutions > 0 && numBills > 0) {\n //At least one bill and at least one resolution\n newTypeAndPluralityLanguage = (numBills > 1 ? 'Bills' : 'Bill') + ' and Joint ';\n newTypeAndPluralityLanguage += numResolutions > 1 ? 'Resolutions' : 'Resolution';\n } else if (numResolutions > 0 && numBills === 0) {\n //at least one resolution and no bills\n newTypeAndPluralityLanguage = numResolutions > 1 ? 'Joint Resolutions' : 'Joint Resolution';\n } else if (numResolutions === 0 && numBills > 0) {\n //at least one bill and no resolutions\n newTypeAndPluralityLanguage = numBills > 1 ? 'Bills' : 'Bill';\n }\n }\n newDescription = existingDescription.replace(/\\b(Bill and Joint Resolution|Bills and Joint Resolution|Bills and Joint Resolutions|Bill and Joint Resolutions|Bill|Bills|Joint Resolution|Joint Resolutions)\\b/, newTypeAndPluralityLanguage);\n }\n\n return newDescription;\n }\n\n handleAgendaSort(agendas, categoryTypeId) {\n let unrankedAgendas = [];\n let rankedAgendas = [];\n let inactiveAgendas = [];\n let rankings = [];\n\n if (agendas) {\n agendas.forEach((agenda) => {\n if (!agenda.Ranking && agenda.IsActive) {\n unrankedAgendas.push(agenda);\n } else if (agenda.IsActive) {\n rankedAgendas.push(agenda);\n rankings.push(agenda.Ranking);\n } else {\n inactiveAgendas.push(agenda)\n }\n })\n\n rankings.sort((a, b) => a - b);\n\n let gaps = [];\n for (let i = 1; i < rankings.length; i++) {\n gaps.push(rankings[i] - rankings[i - 1]);\n }\n\n console.log(agendas, categoryTypeId)\n\n\n if (NUMERIC_SORT_CATEGORIES.includes(categoryTypeId)) {\n rankedAgendas.sort((a, b) => sortAgendasNumerically(a, b, this.props.chamberCode));\n } else {\n rankedAgendas.sort((a, b) => sortAgendas(a, b, this.props.chamberCode));\n }\n if (NUMERIC_SORT_CATEGORIES.includes(categoryTypeId)) {\n unrankedAgendas.sort((a, b) => sortAgendasNumerically(a, b, this.props.chamberCode));\n } else {\n unrankedAgendas.sort((a, b) => sortAgendas(a, b, this.props.chamberCode));\n }\n if (NUMERIC_SORT_CATEGORIES.includes(categoryTypeId)) {\n inactiveAgendas.sort((a, b) => sortInactiveAgendasNumerically(a, b, this.props.chamberCode));\n } else {\n inactiveAgendas.sort((a, b) => sortInactiveAgendas(a, b, this.props.chamberCode));\n }\n\n //If there are multiple ranks with a gap larger than 1 place all unranked agendas between them\n if (new Set(rankings).size > 1 && Math.max(...gaps) > 1) {\n let insertPoint = gaps.findIndex(x => x === Math.max(...gaps)) + 1\n\n for (let i = 0; i < unrankedAgendas.length; i++) {\n rankedAgendas.splice(insertPoint, 0, unrankedAgendas[i]);\n insertPoint++;\n }\n\n return rankedAgendas.concat(inactiveAgendas);\n } else {\n //If the largest rank is greated than 50 put all unranked agendas above the ranked agendas, otherwise put them all at the bottom\n if (Math.max(...rankings) >= 50) {\n return unrankedAgendas.concat(rankedAgendas).concat(inactiveAgendas);\n } else {\n return rankedAgendas.concat(unrankedAgendas).concat(inactiveAgendas);\n\n }\n }\n } else {\n return agendas;\n }\n }\n\n toggleBill(categoryIndex, itemIndex) {\n let organizedBills = [...this.props.organizedBills];\n let agenda = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex]\n agenda.IsActive = !agenda.IsActive;\n agenda.checked = false;\n if (agenda.pending === false) {\n delete agenda.pending;\n }\n\n organizedBills = this.setDescription(organizedBills, categoryIndex);\n organizedBills[categoryIndex].Agendas = this.handleAgendaSort(organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas, organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID)\n\n //check for this bill being a duplicate in other categories\n const isDuplicate = organizedBills.filter(cc => cc.CalendarCategoryTypeID !== organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID && cc.Agendas.find(a => a.LegislationNumber === agenda.LegislationNumber))\n if (isDuplicate.length) {\n isDuplicate.forEach(duplicateCategory => {\n duplicateCategory.Agendas.filter(a => a.LegislationNumber === agenda.LegislationNumber).forEach(duplicateAgenda => {\n duplicateAgenda.IsActive = false;\n duplicateAgenda.Ranking = null;\n })\n const duplicateCategoryIndex = organizedBills.findIndex(cc => cc.CalendarCategoryTypeID === duplicateCategory.CalendarCategoryTypeID);\n organizedBills = this.setDescription(organizedBills, duplicateCategoryIndex);\n const response = this.handleAgendaSort(organizedBills[duplicateCategoryIndex].Agendas, organizedBills[duplicateCategoryIndex].CalendarCategoryTypeID)\n organizedBills[duplicateCategoryIndex].Agendas = response;\n })\n }\n\n this.props.updateAgenda(organizedBills, true);\n }\n\n toggleBillBulk(activate, categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n\n const legNumbersToBeIncluded = activate ? organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(a => a.checked).flatMap(a => a.LegislationNumber) : [];\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(leg => {\n if (leg.checked) {\n leg.IsActive = activate;\n }\n\n if (leg.pending === false) {\n delete leg.pending;\n }\n\n leg.checked = false;\n });\n\n organizedBills = this.setDescription(organizedBills, categoryIndex);\n organizedBills[categoryIndex].Agendas = this.handleAgendaSort(organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas, organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID)\n\n //check for this bill being a duplicate in other categories\n const isDuplicate = organizedBills.filter(cc => cc.CalendarCategoryTypeID !== organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID && cc.Agendas.find(a => legNumbersToBeIncluded.includes(a.LegislationNumber)))\n if (isDuplicate.length) {\n isDuplicate.forEach(duplicateCategory => {\n duplicateCategory.Agendas.filter(a => legNumbersToBeIncluded.includes(a.LegislationNumber)).forEach(duplicateAgenda => {\n duplicateAgenda.IsActive = false;\n duplicateAgenda.Ranking = null;\n })\n const duplicateCategoryIndex = organizedBills.findIndex(cc => cc.CalendarCategoryTypeID === duplicateCategory.CalendarCategoryTypeID);\n organizedBills = this.setDescription(organizedBills, duplicateCategoryIndex);\n organizedBills[duplicateCategoryIndex].Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(organizedBills[duplicateCategoryIndex].CalendarCategoryTypeID) ? sortAgendasNumerically(a, b, this.props.chamberCode) : sortAgendas(a, b, this.props.chamberCode));\n })\n }\n\n this.props.updateAgenda(organizedBills, true);\n }\n\n moveTo(topOrBottom, categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(leg => {\n if (leg.checked && leg.IsActive) {\n leg.Ranking = topOrBottom === \"top\" ? 1 : 99\n }\n });\n\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(a => a.checked).forEach(agenda => {\n agenda.checked = false;\n });\n\n organizedBills = this.setDescription(organizedBills, categoryIndex);\n\n const result = this.handleAgendaSort(organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas, organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID)\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas = result;\n this.props.updateAgenda(organizedBills, true);\n }\n\n switchCategory(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n\n //uncheck the ones that are already in this category so that they don't get resequenced\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(a => a.checked = false);\n\n let categoriesWithCheckedBills = organizedBills.filter(c => !c.DeletionDate && c.IsLegislationCategory && c.Agendas.find(a => a.checked));\n categoriesWithCheckedBills.forEach(cat => {\n cat.Agendas.filter(a => a.checked).forEach(checkedAgenda => {\n checkedAgenda.Ranking = 0; //will get set later in toggleBillBulk\n if (organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryID) {\n checkedAgenda.CalendarCategoryID = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryID;\n } else {\n delete checkedAgenda.CalendarCategoryID;\n }\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.push(checkedAgenda);\n const existingCategoryAgendaIndex = cat.Agendas.findIndex(a => a.LegislationNumber === checkedAgenda.LegislationNumber);\n if (existingCategoryAgendaIndex > -1) { //remove the bill from the old category; always should be found\n cat.Agendas.splice(existingCategoryAgendaIndex, 1);\n }\n })\n })\n\n this.toggleBillBulk(true, categoryIndex);\n }\n\n showAgendaItems(categoryIndex, agendaIndex) {\n let organizedBills = [...this.props.organizedBills].filter(c => !c.DeletionDate);\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].showAgendaItems = !organizedBills[categoryIndex].Agendas[agendaIndex].showAgendaItems;\n this.props.updateAgenda(organizedBills);\n }\n\n toggleEdit(categoryIndex, agendaIndex) {\n let categories = [...this.props.organizedBills];\n //This key is used to tell the DOM whether to display an input or a span\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].isEditing = !categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].isEditing;\n //Create a key called newDescription that will hold the text that the user types in\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].newDescription = categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].Description;\n this.props.updateAgenda(categories);\n }\n\n handleChange(categoryIndex, agendaIndex, value, title) {\n let categories = [...this.props.organizedBills];\n if (title) {\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].LegislationTitle = value;\n } else {\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].newDescription = value;\n }\n\n this.props.updateAgenda(categories);\n }\n\n saveChange(categoryIndex, agendaIndex) {\n //Turn input back into span\n let categories = [...this.props.organizedBills];\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].isEditing = false;\n //Set description to the text that the user has typed in. If new description is null then set it to the current description\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].Description = categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].newDescription;\n this.props.updateAgenda(categories, true);\n }\n\n expandTitle(categoryIndex, agendaIndex) {\n let categories = [...this.props.organizedBills];\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].expandTitle = !categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].expandTitle ? true : false;\n\n this.props.updateAgenda(categories, this.props.pendingSave);\n }\n\n onDragEnd(result, categoryIndex) {\n\n }\n\n toggleAgendaItemEditor(agendaIndex, categoryIndex) {\n if (!categoryIndex || ([...this.props.organizedBills].filter(c => !c.DeletionDate).length && [...this.props.organizedBills].filter(c => !c.DeletionDate)[categoryIndex])) {\n this.setState({\n showAgendaItemEditor: agendaIndex,\n showAgendaItemEditorCategoryIndex: Number.isInteger(categoryIndex) ? categoryIndex : -1\n });\n }\n }\n\n getCategoryBills(category) {\n const associatedCategory = this.props.calendarCategories.find(c => c.CalendarCategoryTypeID === category.CalendarCategoryTypeID);\n if (associatedCategory) {\n return this.props.billList.filter(b => (b.ChamberCode === associatedCategory.LegislationChamberCode || !associatedCategory.LegislationChamberCode) && (b.LegislationTypeCode === associatedCategory.LegislationTypeCode || !associatedCategory.LegislationTypeCode))\n } else { return this.props.billList }\n }\n\n toggleShowAmendments(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].showAmendments = !organizedBills[categoryIndex].showAmendments;\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(agenda => {\n agenda.AgendaItems.forEach(item => {\n if (item.LDNumber) {\n item.IsActive = organizedBills[categoryIndex].showAmendments;\n }\n })\n });\n this.props.updateAgenda(organizedBills);\n }\n\n setRanking(categoryIndex, agendaIndex, ranking) {\n let organizedBills = [...this.props.organizedBills];\n if (parseInt(ranking)) {\n organizedBills[categoryIndex].Agendas[agendaIndex].Ranking = parseInt(ranking);\n } else if (ranking === \"\") {\n organizedBills[categoryIndex].Agendas[agendaIndex].Ranking = \"\";\n }\n this.props.updateAgenda(organizedBills);\n }\n\n changeCommitteeDropdown(value) {\n this.props.changeCommitteeDropdown(value, () => {\n let organizedBills = [...this.props.organizedBills];\n organizedBills = this.setDescription(organizedBills);\n this.props.updateAgenda(organizedBills, true);\n });\n }\n\n changeDateDropdown(value) {\n this.props.changeDateDropdown(value, () => {\n let organizedBills = [...this.props.organizedBills];\n organizedBills = this.setDescription(organizedBills);\n this.props.updateAgenda(organizedBills, true);\n });\n }\n\n addBill(categoryIndex) {\n this.props.addBill(categoryIndex, () => {\n let organizedBills = [...this.props.organizedBills];\n organizedBills = this.setDescription(organizedBills);\n this.props.updateAgenda(organizedBills, true);\n });\n }\n\n toggleEditCategoryDescription(categoryIndex, save) {\n const categories = [...this.props.organizedBills];\n let category = categories.filter(c => !c.DeletionDate)[categoryIndex];\n category.editing = !category.editing;\n if (save) {\n category.Description = category.tempDescription;\n } else {\n category.tempDescription = this.categoryDescription(category);\n }\n this.props.updateAgenda(categories, save);\n }\n\n handleDescriptionChange(categoryIndex, val) {\n let organizedBills = [...this.props.organizedBills];\n organizedBills[categoryIndex].tempDescription = val;\n this.props.updateAgenda(organizedBills);\n }\n\n categoryDescription = category => {\n //if it's been edited, leave it at that\n const associatedReferenceCategory = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === category.CalendarCategoryTypeID);\n if (associatedReferenceCategory && associatedReferenceCategory.Description !== category.Description && associatedReferenceCategory.PluralDescription !== category.Description) {\n return category.Description;\n }\n\n //otherwise, use singular or plural reference description\n if (this.props.chamberCode === 'H' && category.CategoryCode === \"HOUBRC\" || category.CategoryCode === \"SENBRC\") {\n return category.Description;\n } else if (category.Agendas.filter(a => a.IsActive).length > 1 && category.PluralDescription) {\n return category.PluralDescription;\n } else {\n return category.Description;\n }\n }\n\n selectAllCommending(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n const opposite = !organizedBills.filter(c => !c.DeletionDate)[categoryIndex].selectAllCommending;\n organizedBills[categoryIndex].selectAllCommending = opposite;\n organizedBills[categoryIndex].Agendas.forEach(x => { if (x.LegislationClassID === 3) { x.checked = opposite } })\n this.props.updateAgenda(organizedBills);\n }\n\n selectAllMemorial(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n const opposite = !organizedBills.filter(c => !c.DeletionDate)[categoryIndex].selectAllMemorial;\n organizedBills[categoryIndex].selectAllMemorial = opposite\n organizedBills[categoryIndex].Agendas.forEach(x => { if (x.LegislationClassID === 2) { x.checked = opposite } })\n this.props.updateAgenda(organizedBills);\n }\n\n render() {\n //Filter out the categories that have already been added to the calendar\n const calendarCategoryOptions = this.props.calendarCategories.filter(category => {\n if (this.props.organizedBills.findIndex(cat => !cat.DeletionDate && cat.CalendarCategoryTypeID === category.CalendarCategoryTypeID) < 0) {\n return category;\n }\n });\n // The button will read 'Add' if the bill is not already part of a category. The button will read 'Move' if it is already part of a category.\n const billButtonText = index => {\n let billExists = false;\n if (this.props.selectedBill[index]) {\n this.props.organizedBills.some(category => {\n if (category.Agendas.findIndex(bill => bill.LegislationID === this.props.selectedBill[index].LegislationID) >= 0) {\n billExists = true;\n return true;\n }\n });\n if (billExists) {\n return (\"Move\");\n }\n }\n return (\"Add\");\n }\n\n return (\n <div className=\"drag-container\">\n {this.state.showAgendaItemEditor !== -1 &&\n <AgendaItemsComponent\n toggleAgendaItemEditor={this.toggleAgendaItemEditor}\n agenda={this.props.organizedBills.filter(c => !c.DeletionDate)[this.state.showAgendaItemEditorCategoryIndex].Agendas[this.state.showAgendaItemEditor]}\n categoryIndex={this.state.showAgendaItemEditorCategoryIndex}\n agendaIndex={this.state.showAgendaItemEditor}\n updateAgendaItems={this.props.updateAgendaItems}\n />\n }\n <div className=\"inner-grid two\">\n <React.Fragment>\n <span>Use these two selectors to view candidate bills reported out of committee.</span>\n <div />\n <div className=\"inner-grid two\">\n <div>\n <label>Committee Reported Out</label>\n <Select\n classNamePrefix=\"grid-selector-dropdown\"\n value={this.props.selectedCommittee}\n onChange={this.changeCommitteeDropdown}\n options={this.props.committeeList.sort((a, b) => a.label > b.label)}\n styles={{ menu: provided => ({ ...provided, zIndex: this.props.organizedBills.length + 1 }) }}\n isSearchable\n isClearable\n />\n </div>\n <div>\n <label>Date Reported Out</label>\n <Select\n classNamePrefix=\"grid-selector-dropdown\"\n value={this.props.selectedDate}\n onChange={this.changeDateDropdown}\n options={this.props.dateList.sort((a, b) => a.label > b.label)}\n styles={{ menu: provided => ({ ...provided, zIndex: this.props.organizedBills.length + 1 }) }}\n isSearchable\n isClearable\n />\n </div>\n </div>\n </React.Fragment>\n <div className=\"inner-grid eight-and-one\">\n <div>\n <label>Category</label>\n <Select\n classNamePrefix=\"grid-selector-dropdown\"\n options={calendarCategoryOptions}\n value={this.props.selectedCategory}\n onChange={this.props.changeCategoryDropdown}\n styles={{ menu: provided => ({ ...provided, textAlign: 'right', whiteSpace: 'nowrap', right: '0', width: 'auto', zIndex: this.props.organizedBills.length + 1 }) }}\n />\n </div>\n <button disabled={!this.props.selectedCategory} type=\"button\" className=\"button primary\" style={{ marginTop: \"24px\", height: \"36px\" }} onClick={this.props.addCategory}>Add Category</button>\n </div>\n </div>\n <div style={{ display: 'flex', gap: '25px' }}>\n <button className=\"button-link\" onClick={() => this.props.toggleHideAllCategories(this.props.hideCategories.filter(c => c).length !== this.props.organizedBills.length)}>{this.props.hideCategories.filter(c => c).length !== this.props.organizedBills.length ? \"Collapse All Categories\" : \"Expand All Categories\"}</button>\n <button className=\"button-link\" onClick={() => this.props.toggleHideAllNonIncludedBills()}>{this.props.hideAllNonIncludedBills ? \"Show All Legislation\" : \"Hide Non-Included Legislation\"}</button>\n </div>\n <div style={{ marginTop: 15 }}>\n <div className=\"bill-grid communications-category-grid calendar-category-grid\">\n <div className=\"bill-grid-header\">\n <span>Seq.</span>\n </div>\n <div className=\"bill-grid-header\">\n <span></span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Bill #</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Committee/Date Reported</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>{this.props.showTitles ? \"Title\" : \"Caption\"}</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Status</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Action</span>\n </div>\n </div>\n {this.props.organizedBills.filter(c => !c.DeletionDate).map((category, categoryIndex) =>\n <form key={categoryIndex}>\n <div style={{ position: 'sticky', top: '0px', zIndex: this.props.organizedBills.filter(c => !c.DeletionDate).length - categoryIndex }}>\n <div className={`calendar-category-grid calendar-category-grid-header${category.Agendas && category.Agendas.length ? '' : ' deletable'}`}>\n <div>\n <button onClick={() => this.props.toggleHideCategory(categoryIndex)} type=\"button\" className={`${this.props.hideCategories[categoryIndex] ? \"arrow-down\" : \"arrow-up\"}`}></button>\n </div>\n <div>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={category.selectAll || ''}\n onChange={() => this.toggleSelectAll(categoryIndex)}\n />\n </div>\n <div>\n <span>\n {category.editing ?\n <React.Fragment>\n <textarea\n className={`category-description-${categoryIndex}`}\n style={{ width: '90%', fontSize: '0.9em' }}\n type=\"text\"\n onChange={(e) => this.handleDescriptionChange(categoryIndex, e.target.value)}\n value={category.tempDescription}\n />\n <a className=\"icon save\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex, true)} />\n <a className=\"icon delete\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex)} />\n </React.Fragment>\n :\n <React.Fragment>\n <b>{category.DisplayType ? `${this.categoryDescription(category)} - ${category.CategoryType} ` : this.categoryDescription(category)}</b>\n <a className=\"icon edit\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex)} />\n </React.Fragment>\n }\n </span>\n {category.CalendarCategoryTypeID === 38 &&\n <div style={{ display: \"inline-flex\" }}>\n <button type=\"button\" class=\"button small-button\" style={{ marginRight: \"10px\" }} onClick={() => this.selectAllCommending(categoryIndex)}>Select All Commending</button>\n <button type=\"button\" class=\"button small-button\" onClick={() => this.selectAllMemorial(categoryIndex)}>Select All Memorial</button>\n </div>\n }\n </div>\n <div>\n {!category.Agendas || !category.Agendas.length ? <button onClick={() => this.props.deleteCategory(category)} className=\"icon delete\" type=\"button\" />\n :\n this.props.userRoles.find(x => x === \"SenateCalendarEditor\") && [98, 102].includes(category.CalendarCategoryTypeID) &&\n <React.Fragment>\n <label style={{ margin: \"0 5px 0 0\" }}>Show w/ Amendments</label>\n <div className=\"bill-grid-actions\">\n <div onClick={() => this.toggleShowAmendments(categoryIndex)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={category.showAmendments} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n </React.Fragment>\n }\n </div>\n <div className=\"flex-row\" style={{ gap: '10px' }}>\n {\n category.IsLegislationCategory && this.props.organizedBills.find(cat => !cat.DeletionDate && cat.CalendarCategoryTypeID !== category.CalendarCategoryTypeID && cat.IsLegislationCategory && cat.Agendas.find(agenda => agenda.checked)) ?\n <button type=\"button\" className=\"button small-button\" onClick={() => this.switchCategory(categoryIndex)}>Move to Category</button>\n : !category.IsLegislationCategory && category.Agendas.length && category.Agendas.find(a => a.checked) &&\n <React.Fragment>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(false, categoryIndex)}>Exclude Selected</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(true, categoryIndex)}>Include Selected</button>\n </div>\n </React.Fragment>\n }\n </div>\n <div>\n {!this.props.pendingSave && <button type=\"button\" className=\"button small-button\" onClick={() => this.props.toggleCalendarPreview(categoryIndex)} >Preview</button>}\n </div>\n <div>\n {!this.props.pendingSave && category.CalendarCategoryTypeID != 131 && <button type=\"button\" className=\"button small-button\" onClick={() => this.props.togglePortal(this.props.showPortal, category)}>PDF Preview </button>}\n </div>\n </div>\n {!this.props.hideCategories[categoryIndex] && category.IsLegislationCategory &&\n <div className=\"bill-grid communications-category-grid calendar-category-grid\">\n <div></div>\n <div></div>\n <div>\n <LargeListSelect\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n options={this.getCategoryBills(category)}\n onChange={(value) => this.props.changeBillDropdown(categoryIndex, value)}\n value={this.props.selectedBill[categoryIndex]}\n filterOption={(bill, inputValue) => {\n if (category.Agendas.findIndex(agenda => agenda.LegislationID === bill.value) < 0) {\n return bill.label.toLowerCase().includes(inputValue.toLowerCase());\n } else { return false; }\n }}\n />\n </div>\n <div className=\"center\">\n <button\n className=\"button\"\n type=\"button\"\n disabled={!this.props.selectedBill[categoryIndex]}\n onClick={() => this.addBill(categoryIndex)}>\n {billButtonText(categoryIndex)}\n </button>\n </div>\n <div className=\"flex-row four space-around\" style={{ display: 'flex', alignItems: 'center' }}>\n {category.Agendas.length && category.Agendas.find(a => a.checked) ?\n <React.Fragment>\n <div>\n <span>Checked Legislation:</span>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(false, categoryIndex)}>Exclude</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(true, categoryIndex)}>Include</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.moveTo('top', categoryIndex)}>Move to Top</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.moveTo('bottom', categoryIndex)}>Move to Bottom</button>\n </div>\n </React.Fragment>\n : null\n }\n </div>\n </div>\n }\n </div>\n {!this.props.hideCategories[categoryIndex] &&\n <div>\n {category.Agendas.map((item, itemIndex) => {\n if (this.props.hideAllNonIncludedBills && !item.IsActive) { return; }\n const showNewIndicator = category.CategoryCode != \"Order\" && category.CalendarCategoryID && !item.AgendaID;\n return (\n <React.Fragment key={`${item.AgendaID}-${itemIndex}`}>\n {isNotHidden(item, category, this.props.committeeList) ?\n <div className=\"bill-grid communications-category-grid calendar-category-grid\"\n style={getItemStyle(\n false,\n false,\n item.IsActive\n )}\n >\n <div className=\"dlas-forms\" style={{ padding: \"5px\" }}><input type=\"input\" value={item.Ranking ? item.Ranking : \"\"} onChange={(e) => this.setRanking(categoryIndex, itemIndex, e.target.value)} /></div>\n <div>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={item.checked || ''}\n onChange={e => this.toggleRow(categoryIndex, itemIndex, e)} />\n </div>\n <div className=\"new-container\">\n {this.props.organizedBills.find(c => c.CalendarCategoryTypeID !== category.CalendarCategoryTypeID && c.Agendas.find(a => a.LegislationNumber === item.LegislationNumber)) &&\n <React.Fragment>\n <i data-tip=\"This legislation exists in multiple categories.\" className={`icon notification calendar-authoring${showNewIndicator ? ' new' : ''}`} />\n </React.Fragment>\n }\n <Link to={`/bill-details/${this.props.sessionCode}/${item.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\" style={!item.IsActive ? { color: 'inherit' } : {}}> {item.LegislationNumber}</Link>\n {showNewIndicator && <span className='corner-new'>NEW</span>}\n </div>\n <div>\n <span>{this.props.fullCommitteeList.find(x => x.CommitteeID === item.CommitteeID) ? this.props.fullCommitteeList.find(x => x.CommitteeID === item.CommitteeID).Abbreviation + \" - \" + moment(item.CandidateDate).format(\"MM/DD/YYYY\") : category.CategoryCode != \"Order\" && item.CandidateDate && moment(item.CandidateDate).format(\"MM/DD/YYYY\")}</span>\n </div>\n <div>\n <div className=\"flex-row\" style={{ display: 'flex' }}>\n <div className=\"flex-row flex-vertical-center\" style={{ width: \"100%\", display: \"inline-flex\" }}>\n {item.isEditing\n ? category.Description !== \"Order of Business\"\n ? <Editor\n init={{\n inline: true,\n toolbar: false,\n menubar: false\n }}\n onEditorChange={(content) => this.handleChange(categoryIndex, itemIndex, content, item.LegislationTitle != null)}\n value={item.LegislationTitle ? item.LegislationTitle : item.newDescription}\n />\n : <textarea\n onChange={(e) => this.handleChange(categoryIndex, itemIndex, e.target.value, item.LegislationTitle != null)}\n value={item.LegislationTitle ? item.LegislationTitle : item.newDescription}\n />\n :\n <React.Fragment>\n <span className={this.props.organizedBills && this.props.organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex].expandTitle ? \"calendar-leg-title-wrapper expanded\" : \"calendar-leg-title-wrapper\"}>{item.Description === \"Call to Order\" ? \"Call to Order - \" + this.props.calendarTime : renderHTML(!this.props.showTitles && item.LegislationDescription ? item.LegislationDescription : !this.props.showTitles && item.Description ? item.Description : this.props.showTitles && item.LegislationTitle ? item.LegislationTitle : item.Description ? item.Description : \"\")}</span>\n {!this.props.showTitles && item.LegislationDescription && item.LegislationDescription.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : !this.props.showTitles && item.Description && item.Description.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : this.props.showTitles && item.LegislationTitle && item.LegislationTitle.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : item.Description && item.Description.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : null}\n </React.Fragment>\n }\n </div>\n <React.Fragment>\n <div className=\"bill-grid-actions\">\n {item.isEditing\n ?\n <div className=\"bill-grid-actions\" style={{ display: \"inline-flex\" }}>\n <button onClick={() => this.saveChange(categoryIndex, itemIndex)} type=\"button\" className=\"icon save float-right\"></button>\n <button onClick={() => this.toggleEdit(categoryIndex, itemIndex)} type=\"button\" className=\"icon delete float-right\"></button>\n </div>\n :\n <div className=\"bill-grid-actions\">\n {/*Allow edit if it is not the call to order item, the item IsActive, and we are viewing titles OR it is the invocation, pledge, or reading of the journal*/}\n {item.Description !== \"Call to Order\" && item.IsActive && (this.props.showTitles || [2, 3, 4, 6, 7, 8].includes(item.CalendarCategoryTemplateID)) &&\n <button onClick={() => this.toggleEdit(categoryIndex, itemIndex)} type=\"button\" className=\"icon edit float-right\"></button>\n }\n </div>\n }\n {category.CategoryCode !== \"Order\" && <button onClick={() => this.showAgendaItems(categoryIndex, itemIndex)} className={item.showAgendaItems ? 'arrow-up' : 'arrow-down'} type=\"button\"></button>}\n </div>\n </React.Fragment>\n </div>\n {item.showAgendaItems &&\n <div>\n <button type=\"button\" onClick={() => this.toggleAgendaItemEditor(itemIndex, categoryIndex)} className=\"button-link\">Edit Notes</button>\n {/* If an item has an LdNumber it's assumed to be an amendment */}\n {item.AgendaItems.filter(item => item.Description && item.IsActive && (!item.LDNumber ? true : category.showAmendments || ![98, 102].includes(category.CalendarCategoryTypeID) ? true : false)).map((item, itemIndex) =>\n <div key={itemIndex} className=\"programmatic-notes\">\n {renderHTML(item.DraftText || item.CalendarDescription || item.Description)}\n </div>\n )}\n </div>\n }\n </div>\n <div>\n <span className={item.IsActive ? \"message-success\" : \"\"}>{item.IsActive ? 'Included' : 'Not Included'}</span>\n </div>\n <div className=\"bill-grid-actions\">\n <div onClick={() => this.toggleBill(categoryIndex, itemIndex)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={item.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n </div>\n :\n null\n }\n </React.Fragment>\n )\n }\n )}\n </div>\n }\n </form>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default BillsGrid;","export const generateCsv = (columns, rows) => {\n let doc = \"\";\n let newLine = \"\\r\\n\";\n\n doc = columns.join(\",\");\n doc = doc + newLine;\n\n for (let i = 0; i < rows.length; i++) {\n columns.forEach(column => {\n let col = column.replace(/ /g, \"\");\n if (rows[i][col] != undefined) {\n let rowText = rows[i][col].toString().replace(/(\\r\\n|\\n|\\r)/gm, \"\");\n if (!rowText.startsWith(\"=HYPERLINK(\"))\n rowText = rowText.replaceAll('\"', \"'\");\n rowText = `\\\"${rowText}\\\"`;\n doc = doc + rowText + \",\";\n } else {\n doc = doc + \" \" + \",\";\n }\n });\n\n doc = doc + newLine\n }\n return doc\n}","import { publicRequest, partnerRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst voteLinkRequest = \"GET_VOTE_LINK_REQUEST\";\nconst voteLinkSuccess = \"GET_VOTE_LINK_SUCCESS\";\nconst voteLinkFailure = \"GET_VOTE_LINK_FAILURE\";\n\nconst voteDetailsRequest = \"GET_VOTE_DETAILS_REQUEST\";\nconst voteDetailsSuccess = \"GET_VOTE_DETAILS_SUCCESS\";\nconst voteDetailsFailure = \"GET_VOTE_DETAILS_FAILURE\";\n\nconst voteActionListRequest = \"GET_VOTE_ACTION_LIST_REQUEST\";\nconst voteActionListSuccess = \"GET_VOTE_ACTION_LIST_SUCCESS\";\nconst voteActionListFailure = \"GET_VOTE_ACTION_LIST_FAILURE\";\n\nconst voteListSuccess = \"GET_VOTE_LIST_SUCCESS\";\nconst voteListFailure = \"GET_VOTE_LIST_FAILURE\";\n\nconst voteTypesSuccess = \"GET_VOTE_TYPE_SUCCESS\";\nconst voteTypesFailure = \"GET_VOTE_TYPE_FAILURE\";\n\nconst voteSaveSuccess = \"GET_VOTE_SAVE_SUCCESS\";\nconst voteSaveFailure = \"GET_VOTE_SAVE_FAILURE\";\n\nconst voteSaveBulkSuccess = \"GET_VOTE_SAVE_BULK_SUCCESS\";\nconst voteSaveBulkFailure = \"GET_VOTE_SAVE_BULK_FAILURE\";\n\nconst voteFileSuccess = \"GET_VOTE_FILE_GEN_SUCCESS\";\nconst voteFileFailure = \"GET_VOTE_FILE_GEN_FAILURE\";\n\nconst voteSaveMotionSuccess = \"SAVE_VOTE_MOTION_SUCCESS\";\nconst voteSaveMotionFailure = \"SAVE_VOTE_MOTION_FAILURE\";\n\nconst initialState = {\n voteLinkResponse: [],\n voteLinkError: '',\n voteDetailsResponse: [],\n voteDetailsError: '',\n voteList: [],\n voteListError: '',\n voteTypes: [],\n voteTypesError: '',\n voteSave: [],\n voteSaveError: '',\n voteSaveBulk: '',\n voteSaveBulkError: '',\n voteFile: '',\n voteFileError: '',\n voteSaveMotion: '',\n voteSaveMotionError: '',\n};\n\nexport const voteActionCreators = {\n // GET VOTE DETAILS\n requestVoteDetails: () => ({\n type: voteDetailsRequest,\n isFetching: true\n }),\n\n receiveVoteDetails: (response) => ({\n type: voteDetailsSuccess,\n isFetching: false,\n voteDetailsResponse: response\n }),\n\n voteDetailsError: message => ({\n type: voteDetailsFailure,\n isFetching: false,\n voteDetailsError: message\n }),\n\n getVoteDetails: (params, partner) => {\n return dispatch => {\n dispatch(voteActionCreators.requestVoteDetails());\n\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/GetPartnerVoteByIdAsync/', 'GET', '', '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/GetVoteByIdAsync/', 'GET', '', '', params);\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteDetailsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteDetails(result[1].Votes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.voteDetailsError('No Vote Data'))\n return Promise.reject('No Vote Data')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // VOTE LINKS CALL\n requestVoteLink: () => ({\n type: voteLinkRequest,\n isFetching: true\n }),\n\n receiveVoteLink: (response) => ({\n type: voteLinkSuccess,\n isFetching: false,\n voteLinkResponse: response\n }),\n\n voteLinkError: message => ({\n type: voteLinkFailure,\n isFetching: false,\n voteLinkError: message\n }),\n\n getVoteLink: (params) => {\n return dispatch => {\n dispatch(voteActionCreators.requestVoteLink());\n\n return publicRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/GetVoteLinksAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteLinkError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteLink(result[1].VoteLinks))\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.receiveVoteLink([]))\n return Promise.reject('No Content')\n }\n }).catch(err => console.log(err))\n }\n },\n\n // VOTE ACTION LIST CALL\n requestVoteActionList: () => ({\n type: voteActionListRequest,\n isFetching: true\n }),\n\n receiveVoteActionList: (response) => ({\n type: voteActionListSuccess,\n isFetching: false,\n voteActionList: response\n }),\n\n voteActionListError: message => ({\n type: voteActionListFailure,\n isFetching: false,\n voteActionListError: message\n }),\n\n getVoteActionList: (params) => {\n return dispatch => {\n dispatch(voteActionCreators.requestVoteActionList());\n\n return partnerRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/GetVoteActionListAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteActionListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteActionList(result[1].VoteActions))\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.receiveVoteActionList([]))\n return Promise.reject('No Content')\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveVoteList: (response) => ({\n type: voteListSuccess,\n voteList: response\n }),\n\n voteListError: message => ({\n type: voteListFailure,\n voteListError: message\n }),\n\n getVoteList: (params) => {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/GetPartnerVoteListAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteList(result[1].ShallowVotes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.receiveVoteList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveVoteTypes: (response) => ({\n type: voteTypesSuccess,\n voteTypes: response\n }),\n\n voteTypesError: message => ({\n type: voteTypesFailure,\n voteTypesError: message\n }),\n\n getVoteTypes: () => {\n return dispatch => {\n\n return publicRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/GetVoteTypeReferencesAsync/', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteTypesError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteTypes(result[1].VoteTypes));\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.voteTypesError('No Content'));\n return Promise.reject('No Content');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveVoteSave: (response) => ({\n type: voteSaveSuccess,\n voteSave: response\n }),\n\n voteSaveError: message => ({\n type: voteSaveFailure,\n voteSaveError: message\n }),\n\n saveVote: (body) => {\n return dispatch => {\n\n return partnerRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/SaveVoteAsync/', 'POST', '', body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteSaveError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteSave(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.voteSaveError('No Content'));\n return Promise.reject('No Content');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveVoteSaveBulk: (response) => ({\n type: voteSaveBulkSuccess,\n voteSaveBulk: response\n }),\n\n voteSaveBulkError: message => ({\n type: voteSaveBulkFailure,\n voteSaveBulkError: message\n }),\n\n saveVoteBulk: (body) => {\n return dispatch => {\n\n return partnerRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/PublishVotesAsync/', 'PUT', '', body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteSaveBulkError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteSaveBulk(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.voteSaveBulkError('No Content'));\n return Promise.reject('No Content');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveVoteFile: (response) => ({\n type: voteFileSuccess,\n voteFile: response\n }),\n\n voteFileError: message => ({\n type: voteFileFailure,\n voteFileError: message\n }),\n\n voteFileGen: (params) => {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_VOTE_FILE_GEN_URL) + '/VoteFileGeneration/api/ProcessTallySheetFileAsync/', 'POST', '', '', params, true)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteFileError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteFile(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.voteFileError('No Content'));\n return Promise.reject('No Content');\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveVoteSaveMotion: (response) => ({\n type: voteSaveMotionSuccess,\n voteSaveMotion: response\n }),\n\n voteSaveMotionError: message => ({\n type: voteSaveMotionFailure,\n voteSaveMotionError: message\n }),\n\n saveVoteMotion: (body) => {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_VOTE_API_URL) + '/Vote/api/VoteMotionSaveAsync/', 'POST', '', body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(voteActionCreators.voteSaveMotionError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(voteActionCreators.receiveVoteSaveMotion(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(voteActionCreators.voteSaveMotionError('No Content'));\n return Promise.reject('No Content');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n};\n\nexport const reducer = (state, action) => {\n state = state || initialState;\n\n switch (action.type) {\n case voteDetailsRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case voteDetailsSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n voteDetailsResponse: action.voteDetailsResponse,\n voteDetailsError: ''\n });\n case voteDetailsFailure:\n return Object.assign({}, state, {\n isFetching: false,\n voteDetailsError: action.voteDetailsError\n });\n case voteLinkRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case voteLinkSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n voteLinkResponse: action.voteLinkResponse,\n voteLinkError: ''\n });\n case voteLinkFailure:\n return Object.assign({}, state, {\n isFetching: false,\n voteLinkError: action.voteLinkError\n });\n case voteActionListRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case voteActionListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n voteActionList: action.voteActionList,\n voteActionListError: ''\n });\n case voteActionListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n voteActionListError: action.voteActionListError\n });\n case voteListSuccess:\n return Object.assign({}, state, {\n voteList: action.voteList,\n voteListError: ''\n });\n case voteListFailure:\n return Object.assign({}, state, {\n voteListError: action.voteListError\n });\n case voteTypesSuccess:\n return Object.assign({}, state, {\n voteTypes: action.voteTypes,\n voteTypesError: ''\n });\n case voteTypesFailure:\n return Object.assign({}, state, {\n voteTypesError: action.voteTypesError\n });\n case voteSaveSuccess:\n return Object.assign({}, state, {\n voteSave: action.voteSave,\n voteSaveError: ''\n });\n case voteSaveFailure:\n return Object.assign({}, state, {\n voteSaveError: action.voteSaveError\n });\n case voteSaveSuccess:\n return Object.assign({}, state, {\n voteSaveBulk: action.voteSaveBulk,\n voteSaveBulkError: ''\n });\n case voteSaveFailure:\n return Object.assign({}, state, {\n voteSaveBulkError: action.voteSaveBulkError\n });\n case voteFileSuccess:\n return Object.assign({}, state, {\n voteFile: action.voteFile,\n voteFileError: ''\n });\n case voteFileFailure:\n return Object.assign({}, state, {\n voteFileError: action.voteFileError\n });\n case voteSaveMotionSuccess:\n return Object.assign({}, state, {\n voteSaveMotion: action.voteSaveMotion,\n voteSaveMotionError: ''\n });\n case voteSaveMotionFailure:\n return Object.assign({}, state, {\n voteSaveMotionError: action.voteSaveMotionError\n });\n default:\n return state;\n }\n};\n","import { partnerRequest, publicRequest } from '../services/request.service';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst patronListRequest = \"GET_PATRON_LIST_REQUEST\";\nconst patronListSuccess = \"GET_PATRON_LIST_SUCCESS\";\nconst patronListFailure = \"GET_PATRON_LIST_FAILURE\";\n\nconst patronRolesSuccess = \"GET_PATRON_ROLES_SUCCESS\"\nconst patronRolesFailure = \"GET_PATRON_ROLES_FAILURE\"\n\nconst patronTypesSuccess = \"GET_PATRON_TYPES_SUCCESS\";\nconst patronTypesFailure = \"GET_PATRON_TYPES_FAILURE\";\n\nconst patronSaveSuccess = \"PATRON_SAVE_SUCCESS\";\nconst patronSaveFailure = \"PATRON_SAVE_FAILURE\";\nconst patronSaveRequest = \"PATRON_SAVE_REQUEST\";\n\nconst initialState = {\n senatePatronsList: [],\n housePatronsList: [],\n chiefPatronsList: [],\n patronList: [],\n patronRoles: [],\n patronRolesError: '',\n patronTypes: [],\n patronTypesError: '',\n patronSaveList: [],\n patronSaveError: ''\n};\n\nexport const patronActionCreators = {\n requestPatronList: () => ({\n type: patronListRequest,\n isFetching: true\n }),\n\n receivePatronList: (housePatrons, senatePatrons, chiefPatrons, patronList) => ({\n type: patronListSuccess,\n isFetching: false,\n senatePatronsList: senatePatrons,\n housePatronsList: housePatrons,\n chiefPatronsList: chiefPatrons,\n patronList: patronList\n }),\n\n patronListError: message => ({\n type: patronListFailure,\n isFetching: false,\n message\n }),\n\n getPatronList: (params) => {\n return dispatch => {\n dispatch(patronActionCreators.requestPatronList());\n\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_PATRON_SERVICE) + '/LegislationPatron/api/GetLegislationPatronsByIdAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(patronActionCreators.patronsListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n let patrons = result[1];\n var housePatrons = [];\n var senatePatrons = [];\n var chiefPatrons = [];\n let patronList = [];\n for (var i = 0; i < patrons.Patrons.length; i++) {\n if (patrons.Patrons[i].ChamberCode === 'H' && patrons.Patrons[i].DisplayName !== \"(Chief Patron)\") {\n housePatrons.push(patrons.Patrons[i])\n }\n if (patrons.Patrons[i].ChamberCode === 'S' && patrons.Patrons[i].DisplayName !== \"(Chief Patron)\") {\n senatePatrons.push(patrons.Patrons[i])\n }\n if (patrons.Patrons[i].DisplayName === \"(Chief Patron)\") {\n chiefPatrons.push(patrons.Patrons[i])\n }\n patronList.push(patrons.Patrons[i])\n }\n\n dispatch(patronActionCreators.receivePatronList(housePatrons, senatePatrons, chiefPatrons, patronList))\n } else if (result[0] === NO_CONTENT) {\n var housePatrons = [];\n var senatePatrons = [];\n var chiefPatrons = [];\n let patronList = [];\n dispatch(patronActionCreators.receivePatronList(housePatrons, senatePatrons, chiefPatrons, patronList))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePatronRoles: responseObj => ({\n type: patronRolesSuccess,\n patronRoles: responseObj\n }),\n\n patronRolesError: message => ({\n type: patronRolesFailure,\n patronRolesError: message\n }),\n\n getPatronRoles: () => {\n return dispatch => {\n\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_PATRON_SERVICE) + '/LegislationPatron/api/getPatronRoleTypeListAsync/', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(patronActionCreators.patronRolesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(patronActionCreators.receivePatronRoles(result[1].PatronRolesList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(patronActionCreators.patronRolesError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receivePatronTypes: responseObj => ({\n type: patronTypesSuccess,\n patronTypes: responseObj\n }),\n\n patronTypesError: message => ({\n type: patronTypesFailure,\n patronTypesError: message\n }),\n\n getPatronTypes: (params) => {\n return dispatch => {\n\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_PATRON_SERVICE) + '/LegislationPatron/api/GetMemberPatronTypeListAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(patronActionCreators.patronTypesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(patronActionCreators.receivePatronTypes(result[1].MemberPatronTypes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(patronActionCreators.patronTypesError([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n requestPatronSave: () => ({\n type: patronSaveRequest,\n isFetching: true\n }),\n\n receivePatronSave: responseObj => ({\n type: patronSaveSuccess,\n isFetching: false,\n patronSaveList: responseObj\n }),\n\n patronSaveError: message => ({\n type: patronSaveFailure,\n isFetching: false,\n patronSaveError: message\n }),\n\n savePatrons: (body) => {\n return dispatch => {\n dispatch(patronActionCreators.requestPatronSave());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n };\n\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_PATRON_SERVICE) + '/LegislationPatron/api/SaveLegislationPatronAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(patronActionCreators.patronSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(patronActionCreators.receivePatronSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(patronActionCreators.patronSaveError([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n }\n};\n\nexport const reducer = (state, action) => {\n state = state || initialState;\n\n switch (action.type) {\n case patronListRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case patronListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n senatePatronsList: action.senatePatronsList,\n housePatronsList: action.housePatronsList,\n chiefPatronsList: action.chiefPatronsList,\n patronList: action.patronList\n });\n case patronListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case patronRolesSuccess:\n return Object.assign({}, state, {\n patronRoles: action.patronRoles,\n patronRolesError: ''\n });\n case patronRolesFailure:\n return Object.assign({}, state, {\n patronRolesError: action.patronRolesError\n });\n case patronTypesSuccess:\n return Object.assign({}, state, {\n patronTypes: action.patronTypes,\n patronTypesError: ''\n });\n case patronTypesFailure:\n return Object.assign({}, state, {\n patronTypesError: action.patronTypesError\n });\n case patronSaveSuccess:\n return Object.assign({}, state, {\n patronSave: action.patronSave,\n patronSaveList: action.patronSaveList,\n patronTypesError: ''\n });\n case patronSaveFailure:\n return Object.assign({}, state, {\n patronSaveError: action.patronSaveError\n });\n\n default:\n return state;\n }\n};\n","import React, { useState } from 'react';\nimport { Link, withRouter } from 'react-router-dom';\nimport renderHTML from 'react-render-html';\nimport ReactTooltip from 'react-tooltip';\n\nconst VERSION_AUTHOR = \"LegislationText\";\n\nfunction VersionData(props) {\n const [showText, toggleText] = useState(false);\n let impactFileUrls = [];\n let pdfLink = '';\n\n if (props.ImpactFile && props.ImpactFile.length > 0) {\n for (let i = 0; i < props.ImpactFile.length; i++) {\n impactFileUrls.push({\n url: props.ImpactFile[i].FileURL,\n description: props.ImpactFile[i].Description ? props.ImpactFile[i].Description.substr(0, props.ImpactFile[i].Description.indexOf(\"(\")) : \"Impact statement\"\n });\n }\n }\n\n if (props.PDFFile && props.PDFFile.length > 0) {\n pdfLink = <a href={props.PDFFile[0].FileURL} target=\"_blank\" className=\"link-pdf\">PDF</a>\n }\n let descriptionAndDisposition = props.Description + (props.pushWithKeywords ? \" \" + props.DocumentCode : \"\");\n let substituteLdAndDocCodeString = \"\";\n // add (LD#-DocCodeSuffix) to the description (if not already there) if it is a substitute and does not have 'C' in the document code\n if (props.LegislationVersion === \"Substitute\" && props.LDNumber && !props.Description.includes(props.LDNumber.replace(\"D\", \"\")) && props.DocumentCode && !props.DocumentCode.includes('C')) {\n const subDocCodeRegex = /[HS](?:.(?![HS]))+$/; //matches the last H/S in the string and everything after (e.g. H13 from HB202H13)\n substituteLdAndDocCodeString = \" (\" + props.LDNumber + \"-\" + props.DocumentCode.match(subDocCodeRegex) + \")\";\n }\n // Versions that are held should not be linked to except for certain signed in users\n // Also the text disposition is hidden because they don't want public users to see that it is held\n // We do not need to worry about adding the 'keyword-hit-list' class if props.pushWithKeywords is true (like we do for other dispositions) since 'Hold' versions shouldn't be returned in the keyword search results\n if (props.TextDisposition === \"Hold\") {\n return (<div className=\"bill-details-versions-grid-container\">\n <div className={`bill-details-versions-grid${!props.IsPublic ? ' not-public' : ''}`}>\n {/* Previously date */}\n <div>{props.ChamberCode && props.ChamberCode !== \"\" ? props.ChamberCode === \"H\" ? \"House\" : \"Senate\" : props.Sponsor}</div>\n <div>{props.userClaims.resources.find(resource => resource === VERSION_AUTHOR) ? <Link to={`/bill-details/${props.SessionCode || props.sessionCode}/${props.LegislationNumber}/text/${props.DocumentCode}`}>{props.Description}{substituteLdAndDocCodeString} (On Hold)</Link> : `${props.Description}`}</div>\n </div>\n </div>);\n } else if (props.TextDisposition !== \"Posted\") {\n descriptionAndDisposition = props.Description + \" \" +\n (props.TextDisposition &&\n (props.TextDisposition !== \"Offered\" || props.ChamberCode !== \"S\")\n && ((props.LegislationVersion !== \"Substitute\" || props.TextDisposition === \"Adopted\" || props.ChamberCode === props.LegislationNumber.charAt(0))\n || (props.LegislationVersion === \"Substitute\" && props.ChamberCode !== props.LegislationNumber.charAt(0) && props.TextDisposition === \"Not Adopted\"))\n ? props.TextDisposition\n : '') + \" \"\n + (substituteLdAndDocCodeString != \"\"\n ? substituteLdAndDocCodeString\n : props.pushWithKeywords\n ? props.DocumentCode\n : props.TextDisposition === \"Offered\"\n ? \"Offered\"\n : \"\");\n\n //Bandaid over offered not always appear but also sometimes appearing twice\n descriptionAndDisposition = descriptionAndDisposition.substring(descriptionAndDisposition.length - 15, descriptionAndDisposition.length) === \"Offered Offered\" ? descriptionAndDisposition.substring(0, descriptionAndDisposition.length - 8) : descriptionAndDisposition\n }\n //If the IsReprint boolean is true and the service didn't append Reprint to the description already\n if (props.IsReprint && !descriptionAndDisposition.includes(\"(Reprint)\")) {\n descriptionAndDisposition = descriptionAndDisposition + \" (Reprint)\";\n }\n\n return (\n <React.Fragment>\n <div className={showText && props.LegislationVersion && props.LegislationVersion.includes(\"Amendment\") ? \"bill-details-versions-grid-container no-border\" : \"bill-details-versions-grid-container\"}>\n {/* This is a grid instead of a table because displaying the draft text messes up the alignment of tables */}\n <div className={(props.pushWithKeywords\n ? \"bill-details-versions-grid keyword-hit-list\"\n : \"bill-details-versions-grid\" + (!props.IsPublic ? \" not-public\" : \"\"))\n }>\n {/* Previously date */}\n <div>{props.Sponsor === \"Governor\" ? \"Governor\" : props.ChamberCode && props.ChamberCode !== \"\" ? props.ChamberCode === \"H\" ? \"House\" : \"Senate\" : props.Sponsor}</div>\n <div className={props.pushWithKeywords && \"double-version-links\"}>\n {props.editing == false || props.editing == undefined\n ? <React.Fragment>\n {props.pushWithKeywords || props.legislationClass === \"Budget\"\n ? <span>{descriptionAndDisposition}</span>\n : <Link to={`/bill-details/${props.SessionCode || props.sessionCode}/${props.LegislationNumber\n ? props.LegislationNumber\n : props.legislationNumber}/text/${props.DocumentCode}`}>{descriptionAndDisposition}</Link>\n }\n {props.userClaims && props.userClaims.roles && props.userClaims.roles.find(x => x === \"DLASStaff\") && <button className='icon edit' onClick={() => { props.handleToggleDescriptionEdit(props.index) }} />}\n </React.Fragment>\n : <React.Fragment>\n <input value={props.tempDescription} onChange={(e) => props.handleDescriptionChange(e.target.value, props.index)} />\n <span>{(props.TextDisposition && (props.TextDisposition !== \"Offered\" || props.ChamberCode !== \"S\") && (props.LegislationVersion !== \"Substitute\" || props.TextDisposition === \"Adopted\" || props.ChamberCode === props.LegislationNumber.charAt(0)) ? descriptionAndDisposition.includes(props.TextDisposition) && props.TextDisposition : '')}</span>\n <a className=\"icon save\" onClick={() => props.saveDescription(props.index)}></a>\n <a className=\"icon delete\" onClick={() => { props.handleToggleDescriptionEdit(props.index) }}></a>\n </React.Fragment>}\n {props.pushWithKeywords && <a style={{ zIndex: 2 }} onClick={() => props.pushWithKeywords(props.SessionCode || props.sessionCode, props.legislationNumber, props.DocumentCode)}>View Keyword Hits {props.countMatches === 'LOADING' ? <div aria-label=\"Loading\" className=\"small-spinner\" /> : props.countMatches > 0 ? \"(\" + props.countMatches + \")\" : ''}</a>}\n {!props.IsPublic && !props.pushWithKeywords &&\n <React.Fragment>\n <i data-tip=\"This version has not been published and is not visible to the public.\" className={'icon notification unpublished-version'} />\n <ReactTooltip />\n </React.Fragment>}\n </div>\n <div>{impactFileUrls[0] != undefined ? <a type=\"button\" href=\"javascript:void(0)\" onClick={() => toggleText(!showText)}>{impactFileUrls.length > 1 ? \"Impact Statements\" : \"Impact Statement\"}</a> : null}</div>\n <div>{props.LinkFile && props.LinkFile.length > 0 ? <a href={props.LinkFile[0].FileURL} target=\"_blank\" className=\"link-new-tab\">Link</a> : null}</div>\n <div>{pdfLink ? pdfLink : null}</div>\n <div>{props.userClaims && props.userClaims.roles && props.userClaims.roles.find(x => x === \"ImpactStatementAuthor\") && props.toggleStatementForm ? <div><a type=\"button\" className=\"button-link icon add impact-statement\" onClick={() => props.toggleStatementForm((props.VersionDate ? props.VersionDate : props.DraftDate), descriptionAndDisposition, props.DocumentCode)}>IS</a></div> : null}</div>\n <div style={{ textAlign: 'right' }}>{((props.LegislationVersion && props.LegislationVersion.includes(\"Amendment\")) || impactFileUrls.length) ? <button aria-expanded={showText} type=\"button\" className={showText ? \"arrow-up\" : \"arrow-down\"} onClick={() => toggleText(!showText)}>Show amendment text and/or impact statement(s)</button> : null}</div>\n </div>\n {showText && impactFileUrls.length ?\n <div>\n {impactFileUrls.map((file, idx) => {\n return (\n <div key={idx} className=\"impact-statements-grid\">\n <div />\n <div>\n <a href={file.url} target=\"_blank\" className=\"link-pdf\">{file.description}</a>\n </div>\n <br />\n </div>\n )\n })\n }\n </div>\n :\n null\n }\n </div>\n {showText && props.LegislationVersion && props.LegislationVersion.includes(\"Amendment\") &&\n <div className=\"amendment-text\" style={{ paddingBottom: \"10px\", borderBottom: \"1px solid #d9dddd\" }}>\n {renderHTML(props.DraftText || '')}\n </div>\n }\n </React.Fragment>\n )\n}\n\nclass VersionList extends React.Component {\n constructor(props) {\n super(props);\n\n this.pushWithKeywords = this.pushWithKeywords.bind(this);\n this.toggleStatementForm = this.toggleStatementForm.bind(this);\n this.handleToggleDescriptionEdit = this.handleToggleDescriptionEdit.bind(this);\n this.handleDescriptionChange = this.handleDescriptionChange.bind(this);\n this.saveDescription = this.saveDescription.bind(this);\n }\n\n pushWithKeywords(sessionCode, legislationNumber, documentCode) {\n const keywordExpression = this.props.selectedKeywords;\n if (keywordExpression) {\n const partsRegex = /(\\().*?(\\)+)|(\").*?(\"+)|(').*?('+)|['a-zA-Z*]*/g;\n const keywordParts = keywordExpression.match(partsRegex);\n let foundAnOperator = false;\n for (const keywordPart of keywordParts) {\n if (keywordPart && (keywordPart.toLowerCase() === \"and\" || keywordPart.toLowerCase() === \"or\")) { foundAnOperator = true; break; }\n }\n\n let sanitizedKeywords = [];\n var chars = { \"(\": \"\", \")\": \"\", '\"': \"\" };\n if (!foundAnOperator) {\n //need to behave like API to keep it consistent:\n //per API, no operators so just clean expression from single quote operators and treat it as single keyword\n let phraseToInsert = keywordExpression.replace(/[()\"]/g, m => chars[m]);\n if (phraseToInsert.startsWith(\"'\") && phraseToInsert.endsWith(\"'\")) { phraseToInsert = phraseToInsert.substr(1, phraseToInsert.length - 2) }\n if (phraseToInsert) { sanitizedKeywords.push(phraseToInsert); }\n } else {\n for (const keywordPart of keywordParts) {\n if (keywordPart && keywordPart.toLowerCase() != \"and\" && keywordPart.toLowerCase() != \"or\") {\n let wordToInsert = keywordPart.replace(/[()\"]/g, m => chars[m]);\n if (wordToInsert.startsWith(\"'\") && wordToInsert.endsWith(\"'\")) { wordToInsert = wordToInsert.substr(1, wordToInsert.length - 2) }\n if (wordToInsert) { sanitizedKeywords.push(wordToInsert); }\n }\n }\n }\n\n this.props.history.push({\n pathname: `/bill-details/${sessionCode}/${legislationNumber}/text/${documentCode}`,\n state: { selectedKeywords: sanitizedKeywords }\n })\n }\n }\n\n toggleStatementForm(statementDate, statementDescription, documentCode) {\n this.props.toggleStatementForm(statementDate, statementDescription, documentCode)\n }\n\n handleToggleDescriptionEdit(index) {\n this.props.handleToggleDescriptionEdit(index);\n }\n\n handleDescriptionChange(value, index) {\n this.props.handleDescriptionChange(value, index);\n }\n\n saveDescription(index) {\n this.props.saveDescription(index);\n }\n\n render() {\n const { version, userClaims, selectedKeywords, sessionCode } = this.props;\n return (\n version.map((version, i) => {\n return (selectedKeywords\n ? <VersionData key={i} index={i} {...version} userClaims={userClaims} descriptionEditable={this.props.descriptionEditable} handleDescriptionChange={this.handleDescriptionChange} handleToggleDescriptionEdit={this.handleToggleDescriptionEdit} saveDescription={this.saveDescription} history={this.props.history} pushWithKeywords={this.pushWithKeywords} legislationNumber={this.props.legislationNumber} toggleStatementForm={this.toggleStatementForm} sessionCode={sessionCode} />\n : <VersionData key={i} index={i} {...version} userClaims={userClaims} descriptionEditable={this.props.descriptionEditable} handleDescriptionChange={this.handleDescriptionChange} handleToggleDescriptionEdit={this.handleToggleDescriptionEdit} saveDescription={this.saveDescription} history={this.props.history} toggleStatementForm={this.toggleStatementForm} legislationClass={this.props.legislationClass} sessionCode={sessionCode} />\n )\n })\n )\n }\n}\n\nexport default withRouter(VersionList);","import { bindActionCreators } from 'redux';\nimport { partnerRequest, publicRequest } from '../services/request.service';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst reportTypesSuccess = \"REPORT_TYPES_SUCCESS\";\nconst reportTypesFailure = \"REPORT_TYPES_FAILURE\";\n\nconst reportSuccess = \"GET_REPORT_SUCCESS\";\nconst reportFailure = \"GET_REPORT_FAILURE\";\n\nconst billReportInformationSuccess = \"BILL_REPORT_INFORMATION_SUCCESS\";\nconst billReportInformationFailure = \"BILL_REPORT_INFORMATION_FAILURE\";\n\nconst shareReportRequest = \"SHARE_REPORT_REQUEST\";\n\nconst initialState = {\n reportTypes: [],\n reportTypesError: '',\n report: [],\n reportError: '',\n shareReport: '',\n billReportInformation: [],\n billReportInformationError: ''\n};\n\nexport const reportActionCreators = {\n\n receiveReportTypes: res => ({\n type: reportTypesSuccess,\n reportTypes: res,\n }),\n\n reportTypesError: message => ({\n type: reportTypesFailure,\n reportTypesError: message,\n }),\n\n getReportTypes: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_REPORT_FILE_GEN_SERVICE) + '/ReportFileGeneration/api/GetPartnerReportListAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(reportActionCreators.reportTypesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(reportActionCreators.receiveReportTypes(result[1].Reports))\n } else if (result[0] === NO_CONTENT) {\n dispatch(reportActionCreators.receiveReportTypes([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveReport: res => ({\n type: reportSuccess,\n report: res,\n }),\n\n reportError: message => ({\n type: reportFailure,\n reportError: message,\n }),\n\n getReport: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_REPORT_FILE_GEN_SERVICE) + '/ReportFileGeneration/api/GetPartnerReportDataAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(reportActionCreators.reportError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(reportActionCreators.receiveReport(result[1].ReportDataList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(reportActionCreators.reportError('No Data Found'));\n return Promise.reject('No Data Found');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveBillReportInformation: res => ({\n type: billReportInformationSuccess,\n billReportInformation: res,\n }),\n\n billReportInformationError: message => ({\n type: billReportInformationFailure,\n billReportInformationError: message,\n }),\n\n getBillReportInformation: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_REPORT_FILE_GEN_SERVICE) + '/ReportFileGeneration/api/GetReportInformation', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(reportActionCreators.billReportInformationError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(reportActionCreators.receiveBillReportInformation(result[1].StronglyTypedObject));\n } else if (result[0] === NO_CONTENT) {\n dispatch(reportActionCreators.billReportInformationError('No Data Found'));\n return Promise.reject('No Data Found');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n saveBillReportInformation: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_REPORT_FILE_GEN_SERVICE) + '/ReportFileGeneration/api/SaveReportInformation', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(reportActionCreators.billReportInformationError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(reportActionCreators.receiveBillReportInformation(result[1].StronglyTypedObject));\n } else if (result[0] === NO_CONTENT) {\n dispatch(reportActionCreators.billReportInformationError('No Data Found'));\n return Promise.reject('No Data Found');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n shareReport: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_NOTIFICATIONS_API_URL) + '/Notification/api/ShareReportAsync', 'POST', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch({\n type: shareReportRequest,\n shareReportError: result[1],\n })\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch({\n type: shareReportRequest,\n shareReport: result[1],\n })\n } else if (result[0] === NO_CONTENT) {\n dispatch({\n type: shareReportRequest,\n shareReportError: \"No data returned\",\n })\n return Promise.reject('No Data Found');\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n};\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n case reportTypesSuccess:\n return Object.assign({}, state, {\n reportTypes: action.reportTypes,\n reportTypesError: ''\n })\n case reportTypesFailure:\n return Object.assign({}, state, {\n reportTypesError: action.reportTypesError\n })\n case reportSuccess:\n return Object.assign({}, state, {\n report: action.report,\n reportError: ''\n })\n case reportFailure:\n return Object.assign({}, state, {\n reportError: action.reportError\n })\n case billReportInformationSuccess:\n return Object.assign({}, state, {\n billReportInformation: action.billReportInformation,\n billReportInformationError: ''\n })\n case billReportInformationFailure:\n return Object.assign({}, state, {\n billReportInformationError: action.billReportInformationError\n })\n case shareReportRequest:\n return Object.assign({}, state, {\n shareReport: action.shareReport || state.shareReport,\n shareReportError: action.shareReportError || ''\n })\n default:\n return state;\n }\n};","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { reportActionCreators } from \"../../../stores/lis-report-store\";\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nconst BILL_COLLECTION_AUTHOR = \"LegislationCollections\";\n\nclass ReportMaker extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n creating: false,\n showCatchline: false,\n showCurrentStatus: false,\n showTitle: false,\n showChiefPatron: false,\n showAllPatrons: false,\n showSummary: false,\n showNotes: false,\n selectedNotes: props.selectedCollection && this.props.selectedCollection.Name && this.props.selectedCollection.WatchListID ? 'current' : 'all',\n showHistory: false,\n showHouseAmendments: false,\n showSenateAmendments: false,\n showConferenceAmendments: false,\n showGovernorsRecommendations: false,\n personalMessage: '',\n showStatus: {},\n showCommitteeEvent: {},\n showAllBills: false,\n showClerkNames: false,\n showDlsStaffNames: false,\n showLdNumber: false,\n startRange: '',\n endRange: '',\n rangeError: false,\n DLS_STAFF: this.props.login && this.props.login.userClaims && this.props.login.userClaims.claims && this.props.login.userClaims.claims.find(c => c.RoleName === 'BDSDrafter')\n };\n this.handleInputChange = this.handleInputChange.bind(this);\n this.getReportUrl = this.getReportUrl.bind(this);\n this.toggleShowBills = this.toggleShowBills.bind(this);\n this.checkParams = this.checkParams.bind(this);\n this.generateBillList = this.generateBillList.bind(this);\n this.selectAll = this.selectAll.bind(this);\n }\n\n handleInputChange(key, val) {\n if (key === 'showHistory' && val && !val.all && (!val.recent || val.mostRecentAmount === '' || val.mostRecentAmount < 2)) {\n val.showVotes = false;\n }\n if (['startRange', 'endRange'].includes(key)) {\n val = val.replace(/[^a-zA-Z0-9]/, \"\");\n }\n this.setState({\n [key]: val,\n rangeError: false\n });\n }\n\n getReportUrl(newWindow) {\n const billList = this.generateBillList();\n if (billList && billList.length === 0) {\n this.setState({\n rangeError: true\n });\n } else {\n this.setState({ creating: true }, () => {\n const jsonData = JSON.stringify({\n showCatchline: this.state.showCatchline,\n showCurrentStatus: this.state.showCurrentStatus,\n showTitle: this.state.showTitle,\n showChiefPatron: this.state.showChiefPatron,\n showAllPatrons: this.state.showAllPatrons,\n showSummary: this.state.showSummary,\n showNotes: this.state.showNotes,\n userCreated: this.props.login.userProfile.email || '',\n selectedNotes: this.state.selectedNotes,\n selectedCollection: this.props.selectedCollection && this.props.selectedCollection.Name && this.props.selectedCollection.WatchListID ? this.props.selectedCollection.WatchListID : '',\n reportTitle: this.props.reportTitle || '',\n showHistory: this.state.showHistory,\n showHouseAmendments: this.state.showHouseAmendments,\n showSenateAmendments: this.state.showSenateAmendments,\n showConferenceAmendments: this.state.showConferenceAmendments,\n showGovernorsRecommendations: this.state.showGovernorsRecommendations,\n showStatus: this.state.showStatus,\n showCommitteeEvent: this.state.showCommitteeEvent,\n showLdNumber: this.state.showLdNumber,\n showClerkNames: this.state.showClerkNames,\n showDlsStaffNames: this.state.showDlsStaffNames,\n personalMessage: this.state.personalMessage,\n billList: billList\n });\n this.props.actions.saveBillReportInformation(window.btoa(jsonData)).then(() => {\n const billReportInformation = this.props.report.billReportInformation;\n if (billReportInformation && billReportInformation.ReportNumber) {\n newWindow.location = '/bill-search-report/' + billReportInformation.ReportNumber;\n } else {\n this.props.actions.makeToast([{ message: \"Report Failed\", type: \"failure\" }]);\n newWindow?.close();\n }\n this.setState({ creating: false })\n }).catch(err => {\n newWindow?.close();\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.props.actions.makeToast([{ message: \"Report Failed\", type: \"failure\" }]);\n this.setState({\n creating: false\n });\n })\n })\n }\n }\n\n toggleShowBills() {\n this.setState({\n showAllBills: !this.state.showAllBills\n })\n }\n\n checkParams() {\n for (const x in this.state) {\n if (typeof this.state[x] === \"object\") {\n for (const y in this.state[x]) {\n if (this.state[x][y] === true)\n return false;\n }\n } else if (this.state[x] === true && x !== \"showAllBills\") {\n return false;\n }\n }\n\n return true;\n }\n\n //Report bill range differs slightly from the bill search range functionality as it allows more advanced cross-chamber/cross-type searching.\n //Order is HB, HJ, HR, SB, SJ, SR.\n //If only one field is entered, it is ignored.\n //If list is empty, it displays an error.\n generateBillList() {\n const startType = this.state.startRange.substring(0, 2).toUpperCase(), endType = this.state.endRange.substring(0, 2).toUpperCase();\n const typeFilled = startType === '' || endType === '';\n const startRange = parseInt(this.state.startRange.substring(2), 10);\n const endRange = parseInt(this.state.endRange.substring(2), 10);\n\n //return empty array if startType is alphabetically greater than endType (e.g. startType === SB, endType === HB)\n if (startType.localeCompare(endType) === 1) {\n return [];\n }\n\n return this.props.billList ? this.props.billList.filter(bill => {\n const number = parseInt(bill.LegislationNumber.substring(2), 10), type = bill.LegislationNumber.substring(0, 2);\n return typeFilled ? true :\n //return true IF\n //startType (e.g. HB) === type (e.g. HB) && number (e.g. 123) >= startRange (e.g. 123) \n //OR type (e.g. SB) is alphabetically greater than startType (e.g. HB) && either endType (e.g. SR) !== type (e.g. SB) or number (e.g 123) <= endRange (e.g. 123)\n ((startType === type && number >= startRange) || (type.localeCompare(startType) === 1 && type.localeCompare(endType) < 1 && (endType !== type || number <= endRange)))\n //AND either endType (e.g. SR) !== type (e.g. HB) or number (e.g. 123) <= endRange (e.g. 123)\n && (endType !== type || number <= endRange)\n }).map(bill => ({\n LegislationNumber: bill.LegislationNumber,\n SessionID: bill.SessionID\n })) : []\n }\n\n selectAll() {\n this.setState({\n showCatchline: true,\n showCurrentStatus: true,\n showTitle: true,\n showChiefPatron: true,\n showAllPatrons: true,\n showSummary: true,\n showNotes: true,\n showHistory: {\n all: true,\n recent: false,\n mostRecentAmount: 5,\n showVotes: true,\n Committee: false,\n Subcommittee: false\n },\n showHouseAmendments: true,\n showSenateAmendments: true,\n showConferenceAmendments: true,\n showGovernorsRecommendations: true,\n showStatus: {\n showPassedHouse: true,\n showPassedSenate: true,\n showPassed: true,\n showApproved: true,\n showVetoed: true,\n showContinued: true,\n showFailed: true,\n showEmergency: true\n },\n showCommitteeEvent: {\n showFirstHouseCommittee: true,\n showFirstSenateCommittee: true,\n showLastHouseSubcommittee: true,\n showLastSenateSubcommittee: true\n },\n showAllBills: true,\n selectedNotes: \"all\"\n })\n }\n\n render() {\n const { showCatchline, showCurrentStatus, showTitle, showChiefPatron, showAllPatrons, showSummary, showNotes, selectedNotes, showHistory, showHouseAmendments, showSenateAmendments, showConferenceAmendments, showGovernorsRecommendations, showStatus, showCommitteeEvent, rangeError, showLdNumber, showClerkNames, showDlsStaffNames, DLS_STAFF } = this.state;\n return (<div onClick={() => this.props.toggleReportMaker(this.props.autoReport)} className=\"overlay center-content\">\n <div className=\"full\" style={{ maxHeight: '100%' }}>\n <div onClick={e => e.stopPropagation()} className=\"report-maker dlas-forms user-forms advanced-search overlay-content animated-fade-in-up\">\n <div onClick={() => this.props.toggleReportMaker(this.props.autoReport)} className=\"close-cross\">\n <span>x</span>\n </div>\n <div>\n <h3><b>Create Report</b>{this.props.selectedCollection.Name ? <span> | {this.props.selectedCollection.Name}</span> : \"\"}</h3>\n </div>\n <div className=\"inner-grid two-col-sidebar-tiny\">\n {this.props.billList && this.props.billList.length > 25\n ?\n <React.Fragment>\n {this.state.showAllBills\n ?\n <React.Fragment>\n <p className=\"small-text\">{this.props.billList && this.props.billList.map((bill, billIndex) =>\n <React.Fragment key={billIndex}>{billIndex !== 0 && `, `}{bill.LegislationNumber}</React.Fragment>\n )}</p>\n <button className=\"arrow-up\" onClick={this.toggleShowBills} />\n </React.Fragment>\n :\n <React.Fragment>\n <p className=\"small-text\">{this.props.billList && this.props.billList.map((bill, billIndex) => {\n if (billIndex < 24) {\n return (\n <React.Fragment key={billIndex}>{billIndex !== 0 && `, `}{bill.LegislationNumber}</React.Fragment>\n )\n } else if (billIndex == 25) {\n return (\n <React.Fragment key={billIndex}>, {bill.LegislationNumber}...</React.Fragment>\n )\n }\n })}</p>\n <button className=\"arrow-down\" onClick={this.toggleShowBills} />\n </React.Fragment>\n }\n </React.Fragment>\n :\n <p className=\"small-text\">{this.props.billList && this.props.billList.map((bill, billIndex) =>\n <React.Fragment key={billIndex}>{billIndex !== 0 && `, `}{bill.LegislationNumber}</React.Fragment>\n )}</p>\n }\n </div>\n <div className={`inner-grid ${DLS_STAFF ? 'four' : 'three'}`}>\n <div>\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"showCatchline\", !showCatchline)}>\n <input id=\"report-catchline\" checked={showCatchline} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-catchline\" className=\"checkbox-label no-background\">Catch line</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"showCurrentStatus\", !showCurrentStatus)}>\n <input id=\"report-current-status\" checked={showCurrentStatus} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-current-status\" className=\"checkbox-label no-background\">Current Status</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"showSummary\", !showSummary)}>\n <input id=\"report-summary\" checked={showSummary} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-summary\" className=\"checkbox-label no-background\">Summary</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"showTitle\", !showTitle)}>\n <input id=\"report-title\" checked={showTitle} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-title\" className=\"checkbox-label no-background\">Title</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"showChiefPatron\", !showChiefPatron)}>\n <input id=\"report-patrons\" checked={showChiefPatron} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-patrons\" className=\"checkbox-label no-background\">Chief Patron</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"showAllPatrons\", !showAllPatrons)}>\n <input id=\"report-patrons\" checked={showAllPatrons} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-patrons\" className=\"checkbox-label no-background\">All Patrons</label>\n </div>\n </div>\n <div className=\"checkbox-container\">\n <div style={{ padding: \"10px\", display: \"inline-flex\", width: \"100%\" }}>\n <label htmlFor=\"report-personal-message\" className=\"label\">Personal Message</label>\n <textarea id=\"report-personal-message\" onChange={e => this.handleInputChange(\"personalMessage\", e.target.value)} type=\"text\" />\n </div>\n </div>\n <div className='checkbox-container' style={{ padding: \"10px\" }}>\n <div className=\"inner-grid two\" style={{ gridGap: \"10px\" }}>\n <div className=\"inner-grid two\" style={{ gridGap: \"0\" }}>\n <label style={{ padding: \"0\", marginRight: \"15px\" }} htmlFor=\"report-start-range\" className=\"label report-range-start-label\">Select From Bill #</label>\n <input id=\"report-start-range\" onChange={e => this.handleInputChange(\"startRange\", e.target.value)} type=\"text\" value={this.state.startRange} className=\"report-range-input\" />\n </div>\n <div className=\"inner-grid two\" style={{ gridGap: \"0\" }}>\n <label style={{ padding: \"0\" }} htmlFor=\"report-end-range\" className=\"label report-range-end-label\"> Through Bill #</label>\n <input id=\"report-end-range\" onChange={e => this.handleInputChange(\"endRange\", e.target.value)} type=\"text\" value={this.state.endRange} className=\"report-range-input\" />\n </div>\n </div>\n {rangeError && <span className=\"input-feedback\">No bills within this range</span>}\n </div>\n </div>\n <div>\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"showHistory\", showHistory === false ? { all: false, recent: false, mostRecentAmount: 5, showVotes: false, Committee: false, Subcommittee: false } : false)}>\n <input id=\"report-history\" checked={showHistory} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-history\" className=\"checkbox-label no-background\">Bill History</label>\n </div>\n <div style={{ marginLeft: '10px' }}>\n <div className=\"checkbox checkbox-group\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" disabled={!showHistory} onClick={() => this.handleInputChange(\"showHistory\", { ...showHistory, all: !showHistory.all, recent: false })}>\n <input id=\"report-history-type-all\" checked={showHistory.all} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-history-type-all\" className={`checkbox-label no-background${showHistory ? \"\" : \" txt-greyed\"}`}>All Events{showHistory.all && \"*\"}</label>\n </div>\n </div>\n <div className=\"checkbox checkbox-group\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" disabled={!showHistory} onClick={() => this.handleInputChange(\"showHistory\", { ...showHistory, recent: !showHistory.recent, all: false })}>\n <input id=\"report-history-type-recent\" checked={showHistory.recent} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label className=\"screen-reader-only\" htmlFor=\"report-history-type-recent-amount\">Most recent amount</label>\n <label htmlFor=\"report-history-type-recent\" className={`checkbox-label no-background${showHistory ? \"\" : \" txt-greyed\"}`}> <input\n id=\"report-history-type-recent-amount\"\n type=\"text\"\n className=\"label-input\"\n disabled={!showHistory.recent}\n value={showHistory.mostRecentAmount}\n onChange={(e) => {\n const val = e.target.value;\n if (val === '' || /[^0-9]/.test(val) === false) {\n this.handleInputChange(\"showHistory\", { ...showHistory, mostRecentAmount: val });\n }\n }} />\n Last Events{showHistory.recent && showHistory.mostRecentAmount > 1 && \"*\"}</label>\n </div>\n </div>\n <div className=\"checkbox checkbox-group\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" disabled={!showHistory} onClick={() => this.handleInputChange(\"showHistory\", { ...showHistory, Committee: !showHistory.Committee })}>\n <input id=\"report-history-type-committee\" checked={showHistory.Committee} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-history-type-committee\" className={`checkbox-label no-background${showHistory ? \"\" : \" txt-greyed\"}`}>Last Committee Event</label>\n </div>\n </div>\n <div className=\"checkbox checkbox-group\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" disabled={!showHistory} onClick={() => this.handleInputChange(\"showHistory\", { ...showHistory, Subcommittee: !showHistory.Subcommittee })}>\n <input id=\"report-history-type-sub\" checked={showHistory.Subcommittee} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-history-type-sub\" className={`checkbox-label no-background${showHistory ? \"\" : \" txt-greyed\"}`}>Last Subcommittee Event</label>\n </div>\n </div>\n </div>\n {(showHistory.all || (showHistory.recent && showHistory.mostRecentAmount > 1)) &&\n <div className=\"checkbox checkbox-group\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" disabled={!showHistory} onClick={() => this.handleInputChange(\"showHistory\", { ...showHistory, showVotes: !showHistory.showVotes })}>\n <input id=\"report-votes\" checked={showHistory.showVotes} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-votes\" className={`checkbox-label no-background${showHistory ? \"\" : \" txt-greyed\"}`}>Include Votes for '{showHistory.all ? 'All Events' : showHistory.mostRecentAmount.toString() + ' Last Events'}'</label>\n </div>\n </div>\n }\n </div>\n <div className=\"checkbox-container\">\n <div style={{ margin: '5px' }} className=\"small-text\">Include this detail:</div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showCommitteeEvent', { ...showCommitteeEvent, showFirstHouseCommittee: !showCommitteeEvent.showFirstHouseCommittee })}>\n <input id=\"report-committee-house-referred\" checked={showCommitteeEvent.showFirstHouseCommittee || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-committee-house-referred\" className=\"checkbox-label no-background\">First House Committee Referred</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showCommitteeEvent', { ...showCommitteeEvent, showFirstSenateCommittee: !showCommitteeEvent.showFirstSenateCommittee })}>\n <input id=\"report-committee-senate-referred\" checked={showCommitteeEvent.showFirstSenateCommittee || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-committee-senate-referred\" className=\"checkbox-label no-background\">First Senate Committee Referred</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showCommitteeEvent', { ...showCommitteeEvent, showLastHouseSubcommittee: !showCommitteeEvent.showLastHouseSubcommittee })}>\n <input id=\"report-committee-house-assigned\" checked={showCommitteeEvent.showLastHouseSubcommittee || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-committee-house-assigned\" className=\"checkbox-label no-background\">Last House Subcommittee Assigned</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showCommitteeEvent', { ...showCommitteeEvent, showLastSenateSubcommittee: !showCommitteeEvent.showLastSenateSubcommittee })}>\n <input id=\"report-committee-senate-assigned\" checked={showCommitteeEvent.showLastSenateSubcommittee || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-committee-senate-assigned\" className=\"checkbox-label no-background\">Last Senate Subcommittee Assigned</label>\n </div>\n </div>\n </div>\n <div>\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showHouseAmendments', !showHouseAmendments)}>\n <input id=\"report-house-amendments\" checked={showHouseAmendments} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-house-amendments\" className=\"checkbox-label no-background\">House Amendments</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showSenateAmendments', !showSenateAmendments)}>\n <input id=\"report-senate-amendments\" checked={showSenateAmendments} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-senate-amendments\" className=\"checkbox-label no-background\">Senate Amendments</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showConferenceAmendments', !showConferenceAmendments)}>\n <input id=\"report-conference-amendments\" checked={showConferenceAmendments} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-conference-amendments\" className=\"checkbox-label no-background\">Conference Amendments</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showGovernorsRecommendations', !showGovernorsRecommendations)}>\n <input id=\"report-governors-recommendations\" checked={showGovernorsRecommendations} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-governors-recommendations\" className=\"checkbox-label no-background\">Governor's Recommendations</label>\n </div>\n </div>\n <div className=\"checkbox-container\">\n <div style={{ margin: '5px' }} className=\"small-text\">Include whether the bill has ever been in this status:</div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showPassedHouse: !showStatus.showPassedHouse })}>\n <input id=\"report-passed-house\" checked={showStatus.showPassedHouse || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-passed-house\" className=\"checkbox-label no-background\">Passed House</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showPassedSenate: !showStatus.showPassedSenate })}>\n <input id=\"report-passed-senate\" checked={showStatus.showPassedSenate || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-passed-senate\" className=\"checkbox-label no-background\">Passed Senate</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showPassed: !showStatus.showPassed })}>\n <input id=\"report-passed\" checked={showStatus.showPassed || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-passed\" className=\"checkbox-label no-background\">Passed</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showApproved: !showStatus.showApproved })}>\n <input id=\"report-approved\" checked={showStatus.showApproved || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-approved\" className=\"checkbox-label no-background\">Approved</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showVetoed: !showStatus.showVetoed })}>\n <input id=\"report-vetoed\" checked={showStatus.showVetoed || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-vetoed\" className=\"checkbox-label no-background\">Vetoed</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showContinued: !showStatus.showContinued })}>\n <input id=\"report-continued\" checked={showStatus.showContinued || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-continued\" className=\"checkbox-label no-background\">Continued</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showFailed: !showStatus.showFailed })}>\n <input id=\"report-failed\" checked={showStatus.showFailed || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-failed\" className=\"checkbox-label no-background\">Failed</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showStatus', { ...showStatus, showEmergency: !showStatus.showEmergency })}>\n <input id=\"report-emergency\" checked={showStatus.showEmergency || \"\"} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-emergency\" className=\"checkbox-label no-background\">Emergency</label>\n </div>\n </div>\n {this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR) &&\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showNotes', !showNotes)}>\n <input id=\"report-notes\" checked={showNotes} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-notes\" className=\"checkbox-label no-background\">Notes</label>\n </div>\n {this.props.selectedCollection && this.props.selectedCollection.Name && this.props.selectedCollection.WatchListID &&\n <div className=\"checkbox\">\n <label htmlFor=\"report-notes-from-collection\" className={`label radio-label ${showNotes ? \"\" : \"txt-greyed\"}`}>\n <input id=\"report-notes-from-collection\" disabled={!showNotes} checked={selectedNotes === 'current'} onChange={() => this.handleInputChange(\"selectedNotes\", 'current')} type=\"radio\" />\n Notes from {this.props.selectedCollection.Name}\n </label>\n <label htmlFor=\"report-notes-from-all\" className={`label radio-label ${showNotes ? \"\" : \"txt-greyed\"}`}>\n <input id=\"report-notes-from-all\" disabled={!showNotes} checked={selectedNotes === 'all'} onChange={() => this.handleInputChange(\"selectedNotes\", 'all')} type=\"radio\" />\n All Notes\n </label>\n </div>\n }\n </div>\n }\n </div>\n {DLS_STAFF &&\n <div>\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showLdNumber', !showLdNumber)}>\n <input id=\"report-ld-number\" checked={showLdNumber} type=\"checkbox\" style={{ width: \"inherit\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-ld-number\" className=\"checkbox-label no-background\">LD Number of current version</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showClerkNames', !showClerkNames)}>\n <input id=\"report-clerk-names\" checked={showClerkNames} type=\"checkbox\" style={{ width: \"inherit\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-clerk-names\" className=\"checkbox-label no-background\">Show clerk name(s) of current committee</label>\n </div>\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange('showDlsStaffNames', !showDlsStaffNames)}>\n <input id=\"report-staff-names\" checked={showDlsStaffNames} type=\"checkbox\" style={{ width: \"inherit\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"report-staff-names\" className=\"checkbox-label no-background\">Show DLS staff name(s) of current committee</label>\n </div>\n </div>\n </div>\n }\n </div>\n {(showHistory.all || (showHistory.recent && showHistory.mostRecentAmount > 1)) && <small>* If you include '{showHistory.all ? 'All Events' : showHistory.mostRecentAmount.toString() + ' Last Events'}' for each bill, and decide to generate a CSV on the resulting report, 2 CSVs will be generated: one CSV containing '{showHistory.all ? 'All Events' : showHistory.mostRecentAmount.toString() + ' Last Events'}' on that bill, and another CSV containing all other selected options (e.g. Catch line, Summary, etc.).</small>}\n <div className=\"inline-list\">\n <button className='button primary' onClick={() => this.selectAll()}>Select All</button>\n <button style={{ marginRight: \"10px\", marginLeft: \"0px\", float: \"right\" }} type=\"button\" className=\"button right\" disabled={this.state.creating || this.checkParams()} onClick={() => { const newWindow = window.open(); this.getReportUrl(newWindow) }}>{this.state.creating ? 'Creating' : 'Create'}</button>\n <button style={{ float: \"right\" }} type=\"button\" className=\"button secondary right\" onClick={() => this.props.toggleReportMaker(this.props.autoReport)}>Close</button>\n </div>\n </div>\n </div>\n </div>);\n }\n}\n\nexport default connect(\n (state) => {\n const { login, nav, report } = state;\n return {\n login,\n nav,\n report\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, navActionCreators, reportActionCreators), dispatch)\n }\n }\n)(ReportMaker);","import React from 'react';\n\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport moment from 'moment-timezone';\nimport { saveAs } from 'file-saver';\nimport { generateCsv } from '../../services/csv.service';\nimport { voteActionCreators } from '../../stores/lis-votes-store';\nimport { patronActionCreators } from '../../stores/lis-patron-store';\nimport { Link } from 'react-router-dom';\nimport AgendaItemsComponent from './lis-agenda-items';\nimport VersionList from '../lis-bills/lis-bill-version-list';\nimport CreatableSelect from 'react-select/creatable';\nimport renderHTML from 'react-render-html';\nimport ReportMaker from '../../lis-public/components/lis-bill-search/lis-report-maker';\n\nconst BILL_COLLECTION_AUTHOR = \"LegislationCollections\";\nconst BILL_MANAGEMENT_AUTHOR = \"Legislation\";\nconst COMMUNICATION_AUTHOR = \"CommunicationFileGeneration\";\nconst CALENDAR_AUTHOR = \"Calendar\";\nconst lisDocDomain = window.env?.STORAGE_ACCOUNT_DOMAIN;\n\nconst HOUSE_NUMERIC_SORT_CATEGORIES = [2, 3, 4, 26, 27, 5, 41, 6, 7, 28, 29, 30, 31, 32, 57, 33, 35, 45, 9, 10, 8, 11, 13, 37, 38, 44, 46];\nconst SENATE_NUMERIC_SORT_CATEGORIES = [72, 111, 109, 112, 60, 110, 98, 102, 83, 90, 87, 93, 100, 104, 117, 118, 105, 106, 66, 67, 96, 97, 64, 68, 69, 65];\n\nconst sortAgendas = (a, b, calendarChamber) => {\n if (calendarChamber === \"H\") {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : a.Sequence > 0 && b.Sequence > 0 ? a.Sequence - b.Sequence : (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : moment(a.CalendarDate).isAfter(b.CalendarDate, \"day\")\n ? 1\n : moment(b.CalendarDate).isAfter(a.CalendarDate, \"day\")\n ? -1\n : moment(a.CandidateDate).isAfter(b.CandidateDate, \"day\")\n ? 1\n : moment(b.CandidateDate).isAfter(a.CandidateDate, \"day\")\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n } else {\n return b.IsActive !== a.IsActive\n ? b.IsActive\n ? 1\n : -1\n : a.Sequence > 0 && b.Sequence > 0 && a.Sequence !== b.Sequence\n ? a.Sequence - b.Sequence > 0\n ? 1\n : -1\n : a.CalendarDate !== b.CalendarDate\n ?\n !a.CalendarDate ?\n 1 :\n !b.CalendarDate ? -1\n :\n a.CalendarDate - b.CalendarDate\n : a.CandidateDate !== b.CandidateDate\n ?\n !a.CandidateDate ?\n 1 :\n !b.CandidateDate ? -1\n :\n a.CandidateDate - b.CandidateDate\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) !== 0\n ? a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : -1\n : a.LegislationKey && parseInt(a.LegislationKey) !== parseInt(b.LegislationKey)\n ? parseInt(a.LegislationKey) - parseInt(b.LegislationKey) > 0\n ? 1\n : -1\n : 0\n }\n}\n\nconst sortAgendasNumerically = (a, b, calendarChamber) => {\n if (calendarChamber === \"H\") {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n } else {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : a.Sequence > 0 && b.Sequence > 0 && a.Sequence !== b.Sequence\n ? a.Sequence - b.Sequence > 0\n ? 1\n : -1\n : a.LegislationNumber && b.LegislationNumber && a.LegislationNumber[0] !== b.LegislationNumber[0] ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1\n : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n }\n}\n\nclass CalendarDetailsComponent extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n hideAll: false,\n hide: [],\n showAgendaItemEditor: -1,\n showAgendaItemEditorCategoryIndex: -1,\n currentItemSelection: ''\n }\n\n this.toggleAll = this.toggleAll.bind(this);\n this.toggleCategory = this.toggleCategory.bind(this);\n this.fetchCsv = this.fetchCsv.bind(this);\n this.toggleAgendaItemEditor = this.toggleAgendaItemEditor.bind(this);\n this.handleCurrentItemChange = this.handleCurrentItemChange.bind(this);\n this.generateClerksCopy = this.generateClerksCopy.bind(this);\n this.toggleReportMaker = this.toggleReportMaker.bind(this);\n }\n\n toggleAll() {\n const opposite = !this.state.hideAll;\n let hide = new Array(this.props.calendar.CalendarCategories.length);\n hide.fill(opposite);\n\n this.setState({\n hideAll: opposite,\n hide: hide\n });\n }\n\n toggleCategory(catIndex) {\n let hide = [...this.state.hide];\n hide[catIndex] = !hide[catIndex];\n this.setState({\n hide: hide\n })\n }\n\n fetchCsv() {\n let rows = [];\n //Flatten the data and add the category to each row\n this.props.calendar.CalendarCategories.forEach(category => {\n category.Agendas.forEach(agenda => {\n if (agenda.IsActive) {\n agenda.CalendarCategory = category.DisplayType ? category.Description + \" - \" + category.CategoryType : category.Description;\n //Handle inserting description text for non-legislation agenda items\n if (!agenda.LegislationDescription)\n agenda.LegislationDescription = agenda.Description;\n //Handle inserting patrons\n if (agenda.Patrons) {\n agenda.Patron = agenda.Patrons.map(p => p.PatronDisplayName).join(\",\");\n }\n rows.push(agenda);\n }\n });\n })\n\n let fileName = this.props.calendar.ChamberCode === \"S\" ? \"SenateCalendar\" : \"HouseCalendar\";\n fileName = fileName + moment(this.props.calendar.CalendarDate).format(\"MMMMDoYYYY\") + \".csv\";\n\n saveAs(new Blob([generateCsv([\"Calendar Category\", \"Legislation Number\", \"Legislation Description\", \"Patron\", \"Page Number\"], rows)], { type: \"data:text/csv;charset=utf-8,\" }), fileName);\n }\n\n toggleAgendaItemEditor(agendaIndex, categoryIndex) {\n this.setState({\n showAgendaItemEditor: agendaIndex,\n showAgendaItemEditorCategoryIndex: categoryIndex || -1\n });\n }\n\n handleCurrentItemChange(val) {\n this.setState({\n currentItemSelection: val\n });\n }\n\n generateClerksCopy(category, e) {\n e.stopPropagation();\n this.props.generateClerksCopy(category);\n }\n\n toggleReportMaker(catIndex, e) {\n if (e) {\n e.stopPropagation();\n }\n\n if (!this.state.showReportMaker && !isNaN(parseInt(catIndex))) {\n this.setCategoryReportBillList(catIndex);\n } else {\n //needs to be separated otherwise this will run before the setCategoryReportBillList method is done and the ReportMaker component will not have the info needed, resulting in NREs\n this.setState(state => ({\n showReportMaker: !state.showReportMaker\n }));\n }\n }\n\n setCategoryReportBillList(catIndex) {\n const category = this.props.calendar.CalendarCategories[catIndex];\n let categoryReportBillList = [];\n category.Agendas.forEach(agenda => {\n if (agenda.LegislationID && agenda.IsActive) {\n categoryReportBillList.push({ LegislationID: agenda.LegislationID, LegislationNumber: agenda.LegislationNumber, SessionID: this.props.calendar.SessionID });\n }\n });\n\n this.setState({ showReportMaker: true, categoryReportBillList })\n }\n\n render() {\n const { session, calendar, comments } = this.props;\n const { hide, hideAll } = this.state;\n const filteredCategories = calendar.CalendarCategories.map(category => {\n const checkForActiveAgendas = category.Agendas.find(agenda => agenda.IsActive && !agenda.IsHidden);\n if (checkForActiveAgendas) {\n if (category.CategoryType != \"Order\") {\n let unrankedAgendas = [];\n let rankedAgendas = [];\n let rankings = [];\n\n if (calendar.ChamberCode === \"H\") {\n //house calendar sort\n category.Agendas.forEach((agenda) => {\n if (!agenda.Ranking && agenda.IsActive) {\n unrankedAgendas.push(agenda);\n } else if (agenda.IsActive) {\n rankedAgendas.push(agenda);\n rankings.push(agenda.Ranking);\n }\n })\n\n rankings.sort((a, b) => a - b);\n\n let gaps = [];\n for (let i = 1; i < rankings.length; i++) {\n gaps.push(rankings[i] - rankings[i - 1]);\n }\n\n if (HOUSE_NUMERIC_SORT_CATEGORIES.includes(category.CalendarCategoryTypeID)) {\n rankedAgendas.sort((a, b) => sortAgendasNumerically(a, b, calendar.ChamberCode));\n } else {\n rankedAgendas.sort((a, b) => sortAgendas(a, b, calendar.ChamberCode));\n }\n if (HOUSE_NUMERIC_SORT_CATEGORIES.includes(category.CalendarCategoryTypeID)) {\n unrankedAgendas.sort((a, b) => sortAgendasNumerically(a, b, calendar.ChamberCode));\n } else {\n unrankedAgendas.sort((a, b) => sortAgendas(a, b, calendar.ChamberCode));\n }\n\n //If there are multiple ranks with a gap larger than 1 place all unranked agendas between them\n if (new Set(rankings).size > 1 && Math.max(...gaps) > 1) {\n let insertPoint = gaps.findIndex(x => x === Math.max(...gaps)) + 1\n\n for (let i = 0; i < unrankedAgendas.length; i++) {\n rankedAgendas.splice(insertPoint, 0, unrankedAgendas[i]);\n insertPoint++;\n }\n\n category.Agendas = rankedAgendas;\n } else {\n //If the largest rank is greated than 50 put all unranked agendas above the ranked agendas, otherwise put them all at the bottom\n if (Math.max(...rankings) >= 50) {\n category.Agendas = unrankedAgendas.concat(rankedAgendas);\n } else {\n category.Agendas = rankedAgendas.concat(unrankedAgendas);\n }\n }\n } else {\n //senate calendar sort\n if (SENATE_NUMERIC_SORT_CATEGORIES.includes(category.CalendarCategoryTypeID)) {\n category.Agendas.sort((a, b) => sortAgendasNumerically(a, b, calendar.ChamberCode))\n } else {\n category.Agendas.sort((a, b) => sortAgendas(a, b, calendar.ChamberCode))\n }\n }\n }\n return category;\n } else {\n return null;\n }\n });\n\n let calendarFileUrl = '';\n const pdfFile = calendar.CalendarFiles.find(file => file.FileURL.toUpperCase().includes('PDF'));\n if (pdfFile) {\n const url = new URL(pdfFile.FileURL);\n calendarFileUrl = lisDocDomain + (url.pathname[0] === '/' ? url.pathname : '/' + url.pathname);\n }\n const categoryDescription = category => {\n //if it's been edited, leave it at that\n const associatedReferenceCategory = this.props.calendarCategoryReferences.find(x => x.CalendarCategoryTypeID === category.CalendarCategoryTypeID);\n if (associatedReferenceCategory && associatedReferenceCategory.Description !== category.Description && associatedReferenceCategory.PluralDescription !== category.Description) {\n return category.Description;\n }\n\n //otherwise, use singular or plural reference description\n if (calendar.ChamberCode === 'H' && category.CategoryCode === \"HOUBRC\" || category.CategoryCode === \"SENBRC\") {\n return category.Description;\n } else if (category.Agendas.filter(a => a.IsActive).length > 1 && category.PluralDescription) {\n return category.PluralDescription;\n } else {\n return category.Description;\n }\n }\n const sessionHeader = session ? session.SessionYear + \" \" + session.DisplayName : '';\n const canSetCurrentItem = Boolean(this.props.userClaims && this.props.userClaims.resources.find(resource => resource === CALENDAR_AUTHOR)) && this.props.userClaims.resources.find(x => x === \"LegislationEvent\");\n return (\n <div>\n {this.state.showReportMaker &&\n <ReportMaker\n toggleReportMaker={this.toggleReportMaker}\n selectedCollection={{\n Name: `Report on ${moment(this.props.calendar.CalendarDate).format('MM/DD/YY')}`,\n }}\n billList={this.state.categoryReportBillList}\n reportTitle={`Report on ${moment(this.props.calendar.CalendarDate).format('MM/DD/YY')}`}\n />\n }\n {this.state.showAgendaItemEditor !== -1 &&\n <AgendaItemsComponent\n toggleAgendaItemEditor={this.toggleAgendaItemEditor}\n agenda={calendar.CalendarCategories[this.state.showAgendaItemEditorCategoryIndex].Agendas[this.state.showAgendaItemEditor]}\n categoryIndex={this.state.showAgendaItemEditorCategoryIndex}\n agendaIndex={this.state.showAgendaItemEditor}\n updateAgendaItems={this.props.updateAgendaItems}\n />\n }\n <br />\n <div className=\"flex-row flex-vertical-center multiple-icons\">\n <h2 className=\"no-margin\">{sessionHeader}</h2>\n {calendarFileUrl\n && (this.props.userClaims && this.props.userClaims.resources.find(x => x !== \"LegislationCollections\") || this.props.isCalendarForm)\n && this.props.sessionList.find(x => x.SessionCode === this.props.calendar.SessionCode)\n && this.props.sessionList.find(x => x.SessionCode === this.props.calendar.SessionCode).SessionYear >= 2023\n && calendar.CalendarNumber < 2 ?\n //Need to prevent the padded calendar from displaying if the session is before go live\n <a target=\"_blank\" href={calendarFileUrl.replace(\".PDF\", \"-padded.PDF\")}>\n <span title=\"Padded-PDF\" aria-label=\"Padded-PDF\" className=\"icon file-empty\"></span>\n </a>\n :\n <div /> //For grid layout formatting\n }\n {calendarFileUrl &&\n <a target=\"_blank\" href={calendarFileUrl}>\n <span title=\"PDF\" aria-label=\"PDF\" className=\"icon pdf\"></span>\n </a>\n }\n <a target=\"_blank\" onClick={this.fetchCsv}>\n <span aria-label=\"Spreadsheet\" title=\"Spreadsheet\" role=\"button\" className=\"icon csv\"></span>\n </a>\n </div>\n <hr />\n <div className=\"flex-row details-page-data-container\">\n <div>\n <h3 className=\"no-margin\">{calendar.ChamberCode === \"S\" ? \"Senate \" : \"House \"} Calendar {calendar.IsProforma && \"(Pro Forma)\"}</h3>\n <span>{moment(calendar.CalendarDate).format(\"LL\") + (calendar.CalendarNumber > 1 ? [' (', ')'].join('Supp. ' + (calendar.CalendarNumber - 1)) : '')}</span>\n </div>\n <div>\n <button className=\"button-link\" aria-expanded={!hideAll} onClick={this.toggleAll} type=\"button\">{hideAll ? \"Expand\" : \"Collapse\"} All +/-</button>\n </div>\n </div>\n {comments.length > 0 &&\n <div className=\"details-page-data-container public-details\">\n {comments.map((comment, i) => {\n return (\n <p key={i}>{\"Comment \" + comment.Sequence + \": \" + comment.Comment}</p>\n )\n })}\n </div>\n }\n <div className=\"flex-row\">\n <div className='details-page-data-container'>\n {\n this.props.currentProceduralMotion ? <span>Current Item: {this.props.currentProceduralMotion}</span>\n :\n this.props.currentAgendaItem && filteredCategories.find(cat => cat && cat.Agendas && cat.Agendas.find(agenda => agenda.AgendaID === this.props.currentAgendaItem)) ? <span>Current Item: {filteredCategories.find(cat => cat && cat.Agendas && cat.Agendas.find(agenda => agenda.AgendaID === this.props.currentAgendaItem)).Agendas.find(agenda => agenda.AgendaID === this.props.currentAgendaItem).LegislationNumber}</span>\n :\n this.props.currentCategoryItem && filteredCategories.find(cat => cat && cat.CalendarCategoryID === this.props.currentCategoryItem) ? <span>Current Item: {categoryDescription(filteredCategories.find(cat => cat && cat.CalendarCategoryID === this.props.currentCategoryItem))}</span>\n :\n null}\n </div>\n {!this.props.isCalendarForm && canSetCurrentItem &&\n <div className=\"inner-grid three-and-one\">\n <CreatableSelect\n options={this.props.commonCurrentItemOptions}\n onChange={this.handleCurrentItemChange}\n formatCreateLabel={val => val}\n value={this.state.currentItemSelection}\n />\n <button disabled={!this.state.currentItemSelection || this.props.isSavingCalendarCurrentItem} onClick={e => this.props.setCurrentItem(e, null, null, this.state.currentItemSelection.label)} className=\"button\" type=\"button\">Set current item</button>\n </div>\n }\n </div>\n\n <br />\n <div className=\"collapsible-table\">\n {filteredCategories.map((category, catIndex) => {\n if (category) {\n return (<div key={catIndex}>\n <div style={{ cursor: 'pointer' }}\n className={`${!hide[catIndex] ? 'opened' : ''} flex-row section-header`}\n onClick={() => this.toggleCategory(catIndex)}\n title={!this.props.currentAgendaItem && this.props.currentCategoryItem === category.CalendarCategoryID ? \"Current Item\" : \"\"}>\n <div>\n {!this.props.currentAgendaItem && this.props.currentCategoryItem === category.CalendarCategoryID &&\n <div style={{ display: 'inline-block' }}>\n <div className=\"arrow-right-text-filled\">Current Item</div>\n </div>\n }\n {!this.props.isCalendarForm && canSetCurrentItem &&\n <button onClick={e => this.props.setCurrentItem(e, category.CalendarCategoryID)} style={{ marginRight: '5px' }} className=\"txt-dark-blue button-link\">(c)</button>\n }\n <span>\n {categoryDescription(category)}\n {category.DisplayType && \" - \" + category.CategoryType}\n </span>\n </div>\n <div>\n <div className=\"inline-list\">\n {this.props.creatingCollection === catIndex ?\n <span className=\"small-spinner\"></span>\n :\n <React.Fragment>\n {this.props.userClaims && this.props.userClaims.resources.find(x => x === COMMUNICATION_AUTHOR) &&\n <React.Fragment>\n {this.props.calendarCategoryReferences && this.props.calendarCategoryReferences.find(x => x.CalendarCategoryTypeID === category.CalendarCategoryTypeID) && this.props.calendarCategoryReferences.find(x => x.CalendarCategoryTypeID === category.CalendarCategoryTypeID).ClerksCopy &&\n <button type=\"button\" onClick={(e) => this.generateClerksCopy(category, e)} className=\"button small-button\">Clerk's Copy</button>\n }\n </React.Fragment>\n }\n {this.props.editHistory && this.props.userClaims.resources.find(resource => resource === BILL_MANAGEMENT_AUTHOR) && category.IsLegislationCategory && this.props.userClaims.resources.find(x => x === \"LegislationEvent\") &&\n <React.Fragment>\n <button disabled={this.props.creatingCollection !== null} type=\"button\" onClick={(e) => this.props.editHistory(e, catIndex, categoryDescription(category) + (category.DisplayType ? ' - ' + category.CategoryType : ''))} className=\"button small-button\">Edit History</button>\n </React.Fragment>\n }\n {this.props.createWatchlist && this.props.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR) && category.IsLegislationCategory &&\n <React.Fragment>\n <button type=\"button\" onClick={(e) => this.toggleReportMaker(catIndex, e)} className=\"button small-button\">Create Report</button>\n {this.props.createdCollections[catIndex] ?\n <Link\n style={{ fontSize: '12px' }}\n to={{ pathname: \"bill-search\", search: `?collection=${this.props.createdCollections[catIndex].WatchListID}&q=${window.btoa(JSON.stringify({ selectedSession: calendar.SessionID, sessionOnly: true }))}` }}\n target=\"_blank\">\n Open Watchlist\n </Link>\n :\n <button disabled={this.props.creatingCollection !== null} type=\"button\" onClick={(e) => this.props.createWatchlist(e, catIndex)} className=\"button small-button\">Create Watchlist</button>\n }\n </React.Fragment>\n }\n </React.Fragment>\n }\n <button aria-expanded={!hide[catIndex]} aria-label={`${hide[catIndex] ? \"Show\" : \"Hide\"} items`} type=\"button\" className=\"button-link\">+/-</button>\n </div>\n </div>\n </div>\n <div className=\"section-body\">\n {!hide[catIndex] &&\n <React.Fragment>\n {category.Agendas.map((agenda, agendaIndex) =>\n <React.Fragment key={agendaIndex}>\n {agenda.IsActive && !agenda.IsHidden &&\n <React.Fragment>\n <div title={this.props.currentAgendaItem === agenda.AgendaID ? \"Current Item\" : \"\"} className=\"section-row inner-grid med-two-one\">\n <div className='align-right'>\n {this.props.currentAgendaItem === agenda.AgendaID &&\n <div style={{ display: 'inline-block', float: 'left' }}>\n <div className=\"arrow-right-text-filled\">Current Item</div>\n </div>\n }\n {!this.props.isCalendarForm && canSetCurrentItem && this.props.userClaims.resources.find(x => x === \"LegislationEvent\") &&\n <button onClick={e => this.props.setCurrentItem(e, category.CalendarCategoryID, agenda.AgendaID, agenda.Description)} style={{ marginRight: '5px' }} className=\"txt-dark-blue button-link\">(c)</button>\n }\n {agenda.LegislationNumber && <Link target=\"_blank\" to={`/bill-details/${session.SessionCode}/${agenda.LegislationNumber}`}>{agenda.LegislationNumber}</Link>}\n </div>\n <div>\n <div>\n <span>{renderHTML(agenda.LegislationDescription || (agenda.Description === \"Call to Order\" && this.props.calendarTime ? \"Call to Order - \" + this.props.calendarTime : agenda.Description))}</span>\n {this.props.isCalendarForm &&\n <span className=\"inline-list\">\n {agenda.AgendaItems && agenda.AgendaItems.length > 0 && !this.props.isCalendarForm &&\n <button type=\"button\" onClick={() => this.toggleAgendaItemEditor(agendaIndex, catIndex)} className=\"button-link\">Edit Agenda Items</button>\n }\n </span>\n }\n </div>\n </div>\n <span className='align-right'>\n {((agenda.AgendaItems && agenda.AgendaItems.length > 0) || agenda.LegislationNumber) &&\n <button aria-label=\"Show patrons, agenda descriptions, and versions\" aria-expanded={!!agenda.show} type=\"button\" onClick={() => this.props.toggleAgenda(catIndex, agendaIndex)} className={`${agenda.show ? \"arrow-up\" : \"arrow-down\"}`}></button>\n }\n </span>\n </div>\n {agenda.show &&\n <AgendaActivities\n agenda={agenda}\n sessionCode={session.SessionCode}\n chamberCode={agenda.LegislationNumber ? agenda.LegislationNumber[0] : calendar.ChamberCode}\n agendaNote={agenda.AgendaNote}\n />\n }\n </React.Fragment>\n }\n </React.Fragment>\n )}\n </React.Fragment>\n }\n </div>\n </div>)\n } else {\n return null;\n }\n })}\n </div>\n </div >);\n }\n}\n\nexport const AgendaActivities = props => {\n const { agenda, chamberCode, sessionCode, agendaNote } = props;\n const sortedPatrons = agenda.Patrons ? agenda.Patrons.sort((a, b) => { return chamberCode === b.ChamberCode ? 1 : -1 }) : [];\n const patrons = sortedPatrons.length > 0\n ? sortedPatrons.map((patron, patronIndex) => {\n let sameAsPrevious = (!sortedPatrons[patronIndex - 1] && patron.ChamberCode === chamberCode && !sortedPatrons.find(p => p.ChamberCode !== chamberCode)) || (sortedPatrons[patronIndex - 1] && patron.ChamberCode === sortedPatrons[patronIndex - 1].ChamberCode);\n let sameAsNext = sortedPatrons[patronIndex + 1] && patron.ChamberCode === sortedPatrons[patronIndex + 1].ChamberCode;\n let patronDisplayName = patron.PatronDisplayName;\n return (\n <React.Fragment key={patronIndex}>\n {patron.ChamberCode !== chamberCode\n ? patronIndex !== agenda.Patrons.length - 1\n ? chamberCode === \"S\"\n ? !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Delegates: \" + patronDisplayName + \", \" : sameAsNext ? patronDisplayName + \", \" : patronDisplayName\n : !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Senators: \" + patronDisplayName + \", \" : sameAsNext ? patronDisplayName + \", \" : patronDisplayName\n : chamberCode === \"S\"\n ? !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Delegate: \" + patronDisplayName : patronDisplayName\n : !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Senator: \" + patronDisplayName : patronDisplayName\n : sameAsNext\n ? patronDisplayName + \", \" : patronDisplayName\n }\n </React.Fragment>\n )\n })\n : \"\"\n\n return (\n <div className=\"inner-grid med-two-one\">\n <br />\n <div>\n <div>\n {patrons.length > 0 && <span>Patron(s): {patrons}</span>}\n </div>\n <div>\n {agenda.AgendaItems.filter(a => a.IsActive).map((item, itemIndex) =>\n <div key={itemIndex}>\n {renderHTML(item.Description || \"\")}\n </div>\n )}\n </div>\n <p className=\"bold line-break\">\n {agendaNote}\n </p>\n {agenda.Versions &&\n <>\n {agenda.Versions.length > 0 ?\n <>\n {agenda.Versions === 'fail' ?\n <div className=\"small-text\">Failed to get versions</div>\n :\n <VersionList userClaims={[]} sessionCode={sessionCode} version={agenda.Versions} descriptionEditable={false} legislationClass={agenda.LegislationDescription.includes(\"Budget Bill\") ? \"Budget\" : \"\"} />\n }\n </>\n :\n <div className=\"small-spinner\"></div>\n }\n </>\n }\n </div>\n </div>\n );\n}\n\nexport default connect(\n (state) => {\n const { votes, patrons } = state;\n return {\n votes,\n patrons\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, patronActionCreators), dispatch)\n }\n }\n)(CalendarDetailsComponent);\n","import React from 'react';\n\nimport moment from 'moment-timezone';\nimport { AgendaActivities } from './lis-calendar-details';\n\nconst CalendarDetailsPrintout = props => {\n const { session, calendar, comments } = props;\n const filteredCategories = calendar.CalendarCategories.map(category => {\n const checkForActiveAgendas = category.Agendas.find(agenda => agenda.IsActive && !agenda.IsHidden);\n if (checkForActiveAgendas) {\n return category;\n } else {\n return null;\n }\n });\n const categoryDescription = category => {\n if (category.Agendas.filter(a => a.IsActive).length > 1 && category.PluralDescription) {\n return category.PluralDescription;\n } else {\n return category.Description;\n }\n }\n const sessionHeader = session ? session.SessionYear + \" \" + session.DisplayName : '';\n\n return (\n <div>\n <br />\n <div className=\"flex-row flex-vertical-center multiple-icons\">\n <h2 className=\"no-margin\">{sessionHeader}</h2>\n </div>\n <hr />\n <div className=\"flex-row\">\n <div>\n <h3 className=\"no-margin\">{calendar.ChamberCode === \"S\" ? \"Senate \" : \"House \"} Calendar {calendar.IsProforma && \"(Pro Forma)\"}</h3>\n <span>{moment(calendar.CalendarDate).format(\"MMMM Do, YYYY\") + (calendar.CalendarNumber > 1 ? [' (', ')'].join('Supp. ' + (calendar.CalendarNumber - 1)) : '')}</span>\n </div>\n <div>\n </div>\n </div>\n {comments.length > 0 &&\n <div className=\"public-details\">\n {comments.map((comment, i) => {\n return (\n <p key={i}>{\"Comment \" + comment.Sequence + \": \" + comment.Comment}</p>\n )\n })}\n </div>\n }\n <br />\n <div className=\"collapsible-table\">\n {filteredCategories.map((category, catIndex) => {\n if (category) {\n return (<div key={catIndex}>\n <div>\n <div>\n <span>\n {categoryDescription(category)}\n {category.DisplayType && \" - \" + category.CategoryType}\n </span>\n </div>\n <div>\n </div>\n </div>\n <div className=\"section-body\">\n {category.Agendas.map((agenda, agendaIndex) =>\n <React.Fragment key={agendaIndex}>\n {agenda.IsActive && !agenda.IsHidden &&\n <React.Fragment>\n <div>\n <div>\n <span>{agenda.LegislationNumber}</span>\n </div>\n <div>\n <div>\n <span>{agenda.LegislationDescription || agenda.Description}</span>\n </div>\n </div>\n <div>\n <AgendaActivities\n agenda={agenda}\n chamberCode={calendar.ChamberCode}\n sessionCode={calendar.SessionCode}\n agendaNode={agenda.AgendaNote}\n />\n </div>\n <div>\n {agenda.AgendaItems.map((x) => {\n if (x.Description && x.Description.includes(\"Amendment\")) {\n return <div dangerouslySetInnerHTML={{ __html: x.DraftText }} />\n }\n })}\n\n </div>\n </div>\n </React.Fragment>\n }\n </React.Fragment>\n )}\n </div>\n </div>)\n } else {\n return null;\n }\n })}\n </div>\n </div>);\n}\n\nexport default CalendarDetailsPrintout;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Prompt } from 'react-router';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport moment from 'moment-timezone';\nimport ReactToPrint from \"react-to-print\";\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport BillsGrid from './lis-house-bills-grid';\nimport CalendarDetailsComponent from '../../../lis-shared/lis-calendar/lis-calendar-details'\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport Popout from '../../../lis-shared/lis-layout/components/lis-popout-component';\nimport DatePicker from 'react-datepicker';\nimport CalendarDetailsPrintout from '../../../lis-shared/lis-calendar/lis-calendar-details-printout';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\n\nconst PUBLISH_CALENDAR = true;\nconst SAVE_CALENDAR = false;\nconst lisDocDomain = window.env?.STORAGE_ACCOUNT_DOMAIN;\n\nconst NUMERIC_SORT_CATEGORIES = [2, 3, 4, 26, 27, 5, 41, 6, 7, 28, 29, 30, 31, 32, 57, 33, 35, 45, 9, 10, 8, 11, 13, 37, 38, 44, 46];\n\nconst sortAgendas = (a, b, calendarChamber) => {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : moment(a.CalendarDate).isAfter(b.CalendarDate, \"day\")\n ? 1\n : moment(b.CalendarDate).isAfter(a.CalendarDate, \"day\")\n ? -1\n : moment(a.CandidateDate).isAfter(b.CandidateDate, \"day\")\n ? 1\n : moment(b.CandidateDate).isAfter(a.CandidateDate, \"day\")\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst sortAgendasNumerically = (a, b, calendarChamber) => {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst sortInactiveAgendas = (a, b, calendarChamber) => {\n return (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : moment(a.CalendarDate).isAfter(b.CalendarDate, \"day\")\n ? 1\n : moment(b.CalendarDate).isAfter(a.CalendarDate, \"day\")\n ? -1\n : moment(a.CandidateDate).isAfter(b.CandidateDate, \"day\")\n ? 1\n : moment(b.CandidateDate).isAfter(a.CandidateDate, \"day\")\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst sortInactiveAgendasNumerically = (a, b, calendarChamber) => {\n return (!a.Ranking || a.Ranking === \"\") && (b.Ranking && b.Ranking !== \"\")\n ? -1\n : (a.Ranking && a.Ranking !== \"\") && (!b.Ranking || b.Ranking === \"\")\n ? 1\n : a.Ranking > b.Ranking\n ? 1\n : a.Ranking < b.Ranking\n ? -1\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n}\n\nconst findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n a.IsActive && findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey(a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate)\n)\n\nconst findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n (((ignoreCalendarDate || (a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isSame(b.CalendarDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCalendarDate && a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isBefore(b.CalendarDate, \"day\"))) ||\n (((ignoreCandidateDate || (a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isSame(b.CandidateDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCandidateDate && a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isBefore(b.CandidateDate, \"day\"))) ||\n ((ignoreCalendarDate || (!a.CalendarDate && !b.CalendarDate)) && (ignoreCandidateDate || (!a.CandidateDate && !b.CandidateDate)) &&\n findLastByLegChamberTypeKey(a, b, calendarChamber))\n || (!ignoreCalendarDate && !b.CalendarDate && a.CandidateDate)\n || !ignoreCandidateDate && !b.CandidateDate && a.CandidateDate\n)\n\nconst findLastByLegChamberTypeKey = (a, b, calendarChamber) => (\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === (calendarChamber === \"H\" ? 1 : -1)) ||\n (a.LegislationNumber && a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === -1) ||\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === 0 && a.LegislationKey && a.LegislationKey < parseInt(b.LegislationKey))\n)\n\nclass HouseCalendarFormComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoaded: false,\n calendarData: '',\n hideCategories: [],\n showPreview: false,\n isSaving: false,\n pendingSave: false,\n comments: [],\n message: '',\n selectedSession: '',\n selectAllActive: false,\n selectAllInactive: false,\n calendarCategories: [],\n selectedCategory: '',\n selectedBill: [],\n billList: [],\n showCategoryPreview: -1,\n selectedFile: '',\n calendatDate: \"\",\n commentEdit: [],\n tempComments: [],\n showTitles: false,\n selectedDate: \"\",\n selectedCommittee: \"\",\n dateList: [],\n committeeList: [],\n hideAllNonIncludedBills: false\n };\n\n this.initializeForm = this.initializeForm.bind(this);\n this.handleAgendaSort = this.handleAgendaSort.bind(this);\n this.handleBulkAgendaSort = this.handleBulkAgendaSort.bind(this);\n this.togglePreview = this.togglePreview.bind(this);\n this.updateAgenda = this.updateAgenda.bind(this);\n this.updateAgendaItems = this.updateAgendaItems.bind(this);\n this.changeCategoryDropdown = this.changeCategoryDropdown.bind(this);\n this.addCategory = this.addCategory.bind(this);\n this.toggleHideCategory = this.toggleHideCategory.bind(this);\n this.toggleHideAllCategories = this.toggleHideAllCategories.bind(this);\n this.toggleHideAllNonIncludedBills = this.toggleHideAllNonIncludedBills.bind(this);\n this.changeBillDropdown = this.changeBillDropdown.bind(this);\n this.changeDateDropdown = this.changeDateDropdown.bind(this);\n this.changeCommitteeDropdown = this.changeCommitteeDropdown.bind(this);\n this.addBill = this.addBill.bind(this);\n this.addComment = this.addComment.bind(this);\n this.removeComment = this.removeComment.bind(this);\n this.commentShift = this.commentShift.bind(this);\n this.handleProFormaChange = this.handleProFormaChange.bind(this);\n this.toggleCalendarPreview = this.toggleCalendarPreview.bind(this);\n this.togglePortal = this.togglePortal.bind(this);\n this.saveCalendar = this.saveCalendar.bind(this);\n this.handlePdfFile = this.handlePdfFile.bind(this);\n this.submitPdfFile = this.submitPdfFile.bind(this);\n this.changeConveneTime = this.changeConveneTime.bind(this);\n this.toggleAgenda = this.toggleAgenda.bind(this);\n this.toggleCommentEdit = this.toggleCommentEdit.bind(this);\n this.confirmCommentEdit = this.confirmCommentEdit.bind(this);\n this.toggleShowTitles = this.toggleShowTitles.bind(this);\n this.setPending = this.setPending.bind(this);\n this.deleteCategory = this.deleteCategory.bind(this);\n\n this.pdfRef = React.createRef();\n this.fileInput = React.createRef();\n }\n\n componentDidMount() {\n this.initializeForm();\n }\n\n initializeForm() {\n let calendarData = { ...this.props.calendarData };\n let noSavedItems = true;\n let comments = [];\n let dateList = [];\n let committeeList = [];\n\n // For the 'add category' dropdown\n this.props.actions.getCalendarCategoriesReferences('?chamberCode=' + calendarData.ChamberCode)\n .then(() => {\n let calendarCategories = this.props.calendar.calendarCategoriesReferences;\n calendarCategories.forEach(category => {\n category.label = category.DisplayType ? `${category.Description} - ${category.CategoryType}` : category.Description;\n category.value = category.CalendarCategoryTypeID;\n });\n this.setState({\n calendarCategories: calendarCategories\n }, () => {\n this.props.actions.getCommitteeList(\"sessionID=\" + calendarData.SessionID)\n .then(() => {\n calendarData.CalendarCategories.forEach((category, j) => {\n const referenceCategory = this.state.calendarCategories.find(c => c.CalendarCategoryTypeID === category.CalendarCategoryTypeID);\n const response = this.handleAgendaSort(category.Agendas, category.CategoryType, category.CalendarCategoryTypeID, calendarData.ChamberCode)\n category.Agendas = response;\n category.Agendas.forEach((agenda, i) => {\n //If a bill is on first reading capture its committee and candidate date to use in the filters\n if (referenceCategory && referenceCategory.OnDemand) {\n if (agenda.CommitteeID && this.props.committee.committeeList.find(x => x.ChamberCode === calendarData.ChamberCode && x.CommitteeID === agenda.CommitteeID)) {\n committeeList.push({ label: this.props.committee.committeeList.find(x => x.ChamberCode === calendarData.ChamberCode && x.CommitteeID === agenda.CommitteeID).Name, value: agenda.CommitteeID, date: agenda.CandidateDate });\n }\n\n if (agenda.CandidateDate && this.props.committee.committeeList.find(x => x.ChamberCode === calendarData.ChamberCode && x.CommitteeID === agenda.CommitteeID)) {\n let thisDate = dateList.findIndex(x => moment(x.value).isSame(agenda.CandidateDate, \"day\"));\n if (thisDate > -1) {\n if (!dateList[thisDate].committee.includes(agenda.CommitteeID)) {\n dateList[thisDate].committee.push(agenda.CommitteeID)\n }\n } else {\n dateList.push({ label: moment(agenda.CandidateDate).format(\"MM/DD/YYYY\"), value: agenda.CandidateDate, committee: [agenda.CommitteeID] });\n }\n }\n }\n\n //Item has an agenda ID so this means that a bill has been previously saved to this calendar\n if (agenda.AgendaID) {\n noSavedItems = false;\n }\n\n //If we've parsed the last agenda of the last category then set the reference lists to be used in the dropdowns\n if (j === calendarData.CalendarCategories.length - 1 && i === category.Agendas.length - 1) {\n dateList = dateList.sort((a, b) => { return moment(a.value) - moment(b.value) })\n committeeList = committeeList.sort((a, b) => a.label.localeCompare(b.label));\n\n this.setState({\n dateList: [...new Map(dateList.map(x => [x[\"label\"], x])).values()],\n committeeList: [...new Map(committeeList.map(x => [x[\"value\"], x])).values()]\n })\n }\n });\n if ([98, 102].includes(category.CalendarCategoryTypeID)) {\n category.showAmendments = !!category.Agendas.flatMap(agenda => agenda.AgendaItems).find(agendaItem => agendaItem.IsActive && agendaItem.LDNumber);\n }\n })\n\n let commentEdit = [];\n let tempComments = [];\n\n for (let i = 0; i < calendarData.CalendarComments.length; i++) {\n let comment = calendarData.CalendarComments[i];\n comment.Sequence = i + 1;\n comments.push(comment);\n commentEdit.push(false);\n //I kid you not if I don't make a separate tempComment object here and push it into the tempComment array instead of inserting the entire comment\n //then this.state.comments gets mutated in the handleCommentChange function even though it would never get explicitly changed -JGB \n let tempComment = {\n Sequence: comment.Sequence,\n Comment: comment.Comment\n }\n tempComments.push(tempComment)\n }\n\n calendarData.CalendarCategories.forEach(category => this.handleAgendaSort(category.Agendas, category.CategoryType, category.CalendarCategoryTypeID, calendarData.ChamberCode));\n\n this.toggleHideAllCategories(true, calendarData.CalendarCategories);\n\n this.setState({\n calendarData: calendarData,\n showTitles: calendarData.ChamberCode === \"H\",\n pendingSave: noSavedItems,\n comments: comments,\n tempComments: tempComments,\n isLoaded: true,\n calendarDate: calendarData.CalendarDate,\n commentEdit: commentEdit,\n }, () => {\n //Get bills in the session for the bill dropdown\n this.props.actions.getSessionBills('?sessionID= ' + this.state.calendarData.SessionID).then(() => {\n let billList = [...this.props.bills.sessionBills];\n billList.forEach(bill => {\n bill.label = bill.LegislationNumber\n bill.value = bill.LegislationID\n });\n this.setState({\n billList: billList,\n })\n })\n this.props.actions.getSessionById(this.state.calendarData.SessionID)\n .then(() =>\n this.setState({ selectedSession: this.props.session.selectedSession })\n );\n });\n })\n });\n });\n }\n\n togglePreview() {\n const opposite = !this.state.showPreview;\n this.setState({\n showPreview: opposite\n });\n }\n\n handleCommentChange(e, sequence) {\n let tempComments = [...this.state.tempComments];\n\n tempComments.find(x => x.Sequence === sequence).Comment = e.target.value;\n\n this.setState({\n tempComments: tempComments\n });\n }\n\n updateAgenda(organizedBills, saveRequired) {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarCategories = organizedBills;\n\n this.setState({\n calendarData: calendarData,\n pendingSave: saveRequired === undefined ? this.state.pendingSave : saveRequired\n }, () => {\n this.forceUpdate();\n });\n }\n\n updateAgendaItems(agendaItems, categoryIndex, agendaIndex) {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarCategories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].AgendaItems = agendaItems;\n\n this.setState({\n calendarData: calendarData,\n pendingSave: true\n });\n }\n\n changeCategoryDropdown(value) {\n this.setState({\n selectedCategory: value\n });\n }\n\n addCategory() {\n const selectedCategory = this.state.selectedCategory;\n //Used to find the new index of the category so the hidden categories indices can be updated\n const categoryFinder = new Date().getTime();\n let organizedBills = [...this.state.calendarData.CalendarCategories];\n let newCalendarCategory = {\n IsLegislationCategory: selectedCategory.IsLegislationCategory,\n Agendas: [],\n CalendarCategoryTypeID: selectedCategory.CalendarCategoryTypeID,\n CategoryCode: selectedCategory.CategoryCode,\n Description: selectedCategory.Description,\n PluralDescription: selectedCategory.PluralDescription,\n DisplayType: selectedCategory.DisplayType,\n CategoryType: selectedCategory.CategoryType,\n Sequence: selectedCategory.Sequence,\n isNewCategory: categoryFinder\n }\n organizedBills.push(newCalendarCategory);\n //Sort the calendar by smallest to greatest sequence\n organizedBills.sort((a, b) => (a.Sequence > b.Sequence) ? 1 : -1)\n //Update the categories that are hidden since the array indices have changed\n const newCategoryIndex = organizedBills.filter(c => !c.DeletionDate).findIndex(cat => cat.isNewCategory === categoryFinder);\n if (newCategoryIndex !== -1) {\n let hideCategories = this.state.hideCategories;\n hideCategories.splice(newCategoryIndex, 0, false);\n this.setState({\n hideCategories: hideCategories\n });\n }\n //Remove the selected category so the user doesn't accidentally add it twice\n this.setState({\n selectedCategory: ''\n });\n this.updateAgenda(organizedBills, true);\n\n }\n\n deleteCategory(category) {\n let calendarData = { ...this.state.calendarData };\n const selectedCategoryIndex = calendarData.CalendarCategories.filter(c => !c.DeletionDate).findIndex(c => c.CategoryCode === category.CategoryCode);\n calendarData.CalendarCategories.filter(c => !c.DeletionDate)[selectedCategoryIndex].DeletionDate = new Date();\n\n let hideCategories = this.state.hideCategories;\n if (hideCategories[selectedCategoryIndex] !== null && hideCategories[selectedCategoryIndex] !== undefined) {\n hideCategories.splice(selectedCategoryIndex, 1);\n }\n this.setState({ calendarData, hideCategories })\n }\n\n toggleHideCategory(catIndex) {\n let hideCategories = this.state.hideCategories;\n hideCategories[catIndex] = !hideCategories[catIndex]\n this.setState({\n hideCategories: hideCategories\n });\n }\n\n toggleHideAllCategories(hide, calendarCategories) {\n let hideCategories = this.state.hideCategories;\n calendarCategories = calendarCategories || this.state.calendarData.CalendarCategories;\n calendarCategories.forEach((cat, catIndex) => {\n hideCategories[catIndex] = hide\n })\n this.setState({\n hideCategories: hideCategories\n });\n }\n\n toggleHideAllNonIncludedBills() {\n this.setState({\n hideAllNonIncludedBills: !this.state.hideAllNonIncludedBills\n });\n }\n\n changeBillDropdown(index, value) {\n let selectedBill = [...this.state.selectedBill];\n selectedBill[index] = value;\n this.setState({\n selectedBill: selectedBill\n });\n }\n\n changeDateDropdown(value, callback) {\n this.setState({\n selectedDate: value\n }, () => {\n if (this.state.selectedDate && this.state.selectedCommittee)\n this.setPending();\n if (callback) {\n callback();\n }\n });\n }\n\n changeCommitteeDropdown(value, callback) {\n this.setState({\n selectedCommittee: value\n }, () => {\n if (this.state.selectedDate && this.state.selectedCommittee)\n this.setPending();\n if (callback) {\n callback();\n }\n });\n }\n\n setPending() {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarCategories.forEach((category, i) => {\n category.Agendas.forEach((agenda, j) => {\n //If a given agenda item matches one filter (if one filter is selected) or both filters (if both are selected) \n //Then mark it isActive and give it the pending value so we know to deactivate it if the user changes the filter selections \n //Otherwise if it's active, pending, and it no longer matches the filters then remove the pending value and deactivate it so it's hidden\n if (((!this.state.selectedDate || this.state.selectedDate === \"\") && this.state.selectedCommittee && this.state.selectedCommittee.value === agenda.CommitteeID && !agenda.IsHidden && agenda.pending !== false)\n || ((!this.state.selectedCommittee || this.state.selectedCommittee === \"\") && this.state.selectedDate && this.state.selectedDate.value === agenda.CandidateDate && !agenda.IsHidden && agenda.pending !== false)\n || (this.state.selectedDate && this.state.selectedDate !== \"\" && this.state.selectedCommittee && this.state.selectedCommittee !== \"\" && this.state.selectedCommittee.value === agenda.CommitteeID && this.state.selectedDate.value === agenda.CandidateDate && !agenda.IsHidden && agenda.pending !== false)) {\n agenda.IsActive = true;\n //Disabling the pending feature which removes bills from the calendar if they've been included but not saved. I feel like there's a chance they'll want it back -JGB\n //agenda.pending = true; \n } else if (agenda.IsActive === true && agenda.pending === true) {\n agenda.IsActive = false;\n delete agenda.pending;\n }\n })\n\n category.Agendas = this.handleAgendaSort(category.Agendas, category.CategoryType, category.CalendarCategoryTypeID);\n })\n\n this.setState({\n calendarData\n })\n }\n\n addBill(index, callback) {\n let calendarCategories = [...this.state.calendarData.CalendarCategories];\n let newAgenda = {};\n\n //Check whether to move the bill from another category or add the bill\n let billExists = false;\n if (this.state.selectedBill[index]) {\n let associatedCategory = calendarCategories.filter(c => !c.DeletionDate)[index];\n calendarCategories.some((category, categoryIndex) => {\n const duplicateBillIndex = category.Agendas.findIndex(bill => bill.LegislationID === this.state.selectedBill[index].LegislationID);\n if (duplicateBillIndex >= 0) {\n billExists = true;\n newAgenda = { ...calendarCategories[categoryIndex].Agendas[duplicateBillIndex] };\n newAgenda.IsActive = true;\n newAgenda.CalendarCategoryTypeID = associatedCategory.CalendarCategoryTypeID;\n newAgenda.CalendarCategoryID = associatedCategory.CalendarCategoryID;\n calendarCategories[categoryIndex].Agendas.splice(duplicateBillIndex, 1);\n return true;\n }\n });\n\n if (!billExists) {\n newAgenda = {\n CalendarCategoryTypeID: associatedCategory.CalendarCategoryTypeID,\n CalendarCategoryID: associatedCategory.CalendarCategoryID,\n IsActive: true,\n LegislationID: this.state.selectedBill[index].LegislationID,\n LegislationNumber: this.state.selectedBill[index].LegislationNumber,\n LegislationKey: this.state.selectedBill[index].LegislationKey,\n Patrons: this.state.selectedBill[index].Patrons,\n LegislationDescription: this.state.selectedBill[index].Description,\n LegislationTitle: this.state.selectedBill[index].LegislationTitle,\n Ranking: null\n }\n }\n\n associatedCategory.Agendas.splice(0, 0, newAgenda);\n associatedCategory.Agendas = this.handleAgendaSort(associatedCategory.Agendas, associatedCategory.CategoryType, associatedCategory.CalendarCategoryTypeID)\n\n this.updateAgenda(calendarCategories, true);\n\n //Remove object so the bill is no longer currently selected in the dropdown\n let selectedBill = [...this.state.selectedBill];\n selectedBill[index] = '';\n this.setState({\n selectedBill: selectedBill\n });\n }\n\n if (callback) {\n callback();\n }\n }\n\n handleBulkAgendaSort(calendar) {\n calendar.CalendarCategories.forEach((category, i) => {\n if (category.Agendas) {\n const response = this.handleAgendaSort(category.Agendas, category.CategoryType, category.CalendarCategoryTypeID)\n category.Agendas = response;\n }\n\n //Persist old showAmendments after save or unpublish\n if ([98, 102].includes(category.CalendarCategoryTypeID)) {\n category.showAmendments = !!category.Agendas.flatMap(agenda => agenda.AgendaItems).find(agendaItem => agendaItem.IsActive && agendaItem.LDNumber);\n }\n })\n\n return calendar\n }\n\n handleAgendaSort(agendas, categoryType, categoryTypeId, chamberCode) {\n let unrankedAgendas = [];\n let rankedAgendas = [];\n let inactiveAgendas = [];\n let rankings = [];\n\n if (agendas && categoryType != \"Order\") {\n agendas.forEach((agenda) => {\n if (!agenda.Ranking && agenda.IsActive) {\n unrankedAgendas.push(agenda);\n } else if (agenda.IsActive) {\n rankedAgendas.push(agenda);\n rankings.push(agenda.Ranking);\n } else {\n inactiveAgendas.push(agenda)\n }\n })\n\n rankings.sort((a, b) => a - b);\n\n let gaps = [];\n for (let i = 1; i < rankings.length; i++) {\n gaps.push(rankings[i] - rankings[i - 1]);\n }\n\n if (NUMERIC_SORT_CATEGORIES.includes(categoryTypeId)) {\n rankedAgendas.sort((a, b) => sortAgendasNumerically(a, b, this.state.calendarData.ChamberCode ?? chamberCode));\n } else {\n rankedAgendas.sort((a, b) => sortAgendas(a, b, this.state.calendarData.ChamberCode));\n }\n if (NUMERIC_SORT_CATEGORIES.includes(categoryTypeId)) {\n unrankedAgendas.sort((a, b) => sortAgendasNumerically(a, b, this.state.calendarData.ChamberCode ?? chamberCode));\n } else {\n unrankedAgendas.sort((a, b) => sortAgendas(a, b, this.state.calendarData.ChamberCode));\n }\n if (NUMERIC_SORT_CATEGORIES.includes(categoryTypeId)) {\n inactiveAgendas.sort((a, b) => sortInactiveAgendasNumerically(a, b, this.state.calendarData.ChamberCode ?? chamberCode));\n } else {\n inactiveAgendas.sort((a, b) => sortInactiveAgendas(a, b, this.state.calendarData.ChamberCode ?? chamberCode));\n }\n\n //If there are multiple ranks with a gap larger than 1 place all unranked agendas between them\n if (new Set(rankings).size > 1 && Math.max(...gaps) > 1) {\n let insertPoint = gaps.findIndex(x => x === Math.max(...gaps)) + 1\n\n for (let i = 0; i < unrankedAgendas.length; i++) {\n rankedAgendas.splice(insertPoint, 0, unrankedAgendas[i]);\n insertPoint++;\n }\n\n return rankedAgendas.concat(inactiveAgendas);\n } else {\n //If the largest rank is greater than 50 put all unranked agendas above the ranked agendas, otherwise put them all at the bottom\n if (Math.max(...rankings) >= 50) {\n return unrankedAgendas.concat(rankedAgendas).concat(inactiveAgendas);\n } else {\n return rankedAgendas.concat(unrankedAgendas).concat(inactiveAgendas);\n }\n }\n } else {\n return agendas;\n }\n }\n\n genCalendarPreview(category) {\n this.setState({\n gettingPdf: true\n });\n // This endpoint returns a pdf document and not json so the partnerRequest function will not work\n // It doesn't need to be saved to the redux store because it will not be referenced after the user sees it. So it is called here within the component.\n const API_URL = window.env ? window.env.API_SERVER : '';\n const idToken = 'LIS_ID_TOKEN';\n let signal = new window.AbortController().signal;\n const config = {\n headers: {\n 'content-type': \"application/json; charset=utf-8\",\n Authorization: \"Bearer \" + localStorage.getItem(idToken),\n 'WebAPIKey': process.env.REACT_APP_API_KEY\n },\n method: \"GET\",\n signal: signal\n };\n let params = `?calendarId=${this.state.calendarData.CalendarID}`\n if (category) {\n params += `&calendarCategoryID=${category.CalendarCategoryID}`\n }\n fetch((API_URL || process.env.REACT_APP_CALENDAR_FILE_API_URL) + '/CalendarFileGeneration/api/PreviewCalendarFileAsync' + params, config)\n .then(response => {\n if (response.status === 204) {\n throw 'No Content';\n } else if (response.status > 399) {\n throw response;\n } else {\n response.blob()\n .then(res => {\n if (this.pdfRef && this.pdfRef.current) {\n let pdfRef = this.pdfRef.current;\n pdfRef.setAttribute('src', URL.createObjectURL(res));\n pdfRef.onload = () => {\n this.setState({\n gettingPdf: false\n });\n };\n }\n })\n }\n }).catch(err => {\n if (err.name === 'AbortError') {\n return;\n }\n this.setState({\n gettingPdf: false\n });\n //This is a response and the text needs to be extracted\n if (err.text) {\n err.text().then(err => console.log(err.toString()));\n } else {\n console.log(err.toString())\n }\n this.props.actions.makeToast([{ message: \"Failed To Get Data\", type: \"failure\" }]);\n })\n }\n\n addComment() {\n let newComments = this.state.comments;\n let newTempComments = this.state.tempComments\n\n newComments.push(\n {\n CalendarID: this.state.calendarData.CalendarID,\n Comment: \"\",\n Sequence: this.state.comments.length > 0 ? this.state.comments[this.state.comments.length - 1].Sequence + 1 : 1\n }\n )\n\n newTempComments.push(\n {\n Comment: \"\",\n Sequence: newComments[newComments.length - 1].Sequence\n }\n )\n\n this.setState({\n comments: newComments,\n tempComments: newTempComments\n }, () => {\n this.toggleCommentEdit(newComments[newComments.length - 1].Sequence)\n })\n }\n\n removeComment(i) {\n let newComments = this.state.comments;\n if (newComments[i].CalendarCommentID != undefined) {\n newComments[i].DeletionDate = moment().toISOString();\n newComments[i].Sequence = 0;\n newComments.sort((a, b) => a.Sequence - b.Sequence);\n } else {\n newComments.splice(i, 1);\n }\n\n let newSequence = 1;\n\n for (let j = 0; j < newComments.length; j++) {\n if (!newComments[j].DeletionDate) {\n newComments[j].Sequence = newSequence;\n newSequence++;\n }\n }\n\n this.setState({\n comments: newComments\n })\n }\n\n commentShift(i, shiftUp) {\n let newComments = [...this.state.comments];\n let newTempComments = [...this.state.tempComments];\n let newSequence = shiftUp ? newComments[i - 1].Sequence : newComments[i + 1].Sequence;\n\n let commentEdit = [...this.state.commentEdit];\n commentEdit[i] = commentEdit[shiftUp ? i - 1 : i + 1] == true ? true : false;\n commentEdit[shiftUp ? i - 1 : i + 1] = true;\n\n newComments[i].Sequence = newSequence;\n newTempComments[i].Sequence = newSequence\n\n if (shiftUp) {\n newComments[i - 1].Sequence = newSequence + 1;\n newTempComments[i - 1].Sequence = newSequence + 1;\n } else {\n newComments[i + 1].Sequence = newSequence - 1;\n newTempComments[i + 1].Sequence = newSequence - 1;\n }\n\n newComments.sort((a, b) => a.Sequence - b.Sequence);\n newTempComments.sort((a, b) => a.Sequence - b.Sequence);\n\n this.setState({\n comments: newComments,\n tempComments: newTempComments,\n commentEdit: commentEdit\n })\n }\n\n handleProFormaChange() {\n let calendarData = { ...this.state.calendarData };\n calendarData.IsProforma = !calendarData.IsProforma\n this.setState({\n calendarData: calendarData\n });\n }\n\n toggleCalendarPreview(categoryIndex) {\n this.setState({\n showCategoryPreview: categoryIndex\n });\n }\n\n togglePortal(state, category) {\n this.setState({\n showPortal: !state\n }, () => {\n if (this.state.showPortal && category) {\n this.genCalendarPreview(category === 'All' ? '' : category);\n }\n });\n }\n\n saveCalendar(publishFlag) {\n this.setState({ isSaving: true });\n let calendarSave = { ...this.state.calendarData };\n //Add new comments\n calendarSave.CalendarComments = this.state.comments;\n\n //If saving or publishing set isActive off showAmendments. If unpublishing, set showAmendments off isActive. \n calendarSave.CalendarCategories.forEach(category => {\n if ([98, 102].includes(category.CalendarCategoryTypeID)) {\n if (publishFlag || (!calendarSave.IsPublic && !publishFlag)) {\n category.Agendas.forEach(agenda => {\n agenda.AgendaItems?.forEach(item => {\n if (item.LDNumber) {\n item.IsActive = category.showAmendments;\n }\n });\n });\n } else if (!publishFlag) {\n category.showAmendments = !!category.Agendas.flatMap(agenda => agenda.AgendaItems).find(agendaItem => agendaItem.IsActive && agendaItem.LDNumber);\n }\n }\n })\n\n calendarSave.CalendarCategories.forEach(category => {\n const response = this.handleAgendaSort(category.Agendas, category.CategoryType, category.CalendarCategoryTypeID)\n response.forEach((agenda, i) => {\n if (agenda.IsActive) {\n agenda.Sequence = i + 1\n }\n })\n category.Agendas = response;\n });\n\n //Set whether it should be published or not. The published value depends on what button the user clicked\n calendarSave.IsPublic = publishFlag;\n this.props.actions.saveCalendar({ Calendars: [calendarSave] })\n .then(failureMessage => {\n if (this.state.showPreview || calendarSave.IsPublic) {\n let content = this.componentRef.innerHTML.replace(/\\\\\"/g, '');\n this.props.actions.sendCalendarHtml({ Chamber: calendarSave.ChamberCode, CalendarDate: calendarSave.CalendarDate, CalendarNumber: calendarSave.CalendarNumber, ContentHTML: content });\n }\n if (publishFlag) {\n //Calendars cannot be edited once published so send the user back to the grid\n const calendarId = this.props.calendar.calendarSave.CalendarID;\n this.props.navigate('/calendar-management');\n this.props.actions.saveCalendarFile(\"?calendarID=\" + calendarId)\n } else {\n //If the form was not published then get the new mod dates and update the React state variables\n let calendarSave = { ...this.props.calendar.calendarSave };\n let comments = [];\n\n for (let i = 0; i < calendarSave.CalendarComments.length; i++) {\n let comment = calendarSave.CalendarComments[i];\n comment.Sequence = i + 1;\n comments.push(comment);\n }\n\n const response = this.handleBulkAgendaSort(calendarSave)\n this.setState({\n calendarData: response,\n comments: comments,\n isSaving: false,\n pendingSave: false,\n calendarDate: calendarSave.CalendarDate\n }, () => {\n this.forceUpdate();\n });\n }\n\n let toasts = [];\n if (failureMessage && failureMessage.includes(\"Minutes\")) {\n toasts.push({ message: \"Problem with Minutes Creation\", type: \"failure\" });\n }\n toasts.push({ message: `Calendar ${publishFlag ? 'Published' : 'Saved'}`, type: \"success\" });\n this.props.actions.makeToast(toasts)\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isSaving: false\n });\n console.log(err)\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n });\n }\n\n handlePdfFile(e) {\n this.setState({\n selectedFile: e.target.files[0]\n });\n }\n\n submitPdfFile() {\n this.setState({\n isSubmittingFile: true\n });\n this.props.actions.replacePdf('?calendarID=' + this.state.calendarData.CalendarID, this.state.selectedFile)\n .then(() => {\n this.setState({\n isSubmittingFile: false,\n selectedFile: ''\n });\n this.props.actions.makeToast([{ message: \"PDF Replacement Success\", type: \"success\" }]);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isSubmittingFile: false\n });\n this.props.actions.makeToast([{ message: \"PDF Replacement Failed\", type: \"failure\" }]);\n })\n }\n\n changeConveneTime(date) {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarDate = date.toISOString();\n this.setState({\n calendarData: calendarData\n });\n }\n\n toggleAgenda(catIndex, agendaIndex) {\n let calendar = { ...this.state.calendarData };\n let agenda = calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex];\n agenda.show = !agenda.show;\n if (agenda.IsActive && agenda.LegislationNumber && !agenda.Versions) {\n agenda.Versions = []\n this.props.actions.getBillVersionByBillNumber('?BillNumber=' + calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex].LegislationNumber + '&SessionID=' + calendar.SessionID)\n .then(() => {\n // Get the calendar data again just in case the user toggled the agenda items\n calendar = { ...this.state.calendarData };\n let versions = this.props.bills.billVersion.filter(ver => ver.Version !== \"Amendment\" && moment(ver.DraftDate).isSameOrBefore(calendar.CalendarDate))\n // Most recent versions first\n versions = versions.sort((a, b) => moment(a.DraftDate).isSameOrBefore(b.DraftDate))\n calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex].Versions = versions\n this.setState({\n calendarData: calendar\n });\n }).catch(err => {\n if (err === \"Aborted\") {\n return\n }\n calendar = { ...this.state.calendarData };\n calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex].Versions = \"fail\";\n this.setState({\n calendarData: calendar\n });\n })\n }\n this.setState({\n calendarData: calendar\n });\n }\n\n toggleCommentEdit(sequence) {\n let commentEdit = [...this.state.commentEdit];\n let tempComments = [...this.state.tempComments];\n\n commentEdit[sequence - 1] = !commentEdit[sequence - 1];\n //Reset the temporary comment value\n tempComments.find(x => x.Sequence === sequence).Comment = this.state.comments.find(x => x.Sequence === sequence).Comment;\n\n this.setState({\n commentEdit: commentEdit,\n tempComments: tempComments\n })\n }\n\n confirmCommentEdit(sequence) {\n let comments = [...this.state.comments];\n\n comments.find(x => x.Sequence === sequence).Comment = this.state.tempComments.find(x => x.Sequence === sequence).Comment;\n\n this.setState({\n comments: comments\n }, () => {\n this.toggleCommentEdit(sequence)\n })\n }\n\n toggleShowTitles() {\n this.setState({\n showTitles: !this.state.showTitles\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { message } = this.state;\n\n let conveneTime = moment.utc(this.state.calendarData.CalendarDate);\n let timeChecker = conveneTime.clone().startOf('day');\n // By default created calendars have a time of 00:00. If it is midnight then display it as 12:00 pm instead\n if (conveneTime.isSame(timeChecker)) {\n conveneTime.hour(12).startOf('hour');\n }\n if (message) {\n return (\n <div className=\"dlas-forms\">\n <span>{message}</span>\n </div>\n );\n }\n else {\n let calendarFileUrl = '';\n if (this.state.calendarData.CalendarFiles) {\n const pdfFile = this.state.calendarData.CalendarFiles.find(file => file.FileURL.toUpperCase().includes('PDF'));\n if (pdfFile) {\n const url = new URL(pdfFile.FileURL);\n calendarFileUrl = lisDocDomain + (url.pathname[0] === '/' ? url.pathname : '/' + url.pathname);\n }\n }\n\n //This calendarTime logic is also set in lis-public-calendar-details, if changed here, change there as well\n const calendarTime = moment.utc(this.state.calendarData.CalendarDate).isSame(moment.utc(this.state.calendarData.CalendarDate).hour(0), \"minute\")\n || moment.utc(this.state.calendarData.CalendarDate).isSame(moment.utc(this.state.calendarData.CalendarDate).hour(12), \"minute\")\n ? \"12 noon\"\n : moment.utc(this.state.calendarData.CalendarDate).format(\"h:mm a\");\n\n if (this.state.showPreview) {\n return (\n <div style={{ paddingBottom: '75px' }}>\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle=\"PDF Preview\">\n {this.state.gettingPdf &&\n <div className=\"center-spinner spinner\">You must save before seeing changes in this PDF preview</div>\n }\n <iframe style={{ display: this.state.gettingPdf ? 'none' : 'block', width: '100%', height: '100%' }} ref={this.pdfRef}></iframe>\n </Popout>\n }\n <div className=\"flex-row\">\n <h2>Calendar Preview</h2>\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print\"> Print</a>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <CalendarDetailsComponent\n calendar={this.state.calendarData}\n calendarTime={calendarTime}\n session={this.state.selectedSession}\n comments={this.state.comments}\n updateAgendaItems={this.updateAgendaItems}\n isCalendarForm={true}\n toggleAgenda={this.toggleAgenda}\n sessionList={this.props.session.sessionList}\n calendarCategoryReferences={this.state.calendarCategories}\n />\n <div style={{ display: \"none\" }}>\n <div ref={el => (this.componentRef = el)}>\n <CalendarDetailsPrintout\n calendar={this.state.calendarData}\n session={this.state.selectedSession}\n comments={this.state.comments}\n />\n </div>\n </div>\n <div className=\"align-right floating-button-bar inline-list\">\n <button onClick={() => this.saveCalendar(PUBLISH_CALENDAR)} disabled={this.state.isSaving} className=\"button\">{this.state.isSaving ? \"Publishing...\" : \"Publish\"}</button>\n <button onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n <button disabled={this.state.pendingSave || this.state.calendarData.IsPublic} onClick={() => this.togglePortal(this.state.showPortal, 'All')} className=\"button\" type=\"button\">PDF Preview</button>\n </div>\n </div>\n );\n } else {\n return (\n <React.Fragment>\n <div>\n <Prompt\n when={this.state.pendingSave === true}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n {this.state.calendarData ? <h1>{(this.state.calendarData.ChamberCode === \"H\" ? \"House \" : \"Senate \") + \"Calendar\"}</h1> : <h1> </h1>}\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle=\"Preview\">\n {this.state.gettingPdf &&\n <div className=\"center-spinner spinner\">You must save before seeing changes in this PDF preview</div>\n }\n <iframe style={{ display: this.state.gettingPdf ? 'none' : 'block', width: '100%', height: '100%' }} ref={this.pdfRef}></iframe>\n </Popout>\n }\n {this.state.showCategoryPreview !== -1 &&\n <div onClick={() => this.toggleCalendarPreview(-1)} className=\"overlay center-content\">\n <div className=\"full\">\n <div onClick={e => e.stopPropagation()} className=\"dlas-forms user-forms advanced-search overlay-content animated-fade-in-up\" ref={el => (this.componentRef = el)}>\n <CalendarDetailsComponent\n calendar={{ ...this.state.calendarData, CalendarCategories: [this.state.calendarData.CalendarCategories[this.state.showCategoryPreview]] }}\n calendarTime={calendarTime}\n session={this.state.selectedSession}\n comments={[]}\n userClaims={{ resources: [] }}\n toggleAgenda={this.toggleAgenda}\n sessionList={this.props.session.sessionList}\n isCalendarForm={true}\n calendarCategoryReferences={this.state.calendarCategories}\n />\n <button type=\"button\" onClick={() => this.toggleCalendarPreview(-1)} className=\"button secondary\">Close</button>\n </div>\n </div>\n </div>\n }\n <div className=\"user-forms\">\n {!this.state.isLoaded &&\n <div className=\"center-spinner spinner\">Loading results...</div>\n }\n {this.state.isLoaded &&\n <div className=\"dlas-forms\">\n <span className=\"error-message\">{message}</span>\n\n <fieldset style={{ paddingBottom: '50px' }} className=\"fieldset-collapse fieldset-open\">\n <legend>Calendar Information</legend>\n <div>\n <div className=\"multi-row four no-margin\">\n <div>\n <Fields.TextInput\n value={this.state.selectedSession ? this.state.selectedSession.SessionYear + ' ' + this.state.selectedSession.DisplayName : ''}\n disabled={true}\n />\n </div>\n <div>\n <Fields.TextInput\n value={this.state.calendarData ? moment(this.state.calendarData.CalendarDate).format(\"L\") + (this.state.calendarData.CalendarNumber > 1 ? [' (', ')'].join('Supp. ' + (this.state.calendarData.CalendarNumber - 1)) : '') : ''}\n disabled\n />\n </div>\n <div>\n {/* Supplemental calendars do not get this date picker */}\n {this.state.calendarData.CalendarNumber < 2 &&\n <DatePicker\n selected={conveneTime}\n showTimeSelect\n showTimeSelectOnly\n dateFormat=\"h:mm a\"\n timeFormat=\"h:mm a\"\n onChange={this.changeConveneTime}\n />\n }\n </div>\n <div className=\"flex-row flex-end flex-vertical-center\">\n {calendarFileUrl && !this.state.isSubmittingFile &&\n <>\n <button style={{ marginRight: 5 }} type=\"button\" className=\"button small-button file-button\"><input type=\"file\" accept=\".pdf\" onChange={this.handlePdfFile} />{this.state.selectedFile ? this.state.selectedFile.name : \"Replace PDF\"}</button>\n {this.state.selectedFile ?\n <button onClick={this.submitPdfFile} type=\"button\" className=\"button small-button\">Submit</button>\n :\n <React.Fragment>\n <a target=\"_blank\" className=\"icon pdf\" href={calendarFileUrl}></a>\n {this.state.calendarData.CalendarNumber < 2 &&\n <a target=\"_blank\" className=\"icon file-empty\" style={{ marginLeft: \"5px\" }} href={calendarFileUrl.replace(\".PDF\", \"-padded.PDF\")}></a>}\n </React.Fragment>\n }\n </>\n }\n {calendarFileUrl && this.state.isSubmittingFile &&\n <div className=\"small-spinner\"></div>\n }\n </div>\n </div>\n <div className=\"flex-row\">\n <label className=\"label-and-checkbox pro-forma\"><input type=\"checkbox\" checked={this.state.calendarData.IsProforma} onChange={this.handleProFormaChange} /> Create a Pro Forma Calendar</label>\n <button type=\"button\" className=\"button float-right title-toggle\" onClick={() => this.toggleShowTitles()}>{this.state.showTitles ? \"Show Bill Captions\" : \"Show Bill Titles\"}</button>\n </div>\n {this.state.comments.map((comment, i) => {\n return (\n comment.DeletionDate === undefined &&\n <div className=\"grid-wrapper calendar-comment-row\" key={i}>\n {this.state.commentEdit[comment.Sequence - 1] ?\n <React.Fragment>\n <div>\n <Fields.TextArea\n label={\"Comment \" + comment.Sequence}\n type=\"text\"\n style={{ resize: 'vertical', minHeight: 65, width: \"100%\" }}\n placeholder=\"Comments\"\n value={this.state.tempComments.find(x => x.Sequence === comment.Sequence).Comment}\n onChange={(e) => this.handleCommentChange(e, comment.Sequence)}\n />\n </div>\n <div className=\"grid-wrapper two comment-controls\">\n <div style={{ paddingTop: \"25px\" }}>\n <button className=\"icon save\" style={{ marginRight: \"10px\" }} onClick={() => this.confirmCommentEdit(comment.Sequence)} />\n <button className=\"icon delete\" onClick={() => this.toggleCommentEdit(comment.Sequence)} />\n </div>\n <div className=\"arrows\">\n {i !== 0 && this.state.comments.length > 1 &&\n <button className=\"arrow-up\" onClick={() => this.commentShift(i, true)} />\n }\n {i !== this.state.comments.length - 1 &&\n <button className=\"arrow-down\" onClick={() => this.commentShift(i, false)} />\n }\n </div>\n </div>\n </React.Fragment>\n :\n <React.Fragment>\n <div>\n <label>{\"Comment \" + comment.Sequence}</label>\n <p class=\"calendar-comment\">{comment.Comment}</p>\n </div>\n <div className=\"grid-wrapper two\">\n <div style={{ paddingTop: \"30px\", display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gridGap: \"10px\" }}>\n <button className=\"button edit\" onClick={() => this.toggleCommentEdit(comment.Sequence)} />\n <button className=\"icon bin\" onClick={() => this.removeComment(i)} />\n </div>\n <div />\n </div>\n </React.Fragment>\n }\n </div>\n )\n })\n }\n <div className=\"add-comment\">\n <button className=\"button float-right\" onClick={() => this.addComment()}>Add Comment</button>\n </div>\n </div>\n <BillsGrid\n organizedBills={this.state.calendarData.CalendarCategories}\n updateAgenda={this.updateAgenda}\n calendarCategories={this.state.calendarCategories}\n hideCategories={this.state.hideCategories}\n selectAllActive={this.state.selectAllActive}\n selectAllInactive={this.state.selectAllInactive}\n changeCategoryDropdown={this.changeCategoryDropdown}\n selectedCategory={this.state.selectedCategory}\n addCategory={this.addCategory}\n deleteCategory={this.deleteCategory}\n selectedBill={this.state.selectedBill}\n changeBillDropdown={this.changeBillDropdown}\n addBill={this.addBill}\n billList={this.state.billList}\n toggleCalendarPreview={this.toggleCalendarPreview}\n pendingSave={this.state.pendingSave}\n toggleHideCategory={this.toggleHideCategory}\n toggleHideAllCategories={this.toggleHideAllCategories}\n toggleHideAllNonIncludedBills={this.toggleHideAllNonIncludedBills}\n hideAllNonIncludedBills={this.state.hideAllNonIncludedBills}\n togglePortal={this.togglePortal}\n showPortal={this.state.showPortal}\n updateAgendaItems={this.updateAgendaItems}\n calendarTime={calendarTime}\n showTitles={this.state.showTitles}\n changeDateDropdown={this.changeDateDropdown}\n changeCommitteeDropdown={this.changeCommitteeDropdown}\n dateList={this.state.selectedCommittee && this.state.selectedCommittee !== \"\" ? this.state.dateList.filter(x => x.committee.includes(this.state.selectedCommittee.value)) : this.state.dateList}\n committeeList={this.state.selectedDate && this.state.selectedDate !== \"\" ? this.state.committeeList.filter(x => this.state.selectedDate.committee.includes(x.value)) : this.state.committeeList}\n selectedCommittee={this.state.selectedCommittee}\n selectedDate={this.state.selectedDate}\n fullCommitteeList={this.props.committee.committeeList}\n chamberCode={this.state.calendarData.ChamberCode}\n sessionCode={this.state.calendarData.SessionCode}\n userRoles={this.props.login.userClaims.roles}\n />\n </fieldset>\n <div className=\"align-right floating-button-bar inline-list\">\n <button disabled={this.state.isSaving} onClick={() => this.saveCalendar(SAVE_CALENDAR)} className=\"button\" type=\"submit\">{this.state.calendarData.IsPublic ? \"Unpublish\" : this.state.isSaving ? \"Saving...\" : \"Save\"}</button>\n <button disabled={this.state.pendingSave || this.state.isSaving || this.state.calendarData.IsPublic} onClick={this.togglePreview} className=\"button\" type=\"button\">Preview</button>\n <button disabled={this.state.pendingSave || this.state.isSaving || this.state.calendarData.IsPublic} onClick={() => this.togglePortal(this.state.showPortal, 'All')} className=\"button\" type=\"button\">PDF Preview</button>\n </div>\n </div>\n }\n </div>\n </React.Fragment>\n );\n }\n }\n }\n};\n\nconst CalendarManagementForm = connect(\n (state) => {\n const { calendar, session, bills, nav, committee, login } = state;\n return {\n calendar,\n session,\n bills,\n nav,\n committee,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, calendarActionCreators, sessionActionCreators, billActionCreators, navActionCreators, committeeActionCreators), dispatch)\n }\n }\n)(HouseCalendarFormComponent)\n\nexport default CalendarManagementForm;\n","import React from \"react\";\nimport { LargeListSelect } from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport Select from 'react-select';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport ReactTooltip from 'react-tooltip';\nimport { Link } from 'react-router-dom';\nimport renderHTML from 'react-render-html';\nimport AgendaItemsComponent from '../../../lis-shared/lis-calendar/lis-agenda-items';\nimport moment from 'moment-timezone';\n\nconst isNotHidden = (agenda, category, committeeList) => (!agenda.CommitteeID && !agenda.IsHidden) || (agenda.IsActive && !agenda.IsHidden) || (committeeList.find(x => x.value == agenda.CommitteeID) && category.CalendarCategoryTypeID === 66) /* Bills or Resolutions Rereferred */\n\nconst NUMERIC_SORT_CATEGORIES = [72, 111, 109, 112, 60, 110, 98, 102, 83, 90, 87, 93, 100, 104, 117, 118, 105, 106, 66, 67, 96, 97, 64, 68, 69, 65];\n\nconst sortAgendas = (a, b, calendarChamber) => {\n {\n return b.IsActive !== a.IsActive\n ? b.IsActive\n ? 1\n : -1\n : a.Sequence > 0 && b.Sequence > 0 && a.Sequence !== b.Sequence\n ? a.Sequence - b.Sequence > 0\n ? 1\n : -1\n : a.CalendarDate !== b.CalendarDate\n ?\n !a.CalendarDate ?\n 1 :\n !b.CalendarDate ? -1\n :\n a.CalendarDate - b.CalendarDate\n : a.CandidateDate !== b.CandidateDate\n ?\n !a.CandidateDate ?\n 1 :\n !b.CandidateDate ? -1\n :\n a.CandidateDate - b.CandidateDate\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) !== 0\n ? a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : -1\n : a.LegislationKey && parseInt(a.LegislationKey) !== parseInt(b.LegislationKey)\n ? parseInt(a.LegislationKey) - parseInt(b.LegislationKey) > 0\n ? 1\n : -1\n : 0\n }\n}\n\nconst sortAgendasNumerically = (a, b, calendarChamber) => {\n {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : a.Sequence > 0 && b.Sequence > 0 && a.Sequence !== b.Sequence\n ? a.Sequence - b.Sequence > 0\n ? 1\n : -1\n : a.LegislationNumber && b.LegislationNumber && a.LegislationNumber[0] !== b.LegislationNumber[0] ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1\n : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n }\n}\n\nconst findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n a.IsActive && findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey(a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate)\n)\n\nconst findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n (((ignoreCalendarDate || (a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isSame(b.CalendarDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCalendarDate && a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isBefore(b.CalendarDate, \"day\"))) ||\n (((ignoreCandidateDate || (a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isSame(b.CandidateDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCandidateDate && a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isBefore(b.CandidateDate, \"day\"))) ||\n ((ignoreCalendarDate || (!a.CalendarDate && !b.CalendarDate)) && (ignoreCandidateDate || (!a.CandidateDate && !b.CandidateDate)) &&\n findLastByLegChamberTypeKey(a, b, calendarChamber))\n || (!ignoreCalendarDate && !b.CalendarDate && a.CandidateDate)\n || !ignoreCandidateDate && !b.CandidateDate && a.CandidateDate\n)\n\nconst findLastByLegChamberTypeKey = (a, b, calendarChamber) => (\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === (calendarChamber === \"H\" ? 1 : -1)) ||\n (a.LegislationNumber && a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === -1) ||\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === 0 && a.LegislationKey && a.LegislationKey < parseInt(b.LegislationKey))\n)\n\nconst getItemStyle = (isDragging, draggableStyle, isActive) => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n // change background colour if dragging\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: 'none',\n borderLeft: '1px solid #e0e0e0',\n borderBottom: '1px solid #e0e0e0',\n color: isActive ? '' : '#8b8b8b',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nclass SenateBillsGrid extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectAllActive: false,\n selectAllInactive: false,\n showAgendaItemEditor: -1,\n showAgendaItemEditorCategoryIndex: -1,\n lastCheckedBills: [],\n textHeight: []\n };\n this.toggleSelectAll = this.toggleSelectAll.bind(this);\n this.toggleRow = this.toggleRow.bind(this);\n this.toggleBill = this.toggleBill.bind(this);\n this.showAgendaItems = this.showAgendaItems.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.toggleEditCategoryDescription = this.toggleEditCategoryDescription.bind(this);\n this.saveChange = this.saveChange.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.onDragEnd = this.onDragEnd.bind(this);\n this.toggleAgendaItemEditor = this.toggleAgendaItemEditor.bind(this);\n this.expandTitle = this.expandTitle.bind(this);\n this.getCategoryBills = this.getCategoryBills.bind(this);\n this.setDescription = this.setDescription.bind(this);\n this.setBillsInConferenceCategoryDescription = this.setBillsInConferenceCategoryDescription.bind(this);\n this.categoryDescriptionIsEdited = this.categoryDescriptionIsEdited.bind(this);\n this.changeCommitteeDropdown = this.changeCommitteeDropdown.bind(this);\n this.changeDateDropdown = this.changeDateDropdown.bind(this);\n this.addBill = this.addBill.bind(this);\n this.toggleShowAmendments = this.toggleShowAmendments.bind(this);\n this.handleDescriptionChange = this.handleDescriptionChange.bind(this);\n }\n\n toggleSelectAll(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n const opposite = !organizedBills.filter(c => !c.DeletionDate)[categoryIndex].selectAll;\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].selectAll = opposite\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(leg => { if (isNotHidden(leg, organizedBills.filter(c => !c.DeletionDate)[categoryIndex], this.props.committeeList)) leg.checked = opposite });\n this.props.updateAgenda(organizedBills);\n\n\n let lastCheckedBills = this.state.lastCheckedBills;\n lastCheckedBills[categoryIndex] = -1;\n this.setState({\n lastCheckedBills: lastCheckedBills\n });\n }\n\n toggleRow(categoryIndex, itemIndex, e) {\n let organizedBills = [...this.props.organizedBills];\n let lastCheckedBills = this.state.lastCheckedBills;\n let lastCheckedBill = lastCheckedBills[categoryIndex];\n if (e.nativeEvent.shiftKey && !isNaN(lastCheckedBill) && lastCheckedBill !== -1) {\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(agenda => agenda.checked = false);\n for (let i = 0; i < Math.abs(itemIndex - lastCheckedBill); i++) {\n const index = lastCheckedBill + i * (itemIndex - lastCheckedBill) / Math.abs(itemIndex - lastCheckedBill);\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[index].checked = true;\n }\n } else {\n lastCheckedBill = itemIndex;\n }\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex].checked = !organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex].checked;\n this.props.updateAgenda(organizedBills);\n\n lastCheckedBills[categoryIndex] = lastCheckedBill;\n this.setState({\n lastCheckedBills: lastCheckedBills\n });\n }\n\n categoryDescriptionIsEdited(categoryAsDisplayed, associatedReferenceCategory) {\n if (this.props.chamberCode === 'H' && categoryAsDisplayed.CategoryCode === \"SENBRC\" || categoryAsDisplayed.CategoryCode === \"HOUBRC\") {\n return !(\n [\"House Bill in Conference\", \"Senate Bill in Conference\",\n \"House Bills in Conference\", \"Senate Bills in Conference\",\n \"House Joint Resolution in Conference\", \"Senate Joint Resolution in Conference\",\n \"House Joint Resolutions in Conference\", \"Senate Joint Resolutions in Conference\",\n \"House Bill and Joint Resolution in Conference\", \"Senate Bill and Joint Resolution in Conference\",\n \"House Bills and Joint Resolution in Conference\", \"Senate Bills and Joint Resolution in Conference\",\n \"House Bill and Joint Resolutions in Conference\", \"Senate Bill and Joint Resolutions in Conference\",\n \"House Bills and Joint Resolutions in Conference\", \"Senate Bills and Joint Resolutions in Conference\",\n ].includes(categoryAsDisplayed.Description))\n } else {\n if (associatedReferenceCategory && associatedReferenceCategory.Description !== categoryAsDisplayed.Description && associatedReferenceCategory.PluralDescription !== categoryAsDisplayed.Description) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n setDescription(organizedBills, categoryIndex) {\n let updatedOrganizedBills = [...organizedBills];\n\n if (categoryIndex) {\n //if it's been edited, leave it at that\n const associatedReferenceCategory = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID);\n if (this.categoryDescriptionIsEdited(updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex], associatedReferenceCategory)) {\n //leave it alone\n } else {\n //otherwise, set description based on singular/plural reference description\n if (this.props.chamberCode === 'H' && updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CategoryCode === \"SENBRC\" || updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CategoryCode === \"HOUBRC\") {\n updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Description = this.setBillsInConferenceCategoryDescription(updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex]);\n } else {\n if (associatedReferenceCategory) {\n if (updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(x => x.IsActive).length > 1) {\n updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Description = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID).PluralDescription;\n } else {\n updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].Description = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID).Description;\n }\n }\n }\n }\n } else {\n //iterate through all\n updatedOrganizedBills.forEach((cat, index) => {\n //if it's been edited, leave it at that\n const associatedReferenceCategory = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === updatedOrganizedBills[index].CalendarCategoryTypeID)\n if (this.categoryDescriptionIsEdited(cat, associatedReferenceCategory)) {\n return;\n }\n\n //otherwise, set description based on singular/plural reference description \n if (this.props.chamberCode === 'H' && cat.CategoryCode === \"SENBRC\" || cat.CategoryCode === \"HOUBRC\") {\n updatedOrganizedBills[index].Description = this.setBillsInConferenceCategoryDescription(cat);\n } else {\n if (associatedReferenceCategory) { //calendarCategories prop only contains same chamber categories, so could cause an NRE if iterating over an opposite-chamber category\n if (updatedOrganizedBills[index].Agendas.filter(x => x.IsActive).length > 1) {\n updatedOrganizedBills[index].Description = associatedReferenceCategory.PluralDescription;\n } else {\n updatedOrganizedBills[index].Description = associatedReferenceCategory.Description;\n }\n }\n }\n })\n }\n\n return updatedOrganizedBills;\n }\n\n setBillsInConferenceCategoryDescription(category) {\n let existingDescription = category.Description;\n let newTypeAndPluralityLanguage;\n let newDescription;\n\n //get all legislations in this category\n const categoryLegislations = category.Agendas;\n if (categoryLegislations) {\n //filter to only the active legislations\n const activeCategoryLegislations = categoryLegislations.filter(cl => cl.IsActive);\n if (!activeCategoryLegislations.length) {\n //not any active legislations - should only say 'bill'\n newTypeAndPluralityLanguage = 'Bill';\n } else {\n const numResolutions = activeCategoryLegislations.filter(acl => acl.LegislationNumber[1] !== \"B\").length;\n const numBills = activeCategoryLegislations.filter(acl => acl.LegislationNumber[1] === \"B\").length;\n if (numResolutions > 0 && numBills > 0) {\n //At least one bill and at least one resolution\n newTypeAndPluralityLanguage = (numBills > 1 ? 'Bills' : 'Bill') + ' and Joint ';\n newTypeAndPluralityLanguage += numResolutions > 1 ? 'Resolutions' : 'Resolution';\n } else if (numResolutions > 0 && numBills === 0) {\n //at least one resolution and no bills\n newTypeAndPluralityLanguage = numResolutions > 1 ? 'Joint Resolutions' : 'Joint Resolution';\n } else if (numResolutions === 0 && numBills > 0) {\n //at least one bill and no resolutions\n newTypeAndPluralityLanguage = numBills > 1 ? 'Bills' : 'Bill';\n }\n }\n newDescription = existingDescription.replace(/\\b(Bill and Joint Resolution|Bills and Joint Resolution|Bills and Joint Resolutions|Bill and Joint Resolutions|Bill|Bills|Joint Resolution|Joint Resolutions)\\b/, newTypeAndPluralityLanguage);\n }\n\n return newDescription;\n }\n\n toggleBill(categoryIndex, itemIndex) {\n let organizedBills = [...this.props.organizedBills];\n const sortNumeric = NUMERIC_SORT_CATEGORIES.includes(JSON.parse(JSON.stringify(organizedBills)).filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID);\n let agenda = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex]\n agenda.IsActive = !agenda.IsActive;\n agenda.checked = false;\n if (agenda.pending === false) {\n delete agenda.pending;\n }\n organizedBills = this.setDescription(organizedBills, categoryIndex);\n\n let newAgendaSequence = null;\n const categoryIsSequenced = Boolean(organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas && organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.find(a => a.IsActive && Number.isInteger(a.Sequence)));\n if (agenda.IsActive && categoryIsSequenced) {\n let sortedAgendas;\n if (sortNumeric) {\n sortedAgendas = JSON.parse(JSON.stringify(organizedBills)).filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => sortAgendasNumerically(a, b, this.props.chamberCode))\n } else {\n sortedAgendas = JSON.parse(JSON.stringify(organizedBills)).filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => sortAgendas(a, b, this.props.chamberCode))\n }\n\n const lowerLegislationNumberAgenda = sortedAgendas.findLast(a => findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey(a, agenda, this.props.chamberCode, sortNumeric, sortNumeric));\n if (lowerLegislationNumberAgenda) {\n const finalLowerLegislationNumberIndex = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.findIndex(a => a.LegislationNumber === lowerLegislationNumberAgenda.LegislationNumber);\n newAgendaSequence = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[finalLowerLegislationNumberIndex].Sequence + 1;\n } else {\n newAgendaSequence = 1;\n }\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(agenda => {\n if (agenda.IsActive && agenda.Sequence >= newAgendaSequence) {\n agenda.Sequence++;\n }\n })\n\n agenda.Sequence = newAgendaSequence;\n } else if (!agenda.IsActive) { agenda.Sequence = 0; }\n\n if (sortNumeric) {\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => sortAgendasNumerically(a, b, this.props.chamberCode))\n } else {\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => sortAgendas(a, b, this.props.chamberCode))\n }\n\n //check for this bill being a duplicate in other categories\n const isDuplicate = organizedBills.filter(cc => cc.CalendarCategoryTypeID !== organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID && cc.Agendas.find(a => a.LegislationNumber === agenda.LegislationNumber))\n if (isDuplicate.length) {\n isDuplicate.forEach(duplicateCategory => {\n duplicateCategory.Agendas.filter(a => a.LegislationNumber === agenda.LegislationNumber).forEach(duplicateAgenda => {\n duplicateAgenda.IsActive = false;\n duplicateAgenda.Sequence = 0;\n })\n const duplicateCategoryIndex = organizedBills.findIndex(cc => cc.CalendarCategoryTypeID === duplicateCategory.CalendarCategoryTypeID);\n organizedBills = this.setDescription(organizedBills, duplicateCategoryIndex);\n organizedBills[duplicateCategoryIndex].Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(organizedBills[duplicateCategoryIndex].CalendarCategoryTypeID) ? sortAgendasNumerically(a, b, this.props.chamberCode) : sortAgendas(a, b, this.props.chamberCode));\n })\n }\n\n this.props.updateAgenda(organizedBills, true);\n }\n\n toggleBillBulk(activate, categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n\n const legNumbersToBeIncluded = activate ? organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(a => a.checked).flatMap(a => a.LegislationNumber) : [];\n const sortCategoryNumeric = NUMERIC_SORT_CATEGORIES.includes(JSON.parse(JSON.stringify(organizedBills)).filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID);\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(leg => {\n if (leg.checked) {\n leg.IsActive = activate;\n }\n\n if (leg.pending === false) {\n delete leg.pending;\n }\n\n const categoryIsSequenced = Boolean(organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas && organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.find(a => a.IsActive && Number.isInteger(a.Sequence)));\n let newAgendaSequence = null;\n if (leg.checked && leg.IsActive && categoryIsSequenced) {\n const sortedAgendas = JSON.parse(JSON.stringify(organizedBills)).filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => sortCategoryNumeric ? sortAgendasNumerically(a, b, this.props.chamberCode) : sortAgendas(a, b, this.props.chamberCode))\n\n const lowerLegislationNumberAgenda = sortedAgendas.findLast(a => findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey(a, leg, this.props.chamberCode, sortCategoryNumeric, sortCategoryNumeric));\n if (lowerLegislationNumberAgenda) {\n const finalLowerLegislationNumberIndex = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.findIndex(a => a.LegislationNumber === lowerLegislationNumberAgenda.LegislationNumber);\n newAgendaSequence = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[finalLowerLegislationNumberIndex].Sequence + 1;\n } else {\n newAgendaSequence = 1;\n }\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(agenda => {\n if (!agenda.checked && agenda.IsActive && agenda.Sequence >= newAgendaSequence) {\n agenda.Sequence++;\n }\n })\n leg.Sequence = newAgendaSequence;\n } else if (!leg.IsActive) { leg.Sequence = 0; };\n leg.checked = false;\n });\n\n organizedBills = this.setDescription(organizedBills, categoryIndex);\n\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID) ? sortAgendasNumerically(a, b, this.props.chamberCode) : sortAgendas(a, b, this.props.chamberCode));\n\n //check for this bill being a duplicate in other categories\n const isDuplicate = organizedBills.filter(cc => cc.CalendarCategoryTypeID !== organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID && cc.Agendas.find(a => legNumbersToBeIncluded.includes(a.LegislationNumber)))\n if (isDuplicate.length) {\n isDuplicate.forEach(duplicateCategory => {\n duplicateCategory.Agendas.filter(a => legNumbersToBeIncluded.includes(a.LegislationNumber)).forEach(duplicateAgenda => {\n duplicateAgenda.IsActive = false;\n duplicateAgenda.Sequence = 0;\n })\n const duplicateCategoryIndex = organizedBills.findIndex(cc => cc.CalendarCategoryTypeID === duplicateCategory.CalendarCategoryTypeID);\n organizedBills = this.setDescription(organizedBills, duplicateCategoryIndex);\n organizedBills[duplicateCategoryIndex].Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(organizedBills[duplicateCategoryIndex]) ? sortAgendasNumerically(a, b, this.props.chamberCode) : sortAgendas(a, b, this.props.chamberCode));\n })\n }\n\n this.props.updateAgenda(organizedBills, true);\n }\n\n moveTo(topOrBottom, categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n\n let newSequence = topOrBottom === 'top' ? 1 : (Math.max.apply(Math, organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(a => a.Sequence).map(a => a.Sequence)) + 1) || 1;\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(leg => {\n if (leg.checked && leg.IsActive) {\n leg.Sequence = newSequence;\n newSequence++;\n }\n });\n newSequence = topOrBottom === 'top' ? newSequence : 1;\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(a => !a.checked && a.IsActive).forEach(agenda => {\n agenda.Sequence = newSequence;\n newSequence++;\n })\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.filter(a => a.checked).forEach(agenda => {\n agenda.checked = false;\n });\n organizedBills = this.setDescription(organizedBills, categoryIndex);\n\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryTypeID) ? sortAgendasNumerically(a, b, this.props.chamberCode) : sortAgendas(a, b, this.props.chamberCode))\n\n this.props.updateAgenda(organizedBills, true);\n }\n\n switchCategory(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n\n //uncheck the ones that are already in this category so that they don't get resequenced\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(a => a.checked = false);\n\n let categoriesWithCheckedBills = organizedBills.filter(c => !c.DeletionDate && c.IsLegislationCategory && c.Agendas.find(a => a.checked));\n categoriesWithCheckedBills.forEach(cat => {\n cat.Agendas.filter(a => a.checked).forEach(checkedAgenda => {\n checkedAgenda.Sequence = 0; //will get set later in toggleBillBulk\n if (organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryID) {\n checkedAgenda.CalendarCategoryID = organizedBills.filter(c => !c.DeletionDate)[categoryIndex].CalendarCategoryID;\n } else {\n delete checkedAgenda.CalendarCategoryID;\n }\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.push(checkedAgenda);\n const existingCategoryAgendaIndex = cat.Agendas.findIndex(a => a.LegislationNumber === checkedAgenda.LegislationNumber);\n if (existingCategoryAgendaIndex > -1) { //remove the bill from the old category; always should be found\n cat.Agendas.splice(existingCategoryAgendaIndex, 1);\n }\n })\n })\n\n this.toggleBillBulk(true, categoryIndex);\n }\n\n showAgendaItems(categoryIndex, agendaIndex) {\n let organizedBills = [...this.props.organizedBills].filter(c => !c.DeletionDate);\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].showAgendaItems = !organizedBills[categoryIndex].Agendas[agendaIndex].showAgendaItems;\n this.props.updateAgenda(organizedBills);\n }\n\n toggleEdit(categoryIndex, agendaIndex) {\n let categories = [...this.props.organizedBills];\n //This key is used to tell the DOM whether to display an input or a span\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].isEditing = !categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].isEditing;\n //Create a key called newDescription that will hold the text that the user types in\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].newDescription = categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].Description;\n this.props.updateAgenda(categories);\n }\n\n handleChange(categoryIndex, agendaIndex, e, title) {\n let textHeight = [...this.state.textHeight];\n\n //Init the nested height value if undefined at the category or agenda index\n if (!textHeight[categoryIndex]) {\n textHeight[categoryIndex] = {};\n textHeight[categoryIndex].Agendas = [];\n textHeight[categoryIndex].Agendas[agendaIndex] = {};\n textHeight[categoryIndex].Agendas[agendaIndex].height = '40px';\n } else if (!textHeight[categoryIndex].Agendas[agendaIndex]) {\n textHeight[categoryIndex].Agendas[agendaIndex] = {};\n textHeight[categoryIndex].Agendas[agendaIndex].height = '40px';\n }\n\n let height = Math.round(e.target.value.length / 95) * 20 + 40;\n\n textHeight[categoryIndex].Agendas[agendaIndex].height = height.toString() + \"px\";\n\n let categories = [...this.props.organizedBills];\n if (title) {\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].LegislationTitle = e.target.value;\n } else {\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].newDescription = e.target.value;\n }\n\n this.props.updateAgenda(categories);\n\n this.setState({\n textHeight: textHeight\n })\n }\n\n saveChange(categoryIndex, agendaIndex) {\n //Turn input back into span\n let categories = [...this.props.organizedBills];\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].isEditing = false;\n //Set description to the text that the user has typed in. If new description is null then set it to the current description\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].Description = categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].newDescription;\n this.props.updateAgenda(categories, true);\n }\n\n expandTitle(categoryIndex, agendaIndex) {\n let categories = [...this.props.organizedBills];\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].expandTitle = !categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].expandTitle ? true : false;\n\n this.props.updateAgenda(categories, this.props.pendingSave);\n }\n\n onDragEnd(result, categoryIndex) {\n if (!result.destination) {\n return;\n }\n let categories = [...this.props.organizedBills];\n const [removed] = categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas.splice(result.source.index, 1);\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas.splice(result.destination.index, 0, removed);\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach((element, index) => element.Sequence = index + 1);\n\n categories.filter(c => !c.DeletionDate)[categoryIndex].Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(categories.filter(c => !c.DeletionDate)[categoryIndex]) ? sortAgendasNumerically(a, b, this.props.chamberCode) : sortAgendas(a, b, this.props.chamberCode))\n\n this.props.updateAgenda(categories);\n }\n\n toggleAgendaItemEditor(agendaIndex, categoryIndex) {\n if (!categoryIndex || ([...this.props.organizedBills].filter(c => !c.DeletionDate).length && [...this.props.organizedBills].filter(c => !c.DeletionDate)[categoryIndex])) {\n this.setState({\n showAgendaItemEditor: agendaIndex,\n showAgendaItemEditorCategoryIndex: Number.isInteger(categoryIndex) ? categoryIndex : -1\n });\n }\n }\n\n getCategoryBills(category) {\n const associatedCategory = this.props.calendarCategories.find(c => c.CalendarCategoryTypeID === category.CalendarCategoryTypeID);\n if (associatedCategory) {\n return this.props.billList.filter(b => (b.ChamberCode === associatedCategory.LegislationChamberCode || !associatedCategory.LegislationChamberCode) && (b.LegislationTypeCode === associatedCategory.LegislationTypeCode || !associatedCategory.LegislationTypeCode))\n } else { return this.props.billList }\n }\n\n toggleShowAmendments(categoryIndex) {\n let organizedBills = [...this.props.organizedBills];\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].showAmendments = !organizedBills[categoryIndex].showAmendments;\n organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas.forEach(agenda => {\n agenda.AgendaItems.forEach(item => {\n if (item.LDNumber) {\n item.IsActive = organizedBills[categoryIndex].showAmendments;\n }\n })\n });\n this.props.updateAgenda(organizedBills);\n }\n\n changeCommitteeDropdown(value) {\n this.props.changeCommitteeDropdown(value, () => {\n let organizedBills = [...this.props.organizedBills];\n organizedBills = this.setDescription(organizedBills);\n this.props.updateAgenda(organizedBills, true);\n });\n }\n\n changeDateDropdown(value) {\n this.props.changeDateDropdown(value, () => {\n let organizedBills = [...this.props.organizedBills];\n organizedBills = this.setDescription(organizedBills);\n this.props.updateAgenda(organizedBills, true);\n });\n }\n\n addBill(categoryIndex) {\n this.props.addBill(categoryIndex, () => {\n let organizedBills = [...this.props.organizedBills];\n organizedBills = this.setDescription(organizedBills);\n this.props.updateAgenda(organizedBills, true);\n });\n }\n\n toggleEditCategoryDescription(categoryIndex, save) {\n const categories = [...this.props.organizedBills];\n let category = categories.filter(c => !c.DeletionDate)[categoryIndex];\n category.editing = !category.editing;\n if (save) {\n category.Description = category.tempDescription;\n } else {\n category.tempDescription = this.categoryDescription(category);\n }\n this.props.updateAgenda(categories, save);\n }\n\n handleDescriptionChange(categoryIndex, val) {\n let organizedBills = [...this.props.organizedBills];\n organizedBills[categoryIndex].tempDescription = val;\n this.props.updateAgenda(organizedBills);\n }\n\n categoryDescription = category => {\n //if it's been edited, leave it at that\n const associatedReferenceCategory = this.props.calendarCategories.find(x => x.CalendarCategoryTypeID === category.CalendarCategoryTypeID);\n if (associatedReferenceCategory && associatedReferenceCategory.Description !== category.Description && associatedReferenceCategory.PluralDescription !== category.Description) {\n return category.Description;\n }\n\n //otherwise, use singular or plural reference description\n if (this.props.chamberCode === 'H' && category.CategoryCode === \"HOUBRC\" || category.CategoryCode === \"SENBRC\") {\n return category.Description;\n } else if (category.Agendas.filter(a => a.IsActive).length > 1 && category.PluralDescription) {\n return category.PluralDescription;\n } else {\n return category.Description;\n }\n }\n\n render() {\n //Filter out the categories that have already been added to the calendar\n const calendarCategoryOptions = this.props.calendarCategories.filter(category => {\n if (this.props.organizedBills.findIndex(cat => !cat.DeletionDate && cat.CalendarCategoryTypeID === category.CalendarCategoryTypeID) < 0) {\n return category;\n }\n });\n // The button will read 'Add' if the bill is not already part of a category. The button will read 'Move' if it is already part of a category.\n const billButtonText = index => {\n let billExists = false;\n if (this.props.selectedBill[index]) {\n this.props.organizedBills.some(category => {\n if (category.Agendas.findIndex(bill => bill.LegislationID === this.props.selectedBill[index].LegislationID) >= 0) {\n billExists = true;\n return true;\n }\n });\n if (billExists) {\n return (\"Move\");\n }\n }\n return (\"Add\");\n }\n\n return (\n <div className=\"drag-container\">\n {this.state.showAgendaItemEditor !== -1 &&\n <AgendaItemsComponent\n toggleAgendaItemEditor={this.toggleAgendaItemEditor}\n agenda={this.props.organizedBills.filter(c => !c.DeletionDate)[this.state.showAgendaItemEditorCategoryIndex].Agendas[this.state.showAgendaItemEditor]}\n categoryIndex={this.state.showAgendaItemEditorCategoryIndex}\n agendaIndex={this.state.showAgendaItemEditor}\n updateAgendaItems={this.props.updateAgendaItems}\n />\n }\n <div className=\"inner-grid two\">\n <React.Fragment>\n <span>Use these two selectors to view candidate bills reported out of committee.</span>\n <div />\n <div className=\"inner-grid two\">\n <div>\n <label>Committee Reported Out</label>\n <Select\n classNamePrefix=\"grid-selector-dropdown\"\n value={this.props.selectedCommittee}\n onChange={this.changeCommitteeDropdown}\n options={this.props.committeeList.sort((a, b) => a.label > b.label)}\n styles={{ menu: provided => ({ ...provided, zIndex: this.props.organizedBills.length + 1 }) }}\n isSearchable\n isClearable\n />\n </div>\n <div>\n <label>Date Reported Out</label>\n <Select\n classNamePrefix=\"grid-selector-dropdown\"\n value={this.props.selectedDate}\n onChange={this.changeDateDropdown}\n options={this.props.dateList.sort((a, b) => a.label > b.label)}\n styles={{ menu: provided => ({ ...provided, zIndex: this.props.organizedBills.length + 1 }) }}\n isSearchable\n isClearable\n />\n </div>\n </div>\n </React.Fragment>\n <div className=\"inner-grid eight-and-one\">\n <div>\n <label>Category</label>\n <Select\n classNamePrefix=\"grid-selector-dropdown\"\n options={calendarCategoryOptions}\n value={this.props.selectedCategory}\n onChange={this.props.changeCategoryDropdown}\n styles={{ menu: provided => ({ ...provided, textAlign: 'right', whiteSpace: 'nowrap', right: '0', width: 'auto', zIndex: this.props.organizedBills.length + 1 }) }}\n />\n </div>\n <button disabled={!this.props.selectedCategory} type=\"button\" className=\"button primary\" style={{ marginTop: \"24px\", height: \"36px\" }} onClick={this.props.addCategory}>Add Category</button>\n </div>\n </div>\n <div style={{ display: 'flex', gap: '25px' }}>\n <button className=\"button-link\" onClick={() => this.props.toggleHideAllCategories(this.props.hideCategories.filter(c => c).length !== this.props.organizedBills.length)}>{this.props.hideCategories.filter(c => c).length !== this.props.organizedBills.length ? \"Collapse All Categories\" : \"Expand All Categories\"}</button>\n <button className=\"button-link\" onClick={() => this.props.toggleHideAllNonIncludedBills()}>{this.props.hideAllNonIncludedBills ? \"Show All Legislation\" : \"Hide Non-Included Legislation\"}</button>\n </div>\n <div style={{ marginTop: 15 }}>\n <div className=\"bill-grid communications-category-grid calendar-category-grid\">\n <div className=\"bill-grid-header\">\n <span></span>\n </div>\n <div className=\"bill-grid-header\">\n <span></span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Bill #</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Committee/Date Reported</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>{this.props.showTitles ? \"Title\" : \"Caption\"}</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Status</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Action</span>\n </div>\n </div>\n {this.props.organizedBills.filter(c => !c.DeletionDate).map((category, categoryIndex) =>\n <form key={categoryIndex}>\n <div style={{ position: 'sticky', top: '0px', zIndex: this.props.organizedBills.filter(c => !c.DeletionDate).length - categoryIndex }}>\n <div className={`calendar-category-grid calendar-category-grid-header${category.Agendas && category.Agendas.length ? '' : ' deletable'}`}>\n <div>\n <button onClick={() => this.props.toggleHideCategory(categoryIndex)} type=\"button\" className={`${this.props.hideCategories[categoryIndex] ? \"arrow-down\" : \"arrow-up\"}`}></button>\n </div>\n <div>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={category.selectAll || ''}\n onChange={() => this.toggleSelectAll(categoryIndex)}\n />\n </div>\n <div>\n <span>\n {category.editing ?\n <React.Fragment>\n <textarea\n className={`category-description-${categoryIndex}`}\n style={{ width: '90%', fontSize: '0.9em' }}\n type=\"text\"\n onChange={(e) => this.handleDescriptionChange(categoryIndex, e.target.value)}\n value={category.tempDescription}\n />\n <a className=\"icon save\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex, true)} />\n <a className=\"icon delete\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex)} />\n </React.Fragment>\n :\n <React.Fragment>\n <b>{category.DisplayType ? `${this.categoryDescription(category)} - ${category.CategoryType} ` : this.categoryDescription(category)}</b>\n <a className=\"icon edit\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex)} />\n </React.Fragment>\n }\n </span>\n </div>\n <div>\n {!category.Agendas || !category.Agendas.length ? <button onClick={() => this.props.deleteCategory(category)} className=\"icon delete\" type=\"button\" />\n :\n this.props.userRoles.find(x => x === \"SenateCalendarEditor\") && [98, 102].includes(category.CalendarCategoryTypeID) &&\n <React.Fragment>\n <label style={{ margin: \"0 5px 0 0\" }}>Show w/ Amendments</label>\n <div className=\"bill-grid-actions\">\n <div onClick={() => this.toggleShowAmendments(categoryIndex)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={category.showAmendments} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n </React.Fragment>\n }\n </div>\n <div className=\"flex-row\" style={{ gap: '10px' }}>\n {\n category.IsLegislationCategory && this.props.organizedBills.find(cat => !cat.DeletionDate && cat.CalendarCategoryTypeID !== category.CalendarCategoryTypeID && cat.IsLegislationCategory && cat.Agendas.find(agenda => agenda.checked)) ?\n <button type=\"button\" className=\"button small-button\" onClick={() => this.switchCategory(categoryIndex)}>Move to Category</button>\n : !category.IsLegislationCategory && category.Agendas.length && category.Agendas.find(a => a.checked) &&\n <React.Fragment>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(false, categoryIndex)}>Exclude Selected</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(true, categoryIndex)}>Include Selected</button>\n </div>\n </React.Fragment>\n }\n </div>\n <div>\n {!this.props.pendingSave && <button type=\"button\" className=\"button small-button\" onClick={() => this.props.toggleCalendarPreview(categoryIndex)} >Preview</button>}\n </div>\n <div>\n {!this.props.pendingSave && category.CalendarCategoryTypeID != 132 && <button type=\"button\" className=\"button small-button\" onClick={() => this.props.togglePortal(this.props.showPortal, category)}>PDF Preview </button>}\n </div>\n </div>\n {!this.props.hideCategories[categoryIndex] && category.IsLegislationCategory &&\n <div className=\"bill-grid communications-category-grid calendar-category-grid\">\n <div></div>\n <div></div>\n <div>\n <LargeListSelect\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n options={this.getCategoryBills(category)}\n onChange={(value) => this.props.changeBillDropdown(categoryIndex, value)}\n value={this.props.selectedBill[categoryIndex]}\n filterOption={(bill, inputValue) => {\n if (category.Agendas.findIndex(agenda => agenda.LegislationID === bill.value) < 0) {\n return bill.label.toLowerCase().includes(inputValue.toLowerCase());\n } else { return false; }\n }}\n />\n </div>\n <div className=\"center\">\n <button\n className=\"button\"\n type=\"button\"\n disabled={!this.props.selectedBill[categoryIndex]}\n onClick={() => this.addBill(categoryIndex)}>\n {billButtonText(categoryIndex)}\n </button>\n </div>\n <div className=\"flex-row four space-around\" style={{ display: 'flex', alignItems: 'center' }}>\n {category.Agendas.length && category.Agendas.find(a => a.checked) ?\n <React.Fragment>\n <div>\n <span>Checked Legislation:</span>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(false, categoryIndex)}>Exclude</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(true, categoryIndex)}>Include</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.moveTo('top', categoryIndex)}>Move to Top</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.moveTo('bottom', categoryIndex)}>Move to Bottom</button>\n </div>\n </React.Fragment>\n : null\n }\n </div>\n </div>\n }\n </div>\n {!this.props.hideCategories[categoryIndex] &&\n <DragDropContext onDragEnd={result => this.onDragEnd(result, categoryIndex)}>\n <Droppable droppableId=\"droppable\">\n {(provided, _snapshot) => (\n <div ref={provided.innerRef}>\n {category.Agendas.map((item, itemIndex) => {\n if (this.props.hideAllNonIncludedBills && !item.IsActive) { return; }\n const showNewIndicator = category.CategoryCode != \"Order\" && category.CalendarCategoryID && !item.AgendaID;\n return (\n <React.Fragment key={`${item.AgendaID}-${itemIndex}`}>\n {isNotHidden(item, category, this.props.committeeList) ?\n <Draggable draggableId={`${item.AgendaID}-${itemIndex}`} index={itemIndex}>\n {(provided, snapshot) => (\n <div ref={provided.innerRef}\n className=\"bill-grid communications-category-grid calendar-category-grid\"\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style,\n item.IsActive\n )}\n >\n <div><button className=\"button draggable\">Drag and drop</button></div>\n <div>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={item.checked || ''}\n onChange={e => this.toggleRow(categoryIndex, itemIndex, e)} />\n </div>\n <div className=\"new-container\">\n {this.props.organizedBills.find(c => c.CalendarCategoryTypeID !== category.CalendarCategoryTypeID && c.Agendas.find(a => a.LegislationNumber === item.LegislationNumber)) &&\n <React.Fragment>\n <i data-tip=\"This legislation exists in multiple categories.\" className={`icon notification calendar-authoring${showNewIndicator ? ' new' : ''}`} />\n </React.Fragment>\n }\n <Link to={`/bill-details/${this.props.sessionCode}/${item.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\" style={!item.IsActive ? { color: 'inherit' } : {}}> {item.LegislationNumber}</Link>\n {showNewIndicator && <span className='corner-new'>NEW</span>}\n </div>\n <div>\n <span>{this.props.fullCommitteeList.find(x => x.CommitteeID === item.CommitteeID) ? this.props.fullCommitteeList.find(x => x.CommitteeID === item.CommitteeID).Abbreviation + \" - \" + moment(item.CandidateDate).format(\"MM/DD/YYYY\") : category.CategoryCode != \"Order\" && item.CandidateDate && moment(item.CandidateDate).format(\"MM/DD/YYYY\")}</span>\n </div>\n <div>\n <div className=\"flex-row\" style={{ display: 'flex' }}>\n <div className=\"flex-row flex-vertical-center\" style={{ width: \"100%\", display: \"inline-flex\" }}>\n {item.isEditing ?\n <textarea value={item.LegislationTitle ? item.LegislationTitle : item.newDescription} style={{\n resize: 'vertical', width: '75%', height: this.state.textHeight[categoryIndex]\n && this.state.textHeight[categoryIndex].Agendas[itemIndex]\n && this.state.textHeight[categoryIndex].Agendas[itemIndex].height\n ? this.state.textHeight[categoryIndex].Agendas[itemIndex].height\n : \"40px\"\n }}\n cols=\"2\" onChange={(e) => this.handleChange(categoryIndex, itemIndex, e, item.LegislationTitle != null)}></textarea>\n :\n <React.Fragment>\n <span className={this.props.organizedBills && this.props.organizedBills.filter(c => !c.DeletionDate)[categoryIndex].Agendas[itemIndex].expandTitle ? \"calendar-leg-title-wrapper expanded\" : \"calendar-leg-title-wrapper\"}>{item.Description === \"Call to Order\" ? \"Call to Order - \" + this.props.calendarTime : renderHTML(!this.props.showTitles && item.LegislationDescription ? item.LegislationDescription : !this.props.showTitles && item.Description ? item.Description : this.props.showTitles && item.LegislationTitle ? item.LegislationTitle : item.Description ? item.Description : \"\")}</span>\n {!this.props.showTitles && item.LegislationDescription && item.LegislationDescription.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : !this.props.showTitles && item.Description && item.Description.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : this.props.showTitles && item.LegislationTitle && item.LegislationTitle.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : item.Description && item.Description.length > 75\n ? <a onClick={() => this.expandTitle(categoryIndex, itemIndex)} style={{ cursor: \"pointer\" }}>...</a>\n : null}\n </React.Fragment>\n }\n </div>\n <React.Fragment>\n <div className=\"bill-grid-actions\">\n {item.isEditing\n ?\n <div className=\"bill-grid-actions\" style={{ display: \"inline-flex\" }}>\n <button onClick={() => this.saveChange(categoryIndex, itemIndex)} type=\"button\" className=\"icon save float-right\"></button>\n <button onClick={() => this.toggleEdit(categoryIndex, itemIndex)} type=\"button\" className=\"icon delete float-right\"></button>\n </div>\n :\n <div className=\"bill-grid-actions\">\n {/*Allow edit if it is not the call to order item, the item IsActive, and we are viewing titles OR it is the invocation, pledge, or reading of the journal*/}\n {item.Description !== \"Call to Order\" && item.IsActive && (this.props.showTitles || [2, 3, 4, 6, 7, 8].includes(item.CalendarCategoryTemplateID)) &&\n <button onClick={() => this.toggleEdit(categoryIndex, itemIndex)} type=\"button\" className=\"icon edit float-right\"></button>\n }\n </div>\n }\n {category.CategoryCode !== \"Order\" && <button onClick={() => this.showAgendaItems(categoryIndex, itemIndex)} className={item.showAgendaItems ? 'arrow-up' : 'arrow-down'} type=\"button\"></button>}\n </div>\n </React.Fragment>\n </div>\n {item.showAgendaItems &&\n <div>\n <button type=\"button\" onClick={() => this.toggleAgendaItemEditor(itemIndex, categoryIndex)} className=\"button-link\">Edit Notes</button>\n {/* If an item has an LdNumber it's assumed to be an amendment */}\n {item.AgendaItems.filter(item => item.Description && item.IsActive && (!item.LDNumber ? true : category.showAmendments || ![98, 102].includes(category.CalendarCategoryTypeID) ? true : false)).map((item, itemIndex) =>\n <div key={itemIndex} className=\"programmatic-notes\">\n {renderHTML(item.DraftText || item.CalendarDescription || item.Description)}\n </div>\n )}\n </div>\n }\n </div>\n <div>\n <span className={item.IsActive ? \"message-success\" : \"\"}>{item.IsActive ? 'Included' : 'Not Included'}</span>\n </div>\n <div className=\"bill-grid-actions\">\n <div onClick={() => this.toggleBill(categoryIndex, itemIndex)} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={item.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n </div>)}\n </Draggable>\n :\n null\n }\n </React.Fragment>\n )\n }\n )}\n </div>)}\n </Droppable>\n </DragDropContext>\n }\n </form>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default SenateBillsGrid;","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Prompt } from 'react-router';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport moment from 'moment-timezone';\nimport ReactToPrint from \"react-to-print\";\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport BillsGrid from './lis-senate-bills-grid';\nimport CalendarDetailsComponent from '../../../lis-shared/lis-calendar/lis-calendar-details'\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport Popout from '../../../lis-shared/lis-layout/components/lis-popout-component';\nimport DatePicker from 'react-datepicker';\nimport CalendarDetailsPrintout from '../../../lis-shared/lis-calendar/lis-calendar-details-printout';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\n\nconst PUBLISH_CALENDAR = true;\nconst SAVE_CALENDAR = false;\nconst lisDocDomain = window.env?.STORAGE_ACCOUNT_DOMAIN;\n\nconst NUMERIC_SORT_CATEGORIES = [72, 111, 109, 112, 60, 110, 98, 102, 83, 90, 87, 93, 100, 104, 117, 118, 105, 106, 66, 67, 96, 97, 64, 68, 69, 65];\n\nconst sortAgendas = (a, b, calendarChamber) => {\n {\n return b.IsActive !== a.IsActive\n ? b.IsActive\n ? 1\n : -1\n : a.Sequence > 0 && b.Sequence > 0 && a.Sequence !== b.Sequence\n ? a.Sequence - b.Sequence > 0\n ? 1\n : -1\n : a.CalendarDate !== b.CalendarDate\n ?\n !a.CalendarDate ?\n 1 :\n !b.CalendarDate ? -1\n :\n a.CalendarDate - b.CalendarDate\n : a.CandidateDate !== b.CandidateDate\n ?\n !a.CandidateDate ?\n 1 :\n !b.CandidateDate ? -1\n :\n a.CandidateDate - b.CandidateDate\n : a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) !== 0 ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1 : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) !== 0\n ? a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : -1\n : a.LegislationKey && parseInt(a.LegislationKey) !== parseInt(b.LegislationKey)\n ? parseInt(a.LegislationKey) - parseInt(b.LegislationKey) > 0\n ? 1\n : -1\n : 0\n }\n}\n\nconst sortAgendasNumerically = (a, b, calendarChamber) => {\n {\n return !a.IsActive && b.IsActive\n ? 1\n : a.IsActive && !b.IsActive\n ? -1\n : a.Sequence > 0 && b.Sequence > 0 && a.Sequence !== b.Sequence\n ? a.Sequence - b.Sequence > 0\n ? 1\n : -1\n : a.LegislationNumber && b.LegislationNumber && a.LegislationNumber[0] !== b.LegislationNumber[0] ?\n a.LegislationNumber[0].localeCompare(calendarChamber) !== 0\n ? -1\n : 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) > 0\n ? 1\n : a.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) < 0\n ? -1\n : a.LegislationKey > b.LegislationKey\n ? 1\n : -1\n }\n}\n\nconst findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n a.IsActive && findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey(a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate)\n)\n\nconst findLastByCalendarDateThenCandidateDateThenLegChamberTypeKey = (a, b, calendarChamber, ignoreCalendarDate, ignoreCandidateDate) => (\n (((ignoreCalendarDate || (a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isSame(b.CalendarDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCalendarDate && a.CalendarDate && b.CalendarDate && moment(a.CalendarDate).isBefore(b.CalendarDate, \"day\"))) ||\n (((ignoreCandidateDate || (a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isSame(b.CandidateDate, \"day\"))) && findLastByLegChamberTypeKey(a, b, calendarChamber)) ||\n (!ignoreCandidateDate && a.CandidateDate && b.CandidateDate && moment(a.CandidateDate).isBefore(b.CandidateDate, \"day\"))) ||\n ((ignoreCalendarDate || (!a.CalendarDate && !b.CalendarDate)) && (ignoreCandidateDate || (!a.CandidateDate && !b.CandidateDate)) &&\n findLastByLegChamberTypeKey(a, b, calendarChamber))\n || (!ignoreCalendarDate && !b.CalendarDate && a.CandidateDate)\n || !ignoreCandidateDate && !b.CandidateDate && a.CandidateDate\n)\n\nconst findLastByLegChamberTypeKey = (a, b, calendarChamber) => (\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === (calendarChamber === \"H\" ? 1 : -1)) ||\n (a.LegislationNumber && a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === -1) ||\n (a.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) === 0 && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) === 0 && a.LegislationKey && a.LegislationKey < parseInt(b.LegislationKey))\n)\n\nclass SenateCalendarFormComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoaded: false,\n calendarData: '',\n hideCategories: [],\n showPreview: false,\n isSaving: false,\n pendingSave: false,\n comments: [],\n message: '',\n selectedSession: '',\n selectAllActive: false,\n selectAllInactive: false,\n calendarCategories: [],\n selectedCategory: '',\n selectedBill: [],\n billList: [],\n showCategoryPreview: -1,\n hideCategory: [],\n selectedFile: '',\n calendatDate: \"\",\n commentEdit: [],\n tempComments: [],\n showTitles: false,\n selectedDate: \"\",\n selectedCommittee: \"\",\n dateList: [],\n committeeList: [],\n hideAllNonIncludedBills: false\n };\n this.togglePreview = this.togglePreview.bind(this);\n this.updateAgenda = this.updateAgenda.bind(this);\n this.updateAgendaItems = this.updateAgendaItems.bind(this);\n this.changeCategoryDropdown = this.changeCategoryDropdown.bind(this);\n this.addCategory = this.addCategory.bind(this);\n this.toggleHideCategory = this.toggleHideCategory.bind(this);\n this.toggleHideAllCategories = this.toggleHideAllCategories.bind(this);\n this.toggleHideAllNonIncludedBills = this.toggleHideAllNonIncludedBills.bind(this);\n this.changeBillDropdown = this.changeBillDropdown.bind(this);\n this.changeDateDropdown = this.changeDateDropdown.bind(this);\n this.changeCommitteeDropdown = this.changeCommitteeDropdown.bind(this);\n this.addBill = this.addBill.bind(this);\n this.addComment = this.addComment.bind(this);\n this.removeComment = this.removeComment.bind(this);\n this.commentShift = this.commentShift.bind(this);\n this.handleProFormaChange = this.handleProFormaChange.bind(this);\n this.toggleCalendarPreview = this.toggleCalendarPreview.bind(this);\n this.togglePortal = this.togglePortal.bind(this);\n this.saveCalendar = this.saveCalendar.bind(this);\n this.handlePdfFile = this.handlePdfFile.bind(this);\n this.submitPdfFile = this.submitPdfFile.bind(this);\n this.changeConveneTime = this.changeConveneTime.bind(this);\n this.toggleAgenda = this.toggleAgenda.bind(this);\n this.toggleCommentEdit = this.toggleCommentEdit.bind(this);\n this.confirmCommentEdit = this.confirmCommentEdit.bind(this);\n this.toggleShowTitles = this.toggleShowTitles.bind(this);\n this.setPending = this.setPending.bind(this);\n this.deleteCategory = this.deleteCategory.bind(this);\n\n this.pdfRef = React.createRef();\n this.fileInput = React.createRef();\n }\n\n componentDidMount() {\n let calendarData = { ...this.props.calendarData };\n let noSavedItems = true;\n let comments = [];\n let dateList = [];\n let committeeList = [];\n\n // For the 'add category' dropdown\n this.props.actions.getCalendarCategoriesReferences('?chamberCode=' + calendarData.ChamberCode)\n .then(() => {\n let calendarCategories = this.props.calendar.calendarCategoriesReferences;\n calendarCategories.forEach(category => {\n category.label = category.DisplayType ? `${category.Description} - ${category.CategoryType}` : category.Description;\n category.value = category.CalendarCategoryTypeID;\n });\n this.setState({\n calendarCategories: calendarCategories\n }, () => {\n this.props.actions.getCommitteeList(\"sessionID=\" + calendarData.SessionID)\n .then(() => {\n calendarData.CalendarCategories.forEach(category => {\n const referenceCategory = this.state.calendarCategories.find(c => c.CalendarCategoryTypeID === category.CalendarCategoryTypeID);\n let sequence = 1;\n category.Agendas.forEach((agenda, i) => {\n //If a bill is on first reading capture its committee and candidate date to use in the filters\n if (referenceCategory && referenceCategory.OnDemand) {\n if (agenda.CommitteeID && this.props.committee.committeeList.find(x => x.ChamberCode === calendarData.ChamberCode && x.CommitteeID === agenda.CommitteeID)) {\n committeeList.push({ label: this.props.committee.committeeList.find(x => x.ChamberCode === calendarData.ChamberCode && x.CommitteeID === agenda.CommitteeID).Name, value: agenda.CommitteeID, date: agenda.CandidateDate });\n }\n\n if (agenda.CandidateDate && this.props.committee.committeeList.find(x => x.ChamberCode === calendarData.ChamberCode && x.CommitteeID === agenda.CommitteeID)) {\n let thisDate = dateList.findIndex(x => moment(x.value).isSame(agenda.CandidateDate, \"day\"));\n if (thisDate > -1) {\n if (!dateList[thisDate].committee.includes(agenda.CommitteeID)) {\n dateList[thisDate].committee.push(agenda.CommitteeID)\n }\n } else {\n dateList.push({ label: moment(agenda.CandidateDate).format(\"MM/DD/YYYY\"), value: agenda.CandidateDate, committee: [agenda.CommitteeID] });\n }\n }\n }\n\n //Item has an agenda ID so this means that a bill has been previously saved to this calendar\n if (agenda.AgendaID) {\n noSavedItems = false;\n }\n });\n if ([98, 102].includes(category.CalendarCategoryTypeID)) {\n category.showAmendments = !!category.Agendas.flatMap(agenda => agenda.AgendaItems).find(agendaItem => agendaItem.IsActive && agendaItem.LDNumber);\n }\n category.Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(category.CalendarCategoryTypeID) ? sortAgendasNumerically(a, b, calendarData.ChamberCode) : sortAgendas(a, b, calendarData.ChamberCode))\n category.Agendas.forEach((agenda, i) => {\n if (agenda.IsActive) {\n agenda.pending = false;\n agenda.Sequence = sequence;\n sequence++;\n } else {\n agenda.Sequence = 0;\n }\n })\n });\n\n\n let commentEdit = [];\n let tempComments = [];\n\n for (let i = 0; i < calendarData.CalendarComments.length; i++) {\n let comment = calendarData.CalendarComments[i];\n comment.Sequence = i + 1;\n comments.push(comment);\n commentEdit.push(false);\n //I kid you not if I don't make a separate tempComment object here and push it into the tempComment array instead of inserting the entire comment\n //then this.state.comments gets mutated in the handleCommentChange function even though it would never get explicitly changed -JGB \n let tempComment = {\n Sequence: comment.Sequence,\n Comment: comment.Comment\n }\n tempComments.push(tempComment)\n }\n\n dateList = dateList.sort((a, b) => { return moment(a.value) - moment(b.value) })\n committeeList = committeeList.sort((a, b) => a.label.localeCompare(b.label));\n\n this.toggleHideAllCategories(true, calendarData.CalendarCategories);\n\n this.setState({\n calendarData: calendarData,\n showTitles: calendarData.ChamberCode === \"H\",\n pendingSave: noSavedItems,\n comments: comments,\n tempComments: tempComments,\n isLoaded: true,\n calendarDate: calendarData.CalendarDate,\n commentEdit: commentEdit,\n dateList: [...new Map(dateList.map(x => [x[\"label\"], x])).values()],\n committeeList: [...new Map(committeeList.map(x => [x[\"value\"], x])).values()]\n }, () => {\n //Get bills in the session for the bill dropdown\n this.props.actions.getSessionBills('?sessionID= ' + this.state.calendarData.SessionID).then(() => {\n let billList = [...this.props.bills.sessionBills];\n billList.forEach(bill => {\n bill.label = bill.LegislationNumber\n bill.value = bill.LegislationID\n });\n this.setState({\n billList: billList,\n })\n })\n this.props.actions.getSessionById(this.state.calendarData.SessionID)\n .then(() =>\n this.setState({ selectedSession: this.props.session.selectedSession })\n );\n });\n });\n });\n })\n }\n\n togglePreview() {\n const opposite = !this.state.showPreview;\n this.setState({\n showPreview: opposite\n });\n }\n\n handleCommentChange(e, sequence) {\n let tempComments = [...this.state.tempComments];\n\n tempComments.find(x => x.Sequence === sequence).Comment = e.target.value;\n\n this.setState({\n tempComments: tempComments\n });\n }\n\n updateAgenda(organizedBills, saveRequired) {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarCategories = organizedBills;\n this.setState({\n calendarData: calendarData,\n pendingSave: saveRequired === undefined ? this.state.pendingSave : saveRequired\n });\n }\n\n updateAgendaItems(agendaItems, categoryIndex, agendaIndex) {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarCategories.filter(c => !c.DeletionDate)[categoryIndex].Agendas[agendaIndex].AgendaItems = agendaItems;\n\n this.setState({\n calendarData: calendarData,\n pendingSave: true\n });\n }\n\n changeCategoryDropdown(value) {\n this.setState({\n selectedCategory: value\n });\n }\n\n addCategory() {\n const selectedCategory = this.state.selectedCategory;\n //Used to find the new index of the category so the hidden categories indices can be updated\n const categoryFinder = new Date().getTime();\n let organizedBills = [...this.state.calendarData.CalendarCategories];\n let newCalendarCategory = {\n IsLegislationCategory: selectedCategory.IsLegislationCategory,\n Agendas: [],\n CalendarCategoryTypeID: selectedCategory.CalendarCategoryTypeID,\n CategoryCode: selectedCategory.CategoryCode,\n Description: selectedCategory.Description,\n PluralDescription: selectedCategory.PluralDescription,\n DisplayType: selectedCategory.DisplayType,\n CategoryType: selectedCategory.CategoryType,\n Sequence: selectedCategory.Sequence,\n isNewCategory: categoryFinder\n }\n organizedBills.push(newCalendarCategory);\n //Sort the calendar by smallest to greatest sequence\n organizedBills.sort((a, b) => (a.Sequence > b.Sequence) ? 1 : -1)\n //Update the categories that are hidden since the array indices have changed\n const newCategoryIndex = organizedBills.filter(c => !c.DeletionDate).findIndex(cat => cat.isNewCategory === categoryFinder);\n if (newCategoryIndex !== -1) {\n let hideCategories = this.state.hideCategories;\n hideCategories.splice(newCategoryIndex, 0, false);\n this.setState({\n hideCategories: hideCategories\n });\n }\n //Remove the selected category so the user doesn't accidentally add it twice\n this.setState({\n selectedCategory: ''\n });\n this.updateAgenda(organizedBills, true);\n\n }\n\n deleteCategory(category) {\n let calendarData = { ...this.state.calendarData };\n const selectedCategoryIndex = calendarData.CalendarCategories.filter(c => !c.DeletionDate).findIndex(c => c.CategoryCode === category.CategoryCode);\n calendarData.CalendarCategories.filter(c => !c.DeletionDate)[selectedCategoryIndex].DeletionDate = new Date();\n let hideCategories = this.state.hideCategories;\n if (hideCategories[selectedCategoryIndex] !== null && hideCategories[selectedCategoryIndex] !== undefined) {\n hideCategories.splice(selectedCategoryIndex, 1);\n }\n this.setState({ calendarData, hideCategories })\n }\n\n toggleHideCategory(catIndex) {\n let hideCategories = this.state.hideCategories;\n hideCategories[catIndex] = !hideCategories[catIndex]\n this.setState({\n hideCategories: hideCategories\n });\n }\n\n toggleHideAllCategories(hide, calendarCategories) {\n let hideCategories = this.state.hideCategories;\n calendarCategories = calendarCategories || this.state.calendarData.CalendarCategories;\n calendarCategories.forEach((cat, catIndex) => {\n hideCategories[catIndex] = hide\n })\n this.setState({\n hideCategories: hideCategories\n });\n }\n\n toggleHideAllNonIncludedBills() {\n this.setState({\n hideAllNonIncludedBills: !this.state.hideAllNonIncludedBills\n });\n }\n\n changeBillDropdown(index, value) {\n let selectedBill = [...this.state.selectedBill];\n selectedBill[index] = value;\n this.setState({\n selectedBill: selectedBill\n });\n }\n\n changeDateDropdown(value, callback) {\n this.setState({\n selectedDate: value\n }, () => {\n if (this.state.selectedDate && this.state.selectedCommittee)\n this.setPending();\n if (callback) {\n callback();\n }\n });\n }\n\n changeCommitteeDropdown(value, callback) {\n this.setState({\n selectedCommittee: value\n }, () => {\n if (this.state.selectedDate && this.state.selectedCommittee)\n this.setPending();\n if (callback) {\n callback();\n }\n });\n }\n\n setPending() {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarCategories.forEach((category, i) => {\n category.Agendas.forEach((agenda, j) => {\n //If a given agenda item matches one filter (if one filter is selected) or both filters (if both are selected) \n //Then mark it isActive and give it the pending value so we know to deactivate it if the user changes the filter selections \n //Otherwise if it's active, pending, and it no longer matches the filters then remove the pending value and deactivate it so it's hidden\n if (((!this.state.selectedDate || this.state.selectedDate === \"\") && this.state.selectedCommittee && this.state.selectedCommittee.value === agenda.CommitteeID && !agenda.IsHidden && agenda.pending !== false)\n || ((!this.state.selectedCommittee || this.state.selectedCommittee === \"\") && this.state.selectedDate && this.state.selectedDate.value === agenda.CandidateDate && !agenda.IsHidden && agenda.pending !== false)\n || (this.state.selectedDate && this.state.selectedDate !== \"\" && this.state.selectedCommittee && this.state.selectedCommittee !== \"\" && this.state.selectedCommittee.value === agenda.CommitteeID && this.state.selectedDate.value === agenda.CandidateDate && !agenda.IsHidden && agenda.pending !== false)) {\n agenda.IsActive = true;\n //Disabling the pending feature which removes bills from the calendar if they've been included but not saved. I feel like there's a chance they'll want it back -JGB\n //agenda.pending = true; \n } else if (agenda.IsActive === true && agenda.pending === true) {\n agenda.IsActive = false;\n delete agenda.pending;\n }\n })\n\n category.Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(category.CalendarCategoryTypeID) ? sortAgendasNumerically(a, b, calendarData.ChamberCode) : sortAgendas(a, b, calendarData.ChamberCode))\n })\n\n this.setState({\n calendarData\n })\n }\n\n addBill(index, callback) {\n let calendarCategories = [...this.state.calendarData.CalendarCategories];\n let newAgenda = {};\n //Check whether to move the bill from another category or add the bill\n let billExists = false;\n if (this.state.selectedBill[index]) {\n let associatedCategory = calendarCategories.filter(c => !c.DeletionDate)[index];\n calendarCategories.some((category, categoryIndex) => {\n const duplicateBillIndex = category.Agendas.findIndex(bill => bill.LegislationID === this.state.selectedBill[index].LegislationID);\n if (duplicateBillIndex >= 0) {\n billExists = true;\n newAgenda = { ...calendarCategories[categoryIndex].Agendas[duplicateBillIndex] };\n newAgenda.IsActive = true;\n newAgenda.CalendarCategoryTypeID = associatedCategory.CalendarCategoryTypeID;\n newAgenda.CalendarCategoryID = associatedCategory.CalendarCategoryID;\n calendarCategories[categoryIndex].Agendas.splice(duplicateBillIndex, 1);\n calendarCategories[categoryIndex].Agendas.forEach((item, itemIndex) => item.Sequence = itemIndex + 1);\n return true;\n }\n });\n const sortNumeric = NUMERIC_SORT_CATEGORIES.includes(associatedCategory.CalendarCategoryTypeID);\n let newAgendaSequence = null;\n const categoryIsSequenced = Boolean(associatedCategory.Agendas && associatedCategory.Agendas.find(a => a.IsActive && Number.isInteger(a.Sequence)));\n if (categoryIsSequenced) {\n const sortedAgendas = associatedCategory.Agendas.sort((a, b) => sortNumeric ? sortAgendasNumerically(a, b, this.state.calendarData.ChamberCode) : sortAgendas(a, b, this.state.calendarData.ChamberCode));\n const lowerLegislationNumberAgenda = sortedAgendas.findLast(a => findLastByIsActiveThenCalendarDateThenCandidateDateThenLegChamberTypeKey(a, this.state.selectedBill[index], this.state.calendarData.ChamberCode, sortNumeric, sortNumeric));\n if (lowerLegislationNumberAgenda) {\n const finalLowerLegislationNumberIndex = associatedCategory.Agendas.findIndex(a => a.LegislationNumber === lowerLegislationNumberAgenda.LegislationNumber);\n newAgendaSequence = associatedCategory.Agendas[finalLowerLegislationNumberIndex].Sequence + 1;\n } else {\n newAgendaSequence = 1;\n }\n associatedCategory.Agendas.forEach(agenda => {\n if (agenda.IsActive && agenda.Sequence >= newAgendaSequence) {\n agenda.Sequence++;\n }\n })\n }\n if (!billExists) {\n newAgenda = {\n CalendarCategoryTypeID: associatedCategory.CalendarCategoryTypeID,\n CalendarCategoryID: associatedCategory.CalendarCategoryID,\n IsActive: true,\n LegislationID: this.state.selectedBill[index].LegislationID,\n LegislationNumber: this.state.selectedBill[index].LegislationNumber,\n LegislationKey: this.state.selectedBill[index].LegislationKey,\n Patrons: this.state.selectedBill[index].Patrons,\n LegislationDescription: this.state.selectedBill[index].Description,\n LegislationTitle: this.state.selectedBill[index].LegislationTitle,\n }\n }\n newAgenda.Sequence = newAgendaSequence;\n associatedCategory.Agendas.splice(newAgendaSequence || 0, 0, newAgenda);\n associatedCategory.Agendas.sort((a, b) => sortNumeric ? sortAgendasNumerically(a, b, this.state.calendarData.ChamberCode) : sortAgendas(a, b, this.state.calendarData.ChamberCode))\n associatedCategory.Agendas.forEach((item, itemIndex) => { if (item.IsActive) { item.Sequence = itemIndex + 1 } });\n\n this.updateAgenda(calendarCategories, true);\n\n //Remove object so the bill is no longer currently selected in the dropdown\n let selectedBill = [...this.state.selectedBill];\n selectedBill[index] = '';\n this.setState({\n selectedBill: selectedBill\n });\n }\n\n if (callback) {\n callback();\n }\n }\n\n genCalendarPreview(category) {\n this.setState({\n gettingPdf: true\n });\n // This endpoint returns a pdf document and not json so the partnerRequest function will not work\n // It doesn't need to be saved to the redux store because it will not be referenced after the user sees it. So it is called here within the component.\n const API_URL = window.env ? window.env.API_SERVER : '';\n const idToken = 'LIS_ID_TOKEN';\n let signal = new window.AbortController().signal;\n const config = {\n headers: {\n 'content-type': \"application/json; charset=utf-8\",\n Authorization: \"Bearer \" + localStorage.getItem(idToken),\n 'WebAPIKey': process.env.REACT_APP_API_KEY\n },\n method: \"GET\",\n signal: signal\n };\n let params = `?calendarId=${this.state.calendarData.CalendarID}`\n if (category) {\n params += `&calendarCategoryID=${category.CalendarCategoryID}`\n }\n fetch((API_URL || process.env.REACT_APP_CALENDAR_FILE_API_URL) + '/CalendarFileGeneration/api/PreviewCalendarFileAsync' + params, config)\n .then(response => {\n if (response.status === 204) {\n throw 'No Content';\n } else if (response.status > 399) {\n throw response;\n } else {\n response.blob()\n .then(res => {\n if (this.pdfRef && this.pdfRef.current) {\n let pdfRef = this.pdfRef.current;\n pdfRef.setAttribute('src', URL.createObjectURL(res));\n pdfRef.onload = () => {\n this.setState({\n gettingPdf: false\n });\n };\n }\n })\n }\n }).catch(err => {\n if (err.name === 'AbortError') {\n return;\n }\n this.setState({\n gettingPdf: false\n });\n //This is a response and the text needs to be extracted\n if (err.text) {\n err.text().then(err => console.log(err.toString()));\n } else {\n console.log(err.toString())\n }\n this.props.actions.makeToast([{ message: \"Failed To Get Data\", type: \"failure\" }]);\n })\n }\n\n addComment() {\n let newComments = this.state.comments;\n let newTempComments = this.state.tempComments\n\n newComments.push(\n {\n CalendarID: this.state.calendarData.CalendarID,\n Comment: \"\",\n Sequence: this.state.comments.length > 0 ? this.state.comments[this.state.comments.length - 1].Sequence + 1 : 1\n }\n )\n\n newTempComments.push(\n {\n Comment: \"\",\n Sequence: newComments[newComments.length - 1].Sequence\n }\n )\n\n this.setState({\n comments: newComments,\n tempComments: newTempComments\n }, () => {\n this.toggleCommentEdit(newComments[newComments.length - 1].Sequence)\n })\n }\n\n removeComment(i) {\n let newComments = this.state.comments;\n if (newComments[i].CalendarCommentID != undefined) {\n newComments[i].DeletionDate = moment().toISOString();\n newComments[i].Sequence = 0;\n newComments.sort((a, b) => a.Sequence - b.Sequence);\n } else {\n newComments.splice(i, 1);\n }\n\n let newSequence = 1;\n\n for (let j = 0; j < newComments.length; j++) {\n if (!newComments[j].DeletionDate) {\n newComments[j].Sequence = newSequence;\n newSequence++;\n }\n }\n\n this.setState({\n comments: newComments\n })\n }\n\n commentShift(i, shiftUp) {\n let newComments = [...this.state.comments];\n let newTempComments = [...this.state.tempComments];\n let newSequence = shiftUp ? newComments[i - 1].Sequence : newComments[i + 1].Sequence;\n\n let commentEdit = [...this.state.commentEdit];\n commentEdit[i] = commentEdit[shiftUp ? i - 1 : i + 1] == true ? true : false;\n commentEdit[shiftUp ? i - 1 : i + 1] = true;\n\n newComments[i].Sequence = newSequence;\n newTempComments[i].Sequence = newSequence\n\n if (shiftUp) {\n newComments[i - 1].Sequence = newSequence + 1;\n newTempComments[i - 1].Sequence = newSequence + 1;\n } else {\n newComments[i + 1].Sequence = newSequence - 1;\n newTempComments[i + 1].Sequence = newSequence - 1;\n }\n\n newComments.sort((a, b) => a.Sequence - b.Sequence);\n newTempComments.sort((a, b) => a.Sequence - b.Sequence);\n\n this.setState({\n comments: newComments,\n tempComments: newTempComments,\n commentEdit: commentEdit\n })\n }\n\n handleProFormaChange() {\n let calendarData = { ...this.state.calendarData };\n calendarData.IsProforma = !calendarData.IsProforma\n this.setState({\n calendarData: calendarData\n });\n }\n\n toggleCalendarPreview(categoryIndex) {\n this.setState({\n showCategoryPreview: categoryIndex\n });\n }\n\n togglePortal(state, category) {\n this.setState({\n showPortal: !state\n }, () => {\n if (this.state.showPortal && category) {\n this.genCalendarPreview(category === 'All' ? '' : category);\n }\n });\n }\n\n saveCalendar(publishFlag) {\n this.setState({ isSaving: true });\n let calendarSave = { ...this.state.calendarData };\n //Add new comments\n calendarSave.CalendarComments = this.state.comments;\n\n //If saving or publishing set isActive off showAmendments. If unpublishing, set showAmendments off isActive. \n calendarSave.CalendarCategories.forEach(category => {\n if ([98, 102].includes(category.CalendarCategoryTypeID)) {\n if (publishFlag || (!calendarSave.IsPublic && !publishFlag)) {\n category.Agendas.forEach(agenda => {\n agenda.AgendaItems?.forEach(item => {\n if (item.LDNumber) {\n item.IsActive = category.showAmendments;\n }\n });\n });\n } else if (!publishFlag) {\n category.showAmendments = !!category.Agendas.flatMap(agenda => agenda.AgendaItems).find(agendaItem => agendaItem.IsActive && agendaItem.LDNumber);\n }\n }\n })\n\n //Set whether it should be published or not. The published value depends on what button the user clicked\n calendarSave.IsPublic = publishFlag;\n this.props.actions.saveCalendar({ Calendars: [calendarSave] })\n .then(failureMessage => {\n if (this.state.showPreview || calendarSave.IsPublic) {\n let content = this.componentRef.innerHTML.replace(/\\\\\"/g, '');\n this.props.actions.sendCalendarHtml({ Chamber: calendarSave.ChamberCode, CalendarDate: calendarSave.CalendarDate, CalendarNumber: calendarSave.CalendarNumber, ContentHTML: content });\n }\n if (publishFlag) {\n //Calendars cannot be edited once published so send the user back to the grid\n const calendarId = this.props.calendar.calendarSave.CalendarID;\n this.props.navigate('/calendar-management')\n this.props.actions.saveCalendarFile(\"?calendarID=\" + calendarId)\n } else {\n //If the form was not published then get the new mod dates and update the React state variables\n let calendarSave = { ...this.props.calendar.calendarSave };\n let comments = [];\n\n for (let i = 0; i < calendarSave.CalendarComments.length; i++) {\n let comment = calendarSave.CalendarComments[i];\n comment.Sequence = i + 1;\n comments.push(comment);\n }\n\n calendarSave.CalendarCategories.forEach(category => {\n category.Agendas.sort((a, b) => NUMERIC_SORT_CATEGORIES.includes(category.CalendarCategoryTypeID) ? sortAgendasNumerically(a, b, calendarSave.ChamberCode) : sortAgendas(a, b, calendarSave.ChamberCode))\n //Persist old showAmendments after save or unpublish\n if ([98, 102].includes(category.CalendarCategoryTypeID)) {\n category.showAmendments = !!category.Agendas.flatMap(agenda => agenda.AgendaItems).find(agendaItem => agendaItem.IsActive && agendaItem.LDNumber);\n }\n })\n\n this.setState({\n calendarData: calendarSave,\n comments: comments,\n isSaving: false,\n pendingSave: false,\n calendarDate: calendarSave.CalendarDate\n });\n }\n let toasts = [];\n if (failureMessage && failureMessage.includes(\"Minutes\")) {\n toasts.push({ message: \"Problem with Minutes Creation\", type: \"failure\" });\n }\n toasts.push({ message: `Calendar ${publishFlag ? 'Published' : 'Saved'}`, type: \"success\" });\n this.props.actions.makeToast(toasts)\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isSaving: false\n });\n console.log(err)\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n });\n }\n\n handlePdfFile(e) {\n this.setState({\n selectedFile: e.target.files[0]\n });\n }\n\n submitPdfFile() {\n this.setState({\n isSubmittingFile: true\n });\n this.props.actions.replacePdf('?calendarID=' + this.state.calendarData.CalendarID, this.state.selectedFile)\n .then(() => {\n this.setState({\n isSubmittingFile: false,\n selectedFile: ''\n });\n this.props.actions.makeToast([{ message: \"PDF Replacement Success\", type: \"success\" }]);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isSubmittingFile: false\n });\n this.props.actions.makeToast([{ message: \"PDF Replacement Failed\", type: \"failure\" }]);\n })\n }\n\n changeConveneTime(date) {\n let calendarData = { ...this.state.calendarData };\n calendarData.CalendarDate = date.toISOString();\n this.setState({\n calendarData: calendarData\n });\n }\n\n toggleAgenda(catIndex, agendaIndex) {\n let calendar = { ...this.state.calendarData };\n let agenda = calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex];\n agenda.show = !agenda.show;\n if (agenda.IsActive && agenda.LegislationNumber && !agenda.Versions) {\n agenda.Versions = []\n this.props.actions.getBillVersionByBillNumber('?BillNumber=' + calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex].LegislationNumber + '&SessionID=' + calendar.SessionID)\n .then(() => {\n // Get the calendar data again just in case the user toggled the agenda items\n calendar = { ...this.state.calendarData };\n let versions = this.props.bills.billVersion.filter(ver => ver.Version !== \"Amendment\" && moment(ver.DraftDate).isSameOrBefore(calendar.CalendarDate))\n // Most recent versions first\n versions = versions.sort((a, b) => moment(a.DraftDate).isSameOrBefore(b.DraftDate))\n calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex].Versions = versions\n this.setState({\n calendarData: calendar\n });\n }).catch(err => {\n if (err === \"Aborted\") {\n return\n }\n calendar = { ...this.state.calendarData };\n calendar.CalendarCategories.filter(c => !c.DeletionDate)[catIndex].Agendas[agendaIndex].Versions = \"fail\";\n this.setState({\n calendarData: calendar\n });\n })\n }\n this.setState({\n calendarData: calendar\n });\n }\n\n toggleCommentEdit(sequence) {\n let commentEdit = [...this.state.commentEdit];\n let tempComments = [...this.state.tempComments];\n\n commentEdit[sequence - 1] = !commentEdit[sequence - 1];\n //Reset the temporary comment value\n tempComments.find(x => x.Sequence === sequence).Comment = this.state.comments.find(x => x.Sequence === sequence).Comment;\n\n this.setState({\n commentEdit: commentEdit,\n tempComments: tempComments\n })\n }\n\n confirmCommentEdit(sequence) {\n let comments = [...this.state.comments];\n\n comments.find(x => x.Sequence === sequence).Comment = this.state.tempComments.find(x => x.Sequence === sequence).Comment;\n\n this.setState({\n comments: comments\n }, () => {\n this.toggleCommentEdit(sequence)\n })\n }\n\n toggleShowTitles() {\n this.setState({\n showTitles: !this.state.showTitles\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { message } = this.state;\n\n let conveneTime = moment.utc(this.state.calendarData.CalendarDate);\n let timeChecker = conveneTime.clone().startOf('day');\n // By default created calendars have a time of 00:00. If it is midnight then display it as 12:00 pm instead\n if (conveneTime.isSame(timeChecker)) {\n conveneTime.hour(12).startOf('hour');\n }\n if (message) {\n return (\n <div className=\"dlas-forms\">\n <span>{message}</span>\n </div>\n );\n }\n else {\n let calendarFileUrl = '';\n if (this.state.calendarData.CalendarFiles) {\n const pdfFile = this.state.calendarData.CalendarFiles.find(file => file.FileURL.toUpperCase().includes('PDF'));\n if (pdfFile) {\n const url = new URL(pdfFile.FileURL);\n calendarFileUrl = lisDocDomain + (url.pathname[0] === '/' ? url.pathname : '/' + url.pathname);\n }\n }\n\n //This calendarTime logic is also set in lis-public-calendar-details, if changed here, change there as well\n const calendarTime = moment.utc(this.state.calendarData.CalendarDate).isSame(moment.utc(this.state.calendarData.CalendarDate).hour(0), \"minute\")\n || moment.utc(this.state.calendarData.CalendarDate).isSame(moment.utc(this.state.calendarData.CalendarDate).hour(12), \"minute\")\n ? \"12 noon\"\n : moment.utc(this.state.calendarData.CalendarDate).format(\"h:mm a\");\n\n if (this.state.showPreview) {\n return (\n <div style={{ paddingBottom: '75px' }}>\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle=\"PDF Preview\">\n {this.state.gettingPdf &&\n <div className=\"center-spinner spinner\">You must save before seeing changes in this PDF preview</div>\n }\n <iframe style={{ display: this.state.gettingPdf ? 'none' : 'block', width: '100%', height: '100%' }} ref={this.pdfRef}></iframe>\n </Popout>\n }\n <div className=\"flex-row\">\n <h2>Calendar Preview</h2>\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print\"> Print</a>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <CalendarDetailsComponent\n calendar={this.state.calendarData}\n calendarTime={calendarTime}\n session={this.state.selectedSession}\n comments={this.state.comments}\n updateAgendaItems={this.updateAgendaItems}\n isCalendarForm={true}\n toggleAgenda={this.toggleAgenda}\n sessionList={this.props.session.sessionList}\n calendarCategoryReferences={this.state.calendarCategories}\n />\n <div style={{ display: \"none\" }}>\n <div ref={el => (this.componentRef = el)}>\n <CalendarDetailsPrintout\n calendar={this.state.calendarData}\n session={this.state.selectedSession}\n comments={this.state.comments}\n />\n </div>\n </div>\n <div className=\"align-right floating-button-bar inline-list\">\n <button onClick={() => this.saveCalendar(PUBLISH_CALENDAR)} disabled={this.state.isSaving} className=\"button\">{this.state.isSaving ? \"Publishing...\" : \"Publish\"}</button>\n <button onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n <button disabled={this.state.pendingSave || this.state.calendarData.IsPublic} onClick={() => this.togglePortal(this.state.showPortal, 'All')} className=\"button\" type=\"button\">PDF Preview</button>\n </div>\n </div>\n );\n } else {\n return (\n <React.Fragment>\n <div>\n <Prompt\n when={this.state.pendingSave === true}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n {this.state.calendarData ? <h1>{(this.state.calendarData.ChamberCode === \"H\" ? \"House \" : \"Senate \") + \"Calendar\"}</h1> : <h1> </h1>}\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle=\"Preview\">\n {this.state.gettingPdf &&\n <div className=\"center-spinner spinner\">You must save before seeing changes in this PDF preview</div>\n }\n <iframe style={{ display: this.state.gettingPdf ? 'none' : 'block', width: '100%', height: '100%' }} ref={this.pdfRef}></iframe>\n </Popout>\n }\n {this.state.showCategoryPreview !== -1 &&\n <div onClick={() => this.toggleCalendarPreview(-1)} className=\"overlay center-content\">\n <div className=\"full\">\n <div onClick={e => e.stopPropagation()} className=\"dlas-forms user-forms advanced-search overlay-content animated-fade-in-up\" ref={el => (this.componentRef = el)}>\n <CalendarDetailsComponent\n calendar={{ ...this.state.calendarData, CalendarCategories: [this.state.calendarData.CalendarCategories[this.state.showCategoryPreview]] }}\n calendarTime={calendarTime}\n session={this.state.selectedSession}\n comments={[]}\n userClaims={{ resources: [] }}\n toggleAgenda={this.toggleAgenda}\n sessionList={this.props.session.sessionList}\n isCalendarForm={true}\n calendarCategoryReferences={this.state.calendarCategories}\n />\n <button type=\"button\" onClick={() => this.toggleCalendarPreview(-1)} className=\"button secondary\">Close</button>\n </div>\n </div>\n </div>\n }\n <div className=\"user-forms\">\n {!this.state.isLoaded &&\n <div className=\"center-spinner spinner\">Loading results...</div>\n }\n {this.state.isLoaded &&\n <div className=\"dlas-forms\">\n <span className=\"error-message\">{message}</span>\n\n <fieldset style={{ paddingBottom: '50px' }} className=\"fieldset-collapse fieldset-open\">\n <legend>Calendar Information</legend>\n <div>\n <div className=\"multi-row four no-margin\">\n <div>\n <Fields.TextInput\n value={this.state.selectedSession ? this.state.selectedSession.SessionYear + ' ' + this.state.selectedSession.DisplayName : ''}\n disabled={true}\n />\n </div>\n <div>\n <Fields.TextInput\n value={this.state.calendarData ? moment(this.state.calendarData.CalendarDate).format(\"L\") + (this.state.calendarData.CalendarNumber > 1 ? [' (', ')'].join('Supp. ' + (this.state.calendarData.CalendarNumber - 1)) : '') : ''}\n disabled\n />\n </div>\n <div>\n {/* Supplemental calendars do not get this date picker */}\n {this.state.calendarData.CalendarNumber < 2 &&\n <DatePicker\n selected={conveneTime}\n showTimeSelect\n showTimeSelectOnly\n dateFormat=\"h:mm a\"\n timeFormat=\"h:mm a\"\n onChange={this.changeConveneTime}\n />\n }\n </div>\n <div className=\"flex-row flex-end flex-vertical-center\">\n {calendarFileUrl && !this.state.isSubmittingFile &&\n <>\n <button style={{ marginRight: 5 }} type=\"button\" className=\"button small-button file-button\"><input type=\"file\" accept=\".pdf\" onChange={this.handlePdfFile} />{this.state.selectedFile ? this.state.selectedFile.name : \"Replace PDF\"}</button>\n {this.state.selectedFile ?\n <button onClick={this.submitPdfFile} type=\"button\" className=\"button small-button\">Submit</button>\n :\n <React.Fragment>\n <a target=\"_blank\" className=\"icon pdf\" href={calendarFileUrl}></a>\n {this.state.calendarData.CalendarNumber < 2 &&\n <a target=\"_blank\" className=\"icon file-empty\" style={{ marginLeft: \"5px\" }} href={calendarFileUrl.replace(\".PDF\", \"-padded.PDF\")}></a>}\n </React.Fragment>\n }\n </>\n }\n {calendarFileUrl && this.state.isSubmittingFile &&\n <div className=\"small-spinner\"></div>\n }\n </div>\n </div>\n <div className=\"flex-row\">\n <label className=\"label-and-checkbox pro-forma\"><input type=\"checkbox\" checked={this.state.calendarData.IsProforma} onChange={this.handleProFormaChange} /> Create a Pro Forma Calendar</label>\n <button type=\"button\" className=\"button float-right title-toggle\" onClick={() => this.toggleShowTitles()}>{this.state.showTitles ? \"Show Bill Captions\" : \"Show Bill Titles\"}</button>\n </div>\n {this.state.comments.map((comment, i) => {\n return (\n comment.DeletionDate === undefined &&\n <div className=\"grid-wrapper calendar-comment-row\" key={i}>\n {this.state.commentEdit[comment.Sequence - 1] ?\n <React.Fragment>\n <div>\n <Fields.TextArea\n label={\"Comment \" + comment.Sequence}\n type=\"text\"\n style={{ resize: 'vertical', minHeight: 65, width: \"100%\" }}\n placeholder=\"Comments\"\n value={this.state.tempComments.find(x => x.Sequence === comment.Sequence).Comment}\n onChange={(e) => this.handleCommentChange(e, comment.Sequence)}\n />\n </div>\n <div className=\"grid-wrapper two comment-controls\">\n <div style={{ paddingTop: \"25px\" }}>\n <button className=\"icon save\" style={{ marginRight: \"10px\" }} onClick={() => this.confirmCommentEdit(comment.Sequence)} />\n <button className=\"icon delete\" onClick={() => this.toggleCommentEdit(comment.Sequence)} />\n </div>\n <div className=\"arrows\">\n {i !== 0 && this.state.comments.length > 1 &&\n <button className=\"arrow-up\" onClick={() => this.commentShift(i, true)} />\n }\n {i !== this.state.comments.length - 1 &&\n <button className=\"arrow-down\" onClick={() => this.commentShift(i, false)} />\n }\n </div>\n </div>\n </React.Fragment>\n :\n <React.Fragment>\n <div>\n <label>{\"Comment \" + comment.Sequence}</label>\n <p class=\"calendar-comment\">{comment.Comment}</p>\n </div>\n <div className=\"grid-wrapper two\">\n <div style={{ paddingTop: \"30px\", display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gridGap: \"10px\" }}>\n <button className=\"button edit\" onClick={() => this.toggleCommentEdit(comment.Sequence)} />\n <button className=\"icon bin\" onClick={() => this.removeComment(i)} />\n </div>\n <div />\n </div>\n </React.Fragment>\n }\n </div>\n )\n })\n }\n <div className=\"add-comment\">\n <button className=\"button float-right\" onClick={() => this.addComment()}>Add Comment</button>\n </div>\n </div>\n <BillsGrid\n organizedBills={this.state.calendarData.CalendarCategories}\n updateAgenda={this.updateAgenda}\n calendarCategories={this.state.calendarCategories}\n hideCategories={this.state.hideCategories}\n selectAllActive={this.state.selectAllActive}\n selectAllInactive={this.state.selectAllInactive}\n changeCategoryDropdown={this.changeCategoryDropdown}\n selectedCategory={this.state.selectedCategory}\n addCategory={this.addCategory}\n deleteCategory={this.deleteCategory}\n selectedBill={this.state.selectedBill}\n changeBillDropdown={this.changeBillDropdown}\n addBill={this.addBill}\n billList={this.state.billList}\n toggleCalendarPreview={this.toggleCalendarPreview}\n pendingSave={this.state.pendingSave}\n hideCategory={this.state.hideCategory}\n toggleHideCategory={this.toggleHideCategory}\n toggleHideAllCategories={this.toggleHideAllCategories}\n toggleHideAllNonIncludedBills={this.toggleHideAllNonIncludedBills}\n hideAllNonIncludedBills={this.state.hideAllNonIncludedBills}\n togglePortal={this.togglePortal}\n showPortal={this.state.showPortal}\n updateAgendaItems={this.updateAgendaItems}\n calendarTime={calendarTime}\n showTitles={this.state.showTitles}\n changeDateDropdown={this.changeDateDropdown}\n changeCommitteeDropdown={this.changeCommitteeDropdown}\n dateList={this.state.selectedCommittee && this.state.selectedCommittee !== \"\" ? this.state.dateList.filter(x => x.committee.includes(this.state.selectedCommittee.value)) : this.state.dateList}\n committeeList={this.state.selectedDate && this.state.selectedDate !== \"\" ? this.state.committeeList.filter(x => this.state.selectedDate.committee.includes(x.value)) : this.state.committeeList}\n selectedCommittee={this.state.selectedCommittee}\n selectedDate={this.state.selectedDate}\n fullCommitteeList={this.props.committee.committeeList}\n chamberCode={this.state.calendarData.ChamberCode}\n sessionCode={this.state.calendarData.SessionCode}\n userRoles={this.props.login.userClaims.roles}\n />\n </fieldset>\n <div className=\"align-right floating-button-bar inline-list\">\n <button disabled={this.state.isSaving} onClick={() => this.saveCalendar(SAVE_CALENDAR)} className=\"button\" type=\"submit\">{this.state.calendarData.IsPublic ? \"Unpublish\" : this.state.isSaving ? \"Saving...\" : \"Save\"}</button>\n <button disabled={this.state.pendingSave || this.state.isSaving || this.state.calendarData.IsPublic} onClick={this.togglePreview} className=\"button\" type=\"button\">Preview</button>\n <button disabled={this.state.pendingSave || this.state.isSaving || this.state.calendarData.IsPublic} onClick={() => this.togglePortal(this.state.showPortal, 'All')} className=\"button\" type=\"button\">PDF Preview</button>\n </div>\n </div>\n }\n </div>\n </React.Fragment>\n );\n }\n }\n }\n};\n\nconst CalendarManagementForm = connect(\n (state) => {\n const { calendar, session, bills, nav, committee, login } = state;\n return {\n calendar,\n session,\n bills,\n nav,\n committee,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, calendarActionCreators, sessionActionCreators, billActionCreators, navActionCreators, committeeActionCreators), dispatch)\n }\n }\n)(SenateCalendarFormComponent)\n\nexport default CalendarManagementForm;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\n\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport HouseForm from './lis-house-calendar-form';\nimport SenateForm from './lis-senate-calendar-form';\n\nclass CalendarFormContainerComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true\n }\n\n this.navigate = this.navigate.bind(this);\n }\n\n componentDidMount() {\n let calendarBillParams = '?calendarId=' + this.props.match.params.calendarid;\n\n this.props.actions.getCalendarById(calendarBillParams, true)\n .then(() => {\n this.setState({\n isLoading: false\n })\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoading: false,\n message: \"Failed to get data from server\"\n })\n this.props.actions.makeToast([{ message: \"Load Failed\", type: \"failure\" }])\n });\n }\n\n navigate(path) {\n this.props.history.push(path);\n }\n\n render() {\n return (\n <div>\n {!this.state.isLoading ?\n <React.Fragment>\n {this.props.calendar.calendarGet.ChamberCode === \"H\"\n ? <HouseForm\n calendarData={this.props.calendar.calendarGet}\n navigate={this.navigate}\n />\n : <SenateForm\n calendarData={this.props.calendar.calendarGet}\n navigate={this.navigate}\n />\n }\n </React.Fragment>\n : <div className=\"center-spinner spinner\">Loading results...</div>\n }\n </div>\n )\n }\n}\n\nconst CalendarFormContainer = connect(\n (state) => {\n const { calendar, nav } = state;\n return {\n calendar,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, calendarActionCreators, navActionCreators), dispatch)\n }\n }\n)(CalendarFormContainerComponent)\n\nexport default CalendarFormContainer;","import React from 'react';\nimport { Route } from 'react-router';\nimport CalendarGrid from './lis-calendar-grid';\nimport CalendarFormContainer from './lis-calendar-form-container';\n\nclass CalendarManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedChamber: '',\n selectedSession: ''\n }\n this.handleDropdownChange = this.handleDropdownChange.bind(this);\n }\n\n handleDropdownChange(key, val, callback) {\n this.setState({\n [key]: val\n }, () => callback());\n }\n\n render() {\n const { selectedChamber, selectedSession } = this.state;\n return (\n <div>\n <Route exact path={this.props.match.path} render={props => <CalendarGrid\n {...props}\n selectedChamber={selectedChamber}\n selectedSession={selectedSession}\n handleDropdownChange={this.handleDropdownChange}\n />} />\n <Route path={\"/calendar-management/edit-calendar/:calendarid\"} component={CalendarFormContainer} />\n </div>\n )\n }\n}\n\nexport default CalendarManagement;","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst minutesListRequest = 'MINUTES_LIST_REQUEST';\nconst minutesListSuccess = 'MINUTES_LIST_SUCCESS';\nconst minutesListFailure = 'MINUTES_LIST_FAILURE';\n\nconst minutesCreateRequest = 'MINUTES_CREATE_REQUEST';\nconst minutesCreateSuccess = 'MINUTES_CREATE_SUCCESS';\nconst minutesCreateFailure = 'MINUTES_CREATE_FAILURE';\n\nconst categoryCreateSuccess = 'CATEGORY_CREATE_SUCCESS';\nconst categoryCreateFailure = 'CATEGORY_CREATE_FAILURE';\n\nconst minutesBookSuccess = 'MINUTES_BOOK_SUCCESS';\nconst minutesBookFailure = 'MINUTES_BOOK_FAILURE';\n\nconst minutesBookForCalendarSuccess = 'MINUTES_BOOK_FOR_CALENDAR_SUCCESS';\nconst minutesBookForCalendarFailure = 'MINUTES_BOOK_FOR_CALENDAR_FAILURE';\n\nconst minutesBookSaveSuccess = 'MINUTES_BOOK_SAVE_SUCCESS';\nconst minutesBookSaveFailure = 'MINUTES_BOOK_SAVE_FAILURE';\n\nconst minutesBookPublishSuccess = 'MINUTES_BOOK_SAVE_SUCCESS';\nconst minutesBookPublishFailure = 'MINUTES_BOOK_SAVE_FAILURE';\n\nconst clerksCopyGenSuccess = 'GEN_CLERKS_COPY_SUCCESS';\nconst clerksCopyGenFailure = 'GEN_CLERKS_COPY_FAILURE';\n\nconst entriesSaveSuccess = 'ENTRIES_SAVE_SUCCESS';\nconst entriesSaveFailure = 'ENTRIES_SAVE_FAILURE';\n\nconst entriesCreateSuccess = 'ENTRIES_CREATE_SUCCESS';\nconst entriesCreateFailure = 'ENTRIES_CREATE_FAILURE';\n\nconst entriesCommunicationSaveSuccess = 'ENTRY_COMMUNICATION_SAVE_SUCCESS';\nconst entriesCommunicationSaveFailure = 'ENTRY_COMMUNICATION_SAVE_FAILURE';\n\nconst actionTypesSuccess = \"ACTION_TYPE_LIST_SUCCESS\";\nconst actionTypesFailure = \"ACTION_TYPE_LIST_FAILURE\";\n\nconst chairReportSuccess = \"CHAIR_REPORT_SUCCESS\";\nconst chairReportFailure = \"CHAIR_REPORT_FAILURE\";\n\nconst committeeMinutesSummarySuccess = \"COMMITTEE_MINUTES_SUMMARY_SUCCESS\";\nconst committeeMinutesSummaryFailure = \"COMMITTEE_MINUTES_SUMMARY_FAILURE\";\n\nconst initialState = {\n minutesList: [],\n minutesMessage: '',\n minutesCreateMessage: '',\n minutesBook: '',\n minutesBookError: '',\n minutesBookForCalendar: '',\n minutesBookErrorForCalendarError: '',\n minutesBookSave: [],\n minutesBookSaveError: '',\n minutesBookPublish: [],\n minutesBookPublishError: '',\n clerksCopyGen: [],\n clerksCopyGenError: '',\n categoryCreate: '',\n categoryCreateError: '',\n entriesSave: [],\n entriesSaveError: '',\n entriesCreate: [],\n entriesCreateError: '',\n entriesCommunicationSave: '',\n entriesCommunicationSaveError: '',\n minutesGen: '',\n minutesGenError: '',\n actionTypes: [],\n actionTypesError: '',\n chairReport: '',\n chairReportError: '',\n committeeMinutesSummary: '',\n committeeMinutesSummaryError: ''\n};\n\nexport const minutesActionCreators = {\n // GET MINUTES LIST FOR MINUTES MGMT GRID\n requestMinutesList: () => ({\n type: minutesListRequest,\n minutesList: [],\n isFetching: true\n }),\n\n receiveMinutesList: (list, message) => ({\n type: minutesListSuccess,\n isFetching: false,\n minutesList: list,\n minutesMessage: message\n }),\n\n minutesListError: (message) => ({\n type: minutesListFailure,\n isFetching: false,\n minutesList: [],\n minutesMessage: message\n }),\n\n getMinutesList: (params, partner) => {\n return dispatch => {\n dispatch(minutesActionCreators.requestMinutesList());\n\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetPartnerMinutesBookListAsync?', 'GET', headers, '', params);\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetPublishedMinutesBookListAsync?', 'GET', headers, '', params);\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.minutesListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveMinutesList(result[1].Minutes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.receiveMinutesList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // MINUTES CREATE\n requestMinutesCreate: () => ({\n type: minutesCreateRequest,\n isFetching: true\n }),\n\n receiveMinutesCreate: (message) => ({\n type: minutesCreateSuccess,\n isFetching: false,\n minutesCreateMessage: message\n }),\n\n minutesCreateError: (message) => ({\n type: minutesCreateFailure,\n isFetching: false,\n minutesCreateMessage: message\n }),\n\n createMinutes: (body, callback) => {\n return dispatch => {\n dispatch(minutesActionCreators.requestMinutesCreate());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/CreateMinuteBookAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.createMinutesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveMinutesCreate(result[1]))\n if (callback) callback()\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.minutesCreateError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMinutesBook: (resObj) => ({\n type: minutesBookSuccess,\n minutesBook: resObj,\n }),\n\n minutesBookError: (message) => ({\n type: minutesBookFailure,\n minutesBook: '',\n minutesBookError: message\n }),\n\n getMinutesBook: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetPartnerMinutesBookAsync/', 'GET', headers, '', params);\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetMinutesBookAsync/', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.minutesBookError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(minutesActionCreators.receiveMinutesBook(result[1].MinutesBooks[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.minutesBookError('Minutes Data not available'))\n return Promise.reject('No Minutes Data')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMinutesBookForCalendar: (resObj) => ({\n type: minutesBookForCalendarSuccess,\n minutesBookForCalendar: resObj,\n }),\n\n minutesBookForCalendarError: (message) => ({\n type: minutesBookForCalendarFailure,\n minutesBookForCalendar: '',\n minutesBookForCalendarError: message\n }),\n\n getMinutesBookForCalendar: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetMinutesbookInteractiveCalendarAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.minutesBookForCalendarError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(minutesActionCreators.receiveMinutesBookForCalendar(result[1].MinutesBooks[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.minutesBookForCalendarError('Minutes Data not available'))\n return Promise.reject('No Minutes Data')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMinutesBookSave: (list) => ({\n type: minutesBookSaveSuccess,\n minutesBookSave: list,\n }),\n\n minutesBookSaveError: (message) => ({\n type: minutesBookSaveFailure,\n minutesBookSave: [],\n minutesBookSaveError: message\n }),\n\n saveMinutesBook: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/SaveMinuteBookAsync/?', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.minutesBookSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[1]) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveMinutesBookSave(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.minutesBookSaveError('Minutes Data not available'))\n return Promise.reject('No Minutes Data')\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveMinutesBookPublish: (list) => ({\n type: minutesBookPublishSuccess,\n minutesBookPublish: list,\n }),\n\n minutesBookPublishError: (message) => ({\n type: minutesBookPublishFailure,\n minutesBookPublish: [],\n minutesBookPublishError: message\n }),\n\n publishMinutesBook: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/PublishMinuteBookAsync/?', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.minutesBookPublishError(result[1]))\n return Promise.reject(result[1])\n } else if (result[1]) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveMinutesBookPublish(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.minutesBookPublishError('Minutes Data not available'))\n return Promise.reject('No Minutes Data')\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveClerksCopyGen: (list) => ({\n type: clerksCopyGenSuccess,\n clerksCopyGen: list,\n }),\n\n clerksCopyGenError: (message) => ({\n type: clerksCopyGenFailure,\n clerksCopyGen: [],\n clerksCopyGenError: message\n }),\n\n genClerksCopy: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/LegislationFileGeneration/api/ProcessMinutesClerkCopyAsync/?', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.clerksCopyGenError(result[1]))\n return Promise.reject(result[1])\n } else if (result[1]) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveClerksCopyGen(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.clerksCopyGenError('Minutes Data not available'))\n return Promise.reject('No Minutes Data')\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveCategoryCreate: (result) => ({\n type: categoryCreateSuccess,\n categoryCreate: result\n }),\n\n categoryCreateError: (message) => ({\n type: categoryCreateFailure,\n categoryCreate: '',\n categoryCreateError: message\n }),\n\n createCategory: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/CreateMinuteCategoryAsync/?', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.calendarCreateError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveCategoryCreate(result[1][0]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.calendarCreateError('Minutes Data not available'))\n return Promise.reject('No Minutes Data')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveEntriesSave: (list) => ({\n type: entriesSaveSuccess,\n entriesSave: list[0]\n }),\n\n entriesSaveError: (message) => ({\n type: entriesSaveFailure,\n entriesSave: [],\n entriesSaveError: message\n }),\n\n saveEntries: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_ENTRY_API_URL) + '/MinuteEntries/api/SaveMinutesEntryAsync/?', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.entriesSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveEntriesSave(result[1]))\n //result returns an array with one element\n return (result[1][0]);\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.entriesSaveError('Minutes Data not available'))\n return Promise.reject('No Minutes Data')\n }\n }).catch(err => console.log(err))\n }\n },\n\n receiveEntriesCreate: (list) => ({\n type: entriesCreateSuccess,\n entriesCreate: list[0]\n }),\n\n entriesCreateError: (message) => ({\n type: entriesCreateFailure,\n entriesCreate: [],\n entriesCreateError: message\n }),\n\n createEntries: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_ENTRY_API_URL) + '/MinuteEntries/api/CreateMinutesEntryAsync/?', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.entriesCreateError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(minutesActionCreators.receiveEntriesCreate(result[1]));\n return (result[1][0]);\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.entriesCreateError('Minutes Data not available'));\n return Promise.reject('No Minutes Data');\n }\n }).catch(err => console.log(err));\n }\n },\n\n receiveEntriesCommunicationSave: (res) => ({\n type: entriesCommunicationSaveSuccess,\n entriesCreate: res\n }),\n\n entriesCommunicationSaveError: (message) => ({\n type: entriesCommunicationSaveFailure,\n entriesCommunicationSaveError: message\n }),\n\n saveEntriesCommunication: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_ENTRY_API_URL) + '/MinuteEntries/api/SaveMinuteEntryCommunicationAsync/', 'PUT', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.entriesCommunicationSaveError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(minutesActionCreators.receiveEntriesCommunicationSave(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.entriesCommunicationSaveError('No Content'));\n return Promise.reject('No Content');\n }\n }).catch(err => console.log(err));\n }\n },\n\n receiveActionTypes: (res) => ({\n type: actionTypesSuccess,\n actionTypes: res\n }),\n\n actionTypesError: (message) => ({\n type: actionTypesFailure,\n actionTypesError: message\n }),\n\n getActionTypes: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetActionReferenceTypeListAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.actionTypesError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(minutesActionCreators.receiveActionTypes(result[1].ActionReferenceTypeList));\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.actionTypesError('No Content'));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveChairReport: (res) => ({\n type: chairReportSuccess,\n chairReport: res\n }),\n\n chairReportError: (message) => ({\n type: chairReportFailure,\n chairReportError: message\n }),\n\n getChairReport: (minutesBookID) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetChairReportAsync/', 'GET', headers, '', minutesBookID)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.chairReportError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(minutesActionCreators.receiveChairReport(result[1].ChairReports[0]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.chairReportError('No Content'));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCommitteeMinutesSummary: (res) => ({\n type: committeeMinutesSummarySuccess,\n committeeMinutesSummary: res\n }),\n\n committeeMinutesSummaryError: (message) => ({\n type: committeeMinutesSummaryFailure,\n committeeMinutesSummaryError: message\n }),\n\n getCommitteeMinutesSummary: (minutesBookIDs) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/api/GetCommitteeMinutesSummaryAsync/', 'GET', headers, '', minutesBookIDs)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(minutesActionCreators.committeeMinutesSummaryError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(minutesActionCreators.receiveCommitteeMinutesSummary(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(minutesActionCreators.committeeMinutesSummaryError('No Content'));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n }\n\n}\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n\n case minutesListRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case minutesListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n minutesList: action.minutesList,\n minutesMessage: ''\n })\n case minutesListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n minutesList: action.minutesList,\n minutesMessage: action.minutesMessage\n })\n case minutesCreateRequest:\n return Object.assign({}, state, {\n isFetching: true\n })\n case minutesCreateSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n minutesCreateMessage: ''\n })\n case minutesCreateFailure:\n return Object.assign({}, state, {\n isFetching: false,\n minutesCreateMessage: action.minutesCreateMessage\n })\n case minutesBookSuccess:\n return Object.assign({}, state, {\n minutesBook: action.minutesBook,\n minutesBookError: ''\n })\n case minutesBookFailure:\n return Object.assign({}, state, {\n minutesBookError: action.minutesBookError\n })\n case minutesBookForCalendarSuccess:\n return Object.assign({}, state, {\n minutesBookForCalendar: action.minutesBookForCalendar,\n minutesBookForCalendarError: ''\n })\n case minutesBookForCalendarFailure:\n return Object.assign({}, state, {\n minutesBookForCalendarError: action.minutesBookForCalendarError\n })\n case minutesBookSaveSuccess:\n return Object.assign({}, state, {\n minutesBookSave: action.minutesBookSave,\n minutesBookSaveError: ''\n })\n case minutesBookSaveFailure:\n return Object.assign({}, state, {\n minutesBookSaveError: action.minutesBookSaveError\n })\n case minutesBookPublishSuccess:\n return Object.assign({}, state, {\n minutesBookPublish: action.minutesBookPublish,\n minutesBookPublishError: ''\n })\n case minutesBookPublishFailure:\n return Object.assign({}, state, {\n minutesBookPublishError: action.minutesBookPublishError\n })\n case categoryCreateFailure:\n return Object.assign({}, state, {\n isFetching: false,\n categoryCreateMessage: action.categoryCreateMessage\n })\n case categoryCreateSuccess:\n return Object.assign({}, state, {\n categoryCreate: action.categoryCreate,\n categoryCreateMessage: ''\n })\n case entriesSaveFailure:\n return Object.assign({}, state, {\n isFetching: false,\n entriesSaveMessage: action.entriesSaveMessage\n })\n case entriesSaveSuccess:\n return Object.assign({}, state, {\n entriesSave: action.entriesSave,\n entriesSaveMessage: ''\n })\n case entriesCreateFailure:\n return Object.assign({}, state, {\n isFetching: false,\n entriesCreateMessage: action.entriesCreateMessage\n })\n case entriesCreateSuccess:\n return Object.assign({}, state, {\n entriesCreate: action.entriesCreate,\n entriesCreateMessage: ''\n })\n case entriesCommunicationSaveFailure:\n return Object.assign({}, state, {\n entriesCommunicationSaveError: action.entriesCommunicationSaveError\n })\n case entriesCommunicationSaveSuccess:\n return Object.assign({}, state, {\n entriesCommunicationSave: action.entriesCommunicationSave,\n entriesCommunicationSaveError: ''\n })\n case actionTypesFailure:\n return Object.assign({}, state, {\n actionTypesError: action.actionTypesError\n })\n case actionTypesSuccess:\n return Object.assign({}, state, {\n actionTypes: action.actionTypes,\n actionTypesError: ''\n })\n case chairReportFailure:\n return Object.assign({}, state, {\n chairReportError: action.chairReportError\n })\n case chairReportSuccess:\n return Object.assign({}, state, {\n chairReport: action.chairReport,\n chairReportError: ''\n })\n case committeeMinutesSummaryFailure:\n return Object.assign({}, state, {\n committeeMinutesSummaryError: action.committeeMinutesSummaryError\n })\n case committeeMinutesSummarySuccess:\n return Object.assign({}, state, {\n committeeMinutesSummary: action.committeeMinutesSummary,\n committeeMinutesSummaryError: ''\n })\n default:\n return state\n }\n};","import React from \"react\";\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport '../../../stylesheets/shared/react-table.css';\nimport moment from 'moment-timezone';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport DatePicker from \"react-datepicker\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { cancelRequest } from '../../../services/request.service';\n\n\nclass MinutesGridComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCreateSuccess: false,\n showCreateFailure: false,\n isSaving: false,\n minutesDate: moment(),\n isLoaded: false,\n selected: {},\n sessionList: [],\n chamberOptions: [{ value: 'H', label: 'House' }, {value: 'S', label: 'Senate' }],\n sessionDropdown: [],\n selectedSessionToolbar: '',\n selectedSessionGrid: '',\n selectAll: 0,\n filtered: [{ id: 'all', value: 'true' }],\n filterAll: 'true',\n selectedRow: []\n };\n this.toggleRow = this.toggleRow.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n this.filterAll = this.filterAll.bind(this);\n };\n\n //When component has mounted, make the call to the list users API\n componentDidMount() {\n let selectedSession = this.props.selectedSession;\n let defaultSession = '';\n this.props.actions.getSessionList().then(() => {\n let sessionList = [...this.props.session.sessionList].reverse();\n sessionList.forEach(session => {\n session.label = session.SessionYear + ' ' + session.DisplayName;\n session.value = session.SessionID;\n if (session.IsDefault) {\n selectedSession = selectedSession || session;\n defaultSession = session;\n }\n });\n this.setState({\n sessionDropdown: sessionList,\n sessionList: sessionList,\n selectedSessionGrid: defaultSession\n });\n this.props.handleSessionChange(selectedSession, () => this.getMinutesData());\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getMinutesData() {\n if (!this.props.selectedSession) {\n return\n }\n const params = 'sessionID=' + this.props.selectedSession.SessionID + '&chamberCode=S';\n this.setState({\n isLoaded: false\n });\n this.props.actions.getMinutesList(params, true).then(() => {\n this.setState({\n isLoaded: true,\n minutesList: [...this.props.minutes.minutesList].filter(m => !m.CommitteeID)\n });\n }).catch(err => {\n if(err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true,\n message: err.toString()\n });\n });\n }\n\n handleDateChange(date) {\n this.setState({\n minutesDate: moment(date)\n });\n }\n\n handleDropDownChange = (value, state) => {\n this.setState({\n [state]: value\n })\n }\n\n handleSessionSelectChange = value => {\n this.props.handleSessionChange(value, () => this.getMinutesData())\n }\n\n\n sendCreateDetails() {\n const minutesObj = {\n \"SessionID\": this.state.selectedSessionGrid.SessionID,\n \"ChamberCode\": \"S\",\n \"MinutesDate\": this.state.minutesDate\n }\n this.setState({\n isSaving: true\n });\n this.props.actions.createMinutes(minutesObj).then(() => {\n this.setState({\n showCreateSuccess: true,\n isSaving: false\n })\n setTimeout(function () {\n this.setState({ showCreateSuccess: false });\n }.bind(this), 5000);\n this.props.handleSessionChange(this.state.selectedSessionGrid, () => this.getMinutesData())\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n showCreateFailure: true,\n isSaving: false\n });\n setTimeout(function () {\n this.setState({ showCreateFailure: false });\n }.bind(this), 5000);\n });\n }\n\n onFilteredChange(filtered) {\n if (filtered.length > 1 && this.state.filterAll.length) {\n // NOTE: this removes any FILTER ALL filter\n const filterAll = '';\n this.setState({ filtered: filtered.filter((item) => item.id !== 'all'), filterAll })\n }\n else\n this.setState({ filtered });\n }\n\n filterAll(value) {\n const filterAll = value;\n const filtered = [{ id: 'all', value: filterAll }];\n // NOTE: this completely clears any COLUMN filters\n this.setState({ filterAll, filtered });\n }\n\n toggleRow(minutesId) {\n const newSelected = Object.assign({}, this.state.selected);\n newSelected[minutesId] = !this.state.selected[minutesId];\n this.setState({\n selected: newSelected,\n selectAll: 2\n });\n }\n\n toggleSelectAll() {\n let newSelected = {};\n\n if (this.state.selectAll === 0) {\n this.state.minutesList.forEach(x => {\n newSelected[x.MinutesBookID] = true;\n });\n }\n\n this.setState({\n selected: newSelected,\n selectAll: this.state.selectAll === 0 ? 1 : 0\n });\n }\n\n getTrProps = (state, rowInfo, instance) => {\n if (rowInfo) {\n return {\n style: {\n background: rowInfo.original.IsDefault ? 'rgb(202, 225, 241)' : null,\n }\n }\n }\n return {};\n }\n\n\n render() {\n return (\n <div>\n <div className=\"header-half\">\n <h1>Minutes Management</h1>\n </div>\n\n <div className=\"toolbar minutes-toolbar dlas-forms\">\n <div>\n <Fields.Dropdown\n value={this.props.selectedSession}\n options={this.state.sessionDropdown}\n id=\"sessionDropdown\"\n onChange={this.handleSessionSelectChange}\n />\n </div>\n </div>\n {this.state.message &&\n <span className=\"fail small-text\">{this.state.message}</span>\n }\n <ReactTable\n resizable={false}\n loading={!this.state.isLoaded}\n data={this.state.minutesList}\n ref={r => this.reactTable = r}\n defaultFilterMethod={(filter, row) =>\n String(row[filter.id]) === filter.value}\n noDataText={this.props.minutes.minutesMessage}\n onFilteredChange={this.onFilteredChange.bind(this)}\n columns={[\n {\n Header: \"Minutes Date\",\n columns: [\n {\n id: \"checkbox\",\n className: \"checkbox-column\",\n headerClassName: \"header-checkbox\",\n accessor: \"\",\n Cell: ({ original, index }) => {\n return (\n <input\n id={'cm-checkbox-' + index}\n type=\"checkbox\"\n className=\"checkbox\"\n checked={this.state.selected[original.MinutesBookID] === true}\n onChange={() => this.toggleRow(original.MinutesBookID)}\n />\n );\n },\n Header: x => {\n return (\n <input\n id={'cm-checkbox-selectall'}\n type=\"checkbox\"\n className=\"checkbox\"\n checked={this.state.selectAll === 1}\n ref={input => {\n if (input) {\n input.indeterminate = this.state.selectAll === 2;\n }\n }}\n onChange={() => this.toggleSelectAll()}\n />\n );\n },\n sortable: false,\n filterable: false,\n width: 45\n },\n {\n Header: (\n <div className=\"dlas-forms datepicker-container\">\n {!this.state.showCreateSuccess && !this.state.showCreateFailure &&\n <DatePicker\n id=\"minutesDate\"\n className=\"dnd-field\"\n selected={this.state.minutesDate}\n onChange={this.handleDateChange}\n placeholderText=\"Minutes Date\"\n />\n }\n </div>\n ),\n headerClassName: \"header-insert\",\n accessor: \"MinutesDate\",\n sortable: false,\n filterAll: true,\n width: 200,\n Cell: row => {\n return (\n <span id={'cm-datecell-' + row.index}>{moment(row.original.MinutesDate).format('L')}</span>\n )\n }\n }\n ]\n },\n {\n Header: \"Session\",\n columns: [\n {\n Header: (\n <div>\n {!this.state.showCreateSuccess && !this.state.showCreateFailure &&\n <Fields.Dropdown\n value={this.state.selectedSessionGrid}\n options={this.state.sessionList}\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n id=\"sessionDropdown\"\n onChange={(value) => { this.handleDropDownChange(value, 'selectedSessionGrid') }} />\n }\n {this.state.showCreateSuccess &&\n <span className=\"insert-message\">Minutes created successfully</span>\n }\n {this.state.showCreateFailure &&\n <span className=\"insert-message fail\">Minutes creation failed</span>\n }\n </div>\n ),\n headerClassName: \"header-insert-dropdown\",\n accessor: \"SessionName\",\n sortable: false,\n filterAll: true,\n Cell: row => {\n return <span id={'mm-session-' + row.index}>{row.value}</span>\n }\n }\n ]\n },\n {\n Header: \"Status\",\n columns: [\n {\n Header: (\n <div>\n {!this.state.showCreateSuccess &&\n <span className=\"txt-greyed txt-grid-header\">Pending</span>\n }\n </div>\n ),\n headerClassName: \"header-insert\",\n accessor: \"Status\",\n sortable: false,\n filterAll: true,\n Cell: row => {\n return <span className=\"txt-greyed\" id={'mm-status-' + row.index}>{row.value}</span>\n }\n }\n ]\n },\n {\n Header: \"Actions\",\n headerClassName: \"submit-action\",\n columns: [\n\n {\n Header: (<span><button id=\"submit-new-minutes\" onClick={this.sendCreateDetails.bind(this)} disabled={this.state.isSaving} className=\"button\">Create</button></span>),\n headerClassName: \"header-action\",\n accessor: \"action\",\n sortable: false,\n className: \"action-column\",\n width: 50,\n Cell: row => {\n return (\n <Link id={'cm-edit-' + row.index} to={`/minutes-management/edit-minutes/${row.original.MinutesBookID}`} className=\"button edit\">Edit</Link>\n )\n }\n },\n {\n Header: \"\",\n headerClassName: \"flag-header\",\n accessor: \"PendingChange\",\n width: 40,\n Cell: row => {\n if (row.original.PendingChange) {\n return <span id={'cm-flag-' + row.index} className=\"button flag\">Flag</span>\n } else {\n return <span></span>;\n }\n }\n },\n {\n Header: \"All\",\n id: 'all',\n className: \"all-column\",\n headerClassName: \"all-header\",\n width: 0,\n resizable: false,\n sortable: false,\n Filter: () => { },\n getProps: () => {\n return {\n style: { padding: \"0px\" }\n }\n },\n filterMethod: (filter, rows) => {\n return rows.chamber === this.state.selectedChamber;\n }\n }\n ]\n }\n ]}\n defaultSorted={[\n {\n id: \"Name\",\n desc: false\n }\n ]}\n defaultPageSize={15}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight\"\n getTrProps={(state, rowInfo) => {\n // console.log('original:',rowInfo.original);\n // console.log('row:',rowInfo.row);\n // console.log('row.firstName:',rowInfo.row.firstName);\n // console.log('original.children:',rowInfo.original.children);\n return {}\n }}\n />\n <br />\n\n </div>\n );\n }\n}\n\nconst MinutesManagementGrid = connect(\n (state) => {\n const { minutes, session } = state;\n return {\n minutes,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, minutesActionCreators), dispatch)\n }\n }\n)(MinutesGridComponent)\n\n\nexport default MinutesManagementGrid;","import React from 'react';\n\nfunction LoaderComponent(props) {\n let loadingCheck = false;\n //typeof doesn't differentiate between an array and an object so we have to do this type of check\n switch (Object.prototype.toString.call(props.data)) {\n case '[object Array]':\n if (props.data.length > 0) loadingCheck = true;\n break;\n case '[object Object]':\n if (props.data) loadingCheck = true;\n break;\n default:\n if (props.data) loadingCheck = true;\n }\n return (\n <div className={`spinner-loader ${loadingCheck ? 'hide' : 'show'}`}>\n <div className={`${props.className} spinner`}>Loading results...</div>\n </div>\n )\n}\n\nexport default (LoaderComponent);","import React from \"react\";\nimport 'tinymce/themes/silver/theme';\nimport 'tinymce/icons/default'\nimport 'tinymce/plugins/paste/plugin';\nimport 'tinymce/plugins/link/plugin';\nimport 'tinymce/plugins/save/plugin';\nimport 'tinymce/plugins/lists/plugin';\nimport 'tinymce/plugins/code/plugin';\nimport 'tinymce/plugins/preview/plugin';\nimport 'tinymce/plugins/searchreplace/plugin';\nimport 'tinymce/plugins/pagebreak/plugin';\nimport 'tinymce/plugins/table/plugin';\nimport '../../../../stylesheets/tinymce/oxide/skin.min.css';\nimport { Editor } from '@tinymce/tinymce-react';\nimport renderHTML from \"react-render-html\";\n\nclass Misc extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n newEntries: [],\n editing: false\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.cancelEdit = this.cancelEdit.bind(this);\n this.saveChange = this.saveChange.bind(this);\n }\n\n handleChange(content) {\n //Update the local entry text without saving data to the parent\n let entries = [...this.state.newEntries];\n\n entries[0].EntryText = content;\n\n this.setState({\n newEntries: entries\n });\n }\n\n toggleEdit() {\n this.setState({\n editing: !this.state.editing,\n })\n }\n\n cancelEdit() {\n this.setState({\n editing: false,\n newEntries: this.props.formData.MinutesEntries\n })\n }\n\n saveChange() {\n this.props.handleSaveEntry(this.state.newEntries[0])\n this.toggleEdit();\n }\n\n componentDidMount() {\n this.setState({\n newEntries: this.props.formData ? this.props.formData.MinutesEntries : []\n })\n }\n\n componentDidUpdate(prevProps) {\n //If the entry has been saved or changed then swap out the entry with the latest\n if (prevProps.formData && this.props.formData && prevProps.formData.MinutesEntries[0].ModificationDate != this.props.formData.MinutesEntries[0].ModificationDate) {\n this.setState({\n newEntries: this.props.formData.MinutesEntries\n })\n }\n }\n\n render() {\n return (\n <React.Fragment>\n {this.state.newEntries.map((entry, i) => {\n return (\n <React.Fragment>\n <div key={entry.MinutesEntryID}>\n {this.state.editing\n ?\n <div className=\"grid-wrapper two-col-sidebar\">\n <Editor\n value={entry.EntryText}\n init={{\n browser_spellcheck: true,\n plugins: 'link paste save lists preview searchreplace pagebreak code table',\n toolbar: 'undo redo | bold italic strikethrough | alignleft aligncenter alignright',\n skin: false,\n valid_children: '+body[style]',\n content_css: false,\n content_style: 'table { border-collapse: collapse; border: 1px solid #FFFFFF }' + 'td { padding: 12px 0px }',\n }}\n onEditorChange={content => this.handleChange(content)}\n />\n <div>\n <button onClick={() => this.saveChange()} type=\"button\" className=\"icon save\" style={{ marginRight: \"10px\" }}></button>\n <button onClick={() => this.cancelEdit()} type=\"button\" className=\"icon delete\"></button>\n </div>\n </div>\n :\n <div className=\"grid-wrapper two-col-sidebar\">\n <p>{renderHTML(entry.EntryText)}</p>\n <button onClick={() => this.toggleEdit()} type=\"button\" className=\"icon edit\"></button>\n </div>\n }\n\n </div>\n </React.Fragment>\n )\n })}\n </React.Fragment>\n );\n }\n}\n\nexport default Misc","const getReferenceList = (eventCode, fullList) => {\n let filteredOptions;\n let otherVersions;\n switch (eventCode.substring(1)) {\n case '4210':\n case '4211':\n case '4212':\n //committee amendment\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'amendment' && text.Sponsor && text.Sponsor.toLowerCase() === 'committee');\n const otherAmendments = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'amendment' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherAmendments).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'Committee Amendments', options: filteredOptions },\n { label: !filteredOptions.length ? 'Amendments' : 'Other Amendments', options: otherAmendments },\n { label: !filteredOptions.length && !otherAmendments.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ];\n case '4230':\n case '4232':\n case '4278':\n case '4280':\n //member amendment (S codes correlate to Senator amends, H codes correlate to Delegate amends)\n if (eventCode[0] === 'S') {\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'amendment' && text.Sponsor &&\n (text.Sponsor.toLowerCase() === 'senate' || (text.Sponsor.toLowerCase() === 'member' && text.ChamberCode === 'S')));\n const otherAmendments = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'amendment' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherAmendments).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'Senator Amendments', options: filteredOptions },\n { label: !filteredOptions.length ? 'Amendments' : 'Other Amendments', options: fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'amendment' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID)) },\n { label: !filteredOptions.length && !otherAmendments.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ]\n } else {\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'amendment' && text.Sponsor &&\n (text.Sponsor.toLowerCase().includes('house') || (text.Sponsor.toLowerCase() === 'member' && text.ChamberCode === 'H')));\n const otherAmendments = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'amendment' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID))\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherAmendments).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'Delegate Amendments', options: filteredOptions },\n { label: !filteredOptions.length ? 'Amendments' : 'Other Amendments', options: otherAmendments },\n { label: !filteredOptions.length && !otherAmendments.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ]\n }\n case '4410':\n case '4640':\n //committee sub\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'substitute' && text.Sponsor && text.Sponsor.toLowerCase() === 'committee');\n const otherSubs = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'substitute' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherSubs).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'Committee Substitutes', options: filteredOptions },\n { label: !filteredOptions.length ? 'Substitutes' : 'Other Substitutes', options: otherSubs },\n { label: !filteredOptions.length && !otherSubs.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ]\n case '4420':\n case '4450':\n //member sub (S codes correlate to Senator subs, H codes correlate to Delegate subs)\n if (eventCode[0] === 'S') {\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'substitute' && text.Sponsor &&\n (text.Sponsor.toLowerCase() === 'senate' || (text.Sponsor.toLowerCase() === 'member' && text.ChamberCode === 'S')));\n const otherSubs = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'substitute' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherSubs).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'Senator Substitutes', options: filteredOptions },\n { label: !filteredOptions.length ? 'Substitutes' : 'Other Substitutes', options: otherSubs },\n { label: !filteredOptions.length && !otherSubs.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ]\n } else {\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'substitute' && text.Sponsor &&\n (text.Sponsor.toLowerCase().includes('house') || (text.Sponsor.toLowerCase() === 'member' && text.ChamberCode === 'H')));\n const otherSubs = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'substitute' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherSubs).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'Delegate Substitutes', options: filteredOptions },\n { label: !filteredOptions.length ? 'Substitutes' : 'Other Substitutes', options: otherSubs },\n { label: !filteredOptions.length && !otherSubs.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ]\n }\n case '4641':\n //floor sub\n return fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'substitute' && (!text.Sponsor || !['committee', 'governor', 'conference'].includes(text.Sponsor.toLowerCase())))\n case '5432':\n case '5433':\n case '5434':\n //senate/house specific sub (H codes correlate to Senate subs, S codes correlate to House subs)\n if (eventCode[0] === 'S') {\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'substitute' && ((text.Sponsor && text.Sponsor.toLowerCase().includes('house')) || (!text.Sponsor && text.ChamberCode === 'H')));\n const otherSubs = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'substitute' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherSubs).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'House Substitutes', options: filteredOptions },\n { label: !filteredOptions.length ? 'Substitutes' : 'Other Substitutes', options: otherSubs },\n { label: !filteredOptions.length && !otherSubs.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ]\n } else {\n filteredOptions = fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'substitute' && ((text.Sponsor && text.Sponsor.toLowerCase() === 'senate') || (!text.Sponsor && text.ChamberCode === 'S')));\n const otherSubs = fullList.filter(lt => (lt.LegislationVersion || lt.Version).toLowerCase() === 'substitute' && !filteredOptions.map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n otherVersions = fullList.filter(lt => !filteredOptions.concat(otherSubs).map(o => o.LegislationTextID).includes(lt.LegislationTextID));\n return [\n { label: 'Senate Substitutes', options: filteredOptions },\n { label: !filteredOptions.length ? 'Substitutes' : 'Other Substitutes', options: otherSubs },\n { label: !filteredOptions.length && !otherSubs.length ? 'All Versions' : 'Other Versions', options: otherVersions }\n ]\n }\n case '4643':\n //governor's sub\n return fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'substitute' && text.Sponsor.toLowerCase().includes('governor'))\n case '5602':\n //reenrolled\n return fullList.filter(text => (text.LegislationVersion || text.Version).toLowerCase() === 'reenrolled')\n case '4010':\n case '4011':\n //member\n return fullList; //return all the members passed down\n case '6013':\n case '6113':\n case '6213':\n //delegate/senator (H codes correlate to Delegates, S codes correlate to Senators)\n return fullList; //return all the members passed down, already filtered down to delegates in history form\n case '4610':\n case '5300':\n case '5310':\n case '5330':\n case '5350':\n case '5360':\n case '5370':\n case '5380':\n case '5800':\n case '5810':\n case '6060':\n case '7304':\n case '9600':\n //event\n return fullList; //return all the events passed down, already filtered in history form\n //not 100% certain what 'printed as...' (4620, 4622, 4630) is supposed to return\n case '4620':\n case '4622':\n case '4630':\n //not sure what '... bill reprinted' (4644, 4645, 4646) is supposed to return; there aren't any pickers in UI despite them being in the spreadsheet\n case '4644':\n case '4645':\n case '4646':\n //not sure what 'Bill text as passed ...' (5601, 5603) is supposed to return\n case '5601':\n case '5603':\n default:\n return fullList;\n }\n}\n\nexport default getReferenceList;","import React from \"react\";\nimport moment from 'moment-timezone';\nimport DatePicker from 'react-datepicker'\nimport CreatableSelect from 'react-select/creatable';\nimport Select from 'react-select';\nimport getReferenceList from '../../../services/event-references-helpers';\nimport 'tinymce/themes/silver/theme';\nimport 'tinymce/icons/default'\nimport 'tinymce/plugins/paste/plugin';\nimport 'tinymce/plugins/link/plugin';\nimport 'tinymce/plugins/save/plugin';\nimport 'tinymce/plugins/lists/plugin';\nimport 'tinymce/plugins/code/plugin';\nimport 'tinymce/plugins/preview/plugin';\nimport 'tinymce/plugins/searchreplace/plugin';\nimport 'tinymce/plugins/pagebreak/plugin';\nimport 'tinymce/plugins/table/plugin';\nimport '../../../stylesheets/tinymce/oxide/skin.min.css';\nimport { Editor } from '@tinymce/tinymce-react';\n\nclass CustomCreatableSelect extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n inputMinWidth: 150,\n inputWidth: 0,\n selectedActionType: ''\n };\n this.inputSizer = React.createRef();\n }\n\n componentDidMount() {\n const newWidth = this.inputSizer.current ? this.inputSizer.current.scrollWidth + 45 : 0\n this.setState({\n inputWidth: newWidth\n });\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.value !== this.props.value) {\n const newWidth = this.inputSizer.current ? this.inputSizer.current.scrollWidth + 45 : 0\n this.setState({\n inputWidth: newWidth\n });\n }\n }\n render() {\n const wrapperStyle = {\n display: 'inline-block',\n position: 'relative'\n };\n const inputStyle = {\n minWidth: `${this.state.inputMinWidth}px`,\n width: `${this.state.inputWidth}px`,\n boxShadow: this.props.autoselected && !this.props.isNewEvent ? '0 0 7px 1px green' : '',\n borderRadius: this.props.autoselected && !this.props.isNewEvent ? '4px' : '',\n marginTop: this.props.autoselected && !this.props.isNewEvent ? '5px' : ''\n };\n const sizerStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n visibility: 'hidden',\n height: 0,\n overflow: 'scroll',\n whiteSpace: 'pre',\n };\n const inputValue = this.props.getOptionLabel ? this.props.getOptionLabel(this.props.value) :\n this.props.value ? this.props.value.label : '';\n return (\n <div style={wrapperStyle}>\n {this.props.autoselected && !this.props.isNewEvent && <label><small><em>This has been autoselected, but not saved.</em></small></label>}\n <div ref={this.inputSizer} style={sizerStyle}>{inputValue}</div>\n <div style={inputStyle}>\n <CreatableSelect\n options={this.props.options}\n styles={selectStyle()}\n onChange={this.props.onChange}\n value={this.props.value}\n formatCreateLabel={input => input}\n //This is so an option can only be created once an option has been selected\n isValidNewOption={() => Boolean(this.props.value)}\n {...this.props} />\n </div>\n </div>\n );\n }\n}\n\nclass CustomInput extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n inputMinWidth: 150,\n inputWidth: 0\n };\n this.inputSizer = React.createRef();\n }\n\n componentDidMount() {\n const newWidth = this.inputSizer.current ? this.inputSizer.current.scrollWidth + 2 : 0\n this.setState({\n inputWidth: newWidth\n });\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.value !== this.props.value) {\n const newWidth = this.inputSizer.current ? this.inputSizer.current.scrollWidth + 2 : 0\n this.setState({\n inputWidth: newWidth\n });\n }\n }\n\n render() {\n const wrapperStyle = {\n display: 'inline-block',\n position: 'relative'\n };\n const inputStyle = {\n minWidth: `${this.state.inputMinWidth}px`,\n width: `${this.state.inputWidth}px`,\n maxWidth: '70vw'\n };\n const sizerStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n visibility: 'hidden',\n height: 0,\n overflow: 'scroll',\n whiteSpace: 'pre',\n };\n return (<div style={wrapperStyle}>\n <div ref={this.inputSizer} style={sizerStyle}>{this.props.value}</div>\n {this.props.textListLength > 0\n ? <input\n {...this.props}\n style={inputStyle}\n />\n : <React.Fragment>\n <textarea\n {...this.props}\n style={inputStyle}\n />\n </React.Fragment>\n }\n\n </div>)\n }\n}\n\n//This class is used to take the ActivityReferences and turn them into a form\nclass InputType extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {};\n\n this.handleChange = this.handleChange.bind(this);\n this.handleActionTypeChange = this.handleActionTypeChange.bind(this);\n this.addInput = this.addInput.bind(this);\n\n this.actionTypeDropdown = React.createRef();\n }\n\n handleChange(referenceIndex, value, autoselected) {\n const { entryIndex, activityIndex, references, billHistory } = this.props;\n //Send the index of the minute entry, the entire minute entries object (so we don't have to save the entire book),\n //the value of the text input, and the sequence to show which category to update\n const originalValue = JSON.parse(JSON.stringify(references[referenceIndex]));\n let reference = references[referenceIndex];\n switch (reference.ActionReferenceType) {\n case 'Member':\n case 'Committee':\n case 'Subcommittee':\n reference.ReferenceText = value.label;\n //If it is not created then __isNew__ will be false. Since it is not created then set the ID to whatever was selected\n //The Creatable does not allow creating an option if an option has not been selected yet, so if the value is new then use the existing reference ID\n if (!value.__isNew__) {\n reference.ReferenceID = value.value;\n }\n break;\n case 'LegislationText':\n reference.ReferenceText = value.Description || value.label;\n if (!value.__isNew__) {\n reference.ReferenceID = value.value;\n } else {\n reference.ReferenceText = value.label\n }\n reference.autoselected = autoselected;\n break;\n case 'Time':\n reference.ReferenceText = value.format('h:mm a');\n break;\n case 'Date and Time':\n reference.ReferenceText = value.format(\"MMMM d, yyyy h:mm a\");\n break;\n case 'Text':\n reference.ReferenceText = value;\n break;\n case 'HTML':\n reference.ReferenceText = value;\n break;\n case 'LegislationEvent':\n reference.ReferenceID = value.LegislationEventID;\n reference.EventCode = value.EventCode;\n reference.IsPassed = value.IsPassed;\n break;\n case 'Legislation':\n reference.ReferenceText = value.label;\n reference.ReferenceID = value.value;\n break;\n case 'Communication':\n reference.ReferenceText = value.ReferenceNumber;\n reference.CommunicationDate = value.CommunicationDate;\n reference.CommunicationNumber = value.CommunicationNumber;\n if (!value.__isNew__) {\n reference.ReferenceID = value.value;\n }\n reference.CommunicationSummaries = value.CommunicationSummaries\n break;\n default:\n reference.ReferenceText = value;\n }\n this.props.handleChange(entryIndex, activityIndex, referenceIndex, reference, !billHistory && originalValue);\n }\n\n handleActionTypeChange(val) {\n this.setState({\n selectedActionType: val\n })\n }\n\n addInput() {\n const { entryIndex, activityIndex, references } = this.props;\n const newInput = {\n ReferenceID: null,\n ReferenceText: '',\n ActionReferenceTypeID: this.state.selectedActionType.ActionReferenceTypeID,\n ActionReferenceType: this.state.selectedActionType.ActionReferenceType\n }\n this.props.handleChange(entryIndex, activityIndex, references.length, newInput);\n this.setState({\n selectedActionType: ''\n });\n }\n\n render() {\n const { entryIndex, activityIndex, references, actionTypes, style } = this.props;\n const divStyle = {\n display: 'inline-block',\n margin: '0px 5px 3px 5px',\n lineHeight: '0.8em'\n }\n\n const errorCheck = (referenceIndex) => {\n return (\n this.props.incompleteInputs && this.props.incompleteInputs.includes(referenceIndex) &&\n <span className=\"fail\" style={{ fontSize: \"12px\" }}>You must enter a value.</span>\n )\n }\n\n return (\n <div style={{ ...style }}>\n {references.map((reference, referenceIndex) => {\n switch (reference.ActionReferenceType) {\n case 'Text':\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomInput\n value={reference.ReferenceText}\n onChange={(event) => this.handleChange(referenceIndex, event.target.value)}\n textListLength={this.props.textList?.length ?? 0}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'HTML':\n return (\n <div key={referenceIndex} style={{ ...divStyle, width: '100%' }}>\n <Editor\n value={reference.ReferenceText}\n init={{\n browser_spellcheck: true,\n force_br_newlines: false,\n force_p_newlines: false,\n forced_root_block: '', //don't wrap votetally in minutes activities\n plugins: 'link paste save lists preview searchreplace pagebreak code table',\n toolbar: 'undo redo | bold italic strikethrough | alignleft aligncenter alignright',\n skin: false,\n valid_children: '+body[style]',\n content_css: false,\n content_style: 'table { border-collapse: collapse; border: 1px solid #FFFFFF }' + 'td { padding: 12px 0px }',\n }}\n onEditorChange={content => this.handleChange(referenceIndex, content)}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'Member':\n let memberVal = null;\n const member = this.props.memberList.find(member => member.MemberID === reference.ReferenceID);\n if (member) {\n memberVal = {\n label: reference.ReferenceText,\n value: reference.ReferenceID\n };\n }\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomCreatableSelect\n options={this.props.newEvent && this.props.newEvent.EventCode ? getReferenceList(this.props.newEvent.EventCode, this.props.memberList || []) : this.props.memberList || []}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n value={memberVal}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'Committee':\n let committeeVal = null;\n const committee = this.props.committeeList.find(member => member.CommitteeID === reference.ReferenceID);\n if (committee) {\n committeeVal = {\n label: reference.ReferenceText,\n value: reference.ReferenceID\n };\n }\n let committeeList = this.props.committeeList ? this.props.committeeList.filter(c => !c.ParentCommitteeID) : [];\n let eventChamber = this.props.newEvent.EventCode[0];\n committeeList = committeeList.filter(x => x.ChamberCode == eventChamber)\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomCreatableSelect\n options={this.props.newEvent && this.props.newEvent.EventCode ? getReferenceList(this.props.newEvent.EventCode, committeeList) : committeeList}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n value={committeeVal}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'Subcommittee':\n let subCommitteeVal = null;\n const subCommittee = this.props.committeeList.find(member => member.CommitteeID === reference.ReferenceID);\n if (subCommittee) {\n subCommitteeVal = {\n label: reference.ReferenceText,\n value: reference.ReferenceID\n };\n }\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomCreatableSelect\n options={this.props.newEvent && this.props.newEvent.EventCode ? getReferenceList(this.props.newEvent.EventCode, this.props.committeeList ? this.props.committeeList.filter(c => c.ParentCommitteeID) : []) : this.props.committeeList ? this.props.committeeList.filter(c => c.ParentCommitteeID) : []}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n value={subCommitteeVal}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'LegislationText':\n const options = this.props.newEvent && this.props.newEvent.EventCode ? getReferenceList(this.props.newEvent.EventCode, this.props.textList || []) : this.props.textList || [];\n let textVal;\n //if we want to autoselect, do so only if the very first hierarchy/grouping has exactly one option; this is very likely the one they want to use\n if (this.props.autoselect && !reference.ReferenceText && !reference.ReferenceID && options.length && options[0].options && options[0].options.length === 1) {\n this.handleChange(referenceIndex, options[0].options[0], true);\n }\n textVal = {\n label: reference.ReferenceText !== null ? reference.ReferenceText : \"Select...\",\n value: reference.ReferenceID\n }\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomCreatableSelect\n options={options}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n value={textVal}\n getOptionLabel={opt => {\n let newLabel = '';\n if (opt.IsActive !== undefined) {\n newLabel = `(${opt.IsActive ? \"active\" : \"inactive\"}) ${opt.label}`;\n } else {\n newLabel = opt.label;\n }\n newLabel += opt.LDNumber ? ` (${opt.LDNumber})` : '';\n return newLabel;\n }}\n autoselected={reference.autoselected}\n isNewEvent={this.props.isNewEvent}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'Time':\n const time = reference.ReferenceText ? moment(reference.ReferenceText, 'h:mm a').isValid() ? moment(reference.ReferenceText, 'h:mm a') : null : null;\n return (\n <div key={referenceIndex} style={divStyle}>\n <DatePicker\n className='clock-date-picker'\n showTimeSelect\n showTimeSelectOnly\n timeIntervals={15}\n dateFormat=\"h:mm a\"\n timeCaption=\"Time\"\n selected={time}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'Date and Time':\n const datetime = reference.ReferenceText ? moment(reference.ReferenceText).isValid() ? moment(reference.ReferenceText) : null : null;\n return (\n <div key={referenceIndex} style={divStyle}>\n <DatePicker\n className='clock-date-picker'\n showTimeSelect\n timeIntervals={15}\n dateFormat=\"MMMM d, yyyy h:mm a\"\n timeCaption=\"Time\"\n selected={datetime}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'LegislationEvent':\n return (\n <div key={referenceIndex} style={{ marginLeft: \"-5px\", marginTop: \"5px\" }}>\n {this.props.newEvent && ((this.props.newEvent.ActionReferences && this.props.newEvent.ActionReferences[0] && this.props.newEvent.ActionReferences[0].ActionReferenceType === \"LegislationEvent\") || (this.props.newEvent.ActivityReferences && this.props.newEvent.ActivityReferences[0] && this.props.newEvent.ActivityReferences[0].ActionReferenceType === \"LegislationEvent\") || (this.props.newEvent.EventReferences && this.props.newEvent.EventReferences[0] && this.props.newEvent.EventReferences[0].ActionReferenceType === \"LegislationEvent\")) && this.props.eventList &&\n <div style={divStyle}>\n {this.props.eventList.length > 0 ?\n <CustomCreatableSelect\n options={this.props.newEvent && this.props.newEvent.EventCode ? getReferenceList(this.props.newEvent.EventCode, this.props.eventList) : this.props.eventList}\n value={reference.ReferenceID && this.props.eventList.find(evt => evt.LegislationEventID === reference.ReferenceID) ? this.props.eventList.find(evt => evt.LegislationEventID === reference.ReferenceID) : \"\"}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n getOptionValue={o => o.LegislationEventID}\n getOptionLabel={o => o.EventCode ? \"(\" + o.EventCode + \") \" + o.Description : \"\"}\n />\n :\n <p>No eligible events.</p>\n }\n </div>\n }\n {errorCheck(referenceIndex)}\n </div>\n )\n case 'Communication':\n let communicationList = this.props.communicationList || [];\n let communicationVal = null;\n const communication = communicationList.find(comm => comm.CommunicationID === reference.ReferenceID);\n if (communication) {\n communicationVal = {\n label: reference.ReferenceText,\n value: reference.ReferenceID\n };\n }\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomCreatableSelect\n options={this.props.newEvent && this.props.newEvent.EventCode ? getReferenceList(this.props.newEvent.EventCode, communicationList) : communicationList}\n onChange={(communication) => this.handleChange(referenceIndex, communication)}\n value={communicationVal}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n case 'Legislation':\n let legislationVal = null;\n const legislation = this.props.legislationList ? this.props.legislationList.find(leg => leg.LegislationID === reference.ReferenceID) : null;\n if (legislation) {\n legislationVal = {\n label: reference.ReferenceText,\n value: reference.ReferenceID\n };\n }\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomCreatableSelect\n options={this.props.newEvent && this.props.newEvent.EventCode ? getReferenceList(this.props.newEvent.EventCode, this.props.legislationList || []) : this.props.legislationList || []}\n onChange={(event) => this.handleChange(referenceIndex, event)}\n value={legislationVal}\n placeholder={this.props.fetchingSessionLegislation ? 'Loading bills...' : 'Select...'}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n default:\n return (\n <div key={referenceIndex} style={divStyle}>\n <CustomInput\n value={reference.ReferenceText}\n onChange={(event) => this.handleChange(referenceIndex, event.target.value)}\n />\n {errorCheck(referenceIndex)}\n </div>\n );\n }\n })\n }\n {actionTypes && actionTypes.length > 0 && this.props.textList.length > 0 && (!this.props.newEvent?.ActionReferences?.length || this.props.newEvent.ActionReferences[0].ActionReferenceType !== \"LegislationEvent\") &&\n <div style={divStyle}>\n <label className=\"txt-greyed smaller-text\" style={{ opacity: this.state.selectedActionType ? 1 : 0 }}>Press enter to add</label>\n <Select\n onKeyDown={(e) => {\n //Enter can also be used to select an option. Make sure that the menu is closed before trying to add the input\n if (e.key === 'Enter' && !this.actionTypeDropdown.state.menuIsOpen) {\n this.addInput();\n }\n }}\n placeholder=\"Add\"\n options={actionTypes}\n value={this.state.selectedActionType}\n onChange={this.handleActionTypeChange}\n styles={selectStyle()}\n ref={ref => this.actionTypeDropdown = ref}\n />\n </div>\n }\n\n </div>\n );\n }\n}\n\n//react-select default style makes the element too tall and the font too large\nconst selectStyle = () => {\n const fontSize = '0.8em';\n return {\n container: styles => ({\n ...styles,\n minWidth: '150px'\n }),\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: fontSize,\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: fontSize,\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n option: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n dropdownIndicator: styles => ({\n ...styles,\n padding: '0px 8px'\n }),\n menu: provided => ({\n ...provided,\n whiteSpace: 'nowrap',\n width: 'auto'\n })\n };\n}\n\nexport default InputType;","import React, {useState} from 'react';\nimport tinymce from 'tinymce/tinymce';\nimport 'tinymce/themes/silver/theme';\nimport 'tinymce/icons/default'\nimport 'tinymce/plugins/paste/plugin';\nimport 'tinymce/plugins/link/plugin';\nimport 'tinymce/plugins/save/plugin';\nimport 'tinymce/plugins/lists/plugin';\nimport 'tinymce/plugins/code/plugin';\nimport 'tinymce/plugins/preview/plugin';\nimport 'tinymce/plugins/searchreplace/plugin';\nimport 'tinymce/plugins/pagebreak/plugin';\nimport 'tinymce/plugins/table/plugin';\nimport '../../../../stylesheets/tinymce/oxide/skin.min.css';\nimport { Editor } from '@tinymce/tinymce-react';\nimport ReactTable from 'react-table';\n\nconst CommentBox = props => {\n const [selectedComment, selectComment] = useState(-1);\n const [showView, toggleViews] = useState(true);\n const handleChange = content => {\n let comments = [...props.comments];\n comments[selectedComment].MinutesSummary = content;\n props.handleCommentBoxChange(comments);\n }\n const addComment = () => {\n let comments = [...props.comments];\n comments.push({MinutesSummary: ''});\n props.handleCommentBoxChange(comments);\n selectComment(props.comments.length);\n toggleViews(false);\n };\n const getCommentPreview = (comment, index) => {\n // Shows the first paragraph of the comment to the user in the grid so they don't need to open the comment to know what its content is.\n // If a paragraph doesn't exist then the first element of the text is used\n // If there aren't any elements, then just put comment number so its not just a blank row.\n const container = document.createElement(\"DIV\");\n container.innerHTML = comment.MinutesSummary;\n const paragraphs = container.getElementsByTagName(\"P\")\n if(paragraphs.length > 0 && paragraphs[0].innerText) {\n return(<span>{paragraphs[0].innerText}</span>)\n } else {\n const firstElement = container.childNodes[0];\n if(firstElement && firstElement.innerText) {\n return(<span>{firstElement.innerText}</span>)\n } else {\n return <span>Comment {index + 1}</span>;\n }\n }\n }\n return(\n <div onClick={() => props.toggleBox(false)} className=\"overlay center-content\">\n <div className=\"full\">\n <div onClick={e => e.stopPropagation()} className=\"dlas-forms user-forms advanced-search overlay-content animated-fade-in-up\">\n <ReactTable\n data={props.comments}\n showPageSizeOptions={false}\n showPagination={false}\n showPageJump={false}\n pageSize={props.comments.length}\n getTrProps={(_state, rowInfo) => {\n return {\n style: {\n background: rowInfo && rowInfo.index === selectedComment ? '#89ff89' : '',\n cursor: rowInfo ? 'pointer' : 'default',\n display: showView ? 'inline-flex' : 'none'\n },\n onClick: () => {\n selectComment(rowInfo.index);\n toggleViews(false);\n }\n }\n }}\n noDataText=\"\"\n columns={[\n {\n id: \"checkbox\",\n className: \"checkbox-column\",\n Header: () => <button onClick={() => toggleViews(!showView)} className={`${showView ? 'arrow-up' : 'arrow-down'} white-chevron`}></button>,\n Cell: ({ index }) => <span className={index === selectedComment ? \"icon checkmark\" : \"\"}></span>,\n sortable: false,\n filterable: false,\n width: 45\n },\n {\n Cell: ({original, index}) => getCommentPreview(original, index),\n Footer: () => showView ? <button onClick={addComment} className=\"button\" type=\"button\">Add Comment</button> : null\n },\n ]}\n className=\"-striped -highlight\"\n />\n <div style={{display: showView ? 'none' : 'block'}}>\n <Editor\n value={props.comments[selectedComment] ? props.comments[selectedComment].MinutesSummary : ''}\n init={{\n browser_spellcheck: true,\n height: window.innerHeight / 1.5,\n plugins: 'link paste save lists preview searchreplace pagebreak code table',\n toolbar: 'undo redo | bold italic strikethrough | alignleft aligncenter alignright',\n skin: false,\n valid_children: '+body[style]',\n content_css: false,\n content_style: 'table { border-collapse: collapse; border: 1px solid #FFFFFF }' + 'td { padding: 12px 0px }',\n }}\n onEditorChange={content => handleChange(content)}\n />\n </div>\n <div className=\"flex-row\">\n <br />\n <div className=\"inline-list\">\n <button type=\"button\" onClick={() => props.toggleBox(false)} className=\"button secondary\">Cancel</button>\n <button type=\"button\" onClick={props.saveComment} className=\"button\">Save</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default CommentBox;","import React from \"react\";\nimport InputTypes from \"../input-types\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport Select from 'react-select'\nimport { calendarActionCreators } from \"../../../../stores/lis-calendar-store\";\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport CommentBox from './comment-box';\nimport renderHTML from 'react-render-html';\nimport { minutesActionCreators } from \"../../../../stores/lis-minutes-store\";\nimport { billActionCreators } from \"../../../../stores/lis-legislation-store\";\nimport ReactTooltip from \"react-tooltip\";\nimport moment from \"moment-timezone\";\n\nconst getItemStyle = (isDragging, draggableStyle, pendingDeletion) => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n // change background colour if dragging\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: pendingDeletion ? 'red' : 'none',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%',\n});\n\nclass NonLegislativeForm extends React.Component {\n\n constructor(props) {\n super(props)\n this.state = {\n selectedMotion: '',\n insertEntry: [{ label: \"No Legislation\" }],\n templateInputs: [],\n references: [],\n motionOptions: [],\n selectedMotions: [],\n newEntries: [],\n templateInputs: [],\n templatedEdited: false,\n showMenu: -1,\n showCommentBox: false,\n commentBoxContent: [],\n textList: [],\n editing: false,\n initialText: [],\n checkedBills: [],\n editingActivityDescription: {}\n }\n\n this.closeNewEntries = this.closeNewEntries.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.onEntryDragEnd = this.onEntryDragEnd.bind(this);\n this.onActivityDragEnd = this.onActivityDragEnd.bind(this);\n this.removeActivity = this.removeActivity.bind(this);\n this.addBackActivity = this.addBackActivity.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.saveChange = this.saveChange.bind(this);\n this.insertMotion = this.insertMotion.bind(this);\n this.handleTemplateChange = this.handleTemplateChange.bind(this);\n this.handleMotionChange = this.handleMotionChange.bind(this);\n this.handleSelectedMotionDescriptionChange = this.handleSelectedMotionDescriptionChange.bind(this);\n this.getCatActionList = this.getCatActionList.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.addEntry = this.addEntry.bind(this);\n this.handleCommentBoxChange = this.handleCommentBoxChange.bind(this);\n this.toggleCommentBox = this.toggleCommentBox.bind(this);\n this.saveComment = this.saveComment.bind(this);\n this.toggleShowDeleted = this.toggleShowDeleted.bind(this);\n this.getTextList = this.getTextList.bind(this);\n this.getNonLegislativeActionList = this.getNonLegislativeActionList.bind(this);\n this.handleNewMotionChange = this.handleNewMotionChange.bind(this);\n this.toggleSwitchCategory = this.toggleSwitchCategory.bind(this);\n this.handleSwitchCategoryChange = this.handleSwitchCategoryChange.bind(this);\n this.switchCategory = this.switchCategory.bind(this);\n this.toggleSelectEntry = this.toggleSelectEntry.bind(this);\n this.toggleEditActivityDescription = this.toggleEditActivityDescription.bind(this);\n\n this.menuBoxRef = React.createRef();\n }\n\n closeNewEntries() {\n this.setState({\n newEntries: []\n });\n }\n\n toggleEdit(index) {\n let newEntries = [...this.state.newEntries];\n let init = [];\n if (this.state.newEntries[index]) {\n newEntries[index] = null;\n } else {\n if (this.state.newEntries.length === 0) {\n newEntries.length = this.props.formData.MinutesEntries.length;\n }\n //If the user has multiple edit entries open clicking the X on one doesn't kill the changes to another\n newEntries[index] = JSON.parse(JSON.stringify(this.props.formData.MinutesEntries[index]));\n // Test to see if there are zero minute activities. If so then create one.\n if (!newEntries[index].MinutesActivities || newEntries[index].MinutesActivities.length === 0) {\n newEntries[index].MinutesActivities = [];\n const newActivity = {\n Description: newEntries[index].EntryText,\n ActivityReferences: [],\n InPreview: true\n };\n newEntries[index].MinutesActivities.push(newActivity);\n }\n //Test to see if the activities have zero activity references. If they have zero then add a blank text one\n newEntries[index].MinutesActivities.forEach(act => {\n if (act.EventCode) {\n const eventReference = this.state.references.find(evt => evt.EventCode === act.EventCode && evt.IsPassed === act.IsPassed);\n if (eventReference) {\n const actionReferences = eventReference.ActionReferences;\n if (actionReferences) {\n const missingActivitiyReferences = actionReferences.filter(ref => !act.ActivityReferences || !act.ActivityReferences.map(existingActivities => existingActivities.ActionReferenceType).includes(ref.ActionReferenceType));\n if (missingActivitiyReferences.length) {\n act.ActivityReferences = act.ActivityReferences ? act.ActivityReferences.concat(JSON.parse(JSON.stringify(missingActivitiyReferences))) : JSON.parse(JSON.stringify(missingActivitiyReferences));\n }\n }\n }\n }\n\n if (!act.ActivityReferences || act.ActivityReferences.length === 0) {\n const textType = this.props.actionTypes.find(type => type.ActionReferenceType === 'Text');\n if (textType) {\n //Sometimes ActivityReferences is undefined. Make a blank one so the push does not fail\n act.ActivityReferences = [];\n act.ActivityReferences.push({\n ActionReferenceTypeID: textType.ActionReferenceTypeID,\n ActionReferenceType: textType.ActionReferenceType,\n ReferenceText: act.Description\n });\n }\n }\n //Need something from act we can reference back to when displaying the initial activity text value as a label\n init.push({ ReferenceText: act.Description, MinutesActivityID: act.MinutesActivityID })\n });\n }\n let editingActivityDescription = { ...this.state.editingActivityDescription };\n editingActivityDescription[index] = {};\n this.setState({\n newEntries: newEntries,\n editing: !this.state.editing,\n initialText: init,\n editingActivityDescription\n }, () => {\n if (this.state.editing) {\n newEntries[index].MinutesActivities.forEach((activity, activityIndex) => {\n if (activity.VoteTally !== undefined)\n this.handleActivityDescriptionChange(null, \"VoteTally\", index, activityIndex)\n })\n }\n });\n }\n\n toggleEditActivityDescription(entryIndex, activityIndex) {\n let editingActivityDescription = { ...this.state.editingActivityDescription };\n if (!editingActivityDescription[entryIndex]) {\n editingActivityDescription[entryIndex] = {};\n }\n editingActivityDescription[entryIndex][activityIndex] = !editingActivityDescription[entryIndex][activityIndex];\n this.setState({ editingActivityDescription }, () => {\n this.handleActivityDescriptionChange(null, \"Description\", entryIndex, activityIndex)\n this.handleActivityDescriptionChange(null, \"VoteTally\", entryIndex, activityIndex)\n });\n }\n\n handleActivityDescriptionChange(value, attr, entryIndex, activityIndex, save) {\n //Update the input with new text. Save change to this components state so it doesn't update the parent just yet (in case the user clicks the X)\n let entries = this.state.newEntries;\n let activity = entries[entryIndex].MinutesActivities[activityIndex];\n\n if (save) {\n activity.Description = activity.tempDescription ?? activity.Description;\n activity.VoteTally = activity.tempVoteTally ?? activity.VoteTally;\n } else {\n activity['temp' + attr] = value ?? activity[attr];\n }\n\n this.setState({ entries }, () => {\n if (save) this.toggleEditActivityDescription(entryIndex, activityIndex);\n });\n }\n\n onActivityDragEnd(result, entryIndex) {\n if (!result.destination) {\n return;\n }\n if (result.destination.index === result.source.index) {\n return;\n }\n let entries = [...this.state.newEntries];\n let activities = entries[entryIndex].MinutesActivities;\n const [removed] = activities.splice(result.source.index, 1);\n activities.splice(result.destination.index, 0, removed);\n activities.forEach((element, index) => {\n element.Sequence = index + 1\n });\n this.setState({\n newEntries: entries\n });\n }\n\n onEntryDragEnd(result) {\n if (!result.destination) {\n return;\n }\n if (result.destination.index === result.source.index) {\n return;\n }\n let entries = [...this.props.formData.MinutesEntries];\n const [removed] = entries.splice(result.source.index, 1);\n entries.splice(result.destination.index, 0, removed);\n entries.forEach((element, index) => {\n element.Sequence = index + 1;\n });\n this.props.onMultipleEntryChange(entries, this.props.currentActivitySequence);\n this.props.handleSaveEntry(entries);\n // \n this.setState({\n newEntries: []\n });\n }\n\n removeActivity(entryIndex, activityIndex) {\n let entries = [...this.state.newEntries];\n entries[entryIndex].MinutesActivities[activityIndex].DeletionDate = moment();\n if (entries[entryIndex].MinutesSummaries) {\n //if this is a \"COMMUNICATION FROM HOUSE\" entry, delete the entire entry so nothing (including the minutes summaries) appears for the public\n entries[entryIndex].DeletionDate = moment();\n }\n this.setState({\n newEntries: entries\n });\n }\n\n addBackActivity(entryIndex, activityIndex) {\n let entries = [...this.state.newEntries];\n entries[entryIndex].MinutesActivities[activityIndex].DeletionDate = null;\n entries[entryIndex].MinutesActivities[activityIndex].IsPublic = false;\n if (entries[entryIndex].MinutesSummaries) {\n //if this is a \"COMMUNICATION FROM HOUSE\" entry, re-add the entire entry so everything (including the minutes summaries) appears\n entries[entryIndex].DeletionDate = null;\n entries[entryIndex].IsPublic = false;\n }\n this.setState({\n newEntries: entries\n });\n }\n\n handleChange(entryIndex, activityIndex, referenceIndex, reference, previousValue) {\n //Update the input with new text. Save change to this components state so it doesn't update the parent just yet (in case the user clicks the X)\n let entries = this.state.newEntries;\n let activity = entries[entryIndex].MinutesActivities[activityIndex];\n activity.ActivityReferences[referenceIndex] = reference;\n let desc = '';\n activity.ActivityReferences.forEach(tInput => desc += tInput.ReferenceText);\n activity.Description = desc;\n if (this.props.formData.CategoryType === \"Chairmans Report\") {\n // if they are editing a chairs report summary, use the entrytext attr, as it won't persist otherwise\n entries[entryIndex].EntryText = desc;\n entries[entryIndex].IsPublic = false;\n }\n activity.IsPublic = false;\n entries[entryIndex].MinutesActivities[activityIndex] = activity;\n //if they are selecting a communication, add minutessummaries for each communicationsummary on that communication\n if (reference.ActionReferenceType === 'Communication') {\n //set the communication data for the entry level\n entries[entryIndex].CommunicationID = reference.ReferenceID;\n entries[entryIndex].CommunicationDate = reference.CommunicationDate;\n if (reference.CommunicationNumber) {\n entries[entryIndex].CommunicationNumber = Number(reference.CommunicationNumber);\n }\n //set minutessummaries array if not already available\n entries[entryIndex].MinutesSummaries = entries[entryIndex].MinutesSummaries || [];\n //if they are changing from one communication to another, delete the summaries related to the old communication\n if (previousValue && previousValue.ReferenceID) {\n entries[entryIndex].MinutesSummaries = entries[entryIndex].MinutesSummaries.filter(ms => ms.ModificationDate);\n entries[entryIndex].MinutesSummaries.filter(ms => ms.ReferenceID === previousValue.ReferenceID).forEach(ms => ms.DeletionDate = moment())\n }\n if (reference.CommunicationSummaries) {\n reference.CommunicationSummaries.filter(cs => cs.MinutesSummary && cs.CommunicationID).forEach(commSummary => {\n entries[entryIndex].MinutesSummaries.push({ MinutesSummary: commSummary.MinutesSummary, ReferenceID: commSummary.CommunicationID })\n })\n }\n }\n this.setState({\n newEntries: entries\n });\n }\n\n saveChange(entryIndex) {\n let entry = this.state.newEntries[entryIndex];\n //save any changes to vote tallies\n let promises = [];\n entry.MinutesActivities.forEach((activity, activityIndex) => {\n if (activity.VoteTally !== undefined && !activity.ActivityReferences.find(ar => ar.ActionReferenceType !== \"Text\")) {\n promises.push(new Promise(res => {\n this.handleActivityDescriptionChange(null, \"VoteTally\", entryIndex, activityIndex, true);\n res();\n }))\n }\n })\n Promise.all(promises).then(() => {\n //Send the index of the minute entry, the entire minute entries object (so we don't have to save the entire book),\n //the value of the text input, and the sequence to show which category to update\n this.props.onEntryChange(entryIndex, entry, this.props.currentActivitySequence);\n this.props.handleSaveEntry(entry);\n //Turn it back into a span\n let newEntries = [...this.state.newEntries];\n newEntries[entryIndex] = null;\n let editingActivityDescription = { ...this.state.editingActivityDescription };\n editingActivityDescription[entryIndex] = {};\n this.setState({\n newEntries: newEntries,\n editing: false,\n editingActivityDescription\n });\n });\n }\n\n insertMotion(entryIndex) {\n //A new motion wants to be added so take all this data and sent it to the parent div to be added to the state\n const { templatedEdited } = this.state;\n let templateInputs = [...this.state.templateInputs];\n let selectedMotions = [...this.state.selectedMotions];\n const entries = [...this.props.formData.MinutesEntries];\n const selectedMotion = selectedMotions[entryIndex] ? selectedMotions[entryIndex] : this.state.selectedMotion;\n let entry = entryIndex >= 0 ? entries[entryIndex] : {};\n //If it is a null then create a new one so the push doesn't fail\n if (!entry.MinutesActivities) {\n entry.MinutesActivities = [];\n }\n entry.Sequence = Math.max(...entries.map(e => e.Sequence || 0)) + 1;\n let desc = selectedMotion.Description || selectedMotion.CalendarDescription;\n //If the user has changed the value of the action references then use those for the description instead of the existing one.\n let activityRefs = [];\n if (templatedEdited || (templateInputs.length && !templateInputs.find(tInput => ![\"Text\", \"HTML\"].includes(tInput.ActionReferenceType)))) {\n desc = '';\n templateInputs.forEach((tInput, actIndex) => {\n desc += tInput.ReferenceText;\n activityRefs[actIndex] = {\n ActionReferenceTypeID: tInput.ActionReferenceTypeID,\n ActionReferenceType: tInput.ActionReferenceType,\n Sequence: tInput.Sequence,\n ReferenceText: tInput.ReferenceText,\n ReferenceID: tInput.ReferenceID\n }\n if (tInput.CommunicationSummaries) {\n tInput.CommunicationSummaries.filter(cs => cs.MinutesSummary && cs.CommunicationID).forEach(commSummary => {\n entry.MinutesSummaries = entry.MinutesSummaries || [];\n entry.MinutesSummaries.push({ MinutesSummary: commSummary.MinutesSummary, ReferenceID: commSummary.CommunicationID })\n })\n }\n });\n } else {\n const textType = this.props.actionTypes.find(type => type.ActionReferenceType === 'Text');\n if (textType) {\n activityRefs = [{\n ActionReferenceTypeID: textType.ActionReferenceTypeID,\n ActionReferenceType: textType.ActionReferenceType,\n ReferenceText: desc\n }];\n }\n }\n entry.MinutesActivities.push(Object.assign(selectedMotion, {\n MinutesEntryID: entry.MinutesEntryID,\n ActivityReferences: activityRefs,\n Description: desc,\n Sequence: Math.max(...entry.MinutesActivities.map(m => m.Sequence || 0)) + 1\n }));\n //User cannot add an activity to an entry while they are editing that entry\n if (this.state.newEntries[entryIndex]) {\n let newEntries = [...this.state.newEntries];\n newEntries[entryIndex] = null;\n this.setState({\n newEntries: newEntries\n })\n }\n this.props.onEntryChange(entryIndex, entry, this.props.currentActivitySequence);\n //Set MinutesCategoryID if we're adding an order of business entry and entryText\n if (!entry.MinutesCategoryID) {\n entry.MinutesCategoryID = this.props.formData.MinutesCategoryID;\n entry.EntryText = desc;\n }\n this.props.handleSaveEntry(entry);\n\n selectedMotions[entryIndex] = null;\n templateInputs = [];\n this.setState({\n selectedMotion: '',\n selectedMotions: selectedMotions,\n templateInputs: templateInputs,\n showSwitchCategory: false,\n selectedSwitchCategory: null,\n });\n }\n\n handleTemplateChange(entryIndex, activityIndex, referenceIndex, reference, previousValue) {\n let templateInputs = [...this.state.templateInputs];\n templateInputs[referenceIndex] = reference;\n //Used when adding the motion to know whether to use the existing description or concatenate together the action reference values\n //If they have change a value it is save to say they want the the description to be the action references stringed together\n if (!this.state.templatedEdited) {\n this.setState({\n templatedEdited: true\n });\n }\n //if they are selecting a communication, add minutessummaries for each communicationsummary on that communication\n if (reference.ActionReferenceType === 'Communication') {\n //set the communication data for the entry level\n templateInputs[entryIndex].CommunicationID = reference.ReferenceID;\n templateInputs[entryIndex].CommunicationDate = reference.CommunicationDate;\n if (reference.CommunicationNumber) {\n templateInputs[entryIndex].CommunicationNumber = Number(reference.CommunicationNumber);\n }\n //set minutessummaries array if not already available\n templateInputs[entryIndex].MinutesSummaries = templateInputs[entryIndex].MinutesSummaries || [];\n //if they are changing from one communication to another, delete the summaries related to the old communication\n if (previousValue && previousValue.ReferenceID) {\n templateInputs[entryIndex].MinutesSummaries = templateInputs[entryIndex].MinutesSummaries.filter(ms => ms.ModificationDate);\n templateInputs[entryIndex].MinutesSummaries.filter(ms => ms.ReferenceID === previousValue.ReferenceID).forEach(ms => ms.DeletionDate = moment())\n }\n if (reference.CommunicationSummaries) {\n reference.CommunicationSummaries.filter(cs => cs.MinutesSummary && cs.CommunicationID).forEach(commSummary => {\n templateInputs[entryIndex].MinutesSummaries.push({ MinutesSummary: commSummary.MinutesSummary, ReferenceID: commSummary.CommunicationID })\n })\n }\n }\n this.setState({\n templateInputs: templateInputs\n });\n }\n\n handleMotionChange(entryIndex, val) {\n let selectedMotions = [...this.state.selectedMotions];\n let templateInputs = [...this.state.templateInputs];\n selectedMotions[entryIndex] = val;\n templateInputs[entryIndex] = val ? JSON.parse(JSON.stringify(val.ActionReferences)) : null;\n this.setState({\n selectedMotions: selectedMotions,\n templateInputs: templateInputs,\n }, () => {\n if (val && val.ActionReferences && val.ActionReferences.find(ar => ar.ActionReferenceType === \"LegislationText\")) {\n this.getTextList();\n }\n });\n }\n\n\n handleSelectedMotionDescriptionChange(e) {\n let selectedMotion = { ...this.state.selectedMotion };\n selectedMotion.Description = e.target.value;\n this.setState({\n selectedMotion\n });\n }\n\n getTextList() {\n const entries = this.props.formData.MinutesEntries;\n entries.forEach(entry => {\n if (entry.LegislationID && !this.state.textList.find(text => text.LegislationID === entry.LegislationID)) {\n this.props.actions.getTextList('?legislationID=' + entry.LegislationID + '&sessionID=' + this.props.sessionId)\n .then(() => {\n let textList = [...this.props.bills.textList];\n textList.forEach(text => {\n text.label = text.DocumentCode;\n text.value = text.LegislationTextID;\n });\n this.setState(state => ({\n textList: state.textList.concat(textList)\n }));\n });\n }\n })\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.currentActivitySequence !== this.props.currentActivitySequence) {\n this.setState({\n selectedMotions: [],\n newEntries: [],\n templateInputs: [],\n templatedEdited: false,\n showSwitchCategory: false,\n selectedSwitchCategory: null,\n });\n this.getCatActionList();\n }\n }\n\n componentDidMount() {\n this.getCatActionList();\n this.getNonLegislativeActionList();\n }\n\n getCatActionList() {\n //Get the calendar action reference data\n const catId = this.props.formData.CalendarCategoryTypeID;\n const referenceParams = `?calendarCategoryTypeID=${catId}&chamberCode=S`;\n this.props.actions.getReferences(referenceParams)\n .then(() => {\n let motionOptions = this.props.calendar.references;\n motionOptions.forEach(reference => {\n reference.label = `${reference.EventCode} ${reference.Description}`;\n reference.value = reference.CalendarActionID;\n });\n this.setState({\n motionOptions: motionOptions\n });\n });\n }\n\n toggleMenu(entryIndex, e) {\n if (e) {\n //Do not hide the small motion form if a child of the form is focused\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n }\n this.setState({\n showMenu: entryIndex\n }, () => {\n if (this.menuBoxRef.current) {\n this.menuBoxRef.current.focus();\n }\n });\n }\n\n addEntry(entryIndex, position) {\n let entries = [...this.props.formData.MinutesEntries];\n const newEntry = {\n IsOOB: entries[entryIndex].IsOOB,\n IsPublic: false,\n MinutesCategoryID: entries[entryIndex].MinutesCategoryID\n }\n entries.splice(entryIndex + position, 0, newEntry);\n entries.forEach((entry, idx) => {\n entry.Sequence = idx + 1\n });\n this.props.handleSaveEntry(entries);\n this.setState({\n showMenu: -1,\n newEntries: [],\n selectedMotions: []\n });\n }\n\n handleCommentBoxChange(content) {\n this.setState({\n commentBoxContent: content\n });\n }\n\n toggleCommentBox(show) {\n const entries = this.props.formData.MinutesEntries;\n let commentBoxContent = [];\n if (entries[show] && entries[show].MinutesSummaries) {\n if (entries[show].MinutesSummaries.length !== 0) {\n commentBoxContent = entries[show].MinutesSummaries;\n }\n }\n this.setState({\n showCommentBox: show,\n commentBoxContent: commentBoxContent\n });\n }\n\n saveComment() {\n let entries = [...this.props.formData.MinutesEntries];\n if (entries[this.state.showCommentBox]) {\n let entry = entries[this.state.showCommentBox];\n entry.MinutesSummaries = this.state.commentBoxContent;\n this.props.handleSaveEntry(entry);\n this.setState({\n showCommentBox: false\n });\n }\n }\n\n toggleShowDeleted(entryIndex) {\n let entries = [...this.state.newEntries];\n entries[entryIndex].showDeleted = !entries[entryIndex].showDeleted;\n this.setState({\n newEntries: entries\n });\n }\n\n getNonLegislativeActionList() {\n //Get the non legislative action reference data\n this.props.actions.getBillEventReferences(\"?isActive=true\").then(() => {\n let references = [...this.props.bills.billEventRef].filter(ref => ref.AdministrativeAction);\n references.forEach(ref => {\n ref.label = `${ref.EventCode} ${ref.CalendarDescription}`;\n ref.value = `${ref.EventCode}-${ref.IsPassed}`\n });\n this.setState({\n references: references\n });\n });\n }\n\n handleNewMotionChange(value) {\n this.setState({\n selectedMotion: value,\n templateInputs: value ? JSON.parse(JSON.stringify(value.ActionReferences)) : [],\n templatedEdited: false\n });\n }\n\n toggleSwitchCategory(entryIndex) {\n this.setState({\n showSwitchCategory: !this.state.showSwitchCategory\n }, () => {\n if (this.state.showSwitchCategory) {\n const dropdownOptions = this.props.categories.filter(c => c.CalendarCategoryTypeID === this.props.formData.CalendarCategoryTypeID && c.MinutesCategoryID !== this.props.formData.MinutesCategoryID);\n if (dropdownOptions.length === 1) {\n this.handleSwitchCategoryChange(dropdownOptions[0]);\n }\n this.toggleSelectEntry(entryIndex);\n this.toggleMenu(-1);\n } else {\n this.setState({ checkedBills: [] })\n this.handleSwitchCategoryChange(null);\n }\n });\n }\n\n handleSwitchCategoryChange(val) {\n this.setState({\n selectedSwitchCategory: val\n });\n }\n\n switchCategory() {\n if (this.state.checkedBills.length && this.state.selectedSwitchCategory) {\n this.setState({ switchingCategories: true }, () => {\n const origSequence = this.props.currentActivitySequence;\n let entries = [...this.props.formData.MinutesEntries].filter((e, i) => this.state.checkedBills[i]);\n this.props.bulkMoveEntry(entries, origSequence - 1, this.state.selectedSwitchCategory.MinutesCategoryID);\n this.setState({ checkedBills: [], showSwitchCategory: false, selectedSwitchCategory: null, switchingCategories: false })\n })\n }\n }\n\n toggleSelectEntry(billIndex, e) {\n let checkedBills = [...this.state.checkedBills];\n let lastCheckedBill = this.state.lastCheckedBill;\n if (e && e.nativeEvent.shiftKey && this.state.lastCheckedBill !== -1) {\n checkedBills = checkedBills.fill(false);\n for (let i = 0; i < Math.abs(billIndex - this.state.lastCheckedBill); i++) {\n const index = this.state.lastCheckedBill + i * (billIndex - this.state.lastCheckedBill) / Math.abs(billIndex - this.state.lastCheckedBill);\n checkedBills[index] = true;\n }\n } else {\n lastCheckedBill = !checkedBills[billIndex] ? billIndex : this.state.lastCheckedBill;\n }\n checkedBills[billIndex] = !checkedBills[billIndex]\n this.setState({\n checkedBills: checkedBills,\n lastCheckedBill: lastCheckedBill\n });\n }\n\n render() {\n const { selectedMotion, references } = this.state;\n const fontSize = '0.8em';\n const selectStyle = {\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: fontSize,\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: fontSize,\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n option: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n dropdownIndicator: styles => ({\n ...styles,\n padding: '5px'\n }),\n }\n const showDeletedItemsCheckbox = (entry) => {\n return !!entry.MinutesActivities.find(act => act.DeletionDate)\n }\n // Sometimes the deleted items are shown and other times they are not. If they are not shown then the first activity might not be the first activity on the screen.\n // So this variable is used to figure out whether to show the hr or not that seperates activities.\n const getIndexOfFirstActivity = entry => {\n if (entry.showDeleted) {\n return 0\n } else {\n return entry.MinutesActivities.findIndex(act => !act.DeletionDate);\n }\n }\n\n return (\n <div className=\"user-forms\">\n <div className=\"dlas-forms tooltip-wrap\">\n <form>\n {this.props.formData.CalendarCategoryTypeID == 132 /* Order of Business */ &&\n <>\n <div className=\"multi-row eight-and-one no-margin\" style={{ marginBottom: \"20px\" }}>\n <div className=\"inner-grid two\">\n <div>\n <label>Motion</label>\n <Select\n value={selectedMotion}\n options={references}\n onChange={this.handleNewMotionChange}\n styles={selectStyle}\n isClearable\n />\n </div>\n <div>\n <label>Description</label>\n <input\n value={this.state.templateInputs.length > 0 ? '' : selectedMotion?.Description || selectedMotion?.CalendarDescription || ''}\n placeholder={selectedMotion ? this.state.templateInputs.length > 0 ? \"See below...\" : \"\" : \"Select motion...\"}\n disabled={!selectedMotion || this.state.templateInputs.length > 0}\n onChange={this.handleSelectedMotionDescriptionChange}\n />\n </div>\n </div>\n <div className=\"inner-grid two\">\n <div>\n <br />\n <button type='button' disabled={!this.state.selectedMotion || this.props.categoryFormDisabled} className='button' onClick={() => this.insertMotion(-1)}>Add Motion</button>\n </div>\n </div>\n </div>\n {this.state.templateInputs.length > 0 &&\n <div className=\"multi-row small-two-one-alt no-margin\">\n <br />\n <div>\n <div>\n <span className='small-text txt-greyed'>{renderHTML(this.state.templateInputs.map((tInput, i) => {\n if (!tInput.ReferenceText && tInput.ActionReferenceType !== \"Text\") {\n return `[${tInput.ActionReferenceType}]`\n }\n return tInput.ReferenceText\n }).join(''))}</span>\n </div>\n <InputTypes\n newEvent={this.state.selectedMotion}\n memberList={this.props.memberList}\n committeeList={this.props.committeeList}\n communicationList={this.props.communicationList}\n eventList={this.state.reconsiderationEvents}\n handleChange={this.handleTemplateChange}\n entryIndex={0}\n activityIndex={0}\n references={this.state.templateInputs}\n />\n </div>\n </div>\n }\n </>\n }\n </form>\n {this.state.showCommentBox !== false &&\n <CommentBox\n toggleBox={this.toggleCommentBox}\n handleCommentBoxChange={this.handleCommentBoxChange}\n comments={this.state.commentBoxContent}\n saveComment={this.saveComment}\n />\n }\n {this.props.formData.MinutesEntries.length ?\n <div className=\"flex-row flex-end\" style={{ marginBottom: '5px' }}>\n {this.state.showSwitchCategory &&\n <div className=\"inner-grid\" style={{ gap: '5px', gridTemplateColumns: '20px 4fr .1fr' }}>\n <div className=\"inner-grid align-center\">\n <button onClick={this.toggleSwitchCategory} type=\"button\" className=\"icon delete\"></button>\n </div>\n <Select\n value={this.state.selectedSwitchCategory}\n options={this.props.categories.filter(c => c.CalendarCategoryTypeID === this.props.formData.CalendarCategoryTypeID && c.MinutesCategoryID !== this.props.formData.MinutesCategoryID)}\n getOptionLabel={opt => this.props.getCategoryDescriptionText(opt)}\n onChange={this.handleSwitchCategoryChange}\n styles={selectStyle}\n />\n <button onClick={this.switchCategory} disabled={!this.state.checkedBills.length || this.state.switchingCategories || !this.state.selectedSwitchCategory} type=\"button\" className=\"button float-right\">{this.state.switchingCategories ? <div className=\"small-spinner\" /> : 'Switch'}</button>\n </div>\n }\n </div>\n : null\n }\n <div className={this.props.disableChanges ? 'dnd-disabled' : ''}>\n <DragDropContext onDragEnd={this.onEntryDragEnd}>\n <Droppable droppableId={`entries-droppable`}>\n {(provided, snapshot) =>\n <div ref={provided.innerRef} style={getListStyle(snapshot.isDraggingOver)}>\n {this.props.formData.MinutesEntries.map((entry, entryIndex) =>\n <Draggable isDragDisabled={this.props.categoryFormDisabled} key={`${entry.MinutesEntryID}-${entry.Sequence}`} draggableId={`${entry.MinutesEntryID}-${entry.Sequence}`} index={entryIndex}>\n {(provided, snapshot) =>\n <div {...this.state.newEntries[entryIndex] ? null : { ...provided.dragHandleProps }} ref={provided.innerRef} {...provided.draggableProps} className=\"section-content\">\n <div>\n {this.state.newEntries[entryIndex] ?\n <React.Fragment>\n {showDeletedItemsCheckbox(this.state.newEntries[entryIndex]) &&\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.toggleShowDeleted(entryIndex)}>\n <input type=\"checkbox\" checked={this.state.newEntries[entryIndex].showDeleted} />\n <span className=\"slider\"></span>\n </div>\n <label style={{ fontSize: \"12px\" }} className=\"checkbox-label\">Show Deleted</label>\n </div>}\n <div className=\"no-gap-grid two-col-sidebar\">\n <DragDropContext onDragEnd={res => this.onActivityDragEnd(res, entryIndex)}>\n <Droppable droppableId={`activities-${entryIndex}-droppable`}>\n {(provided, snapshot) =>\n <div ref={provided.innerRef} style={getListStyle(snapshot.isDraggingOver)}>\n {this.state.newEntries[entryIndex].MinutesActivities && this.state.newEntries[entryIndex].MinutesActivities.map((activity, activityIndex) => {\n if (!this.state.newEntries[entryIndex].showDeleted && activity.DeletionDate) {\n return null;\n } else {\n const inputValue = (this.state.newEntries[entryIndex].MinutesActivities[activityIndex].Description || (this.state.newEntries[entryIndex].MinutesActivities[activityIndex].ActivityReferences && this.state.newEntries[entryIndex].MinutesActivities[activityIndex].ActivityReferences.map((tInput, i) => {\n if (!tInput.ReferenceText && tInput.ActionReferenceType !== \"Text\") {\n return `[${tInput.ActionReferenceType}]`\n }\n return tInput.ReferenceText\n }).join('')));\n return (<Draggable key={`${activity.MinutesActivityID}-${activity.Sequence}`} draggableId={`${activity.MinutesActivityID}-${activity.Sequence}`} index={activityIndex}>\n {(provided2, snapshot) =>\n <div\n ref={provided2.innerRef}\n {...provided2.draggableProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided2.draggableProps.style\n )}>\n {getIndexOfFirstActivity(this.state.newEntries[entryIndex]) !== activityIndex && <hr className=\"faded-line\" />}\n <div className=\"no-gap-grid two-col-sidebar-backwards\">\n <div {...provided2.dragHandleProps}>\n <button className=\"button draggable\">Drag and drop</button>\n </div>\n <div>\n <div className=\"no-gap-grid two-col-sidebar\">\n <div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>\n <span\n style={{ textDecoration: this.state.newEntries[entryIndex].MinutesActivities[activityIndex].DeletionDate ? 'line-through' : 'none' }}\n className=\"small-text\">\n {renderHTML(((this.state.newEntries[entryIndex].MinutesActivities[activityIndex].tempDescription ?? this.state.newEntries[entryIndex].MinutesActivities[activityIndex].Description) || this.state.newEntries[entryIndex].MinutesActivities[activityIndex].ActivityReferences.map(tInput => {\n if (!tInput.ReferenceText && tInput.ActionReferenceType !== \"Text\") {\n return `[${tInput.ActionReferenceType}]`\n }\n return tInput.ReferenceText\n }).join('')) + ((this.state.newEntries[entryIndex].MinutesActivities[activityIndex].tempVoteTally ?? this.state.newEntries[entryIndex].MinutesActivities[activityIndex].VoteTally) ? ' ' + (this.state.newEntries[entryIndex].MinutesActivities[activityIndex].tempVoteTally ?? this.state.newEntries[entryIndex].MinutesActivities[activityIndex].VoteTally) : ''))}\n </span>\n {this.state.newEntries[entryIndex].MinutesActivities.find(ma => ma.ActivityReferences?.find(ar => ar.ActionReferenceType !== \"Text\")) && (!this.state.editingActivityDescription[entryIndex] || !this.state.editingActivityDescription[entryIndex][activityIndex]) && <a className={`icon edit`} onClick={() => this.toggleEditActivityDescription(entryIndex, activityIndex)} />}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>\n {this.state.editingActivityDescription[entryIndex] && this.state.editingActivityDescription[entryIndex][activityIndex] &&\n <>\n <div style={{ width: '100%', display: 'flex', gap: '5px' }}>\n <textarea style={{ width: this.state.newEntries[entryIndex].MinutesActivities[activityIndex].VoteTally !== undefined ? '75%' : '100%' }} value={this.state.newEntries[entryIndex].MinutesActivities[activityIndex].tempDescription ?? inputValue} onChange={(e) => this.handleActivityDescriptionChange(e.target.value, \"Description\", entryIndex, activityIndex)} />\n {this.state.newEntries[entryIndex].MinutesActivities[activityIndex].VoteTally !== undefined && <EditVoteTally value={this.state.newEntries[entryIndex].MinutesActivities[activityIndex].tempVoteTally} onChange={(e) => this.handleActivityDescriptionChange(e.target.value, \"VoteTally\", entryIndex, activityIndex)} />}\n </div>\n <div style={{ display: 'flex', gap: '5px' }}>\n <a className={`icon save`} onClick={() => this.handleActivityDescriptionChange(null, null, entryIndex, activityIndex, true)} />\n <a className={`icon delete`} onClick={() => this.toggleEditActivityDescription(entryIndex, activityIndex)} />\n </div>\n </>\n }\n </div>\n <div style={{ position: 'relative', zIndex: '2' }}>\n {!this.state.newEntries[entryIndex].MinutesActivities[activityIndex].DeletionDate &&\n <>\n <InputTypes\n style={{ display: \"inline-block\" }}\n committeeList={this.props.committeeList}\n communicationList={this.props.communicationList}\n memberList={this.props.memberList}\n actionTypes={this.props.actionTypes}\n handleChange={this.handleChange}\n entryIndex={entryIndex}\n activityIndex={activityIndex}\n references={this.state.newEntries[entryIndex].MinutesActivities[activityIndex].ActivityReferences || []}\n textList={this.state.textList.filter(text => this.state.newEntries[entryIndex].LegislationID === text.LegislationID)}\n />\n {this.state.newEntries[entryIndex].MinutesActivities[activityIndex].VoteTally !== undefined && !this.state.newEntries[entryIndex].MinutesActivities.find(ma => ma.ActivityReferences?.find(ar => ar.ActionReferenceType !== \"Text\")) && <EditVoteTally value={this.state.newEntries[entryIndex].MinutesActivities[activityIndex].tempVoteTally} onChange={(e) => this.handleActivityDescriptionChange(e.target.value, \"VoteTally\", entryIndex, activityIndex)} />}\n </>\n }\n </div>\n </div>\n <div>\n {!this.state.newEntries[entryIndex].MinutesActivities[activityIndex].DeletionDate ?\n <button onClick={() => this.removeActivity(entryIndex, activityIndex)} title={\"Delete\"} type=\"button\" className=\"button remove\"></button>\n :\n <button onClick={() => this.addBackActivity(entryIndex, activityIndex)} title={\"Re-add\"} type=\"button\" className=\"button add\"></button>\n }\n </div>\n </div>\n\n </div>\n </div>\n </div>}\n </Draggable>)\n }\n })}\n {provided.placeholder}\n </div>\n }\n </Droppable>\n </DragDropContext>\n <div style={{ position: \"relative\" }}>\n <div className=\"inline-list bill-grid-actions\" key={entry.MinutesEntryID}>\n <button onClick={() => this.saveChange(entryIndex)} title={\"Save\"} type=\"button\" className=\"icon save\"></button>\n <button onClick={() => this.toggleEdit(entryIndex)} title={\"Cancel\"} type=\"button\" className=\"icon delete\"></button>\n </div>\n </div>\n </div>\n </React.Fragment>\n :\n <div className=\"flex-row flex-vertical-center\">\n <div className=\"flex-row flex-vertical-center inline-list\">\n <div>\n <span className=\"icon menu\" onClick={(e) => this.toggleMenu(entryIndex)}></span>\n {this.state.showMenu === entryIndex &&\n <div style={{ marginLeft: '-25px', width: this.state.showSwitchCategory !== entryIndex ? 'auto' : '' }} className=\"info-box blue\" ref={this.menuBoxRef} onBlur={(e) => this.toggleMenu(-1, e)} contentEditable suppressContentEditableWarning={true}>\n <div contentEditable={false}>\n <div>\n <button type=\"button\" disabled={this.props.categoryFormDisabled} onClick={() => this.addEntry(entryIndex, 0)} className=\"button-link\">Add Entry Above</button>\n </div>\n <div>\n <button type=\"button\" disabled={this.props.categoryFormDisabled} onClick={() => this.addEntry(entryIndex, 1)} className=\"button-link\">Add Entry Below</button>\n </div>\n {this.props.categories.filter(c => c.CalendarCategoryTypeID === this.props.formData.CalendarCategoryTypeID && c.MinutesCategoryID !== this.props.formData.MinutesCategoryID).length ?\n <div>\n <button type=\"button\" disabled={this.props.categoryFormDisabled} onClick={() => this.toggleSwitchCategory(entryIndex)} className=\"button-link\">Switch Category</button>\n </div>\n : null\n }\n </div>\n {this.state.showSwitchCategory &&\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={this.state.checkedBills[entryIndex]}\n onChange={(e) => this.toggleSelectEntry(entryIndex, e)}\n />\n }\n </div>\n }\n </div>\n <div>\n {!entry.MinutesActivities || entry.MinutesActivities.length === 0 &&\n <React.Fragment>\n <span>\n {entry.EntryText ? entry.EntryText : (\n this.props.formData.CategoryType === \"Chairmans Report\" && (\n entry.MinutesSummaries && entry.MinutesSummaries.find(ms => ms.CommitteeName) ?\n <>From {entry.MinutesSummaries.find(ms => ms.CommitteeName).CommitteeName}: <em>No chair's reports included</em></>\n :\n <em>No chair's reports included</em>\n )\n )\n }\n </span>\n {this.props.formData.CategoryType === \"Chairmans Report\" && <React.Fragment><i data-tip={`You may choose to include or exclude one or more chair's reports from this committee using the checkboxes and then\\nregenerating the summary using the button that will appear at the top of the category upon interacting with a checkbox.`}\n className={`icon notification`} style={{ marginLeft: '5px' }} />\n <ReactTooltip key={new Date()} />\n </React.Fragment>}\n </React.Fragment>\n }\n {entry.MinutesActivities && entry.MinutesActivities.filter(a => !a.DeletionDate).map((activity, activityIndex) =>\n <span key={activityIndex}>\n {activityIndex !== 0 && ', '}{renderHTML(activity.Description)}{activity.VoteTally ? ' ' + activity.VoteTally : null}\n </span>\n )}\n </div>\n </div>\n <div>\n <div className=\"flex-row flex-vertical-center inline-list\">\n <button disabled={this.props.disableChanges || this.props.categoryFormDisabled} onClick={() => this.toggleCommentBox(entryIndex)} type=\"button\" className=\"button-link\">{entry.MinutesSummaries && entry.MinutesSummaries.length > 0 ? \"Edit\" : \"Add\"} Comment</button>\n {(entry.EntryText || (entry.MinutesActivities && entry.MinutesActivities.length !== 0)) &&\n <React.Fragment>\n {!this.state.editing &&\n <button disabled={this.props.disableChanges || this.props.categoryFormDisabled} onClick={() => this.toggleEdit(entryIndex)} type=\"button\" className=\"button-link\">Edit Motions</button>\n }\n <button disabled={this.props.disableChanges || this.props.categoryFormDisabled} type=\"button\" onClick={() => this.props.toggleMoveEntry(true, this.props.currentActivitySequence - 1, entryIndex)} className=\"button\">Move</button>\n </React.Fragment>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <hr className=\"faded-line\" />\n {/* Hide motion form unless it's reading of the journal if the category is order of business, or if its a chairmans report category */}\n {(this.props.formData.CalendarCategoryTypeID !== 132 || entry.MinutesActivities.find(x => x.Description === \"Reading of the Journal\")) && this.props.formData.CategoryType !== 'Chairmans Report' &&\n <div className=\"multi-row one-small-small no-margin\">\n <div>\n <label>{entry.LegislationNumber ? entry.LegislationNumber + \" Motion\" : \"Motion\"}</label>\n <Select\n options={this.props.formData.CalendarCategoryTypeID !== 132 ? this.state.motionOptions : this.state.motionOptions.filter(x => x.CalendarActionID === 2011)}\n value={this.state.selectedMotions[entryIndex]}\n onChange={val => this.handleMotionChange(entryIndex, val)}\n styles={selectStyle}\n isClearable\n />\n </div>\n <div>\n <br />\n <button type='button' disabled={!this.state.selectedMotions[entryIndex] || this.props.categoryFormDisabled} className='button' onClick={() => this.insertMotion(entryIndex)}>Add Motion</button>\n </div>\n </div>\n }\n {this.state.templateInputs[entryIndex] && this.state.templateInputs[entryIndex].length > 0 &&\n <div>\n <br />\n <div>\n <div>\n <span className='txt-greyed'>\n {this.state.templateInputs[entryIndex].map((tInput, tIndex) =>\n <React.Fragment key={tIndex}>\n {tInput.ReferenceText ? tInput.ReferenceText : `[${tInput.ActionReferenceType}]`}\n </React.Fragment>\n )}\n </span>\n </div>\n <InputTypes\n memberList={this.props.memberList}\n committeeList={this.props.committeeList}\n communicationList={this.props.communicationList}\n handleChange={this.handleTemplateChange}\n entryIndex={entryIndex}\n activityIndex={0}\n references={this.state.templateInputs[entryIndex] || []}\n textList={this.state.textList.filter(text => entry.LegislationID === text.LegislationID ? true : false)}\n />\n </div>\n </div>\n }\n {this.props.formData.CategoryType !== 'Chairmans Report' && <br />}\n {this.state.templateInputs[entryIndex] ?\n this.state.templateInputs[entryIndex].MinutesSummaries && this.state.templateInputs[entryIndex].MinutesSummaries.filter(ms => !ms.DeletionDate).map((summary, summaryIndex) =>\n <div style={{ padding: '5px 0px', fontSize: '0.8em' }}>\n {renderHTML(summary.MinutesSummary)}\n </div>\n )\n : this.state.newEntries[entryIndex] ?\n !this.state.newEntries[entryIndex].DeletionDate && this.state.newEntries[entryIndex].MinutesSummaries && this.state.newEntries[entryIndex].MinutesSummaries.filter(ms => !ms.DeletionDate).map((summary, summaryIndex) =>\n <div style={{ padding: '5px 0px', fontSize: '0.8em' }}>\n {renderHTML(summary.MinutesSummary)}\n </div>\n )\n : !entry.DeletionDate && entry.MinutesSummaries && entry.MinutesSummaries.filter(ms => !ms.DeletionDate).map((summary, summaryIndex) =>\n <React.Fragment key={summaryIndex}>\n {this.props.formData.CategoryType === 'Chairmans Report' ?\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.props.toggleChairsReport(this.props.currentActivitySequence - 1, entryIndex, summaryIndex)}>\n <input type=\"checkbox\" checked={summary.IsActive} />\n <span className=\"slider\"></span>\n </div>\n <label className=\"checkbox-label no-background\">{summary.MinutesDate && moment(summary.MinutesDate).format(\"M/D/yyyy\") + (summary.MinutesNumber ? ' (' + summary.MinutesNumber + ')' : '') + ':'} {renderHTML(summary.MinutesSummary)}</label>\n </div>\n :\n <div style={{ padding: '5px 0px', fontSize: '0.8em' }}>\n {renderHTML(summary.MinutesSummary)}\n </div>\n }\n <hr className=\"faded-line\" />\n </React.Fragment>\n )}\n </div>}\n </Draggable>\n )}\n {provided.placeholder}\n </div>\n }\n </Droppable>\n </DragDropContext>\n </div>\n </div>\n </div >\n );\n }\n}\n\nconst EditVoteTally = props => <textarea style={{ width: '25%' }} value={props.value} onChange={props.onChange} />\n\nexport default connect(\n (state) => {\n const { calendar, minutes, bills } = state;\n return {\n calendar,\n minutes,\n bills\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, calendarActionCreators, minutesActionCreators, billActionCreators), dispatch)\n }\n },\n null,\n {\n forwardRef: true\n }\n)(NonLegislativeForm)","import React from \"react\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { voteActionCreators } from '../../../../stores/lis-votes-store';\nimport Select from 'react-select'\nimport { calendarActionCreators } from \"../../../../stores/lis-calendar-store\";\nimport { billActionCreators } from \"../../../../stores/lis-legislation-store\";\nimport InputTypes from \"../input-types\";\nimport { LargeListSelect } from '../../../../lis-shared/lis-layout/components/lis-forms-component';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport CommentBox from './comment-box';\nimport { minutesActionCreators } from \"../../../../stores/lis-minutes-store\";\nimport { Link } from 'react-router-dom';\nimport moment from \"moment\";\n\nconst getItemStyle = (isDragging, draggableStyle, pendingDeletion) => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n // change background colour if dragging\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: pendingDeletion ? 'red' : 'none',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%',\n});\n\nclass LegislativeForm extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n selectedMotion: '',\n insertEntry: [],\n newEntries: [],\n references: [],\n nonLegislativeActionReferences: [],\n fullEventList: [],\n votesToBeSaved: [],\n savingVotes: [],\n togglingEdit: {},\n templateInputs: [],\n templatedEdited: false,\n smallMotionForm: -1,\n textList: [],\n reconsiderationEvents: [],\n showMenu: -1,\n selectedBillNumber: [],\n showCommentBox: false,\n commentBoxContent: [],\n showAuxBillForm: false,\n auxBill: '',\n savingAuxBill: false,\n savingNonLegAction: false,\n checkedBills: [],\n editingActivityDescription: {},\n otherBillEventOptions: [],\n otherEvent: \"\",\n otherEventSelected: false\n };\n this.closeNewEntries = this.closeNewEntries.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.insertMotion = this.insertMotion.bind(this);\n this.removeMotion = this.removeMotion.bind(this);\n this.unSelectOtherEvent = this.unSelectOtherEvent.bind(this);\n this.handleOtherEventChange = this.handleOtherEventChange.bind(this);\n this.getOtherBillEventOptions = this.getOtherBillEventOptions.bind(this);\n this.filterBillEventReferences = this.filterBillEventReferences.bind(this);\n this.handleBillChange = this.handleBillChange.bind(this);\n this.handleMotionChange = this.handleMotionChange.bind(this);\n this.handleSelectedMotionDescriptionChange = this.handleSelectedMotionDescriptionChange.bind(this);\n this.handleTemplateChange = this.handleTemplateChange.bind(this);\n this.onActivityDragEnd = this.onActivityDragEnd.bind(this);\n this.onEntryDragEnd = this.onEntryDragEnd.bind(this);\n this.removeActivity = this.removeActivity.bind(this);\n this.addBackActivity = this.addBackActivity.bind(this);\n this.addAllEntries = this.addAllEntries.bind(this);\n this.getCatActionList = this.getCatActionList.bind(this);\n this.getNonLegislativeActionList = this.getNonLegislativeActionList.bind(this);\n this.getTextList = this.getTextList.bind(this);\n this.toggleSmallMotionForm = this.toggleSmallMotionForm.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.addEntry = this.addEntry.bind(this);\n this.handleBillNumberChange = this.handleBillNumberChange.bind(this);\n this.applyLegislationToEntry = this.applyLegislationToEntry.bind(this);\n this.handleCommentBoxChange = this.handleCommentBoxChange.bind(this);\n this.toggleCommentBox = this.toggleCommentBox.bind(this);\n this.saveComment = this.saveComment.bind(this);\n this.toggleShowDeleted = this.toggleShowDeleted.bind(this);\n this.toggleAuxBillAdd = this.toggleAuxBillAdd.bind(this);\n this.setAuxBill = this.setAuxBill.bind(this);\n this.addAuxBill = this.addAuxBill.bind(this);\n this.toggleSwitchCategory = this.toggleSwitchCategory.bind(this);\n this.handleSwitchCategoryChange = this.handleSwitchCategoryChange.bind(this);\n this.switchCategory = this.switchCategory.bind(this);\n this.toggleSelectEntry = this.toggleSelectEntry.bind(this);\n this.getReconsiderationEvents = this.getReconsiderationEvents.bind(this);\n this.toggleEditActivityDescription = this.toggleEditActivityDescription.bind(this);\n this.unSelectOtherEventEdit = this.unSelectOtherEventEdit.bind(this);\n this.handleOtherActivityDescriptionChange = this.handleOtherActivityDescriptionChange.bind(this);\n\n this.menuBoxRef = React.createRef();\n this.motionRef = React.createRef();\n this.motionDropdownRef = React.createRef();\n }\n\n closeNewEntries() {\n this.setState({\n newEntries: [],\n smallMotionForm: -1\n });\n }\n\n saveChange(entryIndex) {\n let entry = this.state.newEntries[entryIndex];\n //If this entry has a vote id then the vote description needs to be saved. So put a button on the form for the user to be able to do that\n if (entry.MinutesActivities && entry.MinutesActivities.find(activity => activity.VoteID)) {\n let votesToBeSaved = this.state.votesToBeSaved;\n votesToBeSaved[entryIndex] = true;\n this.setState({\n votesToBeSaved: votesToBeSaved\n });\n }\n\n let activitiesToBeSaved = [];\n\n //Overwrite any activities with their new OtherEvent if present\n entry.MinutesActivities.forEach((activity, activityIndex) => {\n if (activity.OtherEvent) {\n activity.DeletionDate = moment();\n\n let otherEvent = { ...activity.OtherEvent }\n otherEvent.MinutesEntryID = entry.MinutesEntryID;\n otherEvent.InPreview = true;\n otherEvent.IsPublic = false;\n otherEvent.IsPassed = true;\n\n activitiesToBeSaved.push(activity);\n activitiesToBeSaved.push(otherEvent);\n } else {\n activitiesToBeSaved.push(activity)\n }\n })\n\n entry.MinutesActivities = activitiesToBeSaved;\n\n //save any changes to vote tallies\n let promises = [];\n entry.MinutesActivities.forEach((activity, activityIndex) => {\n if (activity.VoteTally !== undefined && !activity.ActivityReferences.find(ar => ar.ActionReferenceType !== \"Text\")) {\n promises.push(new Promise(res => {\n this.handleActivityDescriptionChange(null, \"VoteTally\", entryIndex, activityIndex, true);\n res();\n }))\n }\n })\n Promise.all(promises).then(() => {\n //Send the index of the minute entry, the entire minute entries object (so we don't have to save the entire book),\n //the value of the text input, and the sequence to show which category to update\n this.props.onEntryChange(entryIndex, entry, this.props.currentActivitySequence);\n this.props.handleSaveEntry(entry);\n //Turn it back into a span\n let newEntries = [...this.state.newEntries];\n newEntries[entryIndex] = null;\n let editingActivityDescription = { ...this.state.editingActivityDescription };\n editingActivityDescription[entryIndex] = {};\n this.setState({\n newEntries: newEntries,\n editingActivityDescription\n });\n });\n }\n\n handleChange(entryIndex, activityIndex, referenceIndex, reference, _, newMotion) {\n //Update the input with new text. Save change to this components state so it doesn't update the parent just yet (in case the user clicks the X)\n let entries = this.state.newEntries;\n //activities are reversed in display, so reverse here in order to get the indexes aligned\n let reversedActivities = entries[entryIndex].MinutesActivities.reverse();\n let activity = reversedActivities[activityIndex];\n\n if (newMotion && newMotion.value !== \"Other\") {\n let engrossingActions = [\"S4600\", \"S4601\", \"S4602\", \"S4603\", \"S4604\", \"S4605\", \"S4606\"];\n\n //Engrossing actions only ever need to say \"Engrossed\" instead of \"Engrossed by Senate\", etc.\n activity.Description = engrossingActions.includes(newMotion.EventCode)\n ? newMotion.ActionReferences[0].ReferenceText\n : newMotion.Description || newMotion.CalendarDescription\n\n activity.ActivityReferences = newMotion.ActionReferences;\n activity.EventCode = newMotion.EventCode;\n activity.CalendarActionID = newMotion.CalendarActionID;\n activity.CalendarCategoryTypeID = newMotion.CalendarCategoryTypeID;\n\n if (!activity.ActivityReferences?.length) {\n const textType = this.props.actionTypes.find(type => type.ActionReferenceType === 'Text');\n if (textType) {\n //Sometimes ActivityReferences is undefined. Make a blank one so the push does not fail\n activity.ActivityReferences = [];\n activity.ActivityReferences.push({\n ActionReferenceTypeID: textType.ActionReferenceTypeID,\n ActionReferenceType: textType.ActionReferenceType,\n ReferenceText: activity.Description\n });\n }\n }\n } else if (newMotion && newMotion.value === \"Other\") {\n if (this.state.otherBillEventOptions.length === 0) {\n this.getOtherBillEventOptions();\n }\n\n activity.OtherMotionSelected = !activity.OtherMotionSelected ? true : false;\n\n reversedActivities[activityIndex] = { ...activity };\n const unreversedActivities = reversedActivities.reverse();\n entries[entryIndex].MinutesActivities = unreversedActivities;\n\n this.setState({\n newEntries: entries\n });\n\n return;\n } else {\n activity.ActivityReferences[referenceIndex] = reference;\n const memberListEvents = [\"H6013\", \"S6013\", \"H6113\", \"S6113\", \"H6213\", \"S6213\"];\n activity.Description = activity.ActivityReferences.map((tInput, i) => {\n //For events H6013/S6013/H6113/S6113/H6213/S6213 there are sometimes incomplete lists of members. This will prevent the UI from adding blank member dropdown values to the description\n if (memberListEvents.includes(activity.EventCode) && !tInput.ReferenceText) {\n return;\n }\n\n if (!tInput.ReferenceText && !activity.ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n return activity.ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.state.fullEventList.find(e => e.EventCode === activity.ActivityReferences?.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === activity.ActivityReferences?.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : tInput.ReferenceText + (memberListEvents.includes(activity.EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && activity.ActivityReferences[i + 1] && activity.ActivityReferences[i + 1].ActionReferenceType === \"Member\" && activity.ActivityReferences[i + 1].ReferenceText ? \", \" : \"\")\n }).join('');\n }\n activity.IsPublic = false;\n //reverse back to original\n const unreversedActivities = reversedActivities.reverse();\n entries[entryIndex].MinutesActivities = unreversedActivities;\n\n this.setState({\n newEntries: entries\n });\n }\n\n handleOtherChange(entryIndex, activityIndex, referenceIndex, reference, _, newMotion) {\n //Update the input with new text. Save change to this components state so it doesn't update the parent just yet (in case the user clicks the X)\n let entries = this.state.newEntries;\n //activities are reversed in display, so reverse here in order to get the indexes aligned\n let reversedActivities = entries[entryIndex].MinutesActivities.reverse();\n let activity = reversedActivities[activityIndex];\n activity.OtherEvent = {};\n\n if (newMotion) {\n let engrossingActions = [\"S4600\", \"S4601\", \"S4602\", \"S4603\", \"S4604\", \"S4605\", \"S4606\"];\n\n //Engrossing actions only ever need to say \"Engrossed\" instead of \"Engrossed by Senate\", etc.\n activity.OtherEvent.Description = engrossingActions.includes(newMotion.EventCode)\n ? newMotion.ActionReferences[0].ReferenceText\n : newMotion.Description || newMotion.CalendarDescription\n\n activity.OtherEvent.ActivityReferences = newMotion.ActionReferences;\n activity.OtherEvent.EventCode = newMotion.EventCode;\n activity.OtherEvent.CalendarActionID = newMotion.CalendarActionID;\n activity.OtherEvent.CalendarCategoryTypeID = newMotion.CalendarCategoryTypeID;\n\n if (!activity.OtherEvent.ActivityReferences?.length) {\n const textType = this.props.actionTypes.find(type => type.ActionReferenceType === 'Text');\n if (textType) {\n //Sometimes ActivityReferences is undefined. Make a blank one so the push does not fail\n activity.OtherEvent.ActivityReferences = [];\n activity.OtherEvent.ActivityReferences.push({\n ActionReferenceTypeID: textType.ActionReferenceTypeID,\n ActionReferenceType: textType.ActionReferenceType,\n ReferenceText: activity.OtherEvent.Description\n });\n }\n }\n } else {\n activity.OtherEvent.ActivityReferences[referenceIndex] = reference;\n const memberListEvents = [\"H6013\", \"S6013\", \"H6113\", \"S6113\", \"H6213\", \"S6213\"];\n activity.OtherEvent.Description = activity.OtherEvent.ActivityReferences.map((tInput, i) => {\n //For events H6013/S6013/H6113/S6113/H6213/S6213 there are sometimes incomplete lists of members. This will prevent the UI from adding blank member dropdown values to the description\n if (memberListEvents.includes(activity.OtherEvent.EventCode) && !tInput.ReferenceText) {\n return;\n }\n\n if (!tInput.ReferenceText && !activity.OtherEvent.ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n return activity.OtherEvent.ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.state.fullEventList.find(e => e.EventCode === activity.OtherEvent.ActivityReferences?.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === activity.OtherEvent.ActivityReferences?.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : tInput.ReferenceText + (memberListEvents.includes(activity.OtherEvent.EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && activity.OtherEvent.ActivityReferences[i + 1] && activity.OtherEvent.ActivityReferences[i + 1].ActionReferenceType === \"Member\" && activity.OtherEvent.ActivityReferences[i + 1].ReferenceText ? \", \" : \"\")\n }).join('');\n }\n activity.OtherEvent.IsPublic = false;\n reversedActivities[activityIndex] = { ...activity };\n //reverse back to original\n const unreversedActivities = reversedActivities.reverse();\n entries[entryIndex].MinutesActivities = unreversedActivities;\n\n this.setState({\n newEntries: entries\n });\n }\n\n toggleOOB(entryIndex) {\n // IsOOB key is used to tell whether a piece of legislation is out of block\n let entry = this.props.formData.MinutesEntries[entryIndex];\n entry.IsOOB = !entry.IsOOB;\n this.props.onEntryChange(entryIndex, entry, this.props.currentActivitySequence);\n this.props.handleSaveEntry(entry);\n this.setState({\n showMenu: -1\n });\n }\n\n toggleSwitchCategory(entryIndex) {\n this.setState({\n showSwitchCategory: !this.state.showSwitchCategory\n }, () => {\n if (this.state.showSwitchCategory) {\n const dropdownOptions = this.props.categories.filter(c => c.CalendarCategoryTypeID === this.props.formData.CalendarCategoryTypeID && c.MinutesCategoryID !== this.props.formData.MinutesCategoryID);\n if (dropdownOptions.length === 1) {\n this.handleSwitchCategoryChange(dropdownOptions[0]);\n }\n this.toggleSelectEntry(entryIndex);\n this.toggleMenu(-1);\n } else {\n this.setState({ checkedBills: [] })\n this.handleSwitchCategoryChange(null);\n }\n });\n }\n\n handleSwitchCategoryChange(val) {\n this.setState({\n selectedSwitchCategory: val\n });\n }\n\n switchCategory() {\n if (this.state.checkedBills.length && this.state.selectedSwitchCategory) {\n this.setState({ switchingCategories: true }, () => {\n const origSequence = this.props.currentActivitySequence;\n let entries = [...this.props.formData.MinutesEntries].filter((e, i) => this.state.checkedBills[i]);\n this.props.bulkMoveEntry(entries, origSequence - 1, this.state.selectedSwitchCategory.MinutesCategoryID);\n this.setState({ checkedBills: [], showSwitchCategory: false, selectedSwitchCategory: null, switchingCategories: false })\n })\n }\n }\n\n toggleSelectEntry(billIndex, e) {\n let checkedBills = [...this.state.checkedBills];\n let lastCheckedBill = this.state.lastCheckedBill;\n if (e && e.nativeEvent.shiftKey && this.state.lastCheckedBill !== -1) {\n checkedBills = checkedBills.fill(false);\n for (let i = 0; i < Math.abs(billIndex - this.state.lastCheckedBill); i++) {\n const index = this.state.lastCheckedBill + i * (billIndex - this.state.lastCheckedBill) / Math.abs(billIndex - this.state.lastCheckedBill);\n checkedBills[index] = true;\n }\n } else {\n lastCheckedBill = !checkedBills[billIndex] ? billIndex : this.state.lastCheckedBill;\n }\n checkedBills[billIndex] = !checkedBills[billIndex]\n this.setState({\n checkedBills: checkedBills,\n lastCheckedBill: lastCheckedBill\n });\n }\n\n getOtherBillEventOptions() {\n this.props.actions.getBillEvents(\"\").then(() => {\n let billEventReferences = [...this.props.bills.billEvents];\n billEventReferences.forEach(ref => {\n ref.label = ref.LegislationDescription || ref.CalendarDescription;\n ref.value = `${ref.EventCode}-${ref.IsPassed}`\n });\n billEventReferences = this.filterBillEventReferences(billEventReferences);\n this.setState({\n otherBillEventOptions: [...billEventReferences.filter(x => {\n return x.EventCode[0] !== \"H\"\n })]\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n unSelectOtherEvent() {\n this.setState({\n otherEventSelected: false,\n templateInputs: [],\n otherEvent: \"\"\n })\n }\n\n unSelectOtherEventEdit(entryIndex, activityIndex) {\n let newEntries = [...this.state.newEntries];\n newEntries[entryIndex].MinutesActivities[activityIndex].OtherMotionSelected = false;\n delete newEntries[entryIndex].MinutesActivities[activityIndex].OtherEvent;\n\n this.setState({\n newEntries: newEntries\n })\n }\n\n handleOtherEventChange(value) {\n let templateInputs = [];\n if (value.ActionReferences && value.ActionReferences.length > 0) {\n templateInputs = JSON.parse(JSON.stringify(value.ActionReferences));\n }\n this.setState({\n otherEvent: value,\n templateInputs: templateInputs,\n templateEdited: false\n });\n }\n\n filterBillEventReferences(billEventReferences) {\n return billEventReferences.filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.EventCode === value.EventCode && JSON.stringify(t.ActionReferences) === JSON.stringify(value.ActionReferences) && t.IsPassed === value.IsPassed\n ))\n )\n }\n\n handleBillChange(value) {\n //Set the dropdown's value\n value = value || []\n this.setState({\n insertEntry: value\n }, () => {\n if (this.motionRef?.current)\n this.motionRef.current.focus();\n });\n if (value.length === 0) {\n this.setState({\n selectedMotion: '',\n templateInputs: [],\n templatedEdited: false\n })\n }\n }\n\n handleMotionChange(value) {\n if (value && value.value !== \"Other\") {\n this.setState({\n selectedMotion: value,\n templateInputs: value ? JSON.parse(JSON.stringify(value.ActionReferences)) : [],\n templatedEdited: false\n }, () => {\n //If the user has selected an event with at least one ActionReferenceType of LegislationEvent then fetch possible events for reconsideration\n if (this.state.selectedMotion?.ActionReferences && this.state.selectedMotion?.ActionReferences?.find(x => x.ActionReferenceType === \"LegislationEvent\")) {\n this.state.insertEntry.forEach(bill => {\n this.getReconsiderationEvents(this.state.selectedMotion.EventCode, bill);\n })\n }\n });\n } else {\n this.setState({\n selectedMotion: value,\n otherEventSelected: value ? true : false\n })\n if (this.state.otherBillEventOptions.length === 0) {\n this.getOtherBillEventOptions();\n }\n }\n }\n\n handleSelectedMotionDescriptionChange(e) {\n let selectedMotion = { ...this.state.selectedMotion };\n selectedMotion.Description = e.target.value;\n this.setState({\n selectedMotion\n });\n }\n\n insertMotion(openMotionEditor) {\n //A new motion wants to be added so take all this data and send it to the parent div to be added to the state\n const { insertEntry, templateInputs, templatedEdited } = this.state;\n let selectedMotion = !this.state.otherEventSelected ? { ... this.state.selectedMotion } : { ... this.state.otherEvent };\n let entries = [...this.props.formData.MinutesEntries];\n\n insertEntry.forEach(bill => {\n //Force all non legislative actions into their own entry by always setting the index to -1\n let index = bill.label && bill.label === \"No Legislation\" ? -1 : entries.findIndex(entry => entry.MinutesEntryID === bill.MinutesEntryID);\n let isNewEntry = false;\n if (index === -1 && bill.label && bill.label === 'No Legislation') {\n isNewEntry = true;\n let minutesEntry = {\n IsPublic: false,\n MinutesActivities: [],\n MinutesCategoryID: this.props.formData.MinutesCategoryID,\n Sequence: entries.length ? Math.max(...entries.map(e => e.Sequence || 0)) + 1 : 1,\n }\n entries.push(minutesEntry);\n index = entries.length - 1;\n }\n if (index !== -1) {\n let entry = entries[index];\n //If it is a null then create a new one so the push doesn't fail\n if (!entry.MinutesActivities) {\n entry.MinutesActivities = [];\n }\n let desc = selectedMotion.Description || selectedMotion.CalendarDescription;\n //If the user has changed the value of the action references then use those for the description instead of the existing one.\n let activityRefs = [];\n if (templatedEdited || (templateInputs.length && !templateInputs.find(tInput => ![\"Text\", \"HTML\"].includes(tInput.ActionReferenceType)))) {\n desc = '';\n const memberListEvents = [\"H6013\", \"S6013\", \"H6113\", \"S6113\", \"H6213\", \"S6213\"];\n templateInputs.forEach((tInput, actIndex) => {\n if (memberListEvents.includes(selectedMotion.EventCode) && !tInput.ReferenceText) {\n return;\n }\n if (!tInput.ReferenceText && !selectedMotion.ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n desc += templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.state.fullEventList.find(e => e.EventCode === templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : tInput.ReferenceText + (memberListEvents.includes(selectedMotion.EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && templateInputs[actIndex + 1] && templateInputs[actIndex + 1].ActionReferenceType === \"Member\" && templateInputs[actIndex + 1].ReferenceText ? \", \" : \"\");\n activityRefs[actIndex] = {\n ActionReferenceTypeID: tInput.ActionReferenceTypeID,\n ActionReferenceType: tInput.ActionReferenceType,\n Sequence: tInput.Sequence,\n ReferenceText: tInput.ReferenceText,\n ReferenceID: tInput.ReferenceID\n }\n });\n\n } else {\n const textType = this.props.actionTypes.find(type => type.ActionReferenceType === 'Text');\n if (textType) {\n activityRefs = [{\n ActionReferenceTypeID: textType.ActionReferenceTypeID,\n ActionReferenceType: textType.ActionReferenceType,\n ReferenceText: selectedMotion.Description || selectedMotion.CalendarDescription\n }];\n }\n }\n\n let newActivity = Object.assign(selectedMotion, {\n ActivityReferences: activityRefs,\n Description: desc,\n Sequence: entry.MinutesActivities.length ? Math.max(...entry.MinutesActivities.map(m => m.Sequence || 0)) + 1 : 1\n })\n\n //Some [REDACTED] problem where we couldn't set the new activity MinutesEntryID to the parent entry's MinutesEntryID unless we mapped the object a second time\n let theNewActivity = { ...newActivity };\n theNewActivity.MinutesEntryID = entry ? entry.MinutesEntryID : entries[index].MinutesEntryID\n\n entry.MinutesActivities.push(theNewActivity);\n\n if (isNewEntry) {\n //now that this entry is actually going to be in the saved object, remove the temp obj, otherwise it will duplicate (in the UI only, but still not what we want)\n entries.splice(index, 1);\n } else { //if it's not a new entry, call the onEntryChange prop\n this.props.onEntryChange(index, entry, this.props.currentActivitySequence);\n }\n\n this.props.handleSaveEntry(entry, () => {\n if (openMotionEditor === true) {\n this.toggleEdit(index)\n }\n });\n }\n });\n this.setState({\n insertEntry: [],\n selectedMotion: '',\n smallMotionForm: -1,\n showMenu: -1,\n showSwitchCategory: false,\n selectedSwitchCategory: null,\n templateInputs: [],\n otherEvent: '',\n otherEventSelected: false\n });\n }\n\n removeMotion(e) {\n e.preventDefault();\n //A motion wants to be removed so check each minute entry and remove the motion if it has it\n const { insertEntry, selectedMotion } = this.state;\n const entries = this.props.formData.MinutesEntries;\n insertEntry.forEach(bill => {\n let needToSave = false;\n const index = entries.findIndex(entry => entry.MinutesEntryID === bill.MinutesEntryID);\n if (index !== -1) {\n let entry = JSON.parse(JSON.stringify(entries[index]));\n if (!entry.MinutesActivities) {\n return;\n }\n entry.MinutesActivities.forEach(activity => {\n if (selectedMotion.CalendarActionID === activity.CalendarActionID && !activity.DeletionDate) {\n activity.DeletionDate = new Date();\n needToSave = true;\n }\n });\n if (needToSave) {\n //User cannot remove an entry's activity while they are editing that entry\n if (this.state.newEntries[index]) {\n let newEntries = [...this.state.newEntries];\n newEntries[index] = null;\n this.setState({\n newEntries: newEntries\n });\n }\n this.props.onEntryChange(index, entry, this.props.currentActivitySequence);\n this.props.handleSaveEntry(entry);\n }\n }\n });\n this.setState({\n insertEntry: [],\n selectedMotion: '',\n templateInputs: [],\n templatedEdited: false,\n });\n }\n\n toggleEdit(index) {\n let togglingEdit = { ...this.state.togglingEdit };\n togglingEdit[index] = true;\n this.setState({ togglingEdit }, () => {\n let newEntries = [...this.state.newEntries];\n let init = [];\n let promises = [];\n if (this.state.newEntries[index]) {\n newEntries[index] = null;\n } else {\n if (this.state.newEntries.length === 0) {\n newEntries.length = this.props.formData.MinutesEntries.length;\n }\n //If the user has multiple edit entries open clicking the X on one doesn't kill the changes to another\n newEntries[index] = JSON.parse(JSON.stringify(this.props.formData.MinutesEntries[index]));\n\n //Test to see if the activities have zero activity references. If they have zero then add a blank text one\n const references = newEntries[index].LegislationNumber ? [...this.state.references] : [...this.state.nonLegislativeActionReferences]\n newEntries[index].MinutesActivities.forEach(act => {\n if (act.EventCode) {\n const eventReference = references.find(evt => evt.EventCode === act.EventCode && evt.IsPassed === act.IsPassed);\n if (eventReference) {\n const actionReferences = eventReference.ActionReferences;\n if (actionReferences) {\n const missingActivitiyReferences = actionReferences.filter(ref => !act.ActivityReferences || !act.ActivityReferences.map(existingActivities => existingActivities.ActionReferenceType).includes(ref.ActionReferenceType));\n if (missingActivitiyReferences.length) {\n act.ActivityReferences = act.ActivityReferences ? act.ActivityReferences.concat(JSON.parse(JSON.stringify(missingActivitiyReferences))) : JSON.parse(JSON.stringify(missingActivitiyReferences));\n }\n }\n }\n }\n\n if (!act.ActivityReferences || act.ActivityReferences.length === 0) {\n const textType = this.props.actionTypes.find(type => type.ActionReferenceType === 'Text');\n if (textType) {\n //Sometimes ActivityReferences is undefined. Make a blank one so the push does not fail\n act.ActivityReferences = [];\n act.ActivityReferences.push({\n ActionReferenceTypeID: textType.ActionReferenceTypeID,\n ActionReferenceType: textType.ActionReferenceType,\n ReferenceText: act.Description\n });\n }\n }\n\n //If the user has selected an event with at least one ActionReferenceType of LegislationEvent then fetch possible events for reconsideration\n const eventReferenceIndex = act.ActivityReferences?.findIndex(x => x.ActionReferenceType === \"LegislationEvent\");\n if (eventReferenceIndex > -1) {\n promises.push(\n new Promise(res => {\n this.getReconsiderationEvents(act.EventCode, newEntries[index], (reconsiderationEvents) => {\n if (act.ActivityReferences[eventReferenceIndex].ReferenceID) {\n act.ActivityReferences[eventReferenceIndex].EventCode = act.ActivityReferences[eventReferenceIndex].EventCode || reconsiderationEvents.find(e => e.LegislationEventID === act.ActivityReferences[eventReferenceIndex].ReferenceID)?.EventCode;\n act.ActivityReferences[eventReferenceIndex].IsPassed = act.ActivityReferences[eventReferenceIndex].IsPassed || reconsiderationEvents.find(e => e.LegislationEventID === act.ActivityReferences[eventReferenceIndex].ReferenceID)?.IsPassed;\n }\n res();\n })\n }));\n }\n });\n }\n Promise.all(promises).then(() => {\n togglingEdit[index] = false;\n let editingActivityDescription = { ...this.state.editingActivityDescription };\n editingActivityDescription[index] = {};\n this.setState({\n newEntries: newEntries,\n togglingEdit,\n editingActivityDescription\n }, () => {\n if (this.state.newEntries[index]) {\n newEntries[index].MinutesActivities.forEach((activity, activityIndex) => {\n if (activity.VoteTally !== undefined)\n this.handleActivityDescriptionChange(null, \"VoteTally\", index, activityIndex)\n })\n }\n });\n });\n });\n }\n\n getReconsiderationEvents(params, bill, cb) {\n params = '?ReconsiderationAction=' + params + '&LegislationID=' + bill.LegislationID;\n\n this.props.actions.getLegislationEventsByLegislationId(params)\n .then(() => {\n this.setState({\n reconsiderationEvents: this.props.bills.legislationEventsById\n }, () => {\n if (cb) cb([...this.state.reconsiderationEvents]);\n });\n })\n }\n\n toggleEditActivityDescription(entryIndex, activityIndex) {\n let editingActivityDescription = { ...this.state.editingActivityDescription };\n if (!editingActivityDescription[entryIndex]) {\n editingActivityDescription[entryIndex] = {};\n }\n editingActivityDescription[entryIndex][activityIndex] = !editingActivityDescription[entryIndex][activityIndex];\n this.setState({ editingActivityDescription }, () => {\n this.handleActivityDescriptionChange(null, \"Description\", entryIndex, activityIndex)\n this.handleActivityDescriptionChange(null, \"VoteTally\", entryIndex, activityIndex)\n });\n }\n\n handleActivityDescriptionChange(value, attr, entryIndex, activityIndex, save) {\n //Update the input with new text. Save change to this components state so it doesn't update the parent just yet (in case the user clicks the X)\n let entries = this.state.newEntries;\n //activities are reversed in display, so reverse here in order to get the indexes aligned\n let reversedActivities = entries[entryIndex].MinutesActivities.reverse();\n let activity = reversedActivities[activityIndex];\n\n if (save) {\n activity.Description = activity.tempDescription ?? activity.Description;\n activity.VoteTally = activity.tempVoteTally ?? activity.VoteTally;\n } else {\n activity['temp' + attr] = value ?? activity[attr];\n }\n\n //reverse back to original\n let unreversedActivities = reversedActivities.reverse();\n entries[entryIndex].MinutesActivities = unreversedActivities;\n\n this.setState({ entries }, () => {\n if (save) this.toggleEditActivityDescription(entryIndex, activityIndex);\n });\n }\n\n handleOtherActivityDescriptionChange(value, attr, entryIndex, activityIndex, save) {\n //Update the input with new text. Save change to this components state so it doesn't update the parent just yet (in case the user clicks the X)\n let entries = this.state.newEntries;\n //activities are reversed in display, so reverse here in order to get the indexes aligned\n let reversedActivities = entries[entryIndex].MinutesActivities.reverse();\n let activity = reversedActivities[activityIndex].OtherEvent;\n\n if (save) {\n activity.Description = activity.tempDescription ?? activity.Description;\n activity.VoteTally = activity.tempVoteTally ?? activity.VoteTally;\n } else {\n activity['temp' + attr] = value ?? activity[attr];\n }\n\n //reverse back to original\n let unreversedActivities = reversedActivities.reverse();\n entries[entryIndex].MinutesActivities = unreversedActivities;\n\n this.setState({ entries }, () => {\n if (save) this.toggleEditActivityDescription(entryIndex, activityIndex);\n });\n }\n\n onActivityDragEnd(result, entryIndex) {\n if (!result.destination) {\n return;\n }\n if (result.destination.index === result.source.index) {\n return;\n }\n let entries = [...this.state.newEntries];\n //activities are reversed in display, so reverse here in order to get the indexes aligned\n let reversedActivities = entries[entryIndex].MinutesActivities.reverse();\n const [removed] = reversedActivities.splice(result.source.index, 1);\n reversedActivities.splice(result.destination.index, 0, removed);\n //reverse back to original\n let unreversedActivities = reversedActivities.reverse();\n unreversedActivities.forEach((element, index) => {\n element.Sequence = index + 1\n });\n entries[entryIndex].MinutesActivities = unreversedActivities;\n this.setState({\n newEntries: entries\n });\n }\n\n onEntryDragEnd(result) {\n if (!result.destination) {\n return;\n }\n if (result.destination.index === result.source.index) {\n return;\n }\n let entries = [...this.props.formData.MinutesEntries];\n const [removed] = entries.splice(result.source.index, 1);\n entries.splice(result.destination.index, 0, removed);\n entries.forEach((element, index) => {\n element.Sequence = index + 1;\n });\n this.props.onMultipleEntryChange(entries, this.props.currentActivitySequence);\n this.props.handleSaveEntry(entries);\n // \n this.setState({\n newEntries: []\n })\n }\n\n removeActivity(entryIndex, activityIndex) {\n let entries = [...this.state.newEntries];\n //activities are reversed in display, so reverse here in order to get the indexes aligned\n let reversedActivities = entries[entryIndex].MinutesActivities.reverse()\n reversedActivities[activityIndex].DeletionDate = new Date();\n //reverse back to original\n const unreversedActivities = reversedActivities.reverse();\n entries[entryIndex].MinutesActivities = unreversedActivities;\n this.setState({\n newEntries: entries\n });\n }\n\n addBackActivity(entryIndex, activityIndex) {\n let entries = [...this.state.newEntries];\n //activities are reversed in display, so reverse here in order to get the indexes aligned\n let reversedActivities = entries[entryIndex].MinutesActivities.reverse()\n reversedActivities[activityIndex].DeletionDate = null;\n reversedActivities[activityIndex].IsPublic = false;\n //reverse back to original\n const unreversedActivities = reversedActivities.reverse();\n entries[entryIndex].MinutesActivities = unreversedActivities;\n this.setState({\n newEntries: entries\n });\n }\n\n addAllEntries(isOOB) {\n const entries = this.props.formData.MinutesEntries;\n // Filter out the ones that are already added so they aren't added twice\n let insertEntry = this.state.insertEntry.filter(entry => Boolean(entry.IsOOB) !== isOOB);\n let newInserEntries = insertEntry.concat(entries.filter(entry => Boolean(entry.IsOOB) === isOOB));\n this.setState({\n insertEntry: newInserEntries\n });\n }\n\n handleTemplateChange(_entryIndex, _activityIndex, referenceIndex, reference) {\n let templateInputs = [...this.state.templateInputs];\n templateInputs[referenceIndex] = reference;\n //Used when adding the motion to know whether to use the existing description or concatenate together the action reference values\n //If they have change a value it is save to say they want the the description to be the action references stringed together\n if (!this.state.templatedEdited) {\n this.setState({\n templatedEdited: true\n });\n }\n this.setState({\n templateInputs: templateInputs\n });\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.currentActivitySequence !== this.props.currentActivitySequence) {\n this.setState({\n insertEntry: [],\n newEntries: [],\n selectedMotion: '',\n votesToBeSaved: [],\n savingVotes: [],\n togglingEdit: {},\n templateInputs: [],\n templatedEdited: false,\n smallMotionForm: -1,\n showMenu: -1,\n showSwitchCategory: false,\n selectedSwitchCategory: null,\n textList: [],\n checkedBills: []\n });\n this.getCatActionList();\n this.getTextList();\n } else if (prevProps.formData.MinutesEntries !== this.props.formData.MinutesEntries) {\n let newEntries = [...this.state.newEntries];\n this.props.formData.MinutesEntries.forEach((entry, entryIndex) => {\n if (newEntries[entryIndex] && entry !== newEntries[entryIndex]) {\n newEntries[entryIndex] = entry;\n }\n });\n this.setState({\n newEntries: newEntries\n });\n }\n }\n\n componentDidMount() {\n this.getCatActionList();\n this.getNonLegislativeActionList();\n this.getTextList();\n }\n\n getCatActionList() {\n //Get the calendar action reference data\n const catId = this.props.formData.CalendarCategoryTypeID;\n const referenceParams = `?calendarCategoryTypeID=${catId}&chamberCode=S`;\n this.props.actions.getReferences(referenceParams)\n .then(() => {\n let references = this.props.calendar.references;\n references.forEach(reference => {\n reference.label = `${reference.EventCode} ${reference.Description}`;\n reference.value = `${reference.CalendarActionID}-${reference.IsPassed}`;\n });\n\n references.push({\n label: \"Other\",\n value: \"Other\"\n })\n\n this.setState({\n references: references\n });\n });\n }\n\n getNonLegislativeActionList() {\n //Get the non legislative action reference data\n this.props.actions.getBillEventReferences(\"?isActive=true\").then(() => {\n let nonLegislativeActionReferences = [...this.props.bills.billEventRef].filter(ref => ref.AdministrativeAction);\n nonLegislativeActionReferences.forEach(ref => {\n ref.label = `${ref.EventCode} ${ref.CalendarDescription}`\n ref.value = `${ref.EventCode}-${ref.IsPassed}`\n });\n\n this.setState({\n nonLegislativeActionReferences: nonLegislativeActionReferences,\n fullEventList: [...this.props.bills.billEventRef]\n });\n });\n }\n\n getTextList() {\n const entries = this.props.formData.MinutesEntries;\n entries.forEach(entry => {\n if (entry.LegislationID && !this.state.textList.find(text => text.LegislationID === entry.LegislationID)) {\n this.props.actions.getTextList('?legislationID=' + entry.LegislationID + '&sessionID=' + this.props.sessionId)\n .then(() => {\n let textList = [...this.props.bills.textList];\n textList.forEach(text => {\n text.label = text.DocumentCode;\n text.value = text.LegislationTextID;\n });\n this.setState(state => ({\n textList: state.textList.concat(textList)\n }));\n });\n }\n })\n }\n\n toggleSmallMotionForm(entryIndex, e) {\n if (e) {\n //Do not hide the small motion form if a child of the form is focused\n if (e.currentTarget.contains(e.relatedTarget)) {\n return\n }\n }\n let insertEntry = [];\n insertEntry = this.props.formData.MinutesEntries[entryIndex];\n this.setState({\n smallMotionForm: entryIndex,\n insertEntry: insertEntry ? [insertEntry] : [],\n selectedMotion: '',\n templateInputs: [],\n templatedEdited: false,\n otherEventSelected: false\n }, () => {\n if (this.motionDropdownRef.current) {\n this.motionDropdownRef.current.focus();\n }\n });\n }\n\n toggleMenu(entryIndex, e) {\n if (e) {\n //Do not hide the small motion form if a child of the form is focused\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n }\n this.setState({\n showMenu: entryIndex\n }, () => {\n if (this.menuBoxRef.current) {\n this.menuBoxRef.current.focus();\n }\n });\n }\n\n addEntry(entryIndex, position, recess) {\n let entries = [...this.props.formData.MinutesEntries];\n let newEntry = {\n IsOOB: entries[entryIndex].IsOOB,\n IsPublic: false,\n MinutesCategoryID: entries[entryIndex].MinutesCategoryID,\n }\n if (recess && this.state.references.find(ref => ref.Description === 'Recess')) {\n newEntry.EntryText = \"Recess\";\n newEntry.MinutesActivities = [{\n MinutesActivityID: this.state.references.find(ref => ref.Description === 'Recess').MinutesActivityID,\n Description: \"Recess\"\n }];\n }\n entries.splice(entryIndex + position, 0, newEntry);\n entries.forEach((entry, idx) => {\n entry.Sequence = idx + 1\n });\n this.props.handleSaveEntry(entries);\n this.setState({\n showMenu: -1,\n smallMotionForm: -1,\n insertEntry: [],\n newEntries: []\n });\n }\n\n handleBillNumberChange(entryIndex, value) {\n let selectedBillNumber = [...this.state.selectedBillNumber];\n selectedBillNumber[entryIndex] = value\n this.setState({\n selectedBillNumber: selectedBillNumber\n });\n }\n\n applyLegislationToEntry(entryIndex) {\n let entries = [...this.props.formData.MinutesEntries];\n let entry = entries[entryIndex];\n entry.LegislationNumber = this.state.selectedBillNumber[entryIndex].LegislationNumber;\n this.props.handleSaveEntry(entry);\n this.setState({\n showMenu: -1,\n smallMotionForm: -1\n });\n this.props.actions.getTextList('?legislationNumber=' + this.state.selectedBillNumber[entryIndex].LegislationNumber + '&sessionID=' + this.props.sessionId)\n .then(() => {\n let textList = [...this.props.bills.textList];\n textList.forEach(text => {\n text.label = text.DocumentCode;\n text.value = text.LegislationTextID;\n });\n this.setState(state => ({\n textList: state.textList.concat(textList)\n }));\n });\n\n }\n\n handleCommentBoxChange(content) {\n this.setState({\n commentBoxContent: content\n });\n }\n\n toggleCommentBox(show) {\n const entries = this.props.formData.MinutesEntries;\n let commentBoxContent = [];\n if (entries[show] && entries[show].MinutesSummaries) {\n if (entries[show].MinutesSummaries.length !== 0) {\n commentBoxContent = entries[show].MinutesSummaries;\n }\n }\n this.setState({\n showCommentBox: show,\n commentBoxContent: commentBoxContent\n });\n }\n\n saveComment() {\n let entries = [...this.props.formData.MinutesEntries];\n if (entries[this.state.showCommentBox]) {\n let entry = entries[this.state.showCommentBox];\n entry.MinutesSummaries = this.state.commentBoxContent;\n this.props.handleSaveEntry(entry);\n this.setState({\n showCommentBox: false\n });\n }\n }\n\n toggleShowDeleted(entryIndex) {\n let entries = [...this.state.newEntries];\n entries[entryIndex].showDeleted = !entries[entryIndex].showDeleted;\n this.setState({\n newEntries: entries\n });\n }\n\n toggleAuxBillAdd() {\n this.setState({\n showAuxBillForm: !this.state.showAuxBillForm,\n auxBill: ''\n })\n }\n\n setAuxBill(value) {\n this.setState({\n auxBill: value\n })\n }\n\n addAuxBill() {\n this.setState({\n savingAuxBill: true\n }, () => {\n let minutesEntry = {\n MinutesEntryCreate: [\n {\n IsPublic: false,\n LegislationChamberCode: this.state.auxBill.value[0],\n LegislationID: this.state.auxBill.LegislationID,\n LegislationNumber: this.state.auxBill.value,\n MinutesActivities: [],\n MinutesCategoryID: this.props.formData.MinutesEntries[0].MinutesCategoryID,\n Sequence: this.props.formData.MinutesEntries.length ? Math.max(...this.props.formData.MinutesEntries.map(me => me.Sequence || 0)) + 1 : 1,\n }\n ],\n }\n\n this.props.actions.createEntries(minutesEntry)\n .then(() => {\n this.toggleAuxBillAdd();\n this.setState({\n savingAuxBill: false\n })\n })\n })\n }\n\n onKeyUp(e) {\n if (e.key === \"Enter\" && !this.state.otherEventSelected) {\n this.insertMotion();\n } else if (e.key === \"Enter\" && this.state.otherEventSelected && this.state.otherEvent !== \"\") {\n this.insertMotion();\n }\n }\n\n formInput(entry, entryIndex, provided = {}) {\n const memberListEvents = [\"H6013\", \"S6013\", \"H6113\", \"S6113\", \"H6213\", \"S6213\"];\n\n let inputValue = this.state.templateInputs.map((tInput, i) => {\n //For events H6013/S6013/H6113/S6113/H6213/S6213 there are sometimes incomplete lists of members. This will prevent the UI from adding blank member dropdown values to the description\n if (memberListEvents.includes(this.state.selectedMotion?.EventCode) && !tInput.ReferenceText) {\n return;\n }\n\n if (!tInput.ReferenceText && !this.state.selectedMotion?.ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n return this.state.templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.state.fullEventList.find(e => e.EventCode === this.state.templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === this.state.templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : tInput.ReferenceText + (memberListEvents.includes(this.state.selectedMotion?.EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && this.state.templateInputs[i + 1] && this.state.templateInputs[i + 1].ActionReferenceType === \"Member\" && this.state.templateInputs[i + 1].ReferenceText ? \", \" : \"\")\n }).join('');\n const showDeletedItemsCheckbox = this.state.newEntries[entryIndex] ? !!this.state.newEntries[entryIndex].MinutesActivities.find(act => act.DeletionDate) : false\n let reversedActivities = this.state.newEntries[entryIndex] ? [...this.state.newEntries[entryIndex].MinutesActivities].reverse() : []\n // Sometimes the deleted items are shown and other times they are not. If they are not shown then the first activity might not be the first activity on the screen.\n // So this variable is used to figure out whether to show the hr or not that seperates activities.\n const firstActivityIndex = this.state.newEntries[entryIndex] ? reversedActivities.findIndex((act, actIndex) => {\n if (this.state.newEntries[entryIndex].showDeleted) {\n return true\n } else {\n return !act.DeletionDate;\n }\n }) : null\n\n function extractText(summary) {\n let doc = document.createElement('div')\n doc.insertAdjacentHTML(\"afterbegin\", summary);\n //Bail out and pass back the summary if there is no paragraph tag\n return doc.getElementsByTagName(\"p\")[0] ? doc.getElementsByTagName(\"p\")[0].innerText : summary\n }\n\n return (\n <div key={entryIndex}>\n <div className=\"bill-grid\">\n <React.Fragment>\n <div className={`${this.state.showSwitchCategory ? 'inner-grid half align-center' : ''}`} style={this.state.showSwitchCategory ? { gap: '10px', justifyContent: 'center' } : { textAlign: 'center' }}>\n <span {...provided.dragHandleProps} className=\"icon menu\" onClick={(e) => this.toggleMenu(entryIndex)}></span>\n {this.state.showMenu === entryIndex &&\n <div style={{ textAlign: 'left', marginLeft: '-15px', width: this.state.showSwitchCategory !== entryIndex ? 'auto' : '' }} className=\"info-box blue\" ref={this.menuBoxRef} onBlur={(e) => this.toggleMenu(-1, e)} contentEditable suppressContentEditableWarning={true}>\n <div contentEditable={false}>\n <div>\n <button type=\"button\" className=\"button-link\" disabled={this.props.categoryFormDisabled} onClick={() => this.toggleOOB(entryIndex)}>Place {entry.IsOOB ? \"In\" : \"Out of\"} Block</button>\n </div>\n <div>\n <button type=\"button\" disabled={this.props.categoryFormDisabled} onClick={() => this.addEntry(entryIndex, 0)} className=\"button-link\">Add Entry Above</button>\n </div>\n <div>\n <button type=\"button\" disabled={this.props.categoryFormDisabled} onClick={() => this.addEntry(entryIndex, 1)} className=\"button-link\">Add Entry Below</button>\n </div>\n {this.state.references.find(ref => ref.Description === 'Recess') &&\n <div>\n <button type=\"button\" disabled={this.props.categoryFormDisabled} onClick={() => this.addEntry(entryIndex, 1, true)} className=\"button-link\">Add Recess Below</button>\n </div>\n }\n {this.props.categories.filter(c => c.CalendarCategoryTypeID === this.props.formData.CalendarCategoryTypeID && c.MinutesCategoryID !== this.props.formData.MinutesCategoryID).length ?\n <div>\n <button type=\"button\" disabled={this.props.categoryFormDisabled} onClick={() => this.toggleSwitchCategory(entryIndex)} className=\"button-link\">Switch Category</button>\n </div>\n : null\n }\n {!entry.LegislationNumber &&\n <div>\n <hr />\n <span className=\"small-text\">Apply Legislation</span>\n <LargeListSelect\n styles={legNumSelectStyle}\n options={this.props.sessionBills}\n value={this.state.selectedBillNumber[entryIndex]}\n onChange={val => this.handleBillNumberChange(entryIndex, val)}\n />\n <button type=\"button\" onClick={() => this.applyLegislationToEntry(entryIndex)} disabled={!this.state.selectedBillNumber[entryIndex] || this.props.categoryFormDisabled} className=\"button small-button\">Apply</button>\n </div>\n }\n </div>\n </div>\n }\n {this.state.showSwitchCategory &&\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={this.state.checkedBills[entryIndex]}\n onChange={(e) => this.toggleSelectEntry(entryIndex, e)}\n />\n }\n </div>\n <div>\n <div className=\"flex-row flex-vertical-center\">\n {entry.LegislationNumber\n ? <React.Fragment>\n <Link to={`/bill-details/${this.props.sessionCode}/${entry.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{entry.LegislationNumber}</Link>\n <span onClick={() => this.toggleSmallMotionForm(entryIndex)} className=\"icon add\"></span>\n </React.Fragment>\n : \"No Legislation\"\n }\n </div>\n {\n this.state.smallMotionForm === entryIndex &&\n /* The contentEditable is so that the element can be focused and the onBlur function is able to run */\n <div style={{ width: '900px' }} className=\"info-box blue\" onBlur={(e) => this.toggleSmallMotionForm(-1, e)} contentEditable suppressContentEditableWarning={true}>\n <div contentEditable={false}>\n <div onKeyUp={(e) => this.onKeyUp(e)}>\n <Select\n value={this.state.selectedMotion}\n options={[...this.state.references].filter(r => !r.LegislationChamberCode || !entry.LegislationNumber || entry.LegislationChamberCode === r.LegislationChamberCode)}\n onChange={this.handleMotionChange}\n styles={selectStyle}\n ref={this.motionDropdownRef}\n />\n {this.state.otherEventSelected &&\n <>\n <button type=\"button\" className='icon delete' onClick={() => this.unSelectOtherEvent()}></button>\n\n <div className=\"inner-grid bill-history-event-controls\" style={{ marginTop: \"10px\" }}>\n <Select\n options={this.state.otherBillEventOptions}\n styles={selectStyle}\n value={this.state.otherEvent}\n getOptionLabel={opt => opt.EventCode ? \"(\" + opt.EventCode + \") \" + opt.label : opt.label}\n onChange={this.handleOtherEventChange}\n isDisabled={this.state.otherBillEventOptions.length === 0}\n />\n </div>\n </>\n }\n </div>\n <div>\n <button type='button' disabled={!this.state.selectedMotion || this.props.categoryFormDisabled} className='button' onClick={() => this.insertMotion(!this.state.newEntries[entryIndex])}>Add Motion</button>\n </div>\n {this.state.templateInputs.length > 0 &&\n <div className=\"multi-row one-small-small no-margin\">\n <div>\n <div>\n <span className='small-text txt-greyed'>{inputValue}</span>\n </div>\n <InputTypes\n newEvent={this.state.selectedMotion}\n memberList={this.props.memberList}\n committeeList={this.props.committeeList}\n communicationList={this.props.communicationList}\n eventList={this.state.reconsiderationEvents}\n handleChange={this.handleTemplateChange}\n entryIndex={0}\n activityIndex={0}\n references={this.state.templateInputs}\n textList={this.state.textList.filter(text => this.state.insertEntry.find(bill => bill.LegislationID === text.LegislationID) ? true : false)}\n />\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div >\n <div>\n {this.state.newEntries[entryIndex] ?\n <React.Fragment>\n <DragDropContext onDragEnd={res => this.onActivityDragEnd(res, entryIndex)}>\n <Droppable droppableId={`activities-${entryIndex}-droppable`}>\n {(provided, snapshot) =>\n <div\n ref={provided.innerRef}\n style={getListStyle(snapshot.isDraggingOver)}>\n {this.state.newEntries[entryIndex].MinutesActivities && reversedActivities.map((activity, activityIndex) => {\n if (!this.state.newEntries[entryIndex].showDeleted && activity.DeletionDate) {\n return null;\n } else {\n const inputValue = (reversedActivities[activityIndex].Description || (reversedActivities[activityIndex].ActivityReferences && reversedActivities[activityIndex].ActivityReferences.map((tInput, i) => {\n //For events H6013/S6013/H6113/S6113/H6213/S6213 there are sometimes incomplete lists of members. This will prevent the UI from adding blank member dropdown values to the description\n if (memberListEvents.includes(reversedActivities[activityIndex].EventCode) && !tInput.ReferenceText) {\n return;\n }\n\n if (!tInput.ReferenceText && !reversedActivities[activityIndex].ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n return reversedActivities[activityIndex].ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.state.fullEventList.find(e => e.EventCode === reversedActivities[activityIndex].ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === reversedActivities[activityIndex].ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : tInput.ReferenceText + (memberListEvents.includes(reversedActivities[activityIndex].EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && reversedActivities[activityIndex].ActivityReferences[i + 1] && reversedActivities[activityIndex].ActivityReferences[i + 1].ActionReferenceType === \"Member\" && reversedActivities[activityIndex].ActivityReferences[i + 1].ReferenceText ? \", \" : \"\")\n }).join('')));\n return (\n <Draggable key={`${activity.MinutesActivityID}-${activity.MinutesActivityID}`} draggableId={`${activity.MinutesActivityID}-${activity.Sequence}`} index={activityIndex}>\n {(provided, snapshot) =>\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n style={getItemStyle(snapshot.isDragging, provided.draggableProps.style)}>\n {activityIndex !== firstActivityIndex && <hr className=\"faded-line\" />}\n <div className=\"no-gap-grid two-col-sidebar-backwards\">\n <div {...provided.dragHandleProps}>\n <button className=\"button draggable\">Drag and drop</button>\n </div>\n <div>\n <div className=\"no-gap-grid two-col-sidebar\">\n <div>\n {entry.LegislationNumber && !activity.OtherMotionSelected &&\n <Select\n value={[...this.state.references].find(r => r.EventCode === activity.EventCode && r.IsPassed === activity.IsPassed) ? [...this.state.references].find(r => r.EventCode === activity.EventCode && r.IsPassed === activity.IsPassed) : activity.Description ? { label: activity.Description } : { label: \"Select...\" }}\n options={[...this.state.references].filter(r => !r.LegislationChamberCode || entry.LegislationNumber[0] === r.LegislationChamberCode)}\n onChange={(motion) => this.handleChange(entryIndex, activityIndex, null, null, null, motion)}\n styles={selectStyle}\n isClearable\n />\n }\n {!activity.OtherMotionSelected &&\n <div style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>\n <span\n style={{ textDecoration: reversedActivities[activityIndex].DeletionDate ? 'line-through' : 'none' }}\n className=\"small-text\">\n {((reversedActivities[activityIndex].tempDescription ?? reversedActivities[activityIndex].Description) || reversedActivities[activityIndex].ActivityReferences && reversedActivities[activityIndex].ActivityReferences.map((tInput, i) => {\n //For events H6013/S6013/H6113/S6113/H6213/S6213 there are sometimes incomplete lists of members. This will prevent the UI from adding blank member dropdown values to the description\n if (memberListEvents.includes(reversedActivities[activityIndex].EventCode) && !tInput.ReferenceText) {\n return;\n }\n\n if (!tInput.ReferenceText && !reversedActivities[activityIndex].ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n return reversedActivities[activityIndex].ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.state.fullEventList.find(e => e.EventCode === reversedActivities[activityIndex].ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === reversedActivities[activityIndex].ActivityReferences.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : tInput.ReferenceText + (memberListEvents.includes(reversedActivities[activityIndex].EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && reversedActivities[activityIndex].ActivityReferences[i + 1] && reversedActivities[activityIndex].ActivityReferences[i + 1].ActionReferenceType === \"Member\" && reversedActivities[activityIndex].ActivityReferences[i + 1].ReferenceText ? \", \" : \"\")\n }).join('')) + ((reversedActivities[activityIndex].tempVoteTally ?? reversedActivities[activityIndex].VoteTally) ? ' ' + (reversedActivities[activityIndex].tempVoteTally ?? reversedActivities[activityIndex].VoteTally) : '')}\n </span>\n {(reversedActivities[activityIndex].ActivityReferences && reversedActivities[activityIndex].ActivityReferences.find(ar => ar.ActionReferenceType !== \"Text\")) && (!this.state.editingActivityDescription[entryIndex] || !this.state.editingActivityDescription[entryIndex][activityIndex]) && <a className={`icon edit`} onClick={() => this.toggleEditActivityDescription(entryIndex, activityIndex)} />}\n </div>\n }\n {!activity.OtherMotionSelected &&\n <div style={{ display: 'flex', alignItems: 'center', gap: '5px' }}>\n {this.state.editingActivityDescription[entryIndex] && this.state.editingActivityDescription[entryIndex][activityIndex] &&\n <>\n <div style={{ width: '100%', display: 'flex', gap: '5px' }}>\n <textarea style={{ width: '75%' }} value={reversedActivities[activityIndex].tempDescription ?? inputValue} onChange={(e) => this.handleActivityDescriptionChange(e.target.value, \"Description\", entryIndex, activityIndex)} />\n {reversedActivities[activityIndex].VoteTally !== undefined && <EditVoteTally value={reversedActivities[activityIndex].tempVoteTally} onChange={(e) => this.handleActivityDescriptionChange(e.target.value, \"VoteTally\", entryIndex, activityIndex)} />}\n </div>\n <div style={{ display: 'flex', gap: '5px' }}>\n {this.state.editingActivityDescription[entryIndex] && this.state.editingActivityDescription[entryIndex][activityIndex] &&\n <a className={`icon save`} onClick={() => this.handleActivityDescriptionChange(null, null, entryIndex, activityIndex, true)} />}\n <a className={`icon ${this.state.editingActivityDescription[entryIndex] && this.state.editingActivityDescription[entryIndex][activityIndex] ? 'delete' : 'edit'}`} onClick={() => this.toggleEditActivityDescription(entryIndex, activityIndex)} />\n </div>\n </>\n }\n </div>\n }\n {activity.OtherMotionSelected &&\n <>\n <button type=\"button\" className='button danger' onClick={() => this.unSelectOtherEventEdit(entryIndex, activityIndex)}>Cancel Other Motion</button>\n\n <div className=\"inner-grid bill-history-event-controls\" style={{ marginTop: \"10px\" }}>\n <Select\n options={this.state.otherBillEventOptions}\n styles={selectStyle}\n value={activity.OtherEvent ? this.state.otherBillEventOptions.find(x => x.EventCode === activity.OtherEvent.EventCode) : { label: \"Select...\", value: \"\" }}\n getOptionLabel={opt => opt.EventCode ? \"(\" + opt.EventCode + \") \" + opt.label : opt.label}\n onChange={(value) => this.handleOtherChange(entryIndex, activityIndex, undefined, undefined, undefined, value)}\n isDisabled={this.state.otherBillEventOptions.length === 0}\n />\n </div>\n\n {activity.OtherEvent !== undefined &&\n <>\n < InputTypes\n style={{ display: \"inline-block\" }}\n newEvent={reversedActivities[activityIndex].OtherEvent}\n memberList={this.props.memberList}\n committeeList={this.props.committeeList}\n communicationList={this.props.communicationList}\n eventList={this.state.reconsiderationEvents}\n actionTypes={this.props.actionTypes}\n handleChange={this.handleChange}\n entryIndex={entryIndex}\n activityIndex={activityIndex}\n references={reversedActivities[activityIndex].OtherEvent.ActivityReferences || []}\n textList={this.state.textList.filter(text => this.state.newEntries[entryIndex].LegislationID === text.LegislationID)}\n />\n {reversedActivities[activityIndex].OtherEvent.VoteTally !== undefined && reversedActivities[activityIndex].OtherEvent.ActivityReferences !== undefined && !reversedActivities[activityIndex].OtherEvent.ActivityReferences.find(ar => ar.ActionReferenceType !== \"Text\") && <EditVoteTally value={reversedActivities[activityIndex].OtherEvent.tempVoteTally ?? reversedActivities[activityIndex].OtherEvent.VoteTally} onChange={(e) => this.handleActivityDescriptionChange(e.target.value, \"VoteTally\", entryIndex, activityIndex)} />}\n </>\n }\n </>\n }\n <div>\n {!reversedActivities[activityIndex].DeletionDate && !activity.OtherMotionSelected &&\n <>\n <InputTypes\n style={{ display: \"inline-block\" }}\n newEvent={reversedActivities[activityIndex]}\n memberList={this.props.memberList}\n committeeList={this.props.committeeList}\n communicationList={this.props.communicationList}\n eventList={this.state.reconsiderationEvents}\n actionTypes={this.props.actionTypes}\n handleChange={this.handleChange}\n entryIndex={entryIndex}\n activityIndex={activityIndex}\n references={reversedActivities[activityIndex].ActivityReferences || []}\n textList={this.state.textList.filter(text => this.state.newEntries[entryIndex].LegislationID === text.LegislationID)}\n />\n {reversedActivities[activityIndex].VoteTally !== undefined && reversedActivities[activityIndex].ActivityReferences !== undefined && !reversedActivities[activityIndex].ActivityReferences.find(ar => ar.ActionReferenceType !== \"Text\") && <EditVoteTally value={reversedActivities[activityIndex].tempVoteTally ?? reversedActivities[activityIndex].VoteTally} onChange={(e) => this.handleOtherActivityDescriptionChange(e.target.value, \"VoteTally\", entryIndex, activityIndex)} />}\n </>\n }\n </div>\n </div>\n <div>\n {!reversedActivities[activityIndex].DeletionDate ?\n <button onClick={() => this.removeActivity(entryIndex, activityIndex)} type=\"button\" className=\"button remove\"></button>\n :\n <button onClick={() => this.addBackActivity(entryIndex, activityIndex)} type=\"button\" className=\"button add\"></button>\n }\n\n </div>\n </div>\n </div>\n </div>\n </div>}\n </Draggable>\n )\n }\n\n })}\n {provided.placeholder}\n </div>\n }\n </Droppable></DragDropContext>\n </React.Fragment>\n :\n <React.Fragment>\n {entry.MinutesActivities && entry.MinutesActivities.length > 0\n ? entry.MinutesActivities.filter(a => !a.DeletionDate).map((activity, activityIndex) =>\n <span key={activityIndex}>\n {activityIndex !== 0 && ', '}{activity.Description}{activity.VoteTally ? ' ' + activity.VoteTally : ''}\n </span>\n )\n //find way to insert summary into document and extract innertext to take substring of\n : <span>{entry.MinutesSummaries && entry.MinutesSummaries[0] && entry.MinutesSummaries[0].MinutesSummary.length > 215 ? extractText(entry.MinutesSummaries[0].MinutesSummary).substr(0, 215) + \"...\" : entry.MinutesSummaries && entry.MinutesSummaries[0] && extractText(entry.MinutesSummaries[0].MinutesSummary)}</span>\n }\n </React.Fragment>\n }\n\n </div>\n {\n this.state.newEntries[entryIndex] ? (\n <div style={{ position: \"relative\" }}>\n <div className=\"bill-grid-actions\" key={entry.MinutesEntryID}>\n <button onClick={() => this.saveChange(entryIndex)} type=\"button\" className=\"icon save\"></button>\n <button onClick={() => this.toggleEdit(entryIndex)} type=\"button\" className=\"icon delete\"></button>\n </div>\n {showDeletedItemsCheckbox &&\n <div style={!this.state.newEntries[entryIndex].MinutesActivities || !this.state.newEntries[entryIndex].MinutesActivities.filter(ma => !ma.DeletionDate).length ? { width: '105%' } : { width: '105%', position: 'absolute', bottom: '1px' }} className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.toggleShowDeleted(entryIndex)}>\n <input type=\"checkbox\" checked={this.state.newEntries[entryIndex].showDeleted} />\n <span className=\"slider\"></span>\n </div>\n <label style={{ fontSize: \"12px\" }} className=\"checkbox-label\">Show Deleted</label>\n </div>}\n </div>\n ) : (\n <div className=\"bill-grid-actions\" key={entry.MinutesEntryID}>\n {this.state.savingVotes[entryIndex] || this.state.togglingEdit[entryIndex] ? <span className=\"small-spinner\"></span> :\n <React.Fragment>\n <button onClick={() => this.toggleCommentBox(entryIndex)} type=\"button\" disabled={this.props.categoryFormDisabled} className=\"button-link\">{entry.MinutesSummaries && entry.MinutesSummaries.length > 0 ? \"Edit\" : \"Add\"} Comment</button>\n {entry.MinutesActivities && entry.MinutesActivities.length > 0 && <button onClick={() => this.toggleEdit(entryIndex)} type=\"button\" className=\"button-link\" disabled={this.props.categoryFormDisabled}>Edit Motions</button>}\n </React.Fragment>}\n </div>\n )\n }\n </React.Fragment >\n </div >\n </div >\n );\n }\n\n render() {\n const { insertEntry, selectedMotion, references, nonLegislativeActionReferences, showAuxBillForm } = this.state;\n //Seperate the entries that are in block and out of block\n //Use map instead of filter so that the index is preserved\n const entries = this.props.formData.MinutesEntries;\n const outOfBlockEntries = entries.map(entry => {\n return entry.IsOOB ? entry : null\n });\n let inBlockEntries = entries.map(entry => {\n return !entry.IsOOB ? entry : null\n });\n const billNumbers = [\n {\n options: [{ label: 'No Legislation' }]\n },\n {\n button: <button type=\"button\" onClick={() => this.addAllEntries(false)} className=\"button small-button\">Select All In Block</button>,\n options: inBlockEntries.filter(opt => opt && opt.LegislationNumber),\n },\n {\n button: <button type=\"button\" onClick={() => this.addAllEntries(true)} className=\"button small-button\">Select All Out of Block</button>,\n options: outOfBlockEntries.filter(opt => opt && opt.LegislationNumber),\n }\n ];\n const auxOptions = this.props.sessionBills.filter(bill => {\n //If the bill is not already in the minutes entries then add it to the aux list \n if (!this.props.formData.MinutesEntries.find(x => x.LegislationID === bill.LegislationID)) {\n return bill;\n }\n })\n const memberListEvents = [\"H6013\", \"S6013\", \"H6113\", \"S6113\", \"H6213\", \"S6213\"];\n\n let inputValue = this.state.templateInputs.map((tInput, i) => {\n //For events H6013/S6013/H6113/S6113/H6213/S6213 there are sometimes incomplete lists of members. This will prevent the UI from adding blank member dropdown values to the description\n if (memberListEvents.includes(this.state.selectedMotion?.EventCode) && !tInput.ReferenceText) {\n return;\n }\n\n if (!tInput.ReferenceText && !this.state.selectedMotion?.ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n return this.state.templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.state.fullEventList.find(e => e.EventCode === this.state.templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === this.state.templateInputs.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : tInput.ReferenceText + (memberListEvents.includes(this.state.selectedMotion?.EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && this.state.templateInputs[i + 1] && this.state.templateInputs[i + 1].ActionReferenceType === \"Member\" && this.state.templateInputs[i + 1].ReferenceText ? \", \" : \"\")\n }).join('');\n return (\n <div>\n <div className=\"user-forms motion-form\">\n <div className=\"dlas-forms\">\n {this.state.showCommentBox !== false &&\n <CommentBox\n toggleBox={this.toggleCommentBox}\n handleCommentBoxChange={this.handleCommentBoxChange}\n comments={this.state.commentBoxContent}\n saveComment={this.saveComment}\n />\n }\n <div className=\"inner-grid one-and-eight\">\n <p className=\"small-header\">Motion</p>\n <div className=\"dlas-forms\">\n {showAuxBillForm\n ? <div className=\"inner-grid\" style={{ gridTemplateColumns: \"25px 1fr 150px 150px\", marginTop: \"19px\" }}>\n <a className=\"icon delete\" onClick={this.toggleAuxBillAdd} />\n <span style={{ fontSize: \"14px\" }}>This form may be used to make any bill in the session available to add to this minutes category. Use with caution.</span>\n <Select\n options={auxOptions}\n onChange={this.setAuxBill}\n isSearchable={true}\n />\n <button type=\"button\" className=\"button\" onClick={this.addAuxBill} disabled={this.state.savingAuxBill || this.props.categoryFormDisabled}>Add Bill to List</button>\n </div>\n : <div className=\"inner-grid\" style={{ gridTemplateColumns: \"25px 8fr 225px\", marginTop: \"19px\" }}>\n <a className=\"icon warning\" onClick={this.toggleAuxBillAdd} style={{ marginTop: \"19px\" }} />\n <div />\n </div>\n }\n </div>\n </div>\n <form>\n <div className=\"multi-row small-three-one-alt no-margin\">\n <div>\n <label>Bill #</label>\n <Select\n value={insertEntry}\n isMulti\n onChange={this.handleBillChange}\n options={billNumbers}\n styles={selectStyle}\n formatGroupLabel={data => <div>{data.button}</div>}\n getOptionLabel={option => option.LegislationNumber || option.label || \"Entry\"}\n getOptionValue={option => option.MinutesEntryID}\n isDisabled={this.state.smallMotionForm !== -1}\n />\n </div>\n <div onKeyUp={(e) => this.onKeyUp(e)}>\n <label>Motion</label>\n <Select\n value={selectedMotion}\n options={insertEntry && insertEntry.length && insertEntry.find(x => x.label === \"No Legislation\") ? nonLegislativeActionReferences : [...references].filter(r => !r.LegislationChamberCode || !insertEntry || insertEntry.find(b => b.LegislationChamberCode === r.LegislationChamberCode))}\n isDisabled={this.state.otherEventSelected || insertEntry.length === 0 || this.state.smallMotionForm !== -1 || insertEntry.find(x => x.LegislationNumber === \"No Legislation\")}\n onChange={(value) => this.handleMotionChange(value)}\n styles={selectStyle}\n isClearable\n ref={this.motionRef}\n />\n {this.state.otherEventSelected &&\n <>\n <button type=\"button\" className='icon delete' onClick={() => this.unSelectOtherEvent()}></button>\n\n <div className=\"inner-grid bill-history-event-controls\" style={{ marginTop: \"10px\" }}>\n <Select\n options={this.state.otherBillEventOptions}\n styles={selectStyle}\n value={this.state.otherEvent}\n getOptionLabel={opt => opt.EventCode ? \"(\" + opt.EventCode + \") \" + opt.label : opt.label}\n onChange={this.handleOtherEventChange}\n isDisabled={this.state.otherBillEventOptions.length === 0}\n />\n </div>\n </>\n }\n </div>\n <div>\n <label>Description</label>\n <input\n value={this.state.templateInputs.length > 0 ? '' : selectedMotion?.Description || selectedMotion?.CalendarDescription || ''}\n placeholder={selectedMotion ? this.state.templateInputs.length > 0 ? \"See below...\" : \"\" : \"Select motion...\"}\n disabled={!selectedMotion || this.state.templateInputs.length > 0}\n onChange={this.handleSelectedMotionDescriptionChange}\n />\n </div>\n <div className=\"inner-grid two\">\n <div>\n <br />\n <button type='button' disabled={(!this.state.selectedMotion && !this.state.insertEntry.find(x => x.LegislationNumber === \"No Legislation\")) || this.state.smallMotionForm !== -1 || this.props.categoryFormDisabled} className='button' onClick={this.insertMotion}>Add Motion</button>\n </div>\n <div>\n <br />\n <button type='button' disabled={!this.state.selectedMotion || this.state.smallMotionForm !== -1 || this.props.categoryFormDisabled} onClick={this.removeMotion} className='button danger'>Remove Motion</button>\n </div>\n </div>\n </div>\n {this.state.templateInputs.length > 0 &&\n <div className=\"multi-row small-two-one-alt no-margin\">\n <br />\n <div>\n <div>\n <span className='small-text txt-greyed'>{inputValue}</span>\n </div>\n <InputTypes\n newEvent={this.state.selectedMotion}\n memberList={this.props.memberList}\n committeeList={this.props.committeeList}\n communicationList={this.props.communicationList}\n eventList={this.state.reconsiderationEvents}\n handleChange={this.handleTemplateChange}\n entryIndex={0}\n activityIndex={0}\n references={this.state.templateInputs}\n textList={this.state.textList.filter(text => this.state.insertEntry.find(bill => bill.LegislationID === text.LegislationID) ? true : false)}\n />\n </div>\n </div>\n }\n </form>\n </div>\n </div>\n {entries.length ?\n <div className=\"flex-row flex-end\" style={{ marginBottom: '5px' }}>\n {this.state.showSwitchCategory &&\n <div className=\"inner-grid\" style={{ gap: '5px', gridTemplateColumns: '20px 4fr .1fr' }}>\n <div className=\"inner-grid align-center\">\n <button onClick={this.toggleSwitchCategory} type=\"button\" className=\"icon delete\"></button>\n </div>\n <Select\n value={this.state.selectedSwitchCategory}\n options={this.props.categories.filter(c => c.CalendarCategoryTypeID === this.props.formData.CalendarCategoryTypeID && c.MinutesCategoryID !== this.props.formData.MinutesCategoryID)}\n getOptionLabel={opt => this.props.getCategoryDescriptionText(opt)}\n onChange={this.handleSwitchCategoryChange}\n styles={selectStyle}\n />\n <button onClick={this.switchCategory} disabled={!this.state.checkedBills.length || this.state.switchingCategories || !this.state.selectedSwitchCategory} type=\"button\" className=\"button float-right\">{this.state.switchingCategories ? <div className=\"small-spinner\" /> : 'Switch'}</button>\n </div>\n }\n </div>\n : null\n }\n <div>\n <div className=\"bill-grid\">\n <div className=\"bill-grid-header\">\n <span></span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Bill #</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Bill Action</span>\n </div>\n <div className=\"bill-grid-header\">\n <span> </span>\n </div>\n </div>\n <div>\n <DragDropContext onDragEnd={this.onEntryDragEnd}>\n <Droppable droppableId={`entries-droppable`}>\n {(provided, snapshot) =>\n <div ref={provided.innerRef} style={getListStyle(snapshot.isDraggingOver)}>\n {inBlockEntries.map((entry, entryIndex) => {\n if (entry) {\n return (\n <Draggable isDragDisabled={this.props.categoryFormDisabled} key={`${entry.MinutesEntryID}-${entry.Sequence}`} draggableId={`${entry.MinutesEntryID}-${entry.Sequence}`} index={entryIndex}>\n {(provided, snapshot) =>\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}>\n {this.formInput(entry, entryIndex, provided)}\n </div>}\n </Draggable>\n );\n }\n })}\n {provided.placeholder}\n </div>\n }\n </Droppable>\n </DragDropContext>\n {outOfBlockEntries.find(ent => ent !== null) &&\n <div className=\"bill-grid\" style={{ gridTemplateColumns: 'none' }}>\n <div className=\"bold\">\n Out Of Block\n </div>\n </div>\n }\n {outOfBlockEntries.map((entry, entryIndex) => {\n if (entry) {\n return (this.formInput(entry, entryIndex));\n }\n })}\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst EditVoteTally = props => <textarea style={{ width: '25%' }} value={props.value} onChange={props.onChange} />\n\n//react-select default style makes the element too tall and the font too large\nconst fontSize = '0.8em'\nconst selectStyle = {\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: fontSize,\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: fontSize,\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n option: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n}\nconst legNumSelectStyle = {\n ...selectStyle,\n dropdownIndicator: styles => ({\n ...styles,\n padding: 0,\n }),\n container: styles => ({\n ...styles,\n width: '100%'\n }),\n control: styles => ({\n ...styles,\n padding: 0,\n minHeight: 'auto'\n })\n\n}\n\nexport default connect(\n (state) => {\n const { calendar, votes, bills, minutes } = state;\n return {\n calendar,\n votes,\n bills,\n minutes\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, calendarActionCreators, billActionCreators, minutesActionCreators), dispatch)\n }\n },\n null,\n {\n forwardRef: true\n }\n)(LegislativeForm)","import React from 'react';\n\nimport renderHTML from 'react-render-html';\n\nclass MinutesDetails extends React.Component {\n\n render() {\n const { categories, publicPage } = this.props;\n return (\n <div>\n {categories.filter(c => c.MinutesEntries && c.MinutesEntries.length).map((category, index) => {\n //Used to grey out the categories that have no published entries\n const nonPublicEntries = category.MinutesEntries.find(entry => !entry.IsPublic);\n return (<div key={index} className={!publicPage && \"preview-entry\"}>\n {!publicPage &&\n <div className=\"entry-index\">\n <p>{index + 1}</p>\n </div>\n }\n <div className=\"entry-text\">\n <ul>\n {!category.CategoryDescription.toLowerCase().includes('communication') && category.CategoryDescription.toLowerCase() !== 'order of business' ?\n category.CategoryText ?\n category.CategoryText.split(/%+/).map((categoryTextPiece, idx) =>\n categoryTextPiece.toLowerCase().includes(\"supplemental\") && index > 0 && categoryTextPiece === categories.filter(c => c.MinutesEntries && c.MinutesEntries.length)[index - 1]?.CategoryText?.split(/%+/)[idx] ? null : <li key={idx} className={`${(nonPublicEntries || category.MinutesEntries.length === 0) && !publicPage ? \"inactive \" : \"\"}category-heading`}>{categoryTextPiece}</li>\n )\n :\n <React.Fragment>\n {category.DisplayType && <li className={`${(nonPublicEntries || category.MinutesEntries.length === 0) && !publicPage ? \"inactive \" : \"\"}category-heading`}>{category.CategoryType}</li>}\n <li className={`${(nonPublicEntries || category.MinutesEntries.length === 0) && !publicPage ? \"inactive \" : \"\"}category-heading`}>{category.CategoryDescription}</li>\n </React.Fragment>\n : null\n }\n {[...category.MinutesEntries].sort((a, b) => (a.IsOOB === b.IsOOB ? 0 : a.IsOOB ? 1 : -1) || a.Sequence - b.Sequence).filter(entry => !entry.DeletionDate).map((entry, i) => (\n <React.Fragment key={i}>\n <li className={!entry.IsPublic && !publicPage ? \"inactive\" : \"\"} key={i} style={!entry.EntryText ? entry.CommunicationID && category.CategoryType !== 'Chairmans Report' && !category.MinutesEntries[i - 1] ? {} : { padding: \"0px\" } : {}}>\n {entry.MinutesActivities && entry.MinutesActivities.filter(activity => !activity.DeletionDate && (activity.InPreview || !entry.LegislationNumber)).length > 0 ?\n <React.Fragment>\n {entry.MinutesActivities.filter(activity => !activity.DeletionDate && (activity.InPreview || !entry.LegislationNumber)).map((act, actIndex) =>\n <span key={actIndex} className={!act.IsPublic && !publicPage ? \"inactive\" : \"\"}>\n {actIndex === 0 ?\n <>\n {(entry.LegislationNumber ? `${entry.LegislationNumber} - ` : '')}\n {renderHTML(act.Description?.replace(/COMMUNICATION FROM (HOUSE|SENATE) \\((HN|SN)\\d{4,8}\\):/g, function (match, p1) {\n return `<b>${match}</b>`;\n }) || \"\")}\n {(act.VoteTally ? ' ' + act.VoteTally : '')}</>\n :\n <>\n {`, `}\n {renderHTML(act.Description?.replace(/COMMUNICATION FROM (HOUSE|SENATE) \\((HN|SN)\\d{4,8}\\):/g, function (match, p1) {\n return `<b>${match}</b>`;\n }) || \"\")}\n {act.VoteTally ? ' ' + act.VoteTally : ''}\n </>\n }\n </span>\n )}\n </React.Fragment>\n :\n <React.Fragment>\n {(entry.LegislationNumber || category.CategoryType === \"Chairmans Report\" || category.CategoryType === \"Miscellaneous\") && entry.EntryText &&\n <React.Fragment>{entry.LegislationNumber ? entry.LegislationNumber + ' - ' : ''}{renderHTML(entry.EntryText)}</React.Fragment>\n }\n </React.Fragment>\n }\n </li>\n {!entry.EntryText && (!entry.MinutesActivities || entry.MinutesActivities.filter(activity => !activity.DeletionDate && (activity.InPreview || !entry.LegislationNumber)).length === 0) &&\n <React.Fragment>{entry.MinutesSummaries && entry.MinutesSummaries.length > 0 && entry.LegislationNumber &&\n <li className={!entry.IsPublic && !publicPage ? \"inactive\" : \"\"}>{entry.LegislationNumber}</li>}\n </React.Fragment>\n }\n {category.CategoryType !== 'Chairmans Report' && entry.MinutesSummaries && entry.MinutesSummaries.map((summary, summaryIndex) =>\n <li key={summaryIndex} className={!entry.IsPublic && !publicPage ? \"inactive\" : \"\"}>\n {renderHTML(summary.MinutesSummary || '')}\n </li>\n )}\n </React.Fragment>\n ))}\n </ul>\n </div>\n </div>);\n })}\n </div>\n )\n }\n}\n\nexport default MinutesDetails;\n","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst commListSuccess = 'COMM_LIST_SUCCESS';\nconst commListFailure = 'COMM_LIST_FAILURE';\n\nconst commGetSuccess = 'COMM_GET_SUCCESS';\nconst commGetFailure = 'COMM_GET_FAILURE';\n\nconst commSaveSuccess = 'COMM_SAVE_SUCCESS';\nconst commSaveFailure = 'COMM_SAVE_FAILURE';\n\nconst commFileSaveSuccess = 'COMM_FILE_SAVE_SUCCESS';\nconst commFileSaveFailure = 'COMM_FILE_SAVE_FAILURE';\n\nconst commCreateSuccess = 'COMM_CREATE_SUCCESS';\nconst commCreateFailure = 'COMM_CREATE_FAILURE';\n\nconst commCategoriesSuccess = \"COMM_CATEGORIES_SUCCESS\";\nconst commCategoriesFailure = \"COMM_CATEGORIES_FAILURE\";\n\nconst getCommunicationAssignmentsSuccess = \"GET_COMMUNICATION_MAPPINGS_SUCCESS\";\nconst getCommunicationAssignmentsFailure = \"GET_COMMUNICATION_MAPPINGS_FAILURE\";\n\nconst getCommunicationSummaryListSuccess = \"GET_COMMUNICATION_SUMMARY_LIST_SUCCESS\";\nconst getCommunicationSummaryListFailure = \"GET_COMMUNICATION_SUMMARY_LIST_FAILURE\";\n\nconst getAdminCommunicationAssignmentsSuccess = \"GET_ADMIN_COMMUNICATION_MAPPINGS_SUCCESS\";\nconst getAdminCommunicationAssignmentsFailure = \"GET_ADMIN_COMMUNICATION_MAPPINGS_FAILURE\";\n\nconst saveCommunicationAssignmentSuccess = \"SAVE_COMMUNICATION_MAPPING_SUCCESS\";\nconst saveCommunicationAssignmentFailure = \"SAVE_COMMUNICATION_MAPPING_FAILURE\";\n\nconst joinCommFileSuccess = \"JOIN_COMM_FILE_SUCCESS\";\nconst joinCommFileFailure = \"JOIN_COMM_FILE_FAILURE\";\n\nconst toggleChamber = \"COMM_TOGGLE_CHAMBER\";\n\nconst initialState = {\n commList: [],\n commListError: '',\n commCreate: '',\n commCreateError: '',\n commGet: '',\n commGetError: '',\n commSave: '',\n commSaveError: '',\n commFileSave: '',\n commFileSaveError: '',\n commCategories: [],\n commCategoriesError: '',\n commChamber: '',\n joinCommFile: '',\n joinCommFileError: '',\n communicationSummaryList: [],\n communicationSummaryListError: '',\n communicationAssignments: [],\n getCommunicationAssignmentsError: '',\n adminCommunicationAssignments: [],\n getAdminCommunicationAssignmentsError: '',\n communicationAssignmentSave: [],\n saveCommunicationAssignmentsError: ''\n};\n\nexport const communicationsActionCreators = {\n\n receiveCommList: (result) => ({\n type: commListSuccess,\n commList: result\n }),\n\n commListError: (message) => ({\n type: commListFailure,\n commList: [],\n commListError: message\n }),\n\n getCommList: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetPartnerLegislationCommunicationsListAsync', 'GET', headers, '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetLegislationCommunicationsListAsync', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.commListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(communicationsActionCreators.receiveCommList(result[1].CommunicationsList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.receiveCommList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCommSummaryList: (result) => ({\n type: getCommunicationSummaryListSuccess,\n communicationSummaryList: result\n }),\n\n commSummaryListError: (message) => ({\n type: getCommunicationSummaryListFailure,\n communicationSummaryList: [],\n communicationSummaryListError: message\n }),\n\n getCommunicationSummaryList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetPartnerLegislationCommunicationSummaryListAsync?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.commSummaryListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(communicationsActionCreators.receiveCommSummaryList(result[1].CommunicationSummariesResponse))\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.receiveCommSummaryList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCommGet: (result) => ({\n type: commGetSuccess,\n commGet: result\n }),\n\n commGetError: (message) => ({\n type: commGetFailure,\n commGetError: message\n }),\n\n getComm: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetPartnerLegislationCommunicationsByIDAsync', 'GET', headers, '', params);\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetLegislationCommunicationsByIDAsync', 'GET', headers, '', params);\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.commGetError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(communicationsActionCreators.receiveCommGet(result[1].CommunicationResponse[0]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.commGetError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCommCategories: (result) => ({\n type: commCategoriesSuccess,\n commCategories: result\n }),\n\n commCategoriesError: (message) => ({\n type: commCategoriesFailure,\n commCategoriesError: message\n }),\n\n getCommCategories: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetCommunicationCategoryReferencesAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.commCategoriesError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(communicationsActionCreators.receiveCommCategories(result[1].CommunicationCategoryTypesReference));\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.commCategoriesError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCommunicationAssignments: (responseObj) => ({\n type: getCommunicationAssignmentsSuccess,\n communicationAssignments: responseObj.CommunicationAssignments\n }),\n\n getCommunicationAssignmentsError: error => ({\n type: getCommunicationAssignmentsFailure,\n getCommunicationAssignmentsError: error\n }),\n\n getCommunicationAssignments: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetCommunicationAssignmentsAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.getCommunicationAssignmentsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(communicationsActionCreators.receiveCommunicationAssignments(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.getCommunicationAssignmentsError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveAdminCommunicationAssignments: (responseObj) => ({\n type: getAdminCommunicationAssignmentsSuccess,\n adminCommunicationAssignments: responseObj.CommunicationAssignments\n }),\n\n getAdminCommunicationAssignmentsError: error => ({\n type: getAdminCommunicationAssignmentsFailure,\n getAdminCommunicationAssignmentsError: error\n }),\n\n getAdminCommunicationAssignments: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/GetAdminCommunicationAssignmentsAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.getAdminCommunicationAssignmentsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(communicationsActionCreators.receiveAdminCommunicationAssignments(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.getAdminCommunicationAssignmentsError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCommunicationAssignmentSave: (responseObj) => ({\n type: saveCommunicationAssignmentSuccess,\n communicationAssignmentSave: responseObj\n }),\n\n saveCommunicationAssignmentError: error => ({\n type: saveCommunicationAssignmentFailure,\n saveCommunicationAssignmentsError: error\n }),\n\n saveCommunicationAssignment: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/SaveCommunicationAssignmentAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.saveCommunicationAssignmentError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(communicationsActionCreators.receiveCommunicationAssignmentSave(JSON.parse(result[1].Message)))\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.saveCommunicationAssignmentError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveCommSave: (result) => ({\n type: commSaveSuccess,\n commSave: result\n }),\n\n commSaveError: (message) => ({\n type: commSaveFailure,\n commSaveError: message\n }),\n\n saveComm: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/SaveLegislationCommunicationAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.saveCommError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n try {\n const saveCommunicationResponse = JSON.parse(result[1].Message);\n dispatch(communicationsActionCreators.receiveCommSave(saveCommunicationResponse[0]));\n } catch {\n // Message does not contain json. \n dispatch(communicationsActionCreators.receiveCommSave(result[1].Message));\n }\n // The save can go fine but the failure message can contain information about the minutes save failing\n if (result[1].FailureMessage) {\n return result[1].FailureMessage;\n }\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.saveCommError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCommFileSave: (result) => ({\n type: commFileSaveSuccess,\n commFileSave: result\n }),\n\n commFileSaveError: (message) => ({\n type: commFileSaveFailure,\n commFileSaveError: message\n }),\n\n saveCommFile: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_FILE_GEN_API_URL) + '/CommunicationFileGeneration/api/ProcessCommunicationFilesAsync', 'POST', headers, '', params, true)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.commFileSaveError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(communicationsActionCreators.receiveCommFileSave(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.commFileSaveError('No Content'));\n return Promise.reject('No Content')\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveJoinCommFile: (result) => ({\n type: joinCommFileSuccess,\n joinCommFile: result\n }),\n\n joinCommFileError: (message) => ({\n type: joinCommFileFailure,\n joinCommFileError: message\n }),\n\n joinCommFile: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_FILE_GEN_API_URL) + '/LegislationFileGeneration/api/JoinLegislationCommunicationsAsync', 'POST', headers, body, '', true)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.joinCommFileError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(communicationsActionCreators.receiveJoinCommFile(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.joinCommFileError('No Content'));\n return Promise.reject('No Content');\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCommCreate: (result) => ({\n type: commCreateSuccess,\n commCreate: result\n }),\n\n commCreateError: (message) => ({\n type: commCreateFailure,\n commCreateError: message\n }),\n\n createComm: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COMMUNICATIONS_API_URL) + '/LegislationCommunications/api/CreateLegislationCommunicationAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(communicationsActionCreators.commCreateError(result[1]));\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n const createCommunicationResponse = JSON.parse(result[1].Message);\n dispatch(communicationsActionCreators.receiveCommCreate(createCommunicationResponse[0]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(communicationsActionCreators.commCreateError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n toggleChamber: (value) => ({\n type: toggleChamber,\n commChamber: value\n })\n}\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n case commListSuccess:\n return Object.assign({}, state, {\n commList: action.commList,\n commListError: ''\n })\n case commListFailure:\n return Object.assign({}, state, {\n commListError: action.commListError\n })\n case getCommunicationSummaryListSuccess:\n return Object.assign({}, state, {\n communicationSummaryList: action.communicationSummaryList,\n communicationSummaryListError: ''\n })\n case getCommunicationSummaryListFailure:\n return Object.assign({}, state, {\n communicationSummaryListError: action.communicationSummaryListError\n })\n case commGetSuccess:\n return Object.assign({}, state, {\n commGet: action.commGet,\n commGetError: ''\n })\n case commGetFailure:\n return Object.assign({}, state, {\n commGetError: action.commGetError\n })\n case commCategoriesSuccess:\n return Object.assign({}, state, {\n commCategories: action.commCategories,\n commCategoriesError: ''\n })\n case commCategoriesFailure:\n return Object.assign({}, state, {\n commCategoriesError: action.commCategoriesError\n })\n case getCommunicationAssignmentsFailure:\n return Object.assign({}, state, {\n getCommunicationAssignmentsError: action.getCommunicationAssignmentsError\n });\n case getCommunicationAssignmentsSuccess:\n return Object.assign({}, state, {\n communicationAssignments: action.communicationAssignments,\n getCommunicationAssignmentsError: ''\n });\n case getAdminCommunicationAssignmentsFailure:\n return Object.assign({}, state, {\n getAdminCommunicationAssignmentsError: action.getAdminCommunicationAssignmentsError\n });\n case getAdminCommunicationAssignmentsSuccess:\n return Object.assign({}, state, {\n adminCommunicationAssignments: action.adminCommunicationAssignments,\n getAdminCommunicationAssignmentsError: ''\n });\n case saveCommunicationAssignmentFailure:\n return Object.assign({}, state, {\n saveCommunicationAssignmentsError: action.saveCommunicationAssignmentsError\n });\n case saveCommunicationAssignmentSuccess:\n return Object.assign({}, state, {\n communicationAssignmentSave: action.communicationAssignmentSave,\n saveCommunicationAssignmentsError: ''\n });\n case commSaveSuccess:\n return Object.assign({}, state, {\n commSave: action.commSave,\n commSaveError: ''\n })\n case commSaveFailure:\n return Object.assign({}, state, {\n commSaveError: action.commSaveError\n })\n case commFileSaveSuccess:\n return Object.assign({}, state, {\n commFileSave: action.commFileSave,\n commFileSaveError: ''\n })\n case commFileSaveFailure:\n return Object.assign({}, state, {\n commFileSaveError: action.commFileSaveError\n })\n case joinCommFileSuccess:\n return Object.assign({}, state, {\n joinCommFile: action.joinCommFile,\n joinCommFileError: ''\n })\n case joinCommFileFailure:\n return Object.assign({}, state, {\n joinCommFileError: action.joinCommFileError\n })\n case commCreateSuccess:\n return Object.assign({}, state, {\n commCreate: action.commCreate,\n commCreateError: ''\n })\n case commCreateFailure:\n return Object.assign({}, state, {\n commCreateError: action.commCreateError\n })\n case toggleChamber:\n return Object.assign({}, state, {\n commChamber: action.commChamber\n })\n default:\n return state\n }\n};","import React from \"react\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport * as signalR from \"@microsoft/signalr\";\nimport moment from 'moment-timezone'\nimport LoaderComponent from '../../../lis-shared/lis-layout/components/lis-loader-component';\nimport Misc from './forms/misc';\nimport NonLegislativeForm from './forms/non-legislative-form';\nimport LegislativeForm from './forms/legislative-form';\nimport MinutesDetails from '../../../lis-shared/lis-minutes/lis-minutes-details';\nimport { memberActionCreators } from \"../../../stores/lis-members-store\";\nimport Select from 'react-select';\nimport ReactTable from 'react-table';\nimport DatePicker from 'react-datepicker';\nimport { billActionCreators } from \"../../../stores/lis-legislation-store\";\nimport { committeeActionCreators } from \"../../../stores/lis-committee-store\";\nimport { sessionActionCreators } from \"../../../stores/lis-session-store\";\nimport { communicationsActionCreators } from \"../../../stores/lis-communications-store\";\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\n\nclass MinutesManagementForm extends React.Component {\n\n constructor(props) {\n super(props)\n this.state = {\n buildingCategoryConnection: true,\n buildingEntryConnection: true,\n activity: '',\n minutesBook: {},\n currentActivitySequence: 0,\n isPendingChange: false,\n lastSavedTime: '',\n lastPublishedTime: '',\n entryHubConnection: null,\n categoryHubConnection: null,\n isLoaded: false,\n disableChanges: false,\n //Fieldsets\n indexFieldsetIsActive: true,\n activityFieldsetIsActive: false,\n previewFieldsetIsActive: false,\n memberList: [],\n committeeList: [],\n communicationList: [],\n actionTypes: [],\n calendarCategories: [],\n categoriesToMove: [],\n selectedCategoryToMoveTo: -1,\n sessionBills: [],\n publishing: false,\n committeeMinutesBooks: [],\n chairReportCategoriesSetForRegeneration: [],\n regeneratingCategories: [],\n fetchedMinutesBookIDs: [],\n categoryFormDisabled: {}\n }\n\n //Ref used to scroll down to activity section\n this.activityRef = React.createRef();\n this.entryFormRef = React.createRef();\n\n this.getCategoryDescriptionText = this.getCategoryDescriptionText.bind(this);\n this.entryChange = this.entryChange.bind(this);\n this.multipleEntryChange = this.multipleEntryChange.bind(this);\n this.toggleMoveEntry = this.toggleMoveEntry.bind(this);\n this.moveEntry = this.moveEntry.bind(this);\n this.bulkMoveEntry = this.bulkMoveEntry.bind(this);\n this.handleSequenceChange = this.handleSequenceChange.bind(this);\n this.saveCategory = this.saveCategory.bind(this);\n this.saveEntry = this.saveEntry.bind(this);\n this.publishAllEntries = this.publishAllEntries.bind(this);\n this.saveMinutesBook = this.saveMinutesBook.bind(this);\n this.showPreview = this.showPreview.bind(this);\n this.showActivity = this.showActivity.bind(this);\n this.createCategory = this.createCategory.bind(this);\n this.duplicateChairmansCategory = this.duplicateChairmansCategory.bind(this);\n this.receiveEntryByWebsocket = this.receiveEntryByWebsocket.bind(this);\n this.receiveCategoryByWebsocket = this.receiveCategoryByWebsocket.bind(this);\n this.toggleFetchChairs = this.toggleFetchChairs.bind(this);\n this.handleChairsReportDateChange = this.handleChairsReportDateChange.bind(this);\n this.fetchChairsReports = this.fetchChairsReports.bind(this);\n this.toggleChairsReport = this.toggleChairsReport.bind(this);\n this.regenerateChairsReportCategory = this.regenerateChairsReportCategory.bind(this);\n this.toggleEditCategoryText = this.toggleEditCategoryText.bind(this);\n this.setTempCategoryText = this.setTempCategoryText.bind(this);\n this.toggleMinutesStatus = this.toggleMinutesStatus.bind(this);\n this.getMinutes = this.getMinutes.bind(this);\n }\n\n toggleFieldsetCollapse(isActive) {\n this.setState(state => ({\n [isActive]: !state[isActive]\n }));\n }\n\n //Some categories get the type pre-pended to the description while other do not\n getCategoryDescriptionText(item) {\n if (!item) return;\n\n if (item.CategoryType === 'Motion') {\n return item.CategoryDescription + \" to \" + item.MinutesEntries[0].value + \" by \" + item.MinutesEntries[1].value.label + item.MinutesEntries[2].value;\n } else if (item.CategoryText) {\n if (item.CategoryText.startsWith('%')) {\n item.CategoryText = item.CategoryText.substr(1);\n }\n return item.CategoryText.replaceAll(/%+/g, \" - \")\n } else {\n return (item.DisplayType ? item.CategoryType + ' - ' : '') + item.CategoryDescription;\n }\n }\n\n toggleEditCategoryText(save) {\n this.setState({ editingCategoryText: !this.state.editingCategoryText }, () => {\n if (save) {\n let minutesBook = { ...this.state.minutesBook };\n minutesBook.MinutesCategories[this.state.currentActivitySequence - 1].CategoryText = this.state.tempCategoryText.replaceAll(\" - \", \"%\");\n this.saveCategory(minutesBook.MinutesCategories[this.state.currentActivitySequence - 1]);\n } else if (this.state.editingCategoryText) {\n this.setState({ tempCategoryText: this.getCategoryDescriptionText(this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1]) })\n }\n })\n }\n\n setTempCategoryText(val) {\n this.setState({ tempCategoryText: val })\n }\n\n entryChange(index, entry, sequence) {\n //Takes the sequence, which is always one more than the index, and change the values for that MinutesEntry\n let newFormData = JSON.parse(JSON.stringify(this.state.minutesBook));\n newFormData.MinutesCategories[sequence - 1].MinutesEntries[index] = entry;\n this.setState({\n minutesBook: newFormData,\n isPendingChange: true\n });\n }\n\n multipleEntryChange(entries, sequence) {\n let newFormData = JSON.parse(JSON.stringify(this.state.minutesBook));\n newFormData.MinutesCategories[sequence - 1].MinutesEntries = entries;\n this.setState({\n minutesBook: newFormData,\n isPendingChange: true\n });\n }\n\n toggleMoveEntry(open, categoryIndex, entryIndex) {\n if (open) {\n const currentCategory = this.state.minutesBook.MinutesCategories[categoryIndex];\n const applicableCategories = this.state.minutesBook.MinutesCategories.filter(cat => cat.CategoryType === currentCategory.CategoryType && cat.MinutesCategoryID !== currentCategory.MinutesCategoryID);\n this.setState({\n movingCategorySource: categoryIndex,\n movingEntrySource: entryIndex,\n categoriesToMove: applicableCategories,\n showMoveEntryDialog: open\n });\n } else {\n this.setState({\n showMoveEntryDialog: false,\n categoriesToMove: [],\n selectedCategoryToMoveTo: -1,\n movingCategorySource: -1,\n movingEntrySource: -1,\n });\n }\n }\n\n moveEntry(destinationCategoryIndex) {\n let sourceCategory = { ...this.state.minutesBook.MinutesCategories[this.state.movingCategorySource] }\n let sourceEntry = { ...sourceCategory.MinutesEntries[this.state.movingEntrySource] };\n let destinationCategory = this.state.minutesBook.MinutesCategories.find(cat => cat.MinutesCategoryID === this.state.categoriesToMove[destinationCategoryIndex].MinutesCategoryID);\n if (destinationCategory) {\n let newEntry = {\n ...sourceEntry,\n MinutesCategoryID: destinationCategory.MinutesCategoryID,\n Sequence: destinationCategory.MinutesEntries?.length ? Math.max(...destinationCategory.MinutesEntries.map(e => e.Sequence || 0)) + 1 : 1\n };\n this.saveEntry(newEntry);\n this.showActivity(destinationCategory);\n this.toggleMoveEntry(false);\n\n //Remove the old entry from the state variable\n let minutesBook = { ...this.state.minutesBook };\n minutesBook.MinutesCategories[this.state.movingCategorySource].MinutesEntries.splice(this.state.movingEntrySource, 1);\n this.setState({\n minutesBook: minutesBook\n });\n }\n }\n\n bulkMoveEntry(entries, sourceCategoryIdx, destinationCategoryID) {\n const destinationCategory = this.state.minutesBook.MinutesCategories.find(mc => mc.MinutesCategoryID === destinationCategoryID)\n if (destinationCategory) {\n let minutesBook = { ...this.state.minutesBook };\n entries.forEach((entry, idx) => {\n entry.MinutesCategoryID = destinationCategoryID;\n entry.Sequence = destinationCategory.MinutesEntries && destinationCategory.MinutesEntries.length > 0 ? destinationCategory.MinutesEntries[destinationCategory.MinutesEntries.length - 1].Sequence + idx + 1 : 1;\n //Remove the old entries from the state variable\n const sourceEntryIdx = minutesBook.MinutesCategories[sourceCategoryIdx].MinutesEntries.findIndex(me => me.MinutesEntryID === entry.MinutesEntryID);\n minutesBook.MinutesCategories[sourceCategoryIdx].MinutesEntries.splice(sourceEntryIdx, 1);\n });\n this.saveEntry(entries);\n\n this.setState({\n minutesBook: minutesBook\n });\n }\n }\n\n saveEntry(entry, callback) {\n //Find any MinutesActivities' MinutesActions where there is no reference info and discard\n let theEntry = {... entry};\n\n for (let i = 0; i < theEntry.MinutesActivities.length; i++) {\n theEntry.MinutesActivities[i].Description = theEntry.MinutesActivities[i].Description.replace(\"undefined\", \"\");\n if(theEntry.MinutesActivities[i].ActivityReferences) {\n for (let j = 0; j < theEntry.MinutesActivities[i].ActivityReferences.length; j++) {\n if (!theEntry.MinutesActivities[i].ActivityReferences[j].ActionReferenceTypeID) {\n theEntry.MinutesActivities[i].ActivityReferences.splice(j, 1);\n }\n }\n }\n }\n\n //Request model has to look like this\n const entryObject = { MinutesEntrySave: Array.isArray(theEntry) ? theEntry : [theEntry] };\n //Save by Websocket. Sends the jwt for auth purposes\n const self = this;\n this.state.entryHubConnection.invoke(\"SaveEntry\", entryObject, localStorage.getItem('LIS_ID_TOKEN'))\n .then(() => {\n if (callback) { callback(); }\n }).catch(function (err) {\n console.error(err.toString());\n if (err.toString().toLowerCase().includes(\"connection closed\")) {\n self.props.actions.makeToast([{ message: \"Entry Connection Disconnected\", type: \"failure\" }])\n }\n });\n }\n\n publishAllEntries() {\n this.setState({ publishing: true }, () => {\n //make sure the minutes book itself is public\n let promise = Promise.resolve();\n if (!this.state.minutesBook.IsPublic) {\n promise = this.saveMinutesBook(true);\n }\n let activitesForClerksCopy = [];\n\n promise.then(() => {\n if (!this.state.minutesBook.MinutesCategories || !this.state.minutesBook.MinutesCategories.length) {\n this.setState({ publishing: false })\n } else {\n let promises = []\n\n this.state.minutesBook.MinutesCategories.forEach((category, categoryIdx) => {\n if (category.ReleaseToPreview) {\n this.setState({ publishing: true }, () => {\n category.MinutesEntries.forEach((entry, entryIdx) => {\n let newEntry = JSON.parse(JSON.stringify(entry));\n let publishEntry = false;\n\n if (!newEntry.IsPublic) {\n publishEntry = true;\n }\n\n newEntry.IsPublic = true;\n newEntry.IsReleased = true;\n\n if (newEntry.MinutesActivities) {\n newEntry.MinutesActivities.forEach(activity => {\n if (!activity.IsPublic && this.props.bills.billEventRef && this.props.bills.billEventRef.find(x => x.EventCode === activity.EventCode) && this.props.bills.billEventRef.find(x => x.EventCode === activity.EventCode).IsPassage === true) {\n activitesForClerksCopy.push(activity.MinutesActivityID)\n }\n\n if (!activity.IsPublic) {\n publishEntry = true;\n activity.IsPublic = true;\n }\n });\n }\n\n if (publishEntry) {\n promises.push(\n this.saveEntry(newEntry, () => {\n if (entryIdx === category.MinutesEntries.length - 1) {\n this.setState({ publishing: false })\n }\n })\n )\n }\n });\n })\n } else if (categoryIdx === this.state.minutesBook.MinutesCategories.length - 1) {\n this.setState({ publishing: false })\n }\n })\n\n Promise.all(promises).then(() => {\n if (activitesForClerksCopy.length > 0) {\n this.props.actions.genClerksCopy(activitesForClerksCopy);\n }\n })\n\n this.setState({ publishing: false })\n }\n // If a user is editing an activity then clicks publish the save will update the mod dates\n // Meaning that once the user tries to save their activity it will fail because the mod dates are not correct\n // So get rid of all edits\n if (this.entryFormRef.current) {\n this.entryFormRef.current.closeNewEntries();\n }\n this.setState({\n lastPublishedTime: moment()\n });\n }).catch(() => {\n this.setState({ publishing: false })\n })\n })\n }\n\n handleSequenceChange(categories) {\n //The sequence change has been handled by the MinutesIndex class. So the new list of Minute Categories is sent here to modify the minutesBook\n let minutesBook = this.state.minutesBook;\n //Check and see if the currently opened activity has been affected by the sequence change. If so, then update the current activity state item \n let newCategoryIndex = this.state.currentActivitySequence - 1;\n if (categories[this.state.currentActivitySequence - 1] !== this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1]) {\n newCategoryIndex = categories.findIndex(category => category === this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1])\n }\n minutesBook.MinutesCategories = categories;\n //currentActivitySequence is 0 by default so we don't want to set currentActivitySequence to an undefined value. \n //So make a check to see if the user has clicked on a category item yet. If not then leave it at zero\n this.setState({\n minutesBook: minutesBook,\n currentActivitySequence: categories[newCategoryIndex] ? categories[newCategoryIndex].Sequence : 0\n }, async function () {\n await this.saveMinutesBook()\n });\n }\n\n showPreview(index) {\n let minutesBook = JSON.parse(JSON.stringify(this.state.minutesBook));\n let category = minutesBook.MinutesCategories[index];\n //flips the 'show' key. this will be used in the Preview class to dictate whether a section will be shown or not\n const show = !category.ReleaseToPreview;\n category.ReleaseToPreview = show;\n this.setState({\n minutesBook: minutesBook\n }, () => {\n this.saveCategory(category);\n });\n }\n\n showActivity(category, e) {\n //Check to see if the checkbox was clicked so the activity doesn't open on checkbox click\n if (!e || e.target.type !== \"checkbox\") {\n let minutesBook = JSON.parse(JSON.stringify(this.state.minutesBook));\n category.ReleaseToPreview = true;\n //Open the activity drawer\n this.setState({\n activityFieldsetIsActive: true,\n currentActivitySequence: category.Sequence,\n activity: category.CategoryType,\n minutesBook: minutesBook,\n editingCategoryText: false\n }, () => {\n //Get the size and position of the activity form and scroll down to it\n const activityRect = this.activityRef.current.getBoundingClientRect();\n const windowY = window.scrollY;\n window.scrollTo({\n top: activityRect.top + windowY,\n behavior: 'smooth'\n });\n\n this.saveCategory(category);\n });\n }\n }\n\n saveCategory(category) {\n let categoryFormDisabled = { ...this.state.categoryFormDisabled };\n categoryFormDisabled[category.Sequence] = true;\n this.setState({ categoryFormDisabled }, () => {\n const self = this;\n this.state.categoryHubConnection.invoke(\"SaveCategory\", category, localStorage.getItem('LIS_ID_TOKEN'))\n .catch(function (err) {\n console.error(err.toString());\n categoryFormDisabled[category.Sequence] = false;\n self.setState({\n categoryFormDisabled\n })\n if (err.toString().toLowerCase().includes(\"connection closed\")) {\n self.props.actions.makeToast([{ message: \"Category Connection Disconnected\", type: \"failure\" }])\n }\n });\n })\n }\n\n async saveMinutesBook(publish) {\n //Save the new sequence\n let minutesBook = JSON.parse(JSON.stringify(this.state.minutesBook));\n if (publish) { minutesBook.IsPublic = true; }\n //Remove the minute entries so the request doesn't take as long\n minutesBook.MinutesCategories.forEach(category => delete category.MinutesEntries);\n delete minutesBook.MinutesFiles;\n //Disable changes so the user doesn't try to save something else while this is being saved\n this.setState({ disableChanges: true })\n await this.props.actions.saveMinutesBook(minutesBook)\n .then(() => {\n let minutesBook = { ...this.state.minutesBook };\n const newMinutesBook = this.props.minutes.minutesBookSave;\n minutesBook.ModificationDate = newMinutesBook.ModificationDate;\n minutesBook.MinutesCategories.forEach((category, index) => {\n category.ModificationDate = newMinutesBook.MinutesCategories[index].ModificationDate;\n });\n this.setState({\n minutesBook: minutesBook,\n disableChanges: false\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.props.actions.makeToast([{ message: 'Save Failed', type: \"failure\" }])\n });\n }\n\n async createCategory(newCategory, callback) {\n this.setState({\n creatingCategory: true\n });\n //Save a blank entry to the category if there isn't one already\n newCategory.MinutesEntries = newCategory.MinutesEntries && newCategory.MinutesEntries.length ? newCategory.MinutesEntries : [{\n EntryText: '',\n Sequence: 1\n }];\n //Add motion button clicked, create a blank motion onto the list of categories\n newCategory.MinutesBookID = parseInt(this.props.match.params.minutesbookid, 10);\n await this.props.actions.createCategory(newCategory)\n .then(() => {\n let categoryCreate = this.props.minutes.categoryCreate;\n if (!categoryCreate) {\n throw 'Category Creation Failed';\n }\n if (callback) {\n callback(categoryCreate.MinutesCategoryID)\n }\n // Once the category is saved then scroll down to it\n // The new category is added to the book by the websocket connection so we do not have to add it here\n this.setState({\n activity: categoryCreate.CategoryType,\n activityFieldsetIsActive: true,\n currentActivitySequence: categoryCreate.Sequence,\n creatingCategory: false\n }, () => {\n //Get the size and position of the activity form and scroll down to it\n const activityRect = this.activityRef.current.getBoundingClientRect();\n const windowY = window.scrollY;\n window.scrollTo({\n top: activityRect.top + windowY,\n behavior: 'smooth'\n });\n });\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n creatingCategory: false,\n fetchingChairsReports: false\n });\n console.log(err)\n this.props.actions.makeToast([{ message: 'Failed to Create', type: \"failure\" }])\n });\n }\n\n async duplicateChairmansCategory(calendarCategoryTypeID) {\n let minutesBook = { ...this.state.minutesBook };\n let categoryToDuplicate = JSON.parse(JSON.stringify(minutesBook.MinutesCategories.find(mc => mc.CalendarCategoryTypeID === calendarCategoryTypeID)));\n //set sequence\n categoryToDuplicate.Sequence = minutesBook.MinutesCategories.length + 1;\n //delete mod dates, IDs, etc\n delete categoryToDuplicate.MinutesCategoryID;\n delete categoryToDuplicate.ModificationDate;\n categoryToDuplicate.MinutesEntries.forEach(entry => {\n delete entry.MinutesEntryID;\n delete entry.MinutesCategoryID;\n delete entry.ModificationDate;\n entry.MinutesSummaries.forEach(summary => {\n delete summary.MinutesSummaryID;\n delete summary.MinutesEntryID;\n delete summary.ModificationDate;\n })\n entry.MinutesActivities.forEach(act => {\n delete act.MinutesSummaryID;\n delete act.MinutesEntryID;\n delete act.ModificationDate;\n })\n })\n\n await this.createCategory(categoryToDuplicate);\n }\n\n receiveEntryByWebsocket(result) {\n let minutesBook = JSON.parse(JSON.stringify(this.state.minutesBook));\n result.forEach(entryFromResult => {\n let categoryIndex = -1;\n let entryIndex = -1;\n categoryIndex = minutesBook.MinutesCategories.findIndex(category => category.MinutesCategoryID === entryFromResult.MinutesCategoryID);\n //If an object is not found in the array then don't continue. The entry is probably in another book.\n if (categoryIndex !== -1) {\n entryIndex = minutesBook.MinutesCategories[categoryIndex].MinutesEntries.findIndex(entry => entry.MinutesEntryID === entryFromResult.MinutesEntryID);\n entryFromResult.MinutesActivities = entryFromResult.MinutesActivities || [];\n if (entryIndex !== -1) {\n minutesBook.MinutesCategories[categoryIndex].MinutesEntries[entryIndex].MinutesActivities = minutesBook.MinutesCategories[categoryIndex].MinutesEntries[entryIndex].MinutesActivities || [];\n entryFromResult.MinutesActivities.forEach(act => {\n if (!act.Sequence && !minutesBook.MinutesCategories[categoryIndex].MinutesEntries[entryIndex].MinutesActivities.find(ma => ma.MinutesActivityID === act.MinutesActivityID)) {\n act.Sequence = minutesBook.MinutesCategories[categoryIndex].MinutesEntries[entryIndex].MinutesActivities.length ? Math.max(...minutesBook.MinutesCategories[categoryIndex].MinutesEntries[entryIndex].MinutesActivities.filter(ma => ma.MinutesActivityID).map(e => e.Sequence || 0)) + 1 : 1;\n }\n })\n minutesBook.MinutesCategories[categoryIndex].MinutesEntries[entryIndex] = entryFromResult;\n minutesBook.MinutesCategories[categoryIndex].MinutesEntries[entryIndex].MinutesActivities.sort((a, b) => a.Sequence - b.Sequence);\n } else {\n let minuteEntries = minutesBook.MinutesCategories[categoryIndex].MinutesEntries || [];\n entryFromResult.Sequence = entryFromResult.Sequence || (minuteEntries.length ? Math.max(...minuteEntries.map(e => e.Sequence || 0)) + 1 : 1);\n minuteEntries.push(entryFromResult);\n minuteEntries.sort((a, b) => a.Sequence - b.Sequence);\n }\n }\n })\n this.setState({\n minutesBook: minutesBook\n });\n }\n\n receiveCategoryByWebsocket(result) {\n //Sometimes we'll receive a category that hasn't been updated that has the wrong sequence values \n //Also sometimes we'll get null responses\n if (result[0].MinutesEntries) {\n result[0].MinutesEntries.sort((a, b) => a.Sequence - b.Sequence);\n }\n\n let categoryFormDisabled = { ...this.state.categoryFormDisabled };\n let minutesBook = JSON.parse(JSON.stringify(this.state.minutesBook));\n result.forEach(categoryFromResult => {\n // If these are not equal then the message is for another book\n if (categoryFromResult.MinutesBookID === minutesBook.MinutesBookID) {\n let categoryIndex = -1;\n //Sometimes these arrays can be undefined if they have no data. Make sure that they are arrays so they don't cause problems down the line.\n categoryFromResult.MinutesEntries = categoryFromResult.MinutesEntries || [];\n categoryFromResult.MinutesEntries.forEach(entry => entry.MinutesActivities = entry.MinutesActivities || []);\n\n categoryIndex = minutesBook.MinutesCategories.findIndex(category => category.MinutesCategoryID === categoryFromResult.MinutesCategoryID);\n if (categoryIndex !== -1) {\n categoryFormDisabled[minutesBook.MinutesCategories[categoryIndex].Sequence] = false;\n minutesBook.MinutesCategories[categoryIndex] = categoryFromResult;\n } else {\n minutesBook.MinutesCategories.push(categoryFromResult);\n minutesBook.MinutesCategories.sort((a, b) => a.Sequence - b.Sequence);\n }\n }\n })\n this.setState({\n minutesBook: minutesBook,\n categoryFormDisabled\n });\n }\n\n componentDidMount() {\n this.getMinutes();\n\n this.props.actions.getCalendarCategoriesReferences('?Chambercode=S', true)\n .then(() => {\n this.setState({\n calendarCategories: this.props.calendar.calendarCategoriesReferences\n });\n });\n\n const getConnectionId = (conn, connectionName) => {\n //This connection ID might be used later\n conn.invoke('getConnectionId')\n .then(connectionId => {\n console.log(`${connectionName}: ${connectionId}`);\n this.setState({\n [connectionName]: connectionId\n });\n });\n }\n //When a WebSocket message comes across with this label then the minutesbook object needs to be updated with new values\n const handleMessage = (message, functionToRun) => {\n try {\n //the Value key holds error info when a save has failed\n if (message.StatusCode > 399) throw 'Server Error: ' + JSON.stringify(message);\n //Some reason the Value key doesn't parse. So I do it again here\n let result;\n if (message.Value)\n result = JSON.parse(message.Value);\n else\n result = message;\n functionToRun(result)\n this.setState({\n lastSaveErr: '',\n lastSavedTime: moment(),\n isPendingChange: false\n });\n } catch (err) {\n console.log(err);\n this.setState({\n lastSaveErr: err.toString(),\n isPendingChange: false\n });\n }\n };\n\n //A second function is used because the JSON will look different depending on whether the data was\n //originally saved by Websocket or by HTTP\n const handleMessageOriginatedFromWebsocket = (message, functionToRun) => {\n try {\n //the Value key holds error info when a save has failed\n if (!message.Success) throw 'Server Error: ' + JSON.stringify(message);\n //Some reason the Value key doesn't parse. So I do it again here\n let result;\n if (message.Message)\n result = JSON.parse(message.Message);\n else\n result = message;\n functionToRun(result)\n this.setState({\n lastSaveErr: '',\n lastSavedTime: moment(),\n isPendingChange: false\n });\n } catch (err) {\n console.log(err);\n this.setState({\n lastSaveErr: 'Error: save failed',\n isPendingChange: false\n });\n }\n\n };\n\n let entryConnection = new signalR.HubConnectionBuilder()\n .withUrl((API_URL || process.env.REACT_APP_MINUTES_ENTRY_API_URL) + '/MinuteEntries/entries')\n .withAutomaticReconnect([0, 0, 10000])\n .build();\n //Will change to a more reasonable timeout later\n entryConnection.serverTimeoutInMilliseconds = 5000000000;\n this.setState({\n entryHubConnection: entryConnection\n }, () => {\n this.startConn(this.state.entryHubConnection, \"Entry\", () => getConnectionId(this.state.entryHubConnection, 'entryConnectionId'));\n this.state.entryHubConnection.on(\"ReceiveMinuteEntry\", message => handleMessage(message, this.receiveEntryByWebsocket));\n this.state.entryHubConnection.on(\"ReceiveEntry\", message => handleMessage(message, this.receiveEntryByWebsocket));\n this.state.entryHubConnection.on(\"Receive\", message => handleMessageOriginatedFromWebsocket(message, this.receiveEntryByWebsocket));\n });\n\n let categoryConnection = new signalR.HubConnectionBuilder()\n .withUrl((API_URL || process.env.REACT_APP_MINUTES_API_URL) + '/MinutesBook/categories')\n .withAutomaticReconnect([0, 0, 10000])\n .build();\n //Will change to a more reasonable timeout later\n categoryConnection.serverTimeoutInMilliseconds = 5000000000;\n this.setState({\n categoryHubConnection: categoryConnection\n }, () => {\n this.startConn(this.state.categoryHubConnection, \"Category\", () => getConnectionId(this.state.categoryHubConnection, 'categoryConnectionId'));\n this.state.categoryHubConnection.on(\"ReceiveCategory\", message => handleMessage(message, this.receiveCategoryByWebsocket));\n this.state.categoryHubConnection.on(\"Receive\", message => handleMessageOriginatedFromWebsocket(message, this.receiveCategoryByWebsocket))\n });\n\n // These are the different form inputs that the user can pick from when picking a motion\n this.props.actions.getActionTypes()\n .then(() => {\n let actionTypes = [...this.props.minutes.actionTypes];\n actionTypes.forEach(type => {\n type.label = type.ActionReferenceType;\n type.value = type.ActionReferenceTypeID;\n })\n this.setState({\n actionTypes: actionTypes\n });\n });\n }\n\n getMinutes() {\n this.props.actions.getMinutesBook('?minutesbookID=' + this.props.match.params.minutesbookid, true)\n .then(() => {\n let minutesBook = this.props.minutes.minutesBook;\n if (minutesBook.MinutesCategories) {\n //Check if the Sequence for each category is linear\n const sequences = minutesBook.MinutesCategories.map(mc => mc.Sequence);\n if (minutesBook.MinutesCategories.length > 0 && (minutesBook.MinutesCategories[0].Sequence !== 1 || !sequences.every((seq, i) => i === sequences.length - 1 || seq + 1 === sequences[i + 1]))) {\n //Get the sequence right. Sometimes the result back from the server has a lot of skipped indices\n minutesBook.MinutesCategories.forEach((category, index) => {\n category.Sequence = index + 1;\n });\n this.setState({\n minutesBook: minutesBook,\n isLoaded: true,\n previewFieldsetIsActive: true\n }, //Save the new sequence so we don't have to do this process again for this minutesbook\n async () => { await this.saveMinutesBook(); });\n } else { //It is in order so display the book\n this.setState({\n minutesBook: minutesBook,\n isLoaded: true,\n previewFieldsetIsActive: true\n });\n }\n // set fetchedMinutesBookIDs for the chairs report logic (see the fetchChairsReports method)\n let fetchedMinutesBookIDs = [];\n minutesBook.MinutesCategories.forEach(category => {\n if (category.CategoryType === \"Chairmans Report\" && category.MinutesEntries) {\n category.MinutesEntries.forEach(entry => {\n if (entry.MinutesSummaries) {\n fetchedMinutesBookIDs = fetchedMinutesBookIDs.concat(entry.MinutesSummaries.filter(ms => ms.ReferenceID).flatMap(ms => ms.ReferenceID));\n }\n })\n }\n })\n fetchedMinutesBookIDs = [...new Set(fetchedMinutesBookIDs)];\n this.setState({ fetchedMinutesBookIDs });\n } else {\n this.setState({\n minutesBook: '',\n isLoaded: true,\n previewFieldsetIsActive: false\n });\n this.props.actions.makeToast([{ message: \"Loading Failed\", type: \"failure\" }])\n }\n // This is used to add members to the motion forms\n this.props.actions.getMemberList('sessionID=' + minutesBook.SessionID + '&chamberCode=S').then(() => {\n let memberList = [...this.props.members.memberList];\n memberList.forEach(member => {\n member.label = member.PatronDisplayName;\n member.value = member.MemberID;\n });\n this.setState({\n memberList: memberList\n });\n });\n // Have to get the session info in order to get the effective date for the committee list\n this.props.actions.getSessionById(minutesBook.SessionID)\n .then(() => {\n this.props.actions.getCommitteeList('sessionID=' + this.props.session.selectedSession.SessionID + \"&includeSubCommittees=true\").then(() => {\n let committeeList = this.props.committee.committeeList;\n committeeList.forEach(committee => {\n committee.label = committee.Name;\n committee.value = committee.CommitteeID;\n });\n this.setState({\n committeeList: committeeList\n });\n });\n //get communication summary list for communication action reference pickers\n this.props.actions.getCommunicationSummaryList('sessionID=' + this.props.session.selectedSession.SessionID + \"&communicationTypeID=1&chamberCode=H\").then(() => {\n let communicationList = this.props.communications.communicationSummaryList;\n //summaries that have already been selected/used will not be returned from this endpoint, but they need to be in the dropdown in order for that selected option to appear as selected, so add these manually to the list\n const usedCommunicationSummaries = [...this.state.minutesBook.MinutesCategories].filter(mc => mc.MinutesEntries && mc.MinutesEntries.find(me => me.MinutesActivities && me.MinutesActivities.find(ma => ma.ActivityReferences && ma.ActivityReferences.find(ar => ar.ActionReferenceType === \"Communication\" && ar.ReferenceID)))).flatMap(mc => mc.MinutesEntries.filter(me => me.MinutesActivities && me.MinutesActivities.find(ma => ma.ActivityReferences && ma.ActivityReferences.find(ar => ar.ActionReferenceType === \"Communication\" && ar.ReferenceID)))).flatMap(me => me.MinutesActivities.filter(ma => ma.ActivityReferences && ma.ActivityReferences.find(ar => ar.ActionReferenceType === \"Communication\" && ar.ReferenceID))).flatMap(ma => ma.ActivityReferences.filter(ar => ar.ActionReferenceType === \"Communication\" && ar.ReferenceID));\n usedCommunicationSummaries.forEach(usedCommunicationSummary => {\n if (!communicationList.find(communication => communication.CommunicationID === usedCommunicationSummary.ReferenceID)) {\n const minutesEntry = [...this.state.minutesBook.MinutesCategories].find(mc => mc.MinutesEntries && mc.MinutesEntries.find(me => me.MinutesActivities && me.MinutesActivities.find(ma => ma.MinutesActivityID === usedCommunicationSummary.MinutesActivityID))).MinutesEntries.find(me => me.MinutesActivities && me.MinutesActivities.find(ma => ma.MinutesActivityID === usedCommunicationSummary.MinutesActivityID));\n const communicationSummaries = minutesEntry.MinutesSummaries ? minutesEntry.MinutesSummaries.filter(ms => ms.ReferenceID === usedCommunicationSummary.ReferenceID).map(ms => ({ ...ms, CommunicationID: ms.ReferenceID })) : [];\n communicationList.push({ ReferenceNumber: usedCommunicationSummary.ReferenceText, CommunicationID: usedCommunicationSummary.ReferenceID, CommunicationSummaries: communicationSummaries, CommunicationDate: minutesEntry.CommunicationDate, CommunicationNumber: minutesEntry.CommunicationNumber })\n //sort list by CommunicationDate and CommunicationNumber, if not present then use the ReferenceNumber to determine the Date/Number\n communicationList.sort((a, b) => a.CommunicationDate && b.CommunicationDate ?\n moment(b.CommunicationDate).isAfter(moment(a.CommunicationDate), 'day') ? 1 :\n moment(b.CommunicationDate).isBefore(moment(a.CommunicationDate), 'day') ? -1 :\n Number(a.CommunicationNumber) - Number(b.CommunicationNumber)\n : a.ReferenceNumber && b.ReferenceNumber && a.ReferenceNumber.length >= 7 && b.ReferenceNumber.length >= 7 ?\n Number(b.ReferenceNumber.substring(b.ReferenceNumber.length - 4)) - Number(a.ReferenceNumber.substring(a.ReferenceNumber.length - 4))\n : b.ReferenceNumber - a.ReferenceNumber)\n }\n })\n communicationList.forEach(communication => {\n communication.label = communication.ReferenceNumber;\n communication.value = communication.CommunicationID;\n });\n this.setState({\n communicationList: communicationList\n });\n });\n })\n // Used to apply a legislation number to an entry\n this.props.actions.getBillNumbers('?sessionID=' + minutesBook.SessionID).then(() => {\n let billNumbers = this.props.bills.billNumbers;\n billNumbers.forEach(bill => {\n bill.label = bill.LegislationNumber;\n bill.value = bill.LegislationNumber;\n })\n this.setState({\n sessionBills: billNumbers\n });\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n console.log(err);\n this.setState({\n minutesBook: '',\n isLoaded: true,\n });\n });\n }\n\n startConn(conn, type, cb) {\n conn\n .start({ withCredentials: false })\n .then(() => {\n this.setState({\n ['building' + type + 'Connection']: false\n })\n conn.onreconnecting((e) => {\n if (e) console.log(e);\n this.props.actions.makeToast([{ message: type + \" Connection Reconnecting\", type: \"warning\" }])\n console.log(type + \" connection reconnecting\")\n this.setState({ ['reconnecting' + type]: true })\n })\n conn.onreconnected((e) => {\n if (e) console.log(e);\n this.props.actions.makeToast([{ message: type + \" Connection Reconnected\", type: \"success\" }])\n console.log(type + \" connection reconnected\")\n this.setState({ ['reconnecting' + type]: false })\n })\n conn.onclose((e) => {\n this.props.actions.makeToast([{ message: type + \" Connection Closed\", type: \"failure\" }])\n console.log(type + \" connection closed\", e ?? \"\");\n this.setState({ ['closed' + type]: true, ['reconnecting' + type]: false })\n })\n if (cb) cb();\n }).catch(err => {\n console.log('Error while establishing connection :( ' + err)\n this.props.actions.makeToast([{ message: type + \" Connection Failed\", type: \"failure\" }])\n });\n }\n\n toggleFetchChairs() {\n this.setState({ fetchChairsReports: !this.state.fetchChairsReports })\n }\n\n handleChairsReportDateChange(date, key) {\n if (date) {\n if (key === \"START\") {\n this.setState({\n chairsReportStartDate: moment(date).startOf('day'),\n chairsReportEndDate: this.state.chairsReportEndDate || moment(date).endOf('day')\n })\n } else {\n this.setState({\n chairsReportEndDate: moment(date).endOf('day')\n })\n }\n }\n }\n\n fetchChairsReports() {\n this.setState({ fetchingChairsReports: true, disableChanges: true }, () => {\n this.props.actions.getMinutesList('sessionID=' + this.state.minutesBook.SessionID + '&startDate=' + moment(this.state.chairsReportStartDate).format(\"MM/DD/yyyy\") + '&endDate=' + this.state.chairsReportEndDate.format(\"MM/DD/yyyy\"), false).then(() => {\n if (this.props.minutes.minutesList) {\n const committeeMinutesBooks = this.props.minutes.minutesList.filter(c => c.ChamberCode === 'S' && c.CommitteeID && c.MinutesStatus && c.MinutesStatus.toLowerCase() === 'closed');\n if (committeeMinutesBooks.length) {\n //combine the minutes books from this date range with the minutes books already fetched from previous date ranges\n const committeeMinutesBookIDs = committeeMinutesBooks.map(c => c.MinutesBookID);\n const combinedMinutesBookIDs = committeeMinutesBookIDs.concat([...this.state.fetchedMinutesBookIDs]);\n const uniqueCombinedMinutesBookIDs = [...new Set(combinedMinutesBookIDs)];\n this.props.actions.getCommitteeMinutesSummary('?' + uniqueCombinedMinutesBookIDs.map((id, idx) => (idx ? '&' : '') + 'minutesBookIDs=' + id).join('')).then(async () => {\n this.setState({ fetchedMinutesBookIDs: uniqueCombinedMinutesBookIDs })\n let minutesBook = { ...this.state.minutesBook };\n minutesBook.MinutesCategories = minutesBook.MinutesCategories || [];\n let committeeMinutesSummary = this.props.minutes.committeeMinutesSummary;\n let totalIterations = 0;\n let newIterations = 0;\n let idx = 0;\n for (const category of committeeMinutesSummary) {\n if (minutesBook.MinutesCategories.find(mc => mc.CalendarCategoryTypeID === category.CalendarCategoryTypeID)) {\n let matchingIterations = 0;\n //update the existing categories that are of this same type\n minutesBook.MinutesCategories.filter(mc => mc.CalendarCategoryTypeID === category.CalendarCategoryTypeID).forEach((existingMatchingCategory, matchingCategoryIdx) => {\n const existingCategoryIndex = minutesBook.MinutesCategories.findIndex(mc => mc.MinutesCategoryID === existingMatchingCategory.MinutesCategoryID);\n minutesBook.MinutesCategories[existingCategoryIndex].CategoryText = category.CategoryDescription;\n minutesBook.MinutesCategories[existingCategoryIndex].CategoryDescription = category.CategoryDescription;\n category.MinutesEntries.forEach(entry => {\n //for each entry (i.e. cmte) of this category from the response, check if the entry (i.e. committee) already exists\n const cmte = entry.MinutesSummaries && entry.MinutesSummaries.find(ms => ms.CommitteeID);\n if (cmte) {\n const existingMatchingEntryIndex = existingMatchingCategory.MinutesEntries.findIndex(me => me.MinutesSummaries && me.MinutesSummaries.find(ms => ms.CommitteeID && ms.CommitteeID === cmte.CommitteeID));\n if (existingMatchingEntryIndex > -1) {\n //entry/cmte already exists - add new summaries/ignore existing ones, and update the entrytext regardless\n //iterate over each summary returned from the response, check to see if the summary's ReferenceID (minutes book) is already in this entry.\n //if it is, we already have this summary, so just update the MinutesSummary text attr since it may have new bills in it. If we don't have this summary at all, add it\n entry.MinutesSummaries.forEach(summary => {\n const existingMatchingSummaryIndex = existingMatchingCategory.MinutesEntries[existingMatchingEntryIndex].MinutesSummaries.findIndex(ms => ms.ReferenceID === summary.ReferenceID);\n if (existingMatchingSummaryIndex > -1) {\n minutesBook.MinutesCategories[existingCategoryIndex].MinutesEntries[existingMatchingEntryIndex].MinutesSummaries[existingMatchingSummaryIndex].MinutesSummary = summary.MinutesSummary\n } else {\n minutesBook.MinutesCategories[existingCategoryIndex].MinutesEntries[existingMatchingEntryIndex].MinutesSummaries.push(summary);\n }\n })\n minutesBook.MinutesCategories[existingCategoryIndex].MinutesEntries[existingMatchingEntryIndex].EntryText = entry.EntryText;\n } else {\n //entry/cmte is new/doesn't already exist - add the new entry/cmte\n minutesBook.MinutesCategories[existingCategoryIndex].MinutesEntries.push(entry);\n }\n }\n })\n //save category with updated/new entries\n this.state.categoryHubConnection.invoke(\"SaveCategory\", minutesBook.MinutesCategories[existingCategoryIndex], localStorage.getItem('LIS_ID_TOKEN'))\n .then(() => {\n //the EntryText of all the entries for each of these categories will now include even the excluded chairs reports again. Use the regenerate endpt since this will take that into account\n this.regenerateChairsReportCategory(minutesBook.MinutesCategories[existingCategoryIndex].Sequence - 1, () => {\n matchingIterations++;\n if (matchingIterations === minutesBook.MinutesCategories.filter(mc => mc.CalendarCategoryTypeID === category.CalendarCategoryTypeID).length) {\n totalIterations++;\n }\n if (totalIterations === committeeMinutesSummary.length && matchingIterations === minutesBook.MinutesCategories.filter(mc => mc.CalendarCategoryTypeID === category.CalendarCategoryTypeID).length) {\n this.setState({ fetchingChairsReports: false, disableChanges: false })\n }\n });\n }).catch(function (err) {\n console.error(err.toString());\n if (idx === committeeMinutesSummary.length - 1) {\n this.setState({ fetchingChairsReports: false, disableChanges: false })\n }\n });\n })\n } else {\n //no existing categories are of this same type, create the category as new\n newIterations++;\n category.ReleaseToPreview = true;\n category.CategoryText = category.CategoryDescription;\n category.Sequence = minutesBook.MinutesCategories.length + newIterations;\n await this.createCategory(category, () => {\n if (idx === committeeMinutesSummary.length - 1) {\n this.setState({ fetchingChairsReports: false, disableChanges: false })\n }\n });\n }\n idx++;\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({\n fetchingChairsReports: false,\n disableChanges: false\n })\n this.props.actions.makeToast([{ message: 'Failed to get chairs report summary', type: \"failure\" }])\n });\n } else {\n this.setState({ fetchingChairsReports: false, disableChanges: false })\n }\n } else {\n this.setState({ fetchingChairsReports: false, disableChanges: false })\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({ fetchingChairsReports: false, disableChanges: false })\n this.props.actions.makeToast([{ message: 'Failed to get Chairs Reports', type: \"failure\" }])\n });\n })\n }\n\n toggleChairsReport(activitySequence, entryIndex, summaryIndex) {\n let minutesBook = { ...this.state.minutesBook };\n minutesBook.MinutesCategories[activitySequence].MinutesEntries[entryIndex].MinutesSummaries[summaryIndex].IsActive = !minutesBook.MinutesCategories[activitySequence].MinutesEntries[entryIndex].MinutesSummaries[summaryIndex].IsActive\n\n let chairReportCategoriesSetForRegeneration = [...this.state.chairReportCategoriesSetForRegeneration];\n if (!chairReportCategoriesSetForRegeneration.find(c => c === minutesBook.MinutesCategories[activitySequence].MinutesCategoryID)) {\n chairReportCategoriesSetForRegeneration.push(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID);\n }\n\n this.setState({ minutesBook, chairReportCategoriesSetForRegeneration })\n }\n\n regenerateChairsReportCategory(activitySequence, callback) {\n let minutesBook = { ...this.state.minutesBook };\n let chairReportCategoriesSetForRegeneration = [...this.state.chairReportCategoriesSetForRegeneration];\n let regeneratingCategories = [...this.state.regeneratingCategories];\n regeneratingCategories.push(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID);\n this.setState({ regeneratingCategories }, () => {\n const committeeMinutesBookIDs = minutesBook.MinutesCategories[activitySequence].MinutesEntries.flatMap(me => me.MinutesSummaries).filter(ms => ms?.IsActive && ms?.ReferenceID).map(ms => ms.ReferenceID);\n if (committeeMinutesBookIDs.length) {\n this.props.actions.getCommitteeMinutesSummary('?' + committeeMinutesBookIDs.map((id, idx) => (idx ? '&' : '') + 'minutesBookIDs=' + id).join('')).then(() => {\n let committeeMinutesSummary = this.props.minutes.committeeMinutesSummary.find(c => c.CalendarCategoryTypeID === minutesBook.MinutesCategories[activitySequence].CalendarCategoryTypeID);\n minutesBook.MinutesCategories[activitySequence].MinutesEntries.forEach((entry, idx) => {\n const associatedCommitteeMinutesEntry = committeeMinutesSummary.MinutesEntries.find(me => me.MinutesSummaries?.find(ms => ms.CommitteeID && entry.MinutesSummaries?.find(existingMs => existingMs?.IsActive && ms?.CommitteeID === existingMs?.CommitteeID)))\n if (associatedCommitteeMinutesEntry) {\n minutesBook.MinutesCategories[activitySequence].MinutesEntries[idx].EntryText = associatedCommitteeMinutesEntry.EntryText;\n } else {\n minutesBook.MinutesCategories[activitySequence].MinutesEntries[idx].EntryText = '';\n }\n })\n this.state.categoryHubConnection.invoke(\"SaveCategory\", minutesBook.MinutesCategories[activitySequence], localStorage.getItem('LIS_ID_TOKEN'))\n .catch(function (err) {\n console.error(err.toString());\n }).finally(() => {\n //refresh these since the method can be run multiple times at once\n chairReportCategoriesSetForRegeneration = [...this.state.chairReportCategoriesSetForRegeneration];\n regeneratingCategories = [...this.state.regeneratingCategories];\n chairReportCategoriesSetForRegeneration.splice(chairReportCategoriesSetForRegeneration.indexOf(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID), 1);\n regeneratingCategories.splice(regeneratingCategories.indexOf(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID), 1);\n this.setState({ regeneratingCategories, chairReportCategoriesSetForRegeneration })\n if (callback) {\n callback();\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n //refresh these since the method can be run multiple times at once\n chairReportCategoriesSetForRegeneration = [...this.state.chairReportCategoriesSetForRegeneration];\n regeneratingCategories = [...this.state.regeneratingCategories];\n chairReportCategoriesSetForRegeneration.splice(chairReportCategoriesSetForRegeneration.indexOf(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID), 1);\n regeneratingCategories.splice(regeneratingCategories.indexOf(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID), 1);\n this.setState({\n regeneratingCategories,\n chairReportCategoriesSetForRegeneration\n })\n this.props.actions.makeToast([{ message: 'Failed to get chairs report summary', type: \"failure\" }])\n if (callback)\n callback();\n });\n } else {\n minutesBook.MinutesCategories[activitySequence].MinutesEntries.forEach(entry => {\n entry.EntryText = '';\n })\n //refresh these since the method can be run multiple times at once\n chairReportCategoriesSetForRegeneration = [...this.state.chairReportCategoriesSetForRegeneration];\n regeneratingCategories = [...this.state.regeneratingCategories];\n chairReportCategoriesSetForRegeneration.splice(chairReportCategoriesSetForRegeneration.indexOf(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID), 1);\n regeneratingCategories.splice(regeneratingCategories.indexOf(minutesBook.MinutesCategories[activitySequence].MinutesCategoryID), 1);\n this.setState({ regeneratingCategories, chairReportCategoriesSetForRegeneration })\n if (callback)\n callback();\n }\n })\n }\n\n toggleMinutesStatus() {\n let minutesBook = { ... this.state.minutesBook };\n\n minutesBook.MinutesStatusId = minutesBook.MinutesStatusID === 4 ? 2 : 4;\n delete minutesBook.MinutesCategories;\n delete minutesBook.MinutesFiles;\n delete minutesBook.MinutesCalendars;\n\n this.props.actions.saveMinutesBook(minutesBook)\n .then(() => {\n this.getMinutes();\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n if (this.state.isLoaded) {\n return (\n <div className=\"user-forms dlas-forms\">\n <h2>{moment(this.state.minutesBook.MinutesDate).format(\"LL\")}</h2>\n <div style={{ marginBottom: \"20px\" }}>\n <div style={{ height: '30px', display: \"grid\", gridTemplateColumns: \"275px 1fr 475px\" }}>\n <div style={{ float: \"left\", display: \"inline-flex\" }}>\n <button type=\"button\" className=\"button primary\" onClick={() => this.toggleMinutesStatus()}>{(this.state.minutesBook.MinutesStatusID === 4 ? \"Open\" : \"Close\") + \" Minutes\"}</button>\n <label style={{ marginLeft: \"10px\" }}>Minutes Status: <span className={this.state.minutesBook.MinutesStatusID === 4 ? \"fail\" : \"txt-green\"}>{this.state.minutesBook.MinutesStatusID === 4 ? \"Closed\" : \"Open\"}</span></label>\n </div>\n <div />\n {this.state.fetchChairsReports ?\n <div className=\"flex-vertical-center\" style={{ display: \"grid\", gridTemplateColumns: \"20px 200px 200px 80px\", height: \"30px\", alignItems: \"end\", marginTop: \"-20px\" }}>\n <button className=\"icon delete\" style={{ flexShrink: '0', marginBottom: \"10px\" }} onClick={this.toggleFetchChairs} />\n <div style={{ width: '165px' }}>\n <label>Start Date</label>\n <DatePicker\n selected={this.state.chairsReportStartDate}\n onChange={(val) => this.handleChairsReportDateChange(val, \"START\")}\n className='event-date-picker'\n />\n </div>\n <div style={{ width: '165px' }}>\n <label>End Date</label>\n <DatePicker\n selected={this.state.chairsReportEndDate}\n onChange={(val) => this.handleChairsReportDateChange(val, \"END\")}\n className='event-date-picker'\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'end' }}>\n <button className=\"button\" disabled={!this.state.chairsReportStartDate || !this.state.chairsReportEndDate || this.state.fetchingChairsReports || this.state.regeneratingCategories.length} onClick={this.fetchChairsReports}>{this.state.fetchingChairsReports ? <div className=\"small-spinner\" /> : 'Go'}</button>\n </div>\n </div>\n :\n <button className=\"button\" style={{ width: \"200px\", marginLeft: \"275px\" }} onClick={this.toggleFetchChairs}>Fetch Chair's Reports</button>\n }\n </div>\n </div>\n {this.state.showMoveEntryDialog &&\n <div className='popup' onClick={() => this.toggleMoveEntry(false)}>\n <div className='popup-inner tall-content' onClick={e => e.stopPropagation()}>\n {this.state.categoriesToMove.length === 0 ?\n <p>There are no categories where you can move this entry</p>\n :\n <p>Choose a category to move the entry to</p>\n }\n <div style={{ paddingBottom: '10px' }}>\n <ReactTable\n data={this.state.categoriesToMove}\n getTrProps={(_state, rowInfo) => {\n return {\n style: {\n background: rowInfo && rowInfo.index === this.state.selectedCategoryToMoveTo ? '#89ff89' : '',\n cursor: rowInfo ? 'pointer' : 'default'\n },\n onClick: () => this.setState({ selectedCategoryToMoveTo: rowInfo.index })\n }\n }}\n noDataText=\"\"\n columns={[\n {\n id: \"checkbox\",\n accessor: \"\",\n className: \"checkbox-column\",\n Cell: ({ index }) => {\n return <span className={index === this.state.selectedCategoryToMoveTo ? \"icon checkmark\" : \"\"}></span>;\n },\n sortable: false,\n filterable: false,\n width: 45\n },\n {\n Header: \"Sequence\",\n accessor: \"Sequence\",\n width: 50\n },\n {\n Header: \"Type\",\n accessor: \"CategoryType\"\n },\n {\n Header: \"Description\",\n accessor: \"CategoryDescription\"\n }\n ]}\n defaultPageSize={5}\n className=\"-striped -highlight\"\n />\n </div>\n <div className=\"flex-row\" sty>\n <button className=\"button secondary\" onClick={() => this.toggleMoveEntry(false)}>Cancel</button>\n {this.state.categoriesToMove.length > 0 &&\n <button disabled={this.state.selectedCategoryToMoveTo === -1} onClick={() => this.moveEntry(this.state.selectedCategoryToMoveTo)} className=\"button\">Move</button>\n }\n </div>\n </div>\n </div>\n }\n <fieldset className={this.state.indexFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'indexFieldsetIsActive')}>Index</legend>\n <div>\n <MinutesIndex\n categories={this.state.minutesBook.MinutesCategories ? this.state.minutesBook.MinutesCategories : []}\n onSequenceChange={this.handleSequenceChange}\n showPreview={this.showPreview}\n showActivity={this.showActivity}\n createCategory={this.createCategory}\n duplicateChairmansCategory={this.duplicateChairmansCategory}\n getCategoryDescriptionText={this.getCategoryDescriptionText}\n creatingCategory={this.state.creatingCategory}\n calendarCategories={this.state.calendarCategories}\n currentActivitySequence={this.state.currentActivitySequence}\n disableChanges={this.state.disableChanges || this.state.buildingCategoryConnection || this.state.buildingEntryConnection || this.state.reconnectingCategory || this.state.closedCategory}\n categoryFormDisabled={this.state.categoryFormDisabled} />\n </div>\n </fieldset>\n <fieldset ref={this.activityRef} className={this.state.activityFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'activityFieldsetIsActive')}>Activity</legend>\n <div className=\"flex-row\">\n <div style={{ display: 'flex', alignItems: 'center', width: '100%' }}>\n {!this.state.editingCategoryText ?\n <>\n <p className=\"small-header\">{this.state.currentActivitySequence !== 0 && this.getCategoryDescriptionText(this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1])}</p>\n {this.state.currentActivitySequence !== 0 && !this.state.categoryFormDisabled[this.state.currentActivitySequence] && <a className=\"icon edit\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryText()} />}\n </>\n :\n <>\n <input style={{ width: '50%' }} value={this.state.tempCategoryText} onChange={(e) => this.setTempCategoryText(e.target.value)} />\n <a className=\"icon save\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryText(true)} />\n <a className=\"icon delete\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryText()} />\n </>\n }\n </div>\n {this.state.currentActivitySequence && this.state.currentActivitySequence !== 0 && this.state.minutesBook.MinutesCategories && this.state.chairReportCategoriesSetForRegeneration.find(categoryID => categoryID === this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1].MinutesCategoryID) ?\n <div className=\"flex-row flex-vertical-center\">\n <button disabled={this.state.fetchingChairsReports || this.state.regeneratingCategories.find(categoryID => categoryID === this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1].MinutesCategoryID)}\n onClick={() => this.regenerateChairsReportCategory(this.state.currentActivitySequence - 1)}\n type=\"button\" className=\"button\">{this.state.regeneratingCategories.find(categoryID => categoryID === this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1].MinutesCategoryID) ? <div className=\"small-spinner\" /> : \"Regenerate Summary\"}</button>\n </div>\n : null}\n </div>\n {this.state.currentActivitySequence && this.state.currentActivitySequence !== 0 ?\n <TypeSwitcher\n type={this.state.activity}\n ref={this.entryFormRef}\n onEntryChange={this.entryChange}\n onMultipleEntryChange={this.multipleEntryChange}\n currentActivitySequence={this.state.currentActivitySequence}\n handleSaveEntry={this.saveEntry}\n sessionId={this.state.minutesBook.SessionID}\n sessionCode={this.state.minutesBook.SessionCode}\n memberList={this.state.memberList}\n committeeList={this.state.committeeList}\n communicationList={this.state.communicationList}\n actionTypes={this.state.actionTypes}\n toggleMoveEntry={this.toggleMoveEntry}\n bulkMoveEntry={this.bulkMoveEntry}\n sessionBills={this.state.sessionBills}\n toggleChairsReport={this.toggleChairsReport}\n chairReportCategoriesSetForRegeneration={this.state.chairReportCategoriesSetForRegeneration}\n formData={this.state.minutesBook.MinutesCategories ? this.state.minutesBook.MinutesCategories[this.state.currentActivitySequence - 1] : {}}\n categories={this.state.minutesBook.MinutesCategories || []}\n getCategoryDescriptionText={this.getCategoryDescriptionText}\n createCategory={this.createCategory}\n disableChanges={this.state.disableChanges}\n categoryFormDisabled={this.state.categoryFormDisabled[this.state.currentActivitySequence] || this.state.reconnectingCategory || this.state.reconnectingEntry || this.state.closedCategory || this.state.closedEntry} />\n : null}\n </fieldset>\n <fieldset className={this.state.previewFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'previewFieldsetIsActive')}>Preview</legend>\n <Preview\n categories={this.state.minutesBook.MinutesCategories ? this.state.minutesBook.MinutesCategories : []}\n isPendingChange={this.state.isPendingChange}\n lastSaveErr={this.state.lastSaveErr}\n lastSavedTime={this.state.lastSavedTime}\n buildingCategoryConnection={this.state.buildingCategoryConnection}\n buildingEntryConnection={this.state.buildingEntryConnection}\n reconnectingCategory={this.state.reconnectingCategory}\n reconnectingEntry={this.state.reconnectingEntry}\n closedCategory={this.state.closedCategory}\n closedEntry={this.state.closedEntry}\n lastPublishedTime={this.state.lastPublishedTime}\n publishAllEntries={this.publishAllEntries}\n publishing={this.state.publishing} />\n </fieldset>\n </div>\n\n )\n } else {\n return (\n <div className=\"user-forms dlas-forms\">\n <LoaderComponent className=\"center-spinner\" data={this.state.isLoaded} />\n </div>\n )\n }\n }\n}\n\nconst getItemStyle = (isDisabled, isDragging, draggableStyle, pendingDeletion) => ({\n userSelect: 'none',\n background: isDisabled ? '#c7c7c7' : isDragging ? '#34495e' : 'white',\n color: isDisabled ? 'black' : isDragging ? 'white' : '#34495e',\n border: pendingDeletion ? 'red' : 'none',\n ...draggableStyle,\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%',\n});\n\nclass MinutesIndex extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedCalendarCategory: ''\n }\n\n this.handleCalendarCategoryChange = this.handleCalendarCategoryChange.bind(this);\n this.createCategory = this.createCategory.bind(this);\n }\n handleCalendarCategoryChange(value) {\n this.setState({\n selectedCalendarCategory: value\n });\n }\n\n async createCategory() {\n if (this.state.selectedCalendarCategory.CategoryType === \"Chairmans Report\" && this.props.categories.find(c => c.CalendarCategoryTypeID === this.state.selectedCalendarCategory.CalendarCategoryTypeID)) {\n await this.props.duplicateChairmansCategory(this.state.selectedCalendarCategory.CalendarCategoryTypeID);\n this.setState({\n selectedCalendarCategory: ''\n });\n } else {\n const newCategory = {\n ...this.state.selectedCalendarCategory,\n CategoryDescription: this.state.selectedCalendarCategory.Description,\n ReleaseToPreview: true,\n Sequence: this.props.categories.length + 1\n };\n this.setState({\n selectedCalendarCategory: ''\n });\n await this.props.createCategory(newCategory);\n }\n }\n\n onDragEnd(result) {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n const items = (() => {\n const list = Array.from(this.props.categories);\n const [removed] = list.splice(result.source.index, 1);\n\n list.splice(result.destination.index, 0, removed);\n // Reorder the Sequence value too because the sequence value is used to show what order the preview is in\n list.forEach(function (element, index) {\n element.Sequence = index + 1\n });\n return list;\n })();\n //Send the new values up to the parent to be set in the parent's state\n this.props.onSequenceChange(items);\n }\n\n\n render() {\n if (this.props.categories) {\n return (\n <div className={this.props.disableChanges ? 'dnd-disabled' : ''}>\n <DragDropContext onDragEnd={this.onDragEnd.bind(this)}>\n <Droppable droppableId=\"droppable\">\n {(provided, snapshot) => (\n <table\n className=\"dnd-grid-table minutes-categories-grid\"\n ref={provided.innerRef}\n style={getListStyle(snapshot.isDraggingOver)}\n >\n <thead className=\"dnd-grid-header\" style={getListStyle(snapshot.isDraggingOver)}>\n <tr>\n <th scope=\"col\" id={'-grabber-column'}></th>\n <th scope=\"col\" id={'-display-column'}>Display #</th>\n <th scope=\"col\" id={'-display-column'}>Include</th>\n <th scope=\"col\" id={'-display-column'}>Section</th>\n <th scope=\"col\" id={'-actions-column'}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {this.props.categories.map((item, index) => (\n <Draggable isDragDisabled={this.props.disableChanges || this.props.categoryFormDisabled[item.Sequence]} key={`${item.Sequence}-${item.MinutesCategoryID}`} draggableId={`${item.Sequence}-${item.MinutesCategoryID}`} index={index}>\n {(provided, snapshot) => (\n <tr\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className={this.props.categories[this.props.currentActivitySequence - 1] === item ? 'selected' : 'not-selected'}\n style={getItemStyle(\n this.props.disableChanges || this.props.categoryFormDisabled[item.Sequence],\n snapshot.isDragging,\n provided.draggableProps.style\n )} >\n <td><button id={item.MinutesCategoryID + '-grabber-button'} className=\"button draggable\">Drag and drop</button></td>\n <td>{index + 1}</td>\n <td><input type=\"checkbox\" disabled={this.props.disableChanges || this.props.categoryFormDisabled[item.Sequence]} checked={this.props.categories[index].ReleaseToPreview === true} onChange={() => this.props.showPreview(index)} /></td>\n <td className='category-desc' style={this.props.disableChanges || this.props.categoryFormDisabled[item.Sequence] ? { pointerEvents: 'none' } : {}} onClick={(e) => this.props.showActivity(this.props.categories[index], e)}>\n {this.renderCategoryDescription(item)}\n </td>\n <td>\n <button\n type=\"button\"\n style={this.props.disableChanges || this.props.categoryFormDisabled[item.Sequence] ? { pointerEvents: 'none' } : {}}\n onClick={(e) => this.props.showActivity(this.props.categories[index], e)}\n className={this.props.categories[this.props.currentActivitySequence - 1] === item\n ? 'icon edit-alt'\n : 'icon edit'}>\n </button>\n </td>\n </tr>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n <tr style={getItemStyle(false)} >\n <td></td>\n <td></td>\n <td></td>\n <td className=\"category-desc\">\n <div style={{ width: '80%' }}>\n <Select\n value={this.state.selectedCalendarCategory}\n onChange={this.handleCalendarCategoryChange}\n options={this.props.calendarCategories}\n getOptionLabel={option => (option.DisplayType ? option.CategoryType + ' - ' : '') + option.Description}\n getOptionValue={option => option.CalendarCategoryTypeID}\n />\n </div>\n </td>\n <td><button disabled={this.props.creatingCategory || !this.state.selectedCalendarCategory} onClick={async () => await this.createCategory()} type=\"button\" className=\"button small-button\">{this.props.creatingCategory ? 'Adding' : 'Add'}</button></td>\n </tr>\n </tbody>\n </table>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n )\n } else {\n return (<div></div>)\n }\n }\n\n //Some categories get the type pre-pended to the description while other do not\n renderCategoryDescription(item) {\n //The reason why buttons are in here is because the form saves when an input is blurred. The only way to blur something is to put focus on something else\n // and td elements are not \"focus-able\", but buttons are.\n return (<button type=\"button\">{this.props.getCategoryDescriptionText(item)}</button>);\n }\n}\n\nclass Preview extends React.Component {\n render() {\n const previewLengthStyle = { height: '500px', overflowY: 'scroll', backgroundColor: 'white' }\n const newPreviewArray = this.props.categories.filter(\n entryObj => entryObj.ReleaseToPreview\n );\n return (\n <React.Fragment>\n <div className=\"floating-button-bar align-right inline-list\">\n {this.props.isPendingChange ?\n <span className=\"pending-label\">'Pending...'</span>\n :\n <React.Fragment>\n <div style={{ display: \"grid\", gridTemplateRows: \"1fr 1fr\" }}>\n <span className=\"last-saved-label\">{this.props.lastSavedTime ? 'Last saved at ' + this.props.lastSavedTime.format(\"HH:mm:ss\") : ''}</span>\n <span className=\"last-saved-label\">{this.props.lastPublishedTime && !this.props.lastSaveErr && 'Last published at ' + this.props.lastPublishedTime.format(\"HH:mm:ss\")}</span>\n </div>\n {this.props.lastSaveErr && <span className=\"pending-label\">{this.props.lastSaveErr}</span>}\n {this.props.buildingCategoryConnection ? <span className=\"pending-label\">Establishing category connection...</span> :\n this.props.buildingEntryConnection ? <span className=\"pending-label\">Establishing entry connection...</span> :\n this.props.closedCategory ? <span className=\"pending-label\">Category connection closed</span> :\n this.props.closedEntry ? <span className=\"pending-label\">Entry connection closed</span> :\n this.props.reconnectingCategory ? <span className=\"pending-label\">Category connection reconnecting...</span> :\n this.props.reconnectingEntry ? <span className=\"pending-label\">Entry connection reconnecting...</span> : \"\"}\n\n </React.Fragment>\n }\n <button type=\"button\" disabled={this.props.publishing || this.props.buildingCategoryConnection || this.props.buildingEntryConnection || this.props.reconnectingCategory || this.props.reconnectingEntry || this.props.closedCategory || this.props.closedEntry} className=\"button\" onClick={this.props.publishAllEntries}>Publish</button>\n </div>\n <div style={previewLengthStyle}>\n <MinutesDetails\n categories={newPreviewArray}\n publicPage={false}\n />\n </div>\n </React.Fragment>\n )\n }\n}\n\nconst TypeSwitcher = React.forwardRef((props, ref) => {\n switch (props.type) {\n case ('Order'):\n case ('Communication'):\n case ('General'):\n //The following should be treated as a legislative category:\n // - Unfinished Business (61, 62, 63)\n // - For Immediate Consideration (151)\n // - Bills in Conference (72)\n // - Senate Bills with Governor's Recommendation (111)\n // - House Bills with Governor's Recommendation (112)\n // - Senate Bills Vetoed by Governor (109)\n // - House Bills Vegoed by Governor (110)\n if ([61, 62, 63, 151, 72, 109, 110, 111, 112].includes(props.formData.CalendarCategoryTypeID)) {\n return (<div><LegislativeForm ref={ref} {...props} /></div>);\n }\n case ('Chairmans Report'):\n return (<div><NonLegislativeForm ref={ref} {...props} /></div>);\n case ('Regular Calendar'):\n case ('Uncontested Calendar'):\n case ('Notification'):\n return (<div><LegislativeForm ref={ref} {...props} /></div>);\n default:\n return (<div><Misc ref={ref} {...props} /></div>);\n }\n});\n\nexport default connect(\n (state) => {\n const { minutes, calendar, nav, members, committee, communications, bills, session } = state;\n return {\n minutes,\n calendar,\n nav,\n members,\n committee,\n communications,\n bills,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, minutesActionCreators, calendarActionCreators, navActionCreators, memberActionCreators, committeeActionCreators, communicationsActionCreators, billActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(MinutesManagementForm)","import React from 'react';\nimport { Route } from 'react-router';\nimport MinutesManagementGrid from './lis-minutes-grid';\nimport MinutesManagementForm from './lis-minutes-form';\n\nclass MinutesManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedSession: '',\n };\n this.handleSessionChange = this.handleSessionChange.bind(this);\n }\n\n handleSessionChange(value, callback) {\n this.setState({\n selectedSession: value\n }, () => callback());\n }\n\n render() {\n return (\n <div>\n <Route exact path={this.props.match.path} render={props => <MinutesManagementGrid\n {...props}\n selectedSession={this.state.selectedSession}\n handleSessionChange={this.handleSessionChange}\n />} />\n <Route path={`${this.props.match.path}/edit-minutes/:minutesbookid`} component={MinutesManagementForm} />\n </div>\n )\n }\n}\n\nexport default MinutesManagement;","import React from 'react';\nimport DatePicker from 'react-datepicker';\nimport { LargeListSelect } from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport InputType from '../../lis-minutes-management/components/input-types';\nimport moment from 'moment-timezone';\n\nclass EventControls extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n eventDate: moment().utcOffset(0).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }),\n eventSequence: '',\n event: \"\",\n otherEvent: \"\",\n templateInputs: [],\n templateEdited: false,\n otherEventSelected: false\n };\n\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleSequenceChange = this.handleSequenceChange.bind(this);\n this.handleEventChange = this.handleEventChange.bind(this);\n this.handleOtherEventChange = this.handleOtherEventChange.bind(this);\n this.handleTemplateChange = this.handleTemplateChange.bind(this);\n this.addEvent = this.addEvent.bind(this);\n this.removeEvent = this.removeEvent.bind(this);\n this.unSelectOtherEvent = this.unSelectOtherEvent.bind(this);\n }\n\n handleDateChange(val) {\n let value = moment(val).set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\n this.setState({\n eventDate: value\n });\n }\n\n handleSequenceChange(val) {\n if (val || val === '') {\n val = val.trim(); // ' ' (i.e. space) gets treated as a number in isNaN (below), so trim here since '' does not\n if (val && !isNaN(val)) {\n val = Number(val)\n this.setState({ eventSequence: val })\n } else if (val === '') {\n this.setState({ eventSequence: val })\n }\n }\n }\n\n handleEventChange(val) {\n let templateInputs = [];\n if (val.value != \"Other\") {\n if (val.ActionReferences && val.ActionReferences.length > 0) {\n templateInputs = JSON.parse(JSON.stringify(val.ActionReferences));\n }\n this.setState({\n event: val,\n templateInputs: templateInputs,\n templateEdited: false\n });\n } else {\n this.setState({\n event: val,\n otherEventSelected: true\n })\n if (this.props.otherBillEventOptions.length === 0) {\n this.props.getOtherBillEventOptions();\n }\n }\n }\n\n handleOtherEventChange(val) {\n let templateInputs = [];\n if (val.ActionReferences && val.ActionReferences.length > 0) {\n templateInputs = JSON.parse(JSON.stringify(val.ActionReferences));\n }\n this.setState({\n otherEvent: val,\n templateInputs: templateInputs,\n templateEdited: false\n });\n }\n\n handleTemplateChange(_a, _b, referenceIndex, reference) {\n let templateInputs = [...this.state.templateInputs];\n templateInputs[referenceIndex] = reference;\n this.setState({\n templateInputs: templateInputs,\n templateEdited: true\n });\n }\n\n addEvent() {\n let eventObj = this.state.event.value != \"Other\" ? { ...this.state.event } : { ...this.state.otherEvent };\n if (eventObj.ActionReferences && eventObj.ActionReferences.length > 0 && this.state.templateInputs.length > 0 && this.state.templateEdited) {\n eventObj.EventReferences = this.state.templateInputs;\n eventObj.Description = this.state.templateInputs.map(tInput => {\n if (!tInput.ReferenceText) {\n return `${tInput.ActionReferenceType}`\n }\n return tInput.ReferenceText\n }).join('');\n } else {\n eventObj.Description = eventObj.label;\n }\n let actorType = '';\n switch (eventObj.EventCode ? eventObj.EventCode[0].toUpperCase() : eventObj.LegislationChamberCode) {\n case 'H':\n actorType = 'House';\n break;\n case 'S':\n actorType = 'Senate';\n break;\n case 'C':\n actorType = 'Conference';\n break;\n case 'G':\n actorType = 'Governor';\n break;\n }\n eventObj.ActorType = actorType;\n this.props.addEvent(this.state.eventDate, this.state.eventSequence, eventObj);\n //Reset the selectors after adding the event\n this.unSelectOtherEvent();\n this.setState({\n eventAdded: true,\n eventSequence: ''\n });\n setTimeout(() => {\n this.setState({\n eventAdded: false\n })\n }, 2000)\n }\n\n removeEvent() {\n this.props.removeEvent(this.state.eventDate, this.state.event, this.state.eventSequence || null)\n this.setState({\n eventRemoved: true\n });\n setTimeout(() => {\n this.setState({\n eventRemoved: false\n })\n }, 2000)\n }\n\n unSelectOtherEvent() {\n this.setState({\n otherEventSelected: false,\n event: \"\",\n templateInputs: [],\n templateEdited: false,\n otherEvent: \"\"\n })\n }\n\n render() {\n const { billEventOptions, otherBillEventOptions } = this.props;\n const fontSize = '0.8em';\n const selectStyle = {\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: fontSize,\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: fontSize,\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n option: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n dropdownIndicator: styles => ({\n ...styles,\n padding: '4px'\n }),\n }\n const buttonDisabled = !this.state.event\n || !this.state.eventDate\n || this.props.checkedBills.every(c => !c)\n || this.state.eventAdded\n || this.state.eventRemoved;\n return (\n <div>\n <span style={{ fontSize: '12px' }}>* indicates required field</span>\n <div className=\"extra-spacing dlas-forms inner-grid\" style={{ gridTemplateColumns: '1fr 0.5fr 3fr' }}>\n <div>\n <label>Event Date*</label>\n <DatePicker\n required\n selected={this.state.eventDate}\n onChange={this.handleDateChange}\n className='event-date-picker'\n />\n </div>\n <div>\n <label>Sequence</label>\n <input min={0} style={{ width: '80%' }} maxLength={3} value={this.state.eventSequence} onChange={(e) => this.handleSequenceChange(e.target.value)} />\n </div>\n <div style={{ width: '100%' }}>\n <label>Event*</label>\n <div className=\"inner-grid bill-history-event-controls\">\n <LargeListSelect\n required\n options={billEventOptions}\n styles={selectStyle}\n value={this.state.event}\n getOptionLabel={opt => opt.EventCode ? \"(\" + opt.EventCode + \") \" + opt.label : opt.label}\n onChange={this.handleEventChange}\n isDisabled={this.state.otherEventSelected}\n />\n {this.state.otherEventSelected &&\n <button type=\"button\" className='icon delete' onClick={() => this.unSelectOtherEvent()}></button>\n }\n </div>\n {this.state.otherEventSelected &&\n <div className=\"inner-grid bill-history-event-controls\" style={{ marginTop: \"10px\" }}>\n <LargeListSelect\n options={otherBillEventOptions}\n styles={selectStyle}\n value={this.state.otherEvent}\n getOptionLabel={opt => opt.EventCode ? \"(\" + opt.EventCode + \") \" + opt.label : opt.label}\n onChange={this.handleOtherEventChange}\n />\n </div>\n }\n </div>\n </div>\n {this.state.templateInputs.length > 0 &&\n <div >\n <InputType\n memberList={this.props.patronList}\n comitteeList={this.props.committeeList}\n textList={this.props.textList}\n actionTypes={this.props.actionTypes}\n handleChange={this.handleTemplateChange}\n entryIndex={0}\n activityIndex={0}\n references={this.state.templateInputs}\n />\n </div>\n }\n <br />\n <div>\n <div></div>\n <div className=\"align-right inline-list\">\n <button disabled={buttonDisabled} type=\"button\" className=\"button\" onClick={this.addEvent}>{this.state.eventAdded ? \"Event Added\" : \"Add Event\"}</button>\n <button disabled={buttonDisabled} type=\"button\" className=\"button danger\" onClick={this.removeEvent}>{this.state.eventRemoved ? \"Event Removed\" : \"Remove Event\"}</button>\n </div>\n </div>\n <br />\n <hr className=\"faded-line\" />\n </div>\n )\n }\n}\n\n\nexport default EventControls;\n","import React from 'react';\nimport Select from 'react-select';\nimport DatePicker from 'react-datepicker';\nimport { Link } from 'react-router-dom';\nimport { authActionCreators } from '../../stores/lis-auth-store';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\n\nconst singleStyles = {\n menuList: (base, state) => ({\n ...base,\n paddingTop: '0px',\n }),\n group: (base, state) => ({\n ...base,\n paddingTop: '0px',\n }),\n groupHeading: (base, state) => ({\n ...base,\n paddingTop: '7px',\n paddingBottom: '7px',\n marginBottom: '0px',\n position: 'sticky',\n top: '0px',\n backgroundColor: 'hsl(0,0%,100%)'\n }),\n}\n\nclass BillCategories extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedPatron: '',\n selectedCommittee: '',\n selectedSubject: '',\n selectedDate: null\n };\n this.handlePatronChange = this.handlePatronChange.bind(this);\n this.handleCommitteeChange = this.handleCommitteeChange.bind(this);\n this.handleSubjectChange = this.handleSubjectChange.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n }\n\n handlePatronChange(val) {\n this.setState({\n selectedPatron: val\n }, () => {\n //The next step is done after the state change to make sure the user sees what member was selected before going to the advanced search page\n const param = {\n selectedPatron: this.state.selectedPatron.MemberID,\n selectedSession: this.props.session.SessionID\n };\n const link = window.btoa(JSON.stringify(param));\n this.props.history.push(this.props.history.location.pathname + '?q=' + link);\n });\n }\n\n handleCommitteeChange(val) {\n this.setState({\n selectedCommittee: val\n }, () => {\n const param = {\n selectedCommittee: this.state.selectedCommittee.CommitteeID,\n selectedSession: this.props.session.SessionID,\n selectedBillStatusCategory: this.props.statusCategoriesList.find(category => category.Name === \"In Committee\").LegislationCategoryID\n };\n const link = window.btoa(JSON.stringify(param));\n this.props.history.push(this.props.history.location.pathname + '?q=' + link);\n });\n }\n\n handleSubjectChange(val) {\n this.setState({\n selectedSubject: val\n }, () => {\n //The next step is done after the state change to make sure the user sees what member was selected before going to the advanced search page\n const param = {\n selectedSubject: this.state.selectedSubject.SubjectIndexID,\n selectedSession: this.props.session.SessionID\n }\n const link = window.btoa(JSON.stringify(param));\n this.props.history.push(this.props.history.location.pathname + '?q=' + link);\n });\n }\n\n handleDateChange(val) {\n this.setState({\n selectedDate: val\n }, () => {\n const introDate = this.state.selectedDate.clone();\n introDate.hour(0);\n const param = {\n introductionDate: introDate.format(),\n };\n const link = window.btoa(JSON.stringify(param));\n this.props.history.push(this.props.history.location.pathname + '?q=' + link);\n });\n }\n\n makeLink(statusCategoryName, currentStatus, honorExcludeFailed) {\n let statusCategoryId;\n //try to find a status category with the name provided, if there is one (if there isn't one, it returns all legislation)\n if (statusCategoryName) {\n const statusCategory = this.props.statusCategoriesList.find(category => category.Name.toLowerCase() === statusCategoryName.toLowerCase());\n //if we do not find a status category, default to Id 99 - this makes it so no results are returned; clean, but also tells the user that something is wrong\n statusCategoryId = statusCategory ? statusCategory.LegislationCategoryID : 99;\n }\n\n const params = {\n selectedSession: this.props.session ? this.props.session.SessionID : '',\n selectedBillStatusCategory: statusCategoryId,\n currentStatus: currentStatus || false,\n excludeFailed: honorExcludeFailed ? this.props.excludeFailed : false,\n allLegislation: !statusCategoryName ? true : false,\n //This is used so if the user clicks a link and goes back to the bill categories screen and clicks the same link another search will be made\n //If this was omitted then the url wouldn't change and a new search wouldn't be made\n uniqueSearch: Math.random(),\n };\n const json = JSON.stringify(params);\n const query = window.btoa(json);\n return this.props.history.location.pathname + '?q=' + query;\n }\n\n render() {\n const { session } = this.props;\n const sessionHeader = <h2 id=\"search-selections-header\">{session ? session.SessionYear + ' ' + session.DisplayName : ''}<span className=\"mobile-newline\">:</span> Bills by Category</h2>;\n //The frequent link is a little different from the rest. MostFrequent needs to be true and there is not a status id\n const frequentParams = {\n selectedSession: session ? session.SessionID : '',\n mostFrequent: true,\n uniqueSearch: Math.random(),\n excludeFailed: this.props.excludeFailed\n }\n const frequentJson = JSON.stringify(frequentParams);\n const frequentQuery = window.btoa(frequentJson);\n const frequentLink = this.props.history.location.pathname + '?q=' + frequentQuery;\n\n return (\n <div className=\"lis-search-categories\">\n <div>\n {sessionHeader}\n <hr className=\"faded-line\" />\n </div>\n <div className=\"dlas-forms inner-grid four\" style={{ marginBottom: '1em' }}>\n <div>\n <label htmlFor=\"sr-member\" className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Bills by Member</label>\n <Select\n id=\"sr-member\"\n options={this.props.patronList}\n placeholder=\"Choose a Member\"\n value={this.state.selectedMember}\n onChange={this.handlePatronChange}\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n />\n </div>\n <div>\n <label htmlFor=\"sr-committee\" className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Bills by Committee</label>\n <Select\n id=\"sr-committee\"\n styles={singleStyles}\n options={this.props.committeeList}\n placeholder=\"Choose a Committee\"\n value={this.state.selectedCommittee}\n onChange={this.handleCommitteeChange}\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n />\n </div>\n <div>\n <label htmlFor=\"sr-subject\" className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Bills by Subject</label>\n <Select\n id=\"sr-subject\"\n options={this.props.subjectList}\n placeholder=\"Choose a Subject\"\n value={this.state.selectedSubject}\n onChange={this.handleSubjectChange}\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n />\n </div>\n <div>\n <label htmlFor=\"sr-introduced\" className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Bills Introduced by Day</label>\n <DatePicker\n id=\"sr-introduced\"\n includeDates={this.props.introDateList}\n selected={this.state.selectedDate}\n onChange={this.handleDateChange}\n />\n </div>\n </div>\n <hr className=\"faded-line\" />\n {\n this.props.isLoading ?\n <div className=\"spinner center-spinner\"></div>\n :\n <div>\n <div className=\"inner-grid four\">\n <div className=\"homepage-links\">\n <h3 className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Introduced</h3>\n <div>\n <Link to={this.makeLink(\"\", false, true)}>All legislation</Link>\n </div>\n <div>\n <Link to={frequentLink}>Most frequently accessed</Link>\n </div>\n </div>\n <div className=\"homepage-links\">\n <h3 className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Passed</h3>\n <div>\n <Link to={this.makeLink(\"Passed House\", false, true)}>Passed the House</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Passed Senate\", false, true)}>Passed the Senate</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Passed\", false, true)}>Passed</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Enrolled\", false, true)}>Enrolled</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Signed by Speaker & President\", false, true)}>Signed by Speaker & President</Link>\n </div>\n </div>\n <div className=\"homepage-links\">\n <h3 className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Sent to Conference</h3>\n <div>\n <Link to={this.makeLink(\"In Conference\", true, false)}>In Conference</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Conference Report Agreed to\", false, true)}>Conference Report Agreed to</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Failed in Conference\", false, false)}>Failed in Conference</Link>\n </div>\n </div>\n <div className=\"homepage-links\">\n <h3 className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Governor</h3>\n <div>\n <Link to={this.makeLink(\"Governor's Recommendations\", false, true)}>Governor's recommendations</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Governor's Recommendation Adopted\", false, true)}>Governor's recommendation adopted</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Approved or Enacted\", false, false)}>Approved or enacted</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Vetoed\", false, false)}>Vetoed</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Acts of Assembly chapters\", false, false)}>Acts of Assembly chapters</Link>\n </div>\n </div>\n </div>\n <div className=\"inner-grid four\">\n <div className=\"homepage-links\">\n <h3 className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Failed/Awaiting Action</h3>\n <div>\n <Link to={this.makeLink(\"Failed\", false, false)}>Failed</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Pending\", true, false)}>Pending</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Continued to next session\", true, true)}>Continued to next session</Link>\n </div>\n <div>\n <Link to={this.makeLink(\"Continued from last session\", false, true)}>Continued from last session</Link>\n </div>\n </div>\n <div className=\"homepage-links\">\n <h3 className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Incorporated</h3>\n <div>\n <Link to={this.makeLink(\"Incorporated\", false, true)}>Incorporated</Link>\n </div>\n </div>\n {this.props.location.includes('bill-search') && this.props.login.userClaims.roles.find((x) => x === \"Admin\") &&\n <div className=\"homepage-links\">\n <h3 className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Parallel</h3>\n <div>\n <Link to={this.makeLink(\"Parallel\", false, true)}>Parallel</Link>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { login } = state;\n return {\n login,\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators), dispatch)\n }\n }\n)(BillCategories)\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport Select from 'react-select';\nimport DatePicker from 'react-datepicker';\nimport * as Fields from '../../lis-shared/lis-layout/components/lis-forms-component';\n\n// The parent component is in charge of gathering all the data for the form's dropdowns\n// The paren't state object is updated with the ID of whatever the user selects\n// Normally, the state object is updated with the entire object that the user selects.\n// But, to be able to make a query from another page either the whole object needs to be passed in the url\n// Or just the ID. Since it is easier to pass just the ID in the url to the advanced search page\n// the dropdowns find the object that has the ID that was passed.\n\n// As an example, a session ID of 47 is in the url.\n// So the dropdown selects its value by searching through the available sessions and finding the one that has an ID of 47\n\nconst singleStyles = {\n menuList: (base, state) => ({\n ...base,\n paddingTop: '0px',\n }),\n group: (base, state) => ({\n ...base,\n paddingTop: '0px',\n }),\n groupHeading: (base, state) => ({\n ...base,\n paddingTop: '7px',\n paddingBottom: '7px',\n marginBottom: '0px',\n position: 'sticky',\n top: '0px',\n backgroundColor: 'hsl(0,0%,100%)'\n }),\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n dropdownIndicator: (base) => ({\n ...base,\n padding: '0px 8px'\n }),\n clearIndicator: (base) => ({\n ...base,\n padding: '0px 8px'\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n}\n\nclass AdvancedSearchBoxComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n billStatusDateError: false,\n showFindSection: false,\n showCategorySection: false,\n showTooltip: false\n };\n\n this.toggleFindSection = this.toggleFindSection.bind(this);\n this.toggleCategorySection = this.toggleCategorySection.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.toggleTooltip = this.toggleTooltip.bind(this);\n this.setOpenSection = this.setOpenSection.bind(this);\n }\n\n toggleFindSection() {\n this.setState(state => ({\n showFindSection: !state.showFindSection,\n showCategorySection: !state.showCategorySection\n }), () => {\n this.props.toggleShowCategories(!this.props.showCategories)\n });\n }\n\n toggleCategorySection() {\n this.setState(state => ({\n showCategorySection: !state.showCategorySection,\n showFindSection: !state.showFindSection\n }), () => {\n this.props.toggleShowCategories(!this.props.showCategories)\n });\n }\n\n toggleTooltip(state) {\n let showTooltip = { ...this.state.showTooltip };\n\n //Close all open tooltips\n if (typeof showTooltip === \"object\") {\n for (const x in showTooltip) {\n if (x !== state)\n showTooltip[x] = false;\n };\n }\n\n showTooltip[state] = showTooltip[state] ? false : true;\n\n this.setState({\n showTooltip: showTooltip\n })\n }\n\n handleSubmit() {\n if (this.props.failedToGetSessions) { return; }\n // If the status start date and end date are just the session start and end date then just send the session ID. The database query is a little quicker with just the session ID\n let { billStatusStartDate, billStatusEndDate } = this.props;\n if (!this.props.currentStatus && this.props.selectedBillStatusCategory) {\n if (this.props.selectedSession) {\n const adjournmentEvent = this.props.selectedSession.SessionEvents.find(event => event.DisplayName === 'Adjournment');\n if (this.props.selectedSession.SessionEvents.find(event => event.DisplayName === \"Session Start\") && moment(this.props.selectedSession.SessionEvents.find(event => event.DisplayName === \"Session Start\").ActualDate).isSame(billStatusStartDate) &&\n (adjournmentEvent ? moment(adjournmentEvent.ActualDate) : moment().endOf('day')).isSame(billStatusEndDate)) {\n billStatusStartDate = null;\n billStatusEndDate = null;\n }\n }\n }\n //Create an object to be encoded to base64 and stuck in the url\n let queryObj = {\n selectedBillNumbers: this.props.selectedBillNumbers,\n selectedBillRangeBeginning: this.props.selectedBillRangeBeginning,\n selectedBillRangeEnd: this.props.selectedBillRangeEnd,\n selectedChapterNumber: this.props.selectedChapterNumber,\n selectedKeywords: this.props.selectedKeywords,\n selectedLocation: this.props.selectedLocation,\n selectedSummaryVersion: this.props.selectedSummaryVersion,\n selectedBillVersion: this.props.selectedBillVersion,\n selectedSession: this.props.selectedSession.SessionID,\n selectedBillStatusCategory: this.props.selectedBillStatusCategory,\n billStatusStartDate: billStatusStartDate,\n billStatusEndDate: billStatusEndDate,\n selectedCommittee: this.props.selectedCommittee,\n selectedSubcommittee: this.props.selectedSubcommittee,\n selectedPatron: this.props.selectedPatron,\n selectedSubject: this.props.selectedSubject,\n selectedPatronType: this.props.selectedPatronType,\n selectedChamber: this.props.selectedChamber,\n selectedBillType: this.props.selectedBillType,\n selectedBillEvent: this.props.selectedBillEvent,\n billEventStartDate: this.props.billEventStartDate,\n billEventEndDate: this.props.billEventEndDate,\n billActionStartDate: this.props.billActionStartDate,\n billActionEndDate: this.props.billActionEndDate,\n keywordUseGlobalSessionSearch: this.props.keywordUseGlobalSessionSearch,\n currentStatus: this.props.currentStatus,\n excludeFailed: this.props.excludeFailed\n }\n this.props.handleSubmit(queryObj)\n }\n\n setOpenSection() {\n //900px is when mobile layout is used (set in mobile.scss); collapse by default : false\n this.setState({\n showCategorySection: this.props.showCategories || this.props.searchParam.length === 0 ? window.innerWidth <= 900 ? false : true : false,\n showFindSection: this.props.showCategories || this.props.searchParam.length === 0 ? false : window.innerWidth <= 900 ? false : true\n })\n }\n\n componentDidMount() {\n this.setOpenSection();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.searchParam !== prevProps.searchParam) {\n if (this.props.searchParam === \"\") {\n this.setState({\n showCategorySection: true,\n showFindSection: false\n })\n } else {\n this.setState({\n showCategorySection: false,\n showFindSection: true\n })\n }\n }\n }\n\n render() {\n const getSelectedCommitteeLabel = (val) => {\n if (!val) return null;\n let newCmte = { ...val } //don't modify existing committee values stored at state level & used in dropdown\n if (newCmte && newCmte.label) {\n newCmte.label = '(' + newCmte.ChamberCode + ') ' + newCmte.label;\n }\n return newCmte;\n }\n return (\n <React.Fragment>\n <div className={this.props.location.includes('bill-management') ? \"dlas-forms side-form advanced-search management\" : \"dlas-forms side-form advanced-search\"}>\n <div className=\"header flex-row flex-vertical-center\" style={!this.state.showCategorySection ? { marginBottom: \"20px\" } : {}}>\n <h3 className=\"center category-header\">View Bills By Category</h3>\n <button type=\"button\" aria-expanded={this.state.showCategorySection} onClick={this.toggleCategorySection} className={this.state.showCategorySection ? \"arrow-up white-chevron\" : \"arrow-down white-chevron\"}></button>\n </div>\n {this.state.showCategorySection &&\n <div style={{ marginBottom: \"20px\" }}>\n <div>\n <div onClick={() => { this.props.showCategories ? null : this.props.toggleShowCategories(!this.props.showCategories) }} className=\"side-form-group advanced-search-fieldset-header\" style={this.props.showCategories ? { cursor: 'pointer', backgroundColor: '#e0e0e0' } : { cursor: 'pointer' }}>\n <span className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Bills by Category</span>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"billCategories\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"billCategories\"] &&\n <div className=\"info-box search-tooltip\">\n <p>This is a view where we provide easy to access, common categories of legislation.</p>\n </div>\n }\n </div>\n </div>\n <div>\n <div className=\"side-form-group advanced-search-fieldset-header\">\n <label htmlFor=\"exclude-failed-button\" className={(this.props.location.includes('bill-search') ? \"txt-dark-blue \" : \"\") + `no-background${this.props.keywordUseGlobalSessionSearch ? ' txt-greyed' : ''}`} style={{ whiteSpace: \"no-wrap\", marginTop: '0px', fontSize: \"17px\" }}>Exclude Failed Legislation</label>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"excludeFailed\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"excludeFailed\"] &&\n <div className=\"info-box search-tooltip\">\n <p>{\"Turning this switch on will exclude all failed bills from your search results.\"}</p>\n <p>{\"This option will not be honored for the following category searches:\"}\n <ul>\n <li>In Conference</li>\n <li>Failed in Conference</li>\n <li>Approved or enacted</li>\n <li>Vetoed</li>\n <li>Acts of Assembly chapters</li>\n <li>Failed</li>\n <li>Pending</li>\n </ul>\n </p>\n <p>{\"This option will be disabled if you are performing a keyword search across all sessions.\"}</p>\n </div>\n }\n <div className=\"flex-row flex-vertical-center flex-start\" style={{ marginBottom: '3%' }}>\n <div className=\"toggle-switch\" disabled={this.props.keywordUseGlobalSessionSearch} onClick={() => this.props.handleExcludeFailedChange()}>\n <input id=\"exclude-failed-button\" checked={this.props.excludeFailed} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n <div className={this.props.location.includes('bill-management') ? \"dlas-forms side-form advanced-search management\" : \"dlas-forms side-form advanced-search\"}>\n <div className=\"header flex-row flex-vertical-center\">\n <h3 className=\"center category-header\">Find a Bill</h3>\n <button type=\"button\" aria-expanded={this.state.showFindSection} onClick={this.toggleFindSection} className={this.state.showFindSection ? \"arrow-up white-chevron\" : \"arrow-down white-chevron\"}></button>\n </div>\n {this.state.showFindSection &&\n <div className=\"content\">\n <div>\n <div className=\"side-form-group advanced-search-fieldset-header\">\n <label htmlFor=\"exclude-failed-button\" className={(this.props.location.includes('bill-search') ? \"txt-dark-blue \" : \"\") + `no-background${this.props.keywordUseGlobalSessionSearch ? ' txt-greyed' : ''}`} style={{ whiteSpace: \"no-wrap\", marginTop: '0px', fontSize: \"17px\" }}>Exclude Failed Legislation</label>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"excludeFailed\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"excludeFailed\"] &&\n <div className=\"info-box search-tooltip\">\n <p>{\"Turning this switch on will exclude all failed bills from your search results.\"}</p>\n <p>{\"This option will be disabled if you are performing a keyword search across all sessions.\"}</p>\n </div>\n }\n <div className=\"flex-row flex-vertical-center flex-start\" style={{ marginBottom: '3%' }}>\n <div className=\"toggle-switch\" disabled={this.props.keywordUseGlobalSessionSearch} onClick={() => this.props.handleExcludeFailedChange()}>\n <input id=\"exclude-failed-button\" checked={this.props.excludeFailed} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n </div>\n </div>\n </div>\n <div style={{ cursor: 'pointer' }} onClick={() => this.props.toggleGroup(\"billFieldset\")} className=\"advanced-search-fieldset-header\">\n <span className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Bill Number</span>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"billNumber\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"billNumber\"] &&\n <div className=\"info-box search-tooltip\">\n <p>{\"Use > to search for all legislation with a number after the one entered (HB5> returns all house bills with a number after 5)\"}</p>\n <p>{\"Use < to search for all legislation with a number before the one entered (HB5< returns all house bills with a number before 5)\"}</p>\n <p>{\"Use a comma to search for a list of two or more bills (HB53, HB98)\"}</p>\n </div>\n }\n <button aria-expanded={this.props.billFieldset} type=\"button\" className={this.props.billFieldset ? \"arrow-up\" : \"arrow-down\"}></button>\n </div>\n {this.props.billFieldset &&\n <fieldset>\n <div>\n <Fields.TextInput\n type=\"text\"\n id=\"se-bill-numbers\"\n label=\"Bill Number(s)\"\n onChange={(evt) => this.props.handleTextChange(evt, 'selectedBillNumbers')}\n value={this.props.selectedBillNumbers}\n placeholder=\"ex. hb1\"\n />\n </div>\n <div className=\"multi-row two two-mobile no-margin\">\n <div>\n <Fields.TextInput\n type=\"text\"\n id=\"se-bill-range-start\"\n label=\"Bill Range\"\n onChange={(evt) => this.props.handleTextChange(evt, 'selectedBillRangeBeginning')}\n value={this.props.selectedBillRangeBeginning}\n placeholder=\"ex. hb1\"\n />\n </div>\n <div>\n <br />\n <label htmlFor=\"se-bill-range-end\" className=\"screen-reader-only\">Bill range end</label>\n <input\n type=\"text\"\n id=\"se-bill-range-end\"\n onChange={(evt) => this.props.handleTextChange(evt, 'selectedBillRangeEnd')}\n value={this.props.selectedBillRangeEnd}\n placeholder=\"ex. hb10\"\n />\n </div>\n </div>\n <div>\n <Fields.TextInput\n type=\"text\"\n id=\"se-chapter-numbers\"\n label=\"Chapter Number\"\n onChange={(evt) => this.props.handleTextChange(evt, 'selectedChapterNumber')}\n value={this.props.selectedChapterNumber}\n placeholder={\"ex. ch3\"}\n />\n </div>\n </fieldset>\n }\n <div style={{ cursor: 'pointer' }} onClick={() => this.props.toggleGroup(\"keywordFieldset\")} className=\"advanced-search-fieldset-header\">\n <span className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Keyword</span>\n <a onClick={(e) => { e.stopPropagation(e); this.props.toggleHelpModal() }} title=\"Search Help\" className=\"button info\">Info</a>\n <button aria-expanded={this.props.keywordFieldset} type=\"button\" className={this.props.keywordFieldset ? \"arrow-up\" : \"arrow-down\"}></button>\n </div>\n {this.props.keywordFieldset &&\n <fieldset>\n {!this.props.billManagement &&\n <React.Fragment>\n <div className=\"multi-row two-max\" >\n <div className=\"label-and-radio\">\n <label htmlFor=\"selected-session-button\" className={`label radio-label`}>{this.props.selectedSession ? this.props.selectedSession.SessionYear + \" \" + this.props.selectedSession.DisplayName : 'Selected Session'}</label>\n <input id=\"selected-session-button\" checked={this.props.keywordUseGlobalSessionSearch === false} onChange={() => this.props.handleRadioChange()} type=\"radio\" />\n </div>\n <div className=\"label-and-radio\">\n <label htmlFor=\"all-sessions-button\" className={`label radio-label`}>All Sessions</label>\n <input id=\"all-sessions-button\" checked={this.props.keywordUseGlobalSessionSearch === true} onChange={() => this.props.handleRadioChange()} type=\"radio\" />\n </div>\n </div>\n </React.Fragment>\n }\n <div>\n <label htmlFor=\"se-keywords\" className=\"screen-reader-only\">Keywords</label>\n <Fields.TextInput\n type=\"text\"\n id=\"se-keywords\"\n onChange={(evt) => this.props.handleTextChange(evt, 'selectedKeywords')}\n value={this.props.selectedKeywords}\n placeholder={this.props.selectedLocation === \"Caption\" ? \"A brief description of the bill\" : \"Keyword\"}\n />\n </div>\n <div>\n <div>\n <label>Search within</label>\n </div>\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.props.handleSelectChange({ value: this.props.selectedLocation !== 'Caption' ? 'Caption' : '' }, 'selectedLocation')}>\n <input id=\"se-caption\" checked={this.props.selectedLocation === 'Caption'} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"se-caption\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"no-wrap\", marginTop: '0px' }}>Caption</label>\n </div>\n <hr className=\"faded-line\" />\n <div className=\"checkbox\">\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.props.handleSelectChange({ value: this.props.selectedLocation !== 'Bill Text' ? 'Bill Text' : '' }, 'selectedLocation')}>\n <input id=\"se-bill-text\" checked={this.props.selectedLocation === 'Bill Text'} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"se-bill-text\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"no-wrap\", marginTop: '0px' }}>Bill Text</label>\n </div>\n <label htmlFor=\"sr-bill-text-type\" className=\"screen-reader-only\" >Bill text type</label>\n <Select\n id=\"sr-bill-text-type\"\n isDisabled={this.props.selectedLocation !== 'Bill Text'}\n styles={singleStyles}\n options={this.props.billVersionList}\n value={this.props.billVersionList.find(ver => ver.value === this.props.selectedBillVersion)}\n onChange={opt => this.props.handleSelectChange(opt, 'selectedBillVersion')} />\n </div>\n <hr className=\"faded-line\" />\n <div className=\"checkbox\">\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.props.handleSelectChange({ value: this.props.selectedLocation !== 'Summary' ? 'Summary' : '' }, 'selectedLocation')}>\n <input id=\"se-bill-summary\" checked={this.props.selectedLocation === 'Summary'} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"se-bill-summary\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"no-wrap\", marginTop: '0px' }}>Bill Summary</label>\n </div>\n <label htmlFor=\"sr-bill-summary-type\" className=\"screen-reader-only\" >Bill summary type</label>\n <Select\n id=\"sr-bill-summary-type\"\n isDisabled={this.props.selectedLocation !== 'Summary'}\n styles={singleStyles}\n options={this.props.billSummaryList}\n value={this.props.billSummaryList.find(ver => ver.value === this.props.selectedSummaryVersion)}\n onChange={opt => this.props.handleSelectChange(opt, 'selectedSummaryVersion')} />\n </div>\n </div>\n </div>\n </fieldset>\n }\n <div style={{ cursor: 'pointer' }} onClick={() => this.props.toggleGroup(\"statusFieldset\")} className=\" advanced-search-fieldset-header\">\n <span className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Legislation Status</span>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"status\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"status\"] &&\n <div className=\"info-box search-tooltip\">\n <p>Status - Where the bill is in the legislative process.</p>\n <p>If you do not input dates or check currently, the search will be executed for that session.</p>\n </div>\n }\n <button aria-expanded={this.props.statusFieldset} type=\"button\" className={this.props.statusFieldset ? \"arrow-up\" : \"arrow-down\"}></button>\n </div>\n {this.props.statusFieldset &&\n <fieldset>\n <div>\n <div className=\"inner-grid one-and-two two-mobile\">\n <label htmlFor=\"se-bill-status-select\">Status</label><div className=\"flex-row flex-vertical-center flex-end\">\n <div className=\"toggle-switch\" disabled={this.props.billStatusCategoryList.find(status => status.LegislationCategoryID === this.props.selectedBillStatusCategory)?.Name === \"Continued to next session\"} onClick={() => this.props.handleCurrentStatusChange()}>\n <input id=\"current-status-button\" checked={this.props.currentStatus} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"current-status-button\" className=\"checkbox-label no-background\">{this.props.selectedSession && !this.props.selectedSession.IsActive ? 'Final Status' : 'Currently'}</label>\n </div>\n </div>\n <Select\n id=\"se-bill-status-select\"\n isClearable\n key={this.props.selectedBillStatusCategory}\n styles={singleStyles}\n options={this.props.billStatusCategoryList}\n placeholder=\"All\"\n onChange={(opt) => this.props.handleSelectChange(opt, 'selectedBillStatusCategory')}\n value={this.props.billStatusCategoryList.find(status => status.LegislationCategoryID === this.props.selectedBillStatusCategory)}\n />\n </div>\n <div className=\"inner-grid two two-mobile\">\n <div>\n <label htmlFor=\"se-bill-status-start-date\">Start Date</label>\n <DatePicker\n id=\"se-bill-status-start-date\"\n selected={this.props.billStatusStartDate ? moment(this.props.billStatusStartDate) : null}\n onChange={(opt) => {\n opt.startOf('day');\n this.props.handleDateChange(opt, 'billStatusStartDate')\n }}\n disabled={!this.props.selectedBillStatusCategory || this.props.currentStatus}\n />\n </div>\n <div>\n <label htmlFor=\"se-bill-status-end-date\">End Date</label>\n <DatePicker\n id=\"se-bill-status-end-date\"\n selected={this.props.billStatusEndDate ? moment(this.props.billStatusEndDate) : null}\n onChange={(opt) => {\n opt.endOf('day');\n this.props.handleDateChange(opt, 'billStatusEndDate')\n }}\n disabled={!this.props.selectedBillStatusCategory || this.props.currentStatus}\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"se-selected-chamber\">Originating Chamber</label>\n <Select\n styles={singleStyles}\n id=\"se-selected-chamber\"\n options={Fields.originatingChamberOptions}\n onChange={this.props.chamberChange}\n value={this.props.selectedChamber}\n placeholder=\"Both\"\n isClearable={true}\n />\n </div>\n </fieldset>\n }\n <div style={{ cursor: 'pointer' }} onClick={() => this.props.toggleGroup(\"committeesFieldset\")} className=\"advanced-search-fieldset-header\">\n <span className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Committees</span>\n {/* <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"committee\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"committee\"] &&\n <div className=\"info-box search-tooltip\">\n <p></p>\n </div>\n } */}\n <div />\n <button aria-expanded={this.props.committeesFieldset} type=\"button\" className={this.props.committeesFieldset ? \"arrow-up\" : \"arrow-down\"}></button>\n </div>\n {this.props.committeesFieldset &&\n <fieldset>\n <div>\n <label htmlFor=\"se-selected-committee\">Committees</label>\n <Select\n styles={singleStyles}\n isClearable\n key={this.props.selectedCommittee}\n id=\"se-selected-committee\"\n options={this.props.committeeList}\n onChange={this.props.committeeChange}\n value={getSelectedCommitteeLabel(this.props.committeeList.flatMap(x => x.options || x).find(committee => committee.CommitteeID == this.props.selectedCommittee))}\n />\n </div>\n <div>\n <label htmlFor=\"se-selected-subcommittee\">Subcommittees</label>\n <Select\n styles={singleStyles}\n isClearable\n key={this.props.selectedSubcommittee}\n id=\"se-selected-subcommittee\"\n isDisabled={!this.props.selectedCommittee}\n options={this.props.subcommitteeList}\n onChange={(opt) => this.props.handleSelectChange(opt, 'selectedSubcommittee')}\n value={this.props.subcommitteeList.find(subcommittee => subcommittee.CommitteeID === this.props.selectedSubcommittee)}\n />\n </div>\n </fieldset>\n }\n <div style={{ cursor: 'pointer' }} onClick={() => this.props.toggleGroup(\"membersFieldset\")} className=\"advanced-search-fieldset-header\">\n <span className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Members</span>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"members\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"members\"] &&\n <div className=\"info-box search-tooltip\">\n <p>Chief Patron - The member(s) that originated the bill.</p>\n </div>\n }\n <button aria-expanded={this.props.membersFieldset} type=\"button\" className={this.props.membersFieldset ? \"arrow-up\" : \"arrow-down\"}></button>\n </div>\n {this.props.membersFieldset &&\n <fieldset>\n <div>\n <label htmlFor=\"se-selected-patron\">Patrons</label>\n <Select\n styles={singleStyles}\n id=\"se-selected-patron\"\n isClearable\n key={this.props.selectedPatron}\n options={this.props.patronList}\n placeholder=\"All\"\n onChange={this.props.handlePatronChange}\n value={this.props.patronList.find(patron => patron.MemberID === this.props.selectedPatron)}\n />\n </div>\n <div>\n <label htmlFor=\"se-selected-patron-type\">Patron Type</label>\n <Select\n isClearable\n styles={singleStyles}\n key={this.props.selectedPatronType}\n id=\"se-selected-patron-type\"\n isDisabled={!this.props.selectedPatron}\n value={this.props.patronRoles.filter(role => this.props.selectedPatronType.includes(role.PatronTypeID))}\n onChange={this.props.handlePatronTypeChange}\n options={this.props.patronList.find(x => x.MemberID === this.props.selectedPatron) ? this.props.patronList.find(x => x.MemberID === this.props.selectedPatron).ChamberCode === \"S\" ? this.props.patronRoles.filter(x => x.PatronTypeID !== 5) : this.props.patronRoles.filter(x => x.PatronTypeID !== 3 && x.PatronTypeID !== 5) : []}\n isSearchable={false}\n isMulti={true}\n />\n </div>\n </fieldset>\n }\n <div style={{ cursor: 'pointer' }} onClick={() => this.props.toggleGroup(\"subjectFieldset\")} className=\"advanced-search-fieldset-header\">\n <span className={this.props.location.includes('bill-search') ? \"txt-dark-blue\" : \"\"}>Subject</span>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(\"subject\") }} className=\"button info\">Info</a>\n {this.state.showTooltip[\"subject\"] &&\n <div className=\"info-box search-tooltip\">\n <p>Bills listed by subject.</p>\n </div>\n }\n <button aria-expanded={this.props.subjectFieldset} type=\"button\" className={this.props.subjectFieldset ? \"arrow-up\" : \"arrow-down\"}></button>\n </div>\n {this.props.subjectFieldset &&\n <fieldset>\n <div>\n <label htmlFor=\"se-selected-subject\">Subjects</label>\n <Select\n styles={singleStyles}\n id=\"se-selected-subject\"\n isClearable\n key={this.props.selectedSubject}\n options={this.props.subjectList}\n placeholder=\"All Subjects\"\n onChange={(opt) => this.props.handleSelectChange(opt, 'selectedSubject')}\n value={this.props.subjectList.find(subject => subject.SubjectIndexID === this.props.selectedSubject)}\n />\n </div>\n </fieldset>\n }\n <div style={{ padding: '10px' }} className=\"center flex-row\">\n <button id=\"se-clear-form\" className=\"button secondary\" type=\"button\" onClick={() => this.props.clearForm(true, true)}>\n Clear\n </button>\n <button id=\"se-submit-form\" className=\"button\" type=\"button\"\n disabled={\n !this.props.showUpdateSearchButton &&\n (!this.props.selectedChamber && !this.props.selectedBillEvent && !this.props.selectedBillType && !this.props.selectedCommittee && !this.props.selectedSubcommittee && !this.props.selectedPatron && !this.props.selectedSubject && !this.props.selectedKeywords && !this.props.selectedBillNumbers && !this.props.selectedBillRangeBeginning && !this.props.selectedBillRangeEnd && !this.props.selectedSubject && !this.props.selectedChapterNumber && !this.props.selectedBillStatusCategory)\n || this.props.isFetching || this.props.failedToGetSessions}\n title={!this.props.showUpdateSearchButton && !this.props.selectedChamber && !this.props.selectedBillEvent && !this.props.selectedBillType && !this.props.selectedCommittee && !this.props.selectedSubcommittee && !this.props.selectedPatron && !this.props.selectedSubject && !this.props.selectedKeywords && !this.props.selectedBillNumbers && !this.props.selectedBillRangeBeginning && !this.props.selectedBillRangeEnd && !this.props.selectedSubject && !this.props.selectedChapterNumber && !this.props.selectedBillStatusCategory && 'Please provide a parameter upon which to search.'}\n onClick={() => this.handleSubmit()}>\n Search\n </button>\n </div>\n </div>\n }\n </div>\n </React.Fragment>\n )\n }\n}\n\n\nexport default AdvancedSearchBoxComponent;\n","import React from 'react';\nimport moment from 'moment-timezone';\n\n\nclass SearchSelections extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n };\n };\n\n render() {\n return (\n <div className=\"search-selections\">\n <span className=\"txt-greyed small-text\">Your Search</span>\n <div>\n <Selection\n value={this.props.selectedBillNumbers}\n name={\"selectedBillNumbers\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedBillRangeBeginning}\n name={\"selectedBillRangeBeginning\"}\n title=\"Bill Range Start\"\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedBillRangeEnd}\n name={\"selectedBillRangeEnd\"}\n title=\"Bill Range End\"\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedChapterNumber}\n name={\"selectedChapterNumber\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedKeywords}\n name={\"selectedKeywords\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.currentStatus && this.props.selectedBillStatusCategory ? this.props.selectedSession && !this.props.selectedSession.IsActive ? 'Final Status' : 'Current Status' : null}\n name={\"currentStatus\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedBillStatusCategory ? this.props.selectedBillStatusCategory.label : null}\n name={\"selectedBillStatusCategory\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.billStatusStartDate ? moment(this.props.billStatusStartDate).format(\"MM/DD/YYYY\") : null}\n name={\"billStatusStartDate\"}\n title=\"Status Start Date\"\n clear={null}\n />\n <Selection\n value={this.props.billStatusEndDate ? moment(this.props.billStatusEndDate).format(\"MM/DD/YYYY\") : null}\n name={\"billStatusEndDate\"}\n title=\"Status End Date\"\n clear={null}\n />\n <Selection\n value={this.props.selectedCommittee ? this.props.selectedCommittee.label : null}\n name={\"selectedCommittee\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedSubcommittee ? this.props.selectedSubcommittee.label : null}\n name={\"selectedSubcommittee\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedPatron ? this.props.selectedPatron.label : null}\n name={\"selectedPatron\"}\n clear={this.props.handleSelectionClear}\n />\n {this.props.selectedPatronType.map((type, typeIndex) =>\n <Selection\n key={typeIndex}\n index={typeIndex}\n value={type.label}\n name={\"selectedPatronType\"}\n clear={this.props.handleMultiSelectionClear}\n />\n )}\n <Selection\n value={this.props.selectedChamber ? this.props.selectedChamber.label : null}\n name={\"selectedChamber\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedBillType ? this.props.selectedBillType.label : null}\n name={\"selectedBillType\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.selectedSubject ? this.props.selectedSubject.label : null}\n name={\"selectedSubject\"}\n clear={this.props.handleSelectionClear}\n />\n <Selection\n value={this.props.excludeFailed ? \"Exclude Failed\" : null}\n name={\"excludeFailed\"}\n clear={this.props.handleSelectionClear}\n />\n {this.props.updateSearch &&\n <UpdateSearch\n updateSearch={this.props.updateSearch}\n />\n }\n </div>\n <hr className=\"faded-line\" />\n </div>\n )\n }\n}\n\nconst Selection = props => {\n const { title, value, name, index, clear } = props;\n if (value) {\n return (<div className=\"selection-bubble\">\n <div className=\"flex-row\">\n <span>{title ? `${title}: ${value.length > 100 ? value.substring(0, 100) + '...' : value}` : value.length > 100 ? value.substring(0, 100) + '...' : value}</span>\n {clear && <button aria-label=\"remove item\" onClick={() => clear(name, index)} className=\"icon cross-blue\"></button>}\n </div>\n </div>);\n } else {\n return (false);\n }\n\n}\n\nconst UpdateSearch = props => {\n const { updateSearch } = props;\n return (\n <div className=\"selection-bubble button\">\n <div className=\"flex-row\" onClick={() => updateSearch()}>\n <button className=\"button small\">Update Search</button>\n </div>\n </div>);\n}\n\nexport default SearchSelections;\n","import React from 'react';\nimport ReactDOM from 'react-dom'\nimport moment from 'moment-timezone';\nimport { connect } from 'react-redux';\nimport DatePicker from 'react-datepicker';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport { LargeListSelect } from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport InputTypes from '../../../lis-admin/lis-minutes-management/components/input-types';\nimport { HubConnectionBuilder } from \"@microsoft/signalr\";\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { bindActionCreators } from 'redux';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NEW_EVENT = \"NEW_EVENT\";\n\nconst selectStyle = () => {\n const fontSize = '0.8em';\n return {\n container: styles => ({\n ...styles,\n minWidth: '90%'\n }),\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: fontSize,\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: fontSize,\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n option: styles => ({\n ...styles,\n fontSize: fontSize\n }),\n dropdownIndicator: styles => ({\n ...styles,\n padding: '0px 8px'\n }),\n };\n}\n\nconst getItemStyle = (isDragging, draggableStyle, historyItem) => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n // change background colour if dragging\n background: isDragging ? '#34495e' : 'white',\n color: isDragging ? 'white' : '#34495e',\n border: 'none',\n background: historyItem.isNewlyAdded ? 'rgba(91, 178, 114, 0.8)' : historyItem.isNewlyDeleted ? 'rgba(255, 151, 151, 0.8)' : historyItem.dateChanged || historyItem.sequenceChanged || historyItem.descriptionChanged || historyItem.eventCodeChanged ? 'rgba(252, 250, 97, 0.8)' : 'white',\n // styles we need to apply on draggables\n ...draggableStyle,\n});\n\nconst getListStyle = (isDraggingOver) => ({\n background: isDraggingOver ? '#8b9fb3' : '#9e9e9e',\n width: '100%',\n});\n\nconst getDivStyle = (latestEvent, hideAllEvents) => ({\n display: !latestEvent && hideAllEvents ? \"none\" : \"block\"\n})\n\nclass BillHistoryForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n organizedEvents: [],\n newEventDate: moment().utcOffset(0).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }),\n newEvent: '',\n editingEvents: [],\n currentInput: { eventGroupIndex: 0, itemIndex: 0, inputNumber: '' },\n changeToBill: '',\n templateInputs: [],\n incompleteInputs: []\n };\n this.handleEventInputChange = this.handleEventInputChange.bind(this);\n this.changeEvent = this.changeEvent.bind(this);\n this.changeDate = this.changeDate.bind(this);\n this.toggleEventGroup = this.toggleEventGroup.bind(this);\n this.bulkToggleEventGroup = this.bulkToggleEventGroup.bind(this);\n this.toggleEditDescription = this.toggleEditDescription.bind(this);\n this.changeDescription = this.changeDescription.bind(this);\n this.formDescription = this.formDescription.bind(this);\n this.setDescription = this.setDescription.bind(this);\n this.handleTemplateChange = this.handleTemplateChange.bind(this);\n this.handleBillNumberChange = this.handleBillNumberChange.bind(this);\n this.onDragEnd = this.onDragEnd.bind(this);\n this.handleNewEventChange = this.handleNewEventChange.bind(this);\n this.handleNewEventDateChange = this.handleNewEventDateChange.bind(this);\n this.addEvent = this.addEvent.bind(this);\n this.saveEvents = this.saveEvents.bind(this);\n this.handleMovingFocus = this.handleMovingFocus.bind(this);\n this.handleMovingFocusFromBillChanger = this.handleMovingFocusFromBillChanger.bind(this);\n this.receiveEventByWebsocket = this.receiveEventByWebsocket.bind(this);\n this.getSessionLegislation = this.getSessionLegislation.bind(this);\n\n this._inputRefs = [];\n this._containerRefs = [];\n this._billSwitcherRef = React.createRef();\n this._addEventRef = React.createRef();\n }\n\n static getConnectionId = (conn, functionToRun) => {\n //This connection ID might be used later\n conn.invoke('getConnectionId')\n .then(connectionId => {\n functionToRun(connectionId);\n });\n }\n\n //When a WebSocket message comes across with this label then the event list needs to be updated with new values\n static handleEvent = (message, functionToRun) => {\n try {\n if (message.statusCode > 399) throw 'Server Error: ' + JSON.stringify(message);\n functionToRun(message)\n } catch (err) {\n console.log(err);\n }\n };\n\n componentDidMount() {\n if (this.props.switchedToBill) {\n this.setState({ changeToBill: this.props.legislationNumber })\n }\n let organizedEvents = this.props.organizedEvents;\n if (organizedEvents.length === 0 || this.props.switchedToBill) {\n organizedEvents = BillHistoryForm.organizeEvents([...this.props.historyList]);\n this.props.handleEventChange(organizedEvents);\n }\n //try to focus on the add event dropdown/input\n if (this._addEventRef.current) {\n var addEventNode = ReactDOM.findDOMNode(this._addEventRef.current);\n if (addEventNode && addEventNode.getElementsByTagName('input').length) {\n addEventNode.getElementsByTagName('input')[0].focus();\n }\n }\n const numberOfEvents = organizedEvents.length;\n //Hide all the events except the last day. This is most likely what the user will be editing\n organizedEvents.forEach((evt, i) => {\n if (i !== numberOfEvents - 1) {\n evt.hidden = true;\n } else {\n evt.hidden = false;\n if (this.props.isBillManagement) {\n //set the display sequence for all the events in this group that is going to be automatically displayed\n evt.events.forEach(e => {\n e.DisplaySequence = e.Sequence * 10;\n });\n }\n }\n })\n\n //Scroll to the bottom so they can see the events of the last day\n if (!this.props.isBillManagement) {\n window.scrollTo(0, document.body.scrollHeight);\n }\n\n if (!this.props.isBillManagement) {\n let entryConnection = new HubConnectionBuilder() //in bill mgmt, use one central entryConnection from props rather than a separate connection for each bill\n .withUrl((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/events')\n .build();\n entryConnection.serverTimeoutInMilliseconds = 60000;\n\n this.setState({\n entryHubConnection: entryConnection\n }, () => {\n const self = this;\n this.state.entryHubConnection\n .start({ withCredentials: false })\n .then(() => {\n BillHistoryForm.getConnectionId(this.state.entryHubConnection, (connectionId) => {\n console.log(`entryConnectionId: ${connectionId}`);\n this.setState({\n entryConnectionId: connectionId\n });\n });\n }).catch(err => {\n console.log('Error establishing connection' + err)\n this.props.actions.makeToast([{ message: \"History Connection Failed\", type: \"failure\" }])\n });\n this.state.entryHubConnection.on(\"ReceiveEvent\", message => BillHistoryForm.handleEvent(message, this.receiveEventByWebsocket));\n });\n }\n }\n\n receiveEventByWebsocket(message) {\n let historyList = [...this.props.historyList];\n\n //If the LegislationID for the list of new events doesn't match the open bill then throw it out\n if (this.props.billData.LegislationID !== message[0].LegislationID) {\n return;\n } else {\n for (let i = 0; i < message.length; i++) {\n //If we don't find an event from the websocket message in the already-loaded list of events then add it to the local history list\n if (!historyList.find(x => x.LegislationEventID === message[i].LegislationEventID)) {\n historyList.push(message[i])\n }\n }\n\n //Send the updated local history list to be reorganized and displayed\n let organizedEvents = BillHistoryForm.organizeEvents(historyList);\n this.props.handleEventChange(organizedEvents);\n }\n }\n\n // Events can only be re-organized within the day that the event occured\n // So each day's events needs to be moved into their own group so they can each have their own drag and drop interface\n // Events can be moved to a different group by the user by selecting a different date for the event\n static organizeEvents(events) {\n let organizedEvents = [];\n let previousDate = '';\n let currentDate = '';\n let eventSequence = 1;\n let eventsInADay = [];\n events.sort((a, b) => moment(a.EventDate).startOf('day').valueOf() - moment(b.EventDate).startOf('day').valueOf())\n events.forEach(event => {\n //first off, set originallyDeleted which is used to figure out if events are newly deleted or not and highlight in bill mgmt\n event.originallyDeleted = Boolean(event.DeletionDate);\n currentDate = moment(event.EventDate)\n if (previousDate && !currentDate.isSame(previousDate, 'day')) {\n organizedEvents.push({\n events: eventsInADay,\n date: previousDate\n });\n eventsInADay = [];\n eventSequence = 1;\n }\n eventsInADay.push({ ...event, Sequence: eventSequence, origSequence: eventSequence });\n eventSequence++;\n previousDate = currentDate;\n });\n if (eventsInADay.length > 0) {\n organizedEvents.push({\n events: eventsInADay,\n date: previousDate\n });\n }\n\n return organizedEvents;\n }\n\n handleEventInputChange(inputValue, legislationEventID) {\n let eventInputValue = { ...this.state.eventInputValue };\n eventInputValue[legislationEventID.toString()] = inputValue;\n this.setState({ eventInputValue });\n }\n\n changeEvent(val, eventGroupIndex, index) {\n let organizedEvents = [...this.props.organizedEvents];\n organizedEvents[eventGroupIndex].events[index].origEventCode = organizedEvents[eventGroupIndex].events[index].origEventCode ?? organizedEvents[eventGroupIndex].events[index].EventCode;\n organizedEvents[eventGroupIndex].events[index].EventCode = val.EventCode;\n organizedEvents[eventGroupIndex].events[index].IsPassed = val.IsPassed;\n organizedEvents[eventGroupIndex].events[index].Description = val.LegislationDescription;\n //The event type is referenced from the EventCode. Delete this so the correct event is set\n delete organizedEvents[eventGroupIndex].events[index].LegislationEventTypeID;\n organizedEvents[eventGroupIndex].events[index].hasChanged = true;\n if (val.ActionReferences && val.ActionReferences.length > 0) {\n organizedEvents[eventGroupIndex].events[index].EventReferences = [...val.ActionReferences];\n }\n this.props.handleEventChange(organizedEvents, () => {\n this.saveEvents();\n\n // When selecting a new event the container does not properly focus so it is done here.\n if (this._containerRefs[eventGroupIndex] && this._containerRefs[eventGroupIndex][`${index}-${1}`]) {\n // The timeout is because react-select messes with the focus after changing the event.\n // It guarantees that react-select will finish its opertions before the focus is set.\n setTimeout(() => this._containerRefs[eventGroupIndex][`${index}-${1}`].current.focus(), 10)\n }\n\n });\n this.handleEventInputChange(null, organizedEvents[eventGroupIndex].events[index].LegislationEventID);\n }\n\n changeDate(val, eventGroupIndex, index) {\n if (val === null) {\n return;\n }\n let organizedEvents = [...this.props.organizedEvents];\n let lEvent = {\n ...organizedEvents[eventGroupIndex].events[index],\n EventDate: val.format(\"LLLL\"),\n origDate: organizedEvents[eventGroupIndex].events[index].origDate ?? organizedEvents[eventGroupIndex].events[index].EventDate,\n hasChanged: true\n };\n let newEventGroupIndex = organizedEvents.findIndex(eventGroup => eventGroup.date.isSame(val, 'day'));\n organizedEvents[eventGroupIndex].events.splice(index, 1);\n if (newEventGroupIndex > -1) {\n // If the selected date already has events that occured on that date then the event is moved into the existing group\n lEvent.Sequence = organizedEvents[newEventGroupIndex].events.length + 1;\n organizedEvents[newEventGroupIndex].events.push(lEvent)\n //expand this new event day\n organizedEvents[newEventGroupIndex].hidden = false;\n } else {\n // If the selected date does not have any events then a new event group needs to be created for this date\n lEvent.Sequence = 1;\n const newEventGroup = {\n date: val,\n events: [lEvent],\n hidden: false\n };\n // Gotta find where it goes in the list of groups\n organizedEvents.some((eventGroup, i) => {\n if (eventGroup.date.isAfter(val, 'day')) {\n newEventGroupIndex = i;\n organizedEvents.splice(i, 0, newEventGroup)\n return true;\n }\n if (i === organizedEvents.length - 1) {\n newEventGroupIndex = i + 1;\n organizedEvents.push(newEventGroup);\n }\n });\n }\n //If the old day is now empty then remove it from the array\n if (organizedEvents[eventGroupIndex].events.length === 0) {\n organizedEvents.splice(eventGroupIndex, 1);\n if (newEventGroupIndex > eventGroupIndex) {\n newEventGroupIndex -= 1\n }\n }\n\n // After setting the new events make sure that focus is applied to the container of the event's new position\n this.props.handleEventChange(organizedEvents, () => {\n this.saveEvents();\n if (this._containerRefs[newEventGroupIndex] && this._containerRefs[newEventGroupIndex][`${organizedEvents[newEventGroupIndex].events.length - 1}-${0}`]) {\n this._containerRefs[newEventGroupIndex][`${organizedEvents[newEventGroupIndex].events.length - 1}-${0}`].current.focus();\n }\n });\n\n if (this.props.hideAllEvents) {\n this.props.togglehideAllEvents(this.props.idx);\n }\n\n this.setState({\n editingEvents: [],\n });\n }\n\n toggleEventGroup(eventGroupIndex, expand) {\n let organizedEvents = this.props.organizedEvents;\n //if display sequences haven't already been set for this group of events, set it now\n if (this.props.isBillManagement && organizedEvents[eventGroupIndex].events.find(e => !e.DisplaySequence)) {\n organizedEvents[eventGroupIndex].events.forEach(evt => {\n evt.DisplaySequence = evt.Sequence * 10;\n })\n }\n organizedEvents[eventGroupIndex].hidden = expand !== undefined ? !expand : organizedEvents[eventGroupIndex].hidden === undefined ? false : !organizedEvents[eventGroupIndex].hidden;\n this.forceUpdate();\n }\n\n bulkToggleEventGroup(expand) {\n let organizedEvents = this.props.organizedEvents;\n organizedEvents.forEach((eventGroup, idx) => {\n this.toggleEventGroup(idx, expand)\n })\n }\n\n toggleEditDescription(eventGroupIndex, index) {\n let editingEvents = [...this.state.editingEvents];\n if (editingEvents[eventGroupIndex] === undefined || editingEvents[eventGroupIndex] === null) {\n editingEvents[eventGroupIndex] = [];\n }\n // Marking it as null will remove the event from 'edit description mode'\n if (editingEvents[eventGroupIndex][index]) {\n editingEvents[eventGroupIndex][index] = null;\n } else {\n const currentEvent = JSON.parse(JSON.stringify(this.props.organizedEvents[eventGroupIndex].events[index]));\n const eventReference = this.props.billEvents.find(evt => evt.EventCode === currentEvent.EventCode && evt.IsPassed === currentEvent.IsPassed);\n if (eventReference) {\n const actionReferences = eventReference.ActionReferences;\n if (actionReferences) {\n const missingActionReferences = actionReferences.filter(ref => !currentEvent.EventReferences.map(existingEvt => existingEvt.ActionReferenceType).includes(ref.ActionReferenceType));\n if (missingActionReferences.length) {\n currentEvent.EventReferences = currentEvent.EventReferences.concat(JSON.parse(JSON.stringify(missingActionReferences)));\n }\n }\n }\n //If the user has selected an event with at least one ActionReferenceType of LegislationEvent then fetch possible events for reconsideration\n if (currentEvent.EventReferences && currentEvent.EventReferences.find(x => x.ActionReferenceType === \"LegislationEvent\")) {\n this.props.getReconsiderationEvents(currentEvent.EventCode)\n } else if (currentEvent.EventReferences && currentEvent.EventReferences.find(x => x.ActionReferenceType === \"Legislation\") && this.props.billData && this.props.billData.SessionID) {\n this.getSessionLegislation(this.props.billData.SessionID);\n }\n editingEvents[eventGroupIndex][index] = { ...currentEvent };\n }\n this.setState({\n editingEvents: editingEvents\n });\n }\n\n changeDescription(eventGroupIndex, eventIndex, referenceIndex, reference, descEdit) {\n let editingEvents = [...this.state.editingEvents];\n let event = editingEvents[eventGroupIndex][eventIndex];\n event.origDescription = event.origDescription ?? event.Description;\n //If the event has event references then concatinate them to get the event description\n //If it doesn't then this function was ran by a text input so just set the value of 'reference' to the description\n if (event.EventReferences && event.EventReferences.length > 0 && !descEdit) {\n event.EventReferences[referenceIndex] = reference;\n event.Description = this.formDescription(event, event.EventReferences);\n } else {\n event.Description = reference;\n }\n this.setState({\n editingEvents: editingEvents\n });\n }\n\n setDescription(eventGroupIndex, index) {\n let organizedEvents = [...this.props.organizedEvents];\n organizedEvents[eventGroupIndex].events[index] = this.state.editingEvents[eventGroupIndex][index];\n organizedEvents[eventGroupIndex].events[index].hasChanged = true;\n this.props.handleEventChange(organizedEvents, () => {\n this.saveEvents();\n });\n this.toggleEditDescription(eventGroupIndex, index);\n }\n\n handleTemplateChange(_a, _b, referenceIndex, reference) {\n let templateInputs = [...this.state.templateInputs];\n templateInputs[referenceIndex] = reference;\n this.setState({\n templateInputs: templateInputs\n });\n }\n\n handleBillNumberChange(e) {\n this.setState({\n changeToBill: e.target.value\n });\n }\n\n onDragEnd(result, eventGroupIndex) {\n if (!result.destination) {\n return;\n }\n let organizedEvents = [...this.props.organizedEvents];\n const [removed] = organizedEvents[eventGroupIndex].events.splice(result.source.index, 1);\n organizedEvents[eventGroupIndex].events.splice(result.destination.index, 0, removed);\n organizedEvents[eventGroupIndex].events.forEach((element, index) => {\n element.Sequence = index + 1\n if (this.props.isBillManagement) {\n element.DisplaySequence = element.Sequence * 10;\n }\n element.hasChanged = true;\n });\n // Remove any events out of edit description mode\n let editingEvents = [...this.state.editingEvents];\n editingEvents[eventGroupIndex] = null;\n this.setState({\n editingEvents: editingEvents\n });\n this.props.handleEventChange(organizedEvents, () => {\n this.saveEvents();\n });\n }\n\n handleNewEventChange(val) {\n let templateInputs = [];\n if (val.ActionReferences && val.ActionReferences.length > 0) {\n //Remove all object references to val\n templateInputs = JSON.parse(JSON.stringify(val.ActionReferences));\n }\n this.setState({\n newEvent: {\n ...val,\n value: `${val.EventCode}-${val.IsPassed}`\n },\n templateInputs: templateInputs\n }, () => {\n this.handleEventInputChange(null, NEW_EVENT);\n //If the user has selected an event with at least one ActionReferenceType of LegislationEvent then fetch possible events for reconsideration\n if (val.ActionReferences.find(x => x.ActionReferenceType === \"LegislationEvent\")) {\n this.props.getReconsiderationEvents(val.EventCode)\n } else if (val.ActionReferences.find(x => x.ActionReferenceType === \"Legislation\") && this.props.billData && this.props.billData.SessionID) {\n this.getSessionLegislation(this.props.billData.SessionID);\n }\n });\n }\n\n handleNewEventDateChange(val) {\n let value = moment(val).set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\n this.setState({\n newEventDate: value\n });\n }\n\n addEvent(e) {\n e.preventDefault();\n\n let incompleteInputs = [];\n for (let i = 0; i < this.state.templateInputs.length; i++) {\n if ((this.state.templateInputs[i].IsMandatory && !this.state.templateInputs[i].ReferenceText)\n || (this.state.templateInputs[i].IsMandatory && this.state.templateInputs[i].ActionReferenceTypeID == 14 && !this.state.templateInputs[i].ReferenceID)) {\n incompleteInputs.push(i);\n }\n }\n\n this.setState({\n incompleteInputs: incompleteInputs\n })\n\n if (incompleteInputs.length > 0) {\n return;\n }\n\n const { newEvent, newEventDate } = this.state;\n let organizedEvents = [...this.props.organizedEvents];\n let actorType = '';\n switch (newEvent.EventCode ? newEvent.EventCode[0].toUpperCase() : newEvent.LegislationChamberCode) {\n case 'H':\n actorType = 'House';\n break;\n case 'S':\n actorType = 'Senate';\n break;\n case 'C':\n actorType = 'Conference';\n break;\n case 'G':\n actorType = 'Governor';\n break;\n }\n\n let eventObj = {\n ...newEvent,\n ActorType: actorType,\n IsPublic: true,\n Description: newEvent.label,\n LegislationID: this.props.billData.LegislationID,\n EventDate: moment(newEventDate).utcOffset(0).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).toISOString(),\n hasChanged: true,\n hidden: false\n };\n\n if (newEvent.ActionReferences && newEvent.ActionReferences.length > 0 && this.state.templateInputs.length > 0) {\n eventObj.EventReferences = this.state.templateInputs;\n eventObj.Description = this.formDescription(eventObj);\n }\n\n //Check to see if there is are events with the same date already\n let newEventGroupIndex = organizedEvents.findIndex(eventGroup => eventGroup.date.isSame(newEventDate, 'day'));\n if (newEventGroupIndex > -1) {\n // If the selected date already has events that occured on that date then the event is moved into the existing group\n organizedEvents[newEventGroupIndex].events.push(eventObj);\n } else {\n // If the selected date does not have any events then a new event group needs to be created for this date\n const newEventGroup = {\n date: newEventDate,\n events: [eventObj]\n };\n // Gotta find where it goes in the list of groups\n if (organizedEvents.length === 0) {\n newEventGroupIndex = 0;\n organizedEvents.splice(0, 0, newEventGroup);\n } else {\n organizedEvents.some((eventGroup, i) => {\n if (eventGroup.date.isAfter(newEventDate, 'day')) {\n newEventGroupIndex = i\n organizedEvents.splice(i, 0, newEventGroup);\n return true;\n }\n if (i === organizedEvents.length - 1) {\n newEventGroupIndex = i + 1;\n organizedEvents.push(newEventGroup)\n }\n });\n }\n }\n this.setState({\n newEvent: '',\n templateInputs: []\n });\n // After adding the new event, auto-save the event\n this.props.handleEventChange(organizedEvents, () => {\n this.saveEvents();\n })\n }\n\n formDescription(eventObj, eventReferences) {\n const inputs = eventReferences || this.state.templateInputs\n const memberListEvents = [\"H6013\", \"S6013\", \"H6113\", \"S6113\", \"H6213\", \"S6213\"];\n const substitueRejectedEvents = [\"S5432\", \"S5433\", \"H5432\", \"H5433\"];\n let overrideSet = false;\n\n const description = inputs.map((tInput, i) => {\n //For events H6013/S6013/H6113/S6113/H6213/S6213 there are sometimes incomplete lists of members. This will prevent the UI from adding blank member dropdown values to the description\n if (memberListEvents.includes(eventObj.EventCode) && !tInput.ReferenceText) {\n return;\n }\n\n //Drop in canned language for opposing chamber substitute or substitue with amendment rejected\n if (substitueRejectedEvents.includes(eventObj.EventCode)) {\n if (!overrideSet) {\n overrideSet = true;\n return eventObj.LegislationDescription ?? this.props.billEvents?.find(e => e.EventCode === eventObj.EventCode && e.IsPassed === eventObj.IsPassed)?.LegislationDescription;\n } else {\n return \"\";\n }\n }\n\n if (!tInput.ReferenceText && !eventObj.EventReferences[0].ReconsiderationGrammar) {\n return `${tInput.ActionReferenceType}`\n }\n\n //Set the Description to the canned description if it's a reconsideration, otherwise just drop in the reference text\n return eventObj.EventReferences.find(x => x.ActionReferenceType === \"LegislationEvent\") ? this.props.billEvents?.find(e => e.EventCode === eventObj.EventReferences?.find(x => x.ActionReferenceType === \"LegislationEvent\")?.EventCode && e.IsPassed === eventObj.EventReferences?.find(x => x.ActionReferenceType === \"LegislationEvent\")?.IsPassed)?.ReconsiderationDescription : (tInput.ReferenceText + (memberListEvents.includes(eventObj.EventCode) && tInput.ActionReferenceType === \"Member\" && tInput.ReferenceText && inputs[i + 1] && inputs[i + 1].ActionReferenceType === \"Member\" && inputs[i + 1].ReferenceText ? \", \" : \"\"))\n }).join('')\n\n return description;\n }\n\n deleteEvent(eventGroupIndex, index) {\n let organizedEvents = [...this.props.organizedEvents];\n let event = organizedEvents[eventGroupIndex].events[index];\n event.hasChanged = true;\n if (event.DeletionDate) {\n delete event.DeletionDate\n }\n //if deleting an event that didn't already exist/hasn't been saved at all, just remove it entirely\n else if (!event.LegislationEventID) {\n //if there is only one event in this day, just remove the day\n if (organizedEvents[eventGroupIndex].events.length === 1) {\n const wasLastEventGroup = eventGroupIndex === organizedEvents.length - 1;\n organizedEvents.splice(eventGroupIndex, 1);\n //if it was the last event day that got removed, expand the now-last event day\n if (wasLastEventGroup) {\n organizedEvents[organizedEvents.length - 1].hidden = false;\n }\n } else {\n //There is more than just this event in the day, only remove this event from the group and move on\n organizedEvents[eventGroupIndex].events.splice(index, 1);\n //recalculate sequences of events\n for (let idx = index; idx < organizedEvents[eventGroupIndex].events.length; idx++) {\n organizedEvents[eventGroupIndex].events[idx].Sequence--\n }\n }\n } else {\n //this event existed to begin with, we need to set the deletion date and save it\n event.DeletionDate = moment().toISOString();\n }\n // After soft deleting the new event, auto-save the event\n this.props.handleEventChange(organizedEvents, () => {\n this.saveEvents(() => {\n if (event.DeletionDate && [\"8500\", \"8501\", \"8503\"].includes(event.EventCode.match(/\\d+/)[0]) && event.ReferenceID && event.ReferenceNumber) {\n this.props.actions.deleteBlobFileStatement('?ownerID=' + event.ReferenceID + '&referenceNumber=' + event.ReferenceNumber).catch(() => {\n this.props.actions.makeToast([{ message: \"Failed to delete impact statement file\", type: \"failure\" }])\n })\n }\n });\n })\n }\n\n saveEvents(callback) {\n let eventsToSave = [];\n let eventGroupsToSave = []\n this.props.organizedEvents.forEach(eventGroup => {\n eventGroup.events.forEach(event => {\n // Do not save the events that have been deleted and lack a event id. These events to do not need to be created\n // Do not save events that have not been changed at all\n if (!event.LegislationEventID && event.DeletionDate) {\n return\n } else if (!event.hasChanged) {\n return\n } else {\n eventsToSave.push(event);\n if (!eventGroupsToSave.find(group => group.date === eventGroup.date)) {\n eventGroupsToSave.push(eventGroup)\n }\n }\n })\n\n });\n this.setState({ isSaving: true });\n this.props.saveEvents(eventsToSave, (success) => {\n this.setState({ isSaving: false });\n if (success) {\n let orgEvents = BillHistoryForm.organizeEvents([...this.props.historyList]);\n orgEvents.forEach(group => {\n if (eventGroupsToSave.find(g => g.date.isSame(group.date, 'day'))) { group.hidden = false; }\n })\n this.props.handleEventChange(orgEvents, () => {\n // Try to focus on the last input in the list\n const lastSavedEventGroup = eventGroupsToSave.length && this.props.organizedEvents.findIndex(group => group.date.isSame(eventGroupsToSave[eventGroupsToSave.length - 1].date, 'day')) > -1 ? this.props.organizedEvents.findIndex(group => group.date.isSame(eventGroupsToSave[eventGroupsToSave.length - 1].date, 'day')) : this.props.organizedEvents.length - 1;\n const savedEventsInLastSavedEventGroup = eventsToSave.filter(evt => moment(evt.EventDate).isSame(this.props.organizedEvents[lastSavedEventGroup].date, 'day'));\n const lastSavedEvent = savedEventsInLastSavedEventGroup[savedEventsInLastSavedEventGroup.length - 1];\n const lastSavedEventIndex = lastSavedEvent ? this.props.organizedEvents[lastSavedEventGroup].events.findIndex(evt => evt.LegislationEventID === lastSavedEvent.LegislationEventID || (evt.Sequence === lastSavedEvent.Sequence && evt.EventCode === lastSavedEvent.EventCode)) : this.props.organizedEvents[lastSavedEventGroup].length - 1\n if (this._containerRefs[lastSavedEventGroup]) {\n if (this._containerRefs[lastSavedEventGroup][`${lastSavedEventIndex}-${1}`]) {\n this._containerRefs[lastSavedEventGroup][`${lastSavedEventIndex}-${1}`].current.focus();\n }\n }\n });\n } else {\n //refresh events using the list returned from the GET which was called after the save failed\n let orgEvents = BillHistoryForm.organizeEvents([...this.props.historyList]);\n orgEvents.forEach(group => {\n if (eventGroupsToSave.find(g => g.date.isSame(group.date, 'day'))) { group.hidden = false; }\n })\n this.props.handleEventChange(orgEvents, () => { })\n }\n if (callback) callback();\n });\n }\n\n getSessionLegislation(sessionID) {\n if (!this.state.sessionLegislation) {\n this.setState({ fetchingSessionLegislation: true }, () => {\n this.props.actions.getSessionBills('?sessionID= ' + sessionID).then(() => {\n let billList = [...this.props.bills.sessionBills];\n billList.forEach(bill => {\n const chiefPatrons = bill.Patrons && bill.Patrons.length && bill.Patrons.filter(p => p.PatronTypeID === 1);\n bill.label = chiefPatrons && chiefPatrons.length ? ' (' + bill.LegislationNumber + '-' + chiefPatrons[0].PatronDisplayName + ')' : bill.LegislationNumber;\n bill.value = bill.LegislationID\n });\n this.setState({\n sessionLegislation: billList,\n fetchingSessionLegislation: false\n })\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n console.error(err)\n this.setState({ fetchingSessionLegislation: false })\n });\n })\n }\n }\n\n focusOnInputContainer(eventGroupIndex, index, inputNumber, e) {\n e.stopPropagation();\n if (e.key === 'Enter' || e.key === 'Escape') {\n this._containerRefs[eventGroupIndex][`${index}-${inputNumber}`].current.focus();\n }\n }\n\n checkForScrollUp = (node) => {\n // Scroll up a bit more if the element is barely on screen\n const conNodeRect = node.getBoundingClientRect();\n if (conNodeRect.top < conNodeRect.height * 2) {\n this.scrollToEvent(node);\n }\n }\n\n checkForScrollDown = (node) => {\n // Scroll down a bit more if the element is barely on screen\n const conNodeRect = node.getBoundingClientRect();\n if (conNodeRect.bottom > window.innerHeight - conNodeRect.height * 2) {\n this.scrollToEvent(node);\n }\n }\n\n handleMovingFocus(eventGroupIndex, eventIndex, inputNumber, e) {\n const key = e.key;\n e.preventDefault();\n switch (key) {\n case 'ArrowLeft':\n if (this._containerRefs[eventGroupIndex] && this._containerRefs[eventGroupIndex][`${eventIndex}-${inputNumber - 1}`]) {\n this._containerRefs[eventGroupIndex][`${eventIndex}-${inputNumber - 1}`].current.focus()\n }\n break;\n case 'ArrowRight':\n if (this._containerRefs[eventGroupIndex] && this._containerRefs[eventGroupIndex][`${eventIndex}-${inputNumber + 1}`]) {\n this._containerRefs[eventGroupIndex][`${eventIndex}-${inputNumber + 1}`].current.focus()\n }\n break;\n case 'ArrowDown':\n if (this._containerRefs[eventGroupIndex] && this._containerRefs[eventGroupIndex][`${eventIndex + 1}-${inputNumber}`]) {\n const conNode = this._containerRefs[eventGroupIndex][`${eventIndex + 1}-${inputNumber}`].current;\n conNode.focus();\n this.checkForScrollDown(conNode);\n } else if (this._containerRefs[eventGroupIndex + 1] && this._containerRefs[eventGroupIndex + 1][`${0}-${inputNumber}`]) {\n let organizedEvents = this.props.organizedEvents;\n organizedEvents[eventGroupIndex + 1].hidden = false;\n const conNode = this._containerRefs[eventGroupIndex + 1][`${0}-${inputNumber}`].current\n conNode.focus();\n this.checkForScrollDown(conNode);\n } else if (this._billSwitcherRef.current) {\n this._billSwitcherRef.current.focus();\n }\n break;\n case 'ArrowUp':\n if (this._containerRefs[eventGroupIndex] && this._containerRefs[eventGroupIndex][`${eventIndex - 1}-${inputNumber}`]) {\n const conNode = this._containerRefs[eventGroupIndex][`${eventIndex - 1}-${inputNumber}`].current\n conNode.focus();\n this.checkForScrollUp(conNode);\n } else if (this._containerRefs[eventGroupIndex - 1]) {\n const lastItemIndexInEventGroup = this.props.organizedEvents[eventGroupIndex - 1].events.length - 1\n if (this._containerRefs[eventGroupIndex - 1][`${lastItemIndexInEventGroup}-${inputNumber}`]) {\n let organizedEvents = this.props.organizedEvents;\n organizedEvents[eventGroupIndex - 1].hidden = false;\n const conNode = this._containerRefs[eventGroupIndex - 1][`${lastItemIndexInEventGroup}-${inputNumber}`].current\n conNode.focus();\n this.checkForScrollUp(conNode);\n }\n }\n break;\n case 'Tab':\n const changer = e.shiftKey ? -1 : 1\n // First check if there is one to the right.\n if (this._containerRefs[eventGroupIndex] && this._containerRefs[eventGroupIndex][`${eventIndex}-${inputNumber + changer}`]) {\n this._containerRefs[eventGroupIndex][`${eventIndex}-${inputNumber + changer}`].current.focus()\n }\n // If not, check if there is one underneath in the same group\n else if (this._containerRefs[eventGroupIndex] && this._containerRefs[eventGroupIndex][`${eventIndex + changer}-${changer === 1 ? 0 : 1}`]) {\n const conNode = this._containerRefs[eventGroupIndex][`${eventIndex + changer}-${changer === 1 ? 0 : 1}`].current;\n conNode.focus();\n this.checkForScrollDown(conNode);\n }\n // Finally, check if there is one underneath in a different group\n else if (this._containerRefs[eventGroupIndex + changer] && this._containerRefs[eventGroupIndex + changer][`${changer === 1 ? 0 : this.props.organizedEvents[eventGroupIndex + changer].events.length - 1}-${changer === 1 ? 0 : 1}`]) {\n let organizedEvents = this.props.organizedEvents;\n organizedEvents[eventGroupIndex + changer].hidden = false;\n const conNode = this._containerRefs[eventGroupIndex + changer][`${`${changer === 1 ? 0 : this.props.organizedEvents[eventGroupIndex + changer].events.length - 1}-${changer === 1 ? 0 : 1}`}`].current\n conNode.focus();\n this.checkForScrollDown(conNode);\n }\n // If none of these are the case then the user is at the very bottom and they need to focus on the bill switcher\n else if (this._billSwitcherRef.current && changer === 1) {\n this._billSwitcherRef.current.focus();\n }\n break;\n case 'Enter':\n if (this._inputRefs[eventGroupIndex] && this._inputRefs[eventGroupIndex][`${eventIndex}-${inputNumber}`]) {\n // The ref doesn't have a click function so turn it into a node\n const inputNodeContainer = ReactDOM.findDOMNode(this._inputRefs[eventGroupIndex][`${eventIndex}-${inputNumber}`].current);\n const inputNode = inputNodeContainer.querySelector('input');\n if (inputNode) {\n inputNode.focus();\n inputNode.click();\n }\n }\n break;\n }\n }\n\n handleMovingFocusFromBillChanger(e) {\n const key = e.key;\n if (key === 'ArrowUp' || e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n const lastEventGroup = this.props.organizedEvents.length - 1;\n // Focus on the last input ref\n if (this._containerRefs[lastEventGroup]) {\n const lastEvent = this.props.organizedEvents[lastEventGroup].events.length - 1;\n if (this._containerRefs[lastEventGroup][`${lastEvent}-${1}`]) {\n this._containerRefs[lastEventGroup][`${lastEvent}-${1}`].current.focus();\n }\n }\n } else if (key == 'Enter') {\n e.preventDefault();\n this.props.changeToNewBillHistoryForm(this.state.changeToBill);\n }\n }\n\n scrollToEvent(node) {\n const nodeRect = node.getBoundingClientRect();\n const windowY = window.pageYOffset;\n const windowHeight = window.innerHeight;\n window.scrollTo({\n top: nodeRect.top + windowY - windowHeight / 2,\n behavior: 'smooth'\n });\n }\n\n render() {\n // Create a ref for every datepicker and dropdown in the form. This is so when hitting enter focus can be applied to the input\n // Also create a ref for the parent element of the input. This is so the user can use arrow keys to move focus from container to container\n // React acts out of the ordinary with a multi-dimensional array of refs, so a 1 dimensional array is used containing an object\n let inputRefs = [];\n let containerRefs = [];\n this.props.organizedEvents.forEach((eventGroup, eventGroupIndex) => {\n let inputs = {};\n let containers = {};\n eventGroup.events.forEach((_historyItem, index) => {\n inputs[`${index}-0`] = React.createRef(),\n inputs[`${index}-1`] = React.createRef();\n containers[`${index}-0`] = React.createRef(),\n containers[`${index}-1`] = React.createRef();\n });\n inputRefs[eventGroupIndex] = inputs;\n containerRefs[eventGroupIndex] = containers;\n });\n this._inputRefs = inputRefs;\n this._containerRefs = containerRefs;\n return (\n <React.Fragment>\n {!this.props.isBillManagement && <button type=\"button\" className=\"button-link\" style={{ fontSize: '0.8em' }} onClick={this.props.toggleEditContent}>(Close)</button>}\n <div className=\"dlas-forms history-event-form\" style={{ paddingBottom: !this.props.isBillManagement ? '100px' : '15px' }}>\n {!this.props.isBillManagement &&\n <div>\n <div>\n <label className=\"label\">Switch To Bill</label>\n <div>\n <input\n ref={this._billSwitcherRef}\n onKeyDown={this.handleMovingFocusFromBillChanger}\n type=\"text\"\n placeholder=\"Bill Number\"\n onChange={this.handleBillNumberChange}\n value={this.state.changeToBill}\n />\n </div>\n </div>\n <br />\n <AddEventForm\n addEventRef={this._addEventRef}\n newEvent={this.state.newEvent}\n handleNewEventChange={this.handleNewEventChange}\n handleEventInputChange={this.handleEventInputChange}\n eventInputValue={this.state.eventInputValue}\n newEventDate={this.state.newEventDate}\n handleNewEventDateChange={this.handleNewEventDateChange}\n billEvents={this.props.billEvents}\n addEvent={this.addEvent}\n isSaving={this.state.isSaving}\n memberList={this.state.newEvent && this.state.newEvent.EventCode.startsWith(\"H\") ? this.props.memberList.filter(m => m.ChamberCode === \"H\") : this.state.newEvent && this.state.newEvent.EventCode.startsWith(\"S\") ? this.props.memberList.filter(m => m.ChamberCode === \"S\") : this.props.memberList}\n committeeList={this.props.committeeList}\n legislationList={this.state.sessionLegislation}\n fetchingSessionLegislation={this.state.fetchingSessionLegislation}\n actionTypes={this.props.actionTypes}\n templateInputs={this.state.templateInputs}\n textList={this.props.versionsList}\n handleTemplateChange={this.handleTemplateChange}\n eventList={this.props.reconsiderationEvents}\n reconsiderationEvents={this.props.reconsiderationEvents}\n reconsiderationActionReference={this.state.newEvent && this.state.newEvent.ActionReferences.find(x => x.ActionReferenceType === \"LegislationEvent\") ? true : false}\n incompleteInputs={this.state.incompleteInputs}\n />\n </div>\n }\n <div style={{ marginBottom: \"10px\", display: 'flex', gap: '25px' }}>\n <div>\n <button onClick={() => this.props.idx !== undefined ? this.props.togglehideAllEvents(this.props.idx) : this.props.togglehideAllEvents()} type=\"button\" className={this.props.hideAllEvents ? \"arrow-up\" : \"arrow-down\"} />\n <label>{!this.props.hideAllEvents ? \"Hide All Event Days\" : \"Show All Event Days\"}</label>\n </div>\n {!this.props.hideAllEvents &&\n <div>\n <button onClick={() => this.bulkToggleEventGroup(Boolean(this.props.organizedEvents.find(eg => eg.hidden)))} type=\"button\" className={this.props.organizedEvents.find(eg => eg.hidden) ? \"arrow-up\" : \"arrow-down\"} />\n <label>{!this.props.organizedEvents.find(eg => eg.hidden) ? \"Collapse All Event Days\" : \"Expand All Event Days\"}</label>\n </div>\n }\n </div>\n {this.props.organizedEvents.map((eventGroup, eventGroupIndex) =>\n <div key={eventGroupIndex} id={this.props.idx !== undefined && eventGroupIndex === this.props.organizedEvents.length - 1 ? `last-${this.props.idx}` : null} style={getDivStyle(eventGroupIndex === this.props.organizedEvents.length - 1, this.props.hideAllEvents)} className=\"event-day\" >\n {eventGroup.events.length > 0 &&\n <React.Fragment>\n <DragDropContext onDragEnd={result => this.onDragEnd(result, eventGroupIndex)}>\n <Droppable droppableId=\"droppable\">\n {(provided, snapshot) => (\n <table\n className=\"dnd-grid-table bill-history-grid\"\n ref={provided.innerRef}\n style={getListStyle(snapshot.isDraggingOver)}\n >\n <thead className=\"dnd-grid-header\" style={getListStyle(snapshot.isDraggingOver)}>\n <div className='inner-grid forty-six-and-one'>\n <div className=\"bill-history-grid-header-cell\"><button onClick={() => this.toggleEventGroup(eventGroupIndex)} type=\"button\" className={`${eventGroup.hidden || (eventGroup.hidden === undefined && eventGroupIndex !== this.props.organizedEvents.length - 1) ? \"arrow-down\" : \"arrow-up\"}`}></button></div>\n <div className=\"bill-history-grid-header-cell\">{moment(eventGroup.date).format('L')}</div>\n </div>\n </thead>\n <tbody style={{ display: !this.props.expandAllEvents && (eventGroup.hidden || (eventGroup.hidden === undefined && eventGroupIndex !== this.props.organizedEvents.length - 1)) ? 'none' : 'block' }}>\n {eventGroup.events.map((historyItem, index) => (\n // All of these values in the key are required to make it unique\n <Draggable isDragDisabled={this.state.isSaving} key={`${historyItem.EventCode}-${historyItem.IsPassed}-${historyItem.Sequence}`} draggableId={`${historyItem.EventCode}-${historyItem.IsPassed}-${historyItem.Sequence}`} index={index}>\n {(provided, snapshot) => (\n <tr\n className={!historyItem.isNewlyDeleted && historyItem.DeletionDate ? 'pending-delete' : ''}\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style,\n historyItem\n )}\n >\n <td><button className=\"button draggable\">Drag and drop</button></td>\n <td>{this.props.isBillManagement ? historyItem.DisplaySequence : index + 1}</td>\n <td onKeyDown={e => this.handleMovingFocus(eventGroupIndex, index, 0, e)} ref={this._containerRefs[eventGroupIndex][`${index}-0`]} tabIndex=\"-1\">\n <DatePicker\n selected={moment(historyItem.EventDate)}\n onChange={val => this.changeDate(val, eventGroupIndex, index)}\n disabled={Boolean(historyItem.DeletionDate)}\n ref={this._inputRefs[eventGroupIndex][`${index}-0`]}\n onKeyDown={e => this.focusOnInputContainer(eventGroupIndex, index, 0, e)}\n />\n </td>\n <td>{historyItem.ActorType}</td>\n <td onKeyDown={e => this.handleMovingFocus(eventGroupIndex, index, 1, e)} ref={this._containerRefs[eventGroupIndex][`${index}-1`]} tabIndex=\"-1\">\n {this.state.editingEvents[eventGroupIndex] && this.state.editingEvents[eventGroupIndex][index] !== null && this.state.editingEvents[eventGroupIndex][index] !== undefined ?\n <React.Fragment>\n <div onKeyDown={e => e.stopPropagation()} style={{ minWidth: '90%' }}>\n {this.state.editingEvents[eventGroupIndex][index].EventReferences && this.state.editingEvents[eventGroupIndex][index].EventReferences.length > 0 ?\n <React.Fragment>\n <InputTypes\n memberList={this.state.editingEvents[eventGroupIndex][index].EventCode.startsWith(\"H\") ? this.props.memberList.filter(m => m.ChamberCode === \"H\") : this.state.editingEvents[eventGroupIndex][index].EventCode.startsWith(\"S\") ? this.props.memberList.filter(m => m.ChamberCode === \"S\") : this.props.memberList}\n committeeList={this.props.committeeList}\n legislationList={this.state.sessionLegislation}\n fetchingSessionLegislation={this.state.fetchingSessionLegislation}\n actionTypes={this.props.actionTypes}\n handleChange={this.changeDescription}\n textList={this.props.versionsList}\n entryIndex={eventGroupIndex}\n activityIndex={index}\n references={this.state.editingEvents[eventGroupIndex][index].EventReferences}\n eventList={this.props.reconsiderationEvents}\n newEvent={this.state.editingEvents[eventGroupIndex][index]}\n autoselect\n billHistory\n />\n <input\n type=\"text\"\n style={{ width: '100%' }}\n value={this.state.editingEvents[eventGroupIndex][index].Description}\n onChange={(e) => this.changeDescription(eventGroupIndex, index, 0, e.target.value, true)}\n />\n </React.Fragment>\n :\n <input\n type=\"text\"\n style={{ width: '100%' }}\n value={this.state.editingEvents[eventGroupIndex][index].Description}\n onChange={(e) => this.changeDescription(eventGroupIndex, index, 0, e.target.value)}\n />\n }\n </div>\n <div>\n <span style={{ marginLeft: '10px' }} className=\"icon save\" onClick={() => this.state.isSaving ? null : this.setDescription(eventGroupIndex, index)}></span>\n <span style={{ marginLeft: '10px' }} className=\"icon delete\" onClick={() => this.toggleEditDescription(eventGroupIndex, index)}></span>\n </div>\n </React.Fragment>\n :\n <React.Fragment>\n <LargeListSelect\n options={this.props.billEvents}\n styles={selectStyle()}\n onChange={val => this.changeEvent(val, eventGroupIndex, index)}\n value={{\n ...historyItem,\n label: historyItem.Description,\n value: `${historyItem.EventCode}-${historyItem.IsPassed}`\n }}\n getOptionLabel={opt => `(${opt.EventCode}) ${opt.label}`}\n isDisabled={historyItem.DeletionDate}\n ref={this._inputRefs[eventGroupIndex][`${index}-1`]}\n onKeyDown={e => this.focusOnInputContainer(eventGroupIndex, index, 1, e)}\n inputValue={this.state.eventInputValue && this.state.eventInputValue[historyItem.LegislationEventID] ? this.state.eventInputValue[historyItem.LegislationEventID].toString() : ''}\n onInputChange={inputValue => this.handleEventInputChange(inputValue, historyItem.LegislationEventID)}\n onMenuClose={() => this.handleEventInputChange(this.state.eventInputValue ? this.state.eventInputValue[historyItem.LegislationEventID] : null, historyItem.LegislationEventID)} //hacky way to persist the input text after the user clicks away with the dropdown open \n />\n <span style={{ marginLeft: '10px' }} onClick={() => this.state.isSaving ? null : this.toggleEditDescription(eventGroupIndex, index)} className=\"icon edit\" title=\"Change Description\"></span>\n {historyItem.MinutesActivityID && <span style={{ marginLeft: '10px', cursor: \"default\" }} className=\"icon paper\" title=\"Minutes Activity\"></span>}\n </React.Fragment>\n }\n </td>\n <td><button type=\"button\" disabled={this.state.isSaving} style={{ backgroundColor: 'transparent' }} onClick={() => this.deleteEvent(eventGroupIndex, index)} className={`button ${historyItem.DeletionDate ? 'add' : 'remove'}`}>{historyItem.DeletionDate ? 'Add' : 'Delete'}</button></td>\n </tr>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n </tbody>\n </table>\n )}\n </Droppable>\n </DragDropContext>\n </React.Fragment>\n }\n </div>\n )}\n {!this.props.isBillManagement &&\n <div>\n <div className=\"floating-button-bar invisible-bar\" style={{ opacity: \".9\", zIndex: \"0\" }}>\n <div className=\"flex-row flex-vertical-center\" style={{ width: '100%' }}>\n <div />\n <div className=\"align-right inline-list\">\n <button disabled={this.state.isSaving} type=\"button\" onClick={this.props.toggleEditContent} className=\"button secondary\">Close</button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </React.Fragment>)\n }\n}\n\nfunction AddEventForm(props) {\n return (\n <React.Fragment>\n <h4>Add History Event</h4>\n <form onSubmit={(e) => props.addEvent(e)} className=\"inner-grid small-one-small\">\n <DatePicker\n selected={props.newEventDate}\n onChange={props.handleNewEventDateChange}\n />\n <LargeListSelect\n ref={props.addEventRef}\n options={props.billEvents}\n styles={selectStyle()}\n value={props.newEvent}\n inputId={`add-new-event-react-create`}\n getOptionLabel={opt => `(${opt.EventCode}) ${opt.label}`}\n onChange={props.handleNewEventChange}\n inputValue={props.eventInputValue && props.eventInputValue[NEW_EVENT] ? props.eventInputValue[NEW_EVENT] : ''}\n onInputChange={inputValue => props.handleEventInputChange(inputValue, NEW_EVENT)}\n onMenuClose={() => props.handleEventInputChange(props.eventInputValue && props.eventInputValue[NEW_EVENT], NEW_EVENT)} //hacky way to persist the input text after the user clicks away with the dropdown open\n />\n <button className=\"button\" type=\"submit\" onClick={props.addEvent} disabled={props.isSaving || !props.newEvent || !props.newEventDate || (props.reconsiderationActionReference && (!props.reconsiderationEvents || props.reconsiderationEvents.length === 0))}>Add</button>\n </form>\n {props.templateInputs.length > 0 &&\n <div >\n <InputTypes\n memberList={props.memberList}\n committeeList={props.committeeList}\n legislationList={props.legislationList}\n fetchingSessionLegislation={props.fetchingSessionLegislation}\n textList={props.textList}\n actionTypes={props.actionTypes}\n handleChange={props.handleTemplateChange}\n entryIndex={0}\n activityIndex={0}\n references={props.templateInputs}\n eventList={props.eventList}\n newEventDate={props.newEventDate}\n newEvent={props.newEvent}\n incompleteInputs={props.incompleteInputs}\n autoselect\n isNewEvent\n />\n </div>\n }\n <br />\n </React.Fragment>\n )\n}\n\nconst HistoryForm = connect(\n (state) => {\n const { nav, bills } = state;\n return {\n nav,\n bills,\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, billActionCreators), dispatch)\n }\n }\n)(BillHistoryForm)\n\nexport default HistoryForm;","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport moment from 'moment-timezone';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from '../../stores/lis-auth-store';\n\nclass LegislationProfiles extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showSection: window.innerWidth <= 900 ? false : true, //900px is when mobile layout is used (set in mobile.scss); collapse by default\n name: '',\n filteredWatchlists: [],\n filteredWatchlistsValue: ''\n };\n this.toggleSection = this.toggleSection.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.createCollection = this.createCollection.bind(this);\n this.filterWatchlist = this.filterWatchlist.bind(this);\n }\n\n toggleSection() {\n this.setState(state => ({\n showSection: !state.showSection\n }));\n }\n\n handleTextChange(key, val) {\n this.setState({\n [key]: val\n });\n }\n\n createCollection() {\n let collection = {\n Name: this.state.name,\n Description: \"Created on \" + moment().format('MM/DD/YYYY HH:mm'),\n WatchListLegislation: []\n };\n this.props.createCollection(collection);\n this.setState({\n name: ''\n });\n }\n\n filterWatchlist(e) {\n const val = e.target.value.toLowerCase();\n this.setState({\n // Map is used to preserve the original index\n filteredWatchlists: this.props.collections.map(coll => {\n if ((coll.Description && coll.Description.toLowerCase().includes(val)) || (coll.Name && coll.Name.toLowerCase().includes(val))) {\n return coll;\n } else {\n return null;\n }\n }),\n filteredWatchlistsValue: val\n })\n }\n\n render() {\n const watchlists = this.state.filteredWatchlistsValue ? this.state.filteredWatchlists : this.props.collections;\n const selectedWatchlistIndex = this.props.collections[this.props.selectedCollectionIndex] ? watchlists.findIndex(w => w && w.WatchListID === this.props.collections[this.props.selectedCollectionIndex].WatchListID) : -1\n return (\n <div className={this.props.isBillManagement ? \"dlas-forms side-form advanced-search management\" : \"dlas-forms side-form advanced-search\"}>\n <div className=\"header flex-row flex-vertical-center\">\n <h3 className=\"center category-header\">Lobbyist-in-a-Box</h3>\n <button onClick={this.toggleSection} type=\"button\" className={this.state.showSection ? \"arrow-up white-chevron\" : \"arrow-down white-chevron\"}></button>\n </div>\n {this.state.showSection &&\n <div className=\"content my-watchlist-content\">\n {this.props.isAuthor ?\n <div>\n <fieldset>\n <div>\n <label htmlFor=\"sr-watchlist-name\" className=\"txt-dark-blue small-text\">Create New Watchlist</label>\n <div className=\"inner-grid three-and-one\">\n {!this.props.isBillManagement &&\n <>\n <input\n aria-label=\"Name\"\n id=\"sr-watchlist-name\"\n type=\"text\"\n placeholder=\"Name\"\n value={this.state.name}\n onChange={e => this.handleTextChange(\"name\", e.target.value)}\n />\n <button aria-label=\"create watchlist\" className=\"button\" disabled={this.props.collectionIsSaving || !this.state.name} onClick={this.createCollection} type=\"button\">Create</button>\n <hr className=\"faded-line\" />\n </>\n }\n </div>\n {watchlists.length ?\n <div style={{ marginBottom: \"10px\", marginTop: \"-5px\" }}>\n <label htmlFor=\"sr-watchlist-find\" className=\"screen-reader-only\">Find a watchlist</label>\n <input\n id=\"sr-watchlist-find\"\n type=\"text\"\n placeholder=\"Find a watchlist\"\n value={this.state.filteredWatchlistsValue}\n onChange={this.filterWatchlist} />\n </div>\n : null\n }\n </div>\n {this.props.error && <span className=\"small-text fail\">{this.props.error}</span>}\n {this.props.isLoading ?\n <div className=\"spinner center-spinner\"></div>\n :\n watchlists.length ?\n <div className=\"checkbox-container watchlist-collection-list\">\n {watchlists.map((list, listIndex) =>\n <React.Fragment key={listIndex}>\n {list &&\n <div role=\"button\" disabled={(list.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\")))} onClick={() => !this.props.collectionIsSaving && this.props.selectCollection(this.props.selectedCollectionIndex === listIndex ? -1 : listIndex)} className=\"watchlist-collection-item\">\n <div className={this.props.selectedCollectionIndex === listIndex ? 'selected-collection' : ''}>\n <div className=\"small-text\">{list.Name}{(list.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) ? \" (PAID)\" : \"\"}</div>\n <div className=\"small-text txt-greyed\">Last Modified {list.ModificationDate ? moment(list.ModificationDate.replace(' +', '+')).format('MM/DD/YYYY hh:mm a') : moment().format('MM/DD/YYYY hh:mm a')}</div>\n </div>\n {listIndex !== watchlists.length - 1 && <hr className=\"faded-line\" />}\n </div>\n }\n </React.Fragment>\n )}\n </div> : null\n }\n <div className=\"homepage-links\" style={{ textAlign: \"center\", marginTop: watchlists.length ? '10px' : '0px' }}>\n <Link to=\"/watchlists\">Your Lobbyist-in-a-Box Watchlists</Link>\n </div>\n </fieldset>\n </div>\n :\n <div className=\"watchlist-login-wrapper homepage-links\">\n <Link style={{ marginLeft: \"auto\", marginRight: \"auto\", paddingTop: \"5px\", display: \"table\" }} to=\"/login?redirect=/bill-search\">Log in to View Watchlists</Link>\n </div>\n }\n </div>\n\n }\n </div>\n )\n }\n}\n\n\nexport default connect(\n (state) => {\n const { login } = state;\n return {\n login,\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators), dispatch)\n }\n }\n)(LegislationProfiles)\n","import React from 'react';\nimport CreatableSelect from 'react-select/creatable';\n\nconst MERGE = \"MERGE\";\nconst DELETE = \"DELETE\";\n\nclass CollectionControls extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showPopup: { DELETE: false, MERGE: false },\n selectedWatchlists: [],\n selectedMergeWatchlists: [],\n editWatchlistName: false,\n newName: '',\n newDescription: ''\n };\n this.togglePopup = this.togglePopup.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.deleteCollection = this.deleteCollection.bind(this);\n this.handleWatchlistChange = this.handleWatchlistChange.bind(this);\n this.handleMergeWatchlistChange = this.handleMergeWatchlistChange.bind(this);\n this.handleToggleCompositeView = this.handleToggleCompositeView.bind(this);\n this.toggleEditWatchlistName = this.toggleEditWatchlistName.bind(this);\n this.saveWatchlistName = this.saveWatchlistName.bind(this);\n this.addToWatchlists = this.addToWatchlists.bind(this);\n }\n\n\n togglePopup(type) {\n let showPopup = { ...this.state.showPopup };\n showPopup[type] = !showPopup[type];\n this.setState({\n showPopup\n });\n }\n\n handleTextChange(key, val) {\n this.setState({\n [key]: val\n })\n }\n\n deleteCollection() {\n let showPopup = { ...this.state.showPopup };\n showPopup[DELETE] = !showPopup[DELETE];\n this.setState({\n showPopup\n });\n this.props.deleteCollection();\n }\n\n handleWatchlistChange(val) {\n this.setState({\n selectedWatchlists: val\n });\n }\n\n handleMergeWatchlistChange(val) {\n this.setState({\n selectedMergeWatchlists: val\n });\n }\n\n handleToggleCompositeView() {\n this.props.handleToggleCompositeView()\n }\n\n toggleEditWatchlistName() {\n this.setState(state => ({\n editWatchlistName: !state.editWatchlistName,\n newName: this.props.selectedCollection.Name || '',\n newDescription: this.props.selectedCollection.Description || ''\n }));\n }\n\n saveWatchlistName() {\n let selectedCollection = { ...this.props.selectedCollection };\n selectedCollection.Name = this.state.newName;\n selectedCollection.Description = this.state.newDescription;\n this.props.handleCollectionChange(selectedCollection);\n this.setState({\n editWatchlistName: false\n });\n }\n\n addToWatchlists(merge) {\n let watchlists = merge ? JSON.parse(JSON.stringify(this.state.selectedMergeWatchlists)) : JSON.parse(JSON.stringify(this.state.selectedWatchlists));\n this.props.addToWatchlists(watchlists, merge, (saveResultCollections) => {\n let showPopup = { ...this.state.showPopup };\n if (!merge) {\n // they are adding bills to one or more watchlist(s) - we need to update the selectedWatchlists state values because their mod dates have now changed\n for (let i = 0; i < watchlists.length; i++) {\n const associatedWatchlist = saveResultCollections.find(c => c.WatchListID === watchlists[i].WatchListID);\n if (associatedWatchlist && associatedWatchlist.ModificationDate !== watchlists[i].ModificationDate) {\n watchlists[i] = associatedWatchlist\n };\n }\n } else {\n // they are merging - we need to close the popup, and we also set the selectedMergeWatchlists state value to empty array because --\n // there's no need to go through the above loop just to be able to keep the same watchlists selected considering they've already been merged and it's pointless to do it again\n showPopup[MERGE] = !showPopup[MERGE];\n }\n this.setState({ selectedWatchlists: !merge ? watchlists : [], selectedMergeWatchlists: [], showPopup })\n });\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.selectedCollection.WatchListID !== prevProps.selectedCollection.WatchListID) {\n this.setState({\n editWatchlistName: false\n });\n }\n }\n\n render() {\n const { selectedCollection, selectedCollectionIndex, calendarHeader, collections, searchMade } = this.props;\n const { selectedWatchlists, selectedMergeWatchlists } = this.state;\n if (!selectedCollection && !calendarHeader && (this.props.isBillManagement || !searchMade)) {\n return null;\n }\n const buttonDisabled = !selectedWatchlists || !selectedWatchlists.length || this.props.checkedBills.every(c => !c || this.props.collectionIsSaving);\n const mergeButtonDisabled = !selectedMergeWatchlists || !selectedMergeWatchlists.length;\n if (!selectedCollection && !calendarHeader) {\n return (\n <div className=\"dlas-forms collection-controls\" style={{ marginBottom: \"5px\" }}>\n <h4 style={{ margin: 0 }}>Add bills from search results to one or more watchlists</h4>\n <div className=\"inner-grid two\">\n <div>\n <label htmlFor=\"sr-watchlist-name-control\">Watchlist Name</label>\n <CreatableSelect\n id=\"sr-watchlist-name-control\"\n styles={selectStyle}\n options={collections}\n getOptionLabel={opt => opt.label || `${opt.Name} ${opt.Description && `- ${opt.Description}`}`}\n getOptionValue={opt => opt.value || opt.WatchListID}\n value={selectedWatchlists}\n onChange={this.handleWatchlistChange}\n createOptionPosition=\"first\"\n formatCreateLabel={input => <span>Create new: {input}</span>}\n isMulti\n />\n </div>\n <div className=\"inline-list\">\n <br />\n {this.props.collectionIsSaving ?\n <div><span className=\"small-spinner\"></span></div>\n :\n <React.Fragment>\n <button disabled={buttonDisabled} style={{ marginLeft: \"0px\" }} className=\"button\" type=\"button\" onClick={() => this.addToWatchlists(false)}>Add</button>\n </React.Fragment>\n }\n </div>\n </div>\n </div>\n );\n }\n return (\n <div>\n {this.state.showPopup[DELETE] &&\n <div className='popup'>\n <div className='popup-inner'>\n <p>Are you sure you want to delete? Once a Watchlist is deleted it cannot be restored.</p>\n <div className=\"inline-list\">\n <button className=\"button danger\" disabled={this.props.collectionIsSaving} onClick={this.deleteCollection}>Yes</button>\n <button className=\"button secondary\" disabled={this.props.collectionIsSaving} onClick={() => this.togglePopup(DELETE)}>No</button>\n </div>\n </div>\n </div>\n }\n {this.state.showPopup[MERGE] &&\n <div className='popup'>\n <div className='popup-inner'>\n <p>Select the watchlist(s) into which you want to merge the current watchlist.</p>\n <div className=\"inner-grid\" style={{ gridTemplateColumns: '50% 50%' }}>\n <div>\n <CreatableSelect\n id=\"sr-watchlist-name-control\"\n styles={selectStyle}\n options={collections.filter(c => c.WatchListID !== selectedCollection.WatchListID)}\n getOptionLabel={opt => opt.label || `${opt.Name}`}\n getOptionValue={opt => opt.value || opt.WatchListID}\n value={selectedMergeWatchlists}\n onChange={this.handleMergeWatchlistChange}\n createOptionPosition=\"first\"\n formatCreateLabel={input => <span>Create new: {input}</span>}\n isMulti\n />\n </div>\n <div className=\"inline-list\">\n {this.props.collectionIsSaving ?\n <div><span className=\"small-spinner\"></span></div>\n :\n <React.Fragment>\n <button disabled={mergeButtonDisabled} style={{ marginLeft: \"0px\" }} className=\"button\" type=\"button\" onClick={() => this.addToWatchlists(true)}>Merge</button>\n <button className=\"button secondary\" onClick={() => this.togglePopup(MERGE)}>Cancel</button>\n </React.Fragment>\n }\n </div>\n </div>\n </div>\n </div>\n }\n <div className=\"collection-controls inner-grid\" style={{ gridTemplateColumns: 'auto max-content' }}>\n {this.state.editWatchlistName ?\n <div className=\"dlas-forms flex-row flex-start inline-list edit-watchlist-name\">\n <div className=\"label-above-input\">\n <label htmlFor=\"sr-selected-watchlist-name\" className=\"label\">Name {!this.state.newName && <span className=\"fail\">required</span>}</label>\n <input\n id=\"sr-selected-watchlist-name\"\n value={this.state.newName}\n placeholder=\"Name\"\n onChange={e => this.handleTextChange('newName', e.target.value)}\n />\n </div>\n <div className=\"label-above-input\">\n <label htmlFor=\"sr-selected-watchlist-desc\" className=\"label\">Description</label>\n <input\n id=\"sr-selected-watchlist-desc\"\n value={this.state.newDescription}\n placeholder=\"Description\"\n onChange={e => this.handleTextChange('newDescription', e.target.value)}\n />\n </div>\n {this.props.collectionIsSaving ?\n <div className=\"small-spinner\"></div>\n :\n <div className=\"inline-list save-or-delete\">\n <button aria-label=\"save\" onClick={this.saveWatchlistName} disabled={!this.state.newName} type=\"button\" className=\"icon save\"></button>\n <button aria-label=\"cancel\" onClick={this.toggleEditWatchlistName} type=\"button\" className=\"icon delete\"></button>\n </div>\n }\n </div>\n :\n <div className=\"watchlist-info\">\n <div className=\"inline-list\">\n <span className=\"name\">{selectedCollection ? selectedCollection.Name : calendarHeader ? calendarHeader.Name : ''}</span>\n {!this.props.isBillManagement && <div role=\"button\" aria-label=\"edit watchlist name and description\" className=\"icon edit\" onClick={() => !this.props.collectionIsSaving && this.toggleEditWatchlistName()}></div>}\n </div>\n <span className=\"description\">{selectedCollection ? selectedCollection.Description : calendarHeader ? calendarHeader.Description : ''}</span>\n </div>\n }\n <div className=\"close-or-delete-watchlist align-right inline-list\" style={this.state.editWatchlistName ? { display: 'none' } : {}}>\n <br />\n {!this.props.isBillManagement && !searchMade &&\n <React.Fragment>\n {this.props.billListLength ? <button type='button' disabled={this.props.collectionIsSaving} onClick={() => this.handleToggleCompositeView()} className='button primary'>Composite View</button> : null}\n <button type=\"button\" disabled={this.props.collectionIsSaving} onClick={() => this.togglePopup(MERGE)} className=\"button primary\">Merge</button>\n <button type=\"button\" disabled={this.props.collectionIsSaving} onClick={() => this.togglePopup(DELETE)} className=\"button danger\">Delete</button>\n </React.Fragment>\n }\n {searchMade && !calendarHeader ?\n <button type=\"button\" disabled={this.props.collectionIsSaving} onClick={() => this.props.selectCollection(selectedCollectionIndex, true)} className=\"button secondary\">Back to watchlist</button>\n :\n <button type=\"button\" disabled={this.props.collectionIsSaving} onClick={() => this.props.selectCollection(-1)} className=\"button secondary\" style={{ marginRight: '0px' }}>Close</button>\n }\n </div>\n </div>\n <br />\n </div>\n )\n }\n}\n\nconst selectStyle = {\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: '0.8em',\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n option: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n dropdownIndicator: styles => ({\n ...styles,\n padding: '1px'\n }),\n}\n\nexport default CollectionControls;\n","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst getCollectionFailure = \"GET_COLLECTION_FAILURE\"\nconst getCollectionSuccess = \"GET_COLLECTION_SUCCESS\"\n\nconst getCollectionsFailure = \"GET_COLLECTIONS_FAILURE\"\nconst getCollectionsSuccess = \"GET_COLLECTIONS_SUCCESS\"\n\nconst saveCollectionsFailure = \"SAVE_COLLECTIONS_FAILURE\"\nconst saveCollectionsSuccess = \"SAVE_COLLECTIONS_SUCCESS\"\n\nconst getCriteriaTypesSuccess = \"GET_CRITERIA_TYPES_SUCCESS\"\nconst getCriteriaTypesFailure = \"GET_CRITERIA_TYPES_FAILURE\"\n\nconst notificationListSuccess = \"NOTIFICATIONS_LIST_SUCCESS\"\nconst notificationListFailure = \"NOTIFICATIONS_LIST_FAILURE\"\n\nconst messageListSuccess = \"MESSAGES_LIST_SUCCESS\"\nconst messageListFailure = \"MESSAGES_LIST_FAILURE\"\n\nconst adminMessageListSuccess = \"ADMIN_MESSAGES_LIST_SUCCESS\"\nconst adminMessageListFailure = \"ADMIN_MESSAGES_LIST_FAILURE\"\n\nconst createMessageSuccess = \"CREATE_MESSAGES_SUCCESS\"\nconst createMessageFailure = \"CREATE_MESSAGES_FAILURE\"\n\nconst saveMessageSuccess = \"SAVE_MESSAGES_SUCCESS\"\nconst saveMessageFailure = \"SAVE_MESSAGES_FAILURE\"\n\nconst initialState = {\n collection: '',\n collections: [],\n collectionsError: '',\n collectionSave: '',\n collectionSaveError: '',\n criteriaTypes: [],\n criteriaTypesError: '',\n notifications: [],\n notificationsError: '',\n messages: [],\n messagesError: '',\n adminMessages: [],\n adminMessagesError: '',\n messageCreate: [],\n messageCreateError: '',\n messageSave: [],\n messageSaveError: ''\n};\n\nexport const collectionActionCreators = {\n\n receiveCollection: resObj => ({\n type: getCollectionSuccess,\n collection: resObj\n }),\n\n collectionError: message => ({\n type: getCollectionFailure,\n collectionError: message\n }),\n\n getCollection: (params) => {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COLLECTION_API_URL) + '/LegislationCollections/api/GetLegislationCollectionByIdAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.collectionError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveCollection(result[1].WatchLists))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.receiveCollection([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCollections: resObj => ({\n type: getCollectionsSuccess,\n collections: resObj\n }),\n\n collectionsError: message => ({\n type: getCollectionsFailure,\n collectionsError: message\n }),\n\n getCollections: (params) => {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COLLECTION_API_URL) + '/LegislationCollections/api/GetLegislationCollectionsAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.collectionsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveCollections(result[1].WatchLists.sort((a, b) => new Date(b.ModificationDate) - new Date(a.ModificationDate))))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.receiveCollections([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCollectionSave: resObj => ({\n type: saveCollectionsSuccess,\n collectionSave: resObj\n }),\n\n collectionSaveError: message => ({\n type: saveCollectionsFailure,\n collectionSaveError: message\n }),\n\n saveCollections: (body, useCreate) => {\n return dispatch => {\n let request = '';\n if (useCreate) {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COLLECTION_API_URL) + '/LegislationCollections/api/CreateLegislationCollectionAsync', 'POST', '', body, '')\n } else {\n request = partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COLLECTION_API_URL) + '/LegislationCollections/api/SaveLegislationCollectionAsync', 'PUT', '', body, '')\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.collectionSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveCollectionSave(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.collectionSaveError('No Content'));\n Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCriteriaTypes: resObj => ({\n type: getCriteriaTypesSuccess,\n criteriaTypes: resObj\n }),\n\n criteriaTypesError: message => ({\n type: getCriteriaTypesFailure,\n criteriaTypesError: message\n }),\n\n getCriteriaTypes() {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_LEGISLATION_COLLECTION_API_URL) + '/LegislationCollections/api/GetCriteriaTypesAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.criteriaTypesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveCriteriaTypes(result[1].CriteriaTypes))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.criteriaTypesError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveNotifications: resObj => ({\n type: notificationListSuccess,\n notifications: resObj\n }),\n\n notificationsError: message => ({\n type: notificationListFailure,\n notificationsError: message\n }),\n\n getNotifications(params) {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_NOTIFICATIONS_API_URL) + '/Notification/api/GetNotificationsAsync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.notificationsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveNotifications(result[1].Notifications))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.receiveNotifications([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveMessages: resObj => ({\n type: messageListSuccess,\n messages: resObj\n }),\n\n messagesError: message => ({\n type: messageListFailure,\n messagesError: message\n }),\n\n getMessages() {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_NOTIFICATIONS_API_URL) + '/Notification/api/GetPublicMessagesAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.messagesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveMessages(result[1].Messages))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.receiveMessages([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveAdminMessages: resObj => ({\n type: adminMessageListSuccess,\n adminMessages: resObj\n }),\n\n adminMessagesError: message => ({\n type: adminMessageListFailure,\n adminMessagesError: message\n }),\n\n getAdminMessages() {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_NOTIFICATIONS_API_URL) + '/Notification/api/GetMessagesAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.adminMessagesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveAdminMessages(result[1].Messages))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.receiveAdminMessages([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveMessageCreate: resObj => ({\n type: createMessageSuccess,\n messageCreate: resObj\n }),\n\n messageCreateError: message => ({\n type: createMessageFailure,\n messageCreateError: message\n }),\n\n createMessage(body) {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_NOTIFICATIONS_API_URL) + '/Notification/api/CreateMessageAsync', 'POST', '', body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.messageCreateError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveMessageCreate(result[1].Messages))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.receiveMessageCreate([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveMessageSave: resObj => ({\n type: saveMessageSuccess,\n messageSave: resObj\n }),\n\n messageSaveError: message => ({\n type: saveMessageFailure,\n messageSaveError: message\n }),\n\n saveMessage(body) {\n return dispatch => {\n return partnerRequest((API_URL || process.env.REACT_APP_NOTIFICATIONS_API_URL) + '/Notification/api/SaveMessageAsync', 'POST', '', body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(collectionActionCreators.messageSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(collectionActionCreators.receiveMessageSave(result[1].Messages))\n } else if (result[0] === NO_CONTENT) {\n dispatch(collectionActionCreators.receiveMessageSave([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n }\n\n};\n\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n\n switch (action.type) {\n case getCollectionSuccess:\n return Object.assign({}, state, {\n collection: action.collection,\n collectionError: ''\n });\n case getCollectionFailure:\n return Object.assign({}, state, {\n collectionError: action.collectionError\n });\n case getCollectionsSuccess:\n return Object.assign({}, state, {\n collections: action.collections,\n collectionsError: ''\n });\n case getCollectionsFailure:\n return Object.assign({}, state, {\n collectionsError: action.collectionError\n });\n case saveCollectionsSuccess:\n return Object.assign({}, state, {\n collectionSave: action.collectionSave,\n collectionSaveError: ''\n })\n case saveCollectionsFailure:\n return Object.assign({}, state, {\n collectionSaveError: action.collectionSaveError\n })\n case getCriteriaTypesSuccess:\n return Object.assign({}, state, {\n criteriaTypes: action.criteriaTypes,\n criteriaTypesError: ''\n })\n case getCriteriaTypesFailure:\n return Object.assign({}, state, {\n criteriaTypesError: action.criteriaTypesError\n })\n case notificationListSuccess:\n return Object.assign({}, state, {\n notifications: action.notifications,\n notificationsError: ''\n })\n case notificationListFailure:\n return Object.assign({}, state, {\n notificationsError: action.notificationsError\n })\n case messageListSuccess:\n return Object.assign({}, state, {\n messages: action.messages,\n messagesError: ''\n })\n case messageListFailure:\n return Object.assign({}, state, {\n messagesError: action.messagesError\n })\n case adminMessageListSuccess:\n return Object.assign({}, state, {\n adminMessages: action.adminMessages,\n adminMessagesError: ''\n })\n case adminMessageListFailure:\n return Object.assign({}, state, {\n adminMessagesError: action.adminMessagesError\n })\n case createMessageSuccess:\n return Object.assign({}, state, {\n messageCreate: action.messageCreate,\n messageCreateError: ''\n })\n case createMessageFailure:\n return Object.assign({}, state, {\n messageCreateError: action.messageCreateError\n })\n case saveMessageSuccess:\n return Object.assign({}, state, {\n messageSave: action.messageSave,\n messageSaveError: ''\n })\n case saveMessageFailure:\n return Object.assign({}, state, {\n messageSaveError: action.messageSaveError\n })\n default:\n return state\n }\n};","import React, { useState } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport renderHTML from 'react-render-html';\nimport { Link } from 'react-router-dom';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\nimport moment from 'moment-timezone';\nimport { voteActionCreators } from '../../stores/lis-votes-store';\nimport VersionList from '../lis-bills/lis-bill-version-list';\nimport { committeeActionCreators } from '../../stores/lis-committee-store';\n\nconst HistoryList = props => {\n const [filterAmount, setFilterAmount] = useState(5);\n const filteredBillHistory = props.billHistory.slice(Math.max(props.billHistory.length - (parseInt(filterAmount) || 0), 0))\n const filterOptions = () => {\n let options = []\n // Allow the user to show a variable amount of bill history items\n for (let i = 5; i < props.billHistory.length; i = i + 5) {\n options.push(<option key={i} value={i}>Show Last {i}</option>)\n }\n return options;\n }\n return (\n <div>\n {props.billHistory.length > 5 &&\n <div className=\"align-right\">\n <select value={filterAmount} onChange={e => setFilterAmount(e.target.value)}>\n {filterOptions()}\n <option value={props.billHistory.length}>Show All</option>\n </select>\n </div>\n }\n <table className=\"line-table\">\n <tbody>\n {filteredBillHistory.filter(item => !item.DeletionDate).map((item, hIndex) => (\n <tr key={hIndex} className='parent-tr bill-details-table-row'>\n <td className=\"left\">{moment(item.EventDate).format('l')}</td>\n <td className=\"left\">{item.ChamberCode === 'H' ? 'House' : 'Senate'}</td>\n <td className=\"left\">\n {item.Description}\n {item.VoteLinks && item.opened &&\n <div className=\"link-row\">\n {item.VoteLinks.map((link, vIndex) =>\n <div key={vIndex}>\n {link.VoteID ? link.IsPublic ? <Link to={`/vote-details/${props.bill.LegislationNumber}/${item.SessionCode}/${link.VoteNumber}`}>Vote</Link> : <span>Vote Detail Pending</span> : ''}\n {link.CommitteeNumber ? <Link to={`/session-details/${item.SessionCode}/committee-information/${link.CommitteeNumber}/committee-details`}>{link.ParentCommitteeID ? 'Subcommittee' : 'Committee'}</Link> : ''}\n {link.LegislationNumber && link.SessionCode ? <Link to={`/bill-details/${link.SessionCode}/${link.LegislationNumber}`}>Legislation</Link> : ''}\n </div>\n )}\n </div>\n }\n </td>\n <td className=\"button-container\">\n {item.ReferenceID &&\n <React.Fragment>\n {item.isLoading ?\n <span className=\"small-spinner\"></span>\n :\n <button aria-expanded={item.opened} className={item.opened ? 'arrow-up' : 'arrow-down'} onClick={() => props.toggleShowLinks(item)}></button>\n }\n </React.Fragment>\n }\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nclass BillInfoComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n bill: [],\n billHistoryIsLoading: false,\n showInfo: props.isBillManagement ? false : true,\n billHistory: [],\n showBillHistory: false,\n showBillVersions: false,\n newBillNote: '',\n showBillNote: false\n };\n this.handleNoteChange = this.handleNoteChange.bind(this);\n this.toggleShowInfo = this.toggleShowInfo.bind(this);\n this.getHistory = this.getHistory.bind(this);\n this.toggleShowLinks = this.toggleShowLinks.bind(this);\n this.toggleVersions = this.toggleVersions.bind(this);\n this.toggleBillNote = this.toggleBillNote.bind(this);\n this.toggleBillNotesFromParent = this.toggleBillNotesFromParent.bind(this);\n this.saveNote = this.saveNote.bind(this);\n }\n\n componentDidMount() {\n if (this.props.selectedLocation === \"Bill Text\" && this.props.selectedKeywords)\n this.props.toggleShowData(this.props.bill.LegislationID, true)\n }\n\n handleNoteChange(e) {\n this.setState({\n newBillNote: e.target.value\n })\n }\n\n\n toggleShowInfo() {\n this.setState(prevState => ({\n showInfo: !prevState.showInfo\n }));\n }\n\n getHistory() {\n //Bill history is already loaded so just toggle the view\n if (this.state.billHistory.length > 0) {\n this.setState(state => ({\n showBillHistory: !state.showBillHistory\n }));\n return;\n }\n this.setState({\n billHistoryIsLoading: true\n });\n this.props.actions.getBillHistoryByBillID(\"?legislationID=\" + this.props.bill.LegislationID)\n .then(() => {\n let billHistory = [...this.props.bills.billHistory];\n if (billHistory.length === 0) {\n throw 'No Bill History Found'\n }\n this.setState({\n billHistory: this.props.bills.billHistory,\n billHistoryIsLoading: false,\n showBillHistory: true\n });\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n this.setState({\n billHistoryMessage: err.toString(),\n billHistoryIsLoading: false\n });\n });\n }\n\n toggleShowLinks(vote) {\n let billHistory = [...this.state.billHistory];\n const historyIndex = billHistory.findIndex(item => item.LegislationEventID == vote.LegislationEventID);\n billHistory[historyIndex].opened = !billHistory[historyIndex].opened;\n\n if (vote.VoteLinks) {\n this.setState({\n billHistory: billHistory\n });\n } else {\n billHistory[historyIndex].isLoading = true;\n this.setState({ billHistory: billHistory });\n let params = '?legislationEventID=' + vote.LegislationEventID;\n this.props.actions.getVoteLink(params).then(() => {\n let links = [...this.props.votes.voteLinkResponse];\n let linkPromises = [];\n links.forEach(link => {\n if (link.CommitteeID) {\n const cmtePromise = this.props.actions.getCommitteeById(\"?id=\" + link.CommitteeID + \"&sessionCode=\" + vote.SessionCode)\n .then(() => {\n link.CommitteeNumber = this.props.committee.committeeByIdData.CommitteeNumber;\n }).catch((err) => {\n console.error(err);\n // Don't care if it fails. That committee won't be visible\n return Promise.resolve();\n })\n linkPromises.push(cmtePromise);\n }\n // If there are any vote links of type 'Legislation' then the legislation ID needs to be turned into a legislation number to form the link\n if (link.ReferenceType === \"Legislation\") {\n const promise = this.props.actions.getBill(link.ReferenceID)\n .then(() => {\n link.LegislationNumber = this.props.bills.bill.LegislationNumber;\n link.SessionCode = link.SessionCode || vote.SessionCode;\n return Promise.resolve();\n }).catch(err => {\n console.error(err);\n // Don't care if it fails. That legislation won't be visible\n return Promise.resolve();\n });\n linkPromises.push(promise);\n }\n });\n Promise.all(linkPromises)\n .then(() => {\n billHistory[historyIndex].isLoading = false;\n billHistory[historyIndex].VoteLinks = this.props.votes.voteLinkResponse;\n this.setState({\n billHistory: billHistory\n });\n });\n });\n }\n }\n\n toggleVersions() {\n this.setState({\n showBillVersions: !this.state.showBillVersions\n })\n }\n\n toggleBillNote() {\n const { bill, selectedCollection } = this.props;\n const collectionBillIndex = selectedCollection.WatchListLegislation.findIndex(cBill => bill.LegislationID === cBill.LegislationID && !cBill.DeletionDate);\n this.setState(state => ({\n newBillNote: selectedCollection.WatchListLegislation[collectionBillIndex].Note || '',\n showBillNote: !state.showBillNote\n }));\n }\n\n toggleBillNotesFromParent(show) {\n // This function is called by the parent to show/hide all the notes in a watchlist.\n const { bill, selectedCollection } = this.props;\n const collectionBillIndex = selectedCollection.WatchListLegislation.findIndex(cBill => bill.LegislationID === cBill.LegislationID && !cBill.DeletionDate);\n if (selectedCollection.WatchListLegislation[collectionBillIndex].Note) {\n this.setState({\n newBillNote: selectedCollection.WatchListLegislation[collectionBillIndex].Note || '',\n showBillNote: show\n });\n }\n }\n\n saveNote() {\n const bill = this.props.bill;\n let selectedCollection = { ...this.props.selectedCollection };\n const collectionBillIndex = selectedCollection.WatchListLegislation.findIndex(cBill => bill.LegislationID === cBill.LegislationID && !cBill.DeletionDate);\n selectedCollection.WatchListLegislation[collectionBillIndex].Note = this.state.newBillNote;\n this.props.handleCollectionChange(selectedCollection, () => {\n this.setState({\n showBillNote: false\n });\n });\n }\n\n render() {\n const { bill, billIndex, selectedCollection, userCanUseCollections, checked, selectedKeywords, sessionCode, selectedLocation, session, displayCrossSession, newSession } = this.props;\n const { showInfo, billHistoryIsLoading, billHistory, showBillHistory, billHistoryMessage, showBillVersions, showBillNote, newBillNote } = this.state;\n let collectionBillIndex = -1;\n if (selectedCollection && !this.props.isBillManagement && !this.props.searchMade) {\n collectionBillIndex = selectedCollection.WatchListLegislation.findIndex(cBill => bill.LegislationID === cBill.LegislationID && !cBill.DeletionDate);\n }\n return (\n <div className=\"flex-row flex-start bill-info\" style={{ paddingTop: '0.5em' }}>\n <div className='parent-li se-bill-search-result'>\n <div className=\"toggle-row description legislation-search-results\" style={bill.eventsChanged ? { background: '#f1f1f1', fontStyle: 'italic' } : {}}>\n <div>\n {userCanUseCollections || this.props.isBillManagement ?\n <div className=\"collection-buttons\">\n <label className=\"screen-reader-only\" htmlFor={`sr-select-bill${billIndex}`}>Select bill</label>\n <input type=\"checkbox\"\n id={`sr-select-bill${billIndex}`}\n checked={checked || false}\n onChange={this.props.handleBillCheckbox} />\n </div>\n :\n <div></div>\n }\n <div className=\"bill-result-link\">\n <Link to={`/bill-details/${sessionCode}/${bill.LegislationNumber}`} style={{ pointerEvents: sessionCode ? null : 'none' }} target=\"_blank\">{bill.LegislationNumber}</Link>\n {this.props.displayChapterNumber && bill.ChapterNumber &&\n <div className=\"bill-additional-info\">\n <p className={`${this.props.isBillManagement || userCanUseCollections ? 'margin-left' : ''}`}>({bill.ChapterNumber})</p>\n </div>\n }\n {displayCrossSession &&\n <div className=\"bill-additional-info\">\n <p className={`${userCanUseCollections ? ' margin-left' : ''}`}>{session.SessionYear + \" \" + session.DisplayName}</p>\n </div>\n }\n {collectionBillIndex !== -1 &&\n <div\n role=\"button\"\n aria-label={!selectedCollection.WatchListLegislation[collectionBillIndex].Note ? \"Edit notes\" : 'Add notes'}\n className={`icon bubble${!selectedCollection.WatchListLegislation[collectionBillIndex].Note ? \"-hollow\" : ''}`}\n onClick={() => !this.props.collectionIsSaving && this.toggleBillNote()}\n title={selectedCollection.WatchListLegislation[collectionBillIndex].Note ? \"Edit notes\" : \"Add notes\"}>\n </div>\n }\n </div>\n </div>\n <span style={{ paddingRight: '25px' }}>{renderHTML(bill.Description || '')}</span>\n <div className=\"button-container\">\n <span>{bill.LegislationStatus}</span>\n <button aria-expanded={!!this.props.expanded} className={this.props.expanded ? 'arrow-up' : 'arrow-down'} onClick={() => this.props.toggleShowData(bill.LegislationID)}>More info</button>\n </div>\n </div>\n {(this.state[bill.LegislationID] || this.props.expanded) &&\n <div className=\"list-desc\">\n {!this.props.isBillManagement && (selectedLocation != \"Bill Text\" || !selectedKeywords) &&\n <div style={{ paddingBottom: showInfo ? '20px' : '0px', position: 'relative', overflow: 'hidden', height: showInfo ? 'auto' : '100px' }}>\n {bill.Patrons &&\n <span>Introduced by: {bill.Patrons.map((patron, patronIndex) => <React.Fragment key={patronIndex}>{patron.PatronDisplayName}{patronIndex !== bill.Patrons.length - 1 && \", \"}</React.Fragment>)}</span>\n }\n <div><strong>{bill.SummaryVersion}:</strong>{renderHTML(bill.LegislationSummary)}</div>\n <div className=\"content-blocker\" style={showInfo ? { background: 'none' } : {}}>\n <button onClick={this.toggleShowInfo} className=\"expander button-link\" type=\"button\">Show {showInfo ? \"Less\" : \"\"} Info</button>\n </div>\n </div>\n }\n {this.props.children || null}\n {billHistoryIsLoading ?\n <div><span className=\"small-spinner\"></span></div>\n :\n bill.SearchText.length > 0 && (selectedLocation != \"Bill Text\" || !selectedKeywords) &&\n <div className=\"bill-search-bill-history\">\n {billHistoryMessage &&\n <div className=\"fail small-text\">{billHistoryMessage}</div>\n }\n {billHistory.length > 0 && showBillHistory &&\n <div>\n <HistoryList\n billHistory={billHistory}\n toggleShowLinks={this.toggleShowLinks}\n bill={bill}\n />\n </div>\n }\n {!this.props.isBillManagement && <button onClick={this.getHistory} className=\"bill-history-button button-link\" type=\"button\">{showBillHistory ? 'Hide' : 'Show'} Latest History</button>}\n </div>\n }\n {bill.SearchText.length > 0 && selectedLocation === \"Bill Text\" && selectedKeywords &&\n <div>\n <VersionList\n version={bill.SearchText}\n legislationNumber={bill.LegislationNumber}\n legislationClass={bill.LegislationClass}\n sessionCode={sessionCode}\n selectedKeywords={selectedKeywords}\n descriptionEditable={false}\n />\n </div>\n }\n </div>\n }\n {showBillNote &&\n <div className=\"dlas-forms flex-row note-area-container\">\n <label className=\"screen-reader-only\" htmlFor={`sr-bill-note${billIndex}`}>Bill note</label>\n <textarea\n id={`sr-bill-note${billIndex}`}\n value={newBillNote}\n onChange={this.handleNoteChange}\n style={{ width: '90%', marginBottom: '5px', fontSize: '1em', resize: \"vertical\" }}\n placeholder={`${bill.LegislationNumber} Note`}\n className=\"note-area-input\"\n />\n {this.props.collectionIsSaving ?\n <div className=\"small-spinner\"></div>\n :\n <div className=\"inline-list\">\n <button aria-label=\"save\" onClick={this.saveNote} type=\"button\" className=\"icon save\"></button>\n <button aria-label=\"cancel\" onClick={this.toggleBillNote} type=\"button\" className=\"icon delete\"></button>\n </div>\n }\n </div>\n }\n {!newSession && <hr className=\"faded-line\" style={{ marginBlockEnd: '0px' }} />}\n </div>\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { bills, votes, committee } = state;\n return {\n bills,\n votes,\n committee\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, voteActionCreators, committeeActionCreators), dispatch)\n }\n },\n null,\n {\n forwardRef: true\n }\n)(BillInfoComponent);","import React from 'react';\nimport renderHTML from 'react-render-html';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { patronActionCreators } from '../../../stores/lis-patron-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport moment from 'moment-timezone';\nimport queryString from 'query-string';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport EventControls from './event-controls';\nimport BillCategories from '../../../lis-shared/lis-search/lis-search-categories';\nimport AdvancedSearchBox from '../../../lis-shared/lis-search/lis-advanced-search-box';\nimport SearchSelections from '../../../lis-shared/lis-search/lis-search-selections';\nimport BillHistoryForm from '../../../lis-public/components/lis-bill-details/lis-history-form';\nimport LegislationWatchlists from '../../../lis-shared/lis-search/lis-legislation-watchlists';\nimport CollectionControls from '../../../lis-shared/lis-search/lis-collection-controls'\nimport { cancelRequest } from '../../../services/request.service';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport BillInfoComponent from '../../../lis-shared/lis-search/lis-bill-info';\nimport { HubConnectionBuilder } from '@microsoft/signalr';\n\nconst BILL_COLLECTION_AUTHOR = \"LegislationCollections\";\nconst API_URL = window.env ? window.env.API_SERVER : '';\n\nclass BillManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCategories: false,\n billList: [],\n billStatusCategoryList: [],\n billStatusCategoryListIsLoading: true,\n billEventOptions: [],\n selectedBillEvent: '',\n showOverlay: false,\n selectedBill: '',\n selectedKeywords: '',\n selectedBillAction: '',\n billEventStartDate: null,\n billEventEndDate: null,\n selectedBillSession: '',\n selectedBillType: '',\n previousSearch: '',\n searchType: { value: 'all', label: 'All' },\n selectedChamber: '',\n patronList: [],\n patronRoles: [],\n selectedBillNumbers: '',\n selectedBillRangeBeginning: '',\n selectedBillRangeEnd: '',\n selectedChapterNumber: '',\n filteredPatronList: [],\n selectedPatron: '',\n selectedPatronType: [],\n selectedBillStatusCategory: '',\n sessionOptions: [],\n billStatusStartDate: null,\n billStatusEndDate: null,\n committeeList: [],\n fullCommitteeList: [],\n groupedCommitteeList: [],\n filteredCommitteeList: [],\n selectedCommittee: '',\n selectedSubcommittee: '',\n subcommitteeList: [],\n subjectList: [],\n selectedSubject: '',\n introDateList: [],\n collections: [],\n selectedCollection: '',\n selectedCollectionIndex: -1,\n checkedBills: [],\n lastCheckedBill: -1,\n selectAllBills: false,\n billVersionList: [],\n selectedBillVersion: 'All',\n billSummaryList: [],\n selectedSummaryVersion: 'All',\n selectedLocation: 'Caption',\n actionTypes: [],\n otherBillEventOptions: [],\n currentStatus: true,\n legislationIDs: [],\n showSidebar: true,\n hideAllEvents: [true],\n height: 1,\n showModal: false,\n introductionDate: null,\n excludeFailed: false,\n showUpdateSearchButton: false\n };\n this.searchOnEnterPress = this.searchOnEnterPress.bind(this);\n this.toggleGroup = this.toggleGroup.bind(this);\n this.toggleShowCategories = this.toggleShowCategories.bind(this);\n this.clearForm = this.clearForm.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleSearch = this.handleSearch.bind(this);\n this.getBillsResults = this.getBillsResults.bind(this);\n this.chamberChange = this.chamberChange.bind(this);\n this.sessionChange = this.sessionChange.bind(this);\n this.committeeChange = this.committeeChange.bind(this);\n this.handlePatronChange = this.handlePatronChange.bind(this);\n this.handlePatronTypeChange = this.handlePatronTypeChange.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleSelectionClear = this.handleSelectionClear.bind(this);\n this.handleMultiSelectionClear = this.handleMultiSelectionClear.bind(this);\n this.getCollections = this.getCollections.bind(this);\n this.selectCollection = this.selectCollection.bind(this);\n this.handleBillCheckbox = this.handleBillCheckbox.bind(this);\n this.handleEventChange = this.handleEventChange.bind(this);\n this.addEvent = this.addEvent.bind(this);\n this.removeEvent = this.removeEvent.bind(this);\n this.saveForm = this.saveForm.bind(this);\n this.getOtherBillEventOptions = this.getOtherBillEventOptions.bind(this);\n this.handleCurrentStatusChange = this.handleCurrentStatusChange.bind(this);\n this.toggleSidebar = this.toggleSidebar.bind(this);\n this.toggleShowData = this.toggleShowData.bind(this);\n this.togglehideAllEvents = this.togglehideAllEvents.bind(this);\n this.toggleAllBills = this.toggleAllBills.bind(this);\n this.handleEditedBills = this.handleEditedBills.bind(this);\n this.getSessions = this.getSessions.bind(this);\n this.executeSearch = this.executeSearch.bind(this);\n this.toggleModal = this.toggleModal.bind(this);\n this.handleExcludeFailedChange = this.handleExcludeFailedChange.bind(this);\n this.toggleExpandAllLegislation = this.toggleExpandAllLegislation.bind(this);\n this.receiveEventByWebsocket = this.receiveEventByWebsocket.bind(this);\n\n // The div that sorrounds the page is in this component but the function that needs to run to be able to make a search is in the child component.\n // This ref is used to call the child component's function.\n this.searchBox = React.createRef();\n }\n\n componentDidMount() {\n // IF A SEARCH QUERY EXISTS\n let queryObj = '';\n const parsed = queryString.parse(this.props.location.search);\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n queryObj = JSON.parse(decodedSearch);\n this.setState(state => ({\n ...state,\n ...queryObj\n }), () => {\n //If we haven't arrived here to edit history then go ahead with the search\n if (queryObj.calendarCategoryTypeID) {\n this.setState({\n calendarHeader: {\n Name: 'Calendar on ' + moment(queryObj.calendarDate).format(\"MM/DD/YYYY\"),\n Description: queryObj.calendarCategoryDescription\n }\n })\n this.getSessions(queryObj);\n } else {\n this.getSessions();\n }\n });\n } else {\n this.getSessions();\n }\n\n let entryConnection = new HubConnectionBuilder() //in bill mgmt, use one central entryConnection from props rather than a separate connection for each bill\n .withUrl((API_URL || process.env.REACT_APP_LEGISLATION_EVENT_API_URL) + '/LegislationEvent/events')\n .build();\n entryConnection.serverTimeoutInMilliseconds = 60000;\n this.setState({\n entryHubConnection: entryConnection\n }, () => {\n this.state.entryHubConnection\n .start({ withCredentials: false })\n .then(() => {\n BillHistoryForm.getConnectionId(this.state.entryHubConnection, (connectionId) => {\n console.log(`entryConnectionId: ${connectionId}`);\n this.setState({\n entryConnectionId: connectionId\n })\n });\n }).catch(err => {\n console.log('Error establishing connection' + err)\n this.props.actions.makeToast([{ message: \"Entry Connection Failed\", type: \"failure\" }])\n });\n this.state.entryHubConnection.on(\"ReceiveEvent\", message => BillHistoryForm.handleEvent(message, this.receiveEventByWebsocket));\n });\n\n this.getBillStatusCategoryOptions();\n this.getBillVersionOptions();\n this.getBillSummaryOptions();\n this.getBillEventOptions(queryObj.calendarCategoryTypeID);\n this.getPatronRoles();\n\n this.props.actions.getActionTypes()\n .then(() => {\n let actionTypes = [...this.props.minutes.actionTypes];\n actionTypes.forEach(type => {\n type.label = type.ActionReferenceType;\n type.value = type.ActionReferenceTypeID;\n })\n this.setState({\n actionTypes: actionTypes\n });\n });\n }\n\n receiveEventByWebsocket(message) {\n let billList = [...this.state.billList];\n message.forEach(msg => {\n //If the LegislationID for the list of new events doesn't match any bills in the result set then keep it moving\n const billIndex = billList.findIndex(b => b.LegislationID === msg.LegislationID);\n if (billIndex > -1) {\n let updated = false;\n //If we don't find an event from the websocket message in the already-loaded list of events then add it to the local history list\n if (!billList[billIndex].historyList?.find(x => x.LegislationEventID === msg.LegislationEventID)) {\n updated = true;\n billList[billIndex].historyList = billList[billIndex].historyList || [];\n billList[billIndex].historyList.push(msg)\n }\n if (updated) {\n //Send the updated local history list to be reorganized and displayed\n const organizedEvents = BillHistoryForm.organizeEvents(billList[billIndex].historyList);\n this.handleEventChange(billIndex, organizedEvents);\n }\n }\n });\n\n this.setState({ billList })\n }\n\n getSessions(queryObj) {\n let sessions = ''\n if (!this.state.sessionOptions.length) {\n sessions = this.props.actions.getSessionList()\n .then(() => {\n this.setState({\n sessionOptions: this.props.session.sessionList\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n } else {\n sessions = () => Promise.resolve();\n }\n\n Promise.all([sessions]).then(() => {\n let selectedSession = '';\n let defaultSession = '';\n this.state.sessionOptions.forEach(session => {\n if (queryObj && session.SessionID === queryObj.selectedSession) {\n selectedSession = session;\n this.props.actions.changeSession(session.SessionCode);\n } else if (session.SessionCode === this.props.nav.session && !selectedSession) {\n selectedSession = session;\n }\n if (session.IsDefault) {\n defaultSession = session;\n }\n });\n //Only set the session to default if the queryObj doesn't have a sessionID and the the session selector doesn't have a sessionID\n if (!selectedSession) {\n selectedSession = defaultSession;\n }\n\n if (selectedSession) {\n const sessionStartObj = selectedSession.SessionEvents && selectedSession.SessionEvents.length && selectedSession.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate).format(\"MM/DD/YYYY\") : '';\n const dateParam = 'effectiveDate=' + encodeURIComponent(startDate);\n const sessionParam = 'sessionID=' + selectedSession.SessionID;\n this.getPatrons(sessionParam);\n this.getSubjects(sessionParam);\n this.getCommittees(dateParam);\n this.getIntroDates(sessionParam)\n\n this.setState({ selectedSession }, () => {\n if (this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR)) {\n this.getCollections(\"?SessionID=\" + this.state.selectedSession.SessionID);\n }\n if (queryObj && !queryObj.sessionOnly) {\n this.handleSearch()\n } else {\n this.setState({ showCategories: true })\n }\n\n document.querySelector('body').addEventListener('keydown', this.searchOnEnterPress);\n })\n } else {\n this.setState({ failedToGetSessions: true })\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.props.location.search !== prevProps.location.search) {\n this.executeSearch();\n }\n if (this.props.nav.session !== prevProps.nav.session) {\n if (!isNaN(parseInt(this.props.nav.session))) {\n this.sessionChange(this.props.nav.session);\n }\n }\n\n //get collections if user logs in/logged in user changes\n if (this.props.login.userProfile.email && this.props.login.userProfile.email !== prevProps.login.userProfile.email) {\n if (this.state.selectedSession.SessionID && this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR)) {\n this.getCollections(\"?SessionID=\" + this.state.selectedSession.SessionID);\n } else if (this.state.collections && this.state.collections.length) {\n this.setState({ collections: [] })\n }\n }\n\n if (this.state.billList !== prevState.billList || this.state.showCategories !== prevState.showCategories) {\n if (window.innerWidth > 900) { //breaks mobile otherwise, and the sidebar toggle isn't shown on mobile anyways\n let height = document.getElementById('results-div');\n if (height && (height.scrollHeight / 540) !== this.state.height) {\n this.setState({\n height: (height.scrollHeight / 540) >= 1 ? (height.scrollHeight / 540) : 1\n })\n } else {\n this.setState({\n height: 1\n })\n }\n }\n }\n }\n\n executeSearch() {\n let queryObj = '';\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n queryObj = JSON.parse(decodedSearch);\n //Remove any existing entries in the form and replace it with the content of the url\n this.clearForm();\n this.setState(state => ({\n ...state,\n ...queryObj\n }), () => {\n //If a member is already selected and there are no patron types selected then select them all by default\n if (this.state.selectedPatron && this.state.selectedPatronType.length === 0) {\n const patronRoles = [];\n this.state.patronRoles.forEach(role => patronRoles.push(role.PatronTypeID));\n this.setState({\n selectedPatronType: patronRoles\n });\n }\n //If a committee is already selected and there is no legislation status category then select 'In Committee' as the status\n if (this.state.selectedCommittee && !this.state.selectedBillStatusCategory) {\n const selectedBillStatusCategory = this.state.billStatusCategoryList.find(status => status.Name === 'In Committee');\n this.setState({\n selectedBillStatusCategory: selectedBillStatusCategory ? selectedBillStatusCategory.LegislationCategoryID : ''\n });\n }\n this.getSessions(queryObj);\n });\n } else if (!parsed.collection) {\n //this means the user hit the back button from a query and there are no longer any params in the url,\n //and the user should be back at the base search page with categories\n this.clearForm(true);\n }\n }\n\n componentWillUnmount() {\n document.querySelector('body').removeEventListener('keydown', this.searchOnEnterPress);\n cancelRequest();\n }\n\n searchOnEnterPress(event) {\n if (event.key === 'Enter' && !this.state.isFetching) {\n //Pressing enter while on a react-select will select an option. A search should not happen because of that.\n //Also do not submit a search if they are entering a value in the quick-search input at the top right which sends the user to the public search\n //otherwise, if they are on the categories page in bill mgmt, search using the quick-search, and then hit back button from the public bill search results, it will send them to the results page in bill mgmt rather than back to the categories page\n if (!event.target.id.includes('react-select') && !event.target.className.includes('note-area') && !event.target.className.includes('event-date-picker') && event.target.id !== \"quick-search\") {\n if (!this.state.selectedChamber && !this.state.selectedBillEvent && !this.state.selectedBillType && !this.state.selectedCommittee && !this.state.selectedSubcommittee && !this.state.selectedPatron && !this.state.selectedSubject && !this.state.selectedKeywords && !this.state.selectedBillNumbers && !this.state.selectedBillRangeBeginning && !this.state.selectedBillRangeEnd && !this.state.selectedSubject && !this.state.selectedChapterNumber && !this.state.selectedBillStatusCategory) {\n //there are not any search parameters provided, don't execute a search\n return;\n }\n this.searchBox.current.handleSubmit();\n }\n }\n }\n\n toggleShowCategories(val) {\n this.setState({\n showCategories: val\n });\n }\n\n toggleGroup(groupName) {\n this.setState(state => ({\n [groupName]: !state[groupName]\n }));\n }\n\n clearForm(clearUrl, clearBillData) {\n this.setState({\n selectedBillEvent: '',\n selectedBill: '',\n selectedKeywords: '',\n selectedBillAction: '',\n billEventStartDate: null,\n billEventEndDate: null,\n selectedBillSession: '',\n selectedBillType: '',\n selectedBillNumbers: '',\n selectedBillRangeBeginning: '',\n selectedBillRangeEnd: '',\n selectedChapterNumber: '',\n subcommitteeList: [],\n selectedPatron: '',\n selectedPatronType: '',\n selectedChamber: '',\n selectedBillStatusCategory: '',\n billStatusStartDate: null,\n billStatusEndDate: null,\n selectedCommittee: '',\n selectedSubcommittee: '',\n selectedSubject: '',\n isPending: null,\n mostFrequent: null,\n allLegislation: null,\n selectedBillVersion: 'All',\n selectedSummaryVersion: 'All',\n selectedLocation: 'Caption',\n displaySelectedLocation: \"Caption\",\n introductionDate: null\n }, () => {\n if (clearUrl) {\n this.props.history.push('/bill-management');\n this.setState({ billList: [], showCategories: true })\n }\n if (clearBillData) {\n this.setState({\n billList: []\n })\n }\n });\n\n }\n\n handleSubmit(queryObj) {\n let encodedSearch = window.btoa(JSON.stringify(queryObj));\n //if it is the same search (i.e. same parameters) as the current one, updating the url won't work since it will be the same, just execute it manually\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q && parsed.q === encodedSearch) {\n this.executeSearch();\n } else {\n this.props.history.push('/bill-management?q=' + encodedSearch + (this.state.selectedCollection ? '&collection=' + this.state.selectedCollection.WatchListID : ''));\n }\n }\n\n handleSearch() {\n if (this.state.failedToGetSessions) { return; }\n //Format the selected options to be sent to the API\n //Add bill range to list of bills\n let selectedBillNumbers = this.state.selectedBillNumbers.trim();\n if (this.state.selectedBillRangeBeginning && this.state.selectedBillRangeEnd) {\n selectedBillNumbers = selectedBillNumbers ? selectedBillNumbers + ',' : selectedBillNumbers;\n selectedBillNumbers += this.state.selectedBillRangeBeginning + '-' + this.state.selectedBillRangeEnd;\n }\n\n let keywordVersion = null;\n switch (this.state.selectedLocation) {\n case ('Bill Text'):\n if (this.state.selectedBillVersion !== 'All') {\n keywordVersion = { KeywordLegislationVersionID: this.state.selectedBillVersion }\n }\n break;\n case ('Summary'):\n if (this.state.selectedSummaryVersion !== 'All') {\n keywordVersion = { KeywordSummaryVersionID: this.state.selectedSummaryVersion }\n }\n break;\n }\n\n // Build the param array with param names as the keys\n const params = {\n ChamberCode: this.state.selectedChamber ? this.state.selectedChamber.value : null,\n CommitteeID: this.state.selectedSubcommittee || this.state.selectedCommittee || null,\n PatronTypes: this.state.selectedPatronType || null,\n LegislationNumbers: selectedBillNumbers ? [{ LegislationNumber: selectedBillNumbers.replaceAll(\" \", \"\") }] : null,\n ChapterNumber: this.state.selectedChapterNumber,\n SessionID: this.state.selectedSession.SessionID,\n StartDate: this.state.billStatusStartDate ? moment(this.state.billStatusStartDate).format('MM/DD/YYYY') : null,\n EndDate: this.state.billStatusEndDate ? moment(this.state.billStatusEndDate).format() : null,\n KeywordExpression: this.state.selectedKeywords || null,\n KeywordLocation: this.state.selectedLocation || null,\n ...keywordVersion,\n MemberID: this.state.selectedPatron,\n SubjectIndexID: this.state.selectedSubject,\n LegislationCategoryID: this.state.selectedBillStatusCategory,\n LegislationEventTypeID: this.state.selectedBillEvent,\n EventStartDate: this.state.billEventStartDate ? moment(this.state.billEventStartDate).format(\"MM/DD/YYYY\") : null,\n EventEndDate: this.state.billEventEndDate ? moment(this.state.billEventEndDate).format(\"MM/DD/YYYY\") : null,\n IsPending: this.state.isPending || null,\n MostFrequent: this.state.mostFrequent || null,\n AllLegislation: this.state.allLegislation || null,\n CurrentStatus: this.state.currentStatus,\n ExcludeFailed: this.state.excludeFailed,\n LegislationIDs: this.state.legislationIDs,\n IntroductionDate: this.state.introductionDate\n }\n //Open the fieldset if one of the form inputs is filled out\n if (params.LegislationNumbers) {\n this.setState({\n billFieldset: true\n });\n }\n if (params.KeywordExpression) {\n this.setState({\n keywordFieldset: true\n });\n }\n if (params.LegislationCategoryID || params.ChamberCode) {\n this.setState({\n statusFieldset: true\n });\n }\n if (params.EventStartDate || params.EventEndDate) {\n this.setState({\n activityFieldset: true\n });\n }\n if (params.MemberID) {\n this.setState({\n membersFieldset: true\n });\n }\n if (params.CommitteeID) {\n this.setState({\n committeesFieldset: true\n });\n }\n if (params.SubjectIndexID) {\n this.setState({\n subjectFieldset: true\n });\n }\n\n this.setState({\n searchMade: true,\n displaySelectedLocation: this.state.selectedLocation,\n showUpdateSearchButton: false\n });\n\n this.getBillsResults(params);\n }\n\n getBillsResults(params) {\n\n //if the user searches hb1-hb4 and expands all of these bills to see further info, and then search hb1-hb5, leave open their previously expanded bills for them;\n //however, if the existing search (if there is one, i.e. this new one is not the first search they're making) is a bill text keyword search, which automatically expands all of them in order to show bill text matches,\n //then close these in the new search results as there's a good chance they don't care for the expanded info regarding patrons/summary/etc\n const closeBillInfo = this.state.params?.KeywordLocation === \"Bill Text\" && this.state.params?.KeywordExpression && (params?.KeywordLocation !== \"Bill Text\" || !params?.KeywordExpression);\n\n this.setState({\n isFetching: true,\n showCategories: false\n });\n\n window.scrollTo(0, 0);\n\n let getResultsPromise;\n if (params.MostFrequent) {\n getResultsPromise = this.props.actions.getMostFrequentBillList(\"?sessionID=\" + params.SessionID + \"&excludeFailed=\" + params.ExcludeFailed);\n } else {\n getResultsPromise = this.props.actions.getBillList(params)\n }\n\n getResultsPromise.then(() => {\n let billList = !params.MostFrequent ? [...this.props.bills.billList] : [...this.props.bills.mostFrequentBillList];\n let legislationIDs = \"\";\n\n //Can't manage bills that are outside of the selected session\n billList = billList.filter(x => x.SessionID === this.state.selectedSession.SessionID);\n //Filter to only one result per bill per session since DB sometimes returns duplicates which messes up pagination\n billList = billList.filter((item, pos) => billList.findIndex(i => i.LegislationNumber === item.LegislationNumber && i.SessionID === item.SessionID) === pos);\n //If coming from the calendar, sort according to calendar order which is preserved in the query param\n if (this.state.calendarCategoryTypeID && this.state.legislationIDs?.length) {\n billList.sort((a, b) => this.state.legislationIDs.findIndex(l => l.LegislationID === a.LegislationID) - this.state.legislationIDs.findIndex(l => l.LegislationID === b.LegislationID))\n }\n let hideAllEvents = []\n billList.forEach((bill, i) => {\n legislationIDs = legislationIDs + \"legislationIDs=\" + bill.LegislationID;\n legislationIDs = i + 1 !== this.props.bills.billList.length ? legislationIDs + \"&\" : legislationIDs;\n // Remove all references to any previous organizedEvents, and set the hideAllEvents for this specific bill to true\n hideAllEvents.push(true)\n this.setState({\n [`organizedEvents${i}`]: '',\n hideAllEvents\n })\n });\n\n if (legislationIDs) {\n let promises =\n [this.props.actions.getBillHistoryByBillID(`?${legislationIDs}`, true),\n this.props.actions.getBillVersionsByBillID(`?${legislationIDs}`)];\n\n Promise.all(promises).then(() => {\n billList.forEach((bill, i) => {\n bill.historyList = this.props.bills.billHistory.filter(x => x.LegislationID === bill.LegislationID);\n bill.versionsList = this.props.bills.billVersion.filter(x => x.LegislationID === bill.LegislationID).map(x => ({\n ...x,\n label: x.DocumentCode,\n value: x.LegislationTextID\n }));\n })\n }).then(() => {\n this.setState({\n billList: billList,\n checkedBills: [],\n lastCheckedBill: -1,\n isFetching: false\n }, () => {\n if (closeBillInfo)\n [...this.state.billList].forEach(b => this.toggleShowData(b.LegislationID, false))\n });\n });\n } else {\n this.setState({\n billList: [],\n checkedBills: [],\n lastCheckedBill: -1,\n isFetching: false\n })\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isFetching: false\n });\n })\n }\n\n getBillStatusCategoryOptions() {\n // Get Bill Status references for bill status typeahead\n this.props.actions.getBillStatusCategoryReferences().then(() => {\n let billStatusReferences = [...this.props.bills.billStatusCategoryReferences];\n billStatusReferences.forEach(ref => {\n ref.label = ref.Name\n ref.value = ref.LegislationCategoryID\n });\n if (this.state.selectedCommittee && !this.state.selectedBillStatusCategory) {\n const selectedBillStatusCategory = billStatusReferences.find(status => status.Name === 'In Committee');\n this.setState({\n selectedBillStatusCategory: selectedBillStatusCategory ? selectedBillStatusCategory.LegislationCategoryID : ''\n });\n }\n this.setState({\n billStatusCategoryList: billStatusReferences,\n billStatusCategoryListIsLoading: false\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.setState({ billStatusCategoryListIsLoading: false })\n });\n }\n\n getBillVersionOptions() {\n this.props.actions.getBillVersionRef().then(() => {\n let topOfList = [{ Name: 'All Versions', LegislationVersionID: 'All' }];\n let billVersionReferences = topOfList.concat(this.props.bills.billVersionRef);\n billVersionReferences.forEach(ref => {\n ref.label = ref.Name\n ref.value = ref.LegislationVersionID\n });\n this.setState({\n billVersionList: billVersionReferences,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getBillSummaryOptions() {\n this.props.actions.getBillSummaryRef().then(() => {\n let topOfList = [{ Name: 'All Summary Versions', SummaryVersionID: 'All' }];\n let billSummaryReferences = topOfList.concat(this.props.bills.billSummaryRef);\n billSummaryReferences.forEach(ref => {\n ref.label = ref.Name\n ref.value = ref.SummaryVersionID\n });\n this.setState({\n billSummaryList: billSummaryReferences,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getBillEventOptions(calendarCategoryTypeID) {\n if (calendarCategoryTypeID) {\n this.props.actions.getBillEventReferences(\"?calendarCategoryTypeID=\" + calendarCategoryTypeID)\n .then(() => {\n let billEventReferences = [...this.props.bills.billEventRef];\n billEventReferences.forEach(ref => {\n delete ref.LegislationChamberCode;\n ref.label = ref.LegislationDescription || ref.CalendarDescription;\n ref.value = `${ref.EventCode}-${ref.IsPassed}`\n });\n billEventReferences = this.filterBillEventReferences(billEventReferences);\n\n billEventReferences.push({\n label: \"Other\",\n value: \"Other\"\n })\n this.setState({\n billEventOptions: billEventReferences\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n } else {\n this.props.actions.getBillEvents(\"\").then(() => {\n let billEventReferences = [...this.props.bills.billEvents];\n billEventReferences.forEach(ref => {\n delete ref.LegislationChamberCode;\n ref.label = ref.LegislationDescription || ref.CalendarDescription\n ref.value = `${ref.EventCode}-${ref.IsPassed}`\n });\n billEventReferences = this.filterBillEventReferences(billEventReferences);\n\n this.setState({\n billEventOptions: billEventReferences\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n }\n\n getOtherBillEventOptions() {\n this.props.actions.getBillEvents(\"\").then(() => {\n let billEventReferences = [...this.props.bills.billEvents];\n billEventReferences.forEach(ref => {\n ref.label = ref.LegislationDescription || ref.CalendarDescription;\n ref.value = `${ref.EventCode}-${ref.IsPassed}`\n });\n billEventReferences = this.filterBillEventReferences(billEventReferences);\n this.setState({\n otherBillEventOptions: billEventReferences\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n filterBillEventReferences(billEventReferences) {\n return billEventReferences.filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.EventCode === value.EventCode && JSON.stringify(t.ActionReferences) === JSON.stringify(value.ActionReferences) && t.IsPassed === value.IsPassed\n ))\n )\n }\n\n getPatrons(sessionParam) {\n // Get Patrons list for typeahead\n this.props.actions.getMemberList(sessionParam).then(() => {\n let memberList = [...this.props.members.memberList];\n memberList.forEach(patron => {\n patron.label = patron.ListDisplayName + ' ' + '(' + patron.ChamberCode + ')';\n patron.value = patron.MemberID;\n });\n const member = memberList.find(member => member.MemberID === this.state.selectedPatron);\n let selectedPatronType = [];\n if (member && this.state.selectedPatronType.length === 0) {\n this.state.patronRoles.forEach(role => selectedPatronType.push(role.PatronTypeID));\n this.setState({\n selectedPatronType: selectedPatronType\n });\n }\n this.setState({\n patronList: memberList,\n filteredPatronList: memberList,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getSubjects(sessionParam) {\n this.props.actions.getSubjectList('?' + sessionParam)\n .then(() => {\n this.setState({\n subjectList: this.props.bills.subjectList\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getPatronRoles() {\n this.props.actions.getPatronRoles()\n .then(() => {\n const patronRoles = [...this.props.patrons.patronRoles];\n patronRoles.forEach(role => {\n role.label = role.Name;\n role.value = role.PatronTypeID;\n });\n this.setState({\n patronRoles: patronRoles,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getCommittees(sessionParam) {\n this.props.actions.getCommitteeList(sessionParam + \"&includeSubCommittees=true\").then(() => {\n let fullCommitteeList = this.props.committee.committeeList.filter(c => !c.ParentCommitteeID);\n fullCommitteeList.forEach(committee => {\n committee.label = committee.Name + ' ' + '(' + committee.ChamberCode + ')';\n committee.value = committee.CommitteeID;\n });\n let committeeList = fullCommitteeList.filter(c => !c.ParentCommitteeID);\n let groupedCommitteeList = [{ \"label\": \"House Committees\", \"ChamberCode\": \"H\", \"options\": committeeList.filter(c => c.ChamberCode === \"H\") }, { \"label\": \"Senate Committees\", \"ChamberCode\": \"S\", \"options\": committeeList.filter(c => c.ChamberCode === \"S\") }]\n this.setState({\n fullCommitteeList: fullCommitteeList,\n committeeList: committeeList,\n groupedCommitteeList: groupedCommitteeList,\n filteredCommitteeList: groupedCommitteeList\n });\n //If a committee is already selected then that committee's subcommittees need to be retrieved\n if (this.state.selectedCommittee) {\n this.getSubcommittees(this.state.selectedCommittee);\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getSubcommittees(id) {\n this.props.actions.getCommitteeList(\"parentCommitteeID=\" + id)\n .then(() => {\n let committeeList = [...this.props.committee.committeeList];\n committeeList.forEach(committee => {\n committee.label = '(' + committee.ChamberCode + ') ' + committee.Name;\n committee.value = committee.CommitteeID;\n });\n this.setState({\n subcommitteeList: committeeList\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getIntroDates(sessionParam) {\n this.props.actions.getIntroDateList('?' + sessionParam)\n .then(() => {\n let datesList = [];\n this.props.bills.introDateList.forEach(date => datesList.push(moment(date.IntroductionDate)));\n this.setState({\n introDateList: datesList\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n sessionChange(code) {\n const selectedSession = this.state.sessionOptions.find(session => session.SessionCode === code);\n if (!selectedSession) {\n return;\n }\n const sessionParam = 'sessionID=' + selectedSession.SessionID;\n this.getPatrons(sessionParam);\n this.getSubjects(sessionParam);\n this.getCommittees(sessionParam);\n this.getIntroDates(sessionParam);\n this.getCollections(\"?SessionID=\" + selectedSession.SessionID);\n\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n let queryObj = JSON.parse(decodedSearch);\n if (queryObj.selectedSession) {\n queryObj.selectedSession = selectedSession.SessionID;\n this.handleSubmit(queryObj);\n return;\n }\n } else {\n this.setState({ currentStatus: selectedSession.IsActive })\n }\n\n if (this.state.selectedBillStatusCategory) {\n this.setState({\n selectedPatron: '',\n selectedPatronType: '',\n selectedCommittee: '',\n selectedSubcommittee: '',\n selectedSubject: '',\n selectedSession: selectedSession\n }, () => {\n this.handleSearch();\n });\n } else {\n this.setState({\n selectedPatron: '',\n selectedPatronType: '',\n selectedCommittee: '',\n selectedSubcommittee: '',\n selectedSubject: '',\n selectedSession: selectedSession\n }, () => {\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q) {\n this.handleSearch();\n }\n });\n }\n }\n\n chamberChange(value) {\n this.setState({\n selectedChamber: value\n });\n if (value) {\n const patronList = [...this.state.patronList];\n const committeeList = [...this.state.groupedCommitteeList];\n //Remove the patrons from the patronList that do not fit the current selected chamber\n //Remove the committees from the committee list that do not fit the current selected chamber\n let filteredPatronList = patronList.filter(patron => patron.ChamberCode === value.value);\n let filteredCommitteeList = committeeList.filter(committee => committee.ChamberCode === value.value);\n this.setState({\n filteredPatronList: filteredPatronList,\n filteredCommitteeList: filteredCommitteeList,\n });\n } else {\n // 'all' has been selected so show all patrons/committees\n this.setState({\n filteredPatronList: this.state.patronList,\n filteredCommitteeList: this.state.groupedCommitteeList,\n });\n }\n // Reset all the values that are chamber specific\n this.setState({\n selectedPatron: '',\n selectedPatronType: '',\n selectedCommittee: '',\n selectedSubcommittee: ''\n });\n }\n\n committeeChange(opt) {\n this.setState({\n selectedCommittee: opt ? opt.value : null,\n selectedSubcommittee: null\n });\n if (opt) {\n if (!this.state.selectedBillStatusCategory) {\n const selectedBillStatusCategory = this.state.billStatusCategoryList.find(status => status.Name === 'In Committee');\n this.setState({\n selectedBillStatusCategory: selectedBillStatusCategory ? selectedBillStatusCategory.LegislationCategoryID : ''\n });\n }\n this.getSubcommittees(opt.CommitteeID)\n };\n }\n\n handlePatronChange(opt) {\n let patronTypes = [];\n if (opt) {\n this.state.patronRoles.forEach(role => patronTypes.push(role.PatronTypeID));\n }\n this.setState({\n selectedPatron: opt ? opt.value : null,\n selectedPatronType: patronTypes\n });\n }\n\n handlePatronTypeChange(options) {\n let values = [];\n if (options) {\n options.forEach(opt => values.push(opt.value));\n }\n this.setState({\n selectedPatronType: values\n });\n }\n\n handleSelectChange = (opt, name) => {\n this.setState({\n [name]: opt ? opt.value : null\n });\n if (name === 'selectedBillStatusCategory') {\n if (opt === null || (opt && [2, 3, 4, 6, 7, 11, 22, 16, 17, 21, 27].includes(opt.LegislationCategoryID))) {\n this.setState({\n currentStatus: true,\n billStatusStartDate: null,\n billStatusEndDate: null\n });\n } else if ([1, 5, 23, 24, 18, 26, 29, 8, 9, 10, 19, 14, 20, 25, 13, 15, 28].includes(opt.LegislationCategoryID)) {\n this.setState({\n currentStatus: false\n });\n }\n }\n }\n\n handleDateChange = (val, name) => {\n this.setState({\n [name]: val\n });\n }\n\n handleTextChange = (evt, name) => {\n let value = evt.target.value;\n if (['selectedChapterNumber', 'selectedBillRangeBeginning', 'selectedBillRangeEnd'].includes(name)) {\n value = value.replace(/[^a-zA-Z0-9]/, \"\");\n }\n this.setState({ [name]: value });\n }\n\n handleSelectionClear(key) {\n //Clearing some form inputs changes the value of other form inputs. Handle them here.\n this.setState({ showUpdateSearchButton: true }, () => {\n switch (key) {\n case \"selectedBillStatusCategory\":\n this.handleSelectChange(null, \"selectedBillStatusCategory\");\n break;\n case \"selectedPatron\":\n this.handlePatronChange(null);\n break;\n case \"selectedCommittee\":\n this.committeeChange(null);\n break;\n case \"selectedChamber\":\n this.chamberChange(null);\n break;\n default:\n this.setState({\n [key]: ''\n });\n }\n\n if (!localStorage.getItem('searchModalDismissed')) {\n this.toggleModal();\n localStorage.setItem('searchModalDismissed', true);\n }\n })\n }\n\n handleMultiSelectionClear(key, index) {\n let value = [...this.state[key]];\n value.splice(index, 1);\n this.setState({\n [key]: value,\n showUpdateSearchButton: true\n })\n }\n\n handleCurrentStatusChange() {\n this.setState({\n currentStatus: !this.state.currentStatus\n }, () => {\n if (this.state.currentStatus) {\n this.setState({\n billStatusStartDate: null,\n billStatusEndDate: null\n })\n }\n })\n }\n\n getCollections(params) {\n this.setState({\n collectionIsLoading: true\n });\n this.props.actions.getCollections(params)\n .then(() => {\n const parsed = queryString.parse(this.props.location.search);\n const collectionIndex = this.props.collection.collections.findIndex(coll => coll.WatchListID === parseInt(parsed.collection))\n this.setState({\n collections: this.props.collection.collections,\n collectionIsLoading: false,\n }, () => {\n if (collectionIndex !== -1) {\n this.selectCollection(collectionIndex)\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n this.setState({\n collectionIsLoading: false\n });\n });\n }\n\n selectCollection(collectionIndex) {\n if (collectionIndex === this.state.selectedCollectionIndex) {\n this.setState({\n selectedCollectionIndex: -1,\n selectedCollection: ''\n })\n } else {\n if (this.state.collections[collectionIndex].IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) {\n alert(\"The watchlist you are trying to access is a paid watchlist. As a free user, you are no longer able to access this watchlist.\");\n return;\n }\n\n let legNumbers = '';\n this.state.collections[collectionIndex].WatchListLegislation.filter(leg => !leg.DeletionDate).forEach((leg, legIndex) => {\n if (legIndex !== 0) {\n legNumbers += ', ';\n }\n legNumbers += leg.LegislationNumber;\n });\n // Don't make a search lacking any legislation\n if (legNumbers) {\n let queryObj = {\n selectedBillNumbers: legNumbers,\n selectedSession: this.state.selectedSession.SessionID\n };\n this.handleSubmit(queryObj);\n } else {\n // This watchlist does not have any legislation. Clear the form and clear the results.\n this.clearForm(true);\n this.setState({\n billList: []\n });\n }\n this.setState({\n selectedCollectionIndex: collectionIndex,\n selectedCollection: this.state.collections[collectionIndex]\n })\n }\n }\n\n selectCollection(collectionIndex, returningFromSearch) {\n if (collectionIndex === -1) {\n this.setState({\n selectedCollectionIndex: -1,\n selectedCollection: '',\n billList: [],\n searchMade: true\n })\n this.props.history.push('/bill-management');\n this.clearForm();\n } else {\n // Remove object references so the state does not mutate\n const selectedCollection = JSON.parse(JSON.stringify(this.state.collections[collectionIndex] || ''))\n if (selectedCollection.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) {\n alert(\"The watchlist you are trying to access is a paid watchlist. As a free user, you are no longer able to access this watchlist.\");\n return;\n }\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n let sessionOnly = false;\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n const queryObj = JSON.parse(decodedSearch);\n sessionOnly = queryObj.sessionOnly || false;\n }\n if (returningFromSearch || !parsed.q || sessionOnly)\n this.props.history.push(`/bill-management?collection=${selectedCollection.WatchListID}`)\n this.setState({\n selectedCollectionIndex: collectionIndex,\n selectedCollection: selectedCollection,\n showCategories: false,\n billList: parsed.q ? this.state.billList : [],\n searchMade: parsed.q ? this.state.searchMade : false,\n });\n if (returningFromSearch || !parsed.q || sessionOnly) {\n const bills = selectedCollection.WatchListLegislation.filter(l => !l.DeletionDate).map(l => l.LegislationID);\n if (bills.length > 0) {\n let legislationIds = [];\n for (let i = 0; i < bills.length; i++) {\n legislationIds.push({ LegislationId: bills[i] });\n }\n\n const params = {\n LegislationIDs: legislationIds,\n SessionID: this.state.selectedSession.SessionID\n }\n this.getBillsResults(params);\n }\n this.clearForm();\n }\n }\n }\n\n handleBillCheckbox(billIndex, e) {\n let checkedBills = [...this.state.checkedBills];\n let lastCheckedBill = this.state.lastCheckedBill;\n if (e.nativeEvent.shiftKey && this.state.lastCheckedBill !== -1) {\n checkedBills = checkedBills.fill(false);\n for (let i = 0; i < Math.abs(billIndex - this.state.lastCheckedBill); i++) {\n const index = this.state.lastCheckedBill + i * (billIndex - this.state.lastCheckedBill) / Math.abs(billIndex - this.state.lastCheckedBill);\n checkedBills[index] = true;\n }\n } else {\n lastCheckedBill = !checkedBills[billIndex] ? billIndex : this.state.lastCheckedBill;\n }\n checkedBills[billIndex] = !checkedBills[billIndex]\n this.setState({\n checkedBills: checkedBills,\n lastCheckedBill: lastCheckedBill\n });\n }\n\n toggleAllBills() {\n const opposite = !this.state.selectAllBills;\n let checkedBills = [...this.state.checkedBills];\n checkedBills = new Array(this.state.billList.length).fill(opposite);\n this.setState({\n selectAllBills: opposite,\n checkedBills: checkedBills,\n lastCheckedBill: -1\n });\n }\n\n handleEventChange(billIndex, events) {\n //The reason an array is not used here to contain all the organized events is because a bunch of components are calling this function at the same time.\n //Using the same object to contain all the organized events would cause the components to be overwriting eachother's changes.\n this.setState({\n [`organizedEvents${billIndex}`]: events\n }, () => {\n this.handleEditedBills();\n });\n }\n\n addEvent(eventDate, eventSequence, event) {\n this.state.billList.forEach((bill, billIndex) => {\n if (this.state.checkedBills[billIndex]) {\n bill.eventsChanged = true;\n let organizedEvents = this.state[`organizedEvents${billIndex}`] || BillHistoryForm.organizeEvents(bill.historyList || []);\n\n let newEvent = {\n ...event,\n IsPublic: true,\n LegislationID: bill.LegislationID,\n EventDate: eventDate,\n hasChanged: true\n };\n\n //Check to see if there is are events with the same date already\n const newEventGroupIndex = organizedEvents ? organizedEvents.findIndex(eventGroup => eventDate.toISOString().substring(0, 10) === moment(eventGroup.date).toISOString().substring(0, 10)) : -1;\n if (newEventGroupIndex > -1) {\n //Make sure DisplaySequence is handled first\n if (organizedEvents[newEventGroupIndex].events.find(e => !e.DisplaySequence)) {\n for (let i = 0; i < organizedEvents[newEventGroupIndex].events.length; i++) {\n if (!organizedEvents[newEventGroupIndex].events[i].DisplaySequence) {\n if (i === 0) {\n organizedEvents[newEventGroupIndex].events[i].DisplaySequence = 10;\n } else {\n organizedEvents[newEventGroupIndex].events[i].DisplaySequence = organizedEvents[newEventGroupIndex].events[i - 1].DisplaySequence % 10 === 0 ? (organizedEvents[newEventGroupIndex].events[i - 1].DisplaySequence + 10) : (Math.round(organizedEvents[newEventGroupIndex].events[i - 1].DisplaySequence / 10) * 10);\n }\n }\n }\n }\n // If the selected date already has events that occured on that date then the event is moved into the existing group\n // If a display sequence (e.g. 30) is provided AND it is not the largest display sequence in that group, put it at the provided spot, otherwise put it last\n if (Number.isInteger(eventSequence) && Math.max.apply(null, organizedEvents[newEventGroupIndex].events.map(o => o.DisplaySequence)) > eventSequence) {\n newEvent.DisplaySequence = eventSequence;\n let insertIdx;\n organizedEvents[newEventGroupIndex].events.forEach((evt, i) => {\n if (evt.DisplaySequence >= eventSequence) {\n if (!Number.isInteger(insertIdx)) {\n newEvent.Sequence = evt.Sequence;\n insertIdx = i;\n }\n evt.Sequence++;\n evt.hasChanged = true;\n }\n })\n organizedEvents[newEventGroupIndex].events.splice(insertIdx || 0, 0, newEvent)\n } else {\n newEvent.Sequence = organizedEvents[newEventGroupIndex].events.length + 1;\n newEvent.DisplaySequence = eventSequence || (organizedEvents[newEventGroupIndex].events[organizedEvents[newEventGroupIndex].events.length - 1].DisplaySequence % 10 === 0 ? (organizedEvents[newEventGroupIndex].events[organizedEvents[newEventGroupIndex].events.length - 1].DisplaySequence + 10) : (Math.round(organizedEvents[newEventGroupIndex].events[organizedEvents[newEventGroupIndex].events.length - 1].DisplaySequence / 10) * 10));\n organizedEvents[newEventGroupIndex].events.push(newEvent)\n }\n } else {\n // If the selected date does not have any events then a new event group needs to be created for this date\n newEvent.Sequence = 1;\n newEvent.DisplaySequence = 10;\n const newEventGroup = {\n date: eventDate,\n events: [newEvent]\n };\n // Gotta find where it goes in the list of groups\n organizedEvents.some((eventGroup, i) => {\n if (eventGroup.date.isAfter(eventDate, 'day')) {\n organizedEvents.splice(i, 0, newEventGroup)\n return true;\n }\n if (i === organizedEvents.length - 1) {\n organizedEvents.push(newEventGroup)\n }\n });\n }\n this.setState({\n [`organizedEvents${billIndex}`]: organizedEvents,\n [bill.LegislationID]: true\n }, () => {\n this.handleEditedBills();\n });\n }\n });\n }\n\n removeEvent(eventDate, event, displaySequence) {\n this.state.billList.forEach((bill, billIndex) => {\n if (this.state.checkedBills[billIndex]) {\n let organizedEvents = this.state[`organizedEvents${billIndex}`] || BillHistoryForm.organizeEvents(bill.historyList || []);\n organizedEvents.forEach((dateItem, dateItemIdx) => {\n if (moment(dateItem.date).isSame(eventDate, 'day')) {\n for (let i = 0; i < dateItem.events.length; i++) {\n let eventItem = dateItem.events[i];\n if (eventItem.EventCode === event.EventCode && !event.DeletionDate && (!displaySequence || displaySequence === eventItem.DisplaySequence)) {\n //if deleting an event that didn't already exist/hasn't been saved at all, just remove it entirely\n if (!eventItem.LegislationEventID) {\n //if there is only one event in this day, just remove the day\n if (dateItem.events.length === 1) {\n const wasLastEventGroup = dateItemIdx === organizedEvents.length - 1;\n organizedEvents.splice(dateItemIdx, 1);\n //if it was the last event day that got removed, expand the now-last event day\n if (wasLastEventGroup) {\n organizedEvents[organizedEvents.length - 1].hidden = false;\n }\n } else {\n //There is more than just this event in the day, only remove this event from the group and move on\n dateItem.events.splice(i, 1);\n\n //recalculate sequences of events\n for (let idx = i; idx < dateItem.events.length; idx++) {\n dateItem.events[idx].Sequence--\n }\n\n i--;\n }\n } else {\n //this event existed to begin with, we need to set the deletion date and save it\n eventItem.DeletionDate = moment().toISOString();\n eventItem.hasChanged = true;\n this.setState({ [bill.LegislationID]: true })\n }\n }\n }\n }\n });\n this.setState({\n [`organizedEvents${billIndex}`]: organizedEvents\n }, () => {\n this.handleEditedBills();\n });\n }\n });\n }\n\n handleEditedBills() {\n let bills = [...this.state.billList];\n bills.forEach((bill, billIndex) => {\n bill.eventsChanged = false;\n if (this.state[`organizedEvents${billIndex}`]) {\n this.state[`organizedEvents${billIndex}`].forEach(eventGroup => {\n //newly added events do not have legeventid; also encompasses initially deleted events that were un-deleted\n let newEvents = eventGroup.events.filter(event => !event.LegislationEventID || (event.hasChanged && !event.DeletionDate && event.originallyDeleted));\n if (newEvents.length) {\n //mark the bill as changed, and the events as newly added (how styling is handled)\n bill.eventsChanged = true;\n newEvents.forEach(evt => evt.isNewlyAdded = true);\n }\n\n //newly deleted events have a legeventid, deletion date, and hasChanged property without originallyDeleted\n let deletedEvents = eventGroup.events.filter(event => event.LegislationEventID && event.hasChanged && event.DeletionDate && !event.originallyDeleted);\n if (deletedEvents.length) {\n //mark the bill as changed, and the events as newly deleted (how styling is handled)\n bill.eventsChanged = true;\n deletedEvents.forEach(evt => evt.isNewlyDeleted = true);\n }\n\n //handle events that were initially deleted, then un-deleted, then re-deleted\n let reDeletedEvents = eventGroup.events.filter(event => event.LegislationEventID && event.hasChanged && event.DeletionDate && event.originallyDeleted);\n if (reDeletedEvents.length) {\n //do not mark the bill as changed - these were reverted; but do reset the events themselves\n reDeletedEvents.forEach(evt => evt.isNewlyAdded = false);\n }\n\n //for any events that are not deleted, mark as non deleted (important for resetting events that were deleted and then un-deleted)\n let nonDeletedEvents = eventGroup.events.filter(event => event.LegislationEventID && !event.DeletionDate);\n nonDeletedEvents.forEach(evt => evt.isNewlyDeleted = false);\n\n //date changed events\n let dateChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && event.origDate && !moment(event.origDate).isSame(moment(event.EventDate)));\n if (dateChangedEvents.length) {\n //mark the bill as changed, and the events as 'dateChanged'\n bill.eventsChanged = true;\n dateChangedEvents.forEach(evt => evt.dateChanged = true);\n }\n\n //for any events that are non-date-changed, mark as such (important for resetting events that were changed and then reverted)\n let nonDateChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && (!event.origDate || moment(event.origDate).isSame(event.EventDate)));\n nonDateChangedEvents.forEach(evt => evt.dateChanged = false);\n\n //sequence changed events\n let sequenceChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && event.origSequence && event.Sequence !== event.origSequence)\n if (sequenceChangedEvents.length) {\n //mark the bill as changed, and the events as 'sequenceChanged'\n bill.eventsChanged = true;\n sequenceChangedEvents.forEach(evt => evt.sequenceChanged = true);\n }\n\n //for any events that are non-sequence-changed, mark as such (important for resetting events that were changed and then reverted)\n let nonSequenceChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && (!event.origSequence || event.Sequence === event.origSequence));\n nonSequenceChangedEvents.forEach(evt => evt.sequenceChanged = false);\n\n //description changed events\n let descriptionChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && event.origDescription && event.Description !== event.origDescription)\n if (descriptionChangedEvents.length) {\n //mark the bill as changed, and the events as 'descriptionChanged'\n bill.eventsChanged = true;\n descriptionChangedEvents.forEach(evt => evt.descriptionChanged = true);\n }\n\n //for any events that are non-description-changed, mark as such (important for resetting events that were changed and then reverted)\n let nonDescriptionChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && (!event.origDescription || event.Description === event.origDescription));\n nonDescriptionChangedEvents.forEach(evt => evt.descriptionChanged = false);\n\n //event code changed events\n let eventCodeChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && event.origEventCode && event.EventCode !== event.origEventCode)\n if (eventCodeChangedEvents.length) {\n //mark the bill as changed, and the events as 'eventCodeChanged'\n bill.eventsChanged = true;\n eventCodeChangedEvents.forEach(evt => evt.eventCodeChanged = true);\n }\n\n //for any events that are non-event-code-changed, mark as such (important for resetting events that were changed and then reverted)\n let nonEventCodeChangedEvents = eventGroup.events.filter(event => event.LegislationEventID && (!event.origEventCode || event.EventCode === event.origEventCode));\n nonEventCodeChangedEvents.forEach(evt => evt.eventCodeChanged = false);\n })\n }\n });\n this.setState({ billList: bills });\n }\n\n saveForm() {\n let eventsToSave = [];\n this.state.billList.forEach((_bill, billIndex) => {\n if (this.state[`organizedEvents${billIndex}`]) {\n this.state[`organizedEvents${billIndex}`].forEach(eventGroup => {\n eventGroup.events.forEach(event => {\n //Only save events that have been changed\n if (event.hasChanged) {\n //Do not save the events that have been deleted and lack a event id. These events to do not need to be created\n if (!event.LegislationEventID && event.DeletionDate) {\n return\n } else {\n eventsToSave.push(event);\n }\n }\n })\n });\n }\n });\n if (eventsToSave.length > 0) {\n this.setState({\n isSaving: true\n });\n this.props.actions.saveBillEvent({ LegislationEvents: eventsToSave })\n .then(() => {\n this.props.actions.makeToast([{ message: \"Events Saved\", type: \"success\" }]);\n this.setState({\n historyIsLoaded: false,\n isSaving: false\n });\n // If there is a selected collection then do not do a search, just get those bills again\n if (this.state.selectedCollection) {\n this.selectCollection(this.state.selectedCollectionIndex)\n } else {\n this.handleSearch();\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Events Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false\n });\n });\n }\n }\n\n toggleSidebar() {\n this.setState({\n showSidebar: !this.state.showSidebar\n })\n }\n\n toggleShowData(billID, bool) {\n if (bool === undefined) {\n this.setState(prevState => ({\n [billID]: !prevState[billID]\n }));\n } else {\n //not just toggling, we're explicitly setting (e.g. if searching by keyword, and a bill has been expanded, if the keyword search location changes to bill text,\n //don't just toggle all (which would reset that bill to false), set them all to true)\n this.setState({\n [billID]: bool\n })\n }\n }\n\n togglehideAllEvents(idx) {\n let hideAllEvents = [...this.state.hideAllEvents]\n const hide = !hideAllEvents[idx];\n hideAllEvents[idx] = hide\n this.setState({\n hideAllEvents\n }, () => {\n if (!hide) {\n const lastEventGroup = document.getElementById(\"last-\" + idx);\n if (lastEventGroup) { lastEventGroup.scrollIntoView({ block: 'center' }); }\n }\n })\n }\n\n toggleModal() {\n this.setState({\n showModal: !this.state.showModal\n })\n }\n\n handleExcludeFailedChange() {\n this.setState({\n excludeFailed: !this.state.excludeFailed,\n showUpdateSearchButton: true\n })\n }\n\n toggleExpandAllLegislation(expand) {\n let billList = [...this.state.billList];\n billList.forEach(bill => {\n this.toggleShowData(bill.LegislationID, expand)\n })\n }\n\n render() {\n const { isFetching, sessionID, billList, showSidebar, height } = this.state;\n const { errorMessage } = this.props.bills;\n\n let toggleArrows = [];\n for (let i = 1; i <= height; i++) {\n let top = (i * 540).toString() + \"px\";\n toggleArrows.push(<button key={i} type=\"button\" aria-expanded={showSidebar} onClick={this.toggleSidebar} className={showSidebar ? \"sidebar-button arrow-up white-chevron\" : \"sidebar-button arrow-down white-chevron\"} style={{ top: top }}></button>);\n }\n\n return (\n <div id=\"results-div\">\n {this.state.showModal &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content\">\n <p>You will need to click the search button or press the enter key in order to update your search results after removing a search parameter.</p>\n <button className=\"button primary float-right\" onClick={() => this.toggleModal()}>Close</button>\n <br />\n </div>\n </div>\n }\n <h1>Bill Management</h1>\n <br />\n <div className={showSidebar ? \"inner-grid one-toggle-and-three\" : \"inner-grid toggle-and-three\"}>\n {showSidebar &&\n <div>\n <LegislationWatchlists\n collections={this.state.collections}\n isLoading={this.state.collectionIsLoading}\n error={this.props.collection.collectionError}\n selectedCollectionIndex={this.state.selectedCollectionIndex}\n selectCollection={this.selectCollection}\n createCollection={() => null}\n isCreatingCollection={this.state.isCreatingCollection}\n location={this.props.history.location.pathname}\n isBillManagement={true}\n isAuthor={true}\n />\n <br />\n <AdvancedSearchBox\n ref={this.searchBox}\n selectedBillNumbers={this.state.selectedBillNumbers}\n selectedBillRangeBeginning={this.state.selectedBillRangeBeginning}\n selectedBillRangeEnd={this.state.selectedBillRangeEnd}\n selectedChapterNumber={this.state.selectedChapterNumber}\n selectedKeywords={this.state.selectedKeywords}\n selectedBillEvent={this.state.selectedBillEvent}\n billEventOptions={this.state.billEventOptions}\n sessionOptions={this.state.sessionOptions}\n selectedSession={this.state.selectedSession}\n billStatusCategoryList={this.state.billStatusCategoryList}\n selectedBillStatusCategory={this.state.selectedBillStatusCategory}\n billStatusStartDate={this.state.billStatusStartDate}\n billStatusEndDate={this.state.billStatusEndDate}\n selectedCommittee={this.state.selectedCommittee}\n committeeList={this.state.filteredCommitteeList}\n subcommitteeList={this.state.subcommitteeList}\n selectedSubcommittee={this.state.selectedSubcommittee}\n patronList={this.state.filteredPatronList}\n patronRoles={this.state.patronRoles}\n selectedPatron={this.state.selectedPatron}\n selectedPatronType={this.state.selectedPatronType}\n selectedChamber={this.state.selectedChamber}\n selectedBillType={this.state.selectedBillType}\n billEventEndDate={this.state.billEventEndDate}\n billEventStartDate={this.state.billEventStartDate}\n resetUrl={this.resetUrl}\n handleSubmit={this.handleSubmit}\n handleTextChange={this.handleTextChange}\n handleSelectChange={this.handleSelectChange}\n handleDateChange={this.handleDateChange}\n committeeChange={this.committeeChange}\n chamberChange={this.chamberChange}\n sessionChange={this.sessionChange}\n clearForm={this.clearForm}\n isFetching={this.state.isFetching}\n handlePatronChange={this.handlePatronChange}\n handlePatronTypeChange={this.handlePatronTypeChange}\n subjectList={this.state.subjectList}\n selectedSubject={this.state.selectedSubject}\n toggleGroup={this.toggleGroup}\n billFieldset={this.state.billFieldset}\n keywordFieldset={this.state.keywordFieldset}\n statusFieldset={this.state.statusFieldset}\n activityFieldset={this.state.activityFieldset}\n membersFieldset={this.state.membersFieldset}\n committeesFieldset={this.state.committeesFieldset}\n subjectFieldset={this.state.subjectFieldset}\n showCategories={this.state.showCategories}\n toggleShowCategories={this.toggleShowCategories}\n location={this.props.history.location.pathname}\n billVersionList={this.state.billVersionList}\n selectedBillVersion={this.state.selectedBillVersion}\n billSummaryList={this.state.billSummaryList}\n selectedSummaryVersion={this.state.selectedSummaryVersion}\n selectedLocation={this.state.selectedLocation}\n billManagement={true}\n handleCurrentStatusChange={this.handleCurrentStatusChange}\n currentStatus={this.state.currentStatus}\n failedToGetSessions={this.state.failedToGetSessions}\n searchParam={this.props.history.location.search}\n handleExcludeFailedChange={this.handleExcludeFailedChange}\n excludeFailed={this.state.excludeFailed}\n showUpdateSearchButton={this.state.showUpdateSearchButton}\n />\n </div>\n }\n <div className={showSidebar ? \"management sidebar-toggle-open\" : \"management sidebar-toggle-closed\"} onClick={this.toggleSidebar}>\n {toggleArrows.map((a, i) => {\n return (a)\n })}\n </div>\n {this.state.failedToGetSessions ? <div className=\"center input-feedback\" style={{ fontSize: '1em' }}>Failed to retrieve sessions. Please refresh & try again.</div> : !this.state.selectedSession ? <div className=\"center-spinner spinner\">Loading...</div>\n :\n this.state.showCategories ?\n <BillCategories\n session={this.state.sessionOptions.find(session => session.SessionCode === this.props.nav.session)}\n patronList={this.state.patronList}\n committeeList={this.state.groupedCommitteeList}\n subjectList={this.state.subjectList}\n introDateList={this.state.introDateList}\n statusCategoriesList={this.state.billStatusCategoryList}\n isLoading={this.state.billStatusCategoryListIsLoading}\n history={this.props.history}\n location={this.props.history.location.pathname}\n selectedSession={this.state.selectedSession}\n excludeFailed={this.state.excludeFailed}\n />\n :\n <div className=\"public-list\">\n <CollectionControls\n searchMade={this.state.searchMade}\n collections={this.state.collections}\n selectedCollection={this.state.selectedCollection}\n selectedCollectionIndex={this.state.selectedCollectionIndex}\n handleCollectionChange={() => null}\n selectCollection={this.selectCollection}\n collectionIsSaving={this.state.collectionIsSaving}\n saveCollection={() => null}\n deleteCollection={() => null}\n calendarHeader={this.state.calendarHeader}\n isBillManagement={true}\n />\n {this.state.searchMade &&\n <SearchSelections\n currentStatus={this.state.currentStatus}\n selectedSession={this.state.selectedSession}\n selectedBillNumbers={this.state.selectedBillNumbers}\n selectedBillRangeBeginning={this.state.selectedBillRangeBeginning}\n selectedBillRangeEnd={this.state.selectedBillRangeEnd}\n selectedChapterNumber={this.state.selectedChapterNumber}\n selectedKeywords={this.state.selectedKeywords}\n selectedBillEvent={this.state.billEventOptions.find(opt => opt.value === this.state.selectedBillEvent)}\n selectedBillStatusCategory={this.state.billStatusCategoryList.find(opt => opt.value === this.state.selectedBillStatusCategory)}\n billStatusStartDate={this.state.billStatusStartDate}\n billStatusEndDate={this.state.billStatusEndDate}\n selectedCommittee={this.state.committeeList.find(opt => opt.value === this.state.selectedCommittee)}\n selectedSubcommittee={this.state.subcommitteeList.find(opt => opt.value === this.state.selectedSubcommittee)}\n selectedPatron={this.state.patronList.find(opt => opt.value === this.state.selectedPatron)}\n selectedPatronType={this.state.patronRoles.filter(role => this.state.selectedPatronType.includes(role.PatronTypeID))}\n selectedChamber={this.state.selectedChamber}\n billEventEndDate={this.state.billEventEndDate}\n billEventStartDate={this.state.billEventStartDate}\n selectedSubject={this.state.subjectList.find(opt => opt.value === this.state.selectedSubject)}\n excludeFailed={this.state.excludeFailed}\n handleSelectionClear={this.handleSelectionClear}\n handleMultiSelectionClear={this.handleMultiSelectionClear}\n updateSearch={this.state.showUpdateSearchButton ? this.searchBox.current.handleSubmit : null}\n />}\n <EventControls\n billEventOptions={this.state.billEventOptions}\n addEvent={this.addEvent}\n removeEvent={this.removeEvent}\n checkedBills={this.state.checkedBills}\n patronList={this.state.patronList}\n committeeList={this.state.fullCommitteeList}\n actionTypes={this.state.actionTypes}\n textList={this.state.billList.flatMap(bill => bill.versionsList ? [...bill.versionsList] : [])}\n otherBillEventOptions={this.state.otherBillEventOptions}\n getOtherBillEventOptions={this.getOtherBillEventOptions}\n />\n {!isFetching &&\n <div className=\"flex-row search-results-title-section\">\n {this.state.searchMade ?\n <>\n {this.state.allLegislation && <h2>All legislation</h2>}\n {this.state.mostFrequent && <h2>Most frequently accessed bills</h2>}\n {this.state.isPending && <h2>Pending bills</h2>}\n {!this.state.isPending && !this.state.mostFrequent && !this.state.allLegislation && <h2 style={{ marginBottom: '0px' }}>{billList.length === 0 && \"No \"}Search Results</h2>}\n </>\n : <div></div>}\n </div>\n }\n <div className=\"search-results\">\n {isFetching ?\n <div className=\"spinner\"></div>\n :\n <>\n {errorMessage ?\n <p className=\"message-error\">{errorMessage}</p>\n :\n null\n }\n </>\n }\n {!isFetching && !errorMessage &&\n <ul className=\"slidedown-list\">\n <div className=\"flex-row\">\n <div />\n <div>\n {billList.length ? <button className=\"button-link\" style={{ fontSize: '12px' }} onClick={() => this.toggleExpandAllLegislation(billList.find(bill => !this.state[bill.LegislationID]))}>{billList.find(bill => !this.state[bill.LegislationID]) ? \"Expand All Legislation\" : \"Collapse All Legislation\"}</button> : null}\n </div>\n </div>\n <div className='flex-row'>\n {billList.length ? <label htmlFor=\"sr-select-all\"\n className=\"txt-greyed\">\n <input id=\"sr-select-all\" checked={this.state.selectAllBills} onChange={this.toggleAllBills} type=\"checkbox\" style={{ verticalAlign: 'sub', marginRight: '10px' }} />\n Select all</label> : <label />}\n {!errorMessage && <span id=\"search-result-count\" className=\"txt-greyed\">{billList.length} {this.state.searchMade ? \"Result\" : \"Item\"}{billList.length !== 1 && \"s\"}</span>}\n </div>\n <hr className=\"faded-line\" style={{ marginBlockEnd: \"0px\" }} />\n {billList.map((bill, i) =>\n <BillInfoComponent\n key={i}\n bill={bill}\n billIndex={i}\n checked={this.state.checkedBills[i]}\n expanded={this.state[bill.LegislationID]}\n toggleShowData={this.toggleShowData}\n selectedCollection={this.state.selectedCollection}\n handleCollectionChange={() => null}\n billEvents={this.state.billEventOptions}\n handleBillCheckbox={e => this.handleBillCheckbox(i, e)}\n sessionCode={this.state.sessionOptions.find(session => session.SessionID === bill.SessionID).SessionCode}\n isBillManagement={true}\n selectedLocation={this.state.displaySelectedLocation}\n selectedKeywords={this.state.selectedKeywords}\n displayChapterNumber={this.state.selectedChapterNumber || (this.state.selectedBillStatusCategory && this.state.billStatusCategoryList.find(it => it.Name.toLowerCase() === \"acts of assembly chapters\") && this.state.selectedBillStatusCategory === this.state.billStatusCategoryList.find(it => it.Name.toLowerCase() === \"acts of assembly chapters\").LegislationCategoryID)}\n >\n <div style={{ fontSize: '16px' }}>\n <BillHistoryForm\n historyList={bill.historyList || []}\n organizedEvents={this.state[`organizedEvents${i}`] || []}\n handleEventChange={events => this.handleEventChange(i, events)}\n isBillManagement={true}\n billEvents={this.state.billEventOptions}\n billData={bill}\n idx={i}\n handleEditedBills={this.handleEditedBills}\n toggleEditContent={this.toggleEditContent}\n saveEvents={this.saveEvents}\n hideAllEvents={this.state.hideAllEvents[i]}\n togglehideAllEvents={this.togglehideAllEvents}\n versionsList={bill.versionsList}\n actionTypes={this.state.actionTypes}\n memberList={this.state.patronList}\n committeeList={this.state.fullCommitteeList}\n />\n </div>\n </BillInfoComponent>\n )}\n </ul>\n }\n </div>\n </div>\n }\n </div>\n {\n !this.state.showCategories &&\n <div className=\"floating-button-bar align-right invisible-bar\">\n <button type=\"button\" onClick={this.saveForm} disabled={!this.state.billList.find(b => b.eventsChanged) || this.state.isSaving} className=\"button\">{this.state.isSaving ? \"Saving...\" : \"Save\"}</button>\n </div>\n }\n </div>\n )\n }\n}\n\nconst PublicBillSearch = connect(\n (state) => {\n const { bills, session, members, committee, patrons, nav, collection, login, minutes } = state;\n return {\n bills,\n session,\n members,\n committee,\n patrons,\n nav,\n collection,\n login,\n minutes\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, committeeActionCreators, billActionCreators, sessionActionCreators, memberActionCreators, patronActionCreators, navActionCreators, collectionActionCreators, minutesActionCreators), dispatch)\n }\n }\n)(BillManagement)\n\nexport default PublicBillSearch;\n\n","import React from \"react\";\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport '../../../stylesheets/shared/react-table.css';\nimport moment from 'moment-timezone';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport DatePicker from \"react-datepicker\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { communicationsActionCreators } from '../../../stores/lis-communications-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { cancelRequest } from '../../../services/request.service';\n\nclass CommunicationsManagementGrid extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: true,\n selectedSession: [],\n selectedChamber: '',\n sessionOptions: [],\n chamberOptions: [\n { label: \"House\", value: \"H\" },\n { label: \"Senate\", value: \"S\" }\n ],\n commDate: moment(),\n commList: [],\n showCreateSuccess: false,\n };\n\n this.handleChamberChange = this.handleChamberChange.bind(this);\n this.handleSessionChange = this.handleSessionChange.bind(this);\n this.loadCommsList = this.loadCommsList.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n this.createComm = this.createComm.bind(this);\n this.deleteCommunication = this.deleteCommunication.bind(this);\n }\n\n handleChamberChange(value) {\n this.setState({\n selectedChamber: value\n }, () => {\n this.props.actions.toggleChamber(value);\n this.loadCommsList()\n });\n }\n\n handleSessionChange(value) {\n this.setState({\n selectedSession: value\n }, () => { this.loadCommsList() });\n }\n\n loadCommsList() {\n if (this.state.selectedChamber && this.state.selectedSession) {\n this.setState({ isLoaded: false });\n const commParams = '?sessionID=' + this.state.selectedSession.SessionID + '&chamberCode=' + this.state.selectedChamber.value + '&isPublic=false&communicationType=Floor';\n this.props.actions.getCommList(commParams, true)\n .then(() => {\n this.setState({\n isLoaded: true,\n commList: this.props.communications.commList\n });\n });\n }\n }\n\n handleDateChange(value) {\n this.setState({\n commDate: moment(value)\n });\n }\n\n createComm() {\n this.setState({ isAdding: true });\n\n let createObj = {\n CommunicationDate: this.state.commDate,\n IsPublic: false,\n ChamberCode: this.state.selectedChamber.value,\n CommunicationType: 'Floor',\n SessionID: this.state.selectedSession.SessionID,\n };\n\n this.props.actions.createComm({ CommunicationResponse: [createObj] })\n .then(() => {\n this.setState({ showCreateSuccess: true });\n this.loadCommsList();\n setTimeout(() => {\n this.setState({\n showCreateSuccess: false,\n createErrorMessage: '',\n isAdding: false\n })\n }, 3000);\n this.loadCommsList();\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n createErrorMessage: this.props.communications.commCreateError\n });\n setTimeout(() => {\n this.setState({\n showCreateSuccess: false,\n createErrorMessage: '',\n isAdding: false\n })\n }, 3000);\n this.loadCommsList();\n })\n }\n\n deleteCommunication(rowIndex) {\n this.setState({\n communicationBeingDeleted: rowIndex\n });\n // Before being able to delete the communication we need to get the mod dates. So get the communication\n this.props.actions.getComm('?communicationId=' + this.state.commList[rowIndex].CommunicationID, true)\n .then(() => {\n let communicationData = this.props.communications.commGet;\n // Now that we have the communication data add a deletion date then save it\n communicationData.DeletionDate = moment();\n return this.props.actions.saveComm({ CommunicationResponse: [communicationData] })\n }).then(() => {\n this.setState({\n showDeleteSuccess: true,\n communicationBeingDeleted: -1\n });\n this.loadCommsList();\n setTimeout(() => {\n this.setState({\n showDeleteSuccess: false\n })\n }, 3000);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n communicationBeingDeleted: -1,\n deleteFailureMessage: 'Communication failed to be deleted'\n });\n console.log(err)\n setTimeout(() => {\n this.setState({\n deleteFailureMessage: '',\n });\n }, 3000);\n });\n }\n\n componentDidMount() {\n //Get the list of active sessions for the session dropdown\n this.props.actions.getSessionShallowList(\"IsActive=true\")\n .then(() => {\n let sessionList = [...this.props.session.sessionShallowList];\n sessionList.forEach((session, index) => {\n session.label = session.SessionYear + ' ' + session.DisplayName;\n session.value = session.SessionID;\n if (session.IsDefault) {\n this.handleSessionChange(session);\n }\n });\n //set the default chamber to house or senate depending on the user's role\n let selectedChamber = '';\n\n //set the default chamber to house or senate depending on the user's role\n let disableChamberSelector = false;\n\n if (!this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\")) {\n //Find if the user is a house calendar editor, if so select house, otherwise select senate, and disable the chamber selector\n selectedChamber = this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseLegislationCommunicationsEditor\") ? this.state.chamberOptions.find(chamber => chamber.label === \"House\") : this.state.chamberOptions.find(chamber => chamber.label === \"Senate\");\n disableChamberSelector = true;\n }\n\n this.setState({\n sessionOptions: sessionList,\n selectedChamber: selectedChamber,\n disableChamberSelector: disableChamberSelector\n }, () => {\n //Load the list of communicationsand put them in the grid\n this.loadCommsList();\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n return (\n <div>\n <div className=\"header-half\">\n <h1>Communications Management</h1>\n {this.props.login.userClaims.claims.find(c => c.RoleName === \"Admin\") &&\n <div className=\"flex-row flex-vertical-center flex-end\">\n <a className=\"icon settings\" href=\"/configurations-management/communications\" />\n </div>\n }\n </div>\n\n <div className=\"toolbar minutes-toolbar dlas-forms\">\n <div>\n <Fields.Dropdown\n value={this.state.selectedChamber}\n options={this.state.chamberOptions}\n onChange={this.handleChamberChange}\n isDisabled={this.state.disableChamberSelector}\n />\n </div>\n <div>\n <Fields.Dropdown\n value={this.state.selectedSession}\n options={this.state.sessionOptions}\n onChange={this.handleSessionChange}\n />\n </div>\n </div>\n <ReactTable\n resizable={false}\n loading={!this.state.isLoaded}\n data={this.state.commList}\n ref={r => this.reactTable = r}\n columns={[\n {\n Header: \"Communications Date\",\n columns: [\n {\n Header: (\n <div className=\"dlas-forms datepicker-container\">\n {!this.state.showCreateSuccess &&\n <DatePicker\n id=\"commDate\"\n className=\"dnd-field\"\n selected={this.state.commDate}\n onChange={this.handleDateChange}\n placeholderText=\"Communications Date\"\n\n />\n }\n </div>\n ),\n headerClassName: \"header-insert\",\n accessor: \"CommunicationDate\",\n sortable: false,\n width: 200,\n Cell: row => <span>{moment(row.value).format('L')}</span>\n }\n ]\n },\n {\n Header: \"ID\",\n columns: [\n {\n Header: (<div></div>),\n headerClassName: \"header-insert\",\n accessor: \"CommunicationNumber\",\n sortable: false,\n width: 140,\n Cell: row => <span>{row.value}</span>\n }\n ]\n },\n {\n Header: \"Session\",\n columns: [\n {\n Header: (\n <div>\n {this.state.showCreateSuccess &&\n <span className=\"insert-message\">Communications created successfully!</span>\n }\n {this.state.createErrorMessage &&\n <span className=\"insert-message fail\">{this.state.createErrorMessage}</span>\n }\n {!this.state.createErrorMessage && !this.state.showCreateSuccess &&\n <span>{this.state.selectedSession.label}</span>\n }\n {this.state.showDeleteSuccess &&\n <span className=\"insert-message\">Communication was deleted successfully!</span>\n }\n {this.state.deleteFailureMessage &&\n <span className=\"insert-message fail\">{this.state.deleteFailureMessage}</span>\n }\n </div>\n ),\n headerClassName: \"header-insert-dropdown\",\n accessor: \"SessionID\",\n sortable: false,\n Cell: row => <span>{this.state.selectedSession.label}</span>\n }\n ]\n },\n {\n Header: 'Actions',\n headerClassName: \"submit-action\",\n sortable: false,\n filterable: false,\n columns: [\n {\n Header: () => this.state.isAdding ?\n <span><button className=\"button\" onClick={this.createComm} disabled={true}>Adding...</button></span>\n :\n <span><button className=\"button\" onClick={this.createComm} disabled={!this.state.commDate || !this.state.selectedChamber || !this.state.selectedSession}>Create</button></span>\n ,\n headerClassName: \"header-action\",\n accessor: \"action\",\n sortable: false,\n className: \"action-column\",\n width: 90,\n Cell: row => {\n return (\n <div className=\"committee-action-column-two\">\n <Link to={`/communications-management/edit-communication/${row.original.CommunicationID}`} className=\"icon edit\"></Link>\n {row.original.IsPublic ?\n <Link target=\"_blank\" to={`/session-details/${this.state.selectedSession.SessionCode}/communications/${row.original.ReferenceNumber}`} className=\"icon book\"></Link>\n :\n <span onClick={() => this.deleteCommunication(row.index)} className=\"icon delete\"></span>\n }\n </div>\n )\n }\n }\n ]\n }\n ]}\n defaultPageSize={15}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight\"\n />\n </div>\n )\n\n }\n}\n\nexport default connect(\n (state) => {\n const { session, communications, login } = state;\n return {\n session,\n communications,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, communicationsActionCreators, authActionCreators), dispatch)\n }\n }\n)(CommunicationsManagementGrid)","export default __webpack_public_path__ + \"static/media/houseclerk_paulnardo.489d8f4a.png\";","import React from 'react';\nimport moment from 'moment-timezone'\nimport { Link } from 'react-router-dom';\nimport houseSig from '../../images/houseclerk_paulnardo.png';\nimport senateSig from '../../images/senateclerk_susanclarkeschaar.png';\n\nimport renderHTML from 'react-render-html';\n\nconst Communication = props => {\n //Only display the legislation that is marked as active\n const onlyActive = props.comm.CommunicationLegislation.filter(leg => leg.IsActive);\n const legList = onlyActive.map(leg => {\n leg.ChamberCode = leg.ChamberCode ?? leg.LegislationNumber[0];\n leg.Patrons?.sort((a, b) => a.ChamberCode !== b.ChamberCode ? a.ChamberCode !== leg.ChamberCode ? 1 : -1 : a.Sequence - b.Sequence || a.PatronTypeID - b.PatronTypeID || a.PatronDisplayName.localeCompare(b.PatronDisplayName));\n const patronList = leg.Patrons?.map((patron, patronIndex) => {\n let sameAsPrevious = patronIndex === 0 ? true : (!leg.Patrons[patronIndex - 1] && patron.ChamberCode === leg.ChamberCode && !leg.Patrons.find(p => p.ChamberCode !== leg.ChamberCode)) || (leg.Patrons[patronIndex - 1] && patron.ChamberCode === leg.Patrons[patronIndex - 1].ChamberCode);\n let sameAsNext = leg.Patrons[patronIndex + 1] && patron.ChamberCode === leg.Patrons[patronIndex + 1].ChamberCode;\n let patronDisplayName = patron.PatronDisplayName\n\n return (\n <React.Fragment key={patronIndex}>\n {patron.ChamberCode !== leg.ChamberCode\n ? patronIndex !== leg.Patrons.length - 1\n ? leg.ChamberCode === \"S\"\n ? !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Delegates: \" + patronDisplayName + \", \" : sameAsNext ? patronDisplayName + \", \" : patronDisplayName\n : !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Senators: \" + patronDisplayName + \", \" : sameAsNext ? patronDisplayName + \", \" : patronDisplayName\n : leg.ChamberCode === \"S\"\n ? !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Delegate: \" + patronDisplayName : patronDisplayName\n : !sameAsPrevious ? (patronIndex !== 0 ? \"; \" : \"\") + \"Senator: \" + patronDisplayName : patronDisplayName\n : sameAsNext\n ? patronDisplayName + \", \" : patronDisplayName\n }\n </React.Fragment>\n )\n })\n\n\n let legNumber = leg.LegislationNumber;\n //Add dots in between the characters because that is how they want it displayed\n const billType = legNumber.slice(0, 2);\n const numbers = legNumber.slice(2);\n legNumber = billType.split('').map(char => {\n char += '.'\n // Senate Joint and House Joint Resolutions are displayed as 'H.J.R.' and 'S.J.R.' on this page rather than 'HJ' and 'SJ'\n // If the bill has a 'J' in the bill number then it is a joint resolution\n if (char === 'J.') {\n char += 'R.'\n }\n return char;\n }).join('');\n legNumber += ' ' + numbers;\n\n let billLink = '<strong><a className=\"bill-number\" target=\"_blank\" href=/bill-details/' + props.session.SessionCode + '/' + leg.LegislationNumber + '>' + legNumber + '</a></strong>';\n let draftTitle = leg.DraftTitle;\n\n if (draftTitle && draftTitle.indexOf(\"<p class=ldtitle>\") > -1) {\n draftTitle = draftTitle.slice(0, 17) + billLink + \" \" + draftTitle.slice(17, draftTitle.length + 1)\n }\n else if (draftTitle && draftTitle.indexOf(\"<p class=ldtitle>\") == -1) {\n draftTitle = \"<p class=ldtitle>\" + billLink + \" \" + draftTitle + \"</p>\"\n }\n\n const removeLDNum = (draftTitle) => draftTitle.replace(/<p class=ldrt>\\d+D<\\/p>/, \"\");\n\n return (\n <div key={leg.LegislationNumber}>\n <div className=\"list-desc\">\n <div>\n <div className=\"comm-leg-wrapper\">\n {!draftTitle &&\n <strong>\n <Link className=\"bill-number\" target=\"_blank\" to={`/bill-details/${props.session.SessionCode}/${leg.LegislationNumber}`}>{legNumber}</Link>\n </strong>\n }\n {draftTitle && draftTitle.indexOf(billLink) < 0 &&\n <strong>\n <Link className=\"bill-number\" target=\"_blank\" to={`/bill-details/${props.session.SessionCode}/${leg.LegislationNumber}`}>{legNumber}</Link>\n {\" \"}\n </strong>\n }\n {draftTitle &&\n renderHTML(removeLDNum(draftTitle))\n }\n </div>\n </div>\n <div>\n <p>{leg.EffectiveType === \"Emergency\" && \"EMERGENCY\"}</p>\n </div>\n <div>\n <p>{leg.Patrons?.length > 1 ? 'Patrons' : 'Patron'} - {patronList}</p>\n </div>\n </div>\n </div>\n );\n });\n if (legList.length > 0) {\n const categoryStyle = {\n fontSize: '18px',\n color: '#315981'\n }\n return (\n <div>\n <br />\n {props.comm.Description ? <p style={categoryStyle}>{props.comm.Description}</p> :\n <React.Fragment>\n {legList.length === 1 ?\n <p style={categoryStyle}>{props.comm.CategoryDescription}</p>\n :\n <p style={categoryStyle}>{props.comm.PluralDescription}</p>\n }\n </React.Fragment>\n }\n {legList}\n </div>\n );\n } else {\n return false;\n }\n}\n\nclass CommunicationsDetailsComponent extends React.Component {\n\n render() {\n const { session, communication, refNum, authoring } = this.props;\n const chamberCode = communication.ChamberCode;\n const referenceNumber = refNum || communication.ReferenceNumber;\n const date = communication.CommunicationDate;\n const categories = communication.CommunicationCategories || [];\n\n const committeeHeader = \"In the \" + (chamberCode === \"S\" ? \"Senate\" : \"House of Delegates\");\n const sessionHeader = session.SessionYear + \" \" + session.DisplayName;\n const floatRightStyle = {\n float: 'right'\n };\n return (\n <div className=\"bill-theme public-details inner-grid\">\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <hr />\n <div className='details-page-data-container'>\n <div className=\"communication-header-container\">\n <p>{referenceNumber}</p>\n <div style={floatRightStyle}>\n <p className=\"float-right\">{committeeHeader}</p>\n <p>{moment(date).format(\"MMMM DD, YYYY\")}</p>\n </div>\n </div>\n <div>\n {categories.length > 0 && categories.map(comm => <Communication key={comm.CommunicationCategoryID} comm={comm} session={session} />)}\n </div>\n <br />\n <div className=\"list-desc\">\n <p>{communication.ShowSignatureNote ? communication.FooterSentence : <pre> </pre>}</p>\n </div>\n <div className=\"list-desc align-right\">\n {authoring &&\n <div style={{ width: \"100%\", height: \"105px\" }}>\n {chamberCode === \"H\"\n /* Get image sizes from images themselves and set height/width */\n ? <img style={{ width: \"394px\", height: \"104px\", float: \"right\", WebkitPrintColorAdjust: \"exact\" }} src={houseSig} />\n : <img style={{ width: \"393px\", height: \"86px\", float: \"right\", WebkitPrintColorAdjust: \"exact\" }} src={senateSig} />\n }\n </div>\n }\n <p>{communication.ClerkName}</p>\n <p>{communication.ClerkTitle}</p>\n </div>\n </div>\n </div>\n )\n }\n}\n\nexport default CommunicationsDetailsComponent;\n","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport Select from 'react-select';\nimport ReactTooltip from 'react-tooltip';\nimport renderHTML from 'react-render-html';\nimport { Link } from 'react-router-dom';\nimport { Editor } from '@tinymce/tinymce-react';\nimport stripTags from \"striptags\";\n\nclass BillsGrid extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectAllActive: false,\n selectAllInactive: false,\n newDescriptions: [],\n lastCheckedBills: [],\n textHeight: []\n };\n this.toggleSelectAll = this.toggleSelectAll.bind(this);\n this.toggleRow = this.toggleRow.bind(this);\n this.toggleBill = this.toggleBill.bind(this);\n this.toggleEditCategoryDescription = this.toggleEditCategoryDescription.bind(this);\n this.handleDescriptionChange = this.handleDescriptionChange.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleTitleChange = this.handleTitleChange.bind(this);\n }\n\n componentDidMount() {\n this.props.organizedComms.forEach((_, index) => {\n this.getCommunicationCategoryHeight(index)\n })\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.organizedComms.map(c => c.CategoryCode) !== prevProps.organizedComms.map(c => c.CategoryCode)) {\n this.props.organizedComms.forEach((_, index) => {\n this.getCommunicationCategoryHeight(index)\n })\n }\n }\n\n toggleSelectAll(categoryIndex) {\n let organizedComms = [...this.props.organizedComms];\n const opposite = !organizedComms[categoryIndex].selectAll;\n organizedComms[categoryIndex].selectAll = opposite\n organizedComms[categoryIndex].CommunicationLegislation.forEach(leg => leg.checked = opposite);\n this.props.updateAgenda(organizedComms);\n\n let lastCheckedBills = this.state.lastCheckedBills;\n lastCheckedBills[categoryIndex] = -1;\n this.setState({\n lastCheckedBills: lastCheckedBills\n });\n }\n\n toggleRow(categoryIndex, itemIndex, e) {\n let organizedComms = [...this.props.organizedComms];\n let lastCheckedBills = this.state.lastCheckedBills;\n let lastCheckedBill = lastCheckedBills[categoryIndex];\n if (e.nativeEvent.shiftKey && !isNaN(lastCheckedBill) && lastCheckedBill !== -1) {\n organizedComms[categoryIndex].CommunicationLegislation.forEach(item => item.checked = false);\n for (let i = 0; i < Math.abs(itemIndex - lastCheckedBill); i++) {\n const index = lastCheckedBill + i * (itemIndex - lastCheckedBill) / Math.abs(itemIndex - lastCheckedBill);\n organizedComms[categoryIndex].CommunicationLegislation[index].checked = true;\n }\n } else {\n lastCheckedBill = itemIndex;\n }\n organizedComms[categoryIndex].CommunicationLegislation[itemIndex].checked = !organizedComms[categoryIndex].CommunicationLegislation[itemIndex].checked;\n this.props.updateAgenda(organizedComms);\n\n lastCheckedBills[categoryIndex] = lastCheckedBill;\n this.setState({\n lastCheckedBills: lastCheckedBills\n });\n }\n\n toggleBill(categoryIndex, itemIndex) {\n let organizedComms = [...this.props.organizedComms];\n organizedComms[categoryIndex].CommunicationLegislation[itemIndex].IsActive = !organizedComms[categoryIndex].CommunicationLegislation[itemIndex].IsActive;\n organizedComms[categoryIndex].CommunicationLegislation[itemIndex].checked = false;\n this.props.updateAgenda(organizedComms, true);\n }\n\n toggleBillBulk(activate, categoryIndex) {\n let organizedComms = [...this.props.organizedComms];\n organizedComms[categoryIndex].selectAll = false;\n organizedComms[categoryIndex].CommunicationLegislation.forEach(leg => {\n if (leg.checked) {\n leg.IsActive = activate;\n leg.checked = false;\n }\n });\n this.props.updateAgenda(organizedComms, true);\n }\n\n toggleEditCategoryDescription(categoryIndex, save) {\n const categories = [...this.props.organizedComms];\n let category = categories.filter(c => !c.DeletionDate)[categoryIndex];\n category.editing = !category.editing;\n if (save) {\n category.Description = category.tempDescription;\n } else {\n category.tempDescription = category.Description || (category.CommunicationLegislation.filter(leg => leg.IsActive).length > 1 ? category.PluralDescription : category.CategoryDescription);\n }\n this.props.updateAgenda(categories, save);\n }\n\n handleDescriptionChange(categoryIndex, val) {\n let organizedComms = [...this.props.organizedComms];\n organizedComms[categoryIndex].tempDescription = val;\n this.props.updateAgenda(organizedComms);\n }\n\n handleTitleChange(categoryIndex, itemIndex, value) {\n let organizedComms = [...this.props.organizedComms];\n organizedComms[categoryIndex].CommunicationLegislation[itemIndex].newDraftTitle = stripTags(value);\n this.props.updateAgenda(organizedComms);\n }\n\n getCommunicationCategoryHeight(category) {\n const el = document.getElementsByClassName(\"category-description-\" + category);\n if (el && el.length) {\n //setting the overflow to scroll is used to accommodate firefox \n //from firefox documentation: \"When an element's content does not generate a vertical scrollbar, then its scrollHeight property is equal to its clientHeight property.\"\n const initialOverflow = el[0].style.overflow;\n el[0].style.overflow = \"scroll\";\n el[0].style.height = el[0].scrollHeight + \"px\";\n el[0].style.overflow = initialOverflow;\n }\n }\n\n toggleEdit(categoryIndex, agendaIndex) {\n let categories = [...this.props.organizedComms];\n //This key is used to tell the DOM whether to display an input or a span\n categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].isEditing = !categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].isEditing;\n //Create a key called newDraftTitle that will hold the text that the user types in\n categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].newDraftTitle = categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].DraftTitle;\n this.props.updateAgenda(categories);\n }\n\n handleChange(categoryIndex, agendaIndex, e) {\n let textHeight = [...this.state.textHeight];\n\n //Init the nested height value if undefined at the category or agenda index\n if (!textHeight[categoryIndex]) {\n textHeight[categoryIndex] = {};\n textHeight[categoryIndex].CommunicationLegislation = [];\n textHeight[categoryIndex].CommunicationLegislation[agendaIndex] = {};\n textHeight[categoryIndex].CommunicationLegislation[agendaIndex].height = '70px';\n } else if (!textHeight[categoryIndex].CommunicationLegislation[agendaIndex]) {\n textHeight[categoryIndex].CommunicationLegislation[agendaIndex] = {};\n textHeight[categoryIndex].CommunicationLegislation[agendaIndex].height = '70px';\n }\n\n let height = (Math.round(e.target.value.length / 95) * 20 + 40) || 70;\n\n textHeight[categoryIndex].CommunicationLegislation[agendaIndex].height = height.toString() + \"px\";\n\n let categories = [...this.props.organizedComms];\n\n categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].newDraftTitle = e.target.value;\n\n this.props.updateAgenda(categories);\n\n this.setState({\n textHeight: textHeight\n })\n }\n\n saveChange(categoryIndex, agendaIndex) {\n //Turn input back into span\n let categories = [...this.props.organizedComms];\n categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].isEditing = false;\n //Set description to the text that the user has typed in. If new description is null then set it to the current description\n categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].DraftTitle = categories.filter(c => !c.DeletionDate)[categoryIndex].CommunicationLegislation[agendaIndex].newDraftTitle;\n this.props.updateAgenda(categories, true);\n }\n\n render() {\n // The button will read 'Add' if the bill is not already part of a category. The button will read 'Move' if it is already part of a category.\n const billButtonText = (index) => {\n let billExists = false;\n if (this.props.selectedBill[index]) {\n this.props.organizedComms.some(category => {\n if (category.CommunicationLegislation.findIndex(bill => bill.LegislationID === this.props.selectedBill[index].LegislationID) >= 0) {\n billExists = true;\n return true;\n }\n });\n if (billExists) {\n return (\"Move\");\n }\n }\n return (\"Add\");\n }\n\n const customFilter = (option, searchText) => {\n // regex that matches all zeros and white space that is preceded by two letters (e.g. SC) and followed by a group of numbers.\n // The purpose is to remove all leading zeros and white space from the user types in and the option label\n try {\n const regexp = new RegExp(\"(?<=[a-z]{2})[0\\s]+(?=[1-9][0-9]*)\", \"ig\")\n const newLabel = option.label.toLowerCase().replace(regexp, \"\");\n const newSearchText = searchText.toLowerCase().replace(regexp, \"\");\n if (option.label.toLowerCase().includes(searchText.toLowerCase()) || newLabel.includes(newSearchText)) {\n return true;\n }\n }\n catch (e) {\n // Safari does not allow lookback regex (i.e. the '?<=' above), so we must handle it differently\n // however, the below code will remove trailing zeros (i.e. searching 'HC11' will filter both 'HC0011' and 'HC1001'), so we want to at least try the above code first\n if (e instanceof SyntaxError) {\n const regexp = new RegExp(\"(?![a-z]{2})[0\\s]+(?=[1-9][0-9]*)\", \"ig\")\n const newLabel = option.label.toLowerCase().replace(regexp, \"\");\n const newSearchText = searchText.toLowerCase().replace(regexp, \"\");\n if (option.label.toLowerCase().includes(searchText.toLowerCase()) || newLabel.includes(newSearchText)) {\n return true;\n }\n } else {\n console.log(e.message)\n }\n }\n };\n\n const removeLDNum = (draftTitle) => draftTitle.replace(/<p class=ldrt>\\d+D<\\/p>/, \"\");\n\n return (\n <div className=\"drag-container\">\n <div className=\"align-right grid-wrapper eight-and-one\" style={{ alignItems: 'end' }}>\n <Select\n className=\"grid-selector-dropdown inline-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n options={this.props.communicationCategories}\n value={this.props.selectedCategory}\n onChange={this.props.changeCategoryDropdown}\n styles={{ menu: provided => ({ ...provided, whiteSpace: 'nowrap', right: '0', zIndex: 3 }), option: provided => ({ ...provided, whiteSpace: 'pre-wrap', overflow: 'hidden', textOverflow: 'ellipsis', borderBottom: '1px solid #DDD' }) }}\n getOptionLabel={(option) => option.CategoryCode + \": \" + option.label}\n filterOption={customFilter}\n />\n <button type=\"button\" className=\"button m-left\" disabled={!this.props.selectedCategory} onClick={this.props.addCategory}>Add Category</button>\n </div>\n <div style={{ marginTop: 15 }}>\n <div className=\"bill-grid communications-category-grid\">\n <div className=\"bill-grid-header\">\n <span></span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Bill #</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Document Label</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Patron</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Draft Title</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Status</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Action</span>\n </div>\n </div>\n <div>\n {this.props.organizedComms.sort((a, b) => a.Sequence - b.Sequence).map((category, categoryIndex) =>\n <div>\n <form key={categoryIndex}>\n <div className=\"bill-grid communications-category-grid communications-category-grid-header\">\n <div>\n <button onClick={() => this.props.toggleHideCategory(categoryIndex)} type=\"button\" className={`${this.props.hideCategories[categoryIndex] ? \"arrow-down\" : \"arrow-up\"}`}></button>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={category.selectAll || ''}\n onChange={() => this.toggleSelectAll(categoryIndex)}\n />\n </div>\n <div>\n <span>\n {category.editing ?\n <React.Fragment>\n <textarea\n className={`category-description-${categoryIndex}`}\n style={{ width: '90%', fontSize: '0.9em' }}\n type=\"text\"\n onChange={(e) => this.handleDescriptionChange(categoryIndex, e.target.value)}\n value={category.tempDescription}\n />\n <a className=\"icon save\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex, true)} />\n <a className=\"icon delete\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex)} />\n </React.Fragment>\n :\n <React.Fragment>\n <b>{category.CategoryCode + \": \" + (category.Description ? category.Description : category.CommunicationLegislation.filter(leg => leg.IsActive).length > 1 ? category.PluralDescription : category.CategoryDescription)}</b>\n <a className=\"icon edit\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditCategoryDescription(categoryIndex)} />\n </React.Fragment>\n }\n </span>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(false, categoryIndex)}>Exclude Selected</button>\n </div>\n <div>\n <button type=\"button\" className=\"button small-button\" onClick={() => this.toggleBillBulk(true, categoryIndex)}>Include Selected</button>\n </div>\n <div />\n <div />\n </div>\n {!this.props.hideCategories[categoryIndex] && <div className=\"bill-grid communications-category-grid\">\n <div></div>\n <div>\n <Select\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n options={this.props.billList}\n onChange={(value) => this.props.changeBillDropdown(categoryIndex, value)}\n value={this.props.selectedBill[categoryIndex]}\n styles={{ menu: provided => ({ ...provided, zIndex: 3 }) }}\n filterOption={(bill, inputValue) => {\n if (category.CommunicationLegislation.findIndex(agenda => agenda.LegislationID === bill.value) < 0) {\n return bill.label.toLowerCase().includes(inputValue.toLowerCase());\n } else { return false; }\n }}\n />\n </div>\n <div className=\"center\">\n <button\n className=\"button\"\n type=\"button\"\n disabled={!this.props.selectedBill[categoryIndex]}\n onClick={() => this.props.addBill(categoryIndex)}>\n {billButtonText(categoryIndex)}\n </button>\n </div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n }\n {\n !this.props.hideCategories[categoryIndex] && category.CommunicationLegislation.sort((a, b) => a.LegislationNumber.localeCompare(b.LegislationNumber, 'en', { numeric: true })).map((item, itemIndex) => {\n const showNewIndicator = !item.CommunicationLegislationID && category.CommunicationCategoryID;\n const existsInMultipleCategories = this.props.organizedComms.find(c => c.CommunicationCategoryTypeID !== category.CommunicationCategoryTypeID && c.CommunicationLegislation.find(a => a.LegislationNumber === item.LegislationNumber));\n return (\n <div style={!item.IsActive ? { color: '#8b8b8b' } : {}} className=\"bill-grid communications-category-grid\" key={itemIndex}>\n <React.Fragment>\n <div>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n checked={item.checked || ''}\n onChange={e => this.toggleRow(categoryIndex, itemIndex, e)} />\n </div>\n <div className=\"new-container\">\n {existsInMultipleCategories &&\n <React.Fragment>\n <i data-tip=\"This legislation exists in multiple categories.\" className={`icon notification communication-authoring${showNewIndicator ? ' new' : ''}`} />\n <ReactTooltip key={new Date()} />\n </React.Fragment>\n }\n <Link to={`/bill-details/${this.props.sessionCode}/${item.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\" style={!item.IsActive ? { color: 'inherit' } : {}}>{item.LegislationNumber}</Link>\n {showNewIndicator && <span className='corner-new'>NEW</span>}\n {!item.IsCandidate && <i data-tip=\"This legislation is not currently a candidate for this category.\" className={`icon notification non-candidate communication-authoring${showNewIndicator ? ' new' : ''}${existsInMultipleCategories ? ' duplicate' : ''}`} />}\n <ReactTooltip />\n </div>\n <div>\n <span>{item.DocumentCode}</span>\n </div>\n <div>\n <span>{item.Patrons && item.Patrons[0] && item.Patrons[0].PatronDisplayName}</span>\n </div>\n <div>\n <div className=\"flex-row\" style={{ display: 'flex' }}>\n <div className=\"flex-row flex-vertical-center\" style={{ width: \"100%\", display: \"inline-flex\" }}>\n {item.isEditing ?\n <Editor\n init={{\n inline: true,\n toolbar: false,\n menubar: false\n }}\n onEditorChange={(content) => this.handleTitleChange(categoryIndex, itemIndex, content)}\n value={item.newDraftTitle}\n />\n :\n <span>{renderHTML(item.Description ? item.Description : item.newDraftTitle ? removeLDNum(item.newDraftTitle) : item.DraftTitle ? removeLDNum(item.DraftTitle) : \"\")}</span>}\n </div>\n {(item.isEditing || (!item.Description && item.DraftTitle)) &&\n <React.Fragment>\n <div className=\"bill-grid-actions\">\n {item.isEditing\n ?\n <div className=\"bill-grid-actions\" style={{ display: \"inline-flex\" }}>\n <button onClick={() => this.saveChange(categoryIndex, itemIndex)} type=\"button\" className=\"icon save float-right\"></button>\n <button onClick={() => this.toggleEdit(categoryIndex, itemIndex)} type=\"button\" className=\"icon delete float-right\"></button>\n </div>\n :\n <div className=\"bill-grid-actions\">\n {/*Allow edit if the item IsActive*/}\n {item.IsActive &&\n <button onClick={() => this.toggleEdit(categoryIndex, itemIndex)} type=\"button\" className=\"icon edit float-right\"></button>\n }\n </div>\n }\n </div>\n </React.Fragment>\n }\n </div>\n </div>\n <div>\n <span className={item.IsActive ? 'message-success' : ''}>{item.IsActive ? 'Included' : 'Not Included'}</span>\n </div>\n <div className=\"communication-bill-grid-actions\">\n <div className=\"toggle-switch\" onClick={() => this.toggleBill(categoryIndex, itemIndex)}>\n <input id=\"sr-status-change\" checked={item.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n </React.Fragment>\n </div>\n )\n }\n )\n }\n </form>\n </div>\n )}\n </div>\n </div>\n </div >\n );\n }\n}\n\nexport default BillsGrid;","import React from 'react';\nimport ReactToPrint from \"react-to-print\";\nimport CommunicationsDetailsComponent from '../../../lis-shared/lis-communications/lis-communications-details';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport { communicationsActionCreators } from '../../../stores/lis-communications-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport BillsGrid from './lis-bills-grid';\nimport { cancelRequest } from '../../../services/request.service';\nimport DatePicker from 'react-datepicker';\nimport moment from 'moment-timezone';\nimport { personnelActionCreators } from '../../../stores/lis-personnel-store';\nimport { Prompt } from 'react-router';\nconst PUBLISH_COMM = true;\nconst SAVE_COMM = false;\nlet abortController = null;\n\nclass CommunicationsForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n communicationCategories: [],\n organizedComms: [],\n hideCategories: [],\n commGet: '',\n isLoaded: false,\n errorMessage: '',\n isSaving: false,\n pendingSave: true,\n showPreview: false,\n selectedCategory: '',\n selectedBill: [],\n billList: [],\n referenceNumber: '',\n failedToJoinBills: [],\n isDirty: false,\n isDoubleSided: false\n };\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.updateAgenda = this.updateAgenda.bind(this);\n this.changeCategoryDropdown = this.changeCategoryDropdown.bind(this);\n this.addCategory = this.addCategory.bind(this);\n this.changeBillDropdown = this.changeBillDropdown.bind(this);\n this.addBill = this.addBill.bind(this);\n\n this.togglePreview = this.togglePreview.bind(this);\n this.saveComm = this.saveComm.bind(this);\n this.genCommDoc = this.genCommDoc.bind(this);\n this.hasSelectedBills = this.hasSelectedBills.bind(this);\n this.hasIncludedBills = this.hasIncludedBills.bind(this);\n this.toggleShowSignatureNote = this.toggleShowSignatureNote.bind(this);\n this.includeAll = this.includeAll.bind(this);\n this.validateCommunicationNumber = this.validateCommunicationNumber.bind(this);\n this.toggleHideCategory = this.toggleHideCategory.bind(this);\n this.toggleIsDoubleSided = this.toggleIsDoubleSided.bind(this);\n }\n\n toggleHideCategory(catIndex) {\n let hideCategories = this.state.hideCategories;\n hideCategories[catIndex] = !hideCategories[catIndex]\n this.setState({\n hideCategories: hideCategories\n });\n }\n\n handleInputChange(key, val) {\n let commGet = { ...this.state.commGet };\n commGet[key] = val;\n this.setState({\n commGet: commGet,\n isDirty: true\n }, () => {\n this.validateCommunicationNumber();\n //Update ref number with new comm date and comm number\n const data = this.state.commGet;\n let newReferenceNumber = data.ChamberCode + 'N';\n newReferenceNumber += data.CommunicationNumber.toString();\n let formattedDate = moment(data.CommunicationDate).format('MMDD');\n newReferenceNumber += formattedDate;\n this.setState({\n referenceNumber: newReferenceNumber\n });\n });\n }\n\n updateAgenda(organizedComms, saveRequired) {\n this.setState({\n organizedComms: organizedComms,\n isDirty: true,\n pendingSave: saveRequired === undefined ? this.state.pendingSave : saveRequired\n });\n }\n\n togglePreview() {\n this.setState(state => ({\n showPreview: !state.showPreview\n }));\n }\n\n saveComm(publishing) {\n if (!this.state.commGet.CommunicationNumber) {\n return;\n }\n this.setState({ isSaving: true });\n let commSave = { ...this.state.commGet };\n commSave.CommunicationCategories = this.state.organizedComms;\n commSave.ReferenceNumber = this.state.referenceNumber || commSave.ReferenceNumber;\n //Set whether it should be published or not. The published value depends on what button the user clicked\n commSave.IsPublic = publishing;\n this.props.actions.saveComm({ CommunicationResponse: [commSave] })\n .then(failureMessage => {\n if (publishing) {\n const commId = this.props.communications.commSave.CommunicationID;\n this.props.actions.saveCommFile(\"?communicationID=\" + commId);\n //Communications cannot be edited once published so send the user back to the grid\n this.props.history.push('/communications-management');\n } else {\n //If the form was not published then get the new mod dates and update the React state variables\n const commSave = { ...this.props.communications.commSave };\n\n commSave.FooterSentence = this.props.communications.commSave.ChamberCode === \"S\" ? \"IN WHICH ACTION IT REQUESTS THE CONCURRENCE OF THE HOUSE OF DELEGATES.\" : \"IN WHICH ACTION IT REQUESTS THE CONCURRENCE OF THE SENATE.\";\n commSave.ClerkTitle = this.props.communications.commSave.ChamberCode === \"H\" ? \"Clerk of the House of Delegates\" : \"Clerk of the Senate\";\n commSave.ClerkName = this.props.personnel.personnelOtherList ? this.props.personnel.personnelOtherList[0].FullName : \"\";\n\n this.setState({\n organizedComms: commSave.CommunicationCategories,\n commGet: commSave,\n isSaving: false,\n pendingSave: false,\n isDirty: false\n });\n }\n if (failureMessage && failureMessage.includes(\"Minutes\")) {\n this.props.actions.makeToast([{ message: `Communication ${publishing ? 'Published' : 'Saved'}`, type: \"success\" }, { message: \"Problem with Minutes Creation\", type: \"failure\" }])\n } else {\n this.props.actions.makeToast([{ message: `Communication ${publishing ? 'Published' : 'Saved'}`, type: \"success\" }])\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.setState({\n isSaving: false\n });\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n });\n\n }\n\n validateCommunicationNumber() {\n this.setState({ duplicateCommNumber: this.state.commNumbers.find(n => n === this.state.commGet.CommunicationNumber) });\n }\n\n changeCategoryDropdown(value) {\n this.setState({\n selectedCategory: value\n });\n }\n\n addCategory() {\n const selectedCategory = this.state.selectedCategory;\n //Used to find the new index of the category so the hidden categories indices can be updated\n const categoryFinder = new Date().getTime();\n let organizedComms = [...this.state.organizedComms];\n let newCommCategory = {\n CommunicationLegislation: [],\n IsLegislationCategory: selectedCategory.IsLegislationCategory,\n CommunicationCategoryTypeID: selectedCategory.CommunicationCategoryTypeID,\n CategoryCode: selectedCategory.CategoryCode,\n CategoryDescription: selectedCategory.Description,\n PluralDescription: selectedCategory.PluralDescription,\n Sequence: selectedCategory.Sequence,\n isNewCategory: categoryFinder\n };\n //push new category\n organizedComms.push(newCommCategory);\n //Sort the communication by sequence\n organizedComms.sort((a, b) => a.Sequence - b.Sequence);\n //Update the categories that are hidden since the array indices have changed\n const newCategoryIndex = organizedComms.filter(c => !c.DeletionDate).findIndex(cat => cat.isNewCategory === categoryFinder);\n if (newCategoryIndex !== -1) {\n let hideCategories = this.state.hideCategories;\n hideCategories.splice(newCategoryIndex, 0, false);\n this.setState({\n hideCategories: hideCategories\n });\n }\n //Remove the selected category so the user doesn't accidently add it twice\n this.setState({\n selectedCategory: '',\n organizedComms: organizedComms,\n isDirty: true\n });\n }\n\n changeBillDropdown(index, value) {\n let selectedBill = [...this.state.selectedBill];\n selectedBill[index] = value;\n this.setState({\n selectedBill: selectedBill\n });\n }\n\n addBill(index) {\n let organizedComms = [...this.state.organizedComms];\n let newAgenda = {};\n //Check whether to move the bill from another category or add the bill\n let billExists = false;\n if (this.state.selectedBill[index]) {\n organizedComms.some((category, categoryIndex) => {\n const duplicateBillIndex = category.CommunicationLegislation.findIndex(bill => bill.LegislationID === this.state.selectedBill[index].LegislationID);\n if (duplicateBillIndex >= 0) {\n billExists = true;\n newAgenda = { ...organizedComms[categoryIndex].CommunicationLegislation[duplicateBillIndex] };\n newAgenda.CommunicationCategoryTypeID = organizedComms[index].CommunicationCategoryTypeID;\n newAgenda.CommunicationCategoryID = organizedComms[index].CommunicationCategoryID;\n newAgenda.IsActive = true;\n newAgenda.IsCandidate = false;\n organizedComms[categoryIndex].CommunicationLegislation.splice(duplicateBillIndex, 1);\n return true;\n }\n });\n if (!billExists) {\n newAgenda = {\n CommunicationCategoryTypeID: organizedComms[index].CommunicationCategoryTypeID,\n CommunicationCategoryID: organizedComms[index].CommunicationCategoryID,\n IsActive: true,\n LegislationID: this.state.selectedBill[index].LegislationID,\n LegislationNumber: this.state.selectedBill[index].LegislationNumber,\n Patrons: this.state.selectedBill[index].Patrons,\n Description: this.state.selectedBill[index].Description,\n IsCandidate: false\n }\n }\n organizedComms[index].CommunicationLegislation.push(newAgenda);\n\n //Remove object so the bill is no longer currently selected in the dropdown\n let selectedBill = [...this.state.selectedBill];\n selectedBill[index] = '';\n this.setState({\n selectedBill: selectedBill,\n organizedComms: organizedComms,\n isDirty: true\n });\n }\n }\n\n genCommDoc(printAllIncluded) {\n let billsToGen = [];\n this.state.organizedComms.forEach(category => {\n const associatedCategory = this.state.communicationCategories.find(c => c.CategoryCode === category.CategoryCode);\n category.CommunicationLegislation.forEach(item => {\n //if user clicked \"Print all included\", push all items that are active (i.e. included)\n //if user clicked \"Print selected\", push all items that are checked\n if (printAllIncluded && item.IsActive) {\n billsToGen.push({\n billNum: item.LegislationNumber,\n LegislationTextID: item.LegislationTextID,\n LegislationID: item.LegislationID,\n CommunicationID: this.state.commGet.CommunicationID,\n SessionID: this.state.commGet.SessionID,\n AmendmentCount: associatedCategory ? associatedCategory.AmendmentCount : null,\n FirstChamberCount: associatedCategory ? associatedCategory.FirstChamberCount : null,\n SecondChamberCount: associatedCategory ? associatedCategory.SecondChamberCount : null\n })\n }\n else if (!printAllIncluded && item.checked) {\n billsToGen.push({\n billNum: item.LegislationNumber,\n LegislationTextID: item.LegislationTextID,\n LegislationID: item.LegislationID,\n CommunicationID: this.state.commGet.CommunicationID,\n SessionID: this.state.commGet.SessionID,\n AmendmentCount: associatedCategory ? associatedCategory.AmendmentCount : null,\n FirstChamberCount: associatedCategory ? associatedCategory.FirstChamberCount : null,\n SecondChamberCount: associatedCategory ? associatedCategory.SecondChamberCount : null\n });\n }\n });\n });\n this.setState({\n gettingPdf: true,\n failedToJoinBills: [],\n pdfSrc: ''\n });\n this.props.actions.joinCommFile({ LegislationFiles: billsToGen, isDoubleSided: this.state.isDoubleSided })\n .then(() => {\n const res = this.props.communications.joinCommFile;\n if (res.Pdf && res.Pdf.FileContents) {\n fetch(`data:application/pdf;base64,${res.Pdf.FileContents}`)\n .then(res => res.blob())\n .then(blob => {\n const urlObj = URL.createObjectURL(blob);\n this.setState({\n pdfSrc: urlObj\n });\n });\n }\n let failedBills = [];\n res.JoinLegislation.forEach(leg => {\n if (!leg.Generated && !res.JoinLegislation.find(l => l.LegislationID === leg.LegislationID && l.Generated)) {\n const bill = billsToGen.find(bill => bill.LegislationTextID === leg.LegislationTextID || bill.LegislationID === leg.LegislationID)\n if (bill && !failedBills.includes(bill)) {\n failedBills.push(bill)\n }\n }\n });\n\n if (failedBills.length === billsToGen.length) {\n // Every single bill in the list does not have a clerk copy\n this.props.actions.makeToast([{ message: \"No selected bills have a clerk copy\", type: \"failure\", long: true }]);\n this.setState({\n gettingPdf: false\n });\n } else {\n this.setState({\n failedToJoinBills: failedBills,\n showPdfWindow: true,\n gettingPdf: false\n });\n }\n }).catch(err => {\n if (err === 'AbortError') {\n return;\n }\n this.setState({\n gettingPdf: false\n });\n console.log(err.toString());\n this.props.actions.makeToast([{ message: \"Failed To Get Data\", type: \"failure\" }]);\n })\n }\n\n hasSelectedBills() {\n let hasSelectedBills = false;\n this.state.organizedComms.forEach(category => {\n category.CommunicationLegislation.forEach(item => {\n if (item.checked) { hasSelectedBills = true; return }\n })\n })\n\n return hasSelectedBills;\n }\n\n hasIncludedBills() {\n let hasIncludedBills = false;\n this.state.organizedComms.forEach(category => {\n category.CommunicationLegislation.forEach(item => {\n if (item.IsActive) { hasIncludedBills = true; return }\n })\n })\n\n return hasIncludedBills;\n\n }\n\n includeAll() {\n let organizedComms = [...this.state.organizedComms]\n organizedComms.forEach(category => {\n category.selectAll = false;\n category.CommunicationLegislation.forEach(item => {\n item.IsActive = true;\n item.checked = false;\n })\n })\n\n this.updateAgenda(organizedComms);\n }\n\n toggleShowSignatureNote() {\n let commGet = { ...this.state.commGet };\n commGet.ShowSignatureNote = !commGet.ShowSignatureNote;\n this.setState({\n commGet: commGet\n })\n }\n\n toggleIsDoubleSided() {\n this.setState({\n isDoubleSided: !this.state.isDoubleSided\n })\n }\n\n componentDidMount() {\n //Get the list of bills for the form\n const communicationsId = this.props.match.params.communicationid\n this.props.actions.getComm('?communicationID=' + communicationsId, true)\n .then(() => {\n const commGet = { ...this.props.communications.commGet };\n if (!commGet.CommunicationCategories) {\n throw 'No categories in communication';\n }\n let noSavedItems = true;\n //bills are added to the communication by default so set IsActive to true for all of them\n commGet.CommunicationCategories.forEach(category => {\n category.CommunicationLegislation.forEach(leg => {\n if (leg.IsActive === undefined) {\n leg.IsActive = true;\n }\n if (leg.CommunicationLegislationID) {\n noSavedItems = false;\n }\n })\n });\n // Get the list of communication categories\n this.props.actions.getCommCategories('?chamberCode=' + commGet.ChamberCode)\n .then(() => {\n let catList = [...this.props.communications.commCategories];\n catList.forEach(cat => {\n cat.label = cat.Description;\n cat.value = cat.CommunicationCategoryTypeID;\n });\n this.setState({\n communicationCategories: catList\n });\n });\n //Get the list of existing communications so we know communication numbers (to alert user in the event they change the number to a duplicate)\n const commParams = '?sessionID=' + commGet.SessionID + '&chamberCode=' + commGet.ChamberCode + '&isPublic=false&communicationType=Floor';\n this.props.actions.getCommList(commParams, true)\n .then(() => {\n const commNumbers = this.props.communications.commList.filter(comm => comm.CommunicationID !== commGet.CommunicationID && moment(comm.CommunicationDate).isSame(commGet.CommunicationDate, 'day')).map(comm => comm.CommunicationNumber);\n this.setState({\n commNumbers: commNumbers,\n duplicateCommNumber: commNumbers.find(n => n === commGet.CommunicationNumber)\n });\n });\n\n //Get bills in the session for the bill dropdown\n this.props.actions.getSessionBills('?sessionID=' + commGet.SessionID)\n .then(() => {\n let billList = [...this.props.bills.sessionBills];\n billList.forEach(bill => {\n bill.label = bill.LegislationNumber;\n bill.value = bill.LegislationID;\n });\n this.setState({\n billList: billList\n })\n });\n\n this.props.actions.getRoleTypes()\n .then(() => {\n let roleType = this.props.personnel.roleTypes.find(x => x.Name.toLowerCase().includes(\"clerk\") && x.Name.toLowerCase().includes(this.props.communications.commGet.ChamberCode === \"H\" ? \"house\" : \"senate\"))\n let clerkRoleTypeID = roleType ? roleType.StaffRoleTypeID : 0;\n this.props.actions.getPersonnelList(\"staffroletypeid=\" + clerkRoleTypeID + \"&isPublic=true\")\n .then(() => {\n commGet.FooterSentence = this.props.communications.commGet.ChamberCode === \"S\" ? \"IN WHICH ACTION IT REQUESTS THE CONCURRENCE OF THE HOUSE OF DELEGATES.\" : \"IN WHICH ACTION IT REQUESTS THE CONCURRENCE OF THE SENATE.\";\n commGet.ClerkTitle = this.props.communications.commGet.ChamberCode === \"H\" ? \"Clerk of the House of Delegates\" : \"Clerk of the Senate\";\n commGet.ClerkName = this.props.personnel.personnelOtherList ? this.props.personnel.personnelOtherList[0].FullName : \"\";\n });\n })\n\n commGet.ShowSignatureNote = [null, true].includes(commGet.ShowSignatureNote); // attr is returned as null on first creation and should default to true\n this.setState({\n organizedComms: [...commGet.CommunicationCategories],\n commGet: commGet,\n isLoaded: true,\n pendingSave: noSavedItems\n });\n\n //Get the session data for use in the preview\n this.props.actions.getSessionById(commGet.SessionID)\n .then(() => {\n this.setState({\n session: this.props.session.selectedSession\n });\n })\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true,\n errorMessage: err\n });\n });\n }\n\n componentWillUnmount() {\n if (abortController)\n abortController.abort();\n cancelRequest();\n }\n\n render() {\n if (this.state.showPreview) {\n return (\n <div>\n <div className=\"flex-row\">\n <h2>Communications Preview</h2>\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print\"> Print</a>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <div className=\"checkbox-container\">\n <div className=\"inner-grid two\">\n <div className=\"checkbox\">\n <label><input type=\"checkbox\" onChange={() => this.toggleShowSignatureNote()} checked={this.state.commGet.ShowSignatureNote} /> Show Clerk's Note</label>\n </div>\n <div />\n </div>\n </div>\n <div ref={el => (this.componentRef = el)}>\n <CommunicationsDetailsComponent\n session={this.state.session}\n communication={this.state.commGet}\n refNum={this.state.referenceNumber}\n authoring\n />\n </div>\n <div className=\"button-bar\">\n <div></div>\n <div className=\"align-right\">\n <button onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n <button onClick={() => this.saveComm(PUBLISH_COMM)} disabled={this.state.isSaving} className=\"button\">{this.state.isSaving ? \"Publishing...\" : \"Publish\"}</button>\n </div>\n </div>\n </div>\n );\n } else {\n const allLegislation = this.state.organizedComms.flatMap(cat => cat.CommunicationLegislation ? cat.CommunicationLegislation.filter(cl => cl.IsActive).map(cl => cl.LegislationNumber) : []);\n const hasDuplicates = Boolean(allLegislation.filter((leg, idx) => allLegislation.indexOf(leg) !== idx).length);\n return (\n <React.Fragment>\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <div style={{ display: this.state.showPdfWindow ? 'block' : 'none', overflow: 'hidden' }} onClick={() => this.setState({ showPdfWindow: false })} className=\"overlay center-content\">\n <div className=\"full full-height\" style={{ maxWidth: '100vw', width: '95%' }}>\n <div onClick={e => e.stopPropagation()} className=\"dlas-forms user-forms overlay-content animated-fade-in-up full-height\">\n <div>\n <button className=\"button print\" onClick={() => this.pdfRef ? this.pdfRef.contentWindow.print() : null}> Print</button>\n </div>\n {this.state.failedToJoinBills.length > 0 &&\n <div className=\"small-text\">\n <span>These bills do not have clerk copies and are not included in the PDF: </span>\n <span>{this.state.failedToJoinBills.map((bill, i) => <React.Fragment key={i}>{i !== 0 && \", \"}{bill.billNum}</React.Fragment>)}</span>\n </div>\n }\n <div className=\"center full-height\">\n <iframe className=\"center\" style={{ width: '100%', height: '90%' }} ref={el => this.pdfRef = el} src={this.state.pdfSrc}></iframe>\n <button style={{ position: 'absolute', bottom: '10px', right: '10px' }} type=\"button\" onClick={() => this.setState({ showPdfWindow: false })} className=\"button secondary\">Close</button>\n </div>\n </div>\n </div>\n </div>\n {this.state.commGet ? <h1>{(this.state.commGet.ChamberCode === \"H\" ? \"House \" : \"Senate \") + \"Communication\"}</h1> : <h1> </h1>}\n <div className=\"user-forms\">\n {!this.state.isLoaded ?\n <div className=\"center-spinner spinner\">Fetching results...</div>\n :\n <div className=\"dlas-forms\">\n <span className=\"error-message\">{this.state.errorMessage}</span>\n <fieldset className=\"fieldset-collapse fieldset-open\" style={{ paddingBottom: '50px' }}>\n <legend>Communication Information</legend>\n <div className=\"multi-row four no-margin\">\n <div>\n <label>Communication Date</label>\n <DatePicker\n selected={moment(this.state.commGet.CommunicationDate)}\n onChange={val => this.handleInputChange('CommunicationDate', val)}\n />\n </div>\n <div>\n <label>Communication ID</label>\n <input\n type=\"number\"\n placeholder=\"Communication ID\"\n value={this.state.commGet.CommunicationNumber}\n onChange={e => this.handleInputChange('CommunicationNumber', parseInt(e.target.value))}\n />\n {this.state.duplicateCommNumber && <div className=\"input-feedback-warning\">Warning: Communication ID {this.state.commGet.CommunicationNumber} is already in use on another communication on this same communication date.</div>}\n {!this.state.commGet.CommunicationNumber && <div className=\"input-feedback\">Communication ID is required.</div>}\n </div>\n <div />\n <div>\n <button type=\"button\" className=\"button m-left\" style={{ float: 'right' }} disabled={!this.state.organizedComms.map(comm => comm.CommunicationLegislation).find(leg => leg.find(it => !it.IsActive))} onClick={this.includeAll}>Include All</button>\n </div>\n </div>\n <BillsGrid\n organizedComms={this.state.organizedComms}\n communicationCategories={this.state.communicationCategories}\n updateAgenda={this.updateAgenda}\n changeCategoryDropdown={this.changeCategoryDropdown}\n changeCategoryPositionDropdown={this.changeCategoryPositionDropdown}\n selectedCategory={this.state.selectedCategory}\n addCategory={this.addCategory}\n selectedBill={this.state.selectedBill}\n changeBillDropdown={this.changeBillDropdown}\n addBill={this.addBill}\n billList={this.state.billList}\n sessionCode={this.state.commGet.SessionCode}\n hideCategories={this.state.hideCategories}\n toggleHideCategory={this.toggleHideCategory}\n />\n </fieldset>\n <div className=\"floating-button-bar\">\n <div className=\"flex-row flex-vertical-center\" style={{ width: \"100%\" }}>\n <div className=\"inline-list\">\n <button disabled={this.state.pendingSave || this.state.gettingPdf || !this.hasSelectedBills()} title={this.state.pendingSave ? \"You must save the pending changes in order to print\" : this.hasSelectedBills() ? \"Print Selected\" : \"You must select one or more legislation\"} type=\"button\" className=\"button\" onClick={() => this.genCommDoc(false)}>{this.gettingPdf ? \"Getting Document...\" : \"Print Selected\"}</button>\n <button disabled={this.state.pendingSave || this.state.gettingPdf || !this.hasIncludedBills()} title={this.state.pendingSave ? \"You must save the pending changes in order to print\" : this.hasIncludedBills() ? \"Print All Included\" : \"You must include one or more legislation\"} type=\"button\" className=\"button\" onClick={() => this.genCommDoc(true)}>{this.gettingPdf ? \"Getting Document...\" : \"Print All Included\"}</button>\n <React.Fragment>\n <div className=\"toggle-switch\" onClick={this.toggleIsDoubleSided}>\n <input id=\"is-double-sided-switch\" checked={this.state.isDoubleSided} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"is-double-sided-switch\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"no-wrap\", marginTop: '0px', fontSize: '14px' }}>Printing Double Sided?</label>\n </React.Fragment>\n </div>\n <div className=\"inline-list\">\n {hasDuplicates && <span style={{ fontSize: '15px' }}>Please remove all duplicate legislation included in multiple categories before saving</span>}\n <button disabled={hasDuplicates || this.state.isSaving || !this.state.commGet.CommunicationNumber} onClick={() => this.saveComm(SAVE_COMM)} className=\"button\" type=\"submit\">{this.state.commGet.IsPublic ? \"Unpublish\" : this.state.isSaving ? \"Saving...\" : \"Save\"}</button>\n <button disabled={hasDuplicates || this.state.pendingSave || !this.state.commGet.CommunicationNumber || this.state.commGet.IsPublic} onClick={this.togglePreview} className=\"button\" type=\"button\">Preview</button>\n {!this.state.commGet.CommunicationNumber && <div className=\"input-feedback\">Communication ID is required.</div>}\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </React.Fragment>\n )\n }\n }\n}\n\nexport default connect(\n (state) => {\n const { bills, session, communications, minutes, nav, personnel } = state;\n return {\n bills,\n session,\n communications,\n minutes,\n nav,\n personnel\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, sessionActionCreators, communicationsActionCreators, minutesActionCreators, navActionCreators, personnelActionCreators), dispatch)\n }\n }\n)(CommunicationsForm)","import React from 'react';\nimport { Route } from 'react-router';\nimport CommunicationsManagementGrid from './lis-communications-grid';\nimport CommunicationsForm from './lis-communications-form'\n\nclass CommunicationsManagement extends React.Component {\n\n render() {\n\n return (\n <div>\n <Route exact path={this.props.match.path} component={CommunicationsManagementGrid} />\n <Route path={`${this.props.match.path}/edit-communication/:communicationid`} component={CommunicationsForm} />\n </div>\n )\n }\n}\n\nexport default CommunicationsManagement;","import React from \"react\";\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport '../../../stylesheets/shared/react-table.css';\nimport moment from 'moment-timezone';\nimport DatePicker from \"react-datepicker\";\nimport Select from 'react-select';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { voteActionCreators } from '../../../stores/lis-votes-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { authActionCreators } from \"../../../stores/lis-auth-store\";\n\nconst customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n },\n input: (base) => ({\n ...base,\n padding: '0px'\n }),\n dropdownIndicator: (base) => ({\n ...base,\n height: '29px',\n padding: '6px'\n }),\n clearIndicator: (base) => ({\n ...base,\n height: '29px',\n padding: '6px'\n })\n}\n\nclass VoteGrid extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectAll: false,\n showDeleteModal: false,\n voteOriginOptions: [],\n chamberOptions: [\n { label: 'House', value: 'H' },\n { label: 'Senate', value: 'S' }\n ],\n saving: false\n };\n\n this.getVoteTypeReferences = this.getVoteTypeReferences.bind(this);\n this.toggleRow = this.toggleRow.bind(this);\n this.toggleSelectAll = this.toggleSelectAll.bind(this);\n this.saveVotes = this.saveVotes.bind(this);\n this.toggleDeleteVoteModal = this.toggleDeleteVoteModal.bind(this);\n this.deleteVote = this.deleteVote.bind(this);\n }\n\n toggleRow(index, voteIndex) {\n let dateList = [...this.props.organizedVotes];\n if (voteIndex !== undefined) {\n dateList[index].Votes[voteIndex].checked = !dateList[index].Votes[voteIndex].checked;\n } else {\n dateList[index].checked = !dateList[index].checked;\n dateList[index].Votes.forEach(vote => vote.checked = dateList[index].checked);\n }\n this.setState({\n organizedVotes: dateList\n });\n }\n\n toggleSelectAll() {\n const opposite = !this.state.selectAll;\n let dateList = [...this.props.organizedVotes];\n dateList.forEach(date => {\n date.checked = opposite;\n date.Votes.forEach(vote => {\n vote.checked = opposite\n });\n });\n this.setState({\n selectAll: opposite\n });\n }\n\n saveVotes(publish, voteToDelete) {\n this.setState({ saving: true }, () => {\n let votesToSave = [];\n\n if (!voteToDelete) {\n const datesToIterate = [...this.props.organizedVotes].filter(date => date.Votes.find(v => v.checked));\n let checkedVotes = 0;\n let invalidFinalVotePublish = false;\n datesToIterate.some(date => {\n date.Votes.some(vote => {\n // Select all votes that are checked and are not already published or not-published\n if (vote.checked) {\n checkedVotes++; //we use this when alerting the user if no checked votes were published/unpublished (based on the below logic)\n if (vote.IsPublic !== publish) {\n if (this.props.voteOrigin.label === \"Committee\" && publish && vote.FinalVote && date.Votes.find(v => !v.checked && !v.IsPublic && v.CommitteeID === vote.CommitteeID)) {\n this.props.actions.makeToast([{ message: `Before publishing a final committee vote, you must publish all preceding votes from this committee${datesToIterate.length > 1 ? ' (' + moment(date.Date).format(\"L\") + ')' : ''}`, type: \"failure\", long: true }]);\n invalidFinalVotePublish = true; //exit loop if we threw an error toast\n return true;\n }\n \n let voteObj = { VoteID: vote.VoteID };\n\n if (this.props.chamber.value === \"S\" && this.props.voteOrigin.value === 1) {\n voteObj.VoteLegislation = [vote.LegislationNumber];\n }\n\n if (vote.FinalVote) {\n voteObj.LegislationNumber = vote.LegislationNumber;\n voteObj.FinalVote = vote.FinalVote;\n voteObj.ChamberCode = vote.ChamberCode;\n voteObj.CommitteeID = vote.CommitteeID;\n voteObj.VoteDate = vote.VoteDate;\n voteObj.SessionID = vote.SessionID;\n voteObj.CommitteeVotedOnLegislation = date.Votes.filter(v => v.LegislationNumber && (v.IsPublic || v.checked) && v.CommitteeID === vote.CommitteeID).map(v => { return { LegislationNumber: v.LegislationNumber, EventCode: v.EventCode } });\n }\n votesToSave.push(voteObj);\n }\n }\n });\n return invalidFinalVotePublish; //exit loop if we threw an error toast\n });\n\n if (invalidFinalVotePublish) {\n this.setState({ saving: false })\n return;\n }\n \n if (votesToSave.length > 0) {\n this.props.actions.saveVoteBulk({ IsPublic: publish, VoteIDs: votesToSave })\n .then(async () => {\n // Create a file for all the votes, and create the chairman's report summarized on minutes if FinalVote\n let chairmansReportFailures = [];\n if (publish) {\n for (const vote of votesToSave) {\n this.props.actions.voteFileGen('?voteID=' + vote.VoteID)\n .then(() => {\n if (this.props.votes.voteFileError) {\n console.log(this.props.votes.voteFileError.toString());\n }\n });\n if (this.props.voteOrigin.label === \"Committee\" && vote.FinalVote && vote.CommitteeID && vote.VoteDate) {\n const success = await this.props.createChairmansReportSummarizedOnMinutes(vote.SessionID, vote.ChamberCode, vote.CommitteeID, moment(vote.VoteDate).utc().hour(0), vote.CommitteeVotedOnLegislation);\n if (!success) { chairmansReportFailures.push(vote.LegislationNumber) }\n }\n };\n }\n\n if (chairmansReportFailures.length) {\n const chairmansReportVotes = votesToSave.filter(v => v.FinalVote && v.CommitteeID && v.VoteDate);\n this.props.actions.makeToast([{ message: \"Vote Publish Successful, Chairman's Report Save Failed\" + (chairmansReportVotes.length > 1 ? \" For \" + chairmansReportVotes.join(', ') : ''), type: \"failure\", long: true }]);\n } else {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n }\n this.props.getVotes();\n this.setState({ saving: false })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err.toString());\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({ saving: false })\n this.props.getVotes();\n });\n } else if (checkedVotes === 0) {\n this.props.actions.makeToast([{ message: \"You have not selected any votes\", type: \"warning\" }]);\n this.setState({ saving: false })\n } else {\n this.props.actions.makeToast([{ message: (checkedVotes === 1 ? \"This vote has\" : \"The selected votes have\") + (publish ? \" already been published\" : \" not yet been published\"), type: \"warning\", long: true }]);\n this.setState({ saving: false })\n }\n } else {\n this.setState({\n deletingVote: true\n }, () => {\n this.props.actions.getVoteDetails(\"?voteID=\" + this.state.voteToDelete.VoteID, true)\n .then(() => {\n votesToSave.push(\n this.props.votes.voteDetailsResponse[0]\n )\n votesToSave[0].DeletionDate = moment();\n\n this.props.actions.saveVote({ VoteList: votesToSave })\n .then(() => {\n this.setState({\n deletingVote: false,\n showDeleteModal: false,\n voteToDelete: undefined,\n saving: false\n }, () => {\n this.props.actions.makeToast([{ message: \"Vote Deleted\", type: \"success\" }]);\n this.props.getVotes();\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err.toString());\n this.props.actions.makeToast([{ message: \"Vote Delete Failed\", type: \"failure\" }]);\n this.setState({ deletingVote: false, saving: false })\n this.props.getVotes();\n });\n })\n })\n }\n })\n }\n\n toggleDeleteVoteModal(voteToDelete) {\n this.setState({\n showDeleteModal: !this.state.showDeleteModal,\n voteToDelete: voteToDelete\n })\n }\n\n deleteVote() {\n this.saveVotes(false, this.state.voteToDelete)\n }\n\n async getVoteTypeReferences() {\n await this.props.actions.getVoteTypes()\n .then(() => {\n let voteOriginOptions = [];\n this.props.votes.voteTypes.forEach(type => {\n type.label = type.Name;\n type.value = type.VoteTypeID;\n voteOriginOptions.push(type);\n });\n const voteOrigin = voteOriginOptions.find(o => o.Name === \"Floor\") ? voteOriginOptions.find(o => o.Name === \"Floor\") : null;\n this.setState({\n voteOriginOptions: voteOriginOptions,\n voteOrigin: voteOrigin\n }, () => {\n if (voteOrigin) {\n this.props.getVotes();\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n });\n }\n\n async getCommittees() {\n await new Promise(res => {\n this.setState({ fetchingCommittees: true }, async () =>\n await this.props.actions.getCommitteeList('includeSubCommittees=true')\n .then(() => {\n this.props.committee.committeeList.forEach(cmte => {\n cmte.label = cmte.Name;\n cmte.value = cmte.CommitteeID\n })\n\n this.setState({ fetchingCommittees: false, committeeList: this.props.committee.committeeList })\n res();\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({ fetchingCommittees: false })\n })\n )\n })\n }\n\n handleChange(key, value) {\n this.props.handleChange(key, value, () => {\n let organizedVotes = [...this.props.organizedVotes];\n organizedVotes.forEach((date, idx) => {\n if (date.show) this.props.showVotes(idx, false)\n });\n this.props.getVotes();\n })\n }\n\n sortVotes(votes) {\n let organizedVotes = [...this.props.organizedVotes];\n let voteDay = organizedVotes.findIndex(x => moment(x.Date).isSame(votes.original.Date, \"days\"));\n\n if (organizedVotes[voteDay].sortTimeDesc) {\n organizedVotes[voteDay].Votes.sort((a, b) => a.FinalVote === b.FinalVote || this.props.voteOrigin.label === \"Floor\" ? moment(a.VoteDate).isBefore(b.VoteDate, \"seconds\") ? 1 : moment(a.VoteDate).isAfter(b.VoteDate, \"seconds\") ? -1 : 0 : a.FinalVote ? 1 : -1)\n } else {\n organizedVotes[voteDay].Votes.sort((a, b) => a.FinalVote === b.FinalVote || this.props.voteOrigin.label === \"Floor\" ? moment(a.VoteDate).isAfter(b.VoteDate, \"seconds\") ? 1 : moment(a.VoteDate).isBefore(b.VoteDate, \"seconds\") ? -1 : 0 : a.FinalVote ? 1 : -1)\n }\n\n organizedVotes[voteDay].sortTimeDesc = !organizedVotes[voteDay].sortTimeDesc;\n\n this.setState({\n organizedVotes\n })\n }\n\n componentDidMount() {\n //set the default chamber to house or senate depending on the user's role\n let disableChamberSelector = false;\n let selectedChamber = null;\n\n if (!this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\")) {\n //Find if the user is a house vote editor, if so select house, otherwise select senate, and disable the chamber selector\n selectedChamber = this.props.login.userClaims.claims.find(x => x.Resource === \"Vote\" && x.Scope === \"House\") ? this.state.chamberOptions.find(chamber => chamber.label === \"House\") : this.props.login.userClaims.claims.find(x => x.Resource === \"Vote\" && x.Scope === \"Senate\") ? this.state.chamberOptions.find(chamber => chamber.label === \"Senate\") : null;\n disableChamberSelector = true;\n this.handleChange('chamber', selectedChamber);\n }\n\n this.setState({\n disableChamberSelector: disableChamberSelector\n });\n\n Promise.all([this.getVoteTypeReferences(), this.getCommittees()]).then(() => {\n this.props.getVotes();\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { committeeList, fetchingCommittees, voteOriginOptions, chamberOptions, saving } = this.state;\n const { startDate, endDate, committeeVal, chamber, voteOrigin, isLoaded, organizedVotes } = this.props;\n\n const VoteActions = (vote) =>\n <div className=\"vote-information-actions\">\n {vote.IsPublic ?\n <Link to={`/vote-management/edit-vote/${vote.VoteID}`} className=\"icon edit\"></Link>\n :\n <React.Fragment>\n <Link to={`/vote-management/edit-vote/${vote.VoteID}`} className=\"icon edit\"></Link>\n <span className=\"icon flag\"></span>\n </React.Fragment>\n }\n <span onClick={() => this.toggleDeleteVoteModal(vote)} className=\"icon delete\"></span>\n {vote.FinalVote && <span className=\"bold\">(Final Vote)</span>}\n {vote.IsVoice && <span className=\"bold\">(Voice)</span>}\n </div>\n\n return (\n <div>\n {this.state.showDeleteModal &&\n <div className='schedule-modal'>\n <div className='schedule-modal-content'>\n <div className='grid-wrapper two'>\n <div className='inner-grid eight-one-and-one'>\n <span>Are you sure you want to delete vote {this.state.voteToDelete.VoteNumber}?</span>\n {this.state.deletingVote\n ? <div className=\"small-spinner\"></div>\n : <button className='button primary' onClick={() => this.deleteVote()}>Yes</button>\n }\n <button className='button secondary' onClick={() => this.toggleDeleteVoteModal()}>No</button>\n </div>\n </div>\n </div>\n </div>\n }\n <div className=\"header-half\">\n <h1>Vote Management</h1>\n </div>\n\n <div className=\"toolbar dlas-forms\">\n <div className=\"flex-row\">\n <div style={{ display: 'grid', gridTemplateColumns: 'min-content min-content 120px 150px 350px', gap: '10px' }}>\n <div>\n <label className=\"label\" htmlFor=\"start-date\">Start Date</label>\n <DatePicker\n name=\"start-date\"\n selected={startDate}\n onChange={value => this.props.handleDateChange('startDate', value, () => {\n let organizedVotes = [...this.props.organizedVotes];\n organizedVotes.forEach((date, idx) => {\n if (date.show) this.props.showVotes(idx, false)\n });\n this.props.getVotes();\n })}\n />\n </div>\n <div>\n <label className=\"label\" htmlFor=\"end-date\">End Date</label>\n <DatePicker\n name=\"end-date\"\n selected={endDate}\n onChange={value => this.props.handleDateChange('endDate', value, () => {\n let organizedVotes = [...this.props.organizedVotes];\n organizedVotes.forEach((date, idx) => {\n if (date.show) this.props.showVotes(idx, false)\n });\n this.props.getVotes();\n })}\n />\n </div>\n <div>\n <label className=\"label\" htmlFor=\"chamber\">Chamber</label>\n <Select\n styles={customStyles}\n name=\"chamber\"\n options={chamberOptions}\n isDisabled={this.state.disableChamberSelector}\n onChange={value => this.handleChange('chamber', value)}\n value={chamber}\n style={{ width: \"150px\" }}\n />\n </div>\n <div>\n <label className=\"label\" htmlFor=\"committee\">Vote Origin</label>\n <Select\n styles={customStyles}\n name=\"vote-origin\"\n options={voteOriginOptions}\n onChange={value => this.handleChange('voteOrigin', value)}\n value={voteOrigin}\n style={{ width: \"150px\" }}\n />\n </div>\n <div>\n {voteOrigin && voteOrigin.label !== \"Floor\" &&\n <React.Fragment>\n <label className=\"label\" htmlFor=\"committee\">Committee</label>\n <Select\n styles={customStyles}\n name=\"committee\"\n options={committeeList && chamber ? committeeList.filter(c => c.ChamberCode === chamber.value && (voteOrigin.label === \"Committee\" ? !c.ParentCommitteeID : c.ParentCommitteeID)) : []}\n onChange={value => this.handleChange('committee', value)}\n value={committeeVal}\n isDisabled={!chamber}\n placeholder={fetchingCommittees ? 'Getting Committees....' : 'Select...'}\n style={{ width: \"350px\" }}\n isClearable\n />\n </React.Fragment>}\n </div>\n\n </div>\n </div>\n </div>\n <br />\n <div className=\"toolbar minutes-toolbar dlas-forms\">\n <button type=\"button\" disabled={saving || (voteOrigin && voteOrigin.label !== \"Floor\" && (!committeeVal || !committeeVal.label))} onClick={() => this.saveVotes(true)} className=\"button\">Publish</button>\n <button type=\"button\" disabled={saving || (voteOrigin && voteOrigin.label !== \"Floor\" && (!committeeVal || !committeeVal.label))} onClick={() => this.saveVotes(false)} className=\"button danger\">Unpublish</button>\n </div>\n <ReactTable\n resizable={false}\n loading={!isLoaded}\n data={organizedVotes}\n noDataText=\"No votes found\"\n ref={r => this.reactTable = r}\n columns={[\n {\n sortable: false,\n filterable: false,\n style: { textAlign: 'center' },\n width: 45,\n Header: x => {\n return (\n <input\n id={'cm-checkbox-selectall'}\n type=\"checkbox\"\n className=\"checkbox\"\n checked={this.state.selectAll}\n onChange={this.toggleSelectAll}\n />\n );\n },\n Cell: ({ original, index }) => {\n return (\n <input\n id={'cm-checkbox-' + index}\n type=\"checkbox\"\n className=\"checkbox\"\n checked={original.checked}\n onChange={() => this.toggleRow(index)}\n />\n );\n }\n },\n {\n Header: \"\",\n accessor: \"Date\",\n Cell: row => {\n if (row.original.show) {\n return (\n <div className=\"vote-date-container\">\n <div className=\"vote-date\" onClick={() => this.props.showVotes(row.index)}>\n <span>{moment(row.value).format('L')}</span>\n <button className=\"arrow-up\">votes</button>\n </div>\n <div className={`vote-information${voteOrigin.label === \"Floor\" ? \"\" : \" committee\"}`}>\n {voteOrigin.label === \"Floor\" ?\n <React.Fragment>\n <span className=\"vote-information-header\"></span>\n <span className=\"vote-information-header\">Legislation</span>\n <span className=\"vote-information-header\">Vote Number</span>\n <span className=\"vote-information-header\" onClick={() => this.sortVotes(row)} style={{ cursor: \"pointer\" }}>Vote Time</span>\n <span className=\"vote-information-header\"></span>\n {row.original.Votes.map((vote, voteIndex) =>\n <React.Fragment key={voteIndex}>\n <span><input type=\"checkbox\" checked={vote.checked} onChange={() => this.toggleRow(row.index, voteIndex)} /></span>\n {![\"block\", \"cancelled\"].includes(vote.LegislationNumber?.toLowerCase()) ? <Link to={`/bill-details/${vote.SessionCode}/${vote.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{vote.LegislationNumber}</Link> : <span>{vote.LegislationNumber}</span>}\n <span>{vote.VoteNumber}</span>\n <span>{moment(vote.VoteDate).format(\"LTS\")}</span>\n {VoteActions(vote)}\n </React.Fragment>\n )}\n </React.Fragment>\n :\n <React.Fragment>\n <span className=\"vote-information-header checkbox-container\"></span>\n <span className=\"vote-information-header\">Legislation</span>\n <span className=\"vote-information-header\">Action</span>\n <span className=\"vote-information-header\">Committee</span>\n <span className=\"vote-information-header\">Vote Tally</span>\n <span className=\"vote-information-header\"></span>\n {row.original.Votes.map((vote, voteIndex) =>\n <React.Fragment key={voteIndex}>\n <span title={\"Vote Number: \" + vote.VoteNumber} className=\"checkbox-container\"><input type=\"checkbox\" checked={vote.checked} onChange={() => this.toggleRow(row.index, voteIndex)} /></span>\n {vote.LegislationNumber?.toLowerCase() !== \"block\" ? <Link to={`/bill-details/${vote.SessionCode}/${vote.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{vote.LegislationNumber}</Link> : <span>{vote.LegislationNumber}</span>}\n <span title={\"Vote Number: \" + vote.VoteNumber}>{this.props.voteActions && this.props.voteActions.find(x => x.EventCode === vote.EventCode) ? this.props.voteActions.find(x => x.EventCode === vote.EventCode).Description : vote.EventCode}</span>\n <span title={vote.CommitteeName}>{vote.CommitteeName}</span>\n <span title={\"Vote Number: \" + vote.VoteNumber}>{vote.VoteTally}</span>\n {VoteActions(vote)}\n </React.Fragment>\n )}\n </React.Fragment>\n }\n </div>\n </div>\n );\n } else {\n return (\n <div style={{ cursor: 'pointer' }} onClick={() => this.props.showVotes(row.index)}>\n <span>{moment(row.value).format('L')}</span>\n <button style={{ float: 'right' }} className=\"arrow-down\">votes</button>\n </div>\n );\n }\n }\n }\n ]}\n defaultPageSize={15}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight\"\n />\n </div>)\n\n }\n}\n\nexport default connect(\n (state) => {\n const { votes, nav, committee, login } = state;\n return {\n votes,\n nav,\n committee,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, navActionCreators, committeeActionCreators, authActionCreators), dispatch)\n }\n }\n)(VoteGrid)","import React from 'react';\nimport ReactToPrint from \"react-to-print\";\nimport moment from 'moment-timezone';\nimport { Link } from 'react-router-dom';\n\nconst VoteDetails = props => {\n const { sessionData, voteMembers, billData, voteData } = props;\n const sessionHeader = sessionData ? sessionData.SessionYear + ' ' + sessionData.DisplayName : '';\n const memberYeas = voteMembers.filter(nObj => nObj.ResponseCode === 'Y');\n const memberNays = voteMembers.filter(nObj => nObj.ResponseCode === 'N');\n const memberAbstentions = voteMembers.filter(nObj => nObj.ResponseCode === 'A');\n const memberNoVote = voteMembers.filter(nObj => nObj.ResponseCode === 'X');\n const voteStatements = voteMembers.filter(member => member.VoteStatement);\n const voteActionDescription = voteData.ChamberCode === \"S\" ? \" Senate: \" + voteData.LegislationActionDescription : \" House of Delegates: \" + voteData.LegislationActionDescription\n // Abstentions appear as rule 36 on senate floor tally sheets\n let memberRule36 = [];\n if (voteData.ChamberCode === \"S\" && voteData.VoteType === \"Floor\") {\n memberRule36 = voteMembers.filter(nObj => nObj.ResponseCode === 'A');\n } else {\n memberRule36 = voteMembers.filter(nObj => nObj.ResponseCode === 'R');\n }\n\n let componentRef;\n let removeRefFromPrint;\n const displayTallySheet = props.voteFileUrl && !voteData.CommitteeID && voteData.ChamberCode !== \"H\";\n const displayCommitteeLink = voteData.CommitteeID;\n const linksGridColumns = displayTallySheet && displayCommitteeLink ? 'three' : (displayTallySheet || displayCommitteeLink) ? 'two' : 'one';\n const linksGridTemplateColumns = linksGridColumns === 'three' ? 'auto min-content min-content' : linksGridColumns === 'two' ? 'auto min-content' : 'min-content';\n const headerGridTemplateColumns = linksGridColumns === 'three' ? '7fr 3fr' : linksGridColumns === 'two' ? '7fr 2fr' : '7fr 1fr';\n const mobileLinksPosition = linksGridColumns === 'three' ? 'justify-center' : 'justify-left';\n\n return (\n <div ref={el => (componentRef = el)} id=\"vote-details\" className=\"bill-theme public-details inner-grid\">\n <div>\n <h2 style={{ marginBottom: '10px' }}>{sessionHeader}</h2>\n </div>\n <div className={props.isPublic ? 'details-header' : ''} style={props.isPublic && { gridTemplateColumns: headerGridTemplateColumns }}>\n {billData.length === 1 ?\n <div style={{ marginBottom: \"15px\" }}>\n <h3><span style={{ marginRight: '1em' }}>{billData[0].LegislationNumber}</span><span>{billData[0].Description}</span></h3>\n </div>\n :\n <div>\n <h3>Bills</h3>\n <p>{billData.map((bill, index) =>\n <React.Fragment key={index}>\n {bill.LegislationNumber}{index !== billData.length - 1 && \",\"} \n </React.Fragment>\n )}</p>\n </div>\n }\n {props.isPublic &&\n <div className={`remove-from-print inner-grid ${linksGridColumns} list-links ${mobileLinksPosition}`} style={{ display: 'grid', justifyContent: 'end', gridTemplateColumns: linksGridTemplateColumns }}>\n {displayTallySheet &&\n <a href={props.voteFileUrl.FileURL}>Tally Sheet PDF</a>\n }\n {displayCommitteeLink &&\n <Link to={`/session-details/${sessionData.SessionCode}/committee-information/${voteData.CommitteeNumber}/committee-details`}>{voteData.ParentCommitteeID ? 'Subcommittee' : 'Committee'}</Link>\n }\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print\"> Print</a>}\n content={() => {\n let printedContent = componentRef.cloneNode(true);\n //remove icons from printed document\n const removedContent = printedContent.getElementsByClassName('remove-from-print');\n for (const el of removedContent) {\n el.innerHTML = ''\n }\n //set header to block instead of grid so it can span the width of printed document rather than be cut off short\n let header = printedContent.getElementsByClassName('details-header');\n if (header && header[0]) {\n header = header[0];\n header.style.display = 'block';\n let billDescription = header.getElementsByTagName('div');\n if (billDescription && billDescription[0]) {\n billDescription[0].style['margin-bottom'] = '0px';\n }\n }\n return printedContent\n }}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n }\n </div >\n <div>\n <p><strong>{moment(voteData.VoteDate).format(\"MM/DD/YYYY\")} {voteActionDescription}</strong></p>\n </div>\n <div>\n <div className=\"details-section\">\n {voteData.CommitteeID &&\n <p>{voteData.ParentCommitteeID ? \"Subcommittee: \" : \"Committee: \"} {voteData.ReferToCommitteeID !== undefined ? voteData.ReferToCommitteeName : voteData.CommitteeName}</p>\n }\n {voteData.ParentCommitteeID &&\n <p>Committee: {voteData.ParentCommitteeName}</p>\n }\n </div>\n <div className=\"details-section\">\n <h4>Votes</h4>\n <p>\n YEAS--\n {memberYeas.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{memberYeas.length === index + 1 ? '--' : ', '}</span>\n ))}\n {memberYeas.length}\n </p>\n <p>\n NAYS--\n {memberNays.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{memberNays.length === index + 1 ? '--' : ', '}</span>\n ))}\n {memberNays.length}\n </p>\n <p>\n {(voteData.VoteType === \"Floor\" && voteData.ChamberCode === \"S\") ? \"RULE 36--\" : \"ABSTENTIONS--\"}\n {memberAbstentions.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{memberAbstentions.length === index + 1 ? '--' : ', '}</span>\n ))}\n {memberAbstentions.length}\n </p>\n {voteData.VoteType === \"Committee\" && voteData.ChamberCode === \"S\" ? \"\"\n : <p>\n NOT VOTING--\n {memberNoVote.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{memberNoVote.length === index + 1 ? '--' : ', '}</span>\n ))}\n {memberNoVote.length}\n </p>\n }\n </div>\n </div>\n <div id=\"vote-statements\">\n {voteStatements.map((statement, statementIndex) =>\n <p key={statementIndex}>{statement.VoteStatement}</p>\n )}\n </div>\n {voteData.VoteComment &&\n <div id=\"vote-comments\">\n <p>{voteData.VoteComment}</p>\n </div>\n }\n </div>\n );\n}\n\nexport default VoteDetails\n","import React from \"react\";\nimport { Prompt } from \"react-router\";\nimport moment from 'moment-timezone';\nimport DatePicker from \"react-datepicker\";\nimport ReactToPrint from \"react-to-print\";\nimport VoteDetails from \"../../../lis-shared/lis-votes/lis-vote-details\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { voteActionCreators } from '../../../stores/lis-votes-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport Select from 'react-select';\nimport Popout from '../../../lis-shared/lis-layout/components/lis-popout-component';\nimport { sessionActionCreators } from \"../../../stores/lis-session-store\";\nimport { calendarActionCreators } from \"../../../stores/lis-calendar-store\";\nimport { cancelRequest } from '../../../services/request.service';\nimport { billActionCreators } from \"../../../stores/lis-legislation-store\";\nimport { committeeActionCreators } from \"../../../stores/lis-committee-store\";\n\nconst PassFailOptions = [{ label: \"Pass\", value: \"P\" }, { label: \"Fail\", value: \"F\" }];\n\nconst REFER_ACTIONS = [\"H0105\", \"H0106\", \"H0107\", \"H0108\", \"H0109\", \"H0114\", \"H0205\", \"H0206\", \"H0207\", \"H0208\", \"H0209\", \"H0214\", \"H0307\", \"H0407\", \"H0507\", \"H0607\", \"H0705\", \"H0706\", \"H0707\", \"H0708\", \"H0709\", \"H0714\", \"H0805\", \"H0806\", \"H0807\", \"H0808\", \"H0809\", \"H0814\", \"H0905\", \"H0906\", \"H0907\", \"H0908\", \"H0909\", \"H0914\", \"H1005\", \"H1006\", \"H1007\", \"H1008\", \"H1009\", \"H1014\", \"H1105\", \"H1106\", \"H1107\", \"H1108\", \"H1109\", \"H1114\", \"H1307\", \"H1405\", \"H1406\", \"H1407\", \"H1408\", \"H1409\", \"H1414\", \"H1505\", \"H1506\", \"H1507\", \"H1508\", \"H1509\", \"H1514\", \"H1707\", \"H1805\", \"H1806\", \"H1807\", \"H1808\", \"H1809\", \"H1814\", \"H1905\", \"H1906\", \"H1907\", \"H1908\", \"H1909\", \"H1914\", \"H2005\", \"H2006\", \"H2007\", \"H2008\", \"H2009\", \"H2014\", \"H2105\", \"H2106\", \"H2107\", \"H2108\", \"H2109\", \"H2114\", \"H2305\", \"H2306\", \"H2307\", \"H2308\", \"H2309\", \"H2314\", \"H2405\", \"H2406\", \"H2407\", \"H2408\", \"H2409\", \"H2414\", \"S0105\", \"S0106\", \"S0107\", \"S0108\", \"S0109\", \"S0110\", \"S0114\", \"S0205\", \"S0206\", \"S0207\", \"S0208\", \"S0209\", \"S0210\", \"S0214\", \"S0305\", \"S0306\", \"S0307\", \"S0308\", \"S0309\", \"S0310\", \"S0314\", \"S0405\", \"S0406\", \"S0407\", \"S0408\", \"S0409\", \"S0410\", \"S0414\", \"S0505\", \"S0506\", \"S0507\", \"S0508\", \"S0509\", \"S0510\", \"S0514\", \"S0607\", \"S0705\", \"S0706\", \"S0707\", \"S0708\", \"S0709\", \"S0710\", \"S0714\", \"S0805\", \"S0806\", \"S0807\", \"S0808\", \"S0809\", \"S0810\", \"S0814\", \"S0905\", \"S0906\", \"S0907\", \"S0908\", \"S0909\", \"S0910\", \"S0914\", \"S1005\", \"S1006\", \"S1007\", \"S1008\", \"S1009\", \"S1010\", \"S1014\", \"S1105\", \"S1106\", \"S1107\", \"S1108\", \"S1109\", \"S1110\", \"S1114\", \"S1205\", \"S1206\", \"S1207\", \"S1208\", \"S1209\", \"S1210\", \"S1214\", \"S1305\", \"S1306\", \"S1307\", \"S1308\", \"S1309\", \"S1310\", \"S1314\"];\nconst INCORPORATED_ACTIONS = [/* \"H0199\", \"H0299\", \"H0799\", \"H0899\", \"H0999\", \"H1099\", \"H1199\", \"H1499\", \"H1599\", \"H1899\", \"H2099\", \"H2199\", \"H2399\", \"H2499\", */ \"S0199\", \"S0299\", \"S0399\", \"S0499\", \"S0599\", \"S0699\", \"S0799\", \"S0899\", \"S0999\", \"S1099\", \"S1199\", \"S1299\", \"S1399\"];\n\nclass VoteForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n voteData: '',\n message: '',\n isPreviewing: false,\n isLoaded: false,\n changeVotes: false,\n selectedVoteActionDescription: '',\n voteActionList: [],\n selectedCalendarCategoryType: '',\n calendarCategoryTypeList: [],\n pendingSave: false,\n isDirty: false,\n showWarning: false,\n settingIsBlock: false,\n billList: [],\n committeeList: [],\n sessionBills: [],\n savedIncorporated: false\n };\n\n this.resetForm = this.resetForm.bind(this);\n this.resetVoteMembers = this.resetVoteMembers.bind(this);\n this.getVoteActionReferences = this.getVoteActionReferences.bind(this);\n this.getCalendarCategoryTypes = this.getCalendarCategoryTypes.bind(this);\n this.handleVoteActionDescriptionChange = this.handleVoteActionDescriptionChange.bind(this);\n this.handleCalendarCategoryTypeChange = this.handleCalendarCategoryTypeChange.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleVoteChange = this.handleVoteChange.bind(this);\n this.handleVoteLegislationChange = this.handleVoteLegislationChange.bind(this);\n this.handleCommitteeChange = this.handleCommitteeChange.bind(this);\n this.updateStatement = this.updateStatement.bind(this);\n this.togglePreview = this.togglePreview.bind(this);\n this.togglePortal = this.togglePortal.bind(this);\n this.toggleTallySheetPDFPreview = this.toggleTallySheetPDFPreview.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.toggleChangeVotes = this.toggleChangeVotes.bind(this);\n this.setVoteTally = this.setVoteTally.bind(this);\n this.toggleWarning = this.toggleWarning.bind(this);\n this.getVoteListForFinalVote = this.getVoteListForFinalVote.bind(this);\n this.toggleEditVoteLegislation = this.toggleEditVoteLegislation.bind(this);\n this.getCommittees = this.getCommittees.bind(this);\n this.getBills = this.getBills.bind(this);\n this.handleBillChange = this.handleBillChange.bind(this);\n this.handleSenateCommitteeVoteLegislationChange = this.handleSenateCommitteeVoteLegislationChange.bind(this);\n\n this.pdfRef = React.createRef();\n }\n\n resetForm() {\n const originalVoteData = JSON.parse(JSON.stringify(this.props.votes.voteDetailsResponse[0]));\n this.setState({\n pendingSave: false,\n voteData: originalVoteData,\n selectedVoteActionDescription: this.state.voteActionList.find(x => x.EventCode === originalVoteData.EventCode),\n selectedCalendarCategoryType: this.state.calendarCategoryTypeList.find(x => x.CalendarCategoryTypeID === originalVoteData.CalendarCategoryTypeID) || null,\n isDirty: false\n });\n }\n\n resetVoteMembers() {\n let voteData = { ...this.state.voteData };\n let originalVoteData = JSON.parse(JSON.stringify(this.props.votes.voteDetailsResponse[0]));\n const originalVoteMembers = originalVoteData.VoteMember;\n voteData.VoteMember = originalVoteMembers;\n this.setState({\n voteData,\n isDirty: false\n }, () => {\n this.setVoteTally();\n })\n }\n\n getVoteActionReferences(setSelectedValue) {\n this.setState({ loadingVoteActionList: true }, () => {\n this.props.actions.getVoteActionList(\"?\"\n + (this.state.voteData.CalendarCategoryTypeID ? \"calendarCategoryTypeId=\" + this.state.voteData.CalendarCategoryTypeID + \"&\" : \"\")\n + \"committeeID=\" + this.state.voteData.CommitteeID\n + \"&voteTypeID=\" + this.state.voteData.VoteTypeID\n + \"&chamberCode=\" + this.state.voteData.ChamberCode)\n .then(() => {\n let voteActionList = [...this.props.votes.voteActionList];\n\n // if this is a committee vote, separate the vote action options between actions of this vote's committee and then all other committee's vote actions\n if (this.state.voteData.VoteType !== \"Floor\") {\n voteActionList = [\n {\n label: this.state.voteData.CommitteeName ? this.state.voteData.CommitteeName + \" Vote Actions\" : 'Vote Actions From This Committee',\n options: [...voteActionList.filter(v => v.EventCode.substr(1, 2) === this.state.voteData.EventCode.substr(1, 2))]\n },\n {\n label: 'Vote Actions From Other Committees',\n options: [...voteActionList.filter(v => v.EventCode.substr(1, 2) !== this.state.voteData.EventCode.substr(1, 2))]\n }\n ]\n }\n\n if (setSelectedValue) {\n let voteAction = voteActionList.flatMap(x => x.options || x).find(x => x.EventCode === this.state.voteData.EventCode) || null;\n let voteData = { ...this.state.voteData };\n if (voteAction) {\n voteData.VoteActionID = voteAction.VoteActionID;\n voteData.EventCode = voteAction.EventCode;\n } else if (voteData.EventCode && voteData.VoteActionDescription) {\n const voteObj = { EventCode: voteData.EventCode, Description: voteData.VoteActionDescription, ChamberCode: voteData.ChamberCode, VoteActionID: voteData.VoteActionID }\n if (this.state.voteData.VoteType !== \"Floor\") {\n voteActionList[0].options.push(voteObj);\n } else {\n voteActionList.push(voteObj)\n }\n voteAction = voteActionList.flatMap(x => x.options || x).find(x => x.EventCode === this.state.voteData.EventCode) || null;\n }\n this.setState({ selectedVoteActionDescription: voteAction, voteData })\n }\n this.setState({ voteActionList, loadingVoteActionList: false })\n })\n })\n }\n\n getCalendarCategoryTypes() {\n this.props.actions.getCalendarCategoriesReferences('?Chambercode=' + this.state.voteData.ChamberCode)\n .then(() => {\n let calendarCategoryTypeList = this.props.calendar.calendarCategoriesReferences;\n let selectedCalendarCategoryType = calendarCategoryTypeList.find(x => x.CalendarCategoryTypeID === this.state.voteData.CalendarCategoryTypeID);\n if (!selectedCalendarCategoryType && this.state.voteData.CalendarCategoryTypeID && this.state.voteData.CategoryDescription) {\n calendarCategoryTypeList.push({ Description: this.state.voteData.CategoryDescription, CalendarCategoryTypeID: this.state.voteData.CalendarCategoryTypeID })\n selectedCalendarCategoryType = calendarCategoryTypeList.find(x => x.CalendarCategoryTypeID === this.state.voteData.CalendarCategoryTypeID);\n }\n this.setState({\n calendarCategoryTypeList,\n selectedCalendarCategoryType\n });\n });\n }\n\n handleVoteActionDescriptionChange(value) {\n let voteData = { ...this.state.voteData };\n voteData.VoteActionDescription = value.Description;\n voteData.ChamberCode = value.ChamberCode;\n voteData.EventCode = value.EventCode;\n voteData.VoteActionID = value.VoteActionID;\n voteData.Description = voteData.VoteActionDescription + \" \" + voteData.VoteTally;\n\n this.setState({\n pendingSave: true,\n voteData: voteData,\n selectedVoteActionDescription: this.state.voteActionList.find(x => x.EventCode === voteData.EventCode),\n isDirty: true\n });\n }\n\n handleCalendarCategoryTypeChange(value) {\n let voteData = { ...this.state.voteData };\n voteData.CalendarCategoryTypeID = value.CalendarCategoryTypeID;\n\n this.setState({\n pendingSave: true,\n voteData: voteData,\n selectedCalendarCategoryType: this.state.calendarCategoryTypeList.find(x => x.CalendarCategoryTypeID === value.CalendarCategoryTypeID),\n isDirty: true\n }, () => {\n this.getVoteActionReferences(true);\n });\n }\n\n handleInputChange(key, value) {\n let voteData = { ...this.state.voteData };\n voteData[key] = value;\n let promise;\n if (key === \"VoteTally\") {\n voteData.Description = voteData.VoteActionDescription + \" \" + voteData.VoteTally\n } else if (key === \"IsBlock\") {\n if (voteData.VoteLegislation && voteData.VoteLegislation.filter(v => !v.DeletionDate).length > 1 && !value) {\n return;\n } else if (!this.state.billList || !this.state.billList.length) {\n //Get bills in the session for the bill dropdown\n promise = new Promise(res => {\n this.setState({ settingIsBlock: true }, () => {\n this.props.actions.getSessionBills('?sessionID= ' + voteData.SessionID).then(() => {\n let billList = [...this.props.bills.sessionBills];\n billList.forEach(bill => {\n bill.label = bill.LegislationNumber\n bill.value = bill.LegislationID\n });\n this.setState({\n billList: billList,\n settingIsBlock: false\n })\n res();\n })\n });\n })\n }\n }\n Promise.resolve(promise).then(() => {\n this.setState({\n pendingSave: true,\n voteData: voteData,\n isDirty: true\n }, () => {\n //if they are setting it to be the final vote, and we have not already checked to make sure this is valid based on other votes on this date, do so now\n if (key === \"FinalVote\" && !this.state.committeeSameDayVoteList && this.state.voteData.FinalVote && this.state.voteData.VoteType === \"Committee\" && this.state.voteData.CommitteeID && !this.state.voteData.ParentCommitteeID) {\n this.getVoteListForFinalVote(this.state.voteData);\n }\n });\n })\n }\n\n handleDateChange(val) {\n let voteData = { ...this.state.voteData };\n voteData.VoteDate = moment(val).utcOffset(-300).format(\"MM/DD/YYYY HH:mm:ss\")\n this.setState({\n pendingSave: true,\n voteData: voteData,\n isDirty: true\n });\n }\n\n handleVoteChange(index, val) {\n let voteData = { ...this.state.voteData };\n voteData.VoteMember[index].ResponseCode = val;\n this.setState({\n pendingSave: true,\n voteData: voteData,\n isDirty: true\n }, () => {\n this.setVoteTally();\n });\n }\n\n toggleEditVoteLegislation(undo) {\n this.setState({ editingVoteLegislation: !this.state.editingVoteLegislation, showEditingVoteLegislationMessage: false }, () => {\n let voteData = { ...this.state.voteData }\n if (this.state.editingVoteLegislation) {\n this.setState({ uneditedVoteLegislation: JSON.parse(JSON.stringify(voteData.VoteLegislation)) })\n } else if (undo === true) {\n voteData.VoteLegislation = this.state.uneditedVoteLegislation;\n this.setState({ voteData });\n }\n })\n }\n\n handleVoteLegislationChange(_, behavior) {\n let voteData = { ...this.state.voteData };\n let voteLegislation = [...voteData.VoteLegislation];\n if (behavior && behavior.action) {\n switch (behavior.action) {\n case 'select-option':\n const deletedLegIndex = voteLegislation.findIndex(vl => vl.DeletionDate && vl.LegislationID === behavior.option.LegislationID);\n if (deletedLegIndex >= 0) {\n voteLegislation[deletedLegIndex].DeletionDate = null;\n } else {\n voteLegislation.push({ LegislationNumber: behavior.option.LegislationNumber, LegislationID: behavior.option.LegislationID });\n }\n break;\n case 'remove-value':\n const legIndex = voteLegislation.findIndex(vl => !vl.DeletionDate && vl.LegislationID === behavior.removedValue.LegislationID);\n voteLegislation[legIndex].DeletionDate = moment();\n break;\n case 'clear':\n voteLegislation.filter(vl => !vl.DeletionDate).forEach(vl => vl.DeletionDate = moment())\n break;\n default:\n break;\n }\n }\n\n voteData.VoteLegislation = voteLegislation;\n voteData.IsBlock = voteLegislation.filter(vl => !vl.DeletionDate).length > 1 ? true : voteData.IsBlock;\n this.setState({\n voteData\n });\n }\n\n handleSenateCommitteeVoteLegislationChange(value) {\n let voteData = { ...this.state.voteData };\n voteData.LegislationNumber = value.LegislationNumber;\n voteData.VoteLegislation[0].DeletionDate = moment().toISOString();\n voteData.VoteLegislation.push(value);\n voteData.IsBlock = false;\n this.setState({\n voteData\n });\n }\n\n handleCommitteeChange(value) {\n let voteData = { ...this.state.voteData };\n\n if(!value) {\n voteData.ReferToCommitteeID = undefined;\n voteData.ReferToCommitteeNumber = undefined;\n voteData.ReferToCommitteeName = undefined;\n } else {\n voteData.ReferToCommitteeID = value.value;\n }\n\n this.setState({\n voteData: voteData\n })\n }\n\n handleBillChange(value) {\n let voteData = { ...this.state.voteData };\n\n voteData.ReferenceID = value.LegislationID;\n voteData.ReferenceNumber = value.label;\n\n this.setState({\n voteData: voteData\n })\n }\n\n updateStatement(voteMembers) {\n let voteData = { ...this.state.voteData };\n voteData.VoteMember = voteMembers;\n this.setState({\n pendingSave: true,\n voteData: voteData,\n isDirty: true\n });\n }\n\n setVoteTally() {\n const yeaVotes = this.state.voteData.VoteMember.filter(vm => vm.ResponseCode === \"Y\").length.toString();\n const nayVotes = this.state.voteData.VoteMember.filter(vm => vm.ResponseCode === \"N\").length.toString();\n const abstainVotes = this.state.voteData.VoteMember.filter(vm => vm.ResponseCode === \"A\").length.toString();\n this.handleInputChange('VoteTally', '(' + yeaVotes + '-Y ' + nayVotes + \"-N\" + (abstainVotes !== \"0\" ? \" \" + abstainVotes + \"-A\" : \"\") + \")\")\n }\n\n togglePreview() {\n this.setState(state => ({\n isPreviewing: !state.isPreviewing\n }));\n }\n\n togglePortal() {\n this.setState({\n showPortal: !this.state.showPortal\n }, () => {\n if (this.state.showPortal) {\n this.toggleTallySheetPDFPreview();\n }\n });\n }\n\n toggleTallySheetPDFPreview() {\n this.setState({\n gettingPdf: true\n });\n // This endpoint returns a pdf document and not json so the partnerRequest function will not work\n // It doesn't need to be saved to the redux store because it will not be referenced after the user sees it. So it is called here within the component.\n const API_URL = window.env ? window.env.API_SERVER : '';\n const idToken = 'LIS_ID_TOKEN';\n let signal = new window.AbortController().signal;\n const config = {\n headers: {\n 'content-type': \"application/json; charset=utf-8\",\n Authorization: \"Bearer \" + localStorage.getItem(idToken),\n 'WebAPIKey': process.env.REACT_APP_API_KEY\n },\n method: \"GET\",\n signal: signal\n };\n let params = `?voteId=${this.state.voteData.VoteID}` + `&IsNonLegislative=` + ((this.state.voteData.LegislationNumber || this.state.voteData.VoteLegislation.length > 0) ? false : true)\n fetch((API_URL || process.env.REACT_APP_VOTE_FILE_GEN_URL) + '/VoteFileGeneration/api/PreviewTallySheetFileAsync' + params, config)\n .then(response => {\n if (response.status === 204) {\n throw 'No Content';\n } else if (response.status > 399) {\n throw response;\n } else {\n response.blob()\n .then(res => {\n if (this.pdfRef && this.pdfRef.current) {\n let pdfRef = this.pdfRef.current;\n pdfRef.setAttribute('src', URL.createObjectURL(res));\n pdfRef.onload = () => {\n this.setState({\n gettingPdf: false\n });\n };\n }\n })\n }\n }).catch(err => {\n if (err.name === 'AbortError') {\n return;\n }\n this.setState({\n gettingPdf: false\n });\n //This is a response and the text needs to be extracted\n if (err.text) {\n err.text().then(err => console.log(err.toString()));\n } else {\n console.log(err.toString())\n }\n this.props.actions.makeToast([{ message: \"Failed To Get Data\", type: \"failure\" }]);\n })\n }\n\n toggleWarning() {\n this.setState({\n showWarning: !this.state.showWarning\n })\n }\n\n handleSave(isPublishing) {\n this.setState({ isSaving: true, showWarning: false }, () => {\n let voteData = { ...this.state.voteData };\n if (isPublishing) {\n voteData.IsPublic = true;\n }\n\n this.props.actions.saveVote({ VoteList: [voteData] })\n .then(async () => {\n if (this.props.votes.voteSaveError) {\n throw this.props.votes.voteSaveError;\n }\n if (this.props.votes.voteSave.length === 0) {\n throw 'No vote data returned'\n }\n this.setState({ pendingSave: false })\n const voteData = JSON.parse(JSON.stringify(this.props.votes.voteSave[0]));\n if (isPublishing) {\n //Call Vote File Generation and move the user back to the grid\n this.props.actions.voteFileGen('?voteID=' + voteData.VoteID)\n .then(() => {\n if (this.props.votes.voteFileError) {\n console.log(this.props.votes.voteFileError.toString());\n }\n })\n if (voteData.FinalVote && voteData.VoteType === \"Committee\" && voteData.CommitteeID && !voteData.ParentCommitteeID && voteData.VoteDate) {\n let committeeSameDayVoteList = [...this.state.committeeSameDayVoteList];\n committeeSameDayVoteList = committeeSameDayVoteList.concat(voteData.VoteLegislation.filter(vl => !vl.DeletionDate).map(vl => { return { LegislationNumber: vl.LegislationNumber, EventCode: voteData.EventCode } }));\n const success = await this.props.createChairmansReportSummarizedOnMinutes(voteData.SessionID, voteData.ChamberCode, voteData.CommitteeID, moment(voteData.VoteDate).utc().hour(0), committeeSameDayVoteList);\n if (!success) {\n this.props.actions.makeToast([{ message: \"Vote Publish Successful, Chairman's Report Save Failed\", type: \"failure\", long: true }]);\n } else {\n this.props.actions.makeToast([{ message: \"Vote Published\", type: \"success\" }]);\n }\n } else {\n this.props.actions.makeToast([{ message: \"Vote Published\", type: \"success\" }]);\n }\n this.setState({ isDirty: false }, () => {\n this.props.history.push('/vote-management');\n });\n } else {\n this.props.actions.makeToast([{ message: \"Vote Saved\", type: \"success\" }]);\n this.setState({\n voteData: voteData,\n isSaving: false,\n isDirty: false,\n changeVotes: false,\n savedIncorporated: INCORPORATED_ACTIONS.includes(voteData.EventCode)\n });\n }\n }).catch((err) => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err.toString());\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false\n });\n });\n });\n }\n\n toggleChangeVotes() {\n this.setState({ changeVotes: !this.state.changeVotes }, () => {\n if (!this.state.changeVotes) {\n this.resetVoteMembers();\n }\n })\n }\n\n getCommittees(sessionId) {\n this.props.actions.getCommitteeList(sessionId).then(() => {\n let committeeList = [...this.props.committee.committeeList.filter(x => x.ChamberCode !== \"H\")];\n committeeList.forEach(committee => {\n committee.label = committee.Name;\n committee.value = committee.CommitteeID;\n });\n this.setState({\n committeeList: committeeList\n });\n\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getBills(sessionId) {\n this.props.actions.getBillNumbers('?sessionID=' + sessionId).then(() => {\n let billNumbers = this.props.bills.billNumbers;\n billNumbers.forEach(bill => {\n bill.label = bill.LegislationNumber;\n bill.value = bill.LegislationNumber;\n })\n this.setState({\n sessionBills: billNumbers\n });\n })\n }\n\n componentDidMount() {\n const voteId = this.props.match.params.voteid;\n this.props.actions.getVoteDetails('?voteID=' + voteId, true)\n .then(() => {\n if (this.props.votes.voteDetailsError) {\n throw this.props.votes.voteDetailsError;\n }\n if (this.props.votes.voteDetailsResponse.length === 0) {\n throw \"Cannot get vote data\";\n }\n const voteData = JSON.parse(JSON.stringify(this.props.votes.voteDetailsResponse[0]));\n\n //Get bills in the session for the bill dropdown\n this.props.actions.getSessionBills('?sessionID= ' + voteData.SessionID).then(() => {\n let billList = [...this.props.bills.sessionBills];\n billList.forEach(bill => {\n bill.label = bill.LegislationNumber\n bill.value = bill.LegislationID\n });\n this.setState({\n billList: billList,\n })\n\n // if this is a final vote, check other votes for this committee on this day to ensure whether or not this vote should be publishable\n if (voteData.FinalVote && voteData.VoteType === \"Committee\" && voteData.CommitteeID && !voteData.ParentCommitteeID) {\n this.getVoteListForFinalVote(voteData);\n } else {\n this.setState({\n isLoaded: true,\n voteData: voteData\n }, () => {\n this.getVoteActionReferences(true);\n if (voteData.VoteType === \"Floor\") {\n this.getCalendarCategoryTypes();\n }\n });\n }\n //Get the session data for use in the preview\n this.props.actions.getSessionById(this.props.votes.voteDetailsResponse[0].SessionID)\n\n this.getCommittees(this.props.votes.voteDetailsResponse[0].SessionID);\n this.getBills(this.props.votes.voteDetailsResponse[0].SessionID);\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.setState({\n message: err.toString(),\n isLoaded: true\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getVoteListForFinalVote(voteData) {\n let voteParams = `?startDate=${moment(voteData.VoteDate).startOf('day').format('YYYY-MM-DDTHH:mm:ss')}&endDate=${moment(voteData.VoteDate).endOf('day').format('YYYY-MM-DDTHH:mm:ss')}`;\n voteParams += '&chamberCode=' + voteData.ChamberCode;\n voteParams += '&voteTypeID=' + voteData.VoteTypeID;\n voteParams += '&committeeID=' + voteData.CommitteeID;\n this.props.actions.getVoteList(voteParams)\n .then(() => {\n if (this.props.votes.voteListError) {\n throw this.props.votes.voteListError;\n }\n if (this.props.votes.voteList.length === 0) {\n throw 'No Votes in list'; // there should be at least one considering we already retrieved one\n }\n this.setState({\n isLoaded: true,\n voteData: voteData,\n preventPublish: this.props.votes.voteList.find(v => v.VoteID !== voteData.VoteID && v.CommitteeID === voteData.CommitteeID && !v.IsPublic), //don't allow publishing Final Votes before all preceding votes for that committee are published,\n committeeSameDayVoteList: this.props.votes.voteList.filter(v => v.VoteID !== voteData.VoteID && v.CommitteeID === voteData.CommitteeID).map(v => { return { LegislationNumber: v.LegislationNumber, EventCode: v.EventCode } })\n }, () => {\n this.getVoteActionReferences(true);\n });\n })\n }\n\n render() {\n const { voteData, isLoaded, isPreviewing, message, isSaving, pendingSave, preventPublish, selectedVoteActionDescription, voteActionList, selectedCalendarCategoryType, calendarCategoryTypeList, editingVoteLegislation } = this.state;\n\n const customStyles = (multi) => ({\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: \"10px 0 0 0\",\n minHeight: 0,\n fontSize: '0.8em',\n height: !multi && \"32px\",\n zIndex: multi && '10'\n }),\n valueContainer: (base) => ({\n ...base,\n height: !multi && \"32px\"\n }),\n dropdownIndicator: (base) => ({\n ...base,\n paddingTop: \"0px\",\n paddingBottom: \"0px\"\n }),\n input: (base) => ({\n ...base,\n margin: \"0px\",\n position: multi ? \"relative\" : \"absolute\"\n }),\n singleValue: (base, state) => {\n return { ...base, };\n },\n menu: (base) => ({\n ...base,\n position: 'absolute',\n zIndex: '10'\n })\n })\n\n if (message) {\n return (\n <div className=\"dlas-forms\">\n <span>{message}</span>\n </div>);\n }\n if (!isLoaded) {\n return (\n <div className=\"user-forms\">\n <div className=\"center-spinner spinner\">Loading results...</div>\n </div>);\n }\n if (isPreviewing) {\n return (\n <div>\n <div className=\"flex-row\">\n <h2>Vote Preview</h2>\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print\"> Print</a>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <div ref={el => (this.componentRef = el)}>\n <VoteDetails\n sessionData={this.props.session.selectedSession}\n billData={voteData.VoteLegislation ? voteData.VoteLegislation.filter(vl => !vl.DeletionDate) : []}\n voteMembers={voteData.VoteMember || []}\n voteData={voteData}\n />\n </div>\n <div className=\"button-bar\">\n <div></div>\n <div className=\"align-right\">\n <button onClick={this.togglePreview} type=\"button\" className=\"button secondary\">Edit</button>\n <button onClick={() => this.handleSave(true)} type=\"button\" disabled={isSaving || preventPublish} className=\"button\">Publish</button>\n {preventPublish && <p className=\"input-feedback\">You must publish all preceding votes for this commmittee before publishing this final vote</p>}\n </div>\n </div>\n </div>\n );\n }\n\n let showVoteTallyWarningMessage = false;\n let voteTallyInDescription = voteData.Description.match(/\\(\\d+-Y\\s\\d+-N(\\s\\d+-A)?\\)/);\n if (voteTallyInDescription) {\n voteTallyInDescription = voteTallyInDescription[0];\n showVoteTallyWarningMessage = voteTallyInDescription !== voteData.VoteTally;\n }\n\n return (\n <div className=\"user-forms\">\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle=\"Preview\">\n {this.state.gettingPdf &&\n <div className=\"center-spinner spinner\">You must save before seeing changes in this PDF preview</div>\n }\n <iframe style={{ display: this.state.gettingPdf ? 'none' : 'block', width: '100%', height: '100%' }} ref={this.pdfRef}></iframe>\n </Popout>\n }\n {this.state.showWarning &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content\">\n <p>You are about to save a change to a vote. Are you sure about this?</p>\n <button className=\"button secondary float-right\" onClick={() => this.toggleWarning(false)}>No</button>\n <button className=\"button primary float-right\" onClick={() => this.handleSave()} style={{ marginRight: \"15px\" }}>Yes</button>\n <br />\n </div>\n </div>\n }\n <div className=\"dlas-forms\">\n <form className=\"vote-form\">\n <fieldset className=\"fieldset-collapse fieldset-open\">\n <legend>Vote Information</legend>\n <div className=\"inner-grid two\">\n <div className=\"multi-row three no margin\">\n <div>\n <label className=\"label\" htmlFor=\"sequence\">Vote Number</label>\n <input\n id=\"vote-number\"\n type=\"text\"\n placeholder=\"Vote Number\"\n value={voteData.VoteNumber || ''}\n onChange={(e) => this.handleInputChange('VoteNumber', e.target.value)}\n />\n </div>\n <div>\n <label className=\"label\" htmlFor=\"time\">Time of Vote</label>\n <DatePicker\n id=\"time\"\n selected={moment(voteData.VoteDate)}\n onChange={this.handleDateChange}\n showTimeSelect\n timeFormat=\"h:mm A\"\n timeIntervals={1}\n timeCaption=\"Time\"\n dateFormat=\"MM/DD/YYYY h:mm A\"\n />\n </div>\n <div>\n <label className=\"label\" htmlFor=\"pass-fail\">Pass/Fail</label>\n <Select\n id=\"pass-fail\"\n className=\"grid-selector-dropdown\"\n styles={customStyles()}\n options={PassFailOptions}\n value={PassFailOptions.find(o => o.value === voteData.PassFail)}\n onChange={(value) => this.handleInputChange(\"PassFail\", value.value)} />\n </div>\n </div>\n <div className=\"multi-row two no margin\" style={{ gap: '15px', gridTemplateColumns: '80% 20%' }}>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 100px' }}>\n <div>\n <div>\n <label className=\"label\">Bills</label>\n <a className={`icon ${editingVoteLegislation ? 'save' : 'edit'}`} style={{ marginLeft: '7px' }} onClick={this.toggleEditVoteLegislation} />\n {editingVoteLegislation && <a className=\"icon delete\" style={{ marginLeft: '7px' }} onClick={() => this.toggleEditVoteLegislation(true)} />}\n </div>\n {voteData.VoteLegislation &&\n (editingVoteLegislation ?\n (this.state.voteData.ChamberCode === \"S\" && this.state.voteData.VoteType === \"Committee\")\n ? <Select\n styles={customStyles(true)}\n options={this.state.billList.filter(bl => !voteData.VoteLegislation.filter(vl => !vl.DeletionDate).map(vl => vl.LegislationID).includes(bl.LegislationID))}\n value={voteData.VoteLegislation.filter(vl => !vl.DeletionDate)}\n getOptionLabel={vl => vl.LegislationNumber}\n onChange={this.handleSenateCommitteeVoteLegislationChange}\n />\n : <Select\n styles={customStyles(true)}\n options={this.state.billList.filter(bl => !voteData.VoteLegislation.filter(vl => !vl.DeletionDate).map(vl => vl.LegislationID).includes(bl.LegislationID))}\n value={voteData.VoteLegislation.filter(vl => !vl.DeletionDate)}\n getOptionLabel={vl => vl.LegislationNumber}\n onChange={this.handleVoteLegislationChange}\n isMulti /* Conditionals for isMulti don't work */\n />\n :\n <input\n type=\"text\"\n value={voteData.VoteLegislation.filter(vl => !vl.DeletionDate).map((leg, index) => leg.LegislationNumber).join(', ')}\n title={voteData.VoteLegislation.filter(vl => !vl.DeletionDate).map((leg, index) => leg.LegislationNumber).join(', ')}\n disabled\n />)\n }\n </div>\n <div style={{ position: 'relative', left: \"20px\" }}>\n <div className=\"flex-row\" style={{ justifyContent: 'flex-start', alignItems: 'center' }}>\n <div style={{ textAlign: 'left', width: '60px' }}>\n <label htmlFor=\"reprint-button\" style={{ paddingLeft: '0px' }} className=\"checkbox-label label no-background\">Is Block</label>\n <div className=\"toggle-switch\" disabled={this.state.settingIsBlock || (voteData.IsBlock && voteData.VoteLegislation && voteData.VoteLegislation.filter(v => !v.DeletionDate).length > 1)} onClick={() => this.handleInputChange(\"IsBlock\", !voteData.IsBlock)}>\n <input id=\"reprint-button\" checked={voteData.IsBlock} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n {this.state.settingIsBlock && <div className=\"spinner small-spinner\" style={{ height: '0px' }} />}\n </div>\n </div>\n </div>\n <div className=\"published-status multi-row two\">\n {voteData.VoteType === \"Committee\" && voteData.CommitteeID && !voteData.ParentCommitteeID && voteData.VoteDate &&\n <div style={{ width: '102%', textAlign: 'left' }}>\n <label htmlFor=\"reprint-button\" style={{ paddingLeft: '0px' }} className=\"checkbox-label label no-background\">Final Vote</label>\n <div className=\"toggle-switch\" onClick={() => this.handleInputChange(\"FinalVote\", !voteData.FinalVote)}>\n <input id=\"reprint-button\" checked={voteData.FinalVote} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n }\n {voteData.IsPublic ? <p style={{ textAlign: 'right', marginTop: '0px' }}>Published</p> : <p style={{ marginTop: '0px' }} className=\"dirty\">Not Published</p>}\n </div>\n </div>\n </div>\n <div className=\"multi-row three-two-and-one no margin\">\n <div>\n <label className=\"label\" htmlFor=\"vote-act\">Vote Action</label>\n <Select\n id=\"vote-act\"\n value={selectedVoteActionDescription}\n options={voteActionList}\n getOptionLabel={v => v.EventCode + \" - \" + v.Description}\n getOptionValue={v => v.EventCode}\n styles={customStyles()}\n placeholder={this.state.loadingVoteActionList ? 'Loading...' : 'Select...'}\n onChange={this.handleVoteActionDescriptionChange}\n />\n </div>\n <div>\n <label className=\"label\" htmlFor=\"ref-committee\">Committee Rereferred</label>\n <Select\n id=\"ref-committee\"\n value={this.state.committeeList ? this.state.committeeList.find(x => x.value === this.state.voteData.ReferToCommitteeID) : { label: \"Loading...\" }}\n options={this.state.committeeList}\n styles={customStyles()}\n placeholder={this.state.loadingVoteActionList ? 'Loading...' : 'Select...'}\n onChange={this.handleCommitteeChange}\n isDisabled={!REFER_ACTIONS.includes(this.state.voteData.EventCode)}\n isClearable\n />\n </div>\n <div>\n <label className=\"label\" htmlFor=\"motion-code\">Vote Tally</label>\n <input\n id=\"vote-tally\"\n className={showVoteTallyWarningMessage ? 'input-feedback-warning-background' : ''}\n type=\"text\"\n placeholder=\"Vote Tally\"\n value={voteData.VoteTally}\n disabled\n />\n </div>\n {voteData.VoteType === \"Floor\" &&\n <div>\n <label className=\"label\" htmlFor=\"vote-act\">Calendar Category</label>\n <Select\n id=\"vote-act\"\n value={selectedCalendarCategoryType}\n options={calendarCategoryTypeList}\n getOptionLabel={v => v.Description + (v.DisplayType ? ' (' + v.CategoryType + ')' : '')}\n getOptionValue={v => v.CalendarCategoryTypeID}\n styles={customStyles()}\n onChange={this.handleCalendarCategoryTypeChange}\n />\n </div>\n }\n </div>\n <div className=\"multi-row three-and-one no margin\">\n <div>\n <label className=\"label\" htmlFor=\"vote-desc\">Vote Description (Appears on the Tally Sheet)</label>\n <input\n style={showVoteTallyWarningMessage ? { marginBottom: '0px' } : {}}\n className={showVoteTallyWarningMessage ? 'input-feedback-warning-background' : ''}\n id=\"vote-desc\"\n type=\"text\"\n placeholder=\"Vote Description\"\n value={voteData.Description}\n onChange={(e) => this.handleInputChange(\"Description\", e.target.value)}\n />\n {showVoteTallyWarningMessage && <p className=\"input-feedback-warning\" style={{ marginTop: '2px' }}>{voteTallyInDescription} in the Vote Description does not match the Vote Tally {voteData.VoteTally}. This will not prevent you from saving.</p>}\n </div>\n <div>\n <label className=\"label\" htmlFor=\"vote-leg\">Incorporating Legislation</label>\n <Select\n id=\"vote-leg\"\n value={(this.state.billList && this.state.voteData.ReferenceID && INCORPORATED_ACTIONS.includes(this.state.voteData.EventCode) && this.state.billList.find(x => x.LegislationID === this.state.voteData.ReferenceID)) ? this.state.billList.find(x => x.LegislationID === this.state.voteData.ReferenceID) : { label: \"Select...\" }}\n options={this.state.sessionBills}\n styles={customStyles()}\n onChange={this.handleBillChange}\n isDisabled={!INCORPORATED_ACTIONS.includes(this.state.voteData.EventCode) || !this.state.voteData.VoteType === \"Committee\"}\n />\n </div>\n </div>\n <div>\n <button type=\"button\" className=\"button\" onClick={this.toggleChangeVotes}>{!this.state.changeVotes ? 'Change Votes' : 'Cancel'}</button>\n </div>\n <VoteMembers\n voteMembers={this.state.voteData.VoteMember || []}\n handleVoteChange={this.handleVoteChange}\n changeVotes={this.state.changeVotes}\n />\n {voteData.VoteType === \"Floor\" &&\n <VoteStatements\n members={voteData.VoteMember || []}\n updateStatement={this.updateStatement}\n />\n }\n <div>\n <p className=\"title\">{\"Vote Comment\" + (this.state.voteData.ChamberCode === \"S\" ? \" (ex. Lt. Governor's vote in the event of a tie)\" : \"\")}</p>\n <input\n style={{ width: \"100%\" }}\n type=\"text\"\n value={this.state.voteData.VoteComment}\n placeholder=\"Vote Comment\"\n onChange={(e) => this.handleInputChange(\"VoteComment\", e.target.value)}\n />\n </div>\n </fieldset>\n <div className=\"button-bar\">\n <div>\n <button type=\"button\" className=\"button\" onClick={this.resetForm}>Reset</button>\n {this.state.voteData.MinutesBookID && this.state.voteData.ChamberCode === \"S\" && this.state.voteData.VoteType === \"Committee\" &&\n <>\n <button style={{ marginLeft: \"295px\" }} type=\"button\" className=\"button primary\" onClick={() => this.props.history.push(\"/session-details/\" + this.state.voteData.SessionCode + \"/committee-information/\" + this.state.voteData.CommitteeNumber + \"/meetings/\" + this.state.voteData.MinutesBookID + \"/1\")}>Meeting View</button>\n <button type=\"button\" className=\"button primary\" onClick={() => this.props.history.push(\"/session-details/\" + this.state.voteData.SessionCode + \"/committee-information/\" + this.state.voteData.CommitteeNumber + \"/meetings/\" + this.state.voteData.MinutesBookID + \"/2\")}>Chair's Report</button>\n <button type=\"button\" className=\"button primary\" onClick={() => this.props.history.push(\"/session-details/\" + this.state.voteData.SessionCode + \"/committee-information/\" + this.state.voteData.CommitteeNumber + \"/meetings/\" + this.state.voteData.MinutesBookID + \"/3\")}>Vote Sheet</button>\n </>\n }\n </div>\n <div className=\"align-right\" style={{display: \"inline-flex\", height: \"32px\"}}>\n {this.state.showEditingVoteLegislationMessage && <span style={{ fontSize: '15px' }}>Please finish updating the vote legislation</span>}\n {this.state.voteData.EventDeletionDate && <span className=\"txt fail\" style={{fontSize: \"15px\", whiteSpace: \"nowrap\"}}>Vote Event has been deleted</span>}\n <button disabled={isSaving\n || (this.state.savedIncorporated && !this.state.isDirty)\n } onMouseEnter={() => { if (editingVoteLegislation) { this.setState({ showEditingVoteLegislationMessage: true }) } }} onClick={() => editingVoteLegislation ? null : this.state.changeVotes && this.state.isDirty ? this.toggleWarning() : this.handleSave(voteData.IsPublic)} type=\"button\" className=\"button\">{voteData.IsPublic ? \"Republish\" : \"Save\"}</button>\n {!voteData.IsPublic && <button disabled={pendingSave || isSaving} onClick={this.togglePreview} type=\"button\" className=\"button secondary\">Review</button>}\n {voteData.VoteType === \"Floor\" && voteData.ChamberCode === \"S\" && <button disabled={pendingSave || isSaving} onClick={this.togglePortal} type=\"button\" className=\"button secondary\">Preview Tally</button>}\n </div>\n </div>\n </form>\n </div>\n </div>);\n }\n}\n\nconst VoteMembers = props => {\n const responseStyle = (res) => {\n switch (res) {\n case 'Y':\n return 'yea';\n case 'N':\n return 'nay';\n case 'A':\n return 'abs';\n default:\n return '';\n }\n }\n\n let arrangedVoteMembers = [[]];\n let voteColumns = 0;\n\n props.voteMembers.map((member, index) => {\n if (index % 10 > 0 || (voteColumns === 0 && arrangedVoteMembers[0].length === 0)) {\n arrangedVoteMembers[voteColumns].push(member)\n } else {\n voteColumns++;\n arrangedVoteMembers.push([member])\n }\n })\n\n return (\n <div className=\"no-gap-grid four vote-members\">\n {arrangedVoteMembers.map((memberColumn, i) =>\n <div key={\"column-\" + i} className=\"inner-grid ten-vert\">\n {memberColumn.map((memberVote, j) =>\n <div className=\"inner-grid two vote-member-container\" key={\"member-\" + j}>\n <span>{memberVote.PatronDisplayName}</span>\n <div>\n <select disabled={!props.changeVotes} onChange={(e) => props.handleVoteChange(parseInt(i.toString() + j.toString()), e.target.value)} className={\"vote-response \" + responseStyle(memberVote.ResponseCode)} value={memberVote.ResponseCode}>\n <option value=\"Y\">Y</option>\n <option value=\"N\">N</option>\n <option value=\"A\">A</option>\n <option value=\"X\">X</option>\n </select>\n </div>\n </div>\n )}\n </div>\n )}\n </div>);\n}\n\nclass VoteStatements extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedMember: '',\n editorContent: '',\n newVoteStatement: []\n }\n this.toggleEditing = this.toggleEditing.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleMemberSelection = this.handleMemberSelection.bind(this);\n this.saveChange = this.saveChange.bind(this);\n this.addStatement = this.addStatement.bind(this);\n this.exitEdit = this.exitEdit.bind(this);\n }\n\n handleMemberSelection(val) {\n this.setState({\n selectedMember: val\n });\n }\n\n toggleEditing(statementIndex, memberId) {\n let members = [...this.props.members];\n const memberIndex = members.findIndex(member => member.MemberID === memberId);\n members[memberIndex].isEditing = !members[memberIndex].isEditing;\n this.state.newVoteStatement[statementIndex] = members[memberIndex].VoteStatement;\n this.props.updateStatement(members);\n }\n\n exitEdit() {\n this.setState({\n selectedMember: \"\",\n editorContent: \"\"\n })\n }\n\n handleChange(statementIndex, val) {\n let newVoteStatement = [...this.state.newVoteStatement];\n newVoteStatement[statementIndex] = val\n this.setState({\n newVoteStatement: newVoteStatement\n });\n }\n\n saveChange(statementIndex, memberId) {\n let members = [...this.props.members];\n const memberIndex = members.findIndex(member => member.MemberID === memberId);\n members[memberIndex].VoteStatement = this.state.newVoteStatement[statementIndex];\n members[memberIndex].isEditing = false;\n this.props.updateStatement(members);\n }\n\n addStatement() {\n let members = [...this.props.members];\n const memberIndex = members.findIndex(member => member.MemberID === this.state.selectedMember.MemberID);\n members[memberIndex].VoteStatement = this.state.editorContent;\n this.props.updateStatement(members);\n this.setState({\n selectedMember: '',\n editorContent: ''\n });\n }\n\n removeStatement(memberId) {\n let members = [...this.props.members];\n const memberIndex = members.findIndex(member => member.MemberID === memberId);\n members[memberIndex].VoteStatement = '';\n this.props.updateStatement(members);\n }\n\n render() {\n const { selectedMember, editorContent, newVoteStatement } = this.state;\n let memberOptions = [];\n this.props.members.forEach(member => {\n if (!member.VoteStatement) {\n member.label = member.PatronDisplayName;\n member.value = member.MemberID;\n memberOptions.push(member);\n }\n });\n const voteStatements = this.props.members.filter(member => member.VoteStatement);\n const customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n }\n }\n return (\n <div className=\"vote-statements\">\n <p className=\"title\">Add a Vote Statement</p>\n\n <div className=\"vote-statement-text no-gap-grid wide-middle\">\n <div className=\"vote-statement-header\">\n <span>Member</span>\n </div>\n <div className=\"vote-statement-header\">\n <span>Statement</span>\n </div>\n <div className=\"vote-statement-header\">\n <span></span>\n </div>\n {voteStatements.map((statement, index) =>\n <React.Fragment key={index}>\n <div className=\"vote-statement-content\">\n <span>{statement.PatronDisplayName}</span>\n </div>\n {statement.isEditing ?\n <React.Fragment>\n <div className=\"vote-statement-content\">\n <input\n type=\"text\"\n value={newVoteStatement[index]}\n onChange={e => this.handleChange(index, e.target.value)}\n />\n </div>\n <div>\n <button onClick={() => this.saveChange(index, statement.MemberID)} type=\"button\" className=\"icon save\"></button>\n <button onClick={() => this.toggleEditing(index, statement.MemberID)} type=\"button\" className=\"icon delete\"></button>\n </div>\n </React.Fragment>\n :\n <React.Fragment>\n <div className=\"vote-statement-content\">\n <span>{statement.VoteStatement}</span>\n </div>\n <div>\n <button onClick={() => this.toggleEditing(index, statement.MemberID)} type=\"button\" className=\"icon edit\"></button>\n <button onClick={() => this.removeStatement(statement.MemberID)} type=\"button\" className=\"icon delete\"></button>\n </div>\n </React.Fragment>\n }\n </React.Fragment>\n )}\n <div className=\"member-dropdown\">\n <Select\n className=\"grid-selector-dropdown\"\n styles={customStyles}\n options={memberOptions}\n value={selectedMember}\n onChange={this.handleMemberSelection}\n />\n </div>\n <div>\n {selectedMember ?\n <input\n type=\"text\"\n id=\"new-vote-statement-text\"\n value={editorContent}\n onChange={(e) => {\n this.setState({\n editorContent: e.target.value\n });\n }}\n />\n :\n <span></span>\n }\n </div>\n <div>\n {selectedMember ?\n <React.Fragment>\n <button onClick={this.addStatement} type=\"button\" className=\"icon save\"></button>\n <button onClick={this.exitEdit} type=\"button\" className=\"icon delete\"></button>\n </React.Fragment>\n :\n <span></span>\n }\n </div>\n\n </div>\n\n\n </div>);\n }\n}\n\nexport default connect(\n (state) => {\n const { votes, nav, session, calendar, bills, committee } = state;\n return {\n votes,\n nav,\n session,\n calendar,\n bills,\n committee\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, navActionCreators, sessionActionCreators, calendarActionCreators, billActionCreators, committeeActionCreators), dispatch)\n }\n }\n)(VoteForm)","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { Route } from 'react-router';\nimport VoteGrid from './lis-vote-grid';\nimport VoteForm from './lis-vote-form'\nimport moment from 'moment-timezone';\nimport { communicationsActionCreators } from '../../../stores/lis-communications-store';\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport { voteActionCreators } from '../../../stores/lis-votes-store';\n\nclass VoteManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n startDate: moment(),\n endDate: moment(),\n chamber: null,\n committee: null,\n voteOrigin: null,\n organizedVotes: [],\n isLoaded: true\n };\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.getVotes = this.getVotes.bind(this);\n this.showVotes = this.showVotes.bind(this);\n this.createChairmansReportSummarizedOnMinutes = this.createChairmansReportSummarizedOnMinutes.bind(this);\n }\n\n handleDateChange(key, value, callback) {\n this.setState({\n [key]: value\n }, () => callback());\n }\n\n handleChange(key, value, callback) {\n this.setState({\n [key]: value\n }, () => {\n if (key === 'voteOrigin' || key === 'chamber') {\n this.setState({ committee: null }, () => {\n if (callback) {\n callback();\n }\n })\n } else {\n if (callback) {\n callback();\n }\n }\n });\n }\n\n showVotes(dateIndex, value) {\n let organizedVotes = [...this.state.organizedVotes];\n organizedVotes[dateIndex].show = typeof value === 'boolean' ? value : !organizedVotes[dateIndex].show;\n this.setState({\n organizedVotes: organizedVotes\n });\n }\n\n async createChairmansReportSummarizedOnMinutes(sessionID, chamberCode, committeeID, commDate, votedLegislation) {\n let success = false;\n let createObj = {\n CommunicationDate: commDate,\n IsPublic: false,\n ChamberCode: chamberCode,\n CommunicationType: 'Committee',\n CommitteeID: committeeID,\n SessionID: sessionID,\n };\n\n await this.props.actions.createComm({ CommunicationResponse: [createObj] })\n .then(async () => {\n success = true; //as long as it got here, succeed because it may be valid/expected for below checks to not pass\n let communication = this.props.communications.commCreate;\n if (communication.CommunicationCategories && communication.CommunicationCategories.length) {\n const votedLegislationNumbers = votedLegislation.map(vl => vl.LegislationNumber);\n const commCategoriesWithVotedBills = communication.CommunicationCategories.filter(cat => cat.CommunicationLegislation && cat.CommunicationLegislation.map(cl => cl.LegislationNumber).some(cl => votedLegislationNumbers.includes(cl)));\n if (commCategoriesWithVotedBills.length) {\n commCategoriesWithVotedBills.forEach(cat => {\n cat.CommunicationLegislation.filter(cl => votedLegislationNumbers.includes(cl.LegislationNumber)).forEach(cl => {\n cl.IsActive = true;\n //set suffix of communication legislation (indicating presence of amendment or substitute) based on event code\n const vote = votedLegislation.find(vl => vl.LegislationNumber === cl.LegislationNumber);\n if (vote.EventCode) {\n if (vote.EventCode.endsWith('06') || vote.EventCode.endsWith('07')) { //reported with amendment\n cl.Suffix = 'A'\n } else if (vote.EventCode.endsWith('08')) { //reported with substitute\n cl.Suffix = 'S'\n }\n }\n })\n })\n communication.IsPublic = true;\n await this.props.actions.saveComm({ CommunicationResponse: [communication] })\n .then(async () => {\n const commId = this.props.communications.commSave.CommunicationID;\n await this.props.actions.saveCommFile(\"?communicationID=\" + commId);\n })\n } else {\n console.log(\"No communication categories in created communication with voted on legislation\")\n }\n } else {\n console.log(\"No communication categories in created communication\")\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n success = false;\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n success = false;\n });\n return success;\n }\n\n getVotes() {\n const { startDate, endDate, chamber, committee, voteOrigin } = this.state;\n if (startDate && endDate && chamber && voteOrigin) {\n this.setState({ isLoaded: false });\n let voteParams = `?startDate=${moment(startDate).startOf('day').format('YYYY-MM-DDTHH:mm:ss')}&endDate=${moment(endDate).endOf('day').format('YYYY-MM-DDTHH:mm:ss')}`;\n voteParams += '&chamberCode=' + chamber.value;\n voteParams += '&voteTypeID=' + voteOrigin.value;\n if (voteOrigin.label !== \"Floor\" && committee && committee.CommitteeID > 0) {\n voteParams += '&committeeID=' + committee.CommitteeID\n }\n this.props.actions.getVoteList(voteParams)\n .then(() => {\n if (this.props.votes.voteListError) {\n throw this.props.votes.voteListError;\n }\n\n let voteList = [...this.props.votes.voteList];\n \n if(this.state.chamber.value !== \"S\" && this.state.voteOrigin.value !== 1) {\n voteList = voteList.filter(v => !v.IsVoice);\n }\n\n if (this.props.votes.voteList.length === 0) {\n throw 'No Votes in list';\n }\n // Turn the list of votes into a list of dates each containing a list of votes\n // This formatting is done so the votes can be listed in the table with a date as a container\n voteList.sort((a, b) => {\n return new Date(b.VoteDate) - new Date(a.VoteDate);\n });\n let organizedVotes = [];\n let voteArray = [];\n let previousVote = voteList[0];\n voteList.forEach((vote, index) => {\n if (moment(previousVote.VoteDate).format('L') !== moment(vote.VoteDate).format('L')) {\n //Add the list of legislation to the category\n let newDateContainer = {\n Votes:\n chamber.value === \"H\" ? [...voteArray].sort((a, b) => {\n if (a.LegislationNumber && b.LegislationNumber && (a.FinalVote === b.FinalVote || voteOrigin.label === \"Floor\")) {\n let legislationKeyA = a.LegislationNumber.match(/\\d+/);\n let legislationKeyB = b.LegislationNumber.match(/\\d+/);\n return a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]) ||\n a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]) ||\n (legislationKeyA && legislationKeyA.length && legislationKeyB && legislationKeyB.length && parseInt(legislationKeyA[0]) - parseInt(legislationKeyB[0])) ||\n new Date(a.VoteDate) - new Date(b.VoteDate)\n } else if (a.FinalVote) {\n return 1\n } else {\n return -1\n }\n })\n :\n [...voteArray].sort((a, b) => {\n if (a.FinalVote === b.FinalVote || voteOrigin.label === \"Floor\") {\n return a.VoteNumber.localeCompare(b.VoteNumber)\n } else if (a.FinalVote) {\n return 1\n } else {\n return -1\n }\n }),\n Date: previousVote.VoteDate,\n sortTimeDesc: false\n };\n organizedVotes.push(newDateContainer);\n //Empty out the leg array so we can use it for another category\n voteArray = [];\n //Add the first item to the next category\n voteArray.push(vote);\n } else {\n voteArray.push(vote);\n }\n //Set this variable so the next iteration will know what the vote date of the previous iteration was\n previousVote = vote;\n });\n //If the vote array still has elements then that means not every vote in the results have been added to a container\n //So, check to see if the vote array has elements and if so create another container\n if (voteArray.length > 0) {\n let newDateContainer = {\n Votes:\n chamber.value === \"H\" ? [...voteArray].sort((a, b) => {\n if (a.FinalVote === b.FinalVote || voteOrigin.label === \"Floor\") {\n let legislationKeyA = a.LegislationNumber?.match(/\\d+/) ?? \"\";\n let legislationKeyB = b.LegislationNumber?.match(/\\d+/) ?? \"\";\n return (a.LegislationNumber && b.LegislationNumber && a.LegislationNumber[0].localeCompare(b.LegislationNumber[0])) ||\n (a.LegislationNumber && b.LegislationNumber && a.LegislationNumber[1].localeCompare(b.LegislationNumber[1])) ||\n (legislationKeyA && legislationKeyA.length && legislationKeyB && legislationKeyB.length && parseInt(legislationKeyA[0]) - parseInt(legislationKeyB[0])) ||\n new Date(a.VoteDate) - new Date(b.VoteDate)\n } else if (a.FinalVote) {\n return 1\n } else {\n return -1\n }\n })\n :\n [...voteArray].sort((a, b) => {\n if (a.FinalVote === b.FinalVote || voteOrigin.label === \"Floor\") {\n return a.VoteNumber.localeCompare(b.VoteNumber)\n } else if (a.FinalVote) {\n return 1\n } else {\n return -1\n }\n }),\n Date: previousVote.VoteDate,\n sortTimeDesc: false\n };\n organizedVotes.push(newDateContainer);\n }\n\n const currentlyShownOrganizedVotes = [...this.state.organizedVotes].filter(date => date.show);\n currentlyShownOrganizedVotes.forEach(date => {\n const newOrganizedVoteDate = organizedVotes.find(newDate => newDate.Date === date.Date);\n if (newOrganizedVoteDate) {\n newOrganizedVoteDate.show = true;\n }\n });\n this.setState({\n isLoaded: true,\n organizedVotes: organizedVotes\n });\n })\n .catch((err) => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({\n isLoaded: true,\n organizedVotes: []\n });\n });\n\n this.props.actions.getVoteActionList(\"?voteTypeID=\" + this.state.voteOrigin.VoteTypeID + \"&chamberCode=\" + this.state.chamber.value)\n }\n }\n\n render() {\n const { startDate, endDate, voteOrigin, committee, chamber, organizedVotes, isLoaded } = this.state;\n return (\n <div>\n <Route exact path={this.props.match.path} render={props => <VoteGrid\n {...props}\n startDate={startDate}\n endDate={endDate}\n voteOrigin={voteOrigin}\n committeeVal={committee}\n chamber={chamber}\n handleDateChange={this.handleDateChange}\n handleChange={this.handleChange}\n getVotes={this.getVotes}\n organizedVotes={organizedVotes}\n isLoaded={isLoaded}\n showVotes={this.showVotes}\n createChairmansReportSummarizedOnMinutes={this.createChairmansReportSummarizedOnMinutes}\n voteActions={this.props.votes.voteActionList}\n />} />\n <Route path={`${this.props.match.path}/edit-vote/:voteid`} render={props => <VoteForm\n {...props}\n createChairmansReportSummarizedOnMinutes={this.createChairmansReportSummarizedOnMinutes}\n />} />\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { votes, communications, minutes } = state;\n return {\n votes,\n communications,\n minutes\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, communicationsActionCreators, minutesActionCreators), dispatch)\n }\n }\n)(VoteManagement)","import React from 'react';\nimport moment from 'moment-timezone'\nimport ReactToPrint from 'react-to-print';\n\nclass PrintRoomGrid extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n showRow: [],\n printPreviewIndex: undefined\n }\n this.toggleRow = this.toggleRow.bind(this);\n this.togglePrintView = this.togglePrintView.bind(this);\n\n this.componentRef = React.createRef();\n }\n\n togglePrintView(value) {\n this.setState({\n printPreviewIndex: value\n })\n }\n\n toggleRow(batchIndex) {\n let showRow = [...this.state.showRow];\n showRow[batchIndex] = !showRow[batchIndex];\n this.setState({\n showRow: showRow\n });\n }\n\n componentDidMount() {\n if (this.props.urlBatchId !== \"\" && this.props.textResults.length > 0 && this.state.urlBatchIndex === \"\") {\n let index = this.props.textResults.findIndex(x => x.PrintBatchID == this.props.urlBatchId);\n this.toggleRow(index)\n }\n }\n\n render() {\n const { showRow } = this.state;\n const findMember = memberId => {\n const patron = this.props.members.find(member => member.MemberID === memberId);\n if (patron) {\n return patron.PatronDisplayName;\n } else {\n return '';\n }\n }\n const headerStyle = {\n color: 'white',\n backgroundColor: '#9e9e9e',\n padding: '10px',\n border: '1px solid #e0e0e0'\n }\n\n const headerStyleComplete = {\n color: 'white',\n backgroundColor: '#dc3545',\n padding: '10px',\n border: '1px solid #e0e0e0'\n }\n\n const filterTextResults = (textResults) => {\n let filteredTextResults = [...textResults];\n\n filteredTextResults = filteredTextResults.filter(x =>\n this.props.showComplete\n ? true\n : !this.props.viewOnlyCompletedItems\n ? x.BatchItems.findIndex(y => y.PrintDate === undefined) > -1\n ? true\n : false\n : x.BatchItems.findIndex(y => y.PrintDate !== undefined) > -1\n ? true\n : false\n )\n\n filteredTextResults = filteredTextResults.filter(batch => batch.BatchItems.every(text => {\n if (this.props.introStartDate && this.props.introEndDate) {\n let formattedStartDate = this.props.introStartDate.clone().hour(0);\n let formattedEndDate = this.props.introEndDate.clone().endOf('day');\n\n return moment(text.VersionDate).isBetween(formattedStartDate, formattedEndDate);\n } else if (this.props.introStartDate) {\n let formattedStartDate = this.props.introStartDate.clone().hour(0);\n\n return moment(text.VersionDate).isSameOrAfter(formattedStartDate);\n } else if (this.props.introEndDate) {\n let formattedEndDate = this.props.introEndDate.clone().endOf('day');\n\n return moment(text.VersionDate).isSameOrBefore(formattedEndDate);\n } else {\n return true;\n }\n }));\n\n return filteredTextResults ?? [];\n }\n\n const flattenBatches = (textResults) => {\n let flatBillList = []\n\n textResults.forEach(batch => {\n batch.BatchItems.forEach(item => {\n if (item.PrintDate) {\n flatBillList.push({ documentCode: item.DocumentCode, printDate: item.PrintDate })\n }\n })\n });\n\n return flatBillList.sort((a, b) => { return a.documentCode.localeCompare(b.documentCode) })\n }\n\n return this.props.viewCompletedByBill ?\n <div className='view-by-completed-bills'>\n {flattenBatches(this.props.textResults).map(x => {\n return <p>{x.documentCode + \" - \" + moment(x.printDate).format(\"M/D/YYYY h:mm:ss\")}</p>\n })}\n </div>\n : !this.props.viewCompletedByBill\n ? <div style={{ marginBottom: \"35px\" }}>\n {this.state.printPreviewIndex &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content fit-content center-content\" style={{ maxHeight: \"fit-content\", marginTop: \"50px\" }}>\n <ReactToPrint\n trigger={() => <button style={{ margin: \"0 0 0 10px\", float: \"right\" }} type=\"button\" className=\"button primary\">Print</button>}\n content={() => this.componentRef}\n />\n <button style={{ float: \"right\" }} type=\"button\" className=\"button secondary\" onClick={() => this.togglePrintView(undefined)}>Close</button>\n {/* All styling is being applied inline due to issues with the bill room's computer (for whatever reason) not loading the styling into the browser print preview window. */}\n <div\n ref={el => (this.componentRef = el)}\n style={{\n padding: \"20px 50px\",\n lineHeight: \"2.5em\",\n fontSize: \"16px\"\n }}\n >\n <h2 style={{ fontFamily: '\"Lato\", sans-serif', fontWeight: '400', color: '#34495e' }}>\n {moment(this.props.textResults[this.state.printPreviewIndex].BatchDate).format(\"M/D/YYYY h:mm:ss A\")\n + \" \"\n + \"(BATCH \" + this.props.textResults[this.state.printPreviewIndex].BatchSequence + \")\"\n + \" \"\n + (this.props.textResults[this.state.printPreviewIndex].BatchDescription ? this.props.textResults[this.state.printPreviewIndex].BatchDescription : \"\")\n + \" \"\n + (this.props.textResults[this.state.printPreviewIndex].VendorBatch ? \"Vendor\" : \"Bill Room\")\n + \" \"\n + \"Total Pages: \" + this.props.textResults[this.state.printPreviewIndex].totalPageCount\n }</h2>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"100px 75px 100px 100px 1fr\",\n gridGap: \"10px\",\n textAlign: \"left\",\n overflow: \"hidden\"\n }}\n >\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n Doc Code\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n Pages\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n Version Date\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n Complete?\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n Comment\n </div>\n </div>\n {this.props.textResults[this.state.printPreviewIndex].BatchItems.map(item => {\n return (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"100px 75px 100px 100px 1fr\",\n gridGap: \"10px\",\n textAlign: \"left\",\n overflow: \"hidden\"\n }}\n >\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n {item.DocumentCode}\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n {item.PDFFile[0].PageCount}\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n {moment(item.VersionDate).format(\"MM/DD/YYYY\")}\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n {item.PrintDate ? \"Complete\" : \"Incomplete\"}\n </div>\n <div style={{ overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" }}>\n {item.Comment}\n </div>\n </div>\n )\n })}\n </div>\n <ReactToPrint\n trigger={() => <button style={{ margin: \"-20px 0 0 10px\", float: \"right\" }} type=\"button\" className=\"button primary\">Print</button>}\n content={() => this.componentRef}\n />\n <button style={{ marginTop: \"-20px\", float: \"right\" }} type=\"button\" className=\"button secondary\" onClick={() => this.togglePrintView(undefined)}>Close</button>\n </div>\n </div>\n }\n {filterTextResults(this.props.textResults).sort((a, b) => {\n return moment(a.BatchDate).isBefore(moment(b.BatchDate)) ? 1 : -1\n }).map((batch, batchIndex) => {\n let batchDate = moment.utc(batch.BatchDate).utcOffset(-300).format('M/D/YYYY h:mm:ss A');\n\n return <div key={batchIndex}>\n {batch.BatchItems.length > 0 &&\n <React.Fragment>\n <div className=\"flex-row\" style={!batch.BatchItems.find(x => !x.pdfMarked) ? headerStyleComplete : headerStyle}>\n <div>\n <button\n className={showRow[batchIndex] ? \"arrow-up\" : \"arrow-down\"}\n onClick={() => this.toggleRow(batchIndex)}>\n </button>\n <span>{batchDate}</span>\n <span style={{ marginLeft: '5px', fontWeight: \"bold\" }}>({\"BATCH \" + batch.BatchSequence})</span>\n {batch.BatchDescription &&\n <span> - {batch.BatchDescription}</span>\n }\n {batch.VendorBatch\n ? <span> Vendor</span>\n : <span> Bill Room</span>\n }\n <a type=\"button\" className=\"button print white\" onClick={() => {\n let batchIndex = this.props.textResults.findIndex(x => x.PrintBatchID === batch.PrintBatchID);\n this.togglePrintView(batchIndex);\n this.toggleRow(batchIndex);\n }}>Open Print View</a>\n </div>\n <div>\n <span>Total pages: {batch.totalPageCount}</span>\n </div>\n </div>\n {showRow[batchIndex] &&\n <form>\n <div className=\"bill-grid print-bill-grid print-room-bill-grid\">\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <input\n type=\"checkbox\"\n checked={batch.selectAll || ''}\n onChange={() => {\n let batchIndex = this.props.textResults.findIndex(x => x.PrintBatchID === batch.PrintBatchID);\n this.props.toggleSelectAll(batchIndex);\n }} />\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Bill #</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Document</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Pages</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Date</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Patron</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Caption</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Status</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>Comment</span>\n </div>\n <div className={!batch.BatchItems.find(x => !x.pdfMarked) ? \"bill-grid-header completed\" : \"bill-grid-header\"}>\n <span>View</span>\n </div>\n </div>\n <div>\n {batch.BatchItems.filter(x => {\n if (!this.props.viewOnlyCompletedItems) {\n return true\n } else {\n return x.PrintDate ? true : false\n }\n }).map((text, textIndex) =>\n <div key={textIndex} className=\"bill-grid print-bill-grid print-room-bill-grid\">\n <div>\n <input\n type=\"checkbox\"\n checked={text.checked || ''}\n onChange={(e) => {\n let batchIndex = this.props.textResults.findIndex(x => x.PrintBatchID === batch.PrintBatchID);\n let textIndex = this.props.textResults[batchIndex].BatchItems.findIndex(x => x.BatchItemID === text.BatchItemID);\n this.props.toggleText(batchIndex, textIndex, e);\n }} />\n </div>\n <div>\n <span><a\n className={text.pdfMarked && \"red\"}\n target=\"_blank\"\n href={text.PDFFile[0].FileURL}\n onClick={() => {\n let batchIndex = this.props.textResults.findIndex(x => x.PrintBatchID === batch.PrintBatchID);\n let textIndex = this.props.textResults[batchIndex].BatchItems.findIndex(x => x.BatchItemID === text.BatchItemID);\n this.props.markPdf(batchIndex, textIndex)\n }}>\n {text.LegislationNumber}\n </a></span>\n </div>\n <div>\n {text.IsReprint && <div className=\"small-text message-error\">REPRINT</div>}\n <span>{text.DocumentCode}</span>\n </div>\n <div>\n <span>\n {text.PDFFile && text.PDFFile.length > 0 &&\n <React.Fragment>{text.PDFFile[0].PageCount}</React.Fragment>\n }\n </span>\n </div>\n <div>\n <span>{moment(text.VersionDate).format('L')}</span>\n </div>\n <div>\n <span>{findMember(text.MemberID)}</span>\n </div>\n <div style={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>\n <span\n title={text.LegislationDescription || text.Description}\n style={{ whiteSpace: 'nowrap' }}>\n {text.LegislationDescription || text.Description}\n </span>\n </div>\n <div>\n <span>{text.PrintDate ? \"Complete\" : \"Incomplete\"}</span>\n </div>\n <div style={text.Comment && text.Comment.length > 12 ? { overflowX: \"scroll\" } : {}}>\n <span style={{ whiteSpace: \"nowrap\" }}>{text.Comment}</span>\n </div>\n <div>\n <div className=\"inner-grid three\" style={{ gridGap: \"0px\" }}>\n {text.PDFFile && text.PDFFile.length > 0 ?\n <a target=\"_blank\"\n href={text.IsPublic ? text.PDFFile[0].FileURL : text.SasURL}\n onClick={() => {\n let batchIndex = this.props.textResults.findIndex(x => x.PrintBatchID === batch.PrintBatchID);\n let textIndex = this.props.textResults[batchIndex].BatchItems.findIndex(x => x.BatchItemID === text.BatchItemID);\n this.props.markPdf(batchIndex, textIndex)\n }}>\n <span className={\"icon pdf\" + (text.pdfMarked ? \" red\" : \"\")}></span>\n </a>\n :\n <br />\n }\n <div>\n <span\n onClick={(e) => this.props.togglePortal(this.props.showPortal, e, text.LegislationTextID)}\n className=\"icon paper\"></span>\n </div>\n <div>\n {text.IsPublic &&\n <i className=\"icon book\" />\n }\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </form>\n }\n </React.Fragment>\n }\n </div>\n }\n )}\n </div> : null\n }\n}\nexport default PrintRoomGrid;","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { batch, connect } from 'react-redux';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport Popout from '../../../lis-shared/lis-layout/components/lis-popout-component';\nimport Select from 'react-select';\nimport DatePicker from 'react-datepicker';\nimport moment from 'moment-timezone'\nimport renderHTML from 'react-render-html';\nimport PrintRoomGrid from './lis-print-room-grid'\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { printActionCreators } from '../../../stores/lis-print-store';\n\nconst versionOptions = [\n { label: \"Introduced\", value: 1 },\n { label: \"Substitute\", value: 5 },\n { label: \"Engrossed\", value: 2 },\n { label: \"Reengrossed\", value: 6 },\n { label: \"Enrolled\", value: 3 },\n { label: \"Reenrolled\", value: 7 },\n { label: \"Chaptered\", value: 4 }\n]\n\nclass PrintManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sessionOptions: [],\n billRoomView: false,\n selectedSession: '',\n chamberOptions: [\n { label: 'Both', value: 'Both' },\n { label: 'House', value: 'H' },\n { label: 'Senate', value: 'S' }\n ],\n selectedChamber: { label: 'Both', value: 'Both' },\n introStartDate: '',\n introEndDate: '',\n search: '',\n isLoaded: false,\n isSearching: false,\n textResults: [],\n showPortal: false,\n selectedBill: '',\n isSaving: false,\n versionOptions: versionOptions,\n selectedVersion: { label: 'All', value: 'All' },\n lastCheckedBills: [],\n anyChecked: false,\n urlBatchId: \"\",\n viewCompletedByBill: false,\n viewOnlyCompletedItems: false\n }\n\n this.handleChange = this.handleChange.bind(this);\n this.handleSearch = this.handleSearch.bind(this);\n this.handleFilter = this.handleFilter.bind(this);\n this.toggleSelectAll = this.toggleSelectAll.bind(this);\n this.toggleText = this.toggleText.bind(this);\n this.togglePortal = this.togglePortal.bind(this);\n this.handleCommentChange = this.handleCommentChange.bind(this);\n this.handleReleaseToPrint = this.handleReleaseToPrint.bind(this);\n this.handlePrintComplete = this.handlePrintComplete.bind(this);\n this.handlePrintAllEnrolled = this.handlePrintAllEnrolled.bind(this);\n this.toggleBillRoomView = this.toggleBillRoomView.bind(this);\n this.toggleCommentEdit = this.toggleCommentEdit.bind(this);\n this.markPdf = this.markPdf.bind(this);\n }\n\n handleChange(key, val) {\n this.setState({\n [key]: val\n }, () => {\n if (key === 'selectedSession' || key === 'selectedVersion') {\n this.handleSearch();\n } else {\n this.handleFilter();\n }\n });\n }\n\n handleSearch() {\n this.setState({\n isSearching: true\n });\n // Get the list of members for this session so the patron for the legislation can be shown in the grid\n this.props.actions.getMemberList('sessionID=' + this.state.selectedSession.SessionID)\n\n let params = '?isReleased=' + this.state.billRoomView + '&sessionID=' + this.state.selectedSession.SessionID;\n if (this.state.selectedVersion.value !== 'All') {\n params += '&legislationVersionID=' + this.state.selectedVersion.value;\n }\n if (!this.state.showComplete) {\n params += '&IsPrinted=false'\n }\n this.props.actions.getPrintDocuments(params)\n .then(() => {\n if (this.props.print.printDocuments.length === 0) {\n throw 'No Results Found';\n }\n let promises = [];\n this.props.print.printDocuments.forEach(batch => {\n batch.BatchItems.forEach(text => {\n //Set URL for non-public enrolled PDFs\n if (!text.SasURL && text.LegislationVersionID === versionOptions.find(v => v.label === \"Enrolled\").value && !text.IsPublic) {\n promises.push(new Promise((res, rej) => {\n this.props.actions.getSasURL('?billNumber=' + text.LegislationNumber).then(() => {\n text.SasURL = this.props.bills.sasURLLink;\n res();\n }).catch(() => {\n console.log(\"Failed to retrieve SasURL for bill \" + text.LegislationNumber);\n });\n }));\n }\n\n text.checked = false;\n })\n })\n Promise.all(promises).then(() => {\n // Filter out any entries if any of the filter options are set\n this.handleFilter()\n this.setState({\n isSearching: false,\n message: ''\n });\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isSearching: false,\n message: err.toString()\n });\n });\n }\n\n handleFilter() {\n // This is done so the redux state is not mutated by the filters\n let printDocuments = JSON.parse(JSON.stringify(this.props.print.printDocuments));\n const { search, introStartDate, introEndDate, selectedChamber, showComplete, showReprints } = this.state;\n\n printDocuments.forEach(batch => {\n if (showReprints) {\n batch.BatchItems = batch.BatchItems.filter(text => text.IsReprint);\n }\n // Filter out based on the chambercode. The chambercode is not in the response so assume it using the first letter of the legislation number\n if (selectedChamber.value !== 'Both') {\n batch.BatchItems = batch.BatchItems.filter(text => {\n return text.LegislationNumber[0].toUpperCase() === selectedChamber.value;\n });\n }\n // Check if the search field is blank before filtering\n const formattedSearch = search.toLowerCase().replace(/ /g, '');\n if (formattedSearch) {\n batch.BatchItems = batch.BatchItems.filter(text => {\n if (text.LegislationNumber && text.LegislationNumber.toLowerCase().includes(formattedSearch)) {\n return true;\n }\n if (text.DocumentCode && text.DocumentCode.toLowerCase().includes(formattedSearch)) {\n return true;\n }\n if (text.LDNumber && text.LDNumber.toLowerCase().includes(formattedSearch)) {\n return true;\n }\n if (text.LegislationDescription && text.LegislationDescription.replace(/ /g, '').toLowerCase().includes(formattedSearch)) {\n return true;\n }\n const patron = this.props.members.memberList.find(member => member.MemberID === text.MemberID);\n if (patron) {\n if (patron.PatronDisplayName.toLowerCase().includes(formattedSearch)) {\n return true;\n }\n }\n });\n }\n // Filter entries based on the draft date if the start date or end date are set\n batch.BatchItems = batch.BatchItems.filter(text => {\n let returnItem = true;\n if (introStartDate) {\n let formattedStartDate = introStartDate.clone().hour(0);\n returnItem = moment(text.VersionDate).isSameOrAfter(formattedStartDate);\n }\n if (introEndDate) {\n let formattedEndDate = introEndDate.clone().endOf('day');\n returnItem = moment(text.VersionDate).isSameOrBefore(formattedEndDate);\n }\n if (introStartDate && introEndDate) {\n //Clone them to not mutate the state\n let formattedStartDate = introStartDate.clone().hour(0);\n let formattedEndDate = introEndDate.clone().endOf('day');\n // Add one day to the dates so that results at the outer limits are included as well\n returnItem = moment(text.VersionDate).isBetween(formattedStartDate, formattedEndDate);\n }\n return returnItem;\n });\n\n //This gets the page count\n //This is done here because the bill room's page needs the page count and this is the only loop that runs regardless.\n let totalPageCount = 0;\n batch.BatchItems.forEach(text => {\n if (text.PDFFile && text.PDFFile.length > 0) {\n if (!isNaN(text.PDFFile[0].PageCount)) {\n totalPageCount += text.PDFFile[0].PageCount\n }\n }\n\n text.checked = false;\n });\n\n if (this.state.textResults.length) {\n const batchIndex = this.state.textResults.findIndex(c => c.BatchDate === batch.BatchDate);\n if (batchIndex > -1) {\n this.state.textResults[batchIndex].BatchItems\n .forEach(x => {\n //If the current dataset has a checked bill that isn't in the new filtered set then add that bill back into the result set\n const billInNewFilteredDataset = batch.BatchItems.find(y => y.LegislationTextID === x.LegislationTextID);\n if (x.checked && !billInNewFilteredDataset) {\n batch.BatchItems.push(x)\n } else if (billInNewFilteredDataset) {\n billInNewFilteredDataset.checked = this.state.textResults[batchIndex].BatchItems.find(y => y.LegislationTextID === x.LegislationTextID).checked;\n }\n });\n }\n }\n\n batch.totalPageCount = totalPageCount;\n });\n\n this.setState({\n textResults: printDocuments\n });\n }\n\n toggleSelectAll(batchIndex) {\n let textResults = [...this.state.textResults];\n const opposite = !textResults[batchIndex].selectAll;\n\n textResults[batchIndex].selectAll = opposite;\n textResults[batchIndex].BatchItems.forEach(text => text.checked = opposite);\n this.setState({\n textResults: textResults,\n anyChecked: opposite\n })\n }\n\n toggleText(batchIndex, textIndex, e) {\n let textResults = [...this.state.textResults];\n let lastCheckedBills = this.state.lastCheckedBills;\n let lastCheckedBill = lastCheckedBills[batchIndex];\n if (e.nativeEvent.shiftKey && !isNaN(lastCheckedBill) && lastCheckedBill !== -1) {\n textResults[batchIndex].BatchItems.forEach(agenda => agenda.checked = false);\n for (let i = 0; i < Math.abs(textIndex - lastCheckedBill); i++) {\n const index = lastCheckedBill + i * (textIndex - lastCheckedBill) / Math.abs(textIndex - lastCheckedBill);\n textResults[batchIndex].BatchItems[index].checked = true;\n }\n } else {\n lastCheckedBill = textIndex;\n }\n textResults[batchIndex].BatchItems[textIndex].checked = !textResults[batchIndex].BatchItems[textIndex].checked;\n lastCheckedBills[batchIndex] = lastCheckedBill;\n\n this.setState({\n textResults: textResults,\n lastCheckedBills: lastCheckedBills\n }, () => {\n //If we unchecked one that doesn't meet filter requirements we need to take it out of the current dataset\n if (!textResults[batchIndex].BatchItems[textIndex].checked) {\n this.handleFilter();\n }\n\n let checked = false;\n\n this.state.textResults.forEach((batch) => {\n batch.BatchItems.forEach((item) => {\n if (item.checked) {\n checked = true;\n }\n });\n });\n\n this.setState({\n anyChecked: checked\n })\n })\n }\n\n togglePortal(showPortal, e, textId) {\n if (e) {\n e.stopPropagation();\n }\n this.setState({\n showPortal: !showPortal,\n selectedBill: { message: 'Loading...' }\n });\n if (textId) {\n this.props.actions.getBillText('?legislationTextID=' + textId)\n .then(() => {\n if (this.props.bills.billTextError) {\n throw this.props.bills.billTextError.toString()\n }\n // We are getting it by ID, so there should only be one\n if (this.props.bills.billText.length !== 1) {\n throw 'Draft text could not be found'\n }\n this.setState({\n selectedBill: this.props.bills.billText[0]\n });\n }).catch(err => {\n this.setState({\n selectedBill: { message: err }\n })\n })\n }\n }\n\n handleCommentChange(batchIndex, textIndex, value) {\n let textResults = [...this.state.textResults];\n textResults[batchIndex].BatchItems[textIndex].Comment = value;\n\n this.setState({\n textResults: textResults\n })\n }\n\n handleReleaseToPrint(vendorBatch) {\n let isReleased = vendorBatch !== undefined ? true : false;\n this.setState({\n isSaving: true\n }, () => {\n let releaseDate = new Date();\n let batchItemsToSave = [];\n let itemsToRemove = [];\n this.state.textResults.forEach((batch, batchIndex) => {\n batch.BatchItems.forEach((item, itemIndex) => {\n if (item.checked) {\n batchItemsToSave.push(item);\n itemsToRemove.push({ batch: batchIndex, item: itemIndex })\n }\n });\n });\n if (batchItemsToSave.length === 0) {\n this.setState({\n isSaving: false\n });\n return;\n }\n\n //Need to decide here whether or not to call createPrintDocument or savePrintDocument based on whether or not we have a PrintBatchID\n if (this.state.textResults[0].PrintBatchID) {\n this.props.actions.savePrintDocument(\n {\n BatchDate: releaseDate,\n VendorBatch: vendorBatch,\n SessionID: this.state.selectedSession.SessionID,\n BatchItems: batchItemsToSave,\n IsReleased: isReleased,\n PrintBatchID: this.state.textResults[0].PrintBatchID,\n ModificationDate: this.state.textResults[0].ModificationDate\n })\n .then(() => {\n this.props.actions.makeToast([{ message: (batchItemsToSave.length + \" Item(s)\") + (isReleased ? \" Released to \" + (vendorBatch ? \"Vendor\" : \"Print\") : \" Saved\"), type: \"success\", long: true }]);\n this.handleSearch();\n this.setState({\n isSaving: false\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n console.log(this.props.print.printSaveError);\n this.setState({\n isSaving: false\n });\n });\n } else {\n this.props.actions.createPrintDocument(\n {\n BatchDate: releaseDate,\n VendorBatch: vendorBatch,\n SessionID: this.state.selectedSession.SessionID,\n BatchItems: batchItemsToSave,\n isReleased: isReleased,\n })\n .then(() => {\n this.props.actions.makeToast([{ message: (batchItemsToSave.length + \" Item(s)\") + (isReleased ? \" Released to \" + (vendorBatch ? \"Vendor\" : \"Print\") : \" Saved\"), type: \"success\", long: true }]);\n this.handleSearch();\n this.setState({\n isSaving: false\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n console.log(this.props.print.printCreateError);\n this.setState({\n isSaving: false\n });\n });\n }\n });\n }\n\n handlePrintComplete() {\n const completeDate = new Date();\n let completedItems = [];\n this.state.textResults.forEach(batch => {\n batch.BatchItems.forEach(item => {\n if (item.checked) {\n completedItems.push({ BatchItemID: item.BatchItemID })\n }\n });\n });\n if (completedItems.length !== 0) {\n this.setState({\n isSaving: true\n }, () => {\n this.props.actions.completeBatchItem({\n PrintDate: completeDate,\n BatchItemIDs: completedItems,\n })\n .then(() => {\n this.props.actions.makeToast([{ message: \"Save Success\", type: \"success\" }]);\n this.handleSearch();\n this.setState({\n isSaving: false\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n console.log(this.props.print.batchItemCompleteError);\n this.setState({\n isSaving: false\n });\n });\n });\n }\n }\n\n handlePrintAllEnrolled() {\n this.setState({\n isSaving: true\n }, () => {\n this.props.actions.printAllEnrolled(\"?SessionID=\" + this.state.selectedSession.SessionID)\n .then(() => {\n this.props.actions.makeToast([{ message: \"Request Successful\", type: \"success\" }]);\n this.setState({\n isSaving: false\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Request Failed\", type: \"failure\" }]);\n console.log(this.props.print.batchItemCompleteError);\n this.setState({\n isSaving: false\n });\n });\n });\n }\n\n toggleBillRoomView() {\n this.setState(state => ({\n billRoomView: !state.billRoomView\n }), () => this.handleSearch());\n }\n\n toggleCommentEdit(e, batchIndex, textIndex) {\n e.preventDefault();\n let textResults = [...this.state.textResults];\n textResults[batchIndex].BatchItems[textIndex].Editing = !textResults[batchIndex].BatchItems[textIndex].Editing;\n\n this.setState({\n textResults: textResults\n })\n }\n\n markPdf(batchIndex, textIndex) {\n let textResults = [...this.state.textResults];\n textResults[batchIndex].BatchItems[textIndex].pdfMarked = true;\n\n this.setState({\n textResults: textResults\n })\n }\n\n componentDidMount() {\n this.props.actions.getSessionList()\n .then(() => {\n const sessionList = [...this.props.session.sessionList];\n let selectedSession = '';\n sessionList.forEach(session => {\n session.label = session.SessionYear + \" \" + session.DisplayName\n session.value = session.SessionID;\n if (session.IsDefault) {\n selectedSession = session;\n }\n });\n sessionList.reverse();\n this.setState({\n sessionOptions: sessionList,\n selectedSession: selectedSession,\n isLoaded: true\n }, () => {\n if (this.props.location.search.substr(9, this.props.location.search.length)) {\n this.toggleBillRoomView();\n this.setState({\n urlBatchId: this.props.location.search.substr(9, this.props.location.search.length)\n })\n } else if (selectedSession) {\n this.handleSearch()\n }\n });\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { versionOptions, selectedVersion, sessionOptions,\n selectedSession, chamberOptions, selectedChamber,\n introStartDate, introEndDate, search,\n textResults, showReprints, showComplete } = this.state;\n const customStyles = {\n container: base => ({\n ...base,\n lineHeight: 'normal',\n }),\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n dropdownIndicator: base => ({\n ...base,\n padding: '0px 8px'\n })\n }\n if (!this.state.isLoaded) {\n return (<div className=\"center-spinner spinner\">Loading...</div>)\n }\n return (<div>\n <div className=\"header-half\">\n <h1>{this.state.billRoomView ? \"Bill Room Management\" : \"Print Management\"}</h1>\n <p><button className=\"button\" onClick={this.toggleBillRoomView} type=\"button\">{this.state.billRoomView ? \"Print Management\" : \"Bill Room Management\"}</button></p>\n </div>\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle={this.state.selectedBill.LegislationNumber || ''}>\n <LegislationText\n text={this.state.selectedBill}\n />\n </Popout>\n }\n <div className=\"user-forms dlas-forms\">\n {this.state.billRoomView &&\n <React.Fragment>\n <div className=\"button-bar floating-button-bar\" style={{ paddingBottom: \"15px\", paddingRight: \"15px\" }}>\n <div />\n <div>\n <button\n id=\"bill-room-submit\"\n onClick={this.handlePrintComplete}\n type=\"button\"\n disabled={this.state.isSaving || !this.state.anyChecked}\n className=\"button\">\n {this.state.isSaving ? \"Saving...\" : \"Complete\"}\n </button>\n <button\n id=\"bill-room-submit\"\n onClick={this.handlePrintAllEnrolled}\n type=\"button\"\n disabled={this.state.isSaving}\n className=\"button\">\n {this.state.isSaving ? \"Saving...\" : \"Print All Enrolled Versions\"}\n </button>\n </div>\n </div>\n </React.Fragment>\n }\n <fieldset className=\"fieldset-collapse\">\n <div>\n <div className=\"inner-grid five align-end\">\n <div>\n <label htmlFor=\"version-dropdown\">Version Type</label>\n <Select\n options={versionOptions}\n value={selectedVersion}\n id=\"version-dropdown\"\n styles={customStyles}\n onChange={(val) => this.handleChange(\"selectedVersion\", val)}\n />\n </div>\n <div className=\"advanced-search dlas-forms\">\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\" style={{ width: '102%' }}>\n <div className=\"toggle-switch\" onClick={() => this.handleChange(\"showReprints\", !showReprints)}>\n <input id=\"reprint-button\" checked={showReprints} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"reprint-button\" className=\"checkbox-label no-background\">Show Only Reprinted Items</label>\n </div>\n </div>\n </div>\n {this.state.billRoomView &&\n <>\n <div className=\"advanced-search dlas-forms\">\n <div className=\"checkbox-container\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleChange(\"showComplete\", !showComplete)}>\n <input id=\"complete-button\" checked={showComplete} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"complete-button\" className=\"checkbox-label no-background\">Include Completed Items</label>\n </div>\n </div>\n </div>\n <button className=\"button primary\" type=\"button\" onClick={() => this.setState({ viewCompletedByBill: !this.state.viewCompletedByBill, viewOnlyCompletedItems: false })} style={{ marginBottom: \"4px\" }}>{(this.state.viewCompletedByBill ? \"Hide\" : \"View\") + \" Completed Items By Bill\"}</button>\n <button className=\"button primary\" type=\"button\" onClick={() => this.setState({ viewOnlyCompletedItems: !this.state.viewOnlyCompletedItems, viewCompletedByBill: false })} style={{ marginBottom: \"4px\" }}>{(this.state.viewOnlyCompletedItems ? \"Hide\" : \"View\") + \" Only Completed Items\"}</button>\n </>\n }\n </div>\n <div className=\"inner-grid six\">\n <div>\n <label htmlFor=\"session-dropdown\">Session</label>\n <Select\n options={sessionOptions}\n value={selectedSession}\n id=\"session-dropdown\"\n styles={customStyles}\n onChange={(val) => this.handleChange(\"selectedSession\", val)}\n />\n </div>\n <div>\n <label htmlFor=\"chamber-dropdown\">Chamber</label>\n <Select\n options={chamberOptions}\n value={selectedChamber}\n id=\"chamber-dropdown\"\n styles={customStyles}\n onChange={(val) => this.handleChange(\"selectedChamber\", val)}\n />\n </div>\n <div>\n <label htmlFor=\"intro-start-date\">Date</label>\n <DatePicker\n selected={introStartDate || null}\n isClearable\n id=\"intro-start-date\"\n placeholderText=\"Start Date\"\n onChange={(val) => this.handleChange(\"introStartDate\", val)}\n />\n </div>\n <div>\n <br />\n <DatePicker\n selected={introEndDate || null}\n isClearable\n id=\"intro-end-date\"\n placeholderText=\"End Date\"\n onChange={(val) => this.handleChange(\"introEndDate\", val)}\n />\n\n </div>\n <div>\n <label htmlFor=\"search-filter\">Search filter</label>\n <input\n type=\"text\"\n value={search}\n id=\"search-filter\"\n onChange={(e) => this.handleChange(\"search\", e.target.value)}\n />\n </div>\n </div>\n <br />\n <div className=\"inner-grid six\">\n {!this.state.billRoomView &&\n <React.Fragment>\n <button\n id=\"print-management-submit\"\n onClick={() => this.handleReleaseToPrint(false)}\n type=\"button\"\n disabled={this.state.isSaving || !this.state.anyChecked}\n className=\"button\">\n {this.state.isSaving ? \"Saving...\" : \"Release To Print\"}\n </button>\n <button\n id=\"print-management-submit-vendor\"\n onClick={() => this.handleReleaseToPrint(true)}\n type=\"button\"\n disabled={this.state.isSaving || !this.state.anyChecked}\n className=\"button\">\n {this.state.isSaving ? \"Saving...\" : \"Release To Vendor\"}\n </button>\n <button\n id=\"print-management-save-batch\"\n onClick={() => this.handleReleaseToPrint(undefined)}\n type=\"button\"\n disabled={this.state.isSaving || !this.state.anyChecked}\n className=\"button\">\n {this.state.isSaving ? \"Saving...\" : \"Save Batch Without Releasing\"}\n </button>\n </React.Fragment>\n }\n </div>\n </div>\n </fieldset>\n <div>\n {this.state.isSearching ?\n <div className=\"center-spinner spinner\">Searching...</div>\n :\n <React.Fragment>\n {this.state.message ?\n <div className=\"center\">{this.state.message}</div>\n :\n <React.Fragment>\n {this.state.billRoomView ?\n <PrintRoomGrid\n textResults={textResults}\n toggleSelectAll={this.toggleSelectAll}\n toggleText={this.toggleText}\n showBillText={this.showBillText}\n togglePortal={this.togglePortal}\n showPortal={this.state.showPortal}\n members={this.props.members.memberList}\n selectedSession={this.state.selectedSession}\n urlBatchId={this.state.urlBatchId}\n showComplete={this.state.showComplete}\n introStartDate={this.state.introStartDate}\n introEndDate={this.state.introEndDate}\n markPdf={this.markPdf}\n viewCompletedByBill={this.state.viewCompletedByBill}\n viewOnlyCompletedItems={this.state.viewOnlyCompletedItems}\n />\n :\n <BillGrid\n textResults={textResults}\n toggleSelectAll={this.toggleSelectAll}\n toggleText={this.toggleText}\n showBillText={this.showBillText}\n togglePortal={this.togglePortal}\n showPortal={this.state.showPortal}\n members={this.props.members.memberList}\n selectedSession={this.state.selectedSession}\n handleCommentChange={this.handleCommentChange}\n toggleCommentEdit={this.toggleCommentEdit}\n />\n }\n </React.Fragment>\n }\n </React.Fragment>\n }\n </div>\n </div>\n </div>)\n }\n}\n\nconst BillGrid = props => {\n const findMember = memberId => {\n const patron = props.members.find(member => member.MemberID === memberId);\n if (patron) {\n return patron.PatronDisplayName;\n } else {\n return '';\n }\n }\n return (<div>\n {props.textResults.map((batch, batchIndex) =>\n <form key={batchIndex}>\n <div className=\"bill-grid print-bill-grid\">\n <div className=\"bill-grid-header\">\n <input\n type=\"checkbox\"\n checked={batch.selectAll || ''}\n onChange={() => props.toggleSelectAll(batchIndex)} />\n </div>\n <div className=\"bill-grid-header\">\n <span>Bill #</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Pages</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Document</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Date</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Patron</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Caption</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>LD#</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>Comment</span>\n </div>\n <div className=\"bill-grid-header\">\n <span>View</span>\n </div>\n </div>\n <div>\n {batch.BatchItems\n .sort((a, b) => !a.checked && b.checked ? 1 : a.checked && !b.checked ? -1 : moment(a.VersionDate).isAfter(b.VersionDate, \"days\") ? 1 : moment(b.VersionDate).isAfter(a.VersionDate, \"days\") ? -1 : 0)\n .map((text, textIndex) =>\n <div key={textIndex} className=\"bill-grid print-bill-grid\">\n <div>\n <input\n type=\"checkbox\"\n checked={text.checked || ''}\n onChange={(e) => props.toggleText(batchIndex, textIndex, e)} />\n </div>\n <div>\n <span><a\n target=\"_blank\"\n href={`/bill-details/${props.selectedSession.SessionCode}/${text.LegislationNumber}`}>\n {text.LegislationNumber}\n </a></span>\n </div>\n <div>\n <span>{text.PDFFile[0] && text.PDFFile[0].PageCount}</span>\n </div>\n <div>\n {text.IsReprint && <div className=\"small-text message-error\">REPRINT</div>}\n <span>{text.DocumentCode}</span>\n </div>\n <div>\n <span>{moment(text.VersionDate).format('L')}</span>\n </div>\n <div>\n <span>{findMember(text.MemberID)}</span>\n </div>\n <div style={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>\n <span\n title={text.LegislationDescription || text.Description}\n style={{ whiteSpace: 'nowrap' }}>\n {text.LegislationDescription || text.Description}\n </span>\n </div>\n <div>\n <span>{text.LDNumber}</span>\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 25px\" }}>\n <input\n key={text.LegislationTextID}\n onChange={(e) => props.handleCommentChange(batchIndex, textIndex, e.target.value)}\n value={text.Comment}\n disabled={!props.textResults[batchIndex].BatchItems[textIndex].Editing}\n />\n {props.textResults[batchIndex].BatchItems[textIndex].Editing\n ? <button className=\"icon save\" onClick={(e) => props.toggleCommentEdit(e, batchIndex, textIndex)}></button>\n : <button type=\"button\" className=\"icon edit\" onClick={(e) => props.toggleCommentEdit(e, batchIndex, textIndex)}></button>\n }\n </div>\n <div>\n <div className=\"inner-grid three\">\n {text.SasURL || (text.PDFFile && text.PDFFile.length > 0) ?\n <a target=\"_blank\" href={text.SasURL || text.PDFFile[0].FileURL}><span className=\"icon pdf\"></span></a>\n :\n <br />\n }\n <div>\n <span\n onClick={(e) => props.togglePortal(props.showPortal, e, text.LegislationTextID)}\n className=\"icon paper\"></span>\n </div>\n <div>\n {text.IsPublic &&\n <i className=\"icon book\" />\n }\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </form>\n )}\n </div>);\n}\n\nconst LegislationText = props => {\n if (props.text.message) {\n return (<p>{props.text.message}</p>)\n }\n return (\n <div style={{ margin: '10px' }}>\n {renderHTML(props.text.DraftText)}\n </div>\n );\n}\n\nexport default connect(\n (state) => {\n const { print, session, nav, bills, members } = state;\n return {\n nav,\n print,\n session,\n bills,\n members\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, printActionCreators, sessionActionCreators, billActionCreators, navActionCreators, memberActionCreators), dispatch)\n }\n }\n)(PrintManagement)","import React from \"react\";\nimport ReactToPrint from \"react-to-print\";\nimport DatePicker from \"react-datepicker\";\nimport Select from 'react-select';\nimport moment from 'moment-timezone';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { cancelRequest } from '../../../services/request.service';\nimport { reportActionCreators } from \"../../../stores/lis-report-store\";\nimport { sessionActionCreators } from \"../../../stores/lis-session-store\";\nimport renderHTML from \"react-render-html\";\nimport { Link } from 'react-router-dom';\nimport { billActionCreators } from \"../../../stores/lis-legislation-store\";\n\nclass ReportManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isSearching: false,\n sessionList: [],\n reportTypes: [],\n selectedSession: '',\n selectedReport: '',\n selectedDate: null,\n reportData: []\n };\n this.handleFormChange = this.handleFormChange.bind(this);\n this.handleReportTypeChange = this.handleReportTypeChange.bind(this);\n this.getReport = this.getReport.bind(this);\n this.handleRadioChange = this.handleRadioChange.bind(this);\n };\n\n handleFormChange(key, val) {\n this.setState({\n [key]: val,\n reportData: []\n }, () => {\n if (key === \"selectedSession\") {\n this.props.actions.getIntroDateList('?sessionCode=' + val.SessionCode);\n this.setState({\n selectedDate: null\n })\n }\n });\n }\n\n handleReportTypeChange(val) {\n this.setState({\n selectedReport: val,\n selectedDate: null,\n reportData: []\n });\n }\n\n getReport() {\n const { selectedDate, selectedSession, selectedReport } = this.state;\n this.setState({\n isSearching: true\n });\n let params = `?sessionID=${selectedSession.SessionID}&reportID=${selectedReport.ReportID}`;\n if (selectedDate) {\n params += `&reportDate=${selectedDate.format('YYYY-MM-DD')}`\n }\n this.props.actions.getReport(params)\n .then(() => {\n let reportDataChamber = '';\n let reportDataName = '';\n if (selectedReport.ReportName.includes('Senate')) {\n reportDataChamber = 'SENATE OF VIRGINIA'\n reportDataName = selectedReport.ReportName.replace('Senate ', '');\n }\n if (selectedReport.ReportName.includes('House')) {\n reportDataChamber = 'HOUSE OF DELEGATES'\n reportDataName = selectedReport.ReportName.replace('House ', '');\n }\n const sessionStartObj = selectedSession.SessionEvents && selectedSession.SessionEvents.length && selectedSession.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate).format(\"MM/DD/YYYY\") : '';\n let reportData = this.props.report.report;\n reportData.forEach((rpt, idx) => {\n rpt.showItem = idx === 0;\n });\n this.setState({\n isSearching: false,\n reportData: reportData,\n reportDataChamber: reportDataChamber,\n reportDataDate: startDate,\n reportDataName: reportDataName\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isSearching: false\n });\n })\n }\n\n handleRadioChange(item) {\n let filteredReportData = [...this.state.reportData];\n filteredReportData.forEach(reportItem => {\n if (reportItem.Heading === item.Heading) {\n reportItem.showItem = true;\n } else {\n reportItem.showItem = false;\n }\n });\n this.setState({\n reportData: filteredReportData\n });\n }\n\n componentDidMount() {\n this.props.actions.getSessionList()\n .then(() => {\n const sessionList = [...this.props.session.sessionList];\n let selectedSession = '';\n sessionList.forEach(session => {\n session.label = session.SessionYear + \" \" + session.DisplayName\n session.value = session.SessionID;\n if (session.IsDefault) {\n selectedSession = session;\n }\n });\n this.setState({\n sessionList: sessionList,\n selectedSession: selectedSession,\n sessionisLoaded: true\n }, () => {\n this.props.actions.getIntroDateList('?sessionCode=' + this.state.selectedSession.SessionCode);\n });\n });\n this.props.actions.getReportTypes()\n .then(() => {\n let reportTypes = [...this.props.report.reportTypes];\n\n reportTypes.forEach(type => {\n type.label = type.ReportName;\n type.value = type.ReportID;\n });\n this.setState({\n reportTypes: reportTypes.filter(x => {\n if (this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\"))\n return true;\n\n if (this.props.login.userClaims.claims.find(x => x.RoleName === \"SenateReportFileGenerationEditor\"))\n if (x.ReportID == 2 || x.ReportID == 4)\n return true;\n\n if (this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseReportFileGenerationEditor\"))\n if (x.ReportID == 1 || x.ReportID == 3)\n return true;\n }),\n reportTypesAreLoaded: true\n }, () => {\n if (this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseReportFileGenerationEditor\") && this.state.reportTypes.find(rt => rt.label === \"House Daily Rule Report\")) {\n this.handleReportTypeChange(this.state.reportTypes.find(rt => rt.label === \"House Daily Rule Report\"));\n } else if (this.props.login.userClaims.claims.find(x => x.RoleName === \"SenateReportFileGenerationEditor\") && this.state.reportTypes.find(rt => rt.label === \"Senate Daily Rule Report\")) {\n this.handleReportTypeChange(this.state.reportTypes.find(rt => rt.label === \"Senate Daily Rule Report\"));\n }\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { reportTypes, sessionList, isSearching, selectedSession, selectedReport, selectedDate, reportData } = this.state;\n if (!this.state.sessionisLoaded || !this.state.reportTypesAreLoaded) {\n return (<div className=\"center-spinner spinner\">Loading...</div>)\n }\n // Get a list of distinct headers for the filter section.\n let flags = new Set();\n let uniqueHeaderItems = reportData.filter(item => {\n if (flags.has(item.Heading)) {\n return false;\n }\n flags.add(item.Heading);\n return true;\n })\n const dateLabel = this.state.selectedReport.value === 3 && this.state.selectedSession.SessionCode === \"20251\"\n ? \"January 13, 2025\" /* Date we started after the water crisis, Google it. --JGB */\n : moment(this.state.selectedReport.ReportID === 1 || this.state.selectedReport.ReportID === 2\n ? this.state.selectedDate\n : this.state.reportDataDate).format('MMMM D, YYYY')\n\n let dateList = [];\n this.props.bills.introDateList?.forEach(x => dateList.push(moment(x.IntroductionDate)));\n\n return (<div>\n <div className=\"header-half\">\n <h1>Rule Reports</h1>\n </div>\n <div className=\"user-forms dlas-forms\">\n <fieldset className=\"fieldset-collapse\">\n <div>\n <div className=\"inner-grid five\">\n <div>\n <label>Report Type</label>\n <Select\n options={reportTypes}\n value={selectedReport}\n styles={customStyles}\n onChange={this.handleReportTypeChange}\n />\n </div>\n <div></div>\n </div>\n <div className=\"inner-grid five\">\n <div>\n <label>Session</label>\n <Select\n options={sessionList}\n value={selectedSession}\n styles={customStyles}\n onChange={(val) => this.handleFormChange('selectedSession', val)}\n />\n </div>\n {(selectedReport && selectedReport.ReportName.toLowerCase().includes('daily')) || (selectedReport && selectedReport.ReportName.toLowerCase().includes('prefile') && selectedReport.ReportName.toLowerCase().includes('house')) ?\n <div>\n <label>Date</label>\n {(selectedReport && selectedReport.ReportName.toLowerCase().includes('prefile') && selectedReport.ReportName.toLowerCase().includes('house'))\n ?\n <DatePicker\n selected={selectedDate}\n isClearable\n placeholderText=\"Date\"\n onChange={(val) => this.handleFormChange('selectedDate', val)}\n includeDates={dateList || []}\n />\n :\n <DatePicker\n selected={selectedDate}\n isClearable\n placeholderText=\"Date\"\n onChange={(val) => this.handleFormChange('selectedDate', val)}\n />\n }\n </div> : null\n }\n </div>\n <br />\n </div>\n <div className=\"inner-grid six\">\n <div>\n <label></label>\n <button\n type=\"button\"\n onClick={this.getReport}\n disabled={!selectedSession || !selectedReport || selectedReport.ReportID === 1 && !selectedDate || selectedReport.ReportID === 2 && !selectedDate}\n className=\"button\">\n Get Report</button>\n </div>\n <div></div>\n </div>\n </fieldset>\n <div>\n {isSearching ?\n <div className=\"center-spinner spinner\">Getting Records...</div>\n :\n <React.Fragment>\n <div className=\"center\">{this.props.report.reportError}</div>\n {reportData.length > 0 &&\n <React.Fragment>\n <hr className='faded-line' />\n <div className=\"advanced-search checkbox-container dlas-forms\">\n <span>Include Section</span>\n <br />\n {uniqueHeaderItems.map((item, idx) =>\n <div key={item.Heading} className=\"label-and-radio\">\n <label htmlFor={idx}><input id={idx} checked={this.state.reportData.find(rpt => rpt.Heading === item.Heading).showItem} onChange={() => this.handleRadioChange(item)} type=\"radio\" /> {item.Heading}</label>\n </div>\n )}\n </div>\n <hr className='faded-line' />\n <div className=\"align-right\">\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print\">Print</a>}\n content={() => this.printRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <div ref={el => this.printRef = el} className=\"public-details details-section section-content\">\n <p className=\"center\">{this.state.reportDataName !== \"Daily Rule Report\" && this.state.reportDataName}</p>\n <p className=\"center\">\n <strong>\n {this.state.reportDataChamber}\n </strong>\n </p>\n <p className=\"align-right\">{\"Printed \" + moment().format(\"MMMM D, YYYY\")}</p>\n <p className=\"align-right\">{dateLabel}</p>\n {reportData.map((reportItem, reportItemIndex) =>\n <div key={reportItemIndex}>\n {reportItem.showItem &&\n <React.Fragment>\n <p>{reportItem.Heading}</p>\n {reportItem.Legislation.filter(x => {\n if (selectedDate && selectedReport.ReportName.toLowerCase().includes('prefile') && selectedReport.ReportName.toLowerCase().includes('house')) {\n return moment(selectedDate).isSame(moment(x.IntroductionDate), \"day\")\n } else {\n return true;\n }\n }).map((bill, billIndex) => {\n bill.Patrons.sort((a, b) => a.ChamberCode !== b.ChamberCode ? a.ChamberCode !== bill.ChamberCode ? 1 : -1 : a.Sequence - b.Sequence);\n return (<div key={billIndex}>\n <p><b><Link to={`/bill-details/${selectedSession.SessionCode}/${bill.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{bill.LegislationNumber.substring(0, 1) + '.' + (bill.LegislationNumber.substring(1, 2) === 'J' ? 'J.R. ' : bill.LegislationNumber.substring(1, 2) + '. ') + bill.LegislationNumber.substring(2)}</Link></b> {bill.DraftTitle && renderHTML(bill.DraftTitle.replace(\"<p class=ldtitle>\", \"<span>\").replace(\"</p>\", \"</span>\"))}</p>\n <p className=\"align-right\">{bill.LDNumber}</p>\n {bill.EffectiveType === \"Emergency\" && <p>EMERGENCY</p>}\n {this.state.reportDataName !== \"Daily Rule Report\" && <p>(Prefiled {moment(bill.IntroductionDate).format('MMMM D, YYYY')})</p>}\n <p>{bill.Patrons.length > 1 ? \"Patrons--\" : \"Patron--\"}\n {bill.Patrons.map((patron, patronIndex) => {\n let patronString = '';\n if (bill.Patrons[patronIndex + 1] && bill.Patrons[patronIndex + 1].ChamberCode !== bill.ChamberCode && bill.Patrons[patronIndex].ChamberCode === bill.ChamberCode) {\n patronString = (patronIndex !== 0 ? \" and \" : \"\") + patron.PatronDisplayName + (bill.ChamberCode === \"H\" ? patronIndex + 2 === bill.Patrons.length ? \"; Senator: \" : \"; Senators: \" : patronIndex + 2 === bill.Patrons.length ? \"; Delegate: \" : \"; Delegates: \");\n } else if (patronIndex + 1 === bill.Patrons.length && bill.Patrons.length > 1 && bill.Patrons[patronIndex].ChamberCode === bill.Patrons[patronIndex - 1].ChamberCode) {\n patronString = \" and \" + patron.PatronDisplayName;\n } else if (patronIndex != 0 && bill.Patrons[patronIndex - 1].ChamberCode === bill.Patrons[patronIndex].ChamberCode) {\n patronString = \", \" + patron.PatronDisplayName;\n } else {\n patronString = patron.PatronDisplayName\n }\n return (<React.Fragment key={patronIndex}>{patronString}{patron.ByRequest ? ' (By Request)' : null}</React.Fragment>)\n })}</p>\n {bill.ConsentRequired &&\n <p>Unanimous consent to introduce</p>\n }\n {bill.GovernorsRequest &&\n <p>Introduced at the request of Governor.</p>\n }\n {bill.CommitteeName\n ? bill.CommitteeName === \"Judiciary\"\n ? <p>Referred to Committee on the {bill.CommitteeName}</p>\n : bill.CommitteeName === \"Courts of Justice\"\n ? <p>Referred to Committee for {bill.CommitteeName}</p>\n : <p>Referred to Committee on {bill.CommitteeName}</p>\n :\n !reportItem.Heading.includes(' laid on ')\n ? <p>Committee Referral Pending</p>\n : null\n }\n <br />\n </div>)\n }\n )}\n </React.Fragment>\n }\n </div>\n )}\n </div>\n </React.Fragment>\n }\n </React.Fragment>\n }\n </div>\n </div>\n </div>)\n }\n}\n\nconst customStyles = {\n container: base => ({\n ...base,\n lineHeight: 'normal',\n }),\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n dropdownIndicator: base => ({\n ...base,\n padding: '0px 8px'\n })\n}\n\nexport default connect(\n (state) => {\n const { session, report, login, bills } = state;\n return {\n session,\n report,\n login,\n bills\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, reportActionCreators, billActionCreators), dispatch)\n }\n }\n)(ReportManagement);","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport ReactTable from 'react-table'\n\nclass BillGridSection extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n }\n\n this.onExpandedChange = this.onExpandedChange.bind(this);\n }\n\n getAmendmentDescription(legislationText) {\n let descriptionAndDisposition = legislationText.Description;\n // Versions that are held have the text disposition hidden to match the public version table\n if (legislationText.TextDispositionID === 12) {\n return legislationText.Description + \" Engrossed\"\n }\n\n if (legislationText.TextDisposition === \"Hold\") {\n return descriptionAndDisposition;\n } else if (legislationText.TextDisposition !== \"Posted\") {\n descriptionAndDisposition = `${legislationText.Description} ${legislationText.TextDisposition || ''}`;\n }\n //If the IsReprint boolean is true and the service didn't append Reprint to the description already\n if (legislationText.IsReprint && !descriptionAndDisposition.includes(\"(Reprint)\")) {\n descriptionAndDisposition = descriptionAndDisposition + \" (Reprint)\";\n }\n\n if (legislationText.LDNumber) {\n descriptionAndDisposition = descriptionAndDisposition + \" - \" + legislationText.LDNumber;\n }\n\n if (!legislationText.DocumentCode || legislationText.DocumentCode === \"\") {\n return legislationText.Description;\n }\n\n return descriptionAndDisposition;\n }\n\n onExpandedChange(newExpanded) {\n this.props.toggleExpandedBills(newExpanded, this.props.currentPage)\n }\n\n render() {\n return (\n <div>\n <ReactTable\n resizable={false}\n data={this.props.billList}\n loading={!this.props.isLoaded}\n ref={r => this.reactTable = r}\n autoResetExpanded={false}\n freezeWhenExpanded={false}\n expanded={Object.keys(this.props.expandedBills).length > 0 ? this.props.expandedBills : undefined}\n onExpandedChange={newExpanded => this.onExpandedChange(newExpanded)}\n page={this.props.currentPage}\n pages={Math.ceil((this.props.billList ? this.props.billList.length : 0) / this.props.pageSize)}\n onPageChange={this.props.onPageChange}\n SubComponent={({ original, index }) => {\n return (\n <div style={{ fontSize: \"1.2em\" }}>\n <ul>\n {original.Amendments.filter((x) => this.props.selectedChamber ? x.ChamberCode === this.props.selectedChamber : x).sort((a, b) => a.DocumentCode && a.DocumentCode.localeCompare(b.DocumentCode)).map((amendment, amendmentIndex) => {\n return (\n <div key={amendmentIndex}>\n {amendment.IsPublic ?\n <Link to={`/bill-details/${original.SessionCode}/${original.LegislationNumber}/text/${amendment.DocumentCode}`} target=\"_blank\" rel=\"noreferrer\" className=\"icon book\" style={{ marginRight: '8px' }} />\n :\n <span className=\"icon flag\" style={{ marginRight: '8px' }} />\n }\n <button onClick={() => this.props.selectAmendment(index, amendment)} className=\"button-link\">{amendment.DocumentCode && amendment.DocumentCode + ' - '}{this.getAmendmentDescription(amendment)}</button>\n </div>\n )\n }\n )}\n </ul>\n </div>\n );\n }}\n columns={[\n {\n Header: 'Bill #',\n sortable: true,\n filterable: false,\n width: 90,\n accessor: \"\",\n Cell: ({ original, index }) => {\n if (original && original.SessionCode) {\n return (<Link to={`/bill-details/${original.SessionCode}/${original.LegislationNumber}`} target=\"_blank\" rel=\"noreferrer\">{original.LegislationNumber}</Link >)\n } else {\n return (<span>{original.LegislationNumber}</span>)\n }\n }\n },\n {\n Header: 'Patron',\n sortable: true,\n filterable: false,\n accessor: \"Patrons\",\n width: 90,\n Cell: row =>\n <span>{row.value && row.value.map((patron, index) => <React.Fragment key={index}>{patron.PatronDisplayName}{index !== row.value.length - 1 && \", \"}</React.Fragment>)}</span>\n },\n {\n Header: 'Caption',\n sortable: true,\n filterable: false,\n accessor: \"Description\",\n Cell: row => <span>{row.value}</span>\n },\n {\n Header: 'Actions',\n sortable: false,\n filterable: false,\n accessor: \"\",\n width: 145,\n expander: true,\n Expander: ({ isExpanded, index }) => {\n return (\n <div className=\"committee-action-column\">\n {this.props.billDataIsLoading === index ?\n <div><span className=\"small-spinner\"></span></div>\n :\n <button className={`${isExpanded ? 'arrow-up' : 'arrow-down'}`} type=\"button\"></button>\n }\n </div>\n );\n }\n }\n ]}\n pageSize={this.props.pageSize}\n onPageSizeChange={this.props.onPageSizeChange}\n className=\"committee-table -striped -highlight react-table-hide-no-data\"\n />\n </div>\n );\n }\n}\n\nexport default BillGridSection;","import React from 'react';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\n\nclass SelectorSection extends React.Component {\n\n render() {\n return (\n <div className=\"inner-grid four\">\n <div>\n <Fields.Dropdown\n value={this.props.selectedSession}\n options={this.props.sessionOptions}\n id=\"sessionDropdown\"\n onChange={this.props.onSessionChange}\n />\n </div>\n <div>\n <Fields.Dropdown\n value={this.props.selectedChamber}\n options={this.props.chamberOptions}\n id=\"chamberDropdown\"\n onChange={this.props.onChamberChange}\n isDisabled={this.props.isDisabled || this.props.chamberIsDisabled}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default SelectorSection;","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { Prompt } from 'react-router';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport ReactToPrint from 'react-to-print';\nimport renderHTML from 'react-render-html';\n\nimport BillGridSection from './lis-bill-grid';\nimport SelectorSection from './lis-selectors';\nimport ReviewSection from '../../lis-version-management/components/lis-review';\n\nclass AmendmentManagement extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n billFieldsetIsActive: true,\n reviewFieldsetIsActive: false,\n sessionOptions: [],\n selectedSession: '',\n reviewContent: '',\n isLoaded: true,\n billList: [],\n selectedAmendment: '',\n isPreviewVisible: false,\n processingFile: false,\n billDataIsLoading: null,\n billFilter: '',\n sessionID: '',\n selectedChamber: '',\n chamberOptions: [],\n expandedBills: {},\n isDirty: false,\n firstPass: true,\n currentPage: 0,\n pageSize: 5,\n unpublished: false,\n wasEmpty: false,\n replaced: false\n };\n\n this.reviewRef = React.createRef();\n\n this.togglePreview = this.togglePreview.bind(this);\n this.toggleFieldsetCollapse = this.toggleFieldsetCollapse.bind(this);\n this.handleSessionChange = this.handleSessionChange.bind(this);\n this.handleChamberChange = this.handleChamberChange.bind(this);\n this.selectAmendment = this.selectAmendment.bind(this);\n this.filterBills = this.filterBills.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.toggleExpandedBills = this.toggleExpandedBills.bind(this);\n this.onPageChange = this.onPageChange.bind(this);\n this.onPageSizeChange = this.onPageSizeChange.bind(this);\n this.getEDoc = this.getEDoc.bind(this);\n this.appendEdoc = this.appendEdoc.bind(this);\n this.setWasEmpty = this.setWasEmpty.bind(this);\n this.setReplaced = this.setReplaced.bind(this);\n this.filterToEDocReady = this.filterToEDocReady.bind(this);\n this.isEDocReady = this.isEDocReady.bind(this);\n }\n\n toggleFieldsetCollapse(isActive) {\n this.setState(state => ({\n [isActive]: !state[isActive]\n }));\n }\n\n togglePreview() {\n this.setState(state => ({\n isPreviewVisible: !state.isPreviewVisible\n }));\n }\n\n setWasEmpty(val, callback) {\n this.setState({ wasEmpty: val }, () => {\n if (callback) {\n callback();\n }\n })\n }\n\n setReplaced(val, callback) {\n this.setState({ replaced: val }, () => {\n if (callback) {\n callback();\n }\n })\n }\n\n async handleSave(publish) {\n this.setState({ isSaving: true });\n\n let selectedAmendment = { ...this.state.selectedAmendment };\n let amendmentsToSave = [];\n\n //Try to find the draft title in the text and set it\n let domContainer = document.createElement('div');\n domContainer.innerHTML = this.state.reviewContent;\n //The first element in the content with this class is the draft title\n let draftLDTitle = domContainer.querySelector('.ldtitle');\n if (draftLDTitle && draftLDTitle.innerHTML !== '') {\n selectedAmendment.DraftTitle = draftLDTitle.innerHTML;\n }\n\n //Remove any tags TinyMCE may have added when pasting from Word (Borrowing DOM container)\n domContainer.childNodes.forEach(node => {\n if (node.nodeName !== \"#text\") {\n node.removeAttribute('data-mce-fragment');\n if (node.childNodes.length > 0) {\n node.childNodes.forEach(childNode => {\n if (childNode.nodeName !== \"#text\") {\n childNode.removeAttribute('data-mce-fragment');\n }\n })\n }\n }\n });\n\n selectedAmendment.DraftText = domContainer.innerHTML;\n selectedAmendment.IsPublic = publish || false;\n\n if (!selectedAmendment.LegislationTypeCode) {\n selectedAmendment.LegislationTypeCode = this.state.billList.find(x => x.LegislationID === selectedAmendment.LegislationID).LegislationTypeCode\n }\n\n if (!selectedAmendment.LegislationChamberCode) {\n selectedAmendment.LegislationChamberCode = selectedAmendment.ChamberCode;\n }\n\n //If we're publishing the engrossed collection of adopted/adopted in part amendments then mark all of those amendments inactive and add them to the save array\n if (publish && Boolean(selectedAmendment.Description.match(/((Senate)|(House))\\s(Amendment)s?/)) && selectedAmendment.TextDispositionID === 12) {\n let bill = this.state.billList.find(x => x.LegislationID === selectedAmendment.LegislationID);\n for (let i = 0; i < bill.Amendments.length; i++) {\n if (bill.Amendments[i].TextDispositionID !== 12) {\n if ((bill.Amendments[i].TextDispositionID === 6 || bill.Amendments[i].TextDispositionID === 7) && bill.Amendments[i].IsActive) {\n //Missing draft text can cause republish to fail\n if (!bill.Amendments[i].DraftText) {\n await this.props.actions.getBillText(\"?legislationTextID=\" + bill.Amendments[i].LegislationTextID, true)\n .then(() => {\n bill.Amendments[i] = this.props.bills.billText[0]\n })\n }\n bill.Amendments[i].IsActive = false;\n\n amendmentsToSave.push(bill.Amendments[i])\n };\n }\n }\n }\n\n amendmentsToSave.push(selectedAmendment)\n\n this.props.actions.saveBillText({ TextsList: amendmentsToSave.filter(x => x.LegislationVersionID === 8) })\n .then(() => {\n this.setState({ isSaving: false });\n //In instances where we're publishing the engrossed version, other versions (like introduced) were present in the response\n //Filter out anything that ins't an amendment so we don't fall into the exception throw\n let billTextSave = [...this.props.bills.billTextSave.filter(x => x.LegislationVersionID === 8)];\n if (!billTextSave.length) {\n throw 'The response does not contain a bill text';\n }\n //If only one bill text is returned, use that one, otherwise, use the engrossed one (if there is more than one bill text returned and there is not exactly one engrossed version, there is an issue)\n if (billTextSave.length > 1) {\n billTextSave = billTextSave.filter(x => x.TextDisposition === \"Engrossed\");\n }\n if (billTextSave.length !== 1) {\n throw 'The response contains more than one bill text, but not exactly one engrossed version';\n }\n if (publish) {\n this.setState({\n isPreviewVisible: false,\n selectedAmendment: '',\n reviewContent: '',\n reviewFieldsetIsActive: false,\n billFieldsetIsActive: true,\n isDirty: false,\n firstPass: true\n });\n let filtered = this.state.filteredBillList.length != this.state.billList.length ? true : false\n let billList = filtered ? [...this.state.filteredBillList] : [...this.state.billList];\n const publishedBillIndex = billList.findIndex(b => b.LegislationID === billTextSave[0].LegislationID)\n this.handleSessionChange(this.state.selectedSession, publishedBillIndex);\n const legFileGenParams = \"?legislationID=\" + billTextSave[0].LegislationID\n + \"&legislationTextID=\" + billTextSave[0].LegislationTextID\n + \"&legislationVersionID=\" + billTextSave[0].LegislationVersionID\n + \"&sessionID=\" + this.state.selectedSession.SessionID;\n this.props.actions.genBillFile(legFileGenParams)\n } else {\n this.setState({\n selectedAmendment: billTextSave[0],\n isDirty: false,\n firstPass: true\n });\n }\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err.toString());\n this.props.actions.makeToast([{ message: \"Save Failed. You may need to refresh before attempting to save.\", type: \"failure\" }]);\n this.setState({ isSaving: false });\n });\n }\n\n handleEditorChange(content) {\n this.setState({\n reviewContent: content,\n isDirty: this.state.firstPass ? false : true,\n firstPass: false\n });\n }\n\n handleSessionChange(val, publishedLegislationIndex) {\n this.setState({\n selectedSession: val,\n isLoaded: false,\n selectedBill: '',\n amendmentFieldsetIsActive: false,\n reviewFieldsetIsActive: false\n });\n let params = \"?sessionID=\" + val.SessionID;\n if (this.state.selectedChamber !== \"\" && this.state.selectedChamber.value) {\n params = params + \"&chamberCode=\" + this.state.selectedChamber.value;\n }\n\n this.props.actions.getLegislationAmendmentList(params)\n .then(() => {\n this.setState({\n billList: this.props.bills.legislationAmendmentList,\n isLoaded: true,\n sessionID: val.SessionID\n }, () => {\n const callback = () => {\n if (!isNaN(publishedLegislationIndex) && publishedLegislationIndex > -1) {\n this.createEDoc(publishedLegislationIndex);\n }\n //create e doc for bills that were expanded; \n //if we are viewing bills ready for eDoc, then the bill just published will be removed so we also need to reset expandedBills state accordingly\n let newExpanded = { ...this.state.expandedBills };\n Object.entries(this.state.expandedBills).forEach((b, i) => {\n const idx = Number(b[0]);\n const expanded = b[1];\n if (this.state.eDocFiltered && !isNaN(publishedLegislationIndex) && publishedLegislationIndex > -1 && idx >= publishedLegislationIndex) {\n if (idx !== publishedLegislationIndex) { newExpanded[idx - 1] = expanded; }\n delete newExpanded[idx];\n if (expanded) {\n this.createEDoc(idx - 1);\n }\n } else if (expanded) {\n this.createEDoc(idx);\n }\n })\n this.setState({ expandedBills: newExpanded });\n }\n if (this.state.billFilter) {\n this.filterBills({ target: { value: this.state.billFilter } }, (publishedLegislationIndex ? true : false), callback)\n } else {\n this.setState({\n filteredBillList: this.props.bills.legislationAmendmentList\n }, () => {\n callback();\n })\n }\n if (this.state.eDocFiltered) {\n this.filterToEDocReady()\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true\n });\n });\n }\n\n handleChamberChange(val) {\n this.setState({\n selectedChamber: val,\n });\n if (this.state.sessionID) {\n const params = \"?sessionID=\" + this.state.sessionID + \"&chamberCode=\" + val.value\n this.setState({\n isLoaded: false,\n selectedBill: '',\n amendmentFieldsetIsActive: false,\n reviewFieldsetIsActive: false\n }, () => {\n this.props.actions.getLegislationAmendmentList(params)\n .then(() => {\n this.setState({\n billList: this.props.bills.legislationAmendmentList,\n isLoaded: true\n }, () => {\n if (this.state.billFilter) {\n this.filterBills({ target: { value: this.state.billFilter } })\n } else {\n this.setState({\n filteredBillList: this.props.bills.legislationAmendmentList\n })\n }\n if (this.state.eDocFiltered) {\n this.filterToEDocReady()\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true\n });\n });\n })\n }\n }\n\n async appendEdoc(amendment, amendments) {\n let draftText = amendment.DraftText;\n let amendmentNumber = 1;\n let amendmentTexts = [];\n let amendmentItems = [];\n\n for (let i = 0; i < amendments.length; i++) {\n if (amendments[i].IsActive) {\n let billTextParams = \"?legislationTextID=\" + amendments[i].LegislationTextID;\n await this.props.actions.getBillText(billTextParams, true)\n .then(() => {\n amendmentTexts.push(this.props.bills.billText[0]);\n })\n }\n }\n\n await amendmentTexts.forEach((amendmentText, i) => {\n amendmentItems.push(...amendmentText.AmendmentItems)\n })\n\n await amendmentItems.sort((a, b) => {\n return a.LineNumber - b.LineNumber\n })\n\n for (let k = 0; k < amendmentItems.length; k++) {\n let thisDraftText = '';\n //Sponsor\n thisDraftText = thisDraftText + '<p class=\"' + amendmentItems[k].Sponsor.ClassName + '\">' + amendmentItems[k].Sponsor.Name + '</p>';\n //Line\n thisDraftText = thisDraftText + '<p class=\"' + amendmentItems[k].LineClassName + '\">' + (amendmentNumber) + \". \" + amendmentItems[k].Line + '</p>';\n amendmentNumber++;\n //Changes\n if (amendmentItems[k].amendmentChanges) {\n for (let l = 0; l < amendmentItems[k].amendmentChanges.length; l++) {\n for (let m = 0; m < amendmentItems[k].amendmentChanges[l].AmendmentActions.length; m++) {\n if (amendmentItems[k].amendmentChanges[l].AmendmentActions[m].text !== \"\") {\n thisDraftText = thisDraftText + '<p class=\"' + amendmentItems[k].amendmentChanges[l].ClassName + '\">' + amendmentItems[k].amendmentChanges[l].AmendmentActions[m].action + '</p>';\n thisDraftText = thisDraftText + '<p class=\"' + amendmentItems[k].amendmentChanges[l].AmendmentActions[m].TextClassName + '\">' + amendmentItems[k].amendmentChanges[l].AmendmentActions[m].text + '</p>';\n } else {\n thisDraftText = thisDraftText + '<p class=\"' + amendmentItems[k].amendmentChanges[l].ClassName + '\">' + amendmentItems[k].amendmentChanges[l].AmendmentActions[m].action + '</p>';\n for (let n = 0; n < amendmentItems[k].amendmentChanges[l].AmendmentActions[m].Lines.length; n++) {\n thisDraftText = thisDraftText + '<p class=\"' + amendmentItems[k].amendmentChanges[l].AmendmentActions[m].TextClassName + '\">' + amendmentItems[k].amendmentChanges[l].AmendmentActions[m].Lines[n] + '</p>';\n }\n }\n }\n }\n }\n\n //We check to see if the exact amendment text already exists in the edoc. If it does then skip over it so as to not add it into the edoc a second time\n if (draftText.replace(/(\\r\\n|\\n|\\r)/gm, \"\").indexOf(thisDraftText) === -1) {\n draftText = draftText + thisDraftText;\n }\n }\n\n amendment.DraftText = draftText;\n amendment.AmendmentItems = amendmentItems\n\n return amendment;\n }\n\n async getEDoc(billTextParams) {\n await this.props.actions.getBillText(billTextParams, true)\n return this.props.bills.billText[0];\n }\n\n async selectAmendment(billIndex, amendment) {\n //If the amendment has a LegislationTextID then fetch it and start editing\n if (amendment.LegislationTextID && amendment.TextDispositionID !== 12) {\n let billTextParams = \"?legislationTextID=\" + amendment.LegislationTextID;\n this.setState({\n billDataIsLoading: billIndex\n });\n this.props.actions.getBillText(billTextParams, true)\n .then(() => {\n if (this.props.bills.billText.length === 0) {\n throw 'No bill text found for this text ID';\n }\n if (this.props.bills.billText.length > 1) {\n throw 'There is more than one bill text for this text id';\n }\n const amendment = this.props.bills.billText[0];\n this.setState({\n wasEmpty: false,\n replaced: false,\n billDataIsLoading: null,\n selectedAmendment: amendment,\n reviewFieldsetIsActive: true,\n //billFieldsetIsActive: false,\n reviewContent: amendment.DraftText || '',\n isDirty: false,\n firstPass: true,\n unpublished: amendment.LegislationTextID && amendment.IsPublic ? false : true\n }, () => {\n this.reviewRef.current.scrollIntoView();\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err.toString());\n this.setState({\n billDataIsLoading: null\n });\n this.props.actions.makeToast([{ message: \"Failed to get Bill Text\", type: \"failure\" }]);\n });\n } else if (amendment.TextDispositionID === 12\n && amendment.LegislationTextID //Else if we find an edoc that was previously saved and there is at least one adopted/adopted in part amendment that's still active we need to add it to the edoc\n && (this.state.filteredBillList.length != this.state.billList.length\n ? this.state.filteredBillList[billIndex].Amendments.find(x => x.IsActive && [7, 6].includes(x.TextDispositionID))\n : this.state.billList[billIndex].Amendments.find(x => x.IsActive && [7, 6].includes(x.TextDispositionID)))) {\n\n this.setState({\n billDataIsLoading: true\n })\n\n let filtered = this.state.filteredBillList.length != this.state.billList.length;\n let billList = filtered ? [...this.state.filteredBillList] : [...this.state.billList];\n let amendments = billList[billIndex].Amendments.filter(x => x.IsActive && [7, 6].includes(x.TextDispositionID))\n\n let billTextParams = \"?legislationTextID=\" + amendment.LegislationTextID;\n\n //We have to go back across the wire a bunch to fetch the needed edoc draft text and amendment items to build the appended edoc\n //If we didn't use async/await setting the state below outruns the building of the document\n let eDocText = await this.getEDoc(billTextParams);\n let appendedEDoc = await this.appendEdoc(eDocText, amendments);\n\n amendment = appendedEDoc;\n\n this.setState({\n billDataIsLoading: null,\n selectedAmendment: amendment,\n reviewFieldsetIsActive: true,\n reviewContent: amendment && amendment.DraftText || '',\n isDirty: false,\n firstPass: true,\n wasEmpty: false,\n replaced: false,\n unpublished: amendment.LegislationTextID && amendment.IsPublic ? false : true\n }, () => {\n this.reviewRef.current.scrollIntoView();\n });\n } else {\n let filtered = this.state.filteredBillList.length != this.state.billList.length;\n let billList = filtered ? [...this.state.filteredBillList] : [...this.state.billList];\n let billTextParams = \"?legislationID=\" + billList[billIndex].LegislationID;\n let amendmentItems = [];\n\n this.setState({\n billDataIsLoading: billIndex\n }, () => {\n this.props.actions.getBillText(billTextParams, true)\n .then(() => {\n //If we don't have the LegislationTextID then this is an auto-generated document containing all adopted/adopted in part amendments\n //Build the document to be passed into the editor\n if (!amendment.LegislationTextID) {\n for (let i = 0; i < this.props.bills.billText.length; i++) {\n if (this.props.bills.billText[i].ChamberCode !== billList[billIndex].ChamberCode && (this.props.bills.billText[i].TextDispositionID === 6 || this.props.bills.billText[i].TextDispositionID === 7)) {\n for (let j = 0; j < this.props.bills.billText[i].AmendmentItems.length; j++) {\n amendmentItems.push(this.props.bills.billText[i].AmendmentItems[j]);\n }\n }\n }\n\n let amendment = billList[billIndex].Amendments.find(x => !x.LegislationTextID);\n amendment.AmendmentItems = amendmentItems.sort((a, b) => a.LineNumber - b.LineNumber);\n\n //Build the doc\n let draftText = '<p class=\"textbl\">(' + billList[billIndex].LegislationNumber + ')</p> <p class=\"textbl\">AMENDMENT(S) PROPOSED BY THE ' + (billList[billIndex].ChamberCode === 'H' ? 'SENATE' : 'HOUSE') + '</p>';\n\n for (let k = 0; k < amendment.AmendmentItems.length; k++) {\n //Sponsor\n draftText = draftText + '<p class=\"' + amendment.AmendmentItems[k].Sponsor.ClassName + '\">' + amendment.AmendmentItems[k].Sponsor.Name + '</p>';\n //Line\n draftText = draftText + '<p class=\"' + amendment.AmendmentItems[k].LineClassName + '\">' + (k + 1) + \". \" + amendment.AmendmentItems[k].Line + '</p>';\n //Changes\n if (amendment.AmendmentItems[k] && amendment.AmendmentItems[k].amendmentChanges) {\n for (let l = 0; l < amendment.AmendmentItems[k].amendmentChanges.length; l++) {\n for (let m = 0; m < amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions.length; m++) {\n if (amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].text !== \"\") {\n draftText = draftText + '<p class=\"' + amendment.AmendmentItems[k].amendmentChanges[l].ClassName + '\">' + amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].action + '</p>';\n draftText = draftText + '<p class=\"' + amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].TextClassName + '\">' + amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].text + '</p>';\n } else {\n draftText = draftText + '<p class=\"' + amendment.AmendmentItems[k].amendmentChanges[l].ClassName + '\">' + amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].action + '</p>';\n for (let n = 0; n < amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].Lines.length; n++) {\n draftText = draftText + '<p class=\"' + amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].TextClassName + '\">' + amendment.AmendmentItems[k].amendmentChanges[l].AmendmentActions[m].Lines[n] + '</p>';\n }\n }\n }\n }\n }\n }\n\n amendment.DraftText = draftText;\n let amendments = this.props.bills.billText.filter(x => x.LegislationVersionID === 8);\n amendments.push(amendment);\n //Need to pick out the amendments specifically\n billList[billIndex].Amendments = amendments\n //Else if we are opening the edoc and there are previously unpublished adopted/adopted in part amendments present in the list then add them to the edoc\n } else {\n amendment = this.props.bills.billText.find(x => x.LegislationTextID === amendment.LegislationTextID)\n //We only want the amendments\n billList[billIndex].Amendments = this.props.bills.billText.filter(x => x.LegislationVersionID === 8);\n }\n\n if (filtered) {\n this.setState({\n filteredBillList: billList\n })\n } else {\n this.setState({\n billList: billList\n })\n }\n this.setState({\n billDataIsLoading: null,\n selectedAmendment: amendment,\n reviewFieldsetIsActive: true,\n //billFieldsetIsActive: false,\n reviewContent: amendment && amendment.DraftText || '',\n wasEmpty: false,\n replaced: false,\n isDirty: false,\n firstPass: true,\n unpublished: amendment.LegislationTextID && amendment.IsPublic ? false : true\n }, () => {\n this.reviewRef.current.scrollIntoView();\n });\n })\n });\n\n this.setState({\n billDataIsLoading: false\n })\n }\n }\n\n filterBills(e, keepExpanded, callback) {\n const val = e?.target?.value?.toUpperCase();\n let filteredBillList = val ? this.state.billList.filter(bill => bill.LegislationNumber.toUpperCase().includes(val)) : this.state.billList;\n const resultsChanged = filteredBillList.length !== this.state.billList.length;\n this.setState({\n filteredBillList: filteredBillList,\n eDocFiltered: false,\n billFilter: val\n }, () => {\n if (resultsChanged) {\n //reset page to 0 since results have changed\n this.onPageChange(0, keepExpanded);\n }\n if (callback)\n callback();\n });\n }\n\n toggleExpandedBills(newExpanded, pageIndex) {\n let index, billIndex;\n for (let key in newExpanded) {\n //Find the key where the current expanded bills and the new expanded bills differs\n if (newExpanded[key] && !this.state.expandedBills[key] || !newExpanded[key] && this.state.expandedBills[key]) {\n index = key;\n billIndex = parseInt(key) + (parseInt(pageIndex) * this.state.pageSize);\n }\n }\n\n this.setState({\n expandedBills: newExpanded\n }, () => {\n if (this.state.expandedBills[index]) {\n this.createEDoc(billIndex);\n }\n })\n }\n\n filterToEDocReady() {\n let billList = [...this.state.billList];\n\n const filteredBillList = billList.filter((_, billIndex) => this.isEDocReady(billList, billIndex));\n this.setState({ filteredBillList, eDocFiltered: true, billFilter: '' });\n }\n\n isEDocReady(billList, billIndex) {\n //If we have not already created the new consolidated amendment\n //And If, from the opposing chamber, there is any active Adopted In Part amendment OR there is at least one active Adopted amendment \n //Then create the new consolidated amendment\n const amendmentsFilteredByOpposingChamber = billList[billIndex]?.Amendments?.filter(x => x.ChamberCode !== billList[billIndex].ChamberCode);\n\n return !amendmentsFilteredByOpposingChamber?.find(x => x.TextDispositionID === 12) &&\n (amendmentsFilteredByOpposingChamber?.find(x => x.TextDispositionID === 7)\n || amendmentsFilteredByOpposingChamber?.find(x => x.TextDispositionID === 6))\n }\n\n createEDoc(billIndex) {\n let filtered = this.state.filteredBillList.length != this.state.billList.length ? true : false\n let billList = filtered ? [...this.state.filteredBillList] : [...this.state.billList];\n\n if (this.isEDocReady(billList, billIndex)) {\n let eDoc = {\n ChamberCode: billList[billIndex].ChamberCode === \"H\" ? \"S\" : \"H\", //Opposite of the bill's originating chamber\n Description: (billList[billIndex].ChamberCode === \"H\" ? \"Senate\" : \"House\") + \" Amendments\", //Opposite of the bill's originating chamber\n DocumentCode: null,\n IsActive: true,\n IsPublic: false,\n LDNumber: null,\n LegislationID: billList[billIndex].LegislationID,\n LegislationTextID: null,\n LegislationVersion: \"Amendment\",\n LegislationVersionID: 8,\n TextDisposition: \"Engrossed\",\n TextDispositionID: 12,\n VersionDate: \"\",\n SessionCode: this.state.selectedSession.SessionCode,\n SponsorType: billList[billIndex].ChamberCode === \"H\" ? \"Senate\" : \"House\", //Opposite of the bill's originating chamber\n }\n billList[billIndex].Amendments.push(eDoc)\n\n if (filtered) {\n this.setState({\n filteredBillList: billList\n })\n } else {\n this.setState({\n billList: billList\n });\n }\n }\n }\n\n componentDidMount() {\n //Get the list of active sessions for the session dropdown\n this.props.actions.getSessionShallowList(\"IsActive=true\")\n .then(() => {\n let sessionList = [...this.props.session.sessionShallowList];\n sessionList.forEach(session => {\n session.label = session.SessionYear + ' ' + session.DisplayName;\n session.value = session.SessionID;\n //Set the last session in the list as the selected session\n if (session.IsDefault) {\n this.handleSessionChange(session);\n }\n });\n this.setState({\n sessionOptions: sessionList\n });\n });\n\n //Find if user has access to house and/or senate and add option to chamber selector as applicable\n let chamberOptions = [];\n\n if (this.props.login.userClaims.claims.find(x => x.Resource === \"LegislationText\" && x.Scope == 'House')) {\n chamberOptions.push({ label: \"House Amendment Activity\", value: \"H\" });\n }\n if (this.props.login.userClaims.claims.find(x => x.Resource === \"LegislationText\" && x.Scope == 'Senate')) {\n chamberOptions.push({ label: \"Senate Amendment Activity\", value: \"S\" })\n }\n\n this.setState({\n chamberOptions: chamberOptions,\n disableChamberSelector: chamberOptions.length === 1\n }, () => {\n if (this.state.chamberOptions.length === 1) {\n this.handleChamberChange(chamberOptions[0])\n }\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n onPageChange(pageIndex, keepExpanded) {\n this.setState({\n currentPage: pageIndex\n }, () => {\n //Reset the expanded bills so we don't have bills that weren't clicked on expanded as the user tabs through the pages of the table\n if (!keepExpanded) {\n this.toggleExpandedBills({}, this.state.currentPage)\n }\n })\n }\n\n onPageSizeChange(pageSize) {\n this.setState({ pageSize: pageSize }, () => {\n this.toggleExpandedBills({}, this.state.currentPage)\n })\n }\n\n render() {\n const { selectedAmendment } = this.state;\n if (this.state.isPreviewVisible) {\n return (\n <div>\n <div className=\"flex-row align-center bottomline\">\n <h2>{this.state.selectedSession.SessionYear} {this.state.selectedSession.DisplayName} / {selectedAmendment.DocumentCode}</h2>\n <ReactToPrint\n trigger={() => <span><button type=\"button\" className=\"button print\">Print</button></span>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <div className=\"inner-grid two-col-sidebar\" ref={el => (this.componentRef = el)}>\n <div>\n {this.state.reviewContent ? renderHTML(this.state.reviewContent) : ''}\n </div>\n </div>\n <div className=\"button-bar\">\n <div></div>\n <div className=\"align-right\">\n <button disabled={this.state.isSaving} onClick={this.togglePreview} className=\"button secondary\">Edit</button>\n <button disabled={this.state.isSaving} onClick={() => this.handleSave(true)} className=\"button\">{this.state.isSaving ? \"Publishing...\" : \"Publish\"}</button>\n </div>\n </div>\n </div>\n );\n } else {\n return (\n <div>\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <h1>Amendment Management</h1>\n <div className=\"user-forms dlas-forms\">\n <fieldset className={this.state.billFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'billFieldsetIsActive')}>Bills {this.state.processingFile && <span> | <i>Creating file...</i></span>}</legend>\n <div>\n <SelectorSection\n onSessionChange={this.handleSessionChange}\n sessionOptions={this.state.sessionOptions}\n selectedSession={this.state.selectedSession}\n\n onChamberChange={this.handleChamberChange}\n chamberOptions={this.state.chamberOptions}\n selectedChamber={this.state.selectedChamber}\n chamberIsDisabled={this.state.disableChamberSelector}\n\n isDisabled={this.state.sessionID === \"\"}\n />\n <span className=\"insert-message small-text fail\">{this.props.bills.legislationAmendmentListError}</span>\n <div style={{ display: 'flex', gap: '10px' }}>\n <input type=\"text\" disabled={!this.state.isLoaded || this.state.eDocFiltered} onChange={this.filterBills} value={this.state.billFilter} placeholder=\"Filter by bill number\" />\n <button type=\"button\" className=\"button\" disabled={!this.state.isLoaded} onClick={() => !this.state.eDocFiltered ? this.filterToEDocReady() : this.filterBills()}>{!this.state.eDocFiltered ? 'Show Bills Ready For Second Chamber Engrossed Doc' : 'All Bills'}</button>\n </div>\n <BillGridSection\n billList={this.state.filteredBillList && this.state.filteredBillList.sort((a, b) => {\n let aPrefix = a.LegislationNumber.substr(0, 2);\n let bPrefix = b.LegislationNumber.substr(0, 2);\n let aNumber = parseInt(a.LegislationNumber.substr(2, a.LegislationNumber.length));\n let bNumber = parseInt(b.LegislationNumber.substr(2, b.LegislationNumber.length));\n\n return aPrefix > bPrefix ? 1 : aNumber > bNumber ? 1 : -1;\n })}\n selectAmendment={this.selectAmendment}\n isLoaded={this.state.isLoaded}\n billDataIsLoading={this.state.billDataIsLoading}\n expandedBills={this.state.expandedBills}\n toggleExpandedBills={this.toggleExpandedBills}\n pageSize={this.state.pageSize}\n currentPage={this.state.currentPage}\n onPageChange={this.onPageChange}\n onPageSizeChange={this.onPageSizeChange}\n selectedChamber={this.state.selectedChamber.value}\n />\n </div>\n </fieldset>\n <fieldset ref={this.reviewRef} className={this.state.reviewFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'reviewFieldsetIsActive')}><span>Review </span>\n {selectedAmendment &&\n <span>\n | {selectedAmendment.DocumentCode}\n </span>\n }</legend>\n <div>\n <ReviewSection\n editorContent={this.state.reviewContent}\n handleEditorChange={this.handleEditorChange}\n sessionId={this.state.selectedSession.SessionID}\n allowAmendmentActions={true}\n userChamber={this.props.login.userClaims.roles.find((x) => x === \"Admin\") ? \"Admin\" : this.props.login.userClaims.roles.find((x) => x === \"HouseLegislationAuthor\") ? \"H\" : \"S\"}\n billNumber={this.state.selectedAmendment ? this.state.selectedAmendment.LegislationNumber : ''}\n location={this.props.location.pathname}\n pasteAsText={false}\n setWasEmpty={this.setWasEmpty}\n wasEmpty={this.state.wasEmpty}\n setReplaced={this.setReplaced}\n replaced={this.state.replaced}\n />\n <div className=\"button-bar\">\n <div />\n <div className=\"align-right\">\n <button type=\"button\" className=\"button\" disabled={this.state.isSaving || !this.state.selectedAmendment} onClick={() => this.handleSave(this.state.unpublished ? false : true)}>{this.state.isSaving ? !this.state.unpublished ? \"Republishing...\" : \"Saving...\" : !this.state.unpublished ? \"Republish\" : \"Save\"}</button>\n {this.state.unpublished && <button type=\"button\" className=\"button\" disabled={!this.state.selectedAmendment || this.state.isSaving || this.state.isDirty} onClick={this.togglePreview}>Preview</button>}\n </div>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n );\n }\n }\n}\nexport default connect(\n (state) => {\n const { bills, session, nav, login } = state;\n return {\n bills,\n session,\n nav,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, sessionActionCreators, navActionCreators), dispatch)\n }\n }\n)(AmendmentManagement)","import React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport Popout from '../../../lis-shared/lis-layout/components/lis-popout-component';\n\nclass AdminDashboard extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n showPortal: false\n }\n this.togglePortal = this.togglePortal.bind(this);\n }\n\n\n togglePortal(state) {\n this.setState({\n showPortal: !state\n });\n }\n\n render() {\n return(\n <div>\n <h1>Dashboard</h1>\n <p>This is the user dashboard view.</p>\n <button onClick={() => this.togglePortal(this.state.showPortal)}>Test </button>\n {this.state.showPortal &&\n <Popout togglePortal={this.togglePortal} windowTitle=\"test\">\n <p>Even though I render in a different window, I share state!</p>\n </Popout>\n }\n </div>\n );\n }\n}\n\n\nexport default connect(\n (state) => {\n const { committee } = state;\n return {\n committee\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators), dispatch)\n }\n }\n)(AdminDashboard)","import React, { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\nimport queryString from 'query-string';\nimport moment from 'moment-timezone';\nimport Select from 'react-select';\nimport { voteActionCreators } from '../../../stores/lis-votes-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\n\nconst criteriaTypeWeights = {\n \"Introduced\": 1,\n \"Patron\": 2,\n \"Keyword\": 3,\n \"Committee\": 4,\n \"Status Change\": 5,\n \"Docket/Agenda\": 6,\n \"New Version\": 7,\n \"Impact Statements\": 8,\n}\n\nconst sortLegNumbers = (a, b) => {\n if (a && !b) {\n return 1;\n }\n\n if (!a && b) {\n return -1;\n }\n\n //chamber, type, number\n return a[0].localeCompare(b[0]) || a[1].localeCompare(b[1]) || parseInt(a.substr(2) - b.substr(2));\n}\n\nconst LegEvent = props => {\n const { item, bill } = props;\n const [showLinks, toggleLinks] = useState(false);\n const [isLoading, toggleLoading] = useState(false);\n const [voteLinks, setVoteLinks] = useState('');\n const getVoteLinks = () => {\n if (voteLinks) {\n toggleLinks(!showLinks);\n } else {\n toggleLoading(true);\n props.getVoteLinks(item, res => {\n setVoteLinks(res);\n toggleLoading(false);\n toggleLinks(true);\n })\n }\n }\n const linkStyle = {\n fontSize: '1em',\n margin: '0 5px 0 0'\n };\n return <tr className='parent-tr slidedown-closed bill-details-table-row'>\n <td className=\"left\">{moment(item.EventDate).format('l')}</td>\n <td className=\"left\">{item.ChamberCode === 'H' && 'House'} {item.ChamberCode === \"S\" && \"Senate\"}</td>\n <td className=\"left\">\n {item.Description}\n {voteLinks && showLinks &&\n <div className=\"link-row\">\n {voteLinks.map((link, index) =>\n <div key={index}>\n {link.VoteID ? link.IsPublic ? <Link to={`/vote-details/${bill.LegislationNumber}/${bill.SessionCode}/${link.VoteNumber}`}>Vote</Link> : <span>Vote Detail Pending</span> : ''}\n {link.CommitteeID ? <Link to={`/session-details/${bill.SessionCode}/committee-information/${link.CommitteeNumber}/committee-details`}>{link.ParentCommitteeID ? 'Subcommittee' : 'Committee'}</Link> : ''}\n {link.LegislationNumber && (link.SessionCode || item.SessionCode) ? <Link to={`/bill-details/${link.SessionCode || item.SessionCode}/${link.LegislationNumber}`}>Legislation</Link> : ''}\n </div>\n )}\n </div>\n }\n </td>\n <td className=\"button-container\">\n {item.ReferenceID &&\n <React.Fragment>\n {isLoading ?\n <React.Fragment>\n <label className=\"arrow-down-label\"></label>\n <span className=\"small-spinner\"></span>\n </React.Fragment>\n :\n <React.Fragment>\n <button className={`${showLinks ? \"arrow-up\" : \"arrow-down\"}`} onClick={getVoteLinks}></button>\n </React.Fragment>\n }\n </React.Fragment>\n }\n </td>\n </tr>\n}\n\nconst BillInfo = props => {\n const { reasonGrouping, bill, checked, isAdding, allBillsExpanded } = props;\n const [showInfo, toggleInfo] = useState(false);\n\n useEffect(() => {\n toggleInfo(allBillsExpanded);\n }, [allBillsExpanded])\n\n return (\n <div className=\"flex-row flex-start bill-theme\">\n {!props.selectedCollection ? <div></div> :\n <div className=\"collection-buttons\">\n {collectionBillIndex !== -1 ?\n <button type=\"button\" onClick={deleteBillFromCollection} className='button remove'></button>\n :\n <button type=\"button\" onClick={addBillToCollection} className='button add'></button>\n }\n </div>\n }\n <div className='parent-li se-bill-search-result'>\n <div className=\"small-gap-grid two-col-sidebar-alt\">\n <div className=\"description notification\">\n <input disabled={isAdding} checked={checked || false} onChange={props.handleCheckbox} type=\"checkbox\" />\n <div className=\"docket-agenda-link-container\">\n <Link to={`/bill-details/${bill.SessionCode}/${bill.LegislationNumber}`}>{bill.LegislationNumber}</Link>\n {reasonGrouping?.CriteriaType === \"Docket/Agenda\" && bill.CommitteeNumber && bill.CommitteeNumber.startsWith('H') && <a className=\"docket-agenda-link\" href={`https://virginiageneralassembly.gov/house/agendas/agendaDates.php?id=${bill.CommitteeNumber}&ses=${bill.SessionCode.substr(2)}`}>(Agenda)</a>}\n {reasonGrouping?.CriteriaType === \"Docket/Agenda\" && bill.CommitteeNumber && bill.CommitteeNumber.startsWith('S') && bill.ReferenceID && <Link className=\"docket-agenda-link\" to={`/session-details/${bill.SessionCode}/committee-information/${bill.CommitteeNumber}/dockets/${bill.ReferenceID}`}>(Docket)</Link>}\n </div>\n <h3 className=\"small-text\">{bill.LegislationDescription}</h3>\n </div>\n <div className=\"button-container\">\n <button className={showInfo ? 'arrow-up' : 'arrow-down'} onClick={() => toggleInfo(!showInfo)}>More info</button>\n </div>\n {showInfo &&\n <div>\n {bill.LegislationTextID && reasonGrouping?.CriteriaType === \"Keyword\" ?\n <button\n className=\"button-link\"\n onClick={() => props.pushWithKeywords(bill.SessionCode, bill.LegislationNumber, bill.DocumentCode, bill.WatchListID)}>\n View Keyword Hits for {bill.DocumentCode}</button>\n : null}\n <table className=\"line-table\">\n <tbody>\n {bill.LegislationEvents.map((item, index) =>\n <LegEvent\n key={index}\n item={item}\n bill={bill}\n getVoteLinks={props.getVoteLinks}\n />\n )}\n </tbody>\n </table>\n </div>\n }\n </div>\n <hr className=\"faded-line\" />\n </div>\n </div >\n );\n}\n\nclass NotificationManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: false,\n errorMessage: '',\n notifications: [],\n watchlists: [],\n selectedWatchlists: [],\n checkedBills: [],\n isAdding: false,\n expandLatestHistory: false\n }\n\n this.getWatchlists = this.getWatchlists.bind(this);\n this.getVoteLinks = this.getVoteLinks.bind(this);\n this.handleCheckbox = this.handleCheckbox.bind(this);\n this.selectWatchlist = this.selectWatchlist.bind(this);\n this.addBillsToWatchlist = this.addBillsToWatchlist.bind(this);\n this.pushWithKeywords = this.pushWithKeywords.bind(this);\n this.expandLatestHistory = this.expandLatestHistory.bind(this);\n\n this.stickyHeader = React.createRef();\n this.notificationsRef = React.createRef();\n }\n\n getVoteLinks(item, callback) {\n const params = '?legislationEventID=' + item.LegislationEventID;\n this.props.actions.getVoteLink(params).then(() => {\n let links = [...this.props.votes.voteLinkResponse];\n let linkPromises = [];\n links.forEach(link => {\n if (link.CommitteeID) {\n const cmtePromise = this.props.actions.getCommitteeById(\"?id=\" + link.CommitteeID + \"&sessionCode=\" + vote.SessionCode)\n .then(() => {\n link.CommitteeNumber = this.props.committee.committeeByIdData.CommitteeNumber;\n }).catch((err) => {\n console.error(err);\n // Don't care if it fails. That committee won't be visible\n return Promise.resolve();\n })\n linkPromises.push(cmtePromise);\n }\n // If there are any vote links of type 'Legislation' then the legislation ID needs to be turned into a legislation number to form the link\n if (link.ReferenceType === \"Legislation\") {\n const promise = this.props.actions.getBill(link.ReferenceID)\n .then(() => {\n link.LegislationNumber = this.props.bills.bill.LegislationNumber;\n link.SessionCode = link.SessionCode || vote.SessionCode;\n return Promise.resolve();\n }).catch(err => {\n console.error(err);\n // Don't care if it fails. That legislation won't be visible\n return Promise.resolve();\n });\n linkPromises.push(promise);\n }\n });\n Promise.all(linkPromises)\n .then(() => {\n callback(this.props.votes.voteLinkResponse);\n });\n\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.error(err);\n callback(null);\n });\n }\n\n handleCheckbox(notificationIDs, selectAll) {\n let checkedBills = [...this.state.checkedBills];\n notificationIDs.forEach(notificationID => {\n let checkedBillIdx = checkedBills.findIndex(b => b.NotificationID === notificationID);\n if (checkedBillIdx > -1) {\n checkedBills[checkedBillIdx].checked = selectAll === true || !Boolean(checkedBills[checkedBillIdx].checked);\n } else {\n checkedBills.push({ NotificationID: notificationID, checked: true })\n }\n })\n this.setState({\n checkedBills: checkedBills\n });\n }\n\n selectWatchlist(val) {\n this.setState({\n selectedWatchlists: val\n });\n }\n\n addBillsToWatchlist() {\n this.setState({\n isAdding: true\n });\n let selectedWatchlists = [...this.state.selectedWatchlists];\n selectedWatchlists.forEach(wl => wl.WatchListLegislation = wl.WatchListLegislation || []);\n let billsFound = false;\n let duplicate = false;\n [...this.state.checkedBills].filter(c => c.checked).forEach((c) => {\n const bill = this.state.notifications.flatMap(n => n.Committees).flatMap(c => c.Reasons).flatMap(r => r.Bills).find(b => b.NotificationID === c.NotificationID);\n if (bill) {\n selectedWatchlists.forEach(wl => {\n if (!wl.WatchListLegislation.find(b => b.LegislationID === bill.LegislationID && b.WatchListLegislationID && !b.DeletionDate)) {\n billsFound = true;\n wl.WatchListLegislation.push({\n LegislationID: bill.LegislationID,\n WatchListID: wl.WatchListID\n });\n } else {\n duplicate = true;\n }\n });\n }\n })\n if (!billsFound && !duplicate) {\n this.setState({\n isAdding: false\n });\n return;\n } else if (!billsFound && duplicate) {\n this.props.actions.makeToast([{ message: ([...this.state.checkedBills].filter(c => c.checked).length > 1 ? \"These bills already exist\" : \"This bill already exists\") + \" in \" + (selectedWatchlists.length > 1 ? \"these watchlists\" : \"this watchlist\"), type: \"failure\" }]);\n this.setState({\n isAdding: false\n });\n return;\n }\n\n this.props.actions.saveCollections({ WatchLists: selectedWatchlists })\n .then(() => {\n let selectedWatchlists = [...this.props.collection.collectionSave];\n let watchlists = [...this.state.watchlists];\n selectedWatchlists.forEach(wl => {\n const savedWatchlistIndex = watchlists.findIndex(w => w.WatchListID === wl.WatchListID);\n watchlists[savedWatchlistIndex] = wl;\n wl.WatchListLegislation = wl.WatchListLegislation || [];\n })\n this.setState({\n isAdding: false,\n selectedWatchlists: selectedWatchlists,\n watchlists: watchlists\n });\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isAdding: false\n });\n console.error(err);\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n });\n }\n\n organizeNotifications(notifications) {\n notifications.sort(a => a.CommitteeName === undefined ? -1 : 1);\n notifications.sort((a, b) => a.WatchListID - b.WatchListID || (a.CriteriaType !== b.CriteriaType && criteriaTypeWeights[a.CriteriaType] && criteriaTypeWeights[b.CriteriaType] && criteriaTypeWeights[a.CriteriaType] - criteriaTypeWeights[b.CriteriaType]) || sortLegNumbers(a.LegislationNumber, b.LegislationNumber));\n let organizedNotifications = new Notifications();\n let committeesArr = new Committees();\n let previousNotification = notifications[0];\n notifications.forEach(notification => {\n if (previousNotification.WatchListID !== notification.WatchListID) {\n const newNotificationContainer = new Notification(\n [...committeesArr.NotificationGroupings],\n previousNotification.Name,\n previousNotification.Description,\n previousNotification.WatchListID\n );\n organizedNotifications.notifications.push(newNotificationContainer);\n committeesArr = new Committees();\n const objName = notification.CommitteeName || \"nonCommitteeBills\";\n committeesArr.NotificationGroupings.push(new NotificationGrouping(objName, notification.CommitteeNumber, [new NotificationReason(notification.CriteriaType, notification.NotificationReason, [notification])]));\n } else {\n // Notification items are organized by watchlist but also organized by committee. The object name is the committee name which is used to display to the user what committee the notification comes from\n const objName = notification.CommitteeName || \"nonCommitteeBills\";\n if (!committeesArr.NotificationGroupings.find(cmte => cmte.CommitteeName === objName)) {\n committeesArr.NotificationGroupings.push(new NotificationGrouping(objName, notification.CommitteeNumber, []));\n }\n let reasonObjIdx = committeesArr.NotificationGroupings.find(group => group.CommitteeName === objName).Reasons.findIndex(legListing => legListing.CriteriaType === notification.CriteriaType);\n if (reasonObjIdx < 0) {\n committeesArr.NotificationGroupings.find(cmte => cmte.CommitteeName === objName).Reasons.push(new NotificationReason(notification.CriteriaType, notification.NotificationReason, [notification]));\n } else if (!committeesArr.NotificationGroupings.find(cmte => cmte.CommitteeName === objName).Reasons[reasonObjIdx].Bills.find(b => b.LegislationNumber === notification.LegislationNumber)) { //don't insert duplicate leg numbers\n committeesArr.NotificationGroupings.find(cmte => cmte.CommitteeName === objName).Reasons[reasonObjIdx].Bills.push(notification)\n }\n }\n previousNotification = notification;\n });\n //If the object is not empty then that means not every element in the results have been added to a container\n //So, check to see if the object has keys and if so create another container\n if (committeesArr.NotificationGroupings.length > 0) {\n const newNotificationContainer = new Notification(\n [...committeesArr.NotificationGroupings],\n previousNotification.Name,\n previousNotification.Description,\n previousNotification.WatchListID\n );\n organizedNotifications.notifications.push(newNotificationContainer);\n }\n\n return organizedNotifications.notifications;\n }\n\n pushWithKeywords(sessionCode, legislationNumber, documentCode, watchlistId) {\n const selectedWatchlist = this.state.watchlists.find(w => w.WatchListID === watchlistId);\n if (selectedWatchlist) {\n const keywordsList = selectedWatchlist.NotificationCriterias.filter(c => c.CriteriaType === \"Keyword\");\n // Need to seperate each criteria value into an array of words. That is the purpose of the join followed by the split\n const keywordExpression = keywordsList.map(k => k.CriteriaValue).join(\" \");\n const partsRegex = /(\\().*?(\\)+)|(\").*?(\"+)|(').*?('+)|['a-zA-Z*]*/g;\n const keywordParts = keywordExpression.match(partsRegex);\n let foundAnOperator = false;\n for (const keywordPart of keywordParts) {\n if (keywordPart && (keywordPart.toLowerCase() === \"and\" || keywordPart.toLowerCase() === \"or\")) { foundAnOperator = true; break; }\n }\n\n let sanitizedKeywords = [];\n var chars = { \"(\": \"\", \")\": \"\", '\"': \"\" };\n if (!foundAnOperator) {\n //need to behave like API to keep it consistent:\n //per API, no operators so just clean expression from single quote operators and treat it as single keyword\n let phraseToInsert = keywordExpression.replace(/[()\"]/g, m => chars[m]);\n if (phraseToInsert.startsWith(\"'\") && phraseToInsert.endsWith(\"'\")) { phraseToInsert = phraseToInsert.substr(1, phraseToInsert.length - 2) }\n if (phraseToInsert) { sanitizedKeywords.push(phraseToInsert); }\n } else {\n for (const keywordPart of keywordParts) {\n if (keywordPart && keywordPart.toLowerCase() != \"and\" && keywordPart.toLowerCase() != \"or\") {\n let wordToInsert = keywordPart.replace(/[()\"]/g, m => chars[m]);\n if (wordToInsert.startsWith(\"'\") && wordToInsert.endsWith(\"'\")) { wordToInsert = wordToInsert.substr(1, wordToInsert.length - 2) }\n if (wordToInsert) { sanitizedKeywords.push(wordToInsert); }\n }\n }\n }\n window.open(`/bill-details/${sessionCode}/${legislationNumber}/text/${documentCode}?keywords=${encodeURIComponent(sanitizedKeywords.join(\" \"))}`, '_blank');\n }\n }\n\n componentDidMount() {\n const parsed = queryString.parse(this.props.location.search, { decode: true });\n if (parsed.date) {\n this.props.actions.getNotifications(`?notificationDate=${encodeURIComponent(parsed.date)}`)\n .then(() => {\n const organizedNotifications = this.organizeNotifications(this.props.collection.notifications)\n this.setState({\n notifications: organizedNotifications,\n isLoaded: true\n }, () => {\n if (this.stickyHeader.current && this.notificationsRef.current) {\n const scrollTop = this.notificationsRef.current.getBoundingClientRect().top;\n const self = this;\n window.onscroll = function () {\n if (window.scrollY >= scrollTop) {\n self.stickyHeader.current?.classList?.add('background-color');\n } else {\n self.stickyHeader.current?.classList?.remove('background-color');\n }\n }\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n errorMessage: err.toString(),\n isLoaded: true\n });\n });\n // Get the user's watchlists\n if (!this.props.session.sessionList || !this.props.session.sessionList.length) {\n this.props.actions.getSessionList()\n .then(() => {\n this.setState({\n sessionOptions: this.props.session.sessionList\n }, () => {\n this.getWatchlists();\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n } else {\n this.setState({\n sessionOptions: this.props.session.sessionList\n }, () => {\n this.getWatchlists();\n })\n }\n } else {\n this.setState({ errorMessage: 'No date has been provided.', isLoaded: true })\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.nav.session != this.props.nav.session && this.state.sessionOptions) {\n this.getWatchlists();\n }\n }\n\n getWatchlists() {\n const selectedSession = this.state.sessionOptions.find(s => s.SessionCode === this.props.nav.session);\n if (selectedSession) {\n this.props.actions.getCollections(\"?SessionID=\" + selectedSession.SessionID)\n .then(() => {\n this.setState({\n watchlists: this.props.collection.collections\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n });\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n expandLatestHistory() {\n this.setState({ expandLatestHistory: !this.state.expandLatestHistory })\n }\n\n render() {\n const { isLoaded, errorMessage, notifications, watchlists, selectedWatchlists, checkedBills, isAdding } = this.state;\n return (<div>\n {!isLoaded && !errorMessage &&\n <div className=\"center-spinner spinner\"></div>\n }\n {isLoaded &&\n <div>\n <h2>{Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) || Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\")) ? 'Watchlists - Notifications' : 'Watchlist - Notification'}</h2>\n {\n errorMessage ?\n <h4>{errorMessage}</h4>\n :\n !notifications.length ?\n <h4>You do not have any notifications for the provided date.</h4>\n :\n <>\n <div className=\"sticky\" ref={this.stickyHeader}>\n <div className=\"inner-grid two align-center padding\">\n <div>\n <button onClick={this.expandLatestHistory} type=\"button\" className=\"button mobile-w-100 mobile-mb-10\">{this.state.expandLatestHistory ? 'Hide' : 'Show'} Latest History</button>\n </div>\n <div className=\"inner-grid three-and-one\">\n <Select\n options={watchlists}\n value={selectedWatchlists}\n onChange={this.selectWatchlist}\n isClearable\n isMulti\n getOptionLabel={opt => opt.Name}\n getOptionValue={opt => opt.WatchListID}\n />\n <button onClick={this.addBillsToWatchlist} disabled={!selectedWatchlists || !selectedWatchlists.length || checkedBills.every(b => !b) || isAdding} type=\"button\" className=\"button\">{isAdding ? \"Adding\" : \"Add\"} Bills To Watchlist(s)</button>\n </div>\n </div>\n </div>\n <div ref={this.notificationsRef}>\n {notifications.map((notification, notificationIndex) =>\n <div key={notificationIndex}>\n {notification.Name &&\n <Link className=\"notification-watchlist-name\" to={`/bill-search?collection=${notification.WatchListID}`}><h2>{notification.Name}{notification.Description ? <small> - {notification.Description}</small> : ''}</h2></Link>\n }\n <ul className=\"slidedown-list\">\n {notification.Committees.map((committeeGrouping, committeeGroupingIndex) =>\n <React.Fragment key={committeeGroupingIndex}>\n {committeeGrouping.CommitteeName !== \"nonCommitteeBills\" &&\n <h3>{committeeGrouping.CommitteeNumber ? '(' + committeeGrouping.CommitteeNumber[0] + ') ' : ''}{committeeGrouping.CommitteeName}</h3>\n }\n <div style={committeeGrouping.CommitteeName != \"nonCommitteeBills\" ? { paddingLeft: '1em' } : {}}>\n {committeeGrouping?.Reasons?.map((reasonGrouping, reasonGroupingIndex) => {\n const selectAll = !reasonGrouping.Bills.map(b => b.NotificationID).find(n => !checkedBills.filter(c => c.checked).map(b => b.NotificationID).includes(n));\n return (\n <React.Fragment key={reasonGroupingIndex}>\n {reasonGrouping.Reason &&\n <h4>{reasonGrouping.Reason}</h4>\n }\n <div className=\"small-gap-grid two-col-sidebar-alt\" style={{ marginBottom: '5px' }}>\n <div className=\"description notification\" style={{ alignItems: 'center' }}>\n <input disabled={isAdding} checked={selectAll} onChange={() => this.handleCheckbox(reasonGrouping.Bills.map(b => b.NotificationID), !selectAll)} type=\"checkbox\" />\n <span style={{ fontSize: '0.75em' }}>Select all</span>\n </div>\n </div>\n {reasonGrouping.Bills.map(((bill, billIndex) =>\n <BillInfo\n reasonGrouping={reasonGrouping}\n key={billIndex}\n bill={bill}\n checked={checkedBills.find(b => b.NotificationID === bill.NotificationID) && checkedBills.find(b => b.NotificationID === bill.NotificationID).checked}\n isAdding={isAdding}\n handleCheckbox={() => this.handleCheckbox([bill.NotificationID])}\n getVoteLinks={this.getVoteLinks}\n pushWithKeywords={this.pushWithKeywords}\n allBillsExpanded={this.state.expandLatestHistory}\n />\n ))}\n </React.Fragment>\n )\n }\n )}\n </div>\n </React.Fragment>\n )}\n </ul>\n </div>\n )}\n </div>\n </>\n }\n </div>\n }\n </div>)\n }\n}\n\nclass Notifications {\n constructor(notifications) {\n this.notifications = notifications || [];\n }\n\n notifications;\n}\n\nclass Notification {\n constructor(committees, name, description, watchlistID) {\n this.Committees = committees;\n this.Name = name;\n this.Description = description;\n this.WatchListID = watchlistID;\n }\n\n Committees;\n Name;\n Description;\n WatchListID;\n}\n\nclass Committees {\n constructor(notificationGroupings) {\n this.NotificationGroupings = notificationGroupings || [];\n }\n\n NotificationGroupings;\n}\n\nclass NotificationGrouping {\n constructor(committee, committeeNumber, reasons) {\n this.CommitteeName = committee;\n this.CommitteeNumber = committeeNumber;\n this.Reasons = reasons;\n }\n\n CommitteeName;\n CommitteeNumber;\n Reasons;\n}\n\nclass NotificationReason {\n constructor(criteriaType, reason, bills) {\n this.CriteriaType = criteriaType;\n this.Reason = reason;\n this.Bills = bills;\n }\n\n CriteriaType;\n Reason;\n Bills;\n}\n\nexport default connect(\n (state) => {\n const { collection, bills, votes, nav, session, login } = state;\n return {\n collection,\n bills,\n votes,\n nav,\n session,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, collectionActionCreators, voteActionCreators, navActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(NotificationManagement)","import { partnerRequest, publicRequest } from \"../services/request.service\";\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst docListSuccess = 'DOC_LIST_SUCCESS';\nconst docListFailure = 'DOC_LIST_FAILURE';\n\nconst docSuccess = 'DOC_SUCCESS';\nconst docFailure = 'DOC_FAILURE';\n\nconst keyRegistrationSuccess = \"KEY_REGISTRATION_SUCCESS\";\nconst keyRegistrationFailure = \"KEY_REGISTRATION_FAILURE\";\n\nconst confirmKeyRegistrationSuccess = \"CONFIRM_KEY_REGISTRATION_SUCCESS\";\nconst confirmKeyRegistrationFailure = \"CONFIRM_KEY_REGISTRATION_FAILURE\";\n\nconst savePartnerSuccess = \"SAVE_PARTNER_SUCCESS\";\nconst savePartnerFailure = \"SAVE_PARTNER_FAILURE\";\n\nconst partnerListSuccess = 'PARTNER_LIST_SUCCESS';\nconst partnerListFailure = 'PARTNER_LIST_FAILURE';\n\nconst getPartnerSuccess = 'GET_PARTNER_SUCCESS';\nconst getPartnerFailure = 'GET_PARTNER_FAILURE';\n\nconst getPartnerKeySuccess = 'GET_PARTNER_KEY_SUCCESS';\nconst getPartnerKeyFailure = 'GET_PARTNER_KEY_FAILURE';\n\nconst initialState = {\n docList: [],\n doc: '',\n docListError: '',\n docError: '',\n savePartnerError: '',\n keyRegistrationError: '',\n partnerListError: '',\n partnerError: '',\n partnerKeyError: ''\n};\n\nexport const developersActionCreators = {\n\n receiveDocList: (content) => ({\n type: docListSuccess,\n docList: content\n }),\n\n docListError: (message) => ({\n type: docListFailure,\n docListError: message\n }),\n\n getDocList: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n };\n\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/ReportFileGeneration/api/GetApiListAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.docListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receiveDocList(result[1].ApiDocumentations))\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.docListError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveDoc: (content) => ({\n type: docSuccess,\n doc: content\n }),\n\n docError: (message) => ({\n type: docFailure,\n docError: message\n }),\n\n getDoc: (params, partner) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n };\n\n return partner ? partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/ReportFileGeneration/api/getpartnerapidocumentationasync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.docError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receiveDoc(result[1].ApiDocumentations[0].Documentation))\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.docError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n : publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/ReportFileGeneration/api/getapidocumentationasync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.docError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receiveDoc(result[1].ApiDocumentations[0].Documentation))\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.docError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveKeyRegistration: (content) => ({\n type: keyRegistrationSuccess\n }),\n\n keyRegistrationError: (message) => ({\n type: keyRegistrationFailure,\n keyRegistrationError: message\n }),\n\n submitKeyRegistration: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/PartnerAuthentication/api/RegisterPartnerAsync', 'POST', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.keyRegistrationError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receiveKeyRegistration(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.keyRegistrationError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveConfirmKeyRegistration: (content) => ({\n type: confirmKeyRegistrationSuccess\n }),\n\n confirmKeyRegistrationError: (message) => ({\n type: confirmKeyRegistrationFailure,\n confirmKeyRegistrationError: message\n }),\n\n submitConfirmKeyRegistration: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/PartnerAuthentication/api/CompletePartnerRegistrationAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.confirmKeyRegistrationError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receiveConfirmKeyRegistration(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.confirmKeyRegistrationError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveSavePartner: (content) => ({\n type: savePartnerSuccess\n }),\n\n savePartnerError: (message) => ({\n type: savePartnerFailure,\n savePartnerError: message\n }),\n\n savePartner: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/PartnerAuthentication/api/SavePartnerAsync', 'POST', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.savePartnerError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receiveSavePartner(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.savePartnerError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receivePartnerList: (content) => ({\n type: partnerListSuccess,\n partnerList: content\n }),\n\n partnerListError: (message) => ({\n type: partnerListFailure,\n partnerListError: message\n }),\n\n getPartnerList: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/PartnerAuthentication/api/GetPartnersAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.partnerListError(result));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receivePartnerList(result[1].PartnerList));\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.receivePartnerList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePartner: (content) => ({\n type: getPartnerSuccess,\n partner: content\n }),\n\n getPartnerError: (message) => ({\n type: getPartnerFailure,\n partnerError: message\n }),\n\n getPartner: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/PartnerAuthentication/api/GetPartnerAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.getPartnerError(result));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receivePartner(result[1].PartnerList[0]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.receivePartner([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receivePartnerKey: (content) => ({\n type: getPartnerKeySuccess,\n partnerKey: content\n }),\n\n getPartnerKeyError: (message) => ({\n type: getPartnerKeyFailure,\n partnerKeyError: message\n }),\n\n getPartnerKey: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_USER_API_URL) + '/PartnerAuthentication/api/CheckForPartnerKeyAsync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(developersActionCreators.getPartnerKeyError(result));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(developersActionCreators.receivePartnerKey(result[1]));\n } else if (result[0] === NO_CONTENT) {\n dispatch(developersActionCreators.receivePartnerKey([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n}\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n switch (action.type) {\n case docListSuccess:\n return Object.assign({}, state, {\n docList: action.docList,\n docListError: ''\n })\n case docListFailure:\n return Object.assign({}, state, {\n docListError: action.docListError\n })\n case docSuccess:\n return Object.assign({}, state, {\n doc: action.doc,\n docError: ''\n })\n case docFailure:\n return Object.assign({}, state, {\n docError: action.docError\n })\n case keyRegistrationSuccess:\n return Object.assign({}, state, {\n keyRegistrationError: ''\n })\n case keyRegistrationFailure:\n return Object.assign({}, state, {\n keyRegistrationError: action.keyRegistrationError\n })\n case confirmKeyRegistrationSuccess:\n return Object.assign({}, state, {\n confirmKeyRegistrationError: ''\n })\n case confirmKeyRegistrationFailure:\n return Object.assign({}, state, {\n confirmKeyRegistrationError: action.confirmKeyRegistrationError\n })\n case savePartnerSuccess:\n return Object.assign({}, state, {\n savePartnerError: ''\n })\n case savePartnerFailure:\n return Object.assign({}, state, {\n savePartnerError: action.savePartnerError\n })\n case partnerListSuccess:\n return Object.assign({}, state, {\n partnerList: action.partnerList,\n partnerListError: ''\n })\n case partnerListFailure:\n return Object.assign({}, state, {\n partnerListError: action.partnerListError\n })\n case getPartnerSuccess:\n return Object.assign({}, state, {\n partner: action.partner,\n partnerError: ''\n })\n case getPartnerFailure:\n return Object.assign({}, state, {\n partnerError: action.partnerError\n })\n case getPartnerKeySuccess:\n return Object.assign({}, state, {\n partnerKey: action.partnerKey,\n partnerKeyError: ''\n })\n case getPartnerFailure:\n return Object.assign({}, state, {\n partnerKeyError: action.partnerKeyError\n })\n default:\n return state\n }\n};","import React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { developersActionCreators } from '../../../stores/lis-developers-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { Link } from 'react-router-dom';\nimport ReactTable from 'react-table';\n\nclass PartnerGridComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: false,\n partnerList: [],\n filtered: [],\n nameSearch: \"\",\n orgSearch: \"\"\n }\n\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.onFilteredChange = this.onFilteredChange.bind(this);\n }\n\n componentDidMount() {\n this.props.actions.getPartnerList()\n .then(() => {\n this.setState({\n isLoaded: true,\n partnerList: this.props.developers.partnerList\n })\n })\n }\n\n handleSearchChange(state, value) {\n this.setState({\n [state]: value\n }, () => {\n let filtered = [...this.state.filtered];\n if (filtered.find(x => x.id === state)) {\n filtered.splice(filtered.indexOf(x => x.id === state), 1, { id: state, value: value })\n } else {\n filtered.push({ id: state, value: value })\n }\n this.onFilteredChange(filtered)\n })\n }\n\n onFilteredChange(filtered) {\n this.setState({ filtered });\n }\n\n render() {\n const { partnerList, nameSearch, orgSearch } = this.state;\n\n return (\n <div>\n <h1>Partner Management</h1>\n <form className='dlas-forms'>\n <div className=\"inner-grid five\">\n <div>\n <label>Search by Name: </label>\n <input\n type=\"text\"\n value={nameSearch}\n onChange={(e) => this.handleSearchChange(\"nameSearch\", e.target.value)}\n />\n </div>\n <div>\n <label>Search by Organization: </label>\n <input\n type=\"text\"\n value={orgSearch}\n onChange={(e) => this.handleSearchChange(\"orgSearch\", e.target.value)}\n />\n </div>\n </div>\n </form>\n {<ReactTable\n loading={!this.state.isLoaded}\n data={partnerList}\n filtered={this.state.filtered}\n onFilteredChange={this.onFilteredChange.bind(this)}\n columns={[\n {\n Header: \"Partner Name\",\n accessor: \"ContactName\",\n id: \"nameSearch\",\n width: 250,\n filterMethod: (filter, row, column) => {\n // convert to lowercase before comparing\n let partnerName = row._original.ContactName.toLowerCase();\n let nameFilter = this.state.nameSearch.toLowerCase();\n if (partnerName.includes(nameFilter)) {\n return true\n }\n }\n },\n {\n Header: \"Partner Email\",\n accessor: \"EmailAddress\",\n width: 250\n },\n {\n Header: \"Partner Organization\",\n accessor: \"OrganizationName\",\n id: \"orgSearch\",\n filterMethod: (filter, row, column) => {\n // convert to lowercase before comparing\n let partnerOrg = row._original.OrganizationName.toLowerCase();\n let orgFilter = this.state.orgSearch.toLowerCase();\n if (partnerOrg.includes(orgFilter)) {\n return true\n }\n }\n },\n {\n Header: \"Is Active\",\n accessor: \"IsActive\",\n width: 80,\n Cell: row => (\n row.original.IsActive ? \"True\" : \"False\"\n )\n },\n {\n Header: \"Edit\",\n accessor: \"edit\",\n width: 40,\n Cell: row => {\n return (\n <Link to={`/partner-management/edit-partner/${row.original.PartnerID}`} className=\"button edit\">Edit</Link>\n )\n }\n },\n {\n Header: \"All\",\n id: 'all',\n className: \"all-column\",\n headerClassName: \"all-header\",\n width: 0,\n resizable: false,\n sortable: false,\n Filter: () => { },\n getProps: () => {\n return {\n style: { padding: \"0px\" }\n }\n },\n filterMethod: (filter, row, column) => {\n // convert to lowercase before comparing\n let partnerName = row.ContactName.toLowerCase();\n let partnerOrg = row.OrganizationName.toLowerCase();\n let nameFilter = this.state.nameSearch.toLowerCase();\n let orgFilter = this.state.orgSearch.toLowerCase();\n console.log(partnerName, partnerOrg, nameFilter, orgFilter)\n if (partnerName.includes(nameFilter) || partnerOrg.includes(orgFilter)) {\n return true\n }\n },\n }\n ]}\n defaultPageSize={10}\n className=\"-striped -highlight\"\n />}\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, developers } = state;\n return {\n nav,\n developers\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators, navActionCreators), dispatch)\n }\n }\n)(PartnerGridComponent)","import React from \"react\";\nimport { connect } from 'react-redux';\nimport { withRouter } from \"react-router\";\nimport { bindActionCreators } from 'redux';\nimport { developersActionCreators } from \"../../../stores/lis-developers-store\";\nimport { navActionCreators } from \"../../../stores/lis-nav-store\";\n\nconst emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst phoneRegex = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/im;\n\nclass PartnerForm extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n isSaving: false,\n isLoading: true,\n partner: {},\n initIsActive: false\n }\n\n this.checkEmail = this.checkEmail.bind(this);\n this.checkPhone = this.checkPhone.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.save = this.save.bind(this);\n }\n\n componentDidMount() {\n //Fetch the partner by the ID\n this.props.actions.getPartner(\"?partnerID=\" + this.props.match.params.partnerId)\n .then(() => {\n this.setState({\n partner: this.props.developers.partner,\n initIsActive: this.props.developers.partner.IsActive,\n isLoading: false\n })\n })\n }\n\n checkEmail() {\n const email = this.state.partner.EmailAddress.toLowerCase();\n\n if (!emailRegex.test(email)) {\n this.setState({\n emailError: 'Invalid email address'\n }, () => {\n this.props.actions.makeToast([{ message: this.state.emailError, type: \"failure\" }])\n });\n return true;\n }\n this.setState({\n emailError: ''\n });\n }\n\n checkPhone() {\n if (!phoneRegex.test(this.state.partner.PhoneNumber)) {\n this.setState({\n phoneError: 'Invalid phone number'\n }, () => {\n this.props.actions.makeToast([{ message: this.state.phoneError, type: \"failure\" }])\n });\n return true;\n }\n this.setState({\n phoneError: ''\n });\n }\n\n handleChange(state, value) {\n let partner = { ...this.state.partner };\n partner[state] = value;\n this.setState({\n partner\n });\n }\n\n save() {\n this.setState({\n isSaving: true\n }, () => {\n let error = false\n error = this.checkEmail();\n error = this.checkPhone();\n\n if (!error) {\n let params = \"\";\n\n params = params + \"?PartnerID=\" + this.state.partner.PartnerID\n params = params + \"&contactName=\" + this.state.partner.ContactName;\n params = params + \"&organizationName=\" + this.state.partner.OrganizationName;\n params = params + \"&phone=\" + this.state.partner.PhoneNumber;\n params = params + \"&email=\" + this.state.partner.EmailAddress;\n params = params + \"&identityId=\" + this.state.partner.IdentityID;\n params = params + \"&isActive=\" + this.state.partner.IsActive;\n params = params + \"&isActiveChanged=\" + (this.state.partner.IsActive !== this.state.initIsActive ? \"true\" : \"false\");\n\n this.props.actions.savePartner(params)\n .then(() => {\n this.setState({\n isSaving: false\n }, () => {\n this.props.actions.makeToast([{ message: \"Partner Saved\", type: \"success\" }])\n this.props.history.push(\"/partner-management\")\n })\n })\n .catch((err) => {\n this.props.actions.makeToast([{ message: this.props.developers.savePartnerError, type: \"failure\" }])\n })\n }\n })\n }\n\n render() {\n const { partner, isSaving, isLoading } = this.state;\n\n return (\n <div>\n <form className=\"dlas-forms key-registration-form\">\n <h3>Manage Partner</h3>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"name\">Name*</label>\n <input\n id=\"name\"\n type=\"text\"\n value={partner.ContactName}\n onChange={(e) => this.handleChange(\"ContactName\", e.target.value)}\n disabled={isLoading || isSaving}\n />\n </div>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"organization\">Organization</label>\n <input\n id=\"organization\"\n type=\"text\"\n value={partner.OrganizationName}\n onChange={(e) => this.handleChange(\"OrganizationName\", e.target.value)}\n disabled={isLoading || isSaving}\n />\n </div>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"email\">Email*</label>\n <input\n id=\"email\"\n type=\"text\"\n value={partner.EmailAddress}\n onChange={(e) => this.handleChange(\"EmailAddress\", e.target.value)}\n disabled={isLoading || isSaving}\n />\n </div>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"phone\">Phone Number*</label>\n <input\n id=\"phone\"\n type=\"text\"\n value={partner.PhoneNumber}\n onChange={(e) => this.handleChange(\"PhoneNumber\", e.target.value)}\n disabled={isLoading || isSaving}\n />\n </div>\n <div className=\"inner-grid reverse-short-one-three\">\n <div className=\"checkbox flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleChange(\"IsActive\", !partner.IsActive)}>\n <input id=\"is-active-button\" checked={partner.IsActive} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"is-active-button\" className=\"checkbox-label no-background\">Is Active?</label>\n </div>\n <div className=\"align-right\">\n <button onClick={() => this.save()} disabled={isSaving || isLoading || (!partner.ContactName || !partner.EmailAddress || !partner.PhoneNumber)} type=\"button\" className=\"button\">Submit</button>\n </div>\n </div>\n </form>\n </div>\n )\n }\n}\n\nconst PartnerFormWrapper = connect(\n (state) => {\n const { nav, developers } = state;\n return {\n nav,\n developers\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators, navActionCreators), dispatch)\n }\n }\n)(PartnerForm)\n\nexport default withRouter(PartnerFormWrapper)","import React from 'react';\nimport { Route } from 'react-router';\nimport PartnerManagementGrid from './lis-partner-grid';\nimport PartnerManagementForm from './lis-partner-form';\n\nclass PartnerManagement extends React.Component {\n\n render() {\n return (\n <div>\n <Route exact path={this.props.match.path} component={PartnerManagementGrid} />\n <Route exact path={`${this.props.match.path}/edit-partner/:partnerId`} component={PartnerManagementForm} />\n </div>\n )\n }\n}\n\nexport default PartnerManagement;","import React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { userActionCreators } from '../../../stores/lis-user-store';\n\nclass UserManagement extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n newUser: false,\n existingUser: false,\n person: {\n FirstName: \"\",\n LastName: \"\",\n EmailAddress: \"\"\n },\n searching: false,\n saving: false\n }\n\n this.cancel = this.cancel.bind(this);\n this.create = this.create.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.onSubmit = this.onSubmit.bind(this);\n this.save = this.save.bind(this);\n }\n\n cancel() {\n this.setState({\n newUser: false,\n existingUser: false,\n person: {\n EmailAddress: \"\",\n FirstName: \"\",\n LastName: \"\"\n }\n })\n }\n\n create() {\n this.setState({\n saving: true\n }, () => {\n let person = { ...this.state.person }\n\n person.Name = this.state.person.FirstName.trim() + \" \" + this.state.person.LastName.trim();\n delete person.FirstName;\n delete person.LastName;\n\n this.props.actions.createNewUser(person)\n .then(() => {\n this.props.actions.getPerson(this.props.users.newUserCreate)\n .then(() => {\n let person = { ...this.props.users.person };\n if (!person.FirstName && !person.LastName) {\n let splitName = person.FullName.split(\" \");\n person.FirstName = splitName[0];\n person.LastName = splitName[1];\n }\n this.setState({\n person: person,\n newUser: false,\n existingUser: true,\n saving: false\n }, () => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n })\n })\n })\n })\n }\n\n handleInputChange(e, state) {\n let person = { ...this.state.person };\n person[state] = e.target.value;\n this.setState({\n person\n })\n }\n\n handleSubmit() {\n this.setState({\n searching: true\n }, () => {\n this.props.actions.getUserByEmail(\"?emailAddress=\" + this.state.person.EmailAddress.trim())\n .then(() => {\n if (this.props.users.userByEmail != \"\") {\n this.props.actions.getPerson(this.props.users.userByEmail.IdentityID)\n .then(() => {\n let person = { ...this.props.users.person };\n if (!person.FirstName && !person.LastName) {\n let splitName = person.FullName.split(\" \");\n person.FirstName = splitName[0];\n person.LastName = splitName[1];\n }\n this.setState({\n existingUser: true,\n newUser: false,\n person: person,\n searching: false\n })\n })\n } else {\n this.setState({\n newUser: true,\n existingUser: false,\n searching: false\n })\n }\n })\n })\n }\n\n onSubmit(e) {\n e.preventDefault();\n }\n\n save() {\n this.setState({\n saving: true\n }, () => {\n let person = { ...this.state.person };\n person.FullName = (person.FirstName || \"\") + \" \" + (person.LastName || \"\");\n this.props.actions.savePerson(this.state.person)\n .then(() => {\n this.props.actions.getPerson(this.state.person.IdentityID)\n .then(() => {\n let person = { ...this.props.users.person };\n this.setState({\n person: person,\n saving: false\n }, () => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n })\n })\n })\n })\n }\n\n render() {\n return (\n <div>\n <h2>User Management</h2>\n <form className=\"dlas-forms\" onSubmit={this.onSubmit}>\n {!this.state.existingUser &&\n <React.Fragment>\n <label>Search for a user by email address</label>\n <div className=\"inner-grid three-one-and-two\">\n <input onChange={(e) => this.handleInputChange(e, \"EmailAddress\")} value={this.state.person.EmailAddress} />\n <button disabled={this.state.searching} className=\"button primary\" type=\"submit\" onClick={() => this.handleSubmit()}>{this.state.searching ? \"Searching...\" : \"Search\"}</button>\n </div>\n </React.Fragment>\n }\n {this.state.newUser &&\n <React.Fragment>\n <p>User not found. You may either search for a different email address, or enter a first name and last name then click create user to create a new user account for the provided email address.</p>\n <div className=\"inner-grid six\">\n <input\n placeholder=\"First Name\"\n onChange={(e) => this.handleInputChange(e, \"FirstName\")}\n value={this.state.person.FirstName}\n />\n <input\n placeholder=\"Last Name\"\n onChange={(e) => this.handleInputChange(e, \"LastName\")}\n value={this.state.person.LastName}\n />\n <button disabled={this.state.saving} className=\"button primary\" type=\"button\" onClick={() => this.create()}>{this.state.saving ? \"Saving...\" : \"Create User\"}</button>\n </div>\n </React.Fragment>\n }\n {this.state.existingUser &&\n <React.Fragment>\n <div className=\"multi-row sixth-even no-margin\">\n <div>\n <label>Prefix</label>\n <input type=\"text\"\n placeholder=\"Prefix\"\n value={this.state.person.Prefix}\n onChange={(e) => this.handleInputChange(e, 'Prefix')}\n />\n </div>\n <div>\n <label>First Name</label>\n <input type=\"text\"\n placeholder=\"First Name\"\n value={this.state.person.FirstName}\n onChange={(e) => this.handleInputChange(e, 'FirstName')}\n />\n </div>\n <div>\n <label>Middle Name</label>\n <input type=\"text\"\n placeholder=\"Middle Name\"\n value={this.state.person.MiddleName}\n onChange={(e) => this.handleInputChange(e, 'MiddleName')}\n />\n </div>\n <div>\n <label>Nickname</label>\n <input type=\"text\"\n placeholder=\"Nickname\"\n value={this.state.person.AlternateName}\n onChange={(e) => this.handleInputChange(e, 'AlternateName')}\n />\n </div>\n <div>\n <label>Last Name</label>\n <input type=\"text\"\n placeholder=\"Last Name\"\n value={this.state.person.LastName}\n onChange={(e) => this.handleInputChange(e, 'LastName')}\n />\n </div>\n <div>\n <label>Suffix</label>\n <input type=\"text\"\n placeholder=\"Suffix\"\n value={this.state.person.Suffix}\n onChange={(e) => this.handleInputChange(e.target.value, 'Suffix')}\n />\n </div>\n </div>\n <button className=\"button secondary float-right\" type=\"button\" onClick={() => this.cancel()}>Cancel</button>\n <button disabled={this.state.saving} style={{ marginRight: \"10px\" }} className=\"button primary float-right\" type=\"button\" onClick={() => this.save()}>{this.state.saving ? \"Saving...\" : \"Save\"}</button>\n </React.Fragment>\n }\n </form>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, users } = state;\n return {\n nav,\n users\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, userActionCreators), dispatch)\n }\n }\n)(UserManagement)","import React from 'react';\nimport Select from 'react-select';\nimport DatePicker from 'react-datepicker';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport moment from 'moment-timezone';\n\nclass Search extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n search: '',\n selectedMember: '',\n selectedSubject: '',\n selectedDate: null\n };\n this.handleMemberDropdownChange = this.handleMemberDropdownChange.bind(this);\n this.handleSubjectDropdownChange = this.handleSubjectDropdownChange.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n }\n\n handleMemberDropdownChange(val) {\n this.setState({\n selectedMember: val\n }, () => {\n //The next step is done after the state change to make sure the user sees what member was selected before going to the advanced search page\n let param = {\n selectedPatron: this.state.selectedMember.MemberID,\n selectedSession: this.props.sessionList.find(s => s.SessionCode === this.props.session),\n chamberCode: this.state.selectedMember.ChamberCode,\n selectedPatronType: [1]\n }\n\n const link = window.btoa(JSON.stringify(param));\n this.props.history.push('/bill-search?q=' + link);\n\n });\n }\n\n handleSubjectDropdownChange(val) {\n this.setState({\n selectedSubject: val\n }, () => {\n //The next step is done after the state change to make sure the user sees what member was selected before going to the advanced search page\n const param = {\n selectedSubject: this.state.selectedSubject.SubjectIndexID,\n selectedSession: this.props.sessionList.find(s => s.SessionCode === this.props.session),\n }\n const link = window.btoa(JSON.stringify(param));\n this.props.history.push('/bill-search?q=' + link);\n });\n }\n\n handleDateChange(val) {\n this.setState({\n selectedDate: val\n }, () => {\n const introDate = this.state.selectedDate.clone();\n introDate.hour(0);\n const param = {\n introductionDate: introDate\n };\n const link = window.btoa(JSON.stringify(param));\n this.props.history.push('/bill-search?q=' + link);\n });\n }\n\n render() {\n const customStyles = {\n container: base => ({\n ...base,\n lineHeight: 'normal',\n }),\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n dropdownIndicator: base => ({\n ...base,\n padding: '0px 8px'\n }),\n indicatorSeparator: (base) => ({\n ...base,\n display: \"none\"\n })\n };\n const memberList = [...this.props.memberList]\n memberList.forEach((member) => {\n member.label = \"(\" + member.ChamberCode + \") \" + member.ListDisplayName;\n member.value = member.MemberID;\n });\n let datesList = [];\n this.props.datesList.forEach(date => datesList.push(moment(date.IntroductionDate)));\n datesList.push(moment());\n const openToDate = datesList[datesList.length - 1];\n return (\n <div className=\"dlas-forms home-search-section\">\n <br />\n <div id=\"search-selectors\">\n <div className=\"selector\">\n <div className=\"subject\">\n <label htmlFor=\"bills-by-subject\" className=\"search-option-label\">Bills by Subject</label>\n </div>\n <div>\n <Select\n id=\"bills-by-subject\"\n styles={customStyles}\n isDisabled={!this.props.isLoaded}\n options={this.props.subjectList}\n value={this.state.selectedSubject}\n onChange={this.handleSubjectDropdownChange}\n />\n </div>\n </div>\n <div className=\"selector\">\n <div className=\"member\">\n <label htmlFor=\"bills-by-member\" className=\"search-option-label\">Bills by Member</label>\n </div>\n <div>\n <Select\n id=\"bills-by-member\"\n styles={customStyles}\n isDisabled={!this.props.isLoaded}\n options={memberList}\n onChange={this.handleMemberDropdownChange}\n value={this.state.selectedMember}\n />\n </div>\n </div>\n <div className=\"selector\">\n <div className=\"introduced\">\n <label htmlFor=\"bills-by-date\" className=\"search-option-label\">Bills Introduced by Day</label>\n </div>\n <div>\n <DatePicker\n id=\"bills-by-date\"\n disabled={!this.props.isLoaded || !openToDate}\n selected={this.state.selectedDate}\n onChange={this.handleDateChange}\n includeDates={datesList}\n openToDate={openToDate}\n />\n </div>\n </div>\n </div>\n <hr />\n </div>\n\n )\n }\n}\n\nexport default Search","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport '../../../stylesheets/lis-public-view/public-view.css';\n\nclass ResourcesComponent extends React.Component {\n constructor(props) {\n super(props)\n\n }\n\n render() {\n const { session, isAuthenticated } = this.props;\n\n return (\n <div>\n <h3 className=\"homepage-header\">Bills & Resolutions</h3>\n <hr />\n {!this.props.isLoaded ?\n <div className=\"center-spinner spinner small-height\" />\n :\n <div className=\"homepage-links\">\n <div className=\"homepage-content-group\">\n <span>{session.selectedSession.SessionYear + \" Session: \"}</span>\n <Link to=\"/bill-search\">Browse Bills by Category</Link>\n </div>\n <div className=\"homepage-content-group\">\n <span>Budget Bill: </span>\n <a href={\"http://budget.lis.virginia.gov/\"}>State Budget</a>\n </div>\n <div className=\"homepage-content-group\">\n <span>Bill Indexes: </span>\n <a href={\"https://index.lis.virginia.gov?ses=\" + session.selectedSession.SessionCode}>Cumulative Index</a>\n </div>\n <div style={{ marginTop: \"8px\", marginBottom: \"4px\" }}>\n <Link to={isAuthenticated ? \"/bill-search\" : \"/register-account\"}>LOBBYIST in a BOX</Link>\n </div>\n </div>\n }\n <h3 className=\"homepage-header\" style={{ marginTop: \"14px\" }}>Virginia Law</h3>\n <hr />\n <div className=\"homepage-links\">\n <div className=\"homepage-content-group\">\n <a href=\"https://law.lis.virginia.gov/vacode/\">Code of Virginia</a>\n </div>\n <div className=\"homepage-content-group\">\n <a href=\"https://law.lis.virginia.gov/admincode/\">Virginia Administrative Code</a>\n </div>\n <div className=\"homepage-content-group\">\n <a href=\"https://law.lis.virginia.gov/constitution/\">Constitution of Virginia</a>\n </div>\n </div>\n <h3 className=\"homepage-header\" style={{ marginTop: \"14px\" }}>Legislative Resources</h3>\n <hr />\n <div className=\"homepage-links\">\n <div className=\"homepage-content-group\">\n <a href=\"https://liaison.lis.virginia.gov/\">State Agency Legislative Liaisons</a>\n </div>\n <div className=\"homepage-content-group\">\n <a href=\"https://rga.lis.virginia.gov/\">Reports to the General Assembly</a>\n </div>\n <div className=\"homepage-content-group\">\n <a href=\"http://dls.virginia.gov/pubs_calendar.html\">Procedural Calendars</a>\n </div>\n </div>\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, session } = state;\n return {\n nav,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(ResourcesComponent)","import React from 'react';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment-timezone';\nimport { withRouter } from 'react-router';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nclass SessionInfo extends React.Component {\n constructor(props) {\n super(props);\n this.state = {};\n this.handleSessionChange = this.handleSessionChange.bind(this);\n }\n\n handleSessionChange(value) {\n if (window.env && window.env.HISTORICAL_DATA_REDIRECT && value && !value.IsDefault && value.LegacySessionID) {\n this.setState({\n historicalSessionRedirect: (redirect) => {\n if (redirect) {\n let a = document.createElement('a');\n a.target = '_blank';\n a.href = `https://legacylis.virginia.gov/cgi-bin/legp604.exe?ses=${value.SessionCode.substring(2)}&typ=lnk&val=${value.LegacySessionID}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n this.setState({ historicalSessionRedirect: false })\n }\n })\n return;\n }\n if (value && value.SessionCode) {\n this.props.actions.changeSession(value.SessionCode);\n }\n }\n\n render() {\n const session = this.props.selectedSession;\n const adjournment = session ? session.SessionEvents.find(event => event.DisplayName === \"Adjournment\") : null;\n const reconvene = session ? session.SessionEvents.find(event => event.DisplayName === \"Reconvene\") : null;\n const start = session ? session.SessionEvents.find(event => event.DisplayName === \"Session Start\") : null;\n\n let activeSessions = [];\n if (session.IsActive) {\n activeSessions = this.props.sessionList.filter(s => s.IsActive && s.SessionID !== session.SessionID);\n }\n return (\n <div>\n {this.state.historicalSessionRedirect &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content fit-content center-content\">\n <p>For historical data, please use <b>Legacy LIS</b>, available at <b><a href=\"https://legacylis.virginia.gov\" target=\"_blank\" rel=\"noreferrer\">https://legacylis.virginia.gov</a></b>.</p>\n <p>Click 'Go' to be taken to Legacy LIS, or 'Close' to remain here.</p>\n <div className=\"inline-list\">\n <button className=\"button primary float-right\" onClick={() => this.state.historicalSessionRedirect(true)}>Go</button>\n <button className=\"button secondary float-right\" onClick={() => this.state.historicalSessionRedirect(false)}>Close</button>\n </div>\n <br />\n </div>\n </div>\n }\n <h3 className=\"homepage-header\">{session.SessionYear} {session.SessionType === \"Special\" ? session.DisplayName : \"Session\"} Information</h3>\n <hr />\n {!this.props.isLoaded ?\n <div className=\"center-spinner spinner small-height\" />\n :\n <div className=\"homepage-links\">\n <div className=\"homepage-content-group\">\n <span>Session dates: {moment(start ? start.ActualDate : '').format('MMMM D, YYYY')}</span>\n {adjournment &&\n <span> - {moment(adjournment ? adjournment.ActualDate : '').format('MMMM D, YYYY')}</span>\n }\n </div>\n <div>\n {reconvene &&\n <React.Fragment>\n <span>Reconvened: </span>\n <span>{moment(reconvene.ActualDate).format('MMMM D, YYYY')}</span>\n </React.Fragment>\n }\n </div>\n <div>\n <div className=\"homepage-content-group\">\n <Link to={`/session-details/${session.SessionCode}/member-information`}>Delegates & Senators</Link>\n </div>\n <div className=\"homepage-content-group\">\n <Link to={`/session-details/${session.SessionCode}/committee-information`}>Standing Committees</Link>\n </div>\n <div className=\"homepage-content-group\">\n <Link to={`/session-details/${session.SessionCode}/calendar`}>Daily Floor Calendars</Link>\n </div>\n <div className=\"homepage-content-group\">\n <Link to={`/session-details/${session.SessionCode}/communications`}>Communications</Link>\n </div>\n </div>\n <div>\n <div className=\"homepage-content-group\">\n <span>Minutes: </span>\n {session.SessionYear < 2010\n ? <Link to={`/session-details/${session.SessionCode}/minutes-list/house`}>House</Link>\n : <a href={\"https://virginiageneralassembly.gov/house/minutes/list.php?ses=\" + session.SessionCode.toString().substr(2, 3)}>House</a>}\n <span style={{ margin: '0px 5px' }}>|</span>\n <Link to={`/session-details/${session.SessionCode}/minutes-list/senate`}>Senate</Link>\n </div>\n <div className=\"homepage-content-group\">\n <span>Video: </span>\n <span>\n <a href=\"https://virginiageneralassembly.gov/house/chamber/chamberstream.php\">House</a>\n <span style={{ margin: '0px 5px' }}>|</span>\n <a href=\"https://virginia-senate.granicus.com/ViewPublisher.php?view_id=3\">Senate</a>\n </span>\n </div>\n <div>\n <div className=\"homepage-content-group\">\n <span>Committee Statistics: </span>\n <Link to={`/session-details/${session.SessionCode}/statistics/committee/h`}>House</Link>\n <span> | </span>\n <Link to={`/session-details/${session.SessionCode}/statistics/committee/s`}>Senate</Link>\n </div>\n <div className=\"homepage-content-group\">\n <span>Session Statistics: </span>\n <Link to={`/session-details/${session.SessionCode}/statistics/status`}>By Status</Link>\n </div>\n </div>\n\n </div>\n </div>\n }\n {this.props.isLoaded && activeSessions.length > 0 &&\n <div className=\"homepage-content-group\">\n <span className=\"homepage-links\">Concurrent Sessions:</span>\n <div className=\"homepage-links\">\n {activeSessions.map(activeSession =>\n <div key={activeSession.SessionID}>\n <a style={{ cursor: 'pointer' }} href={void (0)} onClick={() => this.handleSessionChange(activeSession)}>{activeSession.SessionYear} {activeSession.DisplayName}</a>\n </div>\n )}\n </div>\n </div>\n }\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { nav } = state;\n return {\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators), dispatch)\n }\n }\n)(withRouter(SessionInfo))","import React from 'react';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment-timezone';\nimport renderHtml from 'react-render-html';\n\nconst tz = moment.tz.guess();\n\nconst TIME_REGEX = /[0-9]:[0-9]{2}\\s[AP]M/i;\n\nclass Schedule extends React.Component {\n\n render() {\n return (\n <div>\n <h3 className=\"homepage-header\">Upcoming Schedule{tz !== \"America/New_York\" && <small>*</small>}</h3>\n <hr />\n {!this.props.isLoaded ?\n <div className=\"center-spinner spinner small-height\" />\n :\n <>\n {this.props.schedule.length === 0 &&\n <div className=\"center\" style={{ fontFamily: \"Lato\" }}>\n <span>Nothing Scheduled</span>\n </div>\n }\n <div style={{ maxHeight: '370px', overflowY: 'auto' }}>\n {this.props.schedule.map((date, dateIndex) =>\n <div className=\"homepage-schedule-item\" key={dateIndex}>\n <div className=\"homepage-schedule-date\">\n <span>{moment(date.Date).format('MMMM D, YYYY')}</span>\n </div>\n {date.Times.map((time, timeIndex) => {\n return <div>\n {time.Items.length > 0 &&\n <React.Fragment>\n <ul className=\"small-text\" key={timeIndex}>\n {time.Items.map((item, itemIndex) =>\n <li key={itemIndex}>\n <span className=\"schedule-time\">{TIME_REGEX.test(item.ScheduleTime) && item.ScheduleTime}</span>\n <div className='schedule-info'>\n <div>\n <span className=\"schedule-owner\">{item.OwnerName} {item.IsCancelled && <span className=\"fail\"> CANCELLED</span>}</span>\n </div>\n <div>\n <span style={{ whiteSpace: 'pre-wrap' }}>{!TIME_REGEX.test(item.ScheduleTime) && item.ScheduleTime}</span>\n <span style={{ whiteSpace: 'pre-wrap' }}>{item.Description && renderHtml(item.Description)}</span>\n </div>\n </div>\n </li>\n )}\n </ul>\n </React.Fragment>\n }\n </div>\n }\n )}\n </div>\n )}\n </div>\n <div className=\"homepage-links\">\n <Link to=\"/schedule\">Full Schedule</Link>\n </div>\n {tz !== \"America/New_York\" && <div><small><em>*Times are displayed in your local timezone ({moment().tz(tz).format(\"zz\")})</em></small></div>}\n </>\n }\n </div>\n );\n }\n}\n\nexport default Schedule;\n","import React from 'react';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport moment from 'moment-timezone';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport DatePicker from 'react-datepicker';\nimport 'tinymce/themes/silver/theme';\nimport 'tinymce/icons/default'\nimport 'tinymce/plugins/paste/plugin';\nimport 'tinymce/plugins/link/plugin';\nimport 'tinymce/plugins/save/plugin';\nimport 'tinymce/plugins/lists/plugin';\nimport 'tinymce/plugins/code/plugin';\nimport 'tinymce/plugins/preview/plugin';\nimport 'tinymce/plugins/searchreplace/plugin';\nimport 'tinymce/plugins/pagebreak/plugin';\nimport 'tinymce/plugins/table/plugin';\nimport '../../../stylesheets/tinymce/oxide/skin.min.css';\nimport { Editor } from '@tinymce/tinymce-react';\nimport renderHTML from 'react-render-html';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nconst defaultStyle = \"primary\";\nconst freshMessage = (style) => ({ IsActive: true, BulletinMessage: `<div class=\"alert alert-${style ?? 'primary'} mb-0\"><p></p></div>`, StartDate: moment(), EndDate: moment().add(1, 'day') });\n\nclass MessageOfTheDay extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n adminView: false,\n editing: false,\n previewing: false,\n linking: false,\n linkText: '',\n linkUrl: '',\n editMessage: freshMessage(defaultStyle),\n style: defaultStyle,\n showAll: false\n }\n\n this.toggleEdit = this.toggleEdit.bind(this);\n this.selectStyle = this.selectStyle.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.toggleLink = this.toggleLink.bind(this);\n this.handleLink = this.handleLink.bind(this);\n this.toggleAdminView = this.toggleAdminView.bind(this);\n this.togglePreview = this.togglePreview.bind(this);\n this.saveMessage = this.saveMessage.bind(this);\n this.toggleShowAll = this.toggleShowAll.bind(this);\n\n this.newMessageRef = React.createRef();\n }\n\n toggleShowAll() {\n this.setState({ showAll: !this.state.showAll })\n }\n\n toggleEdit(bulletinID) {\n const messages = this.state.adminView ? [...this.props.adminMessages] : [...this.props.messages];\n const editMessage = bulletinID ? messages.find(b => b.BulletinID === bulletinID) : freshMessage(defaultStyle);\n let style = defaultStyle;\n try {\n if (bulletinID) {\n const el = document.createElement('div');\n el.innerHTML = editMessage.BulletinMessage;\n const alert = el.querySelector('.alert');\n const classes = alert.classList;\n for (const c of classes) {\n switch (c) {\n case 'alert-default':\n style = \"default\";\n break;\n case 'alert-primary':\n style = \"primary\";\n break;\n case 'alert-info':\n style = \"info\";\n break;\n case 'alert-warning':\n style = \"warning\";\n break;\n case 'alert-danger':\n style = \"danger\";\n break;\n case 'alert-success':\n style = \"success\";\n break;\n default:\n break;\n }\n }\n }\n } catch (e) {\n console.error(e);\n }\n this.setState({\n editMessage,\n style,\n editing: !this.state.editing,\n previewing: false\n })\n }\n\n toggleAdminView() {\n if (!this.state.adminView) {\n this.setState({ adminView: true }, () => {\n this.props.getAdminMessages();\n });\n } else {\n this.setState({ adminView: false })\n }\n }\n\n togglePreview() {\n this.setState({ previewing: !this.state.previewing })\n }\n\n selectStyle(style) {\n this.setState({ style }, () => {\n let editMessage = { ...this.state.editMessage };\n const el = document.createElement('div');\n el.innerHTML = editMessage.BulletinMessage;\n const alert = el.querySelector('.alert');\n alert.classList = `alert alert-${this.state.style} mb-0`;\n editMessage.BulletinMessage = el.innerHTML;\n this.setState({ editMessage })\n })\n }\n\n handleChange(key, value) {\n if (key === \"BulletinMessage\" && !value)\n value = freshMessage(this.state.style).BulletinMessage;\n\n let editMessage = { ...this.state.editMessage };\n editMessage[key] = value;\n this.setState({ editMessage })\n }\n\n handleBold = (e) => {\n e.preventDefault();\n document.execCommand('bold');\n };\n\n handleItalic = (e) => {\n e.preventDefault();\n document.execCommand('italic', false, null);\n };\n\n toggleLink = () => {\n const selected = document.getSelection();\n this.setState({ selected, linking: !this.state.linking, linkUrl: '', linkText: '' })\n }\n\n setLinkUrl = (e) => {\n this.setState({ linkUrl: e.target.value })\n }\n\n setLinkText = (e) => {\n this.setState({ linkText: e.target.value })\n }\n\n handleLink = () => {\n let editMessage = { ...this.state.editMessage };\n const el = document.createElement('div');\n el.innerHTML = editMessage.BulletinMessage;\n let alert = el.querySelector('.alert');\n const anchor = document.createElement('a');\n anchor.href = this.state.linkUrl;\n anchor.textContent = this.state.linkText;\n alert.appendChild(anchor);\n this.handleChange('BulletinMessage', el.innerHTML);\n this.toggleLink();\n };\n\n saveMessage() {\n this.setState({ saving: true }, () => {\n let message = { ...this.state.editMessage }\n let apiCall = message.BulletinID ? this.props.actions.saveMessage : this.props.actions.createMessage;\n apiCall(message).then(() => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n this.setState({ saving: false }, () => {\n this.toggleEdit();\n this.props.getAdminMessages();\n this.props.getMessages();\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({ saving: false })\n })\n })\n }\n\n render() {\n const { editMessage } = this.state;\n\n const filteredMessages = (this.state.adminView ? [...this.props.adminMessages] : [...this.props.messages]).filter(m => (this.state.adminView || moment.utc(m.StartDate).isBefore(moment())) && moment.utc(m.EndDate).isAfter(moment()));\n const messagesToDisplay = this.state.adminView ? filteredMessages.slice(0, this.state.showAll ? undefined : 5) : filteredMessages;\n\n return (\n <div className=\"dlas-forms message-of-the-day\">\n {!this.state.previewing && this.props.login.userClaims.roles.find((x) => x === \"Admin\") &&\n <div className=\"message-header\">\n <h3 className=\"homepage-header\">Message of the Day</h3>\n <a className={`icon ${this.state.editing ? 'delete' : 'add'}`} onClick={() => this.toggleEdit()} />\n {!this.state.editing && this.props.login.userClaims.roles.find((x) => x === \"Admin\") && <a className={`icon ${this.state.adminView ? 'button view' : ' search'}`} onClick={this.toggleAdminView} title={this.state.adminView ? \"View Public Messages\" : \"View All Messages As Admin\"} />}\n </div>\n }\n {!this.state.editing ?\n <div>\n {\n (this.props.login.userClaims.roles.find((x) => x === \"Admin\") && ((this.state.adminView && this.props.gettingAdminMessages) || (!this.state.adminView && this.props.gettingMessages))) ? <div className=\"spinner center-spinner small-spinner small-height\" />\n :\n (this.props.login.userClaims.roles.find((x) => x === \"Admin\") && !messagesToDisplay?.length) ?\n <p style={{ margin: '0px' }}>No {this.state.adminView ? \"admin\" : \"public\"} messages.</p>\n :\n <MessageList showAll={this.state.adminView && filteredMessages.length > 5 ? this.state.showAll : true} admin={this.props.login.userClaims.roles.find((x) => x === \"Admin\")} toggleShowAll={this.state.adminView && filteredMessages.length > 5 ? this.toggleShowAll : null} messages={messagesToDisplay} toggleEdit={this.toggleEdit} />\n }\n </div>\n :\n <div>\n {!this.state.previewing ?\n <>\n <div className=\"date-pickers\">\n <div>\n <label>Start Date</label>\n <DatePicker\n id=\"motd-start-date\"\n selected={moment.utc(editMessage.StartDate).local()}\n onChange={(val) => this.handleChange('StartDate', val.utc())}\n showTimeSelect\n dateFormat=\"MM/DD/yyyy h:mm a\"\n popperPlacement='bottom'\n />\n </div>\n <div>\n <label>End Date</label>\n <DatePicker\n id=\"motd-end-date\"\n selected={moment.utc(editMessage.EndDate).local()}\n onChange={(val) => this.handleChange('EndDate', val.utc())}\n showTimeSelect\n dateFormat=\"MM/DD/yyyy h:mm a\"\n popperPlacement='bottom'\n />\n </div>\n </div>\n <div className=\"color-pickers\">\n <div className={`color-picker alert-default${this.state.style === 'default' ? ' selected' : ''}`} onClick={() => this.selectStyle('default')} />\n <div className={`color-picker alert-danger${this.state.style === 'danger' ? ' selected' : ''}`} onClick={() => this.selectStyle('danger')} />\n <div className={`color-picker alert-warning${this.state.style === 'warning' ? ' selected' : ''}`} onClick={() => this.selectStyle('warning')} />\n <div className={`color-picker alert-success${this.state.style === 'success' ? ' selected' : ''}`} onClick={() => this.selectStyle('success')} />\n <div className={`color-picker alert-primary${this.state.style === 'primary' ? ' selected' : ''}`} onClick={() => this.selectStyle('primary')} />\n <div className={`color-picker alert-info${this.state.style === 'info' ? ' selected' : ''}`} onClick={() => this.selectStyle('info')} />\n </div>\n <div style={{ margin: 'auto', width: '80%' }}>\n <Editor\n value={editMessage.BulletinMessage}\n init={{\n browser_spellcheck: true,\n plugins: 'link paste save lists preview searchreplace pagebreak code copyheadstyle',\n toolbar: 'undo redo | bold italic strikethrough link',\n skin: false,\n valid_children: '+body[style]',\n content_css: false,\n content_style: 'table { border-collapse: collapse; border: 1px solid #FFFFFF }' + 'td { padding: 12px 0px }' + 'a {color: #196090 !important; text-decoration: underline !important}',\n }}\n onEditorChange={content => this.handleChange('BulletinMessage', content)}\n />\n </div>\n </>\n :\n <MessageList admin={false} messages={[editMessage]} />\n }\n <div className=\"inline-list align-right\" style={{ marginTop: '5px', maxWidth: this.state.previewing ? '75%' : '90%' }}>\n {!this.state.previewing &&\n <div className=\"checkbox flex-row flex-vertical-center flex-start\" style={{ display: 'inline-flex' }}>\n <label htmlFor=\"report-current-status\" className=\"checkbox-label no-background\">Is Active</label>\n <div className=\"toggle-switch\" onClick={() => this.handleChange(\"IsActive\", !editMessage.IsActive)}>\n <input id=\"report-current-status\" checked={editMessage.IsActive} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n </div>\n }\n <button type=\"button\" className='button' disabled={this.state.saving} onClick={this.togglePreview}>{this.state.previewing ? \"Edit\" : \"Preview\"}</button>\n <button type=\"button\" className='button' disabled={this.state.saving} onClick={this.saveMessage}>Save</button>\n </div>\n {this.state.previewing && <br />}\n {this.state.editing && <hr />}\n </div>\n }\n </div>\n );\n }\n}\n\nconst MessageList = (props) => {\n const { messages, admin, showAll, toggleEdit, toggleShowAll } = props;\n return (\n <div className=\"message-list\">\n {admin && toggleShowAll &&\n <div>\n <button onClick={toggleShowAll} className=\"expander button-link\" type=\"button\">Show {showAll ? \"Less\" : \"All\"}</button>\n </div>\n }\n {messages.map((message, idx) =>\n <div className=\"message-item\" key={idx}>\n {renderHTML(message.BulletinMessage)}\n {admin && <a className=\"icon edit\" style={{ marginLeft: '7px' }} onClick={() => toggleEdit(message.BulletinID)} />}\n </div>\n )}\n </div>\n )\n}\n\nexport default connect(\n (state) => {\n const { login, nav, collection } = state;\n return {\n login,\n nav,\n collection\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, navActionCreators, collectionActionCreators), dispatch)\n }\n }\n)(MessageOfTheDay)","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { scheduleActionCreators } from '../../../stores/lis-schedule-store';\nimport Search from './lis-public-home-search';\nimport Resources from './lis-public-home-resources';\nimport SessionInfo from './lis-public-home-session-info';\nimport Schedule from './lis-public-home-schedule';\nimport moment from 'moment-timezone';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport MessageOfTheDay from './lis-public-message-of-the-day';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\n\nclass HomeComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n searchIsLoaded: true,\n sessionInfoIsLoaded: this.props.nav.session && !isNaN(this.props.nav.session),\n scheduleIsLoaded: false,\n schedule: [],\n gettingMessages: true,\n gettingAdminMessages: true\n };\n this.setupPage = this.setupPage.bind(this);\n this.getMessages = this.getMessages.bind(this);\n this.getAdminMessages = this.getAdminMessages.bind(this);\n }\n\n setupPage(sessionCode) {\n this.setState({\n searchIsLoaded: false,\n sessionInfoIsLoaded: false\n });\n\n //Get the session information\n this.props.actions.getSessionByCode(sessionCode)\n .then(() => {\n this.setState({\n sessionInfoIsLoaded: true\n });\n })\n\n // Get a list of members for the search\n const getMembers = this.props.actions.getMemberList('sessionCode=' + sessionCode)\n .then(() => {\n return Promise.resolve();\n });\n const getSubjects = this.props.actions.getSubjectList('?sessionCode=' + sessionCode)\n .then(() => {\n return Promise.resolve();\n })\n const getDates = this.props.actions.getIntroDateList('?sessionCode=' + sessionCode)\n .then(() => {\n return Promise.resolve;\n })\n const getStatusCategories = this.props.actions.getBillStatusCategoryReferences()\n .then(() => {\n return Promise.resolve;\n });\n Promise.all([\n getMembers,\n getSubjects,\n getDates,\n getStatusCategories\n ]).then(() => {\n this.setState({\n searchIsLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n });\n }\n\n organizeSchedule(scheduleList) {\n // Turn the list of schedule items into a list of dates each containing a list of schedule items\n // This formatting is done so the schedule can be listed in the table with a date as a container\n scheduleList.sort((a, b) => {\n const dateComp = new Date(a.ScheduleDate) - new Date(b.ScheduleDate);\n if (dateComp !== 0) {\n return dateComp;\n }\n\n const timeA = moment(a.TimeDescription, \"h:mm A\");\n const timeB = moment(b.TimeDescription, \"h:mm A\");\n if (timeA.isValid() && timeB.isValid()) {\n if (timeA.isBefore(timeB)) return -1;\n if (timeA.isAfter(timeB)) return 1;\n }\n return 0;\n });\n let organizedSchedule = [];\n let scheduleArray = [];\n let previousSchedule = scheduleList[0];\n scheduleList.forEach(schedule => {\n const scheduleDateTime = this.getScheduleDateTime(schedule);\n const previousScheduleDateTime = this.getScheduleDateTime(previousSchedule);\n\n if(!schedule.DisplaySequence) {\n schedule.DisplaySequence = 999;\n }\n\n if (!previousScheduleDateTime.isSame(scheduleDateTime, 'day')) {\n //Add the list of legislation to the category\n //Organize the times so that the hour/minute times are in their seperate containers, this is done to help with formatting\n let newDateContainer = {\n Times: this.organizeTimes(scheduleArray),\n Date: previousScheduleDateTime.format(\"L\"),\n };\n organizedSchedule.push(newDateContainer);\n //Empty out the leg array so we can use it for another category\n scheduleArray = [];\n //Add the first item to the next category\n scheduleArray.push(schedule);\n } else {\n scheduleArray.push(schedule);\n }\n //Set this variable so the next iteration will know what the schedule date of the previous iteration was\n previousSchedule = schedule;\n });\n //If the schedule array still has elements then that means not every schedule item in the results has been added to a container\n //So, check to see if the schedule array has elements and if so create another container\n if (scheduleArray.length > 0) {\n let newDateContainer = {\n Times: this.organizeTimes(scheduleArray),\n Date: this.getScheduleDateTime(scheduleArray[0]).format(\"L\")\n };\n organizedSchedule.push(newDateContainer);\n }\n\n return organizedSchedule;\n }\n\n organizeTimes(itemsList) {\n itemsList.sort((a, b) => {\n return a.DisplaySequence < b.DisplaySequence ? -1 : a.DisplaySequence > b.DisplaySequence ? 1 : 0\n })\n\n let organizedTimes = [];\n let items = [];\n let time = \"\";\n\n for (let i = 0; i < itemsList.length; i++) {\n //If a ScheduleTime has been specified then use that, otherwise get the time from the ScheduleDate but do not display it in the list\n let currentTime = \"\";\n\n //If we've entered a new time then push the current time and sorted items into organizedTimes and reset variables\n if (currentTime !== time) {\n if (items.length > 0) {\n items.sort((a, b) => a.DisplaySequence - b.DisplaySequence);\n organizedTimes.push({\n Items: items,\n Time: time\n });\n }\n\n time = currentTime;\n items = [itemsList[i]];\n } else {\n items.push(itemsList[i]);\n }\n }\n\n //Sort and push the last time and sorted items\n items.sort((a, b) => a.DisplaySequence - b.DisplaySequence);\n organizedTimes.push({\n Items: items,\n Time: time\n })\n\n return organizedTimes;\n }\n\n getScheduleDateTime(schedule) {\n const scheduleDate = moment(schedule.ScheduleDate);\n const scheduleTime = moment(schedule.ScheduleTime, \"h:mm A\").isValid() && moment(schedule.ScheduleTime, \"h:mm A\");\n return scheduleDate.hour(scheduleTime ? scheduleTime.hour() : scheduleDate.hour()).minute(scheduleTime ? scheduleTime.minute() : scheduleDate.minute()).second(scheduleTime ? scheduleTime.second() : scheduleDate.second()).tz('America/New_York', true).local();\n }\n\n componentDidMount() {\n //if another portal has directed the user to this page with a session code url param, persist that session as the selected session\n let session, getSessionPromise;\n const sessionCodeParam = this.props.match.params.sessionCode\n if (parseInt(sessionCodeParam) > 0) {\n //if the sessionlist is already obtained, use that - otherwise, perform a GET\n if (this.props.session.sessionList && this.props.session.sessionList.length) {\n session = this.props.session.sessionList.find(session => session.SessionCode === sessionCodeParam);\n } else {\n getSessionPromise = this.props.actions.getSessionByCode(sessionCodeParam)\n .then(() => {\n session = this.props.session.selectedSession;\n })\n }\n Promise.all([getSessionPromise]).finally(() => {\n if (session) {\n this.props.actions.changeSession(session.SessionCode)\n this.setupPage(session.SessionCode);\n }\n })\n }\n\n //otherwise, setup the page if another page has changed the value of the selected session\n if (!session && this.props.session.selectedSession.SessionCode !== this.props.nav.session) {\n const sessionCode = parseInt(this.props.nav.session, 10);\n if (!isNaN(sessionCode)) {\n this.setupPage(sessionCode);\n }\n }\n\n //Get the schedule for the day\n const startDate = moment().tz('America/New_York').format('MM/DD/YYYY')\n let params = \"startDate=\" + startDate;\n this.props.actions.getScheduleList(params)\n .then(() => {\n // Remove all the schedules that happened before the current hour - 2\n const currentDay = moment();\n const currentHour = currentDay.subtract(2, \"hours\");\n //filter schedule to those that are after today, or are today but after the current hour\n const schedule = this.props.schedule.scheduleList.filter(item => (item.ScheduleDate && moment(item.ScheduleDate).isValid() && moment(item.ScheduleDate).isAfter(moment(), 'day')) || (item.ScheduleTime && moment(item.ScheduleTime, \"h:mm A\").isValid() && moment(item.ScheduleTime, \"h:mm A\").tz('America/New_York', true).local().isSameOrAfter(moment().subtract(2, \"hours\"), 'hour')) || ((!item.ScheduleTime || !moment(item.ScheduleTime, \"h:mm A\").isValid()) && new Date(item.ScheduleDate).getTime() > currentHour))\n //organize the schedule (set meetings in proper order), and then filter to display the next 3 meetings\n let organizedSchedule = this.organizeSchedule(schedule);\n let filteredOrganizedEvents = [];\n organizedSchedule.forEach(day => {\n let times = day.Times;\n let thisDayMeetings = { Date: day.Date, Times: [] };\n times.forEach(time => {\n let timeObj = { Time: time.Time, Items: time.Items };\n thisDayMeetings.Times.push(timeObj);\n })\n filteredOrganizedEvents.push(thisDayMeetings);\n })\n this.setState({\n scheduleIsLoaded: true,\n schedule: filteredOrganizedEvents\n });\n });\n\n this.getMessages();\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n const sessionCode = parseInt(this.props.nav.session, 10);\n if (!isNaN(sessionCode)) {\n this.setupPage(sessionCode);\n }\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getMessages() {\n this.setState({ gettingMessages: true }, () => {\n this.props.actions.getMessages().then(() => {\n this.setState({ gettingMessages: false })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({ gettingMessages: false })\n })\n })\n }\n\n getAdminMessages() {\n this.setState({ gettingAdminMessages: true }, () => {\n this.props.actions.getAdminMessages().then(() => {\n this.setState({ gettingAdminMessages: false })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Failed to get admin messages\", type: \"failure\" }]);\n this.setState({ gettingAdminMessages: false })\n })\n })\n }\n\n render() {\n return (\n <div className=\"homepage-wrapper\">\n <MessageOfTheDay messages={[...this.props.collection.messages].reverse()} adminMessages={[...this.props.collection.adminMessages].reverse()} gettingMessages={this.state.gettingMessages} gettingAdminMessages={this.state.gettingAdminMessages} getMessages={this.getMessages} getAdminMessages={this.getAdminMessages} />\n <Search\n memberList={this.props.members.memberList}\n subjectList={this.props.bills.subjectList}\n datesList={this.props.bills.introDateList}\n statusCategoriesList={this.props.bills.billStatusCategoryReferences}\n isLoaded={this.state.searchIsLoaded && this.state.sessionInfoIsLoaded}\n session={this.props.nav.session}\n selectedSession={this.props.session.selectedSession}\n sessionList={this.props.session.sessionList}\n history={this.props.history}\n />\n <div className=\"session-info grid-wrapper three\" style={{ minHeight: '422px', overflowWrap: 'anywhere' }}>\n <Resources\n isLoaded={this.state.sessionInfoIsLoaded}\n session={this.props.nav.session}\n selectedSession={this.props.session.selectedSession}\n isAuthenticated={this.props.login.isAuthenticated}\n />\n <div className=\"center-column\">\n <SessionInfo\n isLoaded={this.state.sessionInfoIsLoaded}\n selectedSession={this.props.session.selectedSession}\n sessionList={this.props.session.sessionList}\n />\n </div>\n <Schedule\n schedule={this.state.schedule}\n isLoaded={this.state.scheduleIsLoaded}\n />\n </div>\n </div>\n\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { bills, session, nav, schedule, members, login, collection } = state;\n return {\n bills,\n session,\n nav,\n schedule,\n members,\n login,\n collection\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, sessionActionCreators, navActionCreators, scheduleActionCreators, memberActionCreators, authActionCreators, collectionActionCreators), dispatch)\n }\n }\n)(HomeComponent)","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\n\nimport { cancelRequest } from '../../services/request.service';\n\nclass SessionInformationComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n data: []\n };\n }\n\n //When component has mounted, make the call to list the sessions\n componentDidMount() {\n this.props.getSessionList().then(() =>\n this.setState({\n data: this.props.sessionList\n })\n )\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { data } = this.state;\n const listSessions = data.map((session, i) =>\n <li key={i}>\n <Link to={`/session-details/${session.SessionID}`}>{session.SessionYear} {session.DisplayName}</Link>\n </li>\n );\n return (\n <div className=\"public-list inner-grid three-and-one\">\n <div>\n </div>\n <div>\n <h3>Other Sessions</h3>\n <ul>\n {listSessions}\n </ul>\n </div>\n </div>\n )\n }\n}\n\nconst PublicSessionInformation = connect(\n state => state.session,\n dispatch => bindActionCreators(sessionActionCreators, dispatch)\n)(SessionInformationComponent)\n\nexport default PublicSessionInformation;\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nimport LoaderComponent from '../../../lis-shared/lis-layout/components/lis-loader-component';\nimport { cancelRequest } from '../../../services/request.service';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\n\nclass CommitteeListComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n activeKey: '',\n listMembers: [],\n houseCommitteesIsLoaded: false,\n senateCommitteesIsLoaded: false,\n sessionData: '',\n houseCommittees: [],\n senateCommittees: [],\n conveneDate: moment().format(),\n showSenateChamber: true,\n showHouseChamber: true\n };\n this.getCommitteeLists = this.getCommitteeLists.bind(this);\n this.toggleChamber = this.toggleChamber.bind(this);\n this.toggleGetMembers = this.toggleGetMembers.bind(this);\n this.setupPage = this.setupPage.bind(this);\n }\n\n getCommitteeLists(sessionID, chamberCode, listName) {\n var params = 'sessionID=' + sessionID + '&' + 'chamberCode=' + chamberCode\n\n this.props.actions.getCommitteeList(params).then(() =>\n this.setState({\n [listName]: this.props.committee.committeeList,\n [listName + 'IsLoaded']: true\n })\n )\n }\n\n toggleChamber(chamber) {\n this.setState(state => ({\n [chamber]: !state[chamber]\n }));\n }\n\n toggleGetMembers(committeeId) {\n const sessionData = this.state.sessionData;\n var params = 'sessionCode=' + sessionData.SessionCode + '&CommitteeID=' + committeeId;\n if (this.state[committeeId]) {\n this.setState(prevState => ({\n [committeeId + 'isActive']: !prevState[committeeId + 'isActive']\n }));\n return;\n }\n this.props.actions.getMembersByCommittee(params).then(() => {\n // The Chairman needs to be the at the top of the list\n const chairmanIndex = this.props.members.membersByCommittee.findIndex(member => member.CommitteeRoleTitle === 'Chairman');\n let membersByCommittee = [...this.props.members.membersByCommittee];\n if (chairmanIndex !== -1) {\n let chairman = membersByCommittee[chairmanIndex];\n membersByCommittee.splice(chairmanIndex, 1);\n membersByCommittee.unshift(chairman);\n }\n const sessionStartObj = sessionData.SessionEvents && sessionData.SessionEvents.length && sessionData.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate) : '';\n const adjournmentEvent = sessionData ? sessionData.SessionEvents.find(event => event.DisplayName === 'Adjournment') : '';\n const endDate = adjournmentEvent ? moment(adjournmentEvent.ActualDate) : moment();\n const memberString = membersByCommittee.map((member, memberIndex) => {\n let detailString = '';\n if (member.CommitteeRoleTitle === \"Chairman\") {\n detailString += '(' + member.CommitteeRoleTitle;\n }\n if (member.EffectiveBeginDate && moment(member.EffectiveBeginDate).isAfter(startDate)) {\n detailString = detailString ? detailString + ', ' : '(';\n detailString += 'Arrived: ' + moment(member.EffectiveBeginDate).format('MM/DD/YYYY');\n }\n if (member.EffectiveEndDate && moment(member.EffectiveEndDate).isBefore(endDate)) {\n detailString = detailString ? detailString + ', ' : '(';\n detailString += 'Left: ' + moment(member.EffectiveEndDate).format('MM/DD/YYYY');\n }\n if (detailString) {\n detailString = ' ' + detailString + ')';\n };\n return (<React.Fragment key={memberIndex}>\n <Link style={{ display: 'inline', margin: 0 }} to={`/session-details/${sessionData.SessionCode}/member-information/${member.MemberNumber}/member-details`}>{member.PatronDisplayName}</Link>\n {detailString}\n {memberIndex !== membersByCommittee.length - 1 && \", \"}\n </React.Fragment>)\n })\n this.setState(prevState => ({\n [committeeId]: memberString,\n [committeeId + 'isActive']: !prevState[committeeId + 'isActive']\n }));\n });\n }\n\n //When component has mounted, make the call to list the committees\n componentDidMount() {\n if (parseInt(this.props.match.params.sessioncode, 10) > 0) {\n //Update the session selector component, which will run componentDidUpdate and call setupPage on its own\n const sessionCode = this.props.match.params.sessioncode\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode)\n } else {\n this.setupPage(sessionCode);\n }\n }\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/committee-information');\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n const sessionCode = this.props.match.params.sessioncode;\n if (!isNaN(sessionCode)) {\n this.props.actions.changeSession(sessionCode);\n }\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n setupPage(sessionCode) {\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n const sessionStartObj = this.props.session.selectedSession.SessionEvents && this.props.session.selectedSession.SessionEvents.length && this.props.session.selectedSession.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate) : '';\n this.setState({\n sessionData: this.props.session.selectedSession,\n conveneDate: startDate\n }, () => {\n this.getCommitteeLists(this.state.sessionData.SessionID, 'H', 'houseCommittees')\n this.getCommitteeLists(this.state.sessionData.SessionID, 'S', 'senateCommittees')\n })\n });\n }\n\n render() {\n const { sessionData, houseCommittees, senateCommittees } = this.state;\n const sessionHeader = sessionData ? sessionData.SessionYear + ' ' + sessionData.DisplayName : '';\n const listCommittee = (committee, i) => {\n const legislationObj = {\n selectedSession: sessionData.SessionID,\n selectedBillStatus: 2,\n selectedCommittee: committee.CommitteeID,\n };\n const legislationLink = window.btoa(JSON.stringify(legislationObj));\n return (<div key={i} className={this.state[committee.CommitteeID + 'isActive'] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n <div className=\"toggle-row\">\n <Link to={`/session-details/${sessionData.SessionCode}/committee-information/${committee.CommitteeNumber}/committee-details`}>{committee.Name}</Link>\n <div className=\"button-container\">\n <button aria-expanded={!!this.state[committee.CommitteeID + 'isActive']} className=\"arrow-down\" onClick={() => this.toggleGetMembers(committee.CommitteeID, sessionData.SessionCode)}>Show members</button>\n </div>\n </div>\n {this.state[committee.CommitteeID + 'isActive'] &&\n <div className=\"list-desc\">\n Members: {this.state[committee.CommitteeID]}\n </div>\n }\n <div className=\"list-links\">\n <Link to={`/bill-search?q=${legislationLink}`}>Legislation</Link>\n </div>\n </div>)\n }\n const listHouseCommittees = houseCommittees.map(listCommittee);\n const listSenateCommittees = senateCommittees.map(listCommittee);\n\n return (\n <div className=\"public-chamber-data\">\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <div className=\"public-list inner-grid two\">\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showHouseChamber\")} aria-expanded={this.state.showHouseChamber} className={`chamber-name ${this.state.showHouseChamber ? \"opened\" : \"\"}`}>House Committees</h3>\n <LoaderComponent data={this.state.houseCommitteesIsLoaded} />\n <ul className=\"slidedown-list\">\n {this.state.showHouseChamber &&\n <>\n {listHouseCommittees}\n </>\n }\n </ul>\n </div>\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showSenateChamber\")} aria-expanded={this.state.showSenateChamber} className={`chamber-name ${this.state.showHouseChamber ? \"opened\" : \"\"}`}>Senate Committees</h3>\n <LoaderComponent data={this.state.senateCommitteesIsLoaded} />\n <ul className=\"slidedown-list\">\n {this.state.showSenateChamber &&\n <>\n {listSenateCommittees}\n </>\n }\n </ul>\n </div>\n </div>\n </div>\n )\n }\n}\n\nconst PublicCommitteeList = connect(\n (state) => {\n const { committee, members, session, nav } = state;\n return {\n committee,\n members,\n session,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, memberActionCreators, sessionActionCreators, navActionCreators), dispatch)\n }\n }\n)(CommitteeListComponent)\n\nexport default PublicCommitteeList;\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport { Link, withRouter } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport renderHTML from 'react-render-html';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nimport LoaderComponent from '../../../lis-shared/lis-layout/components/lis-loader-component'\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\n\nconst CURRENTLY_IN = 'Bills in subcommittee <em>today</em>';\nconst ASSIGNED_TO = 'Bills that have ever been in this subcommittee';\n\nfunction MinutesData(props) {\n return (\n <tr className=\"inner-grid one-and-three\">\n <td className=\"no-gap-grid\" style={{ gridTemplateColumns: '150px 110px' }}>\n <span>{moment(props.MinutesDate).format(\"MMMM D[,] YYYY\")} {props.MinutesNumber > 1 ? \"(\" + props.MinutesNumber + \")\" : \"\"}</span>\n <div className=\"flex-row\">\n {(props.IsPublic || this.props.login.userClaims.scopes.find(x => x === \"Senate\")) ? <Link to={`/session-details/${props.sessionCode}/committee-information/${props.committeeNumber}/meetings/${props.MinutesBookID}/1`}>\n Meeting\n </Link> : <div />}\n {props.MinutesCalendars && props.MinutesCalendars.length > 0 ?\n <React.Fragment>{(props.IsPublic || this.props.login.userClaims.scopes.find(x => x === \"Senate\")) && \"|\"}\n <Link to={`/session-details/${props.sessionCode}/committee-information/${props.committeeNumber}/dockets/${props.MinutesCalendars[0].CalendarID}`}>\n Docket\n </Link>\n </React.Fragment> : null}\n </div>\n </td>\n </tr >\n )\n}\n\nfunction MinutesList(props) {\n const listMinutes = props.minutes.map((minute, i) => {\n return (\n <MinutesData key={i} {...minute} sessionCode={props.sessionCode} committeeNumber={props.committeeNumber} />\n )\n });\n return (<React.Fragment>{listMinutes}</React.Fragment>)\n}\n\nfunction DocketData(props) {\n const { docket, formattedSessionCode, committeeNumber } = props;\n\n if (!docket) {\n return <div />;\n }\n\n let url = '';\n if (docket.ChamberCode === \"H\") {\n if (docket.ReferenceNumber) {\n url = `https://virginiageneralassembly.gov/house/agendas/agendaItem.php?id=${docket.ReferenceNumber}&ses=${formattedSessionCode}`\n } else {\n url = `https://virginiageneralassembly.gov/house/agendas/agendaDates.php?id=${committeeNumber}&ses=${formattedSessionCode}`\n }\n } else {\n url = `/session-details/` + docket.SessionCode + `/committee-information/` + committeeNumber + `/dockets/` + docket.DocketID;\n }\n\n return (\n <tr className=\"inner-grid one-and-three\">\n <td className=\"no-gap-grid\" style={{ gridTemplateColumns: '150px 110px' }}>\n <span>{moment(docket.HouseAgendaDate ? docket.HouseAgendaDate : docket.DocketDate).format(\"MMMM D[,] YYYY\")}</span>\n <Link to={url}>\n Docket</Link>\n </td>\n </tr>\n )\n}\n\nfunction DocketList(props) {\n let count = 1;\n const listDockets = props.dockets.map((docket, i) => {\n //Proceed with adding the docket if there is not a minutes on the same day as the docket\n //Unless it's a past session in which case show the docket no matter what \n if ((!props.maxSize || count < props.maxSize) && ((!props.sessionData.IsActive && i !== 0) || (i !== 0 && props.minutes && props.minutes.length > 0 && !props.minutes.find(y => moment(docket.DocketDate).isSame(y.MinutesDate, \"days\"))))) {\n count++;\n return (\n <DocketData key={i} docket={docket} formattedSessionCode={props.formattedSessionCode} committeeNumber={props.committeeNumber} />\n )\n }\n });\n return (<React.Fragment>{listDockets}</React.Fragment>)\n}\n\nfunction SubCommittees(props) {\n return (\n <li>\n {props.parentCommitteeNumber !== \"S05\"\n ? <Link to={`/session-details/${props.sessionCode}/committee-information/${props.CommitteeNumber}/committee-details`}>{props.Name}</Link>\n : props.Name === \"Capital Outlay & Transportation\"\n ? <a href='https://sfac.virginia.gov/subcommittees/capital-outlay-transport.shtml'>Capital Outlay & Transportation</a>\n : props.Name === \"Education\"\n ? <a href='https://sfac.virginia.gov/subcommittees/education.shtml'>Education</a>\n : <Link to={`/session-details/${props.sessionCode}/committee-information/${props.CommitteeNumber}/committee-details`}>{props.Name}</Link>\n }\n </li>\n );\n}\n\nfunction SubCommitteesList(props) {\n const listCommittees = props.committees.map((committee, i) => <SubCommittees key={i} sessionCode={props.sessionCode} parentCommitteeNumber={props.parentCommitteeNumber} {...committee} />);\n return listCommittees;\n}\n\nclass CommitteeDetailsComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n committeeData: { Name: '' },\n parentCommitteeData: {},\n memberList: [],\n subcommitteesList: [],\n sessionData: '',\n minutesList: [],\n docketList: [],\n showTooltip: {}\n };\n this.getCommitteeDetails = this.getCommitteeDetails.bind(this);\n this.getCommitteeMembers = this.getCommitteeMembers.bind(this);\n this.getSubcommittees = this.getSubcommittees.bind(this);\n this.getMeetings = this.getMeetings.bind(this);\n this.setupDoc = this.setupDoc.bind(this);\n this.makeLink = this.makeLink.bind(this);\n this.toggleTooltip = this.toggleTooltip.bind(this);\n }\n\n // When component has mounted:\n // 1. Get session info, add to state\n // 2. Get committee by ID\n // 3. Get committee members\n // 4. Get subcommittees (if any)\n setupDoc(sessionCode) {\n const committeeNumber = this.props.match.params.committeenumber\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n const sessionData = this.props.session.selectedSession;\n this.setState({\n sessionData: sessionData,\n committeeNumber: committeeNumber\n }, () => {\n this.getCommitteeDetails(committeeNumber, sessionData.SessionID);\n });\n });\n }\n\n\n componentDidUpdate(prevProps) {\n //If the user clicks a link to a subcommittee then the setup function needs to run again\n if (this.props.match.params.committeenumber !== prevProps.match.params.committeenumber) {\n this.setupDoc(this.props.nav.session);\n }\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/committee-information/' + this.props.match.params.committeenumber + '/committee-details');\n this.setupDoc(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n const sessionCode = this.props.match.params.sessioncode;\n if (!isNaN(sessionCode)) {\n this.props.actions.changeSession(sessionCode);\n }\n }\n }\n\n componentDidMount() {\n window.scrollTo(0, 0);\n const sessionCode = this.props.match.params.sessioncode;\n //Update the session selector component, which will run componentDidUpdate and call setupDoc on its own\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode)\n } else {\n this.setupDoc(sessionCode);\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getCommitteeDetails(committeeNumber, sessionId) {\n const sessionStartObj = this.props.session.selectedSession.SessionEvents && this.props.session.selectedSession.SessionEvents.length && this.props.session.selectedSession.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate) : '';\n\n this.props.actions.getCommitteeByNumber(\"?committeeNumber=\" + committeeNumber + \"&sessionId=\" + sessionId).then(() => {\n this.setState({\n committeeData: this.props.committee.committeeByNumberData,\n detailsIsLoaded: true\n });\n\n //Attempt to get any meetings or dockets for the committee\n this.getMeetings(this.state.sessionData, this.props.committee.committeeByNumberData.CommitteeID);\n if (this.props.committee.committeeByNumberData.ChamberCode === \"S\")\n this.getDockets(this.state.sessionData, this.props.committee.committeeByNumberData);\n\n if (this.props.committee.committeeByNumberData.ParentCommitteeID) {\n this.props.actions.getCommitteeById(\"?sessionId=\" + sessionId + \"&id=\" + this.props.committee.committeeByNumberData.ParentCommitteeID + \"&effectiveDate=\" + moment(this.props.session.selectedSession.StartDate).format(\"MM/DD/YYYY\")).then(() => {\n this.setState({\n parentCommitteeData: this.props.committee.committeeByIdData\n })\n })\n }\n\n this.getCommitteeMembers(this.props.committee.committeeByNumberData.CommitteeID, sessionId);\n this.getSubcommittees(this.props.committee.committeeByNumberData.CommitteeID, sessionId);\n }\n )\n }\n\n\n getCommitteeMembers(committeeID, sessionId) {\n var params = 'sessionID=' + sessionId + '&' + 'CommitteeID=' + committeeID;\n this.props.actions.getMembersByCommittee(params).then(() => {\n // The Chairman needs to be the at the top of the list\n const chairmanIndex = this.props.members.membersByCommittee.findIndex(member => member.CommitteeRoleTitle === 'Chairman');\n let membersByCommittee = [...this.props.members.membersByCommittee];\n if (chairmanIndex !== -1) {\n let chairman = membersByCommittee[chairmanIndex];\n membersByCommittee.splice(chairmanIndex, 1);\n membersByCommittee.unshift(chairman);\n }\n this.setState({\n memberList: membersByCommittee,\n membersIsLoaded: true\n });\n });\n }\n\n getSubcommittees(parentID, sessionID) {\n var params = 'sessionID=' + sessionID + '&' + 'parentCommitteeID=' + parentID;\n\n this.props.actions.getCommitteeList(params).then(() =>\n this.setState({\n subcommitteesList: this.props.committee.committeeList,\n subcommitteesIsLoaded: true\n })\n );\n }\n\n getMeetings(sessionData, committeeId) {\n const meetingParam = \"sessionID=\" + sessionData.SessionID + \"&committeeID=\" + committeeId;\n this.props.actions.getMinutesList(meetingParam, false)\n .then(() => {\n let minutesList = [...this.props.minutes.minutesList];\n this.setState({\n minutesList: minutesList,\n minutesListIsLoaded: true\n });\n });\n }\n\n getDockets(sessionData, committeeData) {\n const docketParams = \"?sessionID=\" + sessionData.SessionID + \"&chamberCode=\" + committeeData.ChamberCode + \"&committeeID=\" + committeeData.CommitteeID;\n this.props.actions.getDocketList(docketParams, false)\n .then(() => {\n this.setState({\n docketList: this.props.calendar.docketList,\n docketListIsLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({\n docketListIsLoaded: true\n });\n });\n }\n\n makeLink(statusCategoryId, currentStatus) {\n let params = {\n selectedSession: this.state.sessionData ? this.state.sessionData.SessionID : '',\n selectedBillStatusCategory: statusCategoryId,\n selectedCommittee: this.state.committeeData.ParentCommitteeID || this.state.committeeData.CommitteeID,\n selectedSubcommittee: this.state.committeeData.ParentCommitteeID ? this.state.committeeData.CommitteeID : '',\n currentStatus: currentStatus ?? false\n };\n\n const json = JSON.stringify(params);\n const query = window.btoa(json);\n return '/bill-search?q=' + query;\n }\n\n toggleTooltip(text) {\n let showTooltip = { ...this.state.showTooltip };\n\n //Close all open tooltips\n if (typeof showTooltip === \"object\") {\n for (const x in showTooltip) {\n if (x !== text)\n showTooltip[x] = false;\n };\n }\n\n showTooltip[text] = showTooltip[text] ? false : true;\n\n this.setState({\n showTooltip: showTooltip\n })\n }\n\n render() {\n const { sessionData, committeeData, parentCommitteeData, memberList, subcommitteesList, minutesList, docketList } = this.state;\n const formattedSessionCode = sessionData.SessionCode ? sessionData.SessionCode.substr(2) : '';\n const sessionStartObj = sessionData && sessionData.SessionEvents && sessionData.SessionEvents.length ? sessionData.SessionEvents.find(date => date.DisplayName === \"Session Start\") : '';\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate) : moment();\n const closingEvent = sessionData && sessionData.SessionEvents && sessionData.SessionEvents.length ? sessionData.SessionEvents.find(event => event.DisplayName === 'Closing') : '';\n const reconveneEvent = !closingEvent && sessionData && sessionData.SessionEvents && sessionData.SessionEvents.length ? sessionData.SessionEvents.find(event => event.DisplayName === 'Reconvene') : '';\n const adjournmentEvent = !closingEvent && !reconveneEvent && sessionData && sessionData.SessionEvents && sessionData.SessionEvents.length ? sessionData.SessionEvents.find(event => event.DisplayName === 'Adjournment') : '';\n const endDate = closingEvent ? moment(closingEvent.ActualDate) : reconveneEvent ? moment(reconveneEvent.ActualDate) : adjournmentEvent ? moment(adjournmentEvent.ActualDate) : moment();\n //Find the first docket that doesn't have a minutes on the same day\n const defaultDocket = docketList.find(x => !minutesList.find(y => moment(x.DocketDate).isSame(y.MinutesDate, \"days\")));\n\n const committeeLabel = (!committeeData.ParentCommitteeID ? committeeData.ChamberCode === \"H\" ? \"House \" : \"Senate \" : \"Subcommittee: \") + committeeData.Name\n\n const buildMembers = (memberList) => {\n let members = [];\n let changedMembers = [];\n for (let i = 0; i < memberList.length; i++) {\n if (memberList[i].RemoveDate && moment(memberList[i].RemoveDate).isBefore(endDate)) {\n memberList[i].Change = \"Left\"\n memberList[i].ChangeDate = memberList[i].RemoveDate;\n changedMembers.push(memberList[i])\n } else if (memberList[i].AssignDate && moment(memberList[i].AssignDate).isAfter(startDate) && moment(memberList[i].AssignDate).isBefore(endDate)) {\n members.push(memberList[i])\n memberList[i].Change = \"Joined\"\n memberList[i].ChangeDate = memberList[i].AssignDate\n changedMembers.push(memberList[i])\n } else {\n members.push(memberList[i])\n }\n }\n\n changedMembers.sort((a, b) => (a.ChangeDate > b.ChangeDate) ? 1 : ((b.ChangeDate > a.ChangeDate) ? -1 : 0))\n\n return <React.Fragment>\n <p>\n {members.map((member, memberIndex) =>\n <React.Fragment key={memberIndex}>\n <Link style={{ display: 'inline' }} to={`/session-details/${sessionData.SessionCode}/member-information/${member.MemberNumber}/member-details`}>{member.PatronDisplayName}</Link>\n {member.CommitteeRoleTitle && member.CommitteeRoleTitle === \"Vice-Chair\"\n ? this.state.committeeData.ChamberCode === \"H\"\n ? \" (Vice Chair)\"\n : \" (Co-Chair)\"\n : member.CommitteeRoleTitle !== \"Member\" && member.CommitteeRoleTitle !== \"Ex-Officio\" && \" (\" + member.CommitteeRoleTitle + \")\"\n }\n {memberIndex !== members.length - 1 && \", \"}\n </React.Fragment>\n )}\n </p>\n <p className=\"committee-member-details\">\n {changedMembers.map((member, memberIndex) =>\n <React.Fragment key={memberIndex}>\n {member.Change === \"Joined\"\n ? moment(member.AssignDate).format('MM/DD/YYYY') + \" \" + member.PatronDisplayName + \" joined\\n\"\n : moment(member.RemoveDate).format('MM/DD/YYYY') + \" \" + member.PatronDisplayName + \" left\\n\"\n }\n </React.Fragment>\n )}\n </p>\n </React.Fragment>;\n }\n\n return (\n <div className=\"committee-details-page generic-details-page public-details inner-grid\">\n <div>\n <h2 style={{ marginBottom: \"7px\" }}>{sessionData.SessionYear} {sessionData.DisplayName}</h2>\n </div>\n {committeeData.ParentCommitteeID && <Link className=\"parent-committee-link\" to={`/session-details/${sessionData.SessionCode}/committee-information/${parentCommitteeData.CommitteeNumber}/committee-details`}><i className=\"icon button-left\" style={{ marginRight: \"2px\" }} />{(parentCommitteeData.ChamberCode === \"H\" ? \"House \" : \"Senate \") + parentCommitteeData.Name}</Link>}\n <div className=\"details-header\">\n <h3 style={{ marginBottom: \"10px\" }}>{committeeLabel}</h3>\n <LoaderComponent data={this.state.detailsIsLoaded} />\n </div>\n <div className=\"details-section\">\n <h4 >Membership</h4>\n <LoaderComponent data={this.state.membersIsLoaded} />\n {memberList.length === 0 &&\n <p>No Members</p>\n }\n <React.Fragment>\n {buildMembers(memberList)}\n </React.Fragment>\n </div>\n {this.state.minutesListIsLoaded || this.state.docketListIsLoaded ?\n <React.Fragment>\n {committeeData.ChamberCode === \"H\" ?\n <div className={this.state['slideDockets'] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n {committeeData.ParentCommitteeID && <p>Committee chairs serve as ex officio members of House subcommittees.</p>}\n {docketList.length === 0 ?\n this.state.sessionData && this.state.sessionData.IsActive &&\n <div className=\"table-container description\">\n <p style={{ marginBottom: \"0px\" }}>{committeeData.MeetingNote}</p>\n <a target=\"_blank\" href={`https://virginiageneralassembly.gov/house/agendas/agendaDates.php?id=${committeeData.CommitteeNumber}&ses=${formattedSessionCode}`} >{committeeData.ParentCommitteeID ? \"Subcommittee Agendas\" : \"Committee Agendas\"}</a>\n </div>\n :\n <React.Fragment>\n <div className={this.state['slideDockets'] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n <div className=\"toggle-row\">\n <div className=\"table-container description\">\n <h4>Agendas</h4>\n <p>{committeeData.MeetingNote}</p>\n </div>\n {docketList.length > 3 &&\n <div className=\"button-container text-align-left\">\n <label aria-expanded={this.props.slideDockets} className=\"arrow-down-label\" onClick={this.props.toggleShowData.bind(this, 'slideDockets')}>All Agendas</label>\n <button aria-expanded={this.props.slideDockets} className=\"arrow-down\" onClick={this.props.toggleShowData.bind(this, 'slideDockets')}>All Agendas</button>\n </div>\n }\n </div>\n </div>\n {!this.state.sessionData.IsActive &&\n <div>\n <table className=\"line-table\">\n <tbody className=\"toggle-table\">\n {!this.props.slideDockets &&\n <DocketList dockets={docketList.slice(0, 3)} formattedSessionCode={formattedSessionCode} committeeNumber={committeeData.CommitteeNumber} />\n }\n {this.props.slideDockets && docketList.length > 3 &&\n <div className=\"list-desc\">\n <DocketList dockets={docketList} formattedSessionCode={formattedSessionCode} committeeNumber={committeeData.CommitteeNumber} />\n </div>\n }\n </tbody>\n </table>\n </div>\n }\n </React.Fragment>\n }\n <div className=\"details-section\">\n {this.state.sessionData && this.state.sessionData.IsActive &&\n <a rel=\"noreferrer\" target=\"_blank\" href={`https://virginiageneralassembly.gov/house/reports/reportsDates.php?id=${this.state.committeeData.CommitteeNumber}&ses=${formattedSessionCode}`} >{committeeData.ParentCommitteeID ? \"Subcommittee Reports\" : \"Committee Reports\"}</a>\n }\n {this.state.sessionData && this.state.sessionData.IsActive &&\n <p><a rel=\"noreferrer\" target=\"_blank\" href={`https://hodspeak.house.virginia.gov/committees/${this.state.committeeData.CommitteeNumber}/bill_feedback?ses=${formattedSessionCode}`} >Comments on Bills</a></p>\n }\n </div>\n </div>\n :\n <React.Fragment>\n <div className={this.state['slideDockets'] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n {committeeData.ParentCommitteeID && <p>The Chair of the full Committee shall be an ex officio member of all subcommittees and entitled to vote, but shall not be counted as a member for purposes of a quorum. </p>}\n <div className=\"toggle-row\">\n <div className=\"table-container description\">\n <h4>Meetings (Dockets, Votes, Reports)</h4>\n <p>{this.state.committeeData.MeetingNote}</p>\n </div>\n </div>\n {minutesList.length > 3 &&\n <div className=\"button-container text-align-left\">\n <label aria-expanded={this.props.slideDockets} className=\"arrow-down-label\" onClick={this.props.toggleShowData.bind(this, 'slideDockets')}>All Meetings</label>\n <button aria-expanded={this.props.slideDockets} className=\"arrow-down\" onClick={this.props.toggleShowData.bind(this, 'slideDockets')}>All Meetings</button>\n </div>\n }\n {this.state.committeeData.AgendaURL &&\n <div className=\"table-container description\">\n <p>\n <a href={this.state.committeeData.AgendaURL} target=\"_blank\">Agendas</a>\n </p>\n </div>\n }\n {this.state.committeeData.CommitteeID === 26 && //Senate Finance\n <div className=\"table-container description\">\n <p>\n <a href={\"http://sfac.virginia.gov/about.shtml\"} target=\"_blank\">Staff/Information</a>\n </p>\n </div>\n }\n {this.state.docketList.length > 0 && defaultDocket && !this.state.sessionData.IsActive &&\n <div>\n {/*don't show the 'All Meetings' button twice -- already shown if minutesList.length > 3*/\n minutesList.length <= 3 &&\n <div className=\"button-container text-align-left\">\n <label aria-expanded={this.props.slideDockets} className=\"arrow-down-label\" onClick={this.props.toggleShowData.bind(this, 'slideDockets')}>All Meetings</label>\n <button aria-expanded={this.props.slideDockets} className=\"arrow-down\" onClick={this.props.toggleShowData.bind(this, 'slideDockets')}>All Meetings</button>\n </div>\n }\n <table className=\"line-table\">\n <tbody className=\"toggle-table\">\n <DocketData\n docket={defaultDocket}\n formattedSessionCode={formattedSessionCode}\n committeeNumber={committeeData.CommitteeNumber}\n />\n {this.props.slideDockets && !this.state.sessionData.IsActive && docketList.length > 3 ?\n <div className=\"list-desc\">\n <DocketList sessionData={this.state.sessionData} minutes={minutesList} dockets={docketList} formattedSessionCode={formattedSessionCode} committeeNumber={committeeData.CommitteeNumber} />\n </div>\n :\n <div className=\"list-desc\">\n <DocketList sessionData={this.state.sessionData} maxSize={3} minutes={minutesList} dockets={docketList} formattedSessionCode={formattedSessionCode} committeeNumber={committeeData.CommitteeNumber} />\n </div>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n {minutesList.length > 0 &&\n <div>\n <table className=\"line-table\">\n <tbody className=\"toggle-table\">\n {this.props.slideDockets\n ? <div className=\"list-desc\">\n <MinutesList minutes={minutesList} sessionCode={sessionData.SessionCode} committeeNumber={committeeData.CommitteeNumber} />\n </div>\n : <MinutesList minutes={minutesList.slice(0, 3)} sessionCode={sessionData.SessionCode} committeeNumber={committeeData.CommitteeNumber} />}\n </tbody>\n </table>\n </div>\n }\n </React.Fragment>\n }\n </React.Fragment>\n :\n <div aria-label=\"Loading\" className=\"spinner\"></div>\n }\n {committeeData.CommitteeFiles && committeeData.CommitteeFiles.length > 0 &&\n <div className=\"details-section\">\n <p>\n {committeeData.CommitteeFiles.map((link, linkIndex) =>\n <a key={linkIndex} target=\"_blank\" href={link.FileURL}>{link.Description}</a>\n )}\n </p>\n </div>\n }\n {committeeData.ParentCommitteeID ? (\n <div className=\"details-section\">\n <h4>Subcommittee Legislation</h4>\n <p>\n <Link to={this.makeLink(3, false)} style={{ display: 'inline-block' }}>Assigned-To</Link><a onClick={() => this.toggleTooltip(ASSIGNED_TO)} className=\"button info\" style={{ display: 'inline-block' }}>Info</a>\n {this.state.showTooltip[ASSIGNED_TO] &&\n <div className=\"info-box committee-tooltip\">\n <p>{ASSIGNED_TO}</p>\n </div>\n }\n <br />\n <Link to={this.makeLink(null, true)} style={{ display: 'inline-block' }}>Currently In</Link><a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(CURRENTLY_IN) }} className=\"button info\" style={{ display: 'inline-block' }}>Info</a>\n {this.state.showTooltip[CURRENTLY_IN] &&\n <div className=\"info-box committee-tooltip\">\n <p>{renderHTML(CURRENTLY_IN)}</p>\n </div>\n }\n </p>\n </div>\n ) : (\n <div className=\"details-section\">\n <h4>Committee Legislation</h4>\n <p>\n <Link to={this.makeLink(3, false)}>Referred</Link>\n <Link to={this.makeLink(null, true)}>In Committee</Link>\n <Link to={this.makeLink(null, true)}>In sub-committee</Link>\n <Link to={this.makeLink(5, false)}>Reported Out</Link>\n <Link to={this.makeLink(11, true)}>Continued</Link>\n <Link to={this.makeLink(12, false)}>Failed</Link>\n </p>\n </div>\n )}\n {subcommitteesList.length > 0 &&\n <div className=\"details-section\">\n <h4>Subcommittees</h4>\n <LoaderComponent data={this.state.subcommitteesIsLoaded} />\n <p>\n <SubCommitteesList parentCommitteeNumber={this.state.committeeNumber} sessionCode={this.props.match.params.sessioncode} committees={subcommitteesList} />\n </p>\n </div>\n }\n </div>\n )\n }\n}\n\nconst PublicCommitteeDetails = withRouter(connect(\n (state) => {\n const { committee, session, nav, calendar, minutes, members, login } = state;\n return {\n committee,\n session,\n nav,\n calendar,\n minutes,\n members,\n login\n };\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, sessionActionCreators, navActionCreators, calendarActionCreators, minutesActionCreators, memberActionCreators), dispatch)\n };\n }\n)(CommitteeDetailsComponent));\n\nexport default PublicCommitteeDetails;\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { Link } from 'react-router-dom';\nimport ReactToPrint from 'react-to-print';\nimport moment from 'moment-timezone';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { connect } from 'react-redux';\nimport LoaderComponent from '../../../lis-shared/lis-layout/components/lis-loader-component'\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { voteActionCreators } from '../../../stores/lis-votes-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport striptags from 'striptags';\n\nconst MEETING = 1;\nconst CHAIRMANS_REPORT = 2;\nconst VOTE_SHEET = 3;\n\nconst Entry = props => {\n return (\n <React.Fragment>\n <div className=\"inner-grid two-col-sidebar-backwards\">\n <div>\n <Link to={`/bill-details/${props.session.SessionCode}/${props.entry.LegislationNumber}`}>{props.entry.LegislationNumber}</Link>\n </div>\n <div>\n <b>{props.entry.LegislationDescription}</b>\n {props.entry.MinutesActivities && props.entry.MinutesActivities.filter(ma => !ma.DeletionDate).map((activity, index) =>\n <ul key={index} style={{ marginLeft: '1em' }}>\n {(activity.VoteIsPublic || props.senateUser) && <li>{activity.VoteID &&\n <Link to={`/vote-details/${props.entry.LegislationNumber}/${props.session.SessionCode}/${activity.VoteNumber}`}>{activity.Description}</Link>\n }</li>}\n </ul>\n )}\n </div>\n </div>\n <br />\n </React.Fragment>\n );\n}\n\nclass PublicMeetingDetails extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n session: '',\n minutesBook: '',\n committee: '',\n isLoaded: false,\n subformIsLoaded: true,\n view: parseInt(this.props.match.params.view),\n chairmanReport: [],\n voteSheet: []\n }\n this.setView = this.setView.bind(this);\n this.toggleMeetingStatus = this.toggleMeetingStatus.bind(this);\n }\n\n setView(view) {\n this.setState({ view, subformIsLoaded: false }, () => {\n if (this.state.view === CHAIRMANS_REPORT && this.state.chairmanReport.length === 0) {\n let chairmanReport = [...this.state.chairmanReport];\n this.props.actions.getChairReport(this.state.minutesBook.MinutesBookID).then(() => {\n chairmanReport = this.props.minutes.chairReport.ChairmansCategory;\n this.setState({ chairmanReport, subformIsLoaded: true })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.error(err);\n this.setState({ subformIsLoaded: true })\n });\n } else if (this.state.view === VOTE_SHEET && this.state.voteSheet.length === 0) {\n let voteSheet = [...this.state.voteSheet];\n this.state.minutesBook.MinutesCategories.forEach(category => {\n category.MinutesEntries.forEach(entry => {\n entry.MinutesActivities.filter(ma => !ma.DeletionDate).forEach(activity => {\n if (activity.VoteID) {\n voteSheet.push({\n LegislationNumber: entry.LegislationNumber,\n LegislationID: entry.LegislationID,\n VoteID: activity.VoteID\n });\n }\n });\n });\n });\n\n if (voteSheet.length) {\n this.getVoteSheetData(voteSheet).then((res) => {\n this.setState({ voteSheet: res || [], subformIsLoaded: true })\n });\n } else {\n this.setState({ voteSheet: [], subformIsLoaded: true })\n }\n } else {\n this.setState({ subformIsLoaded: true })\n }\n });\n }\n\n getBillDetailData(voteSheet) {\n return this.props.actions.getBillListByIds({ \"LegislationIds\": voteSheet.map(v => ({ LegislationID: v.LegislationID, SessionID: this.state.minutesBook.SessionID })) });\n }\n\n getVoteDetailData(voteSheet) {\n return this.props.actions.getVoteDetails('?' + voteSheet.map((v, i) => 'voteIDs=' + v.VoteID + (i !== voteSheet.length - 1 ? '&' : '')).join(''), true);\n }\n\n async getVoteSheetData(voteSheet) {\n return await Promise.all([this.getBillDetailData(voteSheet), this.getVoteDetailData(voteSheet)]).then(() => {\n const voteData = this.props.votes.voteDetailsResponse;\n voteData.forEach(vote => {\n const voteIndex = voteSheet.findIndex(v => v.VoteID === vote.VoteID);\n let voteDetails = voteSheet[voteIndex];\n\n voteDetails = { ...vote, ...voteDetails };\n voteDetails.memberYeas = vote.VoteMember.filter(nObj => nObj.ResponseCode === 'Y');\n voteDetails.memberNays = vote.VoteMember.filter(nObj => nObj.ResponseCode === 'N');\n voteDetails.memberAbstentions = vote.VoteMember.filter(nObj => nObj.ResponseCode === 'A');\n voteDetails.memberNoVote = vote.VoteMember.filter(nObj => nObj.ResponseCode === 'X');\n voteDetails.voteStatements = vote.VoteMember.filter(member => member.VoteStatement);\n // Abstentions appear as rule 36 on senate floor tally sheets\n if (vote.ChamberCode === \"S\" && vote.VoteType === \"Floor\") {\n voteDetails.memberRule36 = vote.VoteMember.filter(nObj => nObj.ResponseCode === 'A');\n } else {\n voteDetails.memberRule36 = vote.VoteMember.filter(nObj => nObj.ResponseCode === 'R');\n }\n voteSheet[voteIndex] = voteDetails;\n });\n\n //if a vote didn't get returned in the request, fill out some of the data to prevent NREs\n voteSheet.filter(v => !voteData.find(vote => vote.VoteID === v.VoteID)).forEach(voteDetails => {\n voteDetails.memberYeas = [];\n voteDetails.memberNays = [];\n voteDetails.memberAbstentions = [];\n voteDetails.memberNoVote = [];\n voteDetails.voteStatements = [];\n voteDetails.memberRule36 = [];\n });\n\n const billData = [...this.props.bills.billListByIds];\n billData.forEach(bill => {\n voteSheet.forEach((v, i) => {\n if (v.LegislationID === bill.LegislationID) {\n voteSheet[i] = { ...v, ...bill };\n\n if (!voteSheet[i].VoteMember && voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0)) {\n voteSheet[i].VoteMember = voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0).VoteMember;\n voteSheet[i].memberYeas = voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0).memberYeas;\n voteSheet[i].memberNays = voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0).memberNays;\n voteSheet[i].memberAbstentions = voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0).memberAbstentions;\n voteSheet[i].memberNoVote = voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0).memberNoVote;\n voteSheet[i].voteStatements = voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0).voteStatements\n voteSheet[i].memberRule36 = voteSheet.find(x => x.VoteID === v.VoteID && x.VoteMember && x.VoteMember.length > 0).memberRule36;\n voteSheet[i].LegislationActionDescription = !voteSheet[i].LegislationActionDescription ? voteSheet.find(x => x.VoteID === v.VoteID).LegislationActionDescription : voteSheet[i].LegislationActionDescription;\n }\n }\n });\n });\n return voteSheet;\n }).catch(err => {\n console.error(err)\n });\n }\n\n toggleMeetingStatus() {\n let minutes = { ...this.state.minutesBook }\n if (minutes.MinutesStatusID === 4) {\n minutes.MinutesStatusID = 2;\n } else {\n minutes.MinutesStatusID = 4\n }\n\n this.props.actions.saveMinutesBook(minutes)\n .then(() => {\n const minutesBookId = this.props.match.params.meetingid;\n const committee = this.props.match.params.committeenumber;\n this.getMinutesBook(minutesBookId, committee);\n })\n }\n\n getMinutesBook(minutesBookId, committee) {\n this.props.actions.getMinutesBook('?minutesbookID=' + minutesBookId, (this.props.login.userClaims.roles.find(role => role === \"SenateCommitteeReportReader\") ? true : false))\n .then(() => {\n if (this.props.minutes.minutesBook) {\n const minutesBook = { ...this.props.minutes.minutesBook }\n this.setState({\n minutesBook: minutesBook,\n }, () => {\n this.setView(this.state.view);\n this.props.actions.getSessionById(this.state.minutesBook.SessionID)\n .then(() => {\n this.setState({\n session: this.props.session.selectedSession\n }, () => {\n this.props.actions.getCommitteeByNumber(\"?committeeNumber=\" + committee + \"&effectiveDate=\" + moment(this.state.minutesBook.MinutesDate).format(\"MM/DD/YYYY\") + \"&sessionId=\" + this.props.session.selectedSession.SessionID)\n .then(() => {\n this.setState({\n committee: this.props.committee.committeeByNumberData,\n isLoaded: true\n }, () => {\n if (this.state.committee.ParentCommitteeID) {\n const sessionStartObj = this.props.session.selectedSession.SessionEvents && this.props.session.selectedSession.SessionEvents.length && this.props.session.selectedSession.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate).format(\"MM/DD/YYYY\") : '';\n this.props.actions.getCommitteeById(\"?id=\" + this.state.committee.ParentCommitteeID + \"&effectiveDate=\" + moment(startDate).format(\"MM/DD/YYYY\") + \"&sessionId=\" + this.props.session.selectedSession.SessionID)\n .then(() => {\n this.setState({\n parentCommittee: this.props.committee.committeeByIdData\n })\n })\n }\n });\n });\n });\n });\n });\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n });\n }\n\n componentDidMount() {\n window.scrollTo(0, 0);\n const minutesBookId = this.props.match.params.meetingid;\n const committee = this.props.match.params.committeenumber;\n this.getMinutesBook(minutesBookId, committee)\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n if (this.state.isLoaded) {\n const { chairmanReport, voteSheet } = this.state;\n // Chairman reports are a formatted minutes book that only contains entries that have been completed.\n // The organization is how they were completed (e.g. Reported Without Amendment) followed by the list of bills that share the same completion type\n // An example:\n /* \n REPORTED WITHOUT AMENDMENT:\n SB44, SB112, SB186, SB238 \n */\n const sessionHeader = this.state.session.SessionYear + \" \" + this.state.session.DisplayName;\n //Find the minutes calendar if it exists\n let calendar = '';\n if (this.state.minutesBook.MinutesCalendars && this.state.minutesBook.MinutesCalendars.length > 0) {\n calendar = this.state.minutesBook.MinutesCalendars[0].CalendarID;\n }\n return (<div className='generic-details-page meetings-details-page'>\n <div className=\"flex-row \">\n <br />\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 8fr 1fr 1fr 1fr 1fr\", marginTop: \"10px\" }}>\n {this.props.login.userClaims.roles.find(role => role === \"SenateCommitteeReportReader\") ?\n <React.Fragment>\n <button type=\"button\" className=\"button primary\" onClick={() => this.toggleMeetingStatus()}>{(this.state.minutesBook.MinutesStatusID === 4 ? \"Open\" : \"Close\") + \" Meeting\"}</button>\n <label style={{ marginLeft: \"10px\" }}>Meeting Status: <span className={this.state.minutesBook.MinutesStatusID === 4 ? \"fail\" : \"txt-green\"}>{this.state.minutesBook.MinutesStatusID === 4 ? \"Closed\" : \"Open\"}</span></label>\n <button type=\"button\" className=\"button meetings-page-toggle\" aria-current={this.state.view === MEETING} onClick={() => this.setView(MEETING)}>Meeting View</button>\n <button type=\"button\" className=\"button meetings-page-toggle\" aria-current={this.state.view === CHAIRMANS_REPORT} onClick={() => this.setView(CHAIRMANS_REPORT)}>Chair's Report</button>\n {this.state.committee.ChamberCode === \"S\" && <button type=\"button\" className=\"button meetings-page-toggle\" aria-current={this.state.view === VOTE_SHEET} onClick={() => this.setView(VOTE_SHEET)}>Vote Sheet</button>}\n </React.Fragment>\n : <>\n <div />\n <div />\n <div />\n <div />\n <div />\n </>}\n <ReactToPrint\n trigger={() => <button type=\"button\" className=\"button print\"> Print</button>}\n content={() => this.componentRef}\n />\n </div>\n </div>\n {this.state.subformIsLoaded ?\n <div className=\"bill-theme public-details inner-grid\" ref={el => (this.componentRef = el)}>\n {this.state.view === MEETING &&\n <div>\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <div>\n <h3>{(\n this.state.committee.ChamberCode === \"H\"\n ? \"House Committee \"\n : \"Senate Committee \") +\n (this.state.parentCommittee\n ? this.state.parentCommittee.Name === \"Judiciary\"\n ? \"on the \" + this.state.parentCommittee.Name\n : this.state.parentCommittee.Name === \"Courts of Justice\"\n ? \"for \" + this.state.parentCommittee.Name\n : \"on \" + this.state.parentCommittee.Name\n : this.state.committee.Name\n ? this.state.committee.Name === \"Judiciary\"\n ? \"on the \" + this.state.committee.Name\n : this.state.committee.Name === \"Courts of Justice\"\n ? \"for \" + this.state.committee.Name\n : \"on \" + this.state.committee.Name\n : this.state.minutesBook.CommitteeName === \"Judiciary\"\n ? \"on the \" + this.state.minutesBook.CommitteeName\n : this.state.minutesBook.CommitteeName === \"Courts of Justice\"\n ? \"for \" + this.state.minutesBook.CommitteeName\n : \"on \" + this.state.minutesBook.CommitteeName\n )\n }</h3>\n {this.state.parentCommittee &&\n <h3>{\"Subcommittee on \" + this.state.committee.Name}</h3>\n }\n </div>\n <hr />\n <div>\n <div className=\"parent-li\">\n <h4>\n {moment(this.state.minutesBook.MinutesDate).format(\"MMMM D[,] YYYY\")}\n {calendar && <Link to={`/session-details/${this.props.session.selectedSession.SessionCode}/committee-information/${this.state.committee.CommitteeNumber}/dockets/${calendar}`} style={{ marginLeft: \"1em\" }}>View Docket</Link>}\n </h4>\n </div>\n </div>\n <br />\n {this.state.minutesBook.MinutesCategories.map((category, catIndex) =>\n <div key={catIndex}>\n {category.MinutesEntries && category.MinutesEntries.map((entry, entIndex) =>\n <Entry key={entIndex} entry={entry} session={this.state.session} senateUser={this.props.login.userClaims.scopes.find(x => x === \"Senate\") ? true : false} />\n )}\n </div>\n )}\n </div>\n }\n {this.state.view === CHAIRMANS_REPORT &&\n <React.Fragment>\n <br />\n <div>\n <span style={{ float: \"right\", fontSize: '20px' }}>{moment(this.state.minutesBook.MinutesDate).format(\"MMMM D[,] YYYY\")}</span>\n </div>\n <div className=\"center\">\n <span className=\"chair-report-header\">Chair's Report</span>\n </div>\n <div style={{ margin: \"15px 0 25px\", fontSize: '20px' }}>\n <span>The committee on </span> <b>{this.state.committee ? this.state.committee.Name : this.state.minutesBook.CommitteeName}</b> <span>reports the following:</span>\n </div>\n <div>\n {chairmanReport.sort((a, b) => a.Sequence - b.Sequence).map((action, actionIndex) =>\n <div key={actionIndex}>\n <div>\n <p className=\"chair-report-category\">{action.CategoryDescription && action.CategoryDescription.endsWith(':') ? action.CategoryDescription.toUpperCase() : action.CategoryDescription && action.CategoryDescription.toUpperCase() + \":\"}</p>\n </div>\n <p className=\"chair-report-bills\">\n {action.ChairmansLegislation.map((bill, billIndex) => {\n let formattedBill = !bill.ReferToCommitteeName && billIndex != action.ChairmansLegislation.length - 1 ? bill.LegislationNumber + \", \" : bill.LegislationNumber\n return (\n <React.Fragment>\n <b key={billIndex}>{formattedBill}{bill.ReferToCommitteeName && (\" to Committee \" + (bill.ReferToCommitteeName === \"Judiciary\" ? \"on the \" : bill.ReferToCommitteeName === \"Courts of Justice\" ? \"for \" : \"on \") + bill.ReferToCommitteeName)}</b>\n {bill.ReferToCommitteeName && <br />}\n </React.Fragment>\n )\n })\n }\n </p>\n <br />\n </div>\n )}\n </div>\n </React.Fragment>\n }\n {this.state.view === VOTE_SHEET &&\n <div id=\"vote-sheet-container\">\n {voteSheet.map((action, actionIndex) => {\n let legNumber = action.LegislationNumber;\n //Add dots in between the characters because that is how they want it displayed\n const billType = legNumber.slice(0, 2);\n const numbers = legNumber.slice(2);\n legNumber = billType.split('').map(char => {\n char += '.'\n // Senate Joint and House Joint Resolutions are displayed as 'H.J.R.' and 'S.J.R.' on this page rather than 'HJ' and 'SJ'\n // If the bill has a 'J' in the bill number then it is a joint resolution\n if (char === 'J.') {\n char += 'R.'\n }\n return char;\n }).join('');\n legNumber += ' ' + numbers;\n\n return (\n <div key={actionIndex}>\n <br />\n <div>\n <p className=\"vote-sheet-header\">\n <span>{this.state.session.SessionYear} - {this.state.session.SessionCode.substring(4)}</span>\n <span>Senate of Virginia - Committee Voting System</span>\n <span>{moment().format(\"MM/DD/YY HH:mm\")}</span>\n </p>\n </div>\n <div>\n <p>Committee on {this.state.committee ? this.state.committee.Name : this.state.minutesBook.CommitteeName}</p>\n </div>\n <div>\n <p><b>{legNumber.toUpperCase()}</b><span className=\"ldtitle\">{striptags(action.LegislationTitle)}</span></p>\n </div>\n {action.Patrons &&\n <p>{action.Patrons.length > 1 ? \"Patrons--\" : \"Patron--\"}\n {action.Patrons.map((patron, patronIndex) => {\n let patronString = '';\n if (action.Patrons[patronIndex + 1] && action.Patrons[patronIndex + 1].ChamberCode !== action.ChamberCode && action.Patrons[patronIndex].ChamberCode === action.ChamberCode) {\n patronString = (patronIndex !== 0 ? \" and \" : \"\") + patron.PatronDisplayName + (action.ChamberCode === \"H\" ? patronIndex + 2 === action.Patrons.length ? \"; Senator: \" : \"; Senators: \" : patronIndex + 2 === action.Patrons.length ? \"; Delegate: \" : \"; Delegates: \");\n } else if (patronIndex + 1 === action.Patrons.length && action.Patrons.length > 1 && action.Patrons[patronIndex].ChamberCode === action.Patrons[patronIndex - 1].ChamberCode) {\n patronString = \" and \" + patron.PatronDisplayName;\n } else if (patronIndex != 0 && action.Patrons[patronIndex - 1].ChamberCode === action.Patrons[patronIndex].ChamberCode) {\n patronString = \", \" + patron.PatronDisplayName;\n } else {\n patronString = patron.PatronDisplayName\n }\n return (<React.Fragment key={patronIndex}>{patronString}{patron.ByRequest ? ' (By Request)' : null}</React.Fragment>)\n })}\n </p>\n }\n <p><b>{action.LegislationActionDescription}</b></p>\n <p>\n YEAS--\n {action.memberYeas && action.memberYeas.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{action.memberYeas.length === index + 1 ? '--' : ', '}</span>\n ))}\n {action.memberYeas && action.memberYeas.length}.\n </p>\n <p>\n NAYS--\n {action.memberNays && action.memberNays.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{action.memberNays.length === index + 1 ? '--' : ', '}</span>\n ))}\n {action.memberNays && action.memberNays.length}.\n </p>\n <p>\n {(action.VoteType === \"Floor\" && action.ChamberCode === \"S\") ? \"RULE 36--\" : \"ABSTENTIONS--\"}\n {action.memberAbstentions && action.memberAbstentions.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{action.memberAbstentions.length === index + 1 ? '--' : ', '}</span>\n ))}\n {action.memberAbstentions && action.memberAbstentions.length}.\n </p>\n <p>(vote sequence: {action.VoteNumber}, {moment(action.VoteDate).format(\"MM/DD/YY HH.mm\")})</p>\n <br />\n <footer />\n </div>\n )\n })}\n </div>\n }\n </div>\n :\n <LoaderComponent data={this.state.subformIsLoaded} />\n }\n </div>\n );\n }\n else {\n return (<LoaderComponent data={this.state.isLoaded} />);\n }\n }\n}\n\nexport default connect(\n (state) => {\n const { bills, committee, session, minutes, login, votes } = state;\n return {\n bills,\n committee,\n session,\n minutes,\n login,\n votes\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, committeeActionCreators, sessionActionCreators, minutesActionCreators, authActionCreators, voteActionCreators), dispatch)\n }\n }\n)(PublicMeetingDetails)","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport DocketDetailsComponent from '../../../lis-shared/lis-dockets/lis-docket-details';\nimport ReactToPrint from 'react-to-print';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { calendarActionCreators } from '../../../stores/lis-calendar-store';\nimport { connect } from 'react-redux';\nimport { cancelRequest } from '../../../services/request.service';\nimport LoaderComponent from '../../../lis-shared/lis-layout/components/lis-loader-component'\nimport renderHTML from 'react-render-html';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nclass PublicDocketDetails extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n data: '',\n selectedSession: '',\n categories: '',\n hideClerk: false,\n hideStaff: false,\n hidePatron: false,\n hideSummary: false,\n hideTitle: false,\n hideLDNumber: false,\n hideCaption: false\n }\n }\n\n componentDidMount() {\n window.scrollTo(0, 0);\n //Imporant to make sure that things load in the correct order. \n //First I get the docket data, then I get the session data (for the printoff header), followed by the room references (to display the VoteRoomID's name)\n const docketId = this.props.match.params.docketid;\n let committeeNumber = this.props.match.params.committeenumber;\n const chamberCode = this.props.match.url.includes(\"dockets\") ? \"S\" : \"H\"\n const params = '?docketId=' + docketId\n this.props.actions.getDocketById(params, false, chamberCode)\n .then(() => {\n if (this.props.calendar.docketByIdData) {\n const data = this.props.calendar.docketByIdData;\n // Just in case that the committee number is not in the url\n if (!committeeNumber) {\n this.props.history.push(`/session-details/${data.SessionCode}/committee-information/${data.CommitteeNumber}/dockets/${data.DocketID}`);\n }\n this.props.actions.getSessionById(data.SessionID)\n .then(() => {\n this.setState({\n selectedSession: this.props.session.selectedSession,\n sessionIsLoaded: true\n }, () => {\n const htmlFile = this.props.calendar.docketByIdData.DocketFiles.find(file => file.FileURL.toUpperCase().includes('.HTM'));\n if (htmlFile && !this.state.selectedSession.IsActive && !data.Schedules?.length) {\n this.props.actions.getFile(htmlFile.FileURL)\n .then(() => {\n let html = this.props.nav.file;\n if (html) {\n html = html.replaceAll('href=\"#', 'href=\"' + window.location.pathname + \"#\")\n }\n this.setState({\n docketFile: html,\n dataIsLoaded: true\n });\n }).catch(err => {\n if (err !== 'Aborted') {\n this.setState({\n dataIsLoaded: true,\n message: \"Failed to get HTML file\"\n });\n console.error(err);\n }\n });\n } else {\n const categories = data.DocketCategories || data.HouseAgendaCategories;\n\n for (let i = 0; i < data.CalendarDisplay.length; i++) {\n switch (data.CalendarDisplay[i].DisplayColumn) {\n case (\"Staffs Name\"):\n this.setState({\n hideClerk: !data.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Clerk Name\"):\n this.setState({\n hideStaff: !data.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Chief Patron\"):\n this.setState({\n hidePatron: !data.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Summary\"):\n this.setState({\n hideSummary: !data.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Title\"):\n this.setState({\n hideTitle: !data.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"LD Number\"):\n this.setState({\n hideLDNumber: !data.CalendarDisplay[i].IsDisplayed\n });\n break;\n case (\"Caption\"):\n this.setState({\n hideCaption: !data.CalendarDisplay[i].IsDisplayed\n });\n break;\n default:\n break;\n }\n }\n this.setState({\n data: data,\n categories: categories,\n dataIsLoaded: true\n });\n }\n });\n }).catch(err => {\n if (err !== 'Aborted') {\n this.setState({\n dataIsLoaded: true,\n message: \"Failed to get HTML file\"\n });\n console.error(err);\n }\n });\n } else {\n this.setState({\n dataIsLoaded: true,\n message: \"No docket data found\"\n });\n }\n }).catch(err => {\n if (err !== 'Aborted') {\n this.setState({\n dataIsLoaded: true,\n message: \"No docket data found\"\n });\n console.error(err);\n }\n });\n }\n\n removeZeros(doc) {\n let dom = document.createElement('div');\n dom.innerHTML = doc;\n\n let all = document.getElementsByTagName(\"*\");\n\n for (let i = 0; i < all.length; i++) {\n let trimmedUrl = \"\"\n //If it's an href with a bill or resolution number in it then slice off the end, remove the zeros, and append it back to the href\n if (all[i].href && all[i].href != \"\" && all[i].href.match(/[H|S][B|J|R][0-9]{4}/)) {\n trimmedUrl = all[i].href.slice(all[i].href.length - 7, all[i].href.length - 1)\n trimmedUrl = trimmedUrl.slice(0, 2) + parseInt(trimmedUrl.slice(2))\n all[i].href = all[i].href.slice(0, all[i].href.length - 7) + trimmedUrl + \"/\";\n }\n }\n\n return doc;\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n if (this.state.message) {\n return (<div className=\"center\">{this.state.message}</div>)\n }\n if (this.state.docketFile) {\n return (\n <div className='details-page-data-container'>\n {renderHTML(this.removeZeros(this.state.docketFile))}\n </div>\n );\n }\n if (this.state.dataIsLoaded && this.state.sessionIsLoaded) {\n return (\n <div className='generic-details-page docket-details-page'>\n <div className=\"flex-row\">\n <br />\n <ReactToPrint\n trigger={() => <button type=\"button\" className=\"button print\"> Print</button>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n <div ref={el => (this.componentRef = el)}>\n <DocketDetailsComponent\n data={this.state.data}\n dockets={this.state.categories}\n session={this.state.selectedSession}\n hideClerk={this.state.hideClerk}\n hideStaff={this.state.hideStaff}\n hidePatron={this.state.hidePatron}\n hideSummary={this.state.hideSummary}\n hideTitle={this.state.hideTitle}\n hideLDNumber={this.state.hideLDNumber}\n hideCaption={this.state.hideCaption}\n />\n </div>\n </div>\n );\n } else {\n return (<LoaderComponent data={false} />)\n }\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, session, calendar } = state;\n return {\n nav,\n session,\n calendar\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, sessionActionCreators, calendarActionCreators), dispatch)\n }\n }\n)(PublicDocketDetails)","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport PublicCommitteeList from './lis-public-committee-list';\nimport PublicCommitteeDetails from './lis-public-committee-details';\nimport PublicMeetingDetails from './lis-public-meeting-details';\nimport PublicDocketDetails from './lis-public-docket-details';\nimport { Route } from 'react-router';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\n\nclass CommitteeInformationComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n slideDockets: false,\n }\n\n this.toggleShowData = this.toggleShowData.bind(this);\n }\n\n toggleShowData(slide) {\n this.setState(prevState => ({\n [slide]: !prevState[slide]\n }));\n }\n\n render() {\n return <div>\n <Route exact path={this.props.match.path} render={props => <PublicCommitteeList {...props} />} />\n <Route path='/session-details/:sessioncode/committee-information/:committeenumber/committee-details' render={props => <PublicCommitteeDetails {...props} slideDockets={this.state.slideDockets} toggleShowData={this.toggleShowData} />} />\n <Route path='/session-details/:sessioncode/committee-information/:committeenumber/meetings/:meetingid/:view' component={PublicMeetingDetails} />\n <Route path='/session-details/:sessioncode/committee-information/:committeenumber/dockets/:docketid' component={PublicDocketDetails} />\n <Route path='/session-details/:sessioncode/committee-information/:committeenumber/agendas/:docketid' component={PublicDocketDetails} />\n </div>\n\n }\n}\n\nexport default connect(\n (state) => {\n const { committee, members, session, nav } = state;\n return {\n committee,\n members,\n session,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, memberActionCreators, sessionActionCreators, navActionCreators), dispatch)\n }\n }\n)(CommitteeInformationComponent)\n\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { memberActionCreators } from '../../stores/lis-members-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { patronActionCreators } from '../../stores/lis-patron-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { cancelRequest } from '../../services/request.service';\n\n\nclass MemberInfoComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {};\n this.toggleShowData = this.toggleShowData.bind(this);\n }\n\n toggleShowData(memberID) {\n this.setState(prevState => ({\n [memberID]: !prevState[memberID]\n }));\n }\n\n render() {\n const { member, sessionData, patronRoles } = this.props;\n const prefileEvent = sessionData ? sessionData.SessionEvents.find(event => event.DisplayName === 'Prefile Date') : '';\n const closingEvent = sessionData ? sessionData.SessionEvents.find(event => event.DisplayName === 'Closing') : '';\n const startDate = prefileEvent ? moment(prefileEvent.ActualDate) : '';\n const endDate = closingEvent ? moment(closingEvent.ActualDate) : moment();\n const memberDetails = (member, startDate, endDate) => {\n let detailString = '';\n if (member.ServiceEndDate && moment(member.ServiceEndDate).isAfter(startDate) && moment(member.ServiceEndDate).isBefore(endDate) && member.ServiceEndReason) {\n detailString = detailString ? detailString + ', ' : '(';\n detailString += member.ServiceEndReason;\n }\n if (detailString) detailString += ')';\n if (member.MemberStatus === \"Elect\") detailString += \"(Elect)\";\n return <React.Fragment>{detailString}</React.Fragment>;\n }\n const info = member.ContactInformation.map(contact => {\n return (\n <p>{contact.Address1}, {member.RoomNumber}<br />\n {contact.Address2}, {contact.City}, {contact.StateCode} {contact.ZipCode}<br />\n {contact.PhoneNumber}<br />\n {contact.EmailAddress &&\n <span>email: {contact.EmailAddress}</span>\n }\n </p>\n );\n });\n return (\n <div className={this.state[member.MemberNumber] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n <div className=\"toggle-row\">\n <div>\n <Link to={`/session-details/${sessionData.SessionCode}/member-information/${member.MemberNumber}/member-details`}>{member.MemberDisplayName}</Link>\n <span className=\"txt-greyed\">{memberDetails(member, startDate, endDate)}</span>\n </div>\n <div className=\"button-container\">\n <button aria-expanded={!!this.state[member.MemberNumber]} className=\"arrow-down\" onClick={this.toggleShowData.bind(this, member.MemberNumber)}>More info</button>\n </div>\n </div>\n {this.state[member.MemberNumber] &&\n <div className=\"list-desc\">\n <p>{member.PartyName} / {member.Chamber} - {member.DistrictName} District</p>\n {info}\n </div>\n }\n <div className=\"list-links\">\n {/* Search for member's legislation by all patron roles except Sponsor */}\n <Link to={'/bill-search/?q=' + window.btoa(JSON.stringify({ \n selectedPatron: member.MemberID,\n selectedSession: sessionData.SessionCode,\n chamberCode: member.ChamberCode,\n selectedPatronType: [1]\n }))} style={{ pointerEvents: patronRoles && patronRoles.length ? null : 'none' }}>Legislation</Link>\n <Link to={`/vote-search/${sessionData.SessionCode}/${member.MemberNumber}`}>Votes</Link>\n </div>\n </div>\n )\n }\n}\n\n\nclass MemberInformationComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sessionData: [],\n houseMembers: [],\n senateMembers: [],\n value: \"\",\n showHouseChamber: true,\n showSenateChamber: true\n };\n this.getMembersLists = this.getMembersLists.bind(this);\n this.toggleChamber = this.toggleChamber.bind(this);\n this.setupPage = this.setupPage.bind(this);\n }\n\n getMembersLists(sessionData, chamberCode, listName) {\n var params = 'sessionID=' + sessionData.SessionID + '&chamberCode=' + chamberCode + '&contactTypeID=8'\n\n this.props.actions.getMemberContact(params).then(() =>\n this.setState({\n [listName]: this.props.members.memberContactData,\n [listName + 'IsLoaded']: true\n })\n )\n }\n\n toggleChamber(chamber) {\n this.setState(state => ({\n [chamber]: !state[chamber]\n }));\n }\n\n componentDidMount() {\n //Update the session selector component, which will run componentDidUpdate and call setupPage on its own\n const sessionCode = this.props.match.params.sessioncode\n if (sessionCode) {\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode);\n } else {\n this.setupPage(sessionCode);\n }\n }\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/member-information')\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n if (this.props.match.params.sessioncode) {\n this.props.actions.changeSession(this.props.match.params.sessioncode);\n }\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n setupPage(sessionCode) {\n this.setState({\n houseMembersIsLoaded: false,\n senateMembersIsLoaded: false\n })\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n this.setState({\n sessionData: this.props.session.selectedSession\n });\n this.getMembersLists(this.props.session.selectedSession, 'H', 'houseMembers')\n this.getMembersLists(this.props.session.selectedSession, 'S', 'senateMembers')\n });\n\n this.props.actions.getPatronRoles()\n .then(() => {\n const patronRoles = [...this.props.patrons.patronRoles];\n this.setState({\n patronRoles: patronRoles\n });\n });\n }\n\n render() {\n const { sessionData, houseMembers, senateMembers, patronRoles } = this.state;\n const listHouseMembers = houseMembers.map((member, i) =>\n <MemberInfoComponent key={i} member={member} sessionData={sessionData} patronRoles={patronRoles} />\n );\n const listSenateMembers = senateMembers.map((member, i) =>\n <MemberInfoComponent key={i} member={member} sessionData={sessionData} patronRoles={patronRoles} />\n );\n\n return (\n <div className=\"public-chamber-data\">\n <div>\n <h2>{sessionData.SessionYear} {sessionData.DisplayName}</h2>\n </div>\n <div id=\"chamber-vote-leg-links\">\n {/*TODO: Temporarily removing these links for historical data per User Story 13242*/}\n {sessionData.IsActive &&\n <>\n <Link to={`/session-details/${sessionData.SessionCode}/member-legislation/S`}>Senate Member Legislation</Link>\n <br />\n <Link to={`/session-details/${sessionData.SessionCode}/member-legislation/H`}>House Member Legislation</Link>\n <br />\n </>\n }\n <Link to={`/vote-search/${sessionData.SessionCode}`}>Member Vote Search</Link>\n <br />\n <a rel=\"noreferrer\" target=\"_blank\" href=\"https://whosmy.virginiageneralassembly.gov\">Who's My Legislator?</a>\n </div>\n <div className=\"public-list inner-grid two\">\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showHouseChamber\")} aria-expanded={this.state.showHouseChamber} className={`chamber-name ${this.state.showHouseChamber ? \"opened\" : \"\"}`}>House Members</h3>\n {this.state.houseMembersIsLoaded ?\n <ul className=\"slidedown-list\">\n {this.state.showHouseChamber &&\n <>\n {listHouseMembers}\n </>\n }\n </ul>\n :\n <div className=\"spinner\">Fetching results...</div>\n }\n </div>\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showSenateChamber\")} aria-expanded={this.state.showSenateChamber} className={`chamber-name ${this.state.showSenateChamber ? \"opened\" : \"\"}`}>Senate Members</h3>\n {this.state.senateMembersIsLoaded ?\n <ul className=\"slidedown-list\">\n {this.state.showSenateChamber &&\n <>\n {listSenateMembers}\n </>\n }\n </ul>\n :\n <div className=\"spinner\">Fetching results...</div>\n }\n </div>\n </div>\n </div>\n )\n }\n}\n\nconst PublicMemberInformation = connect(\n (state) => {\n const { members, session, patrons, nav } = state;\n return {\n members,\n session,\n patrons,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, memberActionCreators, sessionActionCreators, patronActionCreators, navActionCreators), dispatch)\n }\n }\n)(MemberInformationComponent)\n\nexport default PublicMemberInformation;\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { memberActionCreators } from '../../stores/lis-members-store';\nimport { committeeActionCreators } from '../../stores/lis-committee-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { patronActionCreators } from '../../stores/lis-patron-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\n\nimport { cancelRequest } from '../../services/request.service';\nimport jwtDecode from 'jwt-decode';\n\nfunction Committees(props) {\n //Person doesn't have to be a member of the committee's subcommmittees so this check must be made\n let subcommittees = [];\n if (props.subcommittees && props.subcommittees.length > 0) {\n subcommittees = props.subcommittees.sort((a, b) => a.Name.localeCompare(b.Name)).map(subcomm => {\n return (\n <li key={subcomm.CommitteeID}>\n <Link style={{ marginLeft: '1.5em' }} to={`/session-details/${props.session}/committee-information/${subcomm.CommitteeNumber}/committee-details`}>{subcomm.Name}</Link>\n </li>\n )\n })\n }\n return (\n <span>\n <Link to={`/session-details/${props.session}/committee-information/${props.CommitteeNumber}/committee-details`}>{props.Name}</Link>\n {subcommittees && subcommittees}\n </span>\n );\n}\n\nfunction CommitteeAssignments(props) {\n const listCommittees = props.committees.sort((a, b) => a.Name.localeCompare(b.Name)).map((committee, i) => <Committees key={i} session={props.session} {...committee} />);\n if (listCommittees.length === 0) {\n return (<p className=\"small-text\">None</p>)\n }\n return <ul style={{ marginTop: \"0px\" }}>{listCommittees}</ul>;\n}\n\nconst PatronRoles = props => {\n let roleLinks = []\n props.roles.forEach((role, roleIndex) => {\n if (role.Name === \"Budget Amendment Requests\") {\n const sessionCode = props.sessionData.SessionCode[props.sessionData.SessionCode.length - 1]\n //Need to get rid of leading zeros for the link to work on the budget site\n const memberNumber = props.memberData.MemberNumber;\n // The first char is the chamber. Need to get rid of that so parseInt doesn't return NaN. It will be added back later to make the member number without the leading zeros\n const memberChamber = memberNumber[0];\n const memberNumberWithoutChamber = memberNumber.substr(1);\n const formattedMemberNumber = memberChamber + String(parseInt(memberNumberWithoutChamber, 10));\n\n const link = `https://budget.lis.virginia.gov/mbramendment/${props.sessionData.SessionYear}/${sessionCode}/${formattedMemberNumber}/`\n roleLinks.push(<a key={roleIndex} target=\"_blank\" href={link}>{role.Name}</a>)\n } else {\n //Add the link to the object\n const link = {\n selectedPatronType: [role.PatronTypeID],\n selectedPatron: props.memberData.MemberID,\n selectedSession: props.sessionData.SessionID\n }\n //Convert to base64 so when the link is clicked the adv search page can interpret it\n const b64Link = window.btoa(JSON.stringify(link))\n roleLinks.push(<Link key={roleIndex} to={\"/bill-search/?q=\" + b64Link}>{role.Name}</Link>)\n }\n });\n if (roleLinks.length === 0) {\n return (<p>None</p>);\n }\n return (<p>{roleLinks}</p>);\n}\n\nclass MemberDetailsComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sessionData: [],\n memberCommittees: [],\n memberNumber: '',\n memberData: '',\n patronRoles: [],\n memberSessionContact: [],\n memberDistrictContact: [],\n memberConferenceBills: []\n };\n this.getMemberContact = this.getMemberContact.bind(this);\n this.getMemberCommittees = this.getMemberCommittees.bind(this);\n this.getPatronTypes = this.getPatronTypes.bind(this);\n this.getMemberConferenceBills = this.getMemberConferenceBills.bind(this);\n this.setupPage = this.setupPage.bind(this);\n }\n\n getMemberCommittees(memberID, effectiveDate) {\n var params = 'effectiveDate=' + effectiveDate + '&MemberID=' + memberID\n\n this.props.actions.getCommitteesByMember(params).then(() => {\n let committees = this.props.committee.committeesByMember;\n for (let i = 0; i < committees.length; i++) {\n let comm = committees[i];\n //Find the subcommittees by checking if they have a parent ID\n if (comm.ParentCommitteeID) {\n //Find the parent based the parent ID\n let parent = committees.find(committee => comm.ParentCommitteeID === committee.CommitteeID);\n //Just in case something odd is happening and the person is only a member of the subcommittee (possible in api 1.0)\n if (parent) {\n if (!parent.subcommittees) parent.subcommittees = [];\n //Add the subcommittee as a child to the parent object\n parent.subcommittees.push(comm);\n //Remove the subcommittee from the list\n committees.splice(i, 1);\n //index is displaced because an element is deleted. This will put it back on track\n i--;\n }\n }\n }\n this.setState({\n memberCommittees: committees,\n memberCommitteesIsLoaded: true\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n this.setState({\n memberCommitteesIsLoaded: true\n })\n })\n }\n\n\n getMemberContact(memberNumber, sessionData) {\n const params = 'sessionID=' + sessionData.SessionID + '&memberNumber=' + memberNumber;\n this.props.actions.getMemberContact(params).then(() => {\n if (this.props.members.memberContactData[0]) {\n const memberData = this.props.members.memberContactData[0];\n const gaAddress = memberData.ContactInformation.filter(contact => contact.ContactType === 'GA');\n const mailingAddress = memberData.ContactInformation.filter(contact => contact.ContactType === 'Mailing');\n const sessionStartObj = sessionData.SessionEvents && sessionData.SessionEvents.length && sessionData.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate).format('MM/DD/YYYY') : '';\n this.setState({\n memberSessionContact: gaAddress,\n memberDistrictContact: mailingAddress,\n memberData: memberData,\n contactIsLoaded: true\n\n });\n this.getPatronTypes(memberData.MemberID, sessionData.SessionID);\n this.getMemberCommittees(memberData.MemberID, startDate);\n this.getMemberConferenceBills(memberData.MemberID, sessionData.SessionID)\n } else {\n throw 'Member data not found';\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n message: err,\n contactIsLoaded: true,\n memberConferenceBillsIsLoaded: true,\n patronRolesIsLoaded: true,\n memberCommitteesIsLoaded: true\n });\n });\n }\n\n getPatronTypes(memberId, sessionId) {\n this.props.actions.getPatronTypes(`?memberID=${memberId}&sessionID=${sessionId}`)\n .then(() => {\n this.setState({\n patronRoles: this.props.patrons.patronTypes,\n patronRolesIsLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n patronRolesIsLoaded: true\n });\n });\n }\n\n getMemberConferenceBills(memberId, sessionId) {\n const params = `?sessionID=${sessionId}&memberID=${memberId}`\n this.props.actions.getMemberConferenceBills(params)\n .then(() => {\n this.setState({\n memberConferenceBills: this.props.members.memberConferenceBills,\n memberConferenceBillsIsLoaded: true\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n memberConferenceBillsIsLoaded: true\n });\n })\n }\n\n // When component has mounted:\n // 1. Get session info, add to state\n // 2. Get member by ID\n // 3. Get committees\n componentDidMount() {\n window.scrollTo(0, 0);\n //Update the session selector component, which will run componentDidUpdate and call setupDoc on its own\n const sessionCode = this.props.match.params.sessioncode\n if (sessionCode) {\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode)\n } else {\n this.setupPage(sessionCode);\n }\n }\n }\n\n setupPage(sessionCode) {\n const memberNumber = this.props.match.params.membernumber\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n this.setState({\n sessionData: this.props.session.selectedSession,\n memberNumber: memberNumber\n });\n this.getMemberContact(memberNumber, this.props.session.selectedSession);\n //If a signed in member is viewing their details page then provide a link to the member status report page.\n const jwt = localStorage.getItem(\"LIS_ID_TOKEN\");\n if (jwt) {\n try {\n const parsedToken = jwtDecode(jwt);\n const mNumber = parsedToken.MemberNumber;\n if (mNumber === memberNumber) {\n this.setState({\n showMemberStatusPageLink: true\n })\n }\n } catch (e) {\n if (Object.getPrototypeOf(e).toString() === 'InvalidTokenError') {\n //Token is malformed..nothing to do\n } else {\n console.error(e);\n }\n }\n }\n });\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/member-information/' + this.props.match.params.membernumber + \"/member-details\");\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n if (this.props.match.params.sessioncode) {\n this.props.actions.changeSession(this.props.match.params.sessioncode);\n }\n } else if (this.props.match.params.membernumber !== prevProps.match.params.membernumber) {\n this.setupPage(this.props.nav.session);\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { sessionData, memberData, memberDistrictContact, memberSessionContact, memberCommittees, memberConferenceBillsIsLoaded, memberConferenceBills } = this.state;\n const sessionContactInfo = sessionData && sessionData.IsActive && memberSessionContact.map((contact, contactIndex) =>\n <React.Fragment key={contactIndex}>\n <p>{contact.Address1}, Room {memberData.RoomNumber}<br />\n {contact.Address2}<br />\n {contact.City}, {contact.StateCode} {contact.ZipCode}<br />\n {contact.ContactType === \"GA\" ? memberData.GABPhoneNumber : contact.PhoneNumber}\n {memberData.GABEmailAddress && memberData.GABEmailAddress.length > 0 &&\n <React.Fragment>\n <h3 style={{ marginTop: \"8px\", paddingLeft: \"0px\" }}>Email Address</h3>\n <a href={`mailto:${memberData.GABEmailAddress}`}>{memberData.GABEmailAddress}</a>\n </React.Fragment>\n }\n </p>\n </React.Fragment>\n );\n //Decision was made to only display the specified contact mailing address here -JGB \n const districtContactInfo = sessionData && sessionData.IsActive && memberData && memberData.ContactInformation.map((contact, contactIndex) =>\n contact.ContactType === \"Mailing\" &&\n <React.Fragment key={contactIndex}>\n <p>\n {contact.Address1}<br />\n {contact.Address2 && <>{contact.Address2}<br /></>}\n {contact.City}, {contact.StateCode} {contact.ZipCode}<br />\n {contact.PhoneNumber}\n </p>\n </React.Fragment>\n );\n return (\n <div className=\"generic-details-page public-details inner-grid\">\n <div>\n <h2 style={{ marginBottom: '10px' }}>{sessionData.SessionYear} {sessionData.DisplayName}</h2>\n </div>\n {this.state.message &&\n <p>{this.state.message}</p>\n }\n {(!this.state.message || this.state.message !== \"Member data not found\") &&\n <React.Fragment>\n {!this.state.contactIsLoaded\n ? <div aria-label=\"Loading\" className=\"spinner\"></div>\n : <div className=\"details-header\">\n <div>\n <h3>{memberData.MemberDisplayName}<span style={{ marginLeft: \"0.5em\" }}>({memberData.PartyCode}) - {memberData.Chamber} District {memberData.DistrictID}</span></h3>\n <div className=\"details-section\">\n {this.state.showMemberStatusPageLink &&\n <a href=\"http://efile.dlas.virginia.gov/frmMemberBD.aspx\">Patron status report</a>\n }\n </div>\n </div>\n <div className=\"list-links\" style={{ padding: '5px 10px' }}>\n <Link to={`/vote-search/${sessionData.SessionCode}/${memberData.MemberNumber}`}>Votes</Link>\n </div>\n </div>\n }\n {!this.state.contactIsLoaded\n ? <div aria-label=\"Loading\" className=\"spinner\"></div>\n : sessionContactInfo.length > 0 && <div className=\"details-section\">\n <h4>In Session Address</h4>\n <React.Fragment>{sessionContactInfo}</React.Fragment>\n </div>\n }\n {!this.state.contactIsLoaded\n ? <div aria-label=\"Loading\" className=\"spinner\"></div>\n : districtContactInfo && districtContactInfo.find(c => c !== false) && <div className=\"details-section\">\n <h4>Mailing Address</h4>\n <React.Fragment>{districtContactInfo}</React.Fragment>\n </div>\n }\n {!this.state.memberCommitteesIsLoaded\n ? <div aria-label=\"Loading\" className=\"spinner\"></div>\n : <div className=\"details-section\">\n <h4>Committee Assignments</h4>\n <CommitteeAssignments session={sessionData.SessionCode} committees={memberCommittees} />\n </div>\n }\n {!this.state.patronRolesIsLoaded\n ? <div aria-label=\"Loading\" className=\"spinner\"></div>\n : <div className=\"details-section\">\n <h4>Sponsored Legislation</h4>\n <PatronRoles\n roles={this.state.patronRoles}\n memberData={this.state.memberData}\n sessionData={sessionData}\n />\n </div>\n }\n {!memberConferenceBillsIsLoaded\n ? <div aria-label=\"Loading\" className=\"spinner\"></div>\n : <div className=\"details-section\" style={{ minHeight: '150px' }}>\n {memberConferenceBills.length !== 0 && <h4>Conference Assignments</h4>}\n {memberConferenceBills.map((bill, billIndex) =>\n <div key={billIndex}>\n {billIndex !== 0 && <hr className=\"faded-line\" />}\n <Link to={`/bill-details/${sessionData.SessionCode}/${bill.LegislationNumber}`}>{bill.LegislationNumber} {bill.Description}</Link>\n </div>\n )}\n </div>\n }\n </React.Fragment>\n }\n </div>\n )\n }\n}\n\nconst PublicMemberDetails = connect(\n (state) => {\n const { members, session, committee, patrons, nav } = state;\n return {\n members,\n session,\n committee,\n patrons,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, memberActionCreators, sessionActionCreators, committeeActionCreators, patronActionCreators, navActionCreators), dispatch)\n }\n }\n)(MemberDetailsComponent)\n\nexport default PublicMemberDetails;\n","import React from 'react';\nimport Select from 'react-select';\n\nconst WATCHLIST_LEGISLATION = \"WATCHLIST_LEGISLATION\";\nconst ALL_LEGISLATION = \"ALL_LEGISLATION\";\n\nclass WatchlistNotifications extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hideNotifications: true,\n newKeywords: [],\n showTooltip: false\n };\n this.toggleNotifications = this.toggleNotifications.bind(this);\n this.handleFrequenyChange = this.handleFrequenyChange.bind(this);\n this.handleMemberChange = this.handleMemberChange.bind(this);\n this.handleCommitteeChange = this.handleCommitteeChange.bind(this);\n this.toggleEditKeywords = this.toggleEditKeywords.bind(this);\n this.handleKeywordChange = this.handleKeywordChange.bind(this);\n this.handleKeywordSave = this.handleKeywordSave.bind(this);\n this.handleCheckboxChange = this.handleCheckboxChange.bind(this);\n this.toggleTooltip = this.toggleTooltip.bind(this);\n }\n\n toggleNotifications() {\n this.setState(state => ({\n hideNotifications: !state.hideNotifications\n }));\n }\n\n toggleTooltip(state) {\n let showTooltip = { ...this.state.showTooltip };\n\n //Close all open tooltips\n if (typeof showTooltip === \"object\") {\n for (const x in showTooltip) {\n if (x !== state)\n showTooltip[x] = false;\n };\n }\n\n showTooltip[state] = showTooltip[state] ? false : true;\n\n this.setState({\n showTooltip: showTooltip\n })\n }\n\n handleFrequenyChange(e) {\n const value = e.target.value;\n let selectedCollection = { ...this.props.selectedCollection };\n selectedCollection.Frequency = value;\n delete selectedCollection.NotificationFrequencyID\n this.props.handleCollectionChange(selectedCollection);\n }\n\n handleMemberChange(val) {\n let selectedCollection = { ...this.props.selectedCollection };\n const criteriaTypeObj = this.props.criteriaTypes.find(type => type.CriteriaType === 'Patron');\n let newCriteria = [];\n selectedCollection.NotificationCriterias.forEach(criteria => {\n if (criteria.CriteriaType !== 'Patron') {\n newCriteria.push(criteria);\n } else {\n const indexOfCriteriaInValue = val.findIndex(v => parseInt(criteria.CriteriaValue) === v.MemberID);\n if (indexOfCriteriaInValue !== -1) {\n // This criteria is in value. Add it to the new criteria array and make sure it is active\n newCriteria.push({ ...criteria, IsActive: true });\n // Remove the value from the val array since it is already added\n val.splice(indexOfCriteriaInValue, 1);\n } else {\n // This criteria is not part of val so make it inactive\n newCriteria.push({ ...criteria, IsActive: false });\n }\n }\n });\n // Anything left in val will be new criterias. Add them to the new criteria array\n val.forEach(v => {\n newCriteria.push({\n CriteriaValue: v.MemberID,\n CriteriaType: \"Patron\",\n CriteriaTypeID: criteriaTypeObj ? criteriaTypeObj.CriteriaTypeID : null,\n IsActive: true\n });\n });\n selectedCollection.NotificationCriterias = newCriteria;\n this.props.handleCollectionChange(selectedCollection);\n }\n\n handleCommitteeChange(val) {\n let selectedCollection = { ...this.props.selectedCollection };\n const criteriaTypeObj = this.props.criteriaTypes.find(type => type.CriteriaType === 'Committee');\n let newCriteria = [];\n selectedCollection.NotificationCriterias.forEach(criteria => {\n if (criteria.CriteriaType !== 'Committee') {\n newCriteria.push(criteria);\n } else {\n const indexOfCriteriaInValue = val.findIndex(v => parseInt(criteria.CriteriaValue) === v.CommitteeID);\n if (indexOfCriteriaInValue !== -1) {\n // This criteria is in value. Add it to the new criteria array and make sure it is active\n newCriteria.push({ ...criteria, IsActive: true });\n // Remove the value from the val array since it is already added\n val.splice(indexOfCriteriaInValue, 1);\n } else {\n // This criteria is not part of val so make it inactive\n newCriteria.push({ ...criteria, IsActive: false });\n }\n }\n });\n // Anything left in val will be new criterias. Add them to the new criteria array\n val.forEach(v => {\n newCriteria.push({\n CriteriaValue: v.CommitteeID,\n CriteriaType: \"Committee\",\n CriteriaTypeID: criteriaTypeObj ? criteriaTypeObj.CriteriaTypeID : null,\n IsActive: true\n });\n });\n selectedCollection.NotificationCriterias = newCriteria;\n this.props.handleCollectionChange(selectedCollection);\n }\n\n toggleEditKeywords() {\n let keywordCriteria = this.props.selectedCollection.NotificationCriterias.filter(criteria => criteria.IsActive && criteria.CriteriaType === 'Keyword');\n // Make sure there are at least one keyword so the input appears\n if (keywordCriteria.length === 0) {\n const criteriaTypeObj = this.props.criteriaTypes.find(type => type.CriteriaType === 'Keyword')\n keywordCriteria.push({\n CriteriaType: 'Keyword',\n CriteriaTypeID: criteriaTypeObj ? criteriaTypeObj.CriteriaTypeID : null,\n CriteriaValue: '',\n IsActive: true\n });\n }\n this.setState(state => ({\n newKeywords: keywordCriteria,\n showKeywordEditor: !state.showKeywordEditor\n }));\n }\n\n handleKeywordChange(e, index) {\n const val = e.target.value;\n let newKeywords = [...this.state.newKeywords];\n newKeywords[index].CriteriaValue = val\n this.setState({\n keywordCriteria: newKeywords\n })\n }\n\n handleKeywordSave(isDelete) {\n let selectedCollection = { ...this.props.selectedCollection };\n let newKeywords = [...this.state.newKeywords];\n selectedCollection.NotificationCriterias.forEach(criteria => {\n if (criteria.CriteriaType === \"Keyword\") {\n const criteriaToUseIndex = newKeywords.findIndex(kc => kc.CriteriaTypeID === criteria.CriteriaTypeID)\n if (criteriaToUseIndex !== -1) {\n criteria.IsActive = true;\n criteria.CriteriaValue = newKeywords[criteriaToUseIndex].CriteriaValue;\n newKeywords.splice(criteriaToUseIndex, 1);\n }\n if (isDelete || !criteria.CriteriaValue || !criteria.CriteriaValue.trim()) {\n criteria.IsActive = false;\n }\n }\n });\n if (newKeywords.filter(nk => nk.IsActive).length > 0) {\n // If there are some left over then these don't have IDs and need to be created\n selectedCollection.NotificationCriterias = selectedCollection.NotificationCriterias.concat(newKeywords.filter(nk => nk.IsActive));\n }\n this.props.handleCollectionChange(selectedCollection, () => {\n this.setState({\n showKeywordEditor: false\n })\n });\n\n }\n\n handleCheckboxChange(criteriaType) {\n let selectedCollection = { ...this.props.selectedCollection };\n let criteriaIndices = [];\n // Since notificaion criteria is an array the entire array needs to be checked to see if any of the criteria type exist\n this.props.selectedCollection.NotificationCriterias.forEach((criteria, criteriaIndex) => {\n if (criteria.CriteriaType === criteriaType) {\n criteriaIndices.push(criteriaIndex);\n // If it exists then it needs to be 'checked' or 'unchecked' by setting isActive\n selectedCollection.NotificationCriterias[criteriaIndex].IsActive = !selectedCollection.NotificationCriterias[criteriaIndex].IsActive;\n }\n });\n //If none were found then add one to make the box checked\n if (criteriaIndices.length === 0) {\n const criteriaTypeObj = this.props.criteriaTypes.find(type => type.CriteriaType === criteriaType)\n selectedCollection.NotificationCriterias.push({\n CriteriaType: criteriaType,\n CriteriaTypeID: criteriaTypeObj ? criteriaTypeObj.CriteriaTypeID : null,\n IsActive: true\n });\n }\n this.props.handleCollectionChange(selectedCollection);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.selectedCollection.WatchListID !== prevProps.selectedCollection.WatchListID) {\n this.setState({\n newKeywords: []\n })\n }\n }\n\n render() {\n const { selectedCollection, memberList, committeeList, collectionIsSaving } = this.props;\n const { hideNotifications, newKeywords, showKeywordEditor } = this.state;\n\n if (!selectedCollection) {\n return false;\n }\n\n const houseMembers = memberList.filter(member => member.ChamberCode === \"H\");\n const senateMembers = memberList.filter(member => member.ChamberCode === \"S\");\n const houseCommittees = committeeList.filter(committee => committee.ChamberCode === \"H\");\n const senateCommittees = committeeList.filter(committee => committee.ChamberCode === \"S\");\n\n const selectedHousePatrons = houseMembers.filter(member => selectedCollection.NotificationCriterias.find(criteria => criteria.IsActive && criteria.CriteriaType === \"Patron\" && parseInt(criteria.CriteriaValue) === member.MemberID))\n const selectedSenatePatrons = senateMembers.filter(member => selectedCollection.NotificationCriterias.find(criteria => criteria.IsActive && criteria.CriteriaType === \"Patron\" && parseInt(criteria.CriteriaValue) === member.MemberID))\n const selectedHouseCommittees = houseCommittees.flatMap(x => x.options || x).filter(committee => selectedCollection.NotificationCriterias.find(criteria => criteria.IsActive && criteria.CriteriaType === \"Committee\" && parseInt(criteria.CriteriaValue) === committee.CommitteeID))\n const selectedSenateCommittees = senateCommittees.flatMap(x => x.options || x).filter(committee => selectedCollection.NotificationCriterias.find(criteria => criteria.IsActive && criteria.CriteriaType === \"Committee\" && parseInt(criteria.CriteriaValue) === committee.CommitteeID))\n\n const getSelectedCommitteesLabel = (val) => {\n let newCmte = JSON.parse(JSON.stringify(val)); //don't modify existing committee values stored at state level & used in dropdown\n newCmte.forEach(cmte => {\n cmte.label = '(' + cmte.ChamberCode + ') ' + cmte.label;\n });\n return newCmte;\n }\n\n let statusChangeCheck = false;\n let docketCheck = false;\n let versionCheck = false;\n let impactStatementCheck = false;\n let keywords = [];\n let introducedCheck = false;\n selectedCollection.NotificationCriterias.forEach(criteria => {\n if (!criteria.IsActive) {\n return;\n }\n switch (criteria.CriteriaType) {\n case (\"Status Change\"):\n statusChangeCheck = true;\n break;\n case (\"Docket/Agenda\"):\n docketCheck = true;\n break;\n case (\"New Version\"):\n versionCheck = true;\n break;\n case (\"Impact Statement\"):\n impactStatementCheck = true;\n break;\n case (\"Keyword\"):\n keywords.push(criteria);\n break;\n case (\"Introduced\"):\n introducedCheck = true;\n break;\n }\n });\n return (\n <div className=\"collection-notification-box dlas-forms user-forms\">\n <div className=\"flex-row notification-first-section\">\n <span className=\"txt-lighter-blue\">Notifications</span>\n <button aria-expanded={!hideNotifications} onClick={this.toggleNotifications} className={`${hideNotifications ? \"arrow-down\" : \"arrow-up\"} light-blue-chevron`}></button>\n </div>\n {!hideNotifications &&\n <div>\n <div className=\"notification-section flex-row flex-start inline-list flex-vertical-center\">\n <div>Notification frequency</div>\n <div className=\"flex-vertical-center flex-row\">\n <label htmlFor=\"sr-frequency-hourly\">Hourly</label>\n <input id=\"sr-frequency-hourly\" disabled={collectionIsSaving} value=\"Hourly\" onChange={this.handleFrequenyChange} checked={selectedCollection.Frequency === \"Hourly\"} name=\"notifcation-frequency\" type=\"radio\" />\n </div>\n <div className=\"flex-vertical-center flex-row\">\n <label htmlFor=\"sr-frequency-daily\">Daily</label>\n <input id=\"sr-frequency-daily\" disabled={collectionIsSaving} value=\"Daily\" onChange={this.handleFrequenyChange} checked={selectedCollection.Frequency === \"Daily\"} name=\"notifcation-frequency\" type=\"radio\" />\n </div>\n <div className=\"flex-vertical-center flex-row\">\n <label htmlFor=\"sr-frequency-none\">None</label>\n <input id=\"sr-frequency-none\" disabled={collectionIsSaving} value=\"None\" onChange={this.handleFrequenyChange} checked={selectedCollection.Frequency === \"None\" || !selectedCollection.Frequency} name=\"notifcation-frequency\" type=\"radio\" />\n </div>\n </div>\n <hr className=\"faded-line full-width\" />\n <div className=\"no-gap-grid two\">\n <div className=\"notification-section\">\n <strong className=\"txt-lighter-blue\">My Watchlist Legislation</strong>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(WATCHLIST_LEGISLATION) }} className=\"button info\">Info</a>\n {this.state.showTooltip[WATCHLIST_LEGISLATION] &&\n <div className=\"info-box notification-tooltip\">\n <p><b>Status Change</b>{\": Legislation receives one or more notable events that trigger a status change. Ex: In Committee, Passed, Failed, etc. - this DOES NOT include notice of when a bill you are tracking is placed on a docket or agenda, has a new text version or has a new impact statement. - Use those options below to be notified for each.\"}</p>\n <p><b>Placed on Docket/Agenda</b>{\": Legislation is placed on a Senate committee docket or House committee agenda.\"}</p>\n <p><b>New text versions</b>{\": Legislation receives a new version such as Substitute, Engrossed, Enrolled, etc. *excludes amendments and Governor's text.\"}</p>\n <p><b>Impact Statements</b>{\": Legislation receives a new impact statement.\"}</p>\n </div>\n }\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleCheckboxChange(\"Status Change\")}>\n <input id=\"sr-status-change\" disabled={collectionIsSaving} checked={statusChangeCheck} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-status-change\" className=\"checkbox-label\" >Notify me when a bill in this watchlist has any status change.</label>\n </div>\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleCheckboxChange(\"Docket/Agenda\")}>\n <input id=\"sr-docket\" disabled={collectionIsSaving} checked={docketCheck} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-docket\" className=\"checkbox-label\">Notify me when a bill in this watchlist appears on a docket/agenda.</label>\n </div>\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleCheckboxChange(\"New Version\")}>\n <input id=\"sr-new-version\" disabled={collectionIsSaving} checked={versionCheck} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-new-version\" className=\"checkbox-label\">Notify me when a bill in this watchlist has new text versions.</label>\n </div>\n\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleCheckboxChange(\"Impact Statement\")}>\n <input id=\"sr-impact-statement\" disabled={collectionIsSaving} checked={impactStatementCheck} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-impact-statement\" className=\"checkbox-label\">Notify me when a bill in this watchlist has impact statements.</label>\n </div>\n </div>\n <div className=\"notification-section\">\n <strong className=\"txt-lighter-blue\">All Legislation</strong>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip(ALL_LEGISLATION) }} className=\"button info\">Info</a>\n {this.state.showTooltip[ALL_LEGISLATION] &&\n <div className=\"info-box notification-tooltip all-legislation\">\n <p><b>Any new bill introduced</b>{\": All bills, joints, and resolutions introduced by House or Senate.\"}</p>\n <p><b>Any bill offered by patron</b>{\": Legislation introduced by a particular patron as Chief Patron.\"}</p>\n <p><b>Any bill with keyword phrase</b>{\": Legislation contains a particular keyword or keyword phrase in any version text available.\"}</p>\n <p><b>Any bill referred to a committee</b>{\": Legislation referred, rereferred, and/or recommitted to a particular committee.\"}</p>\n </div>\n }\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.handleCheckboxChange(\"Introduced\")}>\n <input id=\"sr-introduced\" disabled={collectionIsSaving} checked={introducedCheck} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"sr-introduced\" className=\"checkbox-label\">Notify me when <strong>any</strong> new bill is introduced.</label>\n </div>\n <br />\n <div>\n <label>Notify me when <strong>any</strong> new bill is offered by a patron.</label>\n <div className=\"inner-grid\" style={{ gap: '5px' }}>\n <Select\n aria-label=\"House Members\"\n id=\"sr-patron-house\"\n isDisabled={collectionIsSaving}\n placeholder=\"House Members\"\n options={houseMembers}\n value={selectedHousePatrons}\n getOptionLabel={opt => opt.ListDisplayName}\n //The senate patrons needs to be concatenated because the list is split in two to accomadate the design of two seperate dropdowns\n onChange={val => this.handleMemberChange((val || []).concat(selectedSenatePatrons))}\n styles={selectStyle}\n isMulti />\n <Select\n aria-label=\"Senate Members\"\n id=\"sr-patron-senate\"\n isDisabled={collectionIsSaving}\n placeholder=\"Senate Members\"\n options={senateMembers}\n value={selectedSenatePatrons}\n onChange={val => this.handleMemberChange((val || []).concat(selectedHousePatrons))}\n styles={selectStyle}\n getOptionLabel={opt => opt.ListDisplayName}\n isMulti />\n </div>\n </div>\n <br />\n <div>\n <label id=\"sr-keyword-label\">Notify me when <strong>any</strong> new introduced, engrossed, enrolled, chaptered, or substitute legislation is offered with a keyword phrase.</label>\n {showKeywordEditor ?\n <div className=\"flex-row flex-vertical-center\">\n {newKeywords.map((keyword, keywordIndex) =>\n <input\n aria-label=\"Enter phrase\"\n key={keywordIndex}\n disabled={collectionIsSaving}\n type=\"text\"\n value={keyword.CriteriaValue}\n onChange={e => this.handleKeywordChange(e, keywordIndex)}\n placeholder=\"Enter phrase\" />\n )}\n <div>\n {collectionIsSaving ?\n <div className=\"small-spinner\"></div>\n :\n <div className=\"inline-list\">\n <span role=\"button\" aria-label=\"save\" onClick={() => this.handleKeywordSave(false)} className=\"icon save\"></span>\n <span role=\"button\" aria-label=\"cancel\" onClick={this.toggleEditKeywords} className=\"icon delete\"></span>\n </div>\n }\n </div>\n </div>\n :\n <div>\n {keywords.map((keyword, keywordIndex) =>\n <div className=\"bold\" key={keywordIndex}>\n <span>{keyword.CriteriaValue}</span>\n <span role=\"button\" aria-label=\"delete\" onClick={() => this.handleKeywordSave(true)} style={{ marginLeft: '5px', verticalAlign: 'text-bottom' }} className=\"icon delete\"></span>\n </div>\n )}\n <button onClick={() => !this.props.collectionIsSaving && this.toggleEditKeywords()} className=\"button-link\" type=\"button\">Edit keywords</button>\n </div>\n }\n </div>\n <br />\n <div>\n <label>Notify me when <strong>any</strong> bill is referred to a committee.</label>\n <div className=\"inner-grid\" style={{ gap: '5px' }}>\n <Select\n aria-label=\"House Committees\"\n isDisabled={collectionIsSaving}\n placeholder=\"House Committees\"\n options={houseCommittees}\n value={getSelectedCommitteesLabel(selectedHouseCommittees)}\n onChange={val => this.handleCommitteeChange((val || []).concat(selectedSenateCommittees))}\n styles={selectStyle}\n isMulti />\n <Select\n aria-label=\"Senate Committees\"\n isDisabled={collectionIsSaving}\n placeholder=\"Senate Committees\"\n options={senateCommittees}\n value={getSelectedCommitteesLabel(selectedSenateCommittees)}\n onChange={val => this.handleCommitteeChange((val || []).concat(selectedHouseCommittees))}\n styles={selectStyle}\n isMulti />\n </div>\n </div>\n </div>\n </div>\n </div>}\n </div>);\n }\n\n}\n\nconst selectStyle = {\n menuList: (base, state) => ({\n ...base,\n paddingTop: '0px',\n }),\n group: (base, state) => ({\n ...base,\n paddingTop: '0px',\n }),\n groupHeading: (base, state) => ({\n ...base,\n paddingTop: '7px',\n paddingBottom: '7px',\n marginBottom: '0px',\n position: 'sticky',\n top: '0px',\n backgroundColor: 'hsl(0,0%,100%)'\n }),\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: '0.8em',\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n option: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n dropdownIndicator: styles => ({\n ...styles,\n padding: '1px'\n }),\n}\n\nexport default WatchlistNotifications;","import React from 'react';\n\nconst HelpPage = () => {\n return (\n <div className=\"long-paragraph-text\">\n <div>\n <h2 className=\"txt-dark-blue\">Single Search Word</h2>\n <p>Example using Single Word: distilled</p>\n <p>A single search word is the simplest of all search statement constructions. For a document to qualify for the search, it must contain an occurrence of the exact character string specified as the search word. For example; the search word \"distilled\" only retrieves the documents that contain occurrences of the word \"distilled\". The words \"distill\" and \"distillery\", for example, do not qualify. </p>\n </div>\n <div>\n <h2 className=\"txt-dark-blue\">Phrase Search</h2>\n <p>Phrase example: 'state child fatality review team'</p>\n <p>A search phrase is constructed of two or more search words. To perform a phrase search, surround the phrase with single or double quotes.</p>\n </div>\n <div>\n <h2 className=\"txt-dark-blue\">Logic Conditions</h2>\n <p>Search statements can be entered using any of three logic conditions: \"and\", \"or\", and \"and not\". Use of a logic condition requires two search statements. For example: \"A or B\", or \"A and (B or C)\". The logic conditions must be positioned between two search words or statements.</p>\n <p>When you use \"and\" in your search statement (example: \"A and B\"), all documents that contain references of both A and B are displayed. Documents containing references of only A or only B will not qualify.</p>\n <p>When you use \"or\" in your search statement (example: \"A or B\"), all documents with references of either A or B will display. Unlike \"and\" it is not necessary for both statements to be present in a document for it to qualify, but documents containing both \"A and B\" will also qualify.</p>\n <p>When you use \"and not\" in your search statement (\"A and not B\"), documents must first contain references of A. Of the documents containing A, only those without references of B will qualify.</p>\n <p>With \"and\" or \"or\" the order of the statements will not affect the outcome of the search. When using \"and not\", the results of the search depend on the order of the statements. Compound search statements (those with more than one logic condition) can also be read several ways.</p>\n <p>Search statements are normally read from left to right. Simple statements such as the example \"A or B\" will not be misinterpreted. When additional logic conditions are added, the order and groupings of the statements may be defined with parentheses. </p>\n </div>\n <div>\n <h2 className=\"txt-dark-blue\">Parentheses</h2>\n <p>Parentheses can be used to affect the order in which the statement is read. The examples below show how the placement of the parentheses can change the intent of the statement:</p>\n <p> 1 ==> (A or B) and C:</p>\n <p>This statement reads: Display all documents containing references of either A or B that also contain references of C.</p>\n <p> 2 ==> A or (B and C):</p>\n <p>This statement is the same as the one above. Only the placement of the parentheses is changed. The statement reads: Display documents with either references of both B and C or the documents with references of A.</p>\n <p>If additional parentheses are used, the statement contained in the deepest set of parentheses is resolved first. For example in \"D and (B or (A and C))\", \"A and C\" is resolved first, despite its rightmost position in the statement.</p>\n <p>Logic conditions can be combined with any kind of search words or search phrases to create a search statement as broad or specific as you desire. </p>\n </div>\n </div>\n );\n}\n\nexport default HelpPage;","import { useState } from 'react';\n\nconst QuickAdd = props => {\n const [addBill, handleAddBillChange] = useState('')\n const [isAddingBill, toggleIsAddingBill] = useState(false)\n const quickAddBills = () => {\n if (!addBill.replace(/\\s/g), \"\") {\n return;\n }\n toggleIsAddingBill(true);\n props.quickAddBills(addBill, err => {\n toggleIsAddingBill(false);\n if (!err) { handleAddBillChange('') };\n });\n }\n\n return (\n <>\n <div className=\"quick-add-container\" style={{ marginRight: \"0px\" }}>\n {props.quickAddErr &&\n <span className=\"small-text fail\" style={{ paddingRight: '5px' }}>{props.quickAddErr}</span>\n }\n <label className=\"screen-reader-only\" htmlFor=\"bill-quick-add\">Bill quick add</label>\n <input\n id=\"bill-quick-add\"\n type=\"text\"\n onKeyDown={e => {\n if (e.key === \"Enter\") {\n e.stopPropagation();\n quickAddBills()\n }\n }}\n autoFocus={props.autoFocus}\n placeholder=\"Bill quick add\"\n value={addBill}\n onChange={e => handleAddBillChange(e.target.value)}\n />\n {isAddingBill ?\n <span className=\"small-spinner\"></span>\n :\n <button style={{ marginLeft: \"7px\" }} type=\"button\" disabled={props.collectionIsSaving} onClick={quickAddBills} id=\"bill-quick-add-button\" className=\"small-button button\">Add</button>\n }\n </div>\n </>\n );\n}\n\nexport default QuickAdd;\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { patronActionCreators } from '../../../stores/lis-patron-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport AdvancedSearchBox from '../../../lis-shared/lis-search/lis-advanced-search-box';\nimport moment from 'moment-timezone';\nimport queryString from 'query-string';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport BillCategories from '../../../lis-shared/lis-search/lis-search-categories';\nimport SearchSelections from '../../../lis-shared/lis-search/lis-search-selections';\nimport LegislationWatchlists from '../../../lis-shared/lis-search/lis-legislation-watchlists';\nimport WatchlistNotifications from '../../../lis-shared/lis-search/lis-watchlist-notifications';\nimport CollectionControls from '../../../lis-shared/lis-search/lis-collection-controls'\nimport { cancelRequest } from '../../../services/request.service';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport ReportMaker from './lis-report-maker';\nimport BillInfoComponent from '../../../lis-shared/lis-search/lis-bill-info';\nimport SearchHelp from './lis-search-help';\nimport QuickAdd from './quick-add-bills';\nimport { reportActionCreators } from '../../../stores/lis-report-store';\n\nconst BILL_COLLECTION_AUTHOR = \"LegislationCollections\";\nconst PageSize = 50;\n\nconst sortLegislations = (a, b) => {\n if (a.LegislationNumber[0] !== b.LegislationNumber[0]) {\n return a.LegislationNumber[0].localeCompare(b.LegislationNumber[0]);\n } else if (a.LegislationNumber[1] !== b.LegislationNumber[1]) {\n return a.LegislationNumber[1].localeCompare(b.LegislationNumber[1]);\n } else {\n const aLegislationKey = a.LegislationNumber.substr(2);\n const bLegislationKey = b.LegislationNumber.substr(2);\n return parseInt(aLegislationKey - bLegislationKey);\n }\n}\n\nconst validLegPrefixes = [\"HB\", \"SB\", \"HJ\", \"SJ\", \"HR\", \"SR\"];\n\nclass BillSearchComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCategories: false,\n billList: [],\n billStatusCategoryList: [],\n billStatusCategoryListIsLoading: true,\n billEventOptions: [],\n selectedBillEvent: '',\n selectedBill: '',\n selectedKeywords: '',\n searchedKeywords: '',\n selectedBillAction: '',\n billEventStartDate: null,\n billEventEndDate: null,\n selectedBillSession: '',\n selectedBillType: '',\n previousSearch: '',\n searchType: { value: 'all', label: 'All' },\n selectedChamber: '',\n patronList: [],\n patronRoles: [],\n selectedBillNumbers: '',\n selectedBillRangeBeginning: '',\n selectedBillRangeEnd: '',\n selectedChapterNumber: '',\n filteredPatronList: [],\n selectedPatron: '',\n selectedPatronType: [],\n selectedBillStatusCategory: '',\n sessionOptions: [],\n billStatusStartDate: null,\n billStatusEndDate: null,\n committeeList: [],\n groupedCommitteeList: [],\n filteredCommitteeList: [],\n selectedCommittee: '',\n selectedSubcommittee: '',\n subcommitteeList: [],\n subjectList: [],\n selectedSubject: '',\n introDateList: [],\n collections: [],\n selectedCollection: '',\n selectedCollectionIndex: -1,\n billVersionList: [],\n selectedBillVersion: 'All',\n billSummaryList: [],\n selectedSummaryVersion: 'All',\n selectedLocation: 'Caption',\n criteriaTypes: [],\n checkedBills: [],\n lastCheckedBill: -1,\n showAllNotes: false,\n selectAllBills: false,\n collectionIsSaving: false,\n keywordUseGlobalSessionSearch: false,\n displayCrossSession: false,\n currentStatus: true,\n excludeFailed: false,\n autoReport: false,\n showSidebar: true,\n height: 1,\n showModal: false,\n introductionDate: null,\n showHelpModal: false,\n showUpdateSearchButton: false,\n compositeView: false\n };\n this.searchOnEnterPress = this.searchOnEnterPress.bind(this);\n this.toggleGroup = this.toggleGroup.bind(this);\n this.toggleShowCategories = this.toggleShowCategories.bind(this);\n this.clearForm = this.clearForm.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleSearch = this.handleSearch.bind(this);\n this.getBillsResults = this.getBillsResults.bind(this);\n this.chamberChange = this.chamberChange.bind(this);\n this.sessionChange = this.sessionChange.bind(this);\n this.committeeChange = this.committeeChange.bind(this);\n this.handlePatronChange = this.handlePatronChange.bind(this);\n this.handlePatronTypeChange = this.handlePatronTypeChange.bind(this);\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleSelectionClear = this.handleSelectionClear.bind(this);\n this.handleMultiSelectionClear = this.handleMultiSelectionClear.bind(this);\n this.handleRadioChange = this.handleRadioChange.bind(this);\n this.getCollections = this.getCollections.bind(this);\n this.selectCollection = this.selectCollection.bind(this);\n this.handleCollectionChange = this.handleCollectionChange.bind(this);\n this.createCollection = this.createCollection.bind(this);\n this.deleteCollection = this.deleteCollection.bind(this);\n this.addToWatchlists = this.addToWatchlists.bind(this);\n this.removeWatchlistBills = this.removeWatchlistBills.bind(this);\n this.toggleReportMaker = this.toggleReportMaker.bind(this);\n this.toggleAllBills = this.toggleAllBills.bind(this);\n this.handleBillCheckbox = this.handleBillCheckbox.bind(this);\n this.quickAddBills = this.quickAddBills.bind(this);\n this.toggleAllNotes = this.toggleAllNotes.bind(this);\n this.handleCurrentStatusChange = this.handleCurrentStatusChange.bind(this);\n this.handleExcludeFailedChange = this.handleExcludeFailedChange.bind(this);\n this.unload = this.unload.bind(this);\n this.toggleSidebar = this.toggleSidebar.bind(this);\n this.getSessions = this.getSessions.bind(this);\n this.toggleShowData = this.toggleShowData.bind(this);\n this.executeSearch = this.executeSearch.bind(this);\n this.toggleModal = this.toggleModal.bind(this);\n this.toggleHelpModal = this.toggleHelpModal.bind(this);\n this.getReportTitle = this.getReportTitle.bind(this);\n this.handleToggleCompositeView = this.handleToggleCompositeView.bind(this);\n\n // The div that sorrounds the page is in this component but the function that needs to run to be able to make a search is in the child component.\n // This ref is used to call the child component's function.\n this.searchBox = React.createRef();\n this._billResultRefs = [];\n }\n\n componentDidMount() {\n // IF A SEARCH QUERY EXISTS\n let queryObj = '';\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n queryObj = JSON.parse(decodedSearch);\n this.setState(state => ({\n ...state,\n ...queryObj\n }), () => {\n if (!parsed.autoReport) {\n this.getSessions(queryObj);\n } else {\n this.getSessions(null, parsed.autoReport == 1);\n }\n });\n } else {\n this.getSessions(null, parsed.autoReport == 1);\n }\n this.getBillStatusCategoryOptions();\n this.getBillVersionOptions();\n this.getBillSummaryOptions();\n this.getBillEventOptions();\n this.getPatronRoles();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.props.location.search !== prevProps.location.search) {\n this.executeSearch();\n }\n if (this.props.nav.session !== prevProps.nav.session) {\n if (!isNaN(parseInt(this.props.nav.session))) {\n this.sessionChange(this.props.nav.session);\n }\n }\n\n //get collections if user logs in/logged in user changes\n if (this.props.login.userProfile.email && this.props.login.userProfile.email !== prevProps.login.userProfile.email) {\n if (this.state.selectedSession.SessionID && this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR)) {\n this.getCollections(\"?SessionID=\" + this.state.selectedSession.SessionID);\n } else if (this.state.collections && this.state.collections.length) {\n this.setState({ collections: [] })\n }\n }\n\n if (this.state.billList !== prevState.billList || this.state.showCategories !== prevState.showCategories) {\n if (window.innerWidth > 900) { //breaks mobile otherwise, and the sidebar toggle isn't shown on mobile anyways\n let height = document.getElementById('results-div');\n if (height && (height.scrollHeight / 540) !== this.state.height) {\n this.setState({\n height: (height.scrollHeight / 540) >= 1 ? (height.scrollHeight / 540) : 1\n })\n } else {\n this.setState({\n height: 1\n })\n }\n }\n }\n }\n\n executeSearch() {\n let queryObj = '';\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n queryObj = JSON.parse(decodedSearch);\n //Remove any existing entries in the form and replace it with the content of the url\n this.clearForm();\n this.setState(state => ({\n ...state,\n ...queryObj\n }), () => {\n //If a member is already selected and there are no patron types selected then select them all by default for senators and all but sponsor and incorporated for delegates \n if (this.state.selectedPatron && this.state.selectedPatronType.length === 0) {\n const patronRoles = [];\n this.state.patronRoles.filter(x => x.PatronTypeID !== 3 && x.PatronTypeID !== 5).forEach(role => patronRoles.push(role.PatronTypeID));\n this.setState({\n selectedPatronType: patronRoles\n });\n }\n //If a committee is already selected and there is no legislation status then select 'In Committee' as the status\n if (this.state.selectedCommittee && !this.state.selectedBillStatusCategory) {\n const selectedBillStatusCategory = this.state.billStatusCategoryList.find(status => status.Name === 'In Committee');\n this.setState({\n selectedBillStatusCategory: selectedBillStatusCategory ? selectedBillStatusCategory.LegislationCategoryID : ''\n });\n }\n this.getSessions(queryObj);\n });\n } else if (!parsed.collection) {\n //this means the user hit the back button from a query and there are no longer any params in the url, \n //and the user should be back at the base search page with categories\n this.clearForm(true);\n }\n }\n\n getSessions(queryObj, autoReport) {\n let sessions = ''\n if (!this.state.sessionOptions.length) {\n sessions = this.props.actions.getSessionList()\n .then(() => {\n this.setState({\n sessionOptions: this.props.session.sessionList\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n } else {\n sessions = () => Promise.resolve();\n }\n\n Promise.all([sessions]).then(() => {\n let selectedSession = '';\n let defaultSession = '';\n this.state.sessionOptions.forEach(session => {\n if (queryObj && session.SessionID === queryObj.selectedSession) {\n selectedSession = session;\n this.props.actions.changeSession(session.SessionCode);\n } else if (session.SessionCode === this.props.nav.session && !selectedSession) {\n selectedSession = session;\n }\n if (session.IsDefault) {\n defaultSession = session;\n }\n });\n //Only set the session to default if the queryObj doesn't have a sessionID and the the session selector doesn't have a sessionID\n if (!selectedSession) {\n selectedSession = defaultSession;\n }\n\n if (selectedSession) {\n const sessionStartObj = selectedSession.SessionEvents && selectedSession.SessionEvents.length && selectedSession.SessionEvents.find(date => date.DisplayName === \"Session Start\");\n const startDate = sessionStartObj ? moment(sessionStartObj.ActualDate).format(\"MM/DD/YYYY\") : '';\n const dateParam = 'effectiveDate=' + encodeURIComponent(startDate);\n const sessionParam = 'sessionID=' + selectedSession.SessionID;\n this.getPatrons(sessionParam);\n this.getSubjects(sessionParam);\n this.getCommittees(sessionParam);\n this.getIntroDates(sessionParam)\n\n this.setState({ selectedSession }, () => {\n if (this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR)) {\n this.getCollections(\"?SessionID=\" + this.state.selectedSession.SessionID);\n if (autoReport) {\n window.addEventListener(\"beforeunload\", this.unload);\n this.toggleReportMaker();\n this.setState({\n autoReport: true\n })\n }\n }\n if (queryObj && !queryObj.sessionOnly) {\n this.setState({ billList: [], fullLegislationList: [], skippedRecords: 0 }, () => {\n this.handleSearch()\n })\n } else {\n this.setState({ showCategories: true })\n }\n\n document.querySelector('body').addEventListener('keydown', this.searchOnEnterPress);\n })\n } else {\n this.setState({ failedToGetSessions: true })\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n componentWillUnmount() {\n document.querySelector('body').removeEventListener('keydown', this.searchOnEnterPress);\n cancelRequest();\n //Handle leaving the page when we arrived here from the Create Report button in the calendar \n if (this.state.autoReport && this.state.selectedCollection != '' && this.state.showReportMaker) {\n window.removeEventListener(\"beforeunload\", this.unload);\n }\n }\n\n searchOnEnterPress(event) {\n if (event.key === 'Enter' && !this.state.isFetching) {\n //Pressing enter while on a react-select will select an option. A search should not happen because of that.\n if (!event.target.id.includes('react-select') && !event.target.className.includes('note-area') && !event.target.className.includes('quick-search') && event.target.id !== \"userId\" && event.target.id !== \"userPassword\" && event.target.id !== \"report-personal-message\") {\n if (!this.state.selectedChamber && !this.state.selectedBillEvent && !this.state.selectedBillType && !this.state.selectedCommittee && !this.state.selectedSubcommittee && !this.state.selectedPatron && !this.state.selectedSubject && !this.state.selectedKeywords && !this.state.selectedBillNumbers && !this.state.selectedBillRangeBeginning && !this.state.selectedBillRangeEnd && !this.state.selectedSubject && !this.state.selectedChapterNumber && !this.state.selectedBillStatusCategory) {\n //there are not any search parameters provided, don't execute a search\n return;\n }\n this.searchBox.current.handleSubmit();\n }\n }\n }\n\n toggleShowCategories(val) {\n this.setState({\n showCategories: val\n }, () => {\n if (this.state.showCategories) {\n this.props.history.push(\"/bill-search\");\n }\n });\n }\n\n toggleGroup(groupName) {\n this.setState(state => ({\n [groupName]: !state[groupName]\n }));\n }\n\n toggleShowData(billID, bool) {\n if (bool === undefined) {\n this.setState(prevState => ({\n [billID]: !prevState[billID]\n }));\n } else {\n //not just toggling, we're explicitly setting (e.g. if searching by keyword, and a bill has been expanded, if the keyword search location changes to bill text,\n //don't just toggle all (which would reset that bill to false), set them all to true)\n this.setState({\n [billID]: bool\n })\n }\n }\n\n clearForm(clearUrl, clearBillData) {\n this.setState({\n selectedBillEvent: '',\n selectedBill: '',\n selectedKeywords: '',\n searchedKeywords: '',\n selectedBillAction: '',\n billEventStartDate: null,\n billEventEndDate: null,\n selectedBillSession: '',\n selectedBillType: '',\n selectedBillNumbers: '',\n selectedBillRangeBeginning: '',\n selectedBillRangeEnd: '',\n selectedChapterNumber: '',\n subcommitteeList: [],\n selectedPatron: '',\n selectedPatronType: '',\n selectedChamber: '',\n selectedBillStatusCategory: '',\n billStatusStartDate: null,\n billStatusEndDate: null,\n selectedCommittee: '',\n selectedSubcommittee: '',\n selectedSubject: '',\n isPending: null,\n mostFrequent: null,\n allLegislation: null,\n excludeFailed: false,\n selectedBillVersion: 'All',\n selectedSummaryVersion: 'All',\n selectedLocation: 'Caption',\n displaySelectedLocation: \"Caption\",\n introductionDate: null\n }, () => {\n if (clearUrl) {\n this.props.history.push('/bill-search');\n this.setState({ billList: [], fullLegislationList: [], skippedRecords: 0, showCategories: true })\n }\n if (clearBillData) {\n this.setState({\n billList: []\n })\n }\n });\n\n }\n\n handleSubmit(queryObj) {\n let encodedSearch = window.btoa(JSON.stringify(queryObj));\n //if it is the same search (i.e. same parameters) as the current one, updating the url won't work since it will be the same, just execute it manually\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q && parsed.q === encodedSearch) {\n this.executeSearch();\n } else {\n this.props.history.push('/bill-search?q=' + encodedSearch + (this.state.selectedCollection ? '&collection=' + this.state.selectedCollection.WatchListID : ''));\n }\n }\n\n handleSearch(skipIdsCall) {\n if (this.state.failedToGetSessions) { return; }\n //Format the selected options to be sent to the API\n //Add bill range to list of bills\n let selectedBillNumbers = this.state.selectedBillNumbers.trim();\n if (this.state.selectedBillRangeBeginning && this.state.selectedBillRangeEnd) {\n selectedBillNumbers = selectedBillNumbers ? selectedBillNumbers + ',' : selectedBillNumbers;\n selectedBillNumbers += this.state.selectedBillRangeBeginning + '-' + this.state.selectedBillRangeEnd;\n }\n let keywordVersion = null;\n switch (this.state.selectedLocation) {\n case ('Bill Text'):\n if (this.state.selectedBillVersion !== 'All') {\n keywordVersion = { KeywordLegislationVersionID: this.state.selectedBillVersion }\n }\n break;\n case ('Summary'):\n if (this.state.selectedSummaryVersion !== 'All') {\n keywordVersion = { KeywordSummaryVersionID: this.state.selectedSummaryVersion }\n }\n break;\n }\n\n // Build the param array with param names as the keys\n const params = {\n ChamberCode: this.state.selectedChamber ? this.state.selectedChamber.value : null,\n CommitteeID: this.state.selectedSubcommittee || this.state.selectedCommittee || null,\n PatronTypes: this.state.selectedPatronType || null,\n LegislationNumbers: selectedBillNumbers ? [{ LegislationNumber: selectedBillNumbers.replaceAll(\" \", \"\") }] : null,\n ChapterNumber: this.state.selectedChapterNumber,\n SessionID: this.state.keywordUseGlobalSessionSearch ? null : this.state.selectedSession.SessionID,\n StartDate: this.state.billStatusStartDate ? moment(this.state.billStatusStartDate).format('MM/DD/YYYY') : null,\n EndDate: this.state.billStatusEndDate ? moment(this.state.billStatusEndDate).format() : null,\n KeywordExpression: this.state.selectedKeywords || null,\n KeywordLocation: this.state.selectedLocation || null,\n ...keywordVersion,\n MemberID: this.state.selectedPatron,\n SubjectIndexID: this.state.selectedSubject,\n LegislationCategoryID: this.state.selectedBillStatusCategory,\n LegislationEventTypeID: this.state.selectedBillEvent,\n EventStartDate: this.state.billEventStartDate ? moment(this.state.billEventStartDate).format(\"MM/DD/YYYY\") : null,\n EventEndDate: this.state.billEventEndDate ? moment(this.state.billEventEndDate).format(\"MM/DD/YYYY\") : null,\n IsPending: this.state.isPending || null,\n MostFrequent: this.state.mostFrequent || null,\n AllLegislation: this.state.allLegislation || null,\n KeywordUseGlobalSessionSearch: this.state.keywordUseGlobalSessionSearch,\n CurrentStatus: this.state.currentStatus,\n ExcludeFailed: this.state.excludeFailed,\n IntroductionDate: this.state.introductionDate\n }\n //Open the fieldset if one of the form inputs is filled out\n if (params.LegislationNumbers) {\n this.setState({\n billFieldset: true\n });\n }\n if (params.KeywordExpression) {\n this.setState({\n keywordFieldset: true\n });\n }\n if (params.LegislationCategoryID || params.ChamberCode) {\n this.setState({\n statusFieldset: true\n });\n }\n if (params.EventStartDate || params.EventEndDate) {\n this.setState({\n activityFieldset: true\n });\n }\n if (params.MemberID) {\n this.setState({\n membersFieldset: true\n });\n }\n if (params.CommitteeID) {\n this.setState({\n committeesFieldset: true\n });\n }\n if (params.SubjectIndexID) {\n this.setState({\n subjectFieldset: true\n });\n }\n\n this.setState({\n searchMade: true,\n displaySelectedLocation: this.state.selectedLocation,\n showUpdateSearchButton: false\n });\n\n //use existing search params if the user has scrolled to the next page (i.e. ignore any possible changes to the params on the side)\n this.getBillsResults(skipIdsCall && this.state.params ? this.state.params : params, skipIdsCall);\n }\n\n getBillsResults(params, skipIdsCall) {\n\n //if the user searches hb1-hb4 and expands all of these bills to see further info, and then search hb1-hb5, leave open their previously expanded bills for them;\n //however, if the existing search (if there is one, i.e. this new one is not the first search they're making) is a bill text keyword search, which automatically expands all of them in order to show bill text matches,\n //then close these in the new search results as there's a good chance they don't care for the expanded info regarding patrons/summary/etc\n const closeBillInfo = this.state.params?.KeywordLocation === \"Bill Text\" && this.state.params?.KeywordExpression && (params?.KeywordLocation !== \"Bill Text\" || !params?.KeywordExpression);\n\n this.setState({\n isFetching: true,\n showCategories: false,\n searchedKeywords: params.KeywordExpression //without this, if the user edits the keyword in the adv search box but does not submit, the existing bill version hit count links will nonetheless use the new value and not work\n })\n\n if (!this.state.skippedRecords) {\n window.scrollTo(0, 0);\n }\n\n let getResultsPromise;\n let hasResults = true;\n let numSearchedIds;\n if (params.MostFrequent) {\n getResultsPromise = this.props.actions.getMostFrequentBillList(\"?sessionID=\" + params.SessionID + \"&excludeFailed=\" + params.ExcludeFailed);\n } else {\n //break this up into three calls: 1) get the legislation numbers (i.e. 'skinny list') of all results, 2) get the full list of objects with pagination, 3) get the hit counts if it's a billtext keyword search\n //we need the skinny list to know all the legislation numbers for creating reports, but don't want to get all the data for each yet (i.e. paginate)\n if (skipIdsCall) {\n const paginatedLegislationIds = [...this.state.fullLegislationList].slice(this.state.skippedRecords, this.state.skippedRecords + PageSize);\n getResultsPromise = this.props.actions.getBillListByIds({ \"LegislationIds\": paginatedLegislationIds });\n numSearchedIds = this.state.numSearchedIds + paginatedLegislationIds.length;\n } else {\n getResultsPromise = this.props.actions.getLegislationIdsList(params).then(() => {\n let legislationIdsResponse = { ... this.props.bills.legislationIdsList };\n //Filter to only one result per bill per session since DB sometimes returns duplicates which messes up pagination\n legislationIdsResponse.LegislationIds = legislationIdsResponse.LegislationIds.filter((item, pos) => legislationIdsResponse.LegislationIds.findIndex(i => i.LegislationNumber === item.LegislationNumber && i.SessionID === item.SessionID) === pos);\n this.setState({ fullLegislationList: legislationIdsResponse.LegislationIds })\n const paginatedLegislationIds = [...legislationIdsResponse.LegislationIds].slice(0, PageSize);\n numSearchedIds = paginatedLegislationIds.length;\n if (paginatedLegislationIds.length) {\n return this.props.actions.getBillListByIds({ \"LegislationIds\": paginatedLegislationIds });\n } else {\n hasResults = false;\n return Promise.resolve();\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isFetching: false\n });\n })\n }\n }\n\n getResultsPromise.then(() => {\n let billList;\n if (!params.MostFrequent && this.state.skippedRecords) {\n billList = [...this.state.billList.concat(hasResults ? this.props.bills.billListByIds : [])];\n } else if (!params.MostFrequent) {\n billList = hasResults ? [...this.props.bills.billListByIds] : [];\n } else {\n billList = [...this.props.bills.mostFrequentBillList];\n }\n //Filter to only one result per bill per session since DB sometimes returns duplicates which messes up pagination\n billList = billList.filter((item, pos) => billList.findIndex(i => i.LegislationNumber === item.LegislationNumber && i.SessionID === item.SessionID) === pos);\n this.setState({\n params: params,\n billList: billList,\n numSearchedIds,\n totalResults: billList && billList.length ? params.MostFrequent ? billList.length : this.state.fullLegislationList.length : 0, //if we got IDs back but no full legislation object results, display '0 Results' since none are actually being shown. Example of this is when you search a bill number with cross session turned on\n hasNextPage: numSearchedIds && this.state.fullLegislationList.length > numSearchedIds ? true : false,\n isFetching: false,\n checkedBills: !params.MostFrequent && this.state.skippedRecords ? this.state.checkedBills : [],\n lastCheckedBill: !params.MostFrequent && this.state.skippedRecords ? this.state.lastCheckedBill : -1,\n selectAllBills: false,\n displayCrossSession: this.state.keywordUseGlobalSessionSearch\n }, () => {\n if (closeBillInfo)\n [...this.state.billList].forEach(b => this.toggleShowData(b.LegislationID, false))\n const options = {\n root: null,\n rootMargin: \"0px\",\n threshold: 1.0\n };\n\n this.observer = new IntersectionObserver(\n this.handleObserver.bind(this),\n options\n );\n this.observer.observe(this.loadingRef);\n\n //if bill text search, get hit counts\n if (params.KeywordLocation === 'Bill Text' && params.KeywordExpression && hasResults) {\n const LOADING = 'LOADING';\n const legislationTextIDs = [...this.props.bills.billListByIds].map(bill => bill.SearchText && bill.SearchText.map(text => { text.countMatches = LOADING; return { \"LegislationTextID\": text.LegislationTextID } })).flat();\n let hitCountRequestBody = {\n \"Documents\": legislationTextIDs,\n \"Location\": \"Bill Text\",\n \"KeywordExpression\": params.KeywordExpression\n };\n\n this.props.actions.getLegislationTextsHitCounts(hitCountRequestBody).then(() => {\n const hitCounts = [...this.props.bills.legislationTextsHitCounts];\n billList = [...this.state.billList];\n hitCounts.forEach(hitCount => {\n const associatedBillSearchTextIndexes = billList.reduce((r, b, i) => r.concat(b.SearchText && b.SearchText.find(st => st.LegislationTextID === hitCount.LegislationTextID) ? i : []), []);\n associatedBillSearchTextIndexes.forEach(index => {\n billList[index].SearchText.find(st => st.LegislationTextID === hitCount.LegislationTextID).countMatches = hitCount.HitCount;\n })\n })\n billList.filter(bill => bill.SearchText && bill.SearchText.find(st => st.countMatches === LOADING)).forEach(bill => {\n bill.SearchText.filter(st => st.countMatches === LOADING).forEach(st => { st.countMatches = null })\n })\n\n this.setState({ billList })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isFetching: false\n });\n })\n }\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isFetching: false\n });\n })\n }\n\n handleObserver(entities, observer) {\n const y = entities[0].boundingClientRect.y;\n if (!this.state.showCategories && this.state.billList.length && this.state.hasNextPage && !this.state.isFetching && this.state.prevY > y) {\n this.setState({ skippedRecords: this.state.numSearchedIds }, () => {\n if (!this.state.selectedCollection || this.state.searchMade) {\n this.handleSearch(true);\n } else {\n const bills = [...this.state.selectedCollection.WatchListLegislation].filter(l => !l.DeletionDate).map(l => l.LegislationID);\n if (bills.length > 0) {\n let legislationIds = [];\n for (let i = 0; i < bills.length; i++) {\n legislationIds.push({ LegislationId: bills[i] });\n }\n\n const params = {\n LegislationIDs: legislationIds,\n SessionID: this.state.selectedSession.SessionID\n }\n\n this.setState({ searchMade: false }, () => {\n this.getBillsResults(params, true);\n })\n }\n }\n });\n }\n this.setState({ prevY: y });\n }\n\n getBillStatusCategoryOptions() {\n // Get Bill Status references for bill status typeahead\n this.props.actions.getBillStatusCategoryReferences().then(() => {\n let billStatusReferences = [...this.props.bills.billStatusCategoryReferences];\n billStatusReferences.forEach(ref => {\n ref.label = ref.Name\n ref.value = ref.LegislationCategoryID\n });\n if (this.state.selectedCommittee && !this.state.selectedBillStatusCategory) {\n const selectedBillStatusCategory = billStatusReferences.find(status => status.Name === 'In Committee');\n this.setState({\n selectedBillStatusCategory: selectedBillStatusCategory ? selectedBillStatusCategory.LegislationCategoryID : ''\n });\n }\n this.setState({\n billStatusCategoryList: billStatusReferences,\n billStatusCategoryListIsLoading: false\n });\n });\n }\n\n getBillVersionOptions() {\n this.props.actions.getBillVersionRef().then(() => {\n let topOfList = [{ Name: 'All Versions', LegislationVersionID: 'All' }];\n let billVersionReferences = topOfList.concat(this.props.bills.billVersionRef);\n billVersionReferences.forEach(ref => {\n ref.label = ref.Name\n ref.value = ref.LegislationVersionID\n });\n this.setState({\n billVersionList: billVersionReferences,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n });\n }\n\n getBillSummaryOptions() {\n this.props.actions.getBillSummaryRef().then(() => {\n let topOfList = [{ Name: 'All Summary Versions', SummaryVersionID: 'All' }];\n let billSummaryReferences = topOfList.concat(this.props.bills.billSummaryRef);\n billSummaryReferences.forEach(ref => {\n ref.label = ref.Name\n ref.value = ref.SummaryVersionID\n });\n this.setState({\n billSummaryList: billSummaryReferences,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n });\n }\n\n getBillEventOptions() {\n this.props.actions.getBillEventReferences(\"?isSearchable=true&isActive=true\").then(() => {\n let billEventReferences = [...this.props.bills.billEventRef];\n billEventReferences.forEach(ref => {\n ref.label = ref.LegislationDescription\n ref.value = `${ref.EventCode}-${ref.IsPassed}`\n });\n this.setState({\n billEventOptions: billEventReferences\n });\n });\n }\n\n getPatrons(sessionParam) {\n // Get Patrons list for typeahead\n this.props.actions.getMemberList(sessionParam).then(() => {\n let memberList = [...this.props.members.memberList];\n memberList.forEach(patron => {\n patron.label = patron.ListDisplayName + ' ' + '(' + patron.ChamberCode + ')';\n patron.value = patron.MemberID;\n });\n const member = memberList.find(member => member.MemberID === this.state.selectedPatron);\n let selectedPatronType = [];\n if (member && this.state.selectedPatronType.length === 0) {\n this.state.patronRoles.filter(x => x.PatronTypeID !== 3 && x.PatronTypeID !== 5).forEach(role => selectedPatronType.push(role.PatronTypeID));\n this.setState({\n selectedPatronType: selectedPatronType\n });\n }\n this.setState({\n patronList: memberList,\n filteredPatronList: memberList,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getSubjects(sessionParam) {\n this.props.actions.getSubjectList('?' + sessionParam)\n .then(() => {\n this.setState({\n subjectList: this.props.bills.subjectList\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getPatronRoles() {\n this.props.actions.getPatronRoles()\n .then(() => {\n const patronRoles = [...this.props.patrons.patronRoles];\n patronRoles.forEach(role => {\n role.label = role.Name;\n role.value = role.PatronTypeID;\n });\n this.setState({\n patronRoles: patronRoles,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getCommittees(sessionParam) {\n this.props.actions.getCommitteeList(sessionParam).then(() => {\n let committeeList = [...this.props.committee.committeeList];\n committeeList.forEach(committee => {\n committee.label = committee.Name;\n committee.value = committee.CommitteeID;\n });\n let groupedCommitteeList = [{ \"label\": \"House Committees\", \"ChamberCode\": \"H\", \"options\": committeeList.filter(c => c.ChamberCode === \"H\") }, { \"label\": \"Senate Committees\", \"ChamberCode\": \"S\", \"options\": committeeList.filter(c => c.ChamberCode === \"S\") }]\n this.setState({\n committeeList: committeeList.map(c => ({ ...c, label: c.label + ' ' + '(' + c.ChamberCode + ')' })),\n groupedCommitteeList: groupedCommitteeList,\n filteredCommitteeList: groupedCommitteeList\n });\n //If a committee is already selected then that committee's subcommittees need to be retrieved\n if (this.state.selectedCommittee) {\n this.getSubcommittees(this.state.selectedCommittee);\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getSubcommittees(id) {\n this.props.actions.getCommitteeList(\"parentCommitteeID=\" + id)\n .then(() => {\n let committeeList = [...this.props.committee.committeeList];\n committeeList.forEach(committee => {\n committee.label = '(' + committee.ChamberCode + ') ' + committee.Name;\n committee.value = committee.CommitteeID;\n });\n this.setState({\n subcommitteeList: committeeList\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n getIntroDates(sessionParam) {\n this.props.actions.getIntroDateList('?' + sessionParam)\n .then(() => {\n let datesList = [];\n this.props.bills.introDateList.forEach(date => datesList.push(moment(date.IntroductionDate)));\n this.setState({\n introDateList: datesList\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n sessionChange(code) {\n const selectedSession = this.state.sessionOptions.find(session => session.SessionCode === code);\n if (!selectedSession) {\n return;\n }\n const sessionParam = 'sessionID=' + selectedSession.SessionID;\n this.getPatrons(sessionParam);\n this.getSubjects(sessionParam);\n this.getCommittees(sessionParam);\n this.getIntroDates(sessionParam);\n this.getCollections(\"?SessionID=\" + selectedSession.SessionID);\n\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n let queryObj = JSON.parse(decodedSearch);\n if (queryObj.selectedSession) {\n queryObj.selectedSession = selectedSession.SessionID;\n this.handleSubmit(queryObj);\n return;\n }\n } else {\n this.setState({ currentStatus: selectedSession.IsActive })\n }\n\n if (this.state.selectedBillStatusCategory) {\n this.setState({\n selectedPatron: '',\n selectedPatronType: '',\n selectedCommittee: '',\n selectedSubcommittee: '',\n selectedSubject: '',\n selectedSession: selectedSession,\n billList: [],\n fullLegislationList: [],\n skippedRecords: 0\n }, () => {\n this.handleSearch();\n });\n } else {\n this.setState({\n selectedPatron: '',\n selectedPatronType: '',\n selectedCommittee: '',\n selectedSubcommittee: '',\n selectedSubject: '',\n selectedSession: selectedSession,\n billList: [],\n fullLegislationList: [],\n skippedRecords: 0\n }, () => {\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n if (parsed.q) {\n this.handleSearch();\n }\n });\n }\n }\n\n chamberChange(value) {\n this.setState({\n selectedChamber: value\n });\n if (value) {\n const patronList = [...this.state.patronList];\n const committeeList = [...this.state.groupedCommitteeList];\n //Remove the patrons from the patronList that do not fit the current selected chamber\n //Remove the committees from the committee list that do not fit the current selected chamber\n let filteredPatronList = patronList.filter(patron => patron.ChamberCode === value.value);\n let filteredCommitteeList = committeeList.filter(committee => committee.ChamberCode === value.value);\n this.setState({\n filteredPatronList: filteredPatronList,\n filteredCommitteeList: filteredCommitteeList,\n });\n } else {\n // 'all' has been selected so show all patrons/committees\n this.setState({\n filteredPatronList: this.state.patronList,\n filteredCommitteeList: this.state.groupedCommitteeList,\n });\n }\n // Reset all the values that are chamber specific\n this.setState({\n selectedPatron: '',\n selectedPatronType: '',\n selectedCommittee: '',\n selectedSubcommittee: ''\n });\n }\n\n committeeChange(opt) {\n this.setState({\n selectedCommittee: opt ? opt.value : null,\n selectedSubcommittee: null\n });\n if (opt) {\n if (!this.state.selectedBillStatusCategory) {\n const selectedBillStatusCategory = this.state.billStatusCategoryList.find(status => status.Name === 'In Committee');\n this.setState({\n selectedBillStatusCategory: selectedBillStatusCategory ? selectedBillStatusCategory.LegislationCategoryID : ''\n });\n }\n this.getSubcommittees(opt.CommitteeID)\n };\n }\n\n handlePatronChange(opt) {\n let patronTypes = [];\n if (opt) {\n this.state.patronRoles.filter(x => x.PatronTypeID !== 3 && x.PatronTypeID !== 5).forEach(role => patronTypes.push(role.PatronTypeID));\n }\n this.setState({\n selectedPatron: opt ? opt.value : null,\n selectedPatronType: patronTypes\n });\n }\n\n handlePatronTypeChange(options) {\n let values = [];\n if (options) {\n options.forEach(opt => values.push(opt.value));\n }\n this.setState({\n selectedPatronType: values\n });\n }\n\n handleSelectChange = (opt, name) => {\n this.setState({\n [name]: opt ? opt.value : null\n });\n if (name === 'selectedBillStatusCategory') {\n if (opt === null || (opt && [2, 3, 4, 6, 7, 11, 22, 16, 17, 21, 27].includes(opt.LegislationCategoryID))) {\n this.setState({\n currentStatus: true,\n billStatusStartDate: null,\n billStatusEndDate: null\n });\n } else if ([1, 5, 23, 24, 18, 26, 29, 8, 9, 10, 19, 14, 20, 25, 13, 15, 28].includes(opt.LegislationCategoryID)) {\n this.setState({\n currentStatus: false\n });\n }\n }\n }\n\n handleDateChange = (val, name) => {\n this.setState({\n [name]: val\n });\n }\n\n handleTextChange = (evt, name) => {\n let value = evt.target.value;\n if (['selectedChapterNumber', 'selectedBillRangeBeginning', 'selectedBillRangeEnd'].includes(name)) {\n value = value.replace(/[^a-zA-Z0-9]/, \"\");\n }\n this.setState({ [name]: value });\n }\n\n handleSelectionClear(key) {\n //Clearing some form inputs changes the value of other form inputs. Handle them here.\n this.setState({ showUpdateSearchButton: true }, () => {\n switch (key) {\n case \"selectedBillStatusCategory\":\n this.handleSelectChange(null, \"selectedBillStatusCategory\");\n break;\n case \"selectedPatron\":\n this.handlePatronChange(null);\n break;\n case \"selectedCommittee\":\n this.committeeChange(null);\n break;\n case \"selectedChamber\":\n this.chamberChange(null);\n break;\n default:\n this.setState({\n [key]: ''\n });\n }\n\n if (!localStorage.getItem('searchModalDismissed')) {\n this.toggleModal();\n localStorage.setItem('searchModalDismissed', true);\n }\n })\n }\n\n handleMultiSelectionClear(key, index) {\n let value = [...this.state[key]];\n value.splice(index, 1);\n this.setState({\n [key]: value,\n showUpdateSearchButton: true\n })\n }\n\n handleRadioChange() {\n if (window.env && window.env.HISTORICAL_DATA_REDIRECT && !this.state.keywordUseGlobalSessionSearch && !this.props.login.userClaims.roles.find(role => role === \"CrossSearch\")) {\n this.setState({\n historicalSessionRedirect: (redirect) => {\n if (redirect) {\n let a = document.createElement('a');\n a.target = '_blank';\n a.href = `https://legacylis.virginia.gov`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n this.setState({ historicalSessionRedirect: false })\n }\n })\n return;\n }\n this.setState({\n keywordUseGlobalSessionSearch: !this.state.keywordUseGlobalSessionSearch\n }, () => {\n if (this.state.keywordUseGlobalSessionSearch) {\n this.setState({\n excludeFailed: false\n })\n }\n })\n }\n\n handleCurrentStatusChange() {\n this.setState({\n currentStatus: !this.state.currentStatus\n }, () => {\n if (this.state.currentStatus) {\n this.setState({\n billStatusStartDate: null,\n billStatusEndDate: null\n })\n }\n })\n }\n\n handleExcludeFailedChange() {\n this.setState({\n excludeFailed: !this.state.excludeFailed,\n showUpdateSearchButton: true\n })\n }\n\n getCollections(params) {\n this.setState({\n collectionIsLoading: true\n });\n this.props.actions.getCollections(params)\n .then(() => {\n const parsed = queryString.parse(this.props.location.search);\n const collectionIndex = this.props.collection.collections.findIndex(coll => coll.WatchListID === parseInt(parsed.collection))\n this.setState({\n collections: this.props.collection.collections,\n collectionIsLoading: false,\n }, () => {\n if (collectionIndex !== -1) {\n this.selectCollection(collectionIndex)\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n this.setState({\n collectionIsLoading: false\n });\n });\n this.props.actions.getCriteriaTypes()\n .then(() => {\n this.setState({\n criteriaTypes: this.props.collection.criteriaTypes\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n selectCollection(collectionIndex, returningFromSearch) {\n if (collectionIndex === -1) {\n this.setState({\n selectedCollectionIndex: -1,\n quickAddErr: '',\n selectedCollection: '',\n billList: [],\n fullLegislationList: [],\n skippedRecords: 0,\n searchMade: true\n })\n this.props.history.push('/bill-search');\n this.clearForm();\n } else {\n // Remove object references so the state does not mutate\n const selectedCollection = JSON.parse(JSON.stringify(this.state.collections[collectionIndex] || ''))\n if (selectedCollection.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) {\n alert(\"The watchlist you are trying to access is a paid watchlist. As a free user, you are no longer able to access this watchlist.\");\n return;\n }\n const parsed = queryString.parse(this.props.location.search, { decode: false });\n let sessionOnly = false;\n if (parsed.q) {\n const base64 = parsed.q;\n const decodedSearch = window.atob(base64);\n const queryObj = JSON.parse(decodedSearch);\n sessionOnly = queryObj.sessionOnly || false;\n }\n if (returningFromSearch || !parsed.q || sessionOnly)\n this.props.history.push(`/bill-search?collection=${selectedCollection.WatchListID}`)\n this.setState({\n selectedCollectionIndex: collectionIndex,\n selectedCollection: selectedCollection,\n showCategories: false,\n billList: !returningFromSearch && parsed.q ? this.state.billList : [],\n fullLegislationList: !returningFromSearch && parsed.q ? this.state.fullLegislationList : [],\n skippedRecords: !returningFromSearch && parsed.q ? this.state.skippedRecords : 0,\n searchMade: !returningFromSearch && parsed.q ? this.state.searchMade : false,\n showAllNotes: !returningFromSearch && parsed.q ? this.state.showAllNotes : false\n });\n if (returningFromSearch || !parsed.q || sessionOnly) {\n const bills = selectedCollection.WatchListLegislation.filter(l => !l.DeletionDate).sort(sortLegislations).map(l => l.LegislationID);\n if (bills.length > 0) {\n let legislationIds = [];\n for (let i = 0; i < bills.length; i++) {\n legislationIds.push({ LegislationId: bills[i] });\n }\n\n const params = {\n LegislationIDs: legislationIds,\n SessionID: this.state.selectedSession.SessionID\n }\n this.getBillsResults(params);\n }\n this.clearForm();\n }\n }\n }\n\n handleCollectionChange(collection, callback) {\n if (this.state.collectionIsSaving) {\n return\n }\n this.setState({\n collectionIsSaving: true\n });\n this.props.actions.saveCollections({ WatchLists: [collection] })\n .then(() => {\n let collectionSave = [...this.props.collection.collectionSave][0];\n // The api does not return WatchListLegislation or NotificationCriterias at all if it is empty. To stop it from being undefined it is set to a blank array.\n collectionSave.WatchListLegislation = collectionSave.WatchListLegislation || [];\n collectionSave.NotificationCriterias = collectionSave.NotificationCriterias || [];\n let collections = [...this.state.collections];\n const savedCollectionIndex = collections.findIndex(coll => coll.WatchListID === collectionSave.WatchListID);\n collections[savedCollectionIndex] = collectionSave;\n this.setState({\n collectionIsSaving: false,\n collections: collections,\n selectedCollection: collectionSave\n }, () => {\n if (callback) {\n callback();\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n if (callback) {\n callback(err);\n }\n this.setState({\n collectionIsSaving: false\n });\n let message;\n if (err && JSON.parse(err)) {\n const errorMsg = JSON.parse(err).Name;\n message = errorMsg && errorMsg.includes('Public users are') ? errorMsg : 'Save Failed'\n } else {\n message = \"Save Failed\";\n }\n this.props.actions.makeToast([{ message: message, type: \"failure\", long: message.includes('Public users are') }]);\n });\n }\n\n createCollection(collection) {\n this.setState({\n collectionIsSaving: true\n });\n this.props.actions.saveCollections({ WatchLists: [collection] }, true)\n .then(() => {\n let collections = [...this.state.collections];\n let selectedCollection = [...this.props.collection.collectionSave][0]\n // The api does not return WatchListLegislation or NotificationCriterias at all if it is empty. To stop it from being undefined it is set to a blank array.\n selectedCollection.WatchListLegislation = selectedCollection.WatchListLegislation || [];\n selectedCollection.NotificationCriterias = selectedCollection.NotificationCriterias || [];\n collections.unshift(selectedCollection);\n this.setState({\n collections: collections,\n collectionIsSaving: false,\n showCategories: false\n }, () => {\n this.selectCollection(0)\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n collectionIsSaving: false\n });\n let message;\n if (err && JSON.parse(err)) {\n const errorMsg = JSON.parse(err).Name;\n message = errorMsg && errorMsg.includes('Public users are') ? errorMsg : 'Save Failed'\n } else {\n message = \"Save Failed\";\n }\n this.props.actions.makeToast([{ message: message, type: \"failure\", long: message.includes('Public users are') }]);\n });\n }\n\n deleteCollection() {\n this.setState({\n collectionIsSaving: true\n });\n let collection = { ...this.state.selectedCollection };\n let selectedCollectionIndex = this.state.selectedCollectionIndex;\n collection.DeletionDate = new Date();\n this.props.actions.saveCollections({ WatchLists: [collection] })\n .then(() => {\n let collections = [...this.state.collections];\n const idx = collections.findIndex(coll => coll.WatchListID === collection.WatchListID);\n if (idx > -1)\n collections.splice(idx, 1);\n else\n collections.splice(selectedCollectionIndex, 1);\n this.setState({\n selectedCollection: '',\n selectedCollectionIndex: -1,\n collections: collections,\n collectionIsSaving: false,\n searchMade: true,\n billList: [],\n fullLegislationList: [],\n skippedRecords: 0\n });\n\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n collectionIsSaving: false,\n });\n this.props.actions.makeToast([{ message: \"Delete Failed\", type: \"failure\" }]);\n });\n }\n\n addToWatchlists(watchlists, merge, callback) {\n let billsToAdd = [];\n if (merge) {\n let selectedCollection = { ...this.state.selectedCollection };\n if (selectedCollection) {\n selectedCollection.WatchListLegislation.filter(l => !l.DeletionDate).forEach(leg => { billsToAdd.push(leg) })\n } else {\n return;\n }\n } else {\n this.state.checkedBills.forEach((c, i) => {\n if (c) {\n billsToAdd.push(this.state.billList[i])\n }\n });\n }\n let duplicatedBills = [];\n watchlists.forEach(watchlist => {\n billsToAdd.forEach(bill => {\n if (watchlist.__isNew__) {\n watchlist.Name = watchlist.label;\n watchlist.Description = `Created on ${moment().format('MM/DD/YYYY')}`;\n watchlist.WatchListLegislation = [];\n delete watchlist.label;\n delete watchlist.__isNew__;\n delete watchlist.value;\n }\n // Make sure the bill isn't already a part of the watchlist\n if (!watchlist.WatchListLegislation.find(leg => leg.LegislationID === bill.LegislationID) || watchlist.WatchListLegislation.find(leg => leg.LegislationID === bill.LegislationID).DeletionDate) {\n watchlist.WatchListLegislation.push({\n LegislationID: bill.LegislationID,\n LegislationNumber: bill.LegislationNumber,\n Sessions: [{ SessionID: bill.SessionID }],\n WatchListID: watchlist.WatchListID,\n Note: merge ? bill.Note : null\n });\n } else if (merge && bill.Note && !watchlist.WatchListLegislation.find(leg => leg.LegislationID === bill.LegislationID).Note) { //merge note if there is not already one in the target watchlist for that bill\n const leg = watchlist.WatchListLegislation.find(leg => leg.LegislationID === bill.LegislationID);\n leg.Note = bill.Note;\n } else {\n duplicatedBills.push({ \"Watchlist\": watchlist.Name, \"LegislationNumber\": bill.LegislationNumber });\n }\n });\n })\n\n this.setState({\n collectionIsSaving: true\n }, () => {\n let collections = [...this.state.collections];\n this.props.actions.saveCollections({ WatchLists: watchlists })\n .then(() => {\n let watchlistSave = [...this.props.collection.collectionSave];\n let savedCollectionIndex;\n watchlistSave.forEach(res => {\n if (!collections.find(coll => coll.WatchListID === res.WatchListID)) {\n collections.unshift(res);\n savedCollectionIndex = 0;\n } else {\n savedCollectionIndex = collections.findIndex(coll => coll.WatchListID === res.WatchListID);\n collections[savedCollectionIndex] = res;\n }\n res.WatchListLegislation = res.WatchListLegislation || [];\n res.NotificationCriterias = res.NotificationCriterias || [];\n })\n\n this.setState({\n collectionIsSaving: false,\n collections: collections,\n selectedCollection: watchlists.length === 1 && !merge ? collections[savedCollectionIndex] : this.state.selectedCollection,\n selectedCollectionIndex: watchlists.length === 1 && !merge ? savedCollectionIndex : this.state.selectedCollectionIndex\n });\n if (duplicatedBills.length && !merge) {\n this.props.actions.makeToast([{ message: (new Set(duplicatedBills.map(b => b.LegislationNumber)).size === 1 ? (duplicatedBills[0].LegislationNumber + \" is \") : \"Multiple added bills were \") + \"already in \" + (watchlists.length === 1 ? \"this watchlist. \" : \"one or more of these watchlists. \") + (watchlists.length === 1 ? ((billsToAdd.length - duplicatedBills.length) + \" bills were added to your watchlist \" + watchlists[0].Name) : \"All other bills were added.\"), type: \"warning\", long: true }]);\n } else if (!merge) {\n this.props.actions.makeToast([{ message: (billsToAdd.length === 1 ? billsToAdd[0].LegislationNumber + \" was \" : billsToAdd.length + \" bills were \") + \"added to your watchlist\" + (watchlists.length > 1 ? \"s\" : (\" \" + watchlists[0].Name)), type: \"success\" }]);\n } else {\n this.props.actions.makeToast([{ message: \"Watchlists have successfully been merged\", type: \"success\" }]);\n }\n if (callback) {\n callback(collections)\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.setState({\n collectionIsSaving: false\n });\n let message;\n if (err && JSON.parse(err)) {\n const errorMsg = JSON.parse(err).Name;\n message = errorMsg && errorMsg.includes('Public users are') ? errorMsg : 'Save Failed'\n } else {\n message = \"Save Failed\";\n }\n this.props.actions.makeToast([{ message: message, type: \"failure\", long: message.includes('Public users are') }]);\n })\n });\n }\n\n removeWatchlistBills() {\n let selectedCollection = { ...this.state.selectedCollection };\n let billList = [...this.state.billList];\n let fullLegislationList = [...this.state.fullLegislationList];\n let removedBillCount = 0;\n this.state.checkedBills.forEach((_cb, cbIndex) => {\n if (_cb) { //sometimes the value will be undefined, don't use those\n const legislationIndex = selectedCollection.WatchListLegislation.findIndex(leg => !leg.DeletionDate && leg.LegislationID === this.state.billList[cbIndex].LegislationID);\n if (legislationIndex !== -1) {\n selectedCollection.WatchListLegislation[legislationIndex].DeletionDate = new Date().toISOString();\n billList.splice(cbIndex - removedBillCount, 1);\n fullLegislationList.splice(cbIndex - removedBillCount, 1);\n removedBillCount++; //need to know how many we've removed since the index for billList won't be accurate anymore the next time through\n }\n }\n });\n this.setState({\n checkedBills: [],\n billList: billList,\n fullLegislationList: fullLegislationList,\n totalResults: billList.length\n });\n this.handleCollectionChange(selectedCollection);\n }\n\n toggleReportMaker(autoReport) {\n this.setState(state => ({\n showReportMaker: !state.showReportMaker,\n }), () => {\n //Delete the watchlist if we arrived at this report from the interactive calendar Create Report button\n //Should only be triggered by closing a report maker that was opened automatically\n if (autoReport) {\n this.deleteCollection();\n }\n });\n }\n\n toggleAllBills() {\n const opposite = !this.state.selectAllBills;\n let checkedBills = [...this.state.checkedBills];\n checkedBills = new Array(this.state.billList.length).fill(opposite);\n this.setState({\n selectAllBills: opposite,\n checkedBills: checkedBills,\n lastCheckedBill: -1\n });\n }\n\n handleBillCheckbox(billIndex, e) {\n let checkedBills = [...this.state.checkedBills];\n let lastCheckedBill = this.state.lastCheckedBill;\n if (e.nativeEvent.shiftKey && this.state.lastCheckedBill !== -1) {\n checkedBills = checkedBills.fill(false);\n for (let i = 0; i < Math.abs(billIndex - this.state.lastCheckedBill); i++) {\n const index = this.state.lastCheckedBill + i * (billIndex - this.state.lastCheckedBill) / Math.abs(billIndex - this.state.lastCheckedBill);\n checkedBills[index] = true;\n }\n } else {\n lastCheckedBill = !checkedBills[billIndex] ? billIndex : this.state.lastCheckedBill;\n }\n checkedBills[billIndex] = !checkedBills[billIndex]\n this.setState({\n checkedBills: checkedBills,\n lastCheckedBill: lastCheckedBill\n });\n }\n\n quickAddBills(billsToAdd, callback) {\n let billsToSearchFor = \"\";\n let duplicatedBills = [];\n let ranges = [];\n let exitFn = false;\n this.setState({ quickAddErr: null });\n if (this.state.selectedCollection.WatchListLegislation && this.state.selectedCollection.WatchListLegislation.filter(l => !l.DeletionDate).length > 0) {\n const existingWatchListLegislation = [...new Set(this.state.selectedCollection.WatchListLegislation.filter(l => !l.DeletionDate).map(l => l.LegislationNumber.toUpperCase()))];\n billsToSearchFor += existingWatchListLegislation.join(\", \");\n let billsToAddArray = billsToAdd.split(\",\");\n billsToAddArray.every(b => {\n if (b.includes('-')) { //range (e.g. hb5-hb10)\n const rangeStartAndEnd = b.split('-'); // e.g. ['hb5', 'hb10']\n const rangeStart = rangeStartAndEnd[0]; // e.g. 'hb5'\n const rangeStartNumber = Number.parseInt(rangeStart.replace(/^\\D+/g, '')); // e.g. 5\n const rangeEnd = rangeStartAndEnd[1];\n const rangeEndNumber = Number.parseInt(rangeEnd.replace(/^\\D+/g, '')); // e.g. 10\n const prefix = rangeStart.replace(/\\d+/, \"\").trim().toUpperCase();\n\n if (!prefix || !validLegPrefixes.includes(prefix) || !rangeStartNumber || !rangeEndNumber || Number.isNaN(rangeStartNumber) || Number.isNaN(rangeEndNumber) || rangeStartNumber > rangeEndNumber) {\n this.setState({ quickAddErr: 'Invalid range. No bills added.' }); //return this message to the user\n callback(true);\n exitFn = true; //can't quit the outer function from within every(), forEach(), etc., so store as bool to use later\n return false; //exit the every()\n }\n for (let i = rangeStartNumber; i <= rangeEndNumber; i++) {\n const billNumber = prefix + i.toString().trim().toUpperCase();\n if (!existingWatchListLegislation.includes(billNumber)) {\n billsToSearchFor += \", \" + billNumber;\n } else {\n duplicatedBills.push(billNumber);\n }\n }\n ranges.push({ prefix: prefix, rangeStart: rangeStartNumber, rangeEnd: rangeEndNumber })\n } else { //individual\n const billKey = Number.parseInt(b.replace(/^\\D+/g, '')); // e.g. 5\n if (!billKey) {\n this.setState({ quickAddErr: 'Invalid bill number: ' + b.trim() + ' (No bills added)' }); //return this message to the user\n callback(true);\n exitFn = true; //can't quit the outer function from within every(), forEach(), etc., so store as bool to use later\n return false; //exit the every()\n }\n\n const prefix = b.replace(/\\d+/, \"\").trim().toUpperCase();\n if (!validLegPrefixes.includes(prefix)) {\n this.setState({ quickAddErr: 'Invalid bill prefix: ' + prefix + ' (No bills added)' });\n callback(true);\n exitFn = true;\n return false;\n }\n\n if (!existingWatchListLegislation.includes(b.trim().toUpperCase())) {\n billsToSearchFor += \", \" + b.trim();\n } else {\n duplicatedBills.push(b.trim().toUpperCase())\n }\n }\n return true;\n })\n } else { //no legislation currently in the existing watchlist\n if (billsToAdd.includes('-')) { //includes at least one range (e.g. hb5-hb10)\n let billsToAddArray = billsToAdd.split(\",\");\n billsToAddArray.every(b => {\n if (b.includes('-')) { //range (e.g. hb5-hb10) \n const rangeStartAndEnd = b.split('-'); // e.g. ['hb5', 'hb10']\n const rangeStart = rangeStartAndEnd[0]; // e.g. 'hb5'\n const rangeStartNumber = Number.parseInt(rangeStart.replace(/^\\D+/g, '')); // e.g. 5\n const rangeEnd = rangeStartAndEnd[1];\n const rangeEndNumber = Number.parseInt(rangeEnd.replace(/^\\D+/g, '')); // e.g. 10\n const prefix = rangeStart.replace(/\\d+/, \"\").trim().toUpperCase();\n if (!prefix || !validLegPrefixes.includes(prefix) || !rangeStartNumber || !rangeEndNumber || Number.isNaN(rangeStartNumber) || Number.isNaN(rangeEndNumber) || rangeStartNumber > rangeEndNumber) {\n this.setState({ quickAddErr: 'Invalid range. No bills added.' }); //return this message to the user\n callback(true);\n exitFn = true; //can't quit the outer function from within every(), forEach(), etc., so store as bool to use later\n return false; //exit the every()\n }\n for (let i = rangeStartNumber; i <= rangeEndNumber; i++) {\n const billNumber = prefix + i.toString().trim().toUpperCase();\n if (billsToSearchFor.length) { billsToSearchFor += \", \" }\n billsToSearchFor += billNumber;\n }\n ranges.push({ prefix: prefix, rangeStart: rangeStartNumber, rangeEnd: rangeEndNumber })\n } else {\n billsToSearchFor += (billsToSearchFor.length ? \", \" : \"\") + b.trim();\n }\n return true;\n })\n } else {\n let billsToAddArray = billsToAdd.split(\",\");\n billsToAddArray.every(b => {\n\n const billKey = Number.parseInt(b.replace(/^\\D+/g, '')); // e.g. 5\n if (!billKey) {\n this.setState({ quickAddErr: 'Invalid bill number: ' + b.trim() + ' (No bills added)' }); //return this message to the user\n callback(true);\n exitFn = true; //can't quit the outer function from within every(), forEach(), etc., so store as bool to use later\n return false; //exit the every()\n }\n\n const prefix = b.replace(/\\d+/, \"\").trim().toUpperCase();\n if (!validLegPrefixes.includes(prefix)) {\n this.setState({ quickAddErr: 'Invalid bill prefix: ' + prefix + ' (No bills added)' });\n callback(true);\n exitFn = true;\n return false;\n }\n\n if (billsToSearchFor.length) { billsToSearchFor += \", \" }\n billsToSearchFor += b;\n return true;\n })\n }\n }\n if (exitFn) { return; }\n const params = {\n LegislationNumbers: [{\n LegislationNumber: billsToSearchFor\n }],\n SessionID: this.state.selectedSession.SessionID\n };\n this.props.actions.getBillList(params).then(() => {\n let billList = this.props.bills.billList;\n //Filter to only one result per bill per session since DB sometimes returns duplicates\n billList = billList.filter((item, pos) => billList.findIndex(i => i.LegislationNumber === item.LegislationNumber && i.SessionID === item.SessionID) === pos);\n let watchlist = JSON.parse(JSON.stringify(this.state.selectedCollection));\n //Check to see if some of the bills the user wanted to add don't exist\n let missedBills = [];\n // Match text that has two letters followed by numbers. There can be white space between them.\n const foundBills = billsToSearchFor.match(/[a-zA-Z]{2}\\s*(?=[0-9])[0-9]*/ig) || [];\n\n foundBills.forEach(fb => {\n const noWhiteSpaceBill = fb.replace(/\\s/g, \"\").toUpperCase();\n if (!billList.find(bill => bill.LegislationNumber.toUpperCase() === noWhiteSpaceBill)) { //desired bill is not in the bill search response\n //if the non-found bill was only requested within a range (e.g. hb120 within hb1-hb1000), then don't include it as a missed bill, because obviously not every number in a range will be expected\n const billKey = noWhiteSpaceBill.replace(/^\\D+/g, '');\n const billPrefix = noWhiteSpaceBill.replace(/\\d+/, \"\");\n if (!ranges.find(range => range.prefix === billPrefix && range.rangeStart <= billKey && range.rangeEnd >= billKey)) {\n missedBills.push(noWhiteSpaceBill);\n }\n }\n })\n\n if (duplicatedBills.length) {\n this.props.actions.makeToast([{ message: (duplicatedBills.length === 1 ? (duplicatedBills[0] + \" is \") : \"Multiple added bills were \") + \"already in this watchlist.\", type: \"warning\" }]);\n }\n let saveWatchlist = false;\n billList.forEach(bill => {\n // Make sure the bill isn't already a part of the watchlist\n if (!watchlist.WatchListLegislation.find(leg => !leg.DeletionDate && leg.LegislationID === bill.LegislationID)) {\n saveWatchlist = true;\n watchlist.WatchListLegislation.push({\n LegislationID: bill.LegislationID,\n LegislationNumber: bill.LegislationNumber,\n Sessions: [{ SessionID: bill.SessionID }],\n WatchListID: watchlist.WatchListID\n });\n }\n });\n if (saveWatchlist) {\n this.handleCollectionChange(watchlist, (err => {\n if (!err) {\n this.setState({\n billList: billList,\n fullLegislationList: billList,\n totalResults: billList.length,\n checkedBills: [],\n lastCheckedBill: -1\n })\n }\n }));\n } else if (ranges.length) {\n throw 'No bills found'\n }\n if (missedBills.length > 0) {\n throw `${missedBills.length === 1 ? \"This bill\" : missedBills.length > 7 ? missedBills.length.toString() + \" bills\" : \"These bills\"} could not be added${missedBills.length <= 7 ? ': ' + missedBills.join(\", \") : \"\"}`\n }\n callback(false);\n }).catch(err => {\n if (err === 'Aborted') {\n return err;\n }\n this.setState({\n isFetching: false\n });\n this.setState({ quickAddErr: err });\n callback(true);\n })\n }\n\n toggleAllNotes() {\n const opposite = !this.state.showAllNotes;\n this.setState({\n showAllNotes: opposite\n });\n for (let i = 0; i < this._billResultRefs.length; i++) {\n if (this._billResultRefs[i] && this._billResultRefs[i].current) {\n this._billResultRefs[i].current.toggleBillNotesFromParent(opposite)\n }\n }\n }\n\n unload() {\n //Delete the watchlist when the page is unloaded if the user leaves when the report maker is still open\n this.deleteCollection();\n }\n\n toggleSidebar() {\n this.setState({\n showSidebar: !this.state.showSidebar\n })\n }\n\n toggleModal() {\n this.setState({\n showModal: !this.state.showModal\n })\n }\n\n toggleHelpModal() {\n this.setState({\n showHelpModal: !this.state.showHelpModal\n })\n }\n\n getReportTitleObject() {\n return { Name: this.getReportTitle() };\n }\n\n getReportTitle() {\n if (this.state.selectedCollection) { return ''; }\n\n let title = '';\n if (this.state.allLegislation) {\n title = \"All legislation\";\n } else if (this.state.mostFrequent) {\n title = \"Most frequently accessed bills\";\n } else if (this.state.isPending) {\n title = \"Pending bills\";\n } else if (this.state.selectedBillStatusCategory && this.state.billStatusCategoryList.find(opt => opt.value === this.state.selectedBillStatusCategory)) {\n title = this.state.billStatusCategoryList.find(opt => opt.value === this.state.selectedBillStatusCategory).label;\n if (this.state.currentStatus) {\n title += \" (Current Status)\";\n }\n }\n return title;\n }\n\n handleToggleCompositeView() {\n let billList = []\n this.state.billList.forEach(x => {\n billList.push({\n LegislationNumber: x.LegislationNumber,\n SessionID: x.SessionID\n })\n });\n this.setState({ compositeView: !this.state.compositeView }, () => {\n const jsonData = JSON.stringify({\n showCatchline: true,\n showCurrentStatus: false,\n showTitle: false,\n showChiefPatron: true,\n showAllPatrons: false,\n showSummary: false,\n showNotes: true,\n userCreated: this.props.login.userProfile.email || '',\n selectedNotes: \"current\",\n selectedCollection: this.state.selectedCollection && this.state.selectedCollection.Name && this.state.selectedCollection.WatchListID ? this.state.selectedCollection.WatchListID : '',\n reportTitle: \"\",\n showHistory: {\n all: false,\n recent: true,\n mostRecentAmount: \"1\",\n showVotes: false,\n Committee: true,\n Subcommittee: false\n },\n showHouseAmendments: false,\n showSenateAmendments: false,\n showConferenceAmendments: false,\n showGovernorsRecommendations: false,\n showStatus: {},\n showCommitteeEvent: {},\n showLdNumber: false,\n showClerkNames: false,\n showDlsStaffNames: false,\n personalMessage: \"\",\n billList: billList\n });\n this.props.actions.saveBillReportInformation(window.btoa(jsonData)).then(() => {\n const billReportInformation = this.props.report.billReportInformation;\n if (billReportInformation && billReportInformation.ReportNumber) {\n window.open('/bill-search-report/composite/' + billReportInformation.ReportNumber, '_blank');\n } else {\n this.props.actions.makeToast([{ message: \"Composite View Generation Failed\", type: \"failure\" }]);\n }\n this.setState({ compositeView: false })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.props.actions.makeToast([{ message: \"Composite View Generation Failed\", type: \"failure\" }]);\n this.setState({\n compositeView: false\n });\n })\n })\n }\n\n render() {\n const { isFetching, sessionID, billList, showSidebar, height } = this.state;\n const { errorMessage } = this.props.bills;\n\n const userCanUseCollections = Boolean(this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR));\n\n const nextPageLoadingHeight = '100px';\n\n let billResultRefs = [];\n billList.forEach((_b) => billResultRefs.push(React.createRef()));\n this._billResultRefs = billResultRefs;\n\n let toggleArrows = [];\n for (let i = 1; i <= height; i++) {\n let top = (i * 540).toString() + \"px\";\n toggleArrows.push(<button key={i} type=\"button\" aria-expanded={showSidebar} onClick={this.toggleSidebar} className={showSidebar ? \"sidebar-button arrow-up white-chevron\" : \"sidebar-button arrow-down white-chevron\"} style={{ top: top }}></button>);\n }\n\n return (\n <div className=\"bill-theme bill-search-container\">\n {this.state.historicalSessionRedirect &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content fit-content center-content\">\n <p>For historical data, please use <b>Legacy LIS</b>, available at <b><a href=\"https://legacylis.virginia.gov\" target=\"_blank\" rel=\"noreferrer\">https://legacylis.virginia.gov</a></b>.</p>\n <p>Click 'Go' to be taken to Legacy LIS, or 'Close' to remain here.</p>\n <div className=\"inline-list\">\n <button className=\"button primary float-right\" onClick={() => this.state.historicalSessionRedirect(true)}>Go</button>\n <button className=\"button secondary float-right\" onClick={() => this.state.historicalSessionRedirect(false)}>Close</button>\n </div>\n <br />\n </div>\n </div>\n }\n {this.state.showModal &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content\">\n <p>You will need to click the search button or press the enter key in order to update your search results after removing a search parameter.</p>\n <button className=\"button primary float-right\" onClick={() => this.toggleModal()}>Close</button>\n <br />\n </div>\n </div>\n }\n {this.state.showHelpModal &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content seach-help-modal\">\n <a className=\"float-right\" style={{ cursor: \"pointer\" }} onClick={() => this.toggleHelpModal()}>X</a>\n <SearchHelp />\n <button className=\"button primary float-right\" onClick={() => this.toggleHelpModal()}>Close</button>\n <br />\n </div>\n </div>\n }\n {this.state.showReportMaker &&\n <ReportMaker\n toggleReportMaker={this.toggleReportMaker}\n billList={this.state.mostFrequent ? this.state.billList : this.state.fullLegislationList}\n collections={this.state.collections}\n selectedCollection={this.state.selectedCollection || this.getReportTitleObject()}\n autoReport={this.state.autoReport}\n reportTitle={this.getReportTitle()}\n />\n }\n <br />\n <div className={showSidebar ? \"inner-grid one-toggle-and-three\" : \"inner-grid toggle-and-three\"}>\n {showSidebar &&\n <div>\n <LegislationWatchlists\n collections={this.state.collections}\n isLoading={this.state.collectionIsLoading}\n error={this.props.collection.collectionError}\n selectedCollectionIndex={this.state.selectedCollectionIndex}\n selectCollection={this.selectCollection}\n createCollection={this.createCollection}\n collectionIsSaving={this.state.collectionIsSaving}\n location={this.props.history.location.pathname}\n isAuthor={this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR)}\n />\n <br />\n <AdvancedSearchBox\n ref={this.searchBox}\n selectedBillNumbers={this.state.selectedBillNumbers}\n selectedBillRangeBeginning={this.state.selectedBillRangeBeginning}\n selectedBillRangeEnd={this.state.selectedBillRangeEnd}\n selectedChapterNumber={this.state.selectedChapterNumber}\n selectedKeywords={this.state.selectedKeywords}\n selectedBillEvent={this.state.selectedBillEvent}\n billEventOptions={this.state.billEventOptions}\n sessionOptions={this.state.sessionOptions}\n selectedSession={this.state.selectedSession}\n billStatusCategoryList={this.state.billStatusCategoryList}\n selectedBillStatusCategory={this.state.selectedBillStatusCategory}\n billStatusStartDate={this.state.billStatusStartDate}\n billStatusEndDate={this.state.billStatusEndDate}\n selectedCommittee={this.state.selectedCommittee}\n committeeList={this.state.filteredCommitteeList}\n subcommitteeList={this.state.subcommitteeList}\n selectedSubcommittee={this.state.selectedSubcommittee}\n patronList={this.state.filteredPatronList}\n patronRoles={this.state.patronRoles}\n selectedPatron={this.state.selectedPatron}\n selectedPatronType={this.state.selectedPatronType}\n selectedChamber={this.state.selectedChamber}\n selectedBillType={this.state.selectedBillType}\n billEventEndDate={this.state.billEventEndDate}\n billEventStartDate={this.state.billEventStartDate}\n resetUrl={this.resetUrl}\n handleSubmit={this.handleSubmit}\n handleTextChange={this.handleTextChange}\n handleSelectChange={this.handleSelectChange}\n handleDateChange={this.handleDateChange}\n committeeChange={this.committeeChange}\n chamberChange={this.chamberChange}\n sessionChange={this.sessionChange}\n clearForm={this.clearForm}\n isFetching={this.state.isFetching}\n handlePatronChange={this.handlePatronChange}\n handlePatronTypeChange={this.handlePatronTypeChange}\n subjectList={this.state.subjectList}\n selectedSubject={this.state.selectedSubject}\n toggleGroup={this.toggleGroup}\n billFieldset={this.state.billFieldset}\n keywordFieldset={this.state.keywordFieldset}\n statusFieldset={this.state.statusFieldset}\n activityFieldset={this.state.activityFieldset}\n membersFieldset={this.state.membersFieldset}\n committeesFieldset={this.state.committeesFieldset}\n subjectFieldset={this.state.subjectFieldset}\n showCategories={this.state.showCategories}\n toggleShowCategories={this.toggleShowCategories}\n location={this.props.history.location.pathname}\n searchParam={this.props.history.location.search}\n billVersionList={this.state.billVersionList}\n selectedBillVersion={this.state.selectedBillVersion}\n billSummaryList={this.state.billSummaryList}\n selectedSummaryVersion={this.state.selectedSummaryVersion}\n selectedLocation={this.state.selectedLocation}\n keywordUseGlobalSessionSearch={this.state.keywordUseGlobalSessionSearch}\n handleRadioChange={this.handleRadioChange}\n handleCurrentStatusChange={this.handleCurrentStatusChange}\n currentStatus={this.state.currentStatus}\n handleExcludeFailedChange={this.handleExcludeFailedChange}\n excludeFailed={this.state.excludeFailed}\n toggleHelpModal={this.toggleHelpModal}\n failedToGetSessions={this.state.failedToGetSessions}\n showReportMaker={this.state.showReportMaker}\n showUpdateSearchButton={this.state.showUpdateSearchButton}\n />\n </div>\n }\n <div className={showSidebar ? \"sidebar-toggle-open\" : \"sidebar-toggle-closed\"} onClick={this.toggleSidebar}>\n {toggleArrows.map((a, i) => {\n return (a)\n })}\n </div>\n {this.state.failedToGetSessions ? <div className=\"center input-feedback\" style={{ fontSize: '1em' }}>Failed to retrieve sessions. Please refresh & try again.</div> : !this.state.selectedSession ? <div className=\"center-spinner spinner\">Loading...</div>\n :\n this.state.showCategories ?\n <BillCategories\n session={this.state.sessionOptions.find(session => session.SessionCode === this.props.nav.session)}\n patronList={this.state.patronList}\n committeeList={this.state.groupedCommitteeList}\n subjectList={this.state.subjectList}\n introDateList={this.state.introDateList}\n statusCategoriesList={this.state.billStatusCategoryList}\n isLoading={this.state.billStatusCategoryListIsLoading}\n history={this.props.history}\n location={this.props.history.location.pathname}\n selectedSession={this.state.selectedSession}\n excludeFailed={this.state.excludeFailed}\n />\n :\n <div id=\"results-div\">\n {userCanUseCollections &&\n <React.Fragment>\n <CollectionControls\n searchMade={this.state.searchMade}\n collections={this.state.collections}\n selectedCollection={this.state.selectedCollection}\n selectedCollectionIndex={this.state.selectedCollectionIndex}\n handleCollectionChange={this.handleCollectionChange}\n handleToggleCompositeView={this.handleToggleCompositeView}\n selectCollection={this.selectCollection}\n collectionIsSaving={this.state.collectionIsSaving}\n deleteCollection={this.deleteCollection}\n checkedBills={this.state.checkedBills}\n addToWatchlists={this.addToWatchlists}\n billListLength={this.state.billList.length}\n />\n {!this.state.searchMade &&\n <WatchlistNotifications\n selectedCollection={this.state.selectedCollection}\n handleCollectionChange={this.handleCollectionChange}\n memberList={this.state.patronList}\n committeeList={this.state.groupedCommitteeList}\n criteriaTypes={this.state.criteriaTypes}\n collectionIsSaving={this.state.collectionIsSaving}\n />\n }\n </React.Fragment>\n }\n {this.state.searchMade &&\n <SearchSelections\n currentStatus={this.state.currentStatus}\n selectedSession={this.state.selectedSession}\n selectedBillNumbers={this.state.selectedBillNumbers}\n selectedBillRangeBeginning={this.state.selectedBillRangeBeginning}\n selectedBillRangeEnd={this.state.selectedBillRangeEnd}\n selectedChapterNumber={this.state.selectedChapterNumber}\n selectedKeywords={this.state.searchedKeywords || this.state.selectedKeywords}\n selectedBillEvent={this.state.billEventOptions.find(opt => opt.value === this.state.selectedBillEvent)}\n selectedBillStatusCategory={this.state.billStatusCategoryList.find(opt => opt.value === this.state.selectedBillStatusCategory)}\n billStatusStartDate={this.state.billStatusStartDate}\n billStatusEndDate={this.state.billStatusEndDate}\n selectedCommittee={this.state.committeeList.find(opt => opt.value === this.state.selectedCommittee)}\n selectedSubcommittee={this.state.subcommitteeList.find(opt => opt.value === this.state.selectedSubcommittee)}\n selectedPatron={this.state.patronList.find(opt => opt.value === this.state.selectedPatron)}\n selectedPatronType={this.state.patronRoles.filter(role => this.state.selectedPatronType.includes(role.PatronTypeID))}\n selectedChamber={this.state.selectedChamber}\n billEventEndDate={this.state.billEventEndDate}\n billEventStartDate={this.state.billEventStartDate}\n selectedSubject={this.state.subjectList.find(opt => opt.value === this.state.selectedSubject)}\n excludeFailed={this.state.excludeFailed}\n handleSelectionClear={this.handleSelectionClear}\n handleMultiSelectionClear={this.handleMultiSelectionClear}\n updateSearch={this.state.showUpdateSearchButton ? this.searchBox.current.handleSubmit : null}\n />}\n {!isFetching &&\n <>\n <div className=\"flex-row search-results-title-section\">\n {this.state.searchMade ?\n <>\n {this.state.allLegislation && <h2>All legislation</h2>}\n {this.state.mostFrequent && <h2>Most frequently accessed bills</h2>}\n {this.state.isPending && <h2>Pending bills</h2>}\n {!this.state.isPending && !this.state.mostFrequent && !this.state.allLegislation && <h2 style={{ marginTop: \"0px\", marginBottom: \"10px\" }}>{billList.length === 0 && \"No \"}Search Results</h2>}\n </>\n : <div></div>}\n {!this.state.selectedCollection || this.state.searchMade ?\n <div className=\"inline-list\">\n {billList.length > 0 &&\n <React.Fragment>\n <button onClick={() => this.toggleReportMaker()} id=\"create-report-button\" type=\"button\" className={`${this.state.selectedCollection ? 'set-right ' : ''}button small-button`} style={{ marginRight: '0px', marginTop: \"8px\" }}>Create Report</button>\n </React.Fragment>\n }\n </div>\n :\n <div />\n }\n </div>\n {this.state.selectedCollection &&\n <div className=\"flex-row flex-vertical-center notes-and-controls\">\n {this.state.searchMade ?\n <>\n <div>\n <button\n type=\"button\"\n disabled={this.state.checkedBills.every(b => b === false) || this.state.collectionIsSaving}\n className=\"button small-button\"\n onClick={() => this.addToWatchlists(JSON.parse(JSON.stringify([this.state.selectedCollection])))}>Add</button>\n </div>\n </>\n :\n <>\n <div className=\"inline-list\">\n <button aria-label=\"remove watchlist bills\" onClick={this.removeWatchlistBills} type=\"button\" disabled={this.state.checkedBills.every(b => b === false) || this.state.collectionIsSaving} className=\"button danger small-button\">Remove</button>\n <button aria-label=\"toggle all notes\" disabled={this.state.collectionIsSaving} className=\"button-link toggle-all-notes\" onClick={this.toggleAllNotes} type=\"button\">{this.state.showAllNotes ? \"Hide\" : \"Show\"} All Notes +/-</button>\n </div>\n <div className=\"inline-list\" style={{ marginRight: \"0px\", display: this.state.quickAddErr ? \"grid\" : null }}>\n <QuickAdd\n quickAddBills={this.quickAddBills}\n quickAddErr={this.state.quickAddErr}\n autoFocus={!this.state.skippedRecords}\n collectionIsSaving={this.state.collectionIsSaving}\n />\n {billList.length > 0 &&\n <div style={{ display: 'inline-flex', justifyContent: 'end', marginRight: '0px', marginTop: this.state.quickAddErr ? '5px' : null }}>\n <button onClick={() => this.toggleReportMaker()} id=\"create-report-button\" type=\"button\" className={`${this.state.selectedCollection ? 'set-right ' : ''}button small-button`} style={{ marginRight: '0px' }}>Create Report</button>\n </div>\n }\n </div>\n </>\n }\n </div>\n }\n </>\n }\n <div className=\"public-list search-results\">\n {isFetching && !this.state.skippedRecords ?\n <div className=\"spinner\"></div>\n :\n <>\n {errorMessage ?\n <p className=\"message-error\">{errorMessage}</p>\n :\n null\n }\n </>\n }\n {(!isFetching || this.state.skippedRecords) && billList.length && !errorMessage ?\n <ul className=\"slidedown-list\">\n <div className='flex-row'>\n {userCanUseCollections ?\n <label htmlFor=\"sr-select-all\"\n className=\"txt-greyed\">\n <input id=\"sr-select-all\" checked={this.state.selectAllBills} onChange={this.toggleAllBills} type=\"checkbox\" style={{ verticalAlign: 'sub', marginRight: '10px' }} />\n Select all</label>\n :\n <div></div>}\n {!errorMessage && <span id=\"search-result-count\" className=\"txt-greyed\">{this.state.totalResults} {this.state.searchMade ? \"Result\" : \"Item\"}{this.state.totalResults !== 1 && \"s\"}</span>}\n </div>\n {!this.state.displayCrossSession && <hr className=\"faded-line\" />}\n {billList.map((bill, i) =>\n <React.Fragment>\n {this.state.displayCrossSession && i === 0 &&\n <div className=\"search-session-header\">\n <label>{this.state.sessionOptions.find(x => x.SessionID === bill.SessionID).SessionYear + \" \" + this.state.sessionOptions.find(x => x.SessionID === bill.SessionID).DisplayName}</label>\n </div>\n }\n\n {this.state.displayCrossSession && billList[i + 1] && billList[i].SessionID != billList[i + 1].SessionID || this.state.displayCrossSession && billList[i + 1] === undefined\n ?\n <React.Fragment>\n <BillInfoComponent\n key={i}\n ref={this._billResultRefs[i]}\n userCanUseCollections={userCanUseCollections}\n bill={bill}\n billIndex={i}\n sessionID={sessionID}\n toggleShowData={this.toggleShowData}\n expanded={this.state[bill.LegislationID]}\n sessionCode={this.state.sessionOptions.find(session => session.SessionID === bill.SessionID) && this.state.sessionOptions.find(session => session.SessionID === bill.SessionID).SessionCode}\n selectedCollection={this.state.selectedCollection}\n handleCollectionChange={this.handleCollectionChange}\n collectionIsSaving={this.state.collectionIsSaving}\n handleBillCheckbox={e => this.handleBillCheckbox(i, e)}\n checked={this.state.checkedBills[i]}\n selectedKeywords={this.state.searchedKeywords || this.state.selectedKeywords}\n selectedLocation={this.state.displaySelectedLocation}\n searchMade={this.state.searchMade}\n session={this.state.sessionOptions.find(x => x.SessionID === bill.SessionID)}\n displayCrossSession={this.state.displayCrossSession}\n newSession={true}\n displayChapterNumber={this.state.selectedChapterNumber || (this.state.selectedBillStatusCategory && this.state.billStatusCategoryList.find(it => it.Name.toLowerCase() === \"acts of assembly chapters\") && this.state.selectedBillStatusCategory === this.state.billStatusCategoryList.find(it => it.Name.toLowerCase() === \"acts of assembly chapters\").LegislationCategoryID)}\n compositeView={this.state.compositeView}\n />\n {billList[i + 1] &&\n <div className=\"search-session-header\">\n <label>{this.state.sessionOptions.find(x => x.SessionID === billList[i + 1].SessionID).SessionYear + \" \" + this.state.sessionOptions.find(x => x.SessionID === billList[i + 1].SessionID).DisplayName}</label>\n </div>\n }\n </React.Fragment>\n :\n <BillInfoComponent\n key={i}\n ref={this._billResultRefs[i]}\n userCanUseCollections={userCanUseCollections}\n bill={bill}\n billIndex={i}\n sessionID={sessionID}\n sessionCode={this.state.sessionOptions.find(session => session.SessionID === bill.SessionID) && this.state.sessionOptions.find(session => session.SessionID === bill.SessionID).SessionCode}\n selectedCollection={this.state.selectedCollection}\n handleCollectionChange={this.handleCollectionChange}\n collectionIsSaving={this.state.collectionIsSaving}\n handleBillCheckbox={e => this.handleBillCheckbox(i, e)}\n checked={this.state.checkedBills[i]}\n selectedKeywords={this.state.searchedKeywords || this.state.selectedKeywords}\n toggleShowData={this.toggleShowData}\n expanded={this.state[bill.LegislationID]}\n selectedLocation={this.state.displaySelectedLocation}\n searchMade={this.state.searchMade}\n session={this.state.sessionOptions.find(x => x.SessionID === bill.SessionID)}\n displayCrossSession={this.state.displayCrossSession}\n displayChapterNumber={this.state.selectedChapterNumber || (this.state.selectedBillStatusCategory && this.state.billStatusCategoryList.find(it => it.Name.toLowerCase() === \"acts of assembly chapters\") && this.state.selectedBillStatusCategory === this.state.billStatusCategoryList.find(it => it.Name.toLowerCase() === \"acts of assembly chapters\").LegislationCategoryID)}\n compositeView={this.state.compositeView}\n />\n }\n </React.Fragment>\n )}\n </ul>\n : null\n }\n </div>\n </div>\n }\n </div>\n <div\n ref={loadingRef => (this.loadingRef = loadingRef)}\n style={{ position: 'relative', bottom: !isFetching && this.state.hasNextPage ? ((window.innerHeight || document.documentElement.clientHeight) * .35) + 'px' : null }}\n >\n {isFetching && this.state.skippedRecords ?\n <div className=\"spinner\" style={{ height: nextPageLoadingHeight, margin: 'auto' }}></div>\n :\n this.state.hasNextPage ?\n <div style={{ marginTop: nextPageLoadingHeight }} />\n : null\n }\n </div>\n </div>\n )\n }\n}\n\nconst PublicBillSearch = connect(\n (state) => {\n const { bills, session, members, committee, patrons, nav, collection, login, report } = state;\n return {\n bills,\n session,\n members,\n committee,\n patrons,\n nav,\n collection,\n login,\n report\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, committeeActionCreators, billActionCreators, sessionActionCreators, memberActionCreators, patronActionCreators, navActionCreators, collectionActionCreators, reportActionCreators), dispatch)\n }\n }\n)(BillSearchComponent)\n\nexport default PublicBillSearch;","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport {reportActionCreators} from '../../../stores/lis-report-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\n\nclass ShareReport extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n emailAddresses: '',\n isSharing: false\n };\n this.handleEmailAddressChange = this.handleEmailAddressChange.bind(this);\n this.sendReport = this.sendReport.bind(this);\n }\n\n \n handleEmailAddressChange(e) {\n this.setState({\n emailAddresses: e.target.value\n });\n }\n\n sendReport() {\n this.setState({\n isSharing: true\n });\n const url = encodeURIComponent(window.location.href);\n const emailAddresses = encodeURIComponent(this.state.emailAddresses);\n this.props.actions.shareReport(`?link=${url}&addresses=${emailAddresses}`)\n .then(() => {\n this.props.actions.makeToast([{ message: \"Share Successful\", type: \"success\" }]);\n this.setState({\n isSharing: false,\n emailAddresses: ''\n })\n }).catch(err => {\n if(err === \"Aborted\") {\n return\n }\n this.setState({\n isSharing: false\n })\n this.props.actions.makeToast([{ message: \"Share Failed\", type: \"failure\" }]);\n })\n }\n\n render() {\n return(<div onClick={!this.state.isSharing ? this.props.toggleShareForm : null} className=\"overlay center-content\">\n <div className=\"full\">\n <div onClick={e => e.stopPropagation()} className=\"dlas-forms user-forms advanced-search overlay-content animated-fade-in-up\">\n <div>\n <label htmlFor=\"email-addresses-to-send-to\" className=\"label\">Share link to report. (Seperate email addresses by a comma)</label>\n <div className=\"inline-list\">\n <input id=\"email-addresses-to-send-to\" aria-label=\"Email addresses to send to\" style={{width: \"90%\"}}onChange={this.handleEmailAddressChange} value={this.state.emailAddresses} placeholder=\"Email addresses to send to\"/>\n </div>\n </div>\n <br />\n <hr className=\"faded-line\" />\n <div className=\"align-right inline-list\">\n {this.state.isSharing &&\n <div className=\"small-spinner\"></div>\n }\n <button type=\"button\" disabled={this.state.isSharing} className=\"button secondary\" onClick={this.props.toggleShareForm}>Close</button>\n <button type=\"button\" disabled={this.state.isSharing || !this.state.emailAddresses} className=\"button\" onClick={this.sendReport}>Share</button>\n </div>\n </div>\n </div>\n </div>);\n }\n}\n\nexport default connect(\n (state) => {\n const { report, nav } = state;\n return {\n report,\n nav\n \n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, reportActionCreators, navActionCreators), dispatch)\n }\n }\n)(ShareReport);","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport renderHTML from 'react-render-html';\nimport moment from 'moment-timezone';\nimport { saveAs } from 'file-saver';\nimport { generateCsv } from '../../../services/csv.service';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport stripTags from \"striptags\";\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { patronActionCreators } from '../../../stores/lis-patron-store';\nimport { voteActionCreators } from '../../../stores/lis-votes-store';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\nimport { reportActionCreators } from \"../../../stores/lis-report-store\";\nimport { personnelActionCreators } from '../../../stores/lis-personnel-store';\nimport { Link } from 'react-router-dom';\n\nimport ShareReport from './share-report'\n\nconst BILL_COLLECTION_AUTHOR = \"LegislationCollections\";\nconst STAFF = \"STAFF\";\nconst CLERKS = \"CLERKS\";\n\nconst MAX_BILL_HISTORY_CHUNK_SIZE = 125;\n\nconst weights = {\n \"Committee\": 1,\n \"Subcommittee\": 2,\n \"recent\": 3,\n \"all\": 4\n}\nconst sortBillHistoryTypes = (typeA, typeB) => {\n return weights[typeA] - weights[typeB];\n}\n\nclass ReportMaker extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCatchline: true,\n showCurrentStatus: true,\n showTitle: false,\n showChiefPatron: false,\n showAllPatrons: false,\n showSummary: false,\n showNotes: false,\n selectedNotes: 'all',\n showHistory: false,\n showHouseAmendments: false,\n showSenateAmendments: false,\n showConferenceAmendments: false,\n showGovernorsRecommendations: false,\n showStatus: {},\n showCommitteeEvent: {},\n showLdNumber: false,\n showClerkNames: false,\n showDlsStaffNames: false,\n billData: [],\n billList: [],\n collections: [],\n committeeClerksAndStaff: [],\n generatingBillNumbers: true,\n generatingReport: true,\n hbCount: 0,\n hjCount: 0,\n sbCount: 0,\n sjCount: 0,\n showTooltip: false,\n compositeSortValue: \"LegislationNumberAsc\",\n showNotes: true\n };\n this.getReportData = this.getReportData.bind(this);\n this.makeHtml = this.makeHtml.bind(this);\n this.makePrintout = this.makePrintout.bind(this);\n this.makeSpreadsheet = this.makeSpreadsheet.bind(this);\n this.toggleShareForm = this.toggleShareForm.bind(this);\n this.toggleTooltip = this.toggleTooltip.bind(this);\n this.getBillHistoryTypeLabel = this.getBillHistoryTypeLabel.bind(this);\n this.toggleCompositeSort = this.toggleCompositeSort.bind(this);\n this.toggleShowNotes = this.toggleShowNotes.bind(this);\n\n this.reportData = React.createRef();\n this.htmlRef = React.createRef();\n this.printOutRef = React.createRef();\n }\n\n async getCommitteeClerksOrStaff(bill, sessionStartDate, role) {\n if (role === STAFF) {\n bill.loadingStaffNames = true;\n } else {\n bill.loadingClerkNames = true;\n }\n this.props.actions.getPersonnelList(\"staffroletypeid=\" + role === STAFF ? this.state.staffRoleTypeID : this.state.clerkRoleTypeID + \"&affiliationID=\" + bill.CommitteeID + \"&effectiveBeginDate=\" + sessionStartDate, true)\n .then(() => {\n let committeeClerksAndStaff = [...this.state.committeeClerksAndStaff];\n let personnelList = role === STAFF ? this.props.personnel.personnelStaffList : this.props.personnel.personnelClerkList;\n personnelList.forEach(p => {\n p.SessionID = bill.SessionID\n })\n committeeClerksAndStaff = committeeClerksAndStaff.concat(personnelList);\n this.setState({ committeeClerksAndStaff })\n })\n if (role === STAFF) {\n bill.loadingStaffNames = false;\n } else {\n bill.loadingClerkNames = false;\n }\n }\n\n async getLdNumber(bill, versions) {\n bill.loadingLdNumber = true;\n if (!versions) {\n const params = '?BillNumber=' + bill.LegislationNumber + '&sessionID=' + bill.SessionID;\n await this.props.actions.getBillVersionByBillNumber(params).then(async () => {\n versions = this.props.bills.billVersion || [];\n })\n }\n const fullTextVersions = versions.filter(v => v.IsActive && [\"Engrossed\", \"Reengrossed\", \"Enrolled\", \"Reenrolled\", \"Chaptered\", \"Governor's Veto\", \"Introduced\", \"Substitute\"].includes(v.Version));\n const latestFullTextVersion = fullTextVersions.length ? fullTextVersions.reduce(function (r, a) {\n return r.DraftDate > a.DraftDate ? r : a;\n }) : null;\n bill.LdNumber = latestFullTextVersion ? latestFullTextVersion.LDNumber : null;\n bill.loadingLdNumber = false;\n }\n\n async getAmendments(bill) {\n bill.loadingAmendments = true;\n const params = '?BillNumber=' + bill.LegislationNumber + '&sessionID=' + bill.SessionID;\n await this.props.actions.getBillVersionByBillNumber(params).then(async () => {\n if (this.state.showLdNumber) {\n bill.LdNumber = this.getLdNumber(this.props.bills.billVersion || []);\n }\n bill.amendments = [];\n const amendments = this.props.bills.billVersion.filter(version => {\n if (version.Version.includes('Amendment') && ((this.state.showHouseAmendments && version.ChamberCode === 'H') || (this.state.showSenateAmendments && version.ChamberCode === 'S'))) {\n return true;\n } else if (version.Version.includes('Conference') && this.state.showConferenceAmendments) {\n return true;\n } else if (version.Version.includes('Recommendation') && this.state.showGovernorsRecommendations) {\n return true;\n }\n return false;\n });\n for (let i = 0; i < amendments.length; i++) {\n await this.props.actions.getBillText('?isPublic=true&legislationTextID=' + amendments[i].LegislationTextID)\n .then(() => {\n if (this.props.bills.billText !== 0) {\n bill.amendments.push(this.props.bills.billText[0]);\n }\n })\n }\n bill.loadingAmendments = false;\n return Promise.resolve();\n }).catch(err => {\n bill.loadingAmendments = false;\n return Promise.reject(err);\n });\n }\n\n async getBillHistory(bills) {\n const { showHistory } = this.state;\n let legislationIDs = \"\";\n bills.forEach((bill, i) => {\n bill.loadingHistory = true;\n legislationIDs += `${i === 0 ? '?' : '&'}legislationIDs=${bill.LegislationID}`;\n })\n await this.props.actions.getBillHistoryByBillID(legislationIDs)\n .then(async () => {\n const allResults = this.props.bills.billHistory;\n for (const bill of bills) {\n let results = allResults.filter(b => b.LegislationID === bill.LegislationID);\n\n let billHistory = {};\n if (showHistory.recent) {\n if (results.length > showHistory.mostRecentAmount) {\n billHistory.recent = results.slice(results.length - parseInt(showHistory.mostRecentAmount || 0));\n } else {\n billHistory.recent = results;\n }\n } else if (showHistory.all) {\n billHistory.all = results;\n }\n if (showHistory.Committee || showHistory.Subcommittee) {\n results.forEach(historyItem => {\n if (historyItem.CommitteeName && !historyItem.ParentCommitteeName && showHistory.Committee) {\n //Need to get the full list of committee events in composite view\n //so we can get the latest committee event for both chambers -JGB\n if (!this.props.match.path.includes(\"composite\")) {\n billHistory.Committee = [historyItem];\n } else if (historyItem.Status === \"In Committee\") {\n if (!billHistory.Committee) {\n billHistory.Committee = [];\n }\n billHistory.Committee.push(historyItem);\n }\n } else if (historyItem.ParentCommitteeName && showHistory.Subcommittee) {\n billHistory.Subcommittee = [historyItem];\n }\n });\n }\n let committeeEvents = {};\n results.forEach(historyItem => {\n if (!committeeEvents.firstSenateCommitteeEvent && historyItem.ChamberCode === \"S\" && historyItem.Status === \"In Committee\") {\n committeeEvents.firstSenateCommitteeEvent = historyItem;\n }\n if (!committeeEvents.firstHouseCommitteeEvent && historyItem.ChamberCode === \"H\" && historyItem.Status === \"In Committee\") {\n committeeEvents.firstHouseCommitteeEvent = historyItem;\n }\n if (historyItem.ChamberCode === \"S\" && historyItem.Status === \"In Subcommittee\") {\n committeeEvents.lastSenateSubcommitteeEvent = historyItem;\n }\n if (historyItem.ChamberCode === \"H\" && historyItem.Status === \"In Subcommittee\") {\n committeeEvents.lastHouseSubcommitteeEvent = historyItem;\n }\n });\n bill.committeeEvents = committeeEvents;\n bill.billHistory = billHistory;\n bill.loadingHistory = false;\n if (showHistory.showVotes) {\n //Can't use a foreach function right here because async will not work since foreach takes a function.\n for (let i = 0; i < results.length; i++) {\n if (results[i].VoteID) {\n this.getVoteDetails(results, i);\n }\n }\n }\n };\n return Promise.resolve()\n }).catch(err => { bills.map(bill => bill.loadingHistory = false); Promise.reject(err) });\n }\n\n async getVoteDetails(billHistory, i) {\n billHistory[i].loadingVotes = true;\n await this.props.actions.getVoteDetails('?voteID=' + billHistory[i].VoteID)\n .then(() => {\n const voteData = this.props.votes.voteDetailsResponse[0];\n let voteDetails = {};\n voteDetails.ChamberCode = voteData.ChamberCode;\n voteDetails.VoteType = voteData.VoteType;\n voteDetails.memberYeas = voteData.VoteMember.filter(nObj => nObj.ResponseCode === 'Y');\n voteDetails.memberNays = voteData.VoteMember.filter(nObj => nObj.ResponseCode === 'N');\n voteDetails.memberAbstentions = voteData.VoteMember.filter(nObj => nObj.ResponseCode === 'A');\n voteDetails.memberNoVote = voteData.VoteMember.filter(nObj => nObj.ResponseCode === 'X');\n voteDetails.voteStatements = voteData.VoteMember.filter(member => member.VoteStatement);\n // Abstentions appear as rule 36 on senate floor tally sheets\n if (voteData.ChamberCode === \"S\" && voteData.VoteType === \"Floor\") {\n voteDetails.memberRule36 = voteData.VoteMember.filter(nObj => nObj.ResponseCode === 'A');\n } else {\n voteDetails.memberRule36 = voteData.VoteMember.filter(nObj => nObj.ResponseCode === 'R');\n }\n billHistory[i].voteDetails = voteDetails;\n billHistory[i].loadingVotes = false;\n return Promise.resolve()\n }).catch(err => {\n billHistory[i].loadingVotes = false;\n return Promise.reject(err);\n });\n }\n\n async getPatrons(bill) {\n bill.loadingPatrons = true;\n await this.props.actions.getPatronList(bill.LegislationID)\n .then(() => {\n bill.Patrons = this.props.patrons.patronList\n bill.loadingPatrons = false;\n return Promise.resolve\n }).catch(err => { bill.loadingPatrons = false; Promise.reject(err) });\n }\n\n async getBillStatusHistory(bill) {\n bill.loadingStatusHistory = true;\n let body = { \"LegislationIDs\": [{ \"LegislationID\": bill.LegislationID }] }\n await this.props.actions.getBillStatusHistory(body)\n .then(() => {\n bill.billStatuses = this.props.bills.legislationStatusHistory[0]\n bill.loadingStatusHistory = false;\n return Promise.resolve\n }).catch(err => { bill.loadingStatusHistory = false; Promise.reject(err) });\n }\n\n async getWatchlists(params) {\n await this.props.actions.getCollections(params)\n .then(() => {\n this.setState({\n collections: this.props.collection.collections\n }, () => {\n return Promise.resolve()\n })\n }).catch(err => Promise.reject(err));\n }\n\n getReportData() {\n const { showTitle, showChiefPatron, showAllPatrons, showNotes, userCreated, showHistory, showHouseAmendments, showSenateAmendments, showConferenceAmendments, showGovernorsRecommendations, showStatus, showCommitteeEvent, showLdNumber, showClerkNames, showDlsStaffNames, selectedCollection, billList } = this.state;\n const params = {\n LegislationNumbers: [{ LegislationNumber: billList.map(bill => bill.LegislationNumber).join() }],\n SessionID: billList[0].SessionID\n };\n this.setState({\n sbCount: billList.filter(bill => bill.LegislationNumber.includes('SB')).length,\n sjCount: billList.filter(bill => bill.LegislationNumber.includes('SJ')).length,\n hbCount: billList.filter(bill => bill.LegislationNumber.includes('HB')).length,\n hjCount: billList.filter(bill => bill.LegislationNumber.includes('HJ')).length\n });\n this.props.actions.getBillList(params).then(() => {\n this.setState({\n generatingBillNumbers: false\n })\n let committeePromises = [];\n let patronPromises = [];\n let historyPromises = [];\n let textPromises = [];\n let statusHistoryPromises = [];\n let billData = this.props.bills.billList;\n //Filter to only one result per bill per session since DB sometimes returns duplicates\n billData = billData.filter((item, pos) => billData.findIndex(i => i.LegislationNumber === item.LegislationNumber && i.SessionID === item.SessionID) === pos);\n //The backend will return the requested bill numbers in alphanumeric order, regardless of the bill number order in the request\n //With that in mind, if the report is created from within bill search, the list of bill numbers stored in the report & sent in the request above will be sorted alphanumerically, so the backend sort is the same and desired\n //If coming from a calendar, however, the list of bill numbers will initially be sorted in calendar order, which is desired, but the api will return the bills alphanumerically\n //That said, the initial bill number order (stored in the report object) is always the proper order, so we need to sort the response back to that\n billData.sort((a, b) => billList.findIndex(l => l.LegislationNumber === a.LegislationNumber && l.SessionID === a.SessionID) - billList.findIndex(l => l.LegislationNumber === b.LegislationNumber && l.SessionID === b.SessionID))\n let showStatusBool = false;\n for (const key in showStatus) {\n if (showStatus[key] === true && key !== \"showEmergency\") {\n showStatusBool = true;\n }\n }\n let showCommitteeEventBool = false;\n for (const key in showCommitteeEvent) {\n if (showCommitteeEvent[key] === true) {\n showCommitteeEventBool = true;\n }\n }\n this.setState({\n billData,\n gettingBillHistory: showHistory || showCommitteeEventBool ? true : false,\n gettingBillStatusHistory: showStatusBool ? true : false,\n gettingClerkNames: showClerkNames ? true : false,\n gettingStaffNames: showDlsStaffNames ? true : false,\n gettingPatrons: showAllPatrons ? true : false,\n gettingVotes: showHistory && showHistory.showVotes ? true : false,\n gettingLdNumbers: showLdNumber ? true : false,\n gettingAmendments: showHouseAmendments || showSenateAmendments || showConferenceAmendments || showGovernorsRecommendations ? true : false\n }, () => {\n let watchlistPromise = null;\n if (showNotes && this.props.login.userProfile.email === userCreated) {\n watchlistPromise = this.getWatchlists(\"?SessionID=\" + billList[0].SessionID);\n } else {\n watchlistPromise = new Promise(resolve => resolve());\n }\n watchlistPromise.then(() => {\n if (showClerkNames || showDlsStaffNames) {\n this.props.actions.getRoleTypes()\n .then(() => {\n const clerkRoleType = this.props.personnel.roleTypes.find(x => x.Name.toLowerCase() === 'committee clerk')\n const clerkRoleTypeID = clerkRoleType ? clerkRoleType.StaffRoleTypeID : 0;\n const staffRoleType = this.props.personnel.roleTypes.find(x => x.Name.toLowerCase() === 'committee staff')\n const staffRoleTypeID = staffRoleType ? staffRoleType.StaffRoleTypeID : 0;\n this.setState({ clerkRoleTypeID, staffRoleTypeID }, () => {\n this.props.actions.getSessionList().then(() => {\n let committeesAndSessionsToSearch = [];\n const sessionList = this.props.session.sessionList;\n billData.forEach(b => {\n if (b.CommitteeID && b.SessionID && !committeesAndSessionsToSearch.find(c => c.CommitteeID === b.CommitteeID && c.SessionID === b.SessionID)) {\n committeesAndSessionsToSearch.push({ CommitteeID: b.CommitteeID, SessionID: b.SessionID });\n if (showClerkNames) {\n committeePromises.push(this.getCommitteeClerksOrStaff(b, sessionList.find(sl => sl.SessionID === b.SessionID).SessionEvents.find(se => se.EventTypeID === 1).ActualDate, CLERKS));\n }\n if (showDlsStaffNames) {\n committeePromises.push(this.getCommitteeClerksOrStaff(b, sessionList.find(sl => sl.SessionID === b.SessionID).SessionEvents.find(se => se.EventTypeID === 1).ActualDate, STAFF));\n }\n }\n })\n })\n })\n })\n }\n let billHistoryChunks = [];\n billData.forEach(bill => {\n bill['Chief Patron'] = bill.Patrons;\n if (showAllPatrons) {\n patronPromises.push(this.getPatrons(bill));\n } else {\n patronPromises.push(() => Promise.resolve());\n }\n bill.Notes = [];\n if (showStatus.showEmergency) {\n bill.Emergency = bill.EffectiveType === 'Emergency' ? \"Y\" : \"N\"\n }\n if (showStatusBool) {\n statusHistoryPromises.push(this.getBillStatusHistory(bill));\n } else {\n statusHistoryPromises.push(() => Promise.resolve());\n }\n if (showNotes) {\n if (this.state.selectedNotes === 'all') {\n this.state.collections.forEach(coll => {\n let note = coll.WatchListLegislation.find(leg => leg.LegislationID === bill.LegislationID && leg.Note);\n if (note) {\n bill.Notes.push({ ...note, ListName: coll.Name });\n }\n });\n }\n if (this.state.selectedNotes === 'current') {\n this.state.collections.forEach(coll => {\n if (coll.WatchListID === selectedCollection) {\n let note = coll.WatchListLegislation.find(leg => leg.LegislationID === bill.LegislationID && leg.Note);\n if (note) {\n bill.Notes.push({ ...note, ListName: coll.Name });\n }\n }\n });\n }\n }\n if (showHistory || showCommitteeEventBool) {\n if (!billHistoryChunks[0] || billHistoryChunks[billHistoryChunks.length - 1].length >= MAX_BILL_HISTORY_CHUNK_SIZE) {\n billHistoryChunks.push([bill]);\n } else if (billHistoryChunks[billHistoryChunks.length - 1].length < MAX_BILL_HISTORY_CHUNK_SIZE) {\n billHistoryChunks[billHistoryChunks.length - 1].push(bill);\n }\n }\n if (showHouseAmendments || showSenateAmendments || showConferenceAmendments || showGovernorsRecommendations) {\n textPromises.push(this.getAmendments(bill));\n } else if (showLdNumber) {\n textPromises.push(this.getLdNumber(bill))\n } else {\n textPromises.push(() => Promise.resolve());\n }\n this.setState({ billData });\n });\n if (billHistoryChunks.length) {\n billHistoryChunks.forEach(chunk => historyPromises.push(this.getBillHistory(chunk)))\n } else {\n historyPromises.push(() => Promise.resolve());\n }\n Promise.all(committeePromises).then(() => this.setState({ gettingClerkNames: false, gettingStaffNames: false }));\n Promise.all(patronPromises).then(() => this.setState({ gettingPatrons: false }));\n Promise.all(historyPromises).then(() => this.setState({ gettingBillHistory: false, gettingVotes: false }));\n Promise.all(textPromises).then(() => this.setState({ gettingAmendments: false, gettingLdNumbers: false }));\n Promise.all(statusHistoryPromises).then(() => this.setState({ gettingBillStatusHistory: false }));\n\n Promise.all(committeePromises.concat(patronPromises).concat(historyPromises).concat(textPromises).concat(statusHistoryPromises)).then(() => {\n this.setState({ generatingReport: false })\n }).catch((e) => {\n console.log(e);\n this.setState({ generatingReport: false })\n })\n });\n });\n }).catch(err => {\n this.setState({\n reportError: err.toString(),\n generatingReport: false,\n generatingBillNumbers: false\n });\n });\n }\n\n makePrintout() {\n let printWindow = this.printOutRef.current;\n\n const pageStyles = document.querySelectorAll(\"style, link[rel='stylesheet']\");\n pageStyles.forEach(el => {\n printWindow.contentDocument.head.appendChild(el.cloneNode(true));\n });\n const reportDataNode = ReactDOM.findDOMNode(this.reportData.current);\n const contentData = reportDataNode.outerHTML;\n printWindow.contentDocument.body.innerHTML = contentData;\n printWindow.focus();\n // timeout is because some browsers do not set the content of the document in time. Since there is no way to check when it is actually finished this 10 millisecond timeout should do the trick.\n setTimeout(() => printWindow.contentWindow.print(), 10);\n }\n\n makeHtml() {\n const htmlRefNode = ReactDOM.findDOMNode(this.htmlRef.current);\n let x = htmlRefNode.querySelectorAll('a');\n x.forEach(el => {\n el.setAttribute('href', el.href);\n })\n let breaks = htmlRefNode.querySelectorAll('hr');\n [...breaks].forEach(b => {\n b.parentNode.removeChild(b);\n });\n const fileName = `Search Results ${moment().format(\"MM_DD_YYYY HH mm\")}.html`\n saveAs(new Blob([htmlRefNode.innerHTML], { type: \"text/html\" }), fileName);\n }\n\n makeSpreadsheet() {\n const { showCatchline, showCurrentStatus, showTitle, showChiefPatron, showAllPatrons, showSummary, showNotes, showHistory, showHouseAmendments, showSenateAmendments, showConferenceAmendments, showGovernorsRecommendations, showStatus, showCommitteeEvent, billData } = this.state;\n let headers = [\"Billno\"];\n let historyRows = [];\n let historyHeaders = [\"Billno\", \"Date\", \"Description\"];\n if ((showHistory.all || (showHistory.recent && showHistory.mostRecentAmount > 1)) && showHistory.showVotes) {\n historyHeaders.push(\"YEAS\", \"NAYS\", \"NOT VOTING\", \"ABSTENTIONS\", \"RULE 36\");\n }\n billData.forEach(bill => {\n //Billno needs to be in hyperlink format; to get the appropriate href attr, create a fake element and attach to the DOM and use the resulting href\n let el = document.createElement(\"a\");\n el.style.display = 'none';\n el.href = `/bill-details/${bill[\"SessionCode\"]}/${bill[\"LegislationNumber\"]}`; //relative path; the following logic will turn it into the real/appropriate href (e.g. https://test.lis... or https://qa.lis...)\n el.className = bill[\"LegislationNumber\"];\n document.body.appendChild(el);\n const href = document.getElementsByClassName(bill[\"LegislationNumber\"])[0];\n document.body.removeChild(el);\n const hyperlinkedBill = `=HYPERLINK(\"\"${href}` + `\"\",\"\"` + bill[\"LegislationNumber\"] + `\"\")`;\n bill[\"Billno\"] = hyperlinkedBill;\n if (showCatchline) {\n headers.push(\"Catch line\");\n bill[\"Catchline\"] = bill[\"Description\"];\n }\n if (showCurrentStatus)\n headers.push(\"LegislationStatus\");\n if (showTitle)\n headers.push(\"LegislationTitle\");\n if (showSummary) {\n headers.push(\"LegislationSummary\");\n }\n if (showChiefPatron) {\n let patrons = bill.Patrons ? bill.Patrons.filter(p => p.Name === 'Chief Patron').map(patron => patron.PatronDisplayName) : [];\n patrons = patrons.join(', ');\n const header = \"Chief Patron\";\n headers.push(header);\n bill[header.replaceAll(\" \", \"\")] = patrons;\n }\n if (showAllPatrons) {\n let patrons = bill.Patrons ? bill.Patrons.map(patron => {\n let formattedName = patron.PatronDisplayName\n if (patron.Name === 'Chief Patron') {\n formattedName += ' ' + patron.DisplayName;\n }\n return formattedName;\n }) : [];\n patrons = patrons.join(', ');\n const header = \"All Patrons\";\n headers.push(header);\n bill[header.replaceAll(\" \", \"\")] = patrons;\n }\n if (showStatus.showEmergency) {\n headers.push(\"Emergency\");\n }\n if (showHistory) {\n if (showHistory.Committee) {\n const header = this.getBillHistoryTypeLabel(\"Committee\");\n headers.push(header);\n }\n if (showHistory.Subcommittee) {\n const header = this.getBillHistoryTypeLabel(\"Subcommittee\");\n headers.push(header);\n }\n if (showHistory.recent && showHistory.mostRecentAmount < 2) {\n const header = this.getBillHistoryTypeLabel(\"recent\");\n headers.push(header);\n }\n Object.entries(bill.billHistory).sort(([typeA, itemsA], [typeB, itemsB]) => sortBillHistoryTypes(typeA, typeB)).map(([billHistoryType, billHistoryItems]) => {\n if (billHistoryType === 'all' || (billHistoryType === 'recent' && showHistory.mostRecentAmount > 1)) {\n billHistoryItems.map(historyItem => {\n let newRow = { ...historyItem, Billno: hyperlinkedBill, Date: moment(historyItem.EventDate).format('MM/DD/YYYY') }\n if (showHistory.showVotes) {\n if (historyItem.voteDetails) {\n newRow.YEAS = historyItem.voteDetails.memberYeas.map(item => item.PatronDisplayName).join();\n newRow.NAYS = historyItem.voteDetails.memberNays.map(item => item.PatronDisplayName).join();\n newRow[\"NOTVOTING\"] = historyItem.voteDetails.memberNoVote.map(item => item.PatronDisplayName).join();\n newRow.ABSTENTIONS = historyItem.voteDetails.memberAbstentions.map(item => item.PatronDisplayName).join();\n newRow[\"RULE36\"] = historyItem.voteDetails.memberRule36.map(item => item.PatronDisplayName).join();\n }\n }\n historyRows.push(newRow)\n });\n } else {\n billHistoryItems.map(historyItem => {\n if (showHistory.showVotes) {\n if (historyItem.voteDetails) {\n headers.push(\"YEAS\", \"NAYS\", \"NOT VOTING\", \"ABSTENTIONS\", \"RULE 36\");\n bill.YEAS = historyItem.voteDetails.memberYeas.map(item => item.PatronDisplayName).join();\n bill.NAYS = historyItem.voteDetails.memberNays.map(item => item.PatronDisplayName).join();\n bill[\"NOTVOTING\"] = historyItem.voteDetails.memberNoVote.map(item => item.PatronDisplayName).join();\n bill.ABSTENTIONS = historyItem.voteDetails.memberAbstentions.map(item => item.PatronDisplayName).join();\n bill[\"RULE36\"] = historyItem.voteDetails.memberRule36.map(item => item.PatronDisplayName).join();\n }\n }\n const header = this.getBillHistoryTypeLabel(billHistoryType);\n bill[header.replaceAll(\" \", \"\")] = historyItem.Description;\n });\n }\n });\n }\n if (bill.billStatuses) {\n if (showStatus.showPassedHouse) {\n headers.push(\"Passed House\");\n bill[\"PassedHouse\"] = bill.billStatuses.PassedHouse;\n }\n if (showStatus.showPassedSenate) {\n headers.push(\"Passed Senate\");\n bill[\"PassedSenate\"] = bill.billStatuses.PassedSenate;\n }\n if (showStatus.showPassed) {\n headers.push(\"Passed\");\n bill[\"Passed\"] = bill.billStatuses.Passed;\n }\n if (showStatus.showFailed) {\n headers.push(\"Failed\");\n bill[\"Failed\"] = bill.billStatuses.Failed;\n }\n if (showStatus.showContinued) {\n headers.push(\"Continued\");\n bill[\"Continued\"] = bill.billStatuses.Continued;\n }\n if (showStatus.showApproved) {\n headers.push(\"Approved\");\n bill[\"Approved\"] = bill.billStatuses.Approved;\n }\n if (showStatus.showVetoed) {\n headers.push(\"Vetoed\");\n bill[\"Vetoed\"] = bill.billStatuses.Vetoed;\n }\n }\n\n if (bill.committeeEvents) {\n if (showCommitteeEvent.showFirstHouseCommittee) {\n headers.push(\"1st House com\")\n bill[\"1stHousecom\"] = bill.committeeEvents.firstHouseCommitteeEvent ? `${moment(bill.committeeEvents.firstHouseCommitteeEvent.EventDate).format(\"MM/DD/YY\")} ${bill.committeeEvents.firstHouseCommitteeEvent.ChamberCode} ${bill.committeeEvents.firstHouseCommitteeEvent.Description}` : \"\";\n }\n if (showCommitteeEvent.showFirstSenateCommittee) {\n headers.push(\"1st Senate com\")\n bill[\"1stSenatecom\"] = bill.committeeEvents.firstSenateCommitteeEvent ? `${moment(bill.committeeEvents.firstSenateCommitteeEvent.EventDate).format(\"MM/DD/YY\")} ${bill.committeeEvents.firstSenateCommitteeEvent.ChamberCode} ${bill.committeeEvents.firstSenateCommitteeEvent.Description}` : \"\";\n }\n if (showCommitteeEvent.showLastHouseSubcommittee) {\n headers.push(\"Last House Subcommittee Assigned\")\n bill[\"LastHouseSubcommitteeAssigned\"] = bill.committeeEvents.lastHouseSubcommitteeEvent ? bill.committeeEvents.lastHouseSubcommitteeEvent.Description : \"\";\n }\n if (showCommitteeEvent.showLastSenateSubcommittee) {\n headers.push(\"Last Senate Subcommittee Assigned\")\n bill[\"LastSenateSubcommitteeAssigned\"] = bill.committeeEvents.lastSenateSubcommitteeEvent ? bill.committeeEvents.lastSenateSubcommitteeEvent.Description : \"\";\n }\n }\n if (showHouseAmendments || showSenateAmendments || showConferenceAmendments || showGovernorsRecommendations) {\n bill.amendments.forEach(amendment => {\n const columnHeader = '\"' + amendment.Description + '\"';\n headers.push(columnHeader);\n bill[columnHeader.replaceAll(\" \", \"\")] = amendment.DraftText;\n });\n }\n if (showNotes) {\n bill.Notes.forEach((note, noteIndex) => {\n bill[`Note${noteIndex + 1}`] = note.Note;\n headers.push(`Note ${noteIndex + 1} `)\n })\n }\n\n if (showSummary) {\n bill[\"LegislationSummary\"] = stripTags(bill[\"LegislationSummary\"]);\n }\n\n if (showTitle) {\n bill[\"LegislationTitle\"] = stripTags(bill[\"LegislationTitle\"]);\n }\n\n });\n headers = headers.filter((val, i, self) => self.indexOf(val) === i);\n let fileName = `Search Results ${moment().format(\"MM_DD_YYYY HH mm\")}.csv`\n let historyFileName = `Bill History ${moment().format(\"MM_DD_YYYY HH mm\")}.csv`;\n if (!showHistory || headers.length > 1) { //This is here so if the user just wants bill history a csv with just the leg numbers will not created.\n saveAs(new Blob([generateCsv(headers.filter(x => !x.toLowerCase().includes(\"amendment\")), billData)], { type: \"data:text/csv;charset=utf-8,\" }), fileName);\n }\n //History will not fit well in a spreadsheet with the other data so another file is saved here.\n if (showHistory.all || (showHistory.recent && showHistory.mostRecentAmount > 1)) {\n saveAs(new Blob([generateCsv(historyHeaders, historyRows)], { type: \"data:text/csv;charset=utf-8,\" }), historyFileName);\n }\n }\n\n toggleShareForm() {\n this.setState(state => ({\n showShareForm: !state.showShareForm\n }));\n }\n\n toggleTooltip() {\n this.setState({\n showTooltip: !this.state.showTooltip\n })\n }\n\n toggleCompositeSort(value) {\n this.setState({\n compositeSortValue: this.state.compositeSortValue === \"LegislationNumberAsc\" && value === \"LegislationNumberAsc\"\n ? \"LegislationNumberDesc\"\n : value === \"LegislationNumberAsc\"\n ? \"LegislationNumberAsc\"\n : this.state.compositeSortValue === \"EventDateAsc\"\n ? \"EventDateDesc\"\n : \"EventDateAsc\"\n })\n }\n\n toggleShowNotes() {\n this.setState({\n showNotes: !this.state.showNotes\n })\n }\n\n componentDidMount() {\n const reportId = this.props.match.params.id;\n if (reportId) {\n this.props.actions.getBillReportInformation('?ReportNumber=' + reportId).then(() => {\n const billReportInformation = this.props.report.billReportInformation;\n if (billReportInformation && billReportInformation.BillInformation) {\n try {\n const json = JSON.parse(window.atob(billReportInformation.BillInformation));\n this.setState({\n ...json\n }, () => {\n if (this.state.billList.length > 0) {\n this.getReportData();\n }\n if (this.state.selectedCollection) {\n this.props.actions.getCollection(\"?WatchListID=\" + this.state.selectedCollection);\n }\n });\n } catch {\n console.error(\"Malformed url\");\n this.setState({ generatingReport: false });\n }\n } else {\n console.log(\"Request succeeded, but no report information found.\");\n this.setState({ reportError: \"This report does not exist.\", generatingReport: false, generatingBillNumbers: false })\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({ reportError: \"This report does not exist.\", generatingReport: false, generatingBillNumbers: false })\n })\n } else {\n console.log(\"No Report ID found to use.\");\n }\n }\n\n getBillHistoryTypeLabel = (type) => {\n switch (type) {\n case 'all':\n return `All Events`;\n case 'recent':\n return this.state.showHistory.mostRecentAmount > 1 ? `${this.state.showHistory.mostRecentAmount} Last Events` : 'Last Event';\n case 'Committee':\n return `Last Committee Event`;\n case 'Subcommittee':\n return `Last Subcommittee Event`;\n }\n return;\n }\n\n render() {\n const { billData, reportError, generatingBillNumbers, generatingReport, gettingCommittees, gettingPatrons, gettingAmendments, gettingBillHistory, gettingVotes, gettingLdNumbers, gettingClerkNames, gettingStaffNames, showCatchline, showCurrentStatus, showTitle, showChiefPatron, showAllPatrons, showSummary, showNotes, showHistory, showHouseAmendments, showSenateAmendments, showConferenceAmendments, showGovernorsRecommendations, showStatus, showCommitteeEvent, showLdNumber, showClerkNames, showDlsStaffNames, sbCount, sjCount, hbCount, hjCount, userCreated } = this.state;\n const sortBillsNumerically = (a, b, direction) => {\n if (direction === \"asc\") {\n return a.LegislationNumber.substring(0, 2).localeCompare(b.LegislationNumber.substring(0, 2)) === 0\n ? a.LegislationKey - b.LegislationKey\n : a.LegislationNumber.substring(0, 2).localeCompare(b.LegislationNumber.substring(0, 2)) > 0\n ? 1\n : -1\n } else {\n return a.LegislationNumber.substring(0, 2).localeCompare(b.LegislationNumber.substring(0, 2)) === 0\n ? b.LegislationKey - a.LegislationKey\n : a.LegislationNumber.substring(0, 2).localeCompare(b.LegislationNumber.substring(0, 2)) > 0\n ? -1\n : 1\n }\n }\n\n if (generatingBillNumbers) {\n return (\n <div className=\"small-text\">\n {reportError && <div>{reportError}</div>}\n <div>Getting Bill Data <span className=\"small-spinner\"></span></div>\n </div>)\n }\n const shareable = this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR);\n return (<div>\n <div className=\"full\">\n {this.state.showShareForm && !reportError &&\n <ShareReport\n toggleShareForm={this.toggleShareForm}\n />\n }\n <div className=\"advanced-search dlas-forms\">\n {!reportError &&\n <>\n <div className=\"flex-row\">\n <br />\n <div className=\"inline-list\" style={{ textAlign: 'right' }}>\n {generatingReport &&\n <div className=\"small-text center\">Getting Data <span className=\"small-spinner\"></span></div>\n }\n <React.Fragment>\n {this.props.match.path.includes(\"composite\") && (this.props.login.userProfile.email === userCreated) &&\n <button type=\"button\" className=\"button\" onClick={() => this.toggleShowNotes()}>{(this.state.showNotes ? \"Hide\" : \"Show\") + \" Notes\"}</button>\n }\n {shareable &&\n <button disabled={generatingReport} onClick={this.toggleShareForm} type=\"button\" className=\"button\">Share</button>\n }\n <span aria-label=\"html\" title=\"html\" onClick={this.makeHtml} className={`icon paper${generatingReport ? ' disabled' : ''} `}></span>\n <span aria-label=\"print\" title=\"print\" onClick={this.makePrintout} className={`icon print${generatingReport ? ' disabled' : ''} `}></span>\n <span aria-label=\"spreadsheet\" title=\"spreadsheet\" onClick={this.makeSpreadsheet} className={`icon csv${generatingReport ? ' disabled' : ''} `}></span>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip() }} style={{ cursor: \"pointer\" }}>CSV Help</a>\n {this.state.showTooltip &&\n <div className={`info - box report - tooltip${shareable ? ' shareable' : ''} `}>\n <p>If you have selected 'All Events' or 'X last events', then these events will be downloaded in a separate .csv file.</p>\n <p>Amendment text is not included in .csv file downloads.</p>\n <p>Some text selections in the .csv file may include HTML markup.</p>\n </div>\n }\n </React.Fragment>\n </div>\n </div>\n <br />\n </>\n }\n <div ref={this.htmlRef}>\n {this.state.reportTitle || this.props.collection.collection != \"\" ?\n <div>\n <h2>{this.state.reportTitle || this.props.collection.collection[0].Name}</h2>\n </div>\n : null\n }\n <div className=\"small-text\">\n {reportError && <div>{reportError}</div>}\n </div>\n <div ref={this.reportData} className=\"report-container\">\n <span>{this.state.personalMessage}</span>\n {!this.props.match.path.includes(\"composite\")\n ? billData.map((bill, i) =>\n <div key={i} style={{ pageBreakInside: 'avoid', display: 'block' }}>\n <h3><Link className='report-link' to={`/bill-details/${bill.SessionCode}/${bill.LegislationNumber}`}>{bill.LegislationNumber.split(/(\\d+)/).join(\" \")}</Link > {showCatchline && ` - ${bill.Description}`\n }</h3 >\n {\n showChiefPatron || showAllPatrons ?\n (bill.loadingPatrons ?\n <div style={{ margin: '0.3em 0px' }}>Getting Patrons <span className=\"small-spinner\"></span></div>\n :\n <div>\n {showChiefPatron && bill['Chief Patron'] &&\n <p>Chief Patron{bill['Chief Patron'].length > 1 && \"s\"}: {bill['Chief Patron'].map((patron, patronIndex) => <React.Fragment key={patronIndex}>\n {patronIndex !== 0 && ', '}{patron.PatronDisplayName}\n </React.Fragment>)}</p>\n }\n {showAllPatrons &&\n <p>Patron{bill.Patrons.length > 1 && \"s\"}: {bill.Patrons.map((patron, patronIndex) => <React.Fragment key={patronIndex}>\n {patronIndex !== 0 && ', '}{patron.PatronDisplayName}\n </React.Fragment>)}</p>\n }\n </div>)\n : null\n }\n {showCurrentStatus && <p>Status: {bill.LegislationStatus}</p>}\n {showTitle && bill.LegislationTitle && renderHTML(bill.LegislationTitle)\n }\n {\n showClerkNames && bill.CommitteeID && bill.SessionID &&\n bill.loadingClerkNames || (!this.state.committeeClerksAndStaff.find(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.clerkRoleTypeID) && gettingClerkNames) ?\n <div style={{ margin: '0.3em 0px' }}>Getting clerk(s) of current committee <span className=\"small-spinner\"></span></div>\n :\n this.state.committeeClerksAndStaff.find(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.clerkRoleTypeID) ?\n <div>\n <p>\n <span>Clerk{this.state.committeeClerksAndStaff.filter(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.clerkRoleTypeID).length > 1 ? 's' : ''} of current committee:</span> \n {\n this.state.committeeClerksAndStaff.filter(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.clerkRoleTypeID).map((m, i) =>\n <span>{m.FullName}{i === this.state.committeeClerksAndStaff.filter(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.clerkRoleTypeID).length - 1 ? '' : ', '}</span>\n )\n }\n </p>\n </div>\n : null\n }\n {\n showDlsStaffNames && bill.CommitteeID && bill.SessionID &&\n bill.loadingStaffNames || (!this.state.committeeClerksAndStaff.find(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.staffRoleTypeID) && gettingStaffNames) ?\n <div style={{ margin: '0.3em 0px' }}>Getting DLS staff of current committee <span className=\"small-spinner\"></span></div>\n :\n this.state.committeeClerksAndStaff.find(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.staffRoleTypeID) ?\n <div>\n <p>\n <span>DLS staff of current committee:</span> \n {\n this.state.committeeClerksAndStaff.filter(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.staffRoleTypeID).map((m, i) =>\n <span>{m.FullName}{i === this.state.committeeClerksAndStaff.filter(c => c.AffiliationID === bill.CommitteeID && c.SessionID === bill.SessionID && c.StaffRoleTypeID === this.state.staffRoleTypeID).length - 1 ? '' : ', '}</span>\n )\n }\n </p>\n </div>\n : null\n }\n {\n showNotes && bill.Notes && bill.Notes.length > 0 &&\n <div>\n <span>Notes</span>\n {bill.Notes.map((note, noteIndex) =>\n <div key={noteIndex}>\n <span className=\"small-text\"><span className=\"bold\">{note.ListName}</span>: {note.Note}</span>\n </div>\n )}\n <br />\n </div>\n }\n {\n showLdNumber &&\n bill.loadingLdNumber || (!bill.LdNumber && gettingLdNumbers) ?\n <div style={{ margin: '0.3em 0px' }}>Getting LD Number of current version <span className=\"small-spinner\"></span></div>\n :\n bill.LdNumber ?\n <div>\n <p>LD Number of current version: {bill.LdNumber}</p>\n </div>\n : null\n }\n {\n showSummary &&\n <div>\n <strong>{bill.SummaryVersion}:</strong>{renderHTML(bill.LegislationSummary)}\n </div>\n }\n {\n (showHouseAmendments || showSenateAmendments || showConferenceAmendments || showGovernorsRecommendations) && (\n bill.loadingAmendments ?\n <div style={{ margin: '0.3em 0px' }}>Getting Amendment Text <span className=\"small-spinner\"></span></div>\n :\n bill.amendments && bill.amendments.length ?\n <div>\n {bill.amendments.map((amendment, amendmentIndex) =>\n <div key={amendmentIndex}>\n <strong>{amendment.Description}</strong>\n {renderHTML(amendment.DraftText)}\n </div>\n )}\n </div>\n : null\n )\n }\n {\n bill.billStatuses &&\n <div className=\"inner-grid four small-text\">\n {bill.loadingStatusHistory ?\n <div style={{ margin: '0.3em 0px' }}>Getting Amendment Text <span className=\"small-spinner\"></span></div>\n :\n <>\n {showStatus.showPassedHouse && <span>Passed House: {bill.billStatuses.PassedHouse}</span>}\n {showStatus.showPassedSenate && <span>Passed Senate: {bill.billStatuses.PassedSenate}</span>}\n {showStatus.showPassed && <span>Passed: {bill.billStatuses.Passed}</span>}\n {showStatus.showVetoed && <span>Vetoed: {bill.billStatuses.Vetoed}</span>}\n {showStatus.showApproved && <span>Approved: {bill.billStatuses.Approved}</span>}\n {showStatus.showFailed && <span>Failed: {bill.billStatuses.Failed}</span>}\n {showStatus.showContinued && <span>Continued: {bill.billStatuses.Continued}</span>}\n {showStatus.showEmergency && <span>Emergency: {bill.Emergency}</span>}\n </>\n }\n </div>\n }\n {\n bill.committeeEvents &&\n <div className=\"small-text\">\n {showCommitteeEvent.showFirstHouseCommittee && bill.committeeEvents.firstHouseCommitteeEvent && <div>First House Committee Referred: {bill.committeeEvents.firstHouseCommitteeEvent.Description}</div>}\n {showCommitteeEvent.showFirstSenateCommittee && bill.committeeEvents.firstSenateCommitteeEvent && <div>First Senate Committee Referred : {bill.committeeEvents.firstSenateCommitteeEvent.Description}</div>}\n {showCommitteeEvent.showLastHouseSubcommittee && bill.committeeEvents.lastHouseSubcommitteeEvent && <div>Last House Subcommittee Assigned: {bill.committeeEvents.lastHouseSubcommitteeEvent.Description}</div>}\n {showCommitteeEvent.showLastSenateSubcommittee && bill.committeeEvents.lastSenateSubcommitteeEvent && <div>Last Senate Subcommittee Assigned: {bill.committeeEvents.lastSenateSubcommitteeEvent.Description}</div>}\n </div>\n }\n {\n showHistory && (\n bill.loadingHistory ?\n <div style={{ margin: '0.3em 0px' }}>{\"Getting Bill Events\" + (showHistory.showVotes ? \" and Vote Data\" : \"\")} <span className=\"small-spinner\"></span></div>\n :\n bill.billHistory &&\n //Move grid container div inti place of react fragment to create a new grid for each row instead of continuing to overfill the parent div\n <div>\n {Object.entries(bill.billHistory).map(([billHistoryType, billHistoryItems], billHistoryTypeIndex) =>\n <div key={billHistoryTypeIndex}>\n <p>{this.getBillHistoryTypeLabel(billHistoryType)}</p>\n <div style={{ display: \"grid\", gridTemplateColumns: \"90px 75px 1fr\" }} className=\"small-text\">\n {billHistoryItems.map((billHistoryItem, billHistoryItemIndex) =>\n <>\n <div style={{ marginRight: \"12px\" }}>\n {moment(billHistoryItem.EventDate).format('MM/DD/YYYY')}\n </div>\n <div style={{ marginRight: \"12px\" }}>\n {billHistoryItem.ActorType}\n </div>\n <div style={{ marginRight: \"12px\" }}>\n {billHistoryItem.Description}\n </div>\n {showHistory.showVotes && (\n billHistoryItem.voteDetails ?\n <div style={{ gridColumn: '3 / 4' }}>\n <p>\n YEAS--\n {billHistoryItem.voteDetails.memberYeas.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{billHistoryItem.voteDetails.memberYeas.length === index + 1 ? '--' : ', '}</span>\n ))}\n {billHistoryItem.voteDetails.memberYeas.length}\n </p>\n <p>\n NAYS--\n {billHistoryItem.voteDetails.memberNays.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{billHistoryItem.voteDetails.memberNays.length === index + 1 ? '--' : ', '}</span>\n ))}\n {billHistoryItem.voteDetails.memberNays.length}\n </p>\n <p>\n {(billHistoryItem.voteDetails.VoteType === \"Floor\" && billHistoryItem.voteDetails.ChamberCode === \"S\") ? \"RULE 36--\" : \"ABSTENTIONS--\"}\n {billHistoryItem.voteDetails.memberAbstentions.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{billHistoryItem.voteDetails.memberAbstentions.length === index + 1 ? '--' : ', '}</span>\n ))}\n {billHistoryItem.voteDetails.memberAbstentions.length}\n </p>\n <p>\n NOT VOTING--\n {billHistoryItem.voteDetails.memberNoVote.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{billHistoryItem.voteDetails.memberNoVote.length === index + 1 ? '--' : ', '}</span>\n ))}\n {billHistoryItem.voteDetails.memberNoVote.length}\n </p>\n {(billHistoryItem.voteDetails.VoteType !== \"Floor\" && billHistoryItem.voteDetails.ChamberCode !== \"S\") &&\n <p>\n RULE 36--\n {billHistoryItem.voteDetails.memberRule36.map((item, index) => (\n <span key={index}>{item.PatronDisplayName}{billHistoryItem.voteDetails.memberRule36.length === index + 1 ? '--' : ', '}</span>\n ))}\n {billHistoryItem.voteDetails.memberRule36.length}\n </p>\n }\n </div>\n :\n billHistoryItem.loadingVotes ?\n <div style={{ gridColumn: '3/4', margin: '0.3em 0px' }}>Getting Vote Data <span className=\"small-spinner\"></span></div>\n :\n null\n )}\n </>\n )}\n </div>\n </div>\n )}\n </div>\n )\n }\n <hr className=\"faded-line\" />\n </div >\n )\n : <>\n <div className='composite-view-header'>\n <div className=\"composite-view-header-label\" onClick={() => this.toggleCompositeSort(\"LegislationNumberAsc\")}>Bill</div>\n <div>Committee</div>\n <div>Last Action</div>\n <div className=\"composite-view-header-label\" onClick={() => this.toggleCompositeSort(\"EventDateAsc\")}>Date</div>\n </div>\n {billData.sort((a, b) => {\n return this.state.compositeSortValue === \"LegislationNumberAsc\"\n ? sortBillsNumerically(a, b, \"asc\")\n : this.state.compositeSortValue === \"LegislationNumberDesc\"\n ? sortBillsNumerically(a, b, \"desc\")\n : this.state.compositeSortValue === \"EventDateAsc\"\n ? moment(b.billHistory.recent[0].EventDate).isAfter(a.billHistory.recent[0].EventDate) ? 1 : -1\n : moment(b.billHistory.recent[0].EventDate).isBefore(a.billHistory.recent[0].EventDate) ? 1 : -1\n }).map((bill, i) =>\n <>\n <div className={'composite-view-wrapper ' + ((!this.state.showNotes || this.props.login.userProfile.email !== userCreated) && \"notes-hidden\")}>\n <div className='composite-view-data'>\n <div><Link to={\"/bill-details/\" + bill.SessionCode + \"/\" + bill.LegislationNumber}>{bill.LegislationNumber}</Link>{\" - \" + (bill.Patrons.find(x => x.PatronTypeID === 1) ? (bill.Patrons.find(x => x.PatronTypeID === 1).PatronDisplayName + \" - \") : \"\") + bill.Description}</div>\n {bill.billHistory && bill.billHistory.Committee\n ? <div className='composite-view-committees'>\n <div>{bill.billHistory.Committee.find(x => x.ChamberCode === \"H\") ? \"(H) \" + (bill.billHistory.Committee.sort((a, b) => moment(a.EventDate).isBefore(b.EventDate) ? 1 : -1).find(x => x.ChamberCode === \"H\").ParentCommitteeName ?? bill.billHistory.Committee.sort((a, b) => moment(a.EventDate).isBefore(b.EventDate) ? 1 : -1).find(x => x.ChamberCode === \"H\").CommitteeName) : \"\"}</div>\n <div>{bill.billHistory.Committee.find(x => x.ChamberCode === \"S\") ? \"(S) \" + (bill.billHistory.Committee.sort((a, b) => moment(a.EventDate).isBefore(b.EventDate) ? 1 : -1).find(x => x.ChamberCode === \"S\").ParentCommitteeName ?? bill.billHistory.Committee.sort((a, b) => moment(a.EventDate).isBefore(b.EventDate) ? 1 : -1).find(x => x.ChamberCode === \"S\").CommitteeName) : \"\"}</div>\n </div>\n : <div className='composite-view-committees'>\n <div />\n <div />\n </div>\n }\n <div>\n {bill.billHistory\n ? (bill.billHistory.recent[0].ChamberCode ? \"(\" + bill.billHistory.recent[0].ChamberCode + \") \" : \"\") + bill.billHistory.recent[0].Description\n : \"\"}\n </div>\n <div>\n {bill.billHistory\n ? moment(bill.billHistory.recent[0].EventDate).format(\"MM/DD/YY\")\n : \"\"}\n </div>\n </div>\n {this.state.showNotes && userCreated === this.props.login.userProfile.email\n && <>\n {bill.Notes !== undefined && bill.Notes.length > 0\n ? <div className='composite-view-notes'>{\"Notes: \" + bill.Notes[0].Note}</div>\n : <div />\n }\n </>\n }\n </div>\n\n </>\n )}\n </>\n }\n\n\n {!reportError && <span><b>Counts:</b> {`HB: ${hbCount} HJ: ${hjCount} SB: ${sbCount} SJ: ${sjCount}`}</span>}\n </div>\n </div>\n </div>\n </div>\n <iframe ref={this.printOutRef} width=\"0\" height=\"0\" frameBorder=\"0\" src=\"about:blank\"></iframe>\n </div >);\n }\n}\n\nexport default connect(\n (state) => {\n const { bills, session, members, committee, patrons, nav, login, votes, collection, report, personnel } = state;\n return {\n bills,\n session,\n members,\n committee,\n patrons,\n nav,\n login,\n votes,\n collection,\n report,\n personnel\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, billActionCreators, sessionActionCreators, memberActionCreators, patronActionCreators, voteActionCreators, collectionActionCreators, reportActionCreators, personnelActionCreators), dispatch)\n }\n }\n)(ReportMaker);","import moment from 'moment-timezone';\n\nconst SearchTranslator = props => {\n const sessionCode = parseInt(props.match.params.id);\n const wordToTranslate = props.match.params.word;\n const param = props.match.params.wordparam;\n let url = '/bill-search';\n if(isNaN(sessionCode) || !wordToTranslate) {\n props.history.push(url);\n return(null);\n }\n\n let billSearchParams = '';\n switch(wordToTranslate.toUpperCase()) {\n case(\"ALL\"):\n billSearchParams = { selectedBillStatus: 1 }\n break;\n case(\"TOP\"):\n billSearchParams = { mostFrequent: true }\n break;\n case(\"INT\"):\n const date = moment(param);\n if(param && date.isValid()) {\n billSearchParams = {\n selectedBillStatus: 1,\n billStatusStartDate: date.startOf('day'),\n billStatusEndDate: date.endOf('day')\n }; \n }\n break;\n case(\"PSH\"):\n billSearchParams = { selectedBillStatus: 4 }\n break;\n case(\"PSS\"):\n billSearchParams = { selectedBillStatus: 5 }\n break;\n case(\"PAS\"):\n billSearchParams = { selectedBillStatus: 6 }\n break;\n case(\"ENR\"):\n billSearchParams = { selectedBillStatus: 14 }\n break;\n case(\"SGN\"):\n billSearchParams = { selectedBillStatus: 21 }\n break;\n case(\"FAI\"):\n billSearchParams = { selectedBillStatus: 9 }\n break;\n case(\"PND\"):\n billSearchParams = { isPending: true }\n break;\n case(\"CAR\"):\n billSearchParams = { selectedBillStatus: 10 }\n break;\n case(\"CIN\"):\n billSearchParams = { selectedBillStatus: 16 }\n break;\n case(\"CRA\"):\n billSearchParams = { selectedBillStatus: 31 }\n break;\n case(\"CRR\"):\n billSearchParams = { selectedBillStatus: 32 }\n break;\n case(\"REC\"):\n billSearchParams = { selectedBillStatus: 27 }\n break;\n case(\"GAS\"):\n billSearchParams = { selectedBillStatus: 33 }\n break;\n case(\"APP\"):\n billSearchParams = { selectedBillStatus: 8 }\n break;\n case(\"VET\"):\n billSearchParams = { selectedBillStatus: 26 }\n break;\n case(\"CHP\"):\n billSearchParams = { selectedBillStatus: 25 }\n break;\n }\n\n if(billSearchParams) {\n billSearchParams.selectedSession = sessionCode;\n const b64Params = window.btoa(JSON.stringify(billSearchParams));\n url += '?q=' + b64Params;\n }\n props.history.push(url);\n\n return(null);\n}\n\nexport default SearchTranslator;","import moment from 'moment-timezone';\nimport React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { patronActionCreators } from '../../../stores/lis-patron-store';\n\nclass ShorthandUrlTranslator extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n params: [],\n error: false\n };\n\n this.findPatronType = this.findPatronType.bind(this);\n }\n\n findPatronType(value) {\n switch (value) {\n case \"C\":\n return this.props.patrons.patronRoles.find(x => x.Name === \"Chief Patron\").PatronTypeID\n case \"F\":\n return this.props.patrons.patronRoles.find(x => x.Name === \"Chief Co-Patron\").PatronTypeID\n case \"S\":\n return this.props.patrons.patronRoles.find(x => x.Name === \"Co-Patron\").PatronTypeID\n case \"I\":\n return this.props.patrons.patronRoles.find(x => x.Name === \"Incorporated Chief Co-Patron\").PatronTypeID\n default:\n return '';\n }\n }\n\n componentDidMount() {\n this.setState({\n params: this.props.location.search.slice(1).split(\"&\")\n }, () => {\n if(!this.state.params || this.state.params.length === 0) {\n this.setState({\n error: true\n }, () => {\n return;\n }) \n }\n\n this.props.actions.getSessionList()\n .then(() => {\n //Get the default session if the user didn't pass in a session param\n let sessionParam = \"SessionID=\" + (this.state.params.findIndex(x => x.toLowerCase().includes(\"ses\")) >= 0\n ? this.props.session.sessionList.find(x => x.SessionCode === this.state.params[this.state.params.findIndex(x => x.toLowerCase().includes(\"ses\"))].split(\"=\")[1]).SessionID\n : this.props.session.sessionList.find(x => x.IsDefault).SessionID);\n\n this.props.actions.getCommitteeList(sessionParam + \"&includeSubCommittees=true\")\n .then(this.props.actions.getPatronRoles(sessionParam)\n .then(this.props.actions.getMemberList(sessionParam)\n .then(() => { \n let obj = {};\n try {\n for (let i = 0; i < this.state.params.length; i++) {\n switch (this.state.params[i].split(\"=\")[0].toLowerCase()) {\n case \"com\":\n obj.selectedCommittee = this.props.committee.committeeList.find(x => x.CommitteeNumber === this.state.params[i].split(\"=\")[1]).CommitteeID\n break;\n case \"subcom\":\n obj.selectedSubcommittee = this.props.committee.committeeList.find(x => x.CommitteeNumber === this.state.params[i].split(\"=\")[1]).CommitteeID\n break;\n case \"mem\":\n obj.selectedPatron = this.props.members.memberList.find(x => x.MemberNumber === this.state.params[i].split(\"=\")[1]).MemberID\n break;\n case \"mempat\":\n if (!obj.selectedPatronType)\n obj.selectedPatronType = [];\n obj.selectedPatronType.push(this.findPatronType(this.state.params[i].split(\"=\")[1]))\n break;\n case \"ses\":\n obj.selectedSession = this.props.session.sessionList.find(x => x.SessionCode === this.state.params[i].split(\"=\")[1]).SessionID\n break;\n default:\n //Invalid param, do nothing\n break;\n }\n }\n\n //If the user provided patron types with no patron throw an error\n if (obj.selectedPatronType && !obj.selectedPatron) {\n this.setState({\n error: true\n }, () => {\n return;\n })\n }\n\n //If the user provided a member without patron types then set the default patron types based on chamber\n if (obj.selectedPatron && !obj.selectedPatronType && this.props.members.memberList.find(x => x.MemberID === obj.selectedPatron).ChamberCode === \"H\") {\n obj.selectedPatronType = [1, 2, 4];\n } else if (obj.selectedPatron && !obj.selectedPatronType) {\n obj.selectedPatronType = [1, 2, 4, 5];\n }\n\n //If the user provided a subcommittee without a parent committee then set the parent committee for them\n if (obj.selectedSubcommittee && !obj.selectedCommittee) {\n obj.selectedCommittee = this.props.committee.committeeList.find(x => x.CommitteeID === (this.props.committee.committeeList.find(x => x.CommitteeID === obj.selectedSubcommittee).ParentCommitteeID)).CommitteeID\n }\n\n if (Object.keys(obj).length > 0) {\n const b64Params = window.btoa(JSON.stringify(obj));\n const url = '/bill-search/?q=' + b64Params;\n this.props.history.push(url);\n } else {\n this.setState({\n error: true\n }, () => {\n return;\n })\n }\n } catch (e) {\n console.log(e)\n this.setState({\n error: true\n })\n }\n })));\n\n })\n })\n }\n\n render() {\n return (\n <div>\n {!this.state.error\n ? <div className=\"center-spinner spinner\">Loading...</div>\n : <p className='message-error'>There was an error converting your URL parameters into a bill search. Please check your parameters and try again.\n <br />\n <br />\n The following parameters can be used to write a search query:\n <br />\n <br />\n To search for a:\n <br />\n Member: mem=Member Number\n <br />\n Patron Type: mempat=Letter (C/F/S/I)\n <br />\n Committee: com=Committee Number\n <br />\n Subcommittee: subcom=Committee Number\n <br />\n Session: ses=Session Code\n <br />\n <br />\n The URLs are constructed as /q/?param=value¶m2=value2¶m3=value3\n <br />\n <br />\n For example: lis.virginia.gov/q?ses=20221&mem=H0289&mempat=S&mempat=F will get legislation for Dawn Adams as a Co-Patron or Chief Co-Patron in the 2022 Regular Session.\n <br />\n <br />\n You may use multiple patron types. If you use multiple sessions, members, committees, or subcommittees the search will use the last one in the list. If you supply a patron type you must supply a patron.\n </p>\n }\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, committee, members, patrons, session } = state;\n return {\n nav,\n committee,\n members,\n patrons,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, committeeActionCreators, memberActionCreators, navActionCreators, patronActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(ShorthandUrlTranslator);","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst agencyListSuccess = 'AGENCY_LIST_SUCCESS';\nconst agencyListFailure = 'AGENCY_LIST_FAILURE';\n\nconst initialState = {\n agencyList: [],\n agencyListError: '',\n};\n\nexport const orgActionCreators = {\n\n receiveAgencyList: (content) => ({\n type: agencyListSuccess,\n agencyList: content\n }),\n\n agencyListError: (message) => ({\n type: agencyListFailure,\n agencyListError: message\n }),\n\n getAgencyList: (params) => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_STATS_API_URL) + '/Organization/api/GetAgencyReferencesAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(orgActionCreators.agencyListError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(orgActionCreators.receiveAgencyList(result[1].Agencies));\n } else if (result[0] === NO_CONTENT) {\n dispatch(orgActionCreators.receiveAgencyList([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n}\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n switch (action.type) {\n case agencyListSuccess:\n return Object.assign({}, state, {\n agencyList: action.agencyList,\n agencyListError: ''\n })\n case agencyListFailure:\n return Object.assign({}, state, {\n agencyListError: action.agencyListError\n })\n default:\n return state\n }\n};","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport Select from 'react-select';\nimport moment from 'moment-timezone';\n\nclass ImpactStatementForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n fiscal: true,\n selectedAgency: \"\",\n uploadFile: \"\"\n }\n\n this.getImpactStatementDescription = this.getImpactStatementDescription.bind(this);\n this.handleAgencyChange = this.handleAgencyChange.bind(this);\n this.handleFileChange = this.handleFileChange.bind(this);\n this.submit = this.submit.bind(this);\n }\n\n handleRadioChange() {\n this.setState({\n fiscal: !this.state.fiscal\n })\n }\n\n handleAgencyChange(value) {\n this.setState({\n selectedAgency: value\n })\n }\n\n handleFileChange(e) {\n this.setState({\n uploadFile: e.target.files[0]\n })\n }\n\n getImpactStatementDescription() {\n if (!this.state.selectedAgency) { return \"\" }\n let description;\n if (!this.state.fiscal) {\n description = \"Racial and ethnic impact statement\";\n } else if (this.state.selectedAgency.Abbreviation !== \"JLARC\") {\n description = \"Impact statement\";\n } else {\n description = \"Fiscal impact review\";\n }\n\n description += \" from \" + this.state.selectedAgency.Abbreviation + \" (\" + this.props.match.params.billnumber + \")\";\n return description;\n }\n\n submit() {\n this.props.submit(this.getImpactStatementDescription(), this.state.selectedAgency, this.state.uploadFile);\n }\n\n render() {\n let description = this.getImpactStatementDescription();\n if (description) {\n description = description.substr(0, description.indexOf(\"(\"))\n }\n return (\n <div className=\"dlas-forms\">\n <p>{\"Impact Statement for \" + moment(this.props.statementDate).format(\"MM/DD/YYYY\") + \" - \" + this.props.statementDescription}</p>\n <div className=\"grid-wrapper one-two-small-small\">\n <div style={{ whiteSpace: 'nowrap' }}>\n <div style={{ display: \"inline-flex\", alignItems: 'center', marginRight: '0.5em' }}>\n <label htmlFor=\"selected-type-button\" className={`label radio-label`} style={{ whiteSpace: \"no-wrap\", width: 'auto' }}>Fiscal</label>\n <input id=\"selected-type-button\" checked={this.state.fiscal === true} onChange={() => this.handleRadioChange()} type=\"radio\" />\n </div>\n <div style={{ display: \"inline-flex\", alignItems: 'center' }}>\n <label htmlFor=\"all-sessions-button\" className={`label radio-label`} style={{ whiteSpace: \"no-wrap\", width: 'auto' }}>Racial and Ethnic</label>\n <input id=\"all-sessions-button\" checked={this.state.fiscal === false} onChange={() => this.handleRadioChange()} type=\"radio\" />\n </div>\n </div>\n <Select\n options={this.props.agencyOptions}\n onChange={this.handleAgencyChange}\n value={this.state.selectedAgency}\n isSearchable\n />\n <button type=\"button\" className=\"button small-button file-button\">\n <input type=\"file\" accept=\".pdf\" onChange={this.handleFileChange} />\n {this.state.uploadFile ? this.state.uploadFile.name : \"Attach Impact Statement\"}\n </button>\n </div>\n <br />\n <div>\n <p style={{ position: 'absolute' }}>{description ? \"Description: \" + description : \"\"}</p>\n <div className=\"align-right\">\n <button type=\"button\" className=\"button secondary\" style={{ marginRight: \"15px\" }} onClick={() => this.props.toggleStatementForm()}>Cancel</button>\n <button type=\"button\" className=\"button default\" disabled={this.state.uploadFile === \"\" || this.state.selectedAgency === \"\" || this.props.isSubmitting} onClick={() => this.submit()}>Upload</button>\n </div>\n </div>\n </div>\n )\n }\n}\n\nexport default withRouter(ImpactStatementForm);\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\n\nclass CollectionNotes extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n notes: [],\n expanded: false\n };\n\n this.toggleExpandNotes = this.toggleExpandNotes.bind(this);\n }\n\n componentDidMount() {\n this.props.actions.getCollections(\"?SessionID=\" + this.props.sessionId)\n .then(() => {\n const legId = this.props.billData.LegislationID;\n let notes = [];\n this.props.collection.collections.forEach(collection => {\n const legislationInCollection = collection.WatchListLegislation.find(leg => leg.LegislationID === legId);\n if (legislationInCollection && legislationInCollection.Note) {\n notes.push({\n ...legislationInCollection,\n Name: collection.Name,\n Description: collection.Description\n });\n }\n });\n this.setState({\n notes: notes\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n });\n }\n\n toggleExpandNotes() {\n this.setState({\n expanded: !this.state.expanded\n })\n }\n\n render() {\n if (this.state.notes.length === 0) {\n return (<div></div>);\n }\n return (<div>\n <h4>Your Notes</h4>\n {this.state.notes.map((note, noteIndex) =>\n <div key={noteIndex} className='note-wrapper'>\n <span className=\"small-text\"><span className=\"bold\">{note.Name}</span>: {note.Note.length < 345 || this.state.expanded ? note.Note : note.Note.substring(0, 345) + \"...\"}</span>\n </div>\n )}\n {this.state.notes.find(x => x.Note.length > 400) && <button className='button small-button note-button' type=\"button\" onClick={() => this.toggleExpandNotes()}>{(this.state.expanded ? \"Collapse\" : \"Expand\") + \" Notes\"}</button>}\n </div>)\n }\n}\n\nexport default connect(\n (state) => {\n const { collection, login } = state;\n return {\n collection,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, collectionActionCreators), dispatch)\n }\n }\n)(CollectionNotes)","import React from 'react';\nimport moment from 'moment-timezone';\nimport renderHTML from 'react-render-html';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport ReactToPrint from \"react-to-print\";\nimport CreatableSelect from 'react-select/creatable';\nimport { billActionCreators } from '../../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { patronActionCreators } from '../../../stores/lis-patron-store';\nimport { voteActionCreators } from '../../../stores/lis-votes-store';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { committeeActionCreators } from '../../../stores/lis-committee-store';\nimport { orgActionCreators } from '../../../stores/lis-org-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport '../../../stylesheets/lis-public-view/public-view.css';\nimport LoaderComponent from '../../../lis-shared/lis-layout/components/lis-loader-component';\nimport BillHistoryForm from './lis-history-form';\nimport ImpactStatementForm from './lis-impact-statements';\nimport CollectionNotes from './collection-notes';\nimport queryString from 'query-string';\nimport { minutesActionCreators } from '../../../stores/lis-minutes-store';\nimport { memberActionCreators } from '../../../stores/lis-members-store';\nimport VersionList from '../../../lis-shared/lis-bills/lis-bill-version-list';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { collectionActionCreators } from '../../../stores/lis-collection-store';\n\nconst BILL_EVENT_VIEWER = \"LegislationEvent\";\nconst BILL_EVENT_AUTHOR = \"LegislationEventHistory\";\nconst BILL_COLLECTION_AUTHOR = \"LegislationCollections\";\nconst BILL_AUTHOR = \"Legislation\";\nconst VERSION_AUTHOR = \"LegislationText\";\nconst PATRON_AUTHOR = \"LegislationPatron\";\n\nconst SUMMARY = \"summary\";\nconst DESCRIPTION = \"description\";\n\nconst isStatic = window.location.pathname.includes('static');\n\nconst selectStyle = {\n control: styles => ({\n ...styles,\n minHeight: '0px',\n padding: '0.12em 0.6em !important',\n }),\n valueContainer: styles => ({\n ...styles,\n padding: 0,\n }),\n input: styles => ({\n ...styles,\n fontSize: '0.8em',\n lineHeight: 'normal',\n }),\n singleValue: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n placeholder: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n option: styles => ({\n ...styles,\n fontSize: '0.8em'\n }),\n dropdownIndicator: styles => ({\n ...styles,\n padding: '1px'\n }),\n}\n\nfunction PatronName(props) {\n return (\n <Link to={`/session-details/${props.session.SessionCode}/member-information/${props.MemberNumber}/member-details`}>{props.MemberDisplayName}{props.ByRequest && props.DisplayName ? ' ' + props.DisplayName.replace(')', ', By Request)') : props.DisplayName ? ' ' + props.DisplayName : props.ByRequest ? ' (By Request)' : null}</Link>\n );\n}\n\nfunction PatronList(props) {\n var patronsLength = props.patrons.length;\n const listPatrons = props.patrons.map((patrons, i) => {\n if (props.list) {\n return <li><PatronName session={props.session} key={i} {...patrons} /></li>\n } else if (patronsLength === i + 1) {\n return <PatronName session={props.session} key={i} {...patrons} />\n } else {\n return <span key={i}><PatronName session={props.session} {...patrons} />, </span>\n }\n });\n return props.list ? <ul className=\"list-two no-list-style\">{listPatrons}</ul> : <span>{listPatrons}</span>;\n}\n\nclass BillDetailsComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n billData: '',\n historyList: [],\n summariesList: [],\n housePatronsList: [],\n senatePatronsList: [],\n versionsList: [],\n chiefPatronsList: [],\n sessionData: '',\n toolTip: false,\n editingHistory: false,\n billEvents: [],\n organizedEvents: [],\n actionTypes: [],\n memberList: [],\n committeeList: [],\n editing: {},\n description: \"\",\n saving: {},\n displayStatementForm: false,\n statementSubmitting: false,\n statementLegislationTextID: '',\n statementDate: '',\n statementDescription: '',\n agencyOptions: [],\n statementDocumentcode: '',\n reconsiderationEvents: [],\n hideAllEvents: true,\n patronList: [],\n collections: [],\n collectionIsLoading: false,\n showPopup: false,\n watchlists: [],\n selectedWatchlists: [],\n showWatchlistForm: false\n };\n this.setupPage = this.setupPage.bind(this);\n this.getBillDetails = this.getBillDetails.bind(this);\n this.getPatrons = this.getPatrons.bind(this);\n this.getBillVersion = this.getBillVersion.bind(this);\n this.toggleShowLinks = this.toggleShowLinks.bind(this);\n this.toggleEditContent = this.toggleEditContent.bind(this);\n this.handleEventChange = this.handleEventChange.bind(this);\n this.saveEvents = this.saveEvents.bind(this);\n this.changeToNewBillHistoryForm = this.changeToNewBillHistoryForm.bind(this);\n this.saveDescription = this.saveDescription.bind(this);\n this.saveSummary = this.saveSummary.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.toggleStatementForm = this.toggleStatementForm.bind(this);\n this.submitImpactStatement = this.submitImpactStatement.bind(this);\n this.closeStatementForm = this.closeStatementForm.bind(this);\n this.getReconsiderationEvents = this.getReconsiderationEvents.bind(this);\n this.togglehideAllEvents = this.togglehideAllEvents.bind(this);\n this.checkForDuplicates = this.checkForDuplicates.bind(this);\n this.togglePatronModal = this.togglePatronModal.bind(this);\n this.handleWatchlistChange = this.handleWatchlistChange.bind(this);\n this.handleAddToWatchlists = this.handleAddToWatchlists.bind(this);\n this.addToWatchlists = this.addToWatchlists.bind(this);\n this.getCollections = this.getCollections.bind(this);\n this.toggleWatchlistForm = this.toggleWatchlistForm.bind(this);\n this.handleToggleDescriptionEdit = this.handleToggleDescriptionEdit.bind(this);\n this.handleDescriptionChange = this.handleDescriptionChange.bind(this);\n this.saveVersionDescription = this.saveVersionDescription.bind(this);\n }\n\n componentDidMount() {\n window.scrollTo(0, 0);\n\n const sessionCode = this.props.match ? this.props.match.params.sessionCode : this.props.selectedBillSession;\n let legislationNumber = this.props.match ? this.props.match.params.billnumber : this.props.selectedBill;\n\n //if legislation number is zero-padded (such as from a calendar), remove the zero-padding\n const legislationNumberDigitsWithZeroPadding = legislationNumber.match(/\\d+/); //e.g. 0259\n if (legislationNumberDigitsWithZeroPadding) {\n const legislationNumberDigitsWithOutZeroPadding = parseInt(legislationNumberDigitsWithZeroPadding[0]); //turns 0259 into 259\n legislationNumber = legislationNumber.replace(/\\d+/, legislationNumberDigitsWithOutZeroPadding); //turns HB0259 into HB259\n }\n\n this.setupPage(sessionCode, legislationNumber);\n }\n\n componentDidUpdate(prevProps) {\n const sessionCode = this.props.match ? this.props.match.params.sessionCode : this.props.selectedBillSession;\n const legislationNumber = this.props.match ? this.props.match.params.billnumber : this.props.selectedBill;\n const previousSessionCode = prevProps.match ? prevProps.match.params.sessionCode : prevProps.selectedBillSession;\n const previousLegislationNumber = prevProps.match ? prevProps.match.params.billnumber : prevProps.selectedBill;\n if (previousSessionCode !== sessionCode || previousLegislationNumber !== legislationNumber) {\n this.setState({\n historyIsLoaded: false,\n summaryIsLoaded: false,\n versionsIsLoaded: false,\n patronIsLoaded: false,\n billDataIsLoaded: false\n }, () => {\n this.setupPage(sessionCode, legislationNumber);\n })\n } else if (JSON.stringify(prevProps.login.userClaims.resources) !== JSON.stringify(this.props.login.userClaims.resources)) {\n this.setState({\n historyIsLoaded: false\n }, () => {\n if (!this.props.login.userClaims.resources.find(resource => resource === BILL_AUTHOR)) {\n this.setState({ editing: {} })\n }\n this.setupPage(sessionCode, legislationNumber);\n })\n }\n\n if (!this.state.switchedToBill && prevProps.location.search !== this.props.location.search) {\n const parsed = queryString.parse(this.props.location.search);\n if (parsed.openBillHistory) {\n this.setState({\n switchedToBill: true\n });\n }\n }\n\n }\n\n setupPage(sessionCode, legislationNumber) {\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n if (this.props.session.selectedSession) {\n this.setState({\n sessionData: this.props.session.selectedSession,\n conveneDate: this.props.session.selectedSession.SessionStart,\n legislationNumber: legislationNumber\n }, () => {\n this.getBillDetails(legislationNumber, sessionCode);\n this.getBillSummary(legislationNumber, sessionCode);\n this.getBillVersion(legislationNumber, sessionCode);\n\n if (this.props.login.isAuthenticated) {\n this.getCollections(\"?SessionID=\" + this.state.sessionData.SessionID);\n }\n });\n this.props.actions.getCommitteeList('sessionID=' + this.props.session.selectedSession.SessionID + \"&includeSubCommittees=true\").then(() => {\n let committeeList = this.props.committee.committeeList;\n committeeList.forEach(committee => {\n committee.label = committee.Name;\n committee.value = committee.CommitteeID;\n committee.abbrev = committee.Abbreviation;\n });\n this.setState({\n committeeList: committeeList\n });\n });\n }\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n this.setState({\n billDataIsLoaded: true,\n patronIsLoaded: true,\n historyIsLoaded: true,\n billData: ''\n });\n });\n //This is if a user is signed in with the correct roles they can edit the events\n const chamberCode = legislationNumber[0];\n this.props.actions.getBillEvents('?LegislationChamberCode=' + chamberCode)\n .then(() => {\n let billEvents = [...this.props.bills.billEvents];\n billEvents.forEach(evt => {\n evt.label = evt.LegislationDescription;\n evt.value = `${evt.LegislationEventTypeID}-${evt.IsPassed}`\n });\n this.setState({\n billEvents: billEvents\n });\n });\n this.props.actions.getMemberList('sessionCode=' + sessionCode).then(() => {\n let memberList = [...this.props.members.memberList];\n memberList.forEach(member => {\n member.label = member.PatronDisplayName;\n member.value = member.MemberID;\n });\n this.setState({\n memberList: memberList\n });\n });\n this.props.actions.getActionTypes()\n .then(() => {\n let actionTypes = [...this.props.minutes.actionTypes];\n actionTypes.forEach(type => {\n type.label = type.ActionReferenceType;\n type.value = type.ActionReferenceTypeID;\n })\n this.setState({\n actionTypes: actionTypes\n });\n });\n this.props.actions.getAgencyList().then(() => {\n let agencies = [...this.props.organizations.agencyList]\n agencies.forEach((agency, i) => {\n agency.label = agency.AgencyName + \" (\" + agency.Abbreviation + \")\";\n agency.value = agency.AgencyNumber\n })\n this.setState({\n agencyOptions: agencies\n })\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n // RETRIEVE PATRONS FOR A BILL\n getPatrons(billID, chamberCode) {\n this.props.actions.getPatronList(billID).then(() => {\n let senatePatronsList = this.props.patrons.senatePatronsList;\n let housePatronsList = this.props.patrons.housePatronsList;\n let chiefPatronsList = this.props.patrons.chiefPatronsList;\n let patronList = this.props.patrons.patronList;\n let originalPatronList = this.props.patrons.patronList;\n if (chamberCode === 'H' && chiefPatronsList && chiefPatronsList.length > 1) {\n for (let i = 1; i < chiefPatronsList.length; i++) {\n if (chiefPatronsList[i].ChamberCode === 'S') {\n senatePatronsList.unshift(chiefPatronsList[i]);\n } else {\n housePatronsList.unshift(chiefPatronsList[i]);\n }\n chiefPatronsList.splice(i, 1);\n i--;\n }\n }\n\n housePatronsList.sort((a, b) => { return a.Sequence > b.Sequence ? 1 : b.Sequence > a.Sequence ? -1 : a.PatronDisplayName > b.PatronDisplayName ? 1 : -1 });\n senatePatronsList.sort((a, b) => { return a.Sequence > b.Sequence ? 1 : b.Sequence > a.Sequence ? -1 : a.PatronDisplayName > b.PatronDisplayName ? 1 : -1 });\n\n this.setState({\n senatePatronsList,\n housePatronsList,\n chiefPatronsList,\n patronList,\n originalPatronList,\n patronIsLoaded: true\n }, () => {\n if (this.props.location.state && this.props.location.state.expandPatrons && chiefPatronsList.length + housePatronsList.length + senatePatronsList.length > 1) {\n this.toggleShowData('slidePatron');\n }\n })\n }\n )\n }\n\n // RETRIEVE BILL SUMMARIES\n getBillSummary(billNumber, sessionCode) {\n const params = '?sessionCode=' + sessionCode + '&legislationNumber=' + billNumber;\n this.props.actions.getBillSummary(params).then(() => {\n this.setState({\n summariesList: this.props.bills.billSummary.sort((a, b) => { return b.SummaryVersionID - a.SummaryVersionID }),\n summaryIsLoaded: true\n });\n });\n }\n\n // RETRIEVE BILL VERSIONS\n getBillVersion(billNumber, sessionCode) {\n const partner = this.props.login.userClaims.resources.find(resource => resource === VERSION_AUTHOR)\n var params = '?isPublic=' + !partner + '&legislationNumber=' + billNumber + '&sessionCode=' + sessionCode;\n this.props.actions.getBillText(params, partner).then(() =>\n this.setState({\n versionsList: [...this.props.bills.billText].filter(v => !v.SessionCode || v.SessionCode === sessionCode),\n versionsIsLoaded: true\n }, () => {\n if (this.props.login.userClaims.scopes.findIndex(x => x === \"House\") > -1 || this.props.login.userClaims.scopes.findIndex(x => x === \"Senate\") > -1 || this.props.login.userClaims.roles.findIndex(x => x === \"DLSStaff\") > -1) {\n this.setState({\n slideVersions: true\n })\n }\n })\n );\n }\n\n // RETRIEVE THE BILL HISTORY (BILL EVENTS)\n getBillHistory(legislationID, sessionCode) {\n let partner = false;\n let partnerEditor = false;\n //Only use the partner endpoint if the user looking at the bill text is authorized to edit it or is supposed to see non-public events\n if (this.props.login.userClaims.claims.find(claim => claim.RoleName === BILL_EVENT_AUTHOR)) {\n partner = true;\n partnerEditor = true;\n } else if (this.props.login.userClaims.resources.find(resource => resource === BILL_EVENT_VIEWER)) {\n partner = true;\n }\n\n let params = '?legislationID=' + legislationID + \"&sessionCode=\" + sessionCode;\n this.props.actions.getBillHistoryByBillID(params, partner)\n .then(() => {\n this.setState({\n historyList: this.props.bills.billHistory,\n historyIsLoaded: true\n }, () => {\n if (partnerEditor) {\n const parsed = queryString.parse(this.props.location.search);\n if (parsed.openBillHistory) {\n this.setState({\n switchedToBill: true,\n editingHistory: true\n });\n }\n } else {\n this.setState({\n editingHistory: false\n })\n }\n })\n });\n }\n\n getReconsiderationEvents(params) {\n params = '?ReconsiderationAction=' + params + '&LegislationID=' + this.state.billData.LegislationID;\n\n this.props.actions.getLegislationEventsByLegislationId(params)\n .then(() => {\n this.setState({\n reconsiderationEvents: this.props.bills.legislationEventsById\n });\n })\n }\n\n // RETRIEVE THE BILL DETAILS\n getBillDetails(billId, sessionCode) {\n const params = {\n SessionCode: sessionCode,\n LegislationNumbers: [{ LegislationNumber: billId }],\n };\n\n this.props.actions.getBillList(params).then(() => {\n if (this.props.bills.billList[0]) {\n this.setState({\n billData: this.props.bills.billList[0],\n billDataIsLoaded: true,\n }, () => {\n this.getPatrons(this.state.billData.LegislationID, this.state.billData.ChamberCode);\n this.getBillHistory(this.state.billData.LegislationID, this.state.billData.SessionCode);\n });\n } else {\n //The bill cannot be found. Everything has stopped loading so set them to true. A message will be displayed to the user that the bill was not found\n this.setState({\n billDataIsLoaded: true,\n patronIsLoaded: true,\n historyIsLoaded: true,\n billData: ''\n });\n }\n });\n }\n\n // TOGGLE SHOW 'ALL' SLIDEDOWNS\n toggleShowData(slide) {\n this.setState(prevState => ({\n [slide]: !prevState[slide]\n }));\n }\n\n // TOGGLE THE INFO TOOLTIP\n toggleShowTooltip() {\n this.setState(state => ({\n toolTip: !state.toolTip\n }));\n }\n\n // TOGGLE THE 'ALL HISTORY' ARROW\n toggleShowLinks(vote, sessionCode) {\n let historyList = [...this.state.historyList];\n const historyIndex = historyList.findIndex(item => item.LegislationEventID == vote.LegislationEventID);\n\n historyList[historyIndex].opened = !historyList[historyIndex].opened;\n if (vote.VoteLinks) {\n this.setState({\n historyList: historyList\n });\n } else {\n historyList[historyIndex].isLoading = true;\n this.setState({ historyList: historyList });\n let params = '?legislationEventID=' + vote.LegislationEventID;\n this.props.actions.getVoteLink(params).then(() => {\n let links = [...this.props.votes.voteLinkResponse];\n let linkPromises = [];\n links.forEach(link => {\n if (link.CommitteeID) {\n const cmtePromise = this.props.actions.getCommitteeById(\"?id=\" + link.CommitteeID + \"&sessionCode=\" + vote.SessionCode)\n .then(() => {\n link.CommitteeNumber = this.props.committee.committeeByIdData.CommitteeNumber;\n }).catch((err) => {\n console.error(err);\n // Don't care if it fails. That committee won't be visible\n return Promise.resolve();\n })\n linkPromises.push(cmtePromise);\n }\n // If there are any vote links of type 'Legislation' then the legislation ID needs to be turned into a legislation number to form the link\n if (link.ReferenceType === \"Legislation\") {\n const promise = this.props.actions.getBill(link.ReferenceID)\n .then(() => {\n link.LegislationNumber = this.props.bills.bill.LegislationNumber;\n link.SessionCode = link.SessionCode || vote.SessionCode;\n return Promise.resolve();\n }).catch(err => {\n console.error(err);\n // Don't care if it fails. That legislation won't be visible\n return Promise.resolve();\n });\n linkPromises.push(promise);\n }\n });\n Promise.all(linkPromises)\n .then(() => {\n historyList[historyIndex].isLoading = false;\n historyList[historyIndex].VoteLinks = this.props.votes.voteLinkResponse;\n this.setState({\n historyList: historyList\n });\n });\n });\n }\n }\n\n toggleEditContent() {\n this.setState(state => ({\n editingHistory: !state.editingHistory\n }), () => {\n //some browsers do not support the :has() css selector, which is how we remove (i.e. set display: none) the footer-wrapper when editing events.\n //in these instances, we rely on the below js to accomplish the same.\n const footer = document.getElementsByClassName(\"footer-wrapper\");\n if (footer && footer[0]) {\n const unsupportedBrowser = (this.state.editingHistory && window.getComputedStyle(footer[0]).display === 'block') || (!this.state.editingHistory && footer[0].style.display === 'none');\n if (unsupportedBrowser) {\n if (this.state.editingHistory) {\n footer[0].style.display = 'none';\n } else {\n footer[0].style.display = '';\n }\n }\n }\n });\n }\n\n toggleStatementForm(statementDate, statementDescription, documentCode) {\n if (!this.state.displayStatementForm) {\n this.setState({\n displayStatementForm: true,\n statementDate: statementDate,\n statementDescription: statementDescription,\n statementDocumentcode: documentCode\n });\n } else {\n this.setState({\n displayStatementForm: false,\n statementDate: \"\",\n statementDescription: \"\",\n statementDocumentcode: \"\"\n });\n }\n }\n\n closeStatementForm() {\n this.setState({\n displayStatementForm: false\n }, () => {\n //Refresh the page to show the new impact statement in the version list\n const sessionCode = this.props.match ? this.props.match.params.sessionCode : this.props.selectedBillSession;\n const legislationNumber = this.props.match ? this.props.match.params.billnumber : this.props.selectedBill;\n this.setupPage(sessionCode, legislationNumber);\n })\n }\n\n handleEventChange(organizedEvents, callback) {\n this.setState({\n organizedEvents: organizedEvents\n }, () => {\n if (callback) {\n callback();\n }\n });\n }\n\n saveEvents(eventsToSave, callback) {\n if (eventsToSave.length > 0) {\n this.props.actions.saveBillEvent({ LegislationEvents: eventsToSave })\n .then(() => {\n this.props.actions.makeToast([{ message: \"Events Saved\", type: \"success\" }]);\n this.props.actions.getBillHistoryByBillID('?legislationID=' + this.state.billData.LegislationID + \"&sessionCode=\" + this.state.billData.SessionCode, true)\n .then(() => {\n this.setState({\n historyList: this.props.bills.billHistory,\n }, () => callback(true))\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n let msg;\n if (err) {\n try {\n const errJson = JSON.parse(err);\n if (errJson && errJson.Name) {\n msg = errJson.Name\n }\n } catch (e) { /*do nothing*/ }\n }\n this.props.actions.makeToast([{ message: msg && msg.toLowerCase().includes(\"unable to delete referral\") ? msg : \"Events Save Failed\", type: \"failure\" }]);\n this.props.actions.getBillHistoryByBillID('?legislationID=' + this.state.billData.LegislationID + \"&sessionCode=\" + this.state.billData.SessionCode, true)\n .then(() => {\n this.setState({\n historyList: this.props.bills.billHistory,\n }, () => callback(false))\n });\n })\n } else {\n // If there are no events to save then just show the save succesful banner after a second to give the illusion something happened.\n setTimeout(() => {\n this.props.actions.makeToast([{ message: \"Events Saved\", type: \"success\" }]);\n callback(false)\n }, 1000)\n }\n }\n\n changeToNewBillHistoryForm(billNum) {\n this.props.history.push(`/bill-details/${this.state.sessionData.SessionCode}/${billNum}/?openBillHistory=true`)\n }\n\n saveDescription() {\n let saving = { ...this.state.saving };\n saving[DESCRIPTION] = true;\n this.setState({\n saving\n }, () => {\n //Partner get bill request to get the mod date\n this.props.actions.getBill(this.state.billData.LegislationID, true)\n .then(() => {\n let modifiedBillData = { ...this.props.bills.bill };\n modifiedBillData.Description = this.state.description;\n\n this.props.actions.saveBill({ LegislationList: [modifiedBillData] })\n .then(() => {\n this.props.actions.makeToast([{ message: \"Description Saved\", type: \"success\" }]);\n let newBillData = { ...this.state.billData }\n newBillData.Description = this.state.description;\n let editing = { ...this.state.editing };\n editing[DESCRIPTION] = false;\n saving[DESCRIPTION] = false;\n this.setState({\n editing,\n saving,\n billData: newBillData\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Description Save Failed\", type: \"failure\" }]);\n let editing = { ...this.state.editing };\n editing[DESCRIPTION] = false;\n saving[DESCRIPTION] = false;\n this.setState({\n editing: editing,\n saving: saving\n });\n });\n })\n })\n }\n\n saveSummary(index, deletion) {\n let saving = { ...this.state.saving };\n if (!saving[SUMMARY]) {\n saving[SUMMARY] = {};\n }\n saving[SUMMARY][index] = true;\n this.setState({\n saving\n }, () => {\n let summariesList = [...this.state.summariesList];\n //Partner get summary request to get the mod date\n this.props.actions.getBillSummary('/' + summariesList[index].LegislationSummaryID, true)\n .then(() => {\n let modifiedSummaryData = [...this.props.bills.billSummary];\n if (deletion) {\n //Turn IsActive and IsPublic is false, and that will prevent the DB from turning one or the other true in the future\n modifiedSummaryData[0].IsActive = false;\n modifiedSummaryData[0].IsPublic = false;\n } else {\n modifiedSummaryData[0].Summary = this.state.summary[index];\n }\n this.props.actions.saveBillSummary({ SummaryList: modifiedSummaryData })\n .then(() => {\n this.props.actions.makeToast([{ message: \"Summary \" + (deletion ? \"Removed\" : \"Saved\"), type: \"success\" }]);\n let editing = { ...this.state.editing };\n let summary = { ...this.state.summary };\n if (deletion) {\n //remove from the UI and reset the editing/saving/summary values to avoid indexing problems\n this.toggleDeleteSummaryModal();\n summariesList.splice(index, 1);\n saving = {};\n editing = {};\n summary = {};\n } else {\n summariesList[index] = this.props.bills.billSummarySave[0];\n saving[SUMMARY][index] = false;\n if (editing[SUMMARY] && editing[SUMMARY][index]) {\n editing[SUMMARY][index] = false;\n }\n }\n this.setState({\n summariesList,\n summary,\n editing,\n saving\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.error(err)\n this.props.actions.makeToast([{ message: \"Summary Save Failed\", type: \"failure\" }]);\n let editing = { ...this.state.editing };\n let saving = { ...this.state.saving };\n let summary = { ...this.state.summary };\n editing = {};\n saving = {};\n summary = {};\n this.setState({\n summary,\n editing: editing,\n saving: saving\n });\n });\n })\n })\n }\n\n toggleEdit(key, value, index) {\n let editing = { ...this.state.editing };\n if (key === SUMMARY) {\n if (!editing[key]) {\n editing[key] = {};\n }\n editing[key][index] = !editing[key][index];\n let keyState = { ...this.state[key] };\n keyState[index] = value;\n this.setState({\n editing,\n [key]: keyState\n })\n } else {\n editing[key] = !editing[key];\n this.setState({\n editing,\n [key]: value\n })\n }\n }\n\n handleChange(key, e, index) {\n if (key === SUMMARY) {\n let keyState = { ...this.state[key] };\n keyState[index] = e;\n this.setState({\n [key]: keyState\n })\n } else {\n this.setState({\n [key]: e.target.value\n })\n }\n }\n\n handleWatchlistChange(val) {\n this.setState({\n selectedWatchlists: val\n });\n }\n\n handleAddToWatchlists() {\n let watchlists = JSON.parse(JSON.stringify(this.state.selectedWatchlists));\n this.addToWatchlists(watchlists, (saveResultCollections) => {\n let showPopup = { ...this.state.showPopup };\n\n // they are adding bills to one or more watchlist(s) - we need to update the selectedWatchlists state values because their mod dates have now changed\n for (let i = 0; i < watchlists.length; i++) {\n const associatedWatchlist = saveResultCollections.find(c => c.WatchListID === watchlists[i].WatchListID);\n if (associatedWatchlist && associatedWatchlist.ModificationDate !== watchlists[i].ModificationDate) {\n watchlists[i] = associatedWatchlist\n };\n }\n\n this.setState({ selectedWatchlists: [] ? watchlists : [], selectedMergeWatchlists: [], showPopup })\n });\n }\n\n addToWatchlists(watchlists) {\n let duplicatedBills = [];\n watchlists.forEach(watchlist => {\n //Replace each instance of bill with the bill details in state here\n if (watchlist.__isNew__) {\n watchlist.Name = watchlist.label;\n watchlist.Description = `Created on ${moment().format('MM/DD/YYYY')}`;\n watchlist.WatchListLegislation = [];\n delete watchlist.label;\n delete watchlist.__isNew__;\n delete watchlist.value;\n }\n // Make sure the bill isn't already a part of the watchlist\n if (!watchlist.WatchListLegislation.find(leg => leg.LegislationID === this.state.billData.LegislationID) || watchlist.WatchListLegislation.find(leg => leg.LegislationID === this.state.billData.LegislationID).DeletionDate) {\n watchlist.WatchListLegislation.push({\n LegislationID: this.state.billData.LegislationID,\n LegislationNumber: this.state.billData.LegislationNumber,\n Sessions: [{ SessionID: this.state.billData.SessionID }],\n WatchListID: watchlist.WatchListID,\n Note: null\n });\n } else {\n duplicatedBills.push({ \"Watchlist\": watchlist.Name, \"LegislationNumber\": this.state.billData.LegislationNumber });\n }\n })\n\n this.setState({\n collectionIsSaving: true\n }, () => {\n this.props.actions.saveCollections({ WatchLists: watchlists })\n .then(() => {\n this.setState({\n collectionIsSaving: false,\n showWatchlistForm: false,\n selectedWatchlists: []\n });\n\n this.getCollections(\"?SessionID=\" + this.state.billData.SessionID)\n\n if (duplicatedBills.length) {\n this.props.actions.makeToast([{ message: duplicatedBills[0].LegislationNumber + \" is already in \" + (watchlists.length === 1 ? \"this watchlist. \" : \"one or more of these watchlists. \"), type: \"warning\", long: true }]);\n } else {\n this.props.actions.makeToast([{ message: this.state.billData.LegislationNumber + \" was added to your watchlist\" + (watchlists.length > 1 ? \"s\" : (\" \" + watchlists[0].Name)), type: \"success\" }]);\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.setState({\n collectionIsSaving: false\n });\n let message;\n if (err && JSON.parse(err)) {\n const errorMsg = JSON.parse(err).Name;\n message = errorMsg && errorMsg.includes('Public users are') ? errorMsg : 'Save Failed'\n } else {\n message = \"Save Failed\";\n }\n this.props.actions.makeToast([{ message: message, type: \"failure\", long: message.includes('Public users are') }]);\n })\n });\n }\n\n getCollections(params) {\n this.setState({\n collectionIsLoading: true\n });\n this.props.actions.getCollections(params)\n .then(() => {\n const parsed = queryString.parse(this.props.location.search);\n const collectionIndex = this.props.collection.collections.findIndex(coll => coll.WatchListID === parseInt(parsed.collection))\n this.setState({\n collectionIsLoading: false,\n }, () => {\n if (collectionIndex !== -1) {\n this.selectCollection(collectionIndex)\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n this.setState({\n collectionIsLoading: false\n });\n });\n }\n\n toggleWatchlistForm() {\n this.setState({\n showWatchlistForm: !this.state.showWatchlistForm\n })\n }\n\n async submitImpactStatement(description, agency, file) {\n let params = \"?legislationNumber=\" + this.props.match.params.billnumber\n + \"&sessionCode=\" + this.props.match.params.sessionCode\n + \"&referenceNumber=\" + this.state.statementDocumentcode + \"F\" + agency.AgencyNumber\n + \"&description=\" + description\n\n this.setState({\n statementSubmitting: true\n }, () => {\n this.props.actions.uploadImpactStatement(params, file)\n .then(() => {\n this.setState({\n statementSubmitting: false\n }, () => {\n this.closeStatementForm();\n })\n this.props.actions.makeToast([{ message: \"Impact Statement Upload Successful\", type: \"success\" }]);\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n statementSubmitting: false\n });\n this.props.actions.makeToast([{ message: \"Impact Statement Upload Failed\", type: \"failure\" }]);\n })\n })\n }\n\n togglehideAllEvents() {\n this.setState({\n hideAllEvents: !this.state.hideAllEvents\n })\n }\n\n checkForDuplicates(summary) {\n let results = summary.match(/[H|S][B|J|R][\\s| ]+[0-9]+/g);\n if (results) {\n //.trim() and .replace(\" \", \"\") both didn't work, even after being run through .toString(). I'm just glad this works. - JGB\n results.forEach((match) => {\n let breaklessMatch = match.replace(' ', ' ')\n let billNum = breaklessMatch.slice(0, 2) + breaklessMatch.slice(3);\n let link = `<a href=\"/bill-details/` + this.state.billData.SessionCode + `/` + billNum + `\">` + breaklessMatch + `</a>`;\n summary = summary.replace(match, link);\n });\n return summary\n } else {\n return summary\n }\n }\n\n toggleDeleteSummaryModal(summary, summaryIndex) {\n this.setState({\n showDeleteModal: !this.state.showDeleteModal,\n summaryToDelete: { ...summary, index: summaryIndex }\n })\n }\n\n togglePatronModal() {\n this.props.history.push({\n pathname: `/bill-details/${this.state.billData.SessionCode}/${this.state.billData.LegislationNumber}/text/${this.state.versionsList.find(v => v.LegislationVersion === \"Introduced\")?.DocumentCode}`,\n state: { patronUpdate: true }\n })\n }\n\n handleToggleDescriptionEdit(index) {\n let versionsList = this.state['slideVersions'] ? [...this.state.versionsList] : [...this.state.versionsList.filter(version => version.IsActive === true || (version.TextDisposition === \"Offered\" && version.CommitteeID !== undefined))];\n if (versionsList.length > 0) {\n if (versionsList[index].editing === undefined) {\n versionsList[index].editing = true;\n versionsList[index].tempDescription = versionsList[index].Description;\n } else {\n versionsList[index].editing = !versionsList[index].editing;\n }\n this.setState({\n versionsList\n })\n }\n }\n\n handleDescriptionChange(value, index) {\n let versionsList = this.state['slideVersions'] ? [...this.state.versionsList] : [...versionsList.filter(version => version.IsActive === true || (version.TextDisposition === \"Offered\" && version.CommitteeID !== undefined))];\n versionsList[index].tempDescription = value;\n this.setState({\n versionsList\n })\n }\n\n saveVersionDescription(index) {\n let bill = this.state['slideVersions'] ? { ... this.state.versionsList[index] } : { ...versionsList.filter(version => version.IsActive === true || (version.TextDisposition === \"Offered\" && version.CommitteeID !== undefined))[index] };\n bill.Description = bill.tempDescription;\n this.props.actions.saveBillText({ TextsList: [bill] })\n .then(() => {\n this.getBillVersion(this.props.match.params.billnumber, this.props.match.params.sessionCode);\n });\n }\n\n render() {\n const { sessionData, summariesList, historyList, billData, senatePatronsList, housePatronsList, chiefPatronsList, versionsList, editing, description, saving, patronList } = this.state;\n // Show the active and offered versions when drawer is collapsed. If there are no active or offered versions then just display the last item\n let activeVersions = versionsList.filter(version => version.IsActive === true || (version.TextDisposition === \"Offered\" && version.CommitteeID !== undefined) || (version.TextDisposition === \"Recommended\"));\n if (activeVersions.length === 0) {\n activeVersions = [versionsList[versionsList.length - 1]];\n }\n let billSummary = '';\n if (summariesList.length > 0) {\n billSummary = summariesList[0];\n }\n const sessionHeader = sessionData && !isStatic ? sessionData.SessionYear + ' ' + sessionData.DisplayName : '';\n const billHeader = billData && !isStatic ? <React.Fragment>\n <span style={{ marginRight: '1em' }}>{billData.LegislationNumber}</ span>\n <span></span>\n <span>{renderHTML(billData.Description || '')}</span>\n {this.props.login.userClaims.resources.find(resource => resource === BILL_AUTHOR) && <a className=\"icon edit\" style={{ marginLeft: \"5px\" }} onClick={() => this.toggleEdit(DESCRIPTION, this.state.billData.Description)}></a>}\n </React.Fragment> : '';\n\n const billHeaderEditor = <div className=\"bill-description-editor\">\n <span>{billData.LegislationNumber}</ span>\n <input value={description} onChange={(e) => this.handleChange(DESCRIPTION, e)} disabled={saving[DESCRIPTION]} />\n {saving[DESCRIPTION]\n ? <div className=\"small-spinner\"></div>\n : <React.Fragment><a className=\"icon save\" onClick={() => this.saveDescription()}></a>\n <a className=\"icon delete\" onClick={() => this.toggleEdit(DESCRIPTION)}></a></React.Fragment>\n }\n </div>;\n\n const formatSummaryVersion = (billSummary) => (\n billSummary.SummaryVersion.toLowerCase().split(\"\").map((x, i) => { return billSummary.SummaryVersion[i - 1] === \" \" || i === 0 ? x.toUpperCase() : x })\n )\n\n const billSummaryEditor = index => <div className=\"bill-summary-editor\">\n <Editor\n disabled={saving[SUMMARY] && saving[SUMMARY][index]}\n value={this.state.summary[index]}\n init={{\n browser_spellcheck: true,\n height: 350,\n plugins: 'link paste save lists preview searchreplace pagebreak code table',\n toolbar: 'undo redo | bold italic strikethrough | alignleft aligncenter alignright',\n skin: false,\n valid_children: '+body[style]',\n content_css: false,\n content_style: 'table { border-collapse: collapse; border: 1px solid #FFFFFF }' + 'td { padding: 12px 0px }',\n formats: {\n sumtext: {\n block: 'p', attributes: { class: 'sumtext' }\n }\n },\n style_formats: [\n { title: \"Sumtext\", format: \"sumtext\" },\n ],\n }}\n onEditorChange={content => this.handleChange(SUMMARY, content, index)}\n />\n {saving[SUMMARY] && saving[SUMMARY][index]\n ? <div className=\"small-spinner\"></div>\n : <React.Fragment><a className=\"icon save\" onClick={() => this.saveSummary(index)}></a>\n <a className=\"icon delete\" onClick={() => this.toggleEdit(SUMMARY, null, index)}></a></React.Fragment>\n }\n </div>;\n\n if (!this.state.billDataIsLoaded) {\n return (\n <div><LoaderComponent className=\"center-spinner\" data={false} /></div>\n )\n } else if (!billData) {\n //Bill Data has been loaded but if it is empty then there have been zero results returned from the server\n return (<p>Bill data could not be found</p>)\n }\n return (\n <div id=\"bill-details\" className=\"bill-theme public-details inner-grid\" ref={el => (this.componentRef = el)}>\n {this.state.showDeleteModal &&\n <div className='schedule-modal'>\n <div className='schedule-modal-content'>\n <div className='grid-wrapper'>\n <div className='inner-grid eight-one-and-one'>\n <span>Are you sure you want to delete this summary ({formatSummaryVersion(this.state.summaryToDelete)})?</span>\n {saving[SUMMARY] && saving[SUMMARY][this.state.summaryToDelete.index]\n ? <div className=\"small-spinner\"></div>\n : <button className='button primary' onClick={() => this.saveSummary(this.state.summaryToDelete.index, true)}>Yes</button>\n }\n <button className='button secondary' onClick={() => this.toggleDeleteSummaryModal()}>No</button>\n </div>\n </div>\n </div>\n </div>\n }\n {!isStatic &&\n <div>\n <h2 style={{ marginBottom: \"10px\" }}>{sessionHeader}</h2>\n </div>\n }\n {!isStatic &&\n <div className=\"details-header bill-details-header\">\n <h3>{!editing[DESCRIPTION] ? billHeader : billHeaderEditor}</h3>\n {!this.state.displayStatementForm &&\n <div style={{ padding: \"10px 10px 0px 10px\" }} className={`flex-row ${!this.state.editingHistory && this.props.login.userClaims.claims.find(claim => claim.RoleName === BILL_EVENT_AUTHOR) ? 'space-around' : 'flex-end'}`}>\n {!this.state.editingHistory && this.props.login.userClaims.claims.find(claim => claim.RoleName === BILL_EVENT_AUTHOR) &&\n <button type=\"button\" className=\"button-link remove-from-print\" style={{ fontSize: '0.8em' }} onClick={this.toggleEditContent}>Edit History</button>\n }\n <ReactToPrint\n trigger={() => <a type=\"button\" className=\"button print remove-from-print\"> Print</a>}\n content={() => {\n let printedContent = this.componentRef.cloneNode(true);\n //remove icons from printed document\n const removedContent = printedContent.getElementsByClassName('remove-from-print');\n for (const el of removedContent) {\n el.innerHTML = ''\n }\n return printedContent\n }}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n }\n </div>\n }\n <div>\n <div style={this.state.editingHistory || this.state.displayStatementForm ? { display: 'none' } : { display: 'block' }}>\n {this.props.login.isAuthenticated && <div className=\"dlas-forms collection-controls\" style={{ marginBottom: \"5px\" }}>\n <a style={{ fontSize: \"14px\", cursor: \"pointer\" }} onClick={() => this.toggleWatchlistForm()}>{this.state.showWatchlistForm ? \"Hide watchlist form\" : \"Add bill to watchlist\"}</a>\n {this.state.showWatchlistForm &&\n <div className=\"inner-grid two\">\n <div>\n <label htmlFor=\"sr-watchlist-name-control\">Watchlist Name</label>\n <CreatableSelect\n id=\"sr-watchlist-name-control\"\n styles={selectStyle}\n options={this.props.collection.collections}\n getOptionLabel={opt => opt.label || `${opt.Name} ${opt.Description && `- ${opt.Description}`}`}\n getOptionValue={opt => opt.value || opt.WatchListID}\n value={this.state.selectedWatchlists}\n onChange={this.handleWatchlistChange}\n createOptionPosition=\"first\"\n formatCreateLabel={input => <span>Create new: {input}</span>}\n isMulti\n />\n </div>\n <div className=\"inline-list\">\n <br />\n {this.props.collectionIsSaving ?\n <div><span className=\"small-spinner\"></span></div>\n :\n <React.Fragment>\n <button disabled={(this.state.selectedWatchlists && this.state.selectedWatchlists.length < 1 ? true : false) || !this.state.selectedWatchlists} style={{ marginLeft: \"0px\" }} className=\"button\" type=\"button\" onClick={() => this.handleAddToWatchlists(false)}>Add</button>\n </React.Fragment>\n }\n </div>\n </div>}\n </div>}\n {!isStatic &&\n <div style={{ marginTop: \"-3px\" }} className=\"list-desc\">\n <p>Status: {billData.LegislationStatus}</p>\n </div>\n }\n {this.props.login.userClaims.resources.find(resource => resource === BILL_COLLECTION_AUTHOR) && billData && !isStatic &&\n <CollectionNotes\n billData={billData}\n sessionId={this.props.session.selectedSession.SessionID}\n />\n }\n <div style={{ marginBottom: \"0px\" }} className={this.state['slidePatron'] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n <div className=\"toggle-row\">\n <div className=\"description\" style={{ display: 'flex', gap: '5px', alignItems: 'center' }}>\n <h4>{chiefPatronsList.length + housePatronsList.length + senatePatronsList.length > 1 ? \"Patrons\" : \"Patron\"}</h4>\n {versionsList.find(v => v.LegislationVersion === \"Introduced\") && this.props.login.userClaims.claims.find(claim => claim.RoleName === \"Admin\" || (claim.Resource === PATRON_AUTHOR && claim.Scope === (this.state.billData.ChamberCode === \"H\" ? \"House\" : \"Senate\"))) &&\n <button className=\"button small-button\" onClick={this.togglePatronModal}>Update Patrons</button>\n }\n </div>\n {chiefPatronsList.length + housePatronsList.length + senatePatronsList.length > 1 &&\n <div className=\"button-container\">\n <label id=\"sr-patrons-drawer-label\" className=\"arrow-down-label\" onClick={this.toggleShowData.bind(this, 'slidePatron')}>All Patrons</label>\n <button aria-labelledby=\"sr-patrons-drawer-label\" aria-expanded={!!this.state['slidePatron']} className=\"arrow-down\" onClick={this.toggleShowData.bind(this, 'slidePatron')}>More info</button>\n </div>\n }\n </div>\n </div>\n {!this.state.patronIsLoaded ? <LoaderComponent data={false} /> :\n <div style={{ marginBottom: \"10px\" }}>\n <div className=\"list-desc\">\n <p style={this.state['slidePatron'] ? { marginBottom: \"0px\" } : { marginBottom: \"20px\" }}>Introduced by: <PatronList session={sessionData} patrons={chiefPatronsList} /></p>\n </div>\n {this.state['slidePatron'] &&\n <div className=\"patrons-list list-desc\">\n {this.state.billData.ChamberCode === \"H\"\n ?\n <React.Fragment>\n {housePatronsList.length > 0 && <div><span>House: </span><PatronList session={sessionData} patrons={housePatronsList} list /></div>}\n {senatePatronsList.length > 0 && <div><span>Senate: </span><PatronList session={sessionData} patrons={senatePatronsList} list /></div>}\n </React.Fragment>\n :\n <React.Fragment>\n {senatePatronsList.length > 0 && <div><span>Senate: </span><PatronList session={sessionData} patrons={senatePatronsList} list /></div>}\n {housePatronsList.length > 0 && <div><span>House: </span><PatronList session={sessionData} patrons={housePatronsList} list /></div>}\n </React.Fragment>\n }\n </div>\n }\n </div>\n }\n {summariesList.length > 1 &&\n <div className={this.state['slideSummaries'] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n <div className=\"toggle-row\">\n <br />\n <div className=\"button-container\">\n <label id=\"sr-summaries-drawer-label\" className=\"arrow-down-label\" onClick={this.toggleShowData.bind(this, 'slideSummaries')}>All Summaries</label>\n <button aria-labelledby=\"sr-summaries-drawer-label\" aria-expanded={!!this.state['slideSummaries']} className=\"arrow-down\" onClick={this.toggleShowData.bind(this, 'slideSummaries')}>More info</button>\n </div>\n </div>\n </div>\n }\n {!this.state.summaryIsLoaded ? <LoaderComponent data={false} /> :\n <div className=\"bill-details-summary\">\n <div className=\"list-desc\">\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <h4 style={{ paddingLeft: '0px' }}>{formatSummaryVersion(billSummary)}</h4>\n {(!editing[SUMMARY] || !editing[SUMMARY][0]) && this.props.login.userClaims.resources.find(resource => resource === BILL_AUTHOR) &&\n <React.Fragment>\n <a className=\"icon edit\" style={{ margin: \"0px 7px\" }} onClick={() => this.toggleEdit(SUMMARY, billSummary.Summary ? this.checkForDuplicates(billSummary.Summary) : '', 0)}></a>\n <a className=\"icon delete\" onClick={() => this.toggleDeleteSummaryModal(billSummary, 0)}></a>\n </React.Fragment>\n }\n </div>\n <div className='summary-wrapper'>\n {!editing[SUMMARY] || !editing[SUMMARY][0]\n ? renderHTML(this.checkForDuplicates(billSummary.Summary) || '')\n : billSummaryEditor(0)\n }\n </div>\n </div>\n {this.state['slideSummaries'] &&\n <div className=\"list-desc\" style={{ marginTop: \"10px\" }}>\n <span>\n {\n summariesList.map((summaries, i) => {\n if (i > 0) {\n return (\n <div>\n <div key={i} style={{ display: 'flex' }}> <p><strong>{summaries.SummaryVersion}</strong></p>\n {(!editing[SUMMARY] || !editing[SUMMARY][i]) && this.props.login.userClaims.resources.find(resource => resource === BILL_AUTHOR) &&\n <React.Fragment>\n <a className=\"icon edit\" style={{ margin: \"0px 7px\" }} onClick={() => this.toggleEdit(SUMMARY, summaries.Summary ? this.checkForDuplicates(summaries.Summary) : '', i)}></a>\n <a className=\"icon delete\" onClick={() => this.toggleDeleteSummaryModal(summaries, i)}></a>\n </React.Fragment>\n }\n </div>\n {!editing[SUMMARY] || !editing[SUMMARY][i] ?\n renderHTML(summaries.Summary ? this.checkForDuplicates(summaries.Summary) : '')\n :\n billSummaryEditor(i)\n }\n </div>\n )\n } else {\n return false;\n }\n\n })\n }\n </span>\n </div>\n }\n </div>\n }\n <div>\n <div style={{ marginBottom: \"0px\" }} className={this.state['slideVersions'] ? 'parent-li slidedown-open' : 'parent-li slidedown-closed'}>\n <div className=\"toggle-row\">\n <div className=\"table-container description\">\n <h4>Bill Versions</h4>\n <button onClick={this.toggleShowTooltip.bind(this)} className=\"button info\">Info</button>\n {this.state.toolTip &&\n <div className=\"info-box\">\n <ol>\n <li> Introduced - A bill that has been introduced and referred to a committee. </li>\n <li> Engrossed - A stage in the legislative process when a bill passes the second reading in the house of origin. If amended, the engrossed version of the legislation is printed incorporating all amendments that are agreed to. If not amended, the introduced version of the legislation becomes the engrossed bill, and if an amendment in the nature of a substitute is agreed to, the substitute becomes the engrossed bill.</li>\n <li> Enrolled - Legislation which has passed both the Senate and the House of Delegates. It has been signed by the President of the Senate and the Speaker of the House and it has been sent to the Governor, but not yet signed. If signed by the Governor, the bill becomes a law and a Chapter of the Acts of Assembly.</li>\n <li> Chaptered - A bill passed and signed into law by the Governor. The term also applies to constitutional amendments passed by the General Assembly and to bills passed notwithstanding the Governor’s objections or amendments.</li>\n <li> Substitute - The redrafting of legislation that incorporates proposed changes in a new version. </li>\n </ol>\n </div>\n }\n </div>\n {versionsList.length > 1 && versionsList.find(version => !version.IsActive) &&\n <div className=\"button-container\">\n <label id=\"sr-versions-drawer-label\" className=\"arrow-down-label\" onClick={this.toggleShowData.bind(this, 'slideVersions')}>{this.state.slideVersions ? \"Hide All Versions\" : \"Show All Versions\"}</label>\n <button aria-labelledby=\"sr-versions-drawer-label\" aria-expanded={!!this.state['slideVersions']} className=\"arrow-down\" onClick={this.toggleShowData.bind(this, 'slideVersions')}>More info</button>\n </div>\n }\n </div>\n {this.props.login.userClaims.resources.find(resource => resource === VERSION_AUTHOR) &&\n <Link to={`/bill-details/${sessionData.SessionCode}/${billData.LegislationNumber}/text/new-amendment`} className=\"button small-button remove-from-print\">Create Amendment</Link>\n }\n </div>\n <table className=\"line-table\">\n {!this.state.versionsIsLoaded ? (<LoaderComponent data={false} />) : (\n <React.Fragment>\n {versionsList.length > 0 &&\n <div>\n {this.state['slideVersions'] ?\n <VersionList userClaims={this.props.login.userClaims} descriptionEditable={true} handleDescriptionChange={this.handleDescriptionChange} handleToggleDescriptionEdit={this.handleToggleDescriptionEdit} saveDescription={this.saveVersionDescription} version={versionsList} toggleStatementForm={this.toggleStatementForm} legislationClass={billData.LegislationClass} />\n :\n <VersionList userClaims={this.props.login.userClaims} descriptionEditable={true} handleDescriptionChange={this.handleDescriptionChange} handleToggleDescriptionEdit={this.handleToggleDescriptionEdit} saveDescription={this.saveVersionDescription} version={activeVersions} toggleStatementForm={this.toggleStatementForm} legislationClass={billData.LegislationClass} />\n }\n </div>\n }\n </React.Fragment>\n )}\n </table>\n </div>\n </div>\n <div>\n {!this.state.displayStatementForm &&\n <React.Fragment>\n <h4 style={{ display: 'inline-block', marginRight: '8px' }}>History</h4>\n {!this.state.editingHistory && this.props.login.userClaims.claims.find(claim => claim.RoleName === BILL_EVENT_AUTHOR) &&\n <button type=\"button\" className=\"button-link\" style={{ fontSize: '0.8em' }} onClick={this.toggleEditContent}>(Edit)</button>\n }\n </React.Fragment>}\n {this.state.editingHistory && this.state.historyIsLoaded ?\n <BillHistoryForm\n switchedToBill={this.state.switchedToBill}\n legislationNumber={this.state.legislationNumber}\n historyList={historyList}\n organizedEvents={this.state.organizedEvents}\n handleEventChange={this.handleEventChange}\n billEvents={this.state.billEvents}\n billData={this.state.billData}\n toggleEditContent={this.toggleEditContent}\n saveEvents={this.saveEvents}\n hideAllEvents={this.state.hideAllEvents}\n togglehideAllEvents={this.togglehideAllEvents}\n changeToNewBillHistoryForm={this.changeToNewBillHistoryForm}\n actionTypes={this.state.actionTypes}\n memberList={this.state.memberList}\n committeeList={this.state.committeeList}\n versionsList={this.state.versionsList.map(text => ({\n ...text,\n label: text.DocumentCode + \" \" + text.Description,\n value: text.LegislationTextID\n }))}\n reconsiderationEvents={this.state.reconsiderationEvents}\n getReconsiderationEvents={this.getReconsiderationEvents}\n />\n :\n <React.Fragment>\n {!this.state.historyIsLoaded ? <LoaderComponent data={false} /> :\n !this.state.displayStatementForm &&\n <React.Fragment>\n <table className=\"line-table\">\n <tbody>\n {historyList.filter(item => !item.DeletionDate).map((item, index) => (\n <tr key={index} className={`parent-tr ${item.opened ? 'slidedown-open' : 'slidedown-closed'} bill-details-table-row${item.IsPublic ? '' : ' not-public'}`}>\n <td className=\"left\">{moment(item.EventDate).format('l')}</td>\n <td className=\"left\">{item.ActorType}</td>\n <td className=\"left\">\n {item.Description}\n {item.VoteLinks && item.opened &&\n <div className=\"link-row\">\n {item.VoteLinks.map((link, index) =>\n <div key={index}>\n {link.VoteID && item.VoteTally !== \"(Voice Vote)\" ? link.IsPublic ? <Link to={`/vote-details/${this.state.billData.LegislationNumber}/${item.SessionCode}/${link.VoteNumber}`}>Vote</Link> : <span>Vote Detail Pending</span> : ''}\n {link.CommitteeNumber ? <Link to={`/session-details/${item.SessionCode}/committee-information/${link.CommitteeNumber}/committee-details`}>{link.ParentCommitteeID ? 'Subcommittee' : 'Committee'}</Link> : ''}\n {link.LegislationNumber && link.SessionCode ? <Link to={`/bill-details/${link.SessionCode}/${link.LegislationNumber}`}>Legislation</Link> : ''}\n </div>\n )}\n </div>\n }\n </td>\n <td className=\"button-container\">\n {item.ReferenceType && item.ReferenceType.toLowerCase() === \"committee\" ||\n item.ReferenceType && item.ReferenceType.toLowerCase() === \"subcommittee\" ||\n item.ReferenceType && item.ReferenceType.toLowerCase() === \"legislation\" ||\n item.VoteID && item.ReferenceType && item.ReferenceType.toLowerCase() === \"vote\" && item.VoteTally !== \"(Voice Vote)\"\n ? <React.Fragment>\n {item.isLoading ?\n <span className=\"small-spinner\"></span>\n :\n <button className=\"arrow-down\" onClick={() => this.toggleShowLinks(item)}>Show links</button>\n }\n </React.Fragment>\n : null\n }\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </React.Fragment>\n }\n </React.Fragment>\n }\n </div>\n <div>\n {this.state.displayStatementForm &&\n <ImpactStatementForm\n submit={this.submitImpactStatement}\n isSubmitting={this.state.statementSubmitting}\n toggleStatementForm={this.toggleStatementForm}\n statementDate={this.state.statementDate}\n statementDescription={this.state.statementDescription}\n agencyOptions={this.state.agencyOptions}\n />\n }\n </div>\n </div>\n </div>\n )\n }\n}\n\nconst PublicBillDetails = connect(\n (state) => {\n const { bills, session, patrons, votes, login, nav, minutes, members, committee, organizations, collection } = state;\n return {\n bills,\n session,\n patrons,\n votes,\n login,\n nav,\n minutes,\n members,\n committee,\n organizations,\n collection\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, billActionCreators, sessionActionCreators, patronActionCreators, authActionCreators, navActionCreators, minutesActionCreators, memberActionCreators, committeeActionCreators, orgActionCreators, collectionActionCreators), dispatch)\n }\n }\n)(BillDetailsComponent)\n\nexport default PublicBillDetails;\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { voteActionCreators } from '../../stores/lis-votes-store';\nimport VoteDetails from '../../lis-shared/lis-votes/lis-vote-details';\n\nimport LoaderComponent from '../../lis-shared/lis-layout/components/lis-loader-component';\nimport { cancelRequest } from '../../services/request.service';\n\nclass VoteDetailsComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n voteData: []\n };\n }\n\n componentDidMount() {\n const legislationNumber = this.props.match.params.billnumber;\n const voteNumber = this.props.match.params.votenumber;\n const sessionCode = this.props.match.params.sessioncode;\n const params = '?legislationNumber=' + legislationNumber + '&sessionCode=' + sessionCode + '&voteNumber=' + voteNumber;\n\n // GET VOTE DETAILS DATA\n this.props.actions.getVoteDetails(params).then(() => {\n this.setState({ voteDataIsLoaded: true });\n if (this.props.votes.voteDetailsError) {\n throw this.props.votes.voteDetailsError;\n }\n if (this.props.votes.voteDetailsResponse.length === 0) {\n throw \"Cannot get vote data\";\n }\n const pdfFile = this.props.votes.voteDetailsResponse[0].VoteFiles.find(file => file.FileURL.toUpperCase().includes(\".PDF\"));\n this.setState({\n voteData: this.props.votes.voteDetailsResponse[0],\n voteFileUrl: pdfFile || ''\n });\n this.props.actions.getSessionById(this.props.votes.voteDetailsResponse[0].SessionID)\n .then(() => this.setState({ isLoaded: true }));\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err.toString());\n this.setState({\n isLoaded: true,\n message: err.toString()\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { voteData } = this.state;\n if (this.state.message) {\n return (<p>{this.state.message}</p>);\n }\n if (!this.state.isLoaded) {\n return (\n <div><LoaderComponent className=\"center-spinner\" data={false} /></div>\n )\n }\n return (\n <div className=\"bill-theme public-details inner-grid\">\n <div>\n <div>\n <VoteDetails\n sessionData={this.props.session.selectedSession}\n billData={voteData.VoteLegislation ? voteData.VoteLegislation.filter(vl => !vl.DeletionDate) : []}\n voteMembers={voteData.VoteMember || []}\n voteData={voteData}\n voteFileUrl={this.state.voteFileUrl}\n componentRef={this.componentRef}\n isPublic\n />\n </div>\n </div>\n </div>\n )\n }\n}\n\nconst PublicVoteDetails = connect(\n (state) => {\n const { bills, session, votes } = state;\n return {\n bills,\n session,\n votes\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, billActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(VoteDetailsComponent)\n\nexport default PublicVoteDetails;\n","import React from \"react\";\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { navActionCreators } from \"../../stores/lis-nav-store\";\nimport { sessionActionCreators } from '../../stores/lis-session-store';\n\nconst csv_info = [\n {\n csv_name: \"Amendments\",\n },\n {\n csv_name: \"Bills\",\n csv_file: \"BILLS.CSV\"\n },\n {\n csv_name: \"CiBillSubjects\",\n csv_file: \"CIBillSubjects.csv\"\n },\n {\n csv_name: \"CiParentChildSubjects\",\n csv_file: \"CIParentChildSubjects.csv\"\n },\n {\n csv_name: \"CommitteeMembers\",\n },\n {\n csv_name: \"Committees\",\n },\n {\n csv_name: \"Docket\",\n csv_file: \"DOCKET.CSV\"\n },\n {\n csv_name: \"FiscalImpactStatements\",\n },\n {\n csv_name: \"History\",\n csv_file: \"HISTORY.CSV\"\n },\n {\n csv_name: \"Members\",\n },\n {\n csv_name: \"Section\",\n csv_file: \"SECTION.csv\"\n },\n {\n csv_name: \"Sponsors\",\n },\n {\n csv_name: \"SubCommitteeMembers\",\n },\n {\n csv_name: \"SubCommittees\",\n csv_file: \"SubCommittees.csv\"\n },\n {\n csv_name: \"Subdocket\",\n csv_file: \"SUBDOCKET.CSV\"\n },\n {\n csv_name: \"Summaries\",\n },\n {\n csv_name: \"Vote\",\n csv_file: \"VOTE.CSV\"\n },\n {\n csv_name: \"VoteStatements\",\n }\n]\n\nclass PublicDataFiles extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sessionCode: null,\n loadingSessions: true,\n sessionOptions: []\n }\n }\n\n componentDidMount() {\n this.props.actions.getSessionList()\n .then(() => {\n this.setState({\n sessionOptions: this.props.session.sessionList,\n loadingSessions: false\n }, () => {\n if (this.state.sessionOptions && this.state.sessionOptions.length) {\n if (this.props.match.params.sessionCode && this.state.sessionOptions.find(s => s.SessionCode === this.props.match.params.sessionCode)) {\n const session = this.state.sessionOptions.find(s => s.SessionCode === this.props.match.params.sessionCode)\n this.props.actions.changeSession(session.SessionCode);\n this.setSession(this.props.match.params.sessionCode);\n } else if (this.props.nav.session) {\n this.setSession(this.props.nav.session)\n } else if (this.state.sessionOptions.find(s => s.IsDefault)) {\n this.setSession(this.state.sessionOptions.find(s => s.IsDefault).SessionCode);\n } else {\n //shouldn't happen, means no session was provided in the url and there is no default session set\n this.setSession(this.state.sessionOptions[this.state.sessionOptions.length - 1].SessionCode);\n }\n }\n })\n }).catch(err => {\n this.setState({ loadingSessions: false })\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.nav.session !== prevProps.nav.session) {\n if (this.state.sessionOptions && this.state.sessionOptions.length && !isNaN(parseInt(this.props.nav.session))) {\n const session = this.state.sessionOptions.find(s => s.SessionCode === this.props.nav.session);\n if (session) {\n if (this.props.match.params.sessionCode) {\n //update url since it has a sessionCode in it\n this.props.history.push('/data-files/' + session.SessionCode);\n } else {\n this.setSession(session.SessionCode);\n }\n }\n }\n }\n }\n\n setSession(sessionCode) {\n this.setState({ sessionCode })\n }\n\n render() {\n const { sessionCode, loadingSessions } = this.state;\n\n return (\n <div className='generic-details-page public-data-files-page'>\n <div className=\"dlas-forms\">\n <div className=\"public-details\">\n <h2>CSV File Download</h2>\n </div>\n <div>\n <p>Users having the desire and ability to do their own bill tracking have csv files available for download using this page. These csv files are suitable for spreadsheet or database input. Location of these files is {window.env?.STORAGE_ACCOUNT_DOMAIN}/[session_code]/[csv_filename].csv.</p>\n <p>For questions or assistance with csv files, please contact our Help Desk at <a href=\"tel:8047869631\">(804) 786-9631</a>, or <a href=\"mailto:LIS@dlas.virginia.gov\">LIS@dlas.virginia.gov</a>.</p>\n </div>\n <div className=\"csv-desc\">\n <h3>BILLS.CSV</h3>\n <p>The <strong>bills.csv</strong> file contains one row per bill. This file is updated hourly during session and reflects a 'snapshot' status of all bills. This is a comma separated values file with the following columns:</p>\n <ol className=\"data-files-list list-three\">\n <li>Bill_id</li>\n <li>Bill_description</li>\n <li>Patron_id</li>\n <li>Patron_name</li>\n <li>Last_house_committee_id</li>\n <li>Last_house_action</li>\n <li>Last_house_action_date</li>\n <li>Last_senate_committee_id</li>\n <li>Last_senate_action</li>\n <li>Last_senate_action_date</li>\n <li>Last_conference_action</li>\n <li>Last_conference_action_date</li>\n <li>Last_governor_action</li>\n <li>Last_governor_action_date</li>\n <li>Emergency</li>\n <li>Passed_house</li>\n <li>Passed_senate</li>\n <li>Passed</li>\n <li>Failed</li>\n <li>Carried_over</li>\n <li>Approved</li>\n <li>Vetoed</li>\n <li>Full_text_doc1</li>\n <li>Full_text_date1</li>\n <li>Full_text_doc2</li>\n <li>Full_text_date2</li>\n <li>Full_text_doc3</li>\n <li>Full_text_date3</li>\n <li>Full_text_doc4</li>\n <li>Full_text_date4</li>\n <li>Full_text_doc5</li>\n <li>Full_text_date5</li>\n <li>Full_text_doc6</li>\n <li>Full_text_date6</li>\n <li>Last_house_actid</li>\n <li>Last_senate_actid</li>\n <li>Last_conference_act</li>\n <li>Last_governor_actid</li>\n <li>Chapter_id</li>\n <li>Introduction_date</li>\n <li>Last_actid</li>\n </ol>\n </div>\n <div className=\"csv-desc\">\n <h3>HISTORY.CSV</h3>\n <p>The <strong>history.csv</strong> file contains one row for each history \"action\" related to a given bill. It is updated once a day, overnight.\n This is a comma separated values file with the following columns:</p>\n <ol className=\"data-files-list\">\n <li>Bill_id</li>\n <li>History_date</li>\n <li>History_description</li>\n </ol>\n </div>\n {sessionCode ?\n <div className=\"csv-desc\">\n <h3>{sessionCode.substr(0, 4)} CSV FILES FOR DOWNLOAD</h3>\n <p>Below are links to all the files that are available for download. All these files, except the history.csv (as explained above) are updated once an hour during session.</p>\n <ul className=\"data-files-list list-two no-list-style\">\n {\n csv_info.map((csv, idx) =>\n <li key={idx}><a target=\"_blank\" rel=\"noreferrer\" href={`${window.env?.STORAGE_ACCOUNT_DOMAIN}/lisfiles/${sessionCode}/${csv.csv_file ? csv.csv_file : (csv.csv_name + '.csv')}`}>{csv.csv_name}.csv</a></li>\n )\n }\n </ul>\n </div>\n :\n loadingSessions ?\n <div className=\"small-spinner\" />\n :\n <p>Error retrieving sessions.</p>\n }\n </div>\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, session } = state;\n return {\n nav,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(PublicDataFiles)","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { communicationsActionCreators } from '../../stores/lis-communications-store';\nimport moment from 'moment-timezone';\n\nimport { cancelRequest } from '../../services/request.service';\nimport { Link } from 'react-router-dom';\n\nclass PublicCommunicationsList extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n session: '',\n senateIsLoaded: false,\n houseIsLoaded: false,\n senateCommList: [],\n houseCommList: [],\n showHouseChamber: true,\n showSenateChamber: true\n };\n this.toggleChamber = this.toggleChamber.bind(this);\n }\n\n toggleChamber(chamber) {\n this.setState(state => ({\n [chamber]: !state[chamber]\n }));\n }\n\n //When component has mounted, make the call to get session by code\n componentDidMount() {\n const sessionCode = this.props.match.params.sessioncode\n if (parseInt(sessionCode) > 0) {\n //Update the session selector component, which will run componentDidUpdate and call setupPage on its own\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode)\n } else {\n this.setupPage(sessionCode);\n }\n }\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push(\"/session-details/\" + this.props.nav.session + \"/communications\");\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n const sessionCode = this.props.match.params.sessioncode;\n if (!isNaN(sessionCode)) {\n this.props.actions.changeSession(sessionCode);\n }\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n setupPage(sessionCode) {\n this.setState({\n senateIsLoaded: false,\n houseIsLoaded: false\n });\n const createCommList = commList => {\n commList.forEach(comm => {\n const jsonFile = comm.CommunicationFiles.find(file => file.FileURL.includes('JSON'))\n if (jsonFile && jsonFile.IsGenerated) {\n comm.jsonFile = jsonFile\n }\n });\n return commList;\n }\n //Get the session information\n this.props.actions.getSessionByCode(sessionCode)\n .then(() => {\n this.setState({\n session: this.props.session.selectedSession,\n });\n });\n //Get the list for the Senate\n this.props.actions.getCommList('?sessionCode=' + sessionCode + '&chamberCode=S&communicationType=Floor')\n .then(() => {\n this.setState({\n senateCommList: createCommList([...this.props.communications.commList]),\n senateIsLoaded: true\n });\n });\n //Get the list for the House\n this.props.actions.getCommList('?sessionCode=' + sessionCode + '&chamberCode=H&communicationType=Floor')\n .then(() => {\n this.setState({\n houseCommList: createCommList([...this.props.communications.commList]),\n houseIsLoaded: true\n });\n });\n }\n\n render() {\n const { senateCommList, houseCommList, senateIsLoaded, houseIsLoaded, session } = this.state;\n const sessionHeader = session ? session.SessionYear + \" \" + session.DisplayName : '';\n return (\n <div className=\"public-chamber-data\">\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <div className=\"public-list inner-grid two\">\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showHouseChamber\")} aria-expanded={this.state.showHouseChamber} className={`chamber-name ${this.state.showHouseChamber ? \"opened\" : \"\"}`}>House Communications</h3>\n {houseIsLoaded ?\n <table className=\"line-table\">\n {this.state.showHouseChamber &&\n <tbody className=\"toggle-table\">\n <div className=\"list-desc\">\n {houseCommList.map(comm =>\n <tr key={comm.CommunicationID} className=\"inner-grid two alternating-color-list\">\n <td>\n <Link to={`/session-details/${this.state.session.SessionCode}/communications/${comm.ReferenceNumber}`}>\n <span className=\"button paper\">Communication</span>\n {moment(comm.CommunicationDate).format(\"MMMM D, YYYY\")} {comm.CommunicationNumber > 1 && `(${comm.CommunicationNumber})`}\n </Link>\n </td>\n </tr>\n )}\n </div>\n </tbody>\n }\n </table>\n :\n <div className=\"center-spinner spinner\"></div>\n }\n </div>\n\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showSenateChamber\")} aria-expanded={this.state.showSenateChamber} className={`chamber-name ${this.state.showSenateChamber ? \"opened\" : \"\"}`}>Senate Communications</h3>\n {senateIsLoaded ?\n <table className=\"line-table\">\n {this.state.showSenateChamber &&\n <tbody className=\"toggle-table\">\n <div className=\"list-desc\">\n {senateCommList.map(comm =>\n <tr key={comm.CommunicationID} className=\"inner-grid two alternating-color-list\">\n <td>\n <Link to={`/session-details/${this.state.session.SessionCode}/communications/${comm.ReferenceNumber}`}>\n <span className=\"button paper\">Communication</span>\n {moment(comm.CommunicationDate).format(\"MMMM D, YYYY\")} {comm.CommunicationNumber > 1 && `(${comm.CommunicationNumber})`}\n </Link>\n </td>\n </tr>\n )}\n </div>\n </tbody>\n }\n </table>\n :\n <div className=\"center-spinner spinner\"></div>\n }\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { session, nav, communications } = state;\n return {\n session,\n nav,\n communications\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, navActionCreators, communicationsActionCreators), dispatch)\n }\n }\n)(PublicCommunicationsList)\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom'\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { calendarActionCreators } from '../../stores/lis-calendar-store';\nimport moment from 'moment-timezone';\nimport { cancelRequest } from '../../services/request.service';\n\n\nclass PublicCalendarList extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n session: '',\n senateIsLoaded: false,\n houseIsLoaded: false,\n senateCalendarList: [],\n houseCalendarList: [],\n showHouseChamber: true,\n showSenateChamber: true\n };\n\n this.toggleChamber = this.toggleChamber.bind(this);\n }\n\n toggleChamber(chamber) {\n this.setState(state => ({\n [chamber]: !state[chamber]\n }));\n }\n\n //When component has mounted, make the call to get session by code\n componentDidMount() {\n //Update the session selector component, which will run componentDidUpdate and call setupPage on its own\n const sessionCode = this.props.match.params.sessioncode\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode)\n } else {\n this.setupPage(sessionCode);\n }\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push(\"/session-details/\" + this.props.nav.session + \"/calendar\");\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n const sessionCode = this.props.match.params.sessioncode;\n if (!isNaN(sessionCode)) {\n this.props.actions.changeSession(sessionCode);\n }\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n setupPage(sessionCode) {\n this.setState({\n senateIsLoaded: false,\n houseIsLoaded: false\n });\n //Get the session information\n this.props.actions.getSessionByCode(sessionCode)\n .then(() => {\n if (this.props.session.selectedSession) {\n this.setState({\n session: this.props.session.selectedSession\n });\n }\n });\n //Get the list for the Senate\n this.props.actions.getCalendarList('?sessionCode=' + sessionCode + '&chamberCode=S')\n .then(() => {\n this.setState({\n senateCalendarList: this.props.calendar.calendarList,\n senateIsLoaded: true\n });\n });\n //Get the list for the House\n this.props.actions.getCalendarList('?sessionCode=' + sessionCode + '&chamberCode=H')\n .then(() => {\n this.setState({\n houseCalendarList: this.props.calendar.calendarList,\n houseIsLoaded: true\n });\n });\n }\n\n render() {\n const { senateCalendarList, houseCalendarList, senateIsLoaded, houseIsLoaded, session } = this.state;\n const sessionHeader = session ? session.SessionYear + \" \" + session.DisplayName : '';\n return (\n <div className=\"public-chamber-data\">\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <div className=\"public-list inner-grid two\">\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showHouseChamber\")} aria-expanded={this.state.showHouseChamber} className={`chamber-name ${this.state.showHouseChamber ? \"opened\" : \"\"}`}>House Calendar</h3>\n {houseIsLoaded ?\n <table className=\"line-table\">\n {this.state.showHouseChamber &&\n <tbody className=\"toggle-table\">\n <div className=\"list-desc\">\n {houseCalendarList.map(calendar =>\n <tr key={calendar.CalendarID} className=\"inner-grid two alternating-color-list\">\n <td>\n <Link to={`/session-details/${session.SessionCode}/calendar/${calendar.ReferenceNumber}`}>\n {moment(calendar.CalendarDate).format(\"MMMM D, YYYY\") + \" \" + (calendar.CalendarNumber > 1 ? \"(sup. \" + (calendar.CalendarNumber - 1) + \")\" : \"\")}\n </Link>\n </td>\n </tr>\n )}\n </div>\n </tbody>\n }\n </table>\n :\n <div aria-label=\"Loading\" className=\"center-spinner spinner\"></div>\n }\n </div>\n <div>\n <h3 role=\"button\" onClick={() => this.toggleChamber(\"showSenateChamber\")} aria-expanded={this.state.showSenateChamber} className={`chamber-name ${this.state.showSenateChamber ? \"opened\" : \"\"}`}>Senate Calendar</h3>\n {senateIsLoaded ?\n <table className=\"line-table\">\n {this.state.showSenateChamber &&\n <tbody className=\"toggle-table\">\n <div className=\"list-desc\">\n {senateCalendarList.map(calendar =>\n <tr key={calendar.CalendarID} className=\"inner-grid two alternating-color-list\">\n <td>\n <Link to={`/session-details/${session.SessionCode}/calendar/${calendar.ReferenceNumber}`}>\n {moment(calendar.CalendarDate).format(\"MMMM D, YYYY\") + \" \" + (calendar.CalendarNumber > 1 ? \"(sup. \" + (calendar.CalendarNumber - 1) + \")\" : \"\")}\n </Link>\n </td>\n </tr>\n )}\n </div>\n </tbody>\n }\n </table>\n :\n <div aria-label=\"Loading\" className=\"center-spinner spinner\"></div>\n }\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { session, nav, calendar } = state;\n return {\n session,\n nav,\n calendar\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, navActionCreators, calendarActionCreators), dispatch)\n }\n }\n)(PublicCalendarList)\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport CalendarDetailsComponent from '../../lis-shared/lis-calendar/lis-calendar-details';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { calendarActionCreators } from '../../stores/lis-calendar-store';\nimport { authActionCreators } from '../../stores/lis-auth-store';\nimport { cancelRequest } from '../../services/request.service';\nimport renderHTML from 'react-render-html';\nimport { HubConnectionBuilder } from \"@microsoft/signalr\";\n\nimport moment from 'moment-timezone';\n\nimport { collectionActionCreators } from '../../stores/lis-collection-store';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\nimport { communicationsActionCreators } from '../../stores/lis-communications-store';\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst lisDocDomain = window.env?.STORAGE_ACCOUNT_DOMAIN;\n\nclass PublicCalendarDetails extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: false,\n showAll: false,\n calendar: '',\n creatingCollection: null,\n createdCollections: [],\n currentItemHubConnection: '',\n commonCurrentItemOptions: [\n { label: \"Clear current item\", value: 0 },\n { label: \"At Ease\", value: 1 },\n { label: \"In Recess\", value: 2 },\n { label: \"Adjourned\", value: 3 },\n { label: \"Morning Hour\", value: 4 },\n { label: \"Closing Statements\", value: 5 },\n { label: \"Point of Personal Privilege\", value: 6 },\n { label: \"Taking up Budget Bill\", value: 7 },\n { label: \"Electing Judges\", value: 8 },\n { label: \"Governor Addressing Joint Session\", value: 9 },\n { label: \"Taking up Memorial Resolutions\", value: 10 },\n { label: \"Taking up Commending Resolutions\", value: 11 },\n { label: \"Other Business\", value: 12 }\n ],\n failedToJoinBills: [],\n showPdfWindow: false\n };\n\n this.receiveCurrentItem = this.receiveCurrentItem.bind(this);\n this.setCurrentItem = this.setCurrentItem.bind(this);\n this.toggleAgenda = this.toggleAgenda.bind(this);\n this.createWatchlist = this.createWatchlist.bind(this);\n this.editHistory = this.editHistory.bind(this);\n this.removeZeros = this.removeZeros.bind(this);\n this.generateClerksCopy = this.generateClerksCopy.bind(this);\n }\n\n componentDidMount() {\n window.scrollTo(0, 0);\n this.props.actions.getCalendarCategoriesReferences();\n const getCalendar = this.props.actions.getCalendarById(`?ReferenceNumber=${this.props.match.params.calendarid}&SessionCode=${this.props.match.params.sessioncode}`)\n .then(() => {\n this.props.actions.getSessionById(this.props.calendar.calendarGet.SessionID);\n // If the calendar has zero categories then it is probably legacy data.\n // The exception is that Pro Forma calendars have zero bills on them. \n // OR If the CalendarCategory at index 0 is the default calendar category template with no CalendarCategoryID from the DB\n if (this.props.calendar.calendarGet.CalendarCategories.length === 0 && !this.props.calendar.calendarGet.IsProforma || this.props.calendar.calendarGet.CalendarCategories[0] && this.props.calendar.calendarGet.CalendarCategories[0].CalendarCategoryID === undefined) {\n const htmlFile = this.props.calendar.calendarGet.CalendarFiles.find(file => file.FileURL.toUpperCase().includes('.HTM'));\n if (htmlFile) {\n return this.props.actions.getFile(htmlFile.FileURL)\n .then(() => {\n let html = this.props.nav.file;\n if (html) {\n html = html.replaceAll('href=\"#', 'href=\"' + window.location.pathname + \"#\")\n }\n this.setState({\n calendarFile: html,\n isLoaded: true\n });\n return Promise.resolve();\n }).catch(err => {\n if (err !== 'Aborted') {\n throw err.toString();\n }\n return Promise.reject(err);\n });\n } else {\n return Promise.resolve();\n }\n } else {\n return Promise.resolve()\n }\n }).catch(err => {\n return Promise.reject(err);\n });\n Promise.all([\n getCalendar\n ])\n .then(() => {\n const calendarGet = this.props.calendar.calendarGet\n this.setState({\n isLoaded: true,\n calendar: calendarGet\n })\n // Connect to websocket for calendar current item\n let currentItemConnection = new HubConnectionBuilder()\n .withUrl((API_URL || process.env.REACT_APP_CALENDAR_API_URL) + '/Calendar/currentitem')\n .build();\n //Will change to a more reasonable timeout later\n currentItemConnection.serverTimeoutInMilliseconds = 5000000000;\n this.setState({\n currentItemHubConnection: currentItemConnection\n }, () => {\n this.state.currentItemHubConnection\n .start({ withCredentials: false })\n .then(() => {\n this.state.currentItemHubConnection.invoke('GetCalendarCurrentItem', calendarGet.CalendarID)\n .then((message) => {\n const currentItem = message.stronglyTypedObject;\n if (currentItem) {\n this.setState({\n currentCategoryItem: currentItem[0].calendarCategoryID,\n currentAgendaItem: currentItem[0].agendaID,\n currentProceduralMotion: currentItem[0].proceduralMotion\n })\n\n }\n })\n })\n .catch(err => {\n console.log('Error while establishing connection :( ' + err)\n });\n this.state.currentItemHubConnection.on(\"Receive\", message => this.receiveCurrentItem(message));\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n this.setState({\n isLoaded: true,\n message: err.toString()\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n receiveCurrentItem(message) {\n try {\n const currentItem = JSON.parse(message.message);\n this.setState({\n currentCategoryItem: currentItem[0].CalendarCategoryID,\n currentAgendaItem: currentItem[0].AgendaID,\n currentProceduralMotion: currentItem[0].ProceduralMotion\n })\n } catch {\n console.error(`Message malformed: ${message}`);\n }\n }\n\n setCurrentItem(e, categoryId, agendaId, proceduralMotion) {\n if (e) {\n e.stopPropagation();\n }\n if (proceduralMotion === 'Clear current item') {\n // This is so the user has ability to set clear out the current item and display nothing.\n proceduralMotion = '';\n }\n const params = {\n CalendarID: this.state.calendar.CalendarID,\n CalendarCategoryID: categoryId || null,\n AgendaID: agendaId || null,\n ProceduralMotion: proceduralMotion || ''\n }\n this.setState({\n isSavingCalendarCurrentItem: true\n });\n this.props.actions.saveCalendarCurrentItem(params)\n .then(() => {\n this.setState({\n isSavingCalendarCurrentItem: false\n });\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.error(err);\n this.props.actions.makeToast([{ message: \"Failed To Set Current Item\", type: \"failure\" }]);\n });\n }\n\n toggleAgenda(catIndex, agendaIndex) {\n let calendar = { ...this.state.calendar };\n let agenda = calendar.CalendarCategories[catIndex].Agendas[agendaIndex];\n agenda.show = !agenda.show;\n if (agenda.IsActive && agenda.LegislationNumber && !agenda.Versions) {\n agenda.Versions = []\n this.props.actions.getBillVersionByBillNumber('?BillNumber=' + calendar.CalendarCategories[catIndex].Agendas[agendaIndex].LegislationNumber + '&SessionID=' + calendar.SessionID)\n .then(() => {\n // Get the calendar data again just in case the user toggled the agenda items\n calendar = { ...this.state.calendar };\n let versions = this.props.bills.billVersion.filter(ver => moment(ver.DraftDate).startOf('day').isSameOrBefore(calendar.CalendarDate))\n // Most recent versions first\n versions = versions.sort((a, b) => moment(a.DraftDate).isSameOrBefore(b.DraftDate))\n calendar.CalendarCategories[catIndex].Agendas[agendaIndex].Versions = versions\n this.setState({\n calendar: calendar\n });\n }).catch(err => {\n if (err === \"Aborted\") {\n return\n }\n calendar = { ...this.state.calendar };\n calendar.CalendarCategories[catIndex].Agendas[agendaIndex].Versions = \"fail\";\n this.setState({\n calendar: calendar\n });\n })\n }\n this.setState({\n calendar: calendar\n });\n }\n\n createWatchlist(e, catIndex, callback) {\n e.stopPropagation();\n const category = this.state.calendar.CalendarCategories[catIndex];\n let collection = {\n Name: `Calendar on ${moment(this.state.calendar.CalendarDate).format('MM/DD/YY')}`,\n Description: category.Description,\n WatchListLegislation: []\n };\n category.Agendas.forEach(agenda => {\n if (agenda.LegislationID && agenda.IsActive) {\n collection.WatchListLegislation.push({ LegislationID: agenda.LegislationID });\n }\n });\n if (collection.WatchListLegislation.length > 0) {\n this.setState({\n creatingCollection: catIndex\n });\n this.props.actions.saveCollections({ WatchLists: [collection] }, true)\n .then(() => {\n let createdCollections = [...this.state.createdCollections];\n createdCollections[catIndex] = [...this.props.collection.collectionSave][0]\n this.setState({\n creatingCollection: null,\n createdCollections: createdCollections\n });\n if (callback) {\n callback(this.props.collection.collectionSave);\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n creatingCollection: null\n });\n this.props.actions.makeToast([{ message: \"Failed To Create Watchlist\", type: \"failure\" }]);\n });\n }\n }\n\n editHistory(e, catIndex, displayDescription) {\n //User wants to be able to click a button on the calendar and immediately be able to edit the bills in a category.\n //Loop the category agendas, build a string of legislationIDs, put it in the query object, and ship it to bill management\n const category = this.state.calendar.CalendarCategories[catIndex];\n\n let legislationIds = [];\n for (let i = 0; i < category.Agendas.length; i++) {\n if (category.Agendas[i].IsActive && !category.Agendas[i].IsHidden)\n legislationIds.push({ LegislationID: category.Agendas[i].LegislationID })\n }\n\n const queryString = JSON.stringify({ legislationIDs: legislationIds, selectedSession: this.state.calendar.SessionID, calendarDate: this.state.calendar.CalendarDate, calendarCategoryTypeID: category.CalendarCategoryTypeID, calendarCategoryDescription: displayDescription })\n const link = \"/bill-management?q=\" + window.btoa(queryString)\n this.props.history.push(link);\n }\n\n removeZeros(doc) {\n let dom = document.createElement('div');\n dom.innerHTML = doc;\n\n let all = document.getElementsByTagName(\"*\");\n\n for (let i = 0; i < all.length; i++) {\n let trimmedUrl = \"\"\n //If it's an href with a bill or resolution number in it then slice off the end, remove the zeros, and append it back to the href\n if (all[i].href && all[i].href != \"\" && all[i].href.match(/[H|S][B|J|R][0-9]{4}/)) {\n trimmedUrl = all[i].href.slice(all[i].href.length - 7, all[i].href.length - 1)\n trimmedUrl = trimmedUrl.slice(0, 2) + parseInt(trimmedUrl.slice(2))\n all[i].href = all[i].href.slice(0, all[i].href.length - 7) + trimmedUrl + \"/\";\n }\n }\n\n return doc;\n }\n\n generateClerksCopy(category) {\n let LegislationFiles = [];\n\n category.Agendas.filter(x => x.IsActive).forEach((x, i) => {\n LegislationFiles.push({\n LegislationID: x.LegislationID,\n LegislationNumber: x.LegislationNumber,\n SessionID: this.state.calendar.SessionID,\n AmendmentCount: 1,\n FirstChamberCount: 1,\n SecondChamberCount: 1\n })\n })\n\n this.props.actions.joinCommFile({ LegislationFiles })\n .then(() => {\n const res = this.props.communications.joinCommFile;\n if (res.Pdf.FileContents) {\n fetch(`data:application/pdf;base64,${res.Pdf.FileContents}`)\n .then(res => res.blob())\n .then(blob => {\n const urlObj = URL.createObjectURL(blob);\n this.setState({\n pdfSrc: urlObj\n });\n });\n } else {\n this.setState({\n pdfSrc: ''\n })\n }\n let failedBills = [];\n res.JoinLegislation.forEach(leg => {\n if (!leg.Generated) {\n const bill = LegislationFiles.find(bill => bill.LegislationID === leg.LegislationID)\n if (bill && !failedBills.includes(bill)) {\n failedBills.push(bill)\n }\n }\n });\n\n if (failedBills.length === LegislationFiles.length) {\n // Every single bill in the list does not have a clerk copy\n this.props.actions.makeToast([{ message: LegislationFiles.length === 1 ? LegislationFiles[0].LegislationNumber + \" does not have a clerk copy\" : \"No selected bills have a clerk copy\", type: \"failure\", long: true }]);\n this.setState({\n gettingPdf: false\n });\n } else {\n this.setState({\n failedToJoinBills: failedBills,\n showPdfWindow: true,\n gettingPdf: false\n });\n }\n }).catch(err => {\n if (err === 'AbortError') {\n return;\n }\n this.setState({\n pdfSrc: '',\n gettingPdf: false\n });\n console.log(err.toString());\n this.props.actions.makeToast([{ message: \"Failed To Get Data\", type: \"failure\" }]);\n })\n }\n\n render() {\n const { selectedSession } = this.props.session;\n const { isLoaded, message, calendar } = this.state;\n if (!isLoaded) {\n return (<div className=\"center-spinner spinner\">Loading...</div>)\n }\n if (message) {\n return (<div className=\"center\">{message}</div>)\n }\n if (this.state.calendarFile) {\n\n //Find and display the PDF link if we're displaying a pre-generated calendar file\n let calendarFileUrl = '';\n const pdfFile = this.props.calendar.calendarGet.CalendarFiles.find(file => file.FileURL.toUpperCase().includes('PDF'));\n if (pdfFile) {\n const url = new URL(pdfFile.FileURL);\n calendarFileUrl = lisDocDomain + (url.pathname[0] === '/' ? url.pathname : '/' + url.pathname);\n }\n\n return (\n <div className='details-page-data-container'>\n {calendarFileUrl != \"\" &&\n <a target=\"_blank\" href={calendarFileUrl} className=\"float-right\">\n <span title=\"PDF\" aria-label=\"PDF\" className=\"icon pdf\"></span>\n </a>\n }\n {renderHTML(this.removeZeros(this.state.calendarFile))}\n </div>\n );\n }\n\n //This calendarTime logic is also set in lis-calendar-form, if changed here, change there as well\n const calendarTime = moment.utc(calendar.CalendarDate).isSame(moment.utc(calendar.CalendarDate).hour(0), \"minute\")\n || moment.utc(calendar.CalendarDate).isSame(moment.utc(calendar.CalendarDate).hour(12), \"minute\")\n ? \"12 noon\"\n : moment.utc(calendar.CalendarDate).format(\"h:mm a\");\n\n return (<div className='generic-details-page calendar-details-page'>\n <div style={{ display: this.state.showPdfWindow ? 'block' : 'none', overflow: 'hidden' }} onClick={() => this.setState({ showPdfWindow: false })} className=\"overlay center-content\">\n <div className=\"full full-height\" style={{ maxWidth: '100vw', width: '95%' }}>\n <div onClick={e => e.stopPropagation()} className=\"dlas-forms user-forms overlay-content animated-fade-in-up full-height\">\n <div>\n <button className=\"button print\" onClick={() => this.pdfRef ? this.pdfRef.contentWindow.print() : null}> Print</button>\n </div>\n {this.state.failedToJoinBills.length > 0 &&\n <div className=\"small-text\">\n <span>These bills do not have clerk copies and are not included in the PDF: </span>\n <span>{this.state.failedToJoinBills.map((bill, i) => <React.Fragment key={i}>{i !== 0 && \", \"}{bill.billNum}</React.Fragment>)}</span>\n </div>\n }\n <div className=\"center full-height\">\n <iframe className=\"center\" style={{ width: '100%', height: '90%' }} ref={el => this.pdfRef = el} src={this.state.pdfSrc}></iframe>\n <button style={{ position: 'absolute', bottom: '10px', right: '10px' }} type=\"button\" onClick={() => this.setState({ showPdfWindow: false, pdfSrc: \"\" })} className=\"button secondary\">Close</button>\n </div>\n </div>\n </div>\n </div>\n <CalendarDetailsComponent\n calendar={calendar}\n calendarTime={calendarTime}\n session={selectedSession}\n sessionList={this.props.session.sessionList}\n comments={calendar.CalendarComments || []}\n creatingCollection={this.state.creatingCollection}\n userClaims={this.props.login.userClaims}\n createdCollections={this.state.createdCollections}\n editHistory={this.editHistory}\n createWatchlist={this.createWatchlist}\n toggleAgenda={this.toggleAgenda}\n setCurrentItem={this.setCurrentItem}\n currentCategoryItem={this.state.currentCategoryItem}\n currentAgendaItem={this.state.currentAgendaItem}\n currentProceduralMotion={this.state.currentProceduralMotion}\n commonCurrentItemOptions={this.state.commonCurrentItemOptions}\n isSavingCalendarCurrentItem={this.state.isSavingCalendarCurrentItem}\n generateClerksCopy={this.generateClerksCopy}\n calendarCategoryReferences={this.props.calendar.calendarCategoriesReferences}\n />\n </div>);\n }\n}\n\nexport default connect(\n (state) => {\n const { session, nav, calendar, bills, login, collection, communications } = state;\n return {\n session,\n nav,\n calendar,\n bills,\n login,\n collection,\n communications\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, navActionCreators, calendarActionCreators, billActionCreators, authActionCreators, collectionActionCreators, communicationsActionCreators), dispatch)\n }\n }\n)(PublicCalendarDetails)\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { Link } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { minutesActionCreators } from '../../stores/lis-minutes-store';\nimport { cancelRequest } from '../../services/request.service';\nimport moment from 'moment-timezone';\n\n\nclass PublicMinutesList extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n session: '',\n senateIsLoaded: false,\n houseIsLoaded: false,\n senateMinutesList: [],\n houseMinutesList: [],\n showHouseChamber: true,\n showSenateChamber: true\n };\n\n this.toggleChamber = this.toggleChamber.bind(this);\n }\n\n toggleChamber(chamber) {\n this.setState(state => ({\n [chamber]: !state[chamber]\n }));\n }\n\n //When component has mounted, make the call to get session by code\n componentDidMount() {\n const sessionCode = this.props.match.params.sessioncode\n if (parseInt(sessionCode) > 0) {\n //Update the session selector component, which will run componentDidUpdate and call setupPage on its own\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode)\n } else {\n this.setupPage(sessionCode);\n }\n }\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push(\"/session-details/\" + this.props.nav.session + \"/minutes-list/\" + this.props.match.params.chamber);\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n const sessionCode = this.props.match.params.sessioncode;\n if (!isNaN(sessionCode)) {\n this.props.actions.changeSession(sessionCode);\n }\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n setupPage(sessionCode) {\n this.setState({\n senateIsLoaded: false,\n houseIsLoaded: false\n }, () => {\n //Get the session information\n this.props.actions.getSessionByCode(sessionCode)\n .then(() => {\n this.setState({\n session: this.props.session.selectedSession,\n });\n });\n if (this.props.match.params.chamber === \"house\") {\n //Get the list for the House\n this.props.actions.getMinutesList('sessionCode=' + sessionCode + '&chamberCode=H')\n .then(() => {\n this.setState({\n houseMinutesList: [...this.props.minutes.minutesList].filter(m => !m.CommitteeID),\n houseIsLoaded: true\n });\n });\n } else {\n //Get the list for the Senate\n this.props.actions.getMinutesList('sessionCode=' + sessionCode + '&chamberCode=S')\n .then(() => {\n this.setState({\n senateMinutesList: [...this.props.minutes.minutesList].filter(m => !m.CommitteeID),\n senateIsLoaded: true\n });\n });\n }\n });\n }\n\n render() {\n const { senateMinutesList, houseMinutesList, senateIsLoaded, houseIsLoaded, session } = this.state;\n const sessionHeader = (session ? session.SessionYear + \" \" + session.DisplayName : '') + (this.props.match.params.chamber === \"house\" ? \" House\" : \" Senate\") + \" Minutes\";\n return (\n <div className=\"public-chamber-data\">\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <div className=\"public-list\">\n {this.props.match.params.chamber === \"house\" ?\n session && session.SessionYear < 2010 ?\n <div>\n {houseIsLoaded ?\n <table className=\"line-table\">\n <tbody className=\"toggle-table\">\n {houseMinutesList.map(minutes =>\n <tr key={minutes.MinutesBookID} className=\"inner-grid two alternating-color-list\">\n <td>\n {minutes.MinutesFiles && minutes.MinutesFiles.length > 0 ?\n <a target=\"_blank\" href={minutes.MinutesFiles[0].FileURL}>\n <span className=\"button paper\">Minutes</span>\n {moment(minutes.MinutesDate).format(\"MM/DD/YYYY\")} {minutes.MinutesNumber > 1 && `(${minutes.MinutesNumber})`}\n </a>\n :\n <div>\n <span className=\"button paper\">Minutes</span>\n {moment(minutes.MinutesDate).format(\"MM/DD/YYYY\")} {minutes.MinutesunicatilonNumber > 1 && `(${minutes.MinutesNumber})`}\n </div>\n }\n </td>\n </tr>\n )}\n </tbody>\n </table>\n :\n <div aria-label=\"Loading\" className=\"center-spinner spinner\"></div>\n }\n </div>\n :\n <a href={\"https://virginiageneralassembly.gov/house/minutes/list.php?ses=\" + (session && session.SessionCode.toString().substr(2, 3))}>House Minutes</a>\n :\n <div>\n {senateIsLoaded ?\n <table className=\"line-table\">\n <tbody className=\"toggle-table\">\n {senateMinutesList.map(minutes =>\n <tr key={minutes.MinutesBookID} className=\"inner-grid two alternating-color-list\">\n <td>\n <Link to={`../minutes/${minutes.MinutesBookID}`}>\n <span className=\"button paper\">Minutes</span>\n {moment(minutes.MinutesDate).format(\"MM/DD/YYYY\")} {minutes.MinutesNumber > 1 && `(${minutes.MinutesNumber})`}\n </Link>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n :\n <div aria-label=\"Loading\" className=\"center-spinner spinner\"></div>\n }\n </div>\n }\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { session, nav, minutes } = state;\n return {\n session,\n nav,\n minutes\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, navActionCreators, minutesActionCreators), dispatch)\n }\n }\n)(PublicMinutesList)\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport ReactToPrint from 'react-to-print';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { minutesActionCreators } from '../../stores/lis-minutes-store';\nimport { personnelActionCreators } from '../../stores/lis-personnel-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { cancelRequest } from '../../services/request.service';\nimport moment from 'moment-timezone';\n\nimport MinutesDetails from '../../lis-shared/lis-minutes/lis-minutes-details';\nimport renderHTML from 'react-render-html';\n\nclass PublicMinutesDetails extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: false\n };\n }\n\n //When component has mounted, make the call to get session by ID\n componentDidMount() {\n const sessionCode = parseInt(this.props.match.params.sessioncode);\n const minutesId = parseInt(this.props.match.params.minutesid)\n const error = (msg) => {\n this.setState({\n message: msg || \"Failed to get minutes\",\n isLoaded: true\n });\n }\n\n if (parseInt(sessionCode) > 0 && minutesId > 0) {\n this.props.actions.getSessionByCode(sessionCode)\n .then(() => {\n this.props.actions.getMinutesBook('?minutesbookID=' + minutesId)\n .then(() => {\n const minutesBook = this.props.minutes.minutesBook;\n if (minutesBook.MinutesCategories.length === 0 && minutesBook.MinutesFiles.find(file => file.FileURL.toUpperCase().includes('.HTM'))) {\n //If there are no categories then it is assumed that this minutes book is legacy. Get the file if it exists\n const htmlFile = minutesBook.MinutesFiles.find(file => file.FileURL.toUpperCase().includes('.HTM'));\n if (htmlFile) {\n this.props.actions.getFile(htmlFile.FileURL)\n .then(() => {\n this.setState({\n minutesFile: this.props.nav.file,\n isLoaded: true\n });\n }).catch(err => {\n if (err !== 'Aborted') {\n throw err.toString();\n }\n });\n }\n } else {\n this.props.actions.getRoleTypes()\n .then(() => {\n // not going to serve the file itself, so we need to get the appropriate names for the header\n // wait until both async calls are done before setting isLoaded to true \n const ltGovPromise = new Promise((res, rej) => {\n const ltGovRoleType = this.props.personnel.roleTypes.find(x => x.Name.toLowerCase().includes(\"president\"));\n const ltGovParams = \"isPublic=true&staffRoleTypeID=\" + ltGovRoleType.StaffRoleTypeID + \"&effectiveBeginDate=\" + minutesBook.MinutesDate;\n this.props.actions.getPersonnelList(ltGovParams, true)\n .then(() => {\n const ltGov = this.props.personnel.personnelOtherList[0];\n if (ltGov) {\n this.setState({\n ltGov\n })\n } else {\n throw 'Failed to get President of the Senate';\n }\n res();\n }).catch(err => rej(err));\n });\n const clerkOfSenatePromise = new Promise((res, rej) => {\n const clerkOfSenateRoleType = this.props.personnel.roleTypes.find(x => x.Name.toLowerCase().includes(\"clerk\") && x.Name.toLowerCase().includes(\"senate\"))\n const clerkOfSenateParams = \"isPublic=true&staffRoleTypeID=\" + clerkOfSenateRoleType.StaffRoleTypeID + \"&effectiveBeginDate=\" + minutesBook.MinutesDate;\n this.props.actions.getPersonnelList(clerkOfSenateParams, true)\n .then(() => {\n const clerkofTheSenate = this.props.personnel.personnelOtherList[0];\n if (clerkofTheSenate) {\n this.setState({\n clerkofTheSenate\n })\n } else {\n throw 'Failed to get Clerk of the Senate';\n }\n res();\n }).catch(err => rej(err));\n })\n Promise.all([ltGovPromise, clerkOfSenatePromise]).then(() => {\n this.setState({ isLoaded: true })\n }).catch(err => {\n if (err === 'Aborted')\n return;\n console.log(err)\n error('Failed to get header personnel information');\n })\n }).catch(err => {\n if (err === 'Aborted')\n return;\n error('Failed to get header personnel information');\n });\n }\n }).catch(err => {\n if (err === 'Aborted')\n return;\n error();\n });\n });\n } else {\n error();\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { isLoaded, message, ltGov, clerkofTheSenate } = this.state;\n\n const session = this.props.session.selectedSession;\n const sessionHeader = session ? session.SessionYear + \" \" + session.DisplayName : '';\n\n const minutesBook = this.props.minutes.minutesBook;\n const categories = minutesBook.MinutesCategories;\n let categoriesToShow = [];\n if (categories) {\n categoriesToShow = categories.filter(category => category.ReleaseToPreview);\n }\n\n if (message) {\n return (<p>{message}</p>);\n }\n if (!isLoaded) {\n return (<div className=\"center-spinner spinner\">Loading...</div>);\n }\n return (\n <div className='generic-details-page minutes-details-page'>\n <div className=\"flex-row\">\n <div>\n <h2>{sessionHeader}</h2>\n </div>\n <div>\n {minutesBook.MinutesFiles && minutesBook.MinutesFiles.length > 0 &&\n <a className=\"download-link\" href={minutesBook.MinutesFiles[0].FileURL} target=\"_blank\" style={{ marginRight: \"5px\" }}><i className=\"icon file\" /> View HTML</a>\n }\n <ReactToPrint\n trigger={() => <button type=\"button\" className=\"button print\"> Print</button>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n </div>\n <div className=\"details-page-data-container\" ref={el => (this.componentRef = el)}>\n {this.state.minutesFile ?\n <div>{renderHTML(this.state.minutesFile)}</div>\n :\n <React.Fragment>\n <div className=\"entry-text\">\n <ul className=\"first-entry\">\n <li>Minute Book</li>\n <li>{sessionHeader}</li>\n <li>Senate of Virginia</li>\n <li>{ltGov.FullName.toUpperCase()}, PRESIDENT OF THE SENATE</li>\n <li>{clerkofTheSenate.FullName.toUpperCase()}, CLERK</li>\n <li>{moment(minutesBook.MinutesDate).format('dddd, MMMM DD, YYYY')}</li>\n </ul>\n </div>\n <MinutesDetails\n categories={categoriesToShow}\n publicPage={true}\n />\n </React.Fragment>\n }\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { session, minutes, personnel, nav } = state;\n return {\n session,\n minutes,\n personnel,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, minutesActionCreators, personnelActionCreators, navActionCreators), dispatch)\n }\n }\n)(PublicMinutesDetails)\n","import React from 'react';\nimport Select from 'react-select';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\n\nconst RESET = 'RESET';\n\nconst getItemStyle = (isDragging, draggableStyle, isHeader) => ({\n userSelect: \"none\",\n padding: '5px',\n border: '1px solid #CCC',\n margin: '0',\n fontSize: isHeader ? '.95em' : '.9em',\n background: isDragging ? \"#CCC\" : \"#FFF\",\n ...draggableStyle\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? \"#f5f5f5\" : \"#f5f5f5\",\n padding: '0'\n});\n\nconst selectStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n dropdownIndicator: (base) => ({\n ...base,\n padding: '0px 8px'\n }),\n clearIndicator: (base) => ({\n ...base,\n padding: '0px 8px'\n }),\n singleValue: (base, state) => {\n return { ...base, };\n },\n menu: (base) => ({\n ...base,\n boxShadow: 'none'\n }),\n menuList: (base) => ({\n ...base,\n background: 'white',\n border: '1px solid gray',\n borderRadius: '5px'\n })\n};\n\nexport default class UpdatePatronageModal extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showPatronTypeChangeWarning: {}\n }\n\n this.handlePatronTypeChange = this.handlePatronTypeChange.bind(this);\n this.cancel = this.cancel.bind(this);\n }\n\n handlePatronTypeChange(row, val, confirm) {\n const patronDisplayName = row.PatronDisplayName;\n if (val && val.Name === \"Chief Co-Patron\" && this.props.patronList.filter(p => !p.RemoveDate && p.Name === \"Chief Co-Patron\").length === 4) {\n this.setState({\n showPatronTypeChangeWarning: {\n ...this.state.showPatronTypeChangeWarning,\n [patronDisplayName]: !confirm\n }\n })\n if (!confirm) {\n return;\n }\n } else if (val === RESET) {\n this.setState({\n showPatronTypeChangeWarning: {\n ...this.state.showPatronTypeChangeWarning,\n [patronDisplayName]: false\n }\n })\n return;\n }\n this.props.handlePatronChange(row, 'PatronType', val)\n }\n\n cancel() {\n this.props.history.goBack();\n }\n\n render() {\n const { billText, patronList, memberList, patronTypes, newPatron } = this.props;\n const { showPatronTypeChangeWarning } = this.state;\n const showConfirmButton = newPatron?.length && !newPatron.find(p => !p.MemberID) && !newPatron.find(p => !memberList.find(m => m.MemberID === p.MemberID)) && !newPatron.find(p => !patronTypes.find(pt => pt.Name === p.Name)) && [...newPatron].filter(p => p.Name === \"Chief Co-Patron\").concat(patronList.filter(p => !p.RemoveDate && p.Name === \"Chief Co-Patron\")).length > 4;\n return (\n <div>\n <div style={{ margin: '10px' }}>\n <div style={{ marginBottom: '10px' }}>\n <h2 style={{ marginBottom: '0px' }}>Update Patrons ({billText.LegislationNumber})</h2>\n </div>\n <div style={{ marginBottom: '10px' }}>\n <div style={{ display: 'grid', gap: '10px', gridTemplateColumns: 'max-content 350px 180px 100px', alignItems: 'center' }}>\n <span style={{ fontSize: '.85em' }}>New Patron(s): </span>\n <Select\n isMulti\n options={memberList ? memberList.filter(m => !patronList.map(p => p.MemberID).includes(m.MemberID)) : []}\n onChange={(val, behavior) => this.props.handleNewPatronChange('Patron', val, behavior)}\n getOptionValue={(opt) => opt.MemberID}\n getOptionLabel={(opt) => memberList.find(m => m.MemberID === opt.MemberID)?.label}\n value={[...newPatron].filter(p => p.MemberID)}\n styles={selectStyles}\n />\n <Select\n options={patronTypes ? patronTypes.filter(pt => pt.Name !== \"Incorporated Chief Co-Patron\" || !newPatron.filter(p => p.ChamberCode !== \"S\")?.length) : []}\n getOptionLabel={opt => opt.Name}\n getOptionValue={opt => opt.PatronTypeID}\n onChange={(val) => this.props.handleNewPatronChange('PatronType', val)}\n value={newPatron[0].Name ? patronTypes.find(pt => pt.Name === newPatron[0].Name) : null}\n styles={selectStyles}\n />\n {!showConfirmButton &&\n <button disabled={!newPatron?.length || !newPatron[0].Name || !newPatron[0].MemberID || newPatron.find(p => !memberList.find(m => m.MemberID === p.MemberID)) || newPatron.find(p => !patronTypes.find(pt => pt.Name === p.Name))} className=\"button primary\" onClick={this.props.addNewPatron}>Add</button>\n }\n </div>\n {showConfirmButton &&\n <div style={{ display: 'flex', gap: '8px' }}>\n <span className=\"input-feedback-warning\" style={{ fontSize: '13px', margin: 'auto 0px' }}>Caution: There can only be a maximum of 4 Chief Co-Patrons, which this legislation will now exceed. Continue anyway?</span>\n <button className=\"button primary\" onClick={this.props.addNewPatron}>Yes</button>\n <button className=\"button secondary\" onClick={() => this.props.handleNewPatronChange('PatronType', null)}>No</button>\n </div>\n }\n </div>\n <div style={getItemStyle(false, null, true)} className='inner-grid toggle-and-small-one-med-half-half-small'>\n <div />\n <div>#</div>\n <div>Display Name</div>\n <div style={{ margin: 'auto' }}>Patron Type</div>\n <div style={{ margin: 'auto' }}>By Request</div>\n <div style={{ margin: 'auto' }}>Is Introducing</div>\n <div style={{ margin: 'auto' }}>Actions</div>\n </div>\n <DragDropContext onDragEnd={result => this.props.onDragEnd(result)}>\n <Droppable droppableId={\"hp\"} index={0}>\n {(provided, snapshot) => (\n <div\n {...provided.droppableProps}\n ref={provided.innerRef}\n style={getListStyle(snapshot.isDraggingOver)}\n >\n {patronList.map((row, j) => (\n <Draggable isDragDisabled={Boolean(row.RemoveDate)} key={row.MemberID + \"-\" + row.LegislationID} draggableId={row.MemberID.toString()} index={j}>\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style\n )}\n >\n <div style={{ alignItems: 'center', color: row.RemoveDate ? '#8b8b8b' : '' }} className='inner-grid toggle-and-small-one-med-half-half-small'>\n <div><button className=\"button draggable\">Drag and drop</button></div>\n <div>{!row.RemoveDate ? row.Sequence : \"\"}</div>\n <div>{row.PatronDisplayName + \" (\" + row.ChamberCode + \")\"}</div>\n <div>\n <Select\n options={patronTypes ? patronTypes.filter(pt => pt.Name !== \"Incorporated Chief Co-Patron\" || row.Name === \"Incorporated Chief Co-Patron\" || row.ChamberCode === \"S\") : []}\n getOptionLabel={opt => opt.Name}\n getOptionValue={opt => opt.PatronTypeID}\n onChange={(val) => this.handlePatronTypeChange(row, val)}\n value={patronTypes.find(p => p.Name === row.Name)}\n isDisabled={row.RemoveDate}\n styles={selectStyles}\n />\n </div>\n <div style={{ margin: 'auto' }} disabled={row.RemoveDate} onClick={(val) => this.props.handlePatronChange(row, 'ByRequest')} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={row.ByRequest} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <div style={{ margin: 'auto' }} disabled={row.RemoveDate} onClick={() => this.props.handlePatronChange(row, 'IsIntroducing')} className=\"toggle-switch\">\n <input id=\"sr-status-change\" checked={row.IsIntroducing} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n <div style={{ margin: 'auto', display: 'flex' }}><button onClick={() => this.props.togglePatron(row)} className={`icon ${row.RemoveDate ? 'add' : 'delete'}`} type=\"button\" /></div>\n </div>\n {showPatronTypeChangeWarning[row.PatronDisplayName] &&\n <div style={{ display: 'flex', gap: '8px' }}>\n <span className=\"input-feedback-warning\" style={{ fontSize: '13px', margin: 'auto 0px' }}>Caution: There can only be a maximum of 4 Chief Co-Patrons, which this legislation already has. Continue anyway?</span>\n <button className=\"button primary\" onClick={() => this.handlePatronTypeChange(row, patronTypes.find(p => p.Name === \"Chief Co-Patron\"), true)}>Yes</button>\n <button className=\"button secondary\" onClick={() => this.handlePatronTypeChange(row, RESET)}>No</button>\n </div>\n }\n </div>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n <div className=\"inline-list align-right\" style={{ paddingBottom: '55px' }}>\n {!this.props.savingPatrons && <button className=\"button secondary\" onClick={this.cancel}>Cancel</button>}\n <button disabled={this.props.savingPatrons || showConfirmButton || Object.keys(showPatronTypeChangeWarning).find(key => showPatronTypeChangeWarning[key] === true)} className=\"button primary\" onClick={this.props.updatePatrons}>{this.props.savingPatrons ? <div className=\"small-spinner\" /> : 'Update'}</button>\n </div>\n </div>\n )\n }\n}","import { createElement } from \"react\";\n\nconst getJsx = (jsonObject) => {\n // Do sanity checks. Make sure that the the param is actually an object\n if (typeof jsonObject !== 'object' || jsonObject === null) {\n console.error(\"object sent to be turned into jsx is not an object\")\n return null;\n }\n return mapJson(jsonObject);\n\n}\n\n\nconst mapJson = (object) => {\n if (typeof object === \"string\") {\n return object;\n }\n let attributeObject = {};\n if (object[\"Attributes\"]) {\n for (var key in object[\"Attributes\"]) {\n if (object[\"Attributes\"].hasOwnProperty(key)) {\n switch (key) {\n case (\"Id\"):\n attributeObject.id = object[\"Attributes\"][key];\n break;\n case (\"Class\"):\n attributeObject.className = object[\"Attributes\"][key];\n break;\n case (\"Style\"):\n attributeObject.style = processStyle(object[\"Attributes\"][key]);\n break;\n case (\"Url\"):\n attributeObject.href = object[\"Attributes\"].Url;\n break;\n case (\"cellspacing\"):\n attributeObject['cellSpacing'] = object[\"Attributes\"][key];\n break;\n case (\"cellpadding\"):\n attributeObject['cellPadding'] = object[\"Attributes\"][key];\n break;\n case (\"border\"):\n case (\"align\"):\n attributeObject[key] = object[\"Attributes\"][key];\n break;\n }\n }\n }\n }\n\n let newElements = [];\n if (object[\"Content\"]) {\n let nestedElements = [];\n for (const c of object[\"Content\"]) {\n nestedElements.push(mapJson(c));\n }\n newElements.push(createElement(object[\"TagName\"], { ...attributeObject }, nestedElements));\n } else {\n newElements.push(createElement(object[\"TagName\"], { ...attributeObject }));\n }\n return newElements\n}\n\n// turns the inline style string into an object that jsx can understand.\nconst processStyle = cssText => {\n const rule = cssText.replace(/\\/\\*(.|\\s)*?\\*\\//g, \" \").replace(/\\s+/g, \" \");\n let style = {}\n const properties = rule.split(\";\").map(o => o.split(\":\").map(x => x && x.trim()));\n for (const [property, value] of properties) {\n const objectName = property.toLowerCase().replace(/\\W+\\w/g, match => match.slice(-1).toUpperCase());\n if (value) {\n const urlChecker = value.replace(/url\\s*\\(/g, \"\").replace(/\\)\\s*$/g, \"\");\n try {\n new URL(urlChecker);\n // a url does not need to be in a jsx attribute. Throw them out for safety's sake.\n continue;\n } catch {\n // This is not a url. Carry on\n }\n }\n style[objectName] = value;\n }\n return style;\n}\n\n\nexport default getJsx;","import React from 'react';\nimport renderHTML from 'react-render-html';\nimport { Link, Prompt } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport ReactToPrint from \"react-to-print\";\nimport DatePicker from \"react-datepicker\";\nimport Select from 'react-select';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\nimport { authActionCreators } from '../../stores/lis-auth-store';\nimport { patronActionCreators } from '../../stores/lis-patron-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { cancelRequest } from '../../services/request.service';\nimport UpdatePatronageModal from '../../lis-admin/lis-update-patronage-modal';\nimport ReviewSection from '../../lis-admin/lis-version-management/components/lis-review';\nimport Mark from 'mark.js';\nimport queryString from 'query-string';\nimport moment from 'moment-timezone';\nimport getJsx from '../../services/json-to-jsx';\nimport getHtml from '../../services/json-to-html';\nimport { memberActionCreators } from '../../stores/lis-members-store';\n\nconst VERSION_AUTHOR = \"LegislationText\";\nconst PATRON_AUTHOR = \"LegislationPatron\";\nconst NEXT = \"NEXT\";\nconst PREVIOUS = \"PREVIOUS\";\n\nconst inlineStyles = [\n { class: \"enactstm\", value: 'font-family:times,TimesNewRoman,Times New Roman;font-weight:bold;text-align:justify;text-indent:15px;' },\n { class: \"enactcls\", value: 'font-family:times,TimesNewRoman,Times New Roman;font-weight:bold;text-align:justify;' },\n { class: \"section\", value: 'font-family:times,TimesNewRoman,Times New Roman;text-align:justify;margin-bottom:1px;text-indent:15px;' },\n { class: \"ldtitle\", value: 'font-family:times,TimesNewRoman,Times New Roman;font-style:italic;text-align:justify;text-indent:-15px;margin-left:15px;' },\n { class: \"center\", value: 'font-family:times,TimesNewRoman,Times New Roman;font-weight:bold;text-align:center;' }\n]\n\nfunction PatronDisplayInfo(patron) {\n var s = patron.PatronDisplayName.trim();\n if (patron.ByRequest) {\n s += \" (By Request)\";\n }\n return s;\n}\n\nclass FullText extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n message: '',\n isLoaded: false,\n isEditing: false,\n isSaving: false,\n billText: '',\n draftTextCopy: '',\n chamberOptions: [\n { label: \"Senate\", value: \"S\" },\n { label: \"House\", value: \"H\" }\n ],\n sponsorOptions: [],\n highlight: this.props.location.pathname.endsWith('/hilite'),\n amendmentSelections: {},\n memberOptions: [],\n houseMemberOptions: [],\n senateMemberOptions: [],\n committeeOptions: [],\n housePatronsList: [],\n senatePatronsList: [],\n patronList: [],\n originalPatronList: [],\n versionsList: [],\n chiefPatronsList: [],\n showPatronModal: false,\n showTooltip: false,\n isDirty: false,\n initialPass: false,\n patronTypes: [],\n newPatron: [{}],\n wasEmpty: false,\n replaced: false,\n markHelpIndex: null,\n subcommitteeOptions: []\n };\n\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.toggleEditContent = this.toggleEditContent.bind(this);\n this.createNewAmendment = this.createNewAmendment.bind(this);\n this.saveText = this.saveText.bind(this);\n this.handleBillDispositionChange = this.handleBillDispositionChange.bind(this);\n this.toggleHighlight = this.toggleHighlight.bind(this);\n this.highlightText = this.highlightText.bind(this);\n this.membersCallback = this.membersCallback.bind(this);\n this.committeesCallback = this.committeesCallback.bind(this);\n this.handleParamChange = this.handleParamChange.bind(this);\n this.handleIsActiveChange = this.handleIsActiveChange.bind(this);\n this.handleIsPublicChange = this.handleIsPublicChange.bind(this);\n this.toggleTooltip = this.toggleTooltip.bind(this);\n this.getData = this.getData.bind(this);\n this.isLdIncluded = this.isLdIncluded.bind(this);\n this.getJsonHeadersRequestString = this.getJsonHeadersRequestString.bind(this);\n this.toggleReprint = this.toggleReprint.bind(this);\n this.downloadWordFile = this.downloadWordFile.bind(this);\n this.togglePatronModal = this.togglePatronModal.bind(this);\n this.updatePatrons = this.updatePatrons.bind(this);\n this.savePatrons = this.savePatrons.bind(this);\n this.onDragEnd = this.onDragEnd.bind(this);\n this.togglePatron = this.togglePatron.bind(this);\n this.handlePatronChange = this.handlePatronChange.bind(this);\n this.handleNewPatronChange = this.handleNewPatronChange.bind(this);\n this.addNewPatron = this.addNewPatron.bind(this);\n this.handleVersionDateChange = this.handleVersionDateChange.bind(this);\n this.applyPassageDates = this.applyPassageDates.bind(this);\n this.triggerDownload = this.triggerDownload.bind(this);\n this.passageCheck = this.passageCheck.bind(this);\n this.setWasEmpty = this.setWasEmpty.bind(this);\n this.setReplaced = this.setReplaced.bind(this);\n this.resetPatrons = this.resetPatrons.bind(this);\n this.navToKeywordHit = this.navToKeywordHit.bind(this);\n\n this.dispositionRef = React.createRef();\n this.sponsorRef = React.createRef();\n this.memberRef = React.createRef();\n this.committeeRef = React.createRef();\n }\n\n setWasEmpty(val, callback) {\n this.setState({ wasEmpty: val }, () => {\n if (callback) {\n callback();\n }\n })\n }\n\n setReplaced(val, callback) {\n this.setState({ replaced: val }, () => {\n if (callback) {\n callback();\n }\n })\n }\n\n handleEditorChange(value) {\n this.setState({\n draftTextCopy: value,\n initialPass: true,\n isDirty: this.state.billText.LegislationVersionID === 8 ? true : this.state.initialPass ? true : false\n });\n }\n\n toggleReprint() {\n let billText = { ...this.state.billText };\n billText.IsReprint = !billText.IsReprint;\n this.setState({ billText })\n }\n\n toggleEditContent(cb) {\n this.setState({ gettingEditData: !this.state.isEditing }, () => {\n let draftTextCopy, jsonPromise;\n let headerError = false;\n const billText = this.state.billText;\n if (!this.state.isEditing && ['Introduced', 'Engrossed', 'Enrolled', 'Chaptered', 'Reenrolled'].includes(billText.LegislationVersion)) {\n\n const jsonHeadersRequestString = this.getJsonHeadersRequestString(billText.LegislationTextID, billText.SessionID, this.state.selectedSession.SessionCode);\n\n jsonPromise = this.props.actions.getJsonHeaders(jsonHeadersRequestString)\n .then(() => {\n if (this.props.bills.jsonHeaders) {\n let headers = getHtml(this.props.bills.jsonHeaders);\n\n let newDraftText;\n if (billText.LegislationVersion !== \"Introduced\") {\n draftTextCopy = headers + billText.DraftText;\n\n //Remove ldtitle from document if the header is present in the header and the header also contains the ldtitle\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", draftTextCopy);\n let header = doc.getElementsByTagName('div');\n\n if (header[0] != undefined) {\n //Store the header somewhere while we find and iterate over paragraphs in the rest of the doc\n let headerContainer = header[0].innerHTML;\n let headerParagraphs = header[0].getElementsByTagName('p');\n\n for (let i = 0; i < headerParagraphs.length; i++) {\n if (['ldtitle', 'ld', 'patronLine', 'patctr'].includes(headerParagraphs[i].classList[0])) {\n //Temporarily remove header \n header[0].innerHTML = \"\";\n\n //We found the ldtitle or patronage in the header, so iterate over the paragraphs to find any duplicate ldtitles or patronages and eliminate them\n let docParagraphs = doc.getElementsByTagName('p');\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (['section', 'enactstm'].includes(docParagraphs[j].classList[0])) {\n break; //reached the actal body of the text, don't remove any more\n } else if (['ldtitle', 'ld', 'patronLine', 'patctr', 'center'].includes(docParagraphs[j].classList[0])) {\n doc.removeChild(docParagraphs[j])\n j--\n }\n }\n }\n }\n //Reattach the header\n header[0].innerHTML = headerContainer;\n\n newDraftText = doc.innerHTML;\n }\n } else {\n //if it's introduced, let's remove the existing headers if there are any before attaching the new headers\n draftTextCopy = billText.DraftText;\n\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", draftTextCopy);\n let content = doc.getElementsByTagName('p');\n\n //the below array defines where the actual draft text (i.e. not header information) begins, so that we know the point up to which we can remove elements (i.e. the point up to which we can assume the elements are headers)\n //they need to be in this priority order since sometimes there can be more than one, and we need to know which one will be the actual beginning of the draft text\n //e.g. hb1 in 2022 has the ldtitle class within the header itself as well as the enactstm class starting off the actual draft text, in which case the enactstm needs to be the point at which we stop removing elements, not the ldtitle element\n const beginningOfTextParagraphClassesInPriorityOrder = ['enactstm', 'ldtitle', 'ld'];\n\n //find the index of the element that marks the beginning of the draft text, and the point up to which we should assume everything is header information and remove all elements\n let beginningOfTextParagraphIndex = -1;\n let loopIdx = 0;\n do {\n beginningOfTextParagraphIndex = [...content].findIndex(p => p.classList && p.classList[0] === beginningOfTextParagraphClassesInPriorityOrder[loopIdx]);\n loopIdx++;\n } while (loopIdx < beginningOfTextParagraphClassesInPriorityOrder.length && beginningOfTextParagraphIndex === -1);\n\n //if we didn't find any start per the logic above, the index will still be -1, and this loop will not run and hence no elements will be removed\n //if we did find a starting index for the actual draft text, loop through the lines up to that point and remove the elements (i.e. header pieces)\n //Added a carveout to prevent removal of sections including \"Whereas\" that sometimes appear above the enactment statement\n let indexTracker = 0;\n for (let i = 0; i < beginningOfTextParagraphIndex; i++) {\n //remove existing header (index 0 below rather than the variable 'i' since we are removing indexes of variable 'content' as we loop) \n if (!content[indexTracker].innerHTML.includes(\"Whereas\") && content[indexTracker].classList[0] === \"section\") {\n doc.removeChild(content[indexTracker]);\n } else {\n indexTracker++;\n }\n }\n\n //Sometimes we end up with stray ldtitles at the top of the text. Remove that.\n if (content[0].className === \"ldtitle\") {\n doc.removeChild(content[0])\n }\n\n newDraftText = doc.innerHTML;\n }\n\n //update draftTextCopy and now attach the new headers for introduced versions\n if (newDraftText != undefined) {\n draftTextCopy = (billText.LegislationVersion === \"Introduced\" ? headers : \"\") + newDraftText\n }\n }\n }).catch(e => {\n console.log(e)\n draftTextCopy = `<p class=\"message-error\">${typeof e === 'object' && !Array.isArray ? JSON.parse(e).Name || \"Unknown Error\" : e}</p>`;\n headerError = true;\n })\n } else {\n draftTextCopy = billText.DraftText\n }\n\n Promise.all([jsonPromise])\n .finally(() => {\n this.setState(state => ({\n headerError,\n gettingEditData: false,\n isEditing: !state.isEditing,\n draftTextCopy\n }), () => {\n if (cb) cb();\n });\n })\n })\n }\n\n getJsonHeadersRequestString(legislationTextId, sessionID, sessionCode) {\n //note we pass in a continuedToSessionCode all the time, even if it's not a continued bill and the sessionID/continuedToSessionCode represent the same session - in this case, it still works as expected so it's fine to pass both in\n let jsonHeadersRequestString = \"?legislationTextID=\" + legislationTextId + \"&sessionID=\" + sessionID + \"&continuedToSessionCode=\" + sessionCode + \"&onlyHeader=true\";\n\n return jsonHeadersRequestString\n }\n\n createNewAmendment() {\n this.setState(state => ({\n billText: {\n ...state.billText,\n VersionDate: new Date(),\n }\n }), () => {\n this.saveText()\n });\n }\n\n saveText(cb) {\n if (!this.validateData()) {\n return;\n }\n this.setState({ isSaving: true });\n let billText = { ...this.state.billText };\n //Try to find the draft title in the text and set it\n let searchForLDTitleContainer = document.createElement('div');\n searchForLDTitleContainer.innerHTML = this.state.draftTextCopy;\n //The first element in the content with this class is the draft title\n let draftLDTitle = searchForLDTitleContainer.querySelector('.ldtitle');\n if (draftLDTitle && draftLDTitle.innerHTML !== '') {\n billText.DraftTitle = draftLDTitle.innerHTML;\n billText.EditTitle = draftLDTitle.innerHTML;\n }\n\n //Remove any tags TinyMCE may have added when pasting from Word (Borrow ldtitle container doc)\n //Also remove any stranded spans with class \"bracket\"\n searchForLDTitleContainer.childNodes.forEach(node => {\n if (node.nodeName !== \"#text\") {\n node.removeAttribute('data-mce-fragment');\n if (node.childNodes.length > 0) {\n node.childNodes.forEach(childNode => {\n if (childNode.nodeName !== \"#text\") {\n childNode.removeAttribute('data-mce-fragment');\n }\n if (childNode.classList && childNode.classList.contains(\"bracket\") && ![\"[\", \"]\"].includes(childNode.innerText.trim())) {\n childNode.classList.remove(\"bracket\")\n }\n if (childNode.childNodes.length > 0) {\n childNode.childNodes.forEach(grandchildNode => {\n if (grandchildNode.nodeName !== \"#text\") {\n grandchildNode.removeAttribute('data-mce-fragment');\n }\n if (grandchildNode.classList && grandchildNode.classList.contains(\"bracket\") && ![\"[\", \"]\"].includes(grandchildNode.innerText.trim())) {\n grandchildNode.classList.remove(\"bracket\")\n }\n if (grandchildNode.childNodes.length > 0) {\n grandchildNode.childNodes.forEach(greatGrandchildNode => {\n if (greatGrandchildNode.nodeName !== \"#text\") {\n greatGrandchildNode.removeAttribute('data-mce-fragment');\n }\n if (greatGrandchildNode.classList && greatGrandchildNode.classList.contains(\"bracket\") && ![\"[\", \"]\"].includes(greatGrandchildNode.innerText.trim())) {\n greatGrandchildNode.classList.remove(\"bracket\")\n }\n })\n }\n })\n }\n\n })\n }\n }\n });\n\n billText.DraftText = searchForLDTitleContainer.innerHTML;\n\n //Clear DocumentCode on amendment create. Setting this is handled in the DB\n if (window.location.pathname.includes('new-amendment')) {\n billText.DocumentCode = null;\n }\n\n if ([\"Chaptered\", \"Gov Recommendation\", \"Veto Explanation\"].includes(billText.LegislationVersion)) {\n delete billText.ChamberCode;\n } else if ([\"Introduced\", \"Reengrossed\", \"Engrossed\", \"Reenrolled\", \"Enrolled\"].includes(billText.LegislationVersion)) {\n billText.ChamberCode = this.props.match.params.billnumber[0].toUpperCase();\n } else if (billText.Sponsor && billText.Sponsor.toLowerCase() === \"member\" && billText.Patrons && billText.Patrons[0]) {\n billText.ChamberCode = this.state.memberOptions.find(x => x.value.MemberID === billText.Patrons[0].MemberID).value.ChamberCode\n } else if (billText.Sponsor && billText.Sponsor.toLowerCase() === \"committee\" && billText.CommitteeID) {\n billText.ChamberCode = this.state.committeeOptions.find(x => x.value.CommitteeID === billText.CommitteeID) ? this.state.committeeOptions.find(x => x.value.CommitteeID === billText.CommitteeID).value.ChamberCode : billText.ChamberCode = this.state.subcommitteeOptions.find(x => x.value.CommitteeID === billText.CommitteeID).value.ChamberCode;\n }\n\n let jsonPromise = Promise.resolve();\n if (JSON.stringify(this.state.patronList) !== JSON.stringify(this.state.originalPatronList)) {\n jsonPromise = this.props.actions.savePatrons({ patrons: this.state.patronList });\n }\n\n delete billText.DraftTextFromJson;\n\n if (this.state.billData) {\n billText.LegislationClassID = this.state.billData.LegislationClassID;\n billText.LegislationClass = this.state.billData.LegislationClass;\n }\n\n jsonPromise.then(() => {\n this.props.actions.saveBillText({ TextsList: [billText] })\n .then(() => {\n if (window.location.pathname.includes('new-amendment')) {\n if (this.state.billText.ChamberCode === \"H\" && this.state.selectedSponsor.value == \"Member\") {\n this.props.actions.saveIhodAmendment('?jvisa=7C936b138d2b6c3766Eb1cD5F84C6lRhG3JwWgvUWW&'\n + 'session=' + this.props.session.selectedSession.SessionCode\n + '&bill_num=' + this.state.billText.LegislationNumber\n + '&mem_key=' + this.state.selectedMember.value.MemberNumber\n + '&file_name=' + this.state.billText.LegislationNumber + '-' + this.state.selectedMember.value.MemberNumber + '.htm'\n + '&ld_num=' + this.props.bills.billTextSave[0].DocumentCode)\n }\n\n if (this.props.bills.billTextSave[0]) {\n billText.LegislationTextID = this.props.bills.billTextSave[0].LegislationTextID;\n billText.LegislationVersionID = this.props.bills.billTextSave[0].LegislationVersionID;\n }\n }\n\n let documentCodeChanged = false;\n if (this.props.bills.billTextSave[0]) {\n //Use document code that was constructed and returned from database\n documentCodeChanged = billText.DocumentCode !== this.props.bills.billTextSave[0].DocumentCode;\n billText.DocumentCode = this.props.bills.billTextSave[0].DocumentCode;\n }\n\n //Create the new pdf version of the bill \n const legFileGenParams = \"?legislationID=\" + billText.LegislationID\n + \"&legislationTextID=\" + billText.LegislationTextID\n + \"&legislationVersionID=\" + billText.LegislationVersionID\n + \"&sessionID=\" + this.state.selectedSession.SessionID;\n this.props.actions.genBillFile(legFileGenParams)\n .then(() => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n this.setState({\n isEditing: false,\n isSaving: false,\n isDirty: false,\n initialPass: 0\n });\n if (window.location.pathname.includes('new-amendment') || (billText.TextDisposition !== \"Removed\" && documentCodeChanged)) {\n const sessionCode = this.props.match.params.sessionCode;\n this.props.history.push(`/bill-details/${sessionCode}/${billText.LegislationNumber}/text/${billText.DocumentCode}`)\n } else if (billText.TextDisposition === \"Removed\") {\n const sessionCode = this.props.match.params.sessionCode;\n this.props.history.push(`/bill-details/${sessionCode}/${billText.LegislationNumber}`);\n return;\n }\n if (cb)\n cb();\n else\n this.getData();\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.error(err)\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false\n });\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.error(err)\n this.props.actions.makeToast([{ message: \"Failed to update patrons\", type: \"failure\" }]);\n this.setState({\n isSaving: false\n });\n })\n }\n\n validateData() {\n let valid = true;\n const billText = this.state.billText;\n let focused = false;\n\n if (!billText.TextDisposition && !billText.TextDispositionID && billText.LegislationVersion !== \"Introduced\") {\n this.setState({ textDispositionError: \"Please select a text disposition.\" });\n console.error(\"No text disposition provided.\");\n this.dispositionRef?.current?.focus();\n focused = true;\n valid = false;\n }\n if ([\"Amendment\", \"Substitute\"].includes(billText.LegislationVersion) && !billText.Sponsor) {\n this.setState({ sponsorError: \"Please select a sponsor.\" });\n console.error(\"No sponsor provided.\");\n if (!focused) { this.sponsorRef?.current?.focus(); focused = true; }\n valid = false;\n }\n if (billText.Sponsor && billText.Sponsor.toLowerCase() === \"member\" && !billText.Patrons) {\n this.setState({ memberError: \"Please select a member.\" });\n console.error(\"No member provided.\");\n if (!focused) { this.memberRef?.current?.focus(); focused = true; }\n valid = false;\n }\n if (billText.Sponsor && billText.Sponsor.toLowerCase() === \"committee\" && !billText.CommitteeID) {\n this.setState({ committeeError: \"Please select a committee.\" });\n console.error(\"No committee provided.\");\n if (!focused) { this.committeeRef?.current?.focus(); focused = true; }\n valid = false;\n }\n if (!this.state.draftTextCopy) {\n this.setState({ draftTextError: \"Please provide draft text.\" });\n console.error(\"No draft text provided.\");\n valid = false;\n }\n\n if (valid) {\n this.setState({\n textDispositionError: \"\",\n sponsorError: \"\",\n memberError: \"\",\n committeeError: \"\",\n draftTextError: \"\"\n })\n }\n\n return valid;\n }\n\n handleBillDispositionChange(val) {\n this.setState(state => ({\n billText: {\n ...state.billText,\n TextDisposition: val ? val.Name : null,\n TextDispositionID: val ? val.TextDispositionID : null\n }\n }));\n }\n\n toggleHighlight() {\n this.setState({\n highlight: !this.state.highlight\n })\n }\n\n highlightText(keywordsFromQueryString) {\n var markInstance = new Mark(document.querySelector(\".mark-context\"));\n if (this.props.location.state && this.props.location.state.selectedKeywords) {\n this.props.location.state.selectedKeywords.forEach(keyword => {\n const asteriskSearch = keyword.endsWith(\"*\");\n const options = {\n separateWordSearch: false, //If phrase searching, only mark instances of the entire phrase together; i.e. 'availability of funds' do not mark every individual instance of 'availability' 'of' and 'funds'\n accuracy: {\n ///\"partially\": When searching for \"lor\" only \"lor\" inside \"lorem\" will be marked\n ///\"complementary\": When searching for \"lor\" the whole word \"lorem\" will be marked\n ///\"exactly\": When searching for \"lor\" only those exact words with a word boundary will be marked. In this example nothing inside \"lorem\".\n value: asteriskSearch ? \"complementary\" : \"exactly\", //When searching for \"of\" only those exact words with a word boundary will be marked. In this example nothing inside \"offered\".\n limiters: [\",\", \".\", \"?\", \"!\", \"-\", \";\", \"\\\"\", \"'\", \"`\", \"%\", \"$\", \"@\", \"*\", \"(\", \")\", \"[\", \"]\", \"/\"] //highlight also the above 'exact' words that are also followed by punctuation marks; without this 'availability of funds.' (ending with period) will not be marked when searching 'availability of funds' (no period)\n }\n };\n const mark = asteriskSearch ? keyword.substring(0, keyword.length - 1) : keyword;\n markInstance.mark(mark, options);\n if (document.getElementsByTagName(\"mark\").length) {\n this.setState({ showMarkHelp: true, showNextMarkHelp: \"Scroll to First\" });\n }\n });\n }\n if (keywordsFromQueryString) {\n const selectedKeywords = keywordsFromQueryString.split(\" \");\n selectedKeywords.forEach(keyword => markInstance.mark(keyword))\n // Remove keywords from url\n this.props.history.push(this.props.location.pathname);\n }\n };\n\n navToKeywordHit(dir) {\n const currentIdx = this.state.markHelpIndex ?? -1;\n const elements = [...document.getElementsByTagName(\"mark\")];\n const numElements = elements.length;\n let scrollElement;\n if (numElements > 0) {\n if (dir === NEXT && currentIdx + 1 <= numElements) {\n scrollElement = elements[currentIdx + 1];\n } else if (dir === PREVIOUS && currentIdx >= 1) {\n scrollElement = elements[currentIdx - 1];\n }\n\n if (scrollElement) {\n scrollElement.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n const newIndex = dir === NEXT ? currentIdx + 1 : currentIdx - 1;\n this.setState({ markHelpIndex: newIndex, showNextMarkHelp: newIndex !== numElements - 1 ? \"Next\" : false });\n }\n }\n }\n\n membersCallback(memberList) {\n let members = [];\n let houseMembers = [];\n let senateMembers = [];\n\n memberList.map((member) => {\n members.push({ text: member.MemberDisplayName, value: member })\n\n if (member.ChamberCode === \"H\") {\n houseMembers.push({ text: member.MemberDisplayName, value: member })\n } else {\n senateMembers.push({ text: member.MemberDisplayName, value: member })\n }\n })\n\n this.setState({\n memberOptions: members,\n houseMemberOptions: houseMembers,\n senateMemberOptions: senateMembers,\n selectedMember: this.state.billText.Patrons && this.state.billText.Patrons.length > 0 ? members.find(x => x.value.MemberID === this.state.billText.Patrons[0].MemberID) : undefined\n })\n }\n\n committeesCallback(committeeList) {\n let committeeOptions = [];\n let subcommitteeOptions = [];\n\n committeeList.map((committee, i) => {\n if (committee.ParentCommitteeID) {\n subcommitteeOptions.push({ text: committee.Name + \" (\" + committee.ChamberCode + \")\", value: committee })\n } else {\n committeeOptions.push({ text: committee.Name + \" (\" + committee.ChamberCode + \")\", value: committee })\n }\n })\n\n this.setState({\n committeeOptions: committeeOptions,\n subcommitteeOptions: subcommitteeOptions,\n selectedCommittee: this.state.billText.CommitteeID ? committeeOptions.find(x => x.value.CommitteeID === this.state.billText.CommitteeID) : undefined\n })\n }\n\n handleParamChange(value, state, init) {\n //Always reset description if a description param is changed\n let billText = { ...this.state.billText };\n billText.Description = null;\n\n //If the sponsor is changed reset the selected member and committee in case those have been set previously\n if (state === \"selectedSponsor\") {\n billText.Sponsor = value.value;\n delete billText.SponsorTypeID;\n delete billText.Patrons;\n delete billText.CommitteeID;\n delete billText.CommitteeName;\n\n this.setState(state => ({\n selectedMember: undefined,\n selectedCommittee: undefined\n }));\n }\n\n if (state === \"selectedMember\") {\n billText.Patrons = [value.value];\n }\n\n if (state === \"selectedCommittee\") {\n billText.CommitteeName = value.value.Name\n billText.CommitteeID = value.value.CommitteeID\n }\n\n this.setState({\n [state]: value,\n billText: billText,\n isDirty: init ? false : true\n })\n }\n\n handleIsActiveChange() {\n let billText = { ...this.state.billText };\n billText.IsActive = !billText.IsActive;\n this.setState({ billText });\n }\n\n handleIsPublicChange() {\n let billText = { ...this.state.billText };\n billText.IsPublic = !billText.IsPublic;\n this.setState({ billText });\n }\n\n toggleTooltip() {\n this.setState({\n showTooltip: !this.state.showTooltip\n })\n }\n\n isLdIncluded(draftText, LDNumber) {\n //Discovers if the LD number is present in the file's DraftTextJSON or the text's DraftText, and sets a state value to hide displaying a duplicate LD Number if true\n if (typeof draftText === \"string\") {\n const ldRegex = new RegExp(`<p class=['\"]?(ld|ldtitle)['\"]?>${LDNumber}<\\/p>`);\n if (ldRegex.test(draftText)) {\n this.setState({\n hideLDNumber: true\n })\n }\n } else {\n for (let i = 0; i < draftText.Content.length; i++) {\n if (draftText.Content[i].Content && draftText.Content[i].Content.includes(LDNumber))\n this.setState({\n hideLDNumber: true\n })\n }\n }\n }\n\n getData() {\n this.setState({\n isLoaded: false\n });\n const documentNumber = this.props.match.params.documentcode;\n const billNumber = this.props.match.params.billnumber;\n const sessionCode = parseInt(this.props.match.params.sessionCode, 10);\n if (sessionCode > 0 && documentNumber && billNumber) {\n let partner = false;\n //Only use the partner endpoint if the user looking at the bill text is authorized to edit it\n if (this.props.login.userClaims.resources.find(resource => resource === VERSION_AUTHOR)) {\n partner = true;\n this.props.actions.getLegislationDispositions()\n .catch(err => {\n if (err === 'Aborted') {\n return\n }\n });\n }\n this.setState({\n sponsorOptions: this.props.login.userClaims.roles.find(x => x === \"Admin\") && !window.location.pathname.includes('new-amendment') ? [{ value: \"Committee\", label: \"Committee\" }, { value: \"Member\", label: \"Member\" }, { value: \"Conference\", label: \"Conference\" }, { value: \"Governor\", label: \"Governor\" }] : [{ value: \"Committee\", label: \"Committee\" }, { value: \"Member\", label: \"Member\" }]\n })\n //Get the session information for the header using the session in the url\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n this.setState({ selectedSession: this.props.session.selectedSession })\n const params = {\n SessionCode: sessionCode,\n LegislationNumbers: [{ LegislationNumber: billNumber }],\n };\n if (window.location.pathname.includes('new-amendment')) {\n // This is a new amendment\n // Get the bill information for creation of a new amendment\n this.props.actions.getBillList(params).then(() => {\n if (this.props.bills.billList[0]) {\n this.setState({\n isLoaded: true,\n isEditing: true,\n billText: {\n LegislationVersionID: 8,\n LegislationVersion: \"Amendment\",\n LegislationID: this.props.bills.billList[0].LegislationID,\n LegislationNumber: this.props.bills.billList[0].LegislationNumber,\n ChamberCode: this.props.bills.billList[0].ChamberCode,\n Description: \"Amendment\",\n DLSPrepared: false,\n SessionCode: this.props.session.selectedSession.SessionCode,\n SessionYear: this.props.session.selectedSession.SessionYear,\n IsActive: true,\n IsPublic: false,\n TextDisposition: this.props.bills.legislationDispositions[this.props.bills.legislationDispositions.findIndex(dispo => dispo.Name === \"Offered\")].Name,\n TextDispositionID: this.props.bills.legislationDispositions[this.props.bills.legislationDispositions.findIndex(dispo => dispo.Name === \"Offered\")].TextDispositionID\n },\n });\n\n //default to member as sponsor\n this.handleParamChange(this.state.sponsorOptions.find(x => x.value === \"Member\"), \"selectedSponsor\", true);\n } else {\n throw \"Bill data not found\"\n }\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n this.setState({\n message: err.toString(),\n isLoaded: true\n })\n });\n } else {\n this.props.actions.getBillText(`?isPublic=${!partner}&sessionCode=${sessionCode}&documentNumber=${documentNumber}`, partner)\n .then(() => {\n //Make sure the text is actually there\n if (this.props.bills.billText.length !== 1 || !this.props.bills.billText[0].DraftText) {\n throw (\"Legislation text not found\")\n }\n let billText = this.props.bills.billText[0];\n //Get the session information for the header dates in tinymce using the text's session\n this.props.actions.getSessionById(billText.SessionID, false).then(() => {\n this.setState({ versionSession: this.props.session.selectedSession })\n const params = {\n SessionCode: sessionCode,\n LegislationNumbers: [{ LegislationNumber: billNumber }],\n };\n\n if (billText && [\"Introduced\", \"Enrolled\", \"Chaptered\", \"Substitute\"].includes(billText.LegislationVersion)) {\n if (this.props.login.userClaims.resources.includes(\"LegislationText\")) {\n this.props.actions.getBillManagementList(\"?LegislationID=\" + billText.LegislationID + \"&LegislationVersionID=\" + billText.LegislationVersionID + \"&SessionID=\" + billText.SessionID + \"&IsComplete=true\").then(() => {\n if (this.props.bills.billManagementList[0]) {\n this.setState({ billData: this.props.bills.billManagementList[0] }, () => {\n this.getPatronTypes(this.state.billData.ChamberCode);\n this.getMemberList(this.state.billData.SessionID);\n this.getPatrons(this.state.billData.LegislationID, this.state.billData.ChamberCode);\n })\n } else {\n throw \"Bill data not found\"\n }\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n this.setState({\n message: err.toString(),\n isLoaded: true\n })\n });\n } else {\n this.props.actions.getBillList(params).then(() => {\n if (this.props.bills.billList[0]) {\n this.setState({ billData: this.props.bills.billList[0] }, () => {\n this.getPatronTypes(this.state.billData.ChamberCode);\n this.getMemberList(this.state.billData.SessionID);\n this.getPatrons(this.state.billData.LegislationID, this.state.billData.ChamberCode);\n })\n } else {\n throw \"Bill data not found\"\n }\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n this.setState({\n message: err.toString(),\n isLoaded: true\n })\n });\n }\n }\n billText.originalTextDisposition = billText.TextDisposition;\n // Try to get the json file. This contains some extra info like prefiled date\n let jsonPromise;\n if (billText.JSONFile && billText.JSONFile.length > 0) {\n jsonPromise = this.props.actions.getFile(billText.JSONFile[0].FileURL)\n .then(() => {\n const file = JSON.parse(this.props.nav.file);\n billText.OfferedDate = file.OfferedDate;\n billText.PrefileDate = file.PrefileDate;\n billText.ReferredCommittee = file.ReferredCommittee;\n billText.Chamber = file.Chamber.toUpperCase();\n billText.LegislationType = file.LegislationType.toUpperCase();\n if (file.DraftTextJSON) {\n billText.DraftTextFromJson = getJsx(file.DraftTextJSON);\n this.isLdIncluded(file.DraftTextJSON, billText.LDNumber);\n } else {\n this.isLdIncluded(billText.DraftText, billText.LDNumber)\n }\n billText.jsonFileFound = true;\n })\n } else {\n this.isLdIncluded(billText.DraftText, billText.LDNumber)\n }\n Promise.all([jsonPromise])\n .finally(() => {\n this.setState({\n isLoaded: true,\n billText: billText,\n selectedSponsor: billText.Sponsor ? this.state.sponsorOptions.find(x => x.value === billText.Sponsor) : \"\"\n }, () => {\n const parsed = queryString.parse(this.props.location.search)\n if (this.props.location.state || parsed.keywords) {\n this.highlightText(parsed.keywords);\n }\n if (billText.LegislationVersion === \"Introduced\" && this.props.location.state && this.props.location.state.patronUpdate && this.props.login.userClaims.claims.find(claim => claim.RoleName === \"Admin\" || (claim.Resource === PATRON_AUTHOR && claim.Scope === (billNumber[0]?.toUpperCase() === \"H\" ? \"House\" : \"Senate\")))) {\n this.toggleEditContent(this.togglePatronModal)\n }\n\n })\n })\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n this.setState({\n message: err.toString(),\n isLoaded: true\n })\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n message: err.toString(),\n isLoaded: true\n })\n });\n }\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n this.setState({\n message: err.toString(),\n isLoaded: true\n })\n });\n } else {\n this.setState({\n message: \"Failed to get session or version\"\n });\n }\n }\n\n applyPassageDates(housePassage, senatePassage) {\n let passageDates = \"\";\n //Add the passage dates if they exist in the data but aren't in the DraftText yet - add both chambers for joint resolutions, or just the originating chamber for normal resolutions\n if (this.state.billText.ChamberCode === \"H\") {\n passageDates = this.state.billData.HousePassageDate && this.state.billData.HousePassageDate != \"\" && !housePassage ? passageDates + \"<p class='house-passage' style='text-align: center; margin: 0'>Agreed to by the House of Delegates, \" + moment(this.state.billData.HousePassageDate).format(\"LL\") + \"</p>\" : passageDates;\n if (this.state.billData.LegislationTypeCode === \"J\") {\n passageDates = this.state.billData.SenatePassageDate && this.state.billData.SenatePassageDate != \"\" && !senatePassage ? passageDates + \"<p class='senate-passage' style='text-align: center; margin: 0'>Agreed to by the Senate, \" + moment(this.state.billData.SenatePassageDate).format(\"LL\") + \"</p><p></p>\" : passageDates;\n } else {\n passageDates = passageDates + \"<p></p>\";\n }\n } else {\n passageDates = this.state.billData.SenatePassageDate && this.state.billData.SenatePassageDate != \"\" && !senatePassage ? passageDates + \"<p class='senate-passage' style='text-align: center; margin: 0'>Agreed to by the Senate, \" + moment(this.state.billData.SenatePassageDate).format(\"LL\") + \"</p>\" : passageDates;\n if (this.state.billData.LegislationTypeCode === \"J\") {\n passageDates = this.state.billData.HousePassageDate && this.state.billData.HousePassageDate != \"\" && !housePassage ? passageDates + \"<p class='house-passage' style='text-align: center; margin: 0'>Agreed to by the House of Delegates, \" + moment(this.state.billData.HousePassageDate).format(\"LL\") + \"</p><p></p>\" : passageDates;\n } else {\n passageDates = passageDates + \"<p></p>\";\n }\n }\n\n return passageDates;\n }\n\n triggerDownload(filename, htmlDoc) {\n let downloadLink = document.createElement('a');\n downloadLink.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + encodeURIComponent(`<html>` + htmlDoc.innerHTML + `</html>`));\n downloadLink.setAttribute('download', filename);\n\n downloadLink.style.display = 'none';\n document.body.appendChild(downloadLink);\n downloadLink.click();\n\n document.body.removeChild(downloadLink);\n }\n\n passageCheck(docParagraphs) {\n let housePassage = false;\n let senatePassage = false;\n\n for (let i = 0; i < docParagraphs.length; i++) {\n if (docParagraphs[i].innerText.includes(\"Agreed to by the House\")) {\n housePassage = true;\n }\n\n if (docParagraphs[i].innerText.includes(\"Agreed to by the Senate\")) {\n senatePassage = true;\n }\n }\n\n return { housePassage: housePassage, senatePassage: senatePassage };\n }\n\n downloadWordFile() {\n const filename = this.state.billText.DocumentCode + \".doc\";\n let htmlDoc = document.createElement('div');\n let passageDates = '';\n\n //Substitute declarations \n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", this.state.billText.DraftText);\n let docParagraphs = doc.getElementsByTagName('p');\n let prevClass = \"\";\n\n if (this.state.billText.LegislationVersion !== \"Substitute\") {\n let params = '?legislationTextID=' + this.state.billText.LegislationTextID +\n '&sessionID=' + this.state.billText.SessionID +\n '&LegislationVersionID=' + this.state.billText.LegislationVersionID +\n '&onlyHeader=' + false +\n \"&isPresentationCopy=\" + true;\n if ([\"Introduced\"].includes(this.state.billText.LegislationVersion)) {\n params += '&overrideLegislationVersion=Enrolled';\n }\n this.props.actions.getHtmlFilePreview(params)\n .then(() => {\n const html = `<html>\n <head><meta charset=\"UTF-8\"></head>\n <body>${this.props.bills.htmlFilePreview}</body>\n </html>`;\n\n htmlDoc.insertAdjacentHTML(\"afterbegin\", html);\n let passage = this.passageCheck(htmlDoc.getElementsByTagName(\"p\"))\n passageDates = this.applyPassageDates(passage.housePassage, passage.senatePassage);\n\n let ldtitle = htmlDoc.querySelector(\".ldtitle\");\n if (ldtitle) {\n ldtitle.insertAdjacentHTML(\"afterend\", passageDates);\n }\n\n this.triggerDownload(filename, htmlDoc);\n })\n } else if (this.state.billData.LegislationTypeCode === \"B\") {\n let passage = this.passageCheck(docParagraphs);\n passageDates = this.applyPassageDates(passage.housePassage, passage.senatePassage);\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (j == 2) {\n let insertText = this.props.session.sessionList.find(x => x.SessionID === this.state.billData.SessionID).SessionType === \"Regular\"\n ? this.props.session.sessionList.find(x => x.SessionID === this.state.billData.SessionID).SessionYear\n + \" \"\n + this.props.session.sessionList.find(x => x.SessionID === this.state.billData.SessionID).SessionType\n + \" Session\"\n : this.props.session.sessionList.find(x => x.SessionID === this.state.billData.SessionID).SessionYear + \" \" + this.props.session.sessionList.find(x => x.SessionID === this.state.billData.SessionID).DisplayName\n htmlDoc.insertAdjacentHTML(\"beforeend\", \"<p style='\" + inlineStyles.find(x => x.class == \"center\").value + \"'>\" + insertText + \"</p>\");\n htmlDoc.insertAdjacentHTML(\"beforeend\", \"<p style='\" + inlineStyles.find(x => x.class == \"center\").value + \"'>Virginia Acts of Assembly - Chapter</p>\");\n }\n if (!['pro', 'patronLine', 'patctr', 'ld', 'textctr', \"center\"].includes(docParagraphs[j].className)) {\n //If we're after the session, billno, etc. and the next paragraph is the enacting statement then add ldtitle and passage dates then proceed\n if (prevClass === \"center\" && docParagraphs[j].className === \"enactstm\") {\n htmlDoc.insertAdjacentHTML(\"beforeend\", \"<p style='\" + inlineStyles.find(x => x.class == \"ldtitle\").value + \"'>\" + this.state.billText.DraftTitle + \"</p>\");\n htmlDoc.insertAdjacentHTML(\"beforeend\", passageDates);\n }\n\n //Insert every remaining paragraph unless it's a center following a pro because that indicates a line wrap of the pro containing the introduced date\n if (!(docParagraphs[j].className === \"center\" && docParagraphs[j - 1] && docParagraphs[j - 1].className === \"pro\") && !docParagraphs[j].innerText.includes(\"SUBSTITUTE\")) {\n docParagraphs[j].style = inlineStyles.find(x => x.class === docParagraphs[j].className) ? inlineStyles.find(x => x.class === docParagraphs[j].className).value : \"\";\n htmlDoc.insertAdjacentHTML(\"beforeend\", docParagraphs[j].outerHTML);\n }\n\n prevClass = docParagraphs[j].className;\n }\n }\n\n let ldtitle = htmlDoc.querySelector(\".ldtitle\");\n if (ldtitle) {\n ldtitle.insertAdjacentHTML(\"afterend\", passageDates);\n }\n this.triggerDownload(filename, htmlDoc);\n } else {\n let passage = this.passageCheck(docParagraphs)\n passageDates = this.applyPassageDates(passage.housePassage, passage.senatePassage);\n\n for (let j = 0; j < docParagraphs.length; j++) {\n if (!['pro', 'patronLine', 'patctr', 'textbl', 'ld', 'textctr'].includes(docParagraphs[j].className)) {\n //If we're after the session, billno, etc. and the next paragraph is the enacting statement then add ldtitle and passage dates then proceed\n if (prevClass === \"center\" && docParagraphs[j].className === \"enactstm\") {\n htmlDoc.insertAdjacentHTML(\"beforeend\", \"<p style='\" + inlineStyles.find(x => x.class == \"ldtitle\").value + \"'>\" + this.state.billText.DraftTitle + \"</p>\");\n htmlDoc.insertAdjacentHTML(\"beforeend\", passageDates);\n }\n\n //Insert every remaining paragraph unless it's a center following a pro because that indicates a line wrap of the pro containing the introduced date\n if (!(docParagraphs[j].className === \"center\" && docParagraphs[j - 1] && docParagraphs[j - 1].className === \"pro\") && !docParagraphs[j].innerText.includes(\"SUBSTITUTE\")) {\n docParagraphs[j].style = inlineStyles.find(x => x.class === docParagraphs[j].className) ? inlineStyles.find(x => x.class === docParagraphs[j].className).value : \"\";\n htmlDoc.insertAdjacentHTML(\"beforeend\", docParagraphs[j].outerHTML);\n }\n\n prevClass = docParagraphs[j].className;\n }\n }\n\n let ldtitle = htmlDoc.querySelector(\".ldtitle\");\n if (ldtitle) {\n ldtitle.insertAdjacentHTML(\"afterend\", passageDates);\n }\n this.triggerDownload(filename, htmlDoc);\n }\n }\n\n // RETRIEVE PATRON TYPES\n getPatronTypes(chamberCode) {\n this.props.actions.getPatronRoles()\n .then(() => {\n let patronTypes = [...this.props.patrons.patronRoles];\n patronTypes = patronTypes.filter(pt => ['Chief Patron', 'Chief Co-Patron', 'Co-Patron'].includes(pt.Name) || (chamberCode === 'S' && pt.Name === 'Incorporated Chief Co-Patron'))\n patronTypes.sort((a, b) => a.PatronTypeID - b.PatronTypeID);\n this.setState({\n patronTypes\n }, () => {\n if (this.state.patronTypes.find(pt => pt.Name === \"Co-Patron\") && (!this.state.newPatron?.length || !this.state.newPatron[this.state.newPatron.length - 1].Name)) {\n this.handleNewPatronChange('PatronType', this.state.patronTypes.find(pt => pt.Name === \"Co-Patron\"));\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n }\n\n // RETRIEVE PATRONS FOR A BILL\n getPatrons(billID, chamberCode) {\n this.props.actions.getPatronList(billID).then(() => {\n let senatePatronsList = this.props.patrons.senatePatronsList;\n let housePatronsList = this.props.patrons.housePatronsList;\n let chiefPatronsList = this.props.patrons.chiefPatronsList;\n let patronList = this.props.patrons.patronList;\n let originalPatronList = this.props.patrons.patronList;\n if (chamberCode === 'H' && chiefPatronsList && chiefPatronsList.length > 1) {\n for (let i = 1; i < chiefPatronsList.length; i++) {\n if (chiefPatronsList[i].ChamberCode === 'S') {\n senatePatronsList.unshift(chiefPatronsList[i]);\n } else {\n housePatronsList.unshift(chiefPatronsList[i]);\n }\n chiefPatronsList.splice(i, 1);\n i--;\n }\n }\n\n patronList.sort((a, b) =>\n Number(Boolean(a.RemoveDate)) - Number(Boolean(b.RemoveDate))\n || (a.PatronTypeID === 1 && b.PatronTypeID === 2\n ? -1\n : a.PatronTypeID === 1 && b.PatronTypeID === 3\n ? -1\n : a.PatronTypeID === 1 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 2 && b.PatronTypeID === 1\n ? 1\n : a.PatronTypeID === 2 && b.PatronTypeID === 3\n ? 1\n : a.PatronTypeID === 2 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 3 && b.PatronTypeID === 1\n ? 1\n : a.PatronTypeID === 3 && b.PatronTypeID === 2\n ? -1\n : a.PatronTypeID === 3 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 4 && b.PatronTypeID !== 4\n ? 1\n : 0\n ) //https://i.imgur.com/rwYykLz.png\n || a.PatronDisplayName.localeCompare(b.PatronDisplayName)\n || a.Sequence - b.Sequence\n )\n\n housePatronsList.sort((a, b) => Number(Boolean(a.RemoveDate)) - Number(Boolean(b.RemoveDate)) || a.PatronTypeID - b.PatronTypeID || a.Sequence - b.Sequence || a.PatronDisplayName.localeCompare(b.PatronDisplayName));\n senatePatronsList.sort((a, b) => Number(Boolean(a.RemoveDate)) - Number(Boolean(b.RemoveDate)) || a.PatronTypeID - b.PatronTypeID || a.Sequence - b.Sequence || a.PatronDisplayName.localeCompare(b.PatronDisplayName));\n\n this.setState({\n senatePatronsList,\n housePatronsList,\n chiefPatronsList,\n patronList,\n originalPatronList,\n patronIsLoaded: true\n })\n })\n }\n\n // RETRIEVE MEMBER LIST FOR THE BILL'S SESSION\n getMemberList(sessionID) {\n let params = 'isPublic=false&sessionID=' + sessionID;\n this.props.actions.getMemberList(params)\n .then(() => {\n let memberList = [...this.props.members.memberList];\n memberList.forEach(patron => {\n patron.label = patron.PatronDisplayName + ' ' + '(' + patron.ChamberCode + ')';\n patron.value = patron.MemberID;\n });\n memberList.sort((a, b) => a.ChamberCode !== b.ChamberCode && a.ChamberCode === this.state.billData.ChamberCode ? -1 : 0)\n this.setState({\n memberList\n });\n });\n }\n\n togglePatronModal() {\n this.setState({\n showPatronModal: !this.state.showPatronModal\n }, () => {\n if (this.state.showPatronModal) {\n //set the patrons prior to edit (different than originalPatronList in the event that they update multiple times) in order to reset in case they cancel\n this.setState({ patronListBeforeEdit: this.state.patronList })\n }\n })\n }\n\n updatePatrons() {\n this.setState({ savingPatrons: true }, () => {\n //Make call to save the patrons -- even if this is the same list as original, because they may have changed it and now are reverting\n this.savePatrons(() => {\n this.saveText(() => {\n this.setState({ savingPatrons: false }, () => {\n this.props.history.push({\n pathname: `/bill-details/${this.state.billText.SessionCode}/${this.state.billText.LegislationNumber}`,\n state: { expandPatrons: true }\n })\n })\n });\n });\n })\n }\n\n savePatrons(cb) {\n let draftTextCopy = this.state.draftTextCopy;\n let doc = document.createElement('div');\n doc.insertAdjacentHTML(\"afterbegin\", draftTextCopy);\n let currentPatronLineElement = doc.querySelector('.patctr, .patalt, .patronLine, .billpatron');\n if (currentPatronLineElement) {\n const currChamber = this.state.billData.ChamberCode;\n let patronInfo = \"\";\n let patronsSameChamber = true;\n let multiplePatrons = false;\n const patrons = [...this.state.patronList].filter(p => !p.RemoveDate);\n patrons.forEach((p) => {\n if (patronsSameChamber && p.ChamberCode != currChamber) {\n patronsSameChamber = false;\n }\n });\n let patronList = null;\n let i = 0;\n if (patronsSameChamber) {\n i = 0;\n patronList = patrons.sort((a, b) => a.PatronTypeID - b.PatronTypeID || a.Sequence - b.Sequence || a.PatronDisplayName.localeCompare(b.PatronDisplayName))\n patronList.forEach(patron => {\n //check and see if this patron is on the other chamber\n if (patronsSameChamber && patron.ChamberCode != currChamber) {\n patronsSameChamber = false;\n }\n if (i != 0 && i == patronList.length - 1) {\n patronInfo += \" and \";\n multiplePatrons = true;\n }\n else if (i > 0) {\n patronInfo += \", \";\n multiplePatrons = true;\n }\n i++;\n patronInfo += PatronDisplayInfo(patron);\n })\n }\n else {\n //current chamber patron info\n i = 0;\n patronList = patrons.filter(p => p.ChamberCode === currChamber).sort((a, b) => a.PatronTypeID - b.PatronTypeID || a.Sequence - b.Sequence || a.PatronDisplayName.localeCompare(b.PatronDisplayName))\n patronList.forEach(patron => {\n if (i != 0 && i == patronList.length - 1) {\n patronInfo += \" and \";\n multiplePatrons = true;\n }\n else if (i > 0) {\n patronInfo += \", \";\n multiplePatrons = true;\n }\n i++;\n patronInfo += PatronDisplayInfo(patron);\n })\n patronInfo += \"; \";\n if (currChamber == \"S\") {\n patronInfo += \"Delegate\";\n }\n else {\n patronInfo += \"Senator\";\n }\n //other chamber patron info\n i = 0;\n patronList = patrons.filter(p => p.ChamberCode !== currChamber).sort((a, b) => a.PatronTypeID - b.PatronTypeID || a.Sequence - b.Sequence || a.PatronDisplayName.localeCompare(b.PatronDisplayName))\n if (patronList.length > 1) {\n patronInfo += \"s: \"; //multiple from the other chamber; append \"s\"\n } else {\n patronInfo += \": \"; //just one from the other chamber; don't append \"s\"\n }\n patronList.forEach(patron => {\n if (i !== 0 && i === patronList.length - 1) {\n patronInfo += \" and \";\n multiplePatrons = true;\n }\n else if (i > 0) {\n patronInfo += \", \";\n multiplePatrons = true;\n }\n i++;\n patronInfo += PatronDisplayInfo(patron);\n })\n }\n const patronagePrefix = multiplePatrons ? \"Patrons- \" : \"Patron- \";\n const newPatronLine = patronagePrefix + patronInfo;\n currentPatronLineElement.textContent = newPatronLine;\n this.setState({ draftTextCopy: doc.innerHTML }, () => {\n if (cb) cb();\n })\n } else {\n //There's no patron line in the introduced text, so we couldn't update it. But the patrons themselves will still be resequenced\n this.props.actions.makeToast([{ message: \"Could not find patron line to update within draft text\", type: \"failure\", long: true }]);\n }\n }\n\n onDragEnd(result) {\n if (!result.destination) {\n return;\n }\n\n let patronList = JSON.parse(JSON.stringify(this.state.patronList));\n if (patronList[result.source.index].PatronTypeID !== patronList[result.destination.index].PatronTypeID) {\n this.props.actions.makeToast([{ message: \"You may only reorder patrons of the same patron type\", type: \"warning\", long: true }]);\n return;\n }\n if (patronList.findIndex(a => a.RemoveDate) > -1 && result.destination.index >= patronList.findIndex(a => a.RemoveDate)) {\n alert(\"You cannot set active patrons after removed patrons.\");\n return;\n }\n let [removed] = patronList.splice(result.source.index, 1);\n\n patronList.splice(result.destination.index, 0, removed);\n\n patronList.sort((a, b) =>\n Number(Boolean(a.RemoveDate)) - Number(Boolean(b.RemoveDate))\n || (a.PatronTypeID === 1 && b.PatronTypeID === 2\n ? -1\n : a.PatronTypeID === 1 && b.PatronTypeID === 3\n ? -1\n : a.PatronTypeID === 1 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 2 && b.PatronTypeID === 1\n ? 1\n : a.PatronTypeID === 2 && b.PatronTypeID === 3\n ? 1\n : a.PatronTypeID === 2 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 3 && b.PatronTypeID === 1\n ? 1\n : a.PatronTypeID === 3 && b.PatronTypeID === 2\n ? -1\n : a.PatronTypeID === 3 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 4 && b.PatronTypeID !== 4\n ? 1\n : 0\n ) //https://i.imgur.com/rwYykLz.png\n || a.PatronDisplayName.localeCompare(b.PatronDisplayName)\n || a.Sequence - b.Sequence\n )\n\n patronList.forEach((x, index) => {\n x.Sequence = index + 1\n });\n\n this.setState({\n patronList\n })\n }\n\n togglePatron(patron) {\n let patronList = JSON.parse(JSON.stringify(this.state.patronList));\n let associatedPatron = patronList.find(p => p.MemberID === patron.MemberID);\n if (associatedPatron) {\n if (associatedPatron.RemoveDate) {\n const sequence = this.calculatePatronSequence(associatedPatron);\n for (let i = 0; i < patronList.length; i++) {\n const p = patronList[i];\n if (p.PatronDisplayName === associatedPatron.PatronDisplayName) {\n patronList.splice(i, 1);\n i--;\n continue;\n }\n if (!p.RemoveDate && p.Sequence >= sequence) {\n p.Sequence = i + 2;\n } else if (!p.RemoveDate && p.Sequence < sequence) {\n p.Sequence = i + 1;\n } else {\n continue;\n }\n };\n associatedPatron.Sequence = sequence;\n patronList.push(associatedPatron);\n associatedPatron.RemoveDate = null;\n } else {\n associatedPatron.RemoveDate = moment().format(\"L\");\n associatedPatron.ByRequest = false;\n associatedPatron.IsIntroducing = false;\n patronList.forEach(p => {\n if (!p.RemoveDate && p.Sequence > associatedPatron.Sequence) {\n p.Sequence--;\n }\n });\n associatedPatron.Sequence = null;\n }\n }\n patronList.sort((a, b) => Number(Boolean(a.RemoveDate)) - Number(Boolean(b.RemoveDate)) || a.PatronTypeID - b.PatronTypeID || a.Sequence - b.Sequence || a.PatronDisplayName.localeCompare(b.PatronDisplayName))\n\n if (!patronList.find(x => !x.RemoveDate && x.PatronTypeID === 1)) {\n this.props.actions.makeToast([{ message: \"There must be a Chief Patron.\", type: \"failure\" }])\n return;\n }\n\n this.setState({ patronList });\n }\n\n handlePatronChange(patron, state, val) {\n let patronList = JSON.parse(JSON.stringify(this.state.patronList));\n let associatedPatron = patronList.find(p => p.MemberID === patron.MemberID);\n if (associatedPatron) {\n if (state === 'PatronType') {\n associatedPatron.PatronTypeID = val ? val.PatronTypeID : null;\n associatedPatron.DisplayName = val ? val.DisplayName : null;\n associatedPatron.Name = val ? val.Name : null;\n } else if (state === 'IsIntroducing' || state === 'ByRequest') {\n associatedPatron[state] = !associatedPatron[state];\n } else {\n associatedPatron[state] = val;\n }\n }\n\n if (!patronList.find(x => !x.RemoveDate && x.PatronTypeID === 1)) {\n this.props.actions.makeToast([{ message: \"There must be a Chief Patron.\", type: \"failure\" }])\n return;\n }\n\n if (associatedPatron) {\n const sequence = this.calculatePatronSequence(associatedPatron);\n for (let i = 0; i < patronList.length; i++) {\n const p = patronList[i];\n if (p.PatronDisplayName === associatedPatron.PatronDisplayName) {\n patronList.splice(i, 1);\n i--;\n continue;\n }\n if (!p.RemoveDate && (p.Sequence > sequence || (sequence < associatedPatron.Sequence && p.Sequence === sequence))) {\n p.Sequence = i + 2;\n } else if (!p.RemoveDate && (p.Sequence < sequence || (sequence > associatedPatron.Sequence && p.Sequence === sequence))) {\n p.Sequence = i + 1;\n } else {\n continue;\n }\n };\n associatedPatron.Sequence = sequence;\n patronList.push(associatedPatron);\n }\n\n patronList.sort((a, b) => Number(Boolean(a.RemoveDate)) - Number(Boolean(b.RemoveDate)) || a.PatronTypeID - b.PatronTypeID || a.Sequence - b.Sequence || a.PatronDisplayName.localeCompare(b.PatronDisplayName))\n\n this.setState({ patronList });\n }\n\n handleNewPatronChange(state, val, behavior) {\n let newPatron = [...this.state.newPatron];\n if (state === 'Patron') {\n if (behavior && behavior.action) {\n switch (behavior.action) {\n case 'select-option':\n let addedPatron = behavior.option;\n if (addedPatron.ChamberCode === 'H' && addedPatron.Name === \"Incorporated Chief Co-Patron\") {\n addedPatron.Name = null;\n addedPatron.DisplayName = null;\n addedPatron.PatronTypeID = null;\n }\n newPatron.push({\n ByRequest: false,\n IsIntroducing: false,\n PatronDisplayName: addedPatron.PatronDisplayName,\n MemberID: addedPatron.MemberID,\n ChamberCode: addedPatron.ChamberCode,\n LegislationID: this.state.billData.LegislationID,\n DisplayName: newPatron[0].DisplayName,\n Name: newPatron[0].Name,\n PatronTypeID: newPatron[0].PatronTypeID\n })\n newPatron = newPatron.filter(p => p.MemberID);\n break;\n case 'remove-value':\n const removedPatron = behavior.removedValue;\n const index = newPatron.findIndex(p => p.MemberID === removedPatron.MemberID);\n newPatron.splice(index, 1);\n if (!newPatron.length) {\n this.resetPatrons(removedPatron.Name);\n return;\n }\n break;\n case 'clear':\n this.resetPatrons(newPatron[0].Name);\n return;\n }\n }\n } else if (state === 'PatronType') {\n newPatron.forEach(p => {\n p.PatronTypeID = val ? val.PatronTypeID : null;\n p.DisplayName = val ? val.DisplayName : null;\n p.Name = val ? val.Name : null;\n })\n }\n\n this.setState({ newPatron });\n }\n\n resetPatrons(keepPatronType) {\n this.setState({ newPatron: [{}] }, () => {\n if (this.state.patronTypes.find(pt => pt.Name === \"Co-Patron\")) {\n this.handleNewPatronChange('PatronType', this.state.patronTypes.find(pt => pt.Name === (keepPatronType || \"Co-Patron\")));\n }\n })\n }\n\n addNewPatron() {\n let newPatron = [...this.state.newPatron];\n let patronList = JSON.parse(JSON.stringify(this.state.patronList));\n\n newPatron.forEach(patron => {\n patron.PatronDate = moment().format(\"L\");\n\n const sequence = this.calculatePatronSequence(patron);\n for (let i = 0; i < patronList.length; i++) {\n const p = patronList[i];\n if (!p.RemoveDate && p.Sequence >= sequence) {\n p.Sequence = i + 2;\n } else if (!p.RemoveDate && p.Sequence < sequence) {\n p.Sequence = i + 1;\n } else {\n continue;\n }\n };\n patron.Sequence = sequence;\n patronList.push(patron);\n });\n patronList.sort((a, b) =>\n Number(Boolean(a.RemoveDate)) - Number(Boolean(b.RemoveDate))\n || (a.PatronTypeID === 1 && b.PatronTypeID === 2\n ? -1\n : a.PatronTypeID === 1 && b.PatronTypeID === 3\n ? -1\n : a.PatronTypeID === 1 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 2 && b.PatronTypeID === 1\n ? 1\n : a.PatronTypeID === 2 && b.PatronTypeID === 3\n ? 1\n : a.PatronTypeID === 2 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 3 && b.PatronTypeID === 1\n ? 1\n : a.PatronTypeID === 3 && b.PatronTypeID === 2\n ? -1\n : a.PatronTypeID === 3 && b.PatronTypeID === 4\n ? -1\n : a.PatronTypeID === 4 && b.PatronTypeID !== 4\n ? 1\n : 0\n ) //https://i.imgur.com/rwYykLz.png\n || a.PatronDisplayName.localeCompare(b.PatronDisplayName)\n || a.Sequence - b.Sequence\n )\n\n for (let i = 0; i < patronList.length; i++) {\n let patron = { ...patronList[i] };\n patron.Sequence = i + 1;\n patronList.splice(i, 1, patron);\n }\n\n this.setState({ patronList }, () => {\n this.resetPatrons();\n });\n }\n\n calculatePatronSequence(patron) {\n let patronList = JSON.parse(JSON.stringify(this.state.patronList));\n const currentSeq = patron.Sequence;\n\n //look first by chamber, if none found, then go out of chamber\n let existingPatronOfSameType = patronList.findLast(p => p.PatronDisplayName !== patron.PatronDisplayName && !p.RemoveDate && p.PatronTypeID === patron.PatronTypeID && p.ChamberCode === patron.ChamberCode);\n if (!existingPatronOfSameType) {\n existingPatronOfSameType = patronList.findLast(p => p.PatronDisplayName !== patron.PatronDisplayName && !p.RemoveDate && p.PatronTypeID === patron.PatronTypeID);\n }\n if (existingPatronOfSameType && existingPatronOfSameType.Sequence) {\n return currentSeq && existingPatronOfSameType.Sequence > currentSeq ? existingPatronOfSameType.Sequence : existingPatronOfSameType.Sequence + 1;\n } else {\n const existingPatronOfHigherPriority = patronList.findLast(p => p.PatronDisplayName !== patron.PatronDisplayName && !p.RemoveDate && p.PatronTypeID < patron.PatronTypeID);\n if (existingPatronOfHigherPriority && existingPatronOfHigherPriority.Sequence) {\n return currentSeq && existingPatronOfHigherPriority.Sequence > currentSeq ? existingPatronOfHigherPriority.Sequence : existingPatronOfHigherPriority.Sequence + 1;\n } else {\n return 1;\n }\n }\n }\n\n handleVersionDateChange(value) {\n let billText = { ...this.state.billText };\n billText.VersionDate = moment(value).startOf('day');\n\n let draftTextCopy = this.state.draftTextCopy;\n draftTextCopy = draftTextCopy.replace(/<p class=\"center\">\\s*on.+<\\/p>/, '<p class=\"center\">on ' + value.format(\"LL\") + ')</p>');\n\n this.setState({ billText, draftTextCopy })\n }\n\n componentDidMount() {\n window.scrollTo(0, 0);\n this.getData();\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { message, isLoaded, isEditing, draftTextCopy, billText, highlight, senatePatronsList, housePatronsList, chiefPatronsList, patronList, selectedSession, versionSession } = this.state;\n const session = selectedSession;\n const sessionHeader = session ? session.SessionYear + \" \" + session.DisplayName : '';\n const getPatronText = patronArray => {\n const senators = patronArray.filter(p => p.ChamberCode === \"S\");\n const delegates = patronArray.filter(p => p.ChamberCode === \"H\");\n let finishedText = \"\";\n if (billText.ChamberCode === \"S\") {\n finishedText = senators.map(m => m.PatronDisplayName).join();\n if (delegates.length > 0) {\n finishedText += \"; \" + (delegates.length === 1 ? \"Delegate: \" : \"Delegates: \");\n finishedText += delegates.map(m => m.PatronDisplayName).join();\n }\n }\n if (billText.ChamberCode === \"H\") {\n finishedText = delegates.map(m => m.PatronDisplayName).join();\n if (senators.length > 0) {\n finishedText += \"; \" + (senators.length === 1 ? \"Senator: \" : \"Senators: \");\n finishedText += senators.map(m => m.PatronDisplayName).join();\n\n }\n }\n return finishedText;\n\n }\n if (message) {\n return (<p>{message}</p>);\n }\n const fetchingPatronage = (this.props.location.state && this.props.location.state.patronUpdate && (!this.state.patronTypes || !this.state.memberList || !this.state.patronIsLoaded));\n if (!isLoaded || fetchingPatronage) {\n return (<div className=\"center-spinner spinner\">{fetchingPatronage ? 'Loading...' : 'Loading Results...'}</div>)\n }\n if (isEditing || this.state.gettingEditData) {\n const disableSponsor = !this.props.login.userClaims.roles.find(x => x === \"Admin\") && !window.location.pathname.includes('new-amendment');\n\n return (\n this.state.gettingEditData ?\n <div className=\"center-spinner spinner\">{this.props.location.state && this.props.location.state.patronUpdate ? 'Loading...' : 'Loading Results...'}</div>\n :\n <div className=\"dlas-forms\">\n {this.state.showPatronModal &&\n <UpdatePatronageModal history={this.props.history} billText={this.state.billText} savingPatrons={this.state.savingPatrons} newPatron={this.state.newPatron} onDragEnd={this.onDragEnd} patronTypes={this.state.patronTypes} handlePatronChange={this.handlePatronChange} handleNewPatronChange={this.handleNewPatronChange} addNewPatron={this.addNewPatron} togglePatron={this.togglePatron} patronList={patronList} memberList={this.state.memberList} updatePatrons={this.updatePatrons} />\n }\n <div className={this.state.showPatronModal ? 'd-none' : ''}>\n <div>\n <h2>{sessionHeader} {this.state.billText.OnReconvene && \" - Reconvened\"}</h2>\n <h3><Link to={`/bill-details/${selectedSession.SessionCode}/${this.props.match.params.billnumber}`}>{this.props.match.params.billnumber}</Link></h3>\n {!window.location.pathname.includes('new-amendment') &&\n <button type=\"button\" className=\"button-link\" onClick={() => this.toggleEditContent()}>Cancel</button>\n }\n <div className={`inner-grid ${billText.LegislationVersion === \"Substitute\" ? 'half-one-one-one-half' : 'four'}`}>\n {billText.LegislationVersion === \"Substitute\" &&\n <div>\n <label className=\"label small-text\">Proposed On</label>\n <DatePicker\n name=\"proposed-on\"\n id=\"version-date-datepicker\"\n selected={billText.VersionDate ? moment(billText.VersionDate) : null}\n onChange={this.handleVersionDateChange}\n />\n </div>\n }\n <div>\n <label className=\"label small-text\">Text Disposition</label>\n <Select\n options={this.props.bills.legislationDispositions ? this.props.bills.legislationDispositions.filter(d => ![\"Amendment\", \"Substitute\"].includes(billText.LegislationVersion) || ![\"Offered\", \"Reported\"].includes(billText.originalTextDisposition) ? d.Name !== \"Removed\" : true) : []}\n getOptionLabel={opt => opt.Name}\n getOptionValue={opt => opt.TextDispositionID}\n isClearable={true}\n onChange={this.handleBillDispositionChange}\n ref={this.dispositionRef}\n value={this.props.bills.legislationDispositions.find(dispo => dispo.Name === billText.TextDisposition)}\n isDisabled={!this.props.login.userClaims.roles.find(x => x === \"Admin\")}\n />\n {this.state.textDispositionError && !billText.TextDisposition && <span className=\"input-feedback\" style={{ fontSize: '12px' }}>{this.state.textDispositionError}</span>}\n </div>\n {[\"Amendment\", \"Substitute\"].includes(billText.LegislationVersion) &&\n <>\n <div>\n <label className=\"label small-text\">Sponsor</label>\n <Select\n isDisabled={disableSponsor}\n options={this.state.sponsorOptions}\n onChange={(e) => this.handleParamChange(e, \"selectedSponsor\")}\n getOptionLabel={(option) => option.label}\n value={this.state.selectedSponsor}\n ref={this.sponsorRef}\n placeholder={\"Select...\"}\n />\n {this.state.sponsorError && !billText.Sponsor && <span className=\"input-feedback\" style={{ fontSize: '12px' }}>{this.state.sponsorError}</span>}\n </div>\n {this.state.selectedSponsor &&\n this.state.selectedSponsor.value &&\n this.state.selectedSponsor.value === \"Member\" &&\n <div>\n <label className=\"label small-text\">Member</label>\n <Select\n options={this.props.login.userClaims.roles.find(x => x === \"Admin\")\n ? this.state.memberOptions\n : this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseLegislationTextAuthor\")\n ? this.state.houseMemberOptions\n : this.state.senateMemberOptions\n }\n isDisabled={disableSponsor}\n onChange={(e) => this.handleParamChange(e, \"selectedMember\")}\n getOptionLabel={(option) => option.text}\n value={this.state.selectedMember}\n ref={this.memberRef}\n placeholder={\"Select...\"}\n />\n {this.state.memberError && !billText.Patrons && <span className=\"input-feedback\" style={{ fontSize: '12px' }}>{this.state.memberError}</span>}\n </div>}\n {this.state.selectedSponsor &&\n this.state.selectedSponsor.value === \"Committee\" &&\n <div>\n <label className=\"label small-text\">Committee</label>\n <Select\n options={this.props.login.userClaims.roles.find(x => x === \"Admin\")\n ? this.state.committeeOptions\n : this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseLegislationTextAuthor\")\n ? this.state.committeeOptions.filter(x => x.value.ChamberCode === \"H\")\n : this.state.committeeOptions.filter(x => x.value.ChamberCode === \"S\")\n }\n isDisabled={disableSponsor}\n onChange={(e) => this.handleParamChange(e, \"selectedCommittee\")}\n getOptionLabel={(option) => option.text}\n value={this.state.selectedCommittee}\n ref={this.committeeRef}\n placeholder={\"Select...\"}\n />\n {this.state.committeeError && !billText.CommitteeName && <span className=\"input-feedback\" style={{ fontSize: '12px' }}>{this.state.committeeError}</span>}\n </div>}\n </>\n }\n {(this.props.login.userClaims.roles.find(x => x === \"Admin\") || billText.LegislationVersion === \"Amendment\") && /*admin can change IsActive/IsPublic on any version, other users of this page (LegislationText resource) can only change this on amendments*/\n <div className=\"inner-grid two\">\n <div>\n <label className=\"label small-text\">Is Viable</label>\n <a onClick={(e) => { e.stopPropagation(e); this.toggleTooltip() }} className=\"button info\">Info</a>\n {this.state.showTooltip &&\n <div className=\"info-box red-edit-tooltip\">\n <p>Caution, only change this for reconsiderations.</p>\n </div>\n }\n <div onClick={this.handleIsActiveChange} className=\"toggle-switch\" style={{ display: 'block' }}>\n <input id=\"sr-status-change\" checked={billText.IsActive} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n <div>\n <label className=\"label small-text\">Is Public</label>\n <div onClick={this.handleIsPublicChange} className=\"toggle-switch\" style={{ display: 'block' }}>\n <input id=\"sr-status-change\" checked={billText.IsPublic} type=\"checkbox\" />\n <span className=\"slider\"></span>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <br />\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n <ReviewSection\n editorContent={draftTextCopy}\n handleEditorChange={this.handleEditorChange}\n sessionId={session.SessionID}\n height={1000}\n membersCallback={this.membersCallback}\n committeesCallback={this.committeesCallback}\n allowAmendmentActions={![\"Amendment\", \"Gov Recommendation\"].includes(this.state.billText.LegislationVersion) && !window.location.pathname.includes('new-amendment') ? false : true}\n overrideRemoveCreateAmendmentButton={this.state.billText.LegislationVersion === \"Gov Recommendation\"}\n userChamber={this.props.login.userClaims.roles.find((x) => x === \"Admin\") ? \"Admin\" : this.props.login.userClaims.roles.find((x) => x === \"HouseLegislationAuthor\") ? \"H\" : \"S\"}\n billNumber={this.props.match.params.billnumber}\n selectedSponsor={this.state.selectedSponsor}\n selectedMember={this.state.selectedMember}\n selectedCommittee={this.state.selectedCommittee}\n setWasEmpty={this.setWasEmpty}\n wasEmpty={this.state.wasEmpty}\n setReplaced={this.setReplaced}\n replaced={this.state.replaced}\n />\n {this.state.draftTextError && !draftTextCopy && <span className=\"input-feedback\" style={{ fontSize: '15px' }}>{this.state.draftTextError}</span>}\n <div className=\"button-bar\">\n <div>\n {!window.location.pathname.includes('new-amendment') &&\n <button disabled={this.state.isSaving} type=\"button\" onClick={() => this.toggleEditContent()} className=\"button secondary\">Cancel</button>\n }\n </div>\n <div className=\"align-right\">\n {window.location.pathname.includes('new-amendment') ?\n <button disabled={this.state.isSaving} type=\"button\" onClick={this.createNewAmendment} className=\"button\">{this.state.isSaving ? \"Creating...\" : \"Create\"}</button>\n :\n <div className=\"flex-row flex-vertical-center flex-end\">\n {![\"Amendment\", \"Gov Recommendation\", \"Veto Explanation\", \"Conference Report\"].includes(billText.LegislationVersion) &&\n <React.Fragment>\n <div className=\"toggle-switch\" onClick={this.toggleReprint}>\n <input id=\"official-reprint-button\" checked={this.state.billText.IsReprint} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"official-reprint-button\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"no-wrap\", marginTop: '0px', fontSize: '14px' }}>Mark As Official Reprint</label>\n </React.Fragment>\n }\n <button disabled={this.state.isSaving || this.state.headerError} type=\"button\" onClick={() => this.saveText()} className=\"button\">{this.state.isSaving ? \"Saving...\" : this.props.bills.billText && this.props.bills.billText.length && this.props.bills.billText[0].IsPublic && billText.IsPublic ? \"Republish\" : billText.IsPublic ? \"Publish\" : \"Save\"}</button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n );\n }\n const MarkHelpBar = (\n <div className=\"floating-button-bar inline-list mark-help\">\n {this.state.markHelpIndex > 0 && <button className=\"button\" type=\"button\" onClick={() => this.navToKeywordHit(PREVIOUS)}>Previous Keyword Hit</button>}\n {this.state.showNextMarkHelp && <button className=\"button\" type=\"button\" onClick={() => this.navToKeywordHit(NEXT)}>{this.state.showNextMarkHelp} Keyword Hit</button>}\n </div>\n )\n\n return (\n <div>\n <div className=\"flex-row\">\n <div>\n <h2>{sessionHeader} {this.state.billText.OnReconvene && \" - Reconvened\"}</h2>\n <h3><Link to={`/bill-details/${selectedSession.SessionCode}/${billText.LegislationNumber}`}>{billText.LegislationNumber}</Link></h3>\n {billText.CommitteeID && <h3><Link to={`/session-details/${selectedSession.SessionCode}/committee-information/${billText.CommitteeNumber}/committee-details`}>{billText.CommitteeName}</Link></h3>}\n {this.props.login.userClaims.resources.find(resource => resource === VERSION_AUTHOR) &&\n <button type=\"button\" className=\"button-link red-edit\" onClick={() => this.toggleEditContent()}>Edit</button>\n }\n <br />\n {billText && billText.LegislationNumber && ![\"Conference Report\", \"Amendment\", \"Gov Recommendation\"].includes(billText.LegislationVersion) && (billText.LegislationNumber.includes(\"HB\") || billText.LegislationNumber.includes(\"SB\")) ?\n <div className=\"flex-row flex-vertical-center flex-start\">\n <div className=\"toggle-switch\" onClick={() => this.toggleHighlight()}>\n <input id=\"highlight-checkbox\" checked={highlight} type=\"checkbox\" style={{ width: \"auto\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"highlight-checkbox\" className=\"checkbox-label no-background\">Highlight Proposed Changes</label>\n </div>\n :\n null\n }\n </div>\n <div>\n {this.props.login.userClaims.resources.includes(\"LegislationText\")\n && (([\"Introduced\", \"Enrolled\"].includes(this.state.billText.LegislationVersion) && this.state.billData && [\"J\", \"R\"].includes(this.state.billData.LegislationTypeCode))\n || (this.state.billText.LegislationVersion === \"Chaptered\" && this.state.billData && this.state.billData.LegislationTypeCode === \"B\")\n || (this.state.billText.LegislationVersion === \"Substitute\" && this.state.billData)) &&\n <button type=\"button\" onClick={this.downloadWordFile} className=\"button-link with-icon\"><span className=\"icon word\"></span>Presentation Copy</button>\n }\n {billText && billText.PDFFile && billText.PDFFile[0].FileURL &&\n <a href={billText.PDFFile[0].FileURL} target=\"_blank\" rel=\"noreferrer\" className=\"button pdf\"> PDF</a>\n }\n <ReactToPrint\n trigger={() => <button type=\"button\" className=\"button print\"> Print</button>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"}\n />\n </div>\n </div>\n <br />\n <div ref={el => (this.componentRef = el)}>\n {!this.state.hideLDNumber && [\"Introduced\", \"Engrossed\", \"Reengrossed\"].includes(billText.LegislationVersion) &&\n <div>\n {billText.LDNumber}\n </div>\n }\n {/* The draft text from json contains everything. Including the header. So just show that if it exists */}\n {billText.DraftTextFromJson ?\n <div className={highlight === true ? \"highlight mark-context\" : \"mark-context\"}>\n {this.state.showMarkHelp && MarkHelpBar}\n {billText.DraftTextFromJson}\n </div>\n :\n <>\n {billText.jsonFileFound &&\n <div className=\"center\">\n <strong>{billText.Chamber} {billText.LegislationType} NO. {billText.LegislationNumber.replace(/\\D/g, '')}</strong>\n <div>{billText.PrefileDate && <>Offered {moment(billText.OfferedDate).format(\"MMMM D, YYYY\")}</>}</div>\n <div>{billText.OfferedDate && <>Prefiled {moment(billText.PrefileDate).format(\"MMMM D, YYYY\")}</>}</div>\n <div>{billText.DraftTitle ? renderHTML(billText.DraftTitle) : ''}</div>\n <hr />\n <div>Patron—{getPatronText(billText.Patrons)}</div>\n <hr />\n <div>{billText.ReferredCommittee\n && billText.ReferredCommittee === \"Judiciary\"\n ? <>Referred to Committee on the {billText.ReferredCommittee}</>\n : billText.ReferredCommittee === \"Courts of Justice\"\n ? <>Referred to Committee for {billText.ReferredCommittee}</>\n : <>Referred to Committee on {billText.ReferredCommittee}</>\n }</div>\n <hr />\n </div>\n }\n <div className={highlight === true ? \"highlight mark-context\" : \"mark-context\"}>\n {this.state.showMarkHelp && MarkHelpBar}\n {billText ? renderHTML(billText.DraftText || '') : ''}\n </div>\n </>\n }\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { bills, session, login, patrons, members, nav } = state;\n return {\n bills,\n session,\n login,\n patrons,\n members,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators, patronActionCreators, sessionActionCreators, authActionCreators, memberActionCreators, navActionCreators), dispatch)\n }\n }\n)(FullText)\n","export const Button = ({\n icons,\n input,\n children,\n disabled,\n className,\n style,\n onClick,\n ...props\n}) => {\n return (\n <button {...props} onClick={onClick} disabled={disabled} style={icons?.length ? { gridTemplateColumns: 'min-content' + icons.map(_ => ' min-content').join(''), ...style } : style} className={`${icons?.length ? 'button-icon-text-container ' : ''}${className}`}>\n {input}\n {icons?.map((icon, idx) => <div {...icon.props} key={idx} className={`icon ${icon.name}`}>{icon.children}</div>)}\n <div className=\"button-text\">{children}</div>\n </button>\n );\n};\n","import React from 'react';\nimport { Prompt } from 'react-router';\nimport Select from 'react-select';\nimport DatePicker from 'react-datepicker';\nimport moment from 'moment-timezone';\nimport { Button } from '../lis-custom-components/lis-custom-components';\nimport { scheduleActionCreators } from '../../stores/lis-schedule-store';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { navActionCreators } from '../../stores/lis-nav-store';\n\nconst hyperlinkInstructions = \"INSERT HYPERLINK TEXT\";\n\nconst customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n height: \"32px\",\n minHeight: \"32px\",\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n },\n dropdownIndicator: base => ({\n ...base,\n padding: '0px 8px'\n })\n}\n\nconst chamberList = [\n { label: \"House\", value: 0 },\n { label: \"Senate\", value: 1 }\n]\n\nclass MeetingsForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n displaySequence: 0,\n committee: { label: \"Select...\" },\n scheduleID: \"\",\n scheduleType: { label: \"Select...\" },\n meetingDateTime: \"\",\n timeDescription: \"\",\n location: { label: \"Select...\" },\n description: \"\",\n ownerName: \"\",\n chamber: { label: \"Select...\" },\n isCancelled: false,\n isPublic: true,\n onCalendar: false,\n scheduleTypeOptions: [],\n remarks: \"\",\n scheduleFiles: []\n }\n\n this.handleFileChange = this.handleFileChange.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.highlightFileAnchorTag = this.highlightFileAnchorTag.bind(this);\n this.saveSchedule = this.saveSchedule.bind(this);\n }\n\n componentDidMount() {\n let scheduleTypeOptions = [...this.props.scheduleTypeList];\n scheduleTypeOptions.splice(5, 1);\n this.setState({\n scheduleTypeOptions: scheduleTypeOptions\n })\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.meeting.ScheduleID !== prevState.scheduleID) {\n return {\n displaySequence: nextProps.meeting.DisplaySequence ? nextProps.meeting.DisplaySequence : nextProps.organizedSchedule.find(x => moment(x.Date).isSame(nextProps.meeting.meetingDateTime, \"day\")) ? (Math.max(...nextProps.organizedSchedule.find(x => moment(x.Date).isSame(nextProps.meeting.meetingDateTime, \"day\")).Times[0].Items.map(x => x.DisplaySequence)) + 1) : 1,\n committee: nextProps.meeting.OwnerID ? nextProps.committeeList.find(x => x.CommitteeID === nextProps.meeting.OwnerID) : { label: \"Select...\" },\n ownerName: nextProps.meeting.OwnerName ? nextProps.meeting.OwnerName : \"\",\n scheduleID: nextProps.meeting.ScheduleID ? nextProps.meeting.ScheduleID : 0,\n scheduleType: nextProps.meeting.ScheduleTypeID ? nextProps.scheduleTypeList.find(x => x.ScheduleTypeID === nextProps.meeting.ScheduleTypeID) : { label: \"Select...\" },\n location: nextProps.meeting.VoteRoomID ? nextProps.locationList.find(x => x.VoteRoomID === nextProps.meeting.VoteRoomID) : { label: \"Select...\" },\n meetingDateTime: nextProps.meeting.ScheduleDate ? moment(nextProps.meeting.ScheduleDate).format(\"MM-DD-YYYY HH:mm\") : moment().set({ hour: 12, minute: 0, second: 0, millisecond: 0 }).format(\"MM-DD-YYYY hh:mm\"),\n timeDescription: nextProps.meeting.ScheduleTime ? nextProps.meeting.ScheduleTime : \"\",\n description: nextProps.meeting.Description ? nextProps.meeting.Description : \"\",\n textHeight: (Math.round((nextProps.meeting.Description ? nextProps.meeting.Description : \"\").length / 95) * 20 + 40).toString() + 'px',\n chamber: nextProps.meeting.ScheduleTypeID === 2 ? chamberList.find(x => x.label === nextProps.meeting.OwnerName) : { label: \"Select...\" },\n isCancelled: nextProps.meeting.IsCancelled ? nextProps.meeting.IsCancelled : false,\n isPublic: nextProps.meeting.IsPublic === true ? true : false,\n onCalendar: nextProps.meeting.OnCalendar !== undefined ? nextProps.meeting.OnCalendar : false,\n remarks: nextProps.meeting.Comments ? nextProps.meeting.Comments : \"\",\n scheduleFiles: nextProps.meeting.ScheduleFiles || []\n }\n } else { return null; }\n }\n\n handleChange(state, value, callback) {\n if (state === 'timeDescription') {\n value = moment(value, \"H:mm\").tz('America/New_York').format(\"h:mm A\");\n } else if (state === 'meetingDateTime') {\n value = moment(value).tz('America/New_York');\n }\n this.setState({\n [state]: value\n }, () => {\n this.props.setFormIsDirty(true);\n if (value && value.ParentCommitteeID && value.ChamberCode === \"S\") {\n this.props.getSubcommitteeMembers(\"?CommitteeID=\" + this.state.committee.CommitteeID + \"&EffectiveDate=\" + this.state.meetingDateTime)\n .then(() => {\n this.setState({\n remarks: this.props.subcommitteeMembers\n })\n })\n } else {\n if (state === 'description') {\n let textHeight = (Math.round((this.state.description ?? '').length / 95) * 20 + 40).toString() + 'px';\n this.setState({ textHeight });\n }\n if (callback) callback();\n }\n })\n }\n\n highlightFileAnchorTag() {\n const field = document.getElementById('description');\n if (field) {\n const start = this.state.description.lastIndexOf(hyperlinkInstructions);\n if (start > -1) {\n const end = start + hyperlinkInstructions.length;\n if (field.createTextRange) {\n var selRange = field.createTextRange();\n selRange.collapse(true);\n selRange.moveStart('character', start);\n selRange.moveEnd('character', end);\n selRange.select();\n } else if (field.setSelectionRange) {\n field.setSelectionRange(start, end);\n } else if (field.selectionStart) {\n field.selectionStart = start;\n field.selectionEnd = end;\n }\n field.focus();\n }\n }\n }\n\n saveSchedule() {\n let params = {\n DisplaySequence: this.state.displaySequence,\n OwnerID: this.state.scheduleType.value !== 6 ? this.state.committee ? this.state.committee.CommitteeID : null : this.props.meeting.OwnerID, //If the meeting is a docket pass back the original OwnerID\n OwnerName: this.state.scheduleType.value === 1 ? this.state.committee ? this.state.committee.Name : null : this.state.scheduleType.value === 2 ? this.state.chamber ? this.state.chamber.label : null : this.state.scheduleType.value === 6 ? this.props.meeting ? this.props.meeting.OwnerName : null : this.state.ownerName, //Pass back the original OwnerName if it's a docket meeting\n ScheduleID: this.state.scheduleID,\n ScheduleTypeID: this.state.scheduleType.value,\n VoteRoomID: this.state.location ? this.state.location.VoteRoomID : undefined,\n RoomDescription: this.state.location ? this.state.location.Description : undefined,\n ScheduleDate: moment(this.state.meetingDateTime).format(\"MM/DD/YYYY HH:mm\"),\n ScheduleTime: this.state.timeDescription !== \"Invalid date\" ? this.state.timeDescription : \"\",\n Description: this.state.description,\n IsCancelled: this.state.isCancelled,\n IsPublic: this.state.isPublic,\n OnCalendar: this.state.onCalendar,\n ModificationDate: this.props.meeting.ModificationDate ? this.props.meeting.ModificationDate : '',\n Comments: this.state.remarks\n }\n\n if (this.state.scheduleID === 0) {\n this.props.createMeeting(params)\n } else {\n params = {\n Schedules: [\n params\n ]\n }\n this.props.saveMeetings(params)\n }\n }\n\n handleFileChange(e, originalFile, isDelete) {\n this.props.handleFileChange(e, originalFile, isDelete, (scheduleFiles, update, originalFileIdx, fileURL) => {\n if (!isDelete && !update && (!originalFileIdx || originalFileIdx === -1)) {\n this.handleChange(\"description\", this.state.description + `<a href='${fileURL}' target='_blank' rel='noopener noreferrer'>${hyperlinkInstructions}</a>`, () => {\n this.highlightFileAnchorTag();\n })\n } else if (update && originalFileIdx > -1) {\n scheduleFiles[originalFileIdx]['change-success'] = true;\n this.setState({ scheduleFiles });\n }\n })\n }\n\n getScheduleDateTime() {\n const scheduleDate = moment(this.state.meetingDateTime);\n const scheduleTime = moment(this.state.timeDescription, \"h:mm A\").isValid() && moment(this.state.timeDescription, \"h:mm A\");\n return scheduleDate.hour(scheduleTime ? scheduleTime.hour() : scheduleDate.hour()).minute(scheduleTime ? scheduleTime.minute() : scheduleDate.minute()).second(scheduleTime ? scheduleTime.second() : scheduleDate.second()).tz('America/New_York', true).local();\n }\n\n render() {\n const { committeeDropDownOptions, locationList, scheduleTypeList, isSaving, toggleEditMeeting } = this.props;\n //custom filter for the committee dropdown so that subcommittees will be displayed if you filter by the parent committee name\n const filterOption = (option, inputValue) => {\n inputValue = inputValue.toUpperCase();\n // check if this option label includes the inputValue, or if this option is a subcommittee whose parent committee's label contains the inputValue\n const match = option.label.toUpperCase().includes(inputValue) || (option.data.ParentCommitteeID && committeeDropDownOptions.find(cmte => cmte.CommitteeID === option.data.ParentCommitteeID && cmte.label.toUpperCase().includes(inputValue)));\n return match;\n };\n\n const formatURL = (url) => {\n url = url.replace(\"https://\", \"\");\n if (url.length >= 40) {\n return url.substring(0, 11) + \"...\" + url.substring(28);\n }\n return url;\n }\n\n return (\n <div className=\"dlas-forms meetings-form\">\n <div>\n <Prompt\n when={this.props.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <div className=\"inner-grid seven-and-one\">\n {this.state.scheduleID === 0 ? <h3>Create an Event</h3> : <h3>Edit Event</h3>}\n <div className=\"checkbox flex-row flex-vertical-center flex-start\" style={{ paddingTop: \"5%\" }}>\n {this.props.userClaims && this.props.userClaims.roles.find(x => x === \"SenateScheduleAuthor\") &&\n <React.Fragment>\n <div className=\"toggle-switch\" onClick={() => this.handleChange(\"onCalendar\", !this.state.onCalendar)}>\n <input id=\"is-public-button\" checked={this.state.onCalendar} type=\"checkbox\" style={{ width: \"inherit\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"is-public-button\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"nowrap\" }}>On Calendar?</label>\n </React.Fragment>\n }\n <div className=\"toggle-switch\" onClick={() => this.handleChange(\"isPublic\", !this.state.isPublic)}>\n <input id=\"is-public-button\" checked={this.state.isPublic} type=\"checkbox\" style={{ width: \"inherit\" }} />\n <span className=\"slider\"></span>\n </div>\n <label htmlFor=\"is-public-button\" className=\"checkbox-label no-background\" style={{ whiteSpace: \"nowrap\" }}>Is Public?</label>\n </div>\n </div>\n <div className=\"grid-wrapper third\">\n <div>\n <label htmlFor=\"meeting-datetime\">Date</label>\n <DatePicker\n id=\"meeting-datetime\"\n className=\"width-100\"\n selected={this.getScheduleDateTime()}\n onChange={(value => { this.handleChange(\"meetingDateTime\", value) })}\n dateFormat=\"MM/DD/YYYY\"\n />\n </div>\n <div>\n <label htmlFor=\"time-description\">Time</label>\n <div>\n <input\n type='time'\n id=\"time-description\"\n autoComplete='off'\n value={!this.state.timeDescription ? '' : moment(this.state.timeDescription, \"h:mm A\").tz('America/New_York', true).local().format(\"HH:mm\")}\n style={{ minWidth: '125px', maxHeight: '32px', fontFamily: 'arial' }}\n onChange={(e) => { this.handleChange(\"timeDescription\", e ? e.target.value : \"\") }}\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"meeting-location\">Location</label>\n <Select\n id=\"meeting-location\"\n options={locationList}\n value={this.state.location}\n onChange={(value) => { this.handleChange(\"location\", value) }}\n styles={customStyles}\n isClearable\n />\n </div>\n </div>\n <div className=\"grid-wrapper meetings-form-two-and-one\">\n <React.Fragment>\n {this.state.scheduleType && this.state.scheduleType.value === 1 || this.state.scheduleType && this.state.scheduleType.value === 6\n ?\n <div>\n <label htmlFor=\"committee-subcommittee\">Committee/Subcommittee</label>\n {this.state.scheduleType.value === 6\n ?\n <div style={{ display: \"block\" }}>\n <label>{this.state.ownerName}</label>\n </div>\n :\n <Select\n id=\"committee-subcommittee\"\n options={committeeDropDownOptions}\n value={this.state.committee}\n onChange={(value) => { this.handleChange(\"committee\", value) }}\n filterOption={filterOption}\n styles={customStyles}\n />\n }\n </div>\n : this.state.scheduleType && this.state.scheduleType.value === 2\n ?\n <div>\n <label htmlFor=\"meeting-chamber\">Chamber</label>\n <Select\n id=\"meeting-chamber\"\n value={this.state.chamber}\n options={this.props.userClaims.claims.find(x => x.RoleName === \"Admin\")\n ? chamberList\n : this.props.userClaims.claims.find(x => x.RoleName === \"HouseScheduleEditor\")\n ? chamberList.filter(x => x.label === \"House\")\n : chamberList.filter(x => x.label === \"Senate\")\n }\n onChange={(value) => { this.handleChange(\"chamber\", value) }}\n styles={customStyles}\n />\n </div>\n :\n <div>\n <label htmlFor=\"meeting-owner\">Meeting Owner</label>\n <input\n id=\"meeting-owner\"\n className=\"width-100\"\n type=\"text\"\n onChange={(e) => { this.handleChange(\"ownerName\", e.target.value) }}\n value={this.state.ownerName}\n />\n </div>\n }\n </React.Fragment>\n <div>\n <label htmlFor=\"schedule-Type\">Meeting Type</label>\n <Select\n id=\"schedule-type\"\n options={this.state.scheduleTypeOptions}\n value={this.state.scheduleType}\n onChange={(value) => { this.handleChange(\"scheduleType\", value) }}\n styles={customStyles}\n isDisabled={this.state.scheduleType.value === 6}\n />\n </div>\n </div>\n <div className=\"grid-wrapper\">\n <label htmlFor=\"description\">Description{this.state.scheduleID ? <Button type=\"button\" className=\"button file-button slide\" style={{ marginLeft: '5px' }} icons={[{ name: 'add' }]} input={<input type=\"file\" accept=\".pdf\" onChange={this.handleFileChange} />}>\n {\" Add PDF\"}\n </Button> : null}\n {this.state.scheduleFiles?.map((f, i) =>\n <Button key={i} type=\"button\" className={`button file-button secondary${f['change-success'] ? ' change-success' : ''}`}\n style={{ marginLeft: '5px', cursor: 'default' }}\n icons={[\n { name: 'delete', props: { style: { cursor: 'pointer' }, onClick: (e) => this.handleFileChange(e, f, true) } },\n { name: 'replace', children: <input type=\"file\" accept=\".pdf\" style={{ position: 'relative', cursor: 'pointer' }} onChange={(e) => this.handleFileChange(e, f)} /> }\n ]}>\n <a href={f.FileURL} target='_blank' rel='noopener noreferrer'>{formatURL(f.FileURL)}</a>\n </Button>)}\n </label>\n <textarea\n id=\"description\"\n style={{ height: this.state.textHeight || '40px' }}\n value={this.state.description}\n onChange={(e) => { this.handleChange(\"description\", e.target.value) }}\n type=\"text\"\n />\n </div>\n {((this.state.committee && this.state.committee.ChamberCode === \"S\") || (this.state.chamber && this.state.chamber.value === 1) || this.state.scheduleType.ScheduleTypeID === 6) &&\n <div className=\"grid-wrapper\">\n <label htmlFor=\"remarks\">Remarks</label>\n <textarea\n id=\"remarks\"\n value={this.state.remarks}\n onChange={(e) => { this.handleChange(\"remarks\", e.target.value) }}\n type=\"text\"\n />\n </div>\n }\n <button className=\"button float-right row-spacer-margin\" type=\"button\" onClick={() => { this.saveSchedule() }} disabled={isSaving}>{!isSaving ? \"Save\" : \"Saving...\"}</button>\n <button style={{ marginRight: \"10px\" }} className=\"button float-right row-spacer-margin secondary\" type=\"button\" onClick={() => toggleEditMeeting()}>Cancel</button>\n </div>\n )\n }\n}\n\nexport default MeetingsForm;","import React from 'react';\nimport DatePicker from 'react-datepicker';\nimport moment from 'moment-timezone';\n\nclass MeetingsCalendarPreview extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n date: moment()\n }\n\n this.setDate = this.setDate.bind(this);\n this.submit = this.submit.bind(this);\n }\n\n setDate(value) {\n this.setState({\n date: value || ''\n })\n }\n\n submit() {\n this.props.getPreview(this.state.date);\n }\n\n render() {\n\n return (\n <div className=\"dlas-forms\">\n <h3>Meetings Calendar Preview</h3>\n <p>You may use this form to generate a preview PDF of all meetings scheduled to appear on the calendar.</p>\n <div className=\"grid-wrapper meetings-preview\">\n <div>\n <label>Start Date</label>\n <DatePicker\n selected={this.state.date ? moment(this.state.date) : null}\n onChange={(value) => this.setDate(value)}\n dateFormat=\"MM/DD/YYYY\"\n />\n </div>\n <button\n type=\"button\"\n className=\"button\"\n style={{ height: \"32px\", marginTop: \"22px\" }}\n disabled={this.state.date === \"\" || this.props.gettingPreview}\n onClick={() => this.submit()}\n >\n Submit\n </button>\n <div />\n <button\n type=\"button\"\n className=\"button float-right\"\n style={{ marginRight: \"10px\", height: \"32px\", marginTop: \"22px\" }}\n onClick={() => this.props.toggleMeetingsCalendarPreview()}\n >Return to Schedule Management</button>\n </div>\n {this.props.gettingPreview ?\n <div aria-label=\"Loading\" className=\"center-spinner spinner\"></div>\n :\n this.props.pdfSrc != \"\" &&\n <div>\n <div className=\"center full-height\">\n <iframe className=\"center\" style={{ width: '100%', height: '1080px', marginTop: \"20px\" }} ref={el => this.pdfRef = el} src={this.props.pdfSrc}></iframe>\n </div>\n </div>\n }\n </div>\n )\n }\n}\n\nexport default MeetingsCalendarPreview;","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { committeeActionCreators } from '../../stores/lis-committee-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { scheduleActionCreators } from '../../stores/lis-schedule-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport MeetingsForm from '../../lis-shared/lis-meetings/lis-meetings-form-component';\nimport MeetingsCalendarPreview from '../../lis-shared/lis-meetings/lis-meetings-calendar-preview';\n\nimport moment from 'moment-timezone';\nimport DatePicker from 'react-datepicker';\nimport Select from 'react-select';\nimport { cancelRequest } from '../../services/request.service';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport renderHTML from 'react-render-html';\nimport { generateCsv } from '../../services/csv.service';\n\nconst tz = moment.tz.guess();\n\nconst getItemStyle = (isDragging, draggableStyle) => ({\n userSelect: \"none\",\n padding: '0',\n background: isDragging ? \"white\" : \"white\",\n borderBottom: '1px solid #b3b3b3',\n ...draggableStyle\n});\n\nconst reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const removed = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed[0]);\n\n return result;\n};\n\nconst SCHEDULE_EDITOR = \"Schedule\";\nconst SENATE_SCHEDULE = \"SenateScheduleAuthor\";\n\nconst TIME_REGEX = /[0-9]:[0-9]{2}\\s[AP]M/i;\n\nclass PublicSchedule extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n organizedSchedule: [],\n currentDayIndex: 0,\n locationOptions: [],\n showAllDates: true,\n isEditing: false,\n meeting: {},\n committeeList: [],\n fullCommitteeList: [],\n partner: false,\n isSaving: false,\n scheduleTypeList: [],\n startDate: moment().tz('America/New_York'),\n endDate: null,\n keyword: '',\n location: [],\n calendarList: [],\n calendarDisabled: true,\n displayScheduleModal: false,\n displayMeetingsCalendarPreview: false,\n pdfSrc: \"\",\n gettingPreview: false,\n isDirty: false,\n showConfirmation: false\n }\n\n this.toggleAllDates = this.toggleAllDates.bind(this);\n this.toggleEditMeeting = this.toggleEditMeeting.bind(this);\n this.changeDay = this.changeDay.bind(this);\n this.getCommittees = this.getCommittees.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSearch = this.handleSearch.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.openMeeting = this.openMeeting.bind(this);\n this.saveMeetings = this.saveMeetings.bind(this);\n this.createMeeting = this.createMeeting.bind(this);\n this.toggleCancelMeeting = this.toggleCancelMeeting.bind(this);\n this.deleteMeeting = this.deleteMeeting.bind(this);\n this.onDragEnd = this.onDragEnd.bind(this);\n this.openScheduleModal = this.openScheduleModal.bind(this);\n this.closeScheduleModal = this.closeScheduleModal.bind(this);\n this.toggleMeetingsCalendarPreview = this.toggleMeetingsCalendarPreview.bind(this);\n this.getPreview = this.getPreview.bind(this);\n this.setFormIsDirty = this.setFormIsDirty.bind(this);\n this.closeConfirmation = this.closeConfirmation.bind(this);\n this.handleFileChange = this.handleFileChange.bind(this);\n }\n\n changeDay(amount) {\n let currentDayIndex = this.state.currentDayIndex += amount;\n this.setState({\n currentDayIndex: currentDayIndex\n });\n }\n\n toggleAllDates() {\n this.setState(state => ({\n showAllDates: !state.showAllDates\n }));\n }\n\n toggleEditMeeting(confirmed) {\n if (this.state.isDirty && !confirmed) {\n this.setState({\n showConfirmation: true\n })\n } else {\n this.setState(state => ({\n isEditing: !state.isEditing,\n meeting: { ScheduleID: 0 },\n isDirty: false,\n showConfirmation: false\n }))\n }\n }\n\n getCommittees(sessionParam) {\n this.props.actions.getCommitteeList(sessionParam + \"&includeSubCommittees=true\").then(() => {\n let committeeList = [...this.props.committee.committeeList];\n committeeList.forEach(committee => {\n committee.label = committee.Name;\n committee.value = committee.CommitteeID;\n });\n\n //create a hierarchical list of committees (groups of committees, each of which contains the parent committee and its subcommittees) for the committee dropdown\n const committeeDropDownOptions = JSON.parse(JSON.stringify(committeeList)).filter(cmte => !cmte.ParentCommitteeID).map(cmte => {\n //add the chamber designator to the group header if necessary\n cmte.label = cmte.label += (this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\") || (this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseScheduleEditor\") && this.props.login.userClaims.claims.find(x => x.RoleName === \"SenateScheduleEditor\")) ? (' ' + '(' + cmte.ChamberCode + ')') : \"\");\n //since the header for each group of committees will already contain the chamber code if necessary, the individual options therein do not need it\n const parentCmteOption = { ...cmte, label: cmte.label && (cmte.label.endsWith(' (H)') || cmte.label.endsWith(' (S)')) ? cmte.label.substr(0, cmte.label.length - 4) : cmte.label }\n cmte.options = [parentCmteOption].concat([...committeeList].filter(sub => sub.ParentCommitteeID === cmte.CommitteeID));\n\n return cmte;\n })\n\n this.setState({\n fullCommitteeList: committeeList,\n committeeList: committeeList.filter(committee => {\n if (this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\")) {\n return true;\n } else if (committee.ChamberCode === \"H\" && this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseScheduleEditor\") ||\n committee.ChamberCode === \"S\" && this.props.login.userClaims.claims.find(x => x.RoleName === \"SenateScheduleEditor\")) {\n return true;\n }\n return false;\n }),\n committeeDropDownOptions: committeeDropDownOptions.filter(committee => {\n if (this.props.login.userClaims.claims.find(x => x.RoleName === \"Admin\")) {\n return true;\n } else if (committee.ChamberCode === \"H\" && this.props.login.userClaims.claims.find(x => x.RoleName === \"HouseScheduleEditor\") ||\n committee.ChamberCode === \"S\" && this.props.login.userClaims.claims.find(x => x.RoleName === \"SenateScheduleEditor\")) {\n return true;\n }\n return false;\n }),\n });\n });\n }\n\n handleChange(value, state) {\n this.setState({\n [state]: value\n })\n }\n\n handleSearch(preserveIndex) {\n const startDate = moment(this.state.startDate).hour(0).minute(0).second(0).format('MM/DD/YYYY HH:mm:ss');\n const endDate = this.state.endDate ? moment(this.state.endDate).hour(23).minute(59).second(59).format('MM/DD/YYYY HH:mm:ss') : null;\n const voteRooms = this.state.location.length > 0 ? this.state.location : null;\n\n let keyword = this.state.keyword;\n\n this.setState({\n isLoaded: false,\n isEditing: false\n }, () => {\n let params = \"startDate=\" + startDate;\n if (endDate) {\n params += \"&endDate=\" + endDate;\n }\n\n this.props.actions.getScheduleList(params, this.state.partner)\n .then(() => {\n if (this.props.schedule.scheduleListError) {\n throw this.props.schedule.scheduleListError;\n }\n let scheduleList = this.props.schedule.scheduleList\n // Filter out the results that are not part of the search\n if (keyword) {\n //Get rid of white space and make sure its all in lowercase so elements that are close to the search are included as well\n keyword = keyword.replace(/\\s/g, '');\n keyword = keyword.toLowerCase();\n scheduleList = scheduleList.filter(item => {\n const roomDescription = item.RoomDescription ? item.RoomDescription.replace(/\\s/g, '') : '';\n const description = item.Description ? item.Description.replace(/\\s/g, '') : '';\n const comments = item.Comments ? item.Comments.replace(/\\s/g, '') : '';\n const time = item.ScheduleTime ? item.ScheduleTime.replace(/\\s/g, '') : '';\n const ownerName = item.OwnerName ? item.OwnerName.replace(/\\s/g, '') : '';\n if (roomDescription.toLowerCase().includes(keyword) ||\n description.toLowerCase().includes(keyword) ||\n comments.toLowerCase().includes(keyword) ||\n time.toLowerCase().includes(keyword) ||\n ownerName.toLowerCase().includes(keyword)) {\n return item;\n }\n });\n }\n if (voteRooms) {\n scheduleList = scheduleList.filter(item => {\n if (voteRooms.find(room => room.VoteRoomID === item.VoteRoomID)) {\n return (item);\n }\n });\n }\n if (scheduleList.length === 0) {\n this.setState({\n isLoaded: true\n })\n }\n const organizedSchedule = this.organizeSchedule(scheduleList)\n this.setState({\n isLoaded: true,\n organizedSchedule: organizedSchedule,\n currentDayIndex: preserveIndex ? this.state.currentDayIndex : 0,\n scheduleError: null,\n calendarList: scheduleList\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true,\n scheduleError: err\n });\n });\n });\n }\n\n handleReset() {\n this.setState({\n location: [],\n keyword: '',\n startDate: moment().tz('America/New_York'),\n endDate: null\n }, () => {\n this.handleSearch();\n })\n }\n\n organizeSchedule(scheduleList) {\n // Turn the list of schedule items into a list of dates each containing a list of schedule items\n // This formatting is done so the schedule can be listed in the table with a date as a container\n scheduleList.sort((a, b) => {\n const dateComp = new Date(a.ScheduleDate) - new Date(b.ScheduleDate);\n if (dateComp !== 0) {\n return dateComp;\n }\n\n const timeA = moment(a.TimeDescription, \"h:mm A\");\n const timeB = moment(b.TimeDescription, \"h:mm A\");\n if (timeA.isValid() && timeB.isValid()) {\n if (timeA.isBefore(timeB)) return -1;\n if (timeA.isAfter(timeB)) return 1;\n }\n return 0;\n });\n let organizedSchedule = [];\n let scheduleArray = [];\n let previousSchedule = scheduleList[0];\n scheduleList.forEach(schedule => {\n const scheduleDateTime = this.getScheduleDateTime(schedule);\n const previousScheduleDateTime = this.getScheduleDateTime(previousSchedule);\n\n if (!schedule.DisplaySequence) {\n schedule.DisplaySequence = 999;\n }\n\n if (!previousScheduleDateTime.isSame(scheduleDateTime, 'day')) {\n //Add the list of legislation to the category\n //Organize the times so that the hour/minute times are in their seperate containers, this is done to help with formatting\n let newDateContainer = {\n Times: this.organizeTimes(scheduleArray),\n Date: previousScheduleDateTime.format(\"L\"),\n };\n organizedSchedule.push(newDateContainer);\n //Empty out the leg array so we can use it for another category\n scheduleArray = [];\n //Add the first item to the next category\n scheduleArray.push(schedule);\n } else {\n scheduleArray.push(schedule);\n }\n //Set this variable so the next iteration will know what the schedule date of the previous iteration was\n previousSchedule = schedule;\n });\n //If the schedule array still has elements then that means not every schedule item in the results has been added to a container\n //So, check to see if the schedule array has elements and if so create another container\n if (scheduleArray.length > 0) {\n let newDateContainer = {\n Times: this.organizeTimes(scheduleArray),\n Date: this.getScheduleDateTime(scheduleArray[0]).format(\"L\")\n };\n organizedSchedule.push(newDateContainer);\n }\n\n return organizedSchedule;\n }\n\n organizeTimes(itemsList) {\n itemsList.sort((a, b) => {\n return a.DisplaySequence < b.DisplaySequence ? -1 : a.DisplaySequence > b.DisplaySequence ? 1 : 0\n })\n\n let organizedTimes = [];\n let items = [];\n let time = \"\";\n\n for (let i = 0; i < itemsList.length; i++) {\n //If a ScheduleTime has been specified then use that, otherwise get the time from the ScheduleDate but do not display it in the list\n let currentTime = \"\";\n\n //If we've entered a new time then push the current time and sorted items into organizedTimes and reset variables\n if (currentTime !== time) {\n if (items.length > 0) {\n items.sort((a, b) => a.DisplaySequence - b.DisplaySequence);\n organizedTimes.push({\n Items: items,\n Time: time\n });\n }\n\n time = currentTime;\n items = [itemsList[i]];\n } else {\n items.push(itemsList[i]);\n }\n }\n\n //Sort and push the last time and sorted items\n items.sort((a, b) => a.DisplaySequence - b.DisplaySequence);\n organizedTimes.push({\n Items: items,\n Time: time\n })\n\n return organizedTimes;\n }\n\n getScheduleDateTime(schedule) {\n const scheduleDate = moment(schedule.ScheduleDate);\n const scheduleTime = moment(schedule.ScheduleTime, \"h:mm A\").isValid() && moment(schedule.ScheduleTime, \"h:mm A\");\n return scheduleDate.hour(scheduleTime ? scheduleTime.hour() : scheduleDate.hour()).minute(scheduleTime ? scheduleTime.minute() : scheduleDate.minute()).second(scheduleTime ? scheduleTime.second() : scheduleDate.second()).tz('America/New_York', true).local();\n }\n\n openMeeting(meeting) {\n this.setState({\n meeting: meeting,\n isEditing: true,\n isDirty: false\n }, () => {\n window.scrollTo({\n top: 0,\n behavior: 'smooth'\n })\n })\n }\n\n saveMeetings(meetings, callback) {\n this.setState({\n isSaving: true\n }, () => {\n this.props.actions.saveSchedule(meetings)\n .then((result) => {\n this.props.actions.makeToast([{ message: \"Schedule Saved\", type: \"success\" }]);\n this.setState({\n isSaving: false,\n showPopup: false,\n isDirty: false\n }, () => {\n //Refresh the data\n this.handleSearch(true);\n if (callback)\n callback();\n })\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false,\n });\n });\n })\n }\n\n createMeeting(meeting) {\n this.setState({\n isSaving: true\n }, () => {\n this.props.actions.createSchedule(meeting)\n .then((response) => {\n this.props.actions.makeToast([{ message: \"Schedule Saved\", type: \"success\" }]);\n this.setState({\n isSaving: false,\n isEditing: false,\n isDirty: false\n }, () => {\n this.handleSearch();\n })\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n this.setState({\n isSaving: false,\n });\n });\n })\n }\n\n toggleCancelMeeting(meeting) {\n meeting.IsCancelled = !meeting.IsCancelled\n let params = {\n Schedules: [\n meeting\n ]\n };\n this.saveMeetings(params);\n }\n\n deleteMeeting(meeting, onFail) {\n let promises = [];\n meeting.ScheduleFiles?.forEach(scheduleFile => {\n promises.push(this.handleFileChange(null, scheduleFile, true, null, meeting));\n });\n Promise.all(promises).then(() => {\n meeting.DeletionDate = moment();\n let params = {\n Schedules: [\n meeting\n ]\n };\n this.saveMeetings(params);\n }).catch(() => {\n if (onFail) onFail();\n })\n }\n\n async handleFileChange(e, originalFile, isDelete, callback, deleteMeeting) {\n if (isDelete || e.target.files[0]) {\n let meeting = deleteMeeting ?? { ...this.state.meeting };\n let originalFileIdx = -1;\n let params = '?scheduleID=' + meeting.ScheduleID;\n if (isDelete) params += \"&IsDeleted=true\";\n if (originalFile) params += \"&FileURL=\" + originalFile.FileURL + \"&FileID=\" + originalFile.FileID;\n await this.props.actions.uploadMeetingPdf(params, isDelete ? null : e.target.files[0]).then(() => {\n const res = this.props.schedule.uploadMeetingPdf;\n let update = false;\n if (originalFile) {\n originalFileIdx = meeting.ScheduleFiles.findIndex(f => f.FileURL === originalFile.FileURL);\n if (originalFileIdx > -1) {\n if (isDelete) {\n meeting.ScheduleFiles.splice(originalFileIdx, 1);\n } else {\n meeting.ScheduleFiles[originalFileIdx] = res;\n update = true;\n }\n } else if (!isDelete) {\n meeting.ScheduleFiles.push(res);\n }\n } else if (!isDelete) {\n meeting.ScheduleFiles.push(res);\n }\n this.setState({\n meeting: deleteMeeting ? this.state.meeting : meeting\n }, () => {\n if (callback) callback(meeting.ScheduleFiles, update, originalFileIdx, res.FileURL)\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.props.actions.makeToast([{ message: isDelete ? \"PDF Delete Failed\" : \"PDF Upload Failed\", type: \"failure\" }]);\n return Promise.reject();\n })\n }\n }\n\n onDragEnd(date, result) {\n if (!result.destination) {\n return;\n }\n\n //Exit if there is no change\n if (result.destination.index === result.source.index) {\n return;\n }\n\n let scheduleDate = JSON.parse(JSON.stringify(this.state.organizedSchedule.find(x => x.Date === date)));\n let flatMappedSchedules = scheduleDate.Times.flatMap(t => t.Items);\n let [removed] = flatMappedSchedules.splice(result.source.index, 1);\n flatMappedSchedules.splice(result.destination.index, 0, removed);\n\n //Exit if meetings have been moved out of timely order\n /* let outOfOrder;\n flatMappedSchedules.filter(i => i.ScheduleTime && moment(i.ScheduleTime, \"h:mm A\").isValid()).map(i => i.ScheduleTime).every((time, idx, arr) => {\n const returnValue = !idx || moment(arr[idx - 1], \"h:mm A\").isSameOrBefore(moment(time, \"h:mm A\"));\n if (!returnValue) {\n outOfOrder = arr[idx - 1] + ' cannot be sequenced before ' + time;\n }\n return returnValue;\n })\n if (outOfOrder) {\n this.props.actions.makeToast([{ message: outOfOrder, type: \"failure\" }]);\n return;\n } */\n\n // Reorder the DisplaySequence value too!\n flatMappedSchedules.forEach((element, index) => {\n element.DisplaySequence = index + 1\n });\n\n const organizedDate = this.organizeSchedule(flatMappedSchedules);\n const scheduleDateItems = organizedDate[0].Times.flatMap(t => t.Items);\n\n let params = {\n Schedules: scheduleDateItems\n }\n\n this.setState({\n isSavingDrag: date\n }, () => {\n this.saveMeetings(params, () => {\n this.setState({ isSavingDrag: false })\n });\n })\n }\n\n fetchCsv(showDates) {\n let rows = [];\n let meetingDate, meetingTime, lastDate, lastTime;\n\n showDates.forEach(date => {\n date.Times.forEach(time => {\n time.Items.forEach(item => {\n //Leave Date and/or Time blank if previous meeting takes place at the same date and/or time\n let dateDate = moment(date.Date).format(\"MM/DD/YYYY\");\n meetingDate = !lastDate || !moment(dateDate).isSame(lastDate, 'day') ? dateDate : \"\";\n meetingTime = time.Time !== lastTime ? time.Time : \"\";\n\n rows.push({ Date: meetingDate, Time: item.IsCancelled ? \"Cancelled\" : moment(meetingTime, \"h:mm A\").isValid() ? moment(meetingTime, \"h:mm A\").tz('America/New_York', true).local().format(\"h:mm A\") : meetingTime, Meeting: item.OwnerName, Location: item.RoomDescription, Description: item.Description });\n\n lastDate = this.getScheduleDateTime(item).format(\"MM/DD/YYYY\");\n lastTime = item.ScheduleTime;\n })\n });\n })\n\n let fileName = showDates.length > 1 ? showDates[0].Date + \"-\" + showDates[showDates.length - 1].Date + \"_Schedule.csv\" : showDates[0].Date + \"_Schedule.csv\"\n\n saveAs(new Blob([generateCsv([\"Date\", \"Time\", \"Meeting\", \"Location\", \"Description\"], rows)], { type: \"data:text/csv;charset=utf-8,\" }), fileName);\n }\n\n openScheduleModal() {\n this.setState({\n displayScheduleModal: true\n })\n }\n\n closeScheduleModal() {\n this.setState({\n displayScheduleModal: false\n })\n }\n\n toggleMeetingsCalendarPreview() {\n this.setState({\n displayMeetingsCalendarPreview: !this.state.displayMeetingsCalendarPreview\n })\n }\n\n getPreview(date) {\n this.setState({ gettingPreview: true }, () => {\n this.props.actions.getMeetingsCalendarPreview(\"?startDate=\" + moment(date).format(\"MM/DD/YYYY\"))\n .then(() => {\n if (this.props.schedule.meetingsCalendarPreview !== \"\") {\n this.props.schedule.meetingsCalendarPreview.body.getReader().read().then(({ value }) => {\n const blob = new Blob([value], { type: \"application/pdf\" });\n const urlObj = URL.createObjectURL(blob);\n this.setState({\n pdfSrc: urlObj,\n gettingPreview: false\n });\n }).catch(() => {\n this.setState({ gettingPreview: false })\n })\n } else {\n this.setState({ gettingPreview: false })\n }\n }).catch(() => {\n this.setState({ gettingPreview: false })\n })\n })\n }\n\n componentDidMount() {\n this.setState({\n partner: Boolean(this.props.login.userClaims.resources.find(resource => resource === SCHEDULE_EDITOR))\n })\n\n this.props.actions.getScheduleTypeList().then(() => {\n this.setState({\n scheduleTypeList: Array.from(this.props.schedule.scheduleTypeList, obj => {\n const rObj = {\n ...obj,\n value: obj.ScheduleTypeID,\n label: obj.ScheduleType\n };\n return rObj;\n })\n })\n })\n\n this.props.actions.getMeetingRoomReferences('').then(() => {\n const meetingRoomsList = Array.from(this.props.schedule.meetingRoomReferences, obj => {\n const rObj = {\n ...obj,\n value: obj.VoteRoomID,\n label: obj.Description + ' ' + (obj.RoomNumber || '')\n };\n return rObj;\n });\n this.setState({\n locationOptions: meetingRoomsList\n });\n })\n\n this.props.actions.getSessionList()\n .then(() => {\n let selectedSession = '';\n this.props.session.sessionList.forEach(session => {\n if (session.SessionCode === this.props.nav.session) {\n selectedSession = session;\n }\n });\n\n if (!selectedSession) {\n selectedSession = this.props.session.sessionList.find(s => s.IsDefault);\n }\n\n this.setState({\n sessionOptions: this.props.session.sessionList,\n selectedSession: selectedSession.SessionID\n });\n const sessionParam = \"sessionID=\" + selectedSession.SessionID;\n\n this.getCommittees(sessionParam);\n });\n\n this.handleSearch();\n }\n\n setFormIsDirty(value) {\n this.setState({\n isDirty: value\n })\n }\n\n closeConfirmation() {\n this.setState({\n showConfirmation: false\n })\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n componentDidUpdate(prevProps) {\n if (JSON.stringify(prevProps.login.userClaims.resources) !== JSON.stringify(this.props.login.userClaims.resources)) {\n //Disable/Remove management controls if user logs out or otherwise loses Schedule role\n const isPartner = Boolean(this.props.login.userClaims.resources.find(resource => resource === SCHEDULE_EDITOR));\n this.setState({ partner: isPartner }, () => {\n this.handleSearch();\n })\n }\n }\n\n render() {\n const { isLoaded, organizedSchedule, currentDayIndex, locationOptions, showAllDates, committeeList, scheduleTypeList, meeting, isEditing, partner, isSaving, isSavingDrag, startDate, endDate, keyword, location, displayScheduleModal, displayMeetingsCalendarPreview } = this.state\n //If the option to show all is selected then this array will contain every date. If the option to show one then this array will only contain one item\n const showDates = showAllDates ? organizedSchedule : [organizedSchedule[currentDayIndex]];\n return (\n <div id=\"schedule-page\">\n {this.state.showConfirmation &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content\">\n <p>You have unsaved changes. Are you sure you want to close the form?</p>\n <button className=\"button secondary float-right\" onClick={() => this.closeConfirmation()}>No</button>\n <button className=\"button primary float-right\" onClick={() => this.toggleEditMeeting(true)} style={{ marginRight: \"10px\" }}>Yes</button>\n <br />\n </div>\n </div>\n }\n {displayMeetingsCalendarPreview ?\n <MeetingsCalendarPreview\n toggleMeetingsCalendarPreview={this.toggleMeetingsCalendarPreview}\n pdfSrc={this.state.pdfSrc}\n getPreview={this.getPreview}\n gettingPreview={this.state.gettingPreview}\n />\n :\n <React.Fragment>\n <br />\n {displayScheduleModal &&\n <ScheduleModal\n closeScheduleModal={this.closeScheduleModal}\n />\n }\n <div id=\"schedule-table\">\n <div className=\"inner-grid one-and-three no-margin\">\n <EventFinder\n organizedSchedule={organizedSchedule}\n handleChange={this.handleChange}\n handleSearch={this.handleSearch}\n handleReset={this.handleReset}\n locationOptions={locationOptions}\n isLoaded={isLoaded}\n startDate={startDate}\n endDate={endDate}\n keyword={keyword}\n location={location}\n />\n {isLoaded ?\n <div>\n <div className=\"section-side-padding\">\n <div className=\"header-half\">\n <div style={{ display: \"grid\" }}>\n <h2 style={{ marginBlockStart: '0px', marginBlockEnd: '0px' }}>Schedule of Events</h2>\n {tz !== \"America/New_York\" && <div><small><em>Times are displayed in your local timezone ({moment().tz(tz).format(\"zz\")})</em></small></div>}\n </div>\n <div className=\"align-right meeting-actions\">\n {this.props.login.userClaims.resources.find(resource => resource === SCHEDULE_EDITOR) &&\n <button\n type=\"button\"\n className=\"button\"\n style={{ marginRight: \"10px\", width: \"188px\", padding: \"8px 5px\" }}\n onClick={this.toggleMeetingsCalendarPreview}\n >Meeting Calendar Preview</button>\n }\n {partner &&\n <button\n type=\"button\"\n className=\"button\"\n style={{ marginRight: \"10px\" }}\n onClick={this.toggleEditMeeting}\n >Add Meeting</button>\n }\n <button className=\"button-link\" onClick={this.toggleAllDates}>{showAllDates ? \"Show Day\" : \"Show All\"}</button>\n {showDates[0] != undefined &&\n <React.Fragment>\n <a target=\"_blank\" onClick={() => this.fetchCsv(showDates)} style={{ marginLeft: \"10px\" }}>\n <span title=\"Download events as a spreadsheet\" aria-label=\"Download events as a spreadsheet\" role=\"button\" className=\"icon csv\"></span>\n </a>\n <button title=\"Add selected events to your calendar\" role=\"button\" aria-label=\"Add selected events to your calendar\" className=\"icon calendar\" /* target=\"_blank\" */ style={{ marginLeft: \"10px\" }} onClick={() => this.openScheduleModal()} />\n </React.Fragment>\n }\n </div>\n </div>\n </div>\n {isEditing && partner &&\n <MeetingsForm\n meeting={meeting}\n committeeList={committeeList}\n committeeDropDownOptions={this.state.committeeDropDownOptions || []}\n locationList={locationOptions}\n scheduleTypeList={scheduleTypeList}\n isSaving={isSaving}\n saveMeetings={this.saveMeetings}\n createMeeting={this.createMeeting}\n toggleEditMeeting={this.toggleEditMeeting}\n userClaims={this.props.login.userClaims}\n getSubcommitteeMembers={this.props.actions.getSubcommitteeMembers}\n subcommitteeMembers={this.props.schedule.subcommitteeMembers}\n setFormIsDirty={this.setFormIsDirty}\n isDirty={this.state.isDirty}\n handleFileChange={this.handleFileChange}\n organizedSchedule={this.state.organizedSchedule}\n />}\n {this.state.scheduleError ?\n <div className=\"center\">\n <p>{this.state.scheduleError}</p>\n </div>\n :\n <div className=\"schedule-content-wrapper\">\n {showDates[0] != undefined\n ? showDates.map((currentDay, keyIndex) =>\n <div key={keyIndex}>\n <div className=\"day-wrapper\">\n {!showAllDates &&\n <React.Fragment>\n <div style={{ float: 'left' }}>\n {organizedSchedule[currentDayIndex - 1] &&\n <button aria-label=\"Previous day\" title=\"Previous day\" type=\"button\" onClick={() => this.changeDay(-1)} className=\"icon button-left\"></button>\n }\n </div>\n <div style={{ float: 'right' }}>\n {organizedSchedule[currentDayIndex + 1] &&\n <button aria-label=\"Next day\" title=\"Next day\" type=\"button\" onClick={() => this.changeDay(1)} className=\"icon button-right\"></button>\n }\n </div>\n </React.Fragment>\n }\n <div className=\"center mobile-left\">\n <h4>{moment(currentDay.Date).format('dddd, MMMM Do, YYYY')}</h4>\n </div>\n </div>\n <div className=\"section-side-padding\">\n <div className=\"side-form\">\n {partner ?\n <PartnerSchedule\n currentDay={currentDay}\n session={this.props.nav.session}\n openMeeting={this.openMeeting}\n deleteMeeting={this.deleteMeeting}\n toggleCancelMeeting={this.toggleCancelMeeting}\n onDragEnd={this.onDragEnd}\n isSaving={isSaving}\n isSavingDrag={isSavingDrag}\n calendarList={this.state.calendarList}\n fullCommitteeList={this.state.fullCommitteeList}\n />\n :\n <Schedule\n currentDay={currentDay}\n session={this.props.nav.session}\n calendarList={this.state.calendarList}\n fullCommitteeList={this.state.fullCommitteeList}\n />\n }\n </div>\n </div>\n </div>\n )\n :\n <p style={{ textAlign: \"center\" }}>Nothing Scheduled</p>\n }\n </div>\n }\n </div>\n :\n <div className=\"center-spinner spinner\">Loading...</div>\n }\n </div>\n </div>\n </React.Fragment>\n }\n </div>\n\n );\n }\n}\n\nclass EventFinder extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showSection: window.innerWidth <= 900 ? false : true //900px is when mobile layout is used (set in mobile.scss); collapse by default\n };\n this.toggleSection = this.toggleSection.bind(this);\n this.searchOnEnterPress = this.searchOnEnterPress.bind(this);\n }\n\n searchOnEnterPress(event) {\n if (event.key === 'Enter' && this.props.isLoaded) {\n //Pressing enter while on a react-select will select an option. A search should not happen because of that.\n if (!event.target.id.includes('react-select') && !event.target.className.includes('quick-search') && !event.target.id.includes('description')) {\n this.props.handleSearch();\n }\n }\n }\n\n componentDidMount() {\n document.querySelector('body').addEventListener('keydown', this.searchOnEnterPress);\n }\n\n componentWillUnmount() {\n document.querySelector('body').removeEventListener('keydown', this.searchOnEnterPress);\n }\n\n toggleSection() {\n this.setState(state => ({\n showSection: !state.showSection\n }));\n }\n\n render() {\n const { locationOptions, handleChange, handleSearch, handleReset, startDate, endDate, keyword, location } = this.props;\n\n const customStyles = {\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n },\n dropdownIndicator: base => ({\n ...base,\n padding: '0px 8px'\n })\n }\n\n return (\n <div className=\"section-side-padding\" style={{ paddingBottom: '0' }}>\n <div className=\"dlas-forms side-form event-finder\">\n <div className=\"header flex-row flex-vertical-center\">\n <h3 className=\"center\" style={{ margin: 'auto' }}>Find an Event</h3>\n <button onClick={this.toggleSection} type=\"button\" className={this.state.showSection ? \"arrow-up white-chevron\" : \"arrow-down white-chevron\"}></button>\n </div>\n {this.state.showSection &&\n <div className=\"content\">\n <div>\n <div>\n <label htmlFor=\"start-date-datepicker\">Start Date</label>\n <DatePicker\n selected={startDate}\n onChange={(val) => handleChange(val, \"startDate\")}\n id=\"start-date-datepicker\"\n />\n </div>\n <div>\n <label htmlFor=\"end-date-datepicker\">End Date</label>\n <DatePicker\n isClearable\n selected={endDate}\n onChange={(val) => handleChange(val, \"endDate\")}\n id=\"end-date-datepicker\"\n todayButton=\"Today\"\n />\n </div>\n </div>\n <div>\n <div>\n <label htmlFor=\"keyword-input\">Keyword</label>\n <div>\n <input\n type=\"text\"\n id=\"keyword-input\"\n value={keyword}\n onChange={(e) => handleChange(e.target.value, \"keyword\")}\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"location-dropdown\">Location</label>\n <Select\n id=\"location-dropdown\"\n value={location}\n options={locationOptions}\n isMulti\n onChange={(val) => handleChange(val || [], \"location\")}\n styles={customStyles}\n />\n </div>\n </div>\n <br />\n <div className=\"center flex-row\">\n <button onClick={handleReset} type=\"button\" className=\"button secondary\">Clear</button>\n <button onClick={handleSearch} type=\"button\" className=\"button\">Search</button>\n </div>\n </div>\n }\n </div>\n </div>);\n }\n}\n\nclass PartnerSchedule extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showPopup: false,\n selectedMeeting: {}\n }\n\n this.togglePopup = this.togglePopup.bind(this)\n }\n\n togglePopup(selectedMeeting) {\n this.setState({\n showPopup: !this.state.showPopup,\n selectedMeeting: selectedMeeting\n });\n }\n\n render() {\n const { session, currentDay, openMeeting, deleteMeeting, toggleCancelMeeting, onDragEnd, isSaving, isSavingDrag, calendarList, fullCommitteeList } = this.props;\n return (\n <React.Fragment>\n {this.state.showPopup &&\n <div className='popup'>\n <div className='popup-inner'>\n <p>Are you sure you want to delete this meeting?</p>\n <div className=\"inline-list\">\n <button className=\"button danger\" disabled={isSaving} onClick={() => { deleteMeeting(this.state.selectedMeeting, () => { this.togglePopup({}) }) }}>Yes</button>\n <button className=\"button\" disabled={isSaving} onClick={() => { this.togglePopup({}) }}>No</button>\n </div>\n </div>\n </div>}\n <DragDropContext onDragEnd={result => onDragEnd(currentDay.Date, result)}>\n <Droppable droppableId={currentDay.Date} index={currentDay.Date}>\n {(provided) => (\n <div\n {...provided.droppableProps}\n ref={provided.innerRef}\n >\n {isSavingDrag && isSavingDrag.toString() === currentDay.Date.toString() ? <div className=\"spinner\" /> :\n currentDay.Times.map((time, timeIndex) =>\n time.Items.map((item, itemIndex) =>\n !item.DeletionDate &&\n <Draggable key={!timeIndex ? itemIndex : currentDay.Times.filter((t, idx) => idx < timeIndex).flatMap(t => t.Items).length + itemIndex} draggableId={item.ScheduleID.toString() || (currentDay.Date + '|' + time + '|' + itemIndex)} index={!timeIndex ? itemIndex : currentDay.Times.filter((t, idx) => idx < timeIndex).flatMap(t => t.Items).length + itemIndex}>\n {(provided, snapshot) =>\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n style={getItemStyle(\n snapshot.isDragging,\n provided.draggableProps.style\n )}\n className=\"inner-grid no-grid-column-gap two-col-sidebar-backwards schedule-event\"\n >\n <div className=\"time-wrapper\">\n <span className=\"txt-greyed\">{TIME_REGEX.test(item.ScheduleTime) && item.ScheduleTime}</span>\n </div>\n <div className=\"items-wrapper\">\n <div className=\"schedule-event-grid\">\n <div>\n <button id={\"schedule-dnd-\" + item.ScheduleID} className=\"button draggable\">Drag and drop</button>\n </div>\n <div>\n {item.IsCancelled && <div><b className=\"fail\">CANCELLED</b></div>}\n {item.OwnerName && <div><span className=\"schedule-title\">{item.OwnerName}</span></div>}\n <span>\n {item.RoomDescription && <React.Fragment>{item.RoomDescription + ' ' + (item.RoomNumber || '')}</React.Fragment>}\n {item.RoomDescription && item.OwnerID !== undefined && <span className='mobile-newline'> | </span>}\n {(item.ScheduleType === \"Committee\" || item.ScheduleType === \"Docket\") && item.OwnerID !== undefined &&\n <Link to={`/session-details/${session}/committee-information/${item.CommitteeNumber}/committee-details`} target=\"_blank\">{fullCommitteeList.find(x => x.CommitteeID === item.OwnerID) && fullCommitteeList.find(x => x.CommitteeID === item.OwnerID).ParentCommitteeID !== null ? \"Subcommittee Info\" : \"Committee Info\"}</Link>\n }\n {item.LinkURL !== undefined && item.LinkURL !== \"\" &&\n <React.Fragment>\n {(item.ScheduleType === \"Committee\" || item.ScheduleType === \"Docket\") && item.OwnerID !== undefined\n ? <React.Fragment> | <Link to={item.LinkURL.substr(item.LinkURL.indexOf(\".gov\") + 4, item.LinkURL.length + 1)} target=\"_blank\">Docket Info</Link></React.Fragment>\n : <Link to={item.LinkURL.substr(item.LinkURL.indexOf(\".gov\") + 4, item.LinkURL.length + 1)} target=\"_blank\">Docket Info</Link>\n }\n </React.Fragment>\n }\n </span>\n {!TIME_REGEX.test(item.ScheduleTime) &&\n <div style={{ overflowWrap: 'anywhere', whiteSpace: 'pre-wrap' }}>\n <span>{item.ScheduleTime}</span>\n </div>}\n {item.Description &&\n <div style={{ overflowWrap: 'anywhere', whiteSpace: 'pre-wrap' }}>\n <span>{renderHTML(item.Description)}</span>\n </div>}\n </div>\n <div className=\"schedule-management-controls\">\n <a className=\"icon edit\" onClick={() => openMeeting(item)} />\n <React.Fragment>{item.IsCancelled ? <a className=\"icon blue-checkmark\" onClick={() => toggleCancelMeeting(item)} /> : <a className=\"icon blocked\" onClick={() => toggleCancelMeeting(item)} />} </React.Fragment>\n <a className=\"icon bin\" onClick={() => this.togglePopup(item)} />\n </div>\n </div>\n </div>\n </div>\n }\n </Draggable>\n )\n )}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </React.Fragment>\n );\n }\n}\n\nclass Schedule extends React.Component {\n\n render() {\n const { session, currentDay, calendarList, fullCommitteeList } = this.props;\n return (\n <div className=\"meeting-day\">\n {currentDay.Times.map((time, timeIndex) =>\n time.Items.find(x => x.IsPublic === true) && /* If there is any public meeting in the time display it, otherwise don't show the time. */\n <React.Fragment key={timeIndex}>\n {time.Items.map((item, itemIndex) =>\n item.IsPublic &&\n <div className=\"inner-grid no-grid-column-gap two-col-sidebar-backwards-alt-2 schedule-event\">\n <div className=\"public-time-wrapper\">\n <span className=\"txt-greyed\">{item.ScheduleTime}</span>\n </div>\n <div>\n <div className=\"inner-grid no-grid-column-gap schedule-checkbox-and-content\">\n <div key={itemIndex} className=\"public-schedule-event\">\n {item.IsCancelled && <div><b className=\"fail\">CANCELLED</b></div>}\n <div>\n {item.OwnerName && <div><span className=\"schedule-title\">{item.OwnerName}</span></div>}\n <span>\n {item.RoomDescription && <React.Fragment>{item.RoomDescription + ' ' + (item.RoomNumber || '')}</React.Fragment>}\n {item.RoomDescription && item.OwnerID !== undefined && <span className='mobile-newline'> | </span>}\n {(item.ScheduleType === \"Committee\" || item.ScheduleType === \"Docket\") && item.OwnerID !== undefined &&\n <Link to={`/session-details/${session}/committee-information/${item.CommitteeNumber}/committee-details`} target=\"_blank\">{fullCommitteeList.find(x => x.CommitteeID === item.OwnerID) && fullCommitteeList.find(x => x.CommitteeID === item.OwnerID).ParentCommitteeID !== null ? \"Subcommittee Info\" : \"Committee Info\"}</Link>\n }\n {item.LinkURL !== undefined && item.LinkURL !== \"\" &&\n <React.Fragment>\n {(item.ScheduleType === \"Committee\" || item.ScheduleType === \"Docket\") && item.OwnerID !== undefined\n ? <React.Fragment> | <Link to={item.LinkURL.substr(item.LinkURL.indexOf(\".gov\") + 4, item.LinkURL.length + 1)} target=\"_blank\">Docket Info</Link></React.Fragment>\n : <Link to={item.LinkURL.substr(item.LinkURL.indexOf(\".gov\") + 4, item.LinkURL.length + 1)} target=\"_blank\">Docket Info</Link>\n }\n </React.Fragment>\n }\n </span>\n </div>\n {item.Description && <div style={{ overflowWrap: 'anywhere', whiteSpace: 'pre-wrap' }}><span>{renderHTML(item.Description)}</span></div>}\n </div>\n </div>\n </div>\n </div>\n )}\n </React.Fragment>\n )\n }\n </div>\n\n\n );\n }\n}\n\nclass ScheduleModal extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showInstructions: false\n }\n\n this.close = this.close.bind(this);\n this.toggleInstructions = this.toggleInstructions.bind(this)\n }\n\n close() {\n this.props.closeScheduleModal();\n }\n\n toggleInstructions() {\n this.setState({\n showInstructions: !this.state.showInstructions\n })\n }\n\n render() {\n const icsLink = window.env?.APP_ENV?.toLowerCase() === \"production\" ? \"lis.blob.core.windows.net/cdn/meetings.ics\" : \"liscdn.blob.core.windows.net/cdn/meetings.ics\";\n return (\n <div className=\"schedule-modal\">\n <div id=\"calendar-instructions\" className=\"schedule-modal-content\">\n <p>Add a new calendar in your calendar program that automatically reflects additions and updates to the website calendar.</p>\n <span>Download: </span><br />\n <a href={\"webcal://\" + icsLink}>webcal://{icsLink}</a>\n <br />\n <a href={\"https://\" + icsLink}>https://{icsLink}</a>\n <br />\n <br />\n {this.state.showInstructions\n ? <button type=\"button\" className=\"button-link\" onClick={() => this.toggleInstructions()}>Hide</button>\n : <button type=\"button\" className=\"button-link\" onClick={() => this.toggleInstructions()}>Show Instructions</button>\n }\n {this.state.showInstructions &&\n <div className=\"calendar-instructions\">\n <p>In most cases, just selecting the webcal link will add a new calendar in your calendar application and subscribe to updates.</p>\n <p>To subscribe in Google Calendar or Mozilla Thunderbird - Lightning Calendar, copy the link and paste it into the appropriate address or location field in the calendar application.</p>\n\n <p>For specific instructions, see:</p>\n <ul>\n <li>For specific Outlook instructions, see Office Support: <a href=\"https://support.office.com/en-sg/article/View-and-subscribe-to-Internet-Calendars-7cd5d35a-4a90-4d70-a2f7-f6fadd7e2d9an\">View and subscribe to Internet calendars.</a></li>\n <li>Google Calendar Help: <a href=\"https://support.google.com/calendar/answer/37100?hl=en\">Subscribe to public calendars using the calendar address.</a></li>\n <li>Mozilla Support: <a href=\"https://support.mozilla.org/en-US/kb/adding-a-holiday-calendar\">Adding a holiday [or other] calendar.</a></li>\n <li>On an Android device, you may not be able to subscribe by clicking the webcal link. Subscribe in Google Calendar, and then sync your calendars using a calendar app on your device.</li>\n </ul>\n\n <p>To unsubscribe, in your calendar program, delete the calendar.</p>\n <p>If you use more than one calendar program (for example, Google Calendar and Outlook), you can control which program a browser opens when you subscribe via an iCalendar URL.</p>\n <p>In your browser, follow instructions for how to set which programs handle specific file types and protocols.</p>\n <p>For the .ics file and/or webcal protocol handler, set the calendar program you prefer.</p>\n\n <p>Tip: In Lightning, you may need to use the https:// link, as opposed to webcal://.</p>\n <p>Tip: You can set different .ics and webcal handlers in each browser you use.</p>\n <p>Tip: On the iPhone or iPad, to unsubscribe go to your device Settings. In Mail, Contacts, and Calendars, under Subscribed Calendars, delete the calendar account.</p>\n </div>\n }\n <div>\n <br />\n <button className=\"button secondary\" type=\"button\" onClick={() => this.close()}>Close</button>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { committee, nav, schedule, session, login } = state;\n return {\n committee,\n nav,\n schedule,\n session,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, committeeActionCreators, sessionActionCreators, scheduleActionCreators), dispatch)\n }\n }\n)(PublicSchedule)","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { voteActionCreators } from '../../stores/lis-votes-store';\n\nimport Select from 'react-select';\nimport { memberActionCreators } from '../../stores/lis-members-store';\nimport moment from 'moment-timezone';\nimport { cancelRequest } from '../../services/request.service';\n\nclass PublicVoteSearch extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n memberOptions: [],\n sessionOptions: [],\n voteTypeOptions: [\n { label: 'All', value: 'All' },\n ],\n selectedMembers: '',\n selectedSession: '',\n selectedVoteType: { label: 'All', value: 'All' },\n searchSelectedMember: '',\n searchSelectedSession: '',\n searchSelectedVoteType: '',\n };\n\n this.getMembers = this.getMembers.bind(this);\n this.handleDropdownChange = this.handleDropdownChange.bind(this);\n this.handleSearch = this.handleSearch.bind(this);\n }\n\n componentDidMount() {\n // Get the session list for the session dropdown\n this.props.actions.getSessionList()\n .then(() => {\n if (this.props.session.sessionListError) {\n throw this.props.session.sessionListError.toString();\n }\n let selectedSession = '';\n let sessionList = [...this.props.session.sessionList];\n sessionList.forEach(session => {\n session.value = session.SessionID;\n session.label = session.SessionYear + ' ' + session.DisplayName;\n if (session.SessionCode === this.props.match.params.sessioncode) {\n selectedSession = session;\n }\n });\n this.setState({\n selectedSession: selectedSession,\n sessionOptions: sessionList.reverse(),\n }, () => {\n if (selectedSession) {\n // Get the list of members for the member dropdown\n // Use the selected session's start date\n this.getMembers(selectedSession.SessionID);\n } else {\n this.setState({\n isLoaded: true\n })\n }\n });\n\n\n });\n\n // Get the list of vote type options for the vote type dropdown\n this.props.actions.getVoteTypes()\n .then(() => {\n let voteTypeOptions = this.state.voteTypeOptions;\n this.props.votes.voteTypes.forEach(type => {\n type.label = type.Name;\n type.value = type.VoteTypeID;\n voteTypeOptions.push(type);\n });\n this.setState({\n voteTypeOptions: voteTypeOptions\n });\n });\n\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getMembers(sessionId) {\n this.props.actions.getMemberList('sessionID=' + sessionId)\n .then(() => {\n if (this.props.members.memberListError) {\n throw this.props.members.memberListError.toString();\n }\n let memberList = [...this.props.members.memberList];\n let selectedMember = '';\n memberList.forEach(member => {\n member.label = `(${member.ChamberCode}) ${member.ListDisplayName}`;\n member.value = member.MemberID;\n if (member.MemberNumber === this.props.match.params.membernumber) {\n selectedMember = member;\n }\n });\n this.setState({\n memberOptions: memberList,\n selectedMember: selectedMember,\n isLoaded: true\n }, () => {\n // Do a search if there is a selected member and session\n if (selectedMember) {\n this.handleSearch();\n }\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({\n message: err,\n isLoaded: true\n });\n });\n }\n\n handleDropdownChange(val, key) {\n if (window.env && window.env.HISTORICAL_DATA_REDIRECT && key === 'selectedSession' && val && !val.IsDefault && val.LegacySessionID) {\n this.setState({\n historicalSessionRedirect: (redirect) => {\n if (redirect) {\n let a = document.createElement('a');\n a.target = '_blank';\n a.href = `https://legacylis.virginia.gov`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n this.setState({ historicalSessionRedirect: false })\n }\n })\n return;\n }\n this.setState({\n [key]: val\n });\n if (key === 'selectedSession') {\n this.props.history.push(`/vote-search/${val.SessionCode}`);\n this.getMembers(val.SessionID);\n this.setState({\n selectedMember: ''\n })\n }\n if (key === 'selectedMember') {\n this.props.history.push(`/vote-search/${this.state.selectedSession.SessionCode}/${val.MemberNumber}`);\n }\n }\n\n handleSearch(e) {\n if (this.state.selectedMember && this.state.selectedSession) {\n let params = `?memberId=${this.state.selectedMember.MemberID}&sessionId=${this.state.selectedSession.SessionID}`\n if (this.state.selectedVoteType && this.state.selectedVoteType.value !== 'All') {\n params += `&voteTypeId=${this.state.selectedVoteType.VoteTypeID}`;\n }\n this.setState({\n isSearching: true\n });\n this.props.actions.getMemberVotes(params)\n .then(() => {\n if (this.props.members.memberVotesError) {\n throw this.props.members.memberVotesError.toString();\n }\n this.setState({\n isSearching: false,\n searchSelectedMember: this.state.selectedMember,\n searchSelectedSession: this.state.selectedSession,\n searchSelectedVoteType: this.state.selectedVoteType,\n memberVotes: this.props.members.memberVotes\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({\n message: err,\n isSearching: false\n })\n });\n }\n if (e) {\n e.preventDefault();\n }\n }\n\n render() {\n const customStyles = {\n container: base => ({\n ...base,\n lineHeight: 'normal',\n }),\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n },\n dropdownIndicator: base => ({\n ...base,\n padding: '0px 8px'\n })\n }\n const { isSearching, memberOptions, sessionOptions, voteTypeOptions, selectedMember, selectedSession, selectedVoteType } = this.state;\n if (this.state.message) {\n return (<div className=\"center\">{this.state.message}</div>)\n }\n if (!this.state.isLoaded) {\n return (<div className=\"center-spinner spinner\">Loading...</div>)\n }\n return (\n <div>\n {this.state.historicalSessionRedirect &&\n <div className=\"schedule-modal\">\n <div className=\"schedule-modal-content fit-content center-content\">\n <p>For historical data, please use <b>Legacy LIS</b>, available at <b><a href=\"https://legacylis.virginia.gov\" target=\"_blank\" rel=\"noreferrer\">https://legacylis.virginia.gov</a></b>.</p>\n <p>Click 'Go' to be taken to Legacy LIS, or 'Close' to remain here.</p>\n <div className=\"inline-list\">\n <button className=\"button primary float-right\" onClick={() => this.state.historicalSessionRedirect(true)}>Go</button>\n <button className=\"button secondary float-right\" onClick={() => this.state.historicalSessionRedirect(false)}>Close</button>\n </div>\n <br />\n </div>\n </div>\n }\n <div className=\"dlas-forms side-form\">\n <div className=\"header\">\n <h3 className=\"center\">Find a Member's Votes</h3>\n </div>\n <form>\n <div className=\"inner-grid four\" style={{ backgroundColor: '#f3f5f5', padding: '1em' }}>\n <div>\n <label htmlFor=\"session-dropdown\">Session</label>\n <Select\n id=\"session-dropdown\"\n styles={customStyles}\n options={sessionOptions}\n value={selectedSession}\n onChange={val => this.handleDropdownChange(val, 'selectedSession')}\n />\n </div>\n <div>\n <label htmlFor=\"member-dropdown\">Member</label>\n <Select\n id=\"member-dropdown\"\n styles={customStyles}\n options={memberOptions}\n value={selectedMember}\n onChange={val => this.handleDropdownChange(val, 'selectedMember')}\n />\n </div>\n <div>\n <label htmlFor=\"vote-type-dropdown\">Vote Type</label>\n <Select\n id=\"vote-type-dropdown\"\n styles={customStyles}\n options={voteTypeOptions}\n value={selectedVoteType}\n onChange={val => this.handleDropdownChange(val, 'selectedVoteType')}\n />\n </div>\n <div>\n <br />\n <div>\n <button\n disabled={!selectedMember || !selectedSession || !selectedVoteType || isSearching}\n onClick={this.handleSearch}\n type=\"submit\"\n className=\"button\">Search</button>\n </div>\n </div>\n </div>\n </form>\n </div>\n <br />\n {isSearching ?\n <div className=\"center-spinner spinner\">Searching...</div>\n :\n <React.Fragment>\n {this.state.memberVotes &&\n <VoteSearchResults\n memberVotes={this.state.memberVotes}\n selectedMember={this.state.searchSelectedMember}\n selectedSession={this.state.searchSelectedSession}\n selectedVoteType={this.state.searchSelectedVoteType} />\n }\n </React.Fragment>\n }\n </div>);\n }\n}\n\nclass VoteSearchResults extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showVotes: [],\n hideAll: true\n }\n this.showVotes = this.showVotes.bind(this);\n this.toggleShow = this.toggleShow.bind(this);\n }\n\n showVotes(dateIndex) {\n let showVotes = [...this.state.showVotes];\n showVotes[dateIndex] = !showVotes[dateIndex];\n this.setState({\n showVotes: showVotes\n });\n }\n\n toggleShow() {\n // Votes are hidden by default. Toggle the value of hideAll and set all the values of showVotes to the current value of hideAll\n // So if hideAll is true, then set all of showVotes to true and switch hideAll to false\n const opposite = !this.state.hideAll\n let showVotes = [...this.state.showVotes];\n this.props.memberVotes.VoteResult.forEach((v, index) => {\n showVotes[index] = this.state.hideAll;\n });\n this.setState({\n hideAll: opposite,\n showVotes: showVotes\n })\n }\n\n organizeVotes(voteList) {\n // The votes need to be organized by date\n let organizedVotes = [];\n if (voteList) {\n voteList.sort((a, b) => {\n return new Date(b.VoteDate) - new Date(a.VoteDate);\n });\n let voteArray = [];\n let previousVote = voteList[0];\n voteList.forEach(vote => {\n if (moment(previousVote.VoteDate).format('L') !== moment(vote.VoteDate).format('L')) {\n let newDateContainer = {\n Votes: voteArray,\n Date: previousVote.VoteDate,\n };\n organizedVotes.push(newDateContainer);\n voteArray = [];\n voteArray.push(vote);\n } else {\n voteArray.push(vote);\n }\n previousVote = vote;\n });\n if (voteArray.length > 0) {\n let newDateContainer = {\n Votes: voteArray,\n Date: previousVote.VoteDate,\n };\n organizedVotes.push(newDateContainer);\n }\n }\n return organizedVotes;\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n if (nextProps.memberVotes !== this.props.memberVotes) {\n return true;\n }\n if (nextState !== this.state) {\n return true;\n }\n return false;\n }\n\n render() {\n const { memberVotes, selectedMember, selectedSession, selectedVoteType } = this.props;\n let memberName = '';\n if (selectedMember.ChamberCode === 'S') {\n memberName = \"Senator \";\n }\n if (selectedMember.ChamberCode === 'H') {\n memberName = \"Delegate \";\n }\n memberName += memberVotes.MemberDisplayName;\n const organizedVotes = this.organizeVotes(memberVotes.VoteResult)\n\n return (\n <div id=\"vote-search\">\n <div className=\"header-half\">\n <h2>{memberName}</h2>\n <p>{`${selectedSession.label}: ${selectedVoteType.label} Votes`}</p>\n </div>\n <div className=\"collapsible-table\">\n <div className=\"vote-search\">\n {organizedVotes.length === 0 ?\n <span className=\"center\">No Votes Found</span>\n :\n <React.Fragment>\n <div className=\"flex-row\">\n <div></div>\n {this.state.hideAll ?\n <button onClick={this.toggleShow} type=\"button\" className=\"button-link\">Show All +/-</button>\n :\n <button onClick={this.toggleShow} type=\"button\" className=\"button-link\">Hide All +/-</button>\n }\n </div>\n <hr />\n <div className=\"vote-search-date-item inner-grid two-col-sidebar-backwards\">\n <div className=\"date-column-header\">\n <span className=\"txt-greyed\">Date</span>\n </div>\n <div className=\"section-row inner-grid vote-search-grid-header\">\n <span className=\"txt-greyed\">Bill #</span>\n <span className=\"txt-greyed\">Bill Title</span>\n <span className=\"txt-greyed\">Vote</span>\n <span className=\"txt-greyed\">Type</span>\n <span className=\"txt-greyed\">Action</span>\n <span className=\"txt-greyed center\">Vote Statement</span>\n </div>\n </div>\n </React.Fragment>\n }\n {organizedVotes.map((date, dateIndex) =>\n <React.Fragment key={dateIndex}>\n <hr />\n {this.state.showVotes[dateIndex] ?\n <div className=\"vote-search-date-item flex-row\" style={{ backgroundColor: '#f3f5f5', cursor: 'pointer' }} onClick={() => this.showVotes(dateIndex)}>\n <span style={{ fontWeight: 800 }} className=\"txt-greyed\">{moment(date.Date).format(\"MM/DD/YYYY\")}</span>\n <button aria-expanded={true} className=\"arrow-up\">Hide bills</button>\n </div>\n :\n <div className=\"vote-search-date-item flex-row\" style={{ cursor: 'pointer' }} onClick={() => this.showVotes(dateIndex)}>\n <span style={{ fontWeight: 800 }} className=\"txt-greyed\">{moment(date.Date).format(\"MM/DD/YYYY\")}</span>\n <button aria-expanded={false} className=\"arrow-down\">Show bills</button>\n </div>\n }\n <div className=\"inner-grid two-col-sidebar-backwards\">\n <div className=\"date-column-header\"></div>\n {this.state.showVotes[dateIndex] ?\n <div>\n {date.Votes.map((vote, voteIndex) =>\n <React.Fragment key={voteIndex}>\n <div className=\"inner-grid section-row vote-search-grid\">\n <span>{vote.LegislationNumber ? <Link to={`/bill-details/${selectedSession.SessionCode}/${vote.LegislationNumber}`}>{vote.LegislationNumber}</Link> : \"\"}</span>\n <span title={vote.LegislationNumber ? vote.LegislationDescription : \"\"}>{vote.LegislationNumber ? vote.LegislationDescription : vote.ClassificationName}</span>\n <span>{vote.ResponseCode}</span>\n <span>{vote.VoteType}</span>\n <Link to={`/vote-details/${vote.LegislationNumber ? vote.LegislationNumber : 0}/${selectedSession.SessionCode}/${vote.VoteNumber}`} title={vote.VoteDescription}>{vote.VoteDescription}</Link>\n <span>{vote.VoteStatement && <Link to={`/vote-details/${vote.LegislationNumber ? vote.LegislationNumber : 0}/${selectedSession.SessionCode}/${vote.VoteNumber}`}>Vote Statement</Link>}</span>\n </div>\n {voteIndex !== date.Votes.length - 1 && <hr />}\n </React.Fragment>\n )}\n </div>\n :\n <div></div>\n }\n </div>\n </React.Fragment>\n )}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { members, session, votes } = state;\n return {\n members,\n session,\n votes\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, voteActionCreators, memberActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(PublicVoteSearch)\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport Select from 'react-select';\nimport { memberActionCreators } from '../../stores/lis-members-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\n\nimport { cancelRequest } from '../../services/request.service';\n\nclass PublicMemberLegislation extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: false,\n chamberOptions: [\n { label: 'Delegates', value: 'H' },\n { label: 'Senators', value: 'S' }\n ],\n hideBills: [],\n collapseAll: false,\n showPrefileOnly: false\n };\n\n this.setupDoc = this.setupDoc.bind(this);\n this.handleChamberChange = this.handleChamberChange.bind(this);\n this.toggleAll = this.toggleAll.bind(this);\n this.toggleRow = this.toggleRow.bind(this);\n this.toggleShowPrefile = this.toggleShowPrefile.bind(this);\n }\n\n setupDoc(sessionCode) {\n this.setState({\n isLoaded: false\n });\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n let chamberCode = this.props.match.params.chambercode;\n const sessionData = this.props.session.selectedSession;\n this.props.actions.getMemberLegislation('sessionID=' + sessionData.SessionID + '&chamberCode=' + chamberCode)\n .then(() => {\n if (this.props.members.memberLegislationError) {\n throw this.props.members.memberLegislationError;\n }\n if (this.props.members.memberLegislation.length === 0) {\n throw 'No Legislation Found';\n }\n this.setState({\n isLoaded: true,\n hideBills: new Array(this.props.members.memberLegislation.length).fill(true),\n collapseAll: true\n });\n })\n .catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true,\n message: err.toString()\n });\n console.log(err.toString());\n });\n });\n }\n\n handleChamberChange(value) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/member-legislation/' + value.value);\n }\n\n toggleAll() {\n const opposite = !this.state.collapseAll;\n let hideBills = [...this.state.hideBills];\n hideBills.fill(opposite);\n this.setState({\n collapseAll: opposite,\n hideBills: hideBills\n });\n }\n\n toggleRow(index) {\n let hideBills = [...this.state.hideBills];\n hideBills[index] = !hideBills[index];\n this.setState({\n hideBills: hideBills\n });\n }\n\n toggleShowPrefile() {\n this.setState(state => ({\n showPrefileOnly: !state.showPrefileOnly\n }));\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/member-legislation/' + this.props.match.params.chambercode);\n this.setupDoc(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n if (this.props.match.params.sessioncode) {\n this.props.actions.changeSession(this.props.match.params.sessioncode);\n }\n } else if (this.props.match.params.chambercode !== prevProps.match.params.chambercode) {\n this.setupDoc(this.props.nav.session);\n }\n }\n\n componentDidMount() {\n //Update the session selector component, which will run componentDidUpdate and call setupDoc on its own\n const sessionCode = this.props.match.params.sessioncode\n if (sessionCode) {\n if (this.props.nav.session !== sessionCode) {\n this.props.actions.changeSession(sessionCode)\n } else {\n this.setupDoc(sessionCode);\n }\n }\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { isLoaded, message, chamberOptions, hideBills, collapseAll } = this.state;\n const chamberCode = this.props.match.params.chambercode;\n if (message) {\n return (<div className=\"center\">{message}</div>)\n }\n const filteredMembers = this.props.members.memberLegislation.filter(member => member.ChamberCode === chamberCode)\n return (\n <div>\n <br />\n <div className=\"toolbar minutes-toolbar dlas-forms flex-row\">\n <label htmlFor=\"chamber-dropdown\" className=\"screen-reader-only\">Chamber</label>\n <Select\n value={chamberOptions.find(chamber => chamber.value === this.props.match.params.chambercode)}\n options={chamberOptions}\n id=\"chamber-dropdown\"\n onChange={this.handleChamberChange}\n isDisabled={!isLoaded}\n />\n <div className=\"checkbox\">\n <input id=\"sr-only-prefile\" style={{ verticalAlign: 'bottom' }} onChange={this.toggleShowPrefile} type=\"checkbox\" checked={this.state.showPrefileOnly} />\n <label htmlFor=\"sr-only-prefile\">Only Show Prefile</label>\n </div>\n </div>\n <br />\n {isLoaded ?\n <div className=\"collapsible-table\">\n <div className=\"flex-row\">\n <div></div>\n <button type=\"button\" onClick={this.toggleAll} className=\"button-link\">{collapseAll ? \"Show Bills\" : \"Hide Bills\"} +/-</button>\n </div>\n {filteredMembers.map((member, memberIndex) => {\n const totalBills = member.Legislation.filter(leg => leg.LegislationClass === \"Legislation\").length;\n const prefiledBills = member.Legislation.filter(leg => leg.IsPrefile && leg.LegislationClass === \"Legislation\").length;\n const nonPrefiledBills = member.Legislation.filter(leg => !leg.IsPrefile && leg.LegislationClass === \"Legislation\").length;\n const memberBills = this.state.showPrefileOnly ? member.Legislation.filter(leg => leg.IsPrefile) : member.Legislation;\n return (<div key={memberIndex}>\n <div className={(!hideBills[memberIndex] ? \"opened \" : '') + \"flex-row section-header\"}>\n <div>\n <span>\n <Link to={`/session-details/${this.props.nav.session}/member-information/${member.MemberNumber}/member-details`}>\n {member.MemberDisplayName}\n </Link>\n </span>\n </div>\n <div>\n <div className=\"extra-info\">\n <span>Prefiled: {prefiledBills}/Not Prefiled: {nonPrefiledBills}/Total: {totalBills}</span>\n <button aria-expanded={!!hideBills[memberIndex]} onClick={() => this.toggleRow(memberIndex)} className={hideBills[memberIndex] ? \"arrow-down\" : \"arrow-up\"}>Show bills</button>\n </div>\n </div>\n </div>\n {!hideBills[memberIndex] ?\n <div className=\"section-body\">\n {memberBills.map((leg, legIndex) =>\n <div key={legIndex} className=\"section-row inner-grid small-two-one\">\n <Link to={`/bill-details/${leg.SessionCode}/${leg.LegislationNumber}`}>{leg.LegislationNumber}</Link>\n <span>{leg.Description}</span>\n <span style={{ textAlign: 'right' }} className=\"txt-greyed\">{leg.IsPrefile ? \"Prefiled\" : \"Not Prefiled\"}</span>\n </div>\n )}\n </div>\n :\n <div className=\"section-body\">\n <div className=\"section-row\"></div>\n </div>\n }\n </div>)\n })}\n </div>\n :\n <div className=\"center-spinner spinner\">Loading...</div>\n }\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { members, session, nav } = state;\n return {\n members,\n session,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, memberActionCreators, sessionActionCreators, navActionCreators), dispatch)\n }\n }\n)(PublicMemberLegislation)\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { Link } from 'react-router-dom';\nimport ReactToPrint from \"react-to-print\";\nimport { connect } from 'react-redux';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { communicationsActionCreators } from '../../stores/lis-communications-store';\nimport { cancelRequest } from '../../services/request.service';\n\nimport renderHTML from 'react-render-html';\nimport CommunicationsDetailsComponent from '../../lis-shared/lis-communications/lis-communications-details';\n\nclass PublicCommunicationDetails extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoaded: false,\n communication: '',\n communicationFile: '',\n clerkInfo: {}\n };\n }\n\n componentDidMount() {\n window.scrollTo(0, 0);\n const params = `?referenceNumber=${this.props.match.params.commid}&sessionCode=${this.props.match.params.sessioncode}`;\n this.props.actions.getComm(params)\n .then(() => {\n this.props.actions.getSessionById(this.props.communications.commGet.SessionID);\n const commGet = this.props.communications.commGet;\n if(commGet.CommunicationCategories.length === 0) {\n //If the communication does not have any categories then it is assumed that this is a legacy file and the data needs to be retrieved from file storage.\n const htmlFile = commGet.CommunicationFiles.find(file => file.FileURL.toUpperCase().includes('.HTM'));\n if(htmlFile) {\n this.props.actions.getFile(htmlFile.FileURL)\n .then(() => {\n this.setState({\n communicationFile: this.props.nav.file,\n isLoaded: true\n });\n }).catch(err => {\n if(err !== 'Aborted') {\n throw err.toString();\n }\n });\n }\n }\n // Attempt to retrieve the json file in blob storage to get the signatures\n const jsonFile = commGet.CommunicationFiles.find(file => file.FileURL.toUpperCase().includes('.JSON'));\n if(jsonFile) {\n this.props.actions.getFile(jsonFile.FileURL)\n .then(() => {\n const json = JSON.parse(this.props.nav.file);\n this.setState({\n clerkInfo: {\n ClerkName: json.ClerkName,\n ClerkTitle: json.ClerkTitle,\n FooterSentence: json.FooterSentence\n }\n });\n })\n \n }\n this.setState({\n communication: commGet,\n isLoaded: true\n });\n }).catch(err => {\n if(err === 'Aborted') {\n return;\n }\n this.setState({\n message: 'communication not found: ' + err.toString(),\n isLoaded: true\n });\n });\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n const { selectedSession } = this.props.session;\n const { isLoaded, message, clerkInfo } = this.state;\n let communication = {\n ...this.state.communication,\n ClerkName: clerkInfo.ClerkName,\n ClerkTitle: clerkInfo.ClerkTitle,\n FooterSentence: clerkInfo.FooterSentence\n }\n if (!isLoaded) {\n return (<div className=\"center-spinner spinner\">Loading...</div>)\n }\n if (message) {\n return (<div className=\"center\">{message}</div>)\n }\n return (\n <div className='generic-details-page'>\n <div>\n <ReactToPrint\n trigger={() => <button type=\"button\" className=\"button print float-right\"> Print</button>}\n content={() => this.componentRef}\n pageStyle={\"break-inside: avoid\"} \n />\n </div>\n <div ref={el => (this.componentRef = el)}>\n {this.state.communicationFile ?\n <div className='details-page-data-container'>{renderHTML(this.state.communicationFile)}</div>\n :\n <CommunicationsDetailsComponent\n session={selectedSession}\n communication={communication}\n />\n }\n </div>\n </div>);\n }\n}\n\n\nexport default connect(\n (state) => {\n const { session, nav, communications } = state;\n return {\n session,\n nav,\n communications\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, navActionCreators, communicationsActionCreators), dispatch)\n }\n }\n)(PublicCommunicationDetails)\n","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst chamberStatsSuccess = 'CHAMBER_STATS_SUCCESS';\nconst chamberStatsFailure = 'CHAMBER_STATS_FAILURE';\n\nconst committeeStatsSuccess = 'COMMITTEE_STATS_SUCCESS';\nconst committeeStatsFailure = 'COMMITTEE_STATS_FAILURE';\n\nconst initialState = {\n stat: [],\n statsError: '',\n committeeStats: [],\n committeeStatsError: ''\n};\n\nexport const statActionCreators = {\n\n receiveChamberStats: (content) => ({\n type: chamberStatsSuccess,\n chamberStats: content\n }),\n\n chamberStatsError: (message) => ({\n type: chamberStatsFailure,\n chamberStatsError: message\n }),\n\n getChamberStats: (params) => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_STATS_API_URL) + '/Statistics/api/getchamberstatisticsasync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(statActionCreators.chamberStatsError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(statActionCreators.receiveChamberStats(result[1].ChamberStatistics));\n } else if (result[0] === NO_CONTENT) {\n dispatch(statActionCreators.receiveChamberStats([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n receiveCommitteeStats: (content) => ({\n type: committeeStatsSuccess,\n committeeStats: content\n }),\n\n committeeStatsError: (message) => ({\n type: committeeStatsFailure,\n committeeStatsError: message\n }),\n\n getCommitteeStats: (params) => {\n return dispatch => {\n return publicRequest((API_URL || process.env.REACT_APP_STATS_API_URL) + '/Statistics/api/getcommitteestatisticsasync', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(statActionCreators.committeeStatsError(result[1]));\n return Promise.reject(result[1]);\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(statActionCreators.receiveCommitteeStats(result[1].CommitteeStatistics));\n } else if (result[0] === NO_CONTENT) {\n dispatch(statActionCreators.receiveCommitteeStats([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n }\n};\n\n\nexport const reducer = (state, action) => {\n\n state = state || initialState;\n switch (action.type) {\n case chamberStatsSuccess:\n return Object.assign({}, state, {\n chamberStats: action.chamberStats,\n chamberStatsError: ''\n })\n case chamberStatsFailure:\n return Object.assign({}, state, {\n chamberStatsError: action.statsError\n })\n case committeeStatsSuccess:\n return Object.assign({}, state, {\n committeeStats: action.committeeStats,\n committeeStatsError: ''\n })\n case committeeStatsFailure:\n return Object.assign({}, state, {\n committeeStatsError: action.statsError\n })\n default:\n return state\n }\n};","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { statActionCreators } from '../../stores/lis-statistics-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\n\n\nclass CommitteeStatDetails extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n stats: [],\n sessionData: '',\n totals: ''\n };\n\n this.setupPage = this.setupPage.bind(this);\n }\n\n setupPage(sessionCode) {\n this.setState({\n isLoading: true\n });\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n this.setState({\n sessionData: this.props.session.selectedSession\n }, () => {\n this.props.actions.getCommitteeStats('?sessionId=' + this.state.sessionData.SessionID + '&chambercode=' + this.props.match.params.chambercode)\n .then(() => {\n let totals = {\n ContinuedFromTotal: 0,\n HReferredTotal: 0,\n SReferredTotal: 0,\n HInCommitteeTotal: 0,\n SInCommitteeTotal: 0,\n HInSubCommitteeTotal: 0,\n SInSubCommitteeTotal: 0,\n HReportedTotal: 0,\n SReportedTotal: 0,\n HIncorporatedTotal: 0,\n SIncorporatedTotal: 0,\n HFailedTotal: 0,\n SFailedTotal: 0,\n ContinuedToTotal: 0\n }\n this.props.stats.committeeStats.sort((a, b) => a.CommitteeName.localeCompare(b.CommitteeName))\n this.props.stats.committeeStats.forEach(stat => {\n totals.ContinuedFromTotal += stat.HContinuedFrom += stat.SContinuedFrom || 0;\n totals.HReferredTotal += stat.HReferred || 0;\n totals.SReferredTotal += stat.SReferred || 0;\n totals.HInCommitteeTotal += stat.HInCommittee || 0;\n totals.SInCommitteeTotal += stat.SInCommittee || 0;\n totals.HInSubCommitteeTotal += stat.HInSubCommittee || 0;\n totals.SInSubCommitteeTotal += stat.SInSubCommittee || 0;\n totals.HReportedTotal += stat.HReported || 0;\n totals.SReportedTotal += stat.SReported || 0;\n totals.HIncorporatedTotal += stat.HIncorporated || 0;\n totals.SIncorporatedTotal += stat.SIncorporated || 0;\n totals.HFailedTotal += stat.HFailed || 0;\n totals.SFailedTotal += stat.SFailed || 0;\n totals.ContinuedToTotal += stat.HContinued += stat.SContinued || 0;\n });\n this.setState({\n stats: this.props.stats.committeeStats,\n totals: totals,\n isLoading: false\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoading: false,\n message: this.props.stats.committeeStatsError\n })\n });\n });\n });\n }\n\n componentDidMount() {\n if (this.props.match.params.sessioncode) {\n //Update the session selector component, which will run componentDidUpdate and call setupPage on its own\n if (this.props.nav.session !== this.props.match.params.sessioncode) {\n this.props.actions.changeSession(this.props.match.params.sessioncode)\n } else {\n this.setupPage(this.props.match.params.sessioncode);\n }\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.match.params.chambercode !== prevProps.match.params.chambercode) {\n this.setupPage(this.props.match.params.sessioncode);\n }\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/statistics/committee/' + this.props.match.params.chambercode)\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n if (this.props.match.params.sessioncode) {\n this.props.actions.changeSession(this.props.match.params.sessioncode);\n }\n }\n }\n\n render() {\n if (this.state.isLoading) {\n return (<div aria-label=\"Loading\" className=\"center-spinner spinner\"></div>)\n }\n if (this.state.message) {\n return (<div className=\"center\">{this.state.message}</div>)\n }\n return (\n <div>\n <br />\n <div className=\"full\">\n <table className=\"statistics-table\">\n <caption>\n <h1>\n {this.state.sessionData && <span className=\"statistics-header\">{this.state.sessionData.SessionYear} {this.state.sessionData.DisplayName}</span>}\n <span className=\"statistics-header\">{this.props.match.params.chambercode.toLowerCase() === \"s\" ? \" Senate\" : \" House\"} Committee Statistics</span>\n </h1>\n {this.props.match.params.chambercode.toLowerCase() === \"s\" &&\n <Link to={`/session-details/${this.props.match.params.sessioncode}/statistics/committee/h`}>House Committee Statistics</Link>\n }\n {this.props.match.params.chambercode.toLowerCase() === \"h\" &&\n <Link to={`/session-details/${this.props.match.params.sessioncode}/statistics/committee/s`}>Senate Committee Statistics</Link>\n }\n <span> | </span>\n <Link to={`/session-details/${this.props.match.params.sessioncode}/statistics/status`}>Session Statistics</Link>\n </caption>\n <tbody>\n <tr>\n <th colSpan=\"1\" rowSpan=\"2\"></th>\n {this.state.totals.ContinuedFromTotal > 0 && <th rowSpan=\"2\">Continued From {this.state.sessionData.SessionYear - 1}</th>}\n <th colSpan=\"2\">Referred</th>\n <th colSpan=\"2\">In Committee</th>\n <th colSpan=\"2\">In Subcommittee</th>\n <th colSpan=\"2\">Reported</th>\n <th colSpan=\"2\">Incorporated</th>\n <th colSpan=\"2\">Failed</th>\n {this.state.totals.ContinuedToTotal > 0 && <th rowSpan=\"2\">Continued To {this.state.sessionData.SessionYear + 1}</th>}\n </tr>\n <tr>\n <th>H</th>\n <th>S</th>\n <th>H</th>\n <th>S</th>\n <th>H</th>\n <th>S</th>\n <th>H</th>\n <th>S</th>\n <th>H</th>\n <th>S</th>\n <th>H</th>\n <th>S</th>\n </tr>\n {this.state.stats.map((stat, statIndex) =>\n <tr key={statIndex}>\n <td className=\"homepage-links\"><Link to={`/session-details/${this.props.match.params.sessioncode}/committee-information/${stat.CommitteeNumber}/committee-details`}>{stat.CommitteeName}</Link></td>\n {this.state.totals.ContinuedFromTotal > 0 && <td>{stat.HContinuedFrom + stat.SContinuedFrom}</td>}\n <td>{stat.HReferred}</td>\n <td>{stat.SReferred}</td>\n <td>{stat.HInCommittee}</td>\n <td>{stat.SInCommittee}</td>\n <td>{stat.HInSubCommittee}</td>\n <td>{stat.SInSubCommittee}</td>\n <td>{stat.HReported}</td>\n <td>{stat.SReported}</td>\n <td>{stat.HIncorporated}</td>\n <td>{stat.SIncorporated}</td>\n <td>{stat.HFailed}</td>\n <td>{stat.SFailed}</td>\n {this.state.totals.ContinuedToTotal > 0 && <td>{stat.HContinued + stat.SContinued}</td>}\n </tr>\n )}\n <tr>\n <td>Total for all {this.props.match.params.chambercode.toLowerCase() === \"s\" && \"Senate\"}{this.props.match.params.chambercode.toLowerCase() === \"h\" && \"House\"} Committees</td>\n {this.state.totals.ContinuedFromTotal > 0 && <td>{this.state.totals.ContinuedFromTotal}</td>}\n <td>{this.state.totals.HReferredTotal}</td>\n <td>{this.state.totals.SReferredTotal}</td>\n <td>{this.state.totals.HInCommitteeTotal}</td>\n <td>{this.state.totals.SInCommitteeTotal}</td>\n <td>{this.state.totals.HInSubCommitteeTotal}</td>\n <td>{this.state.totals.SInSubCommitteeTotal}</td>\n <td>{this.state.totals.HReportedTotal}</td>\n <td>{this.state.totals.SReportedTotal}</td>\n <td>{this.state.totals.HIncorporatedTotal}</td>\n <td>{this.state.totals.SIncorporatedTotal}</td>\n <td>{this.state.totals.HFailedTotal}</td>\n <td>{this.state.totals.SFailedTotal}</td>\n {this.state.totals.ContinuedToTotal > 0 && <td>{this.state.totals.ContinuedToTotal}</td>}\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { stats, nav, session } = state;\n return {\n stats,\n nav,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, statActionCreators, navActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(CommitteeStatDetails)\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport { statActionCreators } from '../../stores/lis-statistics-store';\nimport { sessionActionCreators } from '../../stores/lis-session-store';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\n\nclass SessionStatDetails extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n stats: [],\n sessionData: '',\n totals: '',\n billStatusCategoryList: []\n };\n\n this.setupPage = this.setupPage.bind(this);\n }\n\n setupPage(sessionCode) {\n this.setState({\n isLoading: true\n }, () => {\n this.props.actions.getBillStatusCategoryReferences()\n .then(() => {\n let billStatusReferences = [...this.props.bills.billStatusCategoryReferences]\n billStatusReferences.forEach(ref => {\n ref.label = ref.Name\n ref.value = ref.LegislationCategoryID\n });\n this.setState({\n billStatusCategoryList: billStatusReferences,\n }, () => {\n this.props.actions.getSessionByCode(sessionCode).then(() => {\n this.setState({\n sessionData: this.props.session.selectedSession\n }, () => {\n this.props.actions.getChamberStats('?sessionId=' + this.state.sessionData.SessionID)\n .then(() => {\n let totals = {\n ContinuedFromTotal: 0,\n IntroducedTotal: 0,\n InCommitteeTotal: 0,\n PassedHouseTotal: 0,\n PassedSenateTotal: 0,\n PassedTotal: 0,\n IncorporatedTotal: 0,\n FailedTotal: 0,\n PendingTotal: 0,\n ApprovedTotal: 0,\n VetoTotal: 0,\n ContinuedToTotal: 0\n }\n this.props.stats.chamberStats.forEach(stat => {\n totals.ContinuedFromTotal += stat.ContinuedFromLastSession || 0,\n totals.IntroducedTotal += stat.Introduced || 0,\n totals.InCommitteeTotal += stat.InCommittee || 0,\n totals.PassedHouseTotal += stat.PassedHouse || 0,\n totals.PassedSenateTotal += stat.PassedSenate || 0,\n totals.PassedTotal += stat.Passed || 0,\n totals.IncorporatedTotal += stat.Incorporated || 0,\n totals.FailedTotal += stat.Failed || 0,\n totals.PendingTotal += stat.Pending || 0,\n totals.ApprovedTotal += stat.Approved || 0,\n totals.VetoTotal += stat.Veto || 0,\n totals.ContinuedToTotal += stat.ContinuedToNextSession || 0\n })\n this.setState({\n stats: this.props.stats.chamberStats,\n isLoading: false,\n totals: totals\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoading: false,\n message: this.props.stats.chamberStatsError\n })\n });\n });\n\n });\n });\n })\n });\n }\n\n componentDidMount() {\n if (this.props.match.params.sessioncode) {\n //Update the session selector component\n if (this.props.nav.session !== this.props.match.params.sessioncode) {\n this.props.actions.changeSession(this.props.match.params.sessioncode)\n }\n this.setupPage(this.props.match.params.sessioncode);\n }\n }\n\n componentDidUpdate(prevProps) {\n // Setup the page if the global selected session changes. Change the URL to reflect the session change\n if (prevProps.nav.session !== this.props.nav.session) {\n this.props.history.push('/session-details/' + this.props.nav.session + '/statistics/status/')\n this.setupPage(this.props.nav.session);\n } else if (this.props.nav.session !== this.props.match.params.sessioncode) {\n // If the url changes then update the global selected session with whatever the url is\n if (this.props.match.params.sessioncode) {\n this.props.actions.changeSession(this.props.match.params.sessioncode);\n }\n }\n }\n\n render() {\n if (this.state.isLoading) {\n return (<div aria-label=\"Loading\" className=\"center-spinner spinner\"></div>)\n }\n\n const makeLink = (statusCategoryName, currentStatus) => {\n let statusCategoryId;\n if (statusCategoryName) {\n const statusCategory = this.state.billStatusCategoryList.find(category => category.Name.toLowerCase() === statusCategoryName.toLowerCase());\n statusCategoryId = statusCategory ? statusCategory.LegislationCategoryID : 99;\n }\n\n const params = {\n selectedSession: this.props.session ? this.props.session.SessionID : '',\n selectedBillStatusCategory: statusCategoryId,\n currentStatus: currentStatus || false,\n allLegislation: !statusCategoryName ? true : false,\n uniqueSearch: Math.random()\n };\n\n const json = JSON.stringify(params);\n const query = window.btoa(json);\n\n return '/bill-search?q=' + query;\n };\n\n const sessionHeader = this.state.sessionData ? this.state.sessionData.SessionYear + ' ' + this.state.sessionData.DisplayName + ' Statistics' : '';\n\n return (\n <div>\n {!this.state.isLoading ?\n <React.Fragment>\n <br />\n <table className=\"statistics-table\">\n <caption>\n <h1>{sessionHeader}</h1>\n <Link to={`/session-details/${this.props.match.params.sessioncode}/statistics/committee/h`}>House Committee Statistics</Link>\n <span> | </span>\n <Link to={`/session-details/${this.props.match.params.sessioncode}/statistics/committee/s`}>Senate Committee Statistics</Link>\n </caption>\n <tbody>\n <tr className=\"homepage-links\">\n <th>Type</th>\n {this.state.totals.ContinuedFromTotal > 0 && <th><Link to={makeLink(\"Continued from last session\", false)}>Continued from Last Session</Link></th>}\n <th><Link to={makeLink(\"Introduced\", false)}>Introduced</Link></th>\n <th><Link to={makeLink(\"Passed House\", false)}>Passed House</Link></th>\n <th><Link to={makeLink(\"Passed Senate\", false)}>Passed Senate</Link></th>\n <th><Link to={makeLink(\"Passed\", false)}>Passed</Link></th>\n <th><Link to={makeLink(\"Incorporated\", false)}>Incorporated</Link></th>\n <th><Link to={makeLink(\"Failed\", false)}>Failed</Link></th>\n <th><Link to={makeLink(\"Pending\", true)}>Pending</Link></th>\n <th><Link to={makeLink(\"Approved or Enacted\", false)}>Approved</Link></th>\n <th><Link to={makeLink(\"Vetoed\", false)}>Vetoed</Link></th>\n {this.state.totals.ContinuedToTotal > 0 && <th><Link to={makeLink(\"Continued to next session\", true)}>Continued to Next Session</Link></th>}\n </tr>\n {this.state.stats.map(stat =>\n <tr>\n <td>{stat.ChamberCode}.{stat.LegislationTypeCode}{stat.LegislationTypeCode === \"J\" && \".R\"}</td>\n {this.state.totals.ContinuedFromTotal > 0 && <td>{stat.ContinuedFromLastSession}</td>}\n <td>{stat.Introduced}</td>\n <td>{stat.PassedHouse}</td>\n <td>{stat.PassedSenate}</td>\n <td>{stat.Passed}</td>\n <td>{stat.Incorporated}</td>\n <td>{stat.Failed}</td>\n <td>{stat.Pending}</td>\n <td>{stat.Approved}</td>\n <td>{stat.Veto}</td>\n {this.state.totals.ContinuedToTotal > 0 && <td>{stat.ContinuedToNextSession}</td>}\n </tr>\n )}\n <tr>\n <td>Totals</td>\n {this.state.totals.ContinuedFromTotal > 0 && <td>{this.state.totals.ContinuedFromTotal}</td>}\n <td>{this.state.totals.IntroducedTotal}</td>\n <td>{this.state.totals.PassedHouseTotal}</td>\n <td>{this.state.totals.PassedSenateTotal}</td>\n <td>{this.state.totals.PassedTotal}</td>\n <td>{this.state.totals.IncorporatedTotal}</td>\n <td>{this.state.totals.FailedTotal}</td>\n <td>{this.state.totals.PendingTotal}</td>\n <td>{this.state.totals.ApprovedTotal}</td>\n <td>{this.state.totals.VetoTotal}</td>\n {this.state.totals.ContinuedToTotal > 0 && <td>{this.state.totals.ContinuedToTotal}</td>}\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n : <div aria-label=\"Loading\" className=\"center-spinner spinner\" />\n }\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { stats, nav, session, bills } = state;\n return {\n stats,\n nav,\n session,\n bills\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, statActionCreators, navActionCreators, sessionActionCreators, billActionCreators), dispatch)\n }\n }\n)(SessionStatDetails)\n","import React from \"react\";\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { navActionCreators } from \"../../stores/lis-nav-store\";\nimport { Link } from \"react-router-dom\";\n\nclass Unauthorized extends React.Component {\n render() {\n return (\n <div className=\"center\">\n <h2>You do not have permission to view this page.</h2>\n <Link to=\"/home\">Home</Link>\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { nav } = state;\n return {\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators), dispatch)\n }\n }\n)(Unauthorized)","import React from \"react\";\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { navActionCreators } from \"../../stores/lis-nav-store\";\nimport { Link } from \"react-router-dom\";\nimport renderHTML from 'react-render-html';\nimport { collectionActionCreators } from \"../../stores/lis-collection-store\";\nimport moment from \"moment-timezone\";\nimport { sessionActionCreators } from \"../../stores/lis-session-store\";\nimport { authActionCreators } from \"../../stores/lis-auth-store\";\n\nclass WatchlistsComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n sessionOptions: [],\n watchlists: [],\n filteredWatchlists: [],\n filteredWatchlistsValue: \"\",\n nameSort: false,\n descSort: false,\n dateSort: false,\n billNumberSort: false,\n viewCrossReferenceList: false,\n expandedWatchlists: [],\n legislationList: [],\n expandedBills: [],\n filteredBills: [],\n filteredBillsValue: \"\",\n expandAllWatchlists: false,\n expandAllBills: false,\n loadingCollections: true,\n showPopup: false\n }\n\n this.getWatchlists = this.getWatchlists.bind(this);\n this.filterWatchlist = this.filterWatchlist.bind(this);\n this.filterBills = this.filterBills.bind(this);\n this.sortByName = this.sortByName.bind(this);\n this.sortByDesc = this.sortByDesc.bind(this);\n this.sortByDate = this.sortByDate.bind(this);\n this.sortByBillNumber = this.sortByBillNumber.bind(this);\n this.toggleBillList = this.toggleBillList.bind(this);\n this.toggleCrossReferenceList = this.toggleCrossReferenceList.bind(this);\n this.toggleWatchlistList = this.toggleWatchlistList.bind(this);\n this.toggleWatchlist = this.toggleWatchlist.bind(this);\n this.togglePopup = this.togglePopup.bind(this);\n this.deleteWatchlists = this.deleteWatchlists.bind(this);\n this.updateCrossReferenceList = this.updateCrossReferenceList.bind(this);\n }\n\n componentDidMount() {\n if (!this.props.session.sessionList || !this.props.session.sessionList.length) {\n this.props.actions.getSessionList()\n .then(() => {\n this.setState({\n sessionOptions: this.props.session.sessionList\n }, () => {\n this.getWatchlists();\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err)\n });\n } else {\n this.setState({\n sessionOptions: this.props.session.sessionList\n }, () => {\n this.getWatchlists();\n })\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.nav.session != this.props.nav.session) {\n this.setState({ loadingCollections: true }, () => {\n this.getWatchlists();\n })\n }\n }\n\n getWatchlists() {\n if (this.props.nav.session) {\n const selectedSession = this.state.sessionOptions.find(s => s.SessionCode === this.props.nav.session);\n if (selectedSession) {\n this.props.actions.getCollections(\"?SessionID=\" + selectedSession.SessionID)\n .then(() => {\n this.setState({\n watchlists: this.props.collection.collections,\n filteredWatchlists: this.props.collection.collections,\n filteredWatchlistsValue: \"\"\n }, () => {\n this.updateCrossReferenceList();\n })\n })\n }\n }\n }\n\n updateCrossReferenceList() {\n let legislationList = [];\n for (let i = 0; i < this.state.watchlists.filter(w => !w.DeletionDate).length; i++) {\n for (let j = 0; j < this.state.watchlists.filter(w => !w.DeletionDate)[i].WatchListLegislation.length; j++) {\n let legislationIndex = legislationList.findIndex(x => x.LegislationNumber === this.state.watchlists.filter(w => !w.DeletionDate)[i].WatchListLegislation[j].LegislationNumber);\n if (legislationIndex >= 0) {\n legislationList[legislationIndex].watchlists.push(this.state.watchlists.filter(w => !w.DeletionDate)[i]);\n } else {\n let newLegislation = JSON.parse(JSON.stringify(this.state.watchlists.filter(w => !w.DeletionDate)[i].WatchListLegislation[j]));\n newLegislation.watchlists = [this.state.watchlists.filter(w => !w.DeletionDate)[i]];\n legislationList.push(newLegislation);\n }\n }\n }\n\n this.setState({\n legislationList: legislationList,\n loadingCollections: false\n })\n }\n\n filterWatchlist(e) {\n const val = e.target.value.toLowerCase();\n this.setState({\n // Map is used to preserve the original index\n filteredWatchlists: this.state.watchlists.map(coll => {\n if ((coll.Description && coll.Description.toLowerCase().includes(val)) || (coll.Name && coll.Name.toLowerCase().includes(val))) {\n return coll;\n }\n }),\n filteredWatchlistsValue: val\n })\n }\n\n filterBills(e) {\n const val = e.target.value.toLowerCase();\n this.setState({\n // Map is used to preserve the original index\n filteredBills: this.state.legislationList.map(b => {\n if ((b.LegislationNumber && b.LegislationNumber.toLowerCase().includes(val)) || (b.Description && renderHTML(b.Description.toLowerCase()).includes(val))) {\n return b;\n }\n }),\n filteredBillsValue: val\n })\n }\n\n sortByName() {\n this.setState({\n filteredWatchlists: this.state.filteredWatchlists.sort((a, b) => !this.state.nameSort ? a.Name?.localeCompare(b.Name) : b.Name?.localeCompare(a.Name)),\n nameSort: !this.state.nameSort,\n descSort: false,\n dateSort: false\n })\n }\n\n sortByDesc() {\n this.setState({\n filteredWatchlists: this.state.filteredWatchlists.sort((a, b) => !this.state.descSort ? a.Description?.localeCompare(b.Description) : b.Description?.localeCompare(a.Description)),\n descSort: !this.state.descSort,\n nameSort: false,\n dateSort: false\n })\n }\n\n sortByDate() {\n this.setState({\n filteredWatchlists: this.state.filteredWatchlists.sort((a, b) => moment(a.ModificationDate).isBefore(b.ModificationDate) ? this.state.dateSort ? -1 : 1 : this.state.dateSort ? 1 : -1),\n dateSort: !this.state.dateSort,\n nameSort: false,\n descSort: false\n })\n }\n\n sortByBillNumber() {\n this.setState({\n filteredBills: this.state.filteredBills.sort((a, b) => a.LegislationNumber > b.LegislationNumber ? this.state.billNumberSort ? -1 : 1 : this.state.billNumberSort ? 1 : -1),\n legislationList: this.state.legislationList.sort((a, b) => a.LegislationNumber > b.LegislationNumber ? this.state.billNumberSort ? -1 : 1 : this.state.billNumberSort ? 1 : -1),\n billNumberSort: !this.state.billNumberSort\n })\n }\n\n toggleBillList(watchListIDsParam, toggleAll) {\n let watchListIDs;\n\n if (!Array.isArray(watchListIDsParam)) {\n watchListIDs = [watchListIDsParam];\n } else {\n watchListIDs = watchListIDsParam;\n }\n\n let expandedWatchlists = [...this.state.expandedWatchlists];\n\n for (let i = 0; i < watchListIDs.length; i++) {\n if (!expandedWatchlists.find(x => x.WatchListID === watchListIDs[i])) {\n let watchlist = this.state.filteredWatchlists.find(x => x && x.WatchListID === watchListIDs[i]);\n watchlist.expanded = true;\n expandedWatchlists.push(watchlist);\n } else {\n expandedWatchlists.find(x => x.WatchListID === watchListIDs[i]).expanded = toggleAll !== undefined ? toggleAll : !expandedWatchlists.find(x => x.WatchListID === watchListIDs[i]).expanded;\n }\n }\n\n this.setState({\n expandedWatchlists: expandedWatchlists\n })\n }\n\n toggleCrossReferenceList() {\n this.setState({\n viewCrossReferenceList: !this.state.viewCrossReferenceList\n })\n }\n\n toggleWatchlist(watchlistIndex) {\n let watchlists = this.state.filteredWatchlistsValue.length > 0 ? this.state.filteredWatchlists.filter(x => x != undefined) : this.state.watchlists;\n watchlists[watchlistIndex].checked = !watchlists[watchlistIndex].checked;\n\n this.setState({ [this.state.filteredWatchlistsValue.length ? 'filteredWatchlistsValue' : 'watchlists']: watchlists })\n }\n\n togglePopup() {\n this.setState({\n showPopup: !this.state.showPopup\n });\n }\n\n deleteWatchlists() {\n let watchlists = this.state.filteredWatchlistsValue.length > 0 ? this.state.filteredWatchlists.filter(x => x != undefined) : this.state.watchlists;\n let watchlistsToDelete = watchlists.filter(w => w.checked);\n if (watchlistsToDelete.length) {\n this.setState({ deletingWatchlists: true }, () => {\n watchlistsToDelete.forEach(wl => wl.DeletionDate = moment());\n this.props.actions.saveCollections({ WatchLists: watchlistsToDelete })\n .then(() => {\n watchlists = watchlists.filter(wl => !wl.checked && !wl.DeletionDate);\n this.props.actions.makeToast([{ message: \"Delete Successful\", type: \"success\" }]);\n this.setState({\n [this.state.filteredWatchlistsValue.length ? 'filteredWatchlistsValue' : 'watchlists']: watchlists,\n deletingWatchlists: false,\n }, () => {\n this.togglePopup();\n this.updateCrossReferenceList();\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n deletingWatchlists: false\n });\n this.props.actions.makeToast([{ message: \"Delete Failed\", type: \"failure\" }]);\n });\n })\n }\n }\n\n toggleWatchlistList(legislationNumbersParam, toggleAll) {\n let legislationNumbers;\n\n if (!Array.isArray(legislationNumbersParam)) {\n legislationNumbers = [legislationNumbersParam];\n } else {\n legislationNumbers = legislationNumbersParam;\n }\n\n let expandedBills = [...this.state.expandedBills];\n\n for (let i = 0; i < legislationNumbers.length; i++) {\n if (!expandedBills.find(x => x.LegislationNumber === legislationNumbers[i])) {\n let bill = this.state.legislationList.find(x => x.LegislationNumber === legislationNumbers[i]);\n bill.expanded = true;\n expandedBills.push(bill);\n } else {\n expandedBills.find(x => x.LegislationNumber === legislationNumbers[i]).expanded = toggleAll !== undefined ? toggleAll : !expandedBills.find(x => x.LegislationNumber === legislationNumbers[i]).expanded;\n }\n }\n\n this.setState({\n expandedBills: expandedBills\n })\n }\n\n toggleExpandAll(crossRefList) {\n if (crossRefList) {\n let legNumbers = [];\n this.state.legislationList.forEach(x => {\n if (x.watchlists.length > 0) {\n legNumbers.push(x.LegislationNumber)\n }\n })\n this.setState({\n expandAllBills: !this.state.expandAllBills\n }, () => {\n this.toggleWatchlistList(legNumbers, this.state.expandAllBills)\n })\n } else {\n let watchlists = [];\n this.state.filteredWatchlists.forEach(x => {\n if (x && x.WatchListLegislation.length > 0) {\n watchlists.push(x.WatchListID);\n }\n })\n this.setState({\n expandAllWatchlists: !this.state.expandAllWatchlists\n }, () => {\n this.toggleBillList(watchlists, this.state.expandAllWatchlists)\n })\n }\n }\n\n render() {\n let watchlists = this.state.filteredWatchlistsValue.length > 0 ? this.state.filteredWatchlists.filter(x => x != undefined) : this.state.watchlists;\n let bills = this.state.filteredBillsValue.length > 0 ? this.state.filteredBills.filter(x => x != undefined) : this.state.legislationList;\n let sessionCode = this.props.nav.session;\n\n const { isProfilePage } = this.props;\n\n return (\n <div className=\"homepage-links\">\n {this.state.showPopup &&\n <div className='popup'>\n <div className='popup-inner'>\n <p style={{ fontSize: '16px' }}>Are you sure you want to delete? Once a Watchlist is deleted it cannot be restored.</p>\n <div className=\"inline-list\">\n <button className=\"button danger\" disabled={this.state.deletingWatchlists} onClick={this.deleteWatchlists}>Yes</button>\n <button className=\"button secondary\" disabled={this.state.deletingWatchlists} onClick={this.togglePopup}>No</button>\n </div>\n </div>\n </div>\n }\n {!isProfilePage && <h2>{this.state.viewCrossReferenceList ? \"Your Lobbyist-in-a-Box Watchlists: Bill Cross Reference\" : \"Your Lobbyist-in-a-Box Watchlists\"}</h2>}\n {this.state.loadingCollections ? <div className=\"spinner\" /> :\n <React.Fragment>\n <div className=\"dlas-forms\">\n {!this.state.viewCrossReferenceList\n ? <React.Fragment>\n <label htmlFor=\"sr-watchlist-find\" className=\"screen-reader-only\">Find a watchlist by name</label>\n <input\n id=\"sr-watchlist-find\"\n type=\"text\"\n placeholder=\"Find a watchlist\"\n value={this.state.filteredWatchlistsValue}\n onChange={this.filterWatchlist}\n />\n </React.Fragment>\n : <React.Fragment>\n <label htmlFor=\"sr-bill-find\" className=\"screen-reader-only\">Find a bill by bill number or description</label>\n <input\n id=\"sr-bill-find\"\n type=\"text\"\n placeholder=\"Find a bill\"\n value={this.state.filteredBillsValue}\n onChange={this.filterBills}\n />\n </React.Fragment>\n }\n {this.state.legislationList.length > 0 && <button className=\"button primary float-right\" type=\"button\" onClick={() => this.toggleCrossReferenceList()}>{this.state.viewCrossReferenceList ? \"View Watchlists\" : \"View Bill Cross Reference List\"}</button>}\n </div>\n <br />\n <div className=\"flex-row\">\n {!this.state.viewCrossReferenceList ? <button className=\"button primary float-right\" type=\"button\" disabled={!watchlists.find(w => w.checked) || this.state.deletingWatchlists} onClick={this.togglePopup}>{this.state.deletingWatchlists ? watchlists.filter(w => w.checked).length > 1 ? \"Deleting Watchlists\" : \"Deleting Watchlist\" : watchlists.filter(w => w.checked).length > 1 ? \"Delete Watchlists\" : \"Delete Watchlist\"}</button> : <span />}\n {<button className=\"button primary float-right\" type=\"button\" onClick={() => this.toggleExpandAll(this.state.viewCrossReferenceList ? true : false)}>{this.state.viewCrossReferenceList ? this.state.expandAllBills ? \"Collapse All\" : \"Expand All\" : this.state.expandAllWatchlists ? \"Collapse All\" : \"Expand All\"}</button>}\n </div>\n <br />\n <div className=\"quick-table\">\n {this.state.viewCrossReferenceList\n ?\n <div className=\"inner-grid small-one-util table-headers\">\n <label onClick={() => this.sortByBillNumber()} style={{ cursor: \"pointer\" }}>Bill Number</label>\n <label>Bill Description</label>\n <label>Show Watchlists</label>\n </div>\n :\n <div className=\"inner-grid one-two-one table-headers\">\n <label />\n <label onClick={() => this.sortByName()} style={{ cursor: \"pointer\" }}>Watchlist Name</label>\n <label onClick={() => this.sortByDesc()} style={{ cursor: \"pointer\" }}>Description</label>\n <label onClick={() => this.sortByDate()} style={{ cursor: \"pointer\" }}>Last Modified</label>\n <label>Show Bills</label>\n </div>\n }\n {!this.state.viewCrossReferenceList ?\n <div className=\"table-body\">\n {watchlists.map((w, i) => {\n return (\n <div className=\"table-row\" key={i}>\n {w && <div className=\"inner-grid one-two-one\">\n <input id=\"sr-select-all\" disabled={this.state.deletingWatchlists || (w.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\")))} checked={w.checked} onChange={() => this.toggleWatchlist(i)} type=\"checkbox\" style={{ verticalAlign: 'sub' }} />\n {(w.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) ? <span className=\"txt-greyed\">{w.Name} (PAID)</span> : <Link to={`/bill-search?collection=${w.WatchListID}`}>{w.Name}</Link>}\n <label className={(w.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) ? \"txt-greyed\" : \"\"}>{w.Description}</label>\n <label className={(w.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) ? \"txt-greyed\" : \"\"}>{moment(w.ModificationDate).format(\"MM/DD/YYYY hh:mm A\")}</label>\n {(w.IsPaid && !Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) && !Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"))) ? null : w.WatchListLegislation.length > 0 && <button style={{ marginLeft: \"20px\" }} type=\"button\" className={(this.state.expandedWatchlists.find(x => x.WatchListID === w.WatchListID) == undefined || !this.state.expandedWatchlists.find(x => x.WatchListID === w.WatchListID).expanded ? \"arrow-down\" : \"arrow-up\") + \" float-right\"} onClick={() => this.toggleBillList(w.WatchListID)}></button>}\n </div>\n }\n {this.state.expandedWatchlists.find(x => x.WatchListID === w.WatchListID) != undefined && this.state.expandedWatchlists.find(x => x.WatchListID === w.WatchListID).expanded &&\n <ul>\n {w.WatchListLegislation.map((l, i) => {\n return (\n <li className=\"inner-grid two-col-sidebar-tiny-backwards\" style={{ marginBottom: '5px' }}>\n <a target=\"_blank\" key={i} className=\"watchlist-ref-link\" style={{ textAlign: 'right' }} href={\"/bill-details/\" + sessionCode + \"/\" + l.LegislationNumber}>{l.LegislationNumber}</a>\n <span>{l.Description}</span>\n </li>\n )\n })}\n </ul>\n }\n </div>\n )\n })}\n </div>\n :\n <div className=\"table-body\">\n {bills.map((l, i) => {\n return (\n <div className=\"table-row\" key={i}>\n <div className=\"inner-grid small-one-util\" key={i}>\n {<Link to={\"/bill-details/\" + sessionCode + \"/\" + l.LegislationNumber}>{l.LegislationNumber}</Link>}\n <label>{renderHTML(l.Description)}</label>\n {l.watchlists.length > 0 && <button style={{ marginLeft: \"40px\" }} type=\"button\" className={(this.state.expandedBills.find(x => x.LegislationNumber === l.LegislationNumber) != undefined && !this.state.expandedBills.find(x => x.LegislationNumber === l.LegislationNumber).expanded ? \"arrow-down\" : \"arrow-up\") + \" float-right\"} onClick={() => this.toggleWatchlistList(l.LegislationNumber)}></button>}\n </div>\n {this.state.expandedBills.find(x => x.LegislationNumber === l.LegislationNumber) != undefined && this.state.expandedBills.find(x => x.LegislationNumber === l.LegislationNumber).expanded &&\n <ul>\n {l.watchlists.map((w, i) => {\n return (\n <li>\n <a target=\"_blank\" key={i} className=\"watchlist-ref-link\" href={\"/bill-search?collection=\" + w.WatchListID}>{w.Name}</a> - <span>{w.Description}</span>\n </li>\n )\n })}\n </ul>\n }\n </div>\n )\n })}\n </div>\n }\n </div>\n <br />\n {!isProfilePage && <Link to={\"/bill-search\"}>Return to Bill Search</Link>}\n </React.Fragment>}\n </div >\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { login, nav, collection, session } = state;\n return {\n login,\n nav,\n collection,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, navActionCreators, collectionActionCreators, sessionActionCreators), dispatch)\n }\n }\n)(WatchlistsComponent)","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from '../../../stores/lis-auth-store';\nimport { developersActionCreators } from '../../../stores/lis-developers-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport WatchlistsComponent from '../../../lis-public/components/lis-watchlists';\n\nclass ProfileForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n apiKeys: [],\n apiKeyIsLoading: true\n };\n\n this.getApiKeys = this.getApiKeys.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n }\n\n componentDidMount() {\n this.getApiKeys();\n }\n\n getApiKeys() {\n this.setState({ apiKeyIsLoading: true })\n this.props.actions.getPartnerKey()\n .then(() => {\n this.setState({\n apiKeys: this.props.developers.partnerKey,\n apiKeyIsLoading: false\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n this.setState({\n apiKeyIsLoading: false\n });\n });\n }\n\n handleCopy(key, element) {\n navigator.clipboard.writeText(key);\n element.disabled = true;\n const delay = ms => new Promise(res => setTimeout(res, ms));\n element.textContent = 'Copied to clipboard!'\n delay(3000).then(() => {\n element.textContent = \"Copy\"\n element.disabled = false;\n });\n }\n\n render() {\n const { userProfile } = this.props.login;\n let email = userProfile.email || \"\";\n if (email.includes(\"#\")) {\n email = email.replace(/#([^#]*)$/, '@$1');\n email = email.replace(\"@dlasva.onmicrosoft.com\", '');\n }\n const canCreateMultipleWatchlists = Boolean(this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) || Boolean(this.props.login.userClaims.resources.find(resource => resource === \"PaidLegislationCollectionsAuthor\" || resource === \"All\"));\n\n return (\n <div className=\"dlas-forms\">\n <div className=\"public-details\">\n <div>\n <h2>My Profile</h2>\n </div>\n <div>\n <h3>Name</h3>\n <p>{userProfile.name}</p>\n <br />\n <h3>Email</h3>\n <p>{email}</p>\n <br />\n <h3>{canCreateMultipleWatchlists ? \"Watchlists\" : \"Watchlist\"}</h3>\n {\n <WatchlistsComponent isProfilePage />\n }\n <br />\n <h3>{this.state.apiKeys.length > 1 ? 'API Keys' : 'API Key'}</h3>\n {this.state.apiKeyIsLoading ?\n <div className=\"spinner\"></div>\n :\n this.state.apiKeys.length > 0 ?\n this.state.apiKeys.map((key, idx) =>\n <div key={idx}>\n <span style={{ fontSize: '14px', marginRight: '5px' }}>{key.APIKey}</span>\n <button className=\"button\" type=\"button\" style={{ padding: '3px 5px' }} onClick={(e) => this.handleCopy(key.APIKey, e.target)}>Copy</button>\n </div>\n )\n :\n <p>Your email ({`${email}`}) is not currently associated with an API key. Learn more about API keys <a target=\"blank\" rel=\"noreferrer\" style={{ fontSize: '14px' }} href={'/developers'}>here</a>.</p>\n }\n </div>\n <br />\n <div>\n <h3>Account Settings</h3>\n <Link to={'/change-password'} style={{ fontSize: '14px', textDecoration: \"none\" }}>Change Password</Link>\n </div>\n </div>\n </div>\n );\n\n }\n};\n\nexport default connect(\n (state) => {\n const { login, developers, session, nav } = state;\n return {\n login,\n developers,\n session,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, developersActionCreators, sessionActionCreators, navActionCreators), dispatch)\n }\n }\n)(ProfileForm);\n\n\n\n\n\n","import React from \"react\";\n\nclass PrivacyComponent extends React.Component {\n render() {\n return (\n <div>\n\n <p className=\"bold\">Virginia Division of Legislative Automated Systems</p>\n\n <p className=\"bold\">Internet Privacy Policy Statement and Disclaimer</p>\n <p>(Last updated on September 3, 2024)</p>\n\n <p className=\"bold\">Privacy Information</p>\n <p>It is the policy of the Commonwealth of Virginia that personal information about citizens will be collected only to the extent necessary to provide the service or benefit desired; that only appropriate information will be collected; that the citizen shall understand the reason the information is collected and be able to examine their personal record which is maintained by the Virginia Division of Legislative Automated Systems (DLAS).</p>\n\n <p>This document explains how DLAS gathers information on its web site (http://lis.virginia.gov), and with whom and under what conditions the agency shares this information. The following is intended to explain the agency's current Internet privacy practices but shall not be construed as a contractual promise. DLAS reserves the right to amend its Internet Privacy Policy Statement at any time without notice.</p>\n\n <p className=\"bold\">Information Collection</p>\n <p>Virginia law requires that state bodies not collect personal information about citizens unless it is required to provide services for the citizen. When personal information is collected, it must be protected from unauthorized access, use or disclosure, and DLAS is required to provide a prescribed procedure by which you may learn the purpose for which information has been recorded and how the agency will use and disseminate it.</p>\n\n <p className=\"bold\">In General</p>\n <p>DLAS does not capture personal information about any visitor to its site without their permission. When you browse the agency's site without logging on to any of the interactive online services, you do so anonymously. Personal information, such as your name, address, phone number, or e-mail address, is not collected as you browse. Information, such as your domain name, Internet Protocol number, browser type, and date and time of your visit, is collected, but not tied to your personal identity. DLAS uses this information to track the number of customers who visit the site and identify the most popular pages so that the agency can improve site content and accessibility.</p>\n\n <p className=\"bold\">Online Transactions</p>\n <p>Though personal information may be required either by law or in order for DLAS to provide a requested service, in doing so the agency is subject to the requirements for administering information systems as established in the Government Data Collection and Dissemination Practices Act, Chapter 38 of Title 2.2 of the Code of Virginia. A different agency or entity, whose practices are not under the control of DLAS, may regulate pages that appear after you click on a link. When you log on to one of the agency's current online services, such as “Lobbyist in a Boxâ€, personal information that you submit is captured to enable you to conduct business with DLAS. In addition, the agency collects the following information about your visit: Internet Protocol address, browser type, the name of the domain from which you access the Internet, and the date and time of your visit. This additional information allows the agency to track the number of customers who visit our site and identify the most popular pages so that it can improve site content and accessibility. The personal information you provide is required to enable you to complete various transactions with the agency online and for DLAS to deliver the requested services. Once registered with DLAS, you are eligible to request additional services that may require you to provide additional personal information. DLAS only collects, retains and uses personal information when it believes it is essential, and allowed by law, to conduct business and provide products and services. Should you not desire to provide the requested personal information, DLAS will not be able to provide you with online services.</p>\n\n <p>Personal information that you provide to the agency is safeguarded according to the laws of the Commonwealth of Virginia. Information that you provide on the online surveys is used to improve the online services that the agency offers and to determine your level of satisfaction with the DLAS site and services. This information is not stored with any other records DLAS may have of your transactions with the agency.</p>\n\n <p className=\"bold\">Contacting Us</p>\n <p>When visiting the site, DLAS encourages you to contact us if you have any questions, comments, or concerns, or would like a return call. DLAS will request your name, the subject of your question or comment, and your e-mail address or telephone number. This information is used solely to respond to your inquiry. If you would like the agency to mail you materials, DLAS will request your mailing address so that it may provide the appropriate materials. Personal information that you provide to the DLAS is safeguarded according to the laws of the Commonwealth of Virginia.</p>\n\n <p className=\"bold\">Information Access</p>\n <p>Any personal information that is collected and retained by DLAS is maintained in compliance with the Government Data Collection and Dissemination Practices Act, Chapter 38 of Title 2.2 of the Code of Virginia. The agency does not share, sell or trade e-mail addresses, information collected on surveys or any other information about its online customers to any entity except as provided for or required by Chapter 38 of Title 2.2 of the Code of Virginia, the Virginia Freedom of Information Act, or other law. Under FOIA, any records in DLAS’ possession at the time of a Freedom of Information Request might be subject to being inspected by or disclosed to members of the public. If necessary, DLAS may disclose user information if it has reason to believe that disclosing such information is necessary to identify, contact, or bring legal action against an individual who attempts, even unintentionally, to unauthorized access to DLAS information or to disrupt our web site.</p>\n\n <p className=\"bold\">Use of \"Cookies\"</p>\n <p>In certain applications, user information is stored as \"cookies,\" which are then sent back and stored on your hard drive. Cookies allow the agency to save the information that you input while progressing through an online transaction. If your browser is not configured to accept cookies, you will still be able to access the information on the web site, but you may not be able to complete many of the online transactions. No user information is gathered through cookies except for that needed to run the specific application.</p>\n\n <p className=\"bold\">Security</p>\n <p>DLAS maintains security standards and procedures regarding unauthorized access to customer information to prevent unauthorized removal or alteration of data. When you browse public areas of the DLAS web site, none of your personal information is captured or stored by the agency. DLAS protects its records in accordance with its obligations as defined by applicable Virginia statues, including, but not limited to, the Government Data Collection and Dissemination Practices Act, the Virginia Freedom of Information Act, and by any applicable U.S. federal laws.</p>\n\n <p className=\"bold\">Information Accuracy and Your Rights</p>\n <p>DLAS has established procedures to ensure that information is as accurate and current as is practical to enable us to conduct business with you. Although the agency strives to do things right the first time, it also responds to requests to correct inaccurate information in a timely manner. You have the right to review the record that DLAS maintains about you in order to verify its accuracy. You may do this by contacting the individual listed below. If you find errors in your personal record, or desire that the agency purge your data from its records, you must contact the individual listed below. DLAS employee access to personally identifiable information is restricted to only those employees who need access in order to perform their assigned duties.</p>\n\n <p className=\"bold\">Contact Us</p>\n <p>DLAS welcomes your comments and invites you to contact us if you have any questions or concerns:\n <br />Virginia Division of Legislative Automated Systems\n <br />Old City Hall\n <br />1001 East Broad Street, Suite 210\n <br />Richmond, VA 23219\n <br />email: <a href=\"mailto:LIS@dlas.virginia.gov\">LIS@dlas.virginia.gov</a>\n </p>\n\n <p className=\"bold\">Disclaimer</p>\n\n <p>The Virginia Division of Legislative Automated Systems (DLAS) provides links to web sites that are not controlled, maintained, or regulated by DLAS or any organization affiliated with DLAS, and as such DLAS is NOT responsible for the content of those web sites. Use of information obtained from those web sites is voluntary, and reliance on that information should only be undertaken after an independent review of its accuracy. Reference at those web sites to any specific commercial product, process, or service by trade name, trademark, or otherwise DOES NOT constitute or imply endorsement, recommendation, or preference by DLAS. The agency tries to screen all sites included on its web site, but cannot control the content they possess. Any inappropriate information or links they have on their site that pertains to DLAS, or related activities, should be reported to DLAS and can be emailed to <a href=\"mailto:LIS@dlas.virginia.gov\">LIS@dlas.virginia.gov</a>.</p>\n\n </div>\n )\n }\n}\n\nexport default PrivacyComponent","import React from \"react\";\nimport { Link } from \"react-router-dom\"\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { developersActionCreators } from \"../../../stores/lis-developers-store\";\n\nclass DevsPortal extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n docList: ''\n }\n }\n\n componentDidMount() {\n this.props.actions.getDocList(\"?IsPartner=false\");\n }\n\n render() {\n return (\n <div>\n <div className=\"alert alert-warning\"><p>API usage is authorized and validated for 2025 session data only. The General Assembly has not authorized the usage of data from sessions prior to 2025 to be extracted with this API toolset. If you require data prior to the 2025 session, please use <a href=\"https://legacylis.virginia.gov\">legacylis.virginia.gov</a> via CSV download. Once the General Assembly has authorized the data for use, you will be notified.</p></div>\n <h1>LIS Developers Portal</h1>\n <p>If you are a developer interested in obtaining data from LIS you may register for your own LIS API key. An LIS API key will give you access to more than 40 APIs. To register for your own API key click the link below.</p>\n <Link to=\"/apiregistration\" className=\"doc-link\">Complete LIS API Key Registration here.</Link>\n <p>Below are links to the API documentation. We believe you will find the documentation transparent and convenient. To view the terms of service, <Link to=\"/tos\" className=\"doc-link\">click here</Link>. To view the documentation in Postman, <a href=\"https://documenter.getpostman.com/view/6722140/2sA3e4B9hg\" className=\"doc-link\">click here</a>.</p>\n <h3>Available LIS API Services</h3>\n {this.props.developers.docList.length > 0 && this.props.developers.docList.map((b, i) => {\n return (\n <React.Fragment key={i}><Link to={{ pathname: \"/developers/\" + b.ApiName }} className=\"doc-link\">{b.ApiName}</Link><br /></React.Fragment>\n )\n })}\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { developers } = state;\n return {\n developers\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators), dispatch)\n }\n }\n)(DevsPortal)","import React from \"react\";\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { RedocStandalone } from \"redoc\";\nimport { developersActionCreators } from \"../../../stores/lis-developers-store\";\nimport { navActionCreators } from \"../../../stores/lis-nav-store\";\n\nclass DocumentComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.backToList = this.backToList.bind(this);\n }\n\n componentDidMount() {\n this.props.actions.getDoc(\"?ApiName=\" + this.props.match.params.docName, false);\n }\n\n backToList() {\n window.location.href = \"/developers\"\n }\n\n render() {\n return (\n <div style={{ marginTop: \"20px\" }}>\n <a onClick={this.backToList} style={{ cursor: \"pointer\" }}>Back to List</a>\n {this.props.developers.doc != '' ?\n <RedocStandalone\n spec={JSON.parse(this.props.developers.doc)}\n options={{\n nativeScrollbars: false,\n theme: {\n colors: {\n primary: {\n main: \"#34495e\"\n },\n http: {\n get: \"#4BCA81\"\n },\n responses: {\n error: {\n color: \"#fb4f4f\"\n },\n success: {\n color: \"#4BCA81\"\n }\n },\n success: {\n main: \"#4BCA81\"\n },\n error: {\n main: \"#fb4f4f\"\n }\n },\n typography: {\n fontFamily: \"Lato\",\n fontWeight: \"400\",\n fontSize: \"14px\",\n lineHeight: \"1.4\",\n color: \"#333\",\n code: {\n fontSize: \"13px\",\n fontFamily: \"consolas\"\n },\n headings: {\n fontFamily: \"Lato\",\n fontWeight: \"400\",\n color: \"#34495e\"\n },\n links: {\n color: \"#3498db\",\n visited: \"#3498db\",\n hover: \"#196090\"\n },\n optimizeSpeed: true\n },\n sidebar: {\n backgroundColor: \"#F1F1F1\"\n },\n rightPanel: {\n backgroundColor: \"#34495e\"\n },\n spacing: {\n sectionHorizontal: 8,\n sectionVertical: 4\n }\n },\n lazyRendering: true\n }}\n />\n :\n <div><span className=\"small-spinner\"></span></div>\n }\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { developers, nav } = state;\n return {\n developers,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators, navActionCreators), dispatch)\n }\n }\n)(DocumentComponent)","import React from \"react\";\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { developersActionCreators } from \"../../../stores/lis-developers-store\";\nimport { navActionCreators } from \"../../../stores/lis-nav-store\";\n\nconst emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nclass KeyRegistration extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n email: \"\",\n isSubmitting: false,\n emailError: ''\n }\n\n this.checkEmail = this.checkEmail.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.submit = this.submit.bind(this);\n }\n\n checkEmail() {\n const email = this.state.email.toLowerCase();\n\n if (!emailRegex.test(email)) {\n this.setState({\n emailError: 'A valid email is required'\n }, () => {\n this.props.actions.makeToast([{ message: this.state.emailError, type: \"failure\" }])\n });\n return true;\n }\n this.setState({\n emailError: ''\n });\n }\n\n handleChange(state, value) {\n this.setState({\n [state]: value\n })\n }\n\n submit() {\n this.setState({\n isSubmitting: true\n }, () => {\n let error = false\n error = this.checkEmail();\n\n if (!error) {\n let params = \"\";\n\n params = params + \"?emailAddress=\" + encodeURIComponent(this.state.email);\n\n this.props.actions.submitKeyRegistration(params)\n .then(() => {\n //No need to reset isSubmitting because the user will be redirected\n this.props.actions.makeToast([{ message: \"Your registration was successful. You will receive a confirmation email shortly.\", type: \"success\", long: true }])\n //Give the user time to read the toast, then forward to the homepage\n setTimeout(() => { window.location.href = \"/home\"; }, 5000);\n })\n .catch(() => {\n this.props.actions.makeToast([{ message: this.props.developers.keyRegistrationError, type: \"failure\" }])\n })\n } else {\n this.setState({\n isSubmitting: false\n })\n }\n })\n }\n\n render() {\n const { email, isSubmitting } = this.state;\n\n return (\n <div>\n <div className=\"alert alert-warning\"><p>API usage is authorized and validated for 2025 session data only. The General Assembly has not authorized the usage of data from sessions prior to 2025 to be extracted with this API toolset. If you require data prior to the 2025 session, please use <a href=\"https://legacylis.virginia.gov\">legacylis.virginia.gov</a> via CSV download. Once the General Assembly has authorized the data for use, you will be notified.</p></div>\n <form className=\"dlas-forms key-registration-form\">\n <h3>LIS API Key Registration</h3>\n <p>Enter your email address here and submit the form. You will receive an email containing a link that you can use to complete your API key registration.</p>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"email\">Email</label>\n <input\n id=\"email\"\n type=\"text\"\n value={email}\n onChange={(e) => this.handleChange(\"email\", e.target.value)}\n />\n </div>\n <div className=\"inner-grid reverse-short-one-three\">\n <div />\n <div className=\"align-right\">\n <button onClick={this.submit} disabled={isSubmitting || !email} type=\"button\" className=\"button\">Submit</button>\n </div>\n </div>\n </form>\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, developers } = state;\n return {\n nav,\n developers\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators, navActionCreators), dispatch)\n }\n }\n)(KeyRegistration)","import React from \"react\";\nimport moment from 'moment-timezone';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { developersActionCreators } from \"../../../stores/lis-developers-store\";\nimport { navActionCreators } from \"../../../stores/lis-nav-store\";\n\nconst phoneRegex = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/im;\nconst urlRegex = /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\+=&;%@.\\w_]*)#?(?:[\\w]*))?)/\n\nclass KeyConfirmation extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n isSubmitting: false,\n phoneError: '',\n urlError: '',\n name: '',\n organization: '',\n phone: '',\n url: '',\n agree: false\n }\n\n this.checkPhone = this.checkPhone.bind(this);\n this.checkUrl = this.checkUrl.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.submit = this.submit.bind(this);\n }\n\n checkPhone() {\n if (!phoneRegex.test(this.state.phone)) {\n this.setState({\n phoneError: 'Invalid Phone Number'\n }, () => {\n this.props.actions.makeToast([{ message: this.state.phoneError, type: \"failure\" }])\n });\n return true;\n }\n this.setState({\n phoneError: ''\n });\n }\n\n checkUrl() {\n if (!urlRegex.test(this.state.url)) {\n this.setState({\n urlError: 'Invalid URL'\n }, () => {\n this.props.actions.makeToast([{ message: this.state.urlError, type: \"failure\" }])\n });\n return true;\n }\n this.setState({\n urlError: ''\n });\n }\n\n handleChange(state, value) {\n this.setState({\n [state]: value\n })\n }\n\n submit() {\n this.setState({\n isSubmitting: true\n }, () => {\n let error = false\n if (this.state.phone.length > 0) {\n error = this.checkPhone();\n }\n if (this.state.url.length > 0) {\n error = this.checkUrl();\n }\n\n if (!error && this.state.name.length > 0 && this.state.phone.length > 0) {\n let body= {};\n\n body.ContactName = this.state.name;\n body.OrganizationName = this.state.organization;\n body.Phone = this.state.phone;\n body.Url = this.state.url;\n body.HashedWord = this.props.match.params.params.split(\"/\")[0]\n body.EulaDate = moment(new Date()).format('MM/DD/YYYY')\n\n this.props.actions.submitConfirmKeyRegistration(body)\n .then(() => {\n //Don't need to reset isSubmitting because the user will be redirected\n this.props.actions.makeToast([{ message: \"Your registration is now complete. You will receive an email with more details shortly.\", type: \"success\", long: true }])\n //Give the user time to read the toast, then forward to the homepage\n setTimeout(() => { window.location.href = \"/home\"; }, 5000);\n })\n .catch(() => {\n this.setState({\n isSubmitting: false\n }, () => {\n this.props.actions.makeToast([{ message: this.props.developers.keyRegistrationError, type: \"failure\" }])\n })\n })\n } else {\n this.setState({\n isSubmitting: false\n })\n }\n })\n }\n\n render() {\n const { name, organization, phone, url, isSubmitting, agree } = this.state;\n\n return (\n <div>\n <form className=\"dlas-forms key-registration-form\">\n <h3>Complete LIS API Key Registration</h3>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"name\">Name*</label>\n <input\n id=\"name\"\n type=\"text\"\n value={name}\n onChange={(e) => this.handleChange(\"name\", e.target.value)}\n />\n </div>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"organization\">Organization</label>\n <input\n id=\"organization\"\n type=\"text\"\n value={organization}\n onChange={(e) => this.handleChange(\"organization\", e.target.value)}\n />\n </div>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"url\">Organization URL</label>\n <input\n id=\"url\"\n type=\"text\"\n value={url}\n onChange={(e) => this.handleChange(\"url\", e.target.value)}\n />\n </div>\n <div className=\"inner-grid short-one-three\">\n <label htmlFor=\"phone\">Phone Number*</label>\n <input\n id=\"phone\"\n type=\"text\"\n value={phone}\n onChange={(e) => this.handleChange(\"phone\", e.target.value)}\n />\n </div>\n <div className=\"inner-grid reverse-short-one-three\">\n <div>\n <label>By checking this box you agree to the <a href=\"/tos\" className=\"doc-link\">terms of service</a>.</label>\n <input\n type=\"checkbox\"\n checked={agree}\n onClick={(e) => this.handleChange(\"agree\", !agree)}\n />\n </div>\n <div className=\"align-right\">\n <button onClick={this.submit} disabled={isSubmitting || (!name || !phone || !agree)} type=\"button\" className=\"button\">Submit</button>\n </div>\n </div>\n </form>\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, developers } = state;\n return {\n nav,\n developers\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators, navActionCreators), dispatch)\n }\n }\n)(KeyConfirmation)","import React from \"react\";\n\nclass TermsOfService extends React.Component {\n constructor(props) {\n super(props)\n\n }\n\n render() {\n return (\n <div>\n <h1>LIS API Terms of Service</h1>\n <p>These Terms of Service (“Termsâ€) apply when you use any of its APIs (collectively, the “Servicesâ€) that links or refers to the Terms. These terms are a legal contract between you and the Division of Legislative Automated Systems (“DLAS,†“we†or “usâ€) so it is important that you review them carefully before using the Services. Your use of the Services indicates that you agree to follow and be bound by the Terms. If you do not agree to the Terms, do not access or use the Services.</p>\n <h3>1. General</h3>\n <p>We may change the Terms or modify any features of the Services at any time at our sole discretion. The most current version of the Terms can be viewed by clicking on the “Terms of Service†link at the top of the “For Developers†page. If you continue to use the Services after changes are posted you will be deemed to have accepted the change.</p>\n <h3>2. Compliance With Applicable Laws</h3>\n <p>As a condition of your access to and use of the Services, you agree that you will not use the Services for any purpose that is unlawful or prohibited by these Terms and that you will comply with all applicable laws and any conditions or restrictions imposed by these terms. The Services are offered for your personal and non-commercial use only, and you are prohibited from using, and are expressly not granted the right to use, the Services for any other purpose.</p>\n <h3>3. Privacy</h3>\n <p>By using the Services, you indicate that you understand the information collection, use, and disclosure practices described in the Privacy Policy.</p>\n <h3>4. Prohibited Conduct</h3>\n <p>You may not access or use, or attempt to access or use, the Services to take any action that could harm us or any third party, interfere with the operation of the Services, or use the Services in a manner that violates any laws. For example, and without limitation, you may not:</p>\n <ul>\n <li>Make use of the contents of the Services in any manner that constitutes an infringement of our rights or the rights of other users or third parties.</li>\n <li>Access parts of the Services to which you are not authorized, or attempt to circumvent any restrictions imposed on your use or access of the Services.</li>\n <li>Take any action that imposes an unreasonable or disproportionately large load on our network or infrastructure.</li>\n <li>Use any device, software, or routine to interfere or attempt to interfere with the proper working of the Services or any activity conducted on the Services.</li>\n <li>Attempt to decipher, decompile, disassemble, or reverse-engineer any of the software comprising or in any way making up a part of the Services.</li>\n <li>Engage in any other conduct that restricts or inhibits any other person from using the Services.</li>\n <li>Take any action that violates or threatens our system or network security.</li>\n </ul>\n <p>Violations of these Terms may result in civil or criminal liability. We may investigate violations of these Terms and we may also work with law enforcement authorities to prosecute users who violate the Terms.</p>\n <h3>5. Registration and Security</h3>\n <p>To register for Services, you will create login credentials by providing an email address to us and by selecting a password. You also provide us certain information during the registration process. Each login is for a single user only. You are not allowed to share or disclose your login credentials with any other user or person. We may cancel or suspend your access to the Services if you share your credentials.</p>\n <p>You will be responsible for all usage and activity on your account, including use of the account by any third party authorized by you to use your login credentials, and for all charges for any goods or services. You are also responsible for all statements made or materials posted under your account, including liability for harm caused by such statements or materials. You may not transfer, sell, or otherwise assign your rights or obligations under these Terms.</p>\n <p>You must meet the minimum age of digital consent in your country (13 years old in the United States of America) to use the Services. Any fraudulent, abusive, or otherwise illegal activity may be grounds for termination of your account, at our sole discretion, and we may refer you to appropriate law enforcement agencies.</p>\n <p>DLAS maintains security standards and procedures regarding unauthorized access to customer information to prevent unauthorized removal or alteration of data. DLAS protects its records in accordance with its obligations as defined by applicable Virginia statutes, including, but not limited to, the Government Data Collection and Dissemination Practices Act, the Virginia Freedom of Information Act, and by any applicable U.S. federal laws.</p>\n <h3>6. Charges for Services</h3>\n <p>We may charge for access to portions of the Services or to the Services as a whole, and we reserve the right at any time to change the amount we charge for such access or subscriptions that include authorization to access the Services. In such an event, we will notify you in advance, and give you an opportunity to subscribe (or un-subscribe) to the Service(s). More information about any such subscriptions can be found on the appropriate locations of the Services. You shall pay all applicable taxes relating to use of the services, and recognize that any fees to third parties that may be required for you to receive the service (such as mobile data plans and text-message charges) are not included in the cost of the services.</p>\n <h3>7. Third-Party Content and Links to Third-Party Websites</h3>\n <p>The Services may contain links to websites that are not controlled, maintained, or regulated by DLAS or any organization affiliated with DLAS, and as such DLAS is NOT responsible for the content of those websites (“Linked Sitesâ€). Use of information obtained from those web sites is voluntary, and reliance on that information should only be undertaken after an independent review of its accuracy. Reference at those web sites to any specific commercial product, process, or service by trade name, trademark, or otherwise DOES NOT constitute or imply endorsement, recommendation, or preference by DLAS. The agency tries to screen all sites included on its web site, but cannot control the content they possess.</p>\n <h3>8. Disclaimer of Warranty and Limitation of Liability</h3>\n <p>DLAS attempts to maintain the highest accuracy of content on its website. However, DLAS makes no claims, promises or guarantees about the accuracy, completeness, or adequacy of the contents of the Services and expressly disclaims all liability, whether direct or indirect, for any loss or damage arising out of use, reference to, or reliance on any information presented on or by the Services.</p>\n <p>DLAS makes no warranty, representations, express or implied (a) that the information provided through the Services will be free from error, omission, interruption, defect or delay in operation, or from technical inaccuracies or typographical errors, (b) that the services will be available at any particular time or location (c) that defects or errors in the services will be corrected, or (d) that the content on the services are free of viruses or other harmful components. Any information on the Services is subject to change without notice, and DLAS disclaims all responsibility for the Services. We reserve the right to correct any errors or omissions in the Services. We also reserve the right to change, suspend or discontinue the availability of any Services at any time with or without notice. We provide the Services and associated documentation \"as is\" and you use them at your own risk. Further, there is no warranty that the Services will meet your needs or requirements or the needs or requirements of any other person.</p>\n <h3>9. Termination</h3>\n <p>DLAS may terminate this agreement for any reason at any time. DLAS reserves the right, in its sole discretion, to restrict, suspend, or terminate your access to and use of the Service, with or without prior notice. Otherwise applicable sections of the Terms shall survive termination. In addition to any termination rights, we reserve the right to enforce and prosecute any violations of these Terms.</p>\n </div>\n )\n }\n}\n\nexport default TermsOfService;","import React from \"react\";\nimport { Link } from \"react-router-dom\"\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { developersActionCreators } from \"../../../stores/lis-developers-store\";\n\nclass AdminDevsPortal extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n docList: ''\n }\n }\n\n componentDidMount() {\n this.props.actions.getDocList(\"?IsPartner=true\");\n }\n\n render() {\n return (\n <div>\n <h1>LIS Admin Developers Portal</h1> \n {this.props.developers.docList.length > 0 && this.props.developers.docList.map((b, i) => {\n return (\n <React.Fragment key={i}><Link to={{ pathname: \"/admin-developers/\" + b.ApiName }} className=\"doc-link\">{b.ApiName}</Link><br /></React.Fragment>\n )\n })}\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { developers } = state;\n return {\n developers\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators), dispatch)\n }\n }\n)(AdminDevsPortal)","import React from \"react\";\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { RedocStandalone } from \"redoc\";\n\nimport { developersActionCreators } from \"../../../stores/lis-developers-store\";\nimport { navActionCreators } from \"../../../stores/lis-nav-store\";\n\nclass AdminDocumentComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.backToList = this.backToList.bind(this);\n }\n\n componentDidMount() { \n this.props.actions.getDoc(\"?ApiName=\" + this.props.match.params.docName, true);\n }\n\n backToList() {\n window.location.href = \"/admin-developers\"\n }\n\n render() {\n return (\n <div style={{ marginTop: \"20px\" }}>\n <a onClick={this.backToList} style={{cursor: \"pointer\"}}>Back to List</a>\n {this.props.developers.doc != '' ?\n <RedocStandalone\n spec={JSON.parse(this.props.developers.doc)}\n options={{\n nativeScrollbars: false,\n theme: {\n colors: {\n primary: {\n main: \"#34495e\"\n },\n http: {\n get: \"#4BCA81\"\n },\n responses: {\n error: {\n color: \"#fb4f4f\"\n },\n success: {\n color: \"#4BCA81\"\n }\n },\n success: {\n main: \"#4BCA81\"\n },\n error: {\n main: \"#fb4f4f\"\n }\n },\n typography: {\n fontFamily: \"Lato\",\n fontWeight: \"400\",\n fontSize: \"14px\",\n lineHeight: \"1.4\",\n color: \"#333\",\n code: {\n fontSize: \"13px\",\n fontFamily: \"consolas\"\n },\n headings: {\n fontFamily: \"Lato\",\n fontWeight: \"400\",\n color: \"#34495e\"\n },\n links: {\n color: \"#3498db\",\n visited: \"#3498db\",\n hover: \"#196090\"\n },\n optimizeSpeed: true\n },\n sidebar: {\n backgroundColor: \"#F1F1F1\"\n },\n rightPanel: {\n backgroundColor: \"#34495e\"\n },\n spacing: {\n sectionHorizontal: 8,\n sectionVertical: 4\n }\n },\n lazyRendering: true\n }}\n />\n :\n <div><span className=\"small-spinner\"></span></div>\n }\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { developers, nav } = state;\n return {\n developers,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, developersActionCreators, navActionCreators), dispatch)\n }\n }\n)(AdminDocumentComponent)","import React from 'react';\nimport { Route } from 'react-router';\nimport AdminDevsPortal from './lis-admin-developers-portal';\nimport AdminDocumentComponent from './lis-admin-document';\n\nclass AdminDocs extends React.Component {\n\n render() { \n\n return (\n <div> \n <Route exact path={`${this.props.match.path}`} component={AdminDevsPortal} />\n <Route exact path={`${this.props.match.path}/:docName`} component={AdminDocumentComponent} />\n </div>\n )\n }\n}\n\nexport default AdminDocs;","import React from \"react\"\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { Link, withRouter } from 'react-router-dom';\nimport { navActionCreators } from '../../stores/lis-nav-store';\nimport moment from 'moment-timezone';\n\nclass Footer extends React.Component {\n render() {\n return (\n <div className={this.props.location.pathname === \"/\" || this.props.location.pathname.includes(\"/home\") ? \"footer-wrapper home\" : \"footer-wrapper\"} >\n <div className=\"footer\">\n <div>\n <Link to=\"/home\">LIS Home</Link>\n <a href=\"mailto:LIS@dlas.virginia.gov\">Website Feedback</a>\n {this.props.login && this.props.login.userClaims.roles.find(x => x === \"Admin\"/* \"APIDocumentation\" */) ? <a href=\"/admin-developers\">For Developers</a> : <a href=\"/developers\">For Developers</a>}\n <Link to=\"/privacy\">Privacy Policy</Link>\n <Link to=\"/data-files\">Data Files</Link>\n </div>\n <div>\n <span>{\"© Copyright Commonwealth of Virginia \" + moment().format(\"YYYY\") + \". All rights reserved. Site developed by the \"}<a href=\"http://dlas.virginia.gov/\">Division of Legislative Automated Systems (DLAS)</a></span>\n </div>\n </div>\n </div>\n )\n }\n}\n\nconst FooterWrapper = connect(\n (state) => {\n const { nav, login } = state;\n return {\n nav,\n login\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators), dispatch)\n }\n }\n)(Footer)\n\nexport default withRouter(FooterWrapper)","import React from 'react';\nimport ReactTable from 'react-table';\n\nclass ConfigurationsTable extends React.Component {\n\n getTdProps = (state, rowInfo, instance) => {\n if (rowInfo) {\n //if we're showing differences for this row, get the associated admin assignment so we can compare accordingly\n let associatedAdminAssignment;\n const { uniqueIdentifier } = this.props;\n if (instance.id && this.props.adminAssignments && this.props.showDifferences && this.props.showDifferences[rowInfo.original[uniqueIdentifier]]) {\n associatedAdminAssignment = this.props.adminAssignments.find(aca => aca[uniqueIdentifier] === rowInfo.original[uniqueIdentifier]);\n }\n\n //If this is the CategoryCode column, we need to set the value for filtering to include the chamber in case they want to say \"BRREF (H)\" for example\n //otherwise, if they entered \"BRREF (H)\" as a filter, it will not return any rows since they are all techincally just \"BRREF\" whether H or S\n let originalValue = rowInfo.original[instance.id];\n let associatedAdminValue = associatedAdminAssignment && associatedAdminAssignment[instance.id] !== undefined ? associatedAdminAssignment[instance.id] : undefined;\n if (instance.id === \"CategoryCode\" && this.props.categories && this.props.uniqueCategoryIdentifier) {\n const associatedRowCategoryCodeHasMultipleChambers = this.props.categories.filter(c => c.CategoryCode === rowInfo.original.CategoryCode);\n if (associatedRowCategoryCodeHasMultipleChambers.length > 1) {\n originalValue += \" (\" + associatedRowCategoryCodeHasMultipleChambers.find(c => c[this.props.uniqueCategoryIdentifier] === rowInfo.original[this.props.uniqueCategoryIdentifier]).ChamberCode + \")\"\n }\n\n //if we have an associated admin assignment (which also means we are displaying both and comparing), then and only then also do the same logic as above for the associated admin value\n if (associatedAdminAssignment) {\n const associatedRowAdminCategoryCodeHasMultipleChambers = this.props.categories.filter(c => c.CategoryCode === associatedAdminAssignment.CategoryCode);\n if (associatedRowAdminCategoryCodeHasMultipleChambers.length > 1) {\n associatedAdminValue += \" (\" + associatedRowAdminCategoryCodeHasMultipleChambers.find(c => c[this.props.uniqueCategoryIdentifier] === associatedAdminAssignment[this.props.uniqueCategoryIdentifier]).ChamberCode + \")\"\n }\n }\n }\n return {\n style: {\n //if it's new, always keep it to the same color; otherwise, if we're comparing against the associated admin assignment, show red or green based on equality comparison result\n 'backgroundColor': rowInfo.original.new ? 'rgba(0,0,0,.025)' : this.props.showDifferences[rowInfo.original[uniqueIdentifier]] && instance.id ? associatedAdminValue !== originalValue ? '#ff9797' : 'rgba(91, 178, 114, 0.5)' : '',\n //set the bottom border a little larger for the 'new' top row to make it appear differently than the rest of the rows\n 'borderBottomWidth': rowInfo.original.new ? '2px' : '1px',\n }\n }\n }\n return {};\n }\n\n render() {\n const { isLoaded, header, assignments, newAssignment, columns, sort, categories, uniqueCategoryIdentifier } = this.props;\n return (\n <div>\n <h3 className=\"no-margin-top margin-bottom-twentyfive\">{header}</h3>\n <div>\n <ReactTable\n loading={!isLoaded}\n resizable={false}\n filterable={true}\n data={newAssignment ? [newAssignment, ...assignments] : assignments}\n columns={columns}\n getTdProps={this.getTdProps}\n getTheadProps={() => ({\n style: { position: 'sticky', top: '0px', zIndex: 5 }\n })}\n getTheadFilterThProps={(finalState, rowInfo, column, instance) => {\n if (column.Header !== finalState.columns[finalState.columns.length - 1].Header)\n return ({ style: { borderRight: '1px solid #fff' } })\n else\n return {}\n }}\n getTheadThProps={(finalState, rowInfo, column, instance) => sort ? ({\n onClick: () => sort(column)\n }) : () => null}\n defaultFilterMethod={(filter, row, column) => {\n const id = filter.pivotId || filter.id\n //always show the insertable/new assignment row\n const isNewRow = newAssignment && row._original && row._original.new;\n //allow filtering by chamber of category code if present\n let rowValue = row[id];\n if (id === \"CategoryCode\" && row._original && categories && uniqueCategoryIdentifier) {\n const associatedRowCategoryCodeHasMultipleChambers = categories.filter(c => c.CategoryCode === row._original.CategoryCode);\n if (associatedRowCategoryCodeHasMultipleChambers.length > 1) {\n rowValue += \" (\" + associatedRowCategoryCodeHasMultipleChambers.find(c => c[uniqueCategoryIdentifier] === row._original[uniqueCategoryIdentifier]).ChamberCode + \")\"\n }\n }\n return rowValue !== undefined ? isNewRow || String(rowValue).toLowerCase().includes(filter.value.toLowerCase()) : false\n }}\n defaultPageSize={20}\n className=\"-striped -highlight overflow-visible\"\n style={{ overflow: 'visible' }}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default ConfigurationsTable\n\n\n\n\n\n\n\n","import React from 'react';\nimport ReactTooltip from 'react-tooltip';\nimport Select from 'react-select';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { calendarActionCreators } from \"../../stores/lis-calendar-store\";\nimport { navActionCreators } from \"../../stores/lis-nav-store\";\nimport ConfigurationsTable from './lis-configurations-table';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\n\nconst EVENT = 0;\nconst CHAMBER = 1;\nconst TYPE = 2;\nconst CLASS = 3;\nconst PASSED = 4;\nconst UNCONTESTED = 5;\nconst CATEGORY = 6;\n\nconst uniqueIdentifier = \"CalendarAssignmentID\";\nconst uniqueCategoryIdentifier = \"CalendarCategoryTypeID\";\nconst categoryChamberIdentifier = \"calendarCategoryChamber\";\n\nconst requiredFields = [\"EventCode\", \"LegislationChamberCode\", \"LegislationTypeCode\", \"CategoryCode\"];\n\nconst newAssignmentFreshValues = {\n CategoryCode: null,\n EventCode: null,\n p_LegislationDescription: null,\n LegislationClass: null,\n LegislationTypeCode: null,\n LegislationChamberCode: null,\n IsPassed: null,\n IsUncontested: null,\n [categoryChamberIdentifier]: null,\n new: true\n};\n\nclass CalendarConfigurations extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n assignments: [],\n adminAssignments: [],\n categories: [],\n legislationClassOptions: [],\n loadedCategories: false,\n loadedAssignments: false,\n loadedAdminAssignments: false,\n loadedLegislationClassOptions: false,\n categoriesError: false,\n assignmentsError: false,\n legislationClassOptionsError: false,\n adminAssignmentsError: false,\n newAssignment: newAssignmentFreshValues,\n duplicates: [],\n showDifferences: {},\n saving: {},\n editing: {},\n showAllDifferences: false,\n filteringMismatches: false,\n assignmentMismatches: []\n };\n\n this.getCategories = this.getCategories.bind(this);\n this.getAssignments = this.getAssignments.bind(this);\n this.getAdminAssignments = this.getAdminAssignments.bind(this);\n this.getLegislationClasses = this.getLegislationClasses.bind(this);\n this.handleAssignmentChange = this.handleAssignmentChange.bind(this);\n this.sort = this.sort.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.showDifferences = this.showDifferences.bind(this);\n this.buttonText = this.buttonText.bind(this);\n this.checkDuplicates = this.checkDuplicates.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.getUneditedAssignment = this.getUneditedAssignment.bind(this);\n this.toggleDifferences = this.toggleDifferences.bind(this);\n this.findDifferences = this.findDifferences.bind(this);\n }\n\n componentDidMount() {\n this.getCategories();\n this.getAssignments();\n this.getAdminAssignments();\n this.getLegislationClasses();\n }\n\n getCategories() {\n this.setState({ loadedCategories: false }, () => {\n this.props.actions.getCalendarCategoriesReferences('')\n .then(() => {\n this.setState({\n loadedCategories: true,\n categories: [...this.props.calendar.calendarCategoriesReferences].sort((a, b) => a.ChamberCode.localeCompare(b.ChamberCode) || a.CategoryCode.localeCompare(b.CategoryCode))\n });\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n console.error(err);\n this.setState({ loadedCategories: true, categories: [], categoriesError: true })\n });\n });\n }\n\n getAssignments() {\n this.setState({ loadedAssignments: false }, () => {\n this.props.actions.getCalendarAssignments().then(() => {\n let assignments = JSON.parse(JSON.stringify(this.props.calendar.calendarAssignments));\n assignments.sort((a, b) => a.CategoryCode.localeCompare(b.CategoryCode))\n\n this.setState({\n loadedAssignments: true,\n assignments\n })\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n console.error(err);\n this.setState({ loadedAssignments: true, assignments: [], assignmentsError: true })\n })\n });\n }\n\n getAdminAssignments() {\n this.setState({ loadedAdminAssignments: false }, () => {\n this.props.actions.getAdminCalendarAssignments().then(() => {\n let adminAssignments = JSON.parse(JSON.stringify(this.props.calendar.adminCalendarAssignments));\n\n this.setState({\n loadedAdminAssignments: true,\n adminAssignments\n })\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n console.error(err);\n this.setState({ loadedAdminAssignments: true, adminAssignments: [], adminAssignmentsError: true })\n })\n });\n }\n\n getLegislationClasses() {\n this.setState({ loadedLegislationClassOptions: false }, () => {\n this.props.actions.getLegislationClasses().then(() => {\n let legislationClassOptions = [...this.props.bills.legislationClasses];\n legislationClassOptions.forEach(legClass => {\n legClass.label = legClass.LegislationClass;\n legClass.value = legClass.LegislationClassID;\n });\n\n this.setState({ loadedLegislationClassOptions: true, legislationClassOptions });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({ loadedLegislationClassOptions: true, legislationClassOptions: [], legislationClassOptionsError: true })\n });\n })\n }\n\n handleAssignmentChange(uid, key, value) {\n let assignments = [...this.state.assignments];\n let assignment;\n if (uid) {\n assignment = assignments.find(ca => ca[uniqueIdentifier] === uid);\n } else {\n assignment = { ...this.state.newAssignment }\n }\n switch (key) {\n case EVENT:\n assignment.EventCode = value.label;\n break;\n case CHAMBER:\n assignment.LegislationChamberCode = value ? value.label : null;\n break;\n case TYPE:\n assignment.LegislationTypeCode = value.label;\n break;\n case PASSED:\n assignment.IsPassed = value.label;\n break;\n case CLASS:\n assignment.LegislationClass = value ? value.LegislationClass : null;\n assignment.LegislationClassID = value ? value.LegislationClassID : null;\n break;\n case UNCONTESTED:\n assignment.IsUncontested = value.label;\n break;\n case CATEGORY:\n assignment[uniqueCategoryIdentifier] = value[uniqueCategoryIdentifier];\n assignment.CategoryCode = value.CategoryCode;\n assignment[categoryChamberIdentifier] = value.ChamberCode;\n break;\n }\n\n let duplicates = [...this.state.duplicates];\n //if there is an event code and legislationchambercode selected, this is enough to show the user the associated legislationdescription\n if (assignment.EventCode && assignment.LegislationChamberCode !== null) {\n const referenceEvent = [...this.props.billEventOptions].find(b => b.EventCode === assignment.EventCode && b.LegislationChamberCode === assignment.LegislationChamberCode && (assignment.IsPassed === null || assignment.IsPassed === b.IsPassed));\n assignment.p_LegislationDescription = referenceEvent ? referenceEvent.LegislationDescription : null;\n\n //if they have chosen an option for every required field (except category code), check to see if this is a duplicate entry, in which case prevent saving\n if (requiredFields.every(val => assignment[val] !== null) && this.checkDuplicates(assignment)) {\n duplicates.push({ uid: assignment[uniqueIdentifier] })\n } else {\n //there isn't a duplicate or there isn't enough values yet to determine; remove it from the duplicates if it's there\n duplicates = duplicates.filter(d => d.uid !== assignment[uniqueIdentifier])\n }\n } else {\n //there isn't enough info to determine the legislation description of the event, so set to null\n assignment.p_LegislationDescription = null\n //can't determine if there's a duplicate since we don't have enough values; remove it from the list of duplicates if it's there\n duplicates = duplicates.filter(d => d.uid !== assignment[uniqueIdentifier])\n }\n\n if (uid) {\n this.setState({ assignments, duplicates })\n } else {\n this.setState({ newAssignment: assignment, duplicates })\n }\n }\n\n checkDuplicates(editedAssignment) {\n const assignments = [...this.state.assignments];\n if (!editedAssignment[categoryChamberIdentifier]) {\n //assign the categoryChamberIdentifier if it hasn't been yet\n editedAssignment[categoryChamberIdentifier] = this.state.categories.find(c => c[uniqueCategoryIdentifier] === editedAssignment[uniqueCategoryIdentifier]).ChamberCode;\n }\n\n //legislation class is not required, but we must include it in our logic for duplicates\n return assignments.find(a => a[uniqueIdentifier] !== editedAssignment[uniqueIdentifier] &&\n ((!a.LegislationClass || !editedAssignment.LegislationClass || a.LegislationClass === editedAssignment.LegislationClass) &&\n (!a.LegislationType || !editedAssignment.LegislationType || a.LegislationType === editedAssignment.LegislationType) &&\n ((!a.IsPassed && !editedAssignment.IsPassed) || a.IsPassed === editedAssignment.IsPassed) &&\n ((!a.IsUncontested && !editedAssignment.IsUncontested) || a.IsUncontested === editedAssignment.IsUncontested) &&\n requiredFields.every(val => (val === \"CategoryCode\" && editedAssignment[categoryChamberIdentifier] === this.state.categories.find(c => c[uniqueCategoryIdentifier] === a[uniqueCategoryIdentifier]).ChamberCode) || (val !== \"CategoryCode\" && a[val] === editedAssignment[val]))))\n }\n\n sort(column) {\n if (column.sortable === false) { return; }\n let assignments = [...this.state.assignments];\n assignments = this.props.sort(assignments, column);\n this.setState({ assignments })\n }\n\n handleSave(assignment) {\n let saving = { ...this.state.saving };\n saving[assignment[uniqueIdentifier]] = true;\n this.setState({ saving }, () => {\n const preSaveEventControlID = assignment.EventControlID;\n //nullify EventControlID and let DB resolve it based on other values, but if it fails then we need to put it back for comparison checks in the table between admin/new\n assignment.EventControlID = null;\n this.props.actions.saveCalendarAssignment(assignment)\n .then(() => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n\n //though the api is saving to both the current env and the admin db, the response is the one from the current env db. Update the assignments state value with this response\n const assignmentSave = JSON.parse(JSON.stringify(this.props.calendar.calendarAssignmentSave))[0];\n let assignments = [...this.state.assignments];\n const existingAssignmentIndex = assignments.findIndex(ca => ca[uniqueIdentifier] === assignmentSave[uniqueIdentifier]);\n if (existingAssignmentIndex > -1) {\n assignments[existingAssignmentIndex] = assignmentSave;\n } else {\n assignments.splice(0, 0, assignmentSave);\n }\n\n //reset editing and saving values\n let editing = { ...this.state.editing };\n editing[assignment[uniqueIdentifier]] = false;\n saving[assignment[uniqueIdentifier]] = false;\n this.setState({\n assignments,\n saving,\n editing,\n newAssignment: assignment.new ? newAssignmentFreshValues : this.state.newAssignment\n }, () => {\n this.getAdminAssignments(); //don't just assume the admin db save worked; refresh the admin assignments\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n console.log(err);\n\n //reset EventControlID since it was removed\n let assignments = [...this.state.assignments];\n const associatedAssignment = assignments.find(a => a[uniqueIdentifier] === assignment[uniqueIdentifier]);\n if (associatedAssignment) {\n assignment.EventControlID = preSaveEventControlID;\n }\n //reset the saving state value but keep in edit mode by not resetting the editing state value\n saving[assignment[uniqueIdentifier]] = false;\n this.setState({ assignments, saving });\n })\n })\n }\n\n showDifferences(assignment) {\n let showDifferences = { ...this.state.showDifferences };\n showDifferences[assignment[uniqueIdentifier]] = !showDifferences[assignment[uniqueIdentifier]];\n this.setState({ showDifferences });\n }\n\n getAssociatedAdminAssignmentWithoutModDate = (assignment) => {\n const associatedAdminAssignment = this.state.adminAssignments.find(aca => aca[uniqueIdentifier] === assignment[uniqueIdentifier]);\n if (!associatedAdminAssignment) { return false; }\n //remove the categoryChamberIdentifier and ModificationDate from the object so we can compare objects between the current env and the admin db\n const { ModificationDate, [categoryChamberIdentifier]: value, ...associatedAdminAssignmentWithoutModificationDate } = associatedAdminAssignment;\n return associatedAdminAssignmentWithoutModificationDate;\n }\n\n toggleEdit(original) {\n let editing = { ...this.state.editing };\n editing[original[uniqueIdentifier]] = !editing[original[uniqueIdentifier]];\n\n //if they're exiting edit mode for this row, reset the values to what they were before going into edit mode, and re-check duplicates\n let assignments = [...this.state.assignments];\n let duplicates = [...this.state.duplicates];\n if (!editing[original[uniqueIdentifier]]) {\n const assignmentIndex = assignments.findIndex(c => c[uniqueIdentifier] === original[uniqueIdentifier]);\n const uneditedAssignment = JSON.parse(JSON.stringify(this.getUneditedAssignment(original)));\n assignments[assignmentIndex] = uneditedAssignment;\n\n if (!this.checkDuplicates(assignments[assignmentIndex])) {\n duplicates = duplicates.filter(d => d.uid !== assignments[assignmentIndex][uniqueIdentifier])\n }\n }\n\n this.setState({ editing, assignments, duplicates });\n }\n\n buttonText = (pendingSave, original) => {\n if (pendingSave || original[uniqueIdentifier]) {\n return this.state.saving[original[uniqueIdentifier]] ? \"Saving\" : \"Save\";\n } else {\n return \"Insert\";\n }\n }\n\n getUneditedAssignment(assignment) {\n //if we've saved the assignment, that's the latest/unedited version; otherwise, the Get should be the latest/unedited version\n return [...this.props.calendar.calendarAssignmentSave] && [...this.props.calendar.calendarAssignmentSave].find(cas => cas[uniqueIdentifier] === assignment[uniqueIdentifier]) ? [...this.props.calendar.calendarAssignmentSave].find(cas => cas[uniqueIdentifier] === assignment[uniqueIdentifier]) : [...this.props.calendar.calendarAssignments].find(ca => ca[uniqueIdentifier] === assignment[uniqueIdentifier]);\n }\n\n toggleDifferences() {\n this.setState({\n showAllDifferences: !this.state.showAllDifferences\n }, () => {\n if (this.state.showAllDifferences) {\n this.findDifferences();\n }\n })\n }\n\n findDifferences() {\n this.setState({ filteringMismatches: true }, () => {\n const assignmentMismatches = this.props.findDifferences([...this.state.assignments], uniqueIdentifier, categoryChamberIdentifier, this.getAssociatedAdminAssignmentWithoutModDate)\n this.setState({ assignmentMismatches, filteringMismatches: false })\n })\n }\n\n render() {\n const { loadedAssignments, loadedAdminAssignments, loadedCategories, loadedLegislationClassOptions,\n assignments, adminAssignments, newAssignment, categories, legislationClassOptions,\n duplicates, showDifferences, showAllDifferences, assignmentMismatches, filteringMismatches,\n categoriesError, assignmentsError, legislationClassOptionsError, adminAssignmentsError,\n saving, editing } = this.state;\n const { billEventOptions, billEventOptionsError, loadedBillEventOptions, customStyles } = this.props;\n\n const isLoaded = loadedAssignments && loadedAdminAssignments && loadedCategories && loadedBillEventOptions && loadedLegislationClassOptions;\n\n const columns =\n [\n {\n Header: \"Category Code\",\n accessor: \"CategoryCode\",\n width: 125,\n Placeholder: \"Filter...\",\n Cell: ({ original }) => {\n const associatedAdminAssignmentWithoutModDate = this.getAssociatedAdminAssignmentWithoutModDate(original);\n const { ModificationDate, [categoryChamberIdentifier]: value, ...originalWithoutModificationDate } = original;\n const differentInAdminDB = associatedAdminAssignmentWithoutModDate && JSON.stringify(associatedAdminAssignmentWithoutModDate) !== JSON.stringify(originalWithoutModificationDate);\n const doesNotExistInAdminDB = original[uniqueIdentifier] && !associatedAdminAssignmentWithoutModDate;\n const showTooltip = differentInAdminDB || doesNotExistInAdminDB || showDifferences[original[uniqueIdentifier]]\n const tooltip = showTooltip && (\n <React.Fragment>\n {differentInAdminDB && <i data-tip={`This assignment is different in the admin database.${showDifferences[original[uniqueIdentifier]] ? \" The assignment in the admin database is displayed on the bottom below.\" : \"\"} Click ${showDifferences[original[uniqueIdentifier]] ? 'again to hide the admin assignment' : 'to show the admin assignment below the currently displayed assignment'}.`} className=\"icon notification calendar-assignment\" onClick={() => this.showDifferences(original)} />}\n {doesNotExistInAdminDB && <i data-tip=\"This assignment does not exist in the admin database.\" className=\"icon notification calendar-assignment\" />}\n {!differentInAdminDB && !doesNotExistInAdminDB && showDifferences[original[uniqueIdentifier]] && <i data-tip=\"This assignment is no longer different than in the admin database. Click again to hide the admin assignment.\" className=\"icon notification calendar-assignment\" onClick={() => this.showDifferences(original)} />}\n {showTooltip && <ReactTooltip key={new Date()} />} {/*unique key is needed because otherwise, if the user hovers over a tooltip on one page of the table, if they hover over another on a different page, it will not work*/}\n </React.Fragment>\n )\n\n let originalCategoryDisplayCode = original.CategoryCode;\n if (categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]) && categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]).ChamberCode) {\n originalCategoryDisplayCode += \" (\" + categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]).ChamberCode + \")\";\n }\n let associatedAdminCategoryDisplayCode = associatedAdminAssignmentWithoutModDate.CategoryCode;\n if (categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]) && categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]).ChamberCode) {\n associatedAdminCategoryDisplayCode += \" (\" + categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]).ChamberCode + \")\";\n }\n\n return (\n <React.Fragment>\n {original[uniqueIdentifier] && isLoaded &&\n <div className={`calendar-assignment icons${showTooltip ? ' double' : ''}`}>\n {<button className={`icon ${editing && editing[original[uniqueIdentifier]] ? 'delete' : 'edit'}`} onClick={() => this.toggleEdit(original)} />}\n {tooltip}\n </div>\n }\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={categories}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], CATEGORY, val)}\n getOptionLabel={opt => (opt.ChamberCode ? \"(\" + opt.ChamberCode + \") \" : \"\") + opt.CategoryCode + \" - \" + opt.Description}\n getOptionValue={opt => opt[uniqueCategoryIdentifier]}\n value={categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier])}\n styles={customStyles(true)}\n />\n :\n <span title={categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]) ? categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]).Description : ''}>{String(originalCategoryDisplayCode || '')}</span>\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n <span title={categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]) ? categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]).Description : ''}>{String(associatedAdminCategoryDisplayCode || '')}</span>\n </React.Fragment>\n }\n </React.Fragment>\n )\n },\n style: { textAlign: 'center', overflow: 'visible' }\n },\n {\n Header: \"Event\",\n accessor: \"EventCode\",\n width: 90,\n style: { textAlign: 'center', overflow: 'visible' },\n Placeholder: \"Filter...\",\n Cell: ({ original }) => {\n const associatedAdminAssignmentWithoutModDate = this.getAssociatedAdminAssignmentWithoutModDate(original);\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={[...billEventOptions].filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.EventCode === value.EventCode\n ))\n )}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], EVENT, val)}\n value={billEventOptions.find(b => b.label === original.EventCode)}\n styles={customStyles(false)}\n />\n :\n String(original.EventCode)\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignmentWithoutModDate.EventCode || '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Event Description\",\n accessor: \"p_LegislationDescription\",\n filter: 'includesValue',\n Placeholder: \"Filter...\",\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n return (\n <React.Fragment>\n <span title={String(original.p_LegislationDescription || '')}>{String(original.p_LegislationDescription || '')}</span>\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n <br />\n <span title={String(associatedAdminAssignment.p_LegislationDescription || '')}>{String(associatedAdminAssignment.p_LegislationDescription || '')}</span>\n </React.Fragment>\n }\n </React.Fragment>\n )\n }\n },\n {\n Header: \"Leg Chamber\",\n accessor: \"LegislationChamberCode\",\n Placeholder: \"Filter...\",\n width: 100,\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n const options = [{ label: \"H\" }, { label: \"S\" }];\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={options}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], CHAMBER, val)}\n getOptionValue={opt => opt.label}\n value={options.find(b => b.label === original.LegislationChamberCode)}\n styles={customStyles(false)}\n />\n :\n String(original.LegislationChamberCode || '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.LegislationChamberCode || '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Leg Type\",\n accessor: \"LegislationTypeCode\",\n Placeholder: \"Filter...\",\n width: 80,\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const options = [{ label: \"B\" }, { label: \"J\" }, { label: \"R\" }]\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={options}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], TYPE, val)}\n getOptionValue={opt => opt.label}\n value={options.find(b => b.label === original.LegislationTypeCode)}\n styles={customStyles(false)}\n />\n :\n String(original.LegislationTypeCode || '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.LegislationTypeCode || '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Leg Class\",\n accessor: \"LegislationClass\",\n Placeholder: \"Filter...\",\n width: 160,\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={legislationClassOptions}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], CLASS, val)}\n value={legislationClassOptions.find(b => b.LegislationClassID === original.LegislationClassID)}\n styles={customStyles(false)}\n isClearable\n />\n :\n String(original.LegislationClass || '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.LegislationClass || '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Passed\",\n id: \"IsPassed\",\n accessor: cm => cm.IsPassed && cm.IsPassed.toString(),\n Placeholder: \"Filter...\",\n width: 75,\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n const options = [{ label: true }, { label: false }];\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={options}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], PASSED, val)}\n getOptionLabel={opt => opt.label.toString()}\n getOptionValue={opt => opt.label.toString()}\n value={options.find(b => b.label === original.IsPassed)}\n styles={customStyles(false)}\n />\n :\n String(original.IsPassed !== undefined ? original.IsPassed : '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.IsPassed !== undefined ? associatedAdminAssignment.IsPassed : '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Uncontested\",\n id: \"IsUncontested\",\n Placeholder: \"Filter...\",\n accessor: cm => cm.IsUncontested && cm.IsUncontested.toString(),\n width: 110,\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n const options = [{ label: true }, { label: false }];\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={options}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], UNCONTESTED, val)}\n getOptionLabel={opt => opt.label.toString()}\n getOptionValue={opt => opt.label.toString()}\n value={options.find(b => b.label === original.IsUncontested)}\n styles={customStyles(false)}\n />\n :\n String(original.IsUncontested !== undefined ? original.IsUncontested : '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.IsUncontested !== undefined ? associatedAdminAssignment.IsUncontested : '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Actions\",\n width: 100,\n sortable: false,\n filterable: false,\n Cell: ({ original }) => {\n if (duplicates.find(d => d.uid === original[uniqueIdentifier])) {\n return <span className=\"input-feedback\" style={{ fontWeight: 'bold', fontSize: '90%' }}>DUPLICATE</span>\n } else {\n const requiredFieldsNotCompleted = requiredFields.some(val => original[val] === null);\n //to compare between unedited and current, remove the categoryChamberIdentifier since the unedited will not have it\n //to compare between current and admin, remove the ModificationDate and categoryChamberIdentifier\n const uneditedAssignment = original[uniqueIdentifier] && this.getUneditedAssignment(original);\n const key = 'ModificationDate';\n //get unedited without category chamber identifier in order to use later to compare between unedited and current\n const { [categoryChamberIdentifier]: value, ...uneditedWithoutCategoryChamberIdentifier } = uneditedAssignment || {};\n //now get associated admin assignment without category chamber identifier and mod date in order to use later to compare between current and admin\n const associatedAdminAssignmentWithoutModDate = this.getAssociatedAdminAssignmentWithoutModDate(original);\n //now get current assignment without category chamber identifier in order to use later to compare between unedited and current\n const { [categoryChamberIdentifier]: value3, ...originalWithoutCategoryChamberIdentifier } = original;\n //now get current assignment without category chamber identifier and mod date in order to use later to compare between current and admin\n const { [key]: value4, ...originalWithoutCategoryChamberIdentifierAndModificationDate } = originalWithoutCategoryChamberIdentifier;\n //check if it's different or inexistent in admin db\n const differentOrNonExistentInAdminDB = original[uniqueIdentifier] && this.props.isDifferentOrNonExistentInAdminDB(originalWithoutCategoryChamberIdentifierAndModificationDate, associatedAdminAssignmentWithoutModDate)\n //if it's different from admin or different from the unedited version, set it as saveable\n const pendingSave = original[uniqueIdentifier] && (differentOrNonExistentInAdminDB || (uneditedWithoutCategoryChamberIdentifier && JSON.stringify(uneditedWithoutCategoryChamberIdentifier) !== JSON.stringify(originalWithoutCategoryChamberIdentifier)));\n return (\n <button className=\"button\"\n disabled={!saving || Object.values(saving).indexOf(true) > -1 || requiredFieldsNotCompleted || (original[uniqueIdentifier] && !pendingSave)}\n onClick={() => this.handleSave(original)}>{this.buttonText(pendingSave, original)}</button>\n )\n }\n },\n style: { textAlign: 'center' }\n }\n ]\n\n return (\n <div>\n <div>\n {(billEventOptionsError || categoriesError || assignmentsError || adminAssignmentsError || legislationClassOptionsError) ?\n <React.Fragment>\n {billEventOptionsError && <p>Error loading legislation event options</p>}\n {categoriesError && <p>Error loading calendar category options</p>}\n {legislationClassOptionsError && <p>Error loading legislation class options</p>}\n {assignmentsError && <p>Error loading calendar assignments</p>}\n {adminAssignmentsError && <p>Error loading admin calendar assignments</p>}\n </React.Fragment>\n :\n <React.Fragment>\n <button className=\"button\" style={{ float: 'right' }} disabled={!isLoaded || filteringMismatches} onClick={this.toggleDifferences}>{showAllDifferences ? 'Show All' : 'Show Admin Mismatches'}</button>\n <ConfigurationsTable header={\"Calendar Assignments\"} assignments={showAllDifferences ? [...assignments].filter(ca => assignmentMismatches.includes(ca[uniqueIdentifier])) : assignments} adminAssignments={adminAssignments} newAssignment={newAssignment} categories={categories} uniqueCategoryIdentifier={uniqueCategoryIdentifier} isLoaded={isLoaded} columns={columns} sort={this.sort} showDifferences={showDifferences} uniqueIdentifier={uniqueIdentifier} />\n </React.Fragment>\n }\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, bills, calendar } = state;\n return {\n nav,\n bills,\n calendar\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, billActionCreators, calendarActionCreators), dispatch)\n }\n }\n)(CalendarConfigurations)\n\n\n\n\n\n\n\n","import React from 'react';\nimport ReactTooltip from 'react-tooltip';\nimport Select from 'react-select';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { communicationsActionCreators } from \"../../stores/lis-communications-store\";\nimport { navActionCreators } from \"../../stores/lis-nav-store\";\nimport ConfigurationsTable from './lis-configurations-table';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\n\nconst EVENT = 0;\nconst CHAMBER = 1;\nconst TYPE = 2;\nconst PASSED = 3;\nconst CATEGORY = 4;\nconst UNCONTESTED = 5;\n\nconst uniqueIdentifier = \"CommunicationAssignmentID\";\nconst uniqueCategoryIdentifier = \"CommunicationCategoryTypeID\";\nconst categoryChamberIdentifier = \"communicationCategoryChamber\";\n\nconst requiredFields = [\"EventCode\", \"LegislationChamberCode\", \"LegislationTypeCode\", \"CategoryCode\"];\n\nconst newAssignmentFreshValues = {\n CategoryCode: null,\n EventCode: null,\n p_LegislationDescription: null,\n LegislationTypeCode: null,\n LegislationChamberCode: null,\n IsPassed: null,\n [categoryChamberIdentifier]: null,\n new: true\n};\n\nclass CommunicationsConfigurations extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n assignments: [],\n adminAssignments: [],\n categories: [],\n loadedCategories: false,\n loadedAssignments: false,\n loadedAdminAssignments: false,\n categoriesError: false,\n assignmentsError: false,\n adminAssignmentsError: false,\n newAssignment: newAssignmentFreshValues,\n duplicates: [],\n showDifferences: {},\n saving: {},\n editing: {},\n showAllDifferences: false,\n filteringMismatches: false,\n assignmentMismatches: []\n };\n\n this.getCategories = this.getCategories.bind(this);\n this.getAssignments = this.getAssignments.bind(this);\n this.getAdminAssignments = this.getAdminAssignments.bind(this);\n this.handleAssignmentChange = this.handleAssignmentChange.bind(this);\n this.sort = this.sort.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.showDifferences = this.showDifferences.bind(this);\n this.buttonText = this.buttonText.bind(this);\n this.toggleEdit = this.toggleEdit.bind(this);\n this.checkDuplicates = this.checkDuplicates.bind(this);\n this.getUneditedAssignment = this.getUneditedAssignment.bind(this);\n this.toggleDifferences = this.toggleDifferences.bind(this);\n this.findDifferences = this.findDifferences.bind(this);\n }\n\n componentDidMount() {\n this.getCategories();\n this.getAssignments();\n this.getAdminAssignments();\n }\n\n getCategories() {\n this.setState({ loadedCategories: false }, () => {\n this.props.actions.getCommCategories('')\n .then(() => {\n this.setState({\n loadedCategories: true,\n categories: [...this.props.communications.commCategories].sort((a, b) => a.ChamberCode.localeCompare(b.ChamberCode) || a.CategoryCode.localeCompare(b.CategoryCode))\n });\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n console.error(err);\n this.setState({ loadedCategories: true, categories: [], categoriesError: true })\n });\n });\n }\n\n getAssignments() {\n this.setState({ loadedAssignments: false }, () => {\n this.props.actions.getCommunicationAssignments().then(() => {\n let assignments = JSON.parse(JSON.stringify(this.props.communications.communicationAssignments));\n assignments.sort((a, b) => a.CategoryCode.localeCompare(b.CategoryCode))\n\n this.setState({\n loadedAssignments: true,\n assignments\n })\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n console.error(err);\n this.setState({ loadedAssignments: true, assignments: [], assignmentsError: true })\n })\n });\n }\n\n getAdminAssignments() {\n this.setState({ loadedAdminAssignments: false }, () => {\n this.props.actions.getAdminCommunicationAssignments().then(() => {\n let adminAssignments = JSON.parse(JSON.stringify(this.props.communications.adminCommunicationAssignments));\n\n this.setState({\n loadedAdminAssignments: true,\n adminAssignments\n })\n }).catch(err => {\n if (err === \"Aborted\") {\n return;\n }\n console.error(err);\n this.setState({ loadedAdminAssignments: true, adminAssignments: [], adminAssignmentsError: true })\n })\n });\n }\n\n handleAssignmentChange(uid, key, value) {\n let assignments = [...this.state.assignments];\n let assignment;\n if (uid) {\n assignment = assignments.find(c => c[uniqueIdentifier] === uid);\n } else {\n assignment = { ...this.state.newAssignment };\n }\n\n switch (key) {\n case EVENT:\n assignment.EventCode = value.label;\n break;\n case CHAMBER:\n assignment.LegislationChamberCode = value ? value.label : null;\n break;\n case TYPE:\n assignment.LegislationTypeCode = value.label;\n break;\n case PASSED:\n assignment.IsPassed = value.label;\n break;\n case UNCONTESTED:\n assignment.IsUncontested = value.label;\n break;\n case CATEGORY:\n assignment[uniqueCategoryIdentifier] = value[uniqueCategoryIdentifier];\n assignment.CategoryCode = value.CategoryCode;\n assignment[categoryChamberIdentifier] = value.ChamberCode;\n break;\n }\n\n let duplicates = [...this.state.duplicates];\n //if there is an event code and legislationchambercode selected, this is enough to show the user the associated legislationdescription\n if (assignment.EventCode && assignment.LegislationChamberCode !== null) {\n const referenceEvent = [...this.props.billEventOptions].find(b => b.EventCode === assignment.EventCode && b.LegislationChamberCode === assignment.LegislationChamberCode && (assignment.IsPassed === null || assignment.IsPassed === b.IsPassed));\n assignment.p_LegislationDescription = referenceEvent ? referenceEvent.LegislationDescription : null;\n\n //if they have chosen an option for every required field (except category code), check to see if this is a duplicate entry, in which case prevent saving\n if (requiredFields.every(val => assignment[val] !== null) && this.checkDuplicates(assignment)) {\n duplicates.push({ uid: assignment[uniqueIdentifier] })\n } else {\n //there isn't a duplicate or there isn't enough values yet to determine; remove it from the duplicates if it's there\n duplicates = duplicates.filter(d => d.uid !== assignment[uniqueIdentifier])\n }\n } else {\n //there isn't enough info to determine the legislation description of the event, so set to null\n assignment.p_LegislationDescription = null\n //can't determine if there's a duplicate since we don't have enough values; remove it from the list of duplicates if it's there\n duplicates = duplicates.filter(d => d.uid !== assignment[uniqueIdentifier])\n }\n\n if (uid) {\n this.setState({ assignments, duplicates })\n } else {\n this.setState({ newAssignment: assignment, duplicates })\n }\n }\n\n checkDuplicates(editedAssignment) {\n const assignments = [...this.state.assignments];\n if (!editedAssignment[categoryChamberIdentifier]) {\n //assign the categoryChamberIdentifier if it hasn't been yet\n const refCategory = this.state.categories.find(c => c[uniqueCategoryIdentifier] === editedAssignment[uniqueCategoryIdentifier]);\n editedAssignment[categoryChamberIdentifier] = refCategory ? refCategory.ChamberCode : null;\n }\n return assignments.find(a => a[uniqueIdentifier] !== editedAssignment[uniqueIdentifier] &&\n (!a.LegislationTypeCode || !editedAssignment.LegislationTypeCode || a.LegislationTypeCode === editedAssignment.LegislationTypeCode) &&\n ((!a.IsPassed && !editedAssignment.IsPassed) || a.IsPassed === editedAssignment.IsPassed) &&\n requiredFields.every(val => (val === \"CategoryCode\" && (!this.state.categories.find(c => c[uniqueCategoryIdentifier] === a[uniqueCategoryIdentifier]) || editedAssignment[categoryChamberIdentifier] === this.state.categories.find(c => c[uniqueCategoryIdentifier] === a[uniqueCategoryIdentifier]).ChamberCode)) || (val !== \"CategoryCode\" && a[val] === editedAssignment[val])))\n }\n\n sort(column) {\n if (column.sortable === false) { return; }\n let assignments = [...this.state.assignments];\n assignments = this.props.sort(assignments, column);\n this.setState({ assignments })\n }\n\n handleSave(assignment) {\n let saving = { ...this.state.saving };\n saving[assignment[uniqueIdentifier]] = true;\n this.setState({ saving }, () => {\n //nullify EventControlID and let DB resolve it based on other values, but if it fails then we need to put it back for comparison checks in the table between admin/new\n const preSaveEventControlID = assignment.EventControlID;\n assignment.EventControlID = null;\n this.props.actions.saveCommunicationAssignment(assignment)\n .then(() => {\n this.props.actions.makeToast([{ message: \"Save Successful\", type: \"success\" }]);\n\n //though the api is saving to both the current env and the admin db, the response is the one from the current env db. Update the assignments state value with this response\n const assignmentSave = JSON.parse(JSON.stringify(this.props.communications.communicationAssignmentSave))[0];\n let assignments = [...this.state.assignments];\n const existingAssignmentIndex = assignments.findIndex(ca => ca[uniqueIdentifier] === assignmentSave[uniqueIdentifier]);\n if (existingAssignmentIndex > -1) {\n assignments[existingAssignmentIndex] = assignmentSave;\n } else {\n assignments.splice(0, 0, assignmentSave);\n }\n\n //reset editing and saving values\n let editing = { ...this.state.editing };\n editing[assignment[uniqueIdentifier]] = false;\n saving[assignment[uniqueIdentifier]] = false;\n this.setState({\n assignments,\n saving,\n editing,\n newAssignment: assignment.new ? newAssignmentFreshValues : this.state.newAssignment\n }, () => {\n this.getAdminAssignments(); //don't just assume the admin db save worked; refresh the admin assignments\n })\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.props.actions.makeToast([{ message: \"Save Failed\", type: \"failure\" }]);\n console.log(err);\n\n //reset EventControlID since it was removed\n let assignments = [...this.state.assignments];\n const associatedAssignment = assignments.find(a => a[uniqueIdentifier] === assignment[uniqueIdentifier]);\n if (associatedAssignment) {\n assignment.EventControlID = preSaveEventControlID;\n }\n\n //reset the saving state value but keep in edit mode by not resetting the editing state value\n saving[assignment[uniqueIdentifier]] = false;\n this.setState({ assignments, saving });\n })\n })\n }\n\n showDifferences(assignment) {\n let showDifferences = { ...this.state.showDifferences };\n showDifferences[assignment[uniqueIdentifier]] = !showDifferences[assignment[uniqueIdentifier]];\n this.setState({ showDifferences });\n }\n\n getAssociatedAdminAssignmentWithoutModDate = (assignment) => {\n const associatedAdminAssignment = this.state.adminAssignments.find(aca => aca[uniqueIdentifier] === assignment[uniqueIdentifier]);\n if (!associatedAdminAssignment) { return false; }\n //remove the categoryChamberIdentifier and ModificationDate from the object so we can compare objects between the current env and the admin db\n const { ModificationDate, [categoryChamberIdentifier]: value, ...associatedAdminAssignmentWithoutModificationDate } = associatedAdminAssignment || {};\n return associatedAdminAssignmentWithoutModificationDate;\n }\n\n toggleEdit(original) {\n let editing = { ...this.state.editing };\n editing[original[uniqueIdentifier]] = !editing[original[uniqueIdentifier]];\n\n //if they're exiting edit mode for this row, reset the values to what they were before going into edit mode, and re-check duplicates\n let assignments = [...this.state.assignments];\n let duplicates = [...this.state.duplicates];\n if (!editing[original[uniqueIdentifier]]) {\n const assignmentIndex = assignments.findIndex(c => c[uniqueIdentifier] === original[uniqueIdentifier]);\n const uneditedAssignment = JSON.parse(JSON.stringify(this.getUneditedAssignment(original)));\n assignments[assignmentIndex] = uneditedAssignment;\n\n if (!this.checkDuplicates(assignments[assignmentIndex])) {\n duplicates = duplicates.filter(d => d.uid !== assignments[assignmentIndex][uniqueIdentifier])\n }\n }\n\n this.setState({ editing, assignments, duplicates });\n }\n\n buttonText = (pendingSave, original) => {\n if (pendingSave || original[uniqueIdentifier]) {\n return this.state.saving[original[uniqueIdentifier]] ? \"Saving\" : \"Save\";\n } else {\n return \"Insert\";\n }\n }\n\n getUneditedAssignment(assignment) {\n //if we've saved the assignment, that's the latest/unedited version; otherwise, the Get should be the latest/unedited version\n return [...this.props.communications.communicationAssignmentSave] && [...this.props.communications.communicationAssignmentSave].find(cas => cas[uniqueIdentifier] === assignment[uniqueIdentifier]) ? [...this.props.communications.communicationAssignmentSave].find(cas => cas[uniqueIdentifier] === assignment[uniqueIdentifier]) : [...this.props.communications.communicationAssignments].find(ca => ca[uniqueIdentifier] === assignment[uniqueIdentifier]);\n }\n\n toggleDifferences() {\n this.setState({\n showAllDifferences: !this.state.showAllDifferences\n }, () => {\n if (this.state.showAllDifferences) {\n this.findDifferences();\n }\n })\n }\n\n findDifferences() {\n this.setState({ filteringMismatches: true }, () => {\n const assignmentMismatches = this.props.findDifferences([...this.state.assignments], uniqueIdentifier, categoryChamberIdentifier, this.getAssociatedAdminAssignmentWithoutModDate)\n this.setState({ assignmentMismatches, filteringMismatches: false })\n })\n }\n\n render() {\n const { loadedAssignments, loadedAdminAssignments, loadedCategories,\n assignments, adminAssignments, newAssignment, categories,\n duplicates, showDifferences, showAllDifferences, assignmentMismatches, filteringMismatches,\n categoriesError, assignmentsError, adminAssignmentsError,\n saving, editing } = this.state;\n const { billEventOptions, billEventOptionsError, loadedBillEventOptions, customStyles } = this.props;\n\n const isLoaded = loadedAssignments && loadedAdminAssignments && loadedCategories && loadedBillEventOptions;\n\n const columns =\n [\n {\n Header: \"Category Code\",\n accessor: \"CategoryCode\",\n width: 140,\n Placeholder: \"Filter...\",\n Cell: ({ original }) => {\n const associatedAdminAssignmentWithoutModDate = this.getAssociatedAdminAssignmentWithoutModDate(original);\n const { ModificationDate, [categoryChamberIdentifier]: value, ...originalWithoutModificationDate } = original;\n const differentInAdminDB = associatedAdminAssignmentWithoutModDate && JSON.stringify(associatedAdminAssignmentWithoutModDate) !== JSON.stringify(originalWithoutModificationDate);\n const doesNotExistInAdminDB = original[uniqueIdentifier] && !associatedAdminAssignmentWithoutModDate;\n const showTooltip = differentInAdminDB || doesNotExistInAdminDB || showDifferences[original[uniqueIdentifier]]\n const tooltip = showTooltip && (\n <React.Fragment>\n {differentInAdminDB && <i data-tip={`This assignment is different in the admin database.${showDifferences[original[uniqueIdentifier]] ? \" The assignment in the admin database is displayed on the bottom below.\" : \"\"} Click ${showDifferences[original[uniqueIdentifier]] ? 'again to hide the admin assignment' : 'to show the admin assignment below the currently displayed assignment'}.`} className=\"icon notification communication-assignment\" onClick={() => this.showDifferences(original)} />}\n {doesNotExistInAdminDB && <i data-tip=\"This assignment does not exist in the admin database.\" className=\"icon notification communication-assignment\" />}\n {!differentInAdminDB && !doesNotExistInAdminDB && showDifferences[original[uniqueIdentifier]] && <i data-tip=\"This assignment is no longer different than in the admin database. Click again to hide the admin assignment.\" className=\"icon notification communication-assignment\" onClick={() => this.showDifferences(original)} />}\n {showTooltip && <ReactTooltip key={new Date()} />} {/*unique key is needed because otherwise, if the user hovers over a tooltip on one page of the table, if they hover over another on a different page, it will not work*/}\n </React.Fragment>\n )\n\n let originalCategoryDisplayCode = original.CategoryCode;\n if (categories.filter(c => c.CategoryCode === original.CategoryCode).length > 1) {\n const refCategory = categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]);\n if (refCategory) {\n originalCategoryDisplayCode += \" (\" + refCategory.ChamberCode + \")\";\n }\n }\n let associatedAdminCategoryDisplayCode = associatedAdminAssignmentWithoutModDate.CategoryCode;\n if (categories.filter(c => c.CategoryCode === associatedAdminAssignmentWithoutModDate.CategoryCode).length > 1) {\n const refCategory = categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]);\n if (refCategory) {\n associatedAdminCategoryDisplayCode += \" (\" + refCategory.ChamberCode + \")\";\n }\n }\n\n return (\n <React.Fragment>\n {original[uniqueIdentifier] && isLoaded &&\n <div className={`communication-assignment icons${showTooltip ? ' double' : ''}`}>\n {<button className={`icon ${editing && editing[original[uniqueIdentifier]] ? 'delete' : 'edit'}`} onClick={() => this.toggleEdit(original)} />}\n {tooltip}\n </div>\n }\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={categories}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], CATEGORY, val)}\n getOptionLabel={opt => opt.CategoryCode + (opt.ChamberCode && categories.filter(c => c.CategoryCode === opt.CategoryCode).length > 1 ? \" (\" + opt.ChamberCode + \")\" : \"\") + \" - \" + opt.Description}\n getOptionValue={opt => opt[uniqueCategoryIdentifier]}\n value={categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier])}\n styles={customStyles(true)}\n />\n :\n <span title={categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]) ? categories.find(c => c[uniqueCategoryIdentifier] === original[uniqueCategoryIdentifier]).Description : ''}>{String(originalCategoryDisplayCode || '')}</span>\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n <span title={categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]) ? categories.find(c => c[uniqueCategoryIdentifier] === associatedAdminAssignmentWithoutModDate[uniqueCategoryIdentifier]).Description : ''}>{String(associatedAdminCategoryDisplayCode || '')}</span>\n </React.Fragment>\n }\n </React.Fragment>\n )\n },\n style: { textAlign: 'center', overflow: 'visible' }\n },\n {\n Header: \"Event\",\n accessor: \"EventCode\",\n width: 120,\n style: { textAlign: 'center', overflow: 'visible' },\n Placeholder: \"Filter...\",\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={[...billEventOptions].filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.EventCode === value.EventCode\n ))\n )}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], EVENT, val)}\n value={billEventOptions.find(b => b.label === original.EventCode)}\n styles={customStyles(false)}\n />\n :\n String(original.EventCode)\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.EventCode || '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Event Description\",\n accessor: \"p_LegislationDescription\",\n filter: 'includesValue',\n Placeholder: \"Filter...\",\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n return (\n <React.Fragment>\n <span title={String(original.p_LegislationDescription || '')}>{String(original.p_LegislationDescription || '')}</span>\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n <br />\n <span title={String(associatedAdminAssignment.p_LegislationDescription || '')}>{String(associatedAdminAssignment.p_LegislationDescription || '')}</span>\n </React.Fragment>\n }\n </React.Fragment>\n )\n }\n },\n {\n Header: \"Leg Chamber\",\n accessor: \"LegislationChamberCode\",\n width: 100,\n Placeholder: \"Filter...\",\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n const options = [{ label: \"H\" }, { label: \"S\" }];\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={options}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], CHAMBER, val)}\n getOptionValue={opt => opt.label}\n value={options.find(b => b.label === original.LegislationChamberCode)}\n styles={customStyles(false)}\n />\n :\n String(original.LegislationChamberCode || '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.LegislationChamberCode || '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Leg Type\",\n accessor: \"LegislationTypeCode\",\n width: 100,\n Placeholder: \"Filter...\",\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n const options = [{ label: \"B\" }, { label: \"J\" }, { label: \"R\" }]\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={options}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], TYPE, val)}\n getOptionValue={opt => opt.label}\n value={options.find(b => b.label === original.LegislationTypeCode)}\n styles={customStyles(false)}\n />\n :\n String(original.LegislationTypeCode || '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.LegislationTypeCode || '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Passed\",\n id: \"IsPassed\",\n accessor: cm => cm.IsPassed && cm.IsPassed.toString(),\n width: 100,\n Placeholder: \"Filter...\",\n style: { textAlign: 'center', overflow: 'visible' },\n Cell: ({ original }) => {\n const associatedAdminAssignment = showDifferences[original[uniqueIdentifier]] && adminAssignments.find(aca => aca[uniqueIdentifier] === original[uniqueIdentifier]);\n const options = [{ label: true }, { label: false }];\n return (\n <div>\n {!original[uniqueIdentifier] || (editing && editing[original[uniqueIdentifier]]) ?\n <Select\n options={options}\n onChange={(val) => this.handleAssignmentChange(original[uniqueIdentifier], PASSED, val)}\n getOptionLabel={opt => opt.label.toString()}\n getOptionValue={opt => opt.label.toString()}\n value={options.find(b => b.label === original.IsPassed)}\n styles={customStyles(false)}\n />\n :\n String(original.IsPassed !== undefined ? original.IsPassed : '')\n }\n {showDifferences[original[uniqueIdentifier]] &&\n <React.Fragment>\n {!editing || !editing[original[uniqueIdentifier]] && <br />}\n {String(associatedAdminAssignment.IsPassed !== undefined ? associatedAdminAssignment.IsPassed : '')}\n </React.Fragment>\n }\n </div>\n )\n }\n },\n {\n Header: \"Actions\",\n width: 110,\n sortable: false,\n filterable: false,\n Cell: ({ original }) => {\n if (duplicates.find(d => d.uid === original[uniqueIdentifier])) {\n return <span className=\"input-feedback\" style={{ fontWeight: 'bold', fontSize: '90%' }}>DUPLICATE</span>\n } else {\n const requiredFieldsNotCompleted = requiredFields.some(val => original[val] === null);\n //to compare between unedited and current, remove the categoryChamberIdentifier since the unedited will not have it\n //to compare between current and admin, remove the ModificationDate and categoryChamberIdentifier\n const uneditedAssignment = original[uniqueIdentifier] && this.getUneditedAssignment(original);\n const key = 'ModificationDate';\n //get unedited without category chamber identifier in order to use later to compare between unedited and current\n const { [categoryChamberIdentifier]: value, ...uneditedWithoutCategoryChamberIdentifier } = uneditedAssignment || {};\n //now get associated admin assignment without category chamber identifier and mod date in order to use later to compare between current and admin\n const associatedAdminAssignmentWithoutModDate = this.getAssociatedAdminAssignmentWithoutModDate(original);\n //now get current assignment without category chamber identifier in order to use later to compare between unedited and current\n const { [categoryChamberIdentifier]: value3, ...originalWithoutCategoryChamberIdentifier } = original;\n //now get current assignment without category chamber identifier and mod date in order to use later to compare between current and admin\n const { [key]: value4, ...originalWithoutCategoryChamberIdentifierAndModificationDate } = originalWithoutCategoryChamberIdentifier;\n //check if it's different or inexistent in admin db\n const differentOrNonExistentInAdminDB = original[uniqueIdentifier] && this.props.isDifferentOrNonExistentInAdminDB(originalWithoutCategoryChamberIdentifierAndModificationDate, associatedAdminAssignmentWithoutModDate)\n //if it's different from admin or different from the unedited version, set it as saveable\n const pendingSave = original[uniqueIdentifier] && (differentOrNonExistentInAdminDB || (uneditedWithoutCategoryChamberIdentifier && JSON.stringify(uneditedWithoutCategoryChamberIdentifier) !== JSON.stringify(originalWithoutCategoryChamberIdentifier)));\n return (\n <button className=\"button\"\n disabled={!saving || Object.values(saving).indexOf(true) > -1 || requiredFieldsNotCompleted || (original[uniqueIdentifier] && !pendingSave)}\n onClick={() => this.handleSave(original)}>{this.buttonText(pendingSave, original)}</button>\n )\n }\n },\n style: { textAlign: 'center' }\n }\n ]\n\n return (\n <div>\n <div>\n {(billEventOptionsError || categoriesError || assignmentsError || adminAssignmentsError) ?\n <React.Fragment>\n {billEventOptionsError && <p>Error loading legislation event options</p>}\n {categoriesError && <p>Error loading communication category options</p>}\n {assignmentsError && <p>Error loading communication assignments</p>}\n {adminAssignmentsError && <p>Error loading admin communication assignments</p>}\n </React.Fragment>\n :\n <React.Fragment>\n <button className=\"button\" style={{ float: 'right' }} disabled={!isLoaded || filteringMismatches} onClick={this.toggleDifferences}>{showAllDifferences ? 'Show All' : 'Show Admin Mismatches'}</button>\n <ConfigurationsTable header={\"Communication Assignments\"} assignments={showAllDifferences ? [...assignments].filter(ca => assignmentMismatches.includes(ca[uniqueIdentifier])) : assignments} adminAssignments={adminAssignments} newAssignment={newAssignment} categories={categories} uniqueCategoryIdentifier={uniqueCategoryIdentifier} isLoaded={isLoaded} columns={columns} sort={this.sort} showDifferences={showDifferences} uniqueIdentifier={uniqueIdentifier} />\n </React.Fragment>\n }\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { nav, bills, communications } = state;\n return {\n nav,\n bills,\n communications\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, navActionCreators, billActionCreators, communicationsActionCreators), dispatch)\n }\n }\n)(CommunicationsConfigurations)\n\n\n\n\n\n\n\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nclass ConfigurationsGrid extends React.Component {\n render() {\n return (\n <div>\n <div className=\"configurations configurations-icon-links\">\n <div className=\"grid-wrapper three\">\n <div className=\"configurations\">\n <Link className=\"configurations info-link calendar\" to=\"/configurations-management/calendar\"></Link>\n <Link to=\"/configurations-management/calendar\">Calendar</Link>\n </div>\n <div className=\"configurations\">\n <Link className=\"configurations info-link communications\" to=\"/configurations-management/communications\"></Link>\n <Link to=\"/configurations-management/communications\">Communications</Link>\n </div>\n <div className=\"configurations\">\n <a className=\"configurations info-link category-action\"></a>\n <a>Category Action<br/>(Coming Soon)</a>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default ConfigurationsGrid","import React from 'react';\nimport { Route } from 'react-router';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport CalendarConfigurations from './lis-calendar-configurations';\nimport CommunicationsConfigurations from './lis-communications-configurations';\nimport ConfigurationsGrid from './lis-configurations-grid';\nimport { billActionCreators } from '../../stores/lis-legislation-store';\nimport { Link } from 'react-router-dom';\n\nconst customStyles = (categoryColumn) => ({\n option: (base, state) => ({\n ...base,\n fontSize: '0.8em',\n }),\n control: (base) => ({\n ...base,\n padding: '1px',\n margin: 0,\n minHeight: 0,\n fontSize: '0.8em',\n }),\n singleValue: (base, state) => {\n return { ...base, };\n },\n valueContainer: base => ({\n ...base,\n padding: '2px 4px'\n }),\n dropdownIndicator: base => ({\n ...base,\n padding: '2px'\n }),\n clearIndicator: base => ({\n ...base,\n padding: '0px',\n }),\n menu: base => ({\n ...base,\n width: categoryColumn ? 'auto' : '100%',\n maxWidth: '600px',\n textAlign: categoryColumn ? 'left' : 'center'\n })\n})\n\nconst isAscending = (arr, header) => {\n return arr.every(function (x, i) {\n return i === 0 || [null, undefined].includes(x[header]) || [null, undefined].includes(arr[i - 1][header]) || x[header].toString().toLowerCase() >= arr[i - 1][header].toString().toLowerCase();\n });\n}\n\nclass ConfigurationsManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n billEventOptions: [],\n loadedBillEventOptions: false,\n billEventOptionsError: false\n };\n\n this.getEventReferences = this.getEventReferences.bind(this);\n this.sort = this.sort.bind(this);\n }\n\n componentDidMount() {\n this.getEventReferences();\n }\n\n getEventReferences() {\n this.setState({ loadedBillEventOptions: false }, () => {\n this.props.actions.getBillEventReferences(\"?isActive=true\")\n .then(() => {\n let billEventReferences = [...this.props.bills.billEventRef];\n\n billEventReferences.forEach(ref => {\n ref.label = ref.EventCode\n ref.value = ref.EventCode\n });\n\n this.setState({\n loadedBillEventOptions: true,\n billEventOptions: billEventReferences\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({ loadedBillEventOptions: true, billEventOptions: [], billEventOptionsError: true })\n });\n })\n }\n\n sort(assignments, column) {\n const currentlyAsc = isAscending(assignments, column.id);\n assignments.sort((first, second) => {\n let a = first[column.id]\n let b = second[column.id]\n // force null and undefined to the bottom\n a = a === null || a === undefined ? Infinity : a\n if (a === Infinity) { return 1 }\n b = b === null || b === undefined ? Infinity : b\n if (b === Infinity) { return -1 }\n // force any string values to lowercase\n a = typeof a === 'string' ? a.toLowerCase() : a\n b = typeof b === 'string' ? b.toLowerCase() : b\n // Return either 1 or -1 to indicate a sort priority\n if (a > b) {\n return currentlyAsc ? -1 : 1;\n }\n if (a < b) {\n return currentlyAsc ? 1 : -1;\n }\n //secondarily sort by category code ascending\n if (first['CategoryCode'] && second['CategoryCode']) {\n if (first['CategoryCode'].toLowerCase() > second['CategoryCode'].toLowerCase()) {\n return 1;\n }\n if (second['CategoryCode'].toLowerCase() > first['CategoryCode'].toLowerCase()) {\n return -1;\n }\n }\n //tertiarily sort by event code ascending\n if (first['EventCode'] && second['EventCode']) {\n if (first['EventCode'].toLowerCase() > second['EventCode'].toLowerCase()) {\n return 1;\n }\n if (second['EventCode'].toLowerCase() > first['EventCode'].toLowerCase()) {\n return -1;\n }\n }\n // returning 0 or undefined will use any subsequent column sorting methods or the row index as a tiebreaker\n return 0\n })\n return assignments;\n }\n\n findDifferences(assignments, uniqueIdentifier, categoryChamberIdentifier, getAssociatedAdminAssignmentFn) {\n let assignmentMismatches = [];\n assignments.forEach(assignment => {\n const associatedAdminAssignment = getAssociatedAdminAssignmentFn(assignment);\n if (!associatedAdminAssignment) {\n assignmentMismatches.push(assignment[uniqueIdentifier]);\n return;\n }\n const { ModificationDate, [categoryChamberIdentifier]: value, ...originalWithoutCategoryChamberAndModificationDate } = assignment;\n if (this.isDifferentOrNonExistentInAdminDB(originalWithoutCategoryChamberAndModificationDate, associatedAdminAssignment)) {\n assignmentMismatches.push(assignment[uniqueIdentifier]);\n }\n });\n return assignmentMismatches;\n }\n\n isDifferentOrNonExistentInAdminDB(current, admin) {\n return (!admin || JSON.stringify(admin) !== JSON.stringify(current));\n }\n\n render() {\n const { loadedBillEventOptions, billEventOptions, billEventOptionsError } = this.state;\n return (\n <div style={{ paddingBottom: '40px' }}>\n <div>\n <h1 className=\"no-margin-bottom\">{this.props.location.pathname.endsWith('/configurations-management') ? \"Configurations Management\" : <Link className=\"no-margin-bottom\" style={{ textDecoration: 'none' }} to=\"/configurations-management\">Configurations Management</Link>}</h1>\n </div>\n <Route exact path={this.props.match.path} render={props => <ConfigurationsGrid\n {...props}\n />} />\n <Route path={\"/configurations-management/calendar\"} render={props => <CalendarConfigurations\n {...props}\n loadedBillEventOptions={loadedBillEventOptions}\n billEventOptions={billEventOptions}\n billEventOptionsError={billEventOptionsError}\n customStyles={customStyles}\n isAscending={isAscending}\n sort={this.sort}\n findDifferences={this.findDifferences}\n isDifferentOrNonExistentInAdminDB={this.isDifferentOrNonExistentInAdminDB}\n />} />\n <Route path={\"/configurations-management/communications\"} render={props => <CommunicationsConfigurations\n {...props}\n loadedBillEventOptions={loadedBillEventOptions}\n billEventOptions={billEventOptions}\n billEventOptionsError={billEventOptionsError}\n customStyles={customStyles}\n isAscending={isAscending}\n sort={this.sort}\n findDifferences={this.findDifferences}\n isDifferentOrNonExistentInAdminDB={this.isDifferentOrNonExistentInAdminDB}\n />} />\n </div>\n )\n }\n}\n\nexport default connect(\n (state) => {\n const { bills } = state;\n return {\n bills\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, billActionCreators), dispatch)\n }\n }\n)(ConfigurationsManagement)\n\n","import React from \"react\";\nimport ReactTable from \"react-table\";\nimport { Link } from 'react-router-dom';\nimport '../../../stylesheets/shared/react-table.css';\nimport moment from 'moment-timezone';\nimport * as Fields from '../../../lis-shared/lis-layout/components/lis-forms-component';\nimport DatePicker from \"react-datepicker\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { journalActionCreators } from '../../../stores/lis-journal-store';\nimport { sessionActionCreators } from '../../../stores/lis-session-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport { navActionCreators } from \"../../../stores/lis-nav-store\";\n\nclass JournalGridComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n journalDate: moment(),\n journalList: [],\n isLoaded: false,\n selected: {},\n sessionList: [],\n sessionDropdown: [],\n selectedSessionToolbar: '',\n selectedSessionGrid: '',\n filtered: [{ id: 'all', value: 'true' }],\n filterAll: 'true',\n };\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleSendCategory = this.handleSendCategory.bind(this);\n this.handleDeleteJournal = this.handleDeleteJournal.bind(this);\n };\n\n //When component has mounted, make the call to the list users API\n componentDidMount() {\n let selectedSession = this.props.selectedSession;\n let defaultSession = '';\n this.props.actions.getSessionList().then(() => {\n let sessionList = [...this.props.session.sessionList].reverse();\n sessionList.forEach(session => {\n session.label = session.SessionYear + ' ' + session.DisplayName;\n session.value = session.SessionID;\n if (session.IsDefault) {\n selectedSession = selectedSession || session;\n defaultSession = session;\n }\n });\n this.setState({\n sessionDropdown: sessionList,\n sessionList: sessionList,\n selectedSessionGrid: defaultSession\n });\n this.props.handleSessionChange(selectedSession, () => this.getJournalData());\n });\n\n this.props.actions.getJournalCategories();\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n getJournalData() {\n if (!this.props.selectedSession) {\n return\n }\n const params = 'sessionID=' + this.props.selectedSession.SessionID;\n this.setState({\n isLoaded: false\n });\n this.props.actions.getJournals(params).then(() => {\n const journalList = this.props.journal.journalList;\n this.setState({\n isLoaded: true,\n journalDate: journalList.find(j => moment(j.JournalDate).isSame(moment(), 'day')) ? null : this.state.journalDate || moment(),\n journalList,\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n isLoaded: true,\n message: err.toString()\n });\n });\n }\n\n handleDateChange(date) {\n this.setState({\n journalDate: moment(date)\n });\n }\n\n handleDropDownChange = (value, state) => {\n this.setState({\n [state]: value\n })\n }\n\n handleSessionSelectChange = value => {\n this.props.handleSessionChange(value, () => this.getJournalData())\n }\n\n handleCategoryChange = value => {\n this.props.handleCategoryChange(value);\n }\n\n onFilteredChange(filtered) {\n if (filtered.length > 1 && this.state.filterAll.length) {\n // NOTE: this removes any FILTER ALL filter\n const filterAll = '';\n this.setState({ filtered: filtered.filter((item) => item.id !== 'all'), filterAll })\n }\n else\n this.setState({ filtered });\n }\n\n getTrProps = (state, rowInfo, instance) => {\n if (rowInfo) {\n return {\n style: {\n background: rowInfo.original.IsDefault ? 'rgb(202, 225, 241)' : null,\n }\n }\n }\n return {};\n }\n\n sendCreateDetails() {\n this.setState({\n isSaving: true\n });\n this.props.actions.buildJournal('?sessionID=' + this.state.selectedSessionGrid.SessionID + '&JournalDay=' + moment(this.state.journalDate).format(\"MM/DD/yyyy\")).then(() => {\n this.setState({\n showCreateSuccess: true,\n isSaving: false\n })\n setTimeout(function () {\n this.setState({ showCreateSuccess: false });\n }.bind(this), 5000);\n this.props.handleSessionChange(this.state.selectedSessionGrid, () => this.getJournalData())\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n this.setState({\n showCreateFailure: true,\n isSaving: false\n });\n setTimeout(function () {\n this.setState({ showCreateFailure: false });\n }.bind(this), 5000);\n });\n }\n\n handleSendCategory() {\n let params = \"journalCategoryType=\" + this.props.selectedCategory.label + \"&sessionId=\" + this.props.selectedSession.SessionID\n this.props.actions.getCategoryData(params)\n .then(() => {\n let downloadLink = document.createElement('a');\n let url = window.URL.createObjectURL(new Blob([this.props.journal.categoryData]))\n downloadLink.setAttribute('href', url);\n downloadLink.setAttribute('download', this.props.selectedSession.label + \"-\" + this.props.selectedCategory.label + \".mml\");\n\n downloadLink.style.display = 'none';\n document.body.appendChild(downloadLink);\n downloadLink.click();\n\n document.body.removeChild(downloadLink);\n })\n }\n\n handleDeleteJournal(journalId) {\n this.props.actions.deleteJournal(journalId)\n .then(() => {\n if (this.props.journal.journalDeleteError.length === 0) {\n this.props.actions.makeToast([{ message: \"Journal Day Deleted\", type: \"success\" }]);\n this.getJournalData();\n } else {\n this.props.actions.makeToast([{ message: \"Journal Day Delete Failed\", type: \"failure\" }]);\n }\n })\n }\n\n render() {\n return (\n <div>\n <div className=\"header-half\">\n <h1>Journal Management</h1>\n </div>\n <div className=\"toolbar journal-toolbar dlas-forms\">\n <div>\n <Fields.Dropdown\n value={this.props.selectedSession}\n options={this.state.sessionDropdown}\n id=\"sessionDropdown\"\n onChange={this.handleSessionSelectChange}\n />\n </div>\n <div>\n <Fields.Dropdown\n value={this.props.selectedCategory}\n options={this.props.journal.journalCategoryList}\n id=\"category-dropdown\"\n onChange={this.handleCategoryChange}\n />\n </div>\n <button className=\"button primary\" onClick={() => this.handleSendCategory()}>Generate Category</button>\n </div>\n {this.state.message &&\n <span className=\"fail small-text\">{this.state.message}</span>\n }\n <ReactTable\n resizable={false}\n loading={!this.state.isLoaded}\n data={this.state.journalList}\n ref={r => this.reactTable = r}\n defaultFilterMethod={(filter, row) =>\n String(row[filter.id]) === filter.value}\n noDataText={this.props.journal.journalMessage}\n onFilteredChange={this.onFilteredChange.bind(this)}\n columns={[\n {\n Header: \"Journal Date\",\n accessor: \"JournalDate\",\n sortable: false,\n filterAll: true,\n width: 250,\n columns: [\n {\n Header: (\n <div className=\"dlas-forms datepicker-container\">\n {!this.state.showCreateSuccess && !this.state.showCreateFailure &&\n <DatePicker\n id=\"journalDate\"\n className=\"dnd-field\"\n selected={this.state.journalDate}\n onChange={this.handleDateChange}\n excludeDates={this.state.journalList.map(j => j.JournalDate)}\n placeholderText=\"Journal Date\"\n />\n }\n </div>\n ),\n headerClassName: \"header-insert\",\n accessor: \"JournalDate\",\n sortable: false,\n filterAll: true,\n width: 200,\n Cell: row => {\n return (\n <span id={'cm-datecell-' + row.index}>{moment(row.original.JournalDate).format('L')}</span>\n )\n }\n }\n ]\n },\n {\n Header: \"Session\",\n columns: [\n {\n Header: (\n <div>\n {!this.state.showCreateSuccess && !this.state.showCreateFailure &&\n <Fields.Dropdown\n value={this.state.selectedSessionGrid}\n options={this.state.sessionList}\n className=\"grid-selector-dropdown\"\n classNamePrefix=\"grid-selector-dropdown\"\n id=\"sessionDropdown\"\n onChange={(value) => { this.handleDropDownChange(value, 'selectedSessionGrid') }} />\n }\n {this.state.showCreateSuccess &&\n <span className=\"insert-message\">Journal created successfully</span>\n }\n {this.state.showCreateFailure &&\n <span className=\"insert-message fail\">Journal creation failed</span>\n }\n </div>\n ),\n headerClassName: \"header-insert-dropdown\",\n accessor: \"SessionName\",\n sortable: false,\n filterAll: true,\n Cell: row => {\n return <span id={'mm-session-' + row.index}>{row.value}</span>\n }\n }\n ]\n },\n {\n Header: \"Actions\",\n headerClassName: \"submit-action\",\n columns: [\n\n {\n Header: (<span><button id=\"submit-new-journal\" onClick={this.sendCreateDetails.bind(this)} disabled={!this.state.journalDate || this.state.isSaving} className=\"button\">Create</button></span>),\n headerClassName: \"header-action\",\n accessor: \"action\",\n sortable: false,\n className: \"action-column\",\n width: 100,\n Cell: row => {\n return (\n <div className=\"grid-wrapper two\">\n <Link id={'cm-edit-' + row.index} to={`/journal-management/edit-journal/${row.original.JournalID}`} className=\"button edit\">Edit</Link>\n <span className=\"icon delete no-repeat\" onClick={() => this.handleDeleteJournal(row.original.JournalID)} />\n </div>\n )\n }\n },\n ]\n }\n ]}\n defaultSorted={[\n {\n id: \"Name\",\n desc: false\n }\n ]}\n defaultPageSize={15}\n pageSizeOptions={[5, 10, 15, 20, 25, 50, 100]}\n className=\"committee-table -striped -highlight\"\n />\n <br />\n\n </div>\n );\n }\n}\n\nconst JournalManagementGrid = connect(\n (state) => {\n const { journal, session } = state;\n return {\n journal,\n session\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, sessionActionCreators, journalActionCreators, navActionCreators), dispatch)\n }\n }\n)(JournalGridComponent)\n\n\nexport default JournalManagementGrid;","import React from 'react';\n\nclass JournalDetails extends React.Component {\n\n render() {\n const { categories } = this.props;\n return (\n <div>\n {categories.filter(c => c.JournalEntries && c.JournalEntries.length).map((category, index) => {\n return (<div key={index} className=\"preview-entry\">\n <div className=\"entry-index\">\n <p>{index + 1}</p>\n </div>\n <div className=\"entry-text\">\n <ul>\n <li className={`category-heading`}>{category.CategoryDescription}</li>\n {category.JournalEntries.sort((a, b) => a.Sequence - b.Sequence).map((entry, i) => (\n <li key={i}>\n {entry.EntryText}\n </li>\n ))}\n </ul>\n </div>\n </div>);\n })}\n </div>\n )\n }\n}\n\nexport default JournalDetails;\n","import React from \"react\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport { journalActionCreators } from \"../../../stores/lis-journal-store\";\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%',\n});\n\nclass JournalVote extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n };\n this.onEntryDragEnd = this.onEntryDragEnd.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.formInput = this.formInput.bind(this);\n\n this.infoBoxRef = React.createRef();\n this.menuBoxRef = React.createRef();\n }\n\n onEntryDragEnd(result) {\n if (!result.destination) {\n return;\n }\n if (result.destination.index === result.source.index) {\n return;\n }\n let entries = [...this.props.formData.JournalEntries];\n const [removed] = entries.splice(result.source.index, 1);\n entries.splice(result.destination.index, 0, removed);\n entries.forEach((element, index) => {\n element.Sequence = index + 1;\n });\n this.props.onMultipleEntryChange(entries, this.props.currentActivitySequence);\n }\n\n toggleMenu(entryIndex, e) {\n if (e) {\n //Do not hide the small motion form if a child of the form is focused\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n }\n this.setState({\n showMenu: entryIndex\n }, () => {\n if (this.menuBoxRef.current) {\n this.menuBoxRef.current.focus();\n }\n });\n }\n\n formInput(entry, entryIndex, provided = {}) {\n return (\n <div key={entryIndex}>\n <div className=\"journal-grid\">\n <div style={{ textAlign: 'center' }}>\n <span {...provided.dragHandleProps} className=\"icon menu\" onClick={(e) => this.toggleMenu(entryIndex)}></span>\n {this.state.showMenu === entryIndex &&\n <div style={{ textAlign: 'left', marginLeft: '-15px', width: 'auto' }} className=\"info-box blue\" ref={this.menuBoxRef} onBlur={(e) => this.toggleMenu(-1, e)} contentEditable suppressContentEditableWarning={true}>\n <div contentEditable={false}>\n </div>\n </div>\n }\n </div>\n <div>\n <span>{entry.EntryText}</span>\n </div>\n </div>\n </div>\n );\n }\n\n render() {\n const entries = this.props.formData.JournalEntries;\n return (\n <div>\n <div className=\"journal-entry-grid\">\n <div>\n <span></span>\n </div>\n <div>\n <span>{this.props.formData.CategoryDescription}</span>\n </div>\n </div>\n <div>\n <DragDropContext onDragEnd={this.onEntryDragEnd}>\n <Droppable droppableId={`entries-droppable`}>\n {(provided, snapshot) =>\n <div ref={provided.innerRef} style={getListStyle(snapshot.isDraggingOver)}>\n {entries.map((entry, entryIndex) => {\n if (entry) {\n return (\n <Draggable key={`${entry.JournalEntryID}-${entry.Sequence}`} draggableId={`${entry.JournalEntryID}-${entry.Sequence}`} index={entryIndex}>\n {(provided, snapshot) =>\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}>\n {this.formInput(entry, entryIndex, provided)}\n </div>}\n </Draggable>\n );\n }\n })}\n {provided.placeholder}\n </div>\n }\n </Droppable>\n </DragDropContext>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(\n (state) => {\n const { journal } = state;\n return {\n journal\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, journalActionCreators), dispatch)\n }\n },\n null,\n {\n forwardRef: true\n }\n)(JournalVote)","import React from \"react\";\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { Prompt } from 'react-router';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport { navActionCreators } from '../../../stores/lis-nav-store';\nimport { cancelRequest } from '../../../services/request.service';\nimport moment from 'moment-timezone'\nimport LoaderComponent from '../../../lis-shared/lis-layout/components/lis-loader-component';\nimport JournalDetails from './lis-journal-details';\nimport ReactTable from 'react-table';\nimport { journalActionCreators } from \"../../../stores/lis-journal-store\";\nimport JournalVote from \"../forms/journal-vote\";\n\nclass JournalManagementForm extends React.Component {\n\n constructor(props) {\n super(props)\n this.state = {\n activity: '',\n journal: {},\n currentActivitySequence: 0,\n isLoaded: false,\n disableChanges: false,\n //Fieldsets\n indexFieldsetIsActive: true,\n activityFieldsetIsActive: false,\n previewFieldsetIsActive: false,\n categoriesToMove: [],\n selectedCategoryToMoveTo: -1,\n saving: false,\n isDirty: false\n }\n\n //Ref used to scroll down to activity section\n this.activityRef = React.createRef();\n this.entryFormRef = React.createRef();\n\n this.entryChange = this.entryChange.bind(this);\n this.multipleEntryChange = this.multipleEntryChange.bind(this);\n this.toggleMoveEntry = this.toggleMoveEntry.bind(this);\n this.moveEntry = this.moveEntry.bind(this);\n this.handleSequenceChange = this.handleSequenceChange.bind(this);\n this.saveJournal = this.saveJournal.bind(this);\n this.generateMml = this.generateMml.bind(this);\n this.showActivity = this.showActivity.bind(this);\n }\n\n toggleFieldsetCollapse(isActive) {\n this.setState(state => ({\n [isActive]: !state[isActive]\n }));\n }\n\n entryChange(index, entry, sequence) {\n //Takes the sequence, which is always one more than the index, and change the values for that JournalEntry\n let newFormData = JSON.parse(JSON.stringify(this.state.journal));\n newFormData.JournalCategories[sequence - 1].JournalEntries[index] = entry;\n this.setState({\n journal: newFormData,\n isDirty: true\n });\n }\n\n multipleEntryChange(entries, sequence) {\n let newFormData = JSON.parse(JSON.stringify(this.state.journal));\n newFormData.JournalCategories[sequence - 1].JournalEntries = entries;\n this.setState({\n journal: newFormData,\n isDirty: true\n });\n }\n\n toggleMoveEntry(open, categoryIndex, entryIndex) {\n if (open) {\n const currentCategory = this.state.journal.JournalCategories[categoryIndex];\n const applicableCategories = this.state.journal.JournalCategories.filter(cat => cat.CategoryType === currentCategory.CategoryType && cat.JournalCategoryID !== currentCategory.JournalCategoryID);\n this.setState({\n movingCategorySource: categoryIndex,\n movingEntrySource: entryIndex,\n categoriesToMove: applicableCategories,\n showMoveEntryDialog: open\n });\n } else {\n this.setState({\n showMoveEntryDialog: false,\n categoriesToMove: [],\n selectedCategoryToMoveTo: -1,\n movingCategorySource: -1,\n movingEntrySource: -1,\n });\n }\n }\n\n moveEntry(destinationCategoryIndex) {\n let sourceCategory = { ...this.state.journal.JournalCategories[this.state.movingCategorySource] }\n let sourceEntry = { ...sourceCategory.JournalEntries[this.state.movingEntrySource] };\n let destinationCategory = this.state.journal.JournalCategories.find(cat => cat.JournalCategoryID === this.state.categoriesToMove[destinationCategoryIndex].JournalCategoryID);\n if (destinationCategory) {\n let newEntry = {\n ...sourceEntry,\n JournalCategoryID: destinationCategory.JournalCategoryID,\n Sequence: destinationCategory.JournalEntries && destinationCategory.JournalEntries.length > 0 ? destinationCategory.JournalEntries[destinationCategory.JournalEntries.length - 1].Sequence + 1 : 1\n };\n this.saveEntry(newEntry);\n this.showActivity(destinationCategory);\n this.toggleMoveEntry(false);\n\n //Remove the old entry from the state variable\n let journal = { ...this.state.journal };\n journal.JournalCategories[this.state.movingCategorySource].JournalEntries.splice(this.state.movingEntrySource, 1);\n this.setState({\n journal: journal,\n isDirty: true\n });\n }\n }\n\n handleSequenceChange(categories) {\n //The sequence change has been handled by the JournalIndex class. So the new list of Journal Categories is sent here to modify the journal\n let journal = this.state.journal;\n //Check and see if the currently opened activity has been affected by the sequence change. If so, then update the current activity state item \n let newCategoryIndex = this.state.currentActivitySequence - 1;\n if (categories[this.state.currentActivitySequence - 1] !== this.state.journal.JournalCategories[this.state.currentActivitySequence - 1]) {\n newCategoryIndex = categories.findIndex(category => category === this.state.journal.JournalCategories[this.state.currentActivitySequence - 1])\n }\n journal.JournalCategories = categories;\n //currentActivitySequence is 0 by default so we don't want to set currentActivitySequence to an undefined value. \n //So make a check to see if the user has clicked on a category item yet. If not then leave it at zero\n this.setState({\n journal: journal,\n isDirty: true,\n currentActivitySequence: categories[newCategoryIndex] ? categories[newCategoryIndex].Sequence : 0\n });\n }\n\n showActivity(category, e) {\n let journal = JSON.parse(JSON.stringify(this.state.journal));\n //Open the activity drawer\n this.setState({\n activityFieldsetIsActive: true,\n currentActivitySequence: category.Sequence,\n activity: category,\n journal: journal\n }, () => {\n //Get the size and position of the activity form and scroll down to it\n const activityRect = this.activityRef.current.getBoundingClientRect();\n const windowY = window.scrollY;\n window.scrollTo({\n top: activityRect.top + windowY,\n behavior: 'smooth'\n });\n\n });\n }\n\n saveJournal() {\n let journal = JSON.parse(JSON.stringify(this.state.journal));\n //Disable changes so the user doesn't try to save something else while this is being saved\n this.setState({ disableChanges: true })\n this.props.actions.saveJournal({ journals: [journal] })\n .then(() => {\n const newJournal = this.props.journal.journalSave;\n this.setState({\n journal: newJournal,\n disableChanges: false,\n saving: false,\n isDirty: false\n }, () => {\n this.props.actions.makeToast([{ message: 'Save Success', type: \"success\" }])\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({ saving: false })\n this.props.actions.makeToast([{ message: 'Save Failed', type: \"failure\" }])\n });\n }\n\n generateMml() {\n this.setState({ generatingMml: true, disableChanges: true })\n this.props.actions.generateJournal('?sessionID=' + this.state.journal.SessionID + '&journalDay=' + this.state.journal.JournalDate)\n .then(() => {\n this.setState({\n disableChanges: false,\n generatingMml: false\n }, () => {\n const blob = new Blob([this.props.journal.journalGeneration], { type: 'text/html' });\n const filename = `Journal ${moment(this.state.journal.JournalDate).format(\"MM/DD/yyyy\")}.mml`;\n const url = URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n\n // Clean up\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n this.props.actions.makeToast([{ message: 'Generation Success', type: \"success\" }])\n });\n }).catch(err => {\n if (err === 'Aborted') {\n return;\n }\n console.log(err);\n this.setState({ generatingMml: false })\n this.props.actions.makeToast([{ message: 'Generation Failed', type: \"failure\" }])\n });\n }\n\n componentDidMount() {\n this.props.actions.getJournalById('journalID=' + this.props.match.params.journalid, true)\n .then(() => {\n if (!this.props.journal.journalById || !this.props.journal.journalById.length) { throw 'No Journals found' }\n let journal = this.props.journal.journalById[0];\n if (journal.JournalCategories) {\n //Check if the Sequence for each category is linear\n const sequences = journal.JournalCategories.map(mc => mc.Sequence);\n if (journal.JournalCategories.length > 0 && (journal.JournalCategories[0].Sequence !== 1 || !sequences.every((seq, i) => i === sequences.length - 1 || seq + 1 === sequences[i + 1]))) {\n //Get the sequence right. Sometimes the result back from the server has a lot of skipped indices\n journal.JournalCategories.forEach((category, index) => {\n category.Sequence = index + 1;\n });\n this.setState({\n journal: journal,\n isLoaded: true,\n previewFieldsetIsActive: true\n }, //Save the new sequence so we don't have to do this process again for this journal\n () => { this.saveJournal(); });\n } else { //It is in order so display the journal\n this.setState({\n journal: journal,\n isLoaded: true,\n previewFieldsetIsActive: true\n });\n }\n } else {\n this.setState({\n journal: '',\n isLoaded: true,\n previewFieldsetIsActive: false\n });\n this.props.actions.makeToast([{ message: \"Loading Failed\", type: \"failure\" }])\n }\n }).catch(err => {\n if (err === 'Aborted') {\n return\n }\n console.log(err);\n this.setState({\n journal: '',\n isLoaded: true,\n });\n });\n\n }\n\n componentWillUnmount() {\n cancelRequest();\n }\n\n render() {\n if (this.state.isLoaded) {\n return (\n <div className=\"user-forms dlas-forms\">\n <div>\n <Prompt\n when={this.state.isDirty}\n message={`You have unsaved changes. Are you sure you would like to leave?`}\n />\n </div>\n <h2>{moment(this.state.journal.JournalDate).format(\"LL\")}</h2>\n {this.state.showMoveEntryDialog &&\n <div className='popup' onClick={() => this.toggleMoveEntry(false)}>\n <div className='popup-inner tall-content' onClick={e => e.stopPropagation()}>\n {this.state.categoriesToMove.length === 0 ?\n <p>There are no categories where you can move this entry</p>\n :\n <p>Choose a category to move the entry to</p>\n }\n <div style={{ paddingBottom: '10px' }}>\n <ReactTable\n data={this.state.categoriesToMove}\n getTrProps={(_state, rowInfo) => {\n return {\n style: {\n background: rowInfo && rowInfo.index === this.state.selectedCategoryToMoveTo ? '#89ff89' : '',\n cursor: rowInfo ? 'pointer' : 'default'\n },\n onClick: () => this.setState({ selectedCategoryToMoveTo: rowInfo.index })\n }\n }}\n noDataText=\"\"\n columns={[\n {\n id: \"checkbox\",\n accessor: \"\",\n className: \"checkbox-column\",\n Cell: ({ index }) => {\n return <span className={index === this.state.selectedCategoryToMoveTo ? \"icon checkmark\" : \"\"}></span>;\n },\n sortable: false,\n filterable: false,\n width: 45\n },\n {\n Header: \"Sequence\",\n accessor: \"Sequence\",\n width: 50\n },\n {\n Header: \"Type\",\n accessor: \"CategoryType\"\n },\n {\n Header: \"Description\",\n accessor: \"CategoryDescription\"\n }\n ]}\n defaultPageSize={5}\n className=\"-striped -highlight\"\n />\n </div>\n <div className=\"flex-row\" sty>\n <button className=\"button secondary\" onClick={() => this.toggleMoveEntry(false)}>Cancel</button>\n {this.state.categoriesToMove.length > 0 &&\n <button disabled={this.state.selectedCategoryToMoveTo === -1} onClick={() => this.moveEntry(this.state.selectedCategoryToMoveTo)} className=\"button\">Move</button>\n }\n </div>\n </div>\n </div>\n }\n <fieldset className={this.state.indexFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'indexFieldsetIsActive')}>Index</legend>\n <div>\n <JournalIndex\n categories={this.state.journal.JournalCategories ? this.state.journal.JournalCategories : []}\n onSequenceChange={this.handleSequenceChange}\n showActivity={this.showActivity}\n currentActivitySequence={this.state.currentActivitySequence}\n disableChanges={this.state.disableChanges} />\n </div>\n </fieldset>\n <fieldset ref={this.activityRef} className={this.state.activityFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'activityFieldsetIsActive')}>Activity</legend>\n {this.state.currentActivitySequence && this.state.currentActivitySequence !== 0 ?\n <TypeSwitcher\n type={this.state.activity}\n ref={this.entryFormRef}\n onEntryChange={this.entryChange}\n onMultipleEntryChange={this.multipleEntryChange}\n currentActivitySequence={this.state.currentActivitySequence}\n toggleMoveEntry={this.toggleMoveEntry}\n formData={this.state.journal.JournalCategories ? this.state.journal.JournalCategories[this.state.currentActivitySequence - 1] : {}} />\n : null}\n </fieldset>\n <fieldset className={this.state.previewFieldsetIsActive ? 'fieldset-collapse fieldset-open' : 'fieldset-collapse fieldset-closed'} >\n <legend onClick={this.toggleFieldsetCollapse.bind(this, 'previewFieldsetIsActive')}>Preview</legend>\n <Preview\n categories={this.state.journal.JournalCategories ? this.state.journal.JournalCategories : []}\n save={this.saveJournal}\n saving={this.state.saving}\n generateMml={this.generateMml}\n generatingMml={this.state.generatingMml}\n isDirty={this.state.isDirty}\n />\n </fieldset>\n </div>\n\n )\n } else {\n return (\n <div className=\"user-forms dlas-forms\">\n <LoaderComponent className=\"center-spinner\" data={this.state.isLoaded} />\n </div>\n )\n }\n }\n}\n\nconst getItemStyle = (isDisabled, isDragging, draggableStyle, pendingDeletion) => ({\n userSelect: 'none',\n background: isDisabled ? '#c7c7c7' : isDragging ? '#34495e' : 'white',\n color: isDisabled ? 'black' : isDragging ? 'white' : '#34495e',\n border: pendingDeletion ? 'red' : 'none',\n ...draggableStyle,\n});\n\nconst getListStyle = isDraggingOver => ({\n background: isDraggingOver ? '#8b9fb3' : '#666666',\n width: '100%',\n});\n\nclass JournalIndex extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n }\n }\n\n onDragEnd(result) {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n const items = (() => {\n const list = Array.from(this.props.categories);\n const [removed] = list.splice(result.source.index, 1);\n\n list.splice(result.destination.index, 0, removed);\n // Reorder the Sequence value too because the sequence value is used to show what order the preview is in\n list.forEach(function (element, index) {\n element.Sequence = index + 1\n });\n return list;\n })();\n //Send the new values up to the parent to be set in the parent's state\n this.props.onSequenceChange(items);\n }\n\n\n render() {\n if (this.props.categories) {\n return (\n <div className={this.props.disableChanges ? 'dnd-disabled' : ''}>\n <DragDropContext onDragEnd={this.onDragEnd.bind(this)}>\n <Droppable droppableId=\"droppable\">\n {(provided, snapshot) => (\n <table\n className=\"dnd-grid-table journal-categories-grid\"\n ref={provided.innerRef}\n style={getListStyle(snapshot.isDraggingOver)}\n >\n <thead className=\"dnd-grid-header\" style={getListStyle(snapshot.isDraggingOver)}>\n <tr>\n <th scope=\"col\" id={'-grabber-column'}></th>\n <th scope=\"col\" id={'-display-column'}>Display #</th>\n <th scope=\"col\" id={'-display-column'}>Section</th>\n <th scope=\"col\" id={'-actions-column'}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {this.props.categories.map((item, index) => (\n <Draggable key={`${item.Sequence}-${item.JournalCategoryID}`} draggableId={`${item.Sequence}-${item.JournalCategoryID}`} index={index}>\n {(provided, snapshot) => (\n <tr\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className={this.props.categories[this.props.currentActivitySequence - 1] === item ? 'selected' : 'not-selected'}\n style={getItemStyle(\n this.props.disableChanges,\n snapshot.isDragging,\n provided.draggableProps.style\n )} >\n <td><button id={item.JournalCategoryID + '-grabber-button'} className=\"button draggable\">Drag and drop</button></td>\n <td>{index + 1}</td>\n <td className='category-desc' onClick={(e) => this.props.showActivity(this.props.categories[index], e)}>\n {<button type=\"button\">{item.CategoryDescription}</button>}\n </td>\n <td>\n <button\n type=\"button\"\n onClick={(e) => this.props.showActivity(this.props.categories[index], e)}\n className={this.props.categories[this.props.currentActivitySequence - 1] === item\n ? 'icon edit-alt'\n : 'icon edit'}>\n </button>\n </td>\n </tr>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n </tbody>\n </table>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n )\n } else {\n return (<div></div>)\n }\n }\n\n}\n\nclass Preview extends React.Component {\n render() {\n const previewLengthStyle = { height: '500px', overflowY: 'scroll', backgroundColor: 'white' }\n return (\n <React.Fragment>\n <div style={{ display: 'flex', gap: '5px', justifyContent: 'flex-end' }}>\n <button type=\"button\" disabled={this.props.isDirty || this.props.generatingMml} className=\"button\" onClick={this.props.generateMml}>Generate MML</button>\n <button type=\"button\" disabled={this.props.saving || this.props.generatingMml} className=\"button\" onClick={this.props.save}>Save</button>\n </div>\n <div style={previewLengthStyle}>\n <JournalDetails\n categories={this.props.categories}\n />\n </div>\n </React.Fragment>\n )\n }\n}\n\nconst TypeSwitcher = React.forwardRef((props, ref) => {\n switch (props.ObjectName) {\n case 'Vote':\n default:\n return <JournalVote {...props} />\n }\n});\n\nexport default connect(\n (state) => {\n const { journal, nav } = state;\n return {\n journal,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, journalActionCreators, navActionCreators), dispatch)\n }\n }\n)(JournalManagementForm)","import React from 'react';\nimport { Route } from 'react-router';\nimport JournalManagementGrid from './lis-journal-grid';\nimport JournalManagementForm from './lis-journal-form';\n\nclass JournalManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedSession: '',\n selectedCategory: ''\n };\n this.handleCategoryChange = this.handleCategoryChange.bind(this);\n this.handleSessionChange = this.handleSessionChange.bind(this);\n }\n\n handleCategoryChange(value) {\n this.setState({\n selectedCategory: value\n })\n }\n\n handleSessionChange(value, callback) {\n this.setState({\n selectedSession: value\n }, () => callback());\n }\n\n render() {\n return (\n <div>\n <Route exact path={this.props.match.path} render={props => <JournalManagementGrid\n {...props}\n selectedCategory={this.state.selectedCategory}\n selectedSession={this.state.selectedSession}\n handleSessionChange={this.handleSessionChange}\n handleCategoryChange={this.handleCategoryChange}\n />} />\n <Route path={`${this.props.match.path}/edit-journal/:journalid`} component={JournalManagementForm} />\n </div>\n )\n }\n}\n\nexport default JournalManagement;","import React, { Component } from 'react';\nimport { Route, Redirect, withRouter } from 'react-router';\nimport queryString from 'query-string';\nimport { AuthenticatedTemplate, useMsal } from \"@azure/msal-react\";\nimport { loginRequest } from \"./authConfig\";\n\nimport Layout from './lis-shared/lis-layout/components/lis-layout-component';\nimport Login from './lis-shared/lis-login/components/lis-login-form';\nimport CreateAccount from './lis-shared/lis-login/components/lis-create-account-form';\nimport RegisterAccount from './lis-shared/lis-login/components/lis-register-account-form';\nimport ForgotPassword from './lis-shared/lis-login/components/lis-forgot-password-form';\nimport ChangePassword from './lis-shared/lis-login/components/lis-change-password-form';\n\nimport MemberManagement from './lis-admin/lis-member-management/components/lis-member-management';\nimport SessionManagement from './lis-admin/lis-session-management/components/lis-session-management';\nimport CommitteeManagement from './lis-admin/lis-committee-management/components/lis-committee-management';\nimport DocketManagement from './lis-admin/lis-docket-management/components/lis-docket-management';\nimport CalendarManagement from './lis-admin/lis-calendar-management/components/lis-calendar-management';\nimport MinutesManagement from './lis-admin/lis-minutes-management/components/lis-minutes-management';\nimport VersionManagement from './lis-admin/lis-version-management/components/lis-version-management';\nimport BillManagement from './lis-admin/lis-bill-management/components/lis-bill-management';\nimport CommunicationsManagement from './lis-admin/lis-communications-management/components/lis-communications-management';\nimport VoteManagement from './lis-admin/lis-vote-management/components/lis-vote-management';\nimport PrintManagement from './lis-admin/lis-print-management/components/lis-print-management';\nimport ReportManagement from './lis-admin/lis-report-management/components/lis-report-management';\nimport AmendmentManagement from './lis-admin/lis-amendment-management/components/lis-amendment-management';\nimport AdminDashboard from './lis-admin/lis-admin-dashboard/components/lis-admin-dashboard';\nimport NotificationManagement from './lis-admin/lis-notifications-management/components/lis-notification-management';\nimport PartnerManagement from './lis-admin/lis-partner-management/components/lis-partner-management';\nimport UserManagement from './lis-admin/lis-user-management/components/lis-user-management';\n\nimport Home from './lis-public/components/lis-home/lis-public-home';\nimport PublicSessionInformation from './lis-public/components/lis-public-session-list';\nimport PublicCommitteeInformation from './lis-public/components/lis-committee/lis-public-committee-information';\nimport PublicMemberInformation from './lis-public/components/lis-public-members-list';\nimport PublicMemberDetails from './lis-public/components/lis-public-member-details';\nimport PublicBillSearch from './lis-public/components/lis-bill-search/lis-public-bill-search';\nimport SearchReportPage from './lis-public/components/lis-bill-search/lis-report-bill-search';\nimport SearchTranslator from './lis-public/components/lis-bill-search/search-translator';\nimport ShorthandUrlTranslator from './lis-public/components/lis-bill-search/shorthand-url-translator';\nimport SearchHelp from './lis-public/components/lis-bill-search/lis-search-help';\nimport PublicBillDetails from './lis-public/components/lis-bill-details/lis-public-bill-details';\nimport PublicVoteDetails from './lis-public/components/lis-public-vote-details';\nimport PublicDataFiles from './lis-public/components/lis-public-data-files';\nimport PublicCommunicationsList from './lis-public/components/lis-public-communications';\nimport PublicCalendarList from './lis-public/components/lis-public-calendar-list';\nimport PublicCalendarDetails from './lis-public/components/lis-public-calendar-details';\nimport PublicMinutesList from './lis-public/components/lis-public-minutes';\nimport PublicMinutesDetails from './lis-public/components/lis-public-minutes-details';\nimport FullText from './lis-public/components/lis-public-full-text';\nimport PublicSchedule from './lis-public/components/lis-public-schedule';\nimport PublicVoteSearch from './lis-public/components/lis-public-vote-search';\nimport PublicMemberLegislation from './lis-public/components/lis-public-member-legislation';\nimport PublicCommunicationDetails from './lis-public/components/lis-public-communication-details';\nimport CommitteeStatDetails from './lis-public/components/lis-committee-statistics';\nimport SessionStatDetails from './lis-public/components/lis-session-statistics';\nimport Unauthorized from './lis-public/components/lis-unauthorized';\nimport ProfileForm from './lis-shared/lis-profile/components/lis-profile-form';\nimport PrivacyComponent from './lis-public/components/lis-privacy';\nimport WatchlistsComponent from './lis-public/components/lis-watchlists';\n\nimport DevsPortal from './lis-developers/public/components/lis-developers-portal';\nimport DocumentComponent from './lis-developers/public/components/lis-document';\nimport KeyRegistration from './lis-developers/public/components/lis-api-key-registration';\nimport KeyConfirmation from './lis-developers/public/components/lis-api-key-confirmation';\nimport TermsOfService from './lis-developers/public/components/lis-terms-of-service';\n\nimport AdminDocs from './lis-developers/admin/components/lis-admin-docs';\n\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { authActionCreators } from './stores/lis-auth-store';\nimport { navActionCreators } from './stores/lis-nav-store';\nimport IdleTimer from 'react-idle-timer'\nimport { parse } from 'query-string';\nimport jwtDecode from 'jwt-decode';\n\nimport Footer from './lis-public/components/lis-footer';\nimport ConfigurationsManagement from './lis-admin/lis-configurations/lis-configurations-management';\nimport JournalManagement from './lis-admin/lis-journal-management/components/lis-journal-management';\nimport moment from 'moment-timezone';\n\nconst idToken = 'LIS_ID_TOKEN';\nconst refreshToken = 'LIS_REFRESH_TOKEN';\nconst refreshTokenExpiration = 'LIS_REFRESH_TOKEN_EXPIRATION';\nconst graphToken = 'GRAPH_ID_TOKEN';\nconst claimsObject = 'LIS_CLAIMS';\n\n// Private route component for auth-only paths. If authstatus == true, show the component.\n// Will eventually need to add on to it for Admin-only paths\nconst PrivateRoute = ({ authstatus, hasPermission, checkingToken, component: Component, ...rest }) => {\n const redirect = '?redirect=' + window.location.pathname + encodeURIComponent(window.location.search);\n return (<Route {...rest} render={(props) => (\n authstatus && hasPermission\n ? <Component {...props} />\n : checkingToken ? <div className=\"center-spinner spinner\" />\n : !authstatus ? <Redirect to={'/login' + redirect} />\n : <Redirect to=\"/unauthorized\" />\n )} />)\n}\n\nclass LISApp extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isIdle: false,\n popupMessage: '',\n counter: null,\n resources: 0,\n permissions: null,\n houseToken: \"\",\n checkingToken: true\n };\n this.idleTimer = null\n this.onActive = this.onActive.bind(this)\n this.onIdle = this.onIdle.bind(this)\n this.checkPermissions = this.checkPermissions.bind(this);\n this.setHouseToken = this.setHouseToken.bind(this);\n };\n\n checkPermissions() {\n //determine permissions for specific pages in case of direct url navigation from a logged in user who does not have specific permissions\n let permissions = [];\n this.setState({ resources: this.props.login.userClaims.resources.length })\n for (let i = 0; i < this.props.login.userClaims.resources.length; i++) {\n switch (this.props.login.userClaims.resources[i]) {\n case \"All\":\n permissions.push(\n { canAccessMemberMgmt: true },\n { canAccessSessionMgmt: true },\n { canAccessCommitteeMgmt: true },\n { canAccessMinutesMgmt: true },\n { canAccessDocketMgmt: true },\n { canAccessBillMgmt: true },\n { canAccessVersionMgmt: true },\n { canAccessAmendmentMgmt: true },\n { canAccessCommMgmt: true },\n { canAccessCalendarMgmt: true },\n { canAccessConfigurationsMgmt: true },\n { canAccessJournalMgmt: true },\n { canAccessVoteMgmt: true },\n { canAccessPrintMgmt: true },\n { canAccessReportMgmt: true },\n { canAccessMeetingsMgmt: true },\n { canAccessWatchlists: true },\n { canAccessPartnerMgmt: true },\n { canAccessUserMgmt: true },\n { canAccessDocs: true },\n { canAccessBds: true },\n { canAccessSenateLinks: true },\n { canAccessPatronStatusReport: true }\n );\n this.setState({ permissions })\n return; //If the user is admin allow access to all links and exit\n case \"Session\":\n permissions.push({ canAccessSessionMgmt: true })\n break;\n case \"Committee\":\n permissions.push({ canAccessCommitteeMgmt: true })\n break;\n case \"Subcommittee\":\n permissions.push({ canAccessCommitteeMgmt: true })\n break;\n case \"MinutesBook\":\n permissions.push({ canAccessMinutesMgmt: true })\n break;\n case \"Docket\":\n permissions.push({ canAccessDocketMgmt: true })\n break;\n case \"Agenda\":\n permissions.push({ canAccessDocketMgmt: true })\n break;\n case \"LegislationEvent\":\n permissions.push({ canAccessBillMgmt: true })\n break;\n case \"LegislationText\":\n permissions.push({ canAccessVersionMgmt: true, canAccessAmendmentMgmt: true })\n break;\n case \"LegislationCommunications\":\n permissions.push({ canAccessCommMgmt: true })\n break;\n case \"Calendar\":\n permissions.push({ canAccessCalendarMgmt: true })\n break;\n case \"Vote\":\n permissions.push({ canAccessVoteMgmt: true })\n break;\n case \"Schedule\":\n permissions.push({ canAccessMeetingsMgmt: true })\n break;\n case \"PrintDocuments\":\n permissions.push({ canAccessPrintMgmt: true })\n break;\n case \"JournalFileGeneration\":\n permissions.push({ canAccessJournalMgmt: true })\n break;\n //Roles unaccounted for in navbar list items \n case \"AdvancedLegislationSearch\":\n break;\n case \"CalendarFileGeneration\":\n break;\n case \"CommunicationFileGeneration\":\n break;\n case \"CommitteeLegislationReferral\":\n break;\n case \"CommitteesByMemberSearch\":\n break;\n case \"Communication\":\n break;\n case \"Contact\":\n break;\n case \"Groups\":\n break;\n case \"GroupsRoles\":\n break;\n case \"LegislationByCommitteeSearch\":\n break;\n case \"LegislationByMember\":\n break;\n case \"LegislationFileGeneration\":\n break;\n case \"LegislationPatron\":\n break;\n case \"LegislationSummary\":\n break;\n case \"LegislationVersion\":\n break;\n case \"Member\":\n permissions.push({ canAccessMemberMgmt: true })\n break;\n case \"MembersByCommittee\":\n break;\n case \"MembersSearch\":\n break;\n case \"MinuteEntries\":\n break;\n case \"Organization\":\n break;\n case \"PatronTypeByRole\":\n break;\n case \"PartnerAuthentication\":\n break;\n case \"Person\":\n permissions.push({ canAccessUserMgmt: true })\n break;\n case \"Personnel\":\n permissions.push({ canAccessUserMgmt: true })\n break;\n case \"Roles\":\n break;\n case \"User\":\n break;\n case \"VoteFileGeneration\":\n break;\n case \"LegislationCollections\":\n if (this.props.login.userClaims.claims.find(claim => claim.Scope === \"Paid\" && claim.Resource === \"LegislationCollections\" && claim.RoleName === \"PaidLegislationCollectionsAuthor\")) permissions.push({ canAccessWatchlists: true })\n break;\n case \"ReportFileGeneration\":\n permissions.push({ canAccessReportMgmt: true })\n break;\n case \"APIDocumentation\":\n permissions.push({ canAccessDocs: true })\n break;\n case \"BDSDrafter\":\n permissions.push({ canAccessBds: true })\n break;\n case \"SenateLinks\":\n permissions.push({ canAccessSenateLinks: true })\n break;\n default:\n console.log(\"Resource unaccounted for: \", this.props.login.userClaims.resources[i]);\n break;\n }\n }\n\n //If a signed in member, then provide a link to the member status report page.\n const jwt = localStorage.getItem(idToken);\n if (jwt) {\n try {\n const parsedToken = jwtDecode(jwt);\n const mNumber = parsedToken.MemberNumber;\n if (mNumber) {\n permissions.push({ canAccessPatronStatusReport: true })\n }\n } catch (e) {\n if (Object.getPrototypeOf(e).toString() === 'InvalidTokenError') {\n //Token is malformed..nothing to do\n } else {\n console.error(e);\n }\n }\n }\n\n this.setState({ permissions })\n }\n\n componentDidMount() {\n let tokenExp = localStorage.getItem(refreshTokenExpiration);\n if (tokenExp !== null && tokenExp !== 'undefined') {\n if (tokenExp < new Date().getTime()) {\n localStorage.removeItem(idToken);\n localStorage.removeItem(refreshToken);\n localStorage.removeItem(refreshTokenExpiration);\n localStorage.removeItem(graphToken);\n localStorage.removeItem(claimsObject);\n this.setState({ checkingToken: false })\n } else {\n if (this.props.login.isTokenExpired) {\n if (localStorage.getItem(idToken)) {\n this.props.actions.refreshAccessToken().finally(() => {\n this.setState({ checkingToken: false })\n })\n } else {\n this.setState({ checkingToken: false })\n }\n } else {\n this.setState({ checkingToken: false })\n }\n }\n } else {\n this.setState({ checkingToken: false })\n }\n this.checkPermissions();\n }\n\n componentDidUpdate(prevProps) {\n if ((this.props.login.initiateRedirect !== prevProps.login.initiateRedirect) && this.props.login.initiateRedirect === true) {\n const parsed = parse(window.location.search);\n // If there is a redirect then send the user there, if not then just refresh the current page, which is easier then trying to figure out what endpoint need to be re-run to get partner information\n if (parsed.redirect) {\n this.props.history.push(parsed.redirect);\n } else if (window.location.pathname === \"/login\") {\n this.props.history.push(\"/\");\n } else if (!window.location.pathname === \"/change-password\") { // we are manually logging in users after they successfully change their password, prevent an undesired refresh as a result of changing props\n window.location.reload();\n }\n }\n\n //If user permissions have changed\n if (this.props.login.userClaims.resources.length !== this.state.resources) {\n this.checkPermissions();\n }\n }\n\n onActive(e) {\n console.log('user is active', e)\n console.log('time elapsed', this.idleTimer.getElapsedTime())\n this.setState({\n isIdle: false\n });\n }\n\n onIdle(e) {\n console.log('user is idle', e)\n console.log('last active', this.idleTimer.getLastActiveTime())\n if (this.props.login.isAuthenticated) {\n this.setState({\n isIdle: true,\n popupMessage: 'It looks like you have been away and you are about to time out. Need more time?'\n });\n }\n }\n\n setHouseToken(houseToken, expirationDate) {\n this.setState({\n houseToken\n }, () => {\n //Find the refresh token in the mess MSAL drops into local storage because they won't give me a function to get it properly -JGB\n let keys = Object.keys(localStorage);\n let refreshToken = \"\";\n keys.forEach((k, i) => {\n let value = localStorage.getItem(k);\n if (typeof value === \"object\") {\n let currentItem = JSON.parse(value);\n if (currentItem[\"credentialType\"] === \"RefreshToken\") {\n refreshToken = currentItem[\"secret\"];\n }\n }\n })\n this.props.actions.houseLogin(this.state.houseToken, refreshToken, expirationDate);\n })\n }\n\n render() {\n const { isAuthenticated } = this.props.login;\n const { permissions, checkingToken } = this.state;\n\n // IHOD wants to display the bill details page in an iframe without the site header\n if (window.location.pathname.includes(\"static/bill-details\")) {\n return (\n <div>\n <Route path=\"/static/bill-details/:sessionCode/:billnumber\" component={PublicBillDetails} />\n </div>\n )\n }\n\n return (\n permissions &&\n <IdleTimer\n ref={ref => { this.idleTimer = ref }}\n element={document}\n onActive={this.onActive}\n onIdle={this.onIdle}\n //2 hours\n timeout={60000 * 120}\n >\n <div ref={(divElement) => { this.divElement = divElement; }} className={this.divElement && this.divElement.offsetHeight > window.innerHeight ? \"overheight\" : \"\"} id=\"height-checker\">\n <Layout isIdle={this.state.isIdle} popupMessage={this.state.popupMessage} location={this.props.location} permissions={permissions} >\n <Route exact path='/' component={Home} />\n <Route exact path='/home' component={Home} />\n <Route exact path='/home/:sessionCode' component={Home} />\n <Route exact path=\"/bill-search\" component={PublicBillSearch} />\n <Route exact path=\"/bill-search-report/:id\" component={SearchReportPage} />\n <Route exact path=\"/bill-search-report/composite/:id\" component={SearchReportPage} />\n <Route exact path={[\"/bill-search/:id/:word\", \"/bill-search/:id/:word/:wordparam\"]} component={SearchTranslator} />\n <Route exact path=\"/q\" component={ShorthandUrlTranslator} />\n <Route exact path=\"/q/:params\" component={ShorthandUrlTranslator} />\n <Route exact path='/search-help' component={SearchHelp} />\n <Route exact path='/bill-details/:sessionCode/:billnumber' component={!this.props.nav.showOverlay && PublicBillDetails} />\n <Route exact path='/bill-details/:sessionCode/:billnumber/text/:documentcode' component={FullText} />\n <Route exact path='/bill-details/:sessionCode/:billnumber/text/:documentcode/hilite' component={FullText} />\n <Route exact path='/vote-details/:billnumber/:sessioncode/:votenumber' component={PublicVoteDetails} />\n <Route exact path='/data-files' component={PublicDataFiles} />\n <Route exact path='/data-files/:sessionCode' component={PublicDataFiles} />\n <Route exact path='/schedule' component={PublicSchedule} />\n <Route exact path='/session-information' component={PublicSessionInformation} />\n <Route exact path='/session-details/:sessioncode/communications' component={PublicCommunicationsList} />\n <Route exact path='/session-details/:sessioncode/communications/:commid' component={PublicCommunicationDetails} />\n <Route exact path='/session-details/:sessioncode/calendar' component={PublicCalendarList} />\n <Route exact path='/session-details/:sessioncode/calendar/:calendarid' component={PublicCalendarDetails} />\n <Route exact path='/session-details/:sessioncode/minutes-list/:chamber' component={PublicMinutesList} />\n <Route exact path='/session-details/:sessioncode/minutes/:minutesid' component={PublicMinutesDetails} />\n <Route path='/session-details/:sessioncode/committee-information' component={PublicCommitteeInformation} />\n <Route path={['/vote-search/:sessioncode/:membernumber', '/vote-search/:sessioncode']} component={PublicVoteSearch} />\n <Route exact path='/session-details/:sessioncode/member-information' component={PublicMemberInformation} />\n <Route exact path='/session-details/:sessioncode/member-information/:membernumber/member-details' component={PublicMemberDetails} />\n <Route exact path='/session-details/:sessioncode/member-legislation/:chambercode' component={PublicMemberLegislation} />\n <Route exact path='/session-details/:sessioncode/statistics/committee/:chambercode' component={CommitteeStatDetails} />\n <Route exact path='/session-details/:sessioncode/statistics/status/' component={SessionStatDetails} />\n <Route exact path='/watchlists' component={WatchlistsComponent} />\n\n <Route exact path='/register-account' component={RegisterAccount} />\n <Route exact path='/registration/:registerhash' component={CreateAccount} />\n <Route exact path='/forgot-password' component={ForgotPassword} />\n <Route exact path={'/passwordreset/:resethash'} component={ChangePassword} />\n\n <Route exact path='/login' component={Login} authstatus={isAuthenticated} />\n\n <Route exact path='/developers' component={DevsPortal} />\n <Route exact path='/developers/:docName' component={DocumentComponent} />\n <Route exact path='/apiregistration' component={KeyRegistration} />\n <Route exact path='/apiregistration/:params' component={KeyConfirmation} />\n <Route exact path='/tos' component={TermsOfService} />\n\n <Route exact path='/unauthorized' component={Unauthorized} />\n\n <Route exact path='/privacy' component={PrivacyComponent} />\n\n <PrivateRoute path='/member-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessMemberMgmt))} component={MemberManagement} />\n <PrivateRoute path='/session-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessSessionMgmt))} component={SessionManagement} />\n <PrivateRoute path='/committee-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessCommitteeMgmt))} component={CommitteeManagement} />\n <PrivateRoute path='/docket-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessDocketMgmt))} component={DocketManagement} />\n <PrivateRoute path='/calendar-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessCalendarMgmt))} component={CalendarManagement} />\n <PrivateRoute path='/configurations-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessConfigurationsMgmt))} component={ConfigurationsManagement} />\n <PrivateRoute path='/minutes-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessMinutesMgmt))} component={MinutesManagement} />\n <PrivateRoute path='/communications-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessCommMgmt))} component={CommunicationsManagement} />\n <PrivateRoute path='/version-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessVersionMgmt))} component={VersionManagement} />\n <PrivateRoute path='/bill-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessBillMgmt))} component={BillManagement} />\n <PrivateRoute path='/vote-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessVoteMgmt))} component={VoteManagement} />\n <PrivateRoute path='/print-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessPrintMgmt))} component={PrintManagement} />\n <PrivateRoute path='/report-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessReportMgmt))} component={ReportManagement} />\n <PrivateRoute path='/amendment-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessAmendmentMgmt))} component={AmendmentManagement} />\n <PrivateRoute path='/partner-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessPartnerMgmt))} component={PartnerManagement} />\n <PrivateRoute path='/user-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessMemberMgmt))} component={UserManagement} />\n <PrivateRoute path='/journal-management' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessJournalMgmt))} component={JournalManagement} />\n <PrivateRoute path='/dashboard' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={true} component={AdminDashboard} />\n <PrivateRoute path='/notifications' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={true} component={NotificationManagement} />\n <PrivateRoute path='/profile' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={true} component={ProfileForm} />\n <PrivateRoute path='/change-password' checkingToken={checkingToken} authstatus={isAuthenticated || (this.props.location.search && queryString.parse(this.props.location.search).emailaddress)} hasPermission={true} component={ChangePassword} />\n <PrivateRoute path='/admin-developers' checkingToken={checkingToken} authstatus={isAuthenticated} hasPermission={Boolean(permissions.find(p => p.canAccessDocs))} component={AdminDocs} />\n </Layout>\n </div>\n\n {!this.props.location.pathname.includes(\"management\") &&\n <Footer />\n }\n\n <AuthenticatedTemplate>\n <ProfileContent\n setHouseToken={this.setHouseToken}\n houseToken={this.state.houseToken}\n isAuthenticated={this.props.login.isAuthenticated}\n />\n </AuthenticatedTemplate>\n\n </IdleTimer>\n );\n }\n}\n\nfunction ProfileContent(props) {\n const { instance, accounts } = useMsal();\n\n function RequestAccessToken() {\n const request = {\n ...loginRequest,\n account: accounts[0]\n };\n\n instance.acquireTokenSilent(request).then((response) => {\n props.setHouseToken(response.accessToken, response.expiresOn);\n return true;\n }).catch((e) => {\n console.log(e)\n });\n }\n\n if (props.houseToken === \"\" && !props.isAuthenticated) {\n RequestAccessToken();\n }\n\n return (\n null\n );\n};\n\n// Connect is wrapped by withRouter. \n// This is the only way history.push and Redirect will work when also using Connect. \nconst App = withRouter(connect(\n (state) => {\n const { login, nav } = state;\n return {\n login,\n nav\n }\n },\n (dispatch) => {\n return {\n actions: bindActionCreators(Object.assign({}, authActionCreators, navActionCreators), dispatch)\n }\n }\n)(LISApp))\n\nexport default App;","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n // delete browser cache and hard reload\n window.location.reload(true);\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import { applyMiddleware, compose, createStore } from 'redux';\nimport thunk from 'redux-thunk';\nimport { routerMiddleware } from 'connected-react-router'\nimport { createBrowserHistory } from 'history'\nimport createRootReducer from './reducers'\n\nexport const history = createBrowserHistory();\nconst reactRouterMiddleware = routerMiddleware(history);\n\nconst middleWares = [\n thunk,\n reactRouterMiddleware\n]\n\nexport default function configureStore(preloadedState) {\n const store = createStore(\n createRootReducer(history), // root reducer with router state\n preloadedState,\n compose(applyMiddleware(...middleWares))\n )\n\n return store\n}","\nimport './stylesheets/shared/global.css';\nimport './stylesheets/lis-public-view/public-view.css';\nimport './stylesheets/shared/mobile.css';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { ConnectedRouter } from 'connected-react-router'\nimport App from './App';\nimport registerServiceWorker from './registerServiceWorker';\nimport configureStore, { history } from './configureStore';\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web'\nimport { PublicClientApplication } from \"@azure/msal-browser\";\nimport { MsalProvider } from \"@azure/msal-react\";\nimport { msalConfig } from \"./authConfig\";\n\nconst msalInstance = new PublicClientApplication(msalConfig);\n\nconst store = configureStore();\nconst rootElement = document.getElementById('root');\n\n//Setup the app to use Azure Application Insights.\nlet iKey = '';\nif (window.env.API_SERVER === 'QA') {\n iKey = 'df7a0319-ce88-47d1-9283-fdf1153bff55';\n} else if (window.env.API_SERVER === 'Test') {\n iKey = '0c3c8e03-65f5-4a51-8f94-21301445bf6d';\n}\n\nif (iKey) {\n const appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: iKey\n }\n });\n appInsights.loadAppInsights();\n}\n\nwindow.store = store;\nReactDOM.render(\n <Provider store={store}>\n <ConnectedRouter history={history}>\n <MsalProvider instance={msalInstance}>\n <App />\n </MsalProvider>\n </ConnectedRouter>\n </Provider>,\n rootElement);\n\nregisterServiceWorker();\n","import * as Login from './stores/lis-auth-store';\nimport * as Users from './stores/lis-user-store';\nimport * as Session from './stores/lis-session-store';\nimport * as Committee from './stores/lis-committee-store';\nimport * as Calendar from './stores/lis-calendar-store';\nimport * as Minutes from './stores/lis-minutes-store';\nimport * as Members from './stores/lis-members-store';\nimport * as Bills from './stores/lis-legislation-store';\nimport * as Communications from './stores/lis-communications-store';\nimport * as Patrons from './stores/lis-patron-store';\nimport * as Personnel from './stores/lis-personnel-store';\nimport * as Votes from './stores/lis-votes-store';\nimport * as Print from './stores/lis-print-store';\nimport * as Schedule from './stores/lis-schedule-store';\nimport * as Report from './stores/lis-report-store';\nimport * as Collection from './stores/lis-collection-store';\nimport * as Stat from './stores/lis-statistics-store';\nimport * as Nav from './stores/lis-nav-store';\nimport * as Org from './stores/lis-org-store';\nimport * as Dev from './stores/lis-developers-store';\nimport * as Journal from './stores/lis-journal-store';\nimport { combineReducers } from 'redux';\nimport { connectRouter } from 'connected-react-router';\n\nexport default (history) => combineReducers({\n router: connectRouter(history),\n login: Login.reducer,\n users: Users.reducer,\n session: Session.reducer,\n committee: Committee.reducer,\n calendar: Calendar.reducer,\n members: Members.reducer,\n bills: Bills.reducer,\n nav: Nav.reducer,\n patrons: Patrons.reducer,\n minutes: Minutes.reducer,\n personnel: Personnel.reducer,\n votes: Votes.reducer,\n communications: Communications.reducer,\n schedule: Schedule.reducer,\n print: Print.reducer,\n report: Report.reducer,\n collection: Collection.reducer,\n stats: Stat.reducer,\n organizations: Org.reducer,\n developers: Dev.reducer,\n journal: Journal.reducer\n});","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst committeeListRequest = \"GET_COMMITTEE_LIST_REQUEST\";\nconst committeeListSuccess = \"GET_COMMITTEE_LIST_SUCCESS\";\nconst committeeListFailure = \"GET_COMMITTEE_LIST_FAILURE\";\n\nconst createCommitteeRequest = \"CREATE_COMMITTEE_REQUEST\";\nconst createCommitteeSuccess = \"CREATE_COMMITTEE_SUCCESS\";\nconst createCommitteeFailure = \"CREATE_COMMITTEE_FAILURE\";\n\nconst saveCommitteeRequest = \"SAVE_COMMITTEE_REQUEST\";\nconst saveCommitteeSuccess = \"SAVE_COMMITTEE_SUCCESS\";\nconst saveCommitteeFailure = \"SAVE_COMMITTEE_FAILURE\";\n\nconst partnerCommitteeListRequest = \"GET_PARTNER_COMMITTEE_LIST_REQUEST\";\nconst partnerCommitteeListSuccess = \"GET_PARTNER_COMMITTEE_LIST_SUCCESS\";\nconst partnerCommitteeListFailure = \"GET_PARTNER_COMMITTEE_LIST_FAILURE\";\n\nconst partnerCommitteesRequest = \"GET_PARTNER_COMMITTEES_REQUEST\";\nconst partnerCommitteesSuccess = \"GET_PARTNER_COMMITTEES_SUCCESS\";\nconst partnerCommitteesFailure = \"GET_PARTNER_COMMITTEES_FAILURE\";\n\nconst committeeByIdRequest = \"GET_COMMITTEE_BY_ID_REQUEST\";\nconst committeeByIdSuccess = \"GET_COMMITTEE_BY_ID_SUCCESS\";\nconst committeeByIdFailure = \"GET_COMMITTEE_BY_ID_FAILURE\";\n\nconst committeeByNumberRequest = \"GET_COMMITTEE_BY_NUMBER_REQUEST\";\nconst committeeByNumberSuccess = \"GET_COMMITTEE_BY_NUMBER_SUCCESS\";\nconst committeeByNumberFailure = \"GET_COMMITTEE_BY_NUMBER_FAILURE\";\n\nconst committeePartnerByIdRequest = \"GET_PARTNER_COMMITTEE_BY_ID_REQUEST\";\nconst committeePartnerByIdSuccess = \"GET_PARTNER_COMMITTEE_BY_ID_SUCCESS\";\nconst committeePartnerByIdFailure = \"GET_PARTNER_COMMITTEE_BY_ID_FAILURE\";\n\nconst committeesByMemberRequest = \"GET_COMMITTEES_BY_MEMBER_REQUEST\";\nconst committeesByMemberSuccess = \"GET_COMMITTEES_BY_MEMBER_SUCCESS\";\nconst committeesByMemberFailure = \"GET_COMMITTEES_BY_MEMBER_FAILURE\";\n\nconst toggleChamber = \"COMMITTEES_TOGGLE_CHAMBER\";\n\nconst initialState = {\n committeeList: [],\n savedCommittee: '',\n partnerCommitteeList: [],\n partnerCommitteeListError: 'Could not retrieve subcommittees.',\n partnerCommittees: [],\n membersList: '',\n committeeByIdData: [],\n committeeByNumberData: [],\n committeesByMember: [],\n createdCommittee: '',\n partnerCommitteeByIdData: {},\n createCommitteeMessage: '',\n saveCommitteeError: '',\n committeeChamber: ''\n};\n\n\n\nexport const committeeActionCreators = {\n\n // SAVE AN EXISTING COMMITTEE\n saveCommitteeRequest: () => ({\n type: saveCommitteeRequest,\n isFetching: true\n }),\n\n receiveSaveCommittee: (responseObj) => ({\n type: saveCommitteeSuccess,\n isFetching: false,\n savedCommittee: responseObj\n }),\n\n saveCommitteeError: saveCommitteeError => ({\n type: saveCommitteeFailure,\n isFetching: false,\n saveCommitteeError: saveCommitteeError\n }),\n\n saveCommittee: (body) => {\n return dispatch => {\n dispatch(committeeActionCreators.saveCommitteeRequest());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/saveCommitteeAsync', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.saveCommitteeError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receiveSaveCommittee(result[1][0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.saveCommitteeError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n // CREATE A NEW COMMITTEE\n createCommitteeRequest: () => ({\n type: createCommitteeRequest,\n isFetching: true\n }),\n\n receiveCreateCommittee: (responseObj) => ({\n type: createCommitteeSuccess,\n isFetching: false,\n createdCommittee: responseObj,\n }),\n\n createCommitteeError: message => ({\n type: createCommitteeFailure,\n isFetching: false,\n createCommitteeMessage: message\n }),\n\n createNewCommittee: (body) => {\n return dispatch => {\n dispatch(committeeActionCreators.createCommitteeRequest());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/createCommitteeAsync', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.createCommitteeError('Fail ' + result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receiveCreateCommittee(result[1]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.createCommitteeError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n // GET PARTNER COMMITTEE LIST FOR COMMITTEE MANAGEMENT SUBCOMMITTEES\n requestPartnerCommitteeList: () => ({\n type: partnerCommitteeListRequest,\n isFetching: true\n }),\n\n receivePartnerCommitteeList: responseObj => ({\n type: partnerCommitteeListSuccess,\n isFetching: false,\n partnerCommitteeList: responseObj\n }),\n\n partnerCommitteeListError: message => ({\n type: partnerCommitteeListFailure,\n isFetching: false,\n partnerCommitteeListError: message\n }),\n\n getPartnerCommitteeList: (params) => {\n return dispatch => {\n dispatch(committeeActionCreators.requestPartnerCommitteeList());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/GetPartnerCommitteeListAsync?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === 1) {\n dispatch(committeeActionCreators.partnerCommitteeListError('Could not retrieve subcommittees.'))\n return Promise.reject(result[1])\n } else if (result[0] === 0) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receivePartnerCommitteeList(result[1].Committees))\n } else if (result[0] === 2) {\n dispatch(committeeActionCreators.receivePartnerCommitteeList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n // GET PARTNER COMMITTEES FOR COMMITTEE MANAGEMENT GRID\n requestPartnerCommittees: () => ({\n type: partnerCommitteesRequest,\n isFetching: true\n }),\n\n receivePartnerCommittees: responseObj => ({\n type: partnerCommitteesSuccess,\n isFetching: false,\n partnerCommittees: responseObj\n }),\n\n partnerCommitteesError: message => ({\n type: partnerCommitteesFailure,\n isFetching: false,\n partnerCommitteesError: message\n }),\n\n getPartnerCommittees: (params) => {\n return dispatch => {\n dispatch(committeeActionCreators.requestPartnerCommittees());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/GetPartnerCommitteesAsync?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.partnerCommitteesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receivePartnerCommittees(result[1].Committees))\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.partnerCommitteesError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n requestCommitteesByMember: () => ({\n type: committeesByMemberRequest,\n isFetching: true\n }),\n\n receiveCommitteesByMember: responseObj => ({\n type: committeesByMemberSuccess,\n isFetching: false,\n committeesByMember: responseObj\n }),\n\n committeesByMemberError: message => ({\n type: committeesByMemberFailure,\n isFetching: false,\n message\n }),\n\n // GET ALL COMMITTEES BY MEMBER ID\n getCommitteesByMember: (params) => {\n return dispatch => {\n dispatch(committeeActionCreators.requestCommitteesByMember());\n\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/GetCommitteesListAsync/?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.committeesByMemberError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receiveCommitteesByMember(result[1].Committees))\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.receiveCommitteesByMember([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n requestCommitteeList: () => ({\n type: committeeListRequest,\n isFetching: true\n }),\n\n receiveCommitteeList: responseObj => ({\n type: committeeListSuccess,\n isFetching: false,\n committeeList: responseObj\n }),\n\n committeeListError: message => ({\n type: committeeListFailure,\n isFetching: false,\n committeeList: [],\n message\n }),\n\n // Get all committees for a session start date & chamber\n getCommitteeList: (params) => {\n //Common params:\n //effectiveDate (must be URI encoded ISO date string),\n //chamberCode, \n //parentCommitteeID\n\n return dispatch => {\n dispatch(committeeActionCreators.requestCommitteeList());\n\n return publicRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/GetCommitteeListAsync?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.committeeListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receiveCommitteeList(result[1].Committees))\n return (result[1])\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.receiveCommitteeList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // GET COMMITTEE BY ID FOR PUBLIC VIEWS\n requestCommitteeById: () => ({\n type: committeeByIdRequest,\n isFetching: true\n }),\n\n receiveCommitteeById: responseObj => ({\n type: committeeByIdSuccess,\n isFetching: false,\n committeeByIdData: responseObj\n }),\n\n committeeByIdError: message => ({\n type: committeeByIdFailure,\n isFetching: false,\n message\n }),\n\n // GET COMMITTEE DETAILS BY COMMITTEE ID\n getCommitteeById: (params) => {\n\n return dispatch => {\n dispatch(committeeActionCreators.requestCommitteeById());\n\n return publicRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/getCommitteeByIdAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.committeeByIdError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receiveCommitteeById(result[1].Committees[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.committeeByIdError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // GET COMMITTEE BY NUMBER FOR PUBLIC VIEWS\n requestCommitteeByNumber: () => ({\n type: committeeByNumberRequest,\n isFetching: true\n }),\n\n receiveCommitteeByNumber: responseObj => ({\n type: committeeByNumberSuccess,\n isFetching: false,\n committeeByNumberData: responseObj\n }),\n\n committeeByNumberError: message => ({\n type: committeeByNumberFailure,\n isFetching: false,\n message\n }),\n\n // GET COMMITTEE DETAILS BY COMMITTEE NUMBER\n getCommitteeByNumber: (params) => {\n\n return dispatch => {\n dispatch(committeeActionCreators.requestCommitteeByNumber());\n\n return publicRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/GetCommitteesAsync/', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.committeeByNumberError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receiveCommitteeByNumber(result[1].Committees[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.committeeByNumberError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // GET COMMITTEE BY ID FOR COMMITTEE MANAGEMENT (W/ PARTNER AUTH)\n requestPartnerCommitteeById: () => ({\n type: committeePartnerByIdRequest,\n isFetching: true\n }),\n\n receivePartnerCommitteeById: responseObj => ({\n type: committeePartnerByIdSuccess,\n isFetching: false,\n partnerCommitteeByIdData: responseObj\n }),\n\n committeePartnerByIdError: message => ({\n type: committeePartnerByIdFailure,\n isFetching: false,\n message\n }),\n\n getPartnerCommitteeById: (params) => {\n\n return dispatch => {\n dispatch(committeeActionCreators.requestPartnerCommitteeById());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_COMMITTEE_API_URL) + '/Committee/api/GetPartnerCommitteeByIdAsync/', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(committeeActionCreators.committeePartnerByIdError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(committeeActionCreators.receivePartnerCommitteeById(result[1].Committees[0]))\n return result[1].Committees[0];\n } else if (result[0] === NO_CONTENT) {\n dispatch(committeeActionCreators.committeePartnerByIdError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n toggleChamber: (value) => ({\n type: toggleChamber,\n committeeChamber: value\n })\n};\n\nexport const reducer = (state, action) => {\n state = state || initialState;\n\n switch (action.type) {\n case createCommitteeRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case createCommitteeSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n createdCommittee: action.createdCommittee,\n createCommitteeMessage: ''\n });\n case createCommitteeFailure:\n return Object.assign({}, state, {\n isFetching: false,\n createCommitteeMessage: action.createCommitteeMessage\n });\n case partnerCommitteeListRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case partnerCommitteeListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n partnerCommitteeList: action.partnerCommitteeList,\n partnerCommitteeListError: ''\n });\n case partnerCommitteeListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n partnerCommitteeListError: action.partnerCommitteeListError\n });\n case partnerCommitteesRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case partnerCommitteesSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n partnerCommittees: action.partnerCommittees,\n partnerCommitteesError: ''\n });\n case partnerCommitteesFailure:\n return Object.assign({}, state, {\n isFetching: false,\n partnerCommitteesError: action.partnerCommitteesError\n });\n case committeesByMemberRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case committeesByMemberSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n committeesByMember: action.committeesByMember,\n errorMessage: ''\n });\n case committeesByMemberFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case committeeListRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case committeeListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n committeeList: action.committeeList,\n errorMessage: ''\n });\n case committeeListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case committeeByIdRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case committeeByIdSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n committeeByIdData: action.committeeByIdData,\n errorMessage: ''\n });\n case committeeByIdFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case committeeByNumberRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case committeeByNumberSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n committeeByNumberData: action.committeeByNumberData,\n errorMessage: ''\n });\n case committeeByNumberFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case committeePartnerByIdRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case committeePartnerByIdSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n partnerCommitteeByIdData: action.partnerCommitteeByIdData,\n errorMessage: ''\n });\n case committeePartnerByIdFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case saveCommitteeRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case saveCommitteeSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n savedCommittee: action.savedCommittee,\n saveCommitteeError: ''\n });\n case saveCommitteeFailure:\n return Object.assign({}, state, {\n isFetching: false,\n saveCommitteeError: action.saveCommitteeError\n });\n case toggleChamber:\n return Object.assign({}, state, {\n committeeChamber: action.committeeChamber\n });\n default:\n return state;\n }\n};\n","import { partnerRequest, publicRequest } from '../services/request.service'\n\nconst API_URL = window.env ? window.env.API_SERVER : '';\nconst NO_CONTENT = 2;\nconst REQUEST_FAILURE = 1;\nconst REQUEST_SUCCESS = 0;\n\nconst districtListSuccess = \"GET_DISTRICTS_SUCCESS\";\nconst districtListFailure = \"GET_DISTRICTS_FAILURE\";\n\nconst memberStatusesSuccess = \"GET_STATUSES_SUCCESS\";\nconst memberStatusesFailure = \"GET_STATUSES_FAILURE\";\n\nconst partyCodeListSuccess = \"GET_PARTIES_SUCCESS\";\nconst partyCodeListFailure = \"GET_PARTIES_FAILURE\";\n\nconst memberNumbersRequest = \"GET_ALL_MEMBERS_REQUEST\";\nconst memberNumbersSuccess = \"GET_ALL_MEMBERS_SUCCESS\";\nconst memberNumbersFailure = \"GET_ALL_MEMBERS_FAILURE\";\n\nconst memberListRequest = \"GET_MEMBER_LIST_REQUEST\";\nconst memberListSuccess = \"GET_MEMBER_LIST_SUCCESS\";\nconst memberListFailure = \"GET_MEMBER_LIST_FAILURE\";\n\nconst memberContactRequest = \"GET_MEMBER_CONTACT_REQUEST\";\nconst memberContactSuccess = \"GET_MEMBER_CONTACT_SUCCESS\";\nconst memberContactFailure = \"GET_MEMBER_CONTACT_FAILURE\";\n\nconst memberListContactRequest = \"GET_MEMBER_LIST_CONTACT_REQUEST\";\nconst memberListContactSuccess = \"GET_MEMBER_LIST_CONTACT_SUCCESS\";\nconst memberListContactFailure = \"GET_MEMBER_LIST_CONTACT_FAILURE\";\n\nconst memberByIdSuccess = \"GET_MEMBER_BY_ID_SUCCESS\";\nconst memberByIdFailure = \"GET_MEMBER_BY_ID_FAILURE\";\n\nconst membersByCommitteeRequest = \"GET_MEMBERS_BY_COMMITTEE_REQUEST\";\nconst membersByCommitteeSuccess = \"GET_MEMBERS_BY_COMMITTEE_SUCCESS\";\nconst membersByCommitteeFailure = \"GET_MEMBERS_BY_COMMITTEE_FAILURE\";\n\nconst committeeMemberRolesRequest = \"GET_COMMITTEE_MEMBER_ROLES_REQUEST\";\nconst committeeMemberRolesSuccess = \"GET_COMMITTEE_MEMBER_ROLES_SUCCESS\";\nconst committeeMemberRolesFailure = \"GET_COMMITTEE_MEMBER_ROLES_FAILURE\";\n\nconst memberCommitteeSaveSuccess = 'MEMBER_COMMITTEE_SAVE_SUCCESS';\nconst memberCommitteeSaveFailure = 'MEMBER_COMMITTEE_SAVE_FAILURE';\n\nconst memberCreateSuccess = 'MEMBER_CREATE_SUCCESS';\nconst memberCreateFailure = 'MEMBER_CREATE_FAILURE';\n\nconst memberSaveSuccess = 'MEMBER_SAVE_SUCCESS';\nconst memberSaveFailure = 'MEMBER_SAVE_FAILURE';\n\nconst memberLegislationSuccess = 'MEMBER_LEGISLATION_SUCCESS';\nconst memberLegislationFailure = 'MEMBER_LEGISLATION_FAILURE';\n\nconst memberVotesSuccess = 'MEMBER_VOTES_SUCCESS';\nconst memberVotesFailure = 'MEMBER_VOTES_FAILURE';\n\nconst memberConferenceBillsSuccess = 'MEMBER_CONFERENCE_BILLS_SUCCESS';\nconst memberConferenceBillsFailure = 'MEMBER_CONFERENCE_BILLS_FAILURE';\n\nconst initialState = {\n districtList: [],\n districtListError: '',\n memberStatuses: [],\n memberStatusesError: '',\n partyCodeList: [],\n partyCodeListError: '',\n memberList: [],\n memberData: [],\n memberContactData: [],\n memberListContactData: [],\n committeeHouseRoles: [],\n committeeSenateRoles: [],\n membersByCommittee: [],\n membersByCommitteeError: '',\n member: '',\n memberError: '',\n memberCommitteeSave: '',\n memberCommitteeSaveError: '',\n memberCreate: '',\n memberCreateError: '',\n memberSave: '',\n memberSaveError: null,\n memberLegislation: [],\n memberLegislationError: '',\n memberVotes: '',\n memberVotesError: '',\n memberConferenceBills: [],\n memberConferenceBillsError: '',\n memberListContactError: ''\n};\n\nexport const memberActionCreators = {\n\n receiveDistricts: (responseObj) => ({\n type: districtListSuccess,\n districtList: responseObj\n }),\n\n districtListError: message => ({\n type: districtListFailure,\n districtListError: message\n }),\n\n getDistricts: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/getdistrictreferencesasync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.districtListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(memberActionCreators.receiveDistricts(result[1].Districts))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.districtListError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n\n },\n\n receivePartyCodeList: (responseObj) => ({\n type: partyCodeListSuccess,\n partyCodeList: responseObj\n }),\n\n partyCodeListError: message => ({\n type: partyCodeListFailure,\n partyCodeListError: message\n }),\n\n getPartyCodeList: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/getpartyreferencesasync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.partyCodeListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(memberActionCreators.receivePartyCodeList(result[1].Parties))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.partyCodeListError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n\n },\n\n receiveMemberStatuses: (responseObj) => ({\n type: memberStatusesSuccess,\n memberStatuses: responseObj\n }),\n\n memberStatusesError: message => ({\n type: memberStatusesFailure,\n memberStatusesError: message\n }),\n\n getMemberStatuses: () => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/getmemberstatustypereferencesasync', 'GET', headers, '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberStatusesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(memberActionCreators.receiveMemberStatuses(result[1].MemberStatuses))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.memberStatusesError('No Content'))\n throw 'No Content'\n }\n }).catch(err => console.log(err))\n }\n\n },\n\n // GET MEMBERS BY COMMITTEE ID - PARTNER AUTH\n requestMembersByCommittee: () => ({\n type: membersByCommitteeRequest,\n isFetching: true\n }),\n\n receiveMembersByCommittee: (responseObj) => ({\n type: membersByCommitteeSuccess,\n isFetching: false,\n membersByCommittee: responseObj\n }),\n\n membersByCommitteeError: message => ({\n type: membersByCommitteeFailure,\n isFetching: false,\n membersByCommitteeError: message\n }),\n\n getMembersByCommittee: (params, partner) => {\n return dispatch => {\n dispatch(memberActionCreators.requestMembersByCommittee());\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_MEMBERS_BY_COMMITTEE_API_URL) + '/MembersByCommittee/api/getPartnerMembersByCommitteeAsync?', 'GET', headers, '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_MEMBERS_BY_COMMITTEE_API_URL) + '/MembersByCommittee/api/GetCommitteeMembersListAsync?', 'GET', headers, '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.membersByCommitteeError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMembersByCommittee(result[1].MemberList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMembersByCommittee([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n\n },\n\n // GET COMMITTEE MEMBER ROLES - USED ON COMM MGMT FORM DROPDOWN\n requestCommitteeMemberRoles: () => ({\n type: committeeMemberRolesRequest,\n isFetching: true\n }),\n\n receiveCommitteeMemberRoles: (houseRoles, senateRoles) => ({\n type: committeeMemberRolesSuccess,\n isFetching: false,\n committeeHouseRoles: houseRoles,\n committeeSenateRoles: senateRoles\n }),\n\n committteeMemberRolesError: message => ({\n type: committeeMemberRolesFailure,\n isFetching: false,\n message\n }),\n\n getCommitteeMemberRoles: () => {\n return dispatch => {\n dispatch(memberActionCreators.requestCommitteeMemberRoles());\n\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_BY_COMMITTEE_API_URL) + '/MembersByCommittee/api/getCommitteeRolesAsync/', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.committeeMemberRolesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n let members = result[1];\n var committeeMembersArray = members.CommitteeRoles;\n var committeeMemberSenateRoles = [];\n var committeeMemberHouseRoles = [];\n committeeMembersArray.forEach(function (element) {\n var elemObj = { label: element.Title, value: element.CommitteeRoleID }\n if (element.ChamberCode === 'H') {\n committeeMemberHouseRoles.push(elemObj)\n } else {\n committeeMemberSenateRoles.push(elemObj)\n }\n })\n dispatch(memberActionCreators.receiveCommitteeMemberRoles(committeeMemberHouseRoles, committeeMemberSenateRoles))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.committeeMemberRolesError('No Content'))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n // GET MEMBER SHALLOW LIST\n requestMemberNumbers: () => ({\n type: memberNumbersRequest,\n isFetching: true\n }),\n\n receiveMemberNumbers: responseObj => ({\n type: memberNumbersSuccess,\n isFetching: false,\n memberNumbers: responseObj\n }),\n\n memberNumbersError: message => ({\n type: memberNumbersFailure,\n isFetching: false,\n memberNumbers: [],\n memberNumbersError: message\n }),\n\n getMemberNumbers: () => {\n return dispatch => {\n dispatch(memberActionCreators.requestMemberNumbers());\n\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/GetMemberNumberListAsync', 'GET', '', '', '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberNumbersError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberNumbers(result[1].MemberNumberList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMemberNumbers([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n\n }\n },\n\n // GET MEMBER SHALLOW LIST\n requestMemberList: () => ({\n type: memberListRequest,\n isFetching: true\n }),\n\n receiveMemberList: responseObj => ({\n type: memberListSuccess,\n isFetching: false,\n memberList: responseObj\n }),\n\n memberListError: message => ({\n type: memberListFailure,\n isFetching: false,\n memberList: [],\n memberListError: message\n }),\n\n getMemberList: (params) => {\n return dispatch => {\n dispatch(memberActionCreators.requestMemberList());\n\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/GetMemberListAsync/?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberListError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberList(result[1].ShallowMembers))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMemberList([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n\n }\n },\n\n receiveMember: responseObj => ({\n type: memberByIdSuccess,\n member: responseObj\n }),\n\n memberError: message => ({\n type: memberByIdFailure,\n memberError: message\n }),\n\n getMember: (params, partner) => {\n return dispatch => {\n let request = '';\n if (partner) {\n request = partnerRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/GetPartnerMemberByIdAsync/', 'GET', '', '', params)\n } else {\n request = publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/GetMemberByIdAsync/', 'GET', '', '', params)\n }\n return request\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(memberActionCreators.receiveMember(result[1].Members[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.memberError('Member not found'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err));\n }\n },\n\n // GET MEMBER CONTACT INFO - USED ON MEMBER DETAILS PAGE\n requestMemberContact: () => ({\n type: memberContactRequest,\n isFetching: true\n }),\n\n receiveMemberContact: responseObj => ({\n type: memberContactSuccess,\n isFetching: false,\n memberContactData: responseObj\n }),\n\n memberContactError: message => ({\n type: memberContactFailure,\n isFetching: false,\n message\n }),\n\n getMemberContact: (params) => {\n return dispatch => {\n dispatch(memberActionCreators.requestMemberContact());\n\n return publicRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/GetMembersContactInformationListAsync/?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberContactError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberContact(result[1].MemberContactInformationList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMemberContact([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n // GET MEMBER CONTACT INFO - USED ON MEMBER MANAGEMENT GRID\n requestMemberListContact: () => ({\n type: memberListContactRequest,\n isFetching: true\n }),\n\n receiveMemberListContact: responseObj => ({\n type: memberListContactSuccess,\n isFetching: false,\n memberListContactData: responseObj\n }),\n\n memberListContactError: message => ({\n type: memberListContactFailure,\n isFetching: false,\n message\n }),\n\n getMemberListContact: (params) => {\n return dispatch => {\n dispatch(memberActionCreators.requestMemberContact());\n\n return partnerRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/GetPartnerMembersContactInformationListAsync/?', 'GET', '', '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberListContactError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberListContact(result[1].MemberContactInformationList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMemberListContact([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMemberCommitteeSave: (message) => ({\n type: memberCommitteeSaveSuccess,\n memberCommitteeSave: message\n }),\n\n memberCommitteeSaveError: (message) => ({\n type: memberCommitteeSaveFailure,\n memberCommitteeSaveError: message\n }),\n\n saveMemberCommittee: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MEMBERS_BY_COMMITTEE_API_URL) + '/MembersByCommittee/api/SaveMembersByCommitteeAsync/', 'PUT', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberCommitteeSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberCommitteeSave(result[1]))\n return Promise.resolve(result[1])\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.memberCommitteeSaveError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMemberCreate: (resObj) => ({\n type: memberCreateSuccess,\n memberCreate: resObj\n }),\n\n memberCreateError: (message) => ({\n type: memberCreateFailure,\n memberCreateError: message\n }),\n\n createMember: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/creatememberasync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberCreateError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(memberActionCreators.receiveMemberCreate(result[1][0]))\n return Promise.resolve(result[1])\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.memberCreateError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMemberSave: (resObj) => ({\n type: memberSaveSuccess,\n memberSave: resObj\n }),\n\n memberSaveError: (message) => ({\n type: memberSaveFailure,\n memberSaveError: message\n }),\n\n saveMember: (body) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return partnerRequest((API_URL || process.env.REACT_APP_MEMBERS_API_URL) + '/Member/api/savememberasync/', 'POST', headers, body, '')\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberSaveError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n dispatch(memberActionCreators.receiveMemberSave(result[1][0]))\n return Promise.resolve(result[1])\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.memberSaveError('No Content'))\n return Promise.reject('No Content')\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n },\n\n receiveMemberLegislation: (responseObj) => ({\n type: memberLegislationSuccess,\n memberLegislation: responseObj\n }),\n\n memberLegislationError: message => ({\n type: memberLegislationFailure,\n memberLegislationError: message\n }),\n\n getMemberLegislation: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_PATRON_SERVICE) + '/LegislationPatron/api/GetLegislationPatronListAsync?', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberLegislationError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberLegislation(result[1].PatronLegislation))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMemberLegislation([]))\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n\n },\n\n receiveMemberVotes: (responseObj) => ({\n type: memberVotesSuccess,\n memberVotes: responseObj\n }),\n\n memberVotesError: message => ({\n type: memberVotesFailure,\n memberVotesError: message\n }),\n\n getMemberVotes: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_MEMBER_VOTE_SEARCH_SERVICE) + '/MemberVoteSearch/api/GetMemberVoteListAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberVotesError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberVotes(result[1].MemberVoteList[0]))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMemberVotes([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n\n },\n\n receiveMemberConferenceBills: (responseObj) => ({\n type: memberConferenceBillsSuccess,\n memberConferenceBills: responseObj\n }),\n\n memberConferenceBillsError: message => ({\n type: memberConferenceBillsFailure,\n memberConferenceBillsError: message\n }),\n\n getMemberConferenceBills: (params) => {\n return dispatch => {\n let headers = {\n 'content-type': \"application/json; charset=utf-8\"\n }\n return publicRequest((API_URL || process.env.REACT_APP_LEGISLATION_API_URL) + '/Legislation/api/GetConferenceLegislationListAsync', 'GET', headers, '', params)\n .then(result => {\n if (result[0] === REQUEST_FAILURE) {\n dispatch(memberActionCreators.memberConferenceBillsError(result[1]))\n return Promise.reject(result[1])\n } else if (result[0] === REQUEST_SUCCESS) {\n // Dispatch the success action\n dispatch(memberActionCreators.receiveMemberConferenceBills(result[1].ConferenceLegislationList))\n } else if (result[0] === NO_CONTENT) {\n dispatch(memberActionCreators.receiveMemberConferenceBills([]));\n } else if (result.name === 'AbortError') {\n return Promise.reject(\"Aborted\");\n }\n }).catch(err => Promise.reject(err))\n }\n\n }\n};\n\nexport const reducer = (state, action) => {\n state = state || initialState;\n\n switch (action.type) {\n case districtListSuccess:\n return Object.assign({}, state, {\n districtList: action.districtList,\n districtListError: ''\n });\n case districtListFailure:\n return Object.assign({}, state, {\n districtListError: action.districtListError\n });\n case memberStatusesSuccess:\n return Object.assign({}, state, {\n memberStatuses: action.memberStatuses,\n memberStatusesError: ''\n });\n case memberStatusesFailure:\n return Object.assign({}, state, {\n memberStatusesError: action.memberStatusesError\n });\n case partyCodeListSuccess:\n return Object.assign({}, state, {\n partyCodeList: action.partyCodeList,\n partyCodeListError: ''\n });\n case partyCodeListFailure:\n return Object.assign({}, state, {\n partyCodeListError: action.partyCodeListError\n });\n case membersByCommitteeRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case membersByCommitteeSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n membersByCommittee: action.membersByCommittee,\n errorMessage: ''\n });\n case membersByCommitteeFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case committeeMemberRolesRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case committeeMemberRolesSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n committeeSenateRoles: action.committeeSenateRoles,\n committeeHouseRoles: action.committeeHouseRoles,\n errorMessage: ''\n });\n case committeeMemberRolesFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case memberNumbersRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case memberNumbersSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n memberNumbers: action.memberNumbers,\n errorMessage: ''\n });\n case memberNumbersFailure:\n return Object.assign({}, state, {\n isFetching: false,\n memberNumbersError: action.memberNumbersError\n });\n case memberListRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case memberListSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n memberList: action.memberList,\n errorMessage: ''\n });\n case memberListFailure:\n return Object.assign({}, state, {\n isFetching: false,\n memberListError: action.memberListError\n });\n case memberByIdSuccess:\n return Object.assign({}, state, {\n member: action.member,\n memberError: ''\n });\n case memberByIdFailure:\n return Object.assign({}, state, {\n memberError: action.memberError\n });\n case memberContactRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case memberContactSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n memberContactData: action.memberContactData,\n errorMessage: ''\n });\n case memberContactFailure:\n return Object.assign({}, state, {\n isFetching: false,\n errorMessage: action.message\n });\n case memberListContactRequest:\n return Object.assign({}, state, {\n isFetching: true\n });\n case memberListContactSuccess:\n return Object.assign({}, state, {\n isFetching: false,\n memberListContactData: action.memberListContactData,\n memberListContactError: ''\n });\n case memberListContactFailure:\n return Object.assign({}, state, {\n isFetching: false,\n memberListContactError: action.message\n });\n case memberCommitteeSaveSuccess:\n return Object.assign({}, state, {\n memberCommitteeSave: action.memberCommitteeSave,\n memberCommitteeSaveError: ''\n })\n case memberCommitteeSaveFailure:\n return Object.assign({}, state, {\n memberCommitteeSaveError: action.memberCommitteeSaveError\n })\n case memberCreateSuccess:\n return Object.assign({}, state, {\n memberCreate: action.memberCreate,\n memberCreateError: ''\n })\n case memberCreateFailure:\n return Object.assign({}, state, {\n memberCreateError: action.memberCreateError\n })\n case memberSaveSuccess:\n return Object.assign({}, state, {\n memberSave: action.memberSave,\n memberSaveError: null\n })\n case memberSaveFailure:\n return Object.assign({}, state, {\n memberSaveError: action.memberSaveError\n })\n case memberLegislationSuccess:\n return Object.assign({}, state, {\n memberLegislation: action.memberLegislation,\n memberLegislationError: ''\n })\n case memberLegislationFailure:\n return Object.assign({}, state, {\n memberLegislationError: action.memberLegislationError\n })\n case memberVotesSuccess:\n return Object.assign({}, state, {\n memberVotes: action.memberVotes,\n memberVotesError: ''\n })\n case memberVotesFailure:\n return Object.assign({}, state, {\n memberVotesError: action.memberVotesError\n })\n case memberConferenceBillsSuccess:\n return Object.assign({}, state, {\n memberConferenceBills: action.memberConferenceBills,\n memberConferenceBillsError: ''\n })\n case memberConferenceBillsFailure:\n return Object.assign({}, state, {\n memberConferenceBillsError: action.memberConferenceBillsError\n })\n default:\n return state;\n }\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport tinymce from 'tinymce/tinymce';\n\nfunction copyStyles(sourceDoc, targetDoc) {\n Array.from(sourceDoc.styleSheets).forEach(styleSheet => {\n if (styleSheet.cssRules) { // true for inline styles\n const newStyleEl = sourceDoc.createElement('style');\n\n Array.from(styleSheet.cssRules).forEach(cssRule => {\n newStyleEl.appendChild(sourceDoc.createTextNode(cssRule.cssText));\n });\n\n targetDoc.head.appendChild(newStyleEl);\n } else if (styleSheet.href) { // true for stylesheets loaded from a URL\n const newLinkEl = sourceDoc.createElement('link');\n\n newLinkEl.rel = 'stylesheet';\n newLinkEl.href = styleSheet.href;\n targetDoc.head.appendChild(newLinkEl);\n }\n });\n}\n\nclass Popout extends React.Component {\n constructor(props) {\n super(props);\n\n this.containerEl = document.createElement('div'); \n \n // open a new browser window and store a reference to it\n const width = this.props.windowWidth || 900;\n const height = this.props.windowHeight || 500;\n this.externalWindow = window.open('', '', `width=${width},height=${height},left=200,top=200`);\n\n // append the container <div> (that has props.children appended to it) to the body of the new window\n this.externalWindow.document.body.appendChild(this.containerEl);\n\n this.externalWindow.document.title = this.props.windowTitle;\n copyStyles(document, this.externalWindow.document);\n\n }\n\n componentDidMount() {\n // update the state in the parent component if the user closes the new window\n this.externalWindow.addEventListener('beforeunload', () => {\n this.props.togglePortal(true);\n });\n }\n\n \n componentWillUnmount() {\n this.externalWindow.close();\n }\n\n render() {\n return ReactDOM.createPortal(this.props.children, this.containerEl);\n }\n}\n\nexport default Popout;"],"sourceRoot":""}