{"version":3,"sources":["const.js","helpers.js","validators.js","sorters.js","serializers.js","context/menuContext.js","context/user-context.js","fetch.js","urls/frontend.js","components/vars/vars.js","components/common/Text.js","components/common/atoms/Loader.js","static/img/loading.svg","components/common/atoms/LoaderIcon.js","components/common/Box.js","components/common/Breadcrumps.js","components/common/GridCustom.js","components/common/ButtonStyled.js","components/common/ButtonCreatePdf.js","components/common/Container.js","components/common/DateCalendar.js","components/common/FieldWithLabel.js","components/common/Select.js","components/common/DateSelect.js","components/common/DialogCustom.js","components/common/Ellipsis.js","components/common/GridCellCustom.js","components/common/LinearProgressCustom.js","components/common/MenuBasic.js","components/common/MenuDrawer.js","static/img/fe_ue_logos.png","components/common/Message.js","components/common/molecules/AuditData.js","components/common/molecules/CancelSaveButtonsRow.js","components/common/molecules/ErrorList.js","components/common/molecules/FetchErrorWithOkayButton.js","components/common/molecules/FiltersButton.js","components/common/molecules/InfoTextWithIcon.js","components/common/molecules/NotPermittedPage.js","components/common/molecules/PaginatedListHeader.js","components/common/molecules/SortersSelect.js","components/common/MoreOptionsButton.js","components/common/NextStep.js","components/common/TextFieldCustom.js","components/common/NumberTextField.js","components/common/NotFoundPage.js","components/common/OfferStatus.js","urls/api.js","components/common/organisms/DeleteImplementationLevel.js","components/common/organisms/ImplementationLevelForm.js","hooks/permissionsHooks.js","hooks/useFetchApi.js","components/layoutElements/implementationLevelsManagement/Activities.js","components/layoutElements/implementationLevelsManagement/ImplementationLevelTableRow.js","components/layoutElements/implementationLevelsManagement/Institutions.js","components/layoutElements/implementationLevelsManagement/PerspectivesTableRow.js","components/layoutElements/implementationLevelsManagement/Perspectives.js","components/layoutElements/implementationLevelsManagement/Priorities.js","components/layoutElements/implementationLevelsManagement/Programmes.js","components/layoutElements/implementationLevelsManagement/Regions.js","components/layoutElements/implementationLevelsManagement/Subactivities.js","components/common/organisms/ImplementationLevelManagement.js","components/common/organisms/SortersFiltersRow.js","components/common/Pagination.js","components/common/PdfHeader.js","components/common/SkipLinks.js","components/common/Steps.js","components/common/TableCustom.js","components/common/WysiwygEditor.js","components/layoutElements/uzytkownicy/BladLogowania.js","components/layoutElements/uzytkownicy/FiltryUzytkownikow.js","components/layoutElements/common/BaseComponent.js","components/layoutElements/common/DanePodmiotu.js","components/layoutElements/common/FormDanePodmiotuFields.js","foreignCountries.js","components/layoutElements/common/FormKraj.js","components/layoutElements/common/FormMiejscowosc.js","components/layoutElements/common/ProjectNumberSelectsWithPerspectives.js","components/layoutElements/common/Zalacznik.js","components/layoutElements/common/Zalaczniki.js","components/layoutElements/common/ZalacznikiSelect.js","components/layoutElements/uzytkownicy/FormDanePodmiotu.js","components/layoutElements/uzytkownicy/FormOsobaDoKontaktu.js","components/layoutElements/uzytkownicy/Logowanie.js","helpers_permissions.js","components/layoutElements/uzytkownicy/PermissionList.js","components/layoutElements/uzytkownicy/PermissionsMoreOptionButton.js","components/layoutElements/uzytkownicy/PermissionListImplementationLevelCellProgrammePriorityActivity.js","components/layoutElements/uzytkownicy/PermissionListImplementationLevelCell.js","components/layoutElements/uzytkownicy/PermissionListRow.js","components/layoutElements/uzytkownicy/PermissionsHistoryListRow.js","components/layoutElements/uzytkownicy/PermissionsHistory.js","components/layoutElements/uzytkownicy/UserPermissionsListGrantedCell.js","components/layoutElements/uzytkownicy/UserPermissionsListRow.js","components/layoutElements/uzytkownicy/PermissionUsers.js","components/layoutElements/uzytkownicy/SearchUserForm.js","components/layoutElements/uzytkownicy/UserHeader.js","components/layoutElements/uzytkownicy/UserPermissionsFormCommonFields.js","components/layoutElements/uzytkownicy/UserPermissionsAdministrationForm.js","components/layoutElements/uzytkownicy/UserPermissionsImplementationLevelFields.js","components/layoutElements/uzytkownicy/UserPermissionsImplementationLevelForm.js","components/layoutElements/uzytkownicy/UserPermissionsRemovingPermissionDialog.js","components/layoutElements/uzytkownicy/Permissions.js","components/layoutElements/uzytkownicy/ProfilUzytkownika.js","components/layoutElements/uzytkownicy/SessionDialog.js","components/layoutElements/uzytkownicy/Sesja.js","components/layoutElements/uzytkownicy/UserContactPersonsList.js","components/layoutElements/uzytkownicy/UserDataForm.js","components/layoutElements/uzytkownicy/UserEconomicSubjectData.js","components/layoutElements/uzytkownicy/User.js","filters.js","components/layoutElements/uzytkownicy/Uzytkownicy.js","components/layoutElements/uzytkownicy/Users.js","components/layoutElements/zarzadzanieTrescia/DraftToComponents.js","components/layoutElements/zarzadzanieTrescia/Ciasteczka.js","components/layoutElements/zarzadzanieTrescia/CiasteczkaFront.js","components/layoutElements/zarzadzanieTrescia/DraftToPdf.js","components/layoutElements/zarzadzanieTrescia/FormCiasteczka.js","components/layoutElements/zarzadzanieTrescia/FormKomunikat.js","components/layoutElements/LandingPage.js","context/advertisementContext.js","components/layoutElements/ogloszenia/FormPublikowanie.js","components/layoutElements/ogloszenia/AlreadyPublishedInfo.js","components/layoutElements/ogloszenia/BaseStepComponent.js","components/layoutElements/ogloszenia/FormKryteriumOceny.js","components/layoutElements/ogloszenia/Zamowienie.js","components/layoutElements/ogloszenia/StepCzesciKryteria.js","components/layoutElements/ogloszenia/hoc/withStepConfiguration.js","components/layoutElements/ogloszenia/StepPozostale.js","components/layoutElements/ogloszenia/FormKodCPV.js","components/layoutElements/ogloszenia/KodyCPV.js","components/layoutElements/ogloszenia/FormMiejsceRealizacji.js","components/layoutElements/ogloszenia/MiejsceRealizacji.js","components/layoutElements/ogloszenia/MiejscaRealizacji.js","components/layoutElements/ogloszenia/FormPrzedmiotZamowienia.js","components/layoutElements/ogloszenia/PrzedmiotZamowienia.js","components/layoutElements/ogloszenia/StepPrzedmiotZamowienia.js","components/layoutElements/ogloszenia/FormHarmonogram.js","components/layoutElements/ogloszenia/Harmonogramy.js","components/layoutElements/ogloszenia/StepTerminy.js","components/layoutElements/ogloszenia/FormWarunekUdzialu.js","components/layoutElements/ogloszenia/WarunkiUdzialu.js","components/layoutElements/ogloszenia/StepWarunki.js","components/layoutElements/ogloszenia/StepZalaczniki.js","components/layoutElements/ogloszenia/FormOgloszenie.js","components/layoutElements/ogloszenia/Ogloszenia.js","components/layoutElements/zarzadzanieTrescia/PomocEkranowa.js","components/layoutElements/projekty/Form.js","components/layoutElements/projekty/Ogloszenie.js","components/layoutElements/projekty/Projekt.js","components/layoutElements/projekty/Projekty.js","components/layoutElements/newsletter/NewsletterSettingsFilter.js","components/layoutElements/newsletter/NewsletterSettings.js","components/layoutElements/newsletter/FavoritesFilters.js","components/layoutElements/newsletter/Favorites.js","components/layoutElements/zarzadzanieTrescia/TrescPreview.js","components/layoutElements/zarzadzanieTrescia/FormPomoc.js","components/layoutElements/zarzadzanieTrescia/FormRegulamin.js","components/layoutElements/zarzadzanieTrescia/FormTrescOgolna.js","components/layoutElements/zarzadzanieTrescia/Komunikat.js","components/layoutElements/zarzadzanieTrescia/Komunikaty.js","components/layoutElements/zarzadzanieTrescia/KomunikatFront.js","components/layoutElements/zarzadzanieTrescia/KomunikatyFront.js","static/fonts/Roboto-Bold.ttf","static/fonts/Roboto-Italic.ttf","static/fonts/Roboto-Regular-with-special.ttf","components/vars/pdfStyles.js","components/layoutElements/zarzadzanieTrescia/PdfWithDraftContent.js","components/layoutElements/zarzadzanieTrescia/Pomoc.js","components/layoutElements/zarzadzanieTrescia/PomocUsun.js","components/layoutElements/zarzadzanieTrescia/Pomoce.js","components/layoutElements/zarzadzanieTrescia/PomoceFrontPdf.js","components/layoutElements/zarzadzanieTrescia/PomoceFront.js","components/layoutElements/zarzadzanieTrescia/PomocFront.js","components/layoutElements/zarzadzanieTrescia/Regulamin.js","components/layoutElements/zarzadzanieTrescia/Regulaminy.js","components/layoutElements/zarzadzanieTrescia/TresciOgolne.js","components/layoutElements/zarzadzanieTrescia/TrescOgolna.js","components/layoutElements/zarzadzanieTrescia/ZarzadzanieTrescia.js","components/layoutElements/zarzadzanieTrescia/ZoltyPasekFront.js","components/layoutElements/DeklaracjaDostepnosci.js","components/layoutElements/management/AdvertisementDataFilters.js","components/layoutElements/management/AdvertisementListRow.js","components/layoutElements/management/AdvertiserDataFilters.js","components/layoutElements/management/UserDataFilters.js","components/layoutElements/management/AdvertisementsFilters.js","components/layoutElements/management/Advertisements.js","components/layoutElements/management/EditProjectForm.js","components/layoutElements/management/ProjectListRow.js","components/layoutElements/management/ProjectsFilters.js","components/layoutElements/management/Projects.js","components/layoutElements/ogloszenia/FiltryWyszukiwarki.js","components/layoutElements/ogloszenia/FormRozstrzygniecieWariant.js","components/layoutElements/ogloszenia/FormCzescRozstrzygniecia.js","components/layoutElements/oferty/FiltryOfert.js","components/layoutElements/oferty/FormWariant.js","components/layoutElements/oferty/FormOfertaFields.js","components/layoutElements/oferty/FormOferta.js","components/layoutElements/oferty/Oferta.js","components/layoutElements/oferty/OfertaBox.js","components/layoutElements/oferty/OfertaPreview.js","components/layoutElements/oferty/Oferty.js","components/layoutElements/oferty/OfertyOwnerClosedStatus.js","components/layoutElements/oferty/OfertyOffererClosedStatus.js","components/layoutElements/oferty/OfertyOffererPublishedStatus.js","components/layoutElements/oferty/OfertyResolvedStatusPdf.js","components/layoutElements/oferty/OfertyOwnerResolvedStatus.js","components/layoutElements/oferty/OfertyOffererResolvedStatus.js","components/layoutElements/oferty/OfertyOwnerPublishedStatus.js","components/layoutElements/ogloszenia/FormRozstrzygniecie.js","components/layoutElements/ogloszenia/ListaWersji.js","components/layoutElements/ogloszenia/ManageAdvertisementButtons.js","components/layoutElements/pytania/PytaniaForOgloszeniePdf.js","components/layoutElements/pytania/BasePytaniaForOgloszenieWidthPdf.js","components/layoutElements/pytania/FormOdpowiedz.js","components/layoutElements/pytania/FormPytanie.js","components/layoutElements/pytania/Pytanie.js","components/layoutElements/pytania/PytaniaForOgloszenieAnnouncementOwner.js","components/layoutElements/pytania/PytaniaForOgloszenieAnonymous.js","components/layoutElements/pytania/PytaniaForOgloszenieLoggedIn.js","components/layoutElements/ogloszenia/OgloszenieDetails.js","components/layoutElements/ogloszenia/OgloszeniePdf.js","components/layoutElements/ogloszenia/Ogloszenie.js","components/layoutElements/ogloszenia/Wyszukiwarka.js","components/layoutElements/newsletter/Notifications.js","components/layoutElements/newsletter/Newsletter.js","components/layoutElements/subscriptions/UnsubscribeSuccess.js","components/layoutElements/subscriptions/Subscriptions.js","components/Routes.js","components/App.js","static/img/FE_footer.png","serviceWorker.js","index.js"],"names":["SELECT_CLASSNAME","SELECT_INVALID_CLASSNAME","CZY_PROJEKT_CHOICES","PROJECTS_MANAGEMENTS_CHOICES","SEARCH_DATE_CHOICES","SEARCH_CUSTOM_NAME","ADVERTISEMENT_STATUS_FILTERS_CHOICES","map","choice","value","label","MIEJSCE_REALIZACJI_OLD_BK_DICT","NIP_CHARS_IMPORTANCE","PESEL_CHARS_IMPORTANCE","EKRANY","EKRANY_DICT","e","id","EKRANOWA","OGOLNA","USER_STATUS_CHOICES","RODZAJ_ADRESU_CHOICES","RODZAJ_ADRESU_FILTERS_CHOICES","TYP_NUMERU_IDENTYFIKACYJNEGO","TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES","TOKEN_COOKIE_NAME","USER_DATA_COOKIE_NAME","OFERTA_STATUSES","draft","nazwa","submitted","withdrawn","emptyValueList","computeProgress","additionalAttrFilledLen","arguments","length","undefined","additionalAttrLen","filledInputsLen","inputs","document","querySelectorAll","$i","startsWith","includes","parentNode","firstChild","textContent","selectInputs","i","multiselectInputs","selectedOptions","inputsLen","getLastTemporaryId","attribute","subAttributeName","temporaryIds","obj","o","parseInt","temporaryId","Math","max","getLastTemporaryIdFromList","list","fillWithLeadingZero","toString","repeat","datetimeStringToISO","date","replace","dateToString","getFullYear","getMonth","getDate","dateToStringOldBK","datetimeToString","getHours","getMinutes","dateStringToYearMonth","dateString","substring","listOrEmpty","isNotEmpty","stringOrEmpty","setCustomSelectAttributes","selectRef","inputId","current","querySelector","getAttribute","setAttribute","setCustomInputAttributes","inputRef","setAttr","button","style","right","setFocusOnElement","elRef","focus","triggerBodyClick","click","getCookieValue","name","cookie","split","n","v","trim","getAuthTokenCookieValue","authTokenCookieValue","decodeURIComponent","deleteCookie","callback","refreshCookie","maxAge","refreshTimerAfterRequest","statusCode","window","sessionComponent","showUnauthorizedMessage","refreshTimerAfterSativaRequest","handleRefreshSessionTime","countWysiwygChars","content","counter","block","blocks","text","extractYoutubeSrc","url","long_domain","URL","hostname","params","URLSearchParams","searchParams","videoId","pathname","get","splitedPath","_boolToInt","paramString","_timeInSeconds","timeString","match","exec","durationGroups","groups","duration","timeDict","days","hours","minutes","seconds","key","multipleValue","Object","entries","allowedParams","iframeParamName","convertFunc","default_","iframeParams","p","paramStr","keys","protocol","getRodzajAdresuDict","kraj","generatePdfDocument","async","documentComponent","fileName","creatingCallback","blob","pdf","toBlob","saveAs","saveFileFromApi","result","fetch","headers","getBreakIndex","charsList","slicedLine","splittingCharsIndexes","char","lastIndexOf","splitLineByChar","textLength","lines","line","lineLength","entersInLine","isEnter","test","push","missingText","enterIndex","indexOf","realMissingText","breakIndex","roundStringTo","splittedValue","firstPart","slice","padEnd","redirectToLoginView","sessionStorage","setItem","location","search","href","slugify","toLowerCase","sortOrderItems","orderItem1","orderItem2","getSortedOrderItemsFromOrder","orderList","orderItems","order","orderItem","przedmiotyZamowienia","sort","getOrderItemsLength","reformatDanePodmiotu","data","assign","typNumeruIdentyfikacyjnego","filter","t","rodzajAdresu","adres","getPricesRange","prices","pricesDict","maxPriceLength","price","padStart","paddedPriced","min","isAdvertisementLocked","statusDict","checkHasPrev","pageNumber","checkHasNext","paginatedBy","total","ceil","sortProgrammes","programme1","programme2","code","localeCompare","sortImplementationLevelByNumberCode","obj1","obj2","hasSubactivities","perspectiveData","activity_types","activityTypes","hasPerspectiveRegions","hasPerspectiveInstitutions","getActivityUrlByPerspectiveData","getActivityChildUrlByPerspectiveData","serializePerspectiveForSelect","perspectives","getUserFullName","forename","imie","surname","nazwisko","serializeAuditData","createdAt","dataUtworzenia","created_at","createdBy","ktoUtworzyl","created_by","modifiedAt","dataModyfikacji","modified_at","modifiedBy","ktoModyfikowal","modified_by","generateUUIDV4","c","crypto","getRandomValues","Uint8Array","module","exports","checkRequired","checkRequiredPrzedmiotZamowienia","checkListRequired","checkNabor","projectsSelected","checkProjekty","msg","checkSelectRequired","checkDatesDependency","start","end","Date","checkEmail","checkSimilarValueOnList","valueList","message","checkSimilarTitleValueOnList","titleValidatorData","validators","formStep","projectsValidationData","enrollmentValidatorData","contactPersonsValidatorData","advertisementValidators","tytul","projekty","nabor","osobyDoKontaktu","zamowienia_kryteriaOceny","przedmiotyZamowienia_harmonogramy","przedmiotyZamowienia_warunkiUdzialu","publishedAdvertisementOwnerValidators","publishedAdvertisementAdminValidators","zamowienieValidators","kryteriaOceny","kryteriumOcenyValidators","opis","przedmiotZamowieniaValidators","kategoria","podkategoria","kodyCPV","miejscaRealizacji","publishedPrzedmiotZamowieniaValidators","harmonogramValidators","koniecRealizacji","dependent","warunekUdzialuValidators","typ","zalacznikValidators","nested","validateAdvertisementBaseAttributes","advertisement","validatorsDict","z","zamowienia","errors","stepErrors","attrName","error","validateZamowienieAttributes","ogloszenie","validateFieldAttributes","validatePrzedmiotyZamowieniaInZamowienie","validateSzacunkowaWartosc","zamowienie","szacunkowaWartosc","validateKryteriumOcenyAttributes","kryteriumOceny","validatePrzedmiotZamowieniaBaseAttributes","przedmiotZamowienia","isAlreadyPublished","validateHarmonogramAttributes","harmonogram","validateWarunekUdzialuAttributes","warunekUdzialu","validateZalacznikAttributes","zalacznik","objectList","fieldValidators","stepName","attr","validateWysiwygEditor","checkWysiwygEditorRequired","validateSearchFilters","filters","isValid","status","type","from","to","validatePersonalData","isAdresPart","controlSum","checkNip","numerIdentyfikacyjny","checkPesel","checkKodPocztowy","kodPocztowy","validateOsobaDoKontaktu","ADVERTISEMENTS_SORTING_VALUES","PROJECTS_SORTING_VALUES","sortAdvertisements","advertisementList","sortingValue","o1","o2","splittingValue","value1","value2","attribbuteName","sortByAdvertisementNumber","nr1","nr2","year1","userId1","announcementId1","year2","userId2","announcementId2","sortProjects","projectList","p1","p2","sortProgrammeFilter","sortMiejsceRealizacjiFilter","mr1","mr2","v1","v2","setInitialSorterByUrlParam","urlParams","sorters","defaultSorter","sorter","mapServerFront","account_disabled","account_disabled_at","accountDisabled","active","activities","activity","added_at","address","address_type","addressType","advertisements","advertiser_address_details","advertiser_name","answer","attached_advertisements_amount","attachments","category","children","chosen_offer_variant","chosenOfferVariant","comment","commune","contact_persons","country","cpv_items","current_exists","description","dictionaries","economic_subject","economicSubject","email","end_at","enrollment","enrollment_number","estimated_value","evaluation_criteria","expiration_date","file","file_to_load","for_publication_exists","fulfillment_place","fulfillment_places","full_number","general_content","general_content_items","has_advertisements","has_draft","has_draft_advertisements","has_published_advertisements","headline","help","helps","identification_number","identification_number_type","identifier","institution","institutionNumber","is_admin","is_author","is_created_by_advertiser","is_mine","isAdmin","is_protocol","isProtocol","is_refused","is_variant","isVariant","last_publicated_version_id","last_version","locality","no_offer_selected","noOfferSelected","number","number_description","order_node","order_nodes","orderNode","orderNodes","orders","offers","offerset","offersets","order_id","order_items","order_temporary_id","orders_amount","original_content","page","parent","partial_offer_allowed","partial_payment","participation_conditions","perspective","phone_number","planned_sign_date","postcode","poviat","price_criterion","priorities","priority","programme","programmes","project","projects","projects_enrollments","publication_date","question","questions","refusedOfferSets","region","regulations","relatives","relatives_pointing_to_current","screen","settlement","slug","start_at","statement","statements","street","subcategories","subcategory","submission_deadline","supplementary_orders","tax_identification_number","temporary_id","timetable_items","title","terms_of_contract_change","teryt_items","user","userEmail","userForename","userSurname","users","warranty_period","variants","version","voivodeship","yellow_stripe","osoba","account_type","mapFrontServer","aktualnyIstnieje","cena","czyAktywny","czyDopuszczalnaOfertaCzesciowa","czyKryteriumCenowe","czyMaKopieRobocza","czyWariantowe","czyWystepujePlatnoscCzesciowa","czyZoltyPasek","daneAdresoweOgloszeniodawcy","danePodmiotu","dataDodania","dataOpublikowania","dataWaznosci","dataZablokowaniaKonta","doPublikacjiIstnieje","dzialania","dzialanie","dzieci","ekran","emailUzytkownika","gmina","harmonogramy","identyfikator","imieUzytkownika","instytucja","jestAutorem","jestProtokolem","kod","komentarz","komunikat","komunikaty","kontoZablokowane","liczbaZamowien","miejscowosc","naglowek","nazwiskoUzytkownika","nip","numer","numerDomu","numerNaboru","odpowiedz","oferty","ofertyDoUsuniecia","ogloszenia","okresGwarancji","osiePriorytetowe","osPriorytetowa","pakietOfert","perspektywa","planowanyTerminPodpisaniaUmowy","plik","plikDoWgrania","poczatekRealizacji","podkategorie","pomoc","pomoce","powiat","powiazane","powiazaneDlaObecnego","programOperacyjny","programyOperacyjne","projekt","pytania","pytanie","regulaminy","rozdzialNadrzedny","slowniki","strona","numerInstytucji","numerTelefonu","terminOfert","teryty","tresc","trescOgolna","tresciOgolne","trescOryginalna","ulica","uzytkownicy","warianty","warunkiUdzialu","warunkiZmianyUmowy","wojewodztwo","wybranyWariant","zadnaOfertaWybrana","zamowieniaUzupelniajace","zamowieniaNodes","zamowienieId","zamowienieNode","zamowienieTemporaryId","zalaczniki","accountType","serializeObject","object","toServer","nonRecursiveKeys","dateWithTime","serializationDct","serializedObject","serializedName","Array","isArray","serializedObjectList","serializeObjectList","date_","serializeDate","getSerializedObject","config","mapToCamelCaseName","doNotTranslateNames","dateAttributes","dateTimeAttributes","dateTimeToLastMinuteAttributes","removeTemporaryId","mapToCamelCase","getSerializedList","getSerializedDate","part","index","charAt","toUpperCase","join","serializeJsonPathList","serializedList","element","serializeJsonPathObject","findJsonPathErrors","path","getSerializedNestedErrorsFromServer","pathPrefix","nestedFields","attrBasePathPrefix","errors_","baseAttrErrors","objectErrors","subAttrName","subAttrErrors","getSerializedObjectErrorsFormServer","serializedErrors","attrErrors","getSerializedErrorsFromServer","forEach","jp","ERRORS_SERVER_FRONT","translateErrorMessage","serializeOrderItemCategories","categoriesList","categories","cat","subcat","serializeUrlParams","serializationDict","serializedDict","val","MenuContext","createContext","menuLinkKey","refreshBadgesCount","updateMenuKey","refreshBadges","MenuProvider","React","Component","constructor","props","super","this","setState","prevState","state","render","createElement","Provider","Consumer","EMPTY_USER","advertisementManagerType","isAuthor","EMPTY_AUTH","expire","UserContext","auth","permissions","set","setAdvertisementManagerType","refresh","refreshTimer","logout","removePermission","UserProvider","_this","meta","serializePermission","adProjEnrAdm","adProjectEnrollments","usersAdm","usersAdministration","usersAdmUsersAdministration","usersAndPermissionsPreviewListUsers","previewListUsers","usersAdmPermissionsAdministration","permissionsAdministration","usersAndPermissionsPreviewListUsersAuthorized","previewListUsersAuthorized","contentAdm","contentAdministration","contentAdmContentAdministration","contentAdmPermissionsAdministration","implementationLevelsDictionaryAdm","implementationLevelsDictionaryAdministration","implementationLevelsDictionaryAdmPermissionsAdministration","implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration","fullUsersAndPermissions","usersPermissionsManagement","functionality","functionalityManagement","permissionsManagement","blockingUsers","projectsEnrollments","projectsEnrollmentsAdministration","searchNPreviewData","advertisementAdministration","fullContent","values","generalContentCookiesRegulation","contentPermissionsManagement","addImplementationLevelPermission","implementationLevelsDictionaryPermissionsManagement","previewDictionaries","previewData","editingDictionaries","editData","first_name","last_name","permissionName","fetchApi","method","body","callbackSuccess","callbackError","callbackIncorrectStatus","callbackShowErrors","xhr","XMLHttpRequest","urlParamsPart","k","subvalue","open","encodeURI","setRequestHeader","timeout","ontimeout","onerror","onload","success","jsonData","JSON","parse","responseText","send","stringify","fetchSativaApi","URLS","home","pattern","login","loginError","advertisementsSearch","advertisementsNew","advertisementsDetails","getUrl","advertisementId","advertisementsDetailsDraft","advertisementsDetailsVersion","advertisementsEdit","newsletter","accessibility","usersDetails","userId","usersMyProfile","managementProjects","managementAdvertisements","managementContents","managementContentsHelps","managementContentsHelpsNew","managementContentsHelpsEdit","managementContentsHelpsDetails","managementContentsRegulations","managementContentsRegulationsCurrent","managementContentsRegulationsForPublishing","managementContentsRegulationsNew","managementContentsRegulationsEdit","managementContentsCookies","managementContentsCookiesNew","managementContentsCookiesEdit","managementContentsGeneralContents","managementContentsGeneralContentsEdit","managementContentsGeneralContentsDetails","managementContentsStatements","managementContentsStatementsNew","managementContentsStatementsEdit","managementContentsStatementsDetails","managementPerspectives","managementProgrammesForPerspective","perspectiveId","managementPrioritiesForProgramme","programmeId","managementSubactivitiesForPriority","priorityId","managementActivitiesForPriority","managementRegionsForSubactivity","activityId","managementInstitutionsForActivity","helpsDetails","subscriptions","statementsDetails","sativaUsersDetails","userIdentifier","colors","primary","secondary","warn","background","disabled","surface","onPrimary","onSecondary","onSurface","onError","darkBg","textPrimaryOnBackground","textSecondaryOnBackground","textHintOnBackground","textDisabledOnBackground","textIconOnBackground","textPrimaryOnLight","textSecondaryOnLight","textHintOnLight","textDisabledOnLight","textIconOnLight","textPrimaryOnDark","textSecondaryOnDark","textHintOnDark","textDisabledOnDark","textIconOnDark","customSelectStyles","input","styles","color","minWidth","fontSize","option","provided","isFocused","isSelected","backgroundColor","fontWeight","borderWidth","singleValue","placeholder","multiValue","multiValueLabel","multiValueRemove","cursor","Text","accentHeader","className","errorColorReverse","htmlFor","info","labelFor","mainHeader","sectionHeader","tag","use","otherProps","errorTextStyle","errorColorReverseStyle","headerTextStyle","infoTextStyle","Typography","marginTop","marginBottom","Loader","role","LoaderIcon","src","loaderIcon","alt","Box","ariaLabelMoreOptions","boxTag","boxWithMenu","flexiblewidth","fullwidth","headerTag","invalid","selected","subtitle","titleOneRow","titleTwoRows","titleWithSubtitle","colorsToolbar","setOpen","useState","toolbar","menuSection","ToolbarSection","alignEnd","MenuSurfaceAnchor","Button","onClick","currentTarget","blur","unelevated","Icon","icon","MenuSurface","onClose","evt","Toolbar","ToolbarRow","alignStart","ToolbarTitle","theme","zIndex","marginRight","size","boxClassName","Elevation","ThemeProvider","options","Breadcrumps","isFront","notZarzadzanieTrescia","breadcrumpsClassName","Link","GridCustom","center","centerHorizontal","centerVertical","flexBottom","flexEnd","flexS","flexM","flexL","flexTop","fullheight","keyName","noWrap","gridClassName","GridTag","ButtonStyled","add","cancel","lite","next","noMargin","prev","print","remove","removeFull","save","buttonIconStyle","cancelBtnStyle","disabledBtnStyle","prevBgStyle","primaryBtnStyle","outlineBtnStyle","removeFullBgStyle","danger","outlined","ripple","ButtonCreatePdf","pdfCreatingOn","pdfCreatingButtonLabel","Container","containerTag","titleTag","containerClassName","registerLocale","pl","WEEKDAYS","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","MONTHS","January","February","March","April","May","June","July","August","September","October","November","December","isSameDay","date1","date2","dfIsSameDay","ExtendedDatePicker","DatePicker","componentDidUpdate","prevProps","calendar","this_","replaceDays","preSelection","openToDate","DateCalendar","handleCalendarOpen","onCalendarOpen","handleTranslateCalendar","handleMonthChange","handleChange","translateCalendarFields","onChange","replacePartOfAriaLabel","englishPhrase","polishPhrase","parentRef","calendarField","newAriaLabel","showMonthYearPicker","weekDay","month","day","year","day_","month_","ariaLabel","ariaDescribedby","dateCalendarId","dateFormatCustom","dateFormat","dateName","maxDate","minDate","showTimeSelect","showTimeSelectOnly","timeIntervals","timeCaption","customInput","TextField","isClearable","NaN","locale","placeholderText","onCalendarClose","onMonthChange","FieldWithLabel","fieldWithLabelClassName","useEffect","ref","instructionsAriaMessage","event","context","isSearchable","isMulti","isDisabled","valueEventAriaMessage","Select","ReactSelect","componentDidMount","select","announceAriaLiveContext","_ref4","ariaLiveContext","announceAriaLiveSelection","_ref5","ariaLiveSelection","constructAriaLiveMessage","selectValue","focusedValue","focusedOption","menuIsOpen","inputValue","screenReaderStatus","focusedValueMsg","_ref","getOptionLabel","valueFocusAriaMessage","focusedOptionMsg","_ref2","optionFocusAriaMessage","resultsMsg","_ref3","screenReaderMessage","resultsAriaMessage","count","countOptions","renderDropdownIndicator","DropdownIndicator","components","innerProps","onMouseDown","onDropdownIndicatorMouseDown","onTouchEnd","onDropdownIndicatorTouchEnd","indicatorId","commonProps","renderClearIndicator","ClearIndicator","isLoading","hasValue","clearValue","CHOICES_DICT","ch","DateSelect","odInputRef","createRef","doInputRef","Fragment","selectedOption","updateDate","selectAriaLabel","noOptionsMessage","DialogCustom","ariaLabelledby","dialogRef","dialogTitle","dialogTitleError","onKeyDown","DialogTitle","Dialog","preventOutsideDismiss","ev","FocusTrap","focusTrapOptions","fallbackFocus","tabIndex","DialogContent","Ellipsis","lineHeight","ellipsisRef","ellipsisMaxHeight","ellipsis","setEllipsisContainer","longText","setLongText","clientHeight","maxHeight","overflow","bottom","height","GridCellCustom","fill","customRef","gridCellClassName","flexGrow","LinearProgressCustom","classNameInfo","progress","progressBarClassName","progressBarInfoClassName","LinearProgress","MenuBasic","forwardRef","Theme","link","ListItem","disabledFrom","ListItemGraphic","addProgressIcon","currentMenuLink","iconStyle","MenuDrawer","mobile","openMenu","onMenuClose","useContext","useLocation","badges","setBadges","response","Drawer","modal","dismissible","DrawerContent","display","flexDirection","linkTo","ListItemText","linkName","my_advertisement_badge_count","my_offer_set_badge_count","favorite_advertisement_badge_count","Badge","align","renderBadge","ListDivider","textAlign","renderUeLogo","Message","messageIcon","messageTitle","basicClassName","EMPTY_VALUE","AuditData","boxProps","CancelSaveButtonsRow","disabledSave","cancelText","saveText","onCancel","onSave","ErrorList","containerId","errorList","FetchErrorWithOkayButton","buttonLabel","infoMsg","onClickOkay","FiltersButton","filtersCounter","filteringLabel","onOpenFilters","InfoTextWithIcon","NotPermittedPage","PaginatedListHeader","SortersSelect","selectedSort","sortingLabel","sortingValues","onChangeSort","MoreOptionsButton","menuContentRef","useRef","menuAriaLabel","anchorCorner","onOpen","handleOpen","NextStep","prevStep","stepTitle","nextStepClassName","TextFieldCustom","isInputFocused","isIconClicked","blurInputTimeout","handleBlurInput","bind","handleClickIcon","handleFocusInput","componentWillUnmount","clearTimeout","onClear","onBlur","setTimeout","onFocus","props_","autoFocus","clearFieldContext","NumberTextField","handleBlur","target","handleKeyPress","valueLenth","keyIndex","selectionStart","preventDefault","comaIndex","handlePaste","pastedData","clipboardData","getData","isFieldInvalid","fieldId","parentTemporaryId","characterCount","formLocked","maxLength","onKeyPress","onPaste","NotFoundPage","OfferStatus","statusIcon","statusName","API_URLS","usersFindUser","usersPermissionsAdvertisementsProjectsEnrollments","usersPermissionsAdvertisementsProjectsEnrollmentsDetails","usersPermissionsDictionaries","usersPermissionsDictionariesDetails","usersPermissionsContent","usersPermissionsContentDetails","usersPermissionsUsers","usersPermissionsUsersDetails","usersPermissionsContentDictionariesUsers","usersPermissionsHistoryAdvertisementsProjectsEnrollments","usersPermissionsHistoryContentDictionariesUsers","usersPermissionsHistoryContent","usersPermissionsHistoryDictionaries","usersPermissionsHistoryUsers","helpAdmin","helpAdminDictionaries","helpAdminDetails","helpId","statementsAdmin","statementsAdminDetails","statementId","cookiesAdmin","generalContentAdmin","generalContentAdminDetails","generalContentId","regulationsAdmin","regulationsAdminDetails","perspectivesAdmin","programmesAdmin","programmesAdd","programmesEdit","prioritiesAdmin","prioritiesAdd","prioritiesEdit","activitiesAdmin","activitiesAdd","activitiesEdit","regions","regionsAdmin","regionsAdd","regionsEdit","regionId","institutions","institutionsAdmin","institutionsAdd","institutionsEdit","institutionId","DeleteImplementationLevel","apiUrlName","item","parentFormLabel","RelatedObjectsExistInfoComponent","titleFormLabel","onDelete","deletingOn","setDeletingOn","fetchError","setFetchError","objectRelatedWithOthers","setObjectRelatedWithOthers","xhrFetch","responseData","responseErrors","allFields","abort","DEFAULT_DATA","ImplementationLevelForm","addApiUrlName","additionalSaveData","codeMaxLength","editApiUrlName","originalData","isNew","setData","savingOn","setSavingOn","setErrors","handleChangeAttribute","prevValue","isCodeInvalid","isNameInvalid","required","useCheckPermissionExists","checkingExistedPermissionOn","setCheckingExistedPermissionOn","fetchDataDict","setExistsErrorOn","setPermissions403errorOn","existingPermissionData","setExistedPermissionData","callbackPermissionDoesNotExists","authorized","permission","useOneTimeFetchApi","fetchData","serializeFetchDataFunction","updatedData","message403error","callback403","requestId","loadingOn","setLoadingOn","prevData","uzytkownik","sortUrlParams","param1","param2","usePaginatedFetchApi","getFiltersFetchData","objectsAttrName","baseApiUrl","serializationUrlDictToPolish","serializerConfig","history","useHistory","permissionsCheckingOn","setPermissionsCheckingOn","notPermitted","setNotPermitted","serializedUrlData","dataWithoutAll","urlWithParams","limit","data_","objects","hasPrev","hasNext","updateData","objectId","usePutFormFetchApi","callbackPutSuccess","callbackObjectExists","defaultSaveBtnText","saveBtnText","setSaveBtnText","saveMsgTimeout","Activities","useParams","ImplementationLevelManagement","addItemButtonLabel","apiUrl","auditDataBoxTitle","auditDataObjectName","getParentFormLabel","programmeCode","priorityCode","activityCode","listObjectName","rowComponentProps","getItemLinkFunction","withLink","showAuditData","tableName","ImplementationLevelTableRow","onEdit","DataTableRow","DataTableCell","Institutions","PerspectivesTableRow","Perspectives","addItemButtonVisible","RowComponent","sortItemsFunction","tableHeaderList","hasSubactivities_","Priorities","Programmes","getItemLinkUrl","Regions","Subactivities","formOn","setFormOn","editedItem","setEditedItem","setRequestId","deletedItem","setDeletedItem","items","useMemo","items_","handleSetEditedItem","handleUpdateRequestId","handleSetDeletedItem","editingDictionariesPermission","levelName","levelUrl","levelData","TableCustom","SortersFiltersRow","filtersAreOn","FiltersComponent","onCloseFilters","onUpdateFilters","Pagination","currentPage","handleChangePage","oneRow","PdfHeader","flexContainerStyle","metaSectionStyle","textInfoStyle","View","fixed","totalPages","StyleSheet","create","paddingHorizontal","paddingVertical","paddingBottom","marginHorizontal","borderBottomWidth","borderBottomColor","borderBottomStyle","justifyContent","fontStyle","SkipLinks","Steps","elementToFocusRef","onPrevClick","prevLabel","onNextClick","nextLabel","DataTable","DataTableContent","DataTableHead","tableHeader","DataTableHeadCell","DataTableBody","WysiwygEditor","initialContentState","handleContentStateChange","contentState","onContentStateChange","wysiwygClassName","Editor","wrapperClassName","editorClassName","stripPastedStyles","BladLogowania","FiltryUzytkownikow","handleApplyFilters","handleChangeFilter","updateFilters","s","closeFilters","BaseComponent","message403","preState","formPreState","initializingOn","pageNotFound","pageNotPermitted","getAdditionalState","getFormAdditionalState","postState","formPostState","handleFetchSuccess","handleFetchError","handleFetchIncorrectStatus","setAdditionalHandlers","scrollTo","fetchInitialData","getFetchError","getFetchIncorrectStatusError","getFetchUrl","getFetchMethod","getFetchData","Error","renderFetchError","renderElements","renderHeader","renderBeforeContent","renderContent","FormBaseComponent","handleSave","fetchSaveError","xhrFetchSave","getSaveUrl","getSaveMethod","getDataForSaving","handleFetchSaveSuccess","handleFetchSaveError","handleFetchSaveIncorrectStatus","handleShowSaveErrors","getFetchSaveError","saveBtnDefaultText","getFetchSaveIncorrectStatusError","PaginatedBaseComponent","withUrlUpdating","mapToCamelCaseNameFromServer","reinitializeData","handleChangeSort","handleCloseFilters","updateUrl","objectsName","dialogComponent","paginateBy","filtersComponentClass","getFiltersCount","getUrlParams","renderSorters","renderFiltersButton","renderFilters","renderAdditionalAfterBaseContent","renderFiltersCount","renderList","renderEmptyObjects","renderFiltersComponent","DanePodmiotu","FormDanePodmiotuFields","handlePasteNumerIdentyfikacyjny","stopPropagation","changeNumerIdentyfikacyjny","changeAttribute","poland","isNazwaInvalid","adresErrors","isKodPocztowyInvalid","isUlicaInvalid","isNumerDomuInvalid","isFormInvalid","autoComplete","changeRodzajAdresu","renderIdentyfikator","renderKraj","renderMiejscowosc","krajErrors","isKrajInvalid","FormKraj","krajName","changeKraj","miejscowoscErrors","isMiejscowoscInvalid","FormMiejscowosc","changeMiejscowosc","numerIdentyfikacyjnyErrors","isNumerIdentyfikacyjnyInvalid","onKeyUp","foreignCountries","handleChangeKraj","kraj_","selectMiejscowoscMenuIsOpen","inputOptions","moreOptionsAvailable","xhrTimeout","handleChangeInputMiejscowosc","handleBlurMiejscowosc","handleChangeMiejscowosc","locality_search_key","request_id","sortMiejscowosc","m","last_page","moreOptionsAvailableText","IndicatorSeparator","menuPortal","menuList","onInputChange","SELECT_CLASS_NAME","SELECT_INVALID_CLASS_NAME","INSTITUTION_NUMBER_DEFAULT_DICT","ProjectNumberSelectsWithPerspectives","handleChangePerspectiveSelect","priorityFetchError","activityFetchError","regionFetchError","institutionFetchError","onChangePerspective","handleChangePerspective","programmeFetchError","perspective_","withInstitutionNumber","handleChangeProgramme","onChangeProgramme","handleChangePriority","onChangePriority","handleChangeActivity","onChangeActivity","handleChangInstitutionNumber","onChangeInstitutionNumber","handleChangeRegion","onChangeRegion","handleChangeInstitution","onChangeInstitution","handleFetchObjectsSuccess","objectListName","handleFetchObjectsError","errorObjectLabel","errorName","handleFetchObjectsIncorrectStatus","perspectivesAsSelect","setDefaultSelectValueLabelBasedOnId","fetchProgrammes","fetchPriorities","fetchActivities","hasRegions","hasInstitutions","fetchRegions","fetchInstitutions","objectsList","objectName","changeObjectHandler","fetchObjects","parentObjectName","mode","activityErrors","institutionErrors","institutionNumberErrors","perspectiveErrors","priorityErrors","programmeErrors","regionErrors","isPerspectiveInvalid","isProgrammeInvalid","isPriorityInvalid","isActivityInvalid","isInstitutionNumberInvalid","isRegionInvalid","isInstitutionInvalid","formInvalid","activityLabel","Radio","checked","Zalacznik","handleCloseConfirmRemovingDialog","confirmRemovingOn","handleSaveFileFromApi","loadingInProgress","loadingFileName","showLoadedSuccessMsg","showLoadingErrorMsg","blockedFilesExtensions","successMessageTimeout","errorMessageTimeout","removingDialogComponent","xhrSaveFile","handleRemoveZalacznik","handleAddPlik","zalacznikTitleId","checkAttributeName","isCheckInvalid","withCheck","Checkbox","checkLabel","onCheckChange","saveZalacznikAttributes","renderFile","uri","renderOwner","fileError","loadFileError","noUploadError","Dropzone","onDrop","getRootProps","getInputProps","clearFileErrors","position","width","left","removeZalacznik","files","currentComponentFile","validate","filesLength","zalacznikiLength","addZalacznik","fileNameList","extension","formData","FormData","append","contextForSaving","upload","onprogress","loaded","Zalaczniki","header","withoutHeader","zalacznikiErrors","isZalacznikiInvalid","reverse","ZalacznikiSelect","selectedZalacznik","setSelectedZalacznik","selectWrapperClassName","setSelectWrapperClassName","concat","menuShouldScrollIntoView","offersetId","downloadAllAttachments","EMPTY_DATA","FormDanePodmiotu","handleChangeRodzajAdresu","dct","dict","handleChangeNumerIdentyfikacyjny","saveDanePodmiotu","closeDanePodmiotuForm","FormOsobaDoKontaktu","handlePasteNumerTelefonu","phoneNumber","contact_person","saveOsobaDoKontaktu","isImieInvalid","isNazwiskoInvalid","isEmailInvalid","closeOsobaDoKontaktuFormForm","Logowanie","userData","atob","redirectToCurrentPathname","currentPathname","getItem","contextType","getPermissionsValuesDict","defaultDict","checkSinglePermission","prevChecks","child","getGroupChecked","checks","getGroupIndeterminate","getMainGroupIndeterminate","group","PERMISSIONS_NAMES_DICT","all","blocking","functionalityManagementImplementationLevel","translatePermissionName","getPerspectiveLabel_","getRegionCode","getInstitutionCode","getActivityCode","getPriorityCode","getRegionOrInstitutionCode","getImplementationLevelLabels","emptyData","sortKeysList","sortList","PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT","getPermissionHistoryUsersTitle","isHistory","isImplementationLevelType","every","el","isRegion","levelSuffix","PermissionList","additionalFetchData","hideAddPermissionButtonIfFullList","initialRequestId","withHistory","onOpenForm","onOpenHistory","setInitializingOn","setPageNumber","is403error","setIs403error","sortContentUsersPermissions","callbackFetchError","hideAddAdministrationPermissionButton","permissionsNames","setPermissions","perm","permissionsToSet","mapDict","notSetPermissionsValues","PermissionsMoreOptionButton","onOpenUserList","OBJECT_TYPE_DICT","dataObjectName","subactivity","PermissionListImplementationLevelCellProgrammePriorityActivity","fullPermission","objectType","onSetActiveHistoryPermission","onSetActiveUsersPermission","initializationOn","setInitializationOn","isOpen","setIsOpen","subObjects","setSubObjects","typeDict","permissionForActionDict","isMainLevel","PermissionListImplementationLevelCell","theLowestLevel","PermissionListRow","OPERATION_TYPE_SERIALIZERS","permissionsDenied","permissionsGranted","permissionsModified","PermissionsHistoryListRow","addedAt","implementationLevelName","authorizedUserEmail","operationType","addedBy","PermissionsHistory","setFilters","addedAtFrom","addedAtTo","addedByEmail","isPickerOpen","setIsPickerOpen","handleCalendarClose","events","permissionsHistory","addedAtFromRef","addedAtToRef","keyCode","nativeEvent","stopImmediatePropagation","UserPermissionsListGrantedCell","groupNameList","groupName","groupGranted","_","getGrantedPermissionsForGroup","UserPermissionsListRow","onSetEditedPermission","onSetRemovedPermission","implementationLevelLabels","hasHigherLevelPermissions","canEdit","canDelete","TAB_INDEXES","REVERTED_TAB_INDEXES","getRowKey","objectData","_objectData$implement","PermissionUsers","activeUsersPermission","selectedTab","setSelectedTab","listType","TabBar","activeTabIndex","onActivate","detail","Tab","ADD_PERMISSION_MODE_CONTEXTS","administration","implementationLevel","SearchUserForm","addPermissionMode","searchingOn","setSearchingOn","setEmail","setIdentifier","contexts","onFindUser","isIdentifierInvalid","UserHeader","withButtons","UserPermissionsFormCommonFields","checksSortDict","defaultChecksDict","disabledCancelButton","disabledSaveButton","editionModeOn","existsErrorOn","existsErrorLabel","saveUrl","setAdditionalErrors","setEditionModeOn","onSavePermissionSuccess","onSetSavingOn","setChecks","additionalFetchDataValuesAsString","groupCheckedValues","permissionErrors","decisions","getPermissionErrors","functionalityDisabled","permissionsDisabled","indeterminate","groupName_","groupPermissions","groupDisabled","handleCheckGroup","permissionName_","permissionValue","handleCheckSinglePermission","SCOPES","permissionType","contents","SELECT_CHOICES","scope","s1","s2","DEFAULT_CHOICE","USERS_ADMINISTRATION_DEFAULT_CHECKS_DICT","CONTENT_ADMINISTRATION_DEFAULT_CHECKS_DICT","IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_DEFAULT_CHECKS_DICT","USERS_ADMINISTRATION_CHECKS_SORT_DICT","CONTENT_ADMINISTRATION_CHECKS_SORT_DICT","IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_CHECKS_SORT_DICT","EXISTS_ERROR_LABEL","UserPermissionsAdministrationForm","initialData","selectedScope","setSelectedScope","id_","label_","permissionType_","permissions403errorOn","disabledFields","DEFAULT_CHECKS_DICT","CHECKS_SORT_DICT","serializeImplementationLevel","dataDict","UserPermissionsImplementationLevelFields","implementationLevels","setImplementationLevels","implementationLevelsErrors","setImplementationLevelsErrors","permissionsForCheckboxes","setPermissionsForCheckboxes","checkingCheckboxesPermissionOn","setCheckingCheckboxesPermissionOn","levelNames","currentUserId","grantedPermissions","handleChangeProjectNumberSelect","permission403exists","implementationLevelsPermissionErrors","UserPermissionsImplementationLevelForm","dataPerspectives","UserPermissionsRemovingPermissionDialog","questionSuffix","onCloseRemovedPermissionDialog","onRemovePermissionSuccess","removingPermissionOn","setRemovingPermissionOn","setError","permission_","permissionDescription","isError","TABLE_HEADER_LIST","Permissions","setAddPermissionMode","userForPermissionAdding","setUserForPermissionAdding","administrationPermissionsRequestId","setAdministrationPermissionsRequestId","implementationLevelPermissionsRequestId","setImplementationLevelPermissionsRequestId","activeHistoryPermission","setActiveHistoryPermission","setActiveUsersPermission","lastActiveUsersPermission","setLastActiveUsersPermission","handleCloseHistory","handleCloseUsers","handleOpenHistory","handleOpenUsers","editedPermission","setEditedPermission","handleCloseEditPermission","removedPermission","setRemovedPermission","handleCloseRemovePermission","dialogAdditionalFetchData","url_","dialogAdditionalFetchData_","isHistoryPermission","activePermission","permissionListAdditionalFetchData","handleCloseAddPermissionForm","PermissionFormComponent","prevId","ProfilUzytkownika","handleSaveDanePodmiotu","changeDataOn","handleSaveOsobaDoKontaktu","formOsobaDoKontaktuOn","editedOsobaDoKontaktu","renderProfilUzytkownika","renderDanePodmiotu","renderOsobyDoKontaktu","renderOsobaDoKontaktu","SessionDialog","messageRole","messageContent","withButton","dialogButton","Sesja","refreshSessionErrorDialogOn","handleSessionErrorDialogClose","handleSessionDialogClose","handleExpirationDialogClose","reload","handleUnauthorizedDialogClose","unauthorizedDialogOn","initializeSessionTime","sessionTime","computeSessionTime","startSessionTime","logoutDone","logoutDialogOn","sessionIntervalId","clearInterval","now","nowUTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","floor","getTime","setInterval","renderLogoutDialog","renderUnauthorizedDialog","minRemaining","secRemaining","renderRefreshSessionErrorDialog","renderRefreshSessionDialog","sec","UserContactPersonsList","contactPersons","cp","UserDataForm","onUpdateUserData","blockedAccount","setBlockedAccount","originalBlockedAccount","setOriginalBlockedAccount","blockedAccountsErrors","hasBlockingUserPermission","UserEconomicSubjectData","dane","uprawnienia","serializeFetchData","User","updatedUserData","setUpdatedUserData","setPageNotPermitted","section","administrationFormOn","setAdministrationFormOn","implementationLevelFormOn","setImplementationLevelFormOn","handleCloseAdministrationForm","handleCloseImplementationLevelForm","handleSavePermissionSuccess","isAdministrationPermission","handleSetEditedPermission","handleSetRemovedPermission","administrationHistoryOn","setAdministrationHistoryOn","implementationLevelHistoryOn","setImplementationLevelHistoryOn","ADVERTISEMENTS_CLEANED_FILTERS","ogloszenie_numer","PROJECTS_CLEANED_FILTERS","calyNumer","SEARCH_CLEANED_FILTERS","publicationDateRange","submissionDeadlineRange","advertiserName","advertiserIdentificationNumber","cpvItem","fulfillmentPlaces","USERS_CLEANED_FILTERS","FAVORITES_ADVERT_CLEANED_FILTERS","PROJECTS_MANAGEMENTS_CLEANED_FILTERS","fullNumber","ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS","advertiserAddressType","advertiserIdentificationNumberType","advertiserAddressCountry","advertiserAddressVoivodeship","advertiserAddressPoviat","advertiserAddressCommune","advertiserAddressLocality","announcementStatus","announcementNumber","announcementProjectEnrollmentPerspective","announcementProjectEnrollmentProgramme","announcementProjectEnrollmentPriority","announcementProjectEnrollmentActivity","announcementProjectEnrollmentInstitution","announcementProjectEnrollmentRegion","announcementProjectEnrollmentFullNumber","announcementPublicationDateFrom","announcementPublicationDateTo","submissionDeadlineFrom","submissionDeadlineTo","getSearchFiltersCount","some","getUsersFiltersCount","getFavoritesAdvertFiltersCount","getOffersFiltersCount","emptyFilters","getProjectsManagementsFiltersCount","getAdvertisementsManagementsFiltersCount","Uzytkownicy","queryDict","renderUzytkownik","lista","Users","DraftToComponents","isEmptyString","str","isAtomicEntityBlock","entityRanges","isList","blockType","orderedListIndex","renderBlockquote","renderOrderedListItem","renderUnorderedListItem","renderAtomic","entityMap","renderText","renderSections","entity","renderLink","renderImage","renderEmbed","targetOption","frameBorder","inlineStyleRanges","renderPureText","range","offset","charsWithStyles","charStyles","Set","r","currentText","currentStyle","blockSections","renderSection","blockKey","bold","italic","bolditalic","italicbold","Ciasteczka","cookies","ciasteczka","auditData","COOKIE_NAME","CiasteczkaFront","showCookies","handleCloseCiasteczka","savingDate","DraftToPdf","blockquote","listItem","Image","image","infoText","paddingLeft","marginVertical","textDecoration","SAVE_BUTTON_DEFAULT_LABEL","FormCiasteczka","editing","firstSaving","trescMaxLength","isTrescInvalid","localization","toolbarHidden","EMPTY_KOMUNIKAT","czyBezterminowy","FormKomunikat","newData","handleClearAttributeError","requiredMsg","isNaglowekInvalid","isDataWaznosciValid","dataWaznosciInputRef","LandingPage","handleSearch","getSearchUrl","query","handleNewsletter","_this$props$user","trescPreviewId","placement","homepageBox1","homepageBox2","homepageBox3","homepageBox1IsEmpty","homepageBox2IsEmpty","homepageBox3IsEmpty","renderSearch","renderTrescOgolna","onSubmit","renderAddOgloszenieLink","onLoginClick","CLEANED_STEP_ERRORS","CLEANED_FORM_ERRORS","AdvertisementContext","validationOn","formErrors","roboczeStatus","statusyOgloszenia","zagranicaId","typMiejscaRealizacji","przedmiotZamowieniaKategoria","przedmiotZamowieniaKategoriaDict","przedmiotZamowieniaPodkategoriaDict","typWarunku","nabory","teryt","setConstsFromServer","setConstsFromAdvertisementData","setOgloszenie","saveOgloszenie","updateOgloszenieBeforePublishing","savePrzedmiotZamowienia","removePrzedmiotZamowienia","setAttributeValue","savePrzedmiotZamowieniaListAttributeValue","removePrzedmiotZamowieniaListAttributeValue","saveHarmonogram","removeHarmonogram","saveWarunekUdzialu","removeWarunekUdzialu","addZamowienie","removeZamowienie","movePrzedmiotZamowienia","setZamowienieAttributeValue","saveKryteriumOceny","removeKryteriumOceny","saveZamowienieListAttributeValue","removeZamowienieListAttributeValue","changeProjectsSelected","setZalacznikAttributes","changeFormLockedState","clearStepError","clearPrzedmiotZamowieniaErrors","clearAttributeError","clearFormErrors","clearState","AdvertisementProvider","order_item_categories","announcement_status_draft","announcement_statuses","adresId","address_id","abroad_id","order_fulfillment_place_types","participation_condition_types","enrollment_numbers","teryt_data","terminOfertData","terminOfertWithTime","terminOfertGodzina","pz","newZamowienieTemporaryId","pz_","zamowienia_","attributeName","przedmiotZamowieniaTemporaryId","origin","zamowieniaErrors","zamowieniaStepErrors","kryteriaOcenyErrors","kryteriaOcenyStepErrors","przedmiotyZamowieniaErrors","przedmiotyZamowieniaStepErrors","harmonogramyErrors","harmonogramyStepErrors","warunkiUdzialuErrors","warunkiUdzialuStepErrors","zalacznikiStepErrors","finalStepErrors","formOgloszenie","AdvertisementConsumer","FormPublikowanie","handleCloseDialog","publishingOn","handleChangePublikujOdRazu","publikujOdRazu","publishImmediately","handleChangeTerminOfertData","handleChangeTerminOfertWithTime","isChecked","dialogPublishClassName","handlePublish","handleFetchPublishSuccess","handleFetchPublishError","handleFetchPublishIncorrectStatus","setPublishingSuccessInfo","handleValidate","today","getTomorrow","terminOfert_","setHours","renderError","renderForm","terminOfertDataError","isTerminOfertDataInvalid","terminOfertGodzinaError","isTerminOfertGodzinaInvalid","terminSkladaniaOfertAriDescribedby1","terminSkladaniaOfertAriDescribedby2","terminSkladaniaOfertAriDescribedby","terminOfertInputRef","renderWhenPublishPart","renderPublicationDateField","h","isInvalid","dataOpublikowaniaInputRef","AlreadyPublishedInfo","BaseStepComponent","isPreview","FormKryteriumOceny","onCloseForm","textarea","Zamowienie","handleCloseForm","newKryteriumOcenyOn","editingKryteriumOCenyId","handleSaveKryteriumOceny","onSaveKryteriumOceny","handleChangeSzacunkowaWartosc","onSetZamowienieAttribute","handleBlurSzacunkowaWartosc","handleSzacunkowaWartoscKeyPress","szacunkowaWartoscLenth","handleSzacunkowaWartoscPaste","handleCloseRemoveZamowienieDialog","isRemoving","handleMovePrzedmiotZamowieniaFromList","saveDraggedTemporaryId","then","onMovePrzedmiotZamowienia","kryteriaOceny_","czyWariantowe_","tytul_","isInvalidTytul","tytulId","isSzacunkowaWartoscInvalid","szacunkowaWartoscId","Droppable","onDropCallback","renderRemoveZamowienie","renderPrzedmiotZamowienia","ko","renderKryteriumOceny","renderKryteriumOcenyForm","renderNewKryteriumOcenyButton","zamowienieTemporaryIds","indexOnList","Draggable","isDragAndDropElement","onDragCallback","onRemoveZamowienie","Kryterium","cenowe","zawiera","additionalClassName","onRemoveKryteriumOceny","kryteriumOcenyLastTemporaryId","StepCzesciKryteria","handleSaveCzyDopuszczalnaOfertaCzesciowa","handleSaveDraggableTemporaryId","Promise","resolve","reject","draggedTemporaryId","handleMovePrzedmiotZamowienia","changeCzyDopuszczalnaOfertaCzesciowaForbidden","radioDisabled","PomocEkranowa","pomocEkranowaContent","renderZamowienia","onChangeCurrentMenuLink","NO_PROJECT_TEXT","NO_PROJECT_ADMIN_TEXT","NO_ENROLLMENT_TEXT","NO_ENROLLMENT_ADMIN_TEXT","NO_OSOBY_TEXT","StepPozostale","StepComponent","sortProjectsEnrollments","osobyDoKontaktu_","isProjektyInvalid","isNumerNaboruInvalid","isTytulInvalid","isOsobyDoKontaktuInvalid","projectsEnrollmentsDisabled","contactPersonsDisabled","onChangeProjectsSelected","closeMenuOnSelect","defaultValue","withStepConfiguration","FormKodCPV","initial","setInitialOptions","selectedKod","selectedKodError","selectMenuIsOpen","handleChangeInputKodCPV","handleBlurKodCPV","handleChangeKodCPV","handleAddKodCPV","search_key","usedIds","String","addKodCPV","isSelectInvalid","renderButtons","addButtonDisabled","onCancelKodCPV","KodyCPV","handleCancelKodCPV","newKodOn","handleRemoveKodCPV","selectedCode","removeKodCPV","kod_","renderNewKodForm","errorsKodyCPV","POLAND","EMPTY_ADDRESS","FormMiejsceRealizacji","handleChangeTyp","handleSaveMiejsceRealizacji","handleChangeZagranicaAttribute","field","saveMiejsceRealizacji","isSaveButtonDisabled","miejscowosc1","miejscowosc2","renderAdresForm","renderZagranicaForm","cancelNewMiejsceRealizacji","MiejsceRealizacji","ogloszeniaContext","miejsceRealizacji","removeMiejsceRealizacji","MiejscaRealizacji","newMiejsceRealizacjiOn","mr","renderNewMiejsceRealizacjiForm","lastTemporaryId","errorsKodyMiejscaRealizacji","FormPrzedmiotZamowienia","handleRemoveMiejsceRealizacji","selectClassName","selectInvalidClassName","kategoriaInvalid","miejsceRealizacjiLastTemporaryId","PrzedmiotZamowienia","handleCloseRemovingDialog","isRemovingOn","kodyCPVPrzedmiotuZamowienia","onEditClick","renderRemovingPart","onRemoveClick","StepPrzedmiotZamowienia","formPrzedmiotZamowieniaOn","addedPrzedmiotZamowieniaId","editedPrzedmiotZamowieniaId","handleEditClick","handleRemovePrzedmiotZamowienia","przedmiotZamowieniaError","renderPrzedmiotZamowieniaForm","przedmiotZamowieniaData","pzLength","FormHarmonogram","handleEscPress","poczatekInputRef","koniecInputRef","koniecRealizacjiErrorVisible","Harmonogramy","newHarmonogramOn","editingHarmonogramId","onSaveHarmonogram","renderHarmonogram","renderHarmonogramForm","renderNewHarmonogramButton","etapErrors","onRemoveHarmonogram","harm","StepTerminy","przedmiotyZamowienia_","planowanyTerminPodpisaniaUmowyInputRef","dateCalendarRef","FormWarunekUdzialu","clearFunct","stateDict","opisError","typError","isValidating","mergeErrors","globalErrors","errorsOpisVisible","errorsTypVisible","usedWarunkiUdzialuIds","WarunkiUdzialu","newWarunekUdzialuOn","editingWarunekUdzialuTemporaryId","onSaveWarunekUdzialu","wu","renderWarunekUdzialu","renderWarunekUdzialuForm","renderNewWarunekUdzialuButton","onRemoveWarunekUdzialu","w","StepWarunki","StepZalaczniki","distinguishAttachments","oldAttachments","currentAttachments","attachment","oldAttachmentsLength","renderCurrentAttachments","renderOldAttachments","attachmentsLength","DEFAULT_OGLOSZENIE","FormOgloszenie","handleChangeCurrentMenuLink","handleSetCurrentMenuLink","menuLinksMapNameId","handleChangeProjectsSelected","handleReturnToList","handleFetchOgloszenieSuccess","additionalSuccessFunction","addTemporaryId","reformatPrzedmiotyZamowieniaData","preview","instruction","validationAria","clearMenuErrorTimeout","menuLinksMapIdName","cleanData","xhrSaveFetch","callbackError_","callbackIncorrectStatus_","getAdvertisementDataFromServer","handlePublishByAdmin","notValidByAdminError","handleClosePublishingSuccessDialog","handleClosePublishingByAdminErrorDialog","initializeData","formContentRef","publishingSuccessInfo","menuLinks","step","menuBasicRef","version_mode","getPublishedDataForSaving","groupUuid","group_uuid","renderInstruction","renderFuturePublishingInfo","renderTerminy","renderWarunki","renderCzesciKryteria","renderPozostale","renderZalaczniki","renderPublishingByAdminError","renderPublishingSuccessInfo","ANNOUNCEMENT_STATUS_DRAFT","ANNOUNCEMENT_STATUS_PUBLISHED","ANNOUNCEMENT_STATUSES","Ogloszenia","obublikowaneStatusId","roboczeStatusId","statusyOgloszen","handleRemoveOgloszenie","removeFunct","xhrRemoveAdvertisement","removedOgloszenieId","handleFetchRemoveOgloszenieSuccess","handleFetchRemoveOgloszenieError","handleFetchRemoveOgloszenieIncorrectStatus","handleCloseActionDialog","fetchActionError","handleCopyOgloszenie","baseOgloszenieId","copyingOgloszenieId","xhrCopyAdvertisement","handleFetchCopyOgloszenieSuccess","handleFetchCopyOgloszenieError","handleFetchCopyOgloszenieIncorrectStatus","copiedOgloszenieIds","handleToggleFilters","setFiltersData","handleCancelOgloszenie","cancelledOgloszenieId","handleFetchCancelOgloszenieSuccess","handleFetchCancelOgloszenieError","handleFetchCancelOgloszenieIncorrectStatus","xhrCancelAdvertisement","ogloszenieData","removedOgloszenieTitle","cancelledOgloszenieTitle","currentSortingValue","actionComponent","createdByList","modifiedByList","creators","modifiers","creator","modifier","filterAdvertisements","subattr","adValue","Switch","renderAddOgloszenieButton","renderOgloszenie","renderRemovingOgloszenie","renderCancellingOgloszenie","renderCopiedMessage","ktoUtworzylList","ktoUtworzylDict","username","ktoModyfikowalList","ktoModyfikowalDict","dataUtworzeniaInputRef","dataModyfikacjiInputRef","_ref6","_ref7","isDraft","isPublished","isLocked","BadgeAnchor","badge_count","renderActionDialog","baseOgloszenieTytul","verbString","actionName","actionPrefix","fetchHandler","showText","SELECTS_CODES","dzialanieIpoddzialanie","Form","handleChangePerspektywa","setNumberParts","updateNumber","handleChangeProgramOperacyjny","handleChangeOsPriorytetowa","handleChangeDzialanie","handleChangeInstytucja","handleChangeOthers","changeInputNumber","getSuffixDefaultDict","handleChangeInstitutionNumber","suffix","isProjekt","perspektywy","getFullNumber","parts","suffixMask","regiony","instytucje","separator","alternativeAttrName","attrValue","onNumberChange","renderNumer","renderNazwa","renderSelects","renderOthers","isSuffixInvalid","maxSuffixLength","Ogloszenie","showDetails","setShowDetails","wersja","prevShowDetails","Projekt","handleShowOgloszenia","detailsOn","initializingDetailsOn","getOgloszenia","handleHideOgloszenia","handleFetchOgloszeniaSuccess","handleFetchOgloszeniaError","handleFetchOgloszeniaIncorrectStatus","handleCloseRemovingOn","removingOn","isProject","renderOgloszeniaDetails","ogloszenia_","maOpublikowaneOgloszenia","maRoboczeOgloszenia","onRemove","Projekty","projektyNabory","handleRemove","handleFetchRemoveSuccess","handleFetchRemoveError","handleFetchRemoveIncorrectStatus","serializedData","removingError","czyNewProjekt","filterProjects","renderRemovingErrorDialog","userProjectsNumbers","serializeProgrammeSelectStructure","NewsletterSettingsFilter","_state$currentDiction","_state$currentDiction2","_state$filters$advert","_state$filters$advert2","_state$filters$advert3","_Object$keys$filter","isSelectOpen","currentDictionaries","errorNipOgloszeniodawcy","fromEntries","operation_programme","location_id","_state$filters$progra","_state$filters$progra2","_state$filters$fulfil","_state$filters$fulfil2","operationalProgramsIdsInFilter","x","fulfillmentPlacesIdsInFilter","updatedFilters","newFilters","close","onMenuOpen","_state$filters$catego","NewsletterSettings","showDeleteFilterModal","setShowDeleteFilterModal","filterModalData","setFilterModalData","visible","setAdvertisements","yesterdayDate","valueOf","dayBeforeYesterdayDate","advertisementsFilters","setAdvertisementsFilters","updatedCount","setUpdatedCount","newCount","setNewCount","isBusy","setIsBusy","refreshUpdatedAnnouncementsCount","announcements","refreshNewAnnouncementsCount","refreshFilters","newsletter_filters","mappedFilters","modalFilter","modal_settings","buildFilterName","filterByPropertiesCount","countFilters","enabled","promise1","refreshAnnouncements","promise2","promise3","mapAndSaveFilter","onSuccess","_filter$programme$map","_filter$programme","_filter$category","_filter$subcategory","_filter$cpvItem$map","_filter$cpvItem","_filter$fulfillmentPl","_filter$fulfillmentPl2","filterToSave","advertiser_identification_number","programme_ids","category_id","subcategory_id","cpv_item_ids","fulfillment_place_codes","rest","hasOwnProperty","gap","padding","enableDisableFilter","marginLeft","listStyleType","_advertisement$advert","dangerouslySetInnerHTML","__html","favorite","findIndex","updatedObjects","editFilter","existingFilter","_Object$keys","addFilter","FavoritesFilters","updateDictionaries","_filters$category","Favorites","handleReload","handleAddToFavorites","handleRemoveFromFavorites","subname","_o$ogloszenie$status","_o$ogloszenie$status2","_o$dataOpublikowania","TrescPreview","closePreview","renderPreview","pop","FormPomoc","availableParents","parents_candidates","availableRelatives","availableScreens","screens_available","typOgolna","isRoot","root","hasChildren","has_children","originalTypOgolna","originalRozdzialNadrzedny","relatives_candidates","handleSaveTypOgolna","handleUploadFile","uploadImageError","handleLoadEmbed","embeddedUrl","loadEmbedError","entityRange","handlePreview","previewOn","dictionary","typeChosen","renderTypOgolnaForm","renderTypNaEkranieForm","renderCommonFields","renderPowiazaneForm","renderUploadImageErrorDialog","renderLoadEmbedErrorDialog","isRozdzialNadrzednyInvalid","isEkranInvalid","inline","inDropdown","urlEnabled","uploadEnabled","alignmentEnabled","uploadCallback","previewImage","inputAccept","present","mandatory","defaultSize","embedded","embedCallback","optionsForPowiazane","renderErrorDialog","FormRegulamin","regulamin","FormTrescOgolna","Komunikat","setUrlWithCorrectSlug","Komunikaty","k1","k2","KomunikatFront","KomunikatyFront","Font","register","family","fonts","robotoRegular","robotoItalic","robotoBold","registerHyphenationCallback","word","pdfStyles","mainPdfContainerStyle","fontFamily","flexWrap","gridSection","borderedSectionStyle","borderLeftWidth","borderLeftColor","borderedDashedSectionStyle","borderStyle","borderColor","borderedSeparateSectionStyle","pzTitleSection","textHeaderStyle","textWithLabelStyle","labelStyle","labelHeaderStyle","dateTextStyle","errorStyle","titleStyle","sectionTitleStyle","PdfWithDraftContent","Document","Page","wrap","renderFooter","Pomoc","handleCreatePdf","pdfHeaderText","ekranLabel","PdfText","pdfHeaderStyle","pdfHeaderSecondaryStyle","callbackPfdCreated","onpopstate","handleChangePomoc","newId","newSlug","PomocUsun","handleRemovePomoc","removePomoc","fetchRemoveError","renderRemovingImpossible","renderRelatives","renderConfirmation","closePomocForRemoving","Pomoce","handleChangeTypPomocy","pomocForRemoving","pomocForPreview","PomoceFrontPdf","renderPomoc","deepLevel","sectionTextStyle","renderPomocePodrzedne","pomocId","pomocePodrzedne","secondarySectionStyle","noPadding","PomoceFront","sortPomoce","pomocePodrzedneClassName","PomocFront","Regulamin","front","renderPdfButton","Regulaminy","currentExists","forPublicationExists","handleCloseCurrentVersionDialog","editCurrentVersionOn","handleRemoveDoOpublikowania","removingDoOpublikowaniaOn","handleCloseRemoveDoOpublikowaniaDialog","renderEditCurrentVersionDialog","renderRemoveDoOpublikowaniaDialog","TresciOgolne","trescForPreview","TrescOgolna","ZarzadzanieTrescia","timerRefreshed","setTimerRefreshed","Card","CardPrimaryAction","CardMedia","ZoltyPasekFront","trescKomunikatu","b","DeklaracjaDostepnosci","listStyle","AdvertisementDataFilters","onChangeFilter","onChangeProjectNumberSelect","announcementPublicationDateFromInputRef","announcementPublicationDateToInputRef","submissionDeadlineFromInputRef","submissionDeadlineToInputRef","STATUS_ICONS","DRAFT","PUBLISHED","CLOSED","CANCELLED","LOCKED","RESOLVED","AdvertisementListRow","onFilterAdvertisementByUserEmail","advertisement_","publicationDate","versionPublicationDate","submissionDeadline","advertisementPublicationDate","handleGoToManageUserPage","handleFilterProjectsByUserEmail","handleFilterAdvertisementsByUserEmail","AdvertiserDataFilters","onChangeAdvertiserIdentificationNumber","onChangePolishLocality","advertiserAddressTypeValue","onChangeAdvertiserAddressType","onChangeAdvertiserIdentificationNumberType","UserDataFilters","AdvertisementsFilters","setSerializedData","prevFilters","SORTERS","announcementStatus_asc","announcementStatus_desc","announcementNumber_asc","announcementNumber_desc","userEmail_asc","userEmail_desc","announcementPublicationDate_asc","announcementPublicationDate_desc","submissionDeadline_asc","submissionDeadline_desc","title_asc","title_desc","SORTING_VALUES","DEFAULT_SORTER","SERIALIZER_CONFIG","SERIALIZATION_URL_LIST","SERIALIZATION_URL_DICT_TO_POLISH","eng","pol","IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST","Advertisements","setInitialPageNumber","setSelectedSort","setFiltersCounter","setFiltersAreOn","setCleanedLocalityFilters","filtersData","filters_","setValue","valueName","searchParamValue","type_","filterSet","setInitialFilters","EditProjectForm","setName","setFetchSaveError","attachedAdvertisementsAmount","ADVERTISEMENTS_GET_COMMON_URL_PARAMS","ProjectListRow","onFilterProjectsByUserEmail","onSelectProjectForEditing","handleFilterAdvertisementsByFullNumber","ProjectsFilters","Projects","editedProject","setEditedProject","projectId","ANULOWANE_STATUS","OPUBLIKOWANE_STATUS","ZAMKNIETE_STATUS","ROZSTRZYGNIETE_STATUS","FiltryWyszukiwarki","handleChangeStatusFilter","handleChangeDateFilter","filterName","renderInformacjeOogloszeniu","renderDaneOgloszeniodawcy","statuses","FormRozstrzygniecieWariant","wariant","checkboxLabel","nazwaOferenta","offerTitle","isRefused","onOfferRestore","ofertaId","hasOfertaManyWarianty","onOfferRefuse","onWariantSelect","FormCzescRozstrzygniecia","handleRefuse","refusingOfertaId","handleRestore","restoringOfertaId","ofertaIdAttributeName","sortWarianty","w1","w2","hasManyWarianty","hasMultiplyZamowienia","renderNotRefused","renderRefused","onNoOfferSelectedChange","renderRefusingDialog","refused","renderRestoringDialog","renderDialog","titleAdverb","additionalInfo","OGLOSZENIE_STATUS_CHOICES","OFERTA_STATUS_CHOICES","FiltryOfert","submissionDeadlineInputRef","announcementPublicationDateInputRef","announcementPublicationDate","offerStatus","FormWariant","onlyCena","priceAutofocus","renderCena","onChangeWariantAttribute","wariantOpisId","isOpisInvalid","onRemoveWariant","FormOfertaFields","getWariantLasttemporaryId","getEmptyOferta","getEmptyWariant","renderOferty","withDanePodmiotuForm","ofertyErrors","isOfertyInvalid","renderMultiplyOferta","renderSingleOferta","zamowienieNodeId","oferta","czyWariantoweErrors","isCzyWariantoweInvalid","changeAddOferta","changeCzyWariantowa","renderWarianty","wariantyErrors","isWariantyInvalid","onAddWariant","renderSingleWariant","changeAddZalacznik","changeRemoveZalacznik","changeSaveZalacznikAttributes","EMPTY_DANE_PODMIOTU_DATA","FormOferta","handleFetchUserDataSuccess","handleFetchOfferDataSuccess","handleCloseCancellingDialog","cancellingOn","handleCloseSubmittingDialog","submittingDialogOn","handleChangeAddOferta","handleChangeCzyWariantowa","handleAddWariant","handleChangeWariantAttribute","handleRemoveWariant","handleAddZalacznik","handleSaveZalacznikAttributes","ogloszenieId","handleSubmit","getSubmitUrl","getSerializedDataForSubmitting","handleFetchSubmitSuccess","onSubmitOferta","getWariantLastTemporaryId","getDataForSubmitting","statusOferty","ogloszenieErrors","formOfertaErrors","renderCancelDialog","renderRemoveDialog","renderSubmitDialog","confirmButton","renderBaseDialog","onConfirm","FormOfertaOgloszeniodawca","onSubmitForm","Oferta","handleCloseWithdrawingDialog","withdrawingOn","handleWithdraw","handleFetchWithdrawSuccess","handleFetchWithdrawError","handleFetchWithdrawIncorrectStatus","onWithdrawOferta","fetchWithdrawError","getOfferData","commonState","onClosePreview","renderActionsButtons","renderWithdrawDialog","renderWariantowa","renderNiewariantowa","withdrawingError","OfertaBox","myOfferLabel","showMyOfferLabel","showFullVariants","showAttachments","pakietId","OfertaPreview","Oferty","handleClosePreview","previewedOfferAnnouncementId","getEmptyFilters","ofertaLabel","totalString","renderPakietOfert","offerSubtitle","ostatniaWersja","OfertyOwnerClosedStatus","handleMyOfferButtonClick","isAdvertisementOwner","onlyAdmin","extra","is_advertiser","pakietyOfert","sortOferty","oferta1","oferta2","wariant1","wariant2","FormRozstrzygniecie","renderMyOfferButton","po","renderZamowienie","isMultiply","oferentId","renderOferta","renderOfertaBox","OfertyOffererClosedStatus","OfertyOffererPublishedStatus","handleWithdrawOferta","withdrawingOfferConfirmationOn","submittingOfferConfirmationOn","handleCloseWithdrawingOfferConfirmationDialog","handleSubmitOferta","offerSetId","handleCloseSubmittingOfferConfirmationDialog","renderWithdrawingOfferConfirmationDialog","renderSubmittingOfferConfirmationDialog","OfertyResolvedStatusPdf","checkRefused","offerId","rozstrzygniecie","tytulOgloszenia","renderKomentarz","renderSelectedOferta","zamowienieFromRozstrzygniecie","selectedWariantId","selectedPakietOfert","selectedOferta","selectedWariant","oferta_","offerVariantDescrStyle","filteredOferty","otherOffersContainerStyle","selectedOfferStyle","commentTextStyle","whiteSpace","OfertyOwnerResolvedStatus","handleFetchSettlementSuccess","toFixAttributes","renderZalacznikiRozstrzygniecia","OfertyOffererResolvedStatus","OfertyOwnerPublishedStatus","handleRemoveBadge","offersCount","offer","badge","offerFormOn","editingOffersetId","handleSubmitOfertaForm","idsDict","handleCloseOfferPreview","offerPreviewOn","previewedOfferId","handleChangeZalacznikIsProtocol","handleNoOfferSelectedChange","handleRefuseOffer","setOfferRefuseValue","handleRestoreOffer","handleSelectWariant","wariantId","handleRemoveOfertaZewnetrzna","pakietOfertId","variantsIds","getNotSerializedDataForSaving","errorsDialogOn","getOfertyByZamowienieNodeId","getMenuLinks","nieMaWiecejOfert","links","wariantIds","prevWybranyWariant","currentMenuLinkName","renderOffersCompleting","renderOffers","renderSummary","renderFormOferta","renderOfertaPreview","pakietyOfertZewnetrzne","renderOfertaZewnetrzna","isRemoved","offersStateDict","renderSelectedOfertyList","renderErrorsDialog","isKomentarzInvalid","renderZamowienieSummary","zamowienieFromState","renderUnexpectedSummaryPartError","renderNoOfferSelected","renderNoChoice","zamowienieErrors","ListaWersji","handleFetchVersionListSuccess","versions","handleFetchVersionListError","handleFetchVersionListIncorrectStatus","closeVersionDialog","sortVersions","published","renderVersionList","currentlyVisibleMarker","renderDraftList","isCreatedByAdvertiser","ManageAdvertisementButtons","onChangeAdvertisementStatus","confirmDialogOn","setConfirmDialogOn","usePutFetchApi","userBasicPermission","hasPermission","parentName","handleCloseConfirmDialog","advertiser","PytaniaForOgloszeniePdf","numerOgloszenia","renderQuestionsList","q","renderQuestion","renderAnswer","answerLabel","answerContainerStyle","questionContainerStyle","myLabelStyle","textTransform","BasePytaniaForOgloszenieWidthPdf","renderPrintButton","FormOdpowiedz","handleSaveDraft","handleSavePublished","xhrSave","onUpdate","pytanieTresc","isPytanieTrescInvalid","questionLabel","FormPytanie","onAddQuestion","Pytanie","handleAnswer","onClickAnswer","reloadAnnouncement","noAuthorLabel","renderPytanieLabel","renderOdpowiedz","allowAnswer","renderPytanieButton","renderOdpowiedzLabel","annoucementOwner","PytaniaForOgloszenieAnnouncementOwner","handleUpdate","answeredQuestionId","handleShowAnswerForm","answerFormOn","renderAnswerForm","answeredQuestion","PytaniaForOgloszenieAnonymous","ogloszenieStatus","PytaniaForOgloszenieLoggedIn","handleAddQuestion","questionFormOn","confirmInfo","myQuestionsList","publishedQuestionsList","a","renderQuestionForm","renderConfirmationDialog","questionsListName","questionsList","noQuestionsInfo","noAuthor","OgloszenieDetails","getPrzedmiotyZamowieniaList","getHarmonogramList","hasPointer","prepareChartData","firstDate","lastDate","maxDistance","factor","nextObj","showVersionModeInfo","versionMode","ostatniaOpublikowanaWersjaId","renderOrigin","renderDaneAdresoweOgloszeniodawcy","renderPodsumowanie","indexVersion","all_available_version_ids","draftMode","renderAttachmentsForOrigin","daneAdresowe","tableOfContetns","refs","offsetTop","renderPrzedmiotyZamowienia","renderKryteriaOceny","renderKodyCPV","renderMiejscaRealizacji","renderWarunkiUdziału","renderOgloszeniePodsumowanie","renderPrzedmiotyZamowieniaPodsumowanie","dateForShowing","renderChartData","renderTextError","harmonogramForRendering","h1","h2","OgloszeniePdf","renderPublishedDates","borderLeftStyle","sortAttachmentsByOrigins","czyUlubione","offer_set_badge_count","question_badge_count","isCurrentVersion","handleCloseVersionDialog","showOtherVersionOn","handleChangeTab","handleChangeAdvertisementStatus","handleAddToFavorite","handleRemoveFromFavorite","versionId","origins","originsIds","originId","origin1","origin2","isMyAdvertisement","userAnonymous","renderPytania","renderOfertyForPublishedStatus","renderOfertyForCancelledStatus","renderOfertyForClosedStatus","renderOfertyForResolvedStatus","renderOfertyForAfterPublishedStatus","OwnerComponent","OffererComponent","STATUS_MAP","Wyszukiwarka","handleChangeQuery","renderObject","moje","nazwaOgloszeniodawcy","renderOldBkLink","isPublicationDateRangeCustom","isSubmissionDeadlineRangeCustom","action","translationMap","MY_ADVERTISEMENT","MY_OFFERS","MY_FAVORITE_ADVERTISEMENT","MY_ADVERTISEMENT_QUESTION_SUBMITTED","MY_ADVERTISEMENT_OFFER_SUBMITTED_OR_CHANGED","MY_ADVERTISEMENT_OFFER_WITHDRAWN","MY_ADVERTISEMENT_ENDS_IN_24_HOURS","MY_OFFERS_ADVERTISEMENT_SUBMITTED_CHANGES","MY_OFFERS_ADVERTISEMENT_STATUS_CHANGED","MY_OFFERS_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED","MY_FAVORITE_ADVERTISEMENT_SUBMITTED_CHANGES","MY_FAVORITE_ADVERTISEMENT_STATUS_CHANGED","MY_FAVORITE_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED","MY_FAVORITE_ADVERTISEMENT_ENDS_IN_24_HOURS","CircleWithLetter","Notifications","_notificationOptions$","notificationOptions","setNotificationOptions","notificationsEnabled","notifications","margin","handleToggleNotifications","handleToggleNotification","j","tabIndexMap","Map","Newsletter","_location$search","_location$search$spli","activeTab","setActiveTabIndex","tabName","getMapKeyByValue","UnsubscribeSuccess","handleGoToMainPage","UnsubscribeConfirmation","token","setToken","handleError","handleConfirm","setConfirmed","Subscriptions","confirmed","URL_PATTERNS_BY_MENU_LINK_NAME","projectsManagement","advertisementsManagement","contentsManagement","implementationLevelsDictionaryManagement","Routes","onSetMenuLinkByName","patternList","getComponent","component","Redirect","Route","exact","SKIP_LINKS_PRIVATE","SKIP_LINKS","MENU_LINKS","onlyAuthenticated","UePadding","UeFooter","maxWidth","App","clearAuthCookie","handleLogin","handleLogout","xhrLogoutFetch","handleFetchLogoutSuccess","handleFetchLogoutError","handleFetchLogoutIncorrectStatus","logoutDoneOn","logoutError","handleSetMenuLinkByName","currentHref","appContentRef","updateMenuDisplay","addEventListener","setCurrentMenuLink","innerWidth","skipLinks","Router","TopAppBarFixedAdjust","renderMenu","renderLogoutError","TopAppBar","TopAppBarRow","TopAppBarSection","TopAppBarTitle","renderUserWidget","TopAppBarActionItem","DrawerAppContent","Boolean","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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aACJ,IAAK,QACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,SACL,IAAK,QACL,IAAK,gDACL,IAAK,SACL,IAAK,YACL,IAAK,OACL,IAAK,SACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,gBACL,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,OACL,IAAK,QACL,IAAK,2BACL,IAAK,SACL,IAAK,YACL,IAAK,aACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,aACL,IAAK,gBACL,IAAK,SACL,IAAK,WACL,IAAK,aACL,IAAK,WACL,IAAK,kBACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,iBACL,IAAK,gBACL,IAAK,OACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,SACL,IAAK,oBACL,IAAK,WACL,IAAK,OACL,IAAK,WACL,IAAK,sBACL,IAAK,2DACL,IAAK,YACL,IAAK,aACL,IAAK,wBACL,IAAK,kCACL,IAAK,mBACL,IAAK,kBACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,SACL,IAAK,mBACL,IAAK,mBACL,IAAK,sBACL,IAAK,cACL,IAAK,4BACL,IAAK,0BACL,IAAK,WACL,IAAK,QACL,IAAK,0BACL,IAAK,aACL,IAAK,UACL,IAAK,SACL,IAAK,UACL,IAAK,eACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,IAAK,UACL,IAAK,YACL,IAAK,4BACL,IAAK,QACL,IAAK,QACL,IAAK,wBACL,IAAK,UACL,IAAK,uBACL,IAAK,QACL,IAAK,aACL,IAAK,UACL,IAAK,mBACL,IAAK,YACL,IAAK,SACL,IAAK,WACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,oBACL,IAAK,UACL,IAAK,SACL,IAAK,eACL,IAAK,SACL,IAAK,SAC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","file":"static/js/main.2b19e2e0.chunk.js","sourcesContent":["const SELECT_CLASSNAME = 'select-custom';\nconst SELECT_INVALID_CLASSNAME = 'select-custom select-custom--invalid';\n\n///////////////////////////////////////////////////////////////////////////////\n//                                 projekty                                  //\n///////////////////////////////////////////////////////////////////////////////\n\nconst CZY_PROJEKT_CHOICES = [\n    ['all', 'Wszystkie'],\n    ['true', 'Projekty'],\n    ['false', 'Nabory'],\n]\n\n// used in projects management filters\nconst PROJECTS_MANAGEMENTS_CHOICES = [\n    ['all', 'Wszystkie'],\n    ['project', 'Projekt'],\n    ['enrollment', 'Nabór'],\n]\n\n///////////////////////////////////////////////////////////////////////////////\n//                                 ogloszenia                                //\n///////////////////////////////////////////////////////////////////////////////\nconst SEARCH_DATE_CHOICES = [\n    ['0', '--- Wybierz ---', '', ''],\n    ['last_week', 'ostatni tydzień', '-1week', 'today'],\n    ['last_two_weeks', 'ostatnie 2 tygodnie', '-2weeks', 'today'],\n    ['last_month', 'ostatni miesiąc', '-1month', 'today'],\n    ['custom', 'niestandardowo', '', ''],\n];\n\nconst SEARCH_CUSTOM_NAME = SEARCH_DATE_CHOICES[4][0];\n\nconst ADVERTISEMENT_STATUS_FILTERS_CHOICES = [\n    ['all', 'Wszystkie'],\n    ['CANCELLED', 'Anulowane'],\n    ['PUBLISHED', 'Opublikowane'],\n    ['DRAFT', 'Robocze'],\n    ['RESOLVED', 'Rozstrzygnięte'],\n    ['LOCKED', 'Zablokowane'],\n    ['CLOSED', 'Zamknięte'],\n].map(choice => ({value: choice[0], label: choice[1]}));\n\n// Current values versus values from old Baza Konkurencyjności\nconst MIEJSCE_REALIZACJI_OLD_BK_DICT = {\n    'poland': 0,\n    'abroad': -1,\n    '02': 1,\n    '04': 2,\n    '06': 3,\n    '08': 4,\n    '10': 5,\n    '12': 6,\n    '14': 7,\n    '16': 8,\n    '18': 9,\n    '20': 10,\n    '22': 11,\n    '24': 12,\n    '26': 13,\n    '28': 14,\n    '30': 15,\n    '32': 16,\n};\n\nconst NIP_CHARS_IMPORTANCE = {\n    0: 6,\n    1: 5,\n    2: 7,\n    3: 2,\n    4: 3,\n    5: 4,\n    6: 5,\n    7: 6,\n    8: 7,\n};\n\nconst PESEL_CHARS_IMPORTANCE = {\n    0: 9,\n    1: 7,\n    2: 3,\n    3: 1,\n    4: 9,\n    5: 7,\n    6: 3,\n    7: 1,\n    8: 9,\n    9: 7,\n};\n\n///////////////////////////////////////////////////////////////////////////////\n//                           zarządzanie treścią                             //\n///////////////////////////////////////////////////////////////////////////////\n\nconst EKRANY = [\n    ['form_ogloszenie_przedmiot','Formularz dodawania ogłoszenia - Przedmiot', 'form_announcement_item'],\n    ['form_ogloszenie_terminy','Formularz dodawania ogłoszenia - Terminy', 'form_announcement_deadlines'],\n    ['form_ogloszenie_warunki','Formularz dodawania ogłoszenia - Warunki', 'form_announcement_conditions'],\n    ['form_ogloszenie_czesciKryteria','Formularz dodawania ogłoszenia - Części i kryteria', 'form_announcement_partscriteria'],\n    ['form_ogloszenie_pozostale','Formularz dodawania ogłoszenia - Pozostałe', 'form_announcement_others'],\n    ['form_ogloszenie_zalaczniki','Formularz dodawania ogłoszenia - Załączniki', 'form_announcement_attachments'],\n    ['projekty_lista_ogloszeniodawca','Projekty - Lista projektów - Ogłoszeniodawca', 'projects_list_advertiser'],\n    ['ogloszenia_lista_ogloszeniodawca','Ogłoszenia - Lista ogłoszeń - Ogłoszeniodawca', 'announcements_list_advertiser'],\n    ['newsletter_ustawienia','Newsletter', 'newsletter_settings'],\n    ['ulubione_lista','Ulubione', 'favorites_list'],\n];\n\nconst EKRANY_DICT = {};\nfor (let e of EKRANY) {\n    EKRANY_DICT[e[2]] = {id: e[0], label: e[1]};\n}\n\n// pomoc types\nconst EKRANOWA = 'screen_assigned';\nconst OGOLNA = 'general';\n\n\n///////////////////////////////////////////////////////////////////////////////\n//                                użytkownicy                                //\n///////////////////////////////////////////////////////////////////////////////\nconst USER_STATUS_CHOICES = [\n    ['all', 'Wszyscy'],\n    ['active', 'Aktywni'],\n    ['blocked', 'Zablokowani'],\n];\nconst RODZAJ_ADRESU_CHOICES = [\n    {\n        value: 'poland',\n        label: 'Polska',\n    },\n    {\n        value: 'abroad',\n        label: 'Zagranica',\n    },\n];\nconst RODZAJ_ADRESU_FILTERS_CHOICES = [\n    {\n        value: 'all',\n        label: 'Wszystkie',\n    },\n    ...RODZAJ_ADRESU_CHOICES\n];\nconst TYP_NUMERU_IDENTYFIKACYJNEGO = [\n    ['nip', 'NIP'],\n    ['pesel', 'PESEL'],\n    ['numer_zagraniczny', 'Numer identyfikacyjny'],\n].map(choice => ({value: choice[0], label: choice[1]}));\nconst TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES = [\n    ['all', 'Wszystkie'],\n    ['nip', 'NIP'],\n    ['pesel', 'PESEL'],\n].map(choice => ({value: choice[0], label: choice[1]}));\nconst TOKEN_COOKIE_NAME = 'auth_token';\nconst USER_DATA_COOKIE_NAME = 'auth_data';\n\n\n///////////////////////////////////////////////////////////////////////////////\n//                                   oferty                                  //\n///////////////////////////////////////////////////////////////////////////////\nconst OFERTA_STATUSES = {\n    draft: {\n        label: 'DRAFT',\n        nazwa: 'Robocza',\n    },\n    submitted: {\n        label: 'SUBMITTED',\n        nazwa: 'Złożona',\n    },\n    withdrawn: {\n        label: 'WITHDRAWN',\n        nazwa: 'Wycofana',\n    },\n};\n\n\nexport {\n    ADVERTISEMENT_STATUS_FILTERS_CHOICES,\n    CZY_PROJEKT_CHOICES,\n    EKRANOWA,\n    EKRANY_DICT,\n    MIEJSCE_REALIZACJI_OLD_BK_DICT,\n    NIP_CHARS_IMPORTANCE,\n    OFERTA_STATUSES,\n    OGOLNA,\n    PESEL_CHARS_IMPORTANCE,\n    PROJECTS_MANAGEMENTS_CHOICES,\n    RODZAJ_ADRESU_CHOICES,\n    RODZAJ_ADRESU_FILTERS_CHOICES,\n    SEARCH_CUSTOM_NAME,\n    SEARCH_DATE_CHOICES,\n    SELECT_CLASSNAME,\n    SELECT_INVALID_CLASSNAME,\n    TOKEN_COOKIE_NAME,\n    TYP_NUMERU_IDENTYFIKACYJNEGO,\n    TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES,\n    USER_DATA_COOKIE_NAME,\n    USER_STATUS_CHOICES,\n};\n","import { saveAs } from 'file-saver';\nimport { pdf } from '@react-pdf/renderer';\n\nimport { TYP_NUMERU_IDENTYFIKACYJNEGO, TOKEN_COOKIE_NAME } from './const';\n\n\nconst emptyValueList = [\n    '',\n    'Wybierz',\n    '--- Wybierz ---',\n    'Wybierz...',\n    'Wpisz co najmniej 5 cyfr lub 3 litery...',\n    'Wpisz co najmniej 3 litery...',\n    'Zacznij wpisywać...'\n];\n\n\nconst computeProgress = (additionalAttrFilledLen=0, additionalAttrLen=0) =>  {\n    let filledInputsLen = 0;\n\n    // text, number, date, textarea inputs\n    // 'user-searching-input' if for user changing\n    const inputs = document.querySelectorAll(\n        'input[type=text]:not([disabled=\"\"]):not([id=\"user-searching-input\"]), input[type=number]:not([disabled=\"\"]), input[type=date]:not([disabled=\"\"]), input[type=file]:not([disabled=\"\"]), textarea:not([disabled=\"\"])');\n    for (let $i of inputs) {\n        if ($i.id.startsWith('react-select')) {\n            if (!emptyValueList.includes($i.parentNode.parentNode.parentNode.firstChild.textContent)) {\n                filledInputsLen++;\n            }\n        } else {\n            if ($i.value) {\n                filledInputsLen++;\n            }\n        }\n    }\n\n    // selects\n    const selectInputs = document.querySelectorAll('select:not([multiple=\"\"])');\n    for (let i of selectInputs) {\n        if (i.value !== '0') {\n            filledInputsLen++;\n        }\n    }\n\n    // multiselects\n    const multiselectInputs = document.querySelectorAll('select[multiple=\"\"]');\n    for (let i of multiselectInputs) {\n        if (i.selectedOptions.length) {\n            filledInputsLen++;\n        }\n    }\n\n    filledInputsLen += additionalAttrFilledLen;\n    const inputsLen = inputs.length + selectInputs.length + multiselectInputs.length + additionalAttrLen;\n    return inputsLen === 0 ? 1 : (filledInputsLen === 0 ?  0 : filledInputsLen / inputsLen);\n}\n\n\nconst getLastTemporaryId = (attribute, subAttributeName) => {\n    // get last subAttribute temporaryId (needed for adding subAttribute)\n    let temporaryIds = [];\n    for (let obj of attribute) {\n        temporaryIds = [...temporaryIds, ...(obj[subAttributeName] || []).map((o) => parseInt(o.temporaryId))];\n    }\n    return temporaryIds.length > 0 ? Math.max(...temporaryIds) : 0\n}\n\n\nconst getLastTemporaryIdFromList = (list) => {\n    const temporaryIds = list.map((obj) => obj.temporaryId);\n    return temporaryIds.length > 0 ? Math.max(...temporaryIds) : 0\n}\n\n\nconst fillWithLeadingZero = (value, length=2) => {\n    value = value.toString();\n    if (value.length >= length) {\n        return value\n    }\n    return `${'0'.repeat(length - value.length)}${value}`\n};\n\nconst datetimeStringToISO = (date) => {\n    if (!date) { return '' }\n    return date.replace(/\\s/g, 'T')\n}\n\nconst dateToString = (date) => {\n    if (!date) { return '' }\n    return `${date.getFullYear()}-${fillWithLeadingZero(date.getMonth() + 1)}-${fillWithLeadingZero(date.getDate())}`\n};\n\nconst dateToStringOldBK = (date) => {\n    if (!date) { return '' }\n    return `${fillWithLeadingZero(date.getDate())}.${fillWithLeadingZero(date.getMonth() + 1)}.${date.getFullYear()}`\n};\n\nconst datetimeToString = (date) => {\n    if (!date) { return '' }\n    return `${date.getFullYear()}-${fillWithLeadingZero(date.getMonth() + 1)}-${fillWithLeadingZero(date.getDate())} ${fillWithLeadingZero(date.getHours())}:${fillWithLeadingZero(date.getMinutes())}`\n};\n\nconst dateStringToYearMonth = (dateString) => {\n    return (dateString || '').substring(0, 7)\n};\n\nconst timeToString = (date) => {\n    if (!date) { return '' }\n    return `${fillWithLeadingZero(date.getHours())}:${fillWithLeadingZero(date.getMinutes())}:${fillWithLeadingZero(date.getSeconds())}`\n};\n\nconst listOrEmpty = (value) => {\n    return value || []\n}\n\nconst stringOrEmpty = (value) => {\n    return value || ''\n}\n\nconst isNotEmpty = (value, fieldType='str') => {\n    if (fieldType === 'list') {\n        value = listOrEmpty(value);\n    }\n    value = stringOrEmpty(value);\n    return value.length > 0\n};\n\nconst setCustomSelectAttributes = (selectRef) => {\n    const inputId = selectRef.current.querySelector('input').getAttribute('id');\n    selectRef.current.querySelector('label').setAttribute('for', inputId);\n};\n\nconst setCustomInputAttributes = (inputRef) => {\n    const setAttr = (inputRef, querySelector) => {\n        const button = inputRef.current.querySelector(querySelector);\n\n        if (button) {\n            button.setAttribute('aria-label', 'Wyczyść pole');\n            button.setAttribute('type', 'button');\n            button.style.right = '12px';\n        }\n    };\n\n    setAttr(inputRef, 'button.react-datepicker__close-icon');\n};\n\nconst setFocusOnElement = (elRef) => {\n    if (elRef) {\n        elRef.current.focus();\n        elRef.current.setAttribute('tabIndex', '-1');\n    }\n}\n\nconst triggerBodyClick = () => {\n    document.querySelector('body').click();\n};\n\nconst getCookieValue = (name) => {\n    for (let cookie of document.cookie.split(';')) {\n        const [n, v] = cookie.trim().split('=');\n        if (n === name) {\n            return v\n        }\n    }\n    return null\n};\n\nconst getAuthTokenCookieValue = () => {\n    let authTokenCookieValue = getCookieValue(TOKEN_COOKIE_NAME);\n    if (authTokenCookieValue === 'null') {\n        authTokenCookieValue = null;\n    }\n    if (authTokenCookieValue) {\n        authTokenCookieValue = decodeURIComponent(authTokenCookieValue);\n    }\n    return authTokenCookieValue\n};\n\nconst deleteCookie = (name, callback=null) => {\n    document.cookie = `${name}=null;Max-Age=10;path=/`;\n    if (callback) { callback() }\n};\n\nconst refreshCookie = (name, maxAge, value=null) => {\n    value = value || getCookieValue(name);\n    if (value) {\n        document.cookie = `${name}=${value};Max-Age=${maxAge};path=/`;\n    }\n};\n\nconst refreshTimerAfterRequest = (authTokenCookieValue, statusCode) => {\n    if (!authTokenCookieValue || (statusCode > 400 && statusCode !== 403)) {\n        if (statusCode === 401) {\n            if (window.sessionComponent) {\n                window.sessionComponent.showUnauthorizedMessage();\n            } else {\n                // user couldn't authenticate, remove cookie\n                deleteCookie(TOKEN_COOKIE_NAME);\n            }\n        }\n        return\n    }\n    if (window.sessionComponent) {\n        window.sessionComponent.refreshTimerAfterRequest(authTokenCookieValue);\n    }\n};\n\nconst refreshTimerAfterSativaRequest = (authTokenCookieValue, statusCode) => {\n    if (window.sessionComponent) {\n        window.sessionComponent.handleRefreshSessionTime();\n    }\n};\n\nconst countWysiwygChars = (content) => {\n    if (!content) { return 0 }\n    let counter = 0;\n    for (let block of content.blocks) {\n        counter += block.text.length;\n        counter++;\n    }\n    // remove enter after last block\n    counter--;\n    return counter\n};\n\nconst extractYoutubeSrc = (url) => {\n    /*\n    examples:\n        http://www.youtube.com/watch?v=KjgWWjkNbhU&feature=youtu.be\n        http://www.youtube.com/watch?v=KjgWWjkNbhU\n        http://youtu.be/KjgWWjkNbhU\n    with timing\n        https://youtu.be/KjgWWjkNbhU?t=9s\n        https://www.youtube.com/watch?time_continue=9&v=KjgWWjkNbhU\n    return\n        http://www.youtube.com/embed/KjgWWjkNbhU?rel=0[&start=9 opcja]\n    */\n\n    const long_domain = 'www.youtube.com',\n          short_domain = 'youtu.be';\n\n    try {\n        url = new URL(url);\n    } catch {\n        return ''\n    }\n\n    if (![long_domain, short_domain].includes(url.hostname)) { return ''}\n\n    const params = new URLSearchParams(url.searchParams);\n    let videoId;\n    if (url.hostname === long_domain && url.pathname.startsWith('/watch')) {\n        // Long url - http://www.youtube.com/watch?v=KjgWWjkNbhU\n        videoId = params.get('v');\n    } else {\n        // Short url - http://youtu.be/KjgWWjkNbhU\n        // Embed url - https://www.youtube.com/embed/KjgWWjkNbhU\n        const splitedPath = url.pathname.split('/')\n        videoId = splitedPath[splitedPath.length - 1]\n    }\n\n    if (!videoId) { return '' }\n\n    const _boolToInt = (paramString) => {\n        if (['1', 'true', 'True'].includes(paramString)) { return 1 }\n        if (['0', 'false', 'False'].includes(paramString)) { return 0 }\n        return null\n    };\n\n    const _timeInSeconds = (timeString) => {\n        const regex = /^((?<days>\\d+)d)?((?<hours>\\d+)h)?((?<minutes>\\d+)m)?((?<seconds>\\d+)s?)?$/gi;\n\n        const match = regex.exec(timeString || '');\n        if (!match) { return null }\n\n        const durationGroups = match.groups;\n        let duration = 0;\n        const timeDict = {\n            days: 60 * 60 * 24,\n            hours: 60 * 60,\n            minutes: 60,\n            seconds: 1,\n        };\n\n        for (let [key, multipleValue] of Object.entries(timeDict)) {\n            if (durationGroups[key]) {\n                duration += (parseInt(durationGroups[key]) || 0) * multipleValue;\n            }\n        }\n\n        return duration || null\n    };\n\n    const _timeInInt = (timeString) => {\n        // parseInt returns first digits from string, we don't want to do that\n        const regex = /^\\d+$/;\n        if (!regex.exec(timeString)) { return null }\n        return parseInt(timeString);\n    };\n\n    const allowedParams =[\n        {\n            name: 'rel',\n            iframeParamName: 'rel',\n            convertFunc: _boolToInt,\n            default_: 0,\n        },\n        {\n            name: 'loop',\n            iframeParamName: 'loop',\n            convertFunc: _boolToInt,\n        },\n        {\n            name: 't',\n            iframeParamName: 'start',\n            convertFunc: _timeInSeconds,\n        },\n        {\n            name: 'time_continue',\n            iframeParamName: 'start',\n            convertFunc: _timeInSeconds,\n        },\n        {\n            name: 'start',\n            iframeParamName: 'start',\n            convertFunc: _timeInInt,\n        },\n        {\n            name: 'end',\n            iframeParamName: 'end',\n            convertFunc: _timeInSeconds,\n        },\n    ];\n\n    const iframeParams = {};\n    for (let p of allowedParams) {\n        const paramStr = params.get(p['name']);\n        if (paramStr) {\n            // convert param value string\n            let value = p['convertFunc'](paramStr);\n            if (value === null) {\n                if (!Object.keys(p).includes('default_')) {\n                    // param value is invalid and it hasn't got default\n                    // skip this param\n                    continue\n                }\n                // param value is invalid, get default\n                value = p['default_'];\n            }\n            iframeParams[p['iframeParamName']] = value;\n        } else if (Object.keys(p).includes('default_')) {\n            iframeParams[p['iframeParamName']] = p['default_'];\n        }\n    }\n    return `${url.protocol}//www.youtube.com/embed/${videoId}?${new URLSearchParams(iframeParams).toString()}`\n};\n\nconst getRodzajAdresuDict = (kraj) => {\n    if (kraj === 'Polska') {\n        return {\n            value: 'poland',\n            label: 'Polska',\n        }\n    }\n    return {\n        value: 'abroad',\n        label: 'Zagranica',\n    }\n}\n\nconst generatePdfDocument = async (documentComponent, fileName, creatingCallback) => {\n    const blob = await pdf(documentComponent).toBlob();\n    if (creatingCallback) {\n        creatingCallback();\n    }\n    saveAs(blob, fileName);\n};\n\nconst saveFileFromApi = async (url, fileName) => {\n\tconst authTokenCookieValue = getAuthTokenCookieValue();\n\t\n\tlet result = null;\n\tif(authTokenCookieValue){\n\t    result = await fetch(url, {\t\n\t      headers: {'X-Auth-Token': authTokenCookieValue}\n\t    })\n\t}else {\n\t\tresult = await fetch(url)\n\t}\n\n\tif(result != null){\n    \tconst blob = await result.blob()\n\t\tsaveAs(blob, fileName);\n\t}\n };\n\nconst getBreakIndex = (charsList, slicedLine) => {\n    let splittingCharsIndexes = charsList.map(\n        char => slicedLine.lastIndexOf(char));\n    return Math.max(...splittingCharsIndexes)\n}\n\n\nconst splitLineByChar = (text) => {\n    const textLength = text.length;\n\n    let lines = [];\n    let line = '';\n    let lineLength = 0;\n    let entersInLine = 0;\n\n    let i = 0;\n    while (i < textLength) {\n        let char = text[i];\n        const isEnter = /\\n/.test(char);\n        if (isEnter) {\n            entersInLine += 1;\n        }\n        line += char;\n        i++;\n        lineLength++;\n        if (lineLength >= 1000 || entersInLine >= 40) {\n            if (isEnter) {\n                lines.push(line);\n                line = '';\n                lineLength = 0;\n                entersInLine = 0;\n            } else {\n                // find first enter char before missing 4000th char for this line in missing text\n                const missingText = text.substring(i, i + 4001 - lineLength);\n                const enterIndex = missingText.indexOf('\\n');\n                if (enterIndex > -1) {\n                    // add chars until enter\n                    line += missingText.substring(0, enterIndex + 1);\n                    lines.push(line);\n                    line = '';\n                    lineLength = 0;\n                    entersInLine = 0;\n                    i += enterIndex + 1;\n                } else {\n                    // check length of real missing text\n                    const realMissingText = text.substring(i);\n                    if (lineLength + realMissingText.length < 4000) {\n                        line += realMissingText;\n                        i += realMissingText.length;\n                    } else {\n                        // maybe there is some char from the list before 4000th char\n                        const breakIndex = getBreakIndex([' ', ',', ';', '?', '!'], missingText);\n                        if (breakIndex > -1) {\n                            line += missingText.substring(0, breakIndex + 1)\n                            lines.push(line);\n                            line = '';\n                            lineLength = 0;\n                            entersInLine = 0;\n                            i += breakIndex + 1;\n                        } else {\n                            // cut line util 4001st char\n                            line += missingText;\n                            lines.push(line);\n                            line = '';\n                            lineLength = 0;\n                            entersInLine = 0;\n                            i += missingText.length;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    lines.push(line)\n    return lines\n};\n\n\nconst roundStringTo = (value, n=2) => {\n    if (!value.length) {\n        return value\n    }\n    value = value.replace(',', '.');\n    // cut to n decimal\n    const splittedValue = value.split('.');\n\n    let firstPart = splittedValue[0];\n    // manage leading zeros\n    if (!firstPart) {\n        firstPart ='0';\n    } else {\n        while (true) {\n            if (firstPart.length > 1 && firstPart[0] === '0') {\n                firstPart = firstPart.slice(1);\n            } else {\n                break\n            }\n        }\n    }\n    return `${firstPart},${splittedValue.length > 1 ? splittedValue[1].slice(0, n).padEnd(n, '0') : '00'}`\n};\n\nconst redirectToLoginView = (ovverrideCurrentPathname = true) => {\n    if(ovverrideCurrentPathname) {\n        sessionStorage.setItem(\n            'currentPathname', window.location.pathname + window.location.search);\n    }\n\n    // \"log in\" user, go to backend\n    window.location.href = '/api/authentication/login-redirect';\n}\n\nconst slugify = (value) => {\n    return value.toString().toLowerCase().trim()\n            .replace(/\\s+/g, '-')       // Replace spaces with '-'\n            .replace(/ą/g, 'a')         // Replace Polish char\n            .replace(/ć/g, 'c')         // Replace Polish char\n            .replace(/ę/g, 'e')         // Replace Polish char\n            .replace(/ł/g, 'ł')         // Replace Polish char\n            .replace(/ń/g, 'n')         // Replace Polish char\n            .replace(/ó/g, 'o')         // Replace Polish char\n            .replace(/ś/g, 's')         // Replace Polish char\n            .replace(/ź/g, 'z')         // Replace Polish char\n            .replace(/ż/g, 'z')         // Replace Polish char\n            .replace(/[^\\w-]+/g, '')    // Remove all non-word chars\n            .replace(/--+/g, '-')       // Replace multiple '-' with single '-'\n};\n\nconst sortOrderItems = (orderItem1, orderItem2) => {\n    return orderItem1.temporaryId > orderItem2.temporaryId ? 1 : -1\n};\n\nconst getSortedOrderItemsFromOrder = (orderList) => {\n    let orderItems = [];\n    for (let order of orderList) {\n        for (let orderItem of order.przedmiotyZamowienia) {\n            orderItems.push(orderItem);\n        }\n    }\n    orderItems.sort(sortOrderItems);\n    return orderItems\n};\n\nconst getOrderItemsLength = (orderList) => {\n    let orderItems = [];\n    for (let order of orderList) {\n        for (let orderItem of order.przedmiotyZamowienia) {\n            orderItems.push(orderItem);\n        }\n    }\n    return orderItems.length\n};\n\nconst reformatDanePodmiotu = (data) => {\n    if (data) {\n        return Object.assign(\n            {}, data,\n            {\n                typNumeruIdentyfikacyjnego: TYP_NUMERU_IDENTYFIKACYJNEGO.filter(\n                    t => t.value === data.typNumeruIdentyfikacyjnego)[0] || TYP_NUMERU_IDENTYFIKACYJNEGO[0],\n                rodzajAdresu: getRodzajAdresuDict(data.adres.kraj),\n            }\n        )\n    }\n    return {}\n};\n\nconst getPricesRange = (prices) => {\n    let pricesDict = {};\n    let maxPriceLength = Math.max(...prices.map(p => p.length));\n    for (let price of prices) {\n        pricesDict[price.padStart(maxPriceLength, '0')] = price;\n    }\n    const paddedPriced = Object.keys(pricesDict).sort();\n    return {\n        min: pricesDict[paddedPriced[0]],\n        max: pricesDict[paddedPriced[paddedPriced.length - 1]]\n    }\n};\n\nconst isAdvertisementLocked = (statusDict) => {\n    return ((statusDict || {}).label || '') === 'LOCKED'\n};\n\n// pagination\nconst checkHasPrev = (pageNumber) => {\n    return pageNumber > 1\n};\n\nconst checkHasNext = (paginatedBy, pageNumber, total) => {\n    return Math.ceil(total / paginatedBy) > pageNumber\n}\n\n// implementation levels\nconst sortProgrammes = (programme1, programme2) => {\n    return programme1.code.localeCompare(programme2.code, 'pl')\n}\n\nconst sortImplementationLevelByNumberCode = (obj1, obj2) => {\n    return obj1.code.localeCompare(obj2.code, 'pl')\n};\n\nconst hasSubactivities = (perspectiveData) => {\n    perspectiveData = perspectiveData || {};\n    return (\n        perspectiveData.activity_types || perspectiveData.activityTypes || []\n    ).includes('subactivities')\n};\n\nconst hasPerspectiveRegions = (perspectiveData) => {\n    perspectiveData = perspectiveData || {};\n    return (\n        perspectiveData.activity_types || perspectiveData.activityTypes || []\n    ).includes('regions')\n};\n\nconst hasPerspectiveInstitutions = (perspectiveData) => {\n    perspectiveData = perspectiveData || {};\n    return (\n        perspectiveData.activity_types || perspectiveData.activityTypes || []\n    ).includes('institutions')\n};\n\nconst getActivityUrlByPerspectiveData = (perspectiveData) => {\n    return hasSubactivities(perspectiveData)\n        ? 'managementSubactivitiesForPriority'\n        : 'managementActivitiesForPriority'\n};\n\nconst getActivityChildUrlByPerspectiveData = (perspectiveData) => {\n    perspectiveData = perspectiveData || {};\n    const activityTypes =\n        perspectiveData.activity_types || perspectiveData.activityTypes || [];\n    if (activityTypes.includes('regions')) {\n        return 'managementRegionsForSubactivity'\n    }\n    if (activityTypes.includes('institutions')) {\n        return 'managementInstitutionsForActivity'\n    }\n    return null\n};\n\nconst serializePerspectiveForSelect = (data) => {\n    return {\n        perspectives: data.perspectives.map(p => ({\n            value: p.id,\n            code: p.name,\n            label: p.name,\n            activity_types: p.activity_types || p.activityTypes,\n        })),\n    }\n}\n\nconst getUserFullName = (data) => {\n    const forename = data.imie || data.forename || '';\n    const surname = data.nazwisko || data.surname || '';\n    return (forename.length || surname.length) ? `${forename} ${surname}` : null\n}\n\nconst serializeAuditData = (data) => {\n    return {\n        createdAt:\n            data.dataUtworzenia || data.createdAt || data.created_at || null,\n        createdBy: getUserFullName(\n            data.ktoUtworzyl || data.createdBy || data.created_by || {}),\n        modifiedAt:\n            data.dataModyfikacji || data.modifiedAt || data.modified_at || null,\n        modifiedBy: getUserFullName(\n            data.ktoModyfikowal || data.modifiedBy || data.modified_by || {}),\n    }\n}\n\nconst generateUUIDV4 = () => {\n    return \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c =>\n      (+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)\n    );\n  }\n\n\nexport {\n    checkHasNext,\n    checkHasPrev,\n    computeProgress,\n    countWysiwygChars,\n    dateToString,\n    dateToStringOldBK,\n    datetimeToString,\n    datetimeStringToISO,\n    dateStringToYearMonth,\n    deleteCookie,\n    extractYoutubeSrc,\n    fillWithLeadingZero,\n    generatePdfDocument,\n\tsaveFileFromApi,\n    getActivityChildUrlByPerspectiveData,\n    getActivityUrlByPerspectiveData,\n    getAuthTokenCookieValue,\n    getCookieValue,\n    getLastTemporaryId,\n    getLastTemporaryIdFromList,\n    getOrderItemsLength,\n    getPricesRange,\n    getRodzajAdresuDict,\n    getSortedOrderItemsFromOrder,\n    getUserFullName,\n    hasPerspectiveInstitutions,\n    hasPerspectiveRegions,\n    hasSubactivities,\n    isAdvertisementLocked,\n    isNotEmpty,\n    listOrEmpty,\n    redirectToLoginView,\n    reformatDanePodmiotu,\n    refreshCookie,\n    refreshTimerAfterRequest,\n    refreshTimerAfterSativaRequest,\n    roundStringTo,\n    serializeAuditData,\n    serializePerspectiveForSelect,\n    setCustomInputAttributes,\n    setCustomSelectAttributes,\n    setFocusOnElement,\n    slugify,\n    sortImplementationLevelByNumberCode,\n    sortProgrammes,\n    splitLineByChar,\n    timeToString,\n    triggerBodyClick,\n    generateUUIDV4,\n};\n\nif (typeof module === 'object' && module.exports) {\n    module.exports = {\n        extractYoutubeSrc,\n        getPricesRange,\n        getRodzajAdresuDict,\n        roundStringTo,\n        slugify,\n    };\n}\n","import {\n    NIP_CHARS_IMPORTANCE,\n    PESEL_CHARS_IMPORTANCE,\n    SEARCH_CUSTOM_NAME\n} from './const';\nimport { countWysiwygChars, slugify } from './helpers';\n\n\n///////////////////////////////////////////////////////////////////////////////\n//                            fields checks                                  //\n///////////////////////////////////////////////////////////////////////////////\nconst checkRequired = (value) => {\n    if (!value || !value.length) {\n        return 'To pole jest wymagane.'\n    }\n    return ''\n}\n\nconst checkRequiredPrzedmiotZamowienia = (value) => {\n    return checkListRequired(\n        value, 'Dodaj co najmniej jeden przedmiot zamówienia, aby zdefiniować dla niego atrybuty.')\n}\n\nconst checkNabor = (value, projectsSelected) => {\n    // don't validate if projectsSelected is null\n    if (projectsSelected === null) { return '' }\n    if (!projectsSelected && (!value || !value.value)) {\n        return 'To pole jest wymagane.'\n    }\n    return ''\n}\n\nconst checkProjekty = (value, projectsSelected) => {\n    // don't validate if projectsSelected is null\n    if (projectsSelected === null) { return '' }\n    if (projectsSelected && (!value || !value.length)) {\n        return 'To pole jest wymagane.'\n    }\n    return ''\n}\n\nconst checkListRequired = (value, msg='') => {\n    if (!value.length) {\n        return msg || 'To pole jest wymagane.'\n    }\n    return ''\n}\n\nconst checkSelectRequired = (value) => {\n    if ([0, '0', null].includes(value)) {\n        return 'To pole jest wymagane.'\n    }\n    return ''\n}\n\n\nconst checkDatesDependency = (start, end) => {\n    if (!start.length || !end.length) { return '' }\n    if (new Date(start) > new Date(end)) {\n        return 'Data końca musi być późniejsza niż data początku.'\n    }\n    return ''\n}\n\n\nconst checkWysiwygEditorRequired = (content) => {\n    if (!content || !content.blocks.length) { return false }\n    return countWysiwygChars(content) > 0\n}\n\n\nconst checkNip = (value) => {\n    let error = '';\n    if (value.length) {\n        if (!/^\\d{10}$/.test(value)) {\n            error = 'Wpisz poprawny numer NIP.';\n        } else {\n            // count control sum\n            let controlSum = 0;\n            for (let i=0; i < value.length - 1; i++) {\n                controlSum += parseInt(value[i]) * NIP_CHARS_IMPORTANCE[i];\n            }\n            if (controlSum % 11 !== parseInt(value[9])) {\n                error = 'Wpisz poprawny numer NIP. Suma kontrolna jest nieprawidłowa.';\n            }\n        }\n    }\n    return error\n};\n\n\nconst checkPesel = (value) => {\n    let error = '';\n    if (value.length) {\n        if (!/^\\d{11}$/.test(value)) {\n            error = 'Wpisz poprawny numer PESEL.';\n        } else {\n            // count control sum\n            let controlSum = 0;\n            for (let i=0; i < value.length - 1; i++) {\n                controlSum += parseInt(value[i]) * PESEL_CHARS_IMPORTANCE[i];\n            }\n            if (controlSum % 10 !== parseInt(value[10])) {\n                error = 'Wpisz poprawny numer PESEL. Suma kontrolna jest nieprawidłowa.';\n            }\n        }\n    }\n    return error\n};\n\nconst checkKodPocztowy = (value) => {\n    let error = '';\n    if (value.length) {\n        if (!/^\\d{2}-\\d{3}$/.test(value)) {\n            error = 'Wpisz poprawny kod pocztowy.';\n        }\n    }\n    return error\n};\n\nconst checkEmail = (value) => {\n    if (value.length) {\n        // check spaces; check if includes @ char; check dot char after @ char\n        if (value.includes(' ') || value.split('@').length !== 2 || value.indexOf('.', value.indexOf('@')) < 0) {\n            return 'Wpisz poprawny adres e-mail.'\n        }\n    }\n    return ''\n};\n\nconst checkSimilarValueOnList = (value, valueList, message='') => {\n    if (valueList.map(v => slugify(v)).filter(v => v === slugify(value)).length > 1) {\n        return message || 'Wartość tego pola jest podobna do wartości analogicznego pola w innym obiekcie na liście.'\n    }\n    return ''\n};\n\nconst checkSimilarTitleValueOnList = (value, valueList) => {\n    return (checkSimilarValueOnList(\n        value, valueList,\n        'Tytuł tej części jest zbyt podobny do tytułu innej części. Zmień tytuł tak, aby łatwo było go odróżnić od pozostałych.'\n    ))\n}\n\n\n///////////////////////////////////////////////////////////////////////////////\n//                                 configs                                   //\n///////////////////////////////////////////////////////////////////////////////\n\nconst ogloszeniePrzedmiotZamowieniaRequiredValidators = {\n    zamowienia_kryteriaOceny: {\n        validators: [checkRequiredPrzedmiotZamowienia, ],\n        formStep: 'czesciKryteria',\n    },\n    przedmiotyZamowienia: {\n        validators: [checkRequiredPrzedmiotZamowienia, ],\n        formStep: 'przedmiot',\n    },\n    przedmiotyZamowienia_harmonogramy: {\n        validators: [checkRequiredPrzedmiotZamowienia, ],\n        formStep: 'terminy',\n    },\n    przedmiotyZamowienia_warunkiUdzialu: {\n        validators: [checkRequiredPrzedmiotZamowienia, ],\n        formStep: 'warunki',\n    },\n};\n\nconst titleValidatorData = {\n    validators: [checkRequired, ],\n    formStep: 'pozostale',\n};\nconst projectsValidationData = {\n    validators: [checkProjekty, ],\n    formStep: 'pozostale',\n};\nconst enrollmentValidatorData = {\n    validators: [checkNabor, ],\n    formStep: 'pozostale',\n};\nconst contactPersonsValidatorData = {\n    validators: [checkListRequired, ],\n    formStep: 'pozostale',\n};\n\nconst advertisementValidators = {\n    tytul: titleValidatorData,\n    projekty: projectsValidationData,\n    nabor: enrollmentValidatorData,\n    osobyDoKontaktu: contactPersonsValidatorData,\n    ...ogloszeniePrzedmiotZamowieniaRequiredValidators,\n};\n\nconst publishedAdvertisementOwnerValidators = {\n    tytul: titleValidatorData,\n    osobyDoKontaktu: contactPersonsValidatorData,\n};\n\nconst publishedAdvertisementAdminValidators = {\n    tytul: titleValidatorData,\n    projekty: projectsValidationData,\n    nabor: enrollmentValidatorData,\n};\n\nconst zamowienieValidators = {\n    kryteriaOceny: [checkListRequired, ],\n    tytul: [checkRequired, checkSimilarTitleValueOnList],\n};\n\nconst kryteriumOcenyValidators = {\n    opis: [checkRequired, ],\n};\n\nconst przedmiotZamowieniaValidators = {\n    kategoria: [checkSelectRequired, ],\n    podkategoria: [checkSelectRequired, ],\n    opis: [checkRequired, ],\n    kodyCPV: [checkListRequired, ],\n    miejscaRealizacji: [checkListRequired, ],\n};\n\nconst publishedPrzedmiotZamowieniaValidators = {\n    opis: [checkRequired, ],\n    kodyCPV: [checkListRequired, ],\n    miejscaRealizacji: [checkListRequired, ],\n};\n\nconst harmonogramValidators = {\n    koniecRealizacji: [checkRequired, ],\n    dependent: [\n        // validator name, attributes names as props for validator, attribute name for error showing\n        [checkDatesDependency, ['poczatekRealizacji', 'koniecRealizacji'], 'koniecRealizacji'],\n    ]\n};\n\nconst warunekUdzialuValidators = {\n    typ: [checkSelectRequired, ],\n    opis: [checkRequired, ],\n};\n\nconst zalacznikValidators = {\n    nazwa: [checkRequired, ],\n    nested: [\n        // validator name, subattribute name, attribute name for error showing\n        [checkRequired, 'uri', 'plik']]\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n//                               functions                                   //\n///////////////////////////////////////////////////////////////////////////////\n\nconst validateAdvertisementBaseAttributes = (\n    advertisement, projectsSelected, validatorsDict\n) => {\n    let przedmiotyZamowienia = [];\n    for (let z of advertisement.zamowienia) {\n        przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n    }\n    let errors = {};\n    let stepErrors = {};\n    for (let [attrName, validators] of Object.entries(validatorsDict)) {\n        let value = advertisement[attrName];\n        for (let v of validators.validators) {\n            let error;\n            if ([checkNabor, checkProjekty].includes(v)) {\n                error = v(value, projectsSelected);\n            } else {\n                if (v === checkRequiredPrzedmiotZamowienia) {\n                    value = przedmiotyZamowienia;\n                }\n                error = v(value);\n            }\n            if (error.length > 0) {\n                errors[attrName] = error;\n                stepErrors[validators.formStep] = true;\n                break\n            }\n        }\n    }\n    return [errors, stepErrors]\n}\n\n\nconst validateZamowienieAttributes = (ogloszenie) => {\n    // validate basic fields\n    let [errors, stepErrors] = validateFieldAttributes(\n        ogloszenie.zamowienia, zamowienieValidators, 'czesciKryteria');\n    // validate if zamowienie has at least one przedmiotZamowienia\n\n    let przedmiotyZamowienia = [];\n    for (let z of ogloszenie.zamowienia) {\n        przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n    }\n    [errors, stepErrors] = validatePrzedmiotyZamowieniaInZamowienie(\n        ogloszenie.zamowienia, errors, stepErrors);\n    // validate szcunkowaWartosci\n    [errors, stepErrors] = validateSzacunkowaWartosc(\n        ogloszenie.zamowienia, errors, stepErrors);\n    return [errors, stepErrors]\n}\n\n\nconst validatePrzedmiotyZamowieniaInZamowienie = (zamowienie, errors, stepErrors) => {\n    // every zamowienie has to have at least one przedmiotZamowienia\n    for (let z of zamowienie) {\n        if (!z.przedmiotyZamowienia.length) {\n            errors[z.temporaryId]['przedmiotyZamowienia'] = 'Brak przedmiotów zamówienia dla tego zamówienia.';\n            stepErrors['czesciKryteria'] = true;\n        }\n    }\n    return [errors, stepErrors]\n}\n\n\nconst validateSzacunkowaWartosc = (zamowienia, errors, stepErrors) => {\n    for (let z of zamowienia) {\n        let value = z.szacunkowaWartosc;\n        if (!value.length) { return [errors, stepErrors] }\n        if (!/^\\d{1,24},\\d{2}$/.test(value)) {\n            errors[z.temporaryId]['szacunkowaWartosc'] = 'Wpisz poprawną wartość zgodnie ze wzorem.';\n            stepErrors['czesciKryteria'] = true;\n        } else {\n            if (parseInt(value.replace(',', '')) === 0) {\n                errors[z.temporaryId]['szacunkowaWartosc'] = 'Ta wartość powinna być większa od 0.';\n                stepErrors['czesciKryteria'] = true;\n            }\n            if (value.length > 27) {\n                errors[z.temporaryId]['szacunkowaWartosc'] = 'Ta wartość nie może być większa od 999999999999999999999999,99.';\n                stepErrors['czesciKryteria'] = true;\n            }\n        }\n    }\n    return [errors, stepErrors]\n}\n\n\nconst validateKryteriumOcenyAttributes = (kryteriumOceny) => {\n    return validateFieldAttributes(kryteriumOceny, kryteriumOcenyValidators, 'czesciKryteria')\n}\n\n\nconst validatePrzedmiotZamowieniaBaseAttributes = (przedmiotZamowienia, isAlreadyPublished) => {\n    return validateFieldAttributes(\n        przedmiotZamowienia,\n        isAlreadyPublished ? publishedPrzedmiotZamowieniaValidators : przedmiotZamowieniaValidators,\n        'przedmiot'\n    )\n};\n\n\nconst validateHarmonogramAttributes = (harmonogram) => {\n    return validateFieldAttributes(harmonogram, harmonogramValidators, 'terminy')\n}\n\n\nconst validateWarunekUdzialuAttributes = (warunekUdzialu) => {\n    return validateFieldAttributes(warunekUdzialu, warunekUdzialuValidators, 'warunki')\n}\n\n\nconst validateZalacznikAttributes = (zalacznik) => {\n    return validateFieldAttributes(zalacznik, zalacznikValidators, 'zalaczniki')\n}\n\n\nconst validateFieldAttributes = (objectList, fieldValidators, stepName) => {\n    let errors = {};\n    let stepErrors = {};\n    for (let attr of objectList) {\n        errors[attr.temporaryId] = {};\n        for (let [attrName, validators] of Object.entries(fieldValidators)) {\n            if (attrName === 'dependent') {\n                for (let v of validators) {\n                    let error = v[0](...v[1].map((name) => attr[name]));\n                    if (error.length > 0) {\n                        errors[attr.temporaryId][v[2]] = error;\n                        stepErrors[stepName] = true;\n                        break\n                    }\n                }\n                continue\n            }\n            if (attrName === 'nested') {\n                for (let v of validators) {\n                    let error = v[0](attr[v[2]][v[1]]);\n                    if (error.length > 0) {\n                        errors[attr.temporaryId][v[2]] = error;\n                        stepErrors[stepName] = true;\n                        break\n                    }\n                }\n                continue\n            }\n            const value = attr[attrName];\n            for (let v of validators) {\n                let error;\n                if ([checkSimilarValueOnList, checkSimilarTitleValueOnList].includes(v)) {\n                    error = v(value, objectList.map(o => o[attrName]));\n                } else {\n                    error = v(value);\n                }\n                if (error.length > 0) {\n                    errors[attr.temporaryId][attrName] = stepName === 'zalaczniki' ? [error] : error;\n                    stepErrors[stepName] = true;\n                    break\n                }\n            }\n        }\n    }\n    return [errors, stepErrors]\n}\n\n\nconst validateWysiwygEditor = (content) => {\n    return checkWysiwygEditorRequired(content);\n};\n\n// search validators\n\nconst validateSearchFilters = (filters) => {\n    let errors = {};\n    let isValid = true;\n\n    // validate status - at least one check has to be checked\n    if (!filters.status.length) {\n        errors['status'] = 'Wybierz przynajmniej jeden status ogłoszenia.';\n        isValid = false;\n    }\n\n    // validate dates\n    for (let name of ['publicationDateRange', 'submissionDeadlineRange']) {\n        if (filters[name].type === SEARCH_CUSTOM_NAME) {\n            if (!filters[name].from && !filters[name].to) {\n                errors[name] = 'Wybierz przynajmniej jedną z dat.'\n                isValid = false;\n            }\n        }\n    }\n\n    return [isValid, errors]\n}\n\n// user validators\n\nconst validatePersonalData = (data) => {\n    let errors = {\n        adres: {},\n    };\n    let isValid = true;\n    let error = '';\n\n    // check required\n    for (let [name, isAdresPart] of [\n            ['nazwa', false], ['miejscowosc', true], ['kodPocztowy', true],\n            ['numerIdentyfikacyjny', false], ['numerDomu', true]]\n    ) {\n        error = checkRequired(isAdresPart ? data.adres[name] : data[name]);\n        if (error.length) {\n            isValid = false;\n            if (isAdresPart) {\n                errors['adres'][name] = [error, ];\n            } else {\n                errors[name] = [error, ];\n            }\n        }\n    }\n\n    if (data.rodzajAdresu === 'poland') {\n        // check NIP and PESEL sum control\n        if (data.typNumeruIdentyfikacyjnego === 'nip') {\n            error = checkNip(data.numerIdentyfikacyjny);\n        } else if (data.typNumeruIdentyfikacyjnego === 'pesel') {\n            error = checkPesel(data.numerIdentyfikacyjny);\n        }\n        if (error.length) {\n            isValid = false;\n            errors['numerIdentyfikacyjny'] = [error, ];\n        }\n\n        // check kod pocztowy\n        error = checkKodPocztowy(data.adres.kodPocztowy);\n        if (error.length) {\n            isValid = false;\n            errors['adres']['kodPocztowy'] = [error, ];\n        }\n    } else {\n        // check kraj\n        error = checkRequired(data.adres.kraj);\n        if (error.length) {\n            isValid = false;\n            errors['adres']['kraj'] = [error, ];\n        }\n    }\n\n    return [isValid, errors]\n};\n\n\nconst validateOsobaDoKontaktu = (data) => {\n    let errors = {};\n    let isValid = true;\n    let error = '';\n\n    // check required fields\n    for (let name of ['imie', 'nazwisko', 'email']) {\n        const value = data[name];\n        error = checkRequired(value);\n        if (error.length) {\n            isValid = false;\n            errors[name] = error;\n        } else if (name === 'email') {\n            // validate email structure\n            error = checkEmail(value);\n            if (error.length) {\n                isValid = false;\n                errors[name] = error;\n            }\n        }\n    }\n\n    return [isValid, errors]\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n//                                 exports                                   //\n///////////////////////////////////////////////////////////////////////////////\n\nexport {\n    advertisementValidators,\n    ogloszeniePrzedmiotZamowieniaRequiredValidators,\n    publishedAdvertisementAdminValidators,\n    publishedAdvertisementOwnerValidators,\n    validateHarmonogramAttributes,\n    validateKryteriumOcenyAttributes,\n    validateAdvertisementBaseAttributes,\n    validateOsobaDoKontaktu,\n    validatePersonalData,\n    validatePrzedmiotZamowieniaBaseAttributes,\n    validateSearchFilters,\n    validateWarunekUdzialuAttributes,\n    validateWysiwygEditor,\n    validateZalacznikAttributes,\n    validateZamowienieAttributes\n}\n\n\nif (typeof module === 'object' && module.exports) {\n    module.exports = {\n        checkDatesDependency,\n        checkListRequired,\n        checkNabor,\n        checkRequired,\n        checkRequiredPrzedmiotZamowienia,\n        checkSelectRequired,\n        checkSimilarValueOnList,\n        publishedAdvertisementOwnerValidators,\n        validateAdvertisementBaseAttributes,\n    };\n}\n","\nconst ADVERTISEMENTS_SORTING_VALUES = [\n    ['terminOfert_asc', 'termin składania ofert rosnąco'],\n    ['terminOfert_desc', 'termin składania ofert malejąco'],\n    ['ogloszenie_numer_asc', 'numer rosnąco'],\n    ['ogloszenie_numer_desc', 'numer malejąco'],\n    ['tytul_asc', 'tytuł rosnąco'],\n    ['tytul_desc', 'tytuł malejąco'],\n    ['ogloszenie_status_nazwa_asc', 'status rosnąco'],\n    ['ogloszenie_status_nazwa_desc', 'status malejąco'],\n];\n\nconst PROJECTS_SORTING_VALUES = [\n    ['calyNumer_asc', 'numer rosnąco'],\n    ['calyNumer_desc', 'numer malejąco'],\n    ['nazwa_asc', 'nazwa rosnąco'],\n    ['nazwa_desc', 'nazwa malejąco'],\n];\n\nconst sortByAdvertisementNumber = (order, nr1, nr2) => {\n    // if number mask will change, sort in other way\n    const [year1, userId1, announcementId1] = nr1.split('-');\n    const [year2, userId2, announcementId2] = nr2.split('-');\n    if (year1 !== year2) {\n        if (order === 'asc') {\n             return year2 < year1 ? 1 : -1\n        } else {\n            return year2 > year1 ? 1 : -1\n        }\n    }\n    if (userId1 !== userId2) {\n        if (order === 'asc') {\n             return parseInt(userId2) < parseInt(userId1) ? 1 : -1\n        } else {\n            return parseInt(userId2) > parseInt(userId1) ? 1 : -1\n        }\n    }\n    if (order === 'asc') {\n         return parseInt(announcementId2) < parseInt(announcementId1) ? 1 : -1\n    } else {\n        return parseInt(announcementId2) > parseInt(announcementId1) ? 1 : -1\n    }\n}\n\nconst sortAdvertisements = (advertisementList, sortingValue) => {\n    return advertisementList.slice().sort((o1, o2) => {\n            const splittingValue = sortingValue.split('_');\n            let value1, value2, order, attribbuteName;\n            if (splittingValue.length === 4) {\n                attribbuteName = splittingValue[2];\n                value1 = o1[splittingValue[0]][splittingValue[1]][attribbuteName];\n                value2 = o2[splittingValue[0]][splittingValue[1]][attribbuteName];\n                order = splittingValue[3];\n            } else if (splittingValue.length === 3) {\n                attribbuteName = splittingValue[1];\n                value1 = o1[splittingValue[0]][attribbuteName];\n                value2 = o2[splittingValue[0]][attribbuteName];\n                order = splittingValue[2];\n            } else {\n                attribbuteName = splittingValue[0];\n                value1 = o1[attribbuteName];\n                value2 = o2[attribbuteName];\n                order = splittingValue[1];\n            }\n            if ([null, ''].includes(value1)) {return 1}\n            if ([null, ''].includes(value2)) {return -1}\n            if (attribbuteName === 'numer') {\n                return sortByAdvertisementNumber(order, value1, value2)\n            }\n            if (attribbuteName === 'tytul') {\n                if (order === 'asc') {\n                    return value1.toLowerCase().localeCompare(value2.toLowerCase(), 'pl')\n                }\n                return value2.toLowerCase().localeCompare(value1.toLowerCase(), 'pl')\n            }\n            if (order === 'asc') {\n                return value2 < value1 ? 1 : -1\n            }\n            return value2 > value1 ? 1 : -1\n        })\n};\n\nconst sortProjects = (projectList, sortingValue) => {\n    const p = projectList.slice().sort((p1, p2) => {\n        const [attribbuteName, order] = sortingValue.split('_');\n        const value1 = p1[attribbuteName];\n        const value2 = p2[attribbuteName];\n        if ([null, ''].includes(value1)) {return 1}\n        if ([null, ''].includes(value2)) {return -1}\n        if (order === 'asc') {\n            return value1.toLowerCase().localeCompare(value2.toLowerCase(), 'pl')\n        }\n        return value2.toLowerCase().localeCompare(value1.toLowerCase(), 'pl')\n    })\n    return p\n};\n\n// search filters\nconst sortProgrammeFilter = (value1, value2) => {\n    return value1[1].toLowerCase().localeCompare(value2[1].toLowerCase(), 'pl')\n};\nconst sortMiejsceRealizacjiFilter = (mr1, mr2) => {\n    const v1 = mr1[0], v2 = mr2[0];\n    if (v1 === 'abroad') {\n        return 1\n    }\n    if (v2 === 'abroad') {\n        return -1\n    }\n    if (v1 === 'poland') {\n        return 1\n    }\n    if (v2 === 'poland') {\n        return -1\n    }\n    return v1.toLowerCase().localeCompare(v2.toLowerCase(), 'pl')\n};\n\n\nconst setInitialSorterByUrlParam = (urlParams, sorters, defaultSorter) => {\n    let sort = urlParams.get('sort');\n    if (!Object.keys(sorters).includes(sort)) {\n        sort = defaultSorter;\n    }\n    const sorter = sorters[sort];\n    return {value: sorter[0], label: sorter[1]}\n}\n\n\nexport {\n    ADVERTISEMENTS_SORTING_VALUES,\n    PROJECTS_SORTING_VALUES,\n    setInitialSorterByUrlParam,\n    sortAdvertisements,\n    sortMiejsceRealizacjiFilter,\n    sortProgrammeFilter,\n    sortProjects,\n};\n\n\nif (typeof module === 'object' && module.exports) {\n    module.exports = {\n        sortProjects,\n    };\n}\n","import jp from 'jsonpath';\n\n// from server\nconst mapServerFront = {\n    account_disabled: 'kontoZablokowane',\n    account_disabled_at: 'dataZablokowaniaKonta',\n    accountDisabled: 'kontoZablokowane',\n    active: 'czyAktywny',\n    activities: 'dzialania',\n    activity: 'dzialanie',\n    added_at: 'dataDodania',\n    address: 'adres',\n    address_type: 'rodzajAdresu',\n    addressType: 'rodzajAdresu',\n    advertisement: 'ogloszenie',\n    advertisements: 'ogloszenia',\n    advertiser_address_details: 'daneAdresoweOgloszeniodawcy',\n    advertiser_name: 'nazwaOgloszeniodawcy',\n    answer: 'odpowiedz',\n    attached_advertisements_amount: 'attachedAdvertisementsAmount',\n    attachments: 'zalaczniki',\n    category: 'kategoria',\n    children: 'dzieci',\n    chosen_offer_variant: 'wybranyWariant',\n    chosenOfferVariant: 'wybranyWariant',\n    code: 'kod',\n    comment: 'komentarz',\n    commune: 'gmina',\n    contact_persons: 'osobyDoKontaktu',\n    content: 'tresc',\n    country: 'kraj',\n    cpv_items: 'kodyCPV',\n    created_by: 'ktoUtworzyl',\n    created_at: 'dataUtworzenia',\n    current_exists: 'aktualnyIstnieje',\n    description: 'opis',\n    dictionaries: 'slowniki',\n    economic_subject: 'danePodmiotu',\n    economicSubject: 'danePodmiotu',\n    email: 'email',\n    end_at: 'koniecRealizacji',\n    enrollment: 'nabor',\n    enrollment_number: 'numerNaboru',\n    estimated_value: 'szacunkowaWartosc',\n    evaluation_criteria: 'kryteriaOceny',\n    expiration_date: 'dataWaznosci',\n    file: 'plik',\n    file_to_load: 'plikDoWgrania',\n    for_publication_exists: 'doPublikacjiIstnieje',\n    forename: 'imie',\n    fulfillment_place: 'miejsceRealizacji',\n    fulfillment_places: 'miejscaRealizacji',\n    full_number: 'calyNumer',\n    general_content: 'trescOgolna',\n    general_content_items: 'tresciOgolne',\n    has_advertisements: 'maOgloszenia',\n    has_draft: 'czyMaKopieRobocza',\n    has_draft_advertisements: 'maRoboczeOgloszenia',\n    has_published_advertisements: 'maOpublikowaneOgloszenia',\n    headline: 'naglowek',\n    help: 'pomoc',\n    helps: 'pomoce',\n    id: 'id',\n    identification_number: 'numerIdentyfikacyjny',\n    identification_number_type: 'typNumeruIdentyfikacyjnego',\n    identifier: 'identyfikator',\n    institution: 'instytucja',\n    institutionNumber: 'numerInstytucji',\n    is_admin: 'isAdmin',\n    is_author: 'jestAutorem',\n    is_created_by_advertiser: 'isCreatedByAdvertiser',\n    is_mine: 'moje',\n    isAdmin: 'isAdmin',\n    is_protocol: 'jestProtokolem',\n    isProtocol: 'jestProtokolem',\n    is_refused: 'isRefused',\n    is_variant: 'czyWariantowe',\n    isVariant: 'czyWariantowe',\n    last_publicated_version_id: 'ostatniaOpublikowanaWersjaId',\n    label: 'label',\n    last_version: 'ostatniaWersja',\n    locality: 'miejscowosc',\n    modified_at: 'dataModyfikacji',\n    modified_by: 'ktoModyfikowal',\n    name: 'nazwa',\n    no_offer_selected: 'zadnaOfertaWybrana',\n    noOfferSelected: 'zadnaOfertaWybrana',\n    number: 'numer',\n    number_description: 'numerDomu',\n    order_node: 'zamowienieNode',\n    order_nodes: 'zamowieniaNodes',\n    order: 'zamowienie',\n    orderNode: 'zamowienieNode',\n    orderNodes: 'zamowieniaNodes',\n    orders: 'zamowienia',\n    offers: 'oferty',\n    offerset: 'pakietOfert',\n    offersets: 'pakietyOfert',\n    order_id: 'zamowienieId',\n    order_items: 'przedmiotyZamowienia',\n    order_temporary_id: 'zamowienieTemporaryId',\n    orders_amount: 'liczbaZamowien',\n    original_content: 'trescOryginalna',\n    page: 'strona',\n    parent: 'rozdzialNadrzedny',\n    partial_offer_allowed: 'czyDopuszczalnaOfertaCzesciowa',\n    partial_payment: 'czyWystepujePlatnoscCzesciowa',\n    participation_conditions: 'warunkiUdzialu',\n    perspective: 'perspektywa',\n    phone_number: 'numerTelefonu',\n    planned_sign_date: 'planowanyTerminPodpisaniaUmowy',\n    postcode: 'kodPocztowy',\n    poviat: 'powiat',\n    price: 'cena',\n    price_criterion: 'czyKryteriumCenowe',\n    priorities: 'osiePriorytetowe',\n    priority: 'osPriorytetowa',\n    programme: 'programOperacyjny',\n    programmes: 'programyOperacyjne',\n    project: 'projekt',\n    projects: 'projekty',\n    projects_enrollments: 'projektyNabory',\n    publication_date: 'dataOpublikowania',\n    question: 'pytanie',\n    questions: 'pytania',\n    refusedOfferSets: 'ofertyDoUsuniecia',\n    region: 'region',\n    regulations: 'regulaminy',\n    relatives: 'powiazane',\n    relatives_pointing_to_current: 'powiazaneDlaObecnego',\n    screen: 'ekran',\n    settlement: 'rozstrzygniecie',\n    slug: 'slug',\n    start_at: 'poczatekRealizacji',\n    statement: 'komunikat',\n    statements: 'komunikaty',\n    status: 'status',\n    street: 'ulica',\n    subcategories: 'podkategorie',\n    subcategory: 'podkategoria',\n    submission_deadline: 'terminOfert',\n    supplementary_orders: 'zamowieniaUzupelniajace',\n    surname: 'nazwisko',\n    tax_identification_number: 'nip',\n    temporary_id: 'temporaryId',\n    timetable_items: 'harmonogramy',\n    title: 'tytul',\n    terms_of_contract_change: 'warunkiZmianyUmowy',\n    teryt_items: 'teryty',\n    type: 'typ',\n    user: 'uzytkownik',\n    userEmail: 'emailUzytkownika',\n    userForename: 'imieUzytkownika',\n    userSurname: 'nazwiskoUzytkownika',\n    users: 'uzytkownicy',\n    warranty_period: 'okresGwarancji',\n    variants: 'warianty',\n    version: 'wersja',\n    voivodeship: 'wojewodztwo',\n    yellow_stripe: 'czyZoltyPasek',\n    osoba: 'osoba',\n    account_type: 'accountType',\n}\n\n// to server\nconst mapFrontServer = {\n    adres: 'address',\n    aktualnyIstnieje: 'currentExists',\n    cena: 'price',\n    czyAktywny: 'active',\n    czyDopuszczalnaOfertaCzesciowa: 'partialOfferAllowed',\n    czyKryteriumCenowe: 'priceCriterion',\n    czyMaKopieRobocza: 'hasDraft',\n    czyWariantowe: 'isVariant',\n    czyWystepujePlatnoscCzesciowa: 'partialPayment',\n    czyZoltyPasek: 'yellowStripe',\n    daneAdresoweOgloszeniodawcy: 'advertiserAddressDetails',\n    danePodmiotu: 'economicSubject',\n    dataDodania: 'addedAt',\n    dataModyfikacji: 'modifiedAt',\n    dataOpublikowania: 'publicationDate',\n    dataUtworzenia: 'createdAt',\n    dataWaznosci: 'expirationDate',\n    dataZablokowaniaKonta: 'accountDisabledAt',\n    doPublikacjiIstnieje: 'forPublicationExists',\n    dzialania: 'activities',\n    dzialanie: 'activity',\n    dzieci: 'children',\n    ekran: 'screen',\n    email: 'email',\n    emailUzytkownika: 'userEmail',\n    gmina: 'commune',\n    harmonogramy: 'timetableItems',\n    id: 'id',\n    identyfikator: 'identifier',\n    imie: 'forename',\n    imieUzytkownika: 'userForename',\n    instytucja: 'institution',\n    isAdmin: 'isAdmin',\n    jestAutorem: 'isAuthor',\n    jestProtokolem: 'isProtocol',\n    kategoria: 'category',\n    kod: 'code',\n    kodyCPV: 'cpvItems',\n    kodPocztowy: 'postcode',\n    komentarz: 'comment',\n    komunikat: 'statement',\n    komunikaty: 'statements',\n    koniecRealizacji: 'endAt',\n    kontoZablokowane: 'accountDisabled',\n    kraj: 'country',\n    kryteriaOceny: 'evaluationCriteria',\n    ktoModyfikowal: 'modifiedBy',\n    ktoUtworzyl: 'createdBy',\n    label: 'label',\n    liczbaZamowien: 'ordersAmount',\n    miejscaRealizacji: 'fulfillmentPlaces',\n    miejscowosc: 'locality',\n    nabor: 'enrollment',\n    naglowek: 'headline',\n    nazwa: 'name',\n    nazwisko: 'surname',\n    nazwiskoUzytkownika: 'userSurname',\n    nip: 'taxIdentificationNumber',\n    numer: 'number',\n    numerDomu: 'numberDescription',\n    numerIdentyfikacyjny: 'identificationNumber',\n    numerNaboru: 'enrollmentNumber',\n    odpowiedz: 'answer',\n    oferty: 'offers',\n    ofertyDoUsuniecia: 'refusedOfferSets',\n    ogloszenia: 'advertisements',\n    ogloszenie: 'advertisement',\n    okresGwarancji: 'warrantyPeriod',\n    opis: 'description',\n    osiePriorytetowe: 'priorities',\n    osPriorytetowa: 'priority',\n    osoba: 'osoba',\n    osobyDoKontaktu: 'contactPersons',\n    pakietOfert: 'offerset',\n    perspektywa: 'perspective',\n    planowanyTerminPodpisaniaUmowy: 'plannedSignDate',\n    plik: 'file',\n    plikDoWgrania: 'fileToLoad',\n    poczatekRealizacji: 'startAt',\n    podkategoria: 'subcategory',\n    podkategorie: 'subcategories',\n    pomoc: 'help',\n    pomoce: 'helps',\n    powiat: 'poviat',\n    powiazane: 'relatives',\n    powiazaneDlaObecnego: 'relativesPointingToCurrent',\n    programOperacyjny: 'programme',\n    programyOperacyjne: 'programmes',\n    projekt: 'project',\n    projekty: 'projects',\n    przedmiotyZamowienia: 'orderItems',\n    pytania: 'questions',\n    pytanie: 'question',\n    region: 'region',\n    regulaminy: 'regulations',\n    rodzajAdresu: 'addressType',\n    rozdzialNadrzedny: 'parent',\n    slug: 'slug',\n    slowniki: 'dictionaries',\n    status: 'status',\n    strona: 'page',\n    szacunkowaWartosc: 'estimatedValue',\n    numerInstytucji: 'institutionNumber',\n    numerTelefonu: 'phoneNumber',\n    temporaryId: 'temporaryId',\n    terminOfert: 'submissionDeadline',\n    teryty: 'terytItems',\n    tresc: 'content',\n    trescOgolna: 'generalContent',\n    tresciOgolne: 'generalContentItems',\n    trescOryginalna: 'originalContent',\n    typ: 'type',\n    typNumeruIdentyfikacyjnego: 'identificationNumberType',\n    tytul: 'title',\n    ulica: 'street',\n    uzytkownicy: 'users',\n    warianty: 'variants',\n    warunkiUdzialu: 'participationConditions',\n    warunkiZmianyUmowy: 'termsOfContractChange',\n    wojewodztwo: 'voivodeship',\n    wybranyWariant: 'chosenOfferVariant',\n    zadnaOfertaWybrana: 'noOfferSelected',\n    zamowieniaUzupelniajace: 'supplementaryOrders',\n    zamowienia: 'orders',\n    zamowieniaNodes: 'orderNodes',\n    zamowienie: 'order',\n    zamowienieId: 'orderId',\n    zamowienieNode: 'orderNode',\n    zamowienieTemporaryId: 'orderTemporaryId',\n    zalaczniki: 'attachments',\n    accountType: 'account_type',\n}\n\n\nconst serializeObject = (object, toServer=false, nonRecursiveKeys=[], dateWithTime=false) => {\n    // old serializer; don't use it with a new functionality\n    const serializationDct = toServer ? mapFrontServer : mapServerFront;\n    let serializedObject = {};\n    for (let attrName of Object.keys(object)) {\n        const value = object[attrName];\n        const serializedName = serializationDct[attrName] || attrName;\n        if (nonRecursiveKeys && nonRecursiveKeys.includes(toServer ? attrName : serializedName)) {\n            serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n        } else if (Array.isArray(value)) {\n            let serializedObjectList = serializeObjectList(value, toServer, nonRecursiveKeys, dateWithTime);\n            serializedObject[serializedName] = serializedObjectList;\n        } else if ((!toServer && ['created_at', 'end_at', 'modified_at',\n                    'planned_sign_date', 'publication_date', 'start_at',\n                    'submission_deadline'].includes(attrName))\n                    || (toServer && ['dataUtworzenia', 'dataModyfikacji',\n                    'dataOpublikowania', 'koniecRealizacji', 'poczatekRealizacji',\n                    'planowanyTerminPodpisaniaUmowy', 'terminOfert'].includes(attrName))) {\n            // serialize date\n            if (['terminOfert', 'submission_deadline'].includes(attrName)) {\n                let date_ = serializeDate(value, toServer, true);\n                if (attrName === 'submission_deadline' && !!date_) {\n                    date_ = date_.replace(' 23:59:59', '');\n                }\n                serializedObject[serializedName] = date_;\n            } else {\n                serializedObject[serializedName] = serializeDate(value, toServer, dateWithTime);\n            }\n        } else if (typeof value === 'object' && value !== null) {\n            serializedObject[serializedName] = serializeObject(value, toServer, nonRecursiveKeys, dateWithTime);\n        } else {\n            serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n        }\n    }\n    return serializedObject\n};\n\nconst getSerializedObject = (object, config=null) => {\n    config = config || {};\n    const toServer = config['toServer'] || false;\n    const mapToCamelCaseName = config['mapToCamelCaseName'] || false;\n    const doNotTranslateNames = config['doNotTranslateNames'] || false;\n    const serializationDct = toServer ? mapFrontServer : mapServerFront;\n    const nonRecursiveKeys = config['nonRecursiveKeys'] || [];\n    // all date (and datetime) fields add here:\n    const dateAttributes = config['dateAttributes'] || [];\n    // only datetime fields add here:\n    const dateTimeAttributes = config['dateTimeAttributes'] || [];\n    // add here datetime attributes if you want to cut 23:59:59:\n    const dateTimeToLastMinuteAttributes = config['dateTimeToLastMinuteAttributes'] || [];\n    const removeTemporaryId = config['removeTemporaryId'] || false;\n\n    let serializedObject = {};\n    for (let attrName of Object.keys(object)) {\n        if (removeTemporaryId && attrName === 'temporaryId') {\n            continue\n        }\n        const value = object[attrName];\n        let serializedName;\n        if (doNotTranslateNames) {\n            serializedName = attrName;\n        } else if (mapToCamelCaseName) {\n            serializedName = mapToCamelCase(attrName);\n        } else {\n            serializedName = serializationDct[attrName] || attrName;\n        }\n        if (nonRecursiveKeys.length && nonRecursiveKeys.includes(toServer ? attrName : serializedName)) {\n            serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n        } else if (Array.isArray(value)) {\n            serializedObject[serializedName] = getSerializedList(value, config);\n        } else if (dateAttributes.includes(attrName) || dateAttributes.includes(serializedName)) {\n            // serialize date\n            if (dateTimeAttributes.includes(attrName) || dateTimeAttributes.includes(serializedName)) {\n                let date_ = getSerializedDate(value, toServer, true);\n                if ((dateTimeToLastMinuteAttributes.includes(attrName)  || dateTimeToLastMinuteAttributes.includes(serializedName)) && !!date_) {\n                    date_ = date_.replace(' 23:59:59', '');\n                }\n                serializedObject[serializedName] = date_;\n            } else {\n                serializedObject[serializedName] = getSerializedDate(value, toServer, false);\n            }\n        } else if (typeof value === 'object' && value !== null) {\n            serializedObject[serializedName] = getSerializedObject(value, config);\n        } else {\n            serializedObject[serializedName] = value || (value === false ? value : (toServer ? null : ''));\n        }\n    }\n    return serializedObject\n}\n\nconst mapToCamelCase = (value) => {\n    return value.split('_').map((part, index) => index > 0 ? part.charAt(0).toUpperCase() + part.slice(1) : part).join('')\n};\n\nconst getSerializedDate = (value, toServer, withTime=false) => {\n    if (toServer) {\n        if (value === '') { return null }\n    } else if (value === null) { return '' }\n    return withTime ? value : value.slice(0, 10)\n}\n\nconst getSerializedList = (objectList, config) => {\n    if (!objectList.length) {return []}\n\n    if (typeof objectList[0] !== 'object') {return objectList}\n\n    if ((config || {})['addTemporaryId'] || false) {\n        return objectList.map(object => Object.assign(\n            getSerializedObject(object, config),\n            {temporaryId: object.id}\n        ))\n    }\n    return objectList.map(object => getSerializedObject(object, config))\n}\n\n\nconst serializeJsonPathList = (list) => {\n    let serializedList = [];\n    for (let element of list) {\n        if (element === undefined) {\n            serializedList.push({});\n        } else if (typeof element !== 'object') {\n            serializedList.push(element);\n        } else {\n            serializedList.push(serializeJsonPathObject(element));\n        }\n    }\n    return serializedList\n};\n\nconst serializeJsonPathObject = (object) => {\n    let serializedObject = {};\n    for (let attrName of Object.keys(object)) {\n        const value = object[attrName];\n        if (Array.isArray(value)) {\n            serializedObject[attrName] = serializeJsonPathList(value);\n        } else {\n            serializedObject[attrName] = value;\n        }\n    }\n    return serializedObject\n};\n\n\nconst findJsonPathErrors = (errors, path) => {\n    for (let e of errors) {\n        if (e.path === path) {\n            return e.errors\n        }\n    }\n    return []\n};\n\nconst getSerializedNestedErrorsFromServer = (errors, data, attrName, pathPrefix, nestedFields) => {\n    const attrBasePathPrefix = `${pathPrefix}${mapFrontServer[attrName]}`;\n    let errors_ = {};\n    const baseAttrErrors = findJsonPathErrors(errors, attrBasePathPrefix);\n    if (baseAttrErrors.length) {\n        errors_['errors'] = baseAttrErrors;\n    }\n\n    // iterate objects on list\n    for (let i=0; i < data[attrName].length; i++) {\n        const obj = data[attrName][i];\n        let objectErrors = {}\n        for (let subAttrName of Object.keys(obj)) {\n            if (nestedFields.includes(subAttrName)) {\n                objectErrors[subAttrName] = getSerializedNestedErrorsFromServer(\n                    errors, obj, subAttrName, `${attrBasePathPrefix}.${i}.`, nestedFields);\n            } else {\n                const subAttrPathPrefix = `${attrBasePathPrefix}.${i}.${mapFrontServer[subAttrName]}`;\n                const subAttrErrors = findJsonPathErrors(errors, subAttrPathPrefix);\n                if (subAttrErrors.length) {\n                    objectErrors[subAttrName] = subAttrErrors;\n                }\n            }\n        }\n        errors_[obj.temporaryId] = objectErrors;\n    }\n    return errors_\n}\n\nconst getSerializedObjectErrorsFormServer = (errors, data, nestedFields=[], pathPrefix='$.') => {\n    let serializedErrors = {};\n    for (let attrName of Object.keys(data)) {\n        if (nestedFields.includes(attrName)) {\n            serializedErrors[attrName] = getSerializedNestedErrorsFromServer(\n                errors, data, attrName, pathPrefix, nestedFields);\n        } else if (typeof data[attrName] === 'object' && data[attrName] !== null) {\n            serializedErrors[attrName] = getSerializedObjectErrorsFormServer(\n                errors, data[attrName], nestedFields, `${pathPrefix}${mapFrontServer[attrName]}.`);\n        } else {\n            const attrPathPrefix = `${pathPrefix}${mapFrontServer[attrName]}`;\n            const attrErrors = findJsonPathErrors(errors, attrPathPrefix);\n            if (attrErrors.length) {\n                serializedErrors[attrName] = attrErrors;\n            }\n        }\n    }\n    return serializedErrors\n};\n\nconst getSerializedErrorsFromServer = (errors, config={}) => {\n    // set config according to config in getSerializedObject function\n    let serializedErrors = {};\n    errors.forEach(error => jp.value(serializedErrors, error.path, error.errors));\n    return getSerializedObject(serializeJsonPathObject(serializedErrors), config)\n};\n\nconst serializeDate = (value, toServer, withTime=false) => {\n    if (toServer) {\n        if (value === '') { return null }\n    } else if (value === null) { return '' }\n    return withTime ? value : value.slice(0, 10)\n}\n\nconst serializeObjectList = (objectList, toServer=false, nonRecursiveKeys=[], dateWithTime=false) => {\n    if (!objectList.length) {return []}\n    if (typeof objectList[0] !== 'object') {return objectList}\n    return objectList.map(object => Object.assign(\n        serializeObject(object, toServer, nonRecursiveKeys, dateWithTime),\n        {temporaryId: object.id}\n    ))\n}\n\n\nconst ERRORS_SERVER_FRONT = {\n    'credentials (mail and password) are required.': 'credentials (mail and password) are required.',\n    'DateTime::__construct(): Failed to parse time string (some-bad-format) at position 0 (s): The timezone could not be found in the database': 'DateTime::__construct(): Failed to parse time string (some-bad-format) at position 0 (s): The timezone could not be found in the database',  // new advertisement\n    'email is not unique': 'email is not unique',  // new user\n    'missing parameters': 'missing parameters',  // new advertisement\n    'missing params': 'missing params',  // new user\n    'no results': 'no results',     // delete project\n    'Number is not unique.': 'Istnieje w bazie projekt o takim numerze.',     // add project\n    'Project not found': 'Nie ma takiego projektu.',     // delete project\n    'Session ID is required': 'Session ID is required',\n    'Session invalid.': 'Session invalid.',\n    'User not found.': 'Nie ma takiego użytkownika.',\n    'An empty file is not allowed.': 'Nie udało się wgrać pliku, ponieważ jest on pusty.',\n    'Internal Server Error': 'Wystąpił błąd serwera.',\n    'Unauthorized': 'Wystąpił problem z uwierzytelnieniem użytkownika.',\n}\n\n\nconst translateErrorMessage = (message) => {\n    return ERRORS_SERVER_FRONT[message] || message\n}\n\n\nconst serializeOrderItemCategories = (categoriesList) => {\n    let categories = {}, subcategories = {};\n    for (let cat of categoriesList) {\n        categories[cat.id] = cat.name;\n        for (let subcat of cat.subcategories) {\n            subcategories[subcat.id] = subcat.name;\n        }\n    }\n    return [categories, subcategories]\n}\n\nfunction serializeUrlParams(params, serializationDict) {\n    let serializedDict = {};\n    for (let [key, val] of Object.entries(params)) {\n        serializedDict[serializationDict[key] || key] = val;\n    }\n    return serializedDict\n}\n\n\nexport {\n    getSerializedObjectErrorsFormServer,\n    getSerializedErrorsFromServer,\n    getSerializedList,\n    getSerializedObject,\n    mapServerFront,\n    serializeObject,\n    serializeObjectList,\n    serializeOrderItemCategories,\n    serializeUrlParams,\n    translateErrorMessage,\n};\n\n\nif (typeof module === 'object' && module.exports) {\n    module.exports = {\n        getSerializedObjectErrorsFormServer,\n    };\n}\n","import React, { createContext } from 'react';\n\n/*\n    What is this for?\n    This one is updated after link in menu was clicked. If it changes some\n    components will be rerendered - in Routes.js define them th key as\n    menuLinkKey and that's all what you need to refresh page content.\n*/\n\nconst MenuContext = createContext({\n    menuLinkKey: 0,\n    refreshBadgesCount: 0,\n    updateMenuKey: () => {},\n    refreshBadges: () => {}\n});\n\n\nexport class MenuProvider extends React.Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            menuLinkKey: 0,\n            updateMenuKey: this.updateMenuKey,\n            refreshBadges: this.refreshBadges\n        }\n    }\n\n    refreshBadges = () => {\n        this.setState(prevState => ({refreshBadgesCount: prevState.refreshBadgesCount + 1}))\n    }\n\n    updateMenuKey = () => {\n        this.setState(prevState => ({menuLinkKey: prevState.menuLinkKey + 1}));\n    }\n\n    render() {\n        return (\n            <MenuContext.Provider value={this.state}>\n                {this.props.children}\n            </MenuContext.Provider>\n        );\n    }\n}\n\nexport const MenuConsumer = MenuContext.Consumer;\nexport { MenuContext };\n","import React, { createContext } from 'react';\n\nimport { getSerializedObject } from '../serializers';\n\n\nconst EMPTY_USER = {\n    accountType: 'USER',\n    email: '',\n    forename: '',\n    id: null,\n    identifier: null,\n    surname: '',\n    advertisementManagerType: {\n        isAuthor: false,\n        isAdmin: false,\n    },\n};\nconst EMPTY_AUTH = { expire: null };\n\n\nconst UserContext = createContext({\n    // errors\n    user: {...EMPTY_USER},\n    auth: {...EMPTY_AUTH},\n    permissions: {},\n    set: () => {},\n    setAdvertisementManagerType: () => {},\n    refresh: () => {},\n    refreshTimer: () => {},\n    logout: () => {},\n    removePermission: () => {},\n});\n\n\nexport class UserProvider extends React.Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            user: {...EMPTY_USER},\n            auth: {...EMPTY_AUTH},\n            permissions: {},\n            set: this.set,\n            setAdvertisementManagerType: this.setAdvertisementManagerType,\n            refresh: this.refresh,\n            refreshTimer: this.refreshTimer,\n            logout: this.logout,\n            removePermission: this.removePermission,\n        };\n    }\n\n    set = (data, callback=null) => {\n        // from backend, at the beginning of application life or after login\n        this.setState(\n            prevState => ({\n                user: Object.assign({}, prevState.user, getSerializedObject(data.user || {}, {mapToCamelCaseName: true})),\n                auth: Object.assign(\n                    {}, prevState.auth, (data.meta || {}).auth || {}),\n                permissions: this.serializePermission(data.permissions || {}),\n            }),\n            () => {\n                if (callback) {\n                    callback();\n                }\n            }\n        );\n    }\n\n    setAdvertisementManagerType = (data, callback=null) => {\n        this.setState(\n            prevState => ({\n                user: {...prevState.user, advertisementManagerType: data},\n            }),\n            () => {\n                if (callback) { callback() }\n            }\n        );\n    }\n\n    serializePermission = (permissions) => {\n        /*\n        Full expected permissions is a dict like that:\n        {\n            adProjectEnrollments: {\n                advertisementAdministration: {\n                    searchNPreviewData: true,\n                    blocking: true,\n                    editData: true\n                },\n                projectsEnrollmentsAdministration: {\n                    searchNPreviewData: true,\n                    editData: true\n                },\n                permissionsAdministration: {\n                    previewListUsersAuthorized: true,\n                    functionalityManagement: true,\n                    permissionsManagement: true\n                }\n            },\n            contentAdministration: {\n                contentAdministration: {\n                    help: true,\n                    generalContentCookiesRegulation: true,\n                    statements: true\n                },\n                permissionsAdministration: {\n                    previewListUsersAuthorized: true,\n                    functionalityManagement: true,\n                    permissionsManagement: true\n                }\n            },\n            implementationLevelsDictionaryAdministration: {\n                implementationLevelsDictionaryAdministration: {\n                  previewData: true,\n                  editData: true\n                },\n                permissionsAdministration: {\n                  previewListUsersAuthorized: true,\n                  functionalityManagement: true,\n                  permissionsManagement: true\n                }\n            },\n            usersAdministration: {\n                usersAdministration: {\n                    previewListUsers: true,\n                    blockingUsers: true\n                },\n                permissionsAdministration: {\n                    previewListUsersAuthorized: true,\n                    functionalityManagement: true,\n                    permissionsManagement: true\n                }\n            }\n        }\n        */\n        permissions = permissions || {};\n        const adProjEnrAdm = permissions.adProjectEnrollments || {};\n\n        const usersAdm = permissions.usersAdministration || {};\n        const usersAdmUsersAdministration =\n            usersAdm.usersAdministration || {};\n        const usersAndPermissionsPreviewListUsers =\n            usersAdmUsersAdministration.previewListUsers || false;\n        const usersAdmPermissionsAdministration =\n            usersAdm.permissionsAdministration || {}\n        const usersAndPermissionsPreviewListUsersAuthorized =\n            usersAdmPermissionsAdministration.previewListUsersAuthorized ||\n            false;\n\n        const contentAdm = permissions.contentAdministration || {};\n        const contentAdmContentAdministration =\n            contentAdm.contentAdministration || {};\n        const contentAdmPermissionsAdministration =\n            contentAdm.permissionsAdministration || {};\n        const implementationLevelsDictionaryAdm =\n            permissions.implementationLevelsDictionaryAdministration || {};\n        const implementationLevelsDictionaryAdmPermissionsAdministration =\n            implementationLevelsDictionaryAdm.permissionsAdministration || {};\n        const implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration =\n            implementationLevelsDictionaryAdm.implementationLevelsDictionaryAdministration || {};\n\n        return {\n            // used in menu\n            fullUsersAndPermissions: usersAndPermissionsPreviewListUsers ||\n                usersAndPermissionsPreviewListUsersAuthorized,\n            usersAndPermissionsPreviewListUsers,\n            usersAndPermissionsPreviewListUsersAuthorized,\n            // used in add/edit permissions forms\n            usersPermissionsManagement: {\n                functionality:\n                    usersAdmPermissionsAdministration.functionalityManagement ||\n                    false,\n                permissions:\n                    usersAdmPermissionsAdministration.permissionsManagement ||\n                    false,\n            },\n            blockingUsers:\n                usersAdmUsersAdministration.blockingUsers || false,\n            // used in menu\n            projectsEnrollments: (adProjEnrAdm\n                .projectsEnrollmentsAdministration || {})\n                .searchNPreviewData || false,\n            // used in menu\n            advertisements: (adProjEnrAdm\n                .advertisementAdministration || {})\n                .searchNPreviewData || false,\n            // used in menu\n            fullContent: Object.values(contentAdmContentAdministration).filter(\n                value => value === true).length > 0,\n            help: contentAdmContentAdministration.help || false,\n            generalContentCookiesRegulation:\n                contentAdmContentAdministration.generalContentCookiesRegulation\n                || false,\n            statements: contentAdmContentAdministration.statements || false,\n            // used in add/edit permissions forms\n            contentPermissionsManagement: {\n                functionality:\n                    contentAdmPermissionsAdministration.functionalityManagement,\n                permissions:\n                    contentAdmPermissionsAdministration.permissionsManagement,\n            },\n            addImplementationLevelPermission:\n                (adProjEnrAdm.permissionsAdministration || {}).functionalityManagement ||\n                (adProjEnrAdm.permissionsAdministration || {}).permissionsManagement ||\n                false\n            ,\n            // used in add/edit permissions forms\n            implementationLevelsDictionaryPermissionsManagement: {\n                functionality:\n                    implementationLevelsDictionaryAdmPermissionsAdministration.functionalityManagement,\n                permissions:\n                    implementationLevelsDictionaryAdmPermissionsAdministration.permissionsManagement,\n            },\n            previewDictionaries:\n                implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration\n                    .previewData || false,\n            editingDictionaries:\n                implementationLevelsDictionaryAdmImplementationLevelsDictionaryAdministration\n                    .editData || false,\n        }\n    }\n\n    refresh = (data) => {\n        // from sativa\n        this.setState(\n            prevState => {\n                // if identifier is null, user has logged out in the meantime, do nothing\n                if (prevState.user.identifier === null) {\n                    return {}\n                }\n                const user = data.data;\n                return {\n                    user: Object.assign(\n                        {},\n                        prevState.user,\n                        {\n                            email: user.email,\n                            forename: user.first_name,\n                            identifier: user.id,\n                            surname: user.last_name,\n                        }\n                    ),\n                    auth: Object.assign(\n                        {},\n                        prevState.auth,\n                        {expire: data.meta.expire}\n                    ),\n                }\n            },\n        );\n    }\n\n    refreshTimer = (expire, callback) => {\n        this.setState(\n            prevState => {\n                // if identifier is null, user has logged out in the meantime, do nothing\n                if (prevState.user.identifier === null) { return {} }\n                return {\n                    auth: Object.assign(\n                        {},\n                        prevState.auth,\n                        {expire}\n                    ),\n                }\n            },\n            () => {\n                // run callback only if authenticated\n                if (this.state.user.identifier !== null) { callback() }\n            }\n        );\n    }\n\n    logout = (callback=null) => {\n        this.setState(\n            {\n                user: EMPTY_USER,\n                auth: EMPTY_AUTH,\n                permissions: {},\n            },\n            () => {\n                if (callback) {\n                    callback();\n                }\n            }\n        );\n    }\n\n    removePermission = (permissionName) => {\n        /*\n        Possible permission's names:\n        fullUsersAndPermissions, usersAndPermissionsPreviewListUsers,\n        usersAndPermissionsPreviewListUsersAuthorized,\n        blockingUsers,\n        projectsEnrollments,\n        advertisements,\n        fullContent, help, generalContentCookiesRegulation, statements,\n        previewDictionaries, editingDictionaries\n        */\n        this.setState(prevState => {\n            let permissions = {\n                ...prevState.permissions,\n                [permissionName]: false\n            };\n            if ([\n                'help', 'generalContentCookiesRegulation', 'statements'\n            ].includes(permissionName)) {\n                permissions['fullContent'] = permissions.help ||\n                    permissions.generalContentCookiesRegulation ||\n                    permissions.statements;\n            } else if ([\n                'usersAndPermissionsPreviewListUsers',\n                'usersAndPermissionsPreviewListUsersAuthorized'\n            ].includes(permissionName)) {\n                permissions['fullUsersAndPermissions'] =\n                    permissions.usersAndPermissionsPreviewListUsers ||\n                    permissions.usersAndPermissionsPreviewListUsersAuthorized\n            }\n            return {permissions}\n        });\n    }\n\n    render() {\n        return (\n            <UserContext.Provider value={this.state}>\n                {this.props.children}\n            </UserContext.Provider>\n        );\n    }\n}\n\n\nexport const UserConsumer = UserContext.Consumer;\nexport { UserContext };\n","import { TOKEN_COOKIE_NAME } from './const';\nimport {\n    getAuthTokenCookieValue,\n    getCookieValue,\n    refreshTimerAfterRequest\n} from './helpers';\n\n\nconst fetchApi = (url, method, headers, body, callbackSuccess,\n        callbackError, callbackIncorrectStatus, callbackShowErrors=null) => {\n\n    const xhr = new XMLHttpRequest();\n    if (!['POST', 'PUT'].includes(method)) {\n        if (Object.keys(body).length) {\n            let urlParamsPart = '';\n            for (let [k, v] of Object.entries(body)) {\n                if (Array.isArray(v)) {\n                    let i = 0;\n                    for (let subvalue of v) {\n                        urlParamsPart += `&${k}[${i++}]=${subvalue}`;\n                    }\n                } else {\n                    urlParamsPart += `&${k}=${v}`;\n                }\n            }\n            if (urlParamsPart.length) {\n                url += `?${urlParamsPart.substring(1)}`;\n            }\n        }\n    }\n    xhr.open(method, encodeURI(url));\n\n    // headers\n    xhr.setRequestHeader('Content-type','application/json; charset=utf-8');\n    const authTokenCookieValue = getAuthTokenCookieValue();\n    if (authTokenCookieValue) {\n        xhr.setRequestHeader('X-Auth-Token', authTokenCookieValue);\n    }\n    if (headers || null) {\n        for (let [name, value] of Object.entries(headers)) {\n            xhr.setRequestHeader(name, value);\n        }\n    }\n\n    // define values and callbacks\n    xhr.timeout = 40000;\n    xhr.ontimeout = () => {\n        callbackError({message: 'Serwer zbyt długo nie odpowiada.'})\n    }\n    xhr.onerror = () => {callbackIncorrectStatus(xhr.status)};\n    xhr.onload = () => {\n        if ([403, 404].includes(xhr.status)) {\n            callbackIncorrectStatus(xhr.status);\n            return\n        }\n\n        let success = true;\n        let jsonData = {};\n        try {\n            jsonData = JSON.parse(xhr.responseText);\n        } catch(error) {\n            success = false;\n        }\n        if (!success) {\n            callbackError({message: 'Wystąpił nieoczekiwany błąd.'});\n        } else {\n            refreshTimerAfterRequest(authTokenCookieValue, xhr.status);\n            if (jsonData.status === 'OK') {\n                callbackSuccess(jsonData.data);\n            } else if (jsonData.status === 'Error') {\n                if (callbackShowErrors && jsonData.errors && Object.keys(jsonData.errors).length > 0) {\n                    callbackShowErrors(jsonData.errors)\n                } else {\n                    callbackError(jsonData);\n                }\n            } else {\n                callbackIncorrectStatus(xhr.status);\n            }\n        }\n    };\n\n    xhr.send(JSON.stringify(body));\n    return xhr\n};\n\n\nconst fetchSativaApi = (url, callbackSuccess, callbackError, callbackIncorrectStatus) => {\n\n    const xhr = new XMLHttpRequest();\n    xhr.open('GET', encodeURI('/konto' + url));\n\n    // headers\n    xhr.setRequestHeader('Content-Type', 'application/json');\n    const authTokenCookieValue = getAuthTokenCookieValue();\n    if (authTokenCookieValue) {\n        xhr.setRequestHeader('ACCESS-TOKEN', decodeURIComponent(\n            getCookieValue(TOKEN_COOKIE_NAME)));\n    }\n\n    // define values and callbacks\n    xhr.timeout = 15000;\n    xhr.ontimeout = () => {\n        callbackError({message: 'Serwer zbyt długo nie odpowiada.'})\n    }\n    xhr.onerror = () => {callbackIncorrectStatus(xhr.status)};\n    xhr.onload = () => {\n        if (xhr.status === 200) {\n            let success = true;\n            let jsonData = {};\n            try {\n                jsonData = JSON.parse(xhr.responseText);\n            } catch(error) {\n                success = false;\n            }\n            if (!success) {\n                callbackError({message: 'Wystąpił nieoczekiwany błąd.'});\n            } else {\n                callbackSuccess(jsonData);\n            }\n            return\n        }\n        callbackIncorrectStatus(xhr.status);\n    };\n    xhr.send();\n    return xhr\n}\n\n\nexport { fetchApi, fetchSativaApi }\n","// Notice! Remember to set double '\\' in regex if needed, e.g. (\\\\d+),\n// otherwise regex won't work\nexport const URLS = {\n    home: {\n        path: '/',\n        pattern: /^\\/$/\n    },\n    login: {\n        path: '/logowanie',\n        pattern: /^\\/logowanie$/\n    },\n    loginError: {\n        path: '/blad-logowania',\n        pattern: /^\\/blad-logowania$/\n    },\n    projects: {\n        path: '/projekty',\n        pattern: /^\\/projekty$/,\n    },\n    advertisements: {\n        path: '/ogloszenia',\n        pattern: /^\\/ogloszenia$/,\n    },\n    advertisementsSearch: {\n        path: '/ogloszenia/szukaj',\n        pattern: /^\\/ogloszenia\\/szukaj$/,\n    },\n    advertisementsNew: {\n        path: '/ogloszenia/nowe',\n        pattern: /^\\/ogloszenia\\/nowe$/,\n    },\n    advertisementsDetails: {\n        path: '/ogloszenia/:id(\\\\d+)',\n        pattern: /^\\/ogloszenia\\/\\d+$/,\n        getUrl: (advertisementId) => `/ogloszenia/${advertisementId}`,\n    },\n    advertisementsDetailsDraft: {\n        path: '/ogloszenia/:id(\\\\d+)/robocza',\n        pattern: /^\\/ogloszenia\\/\\d+\\/robocza$/,\n    },\n    advertisementsDetailsVersion: {\n        path: '/ogloszenia/:id(\\\\d+)/wersja:versionId(\\\\d+)',\n        pattern: /^\\/ogloszenia\\/\\d+\\/wersja\\d+$/,\n    },\n    advertisementsEdit: {\n        path: '/ogloszenia/:id(\\\\d+)/edytuj',\n        pattern: /^\\/ogloszenia\\/\\d+\\/edytuj$/,\n        getUrl: (advertisementId) => `/ogloszenia/${advertisementId}/edytuj`,\n    },\n    offers: {\n        path: '/oferty',\n        pattern: /^\\/oferty$/,\n    },\n    newsletter: {\n        path: '/newsletter',\n        pattern: /^\\/newsletter$/,\n    },\n    accessibility: {\n        path: '/deklaracja-dostepnosci',\n        pattern: /^\\/deklaracja-dostepnosci$/,\n    },\n    users: {\n        path: '/uzytkownicy',\n        pattern: /^\\/uzytkownicy$/,\n    },\n    usersDetails: {\n        path: '/uzytkownicy/:id(\\\\d+)',\n        pattern: /^\\/uzytkownicy\\/\\d+$/,\n        getUrl: (userId) => `/uzytkownicy/${userId}`\n    },\n    usersMyProfile: {\n        path: '/uzytkownicy/moj-profil',\n        pattern: /^\\/uzytkownicy\\/moj-profil$/,\n    },\n    managementProjects: {\n        path: '/administracja/projekty',\n        pattern: /^\\/administracja\\/projekty$/,\n    },\n    managementAdvertisements: {\n        path: '/administracja/ogloszenia',\n        pattern: /^\\/administracja\\/ogloszenia$/,\n    },\n    managementContents: {\n        path: '/zarzadzanie-trescia',\n        pattern: /^\\/zarzadzanie-trescia$/,\n    },\n    managementContentsHelps: {\n        path: '/zarzadzanie-trescia/pomoc',\n        pattern: /^\\/zarzadzanie-trescia\\/pomoc$/,\n    },\n    managementContentsHelpsNew: {\n        path: '/zarzadzanie-trescia/pomoc/nowa',\n        pattern: /^\\/zarzadzanie-trescia\\/pomoc\\/nowa$/,\n    },\n    managementContentsHelpsEdit: {\n        path: '/zarzadzanie-trescia/pomoc/:id(\\\\d+)-:slug([\\\\w-]+)/edytuj',\n        pattern: /^\\/zarzadzanie-trescia\\/pomoc\\/\\d+-[\\w-]+\\/edytuj$/,\n    },\n    managementContentsHelpsDetails: {\n        path: '/zarzadzanie-trescia/pomoc/:id(\\\\d+)-:slug([\\\\w-]+)',\n        pattern: /^\\/zarzadzanie-trescia\\/pomoc\\/\\d+-[\\w-]+$/,\n    },\n    managementContentsRegulations: {\n        path: '/zarzadzanie-trescia/regulaminy',\n        pattern: /^\\/zarzadzanie-trescia\\/regulaminy$/,\n    },\n    managementContentsRegulationsCurrent: {\n        path: '/zarzadzanie-trescia/regulaminy/aktualny',\n        pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/aktualny$/,\n    },\n    managementContentsRegulationsForPublishing: {\n        path: '/zarzadzanie-trescia/regulaminy/do-opublikowania',\n        pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/do-opublikowania$/,\n    },\n    managementContentsRegulationsNew: {\n        path: '/zarzadzanie-trescia/regulaminy/nowy',\n        pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/nowy$/,\n    },\n    managementContentsRegulationsEdit: {\n        path: '/zarzadzanie-trescia/regulaminy/edytuj',\n        pattern: /^\\/zarzadzanie-trescia\\/regulaminy\\/edytuj$/,\n    },\n    managementContentsCookies: {\n        path: '/zarzadzanie-trescia/ciasteczka',\n        pattern: /^\\/zarzadzanie-trescia\\/ciasteczka$/,\n    },\n    managementContentsCookiesNew: {\n        path: '/zarzadzanie-trescia/ciasteczka/nowe',\n        pattern: /^\\/zarzadzanie-trescia\\/ciasteczka\\/nowe$/,\n    },\n    managementContentsCookiesEdit: {\n        path: '/zarzadzanie-trescia/ciasteczka/edytuj',\n        pattern: /^\\/zarzadzanie-trescia\\/ciasteczka\\/edytuj$/,\n    },\n    managementContentsGeneralContents: {\n        path: '/zarzadzanie-trescia/tresci-ogolne',\n        pattern: /^\\/zarzadzanie-trescia\\/tresci-ogolne$/,\n    },\n    managementContentsGeneralContentsEdit: {\n        path: '/zarzadzanie-trescia/tresci-ogolne/:id(\\\\d+)/edytuj',\n        pattern: /^\\/zarzadzanie-trescia\\/tresci-ogolne\\/\\d+\\/edytuj$/,\n    },\n    managementContentsGeneralContentsDetails: {\n        path: '/zarzadzanie-trescia/tresci-ogolne/:id(\\\\d+)',\n        pattern: /^\\/zarzadzanie-trescia\\/tresci-ogolne\\/\\d+$/\n    },\n    managementContentsStatements: {\n        path:  '/zarzadzanie-trescia/komunikaty',\n        pattern: /^\\/zarzadzanie-trescia\\/komunikaty$/,\n    },\n    managementContentsStatementsNew: {\n        path: '/zarzadzanie-trescia/komunikaty/nowy',\n        pattern: /^\\/zarzadzanie-trescia\\/komunikaty\\/nowy$/,\n    },\n    managementContentsStatementsEdit: {\n        path: '/zarzadzanie-trescia/komunikaty/:id(\\\\d+)-:slug([\\\\w-]+)/edytuj',\n        pattern: /^\\/zarzadzanie-trescia\\/komunikaty\\/\\d+-[\\w-]+\\/edytuj$/,\n    },\n    managementContentsStatementsDetails: {\n        path: '/zarzadzanie-trescia/komunikaty/:id(\\\\d+)-:slug([\\\\w-]+)',\n        pattern: /^\\/zarzadzanie-trescia\\/komunikaty\\/\\d+-[\\w-]+$/,\n    },\n    managementPerspectives: {\n        path: '/administracja/perspektywy',\n        pattern: /^\\/administracja\\/perspektywy$/,\n    },\n    managementProgrammesForPerspective: {\n        path: '/administracja/perspektywy/:perspectiveId(\\\\d+)/programy',\n        pattern: /^\\/administracja\\/perspektywy\\/\\d+\\/programy$/,\n        getUrl: (perspectiveId) => `/administracja/perspektywy/${perspectiveId}/programy`,\n    },\n    managementPrioritiesForProgramme: {\n        path: '/administracja/programy/:programmeId(\\\\d+)/osie',\n        pattern: /^\\/administracja\\/programy\\/\\d+\\/osie$/,\n        getUrl: (programmeId) =>\n            `/administracja/programy/${programmeId}/osie`,\n    },\n    managementSubactivitiesForPriority: {\n        path: '/administracja/osie/:priorityId(\\\\d+)/dzialania-i-poddzialania',\n        pattern: /^\\/administracja\\/osie\\/\\d+\\/dzialania-i-poddzialania$/,\n        getUrl: (priorityId) =>\n            `/administracja/osie/${priorityId}/dzialania-i-poddzialania`,\n    },\n    managementActivitiesForPriority: {\n        path: '/administracja/osie/:priorityId(\\\\d+)/dzialania',\n        pattern: /^\\/administracja\\/osie\\/\\d+\\/dzialania$/,\n        getUrl: (priorityId) => `/administracja/osie/${priorityId}/dzialania`,\n    },\n    managementRegionsForSubactivity: {\n        path: '/administracja/dzialania-i-poddzialania/:activityId(\\\\d+)/regiony',\n        pattern: /^\\/dzialania-i-poddzialania\\/osie\\/\\d+\\/regiony$/,\n        getUrl: (activityId) => `/administracja/dzialania-i-poddzialania/${activityId}/regiony`,\n    },\n    managementInstitutionsForActivity: {\n        path: '/administracja/dzialania/:activityId(\\\\d+)/instytucje',\n        pattern: /^\\/administracja\\/dzialania\\/\\d+\\/instytucje$/,\n        getUrl: (activityId) => `/administracja/dzialania/${activityId}/instytucje`,\n    },\n    helps: {\n        path: '/pomoc',\n        pattern: /^\\/pomoc$/,\n    },\n    helpsDetails: {\n        path: '/pomoc/:id(\\\\d+)-:slug([\\\\w-]+)',\n        pattern: /^\\/pomoc\\/\\d+-[\\w-]+$/,\n    },\n    regulations: {\n        path: '/regulamin',\n        pattern: /^\\/regulamin$/,\n    },\n    subscriptions: {\n        path: '/subskrypcje',\n        pattern: /^\\/subskrypcje$/,\n    },\n    statements: {\n        path: '/komunikaty',\n        pattern: /^\\/komunikaty$/,\n    },\n    statementsDetails: {\n        path: '/komunikaty/:id(\\\\d+)-:slug([\\\\w-]+)',\n        pattern: /^\\/komunikaty\\/\\d+-[\\w-]+$/,\n    },\n    // sativa\n    sativaUsersDetails: {\n        getUrl: (userIdentifier) => `/konto/panel/uzytkownicy/${userIdentifier}`\n    },\n};\n","const colors = {\n    primary: '#0d47a1',\n    secondary: '#5eb96a',\n    warn: '#fff2b2',\n    error: '#eb0000',\n    background: '#fff',\n    disabled: '#f2f2f2',\n    surface: '#fff',\n    onPrimary: '#fff',\n    onSecondary: 'rgba(0, 0, 0, 0.87)',\n    onSurface: 'rgba(0, 0, 0, 0.87)',\n    onError: '#fff',\n    darkBg: '#757575',\n    textPrimaryOnBackground: 'rgba(0, 0, 0, 0.87)',\n    textSecondaryOnBackground: 'rgba(0, 0, 0, 0.7)',\n    textHintOnBackground: 'rgba(0, 0, 0, 0.7)',\n    textDisabledOnBackground: 'rgba(0, 0, 0, 0.7)',\n    textIconOnBackground: 'rgb(0, 0, 0)',\n    textPrimaryOnLight: 'rgba(0, 0, 0, 0.87)',\n    textSecondaryOnLight: 'rgba(0, 0, 0, 0.7)',\n    textHintOnLight: '#757575',\n    textDisabledOnLight: 'rgba(0, 0, 0, 0.7)',\n    textIconOnLight: 'rgba(0, 0, 0, 0.7)',\n    textPrimaryOnDark: 'white',\n    textSecondaryOnDark: 'rgba(255, 255, 255, 0.7)',\n    textHintOnDark: 'rgba(255, 255, 255, 0.5)',\n    textDisabledOnDark: 'rgba(255, 255, 255, 0.5)',\n    textIconOnDark: 'rgba(255, 255, 255, 0.5)',\n};\n\nconst customSelectStyles = {\n    input: (styles, state) => {\n        return {\n            ...styles,\n            color: '#000',\n            minWidth: 200,\n            fontSize: 16,\n        }\n    },\n    option: (provided, state) => ({\n        ...provided,\n        color: state.isFocused ? '#fff' : (state.isSelected ? colors.primary : '#000'),\n        backgroundColor: state.isFocused ? colors.primary : (state.isSelected ? 'rgba(0, 0, 0, .04)' : '#fff'),\n        fontWeight: state.isSelected && '900',\n        fontSize: 16,\n        borderWidth: state.isSelected && 1,\n        ':active': {\n            backgroundColor: colors.primary,\n            color: '#fff',\n        },\n    }),\n    singleValue: (provided, state) => ({\n        ...provided,\n        color: '#000'\n    }),\n    placeholder: (styles) => ({\n        ...styles,\n        color: 'rgba(0, 0, 0, 0.7)'\n    }),\n    multiValue: (styles) => {\n        return {\n            ...styles,\n            color: '#fff',\n            backgroundColor: colors.primary,\n        }\n    },\n    multiValueLabel: (styles) => {\n        return {\n            ...styles,\n            color: '#fff'\n        }\n    },\n    multiValueRemove: (styles) => {\n        return {\n            ...styles,\n            ':hover': {\n                backgroundColor: colors.primary,\n                color: '#fff',\n                cursor: 'pointer'\n            }\n        }\n    },\n}\n\n\nexport { colors, customSelectStyles };\n","// USAGE:\n// <Text>text</Text> - black text\n// <Text label>text</Text> - grey uppercase text, label for <FieldWithLabel /> component\n// <Text info>text</Text> - primary (blue) color\n// <Text error>text</Text> - red color\n// <Text accentHeader>text</Text> - bigger (18px) blue (primary) text\n// <Text mainHeader tag=\"h2\">text</Text> - bigger (28px) blue (primary) text for section title\n// <Text sectionHeader tag=\"h2\">text</Text> - bigger (28px) without margin-bottom\n\n\nimport React from 'react';\nimport { Typography } from '@rmwc/typography';\n\nimport { colors } from '../vars/vars'\n\n\nconst Text = (props) => {\n    const {\n        accentHeader,\n        children,\n        className,\n        error,\n        errorColorReverse,\n        htmlFor,\n        info,\n        label,\n        labelFor,\n        mainHeader,\n        sectionHeader,\n        tag,\n        use,\n        ...otherProps\n    } = props;\n\n    const {\n        errorTextStyle,\n        errorColorReverseStyle,\n        headerTextStyle,\n        infoTextStyle,\n    } = styles;\n\n    return (\n        <Typography\n            tag={tag ? tag : 'p'}\n            use={label ? 'body2' : (use ? use : 'subtitle2')}\n            style={info ? infoTextStyle : (error ? errorTextStyle : (errorColorReverse ? errorColorReverseStyle : (accentHeader && headerTextStyle)))}\n            className={[label ? 'label' : 'text', mainHeader && 'text--main-header', sectionHeader && 'text--section-header', className]}\n            htmlFor={labelFor || htmlFor || null}\n            {...otherProps} >\n            {children}\n        </Typography>\n    );\n}\n\nconst styles = {\n    errorTextStyle: {\n        color: colors.error,\n    },\n    errorColorReverseStyle: {\n        color: '#fff',\n    },\n    infoTextStyle: {\n        color: colors.primary,\n        fontWeight: '400',\n    },\n    headerTextStyle: {\n        fontSize: 18,\n        fontWeight: 700,\n        marginTop: 0,\n        marginBottom: 10,\n        color: colors.primary,\n    },\n}\n\n\nexport { Text };\n","import React from 'react';\n\nimport { Text } from '../Text';\n\n\nexport const Loader = (props) => {\n    return <Text info role=\"alert\">Trwa inicjalizacja danych...</Text>\n}\n","export default __webpack_public_path__ + \"static/media/loading.96f909e5.svg\";","import React from 'react';\nimport loaderIcon from '../../../static/img/loading.svg';\n\nexport const LoaderIcon = (props) => <img src={loaderIcon} alt=\"Trwa ładowanie danych...\" />;\n","import React from 'react';\nimport { Button } from '@rmwc/button';\nimport { Elevation } from '@rmwc/elevation';\nimport { Icon } from '@rmwc/icon';\nimport { Toolbar, ToolbarRow, ToolbarSection, ToolbarTitle } from '@rmwc/toolbar';\nimport { ThemeProvider } from '@rmwc/theme';\nimport { Typography } from '@rmwc/typography';\nimport { MenuSurfaceAnchor, MenuSurface } from '@rmwc/menu';\nimport '@material/menu/dist/mdc.menu.css';\nimport '@material/menu-surface/dist/mdc.menu-surface.css';\nimport '@material/list/dist/mdc.list.css';\nimport '@material/button/dist/mdc.button.css';\nimport '@rmwc/icon/icon.css';\n\nimport { colors } from '../vars/vars';\nimport { Text } from './Text';\n\n\nconst Box = (props) => {\n    const {\n        ariaLabelMoreOptions,\n        boxTag,\n        boxWithMenu,\n        className,\n        children,\n        flexiblewidth,\n        fullwidth,\n        headerTag,\n        invalid,\n        selected,\n        subtitle,\n        titleOneRow,\n        titleTwoRows,\n        titleWithSubtitle,\n        ...otherProps\n    } = props;\n\n    const colorsToolbar = {\n        primary: colors.primary\n    };\n\n    const [open, setOpen] = React.useState(false);\n\n    let menuSection = (\n        <ToolbarSection alignEnd className=\"box__toolbar-section\">\n            <MenuSurfaceAnchor>\n                <Button\n                    title={ariaLabelMoreOptions}\n                    onClick={e => {\n                        setOpen(!open);\n                        e.currentTarget.blur();\n                    }}\n                    unelevated\n                    className=\"btn--icon-only btn--primary\" >\n                    <span className=\"sr-only\">\n                        {ariaLabelMoreOptions}\n                        {invalid && '. Uwaga, edytuj, aby poprawić błędy!'}\n                    </span>\n                    <Icon aria-hidden=\"true\" icon=\"more_vert\" />\n                </Button>\n                <MenuSurface open={open} onClose={evt => setOpen(false)} role=\"dialog\" >\n                    <nav className=\"box__corner-menu\">\n                        {boxWithMenu}\n                    </nav>\n                </MenuSurface>\n            </MenuSurfaceAnchor>\n        </ToolbarSection>\n    );\n\n    let toolbar;\n    if (![null, undefined].includes(titleOneRow)) {\n        toolbar = (\n            <Toolbar>\n                <ToolbarRow>\n                    <ToolbarSection alignStart className=\"box__toolbar-section box__title-section\">\n                        <ToolbarTitle tag={headerTag || 'h2'}>{titleOneRow}</ToolbarTitle>\n                    </ToolbarSection>\n                    {boxWithMenu && menuSection}\n                </ToolbarRow>\n            </Toolbar>\n        )\n    }\n\n    if (![null, undefined].includes(titleTwoRows)) {\n        toolbar = (\n            <Toolbar theme='primaryBg'>\n                <ToolbarRow>\n                    <ToolbarSection alignStart style={{zIndex: 0}} className=\"box__title-section\">\n                        <Typography use=\"subtitle2\">{subtitle}</Typography>\n                    </ToolbarSection>\n                    {boxWithMenu && menuSection}\n                </ToolbarRow>\n                <ToolbarRow>\n                    <ToolbarTitle tag={headerTag || 'h2'}>{titleTwoRows}</ToolbarTitle>\n                </ToolbarRow>\n            </Toolbar>\n        )\n    }\n\n    if (![null, undefined].includes(titleWithSubtitle)) {\n        toolbar = (\n            <Toolbar theme='primaryBg'>\n                <ToolbarRow>\n                    <ToolbarSection alignStart className=\"box__flex-title box__title-section\">\n                        <ToolbarTitle tag={headerTag || 'h2'}>{titleWithSubtitle}</ToolbarTitle>\n                    </ToolbarSection>\n                    {boxWithMenu && menuSection}\n                </ToolbarRow>\n                <ToolbarRow>\n                    <Typography use=\"subtitle2\">{subtitle}</Typography>\n                    {invalid ? <Text errorColorReverse style={{ marginRight: 25, marginBottom: 5 }}><Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /> Błędy!</Text> : ''}\n                </ToolbarRow>\n            </Toolbar>\n        )\n    }\n\n    let boxClassName = 'box ';\n    fullwidth && (boxClassName += 'box--long-content ');\n    flexiblewidth && (boxClassName += 'box--flexible ');\n    selected && (boxClassName += 'box--selected ')\n    className && (boxClassName += className);\n\n    return (\n        <Elevation z='3' tag={boxTag || 'section'} className={boxClassName} theme='background' {...otherProps}>\n            <ThemeProvider options={colorsToolbar} >\n                {toolbar}\n            </ThemeProvider>\n            <div className=\"box__content\">\n                {children}\n            </div>\n        </Elevation>\n    );\n}\n\nexport { Box };\n","// USAGE\n// <Breadcrumps>\n//     <li className=\"breadcrumps__link\">Link to upper content</li>\n//     <li className=\"breadcrumps__current\">Inactive text of current content</li>\n// </Breadcrumps>\n\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\n\nconst Breadcrumps = (props) => {\n    const {\n        className,\n        children,\n        isFront,\n        notZarzadzanieTrescia,\n    } = props;\n\n    let breadcrumpsClassName = 'breadcrumps ';\n    className && (breadcrumpsClassName += className);\n\n    return (\n        <nav className={breadcrumpsClassName}>\n            <ul className=\"breadcrumps__list\">\n                <li className=\"breadcrumps__link\"><Link to='/' title=\"Strona główna\"><Icon aria-hidden=\"true\" icon={{ icon: 'home', size: 'small' }} style={{ marginTop: 3 }}/></Link></li>\n                {!isFront && !notZarzadzanieTrescia && <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia'>Administracja treściami</Link></li>}\n                {children}\n            </ul>\n        </nav>\n    );\n}\n\nexport { Breadcrumps };\n","// <GridCustom /> without props gives you container with:\n// display: flex\n// flex-wrap: wrap\n// justify-content: flex-start\n\n// center prop makes the container content centered\n// centerHorizontal prop makes the container content centered horizontaly\n// centerVertical prop makes the container content centered verticaly\n// flexS prop makes the container displayed: flex from 600px up\n// flexM prop makes the container displayed: flex from 800px up\n// flexL prop makes the container displayed: flex from 1150px up\n// fullwidth prop gives justify-content: space-between\n// flexTop prop makes the container content justify-content: flex-start\n// flexEnd prop gives justify-content: flex-end\n// noWrap prop gives flex-wrap: nowrap\n\n// <GridCustom flexEnd className=\" box__button-container\"> - places button container always on bottom right\n\n\n\nimport React from 'react';\n\nconst GridCustom = (props) => {\n    const {\n        center,\n        centerHorizontal,\n        centerVertical,\n        className,\n        flexBottom,\n        flexEnd,\n        flexS,\n        flexM,\n        flexL,\n        flexTop,\n        fullheight,\n        fullwidth,\n        keyName,\n        noWrap,\n        tag,\n    } = props;\n\n    let gridClassName = 'grid-custom ';\n\n    if (flexS) {\n        gridClassName += 'grid-custom--flex-s '\n    } else if (flexM) {\n        gridClassName += 'grid-custom--flex-m '\n    } else if (flexL) {\n        gridClassName += 'grid-custom--flex-l '\n    };\n\n    fullheight && (gridClassName += 'grid-custom--full-height ');\n    fullwidth && (gridClassName += 'grid-custom--full-width ');\n    noWrap && (gridClassName += 'grid-custom--one-row ');\n    center && (gridClassName += 'grid-custom--center ');\n    centerHorizontal && (gridClassName += 'grid-custom--center-h ');\n    centerVertical && (gridClassName += 'grid-custom--center-v ');\n    flexEnd && (gridClassName += 'grid-custom--end ');\n    flexTop && (gridClassName += 'grid-custom--top ');\n    flexBottom && (gridClassName += 'grid-custom--bottom ');\n    className && (gridClassName += className);\n\n    const GridTag = tag ? tag : 'section';\n\n    return (\n        <GridTag\n            className={gridClassName}\n            key={keyName}\n        >\n            {props.children}\n        </GridTag>\n    );\n}\n\nexport { GridCustom };\n","// Possible button variants:\n// <ButtonStyled>No props</ButtonStyled> - blue text, no bg, no icon\n// <ButtonStyled lite>lite</ButtonStyled> - blue text, blue border, no icon\n// <ButtonStyled cancel>cancel</ButtonStyled> - gray text, gray border, no icon\n// <ButtonStyled next>next</ButtonStyled> - white text, blue bg, arrow_forward icon\n// <ButtonStyled prev>prev</ButtonStyled> - white text, gray bg, arrow_back icon\n// <ButtonStyled save>save</ButtonStyled> - white text, green bg, done icon\n// <ButtonStyled add>add</ButtonStyled> - white text, blue bg, add icon\n// <ButtonStyled remove>remove</ButtonStyled> - red text, red border, no icon\n// <ButtonStyled removeFull>removeFull</ButtonStyled> - white text, red bg, no icon\n// <ButtonStyled noMargin>noMargin</ButtonStyled> - removes site margin, gives: margin: .5em 0\n\n\nimport React from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\nimport '@material/button/dist/mdc.button.css';\nimport { GridCustom } from './GridCustom';\n\nimport { colors } from '../vars/vars';\n\n\nconst ButtonStyled = (props) => {\n    const {\n        add,\n        cancel,\n        children,\n        className,\n        disabled,\n        icon,\n        id,\n        lite,\n        next,\n        noMargin,\n        onClick,\n        prev,\n        primary,\n        print,\n        remove,\n        removeFull,\n        save,\n        tag,\n        to,\n        ...otherProps\n    } = props;\n\n    const {\n        buttonIconStyle,\n        cancelBtnStyle,\n        disabledBtnStyle,\n        prevBgStyle,\n        primaryBtnStyle,\n        outlineBtnStyle,\n        removeFullBgStyle\n    } = styles;\n\n    return (\n            <Button\n                className={[noMargin ? 'button--no-margin ' : '', className]}\n                danger={remove || removeFull}\n                disabled={disabled}\n                id={id}\n                outlined={lite || remove}\n                ripple={false}\n                style={disabled ? disabledBtnStyle : ( add || next || primary || print || save ? primaryBtnStyle : (prev ? prevBgStyle : (removeFull ? removeFullBgStyle : (remove || lite ? outlineBtnStyle: (cancel && cancelBtnStyle)))))}\n                tag={tag}\n                to={to}\n                unelevated={cancel || next || save || add || removeFull || prev || primary || print}\n                onClick={onClick}\n                {...otherProps}\n            >\n                <GridCustom centerVertical centerHorizontal>\n                    {(add || cancel || icon || next || prev || print || save) && (\n                        <Icon\n                            icon={\n                                next ? 'arrow_forward' : (prev ? 'arrow_back' : (save ? 'done' : (add ? 'add' : (cancel ? 'clear' : (print ? 'print' : icon)))))\n                            }\n                            aria-hidden=\"true\"\n                            style={buttonIconStyle} />\n                    )}\n                    {children}\n                </GridCustom>\n\n            </Button>\n    );\n}\n\nconst styles = {\n    cancelBtnStyle: {\n        backgroundColor: colors.darkBg\n    },\n    disabledBtnStyle: {\n        backgroundColor: colors.disabled,\n        color: '#000',\n        borderWidth: 0\n    },\n    primaryBtnStyle: {\n        backgroundColor: colors.primary\n    },\n    prevBgStyle: {\n        backgroundColor: colors.darkBg\n    },\n    removeFullBgStyle: {\n        backgroundColor: colors.error\n    },\n    outlineBtnStyle: {\n        borderWidth: 2,\n        backgroundColor: '#fff',\n    },\n    buttonIconStyle: {\n       marginRight: 10\n   }\n}\n\nexport { ButtonStyled };\n","import React from 'react';\nimport { ButtonStyled } from './ButtonStyled';\n\nconst ButtonCreatePdf = (props) => {\n    const {\n        children,\n        onClick,\n        pdfCreatingOn\n    } = props;\n\n    let pdfCreatingButtonLabel;\n\n    if (pdfCreatingOn) {\n        pdfCreatingButtonLabel = 'Tworzenie pliku pdf...'\n    } else {\n        pdfCreatingButtonLabel = 'Pobierz plik pdf'\n    }\n\n    return (\n        <ButtonStyled\n            className=\"btn--pdf-dowload\"\n            disabled={pdfCreatingOn}\n            onClick={onClick}\n            print\n        >\n            {children || pdfCreatingButtonLabel}\n            <span className=\"sr-only\"> Generowanie pliku PDF może potrwać kilka sekund.</span>\n        </ButtonStyled>\n    )\n}\n\n\nexport { ButtonCreatePdf };\n","import React from 'react';\nimport { Elevation } from '@rmwc/elevation';\nimport { ThemeProvider } from '@rmwc/theme';\nimport { Toolbar, ToolbarRow, ToolbarTitle } from '@rmwc/toolbar';\nimport '@material/toolbar/dist/mdc.toolbar.css';\n\nimport { colors } from '../vars/vars';\n\n\nconst Container = (props) => {\n    const {\n        containerTag,\n        children,\n        className,\n        style,\n        titleTag,\n        title\n    } = props;\n\n    const colorsToolbar = {\n        primary: colors.primary,\n    }\n\n\n    let toolbar;\n    if (title) {\n        toolbar = (\n            <ThemeProvider options={colorsToolbar}>\n                <Toolbar theme='primaryBg'>\n                    <ToolbarRow>\n                        <ToolbarTitle tag={titleTag ? titleTag : 'h2'}>{title}</ToolbarTitle>\n                    </ToolbarRow>\n                </Toolbar>\n            </ThemeProvider>\n        )\n    }\n\n    let containerClassName = 'container ';\n    className && (containerClassName += className);\n\n    return (\n        <Elevation\n            z='2'\n            tag={containerTag || 'section'}\n            className={containerClassName}\n            theme='background'\n            style={style}>\n            {toolbar}\n            <div className=\"container__content\">\n                {children}\n            </div>\n        </Elevation>\n    );\n}\n\nexport { Container };\n","// https://reactdatepicker.com/\n// https://www.npmjs.com/package/react-datepicker\n\nimport React, { Component } from 'react';\nimport dfIsSameDay from 'date-fns/isSameDay';\nimport DatePicker, { registerLocale } from \"react-datepicker\";\nimport { TextField } from '@rmwc/textfield';\nimport \"react-datepicker/dist/react-datepicker.css\";\n\nimport { fillWithLeadingZero } from '../../helpers';\n\nimport pl from 'date-fns/locale/pl';\nregisterLocale('pl', pl)\n\n\nconst WEEKDAYS = {\n    Monday: 'poniedziałek',\n    Tuesday: 'wtorek',\n    Wednesday: 'środa',\n    Thursday: 'czwartek',\n    Friday: 'piątek',\n    Saturday: 'sobota',\n    Sunday: 'niedziela',\n};\nconst MONTHS = {\n    January: 'styczeń',\n    February: 'luty',\n    March: 'marzec',\n    April: 'kwiecień',\n    May: 'maj',\n    June: 'czerwiec',\n    July: 'lipiec',\n    August: 'sierpień',\n    September: 'wrzesień',\n    October: 'październik',\n    November: 'listopad',\n    December: 'grudzień',\n};\n\n\nconst isSameDay = (date1, date2) => {\n    if (date1 && date2) {\n        return dfIsSameDay(date1, date2);\n    } else {\n        return !date1 && !date2;\n    }\n}\n\n\nclass ExtendedDatePicker extends DatePicker {\n\n    componentDidUpdate(prevProps, prevState) {\n        super.componentDidUpdate(prevProps, prevState);\n        if (this.calendar) {\n            const this_ = this;\n            this.calendar.componentDidUpdate = function(prevProps) {\n                this_.props.replaceDays();\n                if (this.props.preSelection && !isSameDay(this.props.preSelection, prevProps.preSelection)) {\n                    this.setState({\n                        date: this.props.preSelection\n                    });\n                } else if (this.props.openToDate && !isSameDay(this.props.openToDate, prevProps.openToDate)) {\n                    this.setState({\n                        date: this.props.openToDate\n                    });\n                }\n            };\n        }\n    }\n}\n\n\nclass DateCalendar extends Component {\n\n    // handlers\n\n    handleCalendarOpen = () => {\n        if (this.props.onCalendarOpen) {\n            this.props.onCalendarOpen();\n        }\n        this.handleTranslateCalendar();\n    }\n\n    handleMonthChange = () => {\n        // this method is needed for calendar with limited days\n        this.handleTranslateCalendar();\n        this.replaceDays();\n    }\n\n    handleTranslateCalendar() {\n        if (this.props.showMonthYearPicker) {\n            this.translateCalendarFields('button.react-datepicker__navigation--previous', 'Poprzedni rok');\n            this.translateCalendarFields('button.react-datepicker__navigation--next', 'Kolejny rok');\n        } else {\n            this.translateCalendarFields('button.react-datepicker__navigation--previous', 'Poprzedni miesiąc');\n            this.translateCalendarFields('button.react-datepicker__navigation--next', 'Kolejny miesiąc');\n        }\n    }\n\n    handleChange = (value) => {\n        if (value !== null) {\n            this.translateCalendarFields(\n                '.react-datepicker__month',\n                `Miesiąc-${value.getFullYear()}-${fillWithLeadingZero(value.getMonth() + 1)}`\n            );\n        }\n        this.props.onChange(value);\n    }\n\n    // helpers\n\n    // Translate .react-datepicker-popper fields to Polish\n    translateCalendarFields(querySelector, ariaLabel) {\n        if (!this.props.parentRef.current) { return }\n        const calendarField = this.props.parentRef.current.querySelector(querySelector);\n\n        if (calendarField) {\n            calendarField.setAttribute('aria-label', ariaLabel);\n        }\n    }\n\n    replacePartOfAriaLabel = (querySelector, englishPhrase, polishPhrase) => {\n        if (!this.props.parentRef.current) { return }\n        this.props.parentRef.current.querySelectorAll(querySelector).forEach(calendarField => {\n            const newAriaLabel = calendarField.getAttribute('aria-label').replace(\n                englishPhrase, polishPhrase);\n            calendarField.setAttribute('aria-label', newAriaLabel);\n        });\n    }\n\n    replaceDays = () => {\n        if (this.props.showMonthYearPicker) { return }\n        if (this.props.parentRef.current) {\n            this.replacePartOfAriaLabel('.react-datepicker__month', 'month', 'Miesiąc')\n            this.props.parentRef.current.querySelectorAll('.react-datepicker__day').forEach(calendarField => {\n                // 'Choose Sunday, March 1st, 2020'\n                const [weekDay, month, day, year] = calendarField.getAttribute('aria-label').replace(/,/g, '').split(' ').slice(1);\n                let day_, month_;\n                if (Object.keys(WEEKDAYS).includes(weekDay)) {\n                    day_ = day.replace('st', '').replace('nd', '').replace('rd', '').replace('th', '');\n                    month_ = MONTHS[month];\n                } else {\n                    day_ = month;\n                    month_ = day;\n                }\n                calendarField.setAttribute(\n                    'aria-label',\n                    `Wybierz ${WEEKDAYS[weekDay] || weekDay} ${day_} ${month_} ${year}`\n                );\n            });\n        }\n    }\n\n    render() {\n        const {\n            ariaDescribedby,\n            dateCalendarId,\n            dateFormatCustom,\n            dateFormat,\n            dateName,\n            disabled,\n            fullwidth,\n            invalid,\n            maxDate,\n            minDate,\n            showMonthYearPicker,\n            showTimeSelect,\n            showTimeSelectOnly,\n            timeIntervals,\n            timeCaption,\n            value,\n        } = this.props;\n\n        // NOTE! Don't set onFocus, because it destroy translation\n        return (\n            <ExtendedDatePicker\n                customInput={\n                    <TextField\n                        aria-describedby={ariaDescribedby}\n                        aria-label={`Wpisz lub wybierz z kalendarza datę ${dateName || ''} w formacie: ${dateFormat || 'rok myślnik miesiąc myślnik dzień'}.`}\n                        fullwidth={fullwidth}\n                        id={dateCalendarId}\n                        invalid={invalid}\n                    />\n                }\n                dateFormat={dateFormatCustom ? dateFormatCustom : \"yyyy-MM-dd\"}\n                disabled={disabled}\n                isClearable={![NaN, null, ''].includes(value)}\n                locale=\"pl\"\n                maxDate={maxDate}\n                minDate={minDate}\n                placeholderText=\"\"\n                replaceDays={this.replaceDays}\n                replacePartOfAriaLabel={this.replacePartOfAriaLabel}\n                selected={value}\n                showTimeSelect={showTimeSelect}\n                showTimeSelectOnly={showTimeSelectOnly}\n                timeIntervals={timeIntervals}\n                timeCaption={timeCaption}\n                onChange={this.handleChange}\n                onCalendarClose={this.props.onCalendarClose}\n                onCalendarOpen={this.handleCalendarOpen}\n                onMonthChange={this.handleMonthChange}\n                showMonthYearPicker={showMonthYearPicker}\n            />\n        );\n    }\n}\n\nexport { DateCalendar };\n","import React, { useEffect } from 'react';\n\nimport { setCustomInputAttributes, setCustomSelectAttributes } from '../../helpers';\nimport { Text } from './Text';\n\nconst FieldWithLabel = (props) => {\n    const {\n        className,\n        children,\n        inputRef,\n        labelFor,\n        label,\n        selectRef,\n        tag,\n        ...otherProps\n    } = props;\n\n    let fieldWithLabelClassName = 'field-with-label ';\n    className && (fieldWithLabelClassName += className);\n\n    // Add selectRef={React.createRef()} to <FieldWithLabel> with select and inputRef={React.createRef()} to dateTime input.\n    // Adding inputRef to text input forces proper reading of aria-label of input trailing icon (for cleaning text input value).\n    useEffect(() => {\n        if (selectRef && selectRef.current !== null) {\n            setCustomSelectAttributes(selectRef);\n        }\n\n        if (inputRef && inputRef.current !== null) {\n            setCustomInputAttributes(inputRef);\n        }\n    });\n\n    return (\n        <div\n            className={fieldWithLabelClassName}\n            ref={selectRef || inputRef}\n            {...otherProps}\n        >\n            <Text label tag={tag ? tag : 'p'} labelFor={tag === 'label' && labelFor}>{label}</Text>\n            {children}\n        </div>\n    );\n}\n\nexport { FieldWithLabel };\n","import React from 'react';\nimport ReactSelect from 'react-select';\nimport { Icon } from '@rmwc/icon';\n\n\nconst instructionsAriaMessage = (event, context) => {\n    const { isSearchable, isMulti, label, isDisabled } = context;\n    switch (event) {\n        case 'menu':\n            return `Użyj strzałek góra, dół, aby wybrać opcję ${isDisabled ? '' : ', wciśnij Enter, aby wybrać aktualnie zaznaczoną opcję'}, wciśnij Escape żeby wyjść z menu, wciśnij Tab żeby wybrać opcję i wyjść z menu.`;\n        case 'input':\n            return `${label ? label : 'Select'} jest zaznaczona ${\n                isSearchable ? ', wpisz, żeby odświeżyć listę. Lista opcji zawęzi się po wpisaniu kolejnych znaków.' : ''\n            }, wciśnij strzałkę w dół, aby otworzyć menu, ${\n                isMulti ? ' wciśnij strzałkę w lewo, żeby zaznaczyć wybraną wartość.' : ''\n            }`;\n        case 'value':\n            return 'Użyj strzałek w lewo i w prawo aby przełączać się między zaznaczonymi wartościami, wciśnij Backspace, aby nie zaznaczyć wartości.';\n        default:\n            return null;\n    }\n};\n\n\nconst valueEventAriaMessage = (event, context) => {\n    const { value, isDisabled } = context;\n    if (!value) return;\n    switch (event) {\n        case 'deselect-option':\n        case 'pop-value':\n        case 'remove-value':\n            return `opcja ${value}, niewybrana.`;\n        case 'select-option':\n            return isDisabled ? `opcja ${value} jest nieaktywna. Wybierz inną opcję.` : `Wybrano opcję ${value}.`;\n            default:\n                return null;\n    }\n};\n\n\nconst valueFocusAriaMessage = ({focusedValue, getOptionLabel, selectValue}) => {\n    return `wartość ${getOptionLabel(focusedValue)} jest zaznaczona, ${selectValue.indexOf(focusedValue) + 1} z ${selectValue.length}.`\n}\n\n\nexport const optionFocusAriaMessage = ({focusedOption, getOptionLabel, options}) => {\n    return `Opcja ${getOptionLabel(focusedOption)}, zaznaczona ${focusedOption.isDisabled ? ' jest nieakywna' : ''}, ${options.indexOf(\n        focusedOption) + 1} z ${options.length}.`\n}\n\n\nexport const resultsAriaMessage = ({inputValue, screenReaderMessage}) => {\n    return `${screenReaderMessage}${inputValue ? ' dla szukanej frazy ' + inputValue : ''}.`\n}\n\n\nclass Select extends ReactSelect {\n\n    componentDidMount() {\n        const this_ = this.select;\n        this_.announceAriaLiveContext = ({event, context}) => {\n            this_.setState({\n                ariaLiveContext: instructionsAriaMessage(event, {\n                    ...context,\n                    label: this_.props['aria-label'],\n                }),\n            });\n        };\n        this_.announceAriaLiveSelection = ({event, context}) => {\n            this_.setState({\n                ariaLiveSelection: valueEventAriaMessage(event, context),\n            });\n        };\n        this_.constructAriaLiveMessage = () => {\n            const {\n                ariaLiveContext,\n                selectValue,\n                focusedValue,\n                focusedOption,\n            } = this_.state;\n            const { options, menuIsOpen, inputValue, screenReaderStatus } = this_.props;\n\n            // An aria live message representing the currently focused value in the select.\n            const focusedValueMsg = focusedValue ? valueFocusAriaMessage({focusedValue, getOptionLabel: this_.getOptionLabel, selectValue}) : '';\n            // An aria live message representing the currently focused option in the select.\n            const focusedOptionMsg = focusedOption && menuIsOpen ? optionFocusAriaMessage({focusedOption, getOptionLabel: this_.getOptionLabel, options}): '';\n            // An aria live message representing the set of focusable results and current searchterm/inputvalue.\n            const resultsMsg = resultsAriaMessage({inputValue, screenReaderMessage: screenReaderStatus({ count: this_.countOptions() })});\n\n            return `${focusedValueMsg} ${focusedOptionMsg} ${resultsMsg} ${ariaLiveContext}`;\n        };\n\n        this_.renderDropdownIndicator = () => {\n            const { DropdownIndicator } = this_.components;\n            if (!DropdownIndicator) return null;\n\n            const innerProps = {\n                onMouseDown: this_.onDropdownIndicatorMouseDown,\n                onTouchEnd: this_.onDropdownIndicatorTouchEnd,\n                'aria-hidden': 'true',\n                id: this.props.indicatorId,\n            };\n\n            return (\n                <DropdownIndicator\n                    {...this_.commonProps}\n                    innerProps={innerProps}\n                    isDisabled={this_.props.isDisabled}\n                    isFocused={this_.state.isFocused}\n                />\n            );\n        };\n\n        this_.renderClearIndicator = () => {\n            const { ClearIndicator } = this_.components;\n            const { isDisabled, isLoading } = this_.props;\n\n            if (\n                !this_.isClearable() ||\n                !ClearIndicator ||\n                isDisabled ||\n                !this_.hasValue() ||\n                isLoading\n            ) {\n                return null;\n            }\n\n            return (\n                <button\n                    aria-label=\"Wyczyść pole\"\n                    className='text-field-clear'\n                    type=\"button\"\n                    onClick={() => { this_.clearValue()} }\n                >\n                    <Icon aria-hidden=\"true\" icon=\"cancel\" className=\"select-custom__icon\" />\n                </button>\n            );\n        }\n    }\n}\n\n\nexport { Select };\n","import React from 'react';\n\nimport { customSelectStyles } from '../vars/vars';\nimport { DateCalendar } from './DateCalendar';\nimport { FieldWithLabel } from './FieldWithLabel';\nimport { Select } from './Select';\n\nimport { SEARCH_DATE_CHOICES } from '../../const';\nimport { dateToString } from '../../helpers';\n\n\nconst CHOICES_DICT = {};\nfor (let ch of SEARCH_DATE_CHOICES) {\n    CHOICES_DICT[ch[0]] = ch[1];\n}\n\n\nconst DateSelect = (props) => {\n    const type = props.value.type || '0';\n    const selectValue = {value: type, label: CHOICES_DICT[type]};\n\n    const from = !!props.value.from ? new Date(props.value.from) : '';\n    const to = !!props.value.to ? new Date(props.value.to) : '';\n    const odInputRef = React.createRef();\n    const doInputRef = React.createRef();\n\n    return (\n        <>\n            <Select\n                screenReaderStatus={() => {return ''}}\n                className=\"select-custom\"\n                options={SEARCH_DATE_CHOICES.map(choice => ({value: choice[0], label: choice[1], data: {from: choice[2], to: choice[3]}}))}\n                value={selectValue}\n                onChange={selectedOption => props.updateDate(\n                    {type: selectedOption.value, ...selectedOption.data})}\n                styles={customSelectStyles}\n                aria-describedby={props.ariaDescribedby}\n                aria-label={props.selectAriaLabel || ''}\n                noOptionsMessage={() => 'Brak wybranej opcji'}\n            />\n            {selectValue.value === 'custom' && (\n                <>\n                    <FieldWithLabel label=\"Od\" tag=\"label\" inputRef={odInputRef}>\n                        <DateCalendar\n                            dateName=\"Od\"\n                            maxDate={to || undefined}\n                            parentRef={odInputRef}\n                            value={from}\n                            onChange={date => props.updateDate({from: dateToString(date)})} />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Do\" tag=\"label\" inputRef={doInputRef}>\n                        <DateCalendar\n                            dateName=\"Do\"\n                            minDate={from || undefined}\n                            parentRef={doInputRef}\n                            value={to}\n                            onChange={date => props.updateDate({to: dateToString(date)})} />\n                    </FieldWithLabel>\n                </>\n            )}\n        </>\n    )\n}\n\n\nexport { DateSelect };\n","import React from 'react';\nimport FocusTrap from 'focus-trap-react';\nimport { Dialog, DialogContent, DialogTitle } from '@rmwc/dialog';\n\nconst DialogCustom = (props) => {\n    const {\n        ariaLabelledby,\n        children,\n        dialogRef,\n        dialogTitle,\n        dialogTitleError,\n        onClose,\n        onKeyDown,\n        ...otherProps\n    } = props;\n\n    let title = null;\n\n    if (dialogTitle) {\n        title = <DialogTitle id={ariaLabelledby || null}>{dialogTitle}</DialogTitle>;\n    }\n\n    if (dialogTitleError) {\n        title = <DialogTitle id={ariaLabelledby || null} className=\"dialog-error\">{dialogTitleError}</DialogTitle>;\n    }\n\n    function handleKeyDown(ev) {\n        if (onKeyDown) {\n            onKeyDown(ev);\n        } else if (ev.key === 'Escape') {\n            onClose();\n        }\n    }\n\n    return (\n        <>\n            <Dialog\n                aria-labelledby={ariaLabelledby || null}\n                aria-modal=\"true\"\n                open\n                preventOutsideDismiss={true}\n                role=\"dialog\"\n                ref={dialogRef || null}\n                onClose={onClose}\n                onKeyDown={handleKeyDown}\n                {...otherProps}\n            >\n                <FocusTrap focusTrapOptions={{\n                    fallbackFocus: '#dialogContainer'\n                }}>\n                    <div id=\"dialogContainer\" tabIndex=\"-1\">\n                        <div tabIndex={0}>{title}</div>\n                        <DialogContent>\n                            {children}\n                        </DialogContent>\n                    </div>\n                </FocusTrap>\n            </Dialog>\n        </>\n    )\n}\n\n\nexport { DialogCustom };\n","// USAGE:\n// Do not provide any props if you use <Ellipsis /> to normal text paragraph,\n// which line-height = 25px (font-size = 16px).\n// If font-size is bigger, provide `lineHeight` prop.\n// To set lineHeight use number of px, but do not add px unit ex.: lineHeight={10}.\n// There are 4 lines by default.\n// If you want to show different number of lines, put it in `lines` prop\n\nimport React, { useEffect, useState } from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\n\nconst Ellipsis = (props) => {\n    const {\n        children,\n        lineHeight,\n        lines,\n    } = props;\n\n    let ellipsisRef = React.createRef();\n    let ellipsisMaxHeight = (lines || 4) * (lineHeight || 25);\n\n    const [ellipsis, setEllipsisContainer] = useState(true);\n    const [longText, setLongText] = useState(true);\n\n    useEffect(() => {\n        // If text is short (height of text is smaller than ellipsis container height (ellipsisMaxHeight), dont set the ellipsis container.\n        if (ellipsisRef.current.querySelector('.text').clientHeight <= ellipsisMaxHeight) {\n            setLongText(false);\n        }\n    }, [ellipsisRef, ellipsisMaxHeight]);\n\n    return (\n        <>\n            <div\n                className=\"ellipsis-container\"\n                ref={ellipsisRef}\n                style={(longText && ellipsis) ? { maxHeight: ellipsisMaxHeight, overflow: 'hidden'} : null} >\n                {children}\n            </div>\n            {longText && (\n                <div className=\"ellipsis\" style={{ bottom: (lineHeight || 25) }}>\n                    {ellipsis &&\n                        <span className=\"ellipsis__mask\" style={{ height: (lineHeight || 25) }}></span>\n                    }\n                    <Button\n                        className=\"ellipsis__button\"\n                        onClick={() => setEllipsisContainer(!ellipsis)}\n                        style={!ellipsis && { marginTop: (lineHeight || 25) }}\n                    >\n                        <Icon aria-hidden=\"true\" icon={ellipsis ? 'keyboard_arrow_down' : 'keyboard_arrow_up'} />\n                        {ellipsis ? 'Czytaj więcej' : 'Ukryj tekst'}\n                    </Button>\n                </div>\n            )}\n        </>\n    );\n}\n\nexport { Ellipsis };\n","import React from 'react';\n\n\nconst GridCellCustom = (props) => {\n    const {\n        className,\n        children,\n        fill,\n        customRef,\n        ...otherProps\n    } = props;\n\n    let gridCellClassName = 'grid-custom__cell ';\n    className && (gridCellClassName += className);\n\n    return (\n        <div\n            className={gridCellClassName}\n            style={fill && {flexGrow: '1'}}\n            ref={customRef}\n            {...otherProps} >\n            {children}\n        </div>\n    );\n}\n\nexport { GridCellCustom };\n","import React from 'react';\nimport { LinearProgress } from '@rmwc/linear-progress';\nimport '@material/linear-progress/dist/mdc.linear-progress.css';\n\n\nconst LinearProgressCustom = (props) => {\n    const {\n        className,\n        classNameInfo,\n        progress\n    } = props;\n\n    let progressBarClassName = 'progress-bar ';\n    className && (progressBarClassName += className);\n\n    let progressBarInfoClassName = 'progress-bar__progress-info ';\n    className && (progressBarInfoClassName += classNameInfo);\n\n    return (\n        <div className={progressBarClassName} >\n            <p className={progressBarInfoClassName}>\n                <span aria-hidden=\"true\">0%</span>\n                <span aria-hidden=\"true\">100%</span>\n            </p>\n            <LinearProgress\n                progress={progress}\n                aria-valuemin={0}\n                aria-valuemax={100}\n                aria-valuenow={progress * 100}\n            />\n        </div>\n    );\n}\n\nexport { LinearProgressCustom };\n","import React from 'react';\n\nimport { ListItem, ListItemGraphic } from '@rmwc/list';\nimport { Theme } from '@rmwc/theme';\nimport { Typography } from '@rmwc/typography';\n\nimport '@material/theme/dist/mdc.theme.css';\nimport '@material/list/dist/mdc.list.css';\nimport '@material/typography/dist/mdc.typography.css';\n\n\nconst MenuBasic = React.forwardRef((props, ref) => {\n    return (\n        <Theme tag=\"nav\" use=\"primaryBg\" className=\"menu-basic\">\n            {props.title && props.title.length > 0 && (\n                <Typography tag=\"h2\" use=\"headline5 onPrimary\" theme={'onPrimary'} className=\"ogloszenie-progress-title\">{props.title}</Typography>\n            )}\n            <ul ref={ref} className=\"ogloszenie-progress-list\" tabIndex=\"-1\">\n                {props.children.map((link) =>\n                    <li key={link.id}>\n                        <ListItem\n                            className=\"ogloszenie-progress-list__button\"\n                            disabled={props.disabled}\n                            id={`${link.name}_button_id`}\n                            tag=\"button\"\n                            onClick={() => (props.disabled || (props.disabledFrom && props.disabledFrom <= link.id)) ? {} : link.onClick(link.id)}\n                        >\n                            <ListItemGraphic\n                                aria-hidden=\"true\"\n                                use=\"onPrimary\"\n                                icon={(\n                                    props.addProgressIcon && props.currentMenuLink !== null && link.id < props.currentMenuLink)\n                                    ? 'lens'\n                                    : (props.currentMenuLink !== null && link.id === props.currentMenuLink ? 'adjust' : 'panorama_fish_eye'\n                                )}\n                                style={styles.iconStyle}/>\n                            <ListItemGraphic\n                                aria-hidden=\"true\"\n                                use=\"onPrimary\"\n                                icon={ props.errors[link.name] === true ? 'error_outline' : (props.errors[link.name] === false ? 'done' : '')}\n                                style={styles.iconStyle}/>\n                            <Typography\n                                theme={'onPrimary'}\n                                use=\"body2\" >\n                                {link.label}\n                                <span className=\"sr-only\">\n                                    {\n                                        (\n                                            (props.currentMenuLink !== null && link.id < props.currentMenuLink)\n                                                ? ' Wypełnione.'\n                                                : (\n                                                    props.currentMenuLink !== null && link.id === props.currentMenuLink\n                                                        ? ' W trakcie wypełniania.' : ' Przyszły etap.'\n                                                )\n                                        ) + (\n                                            props.errors[link.name] === true\n                                                ? ' Wymaga uwagi.'\n                                                : (props.errors[link.name] === false ? ' Poprawna walidacja.' : '')\n                                        )\n                                    }\n                                </span>\n                            </Typography>\n                        </ListItem>\n                    </li>\n                )}\n            </ul>\n        </Theme>\n    )\n})\n\nconst styles = {\n    iconStyle: {\n        color: '#fff'\n    }\n}\n\n\nexport { MenuBasic };\n","// Don't forget to add menu button trigger in component where <MenuDrawer /> is placed\n// e.g. <IconButton onClick={() => {this.setState(prevState => ({openMenu: !prevState.openMenu}))}} icon=\"menu\" />\n\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { Drawer, DrawerContent } from '@rmwc/drawer';\nimport { ListDivider, ListItem, ListItemGraphic, ListItemText } from '@rmwc/list';\nimport '@material/drawer/dist/mdc.drawer.css';\nimport '@material/icon-button/dist/mdc.icon-button.css';\nimport '@material/list/dist/mdc.list.css';\n\nimport { MenuContext } from '../../context/menuContext';\nimport { UserContext } from '../../context/user-context';\n\nimport ueLogo from '../../static/img/fe_ue_logos.png'\nimport { Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\nimport { fetchApi } from '../../fetch';\n\nconst MenuDrawer = (props) => {\n    const {\n        currentMenuLink,\n        mobile,\n        openMenu,\n        onMenuClose,\n    } = props;\n\n    const { updateMenuKey, refreshBadgesCount } = useContext(MenuContext);\n\n    const location = useLocation();\n\n    const [badges, setBadges] = useState();\n\n    const { user } = useContext(UserContext);\n\n    useEffect(() => {\n        if(user?.id !== null) {\n            fetchApi(\n                '/api/badge/menu',\n                'GET',\n                {},\n                {},\n                (response) => {\n                    setBadges(response);\n                },\n                () => {},\n                () => {})\n        }\n\n    }, [user, refreshBadgesCount]);\n\n    function renderUeLogo() {\n        if (location.pathname != '/') {\n            return (\n                <footer style={{textAlign: \"center\"}}>\n                    <img src={ueLogo} alt='Zestawienie znaków: Fundusze Europejskie, Barwy Rzeczypospolitej Polskiej, Unia Europejska' />\n                </footer>\n            )\n        }\n    }\n\n    const renderBadge = (linkName) => {\n\n        const map = {\n            advertisements: badges?.my_advertisement_badge_count,\n            offers: badges?.my_offer_set_badge_count,\n            newsletter: badges?.favorite_advertisement_badge_count\n        };\n\n        const value = map[linkName];\n\n        return value > 0 ? <Badge align=\"inline\" label={value} size=\"small\"/> : <></>\n    }\n\n    return (\n        <Drawer modal={mobile} dismissible={!mobile} open={!mobile ? true : openMenu} onClose={onMenuClose}>\n                <DrawerContent style={{display: \"flex\", flexDirection: \"column\"}}>\n                    <nav style={{flexGrow: \"1\"}}>\n                        <ul>\n                            {props.children.map((link) =>\n                                <li\n                                    key={link.id}\n                                    onClick={updateMenuKey}\n                                >\n                                    <ListItem tag={Link} to={link.linkTo} className=\"menu-item\">\n                                        <ListItemGraphic\n                                            aria-hidden=\"true\"\n                                            icon={link.icon}\n                                            theme={(currentMenuLink && link.id === currentMenuLink) ? 'primary' : 'textSecondaryOnLight'} />\n                                            <ListItemText theme={(currentMenuLink && link.id === currentMenuLink) ? 'primary' : 'textSecondaryOnLight'}>\n                                                {link.label}\n                                            </ListItemText>\n                                            {renderBadge(link.name)}\n                                    </ListItem>\n                                    <ListDivider />\n                                </li>\n                            )}\n                        </ul>\n                    </nav>\n                    {renderUeLogo()}\n                </DrawerContent>\n        </Drawer>\n    )\n}\n\n\nexport { MenuDrawer };\n","export default \"data:image/png;base64,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\"","import React from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { Text } from './Text'\n\nconst Message = (props) => {\n    const {\n        className,\n        children,\n        error,\n        id,\n        messageIcon,\n        messageTitle,\n        role,\n        success\n    } = props;\n\n    let basicClassName = 'message'\n\n    if (error) {\n        basicClassName += ' message--error'\n    } else if (success) {\n        basicClassName += ' message--success'\n    }\n\n    return (\n        <div className={basicClassName + ` ${className || ''}`} id={id}>\n            <Icon icon={messageIcon} className=\"message__icon\" aria-hidden=\"true\" />\n            <Text\n                aria-live={role ? null : 'assertive'}\n                className=\"message__title\"\n                role={role || 'alert'}\n                tag=\"h2\"\n            >\n                {messageTitle}\n            </Text>\n            {children && <Text className=\"message__additional-info\">{children}</Text>}\n        </div>\n    )\n}\n\nexport { Message };\n","import React, { useContext } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { Box } from '../Box';\nimport { FieldWithLabel } from '../FieldWithLabel';\nimport { Text } from '../Text';\n\n\nconst EMPTY_VALUE = 'Brak danych';\n\n\nexport const AuditData = ({\n    createdAt,\n    createdBy,\n    modifiedAt,\n    modifiedBy,\n    titleOneRow,\n    ...boxProps\n}) => {\n    const { user } = useContext(UserContext);\n    if (!user.identifier) { return null }\n    return (\n        <Box\n            fullwidth\n            titleOneRow={titleOneRow || 'Dane audytowe'}\n            {...boxProps}\n        >\n            <section className=\"grid-custom grid-custom--flex-m grid-custom--full-width audit-meta\">\n                <>\n                    <FieldWithLabel label=\"Kto utworzył\">\n                        <Text>{createdBy || EMPTY_VALUE}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Kiedy utworzył\">\n                        <Text>{createdAt || EMPTY_VALUE}</Text>\n                    </FieldWithLabel>\n                </>\n                <>\n                    <FieldWithLabel label=\"Kto modyfikował\">\n                        <Text>{modifiedBy || EMPTY_VALUE}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Kiedy modyfikował\">\n                        <Text>{modifiedAt || EMPTY_VALUE}</Text>\n                    </FieldWithLabel>\n                </>\n            </section>\n        </Box>\n    )\n};\n","import React from 'react';\n\nimport { ButtonStyled, GridCustom } from'../../common';\n\n\nexport const CancelSaveButtonsRow = ({\n    disabled, disabledSave, cancelText, saveText, onCancel, onSave\n}) => {\n    return (\n        <GridCustom flexEnd className=\" box__button-container\">\n            <ButtonStyled cancel disabled={disabled} onClick={onCancel}>\n                {cancelText || 'Anuluj'}\n            </ButtonStyled>\n            <ButtonStyled\n                disabled={disabled || disabledSave}\n                primary\n                onClick={onSave}>\n                {saveText || 'Zapisz'}\n            </ButtonStyled>\n        </GridCustom>\n    )\n}\n","import React from 'react';\n\nimport { Text } from '../Text';\n\n\nexport const ErrorList = ({containerId, errorList}) => {\n    return (\n        <ul id={containerId}>\n            {errorList.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}\n        </ul>\n    )\n}\n","import React from 'react';\n\nimport { GridCustom, Text } from'../../common';\n\n\nexport const FetchErrorWithOkayButton = ({\n    buttonLabel,\n    infoMsg,\n    message,\n    onClickOkay,\n}) => {\n    return (\n        <GridCustom centerVertical className=\"fetch-error-with-ok-btn\">\n            <Text error={!infoMsg} info={infoMsg} role=\"alert\">{message}</Text>\n            <button onClick={onClickOkay} className={`fetch-btn ${infoMsg ? 'fetch-btn--info' : 'fetch-btn--error'}`}>{buttonLabel || 'OK'}</button>\n        </GridCustom>\n    )\n}\n","import React from 'react';\n\nimport { ButtonStyled } from'../ButtonStyled';\n\n\nexport const FiltersButton = ({filtersCounter: counter, filteringLabel, onOpenFilters}) => {\n    return (\n        <ButtonStyled\n            lite\n            onClick={e => {\n                onOpenFilters();\n                e.currentTarget.blur();\n            }}>\n            {filteringLabel || 'Filtruj listę'}\n            <span className=\"sr-only\"> Liczba aktywnych filtrów: </span>\n            <span className=\"btn--counter  btn--counter-primary\" title=\"Wybrane filtry\">{counter}</span>\n        </ButtonStyled>\n    )\n}\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Text } from'../../common';\n\n\nexport const InfoTextWithIcon = ({message, icon, ...props}) => {\n    return (\n        <Text role=\"status\" className=\"success-text\">\n            <Icon icon={icon || 'error'} aria-hidden={true} />\n            {message}\n        </Text>\n    )\n}\n","import React from 'react';\n\nimport { Message } from '../Message';\n\n\nexport const NotPermittedPage = ({ message }) => {\n    return (\n        <Message\n            messageIcon=\"report_problem\"\n            messageTitle=\"Wystąpił błąd\" >\n            {message || 'Nie masz uprawnień do przeglądania tej strony.'}\n        </Message>\n    );\n}\n","import React from 'react';\n\nimport { Text } from '../Text';\n\n\nexport const PaginatedListHeader = ({title, total}) => {\n    return (\n        <div className=\"section-header\">\n            <Text tag=\"h1\" sectionHeader>{title}</Text>\n            <Text info className=\"text--counter\">Liczba wyników: {total}</Text>\n        </div>\n    )\n}\n","import React from 'react';\n\nimport { customSelectStyles } from '../../vars/vars';\nimport { FieldWithLabel, Select } from '../../common';\n\n\nexport const SortersSelect = ({selectedSort, sortingLabel, sortingValues, onChangeSort}) => {\n    // sortingValues as a list [[value1, label1], [value2, label2]]\n    return (\n        <FieldWithLabel\n            label={sortingLabel || \"Sortuj listę\"}\n            tag=\"label\"\n            selectRef={React.createRef()}\n            className=\"search__select-sorter\"\n            tabIndex=\"-1\">\n            <Select\n                aria-label={sortingLabel}\n                className=\"selectClassName\"\n                options={(sortingValues || []).map(value => ({value: value[0], label: value[1]}))}\n                noOptionsMessage={() => 'Brak wybranej opcji'}\n                screenReaderStatus={() => {return ''}}\n                styles={customSelectStyles}\n                value={selectedSort}\n                onChange={onChangeSort}\n            />\n        </FieldWithLabel>\n    )\n}\n","import React, {useRef, useState} from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\nimport { MenuSurfaceAnchor, MenuSurface } from '@rmwc/menu';\n\nconst MoreOptionsButton = (props) => {\n  const [open, setOpen] = useState(false); \n  const menuContentRef = useRef();\n  const {\n    children,\n    className,\n    menuAriaLabel,\n    ...otherProps\n  } = props;\n\n  const handleOpen = () => {\n    menuContentRef.current.focus();\n  }\n\n  return (\n    <MenuSurfaceAnchor {...otherProps}>\n      <Button\n        aria-label={menuAriaLabel}\n        onClick={e => {\n          setOpen(!open);\n          e.currentTarget.blur();\n        }}\n        unelevated\n        className=\"more-options__btn\" >\n        <Icon aria-hidden=\"true\" icon=\"more_horiz\" className=\"more-options__icon\" />\n      </Button>\n      <MenuSurface\n        anchorCorner=\"bottomLeft\"\n        className={`more-options__menu ${className || ''}`}\n        onClose={() => setOpen(false)}\n        onOpen={handleOpen}\n        open={open}\n      >\n        <>\n          <div ref={menuContentRef} aria-hidden={true} tabIndex={0} />\n          <nav role=\"dialog\">\n            {children}\n          </nav>\n        </>\n      </MenuSurface>\n    </MenuSurfaceAnchor>\n  );\n}\n\nexport { MoreOptionsButton };\n","import React from 'react';\nimport { Typography } from '@rmwc/typography';\nimport { ButtonStyled } from '.';\n\n\nconst NextStep = (props) => {\n    const {\n        className,\n        disabled,\n        onClick,\n        prevStep,\n        stepTitle\n    } = props;\n\n    let nextStepClassName = 'next-step ';\n    className && (nextStepClassName += className);\n\n    return (\n        <aside className={nextStepClassName}>\n            <nav className='next-step__content'>\n                <Typography use='button' theme={'textHintOnBackground'}>{prevStep ? 'Poprzedni' : 'Następny'} krok</Typography>\n                {prevStep && <ButtonStyled disabled={disabled} onClick={onClick} prev><span className=\"sr-only\">Poprzedni krok </span>{stepTitle}</ButtonStyled>}\n                {!prevStep && <ButtonStyled disabled={disabled} onClick={onClick} next><span className=\"sr-only\">Następny krok </span>{stepTitle}</ButtonStyled>}\n            </nav>\n        </aside>\n    );\n}\n\nexport { NextStep };\n","// TextFieldCustom adds clear field (onClear) function to text field\n\nimport React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { TextField } from '@rmwc/textfield';\n\n\nclass TextFieldCustom extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            isInputFocused: false,\n            isIconClicked: false,\n        };\n        this.blurInputTimeout = null;\n\n        this.handleBlurInput = this.handleBlurInput.bind(this);\n        this.handleClickIcon = this.handleClickIcon.bind(this);\n        this.handleFocusInput = this.handleFocusInput.bind(this);\n    }\n\n    // basic functions\n\n    componentWillUnmount() {\n        if (this.blurInputTimeout !== null) {\n            clearTimeout(this.blurInputTimeout);\n            this.blurInputTimeout = null;\n        }\n    }\n\n    // handlers\n\n    handleClickIcon(ev) {\n        this.setState({isIconClicked: true}, () => {\n            if (this.props.onClear) {\n                this.props.onClear(ev);\n            }\n            this.setState({isIconClicked: false});\n        });\n    }\n\n    // TODO: if icon to clear text field is visible always when the field is not empty, handleBlurInput(ev) and handleFocusInput(ev) should be deleted.\n    handleBlurInput(ev) {\n        if (this.props.onBlur) {\n            this.props.onBlur(ev);\n        }\n        this.blurInputTimeout = setTimeout(() => {\n            if (!this.state.isIconClicked) {\n                this.setState({isInputFocused: false});\n            }\n        }, 150);\n    }\n\n    handleFocusInput(ev) {\n        if (this.props.onFocus) {\n            this.props.onFocus(ev);\n        }\n        this.setState({isInputFocused: true});\n    }\n\n    // rendering\n\n    render() {\n        const props_ = Object.assign({}, this.props, {\n            onBlur: this.handleBlurInput,\n            onFocus: this.handleFocusInput,\n        });\n        // this is not a basic component prop, it throws error if declared and not used\n        delete props_['onClear'];\n        // this is not a basic component prop, it should be deleted not to propagate when not used\n        delete props_['clearFieldContext'];\n\n        return (\n            <div className=\"text-field-custom-container\">\n                <TextField autoFocus={this.props.autoFocus || false} {...props_} />\n                {props_.value.length ? (\n                    <button\n                        className=\"text-field-clear\"\n                        onClick={this.handleClickIcon}\n                        type=\"button\"\n                    >\n                        <span className=\"sr-only\">Wyczyść pole {this.props.clearFieldContext}</span>\n                        <Icon aria-hidden=\"true\" icon=\"cancel\" />\n                    </button>\n                ) : null}\n            </div>\n        )\n    }\n};\n\n\nexport { TextFieldCustom };\n","import React, { Component } from 'react';\n\nimport { roundStringTo } from '../../helpers';\nimport { FieldWithLabel } from './FieldWithLabel';\nimport { Text } from './Text';\nimport { TextFieldCustom } from './TextFieldCustom';\n\n\nclass NumberTextField extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {value: props.value || ''};\n    }\n\n    // handlers\n\n    handleBlur = (ev) => {\n        let value = roundStringTo(ev.target.value);\n        this.setState(\n            {value},\n            () => this.props.onChange(value)\n        );\n    }\n\n    handleChange = (ev) => {\n        let value = ev.target.value;\n        this.setState(\n            prevState => {\n                if (value.indexOf(',') === -1 && value.length > 24) {\n                    value = prevState.szacunkowaWartosc;\n                }\n                return {value: value}\n            },\n            () => this.props.onChange(value)\n        );\n    }\n\n    handleKeyPress = (ev) => {\n        const value = this.state.value;\n        const valueLenth = value.length;\n        const key = ev.key;\n        const keyIndex = ev.target.selectionStart;\n        if (!/[\\d,]/.test(key)) {\n            ev.preventDefault();\n            return\n        }\n        if (key === ',') {\n            if (value.indexOf(',') > -1 || valueLenth === 0) {\n                ev.preventDefault();\n                return\n            }\n            if (keyIndex < valueLenth - 2) {\n                ev.preventDefault();\n                return\n            }\n        } else {\n            // it's digit\n\n            const comaIndex = value.indexOf(',');\n\n            if (comaIndex === -1 && valueLenth === 24) {\n                ev.preventDefault();\n                return\n            }\n\n            if (comaIndex === 24 && keyIndex <= 24) {\n                ev.preventDefault();\n                return\n            }\n\n            if (comaIndex > -1 && valueLenth === comaIndex + 3 && keyIndex > comaIndex) {\n                ev.preventDefault();\n            }\n        }\n    }\n    handlePaste = (ev) => {\n        // stop data actually being pasted into input\n        ev.preventDefault();\n        // set pasted data via clipboard API\n        const clipboardData = ev.clipboardData || window.clipboardData;\n        const pastedData = clipboardData.getData('Text');\n        if (/^\\d{1,24}(,\\d{2})?$/.test(pastedData)) {\n            this.setState({value: pastedData});\n        }\n    }\n\n    // rendering\n\n    render() {\n        const { errors, label } = this.props;\n\n        const isFieldInvalid = (errors || []).length > 0\n        const fieldId = `${this.props.attrName}_id_${this.props.parentTemporaryId}`;\n\n        return (\n            <FieldWithLabel label={label} tag=\"label\" labelFor={fieldId}>\n                <TextFieldCustom\n                    aria-describedby={`text_field_custom_id${isFieldInvalid ? ' text_field_custom_error' : ''}`}\n                    aria-valuemax={27}\n                    autoFocus={this.props.autoFocus || false}\n                    clearFieldContext={label || null}\n                    characterCount\n                    disabled={this.props.formLocked}\n                    fullwidth={this.props.fullwidth}\n                    id={fieldId}\n                    invalid={isFieldInvalid}\n                    maxLength={27}\n                    value={this.state.value}\n                    onBlur={this.handleBlur}\n                    onFocus={this.props.onFocus}\n                    onChange={this.handleChange}\n                    onClear={(ev) => this.setState({value: ''}, () => {\n                        this.props.onChange('')\n                    })}\n                    onKeyPress={this.handleKeyPress}\n                    onPaste={this.handlePaste}\n                />\n                {isFieldInvalid && <ul id=\"text_field_custom_error\">{errors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                <Text id=\"text_field_custom_id\" info>Wpisz wartość zgodnie ze wzorem: 1000000,00</Text>\n            </FieldWithLabel>\n        )\n    }\n}\n\nexport { NumberTextField };\n","import React from 'react';\n\nimport { Message } from './Message';\n\n\nconst NotFoundPage = (props) => {\n    return (\n        <Message\n            messageIcon=\"report_problem\"\n            messageTitle=\"Błąd 404\" >\n            Strona nie istnieje\n        </Message>\n    );\n}\n\nexport { NotFoundPage };\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { GridCustom } from './GridCustom';\nimport { Text } from './Text';\n\nconst OfferStatus = (props) => {\n    const {\n        className,\n        statusIcon,\n        statusName,\n    } = props;\n\n    return (\n        <div className={`offer__status ${className || ''}`}>\n            <Text label aria-hidden=\"true\">Status oferty</Text>\n            <GridCustom noWrap centerHorizontal>\n                <Icon aria-hidden=\"true\" icon={statusIcon} className=\"offer__status-icon\" />\n                <Text tag=\"h2\" className=\"offer__status-name\" id=\"statusName_id\"><span className=\"sr-only\">Status oferty: </span>{statusName}</Text>\n            </GridCustom>\n        </div>\n    )\n}\n\nexport { OfferStatus };\n","export const API_URLS = {\n    // users\n    users: {\n        path: '/api/admin/users',\n    },\n    usersDetails: {\n        getUrl: (userId) => `/api/admin/users/${userId}`,\n    },\n    usersFindUser: {\n        url: '/api/admin/users/find',\n    },\n    /* watch modes for this url\n        modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n        modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n        modeContext - don't add 'authorized' to GET parameters - all permissions\n    */\n    usersPermissionsAdvertisementsProjectsEnrollments: {\n        path: '/api/admin/permissions_ads_projects_enrollments',\n    },\n    usersPermissionsAdvertisementsProjectsEnrollmentsDetails: {\n        path: '/api/admin/permissions_ads_projects_enrollments/package',\n        description: 'used for single permission details',\n    },\n    /* watch modes for this url\n        modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n        modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n        modeContext - don't add 'authorized' to GET parameters - all permissions\n    */\n    usersPermissionsDictionaries: {\n        path: '/api/admin/permissions_dictionary',\n    },\n    usersPermissionsDictionariesDetails: {\n        path: '/api/admin/permissions_dictionary/package',\n        description: 'used for single permission details',\n    },\n    /* watch modes for this url\n        modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n        modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n        modeContext - don't add 'authorized' to GET parameters - all permissions\n    */\n    usersPermissionsContent: {\n        path: '/api/admin/permissions_content',\n    },\n    usersPermissionsContentDetails: {\n        path: '/api/admin/permissions_content/package',\n        description: 'used for single permission details',\n    },\n    /* watch modes for this url\n        modeUserCurrent - needs 'authorized' as current user id - current user's permissions\n        modeUserCustom - needs 'authorized' as requested user id - requested user's permissions\n        modeContext - don't add 'authorized' to GET parameters - all permissions\n    */\n    usersPermissionsUsers: {\n        path: '/api/admin/permissions_users',\n    },\n    usersPermissionsUsersDetails: {\n        path: '/api/admin/permissions_users/package',\n        description: 'used for single permission details',\n    },\n    usersPermissionsContentDictionariesUsers: {\n        path: '/api/admin/permissions_cont_dict_users',\n    },\n    usersPermissionsHistoryAdvertisementsProjectsEnrollments: {\n        path: '/api/admin/permissions_history_ads_projects_enrollments',\n    },\n    usersPermissionsHistoryContentDictionariesUsers: {\n        path: '/api/admin/permissions_history_cont_dict_users',\n    },\n    usersPermissionsHistoryContent: {\n        path: '/api/admin/permissions_history_content',\n    },\n    usersPermissionsHistoryDictionaries: {\n        path: '/api/admin/permissions_history_dictionaries',\n    },\n    usersPermissionsHistoryUsers: {\n        path: '/api/admin/permissions_history_users',\n    },\n    // content administration\n    helpAdmin: {\n        path: '/api/admin/help'\n    },\n    helpAdminDictionaries: {\n        path: '/api/admin/help/dictionaries',\n    },\n    helpAdminDetails: {\n        getUrl: (helpId) => `/api/admin/help/${helpId}`\n    },\n    statementsAdmin: {\n        path: '/api/admin/statements'\n    },\n    statementsAdminDetails: {\n        getUrl: (statementId) => `/api/admin/statements/${statementId}`\n    },\n    cookiesAdmin: {\n        path: '/api/admin/cookies',\n    },\n    generalContentAdmin: {\n        path: '/api/admin/general-content',\n    },\n    generalContentAdminDetails: {\n        getUrl: (generalContentId) => `/api/admin/general-content/${\n            generalContentId}`,\n    },\n    regulations: {\n        path: '/api/regulations',\n    },\n    regulationsAdmin: {\n        path: '/api/admin/regulations',\n    },\n    regulationsAdminDetails: {\n        // Attention! It doesn't return a single regulation details\n        path: '/api/admin/regulations/details',\n    },\n    // implementation levels\n    perspectives: {\n        path: '/api/perspectives',\n    },\n    perspectivesAdmin: {\n        path: '/api/admin/dictionaries_perspective',\n    },\n    programmes: {\n        getUrl: (perspectiveId = 0) =>\n            `/api/programme/perspective/${perspectiveId}`,\n    },\n    programmesAdmin: {\n        getUrl: (perspectiveId = 0) =>\n            `/api/admin/dictionaries_programme/perspective/${perspectiveId}`,\n    },\n    programmesAdd: {\n        path: '/api/admin/dictionaries_programme',\n    },\n    programmesEdit: {\n        getUrl: (programmeId) => `/api/admin/dictionaries_programme/${programmeId}`,\n    },\n    priorities: {\n        getUrl: (programmeId) => `/api/priority/programme/${programmeId}`\n    },\n    prioritiesAdmin: {\n        getUrl: (programmeId) =>\n            `/api/admin/dictionaries_priority/programme/${programmeId}`\n    },\n    prioritiesAdd: {\n        path: '/api/admin/dictionaries_priority',\n    },\n    prioritiesEdit: {\n        getUrl: (priorityId) => `/api/admin/dictionaries_priority/${priorityId}`,\n    },\n    activities: {\n        getUrl: (priorityId) => `/api/activity/priority/${priorityId}`\n    },\n    activitiesAdmin: {\n        getUrl: (priorityId) =>\n            `/api/admin/dictionaries_activity/priority/${priorityId}`\n    },\n    activitiesAdd: {\n        path: '/api/admin/dictionaries_activity',\n    },\n    activitiesEdit: {\n        getUrl: (activityId) => `/api/admin/dictionaries_activity/${activityId}`,\n    },\n    regions: {\n        getUrl: (activityId) => `/api/region/activity/${activityId}`\n    },\n    regionsAdmin: {\n        getUrl: (activityId) =>\n            `/api/admin/dictionaries_region/activity/${activityId}`\n    },\n    regionsAdd: {\n        path: '/api/admin/dictionaries_region',\n    },\n    regionsEdit: {\n        getUrl: (regionId) => `/api/admin/dictionaries_region/${regionId}`,\n    },\n    institutions: {\n        getUrl: (activityId) => `/api/institution/activity/${activityId}`\n    },\n    institutionsAdmin: {\n        getUrl: (activityId) =>\n            `/api/admin/dictionaries_institution/activity/${activityId}`\n    },\n    institutionsAdd: {\n        path: '/api/admin/dictionaries_institution',\n    },\n    institutionsEdit: {\n        getUrl: (institutionId) =>\n            `/api/admin/dictionaries_institution/${institutionId}`,\n    },\n}\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { API_URLS } from '../../../urls/api';\nimport { fetchApi } from '../../../fetch';\nimport {\n    getSerializedErrorsFromServer,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    ButtonStyled,\n    CancelSaveButtonsRow,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\n\n\nexport const DeleteImplementationLevel = ({\n    apiUrlName,\n    item,\n    parentFormLabel,\n    perspectiveData,\n    RelatedObjectsExistInfoComponent,\n    titleFormLabel,\n    onCancel,\n    onDelete\n}) => {\n    const [deletingOn, setDeletingOn] = useState(false);\n    const [fetchError, setFetchError] = useState(null);\n    const [\n        objectRelatedWithOthers, setObjectRelatedWithOthers\n    ] = useState(false);\n\n    const { removePermission } = useContext(UserContext);\n\n    useEffect(() => {\n        if (!deletingOn) { return }\n\n        setFetchError(null);\n        let xhrFetch = null;\n\n        function callbackSuccess(responseData) {\n            xhrFetch = null;\n            onDelete();\n        }\n\n        function callbackError(responseData) {\n            xhrFetch = null;\n            setFetchError(translateErrorMessage(responseData.message));\n            setDeletingOn(false);\n        }\n\n        function callbackIncorrectStatus(status) {\n            xhrFetch = null;\n            setFetchError(\n                status === 403\n                    ? 'Nie masz uprawnień do usuwania elementów słownika poziomów wdrożenia.'\n                    : `Wystąpił nieoczekiwany błąd o kodzie ${status}.`);\n            setDeletingOn(false);\n            if (status === 403) {\n                removePermission('editingDictionaries');\n            }\n        }\n\n        function callbackShowErrors(responseErrors) {\n            xhrFetch = null;\n            const errors = getSerializedErrorsFromServer(\n                responseErrors, {doNotTranslateNames: true});\n            if (((errors || {}).allFields || {}).id) {\n                setObjectRelatedWithOthers(true);\n            }\n            setDeletingOn(false);\n        }\n\n        xhrFetch = fetchApi(\n            API_URLS[apiUrlName].getUrl(item.id),\n            'DELETE', {}, {},\n            callbackSuccess,\n            callbackError,\n            callbackIncorrectStatus,\n            callbackShowErrors\n        );\n\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }, [deletingOn]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    return (\n        <DialogCustom\n            ariaLabelledby=\"addDialogLabel\"\n            className=\"dialog\"\n            onClose={onCancel}\n        >\n            <h2 id=\"addDialogLabel\" className=\"text--main-header\">\n                {objectRelatedWithOthers\n                    ? 'Niemożliwe usunięcie'\n                    : 'Potwierdzenie usunięcia'\n                } {titleFormLabel}\n            </h2>\n            <FieldWithLabel\n                label=\"Kod\"\n                tag=\"label\"\n                labelFor=\"id_code\"\n            >\n                <GridCustom noWrap centerVertical className=\"code-input-container code-input-container--edition\">\n                    {parentFormLabel && <Text accentHeader className=\"code-input-container__first-part\">{parentFormLabel}</Text>}\n                    <Text accentHeader>{item.code}</Text>\n                </GridCustom>\n            </FieldWithLabel>\n            <FieldWithLabel\n                label=\"Nazwa\"\n                tag=\"label\"\n                labelFor=\"id_name\"\n            >\n                <Text>{item.name}</Text>\n            </FieldWithLabel>\n\n            {objectRelatedWithOthers\n                ? (\n                    <>\n                        <RelatedObjectsExistInfoComponent\n                            perspectiveData={perspectiveData} />\n                        <GridCustom flexEnd>\n                            <ButtonStyled cancel onClick={onCancel}>OK</ButtonStyled>\n                        </GridCustom>\n                    </>\n                )\n                : (\n                    <>\n                        <CancelSaveButtonsRow\n                            disabled={deletingOn}\n                            saveText=\"Usuń\"\n                            onCancel={onCancel}\n                            onSave={() => setDeletingOn(true)} />\n                        {!!fetchError && <Text error>{fetchError}</Text>}\n                    </>\n                )\n            }\n\n        </DialogCustom>\n    )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport {\n    getSerializedErrorsFromServer,\n    translateErrorMessage\n} from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    CancelSaveButtonsRow,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    TextFieldCustom\n} from '../../common';\n\n\nconst DEFAULT_DATA = {\n    code: '',\n    name: '',\n};\n\n\nexport const ImplementationLevelForm = ({\n    addApiUrlName,\n    additionalSaveData,\n    codeMaxLength = 2,\n    editApiUrlName,\n    originalData,   // original if exists\n    parentFormLabel,\n    titleFormLabel,\n    onCancel,\n    onSave\n}) => {\n    const isNew = originalData === null;\n    const [data, setData] = useState(\n        {...(isNew ? DEFAULT_DATA : originalData)});\n    const [savingOn, setSavingOn] = useState(false);\n    const [errors, setErrors] = useState({});\n    const [fetchError, setFetchError] = useState(null);\n\n    function handleChangeAttribute(name, value) {\n        setData(prevValue => ({\n            ...prevValue,\n            [name]: value,\n        }));\n    }\n\n    const { removePermission } = useContext(UserContext);\n\n    useEffect(() => {\n        if (!savingOn) { return }\n        setErrors({});\n        setFetchError(null);\n        let xhrFetch = null;\n\n        function callbackSuccess(responseData) {\n            xhrFetch = null;\n            onSave();\n        }\n\n        function callbackError(responseData) {\n            xhrFetch = null;\n            setFetchError(translateErrorMessage(responseData.message));\n            setSavingOn(false);\n        }\n\n        function callbackIncorrectStatus(status) {\n            xhrFetch = null;\n            setFetchError(\n                status === 403\n                ? 'Nie masz uprawnień do zapisu elementów słownika poziomów wdrożenia.'\n                : `Wystąpił nieoczekiwany błąd o kodzie ${status}.`);\n            setSavingOn(false);\n            if (status === 403) {\n                removePermission('editingDictionaries');\n            }\n        }\n\n        function callbackShowErrors(errors) {\n            xhrFetch = null;\n            setErrors(getSerializedErrorsFromServer(\n                errors, {doNotTranslateNames: true}));\n            setSavingOn(false);\n        }\n\n        xhrFetch = fetchApi(\n            isNew ? API_URLS[addApiUrlName].path : API_URLS[editApiUrlName].getUrl(data.id),\n            isNew ? 'POST' : 'PUT',\n            {},\n            {\n                ...(isNew ? {...additionalSaveData, code: data.code} : {}),\n                name: data.name,\n            },\n            callbackSuccess,\n            callbackError,\n            callbackIncorrectStatus,\n            callbackShowErrors\n        );\n\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }, [savingOn]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    const isCodeInvalid = (errors.code || []).length > 0;\n    const isNameInvalid = (errors.name || []).length > 0;\n    return (\n        <DialogCustom\n            ariaLabelledby=\"addDialogLabel\"\n            className=\"dialog\"\n            onClose={onCancel}\n        >\n            <h2 id=\"addDialogLabel\" className=\"text--main-header\">\n                {isNew ? 'Dodawanie' : 'Edycja'} {titleFormLabel}\n            </h2>\n\n            {isNew\n                ? (\n                    <>\n                        <FieldWithLabel\n                            label=\"Kod\"\n                            tag=\"label\"\n                            labelFor=\"id_code\"\n                        >\n                            <GridCustom fullwidth noWrap className=\"code-input-container\">\n                                {parentFormLabel && <Text accentHeader>{parentFormLabel}</Text>}\n                                <TextFieldCustom\n                                    aria-describedby={isCodeInvalid ? 'code_error' : null}\n                                    aria-label={`Kod, maksymalna liczba znaków: ${codeMaxLength}. Wpisano ${data.code.length} znaków.`}\n                                    aria-required={true}\n                                    aria-valuemax={codeMaxLength}\n                                    characterCount\n                                    clearFieldContext=\"code\"\n                                    disabled={savingOn}\n                                    fullwidth\n                                    id=\"id_code\"\n                                    invalid={isCodeInvalid}\n                                    maxLength={codeMaxLength}\n                                    required\n                                    value={data.code}\n                                    onChange={ev => handleChangeAttribute(\n                                        'code', ev.target.value\n                                    )}\n                                    onClear={ev => handleChangeAttribute('code', '')}\n                                />\n                            </GridCustom>\n                            {isCodeInvalid && (\n                                <ul id=\"code_error\">\n                                    {errors.code.map((e, i) =>\n                                        <Text error key={i} tag=\"li\">{e}</Text>\n                                    )}\n                                </ul>\n                            )}\n                        </FieldWithLabel>\n                    </>\n                )\n                : (\n                    <FieldWithLabel\n                        label=\"Kod\"\n                        tag=\"label\"\n                        labelFor=\"id_code\"\n                    >\n                        <GridCustom noWrap centerVertical className=\"code-input-container code-input-container--edition\">\n                            {parentFormLabel && <Text accentHeader className=\"code-input-container__first-part\">{parentFormLabel}</Text>}\n                            <Text accentHeader>{data.code}</Text>\n                        </GridCustom>\n                    </FieldWithLabel>\n                )\n            }\n            <FieldWithLabel\n                label=\"Nazwa\"\n                tag=\"label\"\n                labelFor=\"id_name\"\n            >\n                <TextFieldCustom\n                    aria-describedby={isCodeInvalid ? 'name_error' : null}\n                    aria-label={`Kod, maksymalna liczba znaków: 1000. Wpisano ${data.name.length} znaków.`}\n                    aria-required={true}\n                    aria-valuemax={1000}\n                    characterCount\n                    clearFieldContext=\"name\"\n                    disabled={savingOn}\n                    fullwidth\n                    id=\"id_name\"\n                    invalid={isNameInvalid}\n                    maxLength={1000}\n                    required\n                    value={data.name}\n                    onChange={ev => handleChangeAttribute(\n                        'name', ev.target.value\n                    )}\n                    onClear={ev => handleChangeAttribute('name', '')}\n                />\n                {isNameInvalid && (\n                    <ul id=\"name_error\">\n                        {errors.name.map((e, i) =>\n                            <Text error key={i} tag=\"li\">{e}</Text>\n                        )}\n                    </ul>\n                )}\n            </FieldWithLabel>\n\n            <CancelSaveButtonsRow\n                disabled={savingOn}\n                onCancel={onCancel}\n                onSave={() => setSavingOn(true)} />\n            {!!fetchError && <Text error>{fetchError}</Text>}\n        </DialogCustom>\n    )\n};\n","import { useEffect, useState } from 'react';\n\nimport { fetchApi } from '../fetch';\n\n\nexport const useCheckPermissionExists = (\n    checkingExistedPermissionOn, setCheckingExistedPermissionOn, url,\n    fetchDataDict, setExistsErrorOn, setPermissions403errorOn, userId\n) => {\n    const [existingPermissionData, setExistedPermissionData] = useState(null);\n\n    function checkPermission() {\n        if (!checkingExistedPermissionOn || !url.length) { return }\n\n        let xhrFetch = null;\n\n        function callbackPermissionExists(data) {\n            xhrFetch = null;\n            setExistedPermissionData(data.permission);\n            setCheckingExistedPermissionOn(false);\n            setExistsErrorOn(true);\n        }\n\n        function callbackPermissionDoesNotExists() {\n            xhrFetch = null;\n            setCheckingExistedPermissionOn(false);\n        }\n\n        function callbackPermissionIncorrectStatus(statusCode) {\n            if (statusCode === 403) {\n                setPermissions403errorOn(true);\n            }\n            callbackPermissionDoesNotExists();\n        }\n\n        xhrFetch = fetchApi(\n            url, 'GET', {},\n            {authorized: userId, ...fetchDataDict},\n            callbackPermissionExists, callbackPermissionDoesNotExists,\n            callbackPermissionIncorrectStatus\n        );\n        return () => {\n            if (xhrFetch !== null) {\n                xhrFetch.abort();\n            }\n        }\n    }\n    useEffect(checkPermission, [checkingExistedPermissionOn]);\n\n  return {existingPermissionData}\n};\n","import { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { fetchApi } from '../fetch';\nimport {\n    getSerializedErrorsFromServer,\n    getSerializedObject,\n    serializeUrlParams,\n    translateErrorMessage\n} from '../serializers';\n\n\nexport const useOneTimeFetchApi = (config) => {\n  const url = config.url || '';\n  const fetchData = config.fetchData || {};\n  const serializeFetchDataFunction = config.serializeFetchDataFunction ||\n    (data => data);\n  const updatedData = config.updatedData || null;\n  const message403error = config.message403error || '';\n  const callback403 = config.callback403 || (() => {});\n  const requestId = config.requestId || 1;\n\n  const [loadingOn, setLoadingOn] = useState(true);\n  const [fetchError, setFetchError] = useState(null);\n  const [data, setData] = useState(null);\n\n  function getDataFromServer() {\n    setLoadingOn(true);\n    setFetchError(null);\n\n    let xhrFetch = null;\n\n    function callbackSuccess(data) {\n      xhrFetch = null;\n      setData(serializeFetchDataFunction(data));\n      setLoadingOn(false);\n    }\n\n    function callbackError(data) {\n      xhrFetch = null;\n      setFetchError(translateErrorMessage(data.message));\n      setLoadingOn(false);\n    }\n\n    function callbackIncorrectStatus(status) {\n      xhrFetch = null;\n      if (status === 403) {\n        if (message403error.length) {\n          setFetchError(message403error);\n        }\n        callback403();\n      } else {\n        setFetchError(`Wystąpił nieoczekiwany błąd o kodzie ${status}.`);\n      }\n      setLoadingOn(false);\n    }\n\n    xhrFetch = fetchApi(\n      url, 'GET', {}, fetchData,\n      callbackSuccess, callbackError, callbackIncorrectStatus\n    );\n    return () => {\n      if (xhrFetch !== null) {xhrFetch.abort()}\n    }\n  }\n  useEffect(getDataFromServer, [requestId]);\n\n  useEffect(() => {\n    if (updatedData === null) { return }\n    setData(prevData =>\n        ({...prevData, ...{uzytkownik: {...prevData.uzytkownik, ...updatedData}}})\n    );\n  }, [updatedData])\n\n  return {data, loadingOn, fetchError}\n};\n\nconst sortUrlParams = (param1, param2) => {\n  return param1[0].localeCompare(param2[0], 'pl')\n};\n\nexport const usePaginatedFetchApi = (\n    pageNumber, selectedSort, filters, getFiltersFetchData, paginatedBy,\n    objectsAttrName, baseApiUrl, serializationUrlDictToPolish,\n    serializerConfig={}) => {\n  let history = useHistory();\n  const [permissionsCheckingOn, setPermissionsCheckingOn] = useState(true);\n  const [notPermitted, setNotPermitted] = useState(false);\n  const [loadingOn, setLoadingOn] = useState(true);\n  const [fetchError, setFetchError] = useState(null);\n  const [data, setData] = useState(null);\n\n  function getDataFromServer() {\n    if (selectedSort === null) { return }\n    setLoadingOn(true);\n    setFetchError(null);\n    let data = {\n      page: pageNumber,\n      sort: selectedSort.value,\n      ...(filters !== null ? getFiltersFetchData(filters) : {}),\n    };\n\n    let urlParams = '?';\n    const serializedUrlData = serializeUrlParams(\n        data, serializationUrlDictToPolish);\n    for (let [index, [k, v]] of Object.entries(\n        serializedUrlData).sort(sortUrlParams).entries()) {\n      urlParams += `${index > 0 ? '&' : ''}${k}=${v}`;\n    }\n\n    // it looks odd, but it's necessary, because some filters have to be set\n    // as all and backend doesn't like \"all\"\n    const dataWithoutAll = {};\n    for (let [name, value] of Object.entries(data)) {\n      if (value !== 'all') {\n        dataWithoutAll[name] = value;\n      }\n    }\n\n    const urlWithParams = `${window.location.pathname}${urlParams}`;\n    if (window.location.pathname + window.location.search !== urlWithParams) {\n        history.replace(urlWithParams);\n    }\n\n    function checkHasPrev() {\n      return pageNumber > 1\n    }\n\n    function checkHasNext(total) {\n      return Math.ceil(total / paginatedBy) > pageNumber\n    }\n\n    let xhrFetch = null;\n\n    function callbackSuccess(data_) {\n      xhrFetch = null;\n      const { total } = data_.meta;\n      setData({\n        objects: getSerializedObject(\n            data_, {mapToCamelCaseName: true, ...serializerConfig})[objectsAttrName] || [],\n        total: total,\n        hasPrev: checkHasPrev(),\n        hasNext: checkHasNext(total),\n      });\n      if (permissionsCheckingOn) {\n        setPermissionsCheckingOn(false);\n      }\n      setLoadingOn(false);\n    }\n\n    function callbackError(data_) {\n      xhrFetch = null;\n      setFetchError(data_.message);\n      if (permissionsCheckingOn) {\n        setPermissionsCheckingOn(false);\n      }\n      setLoadingOn(false);\n    }\n\n    function callbackIncorrectStatus(status) {\n      xhrFetch = null;\n      if (status === 403) {\n        setNotPermitted(true);\n        if (permissionsCheckingOn) {\n          setPermissionsCheckingOn(false);\n        }\n        setLoadingOn(false);\n        return\n      }\n      setFetchError(`Wystąpił nieoczekiwany błąd o kodzie ${status}.`);\n      setLoadingOn(false);\n    }\n\n    xhrFetch = fetchApi(\n      baseApiUrl, 'GET', {}, {...dataWithoutAll, limit: paginatedBy},\n      callbackSuccess, callbackError, callbackIncorrectStatus\n    );\n    return () => {\n      if (xhrFetch !== null) {xhrFetch.abort()}\n    }\n  }\n  useEffect(getDataFromServer, [pageNumber, selectedSort, filters])\n\n  function updateData(objectId, data_) {\n    setData(prevData => ({\n      objects: prevData.objects.map(obj => {\n          if (obj.id === objectId) {\n              obj = {...obj, ...data_};\n          }\n          return obj\n      }),\n    }));\n  }\n\n  return {\n    data, fetchError, loadingOn, notPermitted, permissionsCheckingOn,\n    updateData\n  }\n}\n\nexport const usePutFetchApi = ({\n  callbackPutSuccess,\n  fetchData = {},\n  loadingOn,\n  message403error = null,\n  setLoadingOn,\n  setFetchError,\n  url\n}) => {\n\n  function save() {\n    if (!loadingOn) { return }\n    setLoadingOn(true);\n    setFetchError(null);\n\n    let xhrFetch = null;\n\n    function callbackSuccess(data) {\n      xhrFetch = null;\n      callbackPutSuccess(data);\n      setLoadingOn(false);\n    }\n\n    function callbackError(data) {\n      xhrFetch = null;\n      setFetchError(data.message);\n      setLoadingOn(false);\n    }\n\n    function callbackIncorrectStatus(status) {\n      xhrFetch = null;\n      setFetchError(\n        status === 403 && message403error\n          ? message403error\n          : `Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n      );\n      setLoadingOn(false);\n    }\n\n    xhrFetch = fetchApi(\n      url, 'PUT', {}, fetchData,\n      callbackSuccess, callbackError, callbackIncorrectStatus\n    );\n    return () => {\n      if (xhrFetch !== null) {xhrFetch.abort()}\n    }\n  }\n  useEffect(save, [loadingOn]);\n\n  return {}\n};\n\n\nexport const usePutFormFetchApi = (config) => {\n\n  const url = config.url || '';\n  const fetchData = config.fetchData || {};\n  const callbackPutSuccess = config.callbackSuccess || (() => {});\n  const callbackObjectExists = config.callbackObjectExists || null;\n  const loadingOn = config.loadingOn || false;\n  const setLoadingOn = config.setLoadingOn || (() => {});\n  const method = config.method || 'PUT';\n  const defaultSaveBtnText = config.defaultSaveBtnText || 'Zapisz zmiany';\n  const doNotTranslateNames = config.doNotTranslateNames || false;\n  const message403error = config.message403error || '';\n  const callback403 = config.callback403 || (() => {});\n\n  const [fetchError, setFetchError] = useState(null);\n  const [errors, setErrors] = useState({});\n  const [saveBtnText, setSaveBtnText] = useState(defaultSaveBtnText);\n\n  function save() {\n    if (!loadingOn) { return }\n    setLoadingOn(true);\n    setFetchError(null);\n    setErrors({});\n    setSaveBtnText('Trwa zapisywanie zmian...');\n\n    let xhrFetch = null;\n    let saveMsgTimeout = null;\n\n    function callbackSuccess(data) {\n      xhrFetch = null;\n      setSaveBtnText('Zapisano');\n      saveMsgTimeout = setTimeout(() => {\n        setSaveBtnText(defaultSaveBtnText);\n      }, 5000);\n      setLoadingOn(false);\n      callbackPutSuccess(data);\n    }\n\n    function callbackError(data) {\n      xhrFetch = null;\n      if (data.message === 'permissions.store.set_exists' &&\n          callbackObjectExists !== null) {\n        callbackObjectExists();\n      } else {\n        setFetchError(translateErrorMessage(data.message));\n      }\n      setSaveBtnText(defaultSaveBtnText);\n      setLoadingOn(false);\n    }\n\n    function callbackIncorrectStatus(status) {\n      xhrFetch = null;\n      if (method === 'PUT' && status === 404 && callbackObjectExists !== null) {\n        callbackObjectExists();\n      } else {\n        let message;\n        if (status === 403) {\n            message = message403error;\n            callback403();\n        }\n        setFetchError(\n            message || `Wystąpił nieoczekiwany błąd o kodzie ${status}.`);\n      }\n      setSaveBtnText(defaultSaveBtnText);\n      setLoadingOn(false);\n    }\n\n    function callbackShowErrors(errors) {\n      xhrFetch = null;\n      setErrors(getSerializedErrorsFromServer(errors, {doNotTranslateNames}));\n      setSaveBtnText(defaultSaveBtnText);\n      setLoadingOn(false);\n    }\n\n    xhrFetch = fetchApi(\n      url, method, {}, fetchData,\n      callbackSuccess, callbackError, callbackIncorrectStatus,\n      callbackShowErrors\n    );\n    return () => {\n      if (xhrFetch !== null) {xhrFetch.abort()}\n      if (saveMsgTimeout !== null) {\n        // TODO: it cleans timeout every time function ends, not as is expected\n        clearTimeout(saveMsgTimeout);\n        setSaveBtnText(defaultSaveBtnText);\n      }\n    }\n  }\n  useEffect(save, [loadingOn]);\n\n  return {fetchError, errors, saveBtnText}\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n    <>\n        <Text error>Nie można usunąć działania, ponieważ jest ono powiązane z innym obiektem.</Text>\n        <Text error>Upewnij się, że działanie nie ma instytucji, nie istnieją projekty lub nabory oparte o to działanie oraz nie są przyznane uprawnienia do tego działania, a następnie spróbuj ponownie.</Text>\n    </>\n);\n\n\nexport const Activities = (props) => {\n    const { priorityId } = useParams();\n\n    function getItemLinkUrl(item) {\n        return URLS.managementInstitutionsForActivity.getUrl(item.id)\n    }\n\n    function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n        return `${programmeCode}.${priorityCode}.`\n    }\n\n    return (\n        <ImplementationLevelManagement\n            addApiUrlName=\"activitiesAdd\"\n            addItemButtonLabel=\"Dodaj działanie\"\n            additionalSaveData={{priority: parseInt(priorityId)}}   // for form\n            apiUrl={API_URLS.activitiesAdmin.getUrl(priorityId)}\n            auditDataBoxTitle=\"Dane audytowe dla osi priorytetowej\"\n            auditDataObjectName=\"priority\"\n            editApiUrlName=\"activitiesEdit\"\n            getParentFormLabel={getParentFormLabel}\n            listObjectName=\"activities\"\n            RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n            rowComponentProps={{\n                getItemLinkFunction: getItemLinkUrl, withLink: true\n            }}\n            showAuditData={true}\n            tableName=\"Lista działań\"\n            titleFormLabel=\"działania\"\n        />\n    )\n};\n","import React, { useContext } from 'react';\nimport { Link } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { ButtonStyled, MoreOptionsButton, Text } from '../../common';\n\n\nexport const ImplementationLevelTableRow = ({\n    getItemLinkFunction = (() => '/'),\n    item,\n    perspectiveData = {},\n    withLink = false,\n    onDelete,\n    onEdit\n}) => {\n    const { permissions } = useContext(UserContext);\n    return (\n        <DataTableRow>\n            <DataTableCell>\n                <Text>{item.code}</Text>\n            </DataTableCell>\n            <DataTableCell>\n                {withLink\n                    ? (\n                        <Link\n                            className=\"link-text administration__table-link\"\n                            to={getItemLinkFunction(item, perspectiveData)}\n                        >\n                            {item.name}\n                        </Link>\n                    )\n                    : <Text>{item.name}</Text>\n                }\n            </DataTableCell>\n            {permissions.editingDictionaries && (\n                <DataTableCell>\n                    <MoreOptionsButton\n                        className=\"administration__more-options\"\n                        menuAriaLabel=\"Otwórz menu: Zmien nazwę lub usuń\"\n                    >\n                        <ul className=\"permissions__more-options-list\">\n                            <li>\n                                <ButtonStyled noMargin onClick={() => onEdit(item)}>\n                                    Zmień nazwę\n                                </ButtonStyled>\n                            </li>\n                            <li>\n                                <ButtonStyled noMargin onClick={() => onDelete(item)}>\n                                    Usuń\n                                </ButtonStyled>\n                            </li>\n                        </ul>\n                    </MoreOptionsButton>\n                </DataTableCell>\n            )}\n\n        </DataTableRow>\n    )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n    <>\n        <Text error>Nie można usunąć instytucji, ponieważ jest ona powiązana z innym obiektem.</Text>\n        <Text error>Upewnij się, że nie istnieją projekty lub nabory oparte o tę instytucję oraz nie są przyznane uprawnienia do tej instytucji, a następnie spróbuj ponownie.</Text>\n    </>\n);\n\n\nexport const Institutions = (props) => {\n    const { activityId } = useParams();\n\n    function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n        return `${programmeCode}.${priorityCode}.${activityCode}-`\n    }\n\n    return (\n        <ImplementationLevelManagement\n            addApiUrlName=\"institutionsAdd\"\n            addItemButtonLabel=\"Dodaj instytucję\"\n            additionalSaveData={{activity: parseInt(activityId)}}   // for form\n            apiUrl={API_URLS.institutionsAdmin.getUrl(activityId)}\n            auditDataBoxTitle=\"Dane audytowe dla działania\"\n            auditDataObjectName=\"activity\"\n            codeMaxLength={5}\n            editApiUrlName=\"institutionsEdit\"\n            getParentFormLabel={getParentFormLabel}\n            listObjectName=\"institutions\"\n            RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n            showAuditData={true}\n            tableName=\"Lista instytucji\"\n            titleFormLabel=\"instytucji\"\n        />\n    )\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport { URLS } from '../../../urls/frontend';\n\n\nexport const PerspectivesTableRow = ({item}) => {\n    return (\n        <DataTableRow>\n            <DataTableCell>\n                <Link to={URLS.managementProgrammesForPerspective.getUrl(item.id)} className=\"link-text\">\n                    {item.name}\n                </Link>\n            </DataTableCell>\n        </DataTableRow>\n    )\n};\n","import React from 'react';\n\nimport { API_URLS } from '../../../urls/api';\nimport { ImplementationLevelManagement } from '../../common';\nimport { PerspectivesTableRow } from './PerspectivesTableRow';\n\n\nexport const Perspectives = (props) => {\n    return (\n        <ImplementationLevelManagement\n            addItemButtonVisible={false}\n            apiUrl={API_URLS.perspectivesAdmin.path}\n            listObjectName=\"perspectives\"\n            RowComponent={PerspectivesTableRow}\n            sortItemsFunction={null}\n            tableHeaderList={['Nazwa']}\n            tableName=\"Lista perspektyw\"\n        />\n    )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport {\n    getActivityUrlByPerspectiveData,\n    hasSubactivities\n} from '../../../helpers';\nimport { URLS } from '../../../urls/frontend';\nimport { API_URLS } from '../../../urls/api';\nimport {ImplementationLevelManagement, Text} from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = ({perspectiveData}) => {\n    const hasSubactivities_ = hasSubactivities(perspectiveData);\n    return (\n        <>\n            <Text error>\n                Nie można usunąć osi priorytetowej, ponieważ jest ona\n                powiązana z innym obiektem.\n            </Text>\n            <Text error>\n                Upewnij się, że oś priorytetowa nie ma działań\n                {hasSubactivities_ && ' i poddziałań'}, nie istnieją projekty\n                lub nabory oparte o tę oś priorytetową oraz nie są przyznane\n                uprawnienia do tej osi priorytetowej, a następnie spróbuj ponownie.\n            </Text>\n        </>\n    )\n};\n\n\nexport const Priorities = (props) => {\n    const { programmeId } = useParams();\n\n    function getItemLinkUrl(item, perspectiveData) {\n        return URLS[getActivityUrlByPerspectiveData(perspectiveData)]\n            .getUrl(item.id)\n    }\n\n    function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n        return `${programmeCode}.`\n    }\n\n    return (\n        <ImplementationLevelManagement\n            addApiUrlName=\"prioritiesAdd\"\n            addItemButtonLabel=\"Dodaj oś priorytetową\"\n            additionalSaveData={{programme: parseInt(programmeId)}}   // for form\n            apiUrl={API_URLS.prioritiesAdmin.getUrl(programmeId)}\n            auditDataBoxTitle=\"Dane audytowe dla programu operacyjnego\"\n            auditDataObjectName=\"programme\"\n            editApiUrlName=\"prioritiesEdit\"\n            getParentFormLabel={getParentFormLabel}\n            listObjectName=\"priorities\"\n            RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n            rowComponentProps={{\n                getItemLinkFunction: getItemLinkUrl, withLink: true\n            }}\n            showAuditData={true}\n            tableName=\"Lista osi priorytetowych\"\n            titleFormLabel=\"osi priorytetowej\"\n        />\n    )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport { sortProgrammes } from '../../../helpers';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n    <>\n        <Text error>Nie można usunąć programu operacyjnego, ponieważ jest on powiązany z innym obiektem.</Text>\n        <Text error>Upewnij się, że program operacyjny nie ma osi priorytetowych, nie istnieją projekty lub nabory oparte o ten program operacyjny oraz nie są przyznane uprawnienia do tego programu operacyjnego, a następnie spróbuj ponownie.</Text>\n    </>\n);\n\n\nexport const Programmes = (props) => {\n    const { perspectiveId } = useParams();\n\n    function getItemLinkUrl(item) {\n        return URLS.managementPrioritiesForProgramme.getUrl(item.id)\n    }\n\n    return (\n        <ImplementationLevelManagement\n            addApiUrlName=\"programmesAdd\"\n            addItemButtonLabel=\"Dodaj program operacyjny\"\n            additionalSaveData={{perspective: parseInt(perspectiveId)}}   // for form\n            apiUrl={API_URLS.programmesAdmin.getUrl(perspectiveId)}\n            codeMaxLength={4}\n            editApiUrlName=\"programmesEdit\"\n            getItemLinkFunction={getItemLinkUrl}\n            listObjectName=\"programmes\"\n            RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n            rowComponentProps={{\n                getItemLinkFunction: getItemLinkUrl, withLink: true\n            }}\n            sortItemsFunction={sortProgrammes}\n            tableName=\"Lista programów operacyjnych\"\n            titleFormLabel=\"programu operacyjnego\"\n        />\n    )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n    <>\n        <Text error>Nie można usunąć regionu, ponieważ jest on powiązany z innym obiektem.</Text>\n        <Text error>Upewnij się, że nie istnieją projekty lub nabory oparte o ten region oraz nie są przyznane uprawnienia do tego regionu, a następnie spróbuj ponownie.</Text>\n    </>\n);\n\n\nexport const Regions = (props) => {\n    const { activityId } = useParams();\n\n    function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n        return `${programmeCode}.${priorityCode}.${activityCode}.`\n    }\n\n    return (\n        <ImplementationLevelManagement\n            addApiUrlName=\"regionsAdd\"\n            addItemButtonLabel=\"Dodaj region\"\n            additionalSaveData={{activity: parseInt(activityId)}}   // for form\n            apiUrl={API_URLS.regionsAdmin.getUrl(activityId)}\n            auditDataBoxTitle=\"Dane audytowe dla działania i poddziałania\"\n            auditDataObjectName=\"activity\"\n            editApiUrlName=\"regionsEdit\"\n            getParentFormLabel={getParentFormLabel}\n            listObjectName=\"regions\"\n            RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n            showAuditData={true}\n            tableName=\"Lista regionów\"\n            titleFormLabel=\"regionu\"\n        />\n    )\n};\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport { ImplementationLevelManagement, Text } from '../../common';\n\n\nconst RelatedObjectsExistInfoComponent = (props) => (\n    <>\n        <Text error>Nie można usunąć działania i poddziałania, ponieważ jest ono powiązane z innym obiektem.</Text>\n        <Text error>Upewnij się, że działanie i poddziałanie nie ma regionów, nie istnieją projekty lub nabory oparte o to działanie i poddziałanie oraz nie są przyznane uprawnienia do tego działania i poddziałania, a następnie spróbuj ponownie.</Text>\n    </>\n);\n\n\nexport const Subactivities = (props) => {\n    const { priorityId } = useParams();\n\n    function getItemLinkUrl(item) {\n        return URLS.managementRegionsForSubactivity.getUrl(item.id)\n    }\n\n    function getParentFormLabel(programmeCode, priorityCode, activityCode) {\n        return `${programmeCode}.${priorityCode}.`\n    }\n\n    return (\n        <ImplementationLevelManagement\n            addApiUrlName=\"activitiesAdd\"\n            addItemButtonLabel=\"Dodaj działanie i poddziałanie\"\n            additionalSaveData={{priority: parseInt(priorityId)}}   // for form\n            apiUrl={API_URLS.activitiesAdmin.getUrl(priorityId)}\n            auditDataBoxTitle=\"Dane audytowe dla osi priorytetowej\"\n            auditDataObjectName=\"priority\"\n            codeMaxLength={5}\n            editApiUrlName=\"activitiesEdit\"\n            getParentFormLabel={getParentFormLabel}\n            listObjectName=\"activities\"\n            RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n            rowComponentProps={{\n                getItemLinkFunction: getItemLinkUrl, withLink: true\n            }}\n            showAuditData={true}\n            tableName=\"Lista działań i poddziałań\"\n            titleFormLabel=\"działania i poddziałania\"\n        />\n    )\n};\n","import React, { useContext, useMemo, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport {\n    getActivityChildUrlByPerspectiveData,\n    getActivityUrlByPerspectiveData,\n    serializeAuditData,\n    sortImplementationLevelByNumberCode\n} from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { URLS } from '../../../urls/frontend';\nimport {\n    AuditData,\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    GridCustom,\n    Loader,\n    PaginatedListHeader,\n    TableCustom,\n    Text\n} from '../../common';\nimport {\n    ImplementationLevelTableRow\n} from '../../layoutElements/implementationLevelsManagement';\nimport { DeleteImplementationLevel } from './DeleteImplementationLevel';\nimport { ImplementationLevelForm } from './ImplementationLevelForm';\n\n\nexport const ImplementationLevelManagement = ({\n    addApiUrlName,\n    addItemButtonLabel,\n    addItemButtonVisible = true,\n    additionalSaveData = {},\n    apiUrl,\n    auditDataBoxTitle,\n    auditDataObjectName,\n    codeMaxLength,\n    editApiUrlName,\n    getParentFormLabel = null,\n    listObjectName,\n    RelatedObjectsExistInfoComponent,\n    RowComponent = ImplementationLevelTableRow,\n    rowComponentProps = {},\n    showAuditData = false,\n    sortItemsFunction = sortImplementationLevelByNumberCode,\n    tableHeaderList,\n    tableName,\n    titleFormLabel\n}) => {\n    const [formOn, setFormOn] = useState(false);\n    const [editedItem, setEditedItem] = useState(null);\n    const [requestId, setRequestId] = useState(1);\n    const [deletedItem, setDeletedItem] = useState(null);\n\n    const { permissions, removePermission } = useContext(UserContext);\n\n    const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n        url: apiUrl,\n        message403error: 'Nie masz uprawnień do przeglądania elementów słownika poziomów wdrożenia.',\n        callback403: () => removePermission('previewDictionaries'),\n        requestId,\n    });\n\n    const items = useMemo(\n        () => {\n            if (!data) { return [] }\n\n            let items_ = [];\n            if (data[listObjectName]) {\n                items_ = data[listObjectName] || [];\n            }\n            if (sortItemsFunction) {\n                items_.sort(sortItemsFunction);\n            }\n\n            return items_\n        }, [data] // eslint-disable-line react-hooks/exhaustive-deps\n    );\n\n    function handleCancelFormOn() {\n        setFormOn(false);\n        setEditedItem(null);\n    }\n\n    function handleSetEditedItem(item) {\n        setDeletedItem(null);\n        setEditedItem(item);\n        setFormOn(true);\n    }\n\n    function handleUpdateRequestId() {\n        setRequestId(prevValue => prevValue + 1);\n    }\n\n    function handleSetDeletedItem(item) {\n        setFormOn(false);\n        setEditedItem(null);\n        setDeletedItem(item);\n    }\n\n    function handleCancelDeleting() {\n        setDeletedItem(null);\n    }\n\n    let parentFormLabel = '';\n    let perspectiveId, programmeId, priorityId, activityId;\n    if (data) {\n        perspectiveId = (data.perspective || {}).id;\n        programmeId = (data.programme || {}).id;\n        priorityId = (data.priority || {}).id;\n        activityId = (data.activity || {}).id;\n        if (getParentFormLabel) {\n            parentFormLabel = getParentFormLabel(\n                (data.programme || {}).code,\n                (data.priority || {}).code,\n                (data.activity || {}).code\n            );\n        }\n    }\n\n    const { editingDictionaries: editingDictionariesPermission } = permissions;\n    if (!tableHeaderList) {\n        tableHeaderList = ['Kod', 'Nazwa'];\n        if (editingDictionariesPermission) {\n            tableHeaderList.push('');\n        }\n    }\n\n    return (\n        <>\n            <Breadcrumps notZarzadzanieTrescia>\n                <li className=\"breadcrumps__current\">\n                    Administracja słownikiem poziomów wdrażania\n                </li>\n            </Breadcrumps>\n            {loadingOn\n                ? <Loader />\n                : !!fetchError\n                    ? <Text error>{fetchError}</Text>\n                    : (\n                        <Container>\n                            <div className=\"administration__header-links\">\n                                {data.perspective && (\n                                    <Link to={URLS.managementProgrammesForPerspective.getUrl(perspectiveId)} className=\"link-text administration__header-link\">\n                                        {data.perspective.name}\n                                    </Link>\n                                )}\n                                {[\n                                    ['programme', programmeId ? URLS.managementPrioritiesForProgramme.getUrl(programmeId) : null],\n                                    ['priority', priorityId ? URLS[getActivityUrlByPerspectiveData(data.perspective)].getUrl(priorityId) : null],\n                                    ['activity', activityId ? URLS[getActivityChildUrlByPerspectiveData(data.perspective)].getUrl(activityId) : null]\n                                ].map(([levelName, levelUrl]) => {\n                                    if (levelUrl && data[levelName]) {\n                                        const levelData = data[levelName] || {};\n                                        return (\n                                            <p key={levelName} className=\"administration__indented\">\n                                                <span className=\"administration__code\">{levelData.code}</span>\n                                                <Link to={levelUrl} className=\"link-text\">\n                                                    {levelData.name}\n                                                </Link>\n                                            </p>\n                                        )\n                                    }\n                                    return null\n                                })}\n                            </div>\n                            <GridCustom fullwidth flexTop>\n                                <PaginatedListHeader\n                                    title={tableName}\n                                    total={data.meta ? data.meta.total : 0} />\n                                {addItemButtonVisible && editingDictionariesPermission && (\n                                    <ButtonStyled add onClick={() => setFormOn(true)}>\n                                        {addItemButtonLabel || 'Dodaj'}\n                                    </ButtonStyled>\n                                )}\n                            </GridCustom>\n                            {items.length > 0 && (\n                                <TableCustom tableHeaderList={tableHeaderList}>\n                                    {items.map(item => (\n                                        <RowComponent\n                                            key={item.id}\n                                            item={item}\n                                            perspectiveData={data.perspective || {}}\n                                            {...rowComponentProps}\n                                            onEdit={handleSetEditedItem}\n                                            onDelete={handleSetDeletedItem}\n                                        />\n                                    ))}\n                                </TableCustom>\n                            )}\n                            {formOn && (\n                                <ImplementationLevelForm\n                                    addApiUrlName={addApiUrlName}\n                                    additionalSaveData={additionalSaveData}\n                                    codeMaxLength={codeMaxLength}\n                                    editApiUrlName={editApiUrlName}\n                                    originalData={editedItem}\n                                    parentFormLabel={parentFormLabel}\n                                    titleFormLabel={titleFormLabel}\n                                    onCancel={handleCancelFormOn}\n                                    onSave={handleUpdateRequestId}\n                                />\n                            )}\n                            {deletedItem !== null && (\n                                <DeleteImplementationLevel\n                                    apiUrlName={editApiUrlName}\n                                    item={deletedItem}\n                                    parentFormLabel={parentFormLabel}\n                                    perspectiveData={data.perspective || {}}\n                                    RelatedObjectsExistInfoComponent={RelatedObjectsExistInfoComponent}\n                                    titleFormLabel={titleFormLabel}\n                                    onCancel={handleCancelDeleting}\n                                    onDelete={handleUpdateRequestId}\n                                />\n                            )}\n                            {showAuditData && auditDataObjectName &&\n                                <AuditData\n                                    {...serializeAuditData(data[auditDataObjectName])}\n                                    titleOneRow={`${auditDataBoxTitle} ${parentFormLabel}`}\n                                />\n                            }\n                        </Container>\n                    )\n            }\n        </>\n    )\n};\n","import React from 'react';\n\nimport { DialogCustom, FiltersButton, GridCustom, SortersSelect } from '../../common';\n\n\nexport const SortersFiltersRow = ({\n        filters, filtersAreOn, FiltersComponent, onCloseFilters, onUpdateFilters, ...props}) => {\n    return (\n        <>\n            <GridCustom className=\" search__options\">\n                <SortersSelect {...props} />\n                <FiltersButton {...props} />\n            </GridCustom>\n            {filtersAreOn && (\n                <DialogCustom\n                    className=\"dialog-long-content\"\n                    onClose={onCloseFilters}\n                >\n                    <FiltersComponent\n                        filters={filters}\n                        onCloseFilters={onCloseFilters}\n                        onUpdateFilters={onUpdateFilters} />\n                </DialogCustom>\n            )}\n        </>\n    )\n}\n","import React from 'react';\n\nimport { ButtonStyled } from './ButtonStyled';\nimport { GridCustom } from './GridCustom';\n\n\nconst Pagination = (props) => {\n    const {\n        currentPage,\n        disabled,\n        handleChangePage,\n        hasNext,\n        hasPrev\n    } = props;\n\n    return (\n        <GridCustom centerVertical oneRow fullwidth className=\"pagination\">\n            <ButtonStyled disabled={disabled || !hasPrev} onClick={() => handleChangePage(false)} lite>Poprzednia<span className=\"sr-only\"> strona</span></ButtonStyled>\n            <span className=\"pagination__current\">{currentPage}</span>\n            <ButtonStyled disabled={disabled || !hasNext} onClick={() => handleChangePage(true)} lite>Następna<span className=\"sr-only\"> strona</span></ButtonStyled>\n        </GridCustom>\n    )\n}\n\nexport { Pagination };\n","import React from 'react';\nimport { Text, View, StyleSheet } from '@react-pdf/renderer';\n\nimport { datetimeToString } from '../../helpers';\n\n\nconst PdfHeader = (props) => {\n\n    const {\n        flexContainerStyle,\n        metaSectionStyle,\n        textInfoStyle,\n    } = styles;\n\n    return (\n        <View style={metaSectionStyle} fixed>\n            <View style={flexContainerStyle}>\n                <Text style={textInfoStyle}>Wygenerowano: {datetimeToString(new Date())}</Text>\n                <Text render={({ pageNumber, totalPages }) => (\n                        `Strona ${pageNumber} / ${totalPages}`\n                    )} fixed style={textInfoStyle} />\n            </View>\n            <Text style={textInfoStyle}>Wygenerowano za pośrednictwem serwisu Baza Konkurencyjności.</Text>\n            {props.title && props.title.length > 0 && <Text style={[textInfoStyle, {maxHeight: 30}]}>{props.title}</Text>}\n        </View>\n    );\n}\n\nconst styles = StyleSheet.create({\n    metaSectionStyle: {\n        paddingHorizontal: 20,\n        paddingVertical: 5,\n        paddingBottom: 0,\n        marginHorizontal: -20,\n        marginTop: -10,\n        marginBottom: 10,\n        borderBottomWidth: 1,\n        borderBottomColor: '#666A6D',\n        borderBottomStyle: 'dashed',\n    },\n    flexContainerStyle: {\n        display: 'flex',\n        flexDirection: 'row',\n        justifyContent: 'space-between',\n    },\n    textInfoStyle: {\n        marginBottom: 5,\n        fontSize: 10,\n        fontStyle: 'italic',\n        color: '#666A6D'\n    },\n});\n\n\nexport { PdfHeader };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { Typography } from '@rmwc/typography';\nimport '@material/list/dist/mdc.list.css';\n\n\nconst SkipLinks = (props) => {\n    return (\n        <nav aria-label=\"Nawigacja pomocnicza\">\n            <ul>\n                {props.children.map((link) =>\n                    <li key={link.id}>\n                        <Typography\n                            tag={Link}\n                            to={link.linkTo}\n                            className=\"skip-link\"\n                            tabIndex={link.id} >\n                            {link.label}\n                        </Typography>\n                    </li>\n                )}\n            </ul>\n        </nav>\n    )\n}\n\n\nexport { SkipLinks };\n","import React from 'react';\nimport { setFocusOnElement } from '../../helpers';\nimport { NextStep } from '.';\n\n\nconst Steps = (props) => {\n    const className = \"next-step-container\" + (!props.hasPrev ? ' next-step-container--one-item' : '');\n    return (\n        <section className={className}>\n            {props.hasPrev && <NextStep\n                disabled={props.disabled || false}\n                onClick={() => {\n                    setFocusOnElement(props.elementToFocusRef)\n                    props.onPrevClick()\n                }}\n                stepTitle={props.prevLabel}\n                prevStep\n            />}\n            {props.hasNext && <NextStep\n                disabled={props.disabled || false}\n                onClick={() => {\n                    setFocusOnElement(props.elementToFocusRef)\n                    props.onNextClick()\n                }}\n                stepTitle={props.nextLabel}\n            />}\n        </section>\n    );\n}\n\nexport { Steps };\n","// USAGE:\n// This component renders \"outer\" part of the table: table layout, header and body wrapper.\n// It doesnt render <tbody></tbody> content.\n// To fill in the table, please provide imports:\n//  import { TableCustom } from '<path_to>/common';\n//  import { DataTableCell, DataTableRow } from '@rmwc/data-table';\n// and fill in the <DataTableRow/> as needed.\n// Expample:\n// <TableCustom tableHeaderList={['Col1 header', 'Col2 header', 'Col3 header']}>\n//    <DataTableRow>\n//        <DataTableCell>Col1 content</DataTableCell>\n//        <DataTableCell>Col2 content</DataTableCell>\n//        <DataTableCell>Col3 content</DataTableCell>\n//    </DataTableRow >\n// </TableCustom>\n\nimport React from 'react';\nimport {\n    DataTable,\n    DataTableBody,\n    DataTableContent,\n    DataTableHead,\n    DataTableHeadCell,\n    DataTableRow,\n} from '@rmwc/data-table';\nimport { Typography } from '@rmwc/typography';\n\nconst TableCustom = (props) => {\n    const {\n        children,\n        tableHeaderList,\n        ...otherProps\n    } = props;\n\n    return (\n        <DataTable className=\"table table--full-width\" {...otherProps}>\n            <DataTableContent>\n                <DataTableHead>\n                    <DataTableRow>\n                        {tableHeaderList.map(tableHeader => \n                            <DataTableHeadCell key={tableHeader}>\n                                <Typography use=\"subtitle2\" className=\"table__header\">\n                                    {tableHeader}\n                                </Typography>\n                            </DataTableHeadCell>\n                        )}\n                    </DataTableRow>\n                </DataTableHead>\n                <DataTableBody>\n                    {children}\n                </DataTableBody>\n            </DataTableContent>\n        </DataTable>\n    );\n}\n\nexport { TableCustom };\n","// https://jpuri.github.io/react-draft-wysiwyg/\n\nimport React, { Component } from 'react';\nimport { Editor } from 'react-draft-wysiwyg';\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css';\n\nimport { countWysiwygChars } from '../../helpers';\nimport { GridCustom } from './GridCustom';\nimport { Text } from './Text';\n\n\nclass WysiwygEditor extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {counter: countWysiwygChars(props.initialContentState)};\n\n        this.handleContentStateChange = this.handleContentStateChange.bind(this);\n    }\n\n    // handlers\n\n    handleContentStateChange(contentState) {\n        this.props.onContentStateChange(contentState);\n        this.setState({counter: countWysiwygChars(contentState)});\n    }\n\n    // rendering\n\n    render() {\n\n        const props_ = Object.assign({}, this.props, {\n            onContentStateChange: this.handleContentStateChange\n        });\n\n        return (\n            <section className={this.props.wysiwygClassName || 'wysiwyg'}>\n                <Editor {...props_} wrapperClassName=\"wysiwyg__wrapper\" editorClassName=\"wysiwyg__editor\" stripPastedStyles={true} />\n                <GridCustom centerVertical flexEnd><Text className=\"wysiwyg__counter\">{this.state.counter}{!this.props.maxLength ? '' : ' / ' + this.props.maxLength}</Text></GridCustom>\n            </section>\n        );\n    }\n}\n\nexport { WysiwygEditor };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { Message } from '../../common';\n\n\nconst BladLogowania = (props) => {\n    return (\n        <Message\n            error\n            messageIcon=\"highlight_off\"\n            messageTitle=\"Wystąpił błąd logowania.\" >\n            Przejdź na <Link to={'/'} className=\"link-text\">stronę główną</Link>.\n        </Message>\n    )\n}\n\n\nexport { BladLogowania };\n","import React, { Component } from 'react';\n\nimport { USER_STATUS_CHOICES } from '../../../const';\nimport {\n    ButtonStyled,\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nclass FiltryUzytkownikow extends Component {\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            filters: props.filters,\n        };\n\n        this.handleApplyFilters = this.handleApplyFilters.bind(this);\n    }\n\n    //handlers\n\n    handleChangeFilter(name, value) {\n        this.setState(prevState => {\n            return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n        });\n    }\n\n    handleApplyFilters() {\n        this.props.updateFilters(this.state.filters);\n    }\n\n    // rendering\n\n    render() {\n        const filters = this.state.filters;\n        return (\n            <>\n                <section className=\"filters-dialog__filters-section\">\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel label=\"Identyfikator użytkownika\" tag=\"label\" labelFor=\"filters_identifier_id\">\n                            <TextFieldCustom\n                                className=\"filters__input\"\n                                clearFieldContext=\"identyfikator użytkownika\"\n                                id=\"filters_identifier_id\"\n                                value={filters.identifier}\n                                onChange={(ev) => this.handleChangeFilter('identifier', ev.target.value)}\n                                onClear={(ev) => this.handleChangeFilter('identifier', '')} />\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Adres e-mail\" tag=\"label\" labelFor=\"filters_email_id\">\n                            <TextFieldCustom\n                                clearFieldContext=\"adres e-mail\"\n                                value={filters.email}\n                                onChange={(ev) => this.handleChangeFilter('email', ev.target.value)}\n                                className=\"filters__input\"\n                                onClear={(ev) => this.handleChangeFilter('email', '')}\n                                id=\"filters_email_id\"\n                            />\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel label=\"Imię\" tag=\"label\" labelFor=\"filters_name_id\">\n                            <TextFieldCustom\n                                clearFieldContext=\"imię\"\n                                value={filters.forename}\n                                onChange={(ev) => this.handleChangeFilter('forename', ev.target.value)}\n                                className=\"filters__input\"\n                                onClear={(ev) => this.handleChangeFilter('forename', '')}\n                                id=\"filters_name_id\"\n                            />\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Nazwisko\" tag=\"label\" labelFor=\"filters_surname_id\">\n                            <TextFieldCustom\n                                clearFieldContext=\"nazwisko\"\n                                value={filters.surname}\n                                onChange={(ev) => this.handleChangeFilter('surname', ev.target.value)}\n                                className=\"filters__input\"\n                                onClear={(ev) => this.handleChangeFilter('surname', '')}\n                                id=\"filters_surname_id\"\n                            />\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel\n                            label=\"Status\"\n                            tag=\"label\"\n                            selectRef={React.createRef()}>\n                            <Select\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                className=\"select-custom\"\n                                options={USER_STATUS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n                                value={{value: filters.status.value || USER_STATUS_CHOICES[0][0], label: filters.status.label || USER_STATUS_CHOICES[0][1]}}\n                                onChange={(selectedOption) => this.handleChangeFilter('status', selectedOption)}\n                                styles={customSelectStyles}\n                            />\n                        </FieldWithLabel>\n                    </GridCustom>\n                </section>\n                <GridCustom flexEnd>\n                    <ButtonStyled onClick={this.props.closeFilters} cancel>Anuluj</ButtonStyled>\n                    <ButtonStyled onClick={this.handleApplyFilters} primary>Zastosuj kryteria</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    }\n}\n\n\nexport { FiltryUzytkownikow };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n    getSerializedErrorsFromServer,\n    getSerializedObject,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    ButtonStyled, Container, DialogCustom, FieldWithLabel, GridCustom,\n    NotFoundPage, NotPermittedPage, Pagination, Select, Text\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nclass BaseComponent extends Component {\n    message403 = null;\n\n    constructor(props) {\n        super(props);\n\n        this.preState(props);\n        this.formPreState(props);\n        this.state = Object.assign(\n            {\n                initializingOn: true,\n                pageNotFound: false,\n                pageNotPermitted: false,\n                fetchError: '',\n            },\n            this.getAdditionalState(props),\n            this.getFormAdditionalState(props)\n        );\n        this.postState(props);\n        this.formPostState(props);\n\n        this.xhrFetch = null;\n\n        this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n        this.handleFetchError = this.handleFetchError.bind(this);\n        this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n\n        this.setAdditionalHandlers();\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        window.scrollTo(0, 0);\n\n        this.fetchInitialData();\n    }\n\n    componentWillUnmount() {\n        // abort api request if exists\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n\n        // clear timeouts if exist\n        if (this.saveMsgTimeout !== null) {\n            clearTimeout(this.saveMsgTimeout);\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n    }\n\n    handleFetchError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            initializingOn: false,\n            fetchError: this.getFetchError(data.message || ''),\n        });\n    }\n\n    handleFetchIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        if (status === 404) {\n            this.setState({initializingOn: false, pageNotFound: true});\n        } else if (status === 403) {\n            this.setState(\n                {\n                    initializingOn: false,\n                    pageNotPermitted: true,\n                },\n                this.callback403\n            );\n        } else {\n            this.setState({\n                initializingOn: false,\n                fetchError: this.getFetchIncorrectStatusError(status),\n            });\n        }\n    }\n\n    // helpers\n\n    preState(props) {\n        return\n    }\n\n    formPreState(props) {\n        return\n    }\n\n    getAdditionalState(props) {\n        return {}\n    }\n\n    getFormAdditionalState(props) {\n        return {}\n    }\n\n    postState(props) {\n        this.saveMsgTimeout = null;\n    }\n\n    formPostState(props) {\n        return\n    }\n\n    setAdditionalHandlers() {\n        return\n    }\n\n    fetchInitialData() {\n        // get object(s) from server\n        this.xhrFetch = fetchApi(\n            this.getFetchUrl(),\n            this.getFetchMethod(),\n            {},\n            this.getFetchData(),\n            this.handleFetchSuccess,\n            this.handleFetchError,\n            this.handleFetchIncorrectStatus,\n        );\n    }\n\n    getFetchUrl() {\n        throw new Error('Not implemented fetch url!')\n    }\n\n    getFetchMethod() {\n        return 'GET'\n    }\n\n    getFetchData() {\n        return {}\n    }\n\n    getFetchError(message) {\n        return translateErrorMessage(message)\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => { return }\n\n    // rendering\n\n    render() {\n        if (this.state.pageNotFound) { return <NotFoundPage /> }\n        if (this.state.pageNotPermitted) {\n            return <NotPermittedPage message={this.message403} />\n        }\n\n        let content = null;\n        if (this.state.initializingOn) {\n            content = <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n        } else if (this.state.fetchError.length) {\n            content = this.renderFetchError();\n        } else {\n            content = this.renderElements();\n        }\n\n        return (\n            <>\n                {this.renderHeader()}\n                {this.renderBeforeContent()}\n                {content}\n            </>\n        )\n    }\n\n    renderFetchError() {\n        return <Text error role=\"alert\">{this.state.fetchError}</Text>\n    }\n\n    renderHeader() {\n        return null\n    }\n\n    renderBeforeContent() {\n        return null\n    }\n\n    renderElements() {\n        return this.renderContent()\n    }\n\n    renderContent() {\n        return null\n    }\n}\n\n\nclass FormBaseComponent extends BaseComponent {\n\n    // basic functions\n\n    componentWillUnmount() {\n        super.componentWillUnmount();\n\n        if (this.xhrFetchSave !== null) {\n            this.xhrFetchSave.abort();\n        }\n    }\n\n    // handlers\n\n    handleSave = () => {\n        this.setState(\n            {savingOn: true, errors: {}, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n            () => {\n                this.xhrFetchSave = fetchApi(\n                    this.getSaveUrl(),\n                    this.getSaveMethod(),\n                    {},\n                    this.getDataForSaving(),\n                    this.handleFetchSaveSuccess,\n                    this.handleFetchSaveError,\n                    this.handleFetchSaveIncorrectStatus,\n                    this.handleShowSaveErrors,\n                );\n            }\n        );\n    }\n\n    handleFetchSaveSuccess(data) {\n        this.xhrFetchSave = null;\n    }\n\n    handleFetchSaveError = (data) => {\n        this.xhrFetchSave = null;\n        this.setState({\n            fetchSaveError: this.getFetchSaveError(data.message),\n            saveBtnText: this.saveBtnDefaultText,\n            savingOn: false,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus = (status) => {\n        this.xhrFetchSave = null;\n        this.setState({\n            fetchSaveError: this.getFetchSaveIncorrectStatusError(status),\n            saveBtnText: this.saveBtnDefaultText,\n            savingOn: false,\n        });\n    }\n\n    handleShowSaveErrors = (errors) => {\n        this.xhrFetchSave = null;\n        this.setState({\n            errors: getSerializedErrorsFromServer(errors),\n            saveBtnText: this.saveBtnDefaultText,\n            savingOn: false,\n        });\n    }\n\n    // helpers\n\n    formPreState(props) {\n        this.saveBtnDefaultText = 'Zapisz zmiany';\n    }\n\n    getFormAdditionalState(props) {\n        return {\n            savingOn: false,\n            errors: {},\n            fetchSaveError: '',\n            saveBtnText: this.saveBtnDefaultText,\n        }\n    }\n\n    formPostState(props) {\n        this.xhrFetchSave = null;\n        this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this)\n    }\n\n    getSaveUrl() {\n        throw new Error('Not implemented save fetch url!')\n    }\n\n    getSaveMethod() {\n        return 'POST'\n    }\n\n    getDataForSaving() {\n        return {}\n    }\n\n    getFetchSaveError(message) {\n        return translateErrorMessage(message)\n    }\n\n    getFetchSaveIncorrectStatusError(status) {\n        return `Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n}\n\n\nclass PaginatedBaseComponent extends BaseComponent {\n    withUrlUpdating = false;\n    mapToCamelCaseNameFromServer = false;\n\n    componentDidUpdate(prevProps, prevState) {\n        // it manages every url change, including back button\n        // don't init again from handlers\n        const prevParams = prevProps.location.search;\n        const params = this.props.location.search;\n        if (prevParams !== params) {\n            this.setState(\n                {initializingOn: true},\n                this.fetchInitialData\n            );\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data){\n        super.handleFetchSuccess(data);\n\n        const total = data.meta.total;\n        const config = this.mapToCamelCaseNameFromServer ? {mapToCamelCaseName: true} : {}\n        this.setState(prevState => ({\n            initializingOn: false,\n            objects: getSerializedObject(data, config)[this.objectsName] || [],\n            total: total,\n            hasPrev: this.checkHasPrev(),\n            hasNext: this.checkHasNext(total, prevState.pageNumber),\n        }));\n    }\n\n    handleFetchIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        if (status === 403) {\n            this.setState(\n                {\n                    initializingOn: false,\n                    pageNotPermitted: true,\n                },\n                this.callback403\n            );\n            return\n        }\n        this.setState({\n            initializingOn: false,\n            fetchError: this.getFetchIncorrectStatusError(status),\n        });\n    }\n\n    handleChangePage = (next=true) => {\n        this.setState(\n            prevState => ({\n                pageNumber: next ? prevState.pageNumber + 1 : Math.max(prevState.pageNumber -1, 1)}),\n            this.reinitializeData\n        );\n    }\n\n    handleChangeSort = (selectedOption) => {\n        this.setState(\n            {selectedSort: selectedOption},\n            this.reinitializeData\n        )\n    }\n\n     handleApplyFilters = (filters) => {\n        let data = {\n            filters,\n            filtersAreOn: false,\n            fetchError: '',\n            objects: [],\n            pageNumber: 1,  // reset pageNumber\n        };\n        if (!this.withUrlUpdating) {\n            Object.assign(data, {\n                initializingOn: true,\n            });\n        }\n        this.setState(data, this.reinitializeData);\n    }\n\n    handleCloseFilters = () => {\n        this.setState({filtersAreOn: false});\n    }\n\n    // helpers\n\n    preState(props) {\n        this.dialogComponent = null;\n\n        // redefine these values in your class if needed\n        this.objectsName = 'objects';\n        this.paginateBy = 50;\n        this.sortingValues = [];\n        this.sortingLabel = 'Sortuj wyniki wyszukiwania';\n        this.filteringLabel = 'Opcje zaawansowane';\n        this.filtersComponentClass = null;\n\n        this.getFiltersCount = (filters) => { return 0 };\n    }\n\n    getAdditionalState(props) {\n        const params = new URLSearchParams(props.location.search);\n        let pageNumber = parseInt(params.get('strona'));\n        if (!(pageNumber > 0)) {\n            pageNumber = 1;\n        }\n\n        return {\n            pageNumber: pageNumber,\n            total: 0,\n            hasNext: false,\n            hasPrev: false,\n            selectedSort: {value: 0, label: ''},\n            filtersAreOn: false,\n            filters: {},\n            objects: [],\n        }\n    }\n\n    reinitializeData = () => {\n        if (this.withUrlUpdating) {\n            // only update url, it will fetch after url changing\n            this.updateUrl();\n        } else {\n            this.fetchInitialData();\n        }\n    }\n    \n    updateUrl() {\n        // remember to have an access to history\n        this.props.history.push(\n            `${window.location.pathname}?strona=${this.state.pageNumber}${this.getUrlParams()}`);\n    }\n\n    getUrlParams() {\n        // define url params as string; page number is already applied\n        return ''\n    }\n\n    getFetchData() {\n        return {\n            page: this.state.pageNumber,\n            limit: this.paginateBy,\n            sort: this.state.selectedSort.value,\n        };\n    }\n\n    checkHasNext(total, pageNumber) {\n        return Math.ceil(total / this.paginateBy) > (pageNumber || this.state.pageNumber)\n    }\n\n    checkHasPrev() {\n        return this.state.pageNumber > 1\n    }\n\n    // rendering\n\n    renderBeforeContent() {\n        return (\n            <>\n                <GridCustom className=\" search__options\">\n                    {this.renderSorters()}\n                    {this.renderFiltersButton()}\n                </GridCustom>\n                {this.state.filtersAreOn && this.renderFilters()}\n            </>\n        )\n    }\n\n    renderElements() {\n        return (\n            <>\n                <Container>\n                    {this.renderContent()}\n                </Container>\n                {this.renderAdditionalAfterBaseContent()}\n            </>\n        )\n    }\n\n    renderSorters() {\n        return (\n            <FieldWithLabel\n                label={this.sortingLabel}\n                tag=\"label\"\n                selectRef={React.createRef()}\n                className=\"search__select-sorter\" >\n                <Select\n                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                    className=\"selectClassName\"\n                    options={this.sortingValues.map(value => ({value: value[0], label: value[1]}))}\n                    value={this.state.selectedSort}\n                    onChange={this.handleChangeSort}\n                    styles={customSelectStyles}\n                    noOptionsMessage={() => 'Brak wybranej opcji'}\n                />\n            </FieldWithLabel>\n        )\n    }\n\n    renderFiltersButton() {\n        return (\n            <ButtonStyled\n                lite\n                onClick={(e) => {\n                    this.setState({filtersAreOn: true});\n                    e.currentTarget.blur();\n                }}>\n                {this.filteringLabel} <span className=\"btn--counter btn--counter-primary\" title=\"Aktywne filtry\">\n                    <span className=\"sr-only\"> Liczba aktywnych filtrów </span>{this.renderFiltersCount()}\n                </span>\n            </ButtonStyled>\n        )\n    }\n\n    renderFiltersCount() {\n        return this.getFiltersCount(this.state.filters)\n    }\n\n    renderContent() {\n        if (!this.state.objects.length) {\n            return this.renderEmptyObjects()\n        }\n        return (\n            <>\n                {this.renderList()}\n                <Pagination\n                    currentPage={this.state.pageNumber}\n                    hasNext={this.state.hasNext}\n                    hasPrev={this.state.hasPrev}\n                    handleChangePage={this.handleChangePage} />\n            </>\n        )\n    }\n\n    renderEmptyObjects() { return null }\n\n    renderList() { return null }\n\n    renderFilters() {\n        return (\n            <DialogCustom\n                className=\"dialog-long-content\"\n                dialogRef={c => this.dialogComponent = c}\n                onClose={this.handleCloseFilters}\n            >\n                {this.renderFiltersComponent()}\n            </DialogCustom>\n        )\n    }\n\n    renderFiltersComponent() {\n        return <this.filtersComponentClass\n                    filters={this.state.filters}\n                    closeFilters={this.handleCloseFilters}\n                    updateFilters={this.handleApplyFilters} />\n    }\n\n    renderAdditionalAfterBaseContent() {\n        return null\n    }\n}\n\n\nexport { BaseComponent, FormBaseComponent, PaginatedBaseComponent };\n","import React from 'react';\nimport { Typography } from '@rmwc/typography';\n\nimport { FieldWithLabel, GridCustom, Text } from '../../common';\n\n\nconst DanePodmiotu = (props) => {\n    const danePodmiotu = props.danePodmiotu;\n    const adres = danePodmiotu.adres;\n    return (\n        <>\n            <Typography use=\"headline5\" className=\"long-text\">{danePodmiotu.nazwa}</Typography>\n            <GridCustom flexM fullwidth className=\"company-meta\">\n                <FieldWithLabel label=\"Rodzaj adresu\">\n                    <Text>{danePodmiotu.rodzajAdresu.label}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label={danePodmiotu.typNumeruIdentyfikacyjnego.label}>\n                    <Text>{danePodmiotu.numerIdentyfikacyjny}</Text>\n                </FieldWithLabel>\n                {danePodmiotu.rodzajAdresu.value === 'abroad' && (\n                    <FieldWithLabel label=\"Kraj\">\n                        <Text>{adres.kraj}</Text>\n                    </FieldWithLabel>\n                )}\n                <FieldWithLabel label=\"Miejscowość\">\n                    <Text>{adres.kodPocztowy} {adres.miejscowosc}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Adres\">\n                    <Text>{adres.ulica || ''} {adres.numerDomu || ''}</Text>\n                </FieldWithLabel>\n            </GridCustom>\n        </>\n    );\n}\n\n\nexport { DanePodmiotu };\n","import React, { Component } from 'react';\n\nimport {\n    RODZAJ_ADRESU_CHOICES,\n    TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES\n} from '../../../const';\nimport { FieldWithLabel, GridCustom, Select, Text, TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKraj, FormMiejscowosc } from '../common';\n\n\nclass FormDanePodmiotuFields extends Component {\n\n    // handlers\n    handlePasteNumerIdentyfikacyjny = (ev, maxLength) => {\n        // stop data actually being pasted into input\n        ev.stopPropagation();\n        ev.preventDefault();\n\n        // set pasted data via clipboard API\n        const clipboardData = ev.clipboardData || window.clipboardData;\n        const pastedData = clipboardData.getData('Text');\n        this.props.changeNumerIdentyfikacyjny(pastedData, true, maxLength);\n    }\n\n    // rendering\n\n    render() {\n        const {changeAttribute, data, errors, formLocked } = this.props;\n        const adres = data.adres;\n        const poland = data.rodzajAdresu.value === 'poland';\n\n        const isNazwaInvalid = (errors.nazwa || []).length > 0;\n        const adresErrors = errors.adres || {};\n        const isKodPocztowyInvalid = (adresErrors.kodPocztowy || []).length > 0;\n        const isUlicaInvalid = (adresErrors.ulica || []).length > 0;\n        const isNumerDomuInvalid = (adresErrors.numerDomu || []).length > 0;\n        const isFormInvalid = isNazwaInvalid || adresErrors.length > 0 || isKodPocztowyInvalid || isUlicaInvalid || isNumerDomuInvalid;\n\n        return (\n            <>\n                <GridCustom fullwidth flexM>\n                    <FieldWithLabel label=\"Nazwa\" tag=\"label\" labelFor=\"name_id\">\n                        <TextFieldCustom\n                            aria-describedby={isNazwaInvalid ? 'name_error' : null}\n                            aria-label={`Nazwa, maksymalna liczba znaków: 250. Wpisano ${data.nazwa.length} znaków.`}\n                            autoComplete=\"organization\"\n                            autoFocus\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"nazwa\"\n                            disabled={formLocked}\n                            id=\"name_id\"\n                            invalid={isNazwaInvalid}\n                            maxLength={250}\n                            value={data.nazwa}\n                            onChange={(ev) => changeAttribute('nazwa', ev.target.value)}\n                            onClear={(ev) => changeAttribute('nazwa', '')} />\n                        {isNazwaInvalid && <ul id=\"name_error\">{errors.nazwa.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                    </FieldWithLabel>\n                </GridCustom>\n                <GridCustom fullwidth flexM>\n                    <FieldWithLabel\n                        label=\"Rodzaj adresu\"\n                        tag=\"label\"\n                        selectRef={React.createRef()}>\n                        <Select\n                            screenReaderStatus={() => {return 'Wybierz opcję z listy rozwijanej'}}\n                            className=\"select-custom\"\n                            isDisabled={formLocked}\n                            options={RODZAJ_ADRESU_CHOICES}\n                            value={data.rodzajAdresu}\n                            onChange={selectedOption => this.props.changeRodzajAdresu(selectedOption)}\n                            styles={customSelectStyles} />\n                    </FieldWithLabel>\n                    {this.renderIdentyfikator()}\n                </GridCustom>\n                {this.renderKraj()}\n                {this.renderMiejscowosc()}\n                <GridCustom fullwidth flexM>\n                    <FieldWithLabel label=\"Kod pocztowy\" tag=\"label\" labelFor=\"postal_code_id\">\n                        <TextFieldCustom\n                            aria-describedby={isKodPocztowyInvalid ? 'postal_code_error' : null}\n                            aria-label={`Kod pocztowy, maksymalna liczba znaków: ${poland ? 6 : 10}. Wpisano ${adres.kodPocztowy.length} znaków.`}\n                            autoComplete=\"postal-code\"\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"kod pocztowy\"\n                            disabled={formLocked}\n                            id=\"postal_code_id\"\n                            invalid={isKodPocztowyInvalid}\n                            maxLength={poland ? 6 : 10}\n                            value={adres.kodPocztowy}\n                            onChange={(ev) => changeAttribute('kodPocztowy', ev.target.value, true)}\n                            onClear={(ev) => changeAttribute('kodPocztowy', '', true)} />\n                        {isKodPocztowyInvalid && <ul id=\"postal_code_error\">{adresErrors.kodPocztowy.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Ulica\" tag=\"label\" labelFor=\"street_id\">\n                        <TextFieldCustom\n                            aria-describedby={isUlicaInvalid ? 'street_error' : null}\n                            aria-label={`Ulica, maksymalna liczba znaków: 255. Wpisano ${adres.ulica.length} znaków.`}\n                            autoComplete=\"address-line1\"\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"ulica\"\n                            disabled={formLocked}\n                            id=\"street_id\"\n                            invalid={isUlicaInvalid}\n                            maxLength={255}\n                            value={adres.ulica}\n                            onChange={(ev) => changeAttribute('ulica', ev.target.value, true)}\n                            onClear={(ev) => changeAttribute('ulica', '', true)} />\n                        {isUlicaInvalid && <ul id=\"street_error\">{adresErrors.ulica.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Numer\" tag=\"label\" labelFor=\"number_id\">\n                        <TextFieldCustom\n                            aria-describedby={isNumerDomuInvalid ? 'number_error' : null}\n                            aria-label={`Numer, maksymalna liczba znaków: 120. Wpisano ${adres.numerDomu.length} znaków.`}\n                            autoComplete=\"address-line1\"\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"numer\"\n                            disabled={formLocked}\n                            id=\"number_id\"\n                            invalid={isNumerDomuInvalid}\n                            maxLength={120}\n                            value={adres.numerDomu}\n                            onChange={(ev) => changeAttribute('numerDomu', ev.target.value, true)}\n                            onClear={(ev) => changeAttribute('numerDomu', '', true)} />\n                        {isNumerDomuInvalid && <ul id=\"number_error\">{adresErrors.numerDomu.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                    </FieldWithLabel>\n                </GridCustom>\n                {isFormInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n            </>\n        )\n    }\n\n    renderKraj() {\n        if (this.props.data.rodzajAdresu.value === 'poland') {\n            return null\n        }\n        const krajErrors = (this.props.errors.adres || {}).kraj || [];\n        const isKrajInvalid = krajErrors.length > 0;\n        return (\n            <FormKraj\n                error={isKrajInvalid ? krajErrors[0] : ''}\n                formLocked={this.props.formLocked}\n                invalid={isKrajInvalid}\n                isClearable\n                krajName={this.props.data.adres.kraj}\n                changeKraj={(selectedOption) => this.props.changeAttribute(\n                    'kraj', selectedOption === null ? null : selectedOption.label, true\n                )} />\n        )\n    }\n\n    renderMiejscowosc() {\n        const miejscowoscErrors = (this.props.errors.adres || {}).miejscowosc || [];\n        const isMiejscowoscInvalid = miejscowoscErrors.length > 0;\n        const { data, formLocked } = this.props;\n        const adres = data.adres;\n        if (data.rodzajAdresu.value === 'poland') {\n            const miejscowosc = adres.miejscowosc.length > 0 ? {\n                wojewodztwo: adres.wojewodztwo,\n                powiat: adres.powiat,\n                gmina: adres.gmina,\n                miejscowosc: adres.miejscowosc,\n            } : null;\n            return (\n                <FormMiejscowosc\n                    error={isMiejscowoscInvalid ? miejscowoscErrors[0] : ''}\n                    formLocked={formLocked}\n                    invalid={isMiejscowoscInvalid}\n                    miejscowosc={miejscowosc}\n                    changeMiejscowosc={this.props.changeMiejscowosc} />\n            )\n        }\n        return (\n            <FieldWithLabel label=\"Miejscowość\" tag=\"label\" labelFor=\"city_id\">\n                <TextFieldCustom\n                    aria-describedby={isMiejscowoscInvalid ? 'city_error' : null}\n                    aria-label={`Miejscowość, maksymalna liczba znaków: 100. Wpisano ${adres.miejscowosc.length} znaków.`}\n                    autoComplete=\"address-line2\"\n                    characterCount\n                    className=\"filters__input\"\n                    clearFieldContext=\"miejscowość\"\n                    disabled={formLocked}\n                    id=\"city_id\"\n                    invalid={isMiejscowoscInvalid}\n                    maxLength={100}\n                    value={adres.miejscowosc}\n                    onChange={ev => this.props.changeAttribute('miejscowosc', ev.target.value, true)}\n                    onClear={ev => this.props.changeAttribute('miejscowosc', '', true)} />\n                {isMiejscowoscInvalid && <ul id=\"city_error\">{miejscowoscErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n            </FieldWithLabel>\n        )\n    }\n\n    renderIdentyfikator() {\n        const { data, formLocked } = this.props;\n        const numerIdentyfikacyjnyErrors = this.props.errors.numerIdentyfikacyjny || [];\n        const isNumerIdentyfikacyjnyInvalid = numerIdentyfikacyjnyErrors.length > 0;\n\n        if (data.rodzajAdresu.value !== 'poland') {\n            return (\n                <FieldWithLabel label=\"Numer identyfikacyjny\" tag=\"label\" labelFor=\"identification_number_id\">\n                    <TextFieldCustom\n                        aria-describedby={`identification_number_info${isNumerIdentyfikacyjnyInvalid ? ' identification_number_error' : ''}`}\n                        aria-label={`Numer identyfikacyjny (dla podmiotów zagranicznych), maksymalna liczba znaków: 255. Wpisano ${data.numerIdentyfikacyjny.length} znaków.`}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"numer identyfikacyjny\"\n                        disabled={formLocked}\n                        id=\"identification_number_id\"\n                        invalid={isNumerIdentyfikacyjnyInvalid}\n                        maxLength={255}\n                        value={data.numerIdentyfikacyjny}\n                        onChange={ev => this.props.changeNumerIdentyfikacyjny(ev.target.value)}\n                        onClear={ev => this.props.changeNumerIdentyfikacyjny('')} />\n                    <Text info id=\"identification_number_info\">(dla podmiotów zagranicznych)</Text>\n                    {isNumerIdentyfikacyjnyInvalid && (\n                        <>\n                            <ul id=\"identification_number_error\">{numerIdentyfikacyjnyErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n                            <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy!</span>\n                        </>\n                    )}\n                </FieldWithLabel>\n            )\n        }\n        const maxLength = data.typNumeruIdentyfikacyjnego.value === 'nip' ? 10 : 11;\n        return (\n            <>\n                <FieldWithLabel\n                    label=\"NIP/PESEL\"\n                    tag=\"label\"\n                    selectRef={React.createRef()} >\n                    <Select\n                        screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                        className=\"select-custom\"\n                        isDisabled={formLocked}\n                        options={TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES}\n                        value={this.props.data.typNumeruIdentyfikacyjnego}\n                        onChange={selectedOption => this.props.changeAttribute('typNumeruIdentyfikacyjnego', selectedOption)}\n                        styles={customSelectStyles}\n                    />\n                </FieldWithLabel>\n                <FieldWithLabel label={data.typNumeruIdentyfikacyjnego.label} tag=\"label\" labelFor=\"numerIdentyfikacyjny_id\">\n                    <TextFieldCustom\n                        aria-describedby={`identification_number_info${isNumerIdentyfikacyjnyInvalid ? ' identification_number_error' : ''}`}\n                        aria-label={`${data.typNumeruIdentyfikacyjnego.label} (dla podmiotów z Polski), maksymalna liczba znaków: ${maxLength}. Wpisz tylko cyfry. Wpisano ${data.numerIdentyfikacyjny.length} znaków.`}\n                        aria-valuemax={maxLength}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext={data.typNumeruIdentyfikacyjnego.label}\n                        disabled={formLocked}\n                        id=\"numerIdentyfikacyjny_id\"\n                        invalid={isNumerIdentyfikacyjnyInvalid}\n                        maxLength={maxLength}\n                        value={data.numerIdentyfikacyjny}\n                        onChange={(ev) => this.props.changeNumerIdentyfikacyjny(ev.target.value, true)}\n                        onClear={(ev) => this.props.changeNumerIdentyfikacyjny('')}\n                        onKeyUp={(ev) => this.props.changeNumerIdentyfikacyjny(ev.target.value, true)}\n                        onPaste={(ev) => this.handlePasteNumerIdentyfikacyjny(ev, maxLength)} />\n                    <Text info id=\"identification_number_info\">(dla podmiotów z Polski)</Text>\n                    {isNumerIdentyfikacyjnyInvalid && (\n                        <>\n                            <ul id=\"identification_number_error\">{numerIdentyfikacyjnyErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n                            <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy!</span>\n                        </>\n                    )}\n                </FieldWithLabel>\n            </>\n        )\n    }\n}\n\n\nexport { FormDanePodmiotuFields };\n","const foreignCountries = {\n    1: 'Afganistan',\n    2: 'Albania',\n    3: 'Algieria',\n    4: 'Andora',\n    5: 'Angola',\n    6: 'Anguilla',\n    7: 'Antarktyda',\n    8: 'Antigua i Barbuda',\n    9: 'Arabia Saudyjska',\n    10: 'Argentyna',\n    11: 'Armenia',\n    12: 'Aruba',\n    13: 'Australia',\n    14: 'Austria',\n    15: 'Azerbejdżan',\n    16: 'Bahamy',\n    17: 'Bahrajn',\n    18: 'Bangladesz',\n    19: 'Barbados',\n    20: 'Belgia',\n    21: 'Belize',\n    22: 'Benin',\n    23: 'Bermudy',\n    24: 'Bhutan',\n    25: 'Białoruś',\n    26: 'Boliwia',\n    27: 'Bonaire, Sint Eustatius i Saba',\n    28: 'Botswana',\n    29: 'Bośnia i Hercegowina',\n    30: 'Brazylia',\n    31: 'Brunei Darussalam',\n    32: 'Brytyjskie Terytorium Oceanu Indyjskiego',\n    33: 'Brytyjskie Wyspy Dziewicze',\n    34: 'Bułgaria',\n    35: 'Burkina Faso',\n    36: 'Burundi',\n    37: 'Ceuta',\n    38: 'Chile',\n    39: 'Chiny',\n    40: 'Chorwacja',\n    41: 'Curaçao',\n    42: 'Cypr',\n    43: 'Czad',\n    44: 'Czarnogóra',\n    45: 'Dalekie Wyspy Mniejsze Stanów Zjednoczonych',\n    46: 'Dania',\n    47: 'Demokratyczna Republika Kongo',\n    48: 'Dominika',\n    49: 'Dominikana',\n    50: 'Dżibuti',\n    51: 'Egipt',\n    52: 'Ekwador',\n    53: 'Erytrea',\n    54: 'Estonia',\n    55: 'Etiopia',\n    56: 'Falklandy',\n    57: 'Fidżi',\n    58: 'Filipiny',\n    59: 'Finlandia',\n    60: 'Francja',\n    61: 'Francuskie Terytorium Południowe',\n    62: 'Gabon',\n    63: 'Gambia',\n    64: 'Ghana',\n    65: 'Gibraltar',\n    66: 'Grecja',\n    67: 'Grenada',\n    68: 'Grenlandia',\n    69: 'Gruzja',\n    70: 'Guam',\n    71: 'Gujana',\n    72: 'Gujana Francuska',\n    73: 'Gwadelupa',\n    74: 'Gwatemala',\n    75: 'Gwinea',\n    76: 'Gwinea Równikowa',\n    77: 'Gwinea-Bissau',\n    78: 'Haiti',\n    79: 'Hiszpania',\n    80: 'Holandia',\n    81: 'Honduras',\n    82: 'Hongkong',\n    83: 'Indie',\n    84: 'Indonezja',\n    85: 'Irak',\n    86: 'Iran',\n    87: 'Irlandia',\n    88: 'Islandia',\n    89: 'Izrael',\n    90: 'Jamajka',\n    91: 'Japonia',\n    92: 'Jemen',\n    93: 'Jordania',\n    94: 'Kajmany',\n    95: 'Kambodża',\n    96: 'Kamerun',\n    97: 'Kanada',\n    98: 'Katar',\n    99: 'Kazachstan',\n    100: 'Kenia',\n    101: 'Kirgistan',\n    102: 'Kiribati',\n    103: 'Kolumbia',\n    104: 'Komory',\n    105: 'Kongo',\n    106: 'Koreańska Republika Ludowo-Demokratyczna',\n    107: 'Kosowo',\n    108: 'Kostaryka',\n    109: 'Kuba',\n    110: 'Kuwejt',\n    111: 'Laos',\n    112: 'Lesotho',\n    113: 'Liban',\n    114: 'Liberia',\n    115: 'Libia',\n    116: 'Liechtenstein',\n    117: 'Litwa',\n    118: 'Luksemburg',\n    119: 'Łotwa',\n    120: 'Macedonia',\n    121: 'Madagaskar',\n    122: 'Majotta',\n    123: 'Makau',\n    124: 'Malawi',\n    125: 'Malediwy',\n    126: 'Malezja',\n    127: 'Mali',\n    128: 'Malta',\n    129: 'Mariany Północne',\n    130: 'Maroko',\n    131: 'Martynika',\n    132: 'Mauretania',\n    133: 'Mauritius',\n    134: 'Meksyk',\n    135: 'Melilla',\n    136: 'Mikronezja',\n    137: 'Mołdawia',\n    138: 'Monako',\n    139: 'Mongolia',\n    140: 'Montserrat',\n    141: 'Mozambik',\n    142: 'Myanmar (Burma)',\n    143: 'Namibia',\n    144: 'Nauru',\n    145: 'Nepal',\n    146: 'Niemcy',\n    147: 'Niger',\n    148: 'Nigeria',\n    149: 'Nikaragua',\n    150: 'Niue',\n    151: 'Norfolk',\n    152: 'Norwegia',\n    153: 'Nowa Kaledonia',\n    154: 'Nowa Zelandia',\n    155: 'Oman',\n    156: 'Pakistan',\n    157: 'Palau',\n    158: 'Palestyna',\n    159: 'Panama',\n    160: 'Papua Nowa Gwinea',\n    161: 'Paragwaj',\n    162: 'Peru',\n    163: 'Pitcairn',\n    164: 'Polinezja Francuska',\n    165: 'Południowa Georgia i Południowe Wyspy Sandwich',\n    166: 'Portoryko',\n    167: 'Portugalia',\n    168: 'Rep.Połud.Afryki',\n    169: 'Rep.Środkowoafryańska',\n    170: 'Republika Czeska',\n    171: 'Republika Korei',\n    172: 'Reunion',\n    173: 'Rosja',\n    174: 'Rumunia',\n    175: 'Rwanda',\n    176: 'Sahara Zachodnia',\n    177: 'Saint Barthelemy',\n    178: 'Saint Kitts i Nevis',\n    179: 'Saint Lucia',\n    180: 'Saint Vincent i Grenadyny',\n    181: 'Saint-Pierre i Miquelon',\n    182: 'Salwador',\n    183: 'Samoa',\n    184: 'Samoa Amerykańskie',\n    185: 'San Marino',\n    186: 'Senegal',\n    187: 'Serbia',\n    188: 'Seszele',\n    189: 'Sierra Leone',\n    190: 'Singapur',\n    191: 'Słowacja',\n    192: 'Słowenia',\n    193: 'Somalia',\n    194: 'Sri Lanka',\n    195: 'Stany Zjednoczone Ameryki',\n    196: 'Suazi',\n    197: 'Sudan',\n    198: 'Sudan Południowy',\n    199: 'Surinam',\n    200: 'Svalbard i Jan Mayen',\n    201: 'Syria',\n    202: 'Szwajcaria',\n    203: 'Szwecja',\n    204: 'Tadżykistan',\n    205: 'Tajlandia',\n    206: 'Tajwan',\n    207: 'Tanzania',\n    208: 'Togo',\n    209: 'Tokelau',\n    210: 'Tonga',\n    211: 'Trynidad i Tobago',\n    212: 'Tunezja',\n    213: 'Turcja',\n    214: 'Turkmenistan',\n    215: 'Tuvalu',\n    216: 'Uganda',\n    217: 'Ukraina',\n    218: 'Urugwaj',\n    219: 'Uzbekistan',\n    220: 'Vanuatu',\n    221: 'Wallis i Futuna',\n    222: 'Watykan',\n    223: 'Wenezuela',\n    224: 'Węgry',\n    225: 'Wielka Brytania',\n    226: 'Wietnam',\n    227: 'Włochy',\n    228: 'Wschodni Timor',\n    229: 'Wybrzeże Kości Słoniowej',\n    230: 'Wyspa Bouveta',\n    231: 'Wyspa Bożego Narodzenia',\n    232: 'Wyspa Sint Maarten',\n    233: 'Wyspa Świętej Heleny',\n    234: 'Wyspy Cooka',\n    235: 'Wyspy Dziewicze Stanów Zjednoczonych',\n    236: 'Wyspy Heard i McDonald',\n    237: 'Wyspy Kokosowe (Keelinga)',\n    238: 'Wyspy Marshalla',\n    239: 'Wyspy Owcze',\n    240: 'Wyspy Salomona',\n    241: 'Wyspy Turks i Caicos',\n    242: 'Wyspy Świętego Tomasza i Książęca',\n    243: 'Zambia',\n    244: 'Zielony Przylądek',\n    245: 'Zimbabwe',\n    246: 'Zjednoczone Emiraty Arabskie'}\n\n\nexport { foreignCountries }\n","import React, { Component } from 'react';\n\nimport { foreignCountries } from '../../../foreignCountries';\nimport { FieldWithLabel, Select, Text } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: 'Zacznij wpisywać...',\n};\nconst SELECT_CLASSNAME = 'select-custom';\nconst SELECT_INVALID_CLASSNAME = 'select-custom select-custom--invalid';\n\n\nclass FormKraj extends Component {\n\n    constructor(props) {\n        super(props);\n        let kraj = null;\n        if (props.krajName) {\n            kraj = {\n                value: props.krajName,\n                label: props.krajName,\n            }\n        }\n        this.state = {kraj};\n\n        this.handleChangeKraj = this.handleChangeKraj.bind(this);\n    }\n\n    // handlers\n\n    handleChangeKraj(selectedOption) {\n        this.setState(\n            {kraj: selectedOption},\n            () => this.props.changeKraj(selectedOption)\n        );\n    }\n\n    // rendering\n\n    render() {\n        const { kraj } = this.state;\n        const { error, formLocked, invalid, isClearable } = this.props;\n\n        let options = Object.values(foreignCountries).map(\n            kraj_ => ({value: kraj_, label: kraj_}));\n        let value;\n        if (isClearable) {\n            value = kraj;\n        } else {\n            options = [EMPTY_VALUE, ...options];\n            value = {\n                value: kraj ? kraj.value : EMPTY_VALUE.value,\n                label: kraj ? kraj.label : EMPTY_VALUE.label\n            };\n        }\n\n        return (\n            <FieldWithLabel\n                label=\"Kraj\"\n                labelFor=\"country_id\"\n                selectRef={React.createRef()}\n                tag=\"label\"\n            >\n                <Select\n                    aria-label={`Kraj ${invalid && error}`}\n                    aria-required=\"true\"\n                    className={invalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n                    isClearable={isClearable}\n                    isDisabled={formLocked}\n                    id=\"country_id\"\n                    isSearchable={true}\n                    noOptionsMessage={() => 'Brak wybranej opcji'}\n                    options={options}\n                    placeholder={isClearable ? EMPTY_VALUE.label : ''}\n                    required={true}\n                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                    styles={customSelectStyles}\n                    value={value}\n                    onChange={selectedOption => this.handleChangeKraj(selectedOption)}\n                />\n                {invalid && <Text error>{error}</Text>}\n            </FieldWithLabel>\n        )\n    }\n}\n\n\nexport { FormKraj };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { FieldWithLabel, Select, Text } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: 'Wpisz co najmniej 3 litery...',\n}\nconst SELECT_CLASSNAME = 'select-custom';\nconst SELECT_INVALID_CLASSNAME = 'select-custom select-custom--invalid';\n\n\nclass FormMiejscowosc extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = Object.assign({\n            miejscowosc: props.miejscowosc || null,\n            selectMiejscowoscMenuIsOpen: false,\n            inputOptions: [],\n            moreOptionsAvailable: false,\n            fetchError: '',\n        });\n\n        this.requestId = 0;\n\n        this.xhrFetch = null;\n        this.xhrTimeout = null;\n\n        this.handleChangeInputMiejscowosc = this.handleChangeInputMiejscowosc.bind(this);\n        this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n        this.handleFetchError = this.handleFetchError.bind(this);\n        this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n        this.handleBlurMiejscowosc = this.handleBlurMiejscowosc.bind(this);\n        this.handleChangeMiejscowosc = this.handleChangeMiejscowosc.bind(this);\n    }\n\n    // basic functions\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n    }\n\n    // handlers\n\n    handleChangeInputMiejscowosc(inputValue) {\n        if (this.xhrTimeout !== null) {\n            clearTimeout(this.xhrTimeout);\n            this.xhrTimeout = null;\n        }\n        if (inputValue.length < 3) {\n            this.setState({\n                selectMiejscowoscMenuIsOpen: false,\n                inputOptions: [],\n                moreOptionsAvailable: false,\n                fetchError: ''\n            });\n        } else {\n            this.requestId++;\n            this.xhrTimeout = setTimeout(() => {\n                this.setState(\n                    {inputOptions: [], moreOptionsAvailable: false, fetchError: ''},\n                    () => {\n                        // get data from server\n                        this.xhrFetch = fetchApi(\n                            '/api/dictionaries/teryt',\n                            'GET',\n                            {},\n                            {locality_search_key: inputValue, request_id: this.requestId},\n                            this.handleFetchSuccess,\n                            this.handleFetchError,\n                            this.handleFetchIncorrectStatus,\n                        );\n                    }\n                );\n            }, 500);\n        };\n    }\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        if (parseInt(data.request_id) < this.requestId) {\n            // do nothing, there is another fetch on the fly\n            return\n        }\n        this.setState({\n            selectMiejscowoscMenuIsOpen: true,\n            inputOptions: (getSerializedObject(data).teryty || []).sort(this.sortMiejscowosc).map(\n                m => ({value: m, label: `${m.miejscowosc} (woj. ${m.wojewodztwo}, pow. ${m.powiat}, gm. ${m.gmina})`})),\n            moreOptionsAvailable: data.meta.last_page > 1,\n        });\n    }\n\n    handleFetchError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            fetchError: `Nie udało się pobrać miejscowości. ${data.message}`,\n        });\n    }\n\n    handleFetchIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            fetchError: `Nie udało się pobrać miejscowości. Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    handleBlurMiejscowosc(ev) {\n        this.setState({selectMiejscowoscMenuIsOpen: false});\n    }\n\n    handleChangeMiejscowosc(selectedOption) {\n        const value = selectedOption === null ? null : selectedOption.value;\n        this.setState(\n            {\n                selectMiejscowoscMenuIsOpen: false,\n                miejscowosc: value,\n            },\n            () => this.props.changeMiejscowosc(value)\n        );\n    }\n\n    // rendering\n\n    render() {\n        const { error, formLocked, isClearable, invalid } = this.props;\n        const {\n            fetchError,\n            inputOptions,\n            miejscowosc,\n            moreOptionsAvailable,\n            selectMiejscowoscMenuIsOpen,\n        } = this.state;\n\n        const moreOptionsAvailableText = 'Istnieje więcej pasujących wyników. Jeśli na liście nie ma szukanej miejscowości, wpisz dodatkowe litery.'\n\n        return (\n            <FieldWithLabel\n                label=\"Miejscowość\"\n                tag=\"label\"\n                selectRef={React.createRef()}\n            >\n                {moreOptionsAvailable && <Text info>{moreOptionsAvailableText}</Text>}\n                <Select\n                    aria-label={`Miejscowość, wpisz co najmniej 3 litery ${moreOptionsAvailable ? moreOptionsAvailableText : ''} ${invalid ? error : ''} ${fetchError.length > 0 ? fetchError : ''}`}\n                    className={invalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n                    components={{\n                        DropdownIndicator: () => null,\n                        IndicatorSeparator: () => null\n                    }}\n                    isClearable={isClearable}\n                    isDisabled={formLocked}\n                    menuIsOpen={selectMiejscowoscMenuIsOpen}\n                    noOptionsMessage={() => 'Brak wybranej opcji'}\n                    options={inputOptions}\n                    placeholder={isClearable ? EMPTY_VALUE.label : ''}\n                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                    styles={{\n                        ...customSelectStyles,\n                        menuPortal: (provided, state) => ({\n                          ...provided,\n                          maxHeight: \"160px\",\n                        }),\n                        menuList: (provided, state) => ({\n                          ...provided,\n                          maxHeight: \"160px\",\n                        }),\n                    }}        \n                    value={miejscowosc\n                        ? {\n                            value: miejscowosc,\n                            label: `${miejscowosc.miejscowosc} (woj. ${miejscowosc.wojewodztwo}, pow. ${miejscowosc.powiat}, gm. ${miejscowosc.gmina})`\n                        } : isClearable ? null : EMPTY_VALUE}\n                    onBlur={this.handleBlurMiejscowosc}\n                    onChange={this.handleChangeMiejscowosc}\n                    onInputChange={this.handleChangeInputMiejscowosc}\n                />\n                {invalid && <Text error>{error}</Text>}\n                {fetchError.length > 0 && <Text error>{fetchError}</Text>}\n            </FieldWithLabel>\n        )\n    }\n}\n\n\nexport { FormMiejscowosc };\n","import React, { Component } from 'react';\nimport { Radio } from '@rmwc/radio';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n    hasPerspectiveInstitutions,\n    hasPerspectiveRegions,\n    hasSubactivities,\n    sortProgrammes\n} from '../../../helpers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    ErrorList,\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nconst SELECT_CLASS_NAME = 'select-custom';\nconst SELECT_INVALID_CLASS_NAME = 'select-custom select-custom--invalid';\nexport const INSTITUTION_NUMBER_DEFAULT_DICT = {\n    value: '',\n    code: 'AA.00',\n    label: 'AA.00',\n};\n\n\nexport class ProjectNumberSelectsWithPerspectives extends Component {\n\n    constructor(props) {\n        super(props);\n        // please, don't change nulls into empty lists, otherwise you destroy\n        // a mechanism for filling selects\n        this.state = {\n            programmes: null,\n            priorities: null,\n            activities: null,\n            regions: null,\n            institutions: null,\n            activityFetchError: '',\n            priorityFetchError: '',\n            programmeFetchError: '',\n            regionFetchError: '',\n            institutionFetchError: '',\n        }\n        this.xhrFetch = null;\n    }\n\n    componentDidMount() {\n        if (!this.props.perspectives.length) { return }\n\n        if (this.props.perspectivesAsSelect) {\n            const { perspective } = this.props;\n            if (!(perspective && perspective.value)) { return }\n\n            if (!perspective.label) {\n                this.setDefaultSelectValueLabelBasedOnId(\n                    this.props.perspectives, perspective, 'perspective',\n                    this.props.onChangePerspective\n                );\n                return\n            }\n        }\n        this.fetchProgrammes();\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n\n        if (this.state.programmeFetchError.length ||\n            this.state.activityFetchError.length ||\n            this.state.priorityFetchError.length ||\n            this.xhrFetch !== null) { return }\n\n        // set perspective, programme, priority, activity, institution, region\n        if (!this.props.perspectives.length) { return }\n\n        const { perspective } = this.props;\n        if (!(perspective && perspective.value)) { return }\n\n        if (perspective !== prevProps.perspective) {\n            this.fetchProgrammes();\n            return\n        }\n\n        const { programme } = this.props;\n        if (!this.state.programmes || !(programme && programme.value)) {\n            return\n        }\n\n        if (!programme.label) {\n            this.setDefaultSelectValueLabelBasedOnId(\n                this.state.programmes, programme, 'programme',\n                this.props.onChangeProgramme\n            );\n        } else if (\n            programme !== prevProps.programme ||\n            (programme && !this.state.priorities && !prevState.priorities)\n        ) {\n            this.fetchPriorities();\n        } else {\n            const { priority } = this.props;\n            if (\n                !this.state.priorities ||\n                !(priority && priority.value)\n            ) { return }\n\n            if (!priority.label) {\n                this.setDefaultSelectValueLabelBasedOnId(\n                    this.state.priorities, priority, 'priority',\n                    this.props.onChangePriority\n                );\n            } else if (\n                priority !== prevProps.priority ||\n                (priority && !this.state.activities && !prevState.activities)\n            ) {\n                this.fetchActivities();\n            } else {\n                const { activity } = this.props;\n                if (\n                    !this.state.activities ||\n                    !(activity && activity.value)\n                ) { return }\n\n                const hasRegions = hasPerspectiveRegions(perspective);\n                const hasInstitutions = hasPerspectiveInstitutions(perspective);\n\n                if (!activity.label) {\n                    this.setDefaultSelectValueLabelBasedOnId(\n                        this.state.activities, activity, 'activity',\n                        this.props.onChangeActivity\n                    );\n                } else if (\n                    activity !== prevProps.activity ||\n                    (hasRegions && !this.state.regions && !prevState.regions) ||\n                    (hasInstitutions && !this.state.institutions && !prevState.institutions)\n                ) {\n                    if (hasRegions) {\n                        this.fetchRegions();\n                    } else if (hasInstitutions) {\n                        this.fetchInstitutions();\n                    }\n                } else {\n                    if (hasRegions) {\n                        const {region} = this.props;\n                        if (\n                            !this.state.regions ||\n                            !(region && region.value)\n                        ) {\n                            return\n                        }\n\n                        if (!region.label) {\n                            this.setDefaultSelectValueLabelBasedOnId(\n                                this.state.regions, region, 'region',\n                                this.props.onChangeActivity\n                            );\n                        }\n                    } else if (hasInstitutions) {\n                        const {institution} = this.props;\n                        if (\n                            !this.state.institutions ||\n                            !(institution && institution.value)\n                        ) {\n                            return\n                        }\n\n                        if (!institution.label) {\n                            this.setDefaultSelectValueLabelBasedOnId(\n                                this.state.institutions, institution,\n                                'institution', this.props.onChangeActivity\n                            );\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    componentWillUnmount() {\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n    }\n\n    // handlers\n\n    handleChangePerspectiveSelect = (selectedOption) => {\n        selectedOption = selectedOption || null;\n        // if user clicked the same option\n        if (this.props.perspective === selectedOption) { return }\n        this.setState(\n            {\n                programmes: null,\n                priorities: null,\n                activities: null,\n                regions: null,\n                institutions: null,\n                priorityFetchError: '',\n                activityFetchError: '',\n                regionFetchError: '',\n                institutionFetchError: '',\n            },\n            () => this.props.onChangePerspective(\n                {\n                    perspective: selectedOption,\n                    programme: null,\n                    priority: null,\n                    activity: null,\n                    region: null,\n                    institution: null,\n                }\n            )\n        );\n    }\n\n    handleChangePerspective = (ev) => {\n        const value = ev.currentTarget.value;\n        this.setState(\n            {\n                programmes: null,\n                priorities: null,\n                activities: null,\n                regions: null,\n                institutions: null,\n                priorityFetchError: '',\n                activityFetchError: '',\n                programmeFetchError: '',\n                regionFetchError: '',\n                institutionFetchError: '',\n            },\n            () => {\n                this.props.onChangePerspective(\n                    {\n                        perspective: this.props.perspectives.filter(\n                            perspective_ =>\n                                perspective_.value.toString() === value.toString()\n                        )[0],\n                        programme: null,\n                        priority: null,\n                        activity: null,\n                        ...(this.props.withInstitutionNumber\n                            ? {institutionNumber: {...INSTITUTION_NUMBER_DEFAULT_DICT}}\n                            : {}\n                        ),\n                        region: null,\n                        institution: null,\n                    }\n                )\n            }\n        );\n    };\n\n    handleChangeProgramme = (selectedOption) => {\n        selectedOption = selectedOption || null;\n        // if user clicked the same option\n        if (this.props.programme === selectedOption) { return }\n        this.setState(\n            {\n                priorities: null,\n                activities: null,\n                regions: null,\n                institutions: null,\n                priorityFetchError: '',\n                activityFetchError: '',\n                regionFetchError: '',\n                institutionFetchError: '',\n            },\n            () => this.props.onChangeProgramme(\n                {\n                    programme: selectedOption,\n                    priority: null,\n                    activity: null,\n                    region: null,\n                    institution: null,\n                }\n            )\n        );\n    };\n\n    handleChangePriority = (selectedOption) => {\n        selectedOption = selectedOption || null;\n        // if user clicked the same option\n        if (this.props.priority === selectedOption) { return }\n        this.setState(\n            {\n                activities: null,\n                regions: null,\n                institutions: null,\n                activityFetchError: '',\n                regionFetchError: '',\n                institutionFetchError: '',\n            },\n            () => this.props.onChangePriority(\n                {\n                    priority: selectedOption,\n                    activity: null,\n                    region: null,\n                    institution: null,\n                })\n        );\n    };\n\n    handleChangeActivity = (selectedOption) => {\n        selectedOption = selectedOption || null;\n        // if user clicked the same option\n        if (this.props.activity === selectedOption) { return }\n        this.setState(\n            {\n                regions: null,\n                institutions: null,\n                regionFetchError: '',\n                institutionFetchError: '',\n            },\n            () => this.props.onChangeActivity(\n                {\n                    activity: selectedOption,\n                    region: null,\n                    institution: null,\n                })\n        );\n    };\n\n    handleChangInstitutionNumber = (value) => {\n        this.props.onChangeInstitutionNumber(value);\n    }\n\n    handleChangeRegion = (selectedOption) => {\n        selectedOption = selectedOption || null;\n        this.props.onChangeRegion({region: selectedOption});\n    }\n\n    handleChangeInstitution = (selectedOption) => {\n        selectedOption = selectedOption || null;\n        this.props.onChangeInstitution({institution: selectedOption});\n    }\n\n    handleFetchObjectsSuccess = (data, objectListName) => {\n        this.xhrFetch = null;\n        this.setState({\n            [objectListName]: data[objectListName].map(p => ({\n                value: p.id,\n                code: p.code,\n                label: `${p.code} - ${p.name}`\n            }))\n        });\n    }\n\n    handleFetchObjectsError = (data, errorObjectLabel, errorName) => {\n        this.xhrFetch = null;\n        this.setState({\n            [errorName]: `Nie udało się pobrać ${errorObjectLabel}.`,\n        });\n    }\n\n    handleFetchObjectsIncorrectStatus = (status, errorObjectLabel, errorName) => {\n        this.xhrFetch = null;\n        this.setState({\n            [errorName]: `Nie udało się pobrać ${errorObjectLabel}. ` +\n            `Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n        });\n    }\n\n    // helpers\n\n    setDefaultSelectValueLabelBasedOnId(\n        objectsList, object, objectName, changeObjectHandler\n    ) {\n        for (let obj of objectsList) {\n            if (obj.value === object.value) {\n                changeObjectHandler({[objectName]: obj});\n                return\n            }\n        }\n        changeObjectHandler({[objectName]: null});\n    }\n\n    fetchObjects({\n        apiUrlName,\n        errorName,\n        errorObjectLabel,\n        objectListName,\n        parentObjectName\n    }) {\n        const parent = this.props[parentObjectName];\n        if (!parent || !(parent.value || parent.id)) { return }\n        this.xhrFetch = fetchApi(\n            API_URLS[apiUrlName].getUrl(parent.value || parent.id),\n            'GET',\n            {},\n            {mode: this.props.mode || 'default'},\n            (data) => this.handleFetchObjectsSuccess(data, objectListName),\n            (data) => this.handleFetchObjectsError(\n                data, errorObjectLabel, errorName),\n            (status) => this.handleFetchObjectsIncorrectStatus(\n                status, errorObjectLabel, errorName),\n        );\n    }\n\n    fetchProgrammes() {\n        this.fetchObjects({\n            apiUrlName: 'programmes',\n            errorName: 'programmeFetchError',\n            errorObjectLabel: 'programów operacyjnych',\n            objectListName: 'programmes',\n            parentObjectName: 'perspective',\n        });\n    }\n\n    fetchPriorities() {\n        this.fetchObjects({\n            apiUrlName: 'priorities',\n            errorName: 'priorityFetchError',\n            errorObjectLabel: 'osi priorytetowych',\n            objectListName: 'priorities',\n            parentObjectName: 'programme',\n        });\n    }\n\n    fetchActivities() {\n        this.fetchObjects({\n            apiUrlName: 'activities',\n            errorName: 'activityFetchError',\n            errorObjectLabel: hasSubactivities(this.props.perspective)\n                ? 'działań i poddziałań' : 'działań',\n            objectListName: 'activities',\n            parentObjectName: 'priority',\n        });\n    }\n\n    fetchRegions() {\n        this.fetchObjects({\n            apiUrlName: 'regions',\n            errorName: 'regionFetchError',\n            errorObjectLabel: 'regionów',\n            objectListName: 'regions',\n            parentObjectName: 'activity',\n        });\n    }\n\n    fetchInstitutions() {\n        this.fetchObjects({\n            apiUrlName: 'institutions',\n            errorName: 'institutionFetchError',\n            errorObjectLabel: 'instytucji',\n            objectListName: 'institutions',\n            parentObjectName: 'activity',\n        });\n    }\n\n    // rendering\n\n    render() {\n        const {\n            activity,\n            activityErrors,\n            disabled,\n            isClearable,\n            institution,\n            institutionErrors,\n            institutionNumber,\n            institutionNumberErrors,\n            perspective,\n            perspectiveErrors = [],\n            perspectives,\n            perspectivesAsSelect,\n            priority,\n            priorityErrors,\n            programme,\n            programmeErrors,\n            region,\n            regionErrors,\n            withInstitutionNumber\n        } = this.props;\n        const {\n            activityFetchError,\n            institutionFetchError,\n            priorityFetchError,\n            programmeFetchError,\n            regionFetchError\n        } = this.state;\n\n        const hasRegions = hasPerspectiveRegions(perspective);\n        const hasInstitutions = hasPerspectiveInstitutions(perspective);\n\n        const isPerspectiveInvalid = perspectivesAsSelect &&\n            perspectiveErrors.length > 0;\n        const isProgrammeInvalid = programmeErrors.length > 0;\n        const isPriorityInvalid = priorityErrors.length > 0;\n        const isActivityInvalid = activityErrors.length > 0;\n        let isInstitutionNumberInvalid = false;\n        if (withInstitutionNumber) {\n            isInstitutionNumberInvalid =\n                hasRegions && institutionNumberErrors.length > 0;\n        }\n        const isRegionInvalid = hasRegions && regionErrors.length > 0;\n        const isInstitutionInvalid = hasInstitutions && institutionErrors.length > 0;\n        const formInvalid = isPerspectiveInvalid || isProgrammeInvalid ||\n            isPriorityInvalid || isActivityInvalid ||\n            isInstitutionNumberInvalid || isRegionInvalid ||\n            isInstitutionInvalid;\n\n        const activityLabel = hasSubactivities(perspective)\n            ? 'Działanie i poddziałanie' : 'Działanie';\n\n        return (\n            <>\n                <GridCustom fullwidth>\n                    {perspectivesAsSelect\n                        ? (\n                            <FieldWithLabel\n                                label=\"Perspektywa finansowa\"\n                                tag=\"label\"\n                                selectRef={React.createRef()}\n                            >\n                                <Select\n                                    className={SELECT_CLASS_NAME}\n                                    isClearable={isClearable}\n                                    isDisabled={disabled}\n                                    noOptionsMessage={() => 'Brak wybranej opcji'}\n                                    options={perspectives}\n                                    placeholder=\"Zacznij wpisywać...\"\n                                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                    styles={customSelectStyles}\n                                    value={perspective}\n                                    onChange={this.handleChangePerspectiveSelect} />\n                                {isPerspectiveInvalid &&\n                                    <ErrorList\n                                        containerId=\"perspective\"\n                                        errorList={perspectiveErrors}\n                                    />\n                                }\n                            </FieldWithLabel>\n                        )\n                        : (\n                            <fieldset>\n                                <Text tag=\"legend\" className=\"label\">Perspektywa finansowa</Text>\n                                {perspectives.map(perspective_ => (\n                                    <Radio\n                                        checked={perspective.value.toString() === perspective_.value.toString()}\n                                        disabled={disabled}\n                                        key={perspective_.value}\n                                        label={perspective_.label}\n                                        name=\"typRadioGroup\"\n                                        value={perspective_.value}\n                                        onChange={this.handleChangePerspective}\n                                    />\n                                ))}\n                            </fieldset>\n                        )\n                    }\n                </GridCustom>\n                <GridCustom>\n                    <FieldWithLabel\n                        label=\"Program Operacyjny\"\n                        tag=\"label\"\n                        selectRef={React.createRef()}\n                    >\n                        <Select\n                            aria-describedby={programmeFetchError.length > 0 ? 'programmeFetch_error' : null}\n                            className={isProgrammeInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n                            isClearable={isClearable}\n                            isDisabled={disabled || (perspectivesAsSelect && !perspective)}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                            options={(this.state.programmes || []).sort(sortProgrammes)}\n                            placeholder=\"Zacznij wpisywać...\"\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            styles={customSelectStyles}\n                            value={programme}\n                            onChange={this.handleChangeProgramme} />\n                        {isProgrammeInvalid &&\n                            <ErrorList\n                                containerId=\"programOperacyjny_error\"\n                                errorList={programmeErrors}\n                            />\n                        }\n                        {programmeFetchError.length > 0 && <Text error id=\"programmeFetch_error\">{programmeFetchError}</Text>}\n                    </FieldWithLabel>\n                    <FieldWithLabel\n                        label=\"Oś priorytetowa\"\n                        aria-label={programme !== null ? null : 'Oś priorytetowa, pole nieaktywne. Aby wybrać oś priorytetową, musisz wybrać Program operacyjny.'}\n                        tag=\"label\"\n                        selectRef={React.createRef()}\n                        tabIndex={programme !== null ? null : '0'}>\n                        <Select\n                            aria-describedby={priorityFetchError.length > 0 ? 'osPriorytetowaFetch_error' : null}\n                            className={isPriorityInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n                            isClearable={isClearable}\n                            isDisabled={disabled || programme === null}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                            options={programme !== null ? (this.state.priorities || []) : null}\n                            placeholder=\"Zacznij wpisywać...\"\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            styles={customSelectStyles}\n                            value={priority}\n                            onChange={this.handleChangePriority} />\n                        {isPriorityInvalid &&\n                            <ErrorList\n                                containerId=\"osPriorytetowa_error\"\n                                errorList={priorityErrors}\n                            />\n                        }\n                        {priorityFetchError.length > 0 && <Text error id=\"osPriorytetowaFetch_error\">{priorityFetchError}</Text>}\n                    </FieldWithLabel>\n                </GridCustom>\n                <GridCustom>\n                    <FieldWithLabel\n                        label={activityLabel}\n                        aria-label={priority !== null ? null : `${activityLabel}, pole nieaktywne. Aby wybrać działanie i poddziałanie, musisz wybrać oś priorytetową.`}\n                        tag=\"label\"\n                        selectRef={React.createRef()}\n                        tabIndex={priority !== null ? null : '0'}\n                    >\n                        <Select\n                            aria-describedby={activityFetchError.length > 0 ? 'dzialanie_fetch_error' : null}\n                            className={isActivityInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n                            isClearable={isClearable}\n                            isDisabled={disabled || priority === null}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                            options={priority !== null ? (this.state.activities || []) : null}\n                            placeholder=\"Zacznij wpisywać...\"\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            styles={customSelectStyles}\n                            value={activity}\n                            onChange={this.handleChangeActivity} />\n                        {isActivityInvalid &&\n                            <ErrorList\n                                containerId=\"dzialanie_error\"\n                                errorList={activityErrors}\n                            />\n                        }\n                        {activityFetchError.length > 0 && <Text error id=\"dzialanie_fetch_error\">{activityFetchError}</Text>}\n                    </FieldWithLabel>\n                </GridCustom>\n                {hasRegions && (\n                    <>\n                        {withInstitutionNumber && (\n                            <GridCustom>\n                                <FieldWithLabel\n                                    label=\"Numer instytucji\"\n                                    labelFor=\"numer_instytucji_id\"\n                                    tag=\"label\"\n                                    selectRef={React.createRef()}\n                                >\n                                    <TextFieldCustom\n                                        aria-describedby={`institution_number_mask_info${isInstitutionNumberInvalid ? ' numer_instytucji_error' : ''}`}\n                                        aria-label={`Numer instytucji. Wpisano ${institutionNumber.value.length} znaków.`}\n                                        aria-required={true}\n                                        aria-valuemax={5}\n                                        characterCount\n                                        clearFieldContext=\"numer instytucji\"\n                                        disabled={disabled}\n                                        fullwidth\n                                        id=\"numer_instytucji_id\"\n                                        invalid={isInstitutionNumberInvalid}\n                                        maxLength={5}\n                                        value={institutionNumber.value}\n                                        onChange={event => this.handleChangInstitutionNumber(event.target.value)}\n                                        onClear={event => this.handleChangInstitutionNumber('')} />\n                                    {isInstitutionNumberInvalid &&\n                                        <ErrorList\n                                            containerId=\"numer_instytucji_error\"\n                                            errorList={institutionNumberErrors}\n                                        />\n                                    }\n                                    <Text info id=\"institution_number_mask_info\">\n                                        <span className=\"sr-only\">Wpisz numer zgodnie ze wzorem: </span>AA.00\n                                    </Text>\n                                </FieldWithLabel>\n                            </GridCustom>\n                        )}\n                        <GridCustom>\n                            <FieldWithLabel\n                                label=\"Region\"\n                                aria-label={activity !== null ? null : 'Region, pole nieaktywne. Aby wybrać region, musisz wybrać działanie i poddziałanie.'}\n                                tag=\"label\"\n                                selectRef={React.createRef()}\n                                tabIndex={activity !== null ? null : '0'}\n                            >\n                                <Select\n                                    aria-describedby={regionFetchError.length > 0 ? 'region_fetch_error' : null}\n                                    className={isRegionInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n                                    isClearable={isClearable}\n                                    isDisabled={disabled || activity === null}\n                                    noOptionsMessage={() => 'Brak wybranej opcji'}\n                                    options={activity !== null ? (this.state.regions || []) : null}\n                                    placeholder=\"Zacznij wpisywać...\"\n                                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                    styles={customSelectStyles}\n                                    value={region}\n                                    onChange={this.handleChangeRegion} />\n                                {isRegionInvalid &&\n                                    <ErrorList\n                                        containerId=\"region_error\"\n                                        errorList={regionErrors}\n                                    />\n                                }\n                                {regionFetchError.length > 0 &&\n                                    <Text error id=\"region_fetch_error\">{regionFetchError}</Text>\n                                }\n                                {formInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n                            </FieldWithLabel>\n                        </GridCustom>\n                    </>\n                )}\n                {hasInstitutions && (\n                    <GridCustom>\n                        <FieldWithLabel\n                            label=\"Instytucja\"\n                            aria-label={activity !== null ? null : 'Instytucja, pole nieaktywne. Aby wybrać instytucję, musisz wybrać działanie.'}\n                            tag=\"label\"\n                            selectRef={React.createRef()}\n                            tabIndex={activity !== null ? null : '0'}\n                        >\n                            <Select\n                                aria-describedby={institutionFetchError.length > 0 ? 'institution_fetch_error' : null}\n                                className={isInstitutionInvalid ? SELECT_INVALID_CLASS_NAME : SELECT_CLASS_NAME}\n                                isClearable={isClearable}\n                                isDisabled={disabled || activity === null}\n                                noOptionsMessage={() => 'Brak wybranej opcji'}\n                                options={activity !== null ? (this.state.institutions || []) : null}\n                                placeholder=\"Zacznij wpisywać...\"\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                styles={customSelectStyles}\n                                value={institution}\n                                onChange={this.handleChangeInstitution} />\n                            {isInstitutionInvalid &&\n                                <ErrorList\n                                    containerId=\"institution_error\"\n                                    errorList={institutionErrors}\n                                />\n                            }\n                            {institutionFetchError.length > 0 &&\n                                <Text error id=\"institution_fetch_error\">{institutionFetchError}</Text>\n                            }\n                            {formInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n                        </FieldWithLabel>\n                    </GridCustom>\n                )}\n            </>\n        )\n    }\n}\n","import React, { Component } from 'react';\nimport Dropzone from 'react-dropzone';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { getAuthTokenCookieValue, refreshTimerAfterRequest, saveFileFromApi } from '../../../helpers';\nimport { translateErrorMessage } from '../../../serializers';\nimport {\n    Box,\n    ButtonStyled,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    LinearProgressCustom,\n    Text,\n    TextFieldCustom\n} from '../../common';\n\n\nclass Zalacznik extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            confirmRemovingOn: false,\n            progress: null,\n            loadingInProgress: false,\n            loadingFileName: null,\n            showLoadedSuccessMsg: false,\n            showLoadingErrorMsg: false,\n            errors: {},\n        };\n\n        this.blockedFilesExtensions = ['exe', ];\n        this.successMessageTimeout = null;\n        this.errorMessageTimeout = null;\n        this.removingDialogComponent = null;\n        this.xhrSaveFile = null;\n\n        this.handleRemoveZalacznik = this.handleRemoveZalacznik.bind(this);\n        this.handleAddPlik = this.handleAddPlik.bind(this);\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevState.progress !== this.state.progress && this.state.progress === 1.0) {\n            this.setState({\n                loadingFileName: null,\n                showLoadedSuccessMsg: true,\n            });\n\n            this.successMessageTimeout = setTimeout(() => {\n                this.successMessageTimeout = null;\n                this.setState({\n                    showLoadedSuccessMsg: false,\n                    loadingInProgress: false,\n                });\n            }, 7000);\n        }\n    }\n\n    componentDidMount() {\n        if (this.props.zalacznik.plikDoWgrania) {\n            this.handleAddPlik([this.props.zalacznik.plikDoWgrania, ]);\n        }\n    }\n\n    componentWillUnmount() {\n        if (this.successMessageTimeout !== null) {\n            clearTimeout(this.successMessageTimeout);\n        }\n        if (this.errorMessageTimeout !== null) {\n            clearTimeout(this.errorMessageTimeout);\n        }\n        if (this.xhrSaveFile !== null) {\n            this.xhrSaveFile.abort();\n        }\n    }\n\n    handleCloseConfirmRemovingDialog = () => {\n        this.setState({confirmRemovingOn: false});\n    }\n\n\thandleSaveFileFromApi = (url, fileName) => {\n        this.setState(\n            () => saveFileFromApi(\n                url,\n\t\t\t\tfileName)\n        );\n    }\n\n    render() {\n        const isAlreadyPublished = this.props.isAlreadyPublished;\n        const z = this.props.zalacznik;\n        const temporaryId = z.temporaryId;\n        const formLocked = this.props.formLocked;\n        const zalacznikTitleId = `zalacznik_${z.temporaryId}_title_id`;\n\n        const errors = Object.assign({}, this.props.errors || {}, this.state.errors);\n        const checkAttributeName = this.props.checkAttributeName;\n        const isCheckInvalid = (errors[checkAttributeName] || []).length > 0;\n        const isNazwaInvalid = (errors.nazwa || []).length > 0;\n\n        return (\n            <Box tag=\"li\">\n                {this.props.withCheck && (\n                    <>\n                        <Checkbox\n                            aria-describedby={isCheckInvalid ? 'withCheck_errors' : null}\n                            checked={z[checkAttributeName]}\n                            disabled={formLocked}\n                            label={this.props.checkLabel}\n                            onChange={event => this.props.onCheckChange(event.target.checked, temporaryId)}\n                        />\n                        {isCheckInvalid && (\n                            <ul id=\"withCheck_errors\">\n                                {errors[checkAttributeName].map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}\n                            </ul>\n                        )}\n                    </>\n                )}\n                <FieldWithLabel label=\"Nazwa załącznika\" tag=\"label\" labelFor={zalacznikTitleId}>\n                    <TextFieldCustom\n                        aria-describedby={isNazwaInvalid ? 'zalacznik_title_error' : null}\n                        aria-label={`Nazwa załącznika, maksymalna liczba znaków: 100. Wpisano ${z.nazwa.length} znaków.`}\n                        aria-valuemax={100}\n                        autoFocus\n                        characterCount\n                        clearFieldContext=\"nazwa załącznika\"\n                        disabled={isAlreadyPublished || formLocked}\n                        fullwidth\n                        id={zalacznikTitleId}\n                        invalid={isNazwaInvalid}\n                        maxLength={100}\n                        value={z.nazwa}\n                        onBlur={(ev) => this.props.saveZalacznikAttributes(z.temporaryId, {nazwa: ev.target.value.trim()})}\n                        onChange={(ev) => this.props.saveZalacznikAttributes(z.temporaryId, {nazwa: ev.target.value})}\n                        onClear={!isAlreadyPublished && ((ev) => this.props.saveZalacznikAttributes(z.temporaryId, {nazwa: ''}))}\n                    />\n                    {isNazwaInvalid && <ul id=\"zalacznik_title_error\">{errors.nazwa.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                </FieldWithLabel>\n                <FieldWithLabel>\n                    {this.renderFile(temporaryId, errors)}\n                </FieldWithLabel>\n                {!isAlreadyPublished && (\n                    <ButtonStyled\n                        disabled={formLocked}\n                        remove\n                        onClick={() => this.setState({confirmRemovingOn: true})}>\n                        Usuń załącznik<span className=\"sr-only\"> {z.nazwa}</span>\n                    </ButtonStyled>\n                )}\n                {this.state.confirmRemovingOn && (\n                    <DialogCustom \n                        className=\"dialog\"\n                        dialogTitle=\"Czy na pewno chcesz usunąć ten załącznik?\"\n                        dialogRef={(c) => {this.removingDialogComponent = c}}\n                        onClose={this.handleCloseConfirmRemovingDialog}\n                    >\n                        <GridCustom centerVertical flexEnd>\n                            <ButtonStyled onClick={() => {this.setState({confirmRemovingOn: false})}} cancel>Anuluj</ButtonStyled>\n                            <ButtonStyled onClick={this.handleRemoveZalacznik} remove>Usuń załącznik</ButtonStyled>\n                        </GridCustom>\n                    </DialogCustom>\n                )}\n                {isNazwaInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n            </Box>\n        )\n    }\n\n    renderFile(temporaryId, errors) {\n        // loaded file\n        const z = this.props.zalacznik;\n        const progress = <LinearProgressCustom progress={this.state.progress || 0} />;\n        const error = (errors.plik || '').length > 0 ? <Text error id=\"load_file_error\">{errors.plik}</Text> : null;\n        if (z.plik.id) {\n            const plik = z.plik;\n            return (\n                <>\n                    {this.state.loadingInProgress && progress}\n                    {this.state.showLoadedSuccessMsg && <Text className=\"success-text\" role=\"status\">Plik został dodany!</Text>}\n                    <Text>{plik.nazwa}</Text>\n\t\t\t\t\t<ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => this.handleSaveFileFromApi(plik.uri, plik.nazwa)}>Pobierz załącznik<span className=\"sr-only\"> {z.nazwa || plik.nazwa}</span></ButtonStyled>\n                    {error}\n                    {this.renderOwner(z)}\n                </>\n            )\n        }\n\n        // loading file\n        if (this.state.loadingInProgress) {\n            return (\n                <>\n                    <Text>{this.state.loadingFileName}</Text>\n                    {progress}\n                    {error}\n                </>\n            )\n        }\n\n        let fileError = null;\n\n        const loadFileError = (errors.plik || '').length > 0 ? 'load_file_error' : null;\n        const noUploadError = this.state.showLoadingErrorMsg ? 'no_file_upload_error' : null;\n\n        if (loadFileError && noUploadError) {\n            fileError = `${loadFileError} ${noUploadError}`;\n        } else {\n            fileError = (loadFileError || noUploadError)\n        }\n\n        // set file\n        return (\n            <>\n                <Dropzone onDrop={this.handleAddPlik}>\n                    {({getRootProps, getInputProps}) => (\n                        <div {...getRootProps({className: 'dropzone'})}>\n                            <input\n                                aria-describedby={fileError}\n                                disabled={this.props.formLocked}\n                                id=\"fileinput\"\n                                style={{display: 'block'}}\n                                {...getInputProps({\n                                    onClick: ev => this.clearFileErrors(temporaryId),\n                                    style: {display: 'block', position: 'absolute', width: 0, height: 0, left: '-1000%'},\n                                })}\n                            />\n                            <label className=\"drag-n-drop-input-label\" htmlFor=\"fileinput\">Przeciągnij i upuść pliki lub kliknij, aby wybrać plik z komputera</label>\n                        </div>\n                    )}\n                </Dropzone>\n                {error}\n                {this.state.showLoadingErrorMsg && <Text error id=\"no_file_upload_error\">Plik nie został dodany</Text>}\n            </>\n        )\n    }\n\n    renderOwner(zalacznik) {\n        if (!zalacznik.plik.ktoUtworzyl) { return null }\n        const {\n            dataUtworzenia,\n            ktoUtworzyl,\n        } = zalacznik.plik;\n        return (\n            <>\n                <FieldWithLabel label=\"Dodany przez\">\n                    <Text>{ktoUtworzyl.imie} {ktoUtworzyl.nazwisko}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Data i czas dodania pliku\">\n                    <Text>{dataUtworzenia}</Text>\n                </FieldWithLabel>\n            </>\n        )\n    }\n\n    clearFileErrors(temporaryId) {\n        this.setState(\n            (prevState) => {\n                let errors = prevState.errors;\n                delete errors['plik'];\n                return {errors: errors}\n            }\n        );\n    }\n\n    handleRemoveZalacznik() {\n        if (this.removingDialogComponent !== null){\n            this.handleCloseConfirmRemovingDialog();\n        }\n        this.props.removeZalacznik(this.props.zalacznik.temporaryId);\n    }\n\n    handleAddPlik(files) {\n        if (!files.length) {\n            // stop loading\n            this.setState({loadingFileName: null, progress: null});\n            return\n        }\n\n        // get first file and use it it current component\n        let currentComponentFile = files[0];\n\n        if (this.validate(currentComponentFile)) {\n            this.save(currentComponentFile);\n        }\n\n        // render components for other files\n        if (files.length > 1) {\n            let filesLength = files.length;\n            if (this.props.maxLength) {\n                filesLength = Math.min(\n                    files.length,\n                    // available attachments to load\n                    this.props.maxLength - (this.props.zalacznikiLength - 1) // 1 is because of current input\n                );\n            }\n            // start from the second file, because the first one is already added\n            for (let i=1; i<filesLength; i++) {\n                this.props.addZalacznik({plikDoWgrania: files[i]})\n            }\n        }\n    }\n\n    validate(file) {\n        const fileNameList = file.name.split('.');\n        const extension = fileNameList[fileNameList.length - 1];\n\n        if (this.blockedFilesExtensions.includes(extension.toLowerCase())) {\n            this.setState(\n                (prevState) => {\n                    return {\n                        errors: Object.assign({}, prevState.errors, {\n                            plik: [`Nie udało się dodać pliku ${file.name}. Dodawanie plików z rozszerzeniem ${extension} zostało zablokowane.`]\n                        }),\n                        showLoadingErrorMsg: true,\n                    }\n                },\n                () => {\n                    this.errorMessageTimeout = setTimeout(() => {\n                        this.errorMessageTimeout = null;\n                        this.setState({showLoadingErrorMsg: false})\n                    }, 5000);\n                }\n            );\n            return false\n        }\n\n        if (this.errorMessageTimeout !== null){\n            clearTimeout(this.errorMessageTimeout);\n        }\n        this.setState((prevState) => {\n            let errors = prevState.errors;\n            delete errors.plik;\n            return {\n                errors: errors,\n                showLoadingErrorMsg: false,\n            }\n        });\n        return true\n    }\n\n    save(file) {\n        this.setState({progress: 0, loadingInProgress: true, loadingFileName: file.name});\n\n        const formData = new FormData();\n        formData.append('file', file);\n\n        this.xhrSaveFile = new XMLHttpRequest();\n        this.xhrSaveFile.open('POST', `/api/files?context=${this.props.contextForSaving || 'default'}`);\n\n        const authTokenCookieValue = getAuthTokenCookieValue();\n        if (authTokenCookieValue) {\n            this.xhrSaveFile.setRequestHeader('X-Auth-Token', authTokenCookieValue);\n        }\n\n        const onProgress = (e) => {\n            this.setState({progress: e.loaded / e.total})\n        };\n\n        this.xhrSaveFile.upload.onprogress = onProgress;\n\n        this.xhrSaveFile.onerror = () => {\n            this.xhrSaveFile = null;\n            this.setState(prevState => ({\n                errors: Object.assign({}, prevState.errors, {plik: ['Wystąpił nieoczekiwany błąd.']}),\n            }));\n        };\n\n        this.xhrSaveFile.onload = () => {\n            refreshTimerAfterRequest(\n                authTokenCookieValue, this.xhrSaveFile.status);\n            let success = true;\n            let error;\n            let jsonData = {};\n            try {\n                jsonData = JSON.parse(this.xhrSaveFile.responseText);\n            } catch(error) {\n                success = false;\n            }\n\n            if (success) {\n                if (jsonData.status === 'OK') {\n                    const file = jsonData.data.file;\n                    this.props.saveZalacznikAttributes(this.props.zalacznik.temporaryId, {\n                        plik: {\n                            id: file.id,\n                            uri: file.uri,\n                            nazwa: file.name,\n                            dataUtworzenia: file.created_at,\n                            ktoUtworzyl: {imie: file.created_by.forename, nazwisko: file.created_by.surname},\n                        },\n                        plikDoWgrania: null,\n                    });\n                    return\n                } else if (jsonData.errors) {\n                    error = translateErrorMessage(jsonData.errors.file);\n                } else {\n                    error = translateErrorMessage(jsonData.message);\n                }\n            } else if (this.xhrSaveFile.status === 413) {\n                error = 'Wybrany plik jest zbyt duży. Maksymalny rozmiar pliku to 25 MB.';\n            } else {\n                error = `Wystąpił nieoczekiwany błąd o kodzie ${this.xhrSaveFile.status}. Nie udało się dodać pliku.`;\n            }\n            this.setState(prevState => ({\n                errors: Object.assign({}, prevState.errors, {plik: [error]}),\n            }));\n            this.xhrSaveFile = null;\n        };\n        this.xhrSaveFile.send(formData);\n    }\n}\n\n\nexport { Zalacznik };\n","import React from 'react';\n\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { Zalacznik } from './Zalacznik';\n\n\nconst Zalaczniki = (props) => {\n    const {\n        children,\n        errors,\n        formLocked,\n        header,\n        isAlreadyPublished,\n        withoutHeader,\n        zalaczniki\n    } = props;\n    const zalacznikiErrors = (props.errors || {}).errors || [];\n    const isZalacznikiInvalid = zalacznikiErrors.length > 0;\n    // it is possible to rewrite this value\n    const zalacznikiLength = props.zalacznikiLength || zalaczniki.length;\n\n    return (\n        <>\n            {isZalacznikiInvalid && <ul role=\"alert\">{zalacznikiErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n            <GridCustom fullwidth flexTop>\n                {!withoutHeader && <Text tag=\"h2\" sectionHeader>{header || 'Załączniki'}</Text>}\n                {(!isAlreadyPublished && (!props.maxLength || zalacznikiLength < props.maxLength)) && (\n                    <ButtonStyled\n                        add\n                        disabled={formLocked}\n                        onClick={props.addZalacznik}\n                        noMargin\n                    >\n                        Dodaj załącznik\n                    </ButtonStyled>\n                )}\n            </GridCustom>\n            {children}\n            <GridCustom tag=\"ul\">\n                {[...zalaczniki].reverse().map(z => (\n                    <Zalacznik\n                        isAlreadyPublished={isAlreadyPublished}\n                        checkAttributeName={props.checkAttributeName}\n                        checkLabel={props.checkLabel}\n                        contextForSaving={props.contextForSaving}\n                        errors={(errors || {})[z.temporaryId] || {}}\n                        formLocked={formLocked}\n                        key={z.temporaryId}\n                        maxLength={props.maxLength}\n                        withCheck={props.withCheck}\n                        zalacznik={z}\n                        zalacznikiLength={zalacznikiLength}\n                        saveZalacznikAttributes={props.saveZalacznikAttributes}\n                        removeZalacznik={props.removeZalacznik}\n                        addZalacznik={props.addZalacznik}\n                        onCheckChange={props.onCheckChange}\n                    />)\n                )}\n            </GridCustom>\n        </>\n    )\n}\n\nexport { Zalaczniki };\n","import React, { useState } from 'react';\n\nimport { GridCustom, Select, Text, ButtonStyled } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { saveFileFromApi } from '../../../helpers';\n\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: 'Wybierz',\n};\n\nconst ZalacznikiSelect = (props) => {\n    const [selectedZalacznik, setSelectedZalacznik] = useState(EMPTY_VALUE);\n    const [selectWrapperClassName, setSelectWrapperClassName] = useState(null)\n    \n    if (props.zalaczniki.length === 0) {\n        return <Text info>Liczba wyników: 0</Text>\n    }\n    \n    let options = [EMPTY_VALUE, ].concat(...props.zalaczniki.map(z => {\n        let label = z.nazwa;\n        if (props.label && z[props.label.attrName] === true) {\n            label += ` - ${props.label.description}`;\n        }\n        return {value: z.id, label, plik: z.plik}\n    }))\n\n    const downloadAllAttachments = () => {\n        const url = `/api/offerset/${props.offersetId}/attachments.zip`;\n        const fileName = `Załączniki-${props.offersetId}.zip`;\n\n        return saveFileFromApi(url, fileName);\n    }\n\n    return (\n        <>\n            <GridCustom\n                noWrap\n                flexBottom\n                className={selectWrapperClassName}\n            >\n                <Select\n                    aria-label=\"Załączniki\"\n                    className=\"select-custom select-custom--download\"\n                    noOptionsMessage={() => 'Brak wybranej opcji'}\n                    options={options}\n                    placeholder=\"Brak załączników\"\n                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                    styles={customSelectStyles}\n                    value={selectedZalacznik}\n                    onChange={selectedOption => setSelectedZalacznik(selectedOption)}\n                    menuShouldScrollIntoView\n                    onFocus={() => setSelectWrapperClassName('select-download-wrapper')}\n                    onBlur={() => setSelectWrapperClassName(null)}\n                />\n                {selectedZalacznik.value !== 0 && selectedZalacznik.plik.uri.length > 0 && (\n\t\t\t\t\t<ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => saveFileFromApi(selectedZalacznik.plik.uri, selectedZalacznik.plik.nazwa)}>\n\t\t\t\t\t\tPobierz<span className=\"sr-only\"> załącznik {selectedZalacznik.nazwa || selectedZalacznik.plik.nazwa}</span>\n\t\t\t\t\t</ButtonStyled>\n                )}\n                {props.offersetId != null && (\n                    <ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => downloadAllAttachments()}>\n                        Pobierz wszystkie załączniki\n                    </ButtonStyled>\n                )}\n\n                {(selectedZalacznik.value !== 0 && !selectedZalacznik.plik.uri) && (\n                    <Text error id=\"selectedZalacznik_error\">Tego pliku nie da się pobrać. Skontaktuj się z obsługą strony.</Text>\n                )}\n            </GridCustom>\n        </>\n    )\n}\n\nexport { ZalacznikiSelect };\n","import React, { Component } from 'react';\n\nimport { TYP_NUMERU_IDENTYFIKACYJNEGO } from '../../../const';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { validatePersonalData } from '../../../validators';\nimport { ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { FormDanePodmiotuFields } from '../common';\n\nconst RODZAJ_ADRESU_CHOICES = [\n    {\n        value: 'poland',\n        label: 'Polska',\n    },\n    {\n        value: 'abroad',\n        label: 'Zagranica',\n    },\n];\nconst TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES = TYP_NUMERU_IDENTYFIKACYJNEGO.slice(0, 2);\nconst EMPTY_DATA = {\n    id: null,\n    nazwa: '',\n    typNumeruIdentyfikacyjnego: TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES[0],\n    numerIdentyfikacyjny: '',\n    rodzajAdresu: RODZAJ_ADRESU_CHOICES[0],\n    adres: {\n        kraj: 'Polska',\n        wojewodztwo: '',\n        powiat: '',\n        gmina: '',\n        miejscowosc: '',\n        kodPocztowy: '',\n        ulica: '',\n        numerDomu: '',\n    },\n};\n\n\nclass FormDanePodmiotu extends Component {\n\n    constructor(props) {\n        super(props);\n        this.isNew = !Object.keys(props.data).length;\n        this.state = {\n            savingOn: false,\n            data: Object.assign({}, EMPTY_DATA, props.data),\n            errors: {},\n            fetchError: '',\n        };\n\n        this.dialogComponent = null;\n        this.xhrFetchSave = null;\n    }\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetchSave !== null) {\n            this.xhrFetchSave.abort();\n        }\n    }\n\n    // handlers\n\n    handleChangeRodzajAdresu = (value) => {\n        let dct = {\n            numerIdentyfikacyjny: '',\n            rodzajAdresu: value,\n        };\n        let adres = {\n            kraj: null,\n            wojewodztwo: '',\n            powiat: '',\n            gmina: '',\n            miejscowosc: '',\n        };\n        if (value.value === 'poland') {\n            adres.kraj = 'Polska';\n            dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[0];\n        } else {\n            // set abroad\n            dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[2];\n        }\n\n        this.setState(prevState => {\n            return {data: Object.assign({}, prevState.data, {\n                ...dct,\n                adres: Object.assign({}, prevState.data.adres, adres),\n            })}\n        });\n    }\n\n    handleChangeAttribute = (name, value, isAdresPart) => {\n        this.setState(prevState => {\n            let dict = {[name]: value};\n            if (name === 'typNumeruIdentyfikacyjnego' && prevState.data['typNumeruIdentyfikacyjnego'].value !== value.value) {\n                dict['numerIdentyfikacyjny'] = '';\n            }\n            if (isAdresPart) {\n                return {data: Object.assign({}, prevState.data, {\n                    adres: Object.assign({}, prevState.data.adres, dict),\n                })}\n            } else {\n                return {data: Object.assign({}, prevState.data, dict)}\n            }\n        });\n    }\n\n    handleChangeMiejscowosc = (value) => {\n        this.setState(prevState => {\n            return {data: Object.assign({}, prevState.data, {\n                adres: Object.assign({}, prevState.data.adres, value)\n            })}\n        });\n    }\n\n    handleChangeNumerIdentyfikacyjny = (value, onlyDigits=false, maxLength=null) => {\n        if (onlyDigits) {\n            value = value.replace(/[^\\d]/g, '');\n        }\n        if (maxLength) {\n            value = value.slice(0, maxLength);\n        }\n        this.setState(prevState => {\n            return {data: Object.assign({}, prevState.data, {numerIdentyfikacyjny: value})}\n        });\n    }\n\n    handleSave = () => {\n        this.setState(\n            {savingOn: true, fetchError: ''},\n            () => {\n                const data = this.getData();\n                const [isValid, errors] = validatePersonalData(data);\n                if (isValid) {\n                    // save danePodmiotu on server\n                    this.xhrFetchSave = fetchApi(\n                        this.isNew ? '/api/users/economic-subject' : `/api/users/economic-subject/${this.state.data.id}`,\n                        this.isNew ? 'POST' : 'PUT',\n                        {},\n                        getSerializedObject(data, {toServer: true}),\n                        this.handleFetchSaveSuccess,\n                        this.handleFetchSaveError,\n                        this.handleFetchSaveIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, errors});\n                }\n            }\n        );\n    }\n\n    handleFetchSaveSuccess = (data) => {\n        this.xhrFetchSave = null;\n\n        let data_ = Object.assign({}, this.state.data);\n        if (this.isNew) {\n            data_['id'] = data.economic_subject.id;\n        }\n        this.props.saveDanePodmiotu(data_);\n    }\n\n    handleFetchSaveError = (data) => {\n        this.xhrFetchSave = null;     // clean xhr object\n        this.setState({\n            savingOn: false,\n            fetchError: `Nie udało się zapisać danych podmiotu. ${translateErrorMessage(data.message)}`,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus = (status) => {\n        this.xhrFetchSave = null;     // clean xhr object\n\n        this.setState({\n            savingOn: false,\n            fetchError: `Podczas zapisu danych podmiotu wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    // helpers\n\n    getData() {\n        const data = this.state.data;\n        const adres = data.adres;\n        return {\n            nazwa: data.nazwa,\n            typNumeruIdentyfikacyjnego: data.typNumeruIdentyfikacyjnego.value,\n            numerIdentyfikacyjny: data.numerIdentyfikacyjny,\n            rodzajAdresu: data.rodzajAdresu.value,\n            adres: {\n                kraj: data.adres.kraj,\n                wojewodztwo: adres.wojewodztwo,\n                powiat: adres.powiat,\n                gmina: adres.gmina,\n                miejscowosc: adres.miejscowosc,\n                kodPocztowy: adres.kodPocztowy,\n                ulica: adres.ulica,\n                numerDomu: adres.numerDomu,\n            },\n        }\n    }\n\n    // rendering\n\n    render() {\n        return (\n            <DialogCustom\n                className=\"dialog-long-content\"\n                dialogTitle={`${this.isNew ? 'Dodaj' : 'Edytuj'} dane podmiotu`}\n                dialogRef={(c) => { this.dialogComponent = c }}\n                onClose={this.props.closeDanePodmiotuForm}\n            >\n                <>\n                    <FormDanePodmiotuFields\n                        data={this.state.data}\n                        errors={this.state.errors}\n                        changeAttribute={this.handleChangeAttribute}\n                        changeMiejscowosc={this.handleChangeMiejscowosc}\n                        changeNumerIdentyfikacyjny={this.handleChangeNumerIdentyfikacyjny}\n                        changeRodzajAdresu={this.handleChangeRodzajAdresu}\n                    />\n                    <GridCustom flexEnd>\n                        <ButtonStyled onClick={this.props.closeDanePodmiotuForm} cancel>Anuluj</ButtonStyled>\n                        <ButtonStyled onClick={this.handleSave} primary>\n                            Zapisz<span className=\"sr-only\"> dane podmiotu</span>\n                        </ButtonStyled>\n                    </GridCustom>\n                    {this.state.fetchError.length > 0 && <Text error role=\"alert\">{this.state.fetchError}</Text>}\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\n\nexport { FormDanePodmiotu };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { translateErrorMessage } from '../../../serializers';\nimport { validateOsobaDoKontaktu } from '../../../validators';\nimport {ButtonStyled, DialogCustom, FieldWithLabel, GridCustom, Text,\n         TextFieldCustom } from '../../common';\n\n\nconst EMPTY_DATA = {\n    id: null,\n    imie: '',\n    nazwisko: '',\n    numerTelefonu: '',\n    email: '',\n};\n\n\nclass FormOsobaDoKontaktu extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            savingOn: false,\n            data: props.data !== null ? props.data : EMPTY_DATA,\n            isNew: props.data === null,\n            errors: {},\n            fetchError: '',\n        };\n\n        this.dialogComponent = null;\n        this.xhrFetchSave = null;\n    }\n\n    // basic functions\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetchSave !== null) {\n            this.xhrFetchSave.abort();\n        }\n    }\n\n    // handlers\n\n    handleChangeAttribute = (name, value) => {\n        this.setState(prevState => {\n            let errors = Object.assign({}, prevState.errors);\n            if (name === 'email') {\n                delete errors[name];\n            } else if (name === 'numerTelefonu') {\n                value = value.replace(/[^\\d+ -]/, '');\n            }\n            return {data: Object.assign({}, prevState.data, {[name]: value}), errors}\n        });\n    }\n\n    handlePasteNumerTelefonu = (ev) => {\n        // stop data actually being pasted into input\n        ev.stopPropagation();\n        ev.preventDefault();\n\n        // set pasted data via clipboard API\n        const clipboardData = ev.clipboardData || window.clipboardData;\n        const pastedData = clipboardData.getData('Text').replace(/[^\\d+ -]/g, '').trim();\n        this.handleChangeAttribute('numerTelefonu', pastedData);\n    }\n\n    handleSave = () => {\n        this.setState(\n            {savingOn: true, fetchError: ''},\n            () => {\n                const [isValid, errors] = validateOsobaDoKontaktu(this.state.data);\n                if (isValid) {\n                    const { data, isNew } = this.state;\n                    // save osobaDoKontaktu on server\n                    this.xhrFetchSave = fetchApi(\n                        isNew ? '/api/users/contact-persons' : `/api/users/contact-persons/${data.id}`,\n                        isNew ? 'POST' : 'PUT',\n                        {},\n                        {\n                            forename: data.imie,\n                            surname: data.nazwisko,\n                            phoneNumber: data.numerTelefonu,\n                            email: data.email,\n                        },\n                        this.handleFetchSaveSuccess,\n                        this.handleFetchSaveError,\n                        this.handleFetchSaveIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, errors});\n                }\n            }\n        );\n    }\n\n    handleFetchSaveSuccess = (data) => {\n        this.xhrFetchSave = null;\n\n        let data_ = Object.assign({}, this.state.data);\n        if (this.state.isNew) {\n            data_['id'] = data.contact_person.id;\n        }\n        this.props.saveOsobaDoKontaktu(data_, this.state.isNew);\n    }\n\n    handleFetchSaveError = (data) => {\n        this.xhrFetchSave = null;     // clean xhr object\n        this.setState({\n            savingOn: false,\n            fetchError: `Nie udało się zapisać osoby do kontaktu. ${translateErrorMessage(data.message)}`,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus = (status) => {\n        this.xhrFetchSave = null;     // clean xhr object\n\n        this.setState({\n            savingOn: false,\n            fetchError: `Podczas zapisu osoby do kontaktu wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    // rendering\n\n    render() {\n        const {data, errors, fetchError, savingOn} = this.state;\n        const isImieInvalid = (errors.imie || '').length > 0;\n        const isNazwiskoInvalid = (errors.nazwisko || '').length > 0;\n        const isEmailInvalid = (errors.email || '').length > 0;\n        const isFormInvalid = isImieInvalid || isNazwiskoInvalid || isEmailInvalid;\n\n        return (\n            <DialogCustom\n                className=\"dialog-long-content\"\n                dialogTitle={`${this.state.isNew ? 'Dodaj' : 'Edytuj'} osobę do kontaktu`}\n                dialogRef={(c) => { this.dialogComponent = c }}\n                onClose={this.props.closeOsobaDoKontaktuFormForm}\n            >\n                <>\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel label=\"Imię\" tag=\"label\" labelFor=\"name_id\">\n                            <TextFieldCustom\n                                aria-describedby={isImieInvalid ? 'name_error' : null}\n                                aria-label={`Imię, maksymalna liczba znaków: 500. Wpisano ${data.imie.length} znaków.`}\n                                characterCount\n                                className=\"filters__input\"\n                                clearFieldContext=\"imię\"\n                                disabled={savingOn}\n                                id=\"name_id\"\n                                invalid={isImieInvalid}\n                                maxLength={500}\n                                value={data.imie}\n                                onChange={(ev) => this.handleChangeAttribute('imie', ev.target.value)}\n                                onClear={(ev) => this.handleChangeAttribute('imie', '')} />\n                            {isImieInvalid && <Text error id=\"name_error\">{errors.imie}</Text>}\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Nazwisko\" tag=\"label\" labelFor=\"surname_id\">\n                            <TextFieldCustom\n                                aria-describedby={isNazwiskoInvalid ? 'surname_error' : null}\n                                aria-label={`Nazwisko, maksymalna liczba znaków: 500. Wpisano ${data.nazwisko.length} znaków.`}\n                                characterCount\n                                className=\"filters__input\"\n                                clearFieldContext=\"nazwisko\"\n                                disabled={savingOn}\n                                id=\"surname_id\"\n                                invalid={isNazwiskoInvalid}\n                                maxLength={500}\n                                value={data.nazwisko}\n                                onChange={(ev) => this.handleChangeAttribute('nazwisko', ev.target.value)}\n                                onClear={(ev) => this.handleChangeAttribute('nazwisko', '')} />\n                            {isNazwiskoInvalid && <Text error id=\"surname_error\">{errors.nazwisko}</Text>}\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel label=\"Numer telefonu\" tag=\"label\" labelFor=\"phone_id\">\n                            <TextFieldCustom\n                                aria-label={`Numer telefonu, maksymalna liczba znaków: 45. Wpisano ${data.numerTelefonu.length} znaków.`}\n                                characterCount\n                                className=\"filters__input\"\n                                clearFieldContext=\"numer telefonu\"\n                                disabled={savingOn}\n                                id=\"phone_id\"\n                                maxLength={45}\n                                value={data.numerTelefonu}\n                                onChange={(ev) => this.handleChangeAttribute('numerTelefonu', ev.target.value)}\n                                onClear={(ev) => this.handleChangeAttribute('numerTelefonu', '')}\n                                onPaste={this.handlePasteNumerTelefonu} />\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Adres e-mail\" tag=\"label\" labelFor=\"email_id\">\n                            <TextFieldCustom\n                                aria-describedby={isEmailInvalid ? 'email_error' : null}\n                                aria-label={`Adres e-mail, maksymalna liczba znaków: 500. Wpisano ${data.email.length} znaków.`}\n                                characterCount\n                                className=\"filters__input\"\n                                clearFieldContext=\"adres e-mail\"\n                                disabled={savingOn}\n                                id=\"email_id\"\n                                invalid={isEmailInvalid}\n                                maxLength={500}\n                                type=\"email\"\n                                value={data.email}\n                                onChange={(ev) => this.handleChangeAttribute('email', ev.target.value)}\n                                onClear={(ev) => this.handleChangeAttribute('email', '')} />\n                            {isEmailInvalid && <Text error id=\"email_error\">{errors.email}</Text>}\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom flexEnd>\n                        <ButtonStyled onClick={this.props.closeOsobaDoKontaktuFormForm} cancel>Anuluj</ButtonStyled>\n                        <ButtonStyled onClick={this.handleSave} primary>\n                            Zapisz<span className=\"sr-only\"> osobę do kontaktu</span>\n                        </ButtonStyled>\n                    </GridCustom>\n                    {fetchError.length > 0 && <Text error role=\"alert\">{fetchError}</Text>}\n                    {isFormInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\n\nexport { FormOsobaDoKontaktu };\n","import React, { Component } from 'react';\n\nimport { USER_DATA_COOKIE_NAME } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { deleteCookie, getCookieValue } from '../../../helpers';\nimport { Message } from '../../common';\n\n\nclass Logowanie extends Component {\n\n    constructor(props) {\n        super(props);\n        this.timeout = null;\n    }\n\n    componentWillUnmount() {\n        // clear timeout\n        if (this.timeout !== null) {\n            clearTimeout(this.timeout);\n        }\n    }\n\n    componentDidMount() {\n        const cookie = getCookieValue(USER_DATA_COOKIE_NAME);\n        if (cookie && cookie.length) {\n            const userData = JSON.parse(atob(decodeURIComponent(cookie)));\n            this.context.set(userData)\n            deleteCookie(USER_DATA_COOKIE_NAME);\n        }\n        this.timeout = setTimeout(() => {\n            this.redirectToCurrentPathname();\n        }, 5000);\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.user.identifier !== this.props.user.identifier && this.props.user.identifier === null) {\n            this.redirectToCurrentPathname();\n        }\n    }\n\n    // helpers\n\n    redirectToCurrentPathname() {\n        let currentPathname = sessionStorage.getItem('currentPathname') || '/';\n        if (currentPathname === '/blad-logowania') {\n            currentPathname = '/';\n        }\n        this.props.history.push(currentPathname);\n    }\n\n    // rendering\n\n    render() {\n        return (\n            <Message\n                success\n                messageIcon=\"check_circle_outline\"\n                messageTitle=\"Logowanie zakończone powodzeniem\" >\n                Następuje powrót do poprzedniej strony.\n            </Message>\n        )\n    }\n}\n\nLogowanie.contextType = UserContext;\n\n\nexport { Logowanie };\n","import {hasPerspectiveInstitutions, hasPerspectiveRegions} from './helpers';\n\n\nexport const getPermissionsValuesDict = (defaultDict, keyName, value) => {\n    let dct = {};\n    for (let key of Object.keys(defaultDict[keyName])) {\n        dct[key] = value;\n    }\n    return {[keyName]: dct}\n};\n\nexport const checkSinglePermission = (prevChecks, parent, child, value) => {\n    // check as mark, not check as check if value is equal to something\n    return {\n        [parent]: {\n            ...prevChecks[parent],\n            [child]: value,\n        },\n    }\n};\n\nexport const getPermissionErrors = (errors) => {\n    return (errors.permission || {}).decisions || []\n};\n\nexport const getGroupChecked = (checks, name) => {\n    const permissions = checks[name] || {};\n    if (!Object.keys(permissions).length) {\n        return false\n    }\n    return !Object.values(permissions).includes(false)\n};\n\nexport const getGroupIndeterminate = (checks, name) => {\n    const values = Object.values(checks[name]);\n    return values.includes(false) && values.includes(true)\n};\n\nexport const getMainGroupIndeterminate = (checks) => {\n    let values = [];\n    for (let group of Object.values(checks)) {\n        values = [...values, ...Object.values(group)];\n    }\n    return values.includes(false) && values.includes(true)\n};\n\nexport const getGrantedPermissionsForGroup = (permissions) => {\n    if (!permissions) { return false }\n    return Object.entries(permissions).filter(\n        ([_, value]) => value === true).map(([name, _]) => name)\n};\n\nconst PERMISSIONS_NAMES_DICT = {\n    all: 'Wszystkie uprawnienia',\n    usersAdministration: 'Funkcjonalność',\n    previewListUsers: 'Podgląd listy użytkowników',\n    blockingUsers: 'Blokowanie użytkowników',\n    contentAdministration: 'Funkcjonalność',\n    generalContentCookiesRegulation: 'Treści ogólne, cookies i regulamin',\n    statements: 'Komunikaty',\n    help: 'Pomoc',\n    projectsEnrollmentsAdministration: 'Projekty i nabory',\n    searchNPreviewData: 'Wyszukiwanie i podgląd danych',\n    editData: 'Edycja danych',\n    advertisementAdministration: 'Ogłoszenia',\n    blocking: 'Blokowanie i odblokowywanie',\n    permissionsAdministration: 'Zarządzanie uprawnieniami',\n    previewListUsersAuthorized: 'Podgląd listy uprawnionych użytkowników',\n    functionalityManagement: 'Dla funkcjonalności',\n    functionalityManagementImplementationLevel: 'Dla projektów i naborów oraz ogłoszeń',\n    permissionsManagement: 'Dla zarządzania uprawnieniami',\n    implementationLevelsDictionaryAdministration: 'Funkcjonalność',\n    previewData: 'Podgląd danych',\n};\n\nexport const translatePermissionName = (name) => {\n    return PERMISSIONS_NAMES_DICT[name] || name\n};\n\nconst getPerspectiveLabel_ = (perspective) => {\n    // if perspective is set, add it to string - it may be needed for key prop\n    return perspective ? `${perspective.id || ''}.` : ''\n}\n\nconst getRegionCode = (programme, priority, activity, region, perspective=null) => {\n    return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}.${activity.code || ''}-${region.code || ''}`\n};\n\nconst getInstitutionCode = (programme, priority, activity, institution, perspective=null) => {\n    return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}.${activity.code || ''}-${institution.code || ''}`\n};\n\nexport const getActivityCode = (programme, priority, activity, perspective=null) => {\n    return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}.${activity.code || ''}`\n};\n\nconst getPriorityCode = (programme, priority, perspective=null) => {\n    return `${getPerspectiveLabel_(perspective)}${programme.code || ''}.${priority.code || ''}`\n};\n\nexport const getRegionOrInstitutionCode = (\n    programme, priority, activity, region, institution, perspective=null\n) => {\n    if (region) {\n        return getRegionCode(\n            programme, priority, activity, region, perspective)\n    }\n    if (institution) {\n        return getInstitutionCode(\n            programme, priority, activity, institution, perspective)\n    }\n    // maybe there is neither region nor institution, then get activity code\n    return getActivityCode(programme, priority, activity, perspective)\n};\n\nexport const getImplementationLevelLabels = (permission) => {\n    const emptyData = {\n        code: null,\n        name: null,\n        description: null,\n    };\n    if (!permission.programme) {\n        return emptyData\n    }\n    const { programme } = permission;\n    if (!permission.priority) {\n        return {\n            code: programme.code || '',\n            name: programme.name || '',\n            description: 'Wszystkie osie',\n        }\n    }\n    const { priority } = permission;\n    if (!permission.activity) {\n        return {\n            code: getPriorityCode(programme, priority),\n            name: priority.name || '',\n            description: 'Wszystkie działania',\n        }\n    }\n    const { activity } = permission;\n    if (!permission.region && !permission.institution) {\n        return {\n            code: getActivityCode(programme, priority, activity),\n            name: activity.name || '',\n            description: hasPerspectiveRegions(permission.perspective)\n                ? 'Wszystkie regiony'\n                : hasPerspectiveInstitutions(permission.perspective)\n                    ? 'Wszystkie instytucje' : '',\n        }\n    }\n\n    const { institution, region } = permission;\n    if (!institution) {\n        return {\n            code: getRegionCode(programme, priority, activity, region),\n            name: region.name || '',\n            description: '',\n        }\n    }\n    return {\n        code: getInstitutionCode(programme, priority, activity, institution),\n        name: institution.name || '',\n        description: '',\n    }\n};\n\nexport const sortKeysList = (list, sortList) => {\n    list.sort((value1, value2) => {\n        return sortList.indexOf(value1[0]) - sortList.indexOf(value2[0])\n    });\n    return list\n};\n\nexport const PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT = {\n    usersAdministration: 'Lista użytkowników',\n    implementationLevelsDictionaryAdministration:\n        'Zarządzanie słownikami poziomów wdrożenia',\n    contentAdministration: 'Zarządzanie treścią',\n};\n\nexport const getPermissionHistoryUsersTitle = (permission, isHistory) => {\n    if (permission.isImplementationLevelType) {\n        const {\n            programme = null,\n            priority = null,\n            activity = null,\n            institution = null,\n            region = null\n        } = permission.permission;\n\n        if ([programme, priority, activity, region || institution].every(el => el !== null)) {\n            const isRegion = region !== null;\n            const levelSuffix = isRegion ? 'regionu' : 'instytucji';\n            return `${isHistory\n                ? `Historia zmian dla ${levelSuffix}`\n                : `Lista użytkowników z uprawnieniami do ${levelSuffix}`\n            } ${isRegion\n                ? `${getRegionCode(programme, priority, activity, region)} ${region.name}`\n                : `${getInstitutionCode(programme, priority, activity, institution)} ${institution.name}`\n            }`\n        }\n        if ([programme, priority, activity].every(el => el !== null)) {\n            return `${isHistory\n                ? 'Historia zmian dla działania'\n                : 'Lista użytkowników z uprawnieniami do działania'\n            } ${getActivityCode(programme, priority, activity)} ${activity.name}`\n        }\n        if ([programme, priority].every(el => el !== null)) {\n            return `${isHistory\n                ? 'Historia zmian dla osi'\n                : 'Lista użytkowników z uprawnieniami do osi'\n            } ${getPriorityCode(programme, priority)} ${priority.name}`\n        }\n        if (programme !== null) {\n            return `${isHistory\n                ? 'Historia zmian dla'\n                : 'Lista użytkowników z uprawnieniami do'\n            } programu ${programme.code || ''} ${programme.name}`\n        }\n        return `${isHistory\n            ? 'Historia zmian'\n            : 'Lista użytkowników'\n        } - stało się coś nieoczekiwanego`\n    }\n    return `${isHistory\n        ? 'Historia zmian'\n        : 'Lista użytkowników'\n    } dla uprawnienia ${PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[permission.permission.type]}`\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { checkHasNext, checkHasPrev } from '../../../helpers';\nimport {\n    getRegionOrInstitutionCode,\n    PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\nimport { fetchApi } from '../../../fetch';\nimport {\n    getSerializedObject,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    ButtonStyled,\n    Container,\n    GridCustom,\n    Loader,\n    Pagination,\n    TableCustom,\n    Text\n} from '../../common';\n\n\nconst PAGINATED_BY = 20;\n\n\nexport const PermissionList = ({\n    additionalFetchData = {},\n    hideAddPermissionButtonIfFullList = false,\n    initialRequestId = 1,\n    isImplementationLevelType,\n    requestId = 1,\n    RowComponent,\n    tableHeaderList,\n    title,\n    url,\n    withHistory,\n    onOpenForm,\n    onOpenHistory,\n    ...props\n}) => {\n    const [initializingOn, setInitializingOn] = useState(true);\n    const [pageNumber, setPageNumber] = useState(1);\n    const [fetchError, setFetchError] = useState(null);\n    const [data, setData] = useState(null);\n    const [is403error, setIs403error] = useState(false);\n\n    useEffect(() => {\n        if (requestId === initialRequestId) { return }\n        // clear pageNumber, because it's needed to change if useEffect below could run\n        setPageNumber(null);\n    }, [initialRequestId, requestId]);\n\n    useEffect(() => {\n        if (pageNumber === null) {\n            // set pageNumber to 1, it should't be empty\n            setPageNumber(1);\n            return\n        }\n        let xhrFetch = null;\n\n        function sortContentUsersPermissions(p1, p2) {\n            return PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[p1.type].localeCompare(\n                PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[p2.type], 'pl')\n        }\n\n        function callbackSuccess(data) {\n            xhrFetch = null;\n            const { total } = data.meta;\n            const permissions = getSerializedObject(\n                data, {mapToCamelCaseName: true}).permissions;\n            setData({\n                permissions: isImplementationLevelType\n                    ? permissions || []\n                    : Object.entries(permissions)\n                        .map(([type, data]) => ({...data, type}))\n                        .sort(sortContentUsersPermissions),\n                total: total,\n                hasPrev: checkHasPrev(pageNumber),\n                hasNext: checkHasNext(PAGINATED_BY, pageNumber, total),\n            });\n            setInitializingOn(false);\n        }\n\n        function callbackFetchError(message) {\n            xhrFetch = null;\n            setFetchError(message);\n            setInitializingOn(false);\n        }\n\n        function callbackError(data) {\n            callbackFetchError(\n                `Nie udało się pobrać listy uprawnień. ${translateErrorMessage(data.message)}`);\n        }\n\n        function callbackIncorrectStatus(status) {\n            if (status === 403) {\n                callbackFetchError(\n                    'Nie masz uprawnień do pobrania listy uprawnień.');\n                setIs403error(true);\n                return\n            }\n            callbackFetchError(\n                `Nie udało się pobrać listy uprawnień. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n            );\n        }\n\n        setInitializingOn(true);\n        setFetchError(null);\n        xhrFetch = fetchApi(\n            url, 'GET', {}, {\n                limit: PAGINATED_BY,\n                page: pageNumber,\n                ...additionalFetchData\n            },\n            callbackSuccess, callbackError, callbackIncorrectStatus\n        );\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }, [additionalFetchData, isImplementationLevelType, pageNumber, url]);\n\n    function handleChangePage(next=true) {\n        setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n    }\n\n    const { permissions } = useContext(UserContext);\n\n    let hideAddAdministrationPermissionButton = false;\n    if (!!data) {\n        if (isImplementationLevelType) {\n            hideAddAdministrationPermissionButton =\n                !permissions.addImplementationLevelPermission;\n        } else {\n            const permissionsNames = [\n                'contentAdministration',\n                'implementationLevelsDictionaryAdministration',\n                'usersAdministration'\n            ];\n            if (hideAddPermissionButtonIfFullList) {\n                // check if permission list is full\n                const setPermissions = data.permissions.map(perm => perm.type);\n                let permissionsToSet = [];\n                for (let permissionName of permissionsNames) {\n                    if (!setPermissions.includes(permissionName)) {\n                        permissionsToSet.push(permissionName);\n                    }\n                }\n                if (!permissionsToSet.length) {\n                    hideAddAdministrationPermissionButton = true;\n                }\n            } else {\n                // check if at least one permission is set\n                const mapDict = {\n                    contentAdministration: 'contentPermissionsManagement',\n                    implementationLevelsDictionaryAdministration:\n                        'implementationLevelsDictionaryPermissionsManagement',\n                    usersAdministration: 'usersPermissionsManagement',\n                };\n                let notSetPermissionsValues = [];\n                for (let permissionName of permissionsNames) {\n                    notSetPermissionsValues = [\n                        ...notSetPermissionsValues,\n                        ...Object.values(permissions[mapDict[permissionName]])\n                    ];\n                }\n                hideAddAdministrationPermissionButton =\n                    !notSetPermissionsValues.includes(true);\n            }\n        }\n    }\n\n    return (\n        <Container>\n            <GridCustom fullwidth>\n                <Text tag=\"h2\" mainHeader>{title}</Text>\n                {withHistory && !is403error && (\n                    <GridCustom flexTop>\n                        <ButtonStyled lite onClick={onOpenHistory}>\n                            Historia zmian\n                        </ButtonStyled>\n                    </GridCustom>\n                )}\n            </GridCustom>\n            {initializingOn\n                ? <Loader />\n                : (fetchError\n                    ? <Text error role=\"alert\">{fetchError}</Text>\n                    : (\n                        <>\n                            {data.total === 0\n                                ? <Text error>Brak uprawnień</Text>\n                                : (\n                                    <TableCustom\n                                        tableHeaderList={tableHeaderList}>\n                                        {data.permissions.map(object => (\n                                            <RowComponent\n                                                isImplementationLevelType={isImplementationLevelType}\n                                                key={isImplementationLevelType\n                                                    ? getRegionOrInstitutionCode(\n                                                        object.programme || {},\n                                                        object.priority || {},\n                                                        object.activity || {},\n                                                        object.region || null,\n                                                        object.institution || null,\n                                                        object.perspective || null\n                                                    )\n                                                    : object.type\n                                                }\n                                                permission={object}\n                                                {...props} />\n                                        ))}\n                                    </TableCustom>\n                                )\n                            }\n                            {data.total > PAGINATED_BY && (\n                                <Pagination\n                                    currentPage={pageNumber}\n                                    hasNext={data.hasNext}\n                                    hasPrev={data.hasPrev}\n                                    handleChangePage={handleChangePage} />\n                            )}\n                        </>\n                    )\n                )\n            }\n            {!hideAddAdministrationPermissionButton && !is403error && (\n                <ButtonStyled\n                    add\n                    onClick={e => {\n                        onOpenForm();\n                        e.currentTarget.blur();\n                    }}>\n                    Dodaj uprawnienia\n                </ButtonStyled>\n            )}\n        </Container>\n    )\n};\n","import React from 'react';\n\nimport { ButtonStyled, MoreOptionsButton } from '../../common';\n\n\nexport const PermissionsMoreOptionButton = ({\n    onOpenHistory, onOpenUserList\n}) => {\n    return (\n        <MoreOptionsButton\n            className=\"permissions__more-options\"\n            menuAriaLabel=\"Otwórz menu: Lista użytkowników lub historia zmian\"\n        >\n            <ul className=\"permissions__more-options-list\">\n                <li>\n                    <ButtonStyled onClick={onOpenUserList}>\n                        Lista użytkowników\n                    </ButtonStyled>\n                </li>\n                <li>\n                    <ButtonStyled onClick={onOpenHistory}>\n                        Historia zmian\n                    </ButtonStyled>\n                </li>\n            </ul>\n        </MoreOptionsButton>\n)\n};\n\n","import React, { Fragment, useEffect, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Button } from '@rmwc/button';\nimport { LoaderIcon, Text } from '../../common';\nimport { PermissionsMoreOptionButton } from './PermissionsMoreOptionButton';\n\n\nconst OBJECT_TYPE_DICT = {\n    programme: {\n        buttonLabel: 'osi',\n        dataObjectName: 'priorities',\n        url: API_URLS.priorities,\n    },\n    priority: {\n        buttonLabel: 'działań',\n        dataObjectName: 'activities',\n        url: API_URLS.activities,\n    },\n    subactivity: {\n        buttonLabel: 'regionów',\n        dataObjectName: 'regions',\n        url: API_URLS.regions,\n    },\n    activity: {\n        buttonLabel: 'instytucji',\n        dataObjectName: 'institutions',\n        url: API_URLS.institutions,\n    },\n}\n\n\nexport const PermissionListImplementationLevelCellProgrammePriorityActivity = ({\n    fullPermission,\n    hasRegions,\n    object,\n    objectType,\n    onSetActiveHistoryPermission,\n    onSetActiveUsersPermission, ...props\n}) => {\n    const [initializationOn, setInitializationOn] = useState(true);\n    const [isOpen, setIsOpen] = useState(false);\n    const [subObjects, setSubObjects] = useState(null);\n    const [fetchError, setFetchError] = useState(null);\n\n    const typeDict = OBJECT_TYPE_DICT[objectType];\n\n    useEffect(() => {\n        setFetchError(null);\n        if (!isOpen || subObjects !== null) { return }\n        setInitializationOn(true);\n\n        function callbackSuccess(data) {\n            xhrFetch = null;\n            setSubObjects(data[typeDict.dataObjectName]);\n            setInitializationOn(false);\n        }\n\n        function callbackError(data) {\n            xhrFetch = null;\n            setFetchError(\n                `Nie udało się pobrać danych. ${translateErrorMessage(data.message)}`\n            );\n            setInitializationOn(false);\n        }\n\n        function callbackIncorrectStatus(status) {\n            xhrFetch = null;\n            setFetchError(\n                `Nie udało się pobrać danych. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n            );\n            setInitializationOn(false);\n        }\n\n        let xhrFetch = fetchApi(\n            typeDict.url.getUrl(object.id), 'GET', {}, {},\n            callbackSuccess, callbackError, callbackIncorrectStatus\n        );\n\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }, [isOpen, object.id, subObjects, typeDict]);\n\n    const permissionForActionDict = {\n        isImplementationLevelType: true,\n        permission: fullPermission\n    };\n    return (\n        <>\n            <div className=\"permissions__level-row\">\n                <PermissionsMoreOptionButton\n                    onOpenHistory={() => onSetActiveHistoryPermission(\n                        permissionForActionDict\n                    )}\n                    onOpenUserList={() => onSetActiveUsersPermission(\n                        permissionForActionDict\n                    )} />\n                <Text className={props.isMainLevel ? 'permissions__main-name' : 'permissions__indented'}>{object.code} {object.name}\n                    {isOpen\n                        ? (\n                            <Button\n                                className=\"permissions__show-less\"\n                                icon='keyboard_arrow_up'\n                                label={`zwiń listę ${typeDict.buttonLabel}`}\n                                onClick={() => setIsOpen(false)}\n                            />\n                        )\n                        : (\n                            <Button\n                                className=\"permissions__show-more\"\n                                icon='keyboard_arrow_down'\n                                label={`rozwiń listę ${typeDict.buttonLabel}`}\n                                onClick={() => setIsOpen(true)}\n                            />\n                        )\n                    }\n                </Text>\n            </div>\n            {isOpen && (\n                <div className=\"permissions__level-list\">\n                    {initializationOn\n                        ? <LoaderIcon />\n                        : (\n                            <>\n                                {subObjects !== null && subObjects.map(obj => (\n                                    <Fragment key={obj.id}>\n                                        {objectType === 'programme' && (\n                                            <PermissionListImplementationLevelCellProgrammePriorityActivity\n                                                fullPermission={{...fullPermission, priority: obj}}\n                                                hasRegions={hasRegions}\n                                                isMainLevel={false}\n                                                object={obj}\n                                                objectType=\"priority\"\n                                                onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n                                                onSetActiveUsersPermission={onSetActiveUsersPermission} />\n                                        )}\n                                        {objectType === 'priority' && (\n                                            <PermissionListImplementationLevelCellProgrammePriorityActivity\n                                                fullPermission={{...fullPermission, activity: obj}}\n                                                hasRegions={hasRegions}\n                                                isMainLevel={false}\n                                                object={obj}\n                                                objectType={hasRegions ? 'subactivity' : 'activity'}\n                                                onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n                                                onSetActiveUsersPermission={onSetActiveUsersPermission} />\n                                        )}\n                                        {['activity', 'subactivity'].includes(objectType) && (\n                                            <div className=\"permissions__level-row permissions__level-row--deeper\">\n                                                <PermissionsMoreOptionButton\n                                                    onOpenHistory={() => onSetActiveHistoryPermission({\n                                                        isImplementationLevelType: true,\n                                                        permission: {\n                                                            ...fullPermission,\n                                                            [objectType === 'activity' ? 'institution' : 'region']: obj\n                                                        }\n                                                    })}\n                                                    onOpenUserList={() => onSetActiveUsersPermission({\n                                                        isImplementationLevelType: true,\n                                                        permission: {\n                                                            ...fullPermission,\n                                                            [objectType === 'activity' ? 'institution' : 'region']: obj\n                                                        }\n                                                    })}\n                                                />\n                                                <Text className=\"permissions__indented\">{obj.code} {obj.name}</Text>\n                                            </div>\n                                        )}\n                                    </Fragment>\n                                ))}\n                                {subObjects !== null && !subObjects.length && <Text error className=\"text--error\">Lista jest pusta.</Text>}\n                                {fetchError !== null && <Text error>{fetchError}</Text>}\n                            </>\n                        )\n                    }\n                </div>\n            )} \n        </>\n    )\n};\n","import React from 'react';\n\nimport { hasPerspectiveRegions } from '../../../helpers';\nimport { Text } from '../../common';\nimport {\n    PermissionListImplementationLevelCellProgrammePriorityActivity\n} from './PermissionListImplementationLevelCellProgrammePriorityActivity';\nimport { PermissionsMoreOptionButton } from './PermissionsMoreOptionButton';\n\n\nexport const PermissionListImplementationLevelCell = ({\n    permission, onSetActiveHistoryPermission, onSetActiveUsersPermission\n}) => {\n    const {\n        perspective = null,\n        programme = null,\n        priority = null,\n        activity = null,\n        institution = null,\n        region = null\n    } = permission;\n\n    const hasRegions = hasPerspectiveRegions(perspective);\n    const theLowestLevel = hasRegions ? region : institution;\n\n    // region/institution level\n    if ([programme, priority, activity, theLowestLevel].every(el => el !== null)) {\n        const permissionForActionDict = {\n            isImplementationLevelType: true,\n            permission: {\n                perspective,\n                programme,\n                priority,\n                activity,\n                [hasRegions ? 'region' : 'institution']: theLowestLevel\n            },\n        };\n        return (\n            <>\n                <Text>{programme.code} {programme.name}</Text>\n                <div className=\"permissions__level-row\">\n                    <Text className=\"permissions__indented permissions__indented--on-start\">\n                        {priority.code} {priority.name}\n                    </Text>\n                </div>\n                <div className=\"permissions__level-row\">\n                    <Text className=\"permissions__indented permissions__indented--on-start\">\n                        {activity.code} {activity.name}\n                    </Text>\n                </div>\n                <div className=\"permissions__level-row\">\n                    <PermissionsMoreOptionButton\n                        onOpenHistory={() => onSetActiveHistoryPermission(\n                            permissionForActionDict)}\n                        onOpenUserList={() => onSetActiveUsersPermission(\n                            permissionForActionDict)} />\n                    <Text className=\"permissions__main-name\">\n                        {theLowestLevel.code} {theLowestLevel.name}\n                    </Text>\n                </div>\n            </>\n        )\n    }\n\n    // activity level\n    if (\n        [programme, priority, activity].every(el => el !== null) &&\n        theLowestLevel === null\n    ) {\n        return (\n            <>\n                <Text>{programme.code} {programme.name}</Text>\n                <PermissionListImplementationLevelCellProgrammePriorityActivity\n                    fullPermission={permission}\n                    hasRegions={hasRegions}\n                    isMainLevel={true}\n                    object={activity}\n                    objectType={hasRegions ? 'subactivity' : 'activity'}\n                    onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n                    onSetActiveUsersPermission={onSetActiveUsersPermission} />\n            </>\n        )\n    }\n\n    // priority level\n    if (\n        [programme, priority].every(el => el !== null) &&\n        [activity, theLowestLevel].every(el => el === null)\n    ) {\n        return (\n            <>\n                <Text>{programme.code} {programme.name}</Text>\n                <PermissionListImplementationLevelCellProgrammePriorityActivity\n                    fullPermission={permission}\n                    hasRegions={hasRegions}\n                    isMainLevel={true}\n                    object={priority}\n                    objectType=\"priority\"\n                    onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n                    onSetActiveUsersPermission={onSetActiveUsersPermission} />\n            </>\n        )\n    }\n\n    // programme level\n    if (\n        programme !== null &&\n        [priority, activity, theLowestLevel].every(el => el === null)\n    ) {\n        return (\n            <PermissionListImplementationLevelCellProgrammePriorityActivity\n                fullPermission={permission}\n                hasRegions={hasRegions}\n                isMainLevel={true}\n                object={programme}\n                objectType=\"programme\"\n                onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n                onSetActiveUsersPermission={onSetActiveUsersPermission} />\n        )\n    }\n    return null\n};\n","import React from 'react';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport {\n    PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT,\n    translatePermissionName\n} from '../../../helpers_permissions';\nimport { Text } from '../../common';\nimport {\n    PermissionListImplementationLevelCell\n} from './PermissionListImplementationLevelCell';\nimport { PermissionsMoreOptionButton } from './PermissionsMoreOptionButton';\n\n\nexport const PermissionListRow = ({\n    isImplementationLevelType, permission, onSetActiveHistoryPermission,\n    onSetActiveUsersPermission\n}) => {\n\n    const permissions = (\n        permission.permissions || {}).permissionsAdministration || {};\n    const permissionForActionDict = {\n        isImplementationLevelType: false,\n        permission: {type: permission.type},\n    };\n    return (\n        <DataTableRow>\n            <DataTableCell className=\"permissions__col-permissions-list\">\n                {isImplementationLevelType\n                    ? <PermissionListImplementationLevelCell\n                        permission={permission}\n                        onSetActiveHistoryPermission={onSetActiveHistoryPermission}\n                        onSetActiveUsersPermission={onSetActiveUsersPermission} />\n                    : (\n                        <div className=\"permissions__level-row\">\n                            <PermissionsMoreOptionButton\n                                onOpenHistory={() => onSetActiveHistoryPermission(\n                                    permissionForActionDict\n                                )}\n                                onOpenUserList={() => onSetActiveUsersPermission(\n                                    permissionForActionDict\n                                )} />\n                            <Text>{PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[permission.type]}</Text>\n                        </div>\n                    )\n                }\n            </DataTableCell>\n            <DataTableCell>\n                {(permissions.previewListUsersAuthorized || false) &&\n                    <Text className=\"permissions__legend permissions__legend--users\">\n                        {translatePermissionName('previewListUsersAuthorized')}\n                    </Text>\n                }\n                {(permissions.functionalityManagement || false)  &&\n                    <Text className=\"permissions__legend permissions__legend--projects\">\n                        {translatePermissionName(\n                            isImplementationLevelType\n                                ? 'functionalityManagementImplementationLevel'\n                                : 'functionalityManagement'\n                        )}\n                    </Text>\n                }\n                {(permissions.permissionsManagement || false)  &&\n                    <Text className=\"permissions__legend permissions__legend--permissions\">\n                        {translatePermissionName('permissionsManagement')}\n                    </Text>\n                }\n            </DataTableCell>\n        </DataTableRow>\n    )\n};\n","import React from 'react';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport {\n    PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\n\n\nconst OPERATION_TYPE_SERIALIZERS = {\n    permissionsDenied: 'Odebrano uprawnienia',\n    permissionsGranted: 'Przyznano uprawnienia',\n    permissionsModified: 'Zmieniono zakres uprawnień',\n};\n\n\nexport const PermissionsHistoryListRow = ({\n    event, isImplementationLevelType, mode\n}) => {\n    return (\n        <DataTableRow>\n            <DataTableCell>{event.addedAt || ''}</DataTableCell>\n            <DataTableCell>\n                {mode === 'userHistory'\n                    ? isImplementationLevelType\n                        ? event.implementationLevelName\n                        : (PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[event.context] ||\n                            event.context)\n                    : event.authorizedUserEmail\n                }\n            </DataTableCell>\n            <DataTableCell>\n                {OPERATION_TYPE_SERIALIZERS[event.operationType] ||\n                    event.operationType}\n            </DataTableCell>\n            <DataTableCell>{(event.addedBy || {}).email || ''}</DataTableCell>\n        </DataTableRow>\n    )\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { checkHasNext, checkHasPrev, dateToString } from '../../../helpers';\nimport {\n    getSerializedObject,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    ButtonStyled,\n    DateCalendar,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Loader,\n    Pagination,\n    TableCustom,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { PermissionsHistoryListRow } from './PermissionsHistoryListRow';\n\n\nconst PAGINATED_BY = 20;\n\n\nexport const PermissionsHistory = ({dialogTitle = '', ...props}) => {\n    const [initializingOn, setInitializingOn] = useState(true);\n    const [requestId, setRequestId] = useState(null);\n    const [pageNumber, setPageNumber] = useState(1);\n    const [fetchError, setFetchError] = useState(null);\n    const [filters, setFilters] = useState({\n        addedAtFrom: '',\n        addedAtTo: '',\n        addedByEmail: '',\n    });\n    const [data, setData] = useState(null);\n    const [isPickerOpen, setIsPickerOpen] = useState(false);\n\n    useEffect(() => {\n        setRequestId(1);\n    }, []);\n\n    useEffect(() => {\n        setRequestId(prevValue => prevValue + 1);\n    }, [pageNumber]);\n\n    function getHistory() {\n        if (requestId === null) { return }\n        let xhrFetch = null;\n\n        function callbackSuccess(data) {\n            xhrFetch = null;\n            const { total } = data.meta;\n            setData({\n                events: getSerializedObject(\n                    data, {mapToCamelCaseName: true}).permissionsHistory || [],\n                total: total,\n                hasPrev: checkHasPrev(pageNumber),\n                hasNext: checkHasNext(PAGINATED_BY, pageNumber, total),\n            });\n            setInitializingOn(false);\n        }\n\n        function callbackFetchError(message) {\n            xhrFetch = null;\n            setFetchError(message);\n            setInitializingOn(false);\n        }\n\n        function callbackError(data) {\n            callbackFetchError(\n                `Nie udało się pobrać historii uprawnień. ${translateErrorMessage(data.message)}`\n            );\n        }\n\n        function callbackIncorrectStatus(status) {\n            callbackFetchError(status === 403\n                ? 'Nie masz uprawnień do przeglądania historii.'\n                : `Nie udało się pobrać historii uprawnień. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n            );\n        }\n\n        setInitializingOn(true);\n        setFetchError(null);\n        xhrFetch = fetchApi(\n            props.url, 'GET', {}, {\n                authorized: props.userId, limit: PAGINATED_BY,\n                page: pageNumber, ...filters,\n                ...(props.additionalFetchData || {})\n            },\n            callbackSuccess, callbackError, callbackIncorrectStatus\n        );\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }\n    useEffect(getHistory, [requestId, ]);\n\n    function handleChangeFilter(name, value) {\n        setFilters(prevValue => ({...filters, [name]: value}));\n    }\n\n    function handleChangePage(next=true) {\n        setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n    }\n\n    function handleCalendarOpen() {\n        setIsPickerOpen(true)\n    }\n\n    function handleCalendarClose() {\n        setIsPickerOpen(false)\n    }\n\n    function handleEscPress(event) {\n        if (event.keyCode === 27) {\n            if (isPickerOpen) {\n                event.nativeEvent.stopImmediatePropagation();\n            } else {\n                props.onClose();\n            }\n        }\n    }\n\n    const addedAtFromRef = useRef();\n    const addedAtToRef = useRef();\n    const addedAtFrom = !!filters.addedAtFrom\n        ? new Date(filters.addedAtFrom)\n        : '';\n    const addedAtTo = !!filters.addedAtTo ? new Date(filters.addedAtTo) : '';\n\n    return (\n        <DialogCustom\n            className=\"dialog-long-content\"\n            dialogTitle={dialogTitle}\n            onClose={props.onClose}\n            onKeyDown={handleEscPress}\n        >\n            <Text>Zakres historii</Text>\n            <GridCustom fullwidth flexTop flexM className=\"permissions__history\">\n                {/* Empty div for WCAG purpose: prevents autofocus of the first calendar field */}\n                <div tabIndex=\"0\"></div>\n                <FieldWithLabel\n                    inputRef={addedAtFromRef}\n                    label=\"od\"\n                    tag=\"label\">\n                    <DateCalendar\n                        dateName=\"Od\"\n                        disabled={initializingOn}\n                        maxDate={addedAtTo || undefined}\n                        parentRef={addedAtFromRef}\n                        value={addedAtFrom}\n                        onCalendarOpen={handleCalendarOpen}\n                        onCalendarClose={handleCalendarClose}\n                        onChange={date => handleChangeFilter('addedAtFrom', dateToString(date))} />\n                </FieldWithLabel>\n                <FieldWithLabel\n                    inputRef={addedAtToRef}\n                    label=\"do\"\n                    tag=\"label\">\n                    <DateCalendar\n                        dateName=\"Do\"\n                        disabled={initializingOn}\n                        minDate={addedAtFrom || undefined}\n                        parentRef={addedAtToRef}\n                        value={addedAtTo}\n                        onCalendarOpen={handleCalendarOpen}\n                        onCalendarClose={handleCalendarClose}\n                        onChange={date => handleChangeFilter('addedAtTo', dateToString(date))} />\n                </FieldWithLabel>\n                <FieldWithLabel\n                    label=\"wprowadzający\"\n                    labelFor=\"filters_addedByEmail_id\"\n                    tag=\"label\">\n                    <TextFieldCustom\n                        aria-label={`Wprowadzający, maksymalna liczba znaków: 100. Wpisano ${filters.addedByEmail.length} znaków.`}\n                        aria-valuemax={100}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"wprowadzający\"\n                        disabled={initializingOn}\n                        id=\"filters_addedByEmail_id\"\n                        maxLength={100}\n                        value={filters.addedByEmail}\n                        onChange={ev => handleChangeFilter('addedByEmail', ev.target.value)}\n                        onClear={ev => handleChangeFilter('addedByEmail', '')} />\n                </FieldWithLabel>\n                <ButtonStyled\n                    className=\"permissions__history-filter-btn\"\n                    disabled={initializingOn}\n                    lite\n                    onClick={() => {\n                        if (pageNumber > 1) {\n                            setPageNumber(1);\n                        } else {\n                            setRequestId(prevValue => prevValue + 1)\n                        }\n                    }}>\n                    Filtruj\n                </ButtonStyled>\n            </GridCustom>\n            {initializingOn\n                ? <Loader />\n                : (fetchError\n                    ? <Text error>{fetchError}</Text>\n                    : (\n                        <>\n                            {data.total === 0\n                                ? <Text error>Historia jest pusta</Text>\n                                : (\n                                    <TableCustom\n                                        tableHeaderList={props.tableHeaderList}>\n                                        {data.events.map(event => (\n                                            <PermissionsHistoryListRow\n                                                event={event}\n                                                isImplementationLevelType={\n                                                    props.isImplementationLevelType\n                                                }\n                                                key={event.id}\n                                                mode={props.mode} />\n                                        ))}\n                                    </TableCustom>\n                                )\n                            }\n                            {data.total > PAGINATED_BY && (\n                                <Pagination\n                                    currentPage={pageNumber}\n                                    disabled={initializingOn}\n                                    hasNext={data.hasNext}\n                                    hasPrev={data.hasPrev}\n                                    handleChangePage={handleChangePage} />\n                            )}\n                        </>\n                    )\n                )\n            }\n            <GridCustom flexEnd>\n                <ButtonStyled primary onClick={props.onClose}>\n                    Zamknij\n                </ButtonStyled>\n            </GridCustom>\n        </DialogCustom>\n    )\n};\n","import React, { Fragment } from 'react';\n\nimport {\n    getGrantedPermissionsForGroup,\n    getGroupChecked,\n    translatePermissionName\n} from '../../../helpers_permissions';\nimport { Text } from '../../common';\n\n\nexport const UserPermissionsListGrantedCell = ({\n    groupNameList, isImplementationLevelType, permissions\n}) => {\n    return (\n        <>\n            {groupNameList.map(groupName => {\n                if (getGroupChecked(permissions, groupName)) {\n                    return (\n                        <Text className=\"permissions__main-name\" key={groupName}>\n                            {translatePermissionName(groupName)} - pełne uprawnienia\n                        </Text>\n                    )\n                }\n\n                const groupGranted = getGrantedPermissionsForGroup(\n                    permissions[groupName]);\n                if (!groupGranted.length) { return null }\n\n                return (\n                    <Fragment key={groupName}>\n                        <Text className=\"permissions__main-name\">{translatePermissionName(groupName)}</Text>\n                        {groupGranted.map(permissionName => (\n                            <Text\n                                className=\"permissions__indented\"\n                                key={`${groupName}_${permissionName}`}>\n                                {translatePermissionName(\n                                    isImplementationLevelType && permissionName === 'functionalityManagement'\n                                        ? 'functionalityManagementImplementationLevel'\n                                        : permissionName\n                                )}\n                            </Text>\n                        ))}\n                    </Fragment>\n                )\n            })}\n        </>\n    )\n};\n","/*\n<DataTableRow>\n    <DataTableCell>\n        <Text>Lista użytkowników</Text>\n        <Text className=\"permissions__level-name\"><b>EFGH - 01</b> Nazwa osi priorytetowej</Text>\n        <Text className=\"permissions__sub-name\">Wszystkie działania</Text>\n    </DataTableCell>\n    <DataTableCell>\n        <Text className=\"permissions__main-name\">Funkcjonalność - pełne uprawnienia</Text>\n        <Text>Zarządzanie uprawnieniami</Text>\n        <Text className=\"permissions__indented\">Podgląd listy uprawnionych użytkowników</Text>\n        <Text className=\"permissions__indented\">Dla projektów i naborów</Text>\n    </DataTableCell>\n</DataTableRow>\n*/\n\nimport React from 'react';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\n\nimport {\n    getImplementationLevelLabels,\n    PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\nimport { ButtonStyled, Text } from '../../common';\nimport { UserPermissionsListGrantedCell } from './UserPermissionsListGrantedCell';\n\n\nexport const UserPermissionsListRow = ({\n    isImplementationLevelType, mode = 'permissionData', permission,\n    onSetEditedPermission, onSetRemovedPermission\n}) => {\n    /* possible modes:\n        permissionData - set the first cell as permission name\n        userData - set the first cell as user data (full name and email)\n    */\n    let implementationLevelLabels = {};\n    if (mode==='permissionData' && isImplementationLevelType) {\n        implementationLevelLabels = getImplementationLevelLabels(permission);\n    }\n\n    const { authorized: user = {} } = permission;\n    return (\n        <DataTableRow>\n            <DataTableCell>\n                {mode === 'permissionData' && isImplementationLevelType\n                    ? (\n                        <>\n                            <Text className=\"permissions__level-name\">\n                                <b>{implementationLevelLabels.code}</b> {implementationLevelLabels.name}\n                            </Text>\n                            {implementationLevelLabels.description.length > 0 && (\n                                <Text className=\"permissions__sub-name\">\n                                    {implementationLevelLabels.description}\n                                </Text>\n                            )}\n                        </>\n                    )\n                    : <Text>{PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[permission.type]}</Text>\n                }\n                {mode === 'userData' && (\n                    <>\n                        <Text>{user.forename || ''} {user.surname || ''}</Text>\n                        <Text className=\"permissions__sub-name\">{user.email || ''}</Text>\n                    </>\n                )}\n            </DataTableCell>\n            <DataTableCell className=\"permissions__col-permissions-details\">\n                {isImplementationLevelType\n                    ? <UserPermissionsListGrantedCell\n                        groupNameList={[\n                            'projectsEnrollmentsAdministration',\n                            'advertisementAdministration',\n                            'permissionsAdministration'\n                        ]}\n                        isImplementationLevelType={true}\n                        permissions={permission.permissions} />\n                    : <UserPermissionsListGrantedCell\n                        groupNameList={\n                            permission.type === 'usersAdministration'\n                            ? [\n                                'usersAdministration',\n                                'permissionsAdministration'\n                            ] : permission.type === 'contentAdministration'\n                                ? [\n                                    'contentAdministration',\n                                    'permissionsAdministration'\n                                ] : [\n                                    'implementationLevelsDictionaryAdministration',\n                                    'permissionsAdministration'\n                                ]\n                        }\n                        isImplementationLevelType={false}\n                        permissions={permission.permissions}\n                    />\n                }\n            </DataTableCell>\n            <DataTableCell className=\"permissions__col-buttons\">\n                {mode === 'userData' && permission.hasHigherLevelPermissions\n                    ? <Text>Użytkownik ma uprawnienia wyższego poziomu</Text>\n                    : (\n                        <>\n                            {permission.canEdit && (\n                                <ButtonStyled\n                                    lite\n                                    onClick={() => onSetEditedPermission(\n                                    isImplementationLevelType, permission)}\n                                >\n                                Edytuj\n                                </ButtonStyled>\n                            )}\n                            {permission.canDelete && (\n                                <ButtonStyled\n                                    remove\n                                    onClick={() => onSetRemovedPermission(\n                                        isImplementationLevelType, permission\n                                    )}>\n                                    Usuń\n                                </ButtonStyled>\n                            )}\n                        </>\n                    )\n                }\n            </DataTableCell>\n        </DataTableRow>\n    )\n};\n","import React, { useEffect, useState } from 'react';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { fetchApi } from '../../../fetch';\nimport { checkHasNext, checkHasPrev } from '../../../helpers';\nimport {\n    getSerializedObject,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    ButtonStyled,\n    GridCustom,\n    Loader,\n    Pagination,\n    TableCustom,\n    Text\n} from '../../common';\nimport { UserPermissionsListRow } from './UserPermissionsListRow';\n\n\nconst PAGINATED_BY = 20;\nconst TAB_INDEXES = {\n    direct: 0,\n    inherited: 1,\n};\nconst REVERTED_TAB_INDEXES = {\n    0: 'direct',\n    1: 'inherited',\n};\n\n\nfunction getRowKey(objectData, isImplementationLevelType) {\n    if (!isImplementationLevelType) {\n        return objectData.authorized.id\n    }\n    let key = objectData.authorized.id;\n    for (let implementationLevelName of [\n        'programme', 'priority', 'activity', 'region', 'institution'\n    ]) {\n        if (objectData[implementationLevelName]?.id) {\n            key += `_${objectData[implementationLevelName].id}`;\n        }\n    }\n    return key\n}\n\n\nexport const PermissionUsers = ({\n    activeUsersPermission, isImplementationLevelType, onClose, ...props\n}) => {\n    const [initializingOn, setInitializingOn] = useState(true)\n    const [pageNumber, setPageNumber] = useState(1)\n    const [fetchError, setFetchError] = useState(null)\n    const [data, setData] = useState(null)\n    const [selectedTab, setSelectedTab] = useState(TAB_INDEXES.direct);\n\n    function getUsers() {\n        let xhrFetch = null;\n\n        function callbackSuccess(data) {\n            xhrFetch = null;\n            const { total } = data.meta;\n            setData({\n                permissions: getSerializedObject(\n                    data, {mapToCamelCaseName: true}).permissions || [],\n                total: total,\n                hasPrev: checkHasPrev(pageNumber),\n                hasNext: checkHasNext(PAGINATED_BY, pageNumber, total),\n            });\n            setInitializingOn(false);\n        }\n\n        function callbackFetchError(message) {\n            xhrFetch = null;\n            setFetchError(message);\n            setInitializingOn(false);\n        }\n\n        function callbackError(data) {\n            callbackFetchError(\n                `Nie udało się pobrać listy użytkowników. ${translateErrorMessage(data.message)}`\n            );\n        }\n\n        function callbackIncorrectStatus(status) {\n            callbackFetchError(status === 403\n                ? `Nie masz uprawnień do przeglądania listy użytkowników dla tego ${isImplementationLevelType ? 'poziomu wdrożenia' : 'uprawnienia'}.`\n                : `Nie udało się pobrać listy użytkowników. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n            );\n        }\n\n        setInitializingOn(true);\n        setFetchError(null);\n        xhrFetch = fetchApi(\n            props.url, 'GET', {}, {\n                limit: PAGINATED_BY,\n                page: pageNumber,\n                ...(props.additionalFetchData || {}),\n                ...(isImplementationLevelType\n                    ? {listType: REVERTED_TAB_INDEXES[selectedTab]}\n                    : {}\n                ),\n            },\n            callbackSuccess, callbackError, callbackIncorrectStatus\n        );\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }\n    useEffect(getUsers, [pageNumber, selectedTab]);\n\n    function handleChangePage(next=true) {\n        setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n    }\n\n    function handleChangeTab(ev) {\n        setPageNumber(1);\n        setSelectedTab(ev.detail.index);\n    }\n\n    return (\n        <>\n            {isImplementationLevelType &&\n                activeUsersPermission.permission.priority &&\n                (\n                    <TabBar\n                        activeTabIndex={selectedTab}\n                        onActivate={handleChangeTab}>\n                        <Tab label=\"Przyznane bezpośrednio\" />\n                        <Tab label=\"Dziedziczone\" />\n                    </TabBar>\n                )\n            }\n            {initializingOn\n                ? <Loader />\n                : (fetchError\n                    ? <Text error>{fetchError}</Text>\n                    : (\n                        <>\n                            {data.total === 0\n                                ? <Text error>Lista użytkowników jest pusta</Text>\n                                : (\n                                    <TableCustom\n                                        tableHeaderList={['Użytkownik', \"Uprawnienia\", 'Działania']}>\n                                        {data.permissions.map(object => (\n                                            <UserPermissionsListRow\n                                                key={getRowKey(object, isImplementationLevelType)}\n                                                isImplementationLevelType={isImplementationLevelType}\n                                                mode=\"userData\"\n                                                permission={{\n                                                    ...object,\n                                                    ...(isImplementationLevelType\n                                                        ? {}\n                                                        : {type: activeUsersPermission.permission.type}\n                                                    )\n                                                }}\n                                                onSetEditedPermission={props.onSetEditedPermission}\n                                                onSetRemovedPermission={props.onSetRemovedPermission} />\n                                        ))}\n                                    </TableCustom>\n                                )\n                            }\n                            {data.total > PAGINATED_BY && (\n                                <Pagination\n                                    currentPage={pageNumber}\n                                    disabled={initializingOn}\n                                    hasNext={data.hasNext}\n                                    hasPrev={data.hasPrev}\n                                    handleChangePage={handleChangePage} />\n                            )}\n                        </>\n                    )\n                )\n            }\n            <GridCustom flexEnd>\n                <ButtonStyled primary onClick={onClose}>\n                    Zamknij\n                </ButtonStyled>\n            </GridCustom>\n        </>\n    )\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n    getSerializedErrorsFromServer,\n    translateErrorMessage\n} from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    CancelSaveButtonsRow,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    TextFieldCustom\n} from '../../common';\n\n\nconst ADD_PERMISSION_MODE_CONTEXTS = {\n    administration: ['contentAdministration', 'usersAdministration'],\n    implementationLevel: ['adProjectEnrollmentAdministration'],\n}\n\n\nexport const SearchUserForm = ({addPermissionMode, ...props}) => {\n    const [searchingOn, setSearchingOn] = useState(false);\n    const [fetchError, setFetchError] = useState(null);\n    const [errors, setErrors] = useState({});\n    const [email, setEmail] = useState('');\n    const [identifier, setIdentifier] = useState('');\n\n    function save() {\n        if (!searchingOn) { return }\n        let xhrFetch = null;\n\n        function callbackSuccess(data) {\n            xhrFetch = null;\n            props.onFindUser(data.user || null);\n        }\n\n        function callbackFetchError(message) {\n            xhrFetch = null;\n            setFetchError(`Nie udało się wyszukać użytkownika. ${message}`);\n            setSearchingOn(false);\n        }\n\n        function callbackError(data) {\n            callbackFetchError(translateErrorMessage(data.message));\n        }\n\n        function callbackIncorrectStatus(status) {\n            let message = '';\n            switch (status) {\n                case 403:\n                    message = `Nie masz uprawnień do nadawania uprawnień w obszarze ${addPermissionMode === 'administration'\n                        ? 'Administracji'\n                        : 'Poziomów wdrożenia'\n                    }.`;\n                    break;\n                case 404:\n                    message = 'Użytkownik o podanych danych nie istnieje.';\n                    break;\n                default:\n                    message = `Wystąpił nieoczekiwany błąd o kodzie ${status}.`;\n            }\n            callbackFetchError(message);\n        }\n\n        function callbackShowErrors(errors) {\n            xhrFetch = null;\n            setErrors(getSerializedErrorsFromServer(\n                errors, {doNotTranslateNames: true}\n            ));\n            setSearchingOn(false);\n        }\n\n        setSearchingOn(true);\n        setFetchError(null);\n        setErrors({});\n        let fetchData = {\n            contexts: ADD_PERMISSION_MODE_CONTEXTS[addPermissionMode],\n        };\n        if (email.length) {\n            fetchData['email'] = email;\n        }\n        if (identifier.length) {\n            fetchData['identifier'] = identifier;\n        }\n\n        xhrFetch = fetchApi(\n            API_URLS.usersFindUser.url, 'GET', {}, fetchData,\n            callbackSuccess, callbackError, callbackIncorrectStatus,\n            callbackShowErrors\n        );\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }\n    useEffect(save, [searchingOn]);\n\n    const isEmailInvalid = (errors.email || []).length > 0;\n    const isIdentifierInvalid = (errors.identifier || []).length > 0;\n\n    return (\n        <>\n            <Text>Informacje o użytkowniku</Text>\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel\n                    label=\"Adres e-mail\"\n                    labelFor=\"email_id\"\n                    tag=\"label\">\n                    <TextFieldCustom\n                        characterCount\n                        disabled={searchingOn}\n                        fullwidth\n                        id=\"email_id\"\n                        invalid={isEmailInvalid}\n                        maxLength={200}\n                        value={email}\n                        onChange={ev => setEmail(ev.target.value)}\n                        onClear={ev => setEmail('')} />\n                    {isEmailInvalid &&\n                        <ul id=\"email_error\">\n                            {errors.email.map((e, i) =>\n                                <Text error key={i} tag=\"li\">{e}</Text>\n                            )}\n                        </ul>\n                    }\n                </FieldWithLabel>\n                <FieldWithLabel\n                    label=\"Identyfikator\"\n                    labelFor=\"identifier_id\"\n                    tag=\"label\">\n                    <TextFieldCustom\n                        characterCount\n                        disabled={searchingOn}\n                        fullwidth\n                        id=\"identifier_id\"\n                        invalid={isIdentifierInvalid}\n                        maxLength={100}\n                        value={identifier}\n                        onChange={ev => setIdentifier(ev.target.value)}\n                        onClear={ev => setIdentifier('')} />\n                    {isIdentifierInvalid &&\n                        <ul id=\"identifier_error\">\n                            {errors.identifier.map((e, i) =>\n                                <Text error key={i} tag=\"li\">{e}</Text>\n                            )}\n                        </ul>\n                    }\n                </FieldWithLabel>\n            </GridCustom>\n            <CancelSaveButtonsRow\n                disabled={searchingOn}\n                disabledSave={!email.length && ! identifier.length}\n                saveText=\"Wybierz użytkownika\"\n                onCancel={props.onCancel}\n                onSave={() => setSearchingOn(true)} />\n            {fetchError !== null && <Text error className=\"dialog__global-error\">{fetchError}</Text>}\n            {(errors.allFields || []).length > 0 &&\n                <ul id=\"form_error\">\n                    {errors.allFields.map((e, i) =>\n                        <Text error key={i} tag=\"li\">{e}</Text>\n                    )}\n                </ul>\n            }\n        </>\n    )\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { URLS } from '../../../urls/frontend';\nimport {\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\n\n\nexport const UserHeader = ({ user, withButtons = true }) => {\n    return (\n        <>\n            <GridCustom fullwidth>\n                <Text tag=\"h2\" mainHeader>\n                    {user.imie || user.forename} {user.nazwisko || user.surname}\n                </Text>\n                {withButtons && (\n                    <GridCustom flexTop>\n                        <Link\n                            className=\"mdc-button mdc-button--unelevated btn--cancel\"\n                            to={URLS.users.path}>\n                            Wróć do listy użytkowników\n                        </Link>\n                        <a\n                            className=\"mdc-button mdc-button--unelevated btn--primary\"\n                            href={URLS.sativaUsersDetails.getUrl(user.identyfikator)}>\n                            Konto użytkownika\n                        </a>\n                    </GridCustom>\n                )}\n            </GridCustom>\n            <GridCustom fullwidth>\n                <FieldWithLabel label=\"Adres e-mail\">\n                    <Text>{user.email}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Identyfikator\">\n                    <Text>{user.identyfikator || user.identifier}</Text>\n                </FieldWithLabel>\n            </GridCustom>\n        </>\n    )\n};\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport {\n    checkSinglePermission,\n    getGroupChecked,\n    getGroupIndeterminate,\n    getMainGroupIndeterminate,\n    getPermissionErrors,\n    getPermissionsValuesDict,\n    sortKeysList,\n    translatePermissionName\n} from '../../../helpers_permissions';\nimport { usePutFormFetchApi } from '../../../hooks';\nimport {\n    CancelSaveButtonsRow,\n    FetchErrorWithOkayButton,\n    FieldWithLabel,\n    Text\n} from '../../common';\n\n\nexport const UserPermissionsFormCommonFields = ({\n    additionalFetchData,\n    checksSortDict,\n    defaultChecksDict,\n    disabled, disabledCancelButton, disabledSaveButton,\n    editionModeOn,\n    existingPermissionData,\n    existsErrorOn, existsErrorLabel,\n    isImplementationLevelType,\n    permissions,\n    saveUrl,\n    savingOn,\n    setAdditionalErrors,\n    setEditionModeOn,\n    setExistsErrorOn,\n    userId,\n    onCancel,\n    onSavePermissionSuccess,\n    onSetSavingOn\n}) => {\n    const [checks, setChecks] = useState({...defaultChecksDict});\n\n    additionalFetchData = additionalFetchData || {};\n\n    const { fetchError, errors, saveBtnText } = usePutFormFetchApi({\n        url: saveUrl,\n        fetchData: {permission: {\n            authorized: parseInt(userId),\n            ...checks,\n            ...additionalFetchData\n        }},\n        callbackSuccess: onSavePermissionSuccess,\n        callbackObjectExists: () => setExistsErrorOn(true),\n        loadingOn: savingOn,\n        setLoadingOn: onSetSavingOn,\n        method: editionModeOn ? 'PUT' : 'POST',\n        defaultSaveBtnText: \"Zapisz uprawnienia\",\n        doNotTranslateNames: true,\n        message403error: 'Nie masz uprawnień do zapisu wybranych uprawnień. ' +\n            'Jeśli uważasz, że to pomyłka, odśwież stronę i spróbuj jeszcze raz.',\n    });\n\n    const additionalFetchDataValuesAsString = Object.values(\n        additionalFetchData).join('');\n    function updateExistErrorInParent() {\n        setExistsErrorOn(false);\n    }\n    useEffect(updateExistErrorInParent, [additionalFetchDataValuesAsString]);\n\n    function updateAdditionalErrorsInParent() {\n        if (!setAdditionalErrors) { return }\n        setAdditionalErrors(errors);\n    }\n    useEffect(updateAdditionalErrorsInParent, [errors]);\n\n    function handleCheckAll(ev) {\n        const checked = ev.target.checked;\n        setChecks(prevValue => {\n            let dct = {};\n            for (let groupName of Object.keys(prevValue)) {\n                dct = {\n                    ...dct,\n                    ...getPermissionsValuesDict(\n                        defaultChecksDict, groupName, checked),\n                };\n            }\n            return dct\n        });\n    }\n\n    function handleCheckGroup(ev, groupName) {\n        const checked = ev.target.checked;\n        setChecks(prevChecks => ({\n            ...prevChecks,\n            ...getPermissionsValuesDict(defaultChecksDict, groupName, checked),\n        }));\n    }\n\n    function handleCheckSinglePermission(checked, parent, child) {\n        setChecks(prevChecks => ({\n            ...prevChecks,\n            ...checkSinglePermission(prevChecks, parent, child, checked),\n        }));\n    }\n\n    function handleLoadExistedPermissionData() {\n        setChecks(existingPermissionData !== null\n            ? existingPermissionData : defaultChecksDict\n        );\n        setExistsErrorOn(false);\n        setEditionModeOn(true);\n    }\n\n    let groupCheckedValues = {};\n    for (let groupName of Object.keys(checks)) {\n        groupCheckedValues[groupName] = getGroupChecked(\n            checks, groupName);\n    }\n\n    const permissionErrors = getPermissionErrors(errors);\n\n    // These values say if checkboxes have to be disabled\n    let functionalityDisabled = false;\n    let permissionsDisabled = false;\n    if (permissions) {\n        functionalityDisabled = !permissions.functionality;\n        permissionsDisabled = !permissions.permissions;\n    }\n\n    function checkDisabledGroup(groupName) {\n        if (groupName === 'permissionsAdministration') {\n            return permissionsDisabled\n        }\n        return functionalityDisabled\n    }\n\n    return (\n        <>\n            {existsErrorOn && !editionModeOn && (\n                <FetchErrorWithOkayButton\n                    buttonLabel=\"wczytaj i edytuj zapisane uprawnienia\"\n                    infoMsg\n                    message={`Istnieje pakiet uprawnień dla wybranych powyżej danych. Zmień ${existsErrorLabel || 'wybór'} lub`}\n                    onClickOkay={handleLoadExistedPermissionData} />\n            )}\n            <FieldWithLabel label=\"Uprawnienia\" tag=\"label\">\n                {permissionErrors.length > 0 && permissionErrors.map(\n                    (e, i) => <Text error key={i}>{e}</Text>\n                )}\n                <div className=\"permissions__level-main\">\n                    <Checkbox\n                        checked={!Object.values(groupCheckedValues).includes(false)}\n                        disabled={\n                            functionalityDisabled || permissionsDisabled ||\n                            disabled || existsErrorOn\n                        }\n                        indeterminate={getMainGroupIndeterminate(checks)}\n                        label={translatePermissionName('all')}\n                        onChange={handleCheckAll} />\n                </div>\n\n                {sortKeysList(Object.entries(checks), checksSortDict.groups).map(\n                    ([groupName_, groupPermissions]) => {\n                        const groupDisabled = checkDisabledGroup(groupName_);\n                        return (\n                            <Fragment key={groupName_}>\n                                <div className=\"permissions__level-1\">\n                                    <Checkbox\n                                        checked={groupCheckedValues[groupName_] || false}\n                                        disabled={\n                                            groupDisabled || disabled ||\n                                            existsErrorOn\n                                        }\n                                        indeterminate={getGroupIndeterminate(\n                                            checks, groupName_)}\n                                        label={`${translatePermissionName(groupName_)} - pełne uprawnienia`}\n                                        onChange={ev => handleCheckGroup(ev, groupName_)} />\n                                </div>\n                                {sortKeysList(\n                                    Object.entries(groupPermissions),\n                                    checksSortDict[groupName_]\n                                ).map(\n                                    ([permissionName_, permissionValue]) => (\n                                    <Fragment key={permissionName_}>\n                                        <div className=\"permissions__level-2\">\n                                            <Checkbox\n                                                checked={checks[groupName_][permissionName_]}\n                                                disabled={\n                                                    groupDisabled || disabled ||\n                                                    existsErrorOn\n                                                }\n                                                label={translatePermissionName(\n                                                    isImplementationLevelType && permissionName_ === 'functionalityManagement'\n                                                    ? 'functionalityManagementImplementationLevel'\n                                                    : permissionName_\n                                                )}\n                                                onChange={ev => handleCheckSinglePermission(\n                                                    ev.target.checked, groupName_, permissionName_\n                                                )} />\n                                        </div>\n                                    </Fragment>\n                                ))}\n                            </Fragment>\n                        )\n                    }\n                )}\n            </FieldWithLabel>\n            <CancelSaveButtonsRow\n                disabled={disabledCancelButton}\n                disabledSave={disabledSaveButton}\n                saveText={saveBtnText}\n                onCancel={onCancel}\n                onSave={() => onSetSavingOn(true)} />\n            {fetchError !== null && <Text error>{fetchError}</Text>}\n            {existsErrorOn && editionModeOn && (\n                <FetchErrorWithOkayButton\n                    buttonLabel=\"OK\"\n                    message=\"Próbujesz edytować nieistniejący zestaw uprawnień. Odśwież stronę z listą uprawnień i spróbuj ponownie.\"\n                    onClickOkay={onCancel} />\n            )}\n        </>\n    )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { useCheckPermissionExists } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FieldWithLabel, Select, Text } from '../../common';\nimport {\n    UserPermissionsFormCommonFields\n} from './UserPermissionsFormCommonFields';\n\n\nconst SCOPES = {\n    users: {\n        id: 0,\n        label: 'Zarządzanie użytkownikami',\n        permissionType: 'usersAdministration',\n    },\n    contents: {\n        id: 1,\n        label: 'Zarządzanie treściami',\n        permissionType: 'contentAdministration',\n    },\n    dictionaries: {\n        id: 2,\n        label: 'Zarządzanie słownikami poziomów wdrożenia',\n        permissionType: 'implementationLevelsDictionaryAdministration',\n    },\n};\nconst SELECT_CHOICES = Object.values(SCOPES)\n    .map(scope => [scope.id, scope.label, scope.permissionType])\n    .sort((s1, s2) => s1.id < s2.id);\nconst DEFAULT_CHOICE = SELECT_CHOICES[0]\nconst USERS_ADMINISTRATION_DEFAULT_CHECKS_DICT = {\n    usersAdministration: {\n        previewListUsers: false,\n        blockingUsers: false,\n    },\n    permissionsAdministration: {\n        previewListUsersAuthorized: false,\n        functionalityManagement: false,\n        permissionsManagement: false,\n    },\n};\nconst CONTENT_ADMINISTRATION_DEFAULT_CHECKS_DICT = {\n    contentAdministration: {\n        generalContentCookiesRegulation: false,\n        statements: false,\n        help: false,\n    },\n    permissionsAdministration: {\n        previewListUsersAuthorized: false,\n        functionalityManagement: false,\n        permissionsManagement: false,\n    },\n};\nconst IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_DEFAULT_CHECKS_DICT = {\n    implementationLevelsDictionaryAdministration: {\n        previewData: false,\n        editData: false,\n    },\n    permissionsAdministration: {\n        previewListUsersAuthorized: false,\n        functionalityManagement: false,\n        permissionsManagement: false,\n    },\n};\nconst USERS_ADMINISTRATION_CHECKS_SORT_DICT = {\n    groups: ['usersAdministration', 'permissionsAdministration'],\n    usersAdministration: ['previewListUsers', 'blockingUsers'],\n    permissionsAdministration: [\n        'previewListUsersAuthorized', 'functionalityManagement',\n        'permissionsManagement'\n    ],\n};\nconst CONTENT_ADMINISTRATION_CHECKS_SORT_DICT = {\n    groups: ['contentAdministration', 'permissionsAdministration'],\n    contentAdministration: [\n        'generalContentCookiesRegulation', 'statements', 'help'],\n    permissionsAdministration: [\n        'previewListUsersAuthorized', 'functionalityManagement',\n        'permissionsManagement'\n    ],\n};\nconst IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_CHECKS_SORT_DICT = {\n    groups: [\n        'implementationLevelsDictionaryAdministration',\n        'permissionsAdministration'\n    ],\n    implementationLevelsDictionaryAdministration: ['previewData', 'editData'],\n    permissionsAdministration: [\n        'previewListUsersAuthorized', 'functionalityManagement',\n        'permissionsManagement'\n    ],\n};\nconst EXISTS_ERROR_LABEL = 'Nazwę obszaru administracji';\n\n\nexport const UserPermissionsAdministrationForm = ({\n    initialData = null, userId, onCancel, onSavePermissionSuccess\n}) => {\n    const [editionModeOn, setEditionModeOn] = useState(initialData !== null);\n    const [savingOn, setSavingOn] = useState(false);\n    const [selectedScope, setSelectedScope] = useState(null);\n\n    function setInitialSelectedScope() {\n        // set correct scope\n        if (editionModeOn) {\n            for (let [id_, label_, permissionType_] of SELECT_CHOICES) {\n                if (permissionType_ === initialData.type) {\n                    setSelectedScope({value:id_, label: label_});\n                    return\n                }\n            }\n        }\n        setSelectedScope({\n            value: DEFAULT_CHOICE[0], label: DEFAULT_CHOICE[1]});\n    }\n    useEffect(setInitialSelectedScope, []);\n\n    // this one is set if request for checkboxes values returns 403\n    const [permissions403errorOn, setPermissions403errorOn] = useState(false);\n    const [existsErrorOn, setExistsErrorOn] = useState(false);\n    const [\n        checkingExistedPermissionOn, setCheckingExistedPermissionOn\n    ]= useState(false);\n\n    function callbackSelectedScopeChanging() {\n        if (selectedScope === null || editionModeOn) { return }\n        setPermissions403errorOn(false);\n        setCheckingExistedPermissionOn(true);\n    }\n    useEffect(callbackSelectedScopeChanging, [selectedScope]);\n\n    const { existingPermissionData } = useCheckPermissionExists(\n        checkingExistedPermissionOn, setCheckingExistedPermissionOn,\n        selectedScope === null ? '' : (SCOPES.users.id === selectedScope.value\n            ? API_URLS.usersPermissionsUsersDetails.path\n            : SCOPES.contents.id === selectedScope.value\n                ? API_URLS.usersPermissionsContentDetails.path\n                : API_URLS.usersPermissionsDictionariesDetails.path\n        ),\n        {}, setExistsErrorOn, setPermissions403errorOn, userId\n    );\n\n    const { permissions } = useContext(UserContext);\n\n    if (selectedScope === null) { return null }\n\n    const disabledFields = savingOn || checkingExistedPermissionOn;\n    const disabledSaveButton = disabledFields || permissions403errorOn;\n    return (\n        <>\n            <FieldWithLabel label=\"Nazwa obszaru administracji\" tag=\"label\">\n                <Select\n                    aria-label=\"Nazwa obszaru administracji\"\n                    className=\"select-custom\"\n                    isDisabled={editionModeOn || savingOn}\n                    options={SELECT_CHOICES.map(\n                        choice => ({value: choice[0], label: choice[1]}))}\n                    screenReaderStatus={() => {return ''}}\n                    styles={customSelectStyles}\n                    value={selectedScope}\n                    onChange={selectedOption => setSelectedScope(selectedOption)} />\n            </FieldWithLabel>\n            {permissions403errorOn && (\n                <Text error role=\"alert\">\n                    Nie masz uprawnień do nadawania uprawnień dla wybranego obszaru administracji. Zmień obszar administracji.\n                </Text>\n            )}\n            {SCOPES.users.id === selectedScope.value && (\n                <UserPermissionsFormCommonFields\n                    checksSortDict={USERS_ADMINISTRATION_CHECKS_SORT_DICT}\n                    defaultChecksDict={editionModeOn\n                        ? (existingPermissionData !== null\n                            ? existingPermissionData\n                            : initialData.permissions\n                        )\n                        : USERS_ADMINISTRATION_DEFAULT_CHECKS_DICT\n                    }\n                    disabled={disabledFields}\n                    disabledCancelButton={disabledFields}\n                    disabledSaveButton={disabledSaveButton}\n                    editionModeOn={editionModeOn}\n                    existingPermissionData={existingPermissionData}\n                    existsErrorOn={existsErrorOn}\n                    existsErrorLabel={EXISTS_ERROR_LABEL}\n                    permissions={permissions.usersPermissionsManagement}\n                    saveUrl={API_URLS.usersPermissionsUsers.path}\n                    savingOn={savingOn}\n                    setEditionModeOn={setEditionModeOn}\n                    setExistsErrorOn={setExistsErrorOn}\n                    userId={userId}\n                    onCancel={onCancel}\n                    onSavePermissionSuccess={onSavePermissionSuccess}\n                    onSetSavingOn={setSavingOn} />\n            )}\n            {SCOPES.contents.id === selectedScope.value && (\n                <UserPermissionsFormCommonFields\n                    checksSortDict={CONTENT_ADMINISTRATION_CHECKS_SORT_DICT}\n                    defaultChecksDict={editionModeOn\n                        ? (existingPermissionData !== null\n                            ? existingPermissionData\n                            : initialData.permissions\n                        )\n                        : CONTENT_ADMINISTRATION_DEFAULT_CHECKS_DICT\n                    }\n                    disabled={disabledFields}\n                    disabledCancelButton={disabledFields}\n                    disabledSaveButton={disabledSaveButton}\n                    editionModeOn={editionModeOn}\n                    existingPermissionData={existingPermissionData}\n                    existsErrorOn={existsErrorOn}\n                    existsErrorLabel={EXISTS_ERROR_LABEL}\n                    permissions={permissions.contentPermissionsManagement}\n                    saveUrl={API_URLS.usersPermissionsContent.path}\n                    savingOn={savingOn}\n                    setEditionModeOn={setEditionModeOn}\n                    setExistsErrorOn={setExistsErrorOn}\n                    userId={userId}\n                    onCancel={onCancel}\n                    onSavePermissionSuccess={onSavePermissionSuccess}\n                    onSetSavingOn={setSavingOn} />\n            )}\n            {SCOPES.dictionaries.id === selectedScope.value && (\n                <UserPermissionsFormCommonFields\n                    checksSortDict={IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_CHECKS_SORT_DICT}\n                    defaultChecksDict={editionModeOn\n                        ? (existingPermissionData !== null\n                             ? existingPermissionData\n                             : initialData.permissions\n                        )\n                        : IMPLEMENTATION_LEVELS_DICTIONARY_ADMINISTRATION_DEFAULT_CHECKS_DICT\n                    }\n                    disabled={disabledFields}\n                    disabledCancelButton={disabledFields}\n                    disabledSaveButton={disabledSaveButton}\n                    existingPermissionData={existingPermissionData}\n                    editionModeOn={editionModeOn}\n                    existsErrorOn={existsErrorOn}\n                    existsErrorLabel={EXISTS_ERROR_LABEL}\n                    permissions={permissions.implementationLevelsDictionaryPermissionsManagement}\n                    saveUrl={API_URLS.usersPermissionsDictionaries.path}\n                    savingOn={savingOn}\n                    setEditionModeOn={setEditionModeOn}\n                    setExistsErrorOn={setExistsErrorOn}\n                    userId={userId}\n                    onCancel={onCancel}\n                    onSavePermissionSuccess={onSavePermissionSuccess}\n                    onSetSavingOn={setSavingOn} />\n            )}\n        </>\n    )\n};\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { useCheckPermissionExists } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport { FieldWithLabel, Text } from '../../common';\nimport { ProjectNumberSelectsWithPerspectives } from '../common';\nimport {\n    UserPermissionsFormCommonFields\n} from './UserPermissionsFormCommonFields';\nimport {\n    hasPerspectiveInstitutions,\n    hasPerspectiveRegions\n} from \"../../../helpers\";\n\n\nconst DEFAULT_CHECKS_DICT = {\n    projectsEnrollmentsAdministration: {\n      searchNPreviewData: false,\n      editData: false,\n    },\n    advertisementAdministration: {\n      searchNPreviewData: false,\n      blocking: false,\n      editData: false,\n    },\n    permissionsAdministration: {\n        previewListUsersAuthorized: false,\n        functionalityManagement: false,\n        permissionsManagement: false,\n    },\n};\n\nconst CHECKS_SORT_DICT = {\n    groups: [\n        'projectsEnrollmentsAdministration',\n        'advertisementAdministration',\n        'permissionsAdministration'\n    ],\n    projectsEnrollmentsAdministration: ['searchNPreviewData', 'editData'],\n    advertisementAdministration: [\n        'searchNPreviewData', 'blocking', 'editData'],\n    permissionsAdministration: [\n        'previewListUsersAuthorized', 'functionalityManagement',\n        'permissionsManagement'\n    ],\n};\n\n\nfunction serializeImplementationLevel(dataDict) {\n    if (!dataDict) { return null }  // it can be even 'undefined'\n\n    // change id into value according to needed key for implementation level\n    let dct = {...dataDict};\n    dct['value'] = dct.id;\n    delete dct['id'];\n    return dct\n};\n\n\nexport const UserPermissionsImplementationLevelFields = ({\n    initialData, perspectives, userId, onCancel, onSavePermissionSuccess\n}) => {\n    const [editionModeOn, setEditionModeOn] = useState(initialData !== null);\n    const [savingOn, setSavingOn] = useState(false);\n    const [implementationLevels, setImplementationLevels] = useState(\n        {\n            perspective: null, programme: null, priority: null, activity: null,\n            institution: null, region: null\n        });\n    const [\n        implementationLevelsErrors, setImplementationLevelsErrors\n    ] = useState({});\n\n    useEffect(() => {\n        if (!editionModeOn || !initialData) { return }\n        // use initial data if edition mode\n        setImplementationLevels({\n            perspective: serializeImplementationLevel(initialData.perspective),\n            programme: serializeImplementationLevel(initialData.programme),\n            priority: serializeImplementationLevel(initialData.priority),\n            activity: serializeImplementationLevel(initialData.activity),\n            institution: serializeImplementationLevel(initialData.institution),\n            region: serializeImplementationLevel(initialData.region),\n        });\n    }, [editionModeOn, initialData]);\n\n    /*\n        this one is set if request for permissions for checkboxes  or just\n        request for checkboxes values returns 403\n    */\n    const [permissions403errorOn, setPermissions403errorOn] = useState(false);\n    // these say if user has permissions for checkboxes groups\n    const [\n        permissionsForCheckboxes, setPermissionsForCheckboxes\n    ] = useState({functionality: true, permissions: true});\n    const [\n        checkingCheckboxesPermissionOn, setCheckingCheckboxesPermissionOn\n    ] = useState(false);\n\n    const [existsErrorOn, setExistsErrorOn] = useState(false);\n    const [\n        checkingExistedPermissionOn, setCheckingExistedPermissionOn\n    ] = useState(false);\n\n    useEffect(() => {\n        setPermissions403errorOn(false);\n        if (implementationLevels.programme === null) { return }\n        setPermissionsForCheckboxes(\n            {functionality: false, permissions: false});\n        setCheckingCheckboxesPermissionOn(true);\n    }, [implementationLevels]);\n\n    const fetchData = useMemo(\n        () => {\n            let levelNames =\n                ['perspective', 'programme', 'priority', 'activity'];\n            if (hasPerspectiveRegions(implementationLevels.perspective)) {\n                levelNames.push('region');\n            }\n            if (hasPerspectiveInstitutions(implementationLevels.perspective)) {\n                levelNames.push('institution');\n            }\n            const dataDict = {};\n            for (let levelName of levelNames) {\n                dataDict[levelName] = implementationLevels[levelName]\n                    ? implementationLevels[levelName].value : null\n            }\n            return dataDict\n        }, [implementationLevels]);\n\n    const { user } = useContext(UserContext);\n    const { id: currentUserId } = user;\n\n    useEffect(() => {\n        if (!checkingCheckboxesPermissionOn) { return }\n        // set checkboxes permissions\n        let xhrFetch = null;\n\n        function callbackPermissionExists(data) {\n            xhrFetch = null;\n            const permissionsAdministration = (data.permission || {})\n                .permissionsAdministration || {};\n            const grantedPermissions = {\n                functionality:\n                    permissionsAdministration.functionalityManagement || false,\n                permissions:\n                    permissionsAdministration.permissionsManagement || false,\n            };\n            setPermissionsForCheckboxes(grantedPermissions);\n            setCheckingCheckboxesPermissionOn(false);\n            if (!editionModeOn && (\n                grantedPermissions.functionality ||\n                grantedPermissions.permissions\n            )) {\n                setCheckingExistedPermissionOn(true);\n            }\n        }\n\n        function callbackPermissionDoesNotExists() {\n            xhrFetch = null;\n            setCheckingCheckboxesPermissionOn(false);\n        }\n\n        function callbackPermissionIncorrectStatus(statusCode) {\n            xhrFetch = null;\n            if (statusCode === 403) {\n                setPermissions403errorOn(true);\n            }\n            callbackPermissionDoesNotExists();\n        }\n\n        xhrFetch = fetchApi(\n            API_URLS.usersPermissionsAdvertisementsProjectsEnrollmentsDetails.path,\n            'GET', {},\n            {\n                authorized: currentUserId,\n                mode: 'inherited',\n                ...fetchData\n            },\n            callbackPermissionExists, callbackPermissionDoesNotExists,\n            callbackPermissionIncorrectStatus\n        );\n        return () => {\n            if (xhrFetch !== null) {\n                xhrFetch.abort();\n            }\n        }\n    }, [checkingCheckboxesPermissionOn]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    const { existingPermissionData } = useCheckPermissionExists(\n        checkingExistedPermissionOn, setCheckingExistedPermissionOn,\n        API_URLS.usersPermissionsAdvertisementsProjectsEnrollmentsDetails.path,\n        fetchData, setExistsErrorOn, setPermissions403errorOn, userId\n    );\n\n    function handleChangeProjectNumberSelect(data) {\n        setImplementationLevels(prevValue => ({...prevValue, ...data}));\n        if (data.programme === null) {\n            setExistsErrorOn(false);\n        }\n    }\n\n    const disabledFields = checkingExistedPermissionOn ||\n                           checkingCheckboxesPermissionOn ||\n                           savingOn;\n    const permission403exists = permissions403errorOn || (\n        !checkingCheckboxesPermissionOn &&\n        !permissionsForCheckboxes.functionality &&\n        !permissionsForCheckboxes.permissions\n    )\n\n    const implementationLevelsPermissionErrors =\n        implementationLevelsErrors.permission || {};\n\n    return (\n        <>\n            <FieldWithLabel label=\"Poziom wdrożenia\" tag=\"label\">\n                {(!editionModeOn || implementationLevels.perspective !== null) && (\n                    <ProjectNumberSelectsWithPerspectives\n                        activity={implementationLevels.activity}\n                        activityErrors={implementationLevelsPermissionErrors.activity || []}\n                        disabled={disabledFields || editionModeOn}\n                        institution={implementationLevels.institution}\n                        institutionErrors={implementationLevelsPermissionErrors.institution || []}\n                        isClearable={true}\n                        mode=\"permissions\"\n                        perspective={implementationLevels.perspective}\n                        perspectiveErrors={implementationLevelsPermissionErrors.perspective || []}\n                        perspectives={perspectives}\n                        perspectivesAsSelect={true}\n                        priority={implementationLevels.priority}\n                        priorityErrors={implementationLevelsPermissionErrors.priority || []}\n                        programme={implementationLevels.programme}\n                        programmeErrors={implementationLevelsPermissionErrors.programme || []}\n                        region={implementationLevels.region}\n                        regionErrors={implementationLevelsPermissionErrors.region || []}\n                        withInstitutionNumber={false}\n                        onChangeActivity={handleChangeProjectNumberSelect}\n                        onChangeInstitution={handleChangeProjectNumberSelect}\n                        onChangePerspective={handleChangeProjectNumberSelect}\n                        onChangePriority={handleChangeProjectNumberSelect}\n                        onChangeProgramme={handleChangeProjectNumberSelect}\n                        onChangeRegion={handleChangeProjectNumberSelect}\n                    />\n                )}\n            </FieldWithLabel>\n            {checkingCheckboxesPermissionOn && (\n                <Text info role=\"alert\">\n                    Trwa sprawdzanie uprawnień dla wybranego poziomu wdrożenia.\n                </Text>\n            )}\n            {permission403exists && (\n                <Text error role=\"alert\">\n                    Nie masz uprawnień do nadawania uprawnień dla wybranego poziomu wdrożenia.\n                    {implementationLevels.programme !== null && ' Zmień poziom wdrożenia.'}\n                </Text>\n            )}\n            <UserPermissionsFormCommonFields\n                additionalFetchData={fetchData}\n                checksSortDict={CHECKS_SORT_DICT}\n                defaultChecksDict={editionModeOn\n                    ? (existingPermissionData !== null\n                        ? existingPermissionData\n                        : initialData.permissions\n                    )\n                    : DEFAULT_CHECKS_DICT\n                }\n                disabled={disabledFields}\n                disabledCancelButton={savingOn}\n                disabledSaveButton={disabledFields || permission403exists}\n                editionModeOn={editionModeOn}\n                existingPermissionData={existingPermissionData}\n                existsErrorOn={existsErrorOn}\n                existsErrorLabel=\"Poziomy wdrożenia\"\n                isImplementationLevelType={true}\n                permissions={permissionsForCheckboxes}\n                saveUrl={API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path}\n                savingOn={savingOn}\n                setAdditionalErrors={setImplementationLevelsErrors}\n                setEditionModeOn={setEditionModeOn}\n                setExistsErrorOn={setExistsErrorOn}\n                userId={userId}\n                onCancel={onCancel}\n                onSavePermissionSuccess={onSavePermissionSuccess}\n                onSetSavingOn={setSavingOn} />\n        </>\n    )\n};\n","import React from 'react';\n\nimport { serializePerspectiveForSelect } from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, Loader, Text } from '../../common';\nimport {\n    UserPermissionsImplementationLevelFields\n} from './UserPermissionsImplementationLevelFields';\n\n\nexport const UserPermissionsImplementationLevelForm = ({\n    initialData = null, userId, onCancel, onSavePermissionSuccess\n}) => {\n    const {data: dataPerspectives, loadingOn, fetchError} = useOneTimeFetchApi({\n        url: API_URLS.perspectives.path,\n        fetchData: {mode: 'permissions'},\n        serializeFetchDataFunction: serializePerspectiveForSelect,\n    });\n\n    return loadingOn ? <Loader /> : (fetchError\n        ? (\n            <>\n                <Text error>{fetchError}</Text>\n                <ButtonStyled cancel onClick={onCancel}>OK</ButtonStyled>\n            </>\n        )\n        : (\n            <UserPermissionsImplementationLevelFields\n                initialData={initialData}\n                perspectives={dataPerspectives.perspectives}\n                userId={userId}\n                onCancel={onCancel}\n                onSavePermissionSuccess={onSavePermissionSuccess} />\n        )\n    )\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n    getImplementationLevelLabels,\n    PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT\n} from '../../../helpers_permissions';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, DialogCustom, GridCustom } from '../../common';\n\n\nexport const UserPermissionsRemovingPermissionDialog = ({\n    permission, questionSuffix = '', userId,\n    onCloseRemovedPermissionDialog, onRemovePermissionSuccess\n}) => {\n\n    const [removingPermissionOn, setRemovingPermissionOn] = useState(false);\n    const [fetchError, setFetchError] = useState('');\n\n    function removePermission() {\n        if (!removingPermissionOn) {\n            return\n        }\n\n        let xhrFetch = null;\n\n        function callbackSuccess(data) {\n            xhrFetch = null;\n            // true means removingWithSuccess\n            onRemovePermissionSuccess(data, true);\n        }\n\n        function setError(message) {\n            xhrFetch = null;\n            setRemovingPermissionOn(false);\n            setFetchError(message);\n        }\n\n        function callbackError(data) {\n            setError(`Nie udało się usunąć uprawnienia. ${data.message}`);\n        }\n\n        function callbackIncorrectStatus(status) {\n            setError(status === 403\n                ? 'Nie masz uprawnień do usunięcia tego uprawnienia.'\n                : `Nie udało się usunąć uprawnienia. Wystąpił błąd o kodzie ${status}.`\n            );\n        }\n\n        let fetchDataDict = {};\n        let url = '';\n        if (permission.isImplementationLevelType) {\n            const {permission: permission_} = permission;\n            for (let name of [\n                'perspective', 'programme', 'priority', 'activity', 'region',\n                'institution'\n            ]) {\n                fetchDataDict[name] =\n                    permission_[name] ? permission_[name].id : null;\n            }\n            url = API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path;\n        } else {\n            switch (permission.permission.type) {\n                case 'usersAdministration':\n                    url = API_URLS.usersPermissionsUsers.path;\n                    break\n                case 'contentAdministration':\n                    url = API_URLS.usersPermissionsContent.path;\n                    break\n                case 'implementationLevelsDictionaryAdministration':\n                    url = API_URLS.usersPermissionsDictionaries.path;\n                    break\n                default:\n                    url = '';\n            }\n        }\n\n        xhrFetch = fetchApi(\n            url, 'DELETE', {},\n            {authorized: parseInt(userId) , ...fetchDataDict},\n            callbackSuccess, callbackError,\n            callbackIncorrectStatus\n        );\n\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }\n    useEffect(removePermission, [removingPermissionOn]);\n\n    let permissionDescription = '';\n    if (permission !== null) {\n        if (permission.isImplementationLevelType) {\n            const implementationLevelLabels = getImplementationLevelLabels(\n                permission.permission);\n            permissionDescription = `${implementationLevelLabels.code} ${implementationLevelLabels.name}`;\n        } else {\n            permissionDescription =\n                PERMISSION_CONTENT_DICTIONARIES_USERS_TRANSLATION_DICT[\n                    permission.permission.type\n                ];\n        }\n    }\n    const isError = fetchError.length > 0;\n    return (\n        <DialogCustom\n            className=\"dialog\"\n            dialogTitle={isError\n                ? ''\n                : `Czy na pewno chcesz usunąć uprawnienie \"${permissionDescription}\"${questionSuffix}?`\n            }\n            dialogTitleError={isError ? fetchError : ''}\n            onClose={onCloseRemovedPermissionDialog}>\n            {isError\n                ? (\n                   <GridCustom centerVertical flexEnd>\n                        <ButtonStyled\n                            primary\n                            onClick={onCloseRemovedPermissionDialog}>\n                            OK\n                        </ButtonStyled>\n                    </GridCustom>\n                )\n                : (\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled\n                            cancel\n                            disabled={removingPermissionOn}\n                            onClick={onCloseRemovedPermissionDialog}>\n                            Anuluj\n                        </ButtonStyled>\n                        <ButtonStyled\n                            disabled={removingPermissionOn}\n                            remove\n                            onClick={() => setRemovingPermissionOn(true)}>\n                            {removingPermissionOn\n                                ? 'Trwa usuwanie uprawnienia'\n                                : 'Usuń uprawnienie'\n                            }\n                        </ButtonStyled>\n                    </GridCustom>\n                )\n            }\n        </DialogCustom>\n    )\n};\n","import React, { useContext, useMemo, useState } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getPermissionHistoryUsersTitle } from '../../../helpers_permissions';\nimport { API_URLS } from '../../../urls/api';\nimport { DialogCustom, Text } from '../../common';\nimport { PermissionList } from './PermissionList';\nimport { PermissionsHistory } from './PermissionsHistory';\nimport { PermissionListRow } from './PermissionListRow';\nimport { PermissionUsers } from './PermissionUsers';\nimport { SearchUserForm } from './SearchUserForm';\nimport { UserHeader } from './UserHeader';\nimport {\n    UserPermissionsAdministrationForm\n} from './UserPermissionsAdministrationForm';\nimport {\n    UserPermissionsImplementationLevelForm\n} from './UserPermissionsImplementationLevelForm';\nimport {\n    UserPermissionsRemovingPermissionDialog\n} from './UserPermissionsRemovingPermissionDialog';\n\n\nconst ADMINISTRATION_INITIAL_REQUEST_ID = 1;\nconst IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID = 1;\nconst TABLE_HEADER_LIST = ['Nazwa', 'Zarządzanie uprawnieniami'];\n\n\nexport const Permissions = (props) => {\n    const { user } = useContext(UserContext);\n    const { id: currentUserId } = user;\n\n    // possible choices of addPermissionMode: administration, implementationLevel\n    const [addPermissionMode, setAddPermissionMode] = useState(null);\n    const [userForPermissionAdding, setUserForPermissionAdding] = useState(null);\n\n    const [\n        administrationPermissionsRequestId,\n        setAdministrationPermissionsRequestId\n    ] = useState(ADMINISTRATION_INITIAL_REQUEST_ID);\n    const [\n        implementationLevelPermissionsRequestId,\n        setImplementationLevelPermissionsRequestId\n    ] = useState(IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID);\n\n    /*\n        activeHistoryPermission/activeUsersPermission structure:\n        {\n            isImplementationLevelType: <true || false>,\n            permission: {\n                type: <contentAdministration || usersAdministration>,   // only if not isImplementationLevelType\n                perspective: <dict>,   // only if isImplementationLevelType; should be set to distinguish regions and institutions\n                programme: <dict>,   // only if isImplementationLevelType; at least should be set\n                priority: <dict>,   // only if isImplementationLevelType; it's possible to not set at all\n                activity: <dict>,   // only if isImplementationLevelType; it's possible to not set at all\n                institution: <dict>,   // only if isImplementationLevelType; it's possible to not set at all\n                region: <dict>,   // only if isImplementationLevelType; it's possible to not set at all\n            }\n        }\n    */\n    const [\n        activeHistoryPermission,\n        setActiveHistoryPermission\n    ] = useState(null);\n    const [\n        activeUsersPermission,\n        setActiveUsersPermission\n    ] = useState(null);\n    const [\n        lastActiveUsersPermission,\n        setLastActiveUsersPermission\n    ] = useState(null);\n\n    function handleCloseHistory() {\n        setActiveHistoryPermission(null);\n    }\n\n    function handleCloseUsers() {\n        setActiveUsersPermission(null);\n    }\n\n    function handleOpenHistory(permission) {\n        if (activeUsersPermission !== null) {\n            handleCloseUsers();\n        }\n        setActiveHistoryPermission(permission);\n    }\n\n    function handleOpenUsers(permission) {\n        if (activeHistoryPermission !== null) {\n            handleCloseHistory();\n        }\n        setActiveUsersPermission(permission);\n        setLastActiveUsersPermission(permission);\n    }\n\n    const [editedPermission, setEditedPermission] = useState(null);\n\n    function handleSetEditedPermission(isImplementationLevelType, permission) {\n        handleCloseUsers();\n        setEditedPermission({isImplementationLevelType, permission});\n    }\n\n    function handleCloseEditPermission(data) {\n        // close dialog\n        setEditedPermission(null);\n        // turn user list back\n        setActiveUsersPermission(lastActiveUsersPermission);\n    }\n\n    function handleCloseEditPermissionSuccess(data) {\n        // check if current user permission was changed;\n        // if yes - refresh permissions list\n        if ((editedPermission.permission.authorized || {}).id === currentUserId) {\n            if (editedPermission.isImplementationLevelType) {\n                setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n            } else {\n                setAdministrationPermissionsRequestId(prevId => prevId + 1);\n            }\n        }\n        handleCloseEditPermission(data);\n    }\n\n    const [removedPermission, setRemovedPermission] = useState(null);\n\n    function handleSetRemovedPermission(isImplementationLevelType, permission) {\n        handleCloseUsers();\n        setRemovedPermission({isImplementationLevelType, permission});\n    }\n\n    function handleCloseRemovePermission(data) {\n        // close dialog\n        setRemovedPermission(null);\n        // turn user list back\n        setActiveUsersPermission(lastActiveUsersPermission);\n    }\n\n    function handleCloseRemovePermissionSuccess(data) {\n        // check if current user permission was removed;\n        // if yes - refresh permissions list\n        if ((removedPermission.permission.authorized || {}).id === currentUserId) {\n            if (removedPermission.isImplementationLevelType) {\n                setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n            } else {\n                setAdministrationPermissionsRequestId(prevId => prevId + 1);\n            }\n        }\n        handleCloseRemovePermission(data);\n    }\n\n    const [url, dialogAdditionalFetchData] = useMemo(\n        () => {\n            let url_ = '';\n            let dialogAdditionalFetchData_ = {};\n            if (activeHistoryPermission !== null || activeUsersPermission !== null) {\n                const isHistoryPermission = activeHistoryPermission !== null;\n                const activePermission = activeHistoryPermission ||\n                    activeUsersPermission;\n                if (activePermission.isImplementationLevelType) {\n                    url_ = API_URLS[isHistoryPermission\n                        ? 'usersPermissionsHistoryAdvertisementsProjectsEnrollments'\n                        : 'usersPermissionsAdvertisementsProjectsEnrollments'\n                    ].path;\n                    const {\n                        programme = null,\n                        priority = null,\n                        activity = null,\n                        institution = null,\n                        region = null\n                    } = activePermission.permission;\n                    dialogAdditionalFetchData_ = {\n                        programme: programme !== null ? programme.id : null,\n                        priority: priority !== null ? priority.id : null,\n                        activity: activity !== null ? activity.id : null,\n                        institution: institution !== null ? institution.id : null,\n                        region: region !== null ? region.id : null,\n                    };\n                } else {\n                    url_ = activePermission.permission.type === 'usersAdministration'\n                        ? API_URLS[isHistoryPermission\n                            ? 'usersPermissionsHistoryUsers'\n                            : 'usersPermissionsUsers'\n                        ].path\n                        : activePermission.permission.type === 'contentAdministration'\n                            ? API_URLS[isHistoryPermission\n                                ? 'usersPermissionsHistoryContent'\n                                : 'usersPermissionsContent'\n                            ].path\n                            : API_URLS[isHistoryPermission\n                                ? 'usersPermissionsHistoryDictionaries'\n                                : 'usersPermissionsDictionaries'\n                            ].path\n                }\n                if (!isHistoryPermission) {\n                    dialogAdditionalFetchData_['mode'] = 'modeContext';\n                }\n            }\n            return [url_, dialogAdditionalFetchData_]\n        },\n        [activeHistoryPermission, activeUsersPermission]\n    );\n\n    const permissionListAdditionalFetchData = useMemo(\n        () => ({mode: 'modeUserCurrent', authorized: currentUserId}),\n        [currentUserId]\n    );\n\n    function handleCloseAddPermissionForm(data) {\n        // close dialog\n        setAddPermissionMode(null);\n        setUserForPermissionAdding(null);\n    }\n\n    function handleCloseAddPermissionFormSuccess(data) {\n        // check if current user permission was added;\n        // if yes - refresh permissions list\n        if (userForPermissionAdding.id === currentUserId) {\n            if (addPermissionMode === 'implementationLevel') {\n                setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n            } else {\n                setAdministrationPermissionsRequestId(prevId => prevId + 1);\n            }\n        }\n        handleCloseAddPermissionForm(data);\n    }\n\n    let PermissionFormComponent = null;\n    if (editedPermission !== null) {\n        PermissionFormComponent = editedPermission.isImplementationLevelType\n            ? UserPermissionsImplementationLevelForm\n            : UserPermissionsAdministrationForm;\n    } else if (\n        ['administration', 'implementationLevel'].includes(addPermissionMode)\n    ) {\n        PermissionFormComponent = addPermissionMode === 'implementationLevel'\n            ? UserPermissionsImplementationLevelForm\n            : UserPermissionsAdministrationForm;\n    }\n\n    return (\n        <>\n            <PermissionList\n                additionalFetchData={permissionListAdditionalFetchData}\n                isImplementationLevelType={false}\n                requestId={administrationPermissionsRequestId}\n                RowComponent={PermissionListRow}\n                tableHeaderList={TABLE_HEADER_LIST}\n                title=\"Administracja\"\n                url={API_URLS.usersPermissionsContentDictionariesUsers.path}\n                withHistory={false}\n                onOpenForm={() => setAddPermissionMode('administration')}\n                onSetActiveHistoryPermission={handleOpenHistory}\n                onSetActiveUsersPermission={handleOpenUsers} />\n            <PermissionList\n                additionalFetchData={permissionListAdditionalFetchData}\n                isImplementationLevelType={true}\n                requestId={implementationLevelPermissionsRequestId}\n                RowComponent={PermissionListRow}\n                tableHeaderList={TABLE_HEADER_LIST}\n                title=\"Poziomy wdrożenia\"\n                url={API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path}\n                withHistory={false}\n                onOpenForm={() => setAddPermissionMode('implementationLevel')}\n                onSetActiveHistoryPermission={handleOpenHistory}\n                onSetActiveUsersPermission={handleOpenUsers} />\n            {activeHistoryPermission !== null && (\n                <PermissionsHistory\n                    additionalFetchData={dialogAdditionalFetchData}\n                    dialogTitle={getPermissionHistoryUsersTitle(\n                        activeHistoryPermission, true\n                    )}\n                    isImplementationLevelType={activeHistoryPermission.isImplementationLevelType}\n                    mode=\"fullHistory\"\n                    tableHeaderList={[\n                        'Data zmiany', \"Użytkownik\", 'Rodzaj operacji',\n                        'Użytkownik wprowadzający'\n                    ]}\n                    url={url}\n                    userId={null}\n                    onClose={handleCloseHistory} />\n            )}\n            {activeUsersPermission !== null && (\n                <DialogCustom\n                    className=\"dialog-long-content\"\n                    dialogTitle={getPermissionHistoryUsersTitle(\n                        activeUsersPermission, false)}\n                    onClose={handleCloseUsers}>\n                    <PermissionUsers\n                        activeUsersPermission={activeUsersPermission}\n                        additionalFetchData={dialogAdditionalFetchData}\n                        isImplementationLevelType={activeUsersPermission.isImplementationLevelType}\n                        url={url}\n                        onClose={handleCloseUsers}\n                        onSetEditedPermission={handleSetEditedPermission}\n                        onSetRemovedPermission={handleSetRemovedPermission} />\n                </DialogCustom>\n            )}\n            {removedPermission !== null && (\n                <UserPermissionsRemovingPermissionDialog\n                    permission={removedPermission}\n                    questionSuffix={` użytkownika ${removedPermission.permission.authorized.forename} ${removedPermission.permission.authorized.surname}`}\n                    userId={(removedPermission.permission.authorized || {}).id}\n                    onCloseRemovedPermissionDialog={handleCloseRemovePermission}\n                    onRemovePermissionSuccess={handleCloseRemovePermissionSuccess} />\n            )}\n            {editedPermission !== null && (\n                <DialogCustom\n                    className=\"dialog-long-content\"\n                    onClose={handleCloseEditPermission}>\n                    <Text>Informacje o użytkowniku</Text>\n                    <UserHeader\n                        user={editedPermission.permission.authorized || {}}\n                        withButtons={false} />\n                    <PermissionFormComponent\n                        initialData={editedPermission.permission}\n                        userId={(editedPermission.permission.authorized || {}).id}\n                        onCancel={handleCloseEditPermission}\n                        onSavePermissionSuccess={handleCloseEditPermissionSuccess} />\n                </DialogCustom>\n            )}\n            {['administration', 'implementationLevel'].includes(addPermissionMode)\n                && (userForPermissionAdding === null\n                    ? (\n                        <DialogCustom\n                            className=\"dialog\"\n                            onClose={handleCloseAddPermissionForm}>\n                            <SearchUserForm\n                                addPermissionMode={addPermissionMode}\n                                onCancel={handleCloseAddPermissionForm}\n                                onFindUser={setUserForPermissionAdding} />\n                        </DialogCustom>\n                    )\n                    : (\n                        <DialogCustom\n                            className=\"dialog-long-content\"\n                            onClose={handleCloseAddPermissionForm}>\n                            <Text>Informacje o użytkowniku</Text>\n                            <UserHeader\n                                user={userForPermissionAdding}\n                                withButtons={false} />\n                            <PermissionFormComponent\n                                userId={userForPermissionAdding.id}\n                                onCancel={handleCloseAddPermissionForm}\n                                onSavePermissionSuccess={handleCloseAddPermissionFormSuccess} />\n                        </DialogCustom>\n                    )\n                )\n            }\n        </>\n    )\n};\n","import React from 'react';\nimport {\n    DataTableCell,\n    DataTableRow,\n} from '@rmwc/data-table';\n\nimport { reformatDanePodmiotu } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { Box, Breadcrumps, ButtonStyled, FieldWithLabel, GridCustom, TableCustom, Text } from '../../common';\nimport { BaseComponent, DanePodmiotu } from '../common';\nimport { FormDanePodmiotu } from './FormDanePodmiotu';\nimport { FormOsobaDoKontaktu } from './FormOsobaDoKontaktu';\n\n\nclass ProfilUzytkownika extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        let uzytkownik = getSerializedObject(data).uzytkownik;\n        uzytkownik.danePodmiotu = reformatDanePodmiotu(uzytkownik.danePodmiotu);\n        this.setState({\n            initializingOn: false,\n            uzytkownik: uzytkownik,\n        });\n    }\n\n    handleSaveDanePodmiotu = (data) => {\n        this.setState(prevState => ({\n            changeDataOn: false,\n            uzytkownik: Object.assign({}, prevState.uzytkownik, {danePodmiotu: data}),\n        }));\n    }\n\n    handleSaveOsobaDoKontaktu = (data, isNew) => {\n        this.setState(prevState => {\n            let osobyDoKontaktu;\n            if (isNew) {\n                osobyDoKontaktu = [...prevState.uzytkownik.osobyDoKontaktu, data];\n            } else {\n                osobyDoKontaktu = prevState.uzytkownik.osobyDoKontaktu.map(o => o.id === data.id ? data : o);\n            }\n            return {\n                formOsobaDoKontaktuOn: false,\n                editedOsobaDoKontaktu: null,\n                uzytkownik: Object.assign({}, prevState.uzytkownik, {osobyDoKontaktu: osobyDoKontaktu}),\n            }\n        });\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            changeDataOn: false,\n            formOsobaDoKontaktuOn: false,\n            uzytkownik: {},\n            editedOsobaDoKontaktu: null,\n        }\n    }\n\n    getFetchUrl() {\n        return '/api/users/0'\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać danych profilu. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania danych profilu wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps notZarzadzanieTrescia>\n                <li className=\"breadcrumps__current\">Profil użytkownika</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        document.title = \"Baza Konkurencyjności - mój profil\";\n        return (\n            <>\n                {this.renderProfilUzytkownika()}\n                {this.renderDanePodmiotu()}\n                {this.renderOsobyDoKontaktu()}\n                {this.state.changeDataOn && (\n                    <FormDanePodmiotu\n                        data={this.state.uzytkownik.danePodmiotu}\n                        closeDanePodmiotuForm={() => this.setState({changeDataOn: false})}\n                        saveDanePodmiotu={this.handleSaveDanePodmiotu} />\n                )}\n                {this.state.formOsobaDoKontaktuOn && (\n                    <FormOsobaDoKontaktu\n                        data={this.state.editedOsobaDoKontaktu}\n                        closeOsobaDoKontaktuFormForm={() => this.setState(\n                            {formOsobaDoKontaktuOn: false, editedOsobaDoKontaktu: null}\n                        )}\n                        saveOsobaDoKontaktu={this.handleSaveOsobaDoKontaktu} />\n                )}\n            </>\n        )\n    }\n\n    renderProfilUzytkownika() {\n        const uzytkownik = this.state.uzytkownik;\n        return (\n            <>\n                <GridCustom fullwidth>\n                    <Text tag=\"h2\" mainHeader>Mój profil w Bazie Konkurencyjności</Text>\n                    <GridCustom flexTop>\n                        <a href='/konto/' className=\"mdc-button mdc-button--unelevated btn--primary\">Ustawienia konta</a>\n                    </GridCustom>\n                </GridCustom>\n                <Box titleOneRow=\"Twoje dane\" className=\"users__box\">\n                    <FieldWithLabel label=\"Imię i nazwisko\">\n                        <Text>{uzytkownik.imie} {uzytkownik.nazwisko}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Adres e-mail\">\n                        <Text>{uzytkownik.email}</Text>\n                    </FieldWithLabel>\n                </Box>\n            </>\n        )\n    }\n\n    renderDanePodmiotu() {\n        let content, button;\n\n        if (!Object.keys(this.state.uzytkownik.danePodmiotu).length) {\n            content = <Text error>Brak zdefiniowanych danych podmiotu.</Text>;\n            button = (\n                <ButtonStyled onClick={() => this.setState({changeDataOn: true})} add>\n                    Dodaj dane podmiotu\n                </ButtonStyled>\n            );\n        } else {\n            content = <DanePodmiotu danePodmiotu={this.state.uzytkownik.danePodmiotu} />;\n            button = (\n                <ButtonStyled onClick={() => this.setState({changeDataOn: true})} lite>\n                    Edytuj dane podmiotu\n                </ButtonStyled>\n            );\n        }\n\n        return (\n            <Box titleOneRow=\"Dane podmiotu\" className=\"users__box\">\n                <GridCustom flexEnd>\n                    {button}\n                </GridCustom>\n                {content}\n            </Box>\n        )\n    }\n\n    renderOsobyDoKontaktu() {\n        const osobyDoKontaktu = this.state.uzytkownik.osobyDoKontaktu || [];\n        let content = null;\n        if (!osobyDoKontaktu.length) {\n            content = <Text error>Brak zdefiniowanych osób do kontaktu.</Text>;\n        } else {\n            content = (\n                <TableCustom tableHeaderList={[\n                    'Imię i nazwisko',\n                    'Numer telefonu',\n                    'Adres e-mail',\n                    'Edytuj dane',\n                ]}>\n                    {osobyDoKontaktu.map(o => this.renderOsobaDoKontaktu(o))}\n                </TableCustom>\n            );\n        }\n        return (\n            <Box titleOneRow=\"Osoby do kontaktu\" className=\"users__box\">\n                <GridCustom flexEnd>\n                    <ButtonStyled onClick={() => this.setState({formOsobaDoKontaktuOn: true})} add>Dodaj osobę do kontaktu</ButtonStyled>\n                </GridCustom>\n                {content}\n            </Box>\n        )\n    }\n\n    renderOsobaDoKontaktu(osoba) {\n        const {\n            email,\n            id,\n            imie,\n            nazwisko,\n            numerTelefonu\n        } = osoba;\n\n        return (\n            <DataTableRow key={id}>\n                <DataTableCell>\n                    <Text>{imie} {nazwisko}</Text>\n                </DataTableCell>\n                <DataTableCell>\n                    <Text>{numerTelefonu || '-'}</Text>\n                </DataTableCell>\n                <DataTableCell className=\"table__width-needy-cell\">\n                    <Text>{email}</Text>\n                </DataTableCell>\n                <DataTableCell>\n                    <ButtonStyled\n                        primary\n                        onClick={() => this.setState({formOsobaDoKontaktuOn: true, editedOsobaDoKontaktu: osoba})}>\n                        Edytuj<span className=\"sr-only\"> {imie} {nazwisko}</span>\n                    </ButtonStyled>\n                </DataTableCell>\n            </DataTableRow>\n        )\n    }\n}\n\n\nexport { ProfilUzytkownika };\n","import React from 'react';\n\nimport { ButtonStyled, DialogCustom, GridCustom, Message } from '../../common';\n\n\nconst SessionDialog = (props) => {\n\n    const callback = props.callback;\n    const messageIcon = props.messageIcon || 'power_settings_new';\n    return (\n        <DialogCustom\n            ariaLabelledby=\"sessionDialogLabel\"\n            className=\"dialog dialog--sesion\"\n            onClose={callback}\n        >\n            <>\n                <Message\n                    error={props.error}\n                    id=\"sessionDialogLabel\"\n                    messageIcon={messageIcon}\n                    messageTitle={props.messageTitle}\n                    role={props.messageRole}\n                >\n                    {props.messageContent}\n                </Message>\n                {props.withButton && (\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled onClick={callback} primary>{props.dialogButton || 'OK'}</ButtonStyled>\n                    </GridCustom>\n                )}\n            </>\n        </DialogCustom>\n    );\n}\n\n\nexport { SessionDialog };\n","import React, { Component } from 'react';\nimport { Button } from '@rmwc/button';\nimport { Icon } from '@rmwc/icon';\n\nimport { TOKEN_COOKIE_NAME } from '../../../const';\nimport { fetchSativaApi } from '../../../fetch';\nimport { deleteCookie, fillWithLeadingZero, refreshCookie } from '../../../helpers';\nimport { Text } from '../../common/Text';\nimport { UserContext } from '../../../context/user-context';\nimport { SessionDialog } from './SessionDialog';\n\n\nclass Sesja extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            sessionTime: null,\n            refreshSessionErrorDialogOn: false,\n            logoutDialogOn: false,\n            logoutDone: false,\n            unauthorizedDialogOn:false,\n        };\n\n        this.xhrFetch = null;\n        this.sessionIntervalId = null;\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        if (this.context.auth.expire) {\n            this.initializeSessionTime();\n        }\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevState.sessionTime === this.state.sessionTime\n                && this.state.sessionTime !== this.computeSessionTime()) {\n            clearInterval(this.sessionIntervalId);\n            this.sessionIntervalId = null;\n            this.initializeSessionTime();\n        }\n    }\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n\n        // abort interval if exist\n        if (this.sessionIntervalId !== null) {\n            clearInterval(this.sessionIntervalId)\n            this.sessionIntervalId = null;\n        }\n    }\n\n    // handlers\n\n    handleRefreshSessionTime = () => {\n        this.xhrFetch = fetchSativaApi(\n            '/api/user',\n            this.handleFetchSuccess,\n            this.handleFetchError,\n            this.handleFetchIncorrectStatus,\n        );\n    }\n\n    handleFetchSuccess = (data) => {\n        this.xhrFetch = null;\n        this.context.refresh(data);\n    }\n\n    handleFetchError = (data) => {\n        this.xhrFetch = null;\n        this.setState({refreshSessionErrorDialogOn: true});\n    }\n\n    handleFetchIncorrectStatus = (status) => {\n        this.xhrFetch = null;\n        this.setState({refreshSessionErrorDialogOn: true});\n    }\n\n    handleSessionErrorDialogClose = () => {\n        this.setState({refreshSessionErrorDialogOn: false});\n    }\n\n    handleSessionDialogClose = () => {\n        this.setState({refreshSessionErrorDialogOn: false});\n    }\n\n    handleExpirationDialogClose = () => {\n        // refresh page\n        window.location.reload();\n    }\n\n    handleUnauthorizedDialogClose = () => {\n        this.setState(\n            {unauthorizedDialogOn: false},\n            () => {\n                deleteCookie(TOKEN_COOKIE_NAME);\n                // refresh page\n                window.location.reload();\n            }\n        );\n    }\n\n    // helpers\n\n    initializeSessionTime = () => {\n        const sessionTime = this.computeSessionTime();\n        this.setState(\n            {sessionTime},\n            () => this.startSessionTime()\n        );\n    }\n\n    computeSessionTime() {\n        const now = new Date();\n        const nowUTC = new Date(\n            now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\n            now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());\n        return parseInt(this.context.auth.expire) - Math.floor(nowUTC.getTime() / 1000)\n    }\n\n    startSessionTime() {\n        // refresh cookie expire\n        refreshCookie(TOKEN_COOKIE_NAME, this.state.sessionTime);\n        this.sessionIntervalId = window.setInterval(\n            () => {this.setState(prevState => {\n                if (prevState.sessionTime === 0) {\n                    clearInterval(this.sessionIntervalId);\n                    this.sessionIntervalId = null;\n                    this.context.logout(this.expire)\n                } else {\n                    if (prevState.sessionTime - 1 === 0) {\n                        return {sessionTime: 0, logoutDialogOn: true}\n                    }\n                    return {sessionTime: prevState.sessionTime - 1}\n                }\n            })},\n            1000\n        );\n    }\n\n    expire = () => {\n        this.setState({logoutDone: true});\n    }\n\n    refreshTimerAfterRequest(authTokenCookieValue) {\n        const now = new Date();\n        const nowUTC = new Date(\n            now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\n            now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());\n        this.context.refreshTimer(\n            Math.floor(nowUTC.getTime() / 1000) + 1800,\n            () => {\n                const sessionTime = this.computeSessionTime();\n                refreshCookie(\n                    TOKEN_COOKIE_NAME, sessionTime, authTokenCookieValue);\n                this.setState({sessionTime});\n            }\n        );\n    }\n\n    showUnauthorizedMessage() {\n        this.setState({unauthorizedDialogOn: true});\n    }\n\n    // rendering\n\n    render() {\n        const sessionTime = this.state.sessionTime;\n        if (!sessionTime || sessionTime < 1) {\n            if (this.state.logoutDialogOn) {\n                return this.renderLogoutDialog()\n            }\n            return this.state.unauthorizedDialogOn ? this.renderUnauthorizedDialog() : null\n        }\n\n        const min = ~~(sessionTime / 60);\n        const minRemaining = fillWithLeadingZero(min);\n        const secRemaining = fillWithLeadingZero(sessionTime - min * 60);\n        return (\n            <div className=\"session-timer\" role=\"timer\">\n                <Text id=\"session_time_remaining\">{`${minRemaining}:${secRemaining}`}</Text>\n                <Button\n                    aria-label={`Do końca sesji pozostało ${minRemaining} minut ${secRemaining} sekund. Odśwież czas sesji.`}\n                    className=\"btn--icon-only btn--primary\"\n                    onClick={this.handleRefreshSessionTime}\n                    title=\"Odśwież czas sesji\"\n                    unelevated>\n                    <span className=\"sr-only\">Odśwież czas sesji</span>\n                    <Icon aria-hidden=\"true\" icon=\"watch_later\" />\n                </Button>\n                {this.state.refreshSessionErrorDialogOn && this.renderRefreshSessionErrorDialog()}\n                {this.state.unauthorizedDialogOn && this.renderUnauthorizedDialog()}\n                {(sessionTime < 120) && this.renderRefreshSessionDialog(minRemaining, secRemaining)}\n            </div>\n        )\n    }\n\n    renderRefreshSessionErrorDialog() {\n        return <SessionDialog\n                   callback={this.handleSessionErrorDialogClose}\n                   error\n                   messageTitle=\"Nie udało się odświeżyć czasu sesji.\"\n                   messageIcon=\"error_outline\"\n                   withButton />\n    }\n\n    renderRefreshSessionDialog(min, sec) {\n        return <SessionDialog\n                    callback={this.handleRefreshSessionTime}\n                    messageTitle={`Do końca sesji pozostało ${min} minut ${sec} sekund.`}\n                    messageIcon=\"error_outline\"\n                    messageRole=\"timer\"\n                    withButton\n                    dialogButton=\"Przedłuż czas sesji\" />\n    }\n\n    renderLogoutDialog() {\n        if (this.state.logoutDone) {\n            return <SessionDialog\n                        callback={this.handleExpirationDialogClose}\n                        messageContent=\"Aby uzyskać dostęp do widoków dla zarejestrowanych użytkowników, zaloguj się ponownie.\"\n                        messageTitle=\"Użytkownik został wylogowany.\"\n                        withButton={true} />\n        }\n        return <SessionDialog\n                    callback={this.handleExpirationDialogClose}\n                    messageTitle=\"Sesja wygasła. Trwa wylogowywanie...\" />\n    }\n\n    renderUnauthorizedDialog() {\n        return <SessionDialog\n                    callback={this.handleUnauthorizedDialogClose}\n                    messageTitle=\"Wystąpił problem z uwierzytelnieniem użytkownika.\"\n                    withButton={true} />\n    }\n}\n\n\nSesja.contextType = UserContext;\n\n\nexport { Sesja };\n","import React from 'react';\nimport {\n    DataTableCell,\n    DataTableRow,\n} from '@rmwc/data-table';\n\nimport { Container, TableCustom, Text } from '../../common';\n\n\nexport const UserContactPersonsList = ({ contactPersons }) => {\n    let content;\n    if (contactPersons.length) {\n        content = (\n            <TableCustom tableHeaderList={[\n                'Imię i nazwisko',\n                'Numer telefonu',\n                'Adres e-mail',\n            ]}>\n                {contactPersons.map(cp => (\n                    <DataTableRow key={cp.id}>\n                        <DataTableCell>{cp.imie} {cp.nazwisko}</DataTableCell>\n                        <DataTableCell>{cp.numerTelefonu}</DataTableCell>\n                        <DataTableCell className=\"table__width-needy-cell\">\n                            {cp.email}\n                        </DataTableCell>\n                    </DataTableRow>\n                ))}\n            </TableCustom>\n        );\n    } else {\n        content = <Text error>Brak zdefiniowanych osób do kontaktu.</Text>;\n    }\n    return (\n        <Container>\n            <Text tag=\"h2\" mainHeader>Osoby do kontaktu</Text>\n            {content}\n        </Container>\n    )\n};\n","import React, { useContext, useState } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { useParams } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { usePutFormFetchApi } from '../../../hooks';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\n\nimport {\n    ButtonStyled,\n    Container,\n    GridCustom,\n    FieldWithLabel,\n    Text\n} from '../../common';\n\n\nexport const UserDataForm = ({ user, onUpdateUserData }) => {\n    const [loadingOn, setLoadingOn] = useState(false);\n    const [blockedAccount, setBlockedAccount] = useState(user.kontoZablokowane);\n    const [originalBlockedAccount, setOriginalBlockedAccount] = useState(\n        user.kontoZablokowane);\n\n    const { permissions, removePermission } = useContext(UserContext);\n\n    function handleFetchSuccess(data) {\n        setLoadingOn(false);\n        setOriginalBlockedAccount(blockedAccount);\n        onUpdateUserData(getSerializedObject(data).uzytkownik);\n    }\n\n    const { id: id_ } = useParams();\n    const { fetchError, errors, saveBtnText } = usePutFormFetchApi({\n        url: API_URLS.usersDetails.getUrl(id_),\n        fetchData: getSerializedObject(\n            {kontoZablokowane: blockedAccount}, {toServer: true}),\n        callbackSuccess: handleFetchSuccess,\n        loadingOn,\n        setLoadingOn,\n        message403error: 'Nie masz uprawnień do blokowania użytkowników',\n        callback403: () => removePermission('blockingUsers'),\n    });\n\n    const blockedAccountsErrors = errors.kontoZablokowane || [];\n    const hasBlockingUserPermission = permissions.blockingUsers;\n    return (\n        <Container>\n            <Text tag=\"h2\" mainHeader>Blokada profilu</Text>\n            <GridCustom fullwidth>\n                <FieldWithLabel label=\"Stan\">\n                    {hasBlockingUserPermission\n                        ? (\n                            <>\n                                <Checkbox\n                                    checked={blockedAccount}\n                                    disabled={loadingOn}\n                                    label=\"Zablokuj użytkownika\"\n                                    onChange={(ev) => setBlockedAccount(ev.target.checked)}\n                                />\n                                {blockedAccountsErrors.length > 0 && blockedAccountsErrors.map(\n                                    (e, i) => <Text error key={i}>{e}</Text>\n                                )}\n                            </>\n                        )\n                        : (\n                            <Text>\n                                Profil {originalBlockedAccount ? 'zablokowany' : 'aktywny'}\n                            </Text>\n                        )\n                    }\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Data zablokowania konta\">\n                    <Text>{user.dataZablokowaniaKonta || '---'}</Text>\n                </FieldWithLabel>\n            </GridCustom>\n            {hasBlockingUserPermission && (\n                <>\n                    {blockedAccount !== originalBlockedAccount && (\n                        <>\n                            <Text info>Upewnij się, że na pewno chcesz zapisać zmiany.</Text>\n                            <Text info>Zmieniasz wartość pola \"Zablokuj użytkownika\".</Text>\n                        </>\n                    )}\n                    <GridCustom flexEnd>\n                        <ButtonStyled\n                            disabled={loadingOn}\n                            primary\n                            onClick={() => setLoadingOn(true)}>\n                            {saveBtnText}\n                        </ButtonStyled>\n                    </GridCustom>\n                </>\n            )}\n            {fetchError !== null && <Text error>{fetchError}</Text>}\n        </Container>\n    )\n};\n","import React from 'react';\n\nimport { reformatDanePodmiotu } from '../../../helpers';\nimport { Container, Text } from '../../common';\nimport { DanePodmiotu } from '../common';\n\n\nexport const UserEconomicSubjectData = ({ economicSubject }) => {\n    let content;\n    if (Object.keys(economicSubject).length) {\n        economicSubject = reformatDanePodmiotu(economicSubject);\n        content = <DanePodmiotu danePodmiotu={economicSubject} />;\n    } else {\n        content = <Text error>Brak zdefiniowanych danych podmiotu.</Text>;\n    }\n    return (\n        <Container className=\"users__container--middle\">\n            <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n            {content}\n        </Container>\n    )\n};\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { Link, useParams } from 'react-router-dom';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { UserContext } from '../../../context/user-context';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { URLS } from '../../../urls/frontend';\nimport {\n    Breadcrumps,\n    Container,\n    DialogCustom,\n    Loader,\n    NotPermittedPage,\n    Text\n} from '../../common';\nimport { PermissionList } from './PermissionList';\nimport { PermissionsHistory } from './PermissionsHistory';\nimport { UserContactPersonsList } from './UserContactPersonsList';\nimport { UserDataForm } from './UserDataForm';\nimport { UserEconomicSubjectData } from './UserEconomicSubjectData';\nimport { UserHeader } from './UserHeader';\nimport {\n    UserPermissionsAdministrationForm\n} from './UserPermissionsAdministrationForm';\nimport {\n    UserPermissionsImplementationLevelForm\n} from './UserPermissionsImplementationLevelForm';\nimport { UserPermissionsListRow } from './UserPermissionsListRow';\nimport {\n    UserPermissionsRemovingPermissionDialog\n} from './UserPermissionsRemovingPermissionDialog';\n\n\nconst TAB_INDEXES = {\n    dane: 0,\n    uprawnienia: 1,\n};\nconst REVERTED_TAB_INDEXES = {\n    0: 'dane',\n    1: 'uprawnienia',\n};\nconst ADMINISTRATION_INITIAL_REQUEST_ID = 1;\nconst IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID = 1;\nconst TABLE_HEADER_LIST = ['Nazwa', 'Uprawnienia', 'Działania'];\n\nfunction serializeFetchData(data) {\n    // it has to be serialized because some child components need like that\n    return getSerializedObject(data)\n}\n\n\nexport const User = (props) => {\n    const [updatedUserData, setUpdatedUserData] = useState(null);\n    const { id: id_ } = useParams();\n    const [pageNotPermitted, setPageNotPermitted] = useState(false);\n\n    const { removePermission } = useContext(UserContext);\n\n    function callback403() {\n        setPageNotPermitted(true);\n        removePermission('usersAndPermissionsPreviewListUsers');\n    }\n\n    const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n        url: API_URLS.usersDetails.getUrl(id_),\n        serializeFetchDataFunction: serializeFetchData,\n        updatedData: updatedUserData,\n        callback403,\n    });\n    const user = data === null ? {} : data.uzytkownik;\n\n    const [selectedTab, setSelectedTab] = useState(TAB_INDEXES.dane);\n\n    function setInitialTab() {\n        const params = new URLSearchParams(props.history.location.search);\n        const section = params.get('sekcja') || 'dane';\n        setSelectedTab(TAB_INDEXES[section] || TAB_INDEXES.dane);\n    }\n    useEffect(setInitialTab, []);\n\n    const [administrationFormOn, setAdministrationFormOn] = useState(false);\n    const [\n        implementationLevelFormOn,\n        setImplementationLevelFormOn\n    ] = useState(false);\n    const [\n        administrationPermissionsRequestId,\n        setAdministrationPermissionsRequestId\n    ] = useState(ADMINISTRATION_INITIAL_REQUEST_ID);\n    const [\n        implementationLevelPermissionsRequestId,\n        setImplementationLevelPermissionsRequestId\n    ] = useState(IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID);\n\n    function handleChangeTab(ev) {\n        const index = ev.detail.index\n        setSelectedTab(index);\n        props.history.push(\n            `${window.location.pathname}?sekcja=${REVERTED_TAB_INDEXES[index] || REVERTED_TAB_INDEXES[0]}`);\n    }\n\n    function handleUpdateUserData(data) {\n        setUpdatedUserData(data);\n    }\n\n    const [editedPermission, setEditedPermission] = useState(null);\n\n    function handleOpenAdministrationForm() {\n        setImplementationLevelFormOn(false);\n        setAdministrationFormOn(true);\n    }\n\n    function handleCloseAdministrationForm() {\n        setAdministrationFormOn(false);\n        if (editedPermission !== null) {\n            setEditedPermission(null);\n        }\n    }\n\n    function handleOpenImplementationLevelForm() {\n        setAdministrationFormOn(false);\n        setImplementationLevelFormOn(true);\n    }\n\n    function handleCloseImplementationLevelForm() {\n        setImplementationLevelFormOn(false);\n        if (editedPermission !== null) {\n            setEditedPermission(null);\n        }\n    }\n\n    function handleSavePermissionSuccess(data, isAdministrationPermission) {\n        if (isAdministrationPermission) {\n            setAdministrationFormOn(false);\n            setAdministrationPermissionsRequestId(prevId => prevId + 1);\n        } else {\n            setImplementationLevelFormOn(false);\n            setImplementationLevelPermissionsRequestId(prevId => prevId + 1);\n        }\n        if (editedPermission !== null) {\n            setEditedPermission(null);\n        }\n    }\n\n    function handleSetEditedPermission(isImplementationLevelType, permission) {\n        setEditedPermission(permission);\n        if (isImplementationLevelType) {\n            setImplementationLevelFormOn(true);\n        } else {\n            setAdministrationFormOn(true);\n        }\n    }\n\n    const [removedPermission, setRemovedPermission] = useState(null);\n\n    function handleSetRemovedPermission(isImplementationLevelType, permission) {\n        setRemovedPermission({\n            isImplementationLevelType,\n            permission,\n        });\n    }\n\n    function handleCloseRemovedPermissionDialog() {\n        setRemovedPermission(null);\n    }\n\n    function handleRemovePermissionSuccess() {\n        if (removedPermission.isImplementationLevelType) {\n            setImplementationLevelPermissionsRequestId(\n                prevId => prevId + 1);\n        } else {\n            setAdministrationPermissionsRequestId(\n                prevId => prevId + 1);\n        }\n        setRemovedPermission(null);\n    }\n\n    const [\n        administrationHistoryOn,\n        setAdministrationHistoryOn\n    ] = useState(false);\n    const [\n        implementationLevelHistoryOn,\n        setImplementationLevelHistoryOn\n    ] = useState(false);\n\n    function handleOpenAdministrationHistory() {\n        setImplementationLevelHistoryOn(false);\n        setAdministrationHistoryOn(true);\n    }\n\n    function handleOpenImplementationLevelHistory() {\n        setAdministrationHistoryOn(false);\n        setImplementationLevelHistoryOn(true);\n    }\n\n    function handleCloseAdministrationHistory() {\n        setAdministrationHistoryOn(false);\n    }\n\n    function handleCloseImplementationLevelHistory() {\n        setImplementationLevelHistoryOn(false);\n    }\n\n    const permissionListAdditionalFetchData = useMemo(\n        () => ({mode: 'modeUserCustom', authorized: id_}), [id_]);\n\n    if (pageNotPermitted) {\n        return <NotPermittedPage />\n    }\n\n    return (\n        <>\n            <Breadcrumps notZarzadzanieTrescia>\n                <li className=\"breadcrumps__link\">\n                    <Link to={URLS.users.path}>\n                        Administracja użytkownikami i uprawnieniami\n                    </Link>\n                </li>\n                <li className=\"breadcrumps__current\">Użytkownik</li>\n            </Breadcrumps>\n            {loadingOn\n                ? <Loader />\n                : (fetchError\n                    ? <Text error>{fetchError}</Text>\n                    : (\n                        <>\n                            <Container>\n                                <UserHeader user={user} />\n                            </Container>\n                            <TabBar\n                                activeTabIndex={selectedTab}\n                                onActivate={handleChangeTab}>\n                                <Tab aria-label=\"Dane użytkownika, panel zakładek, lista 1 z 2\" label=\"Dane użytkownika\" />\n                                <Tab aria-label=\"Uprawnienia, panel zakładek, lista 2 z 2\" label=\"Uprawnienia\" />\n                            </TabBar>\n                            {selectedTab === TAB_INDEXES.dane\n                                ? (\n                                    <>\n                                        <UserDataForm\n                                            user={user}\n                                            onUpdateUserData={handleUpdateUserData} />\n                                        <UserEconomicSubjectData\n                                            economicSubject={user.danePodmiotu} />\n                                        <UserContactPersonsList\n                                            contactPersons={user.osobyDoKontaktu || []} />\n                                    </>\n                                ) : (\n                                    <>\n                                        <PermissionList\n                                            additionalFetchData={permissionListAdditionalFetchData}\n                                            initialRequestId={ADMINISTRATION_INITIAL_REQUEST_ID}\n                                            isImplementationLevelType={false}\n                                            hideAddPermissionButtonIfFullList={true}\n                                            requestId={administrationPermissionsRequestId}\n                                            RowComponent={UserPermissionsListRow}\n                                            tableHeaderList={TABLE_HEADER_LIST}\n                                            title=\"Administracja\"\n                                            url={API_URLS.usersPermissionsContentDictionariesUsers.path}\n                                            withHistory={true}\n                                            onOpenForm={handleOpenAdministrationForm}\n                                            onOpenHistory={handleOpenAdministrationHistory}\n                                            onSetEditedPermission={handleSetEditedPermission}\n                                            onSetRemovedPermission={handleSetRemovedPermission} />\n                                        <PermissionList\n                                            additionalFetchData={permissionListAdditionalFetchData}\n                                            initialRequestId={IMPLEMENTATION_LEVEL_INITIAL_REQUEST_ID}\n                                            isImplementationLevelType={true}\n                                            requestId={implementationLevelPermissionsRequestId}\n                                            RowComponent={UserPermissionsListRow}\n                                            tableHeaderList={TABLE_HEADER_LIST}\n                                            title=\"Poziomy wdrożenia\"\n                                            url={API_URLS.usersPermissionsAdvertisementsProjectsEnrollments.path}\n                                            withHistory={true}\n                                            onOpenForm={handleOpenImplementationLevelForm}\n                                            onOpenHistory={handleOpenImplementationLevelHistory}\n                                            onSetEditedPermission={handleSetEditedPermission}\n                                            onSetRemovedPermission={handleSetRemovedPermission} />\n                                        {administrationFormOn && (\n                                            <DialogCustom\n                                                className=\"dialog-long-content\"\n                                                onClose={handleCloseAdministrationForm}>\n                                                <UserPermissionsAdministrationForm\n                                                    initialData={editedPermission}\n                                                    userId={id_}\n                                                    onCancel={handleCloseAdministrationForm}\n                                                    onSavePermissionSuccess={\n                                                        (data) => handleSavePermissionSuccess(data, true)\n                                                    } />\n                                            </DialogCustom>\n                                        )}\n                                        {implementationLevelFormOn && (\n                                            <DialogCustom\n                                                className=\"dialog-long-content\"\n                                                onClose={handleCloseImplementationLevelForm}>\n                                                <UserPermissionsImplementationLevelForm\n                                                    initialData={editedPermission}\n                                                    userId={id_}\n                                                    onCancel={handleCloseImplementationLevelForm}\n                                                    onSavePermissionSuccess={\n                                                        (data) => handleSavePermissionSuccess(data, false)\n                                                    } />\n                                            </DialogCustom>\n                                        )}\n\n                                        {removedPermission !== null && (\n                                            <UserPermissionsRemovingPermissionDialog\n                                                permission={removedPermission}\n                                                userId={id_}\n                                                onCloseRemovedPermissionDialog={handleCloseRemovedPermissionDialog}\n                                                onRemovePermissionSuccess={handleRemovePermissionSuccess} />\n                                        )}\n\n                                        {administrationHistoryOn && (\n                                            <PermissionsHistory\n                                                isImplementationLevelType={false}\n                                                mode=\"userHistory\"\n                                                tableHeaderList={['Data zmiany', \"Nazwa uprawnienia\", 'Rodzaj operacji', 'Użytkownik wprowadzający']}\n                                                url={API_URLS.usersPermissionsHistoryContentDictionariesUsers.path}\n                                                userId={id_}\n                                                onClose={handleCloseAdministrationHistory} />\n                                        )}\n\n                                        {implementationLevelHistoryOn && (\n                                            <PermissionsHistory\n                                                isImplementationLevelType={true}\n                                                mode=\"userHistory\"\n                                                tableHeaderList={['Data zmiany', \"Nazwa poziomu\", 'Rodzaj operacji', 'Użytkownik wprowadzający']}\n                                                url={API_URLS.usersPermissionsHistoryAdvertisementsProjectsEnrollments.path}\n                                                userId={id_}\n                                                onClose={handleCloseImplementationLevelHistory} />\n                                        )}\n                                    </>\n                                )\n                            }\n                        </>\n                    )\n                )\n            }\n        </>\n    )\n};\n","import {\n    ADVERTISEMENT_STATUS_FILTERS_CHOICES,\n    CZY_PROJEKT_CHOICES,\n    PROJECTS_MANAGEMENTS_CHOICES,\n    RODZAJ_ADRESU_FILTERS_CHOICES,\n    TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES,\n    USER_STATUS_CHOICES\n} from './const';\n\n\nconst ADVERTISEMENTS_CLEANED_FILTERS = {\n    ktoUtworzyl: 0,\n    dataUtworzenia: '',\n    ktoModyfikowal: 0,\n    dataModyfikacji: '',\n    terminOfert: '',\n    tytul: '',\n    ogloszenie_numer: '',\n    status: 0,\n};\n\nconst PROJECTS_CLEANED_FILTERS = {\n    calyNumer: '',\n    nazwa: '',\n    typ: {value: CZY_PROJEKT_CHOICES[0][0], label: CZY_PROJEKT_CHOICES[0][1]},\n};\n\nconst SEARCH_CLEANED_FILTERS = {\n    title: '',\n    publicationDateRange: {\n        type: null,\n        from: '',\n        to: '',\n    },\n    submissionDeadlineRange: {\n        type: null,\n        from: '',\n        to: '',\n    },\n    status: ['PUBLISHED', ],\n    advertiserName: '',\n    advertiserIdentificationNumber: '',\n    category: null,\n    subcategory: null,\n    cpvItem: [],\n    fulfillmentPlaces: [],\n    programme: [],\n};\n\nconst USERS_CLEANED_FILTERS = {\n    identifier: '',\n    email: '',\n    forename: '',\n    surname: '',\n    status: {value: USER_STATUS_CHOICES[0][0], label: USER_STATUS_CHOICES[0][1]},\n};\n\n\nconst FAVORITES_ADVERT_CLEANED_FILTERS = {\n    status: ['PUBLISHED', ],\n    advertiserIdentificationNumber: '',\n    category: null,\n    subcategory: null,\n    cpvItem: [],\n    fulfillmentPlaces: [],\n    programme: [],\n    mode: 'favorite'\n};\n\nconst PROJECTS_MANAGEMENTS_CLEANED_FILTERS = {\n    userEmail: '',\n    userForename: '',\n    userSurname: '',\n    type: {value: PROJECTS_MANAGEMENTS_CHOICES[0][0], label: PROJECTS_MANAGEMENTS_CHOICES[0][1]},\n    fullNumber: '',\n    name: '',\n    perspective: null,\n    programme: null,\n    priority: null,\n    activity: null,\n    institution: null,\n    region: null,\n};\n\nconst ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS = {\n    userEmail: '',\n    userForename: '',\n    userSurname: '',\n    advertiserName: '',\n    // Poland\n    advertiserAddressType: RODZAJ_ADRESU_FILTERS_CHOICES.filter(\n        choice => choice.value === 'all')[0],\n    // NIP\n    advertiserIdentificationNumberType:\n        TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES.filter(\n            choice => choice.value === 'all')[0],\n    advertiserIdentificationNumber: '',\n    advertiserAddressCountry: '',\n    advertiserAddressVoivodeship: '',\n    advertiserAddressPoviat: '',\n    advertiserAddressCommune: '',\n    advertiserAddressLocality: '',\n    announcementStatus: ADVERTISEMENT_STATUS_FILTERS_CHOICES[0],\n    announcementNumber: '',\n    title: '',\n    announcementProjectEnrollmentPerspective: null,\n    announcementProjectEnrollmentProgramme: null,\n    announcementProjectEnrollmentPriority: null,\n    announcementProjectEnrollmentActivity: null,\n    announcementProjectEnrollmentInstitution: null,\n    announcementProjectEnrollmentRegion: null,\n    announcementProjectEnrollmentFullNumber: '',\n    announcementPublicationDateFrom: '',\n    announcementPublicationDateTo: '',\n    submissionDeadlineFrom: '',\n    submissionDeadlineTo: '',\n};\n\nconst filterAdvertisements = (advertisementList, filtersAreOn, filters) => {\n    if (!filtersAreOn) {\n        return advertisementList\n    }\n\n    let advertisements = advertisementList.slice();\n    for (let [name, value] of Object.entries(filters)) {\n        if (filters[name] !== ADVERTISEMENTS_CLEANED_FILTERS[name]) {\n            if (['ktoUtworzyl', 'ktoModyfikowal'].includes(name)) {\n                advertisements = advertisements.filter(o => o.ogloszenie[name].id === value);\n            } else if (name === 'status') {\n                advertisements = advertisements.filter(o => o.ogloszenie.status.id === value);\n            } else if (name === 'tytul') {\n                advertisements = advertisements.filter(o => o[name] !== null && o[name].toLowerCase().includes(value.toLowerCase()));\n            } else if (name === 'ogloszenie_numer') {\n                const [attr, subattr] = name.split('_');\n                advertisements = advertisements.filter(o => {\n                    const adValue = o[attr][subattr];\n                    return adValue !== null && adValue.toLowerCase().includes(value.toLowerCase())\n                });\n            } else if (name === 'terminOfert') {\n                advertisements = advertisements.filter(o => {\n                    let terminOfert = o[name];\n                    if (!!terminOfert) {\n                        terminOfert = terminOfert.slice(0, 10);\n                    }\n                    return terminOfert === value;\n                });\n            } else {\n                advertisements = advertisements.filter(o => o[name] === value);\n            }\n        }\n    }\n    return advertisements\n}\n\nconst filterProjects = (projectList, filtersAreOn, filters) => {\n    if (!filtersAreOn) {\n        return projectList\n    }\n\n    for (let [name, value] of Object.entries(filters)) {\n        if (filters[name] !== PROJECTS_CLEANED_FILTERS[name]) {\n            if (name === 'typ') {\n                if (value.value !== 'all') {\n                    projectList = projectList.filter(p => (p.typ === 'project').toString() === value.value);\n                }\n            } else {\n                projectList = projectList.filter(\n                    p => p[name] !== null && p[name].toLowerCase().includes(value.toLowerCase()));\n            }\n        }\n    }\n    return projectList\n}\n\n\nconst getSearchFiltersCount = (filters) => {\n    let counter = 0;\n    for (let [name, value] of Object.entries(filters)) {\n        if (['status', 'cpvItem', 'fulfillmentPlaces', 'programme'].includes(name)) {\n            // list counters\n            if (value.length) {\n                counter++;\n            }\n        } else if (['publicationDateRange', 'submissionDeadlineRange'].includes(name)) {\n            if (Object.values(value).some(v => !!v)) {\n                counter++;\n            }\n        } else if (!!value) {\n            counter++;\n        }\n    }\n    return counter\n}\n\nconst getUsersFiltersCount = (filters) => {\n    let counter = 0;\n    for (let [name, value] of Object.entries(filters)) {\n        if (name === 'status' || USERS_CLEANED_FILTERS[name] !== value) {\n            counter++;\n        }\n    }\n    return counter\n}\n\nconst getFavoritesAdvertFiltersCount = (filters) => {\n    let counter = 0;\n    for (let [name, value] of Object.entries(filters)) {\n        if (FAVORITES_ADVERT_CLEANED_FILTERS[name] !== value) {\n            \n            if(!Array.isArray(value) || (Array.isArray(value) && value.length > 0))\n            {\n                counter++;\n            }\n            \n        }\n    }\n    return counter\n}\n\nconst getOffersFiltersCount = (filters, emptyFilters) => {\n    let counter = 0;\n    for (let [name, value] of Object.entries(filters)) {\n        if (['status', 'isAdmin'].includes(name) || emptyFilters[name] !== value) {\n            counter++;\n        }\n    }\n    return counter\n}\n\nconst getProjectsManagementsFiltersCount = (filters) => {\n    if (filters === null) { return 0 }\n    let counter = 0;\n    for (let [name, value] of Object.entries(filters)) {\n        if (['type', ].includes(name) || PROJECTS_MANAGEMENTS_CLEANED_FILTERS[name] !== value) {\n            counter++;\n        }\n    }\n    return counter\n};\n\nconst getAdvertisementsManagementsFiltersCount = (filters) => {\n    if (filters === null) { return 0 }\n    let counter = 0;\n    for (let [name, value] of Object.entries(filters)) {\n        if ([\n            'advertiserAddressVoivodeship',\n            'advertiserAddressPoviat',\n            'advertiserAddressCommune'\n        ].includes(name)) {\n            // don't count it, because they are not inputs\n            continue\n        }\n        if (name === 'advertiserIdentificationNumberType') {\n            if (filters.advertiserAddressType.value === 'poland') {\n                // identification number select is shown\n                counter++;\n            }\n            continue\n        }\n        if (['advertiserAddressType', 'announcementStatus'].includes(name) ||\n                ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS[name] !== value ) {\n            counter++;\n        }\n    }\n    return counter\n};\n\n\nexport {\n    ADVERTISEMENTS_CLEANED_FILTERS,\n    ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS,\n    PROJECTS_CLEANED_FILTERS,\n    PROJECTS_MANAGEMENTS_CLEANED_FILTERS,\n    SEARCH_CLEANED_FILTERS,\n    USERS_CLEANED_FILTERS,\n    FAVORITES_ADVERT_CLEANED_FILTERS,\n    filterAdvertisements,\n    filterProjects,\n    getAdvertisementsManagementsFiltersCount,\n    getOffersFiltersCount,\n    getProjectsManagementsFiltersCount,\n    getSearchFiltersCount,\n    getUsersFiltersCount,\n    getFavoritesAdvertFiltersCount\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getUsersFiltersCount, USERS_CLEANED_FILTERS } from '../../../filters';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, GridCustom, TableCustom, Text } from '../../common';\nimport { colors } from '../../vars/vars';\nimport { PaginatedBaseComponent } from '../common';\nimport { FiltryUzytkownikow } from './FiltryUzytkownikow';\n\n\nclass Uzytkownicy extends PaginatedBaseComponent {\n    message403 = 'Nie masz uprawnień do przeglądania listy użytkowników.';\n\n    componentDidMount() {\n        if (!this.context.permissions.usersAndPermissionsPreviewListUsers) {\n            window.scrollTo(0, 0);\n            this.setState({\n                initializingOn: false,\n                pageNotPermitted : true,\n            });\n            return\n        }\n        super.componentDidMount();\n    }\n\n    // helpers\n\n    preState(props) {\n        super.preState(props);\n        this.objectsName = 'uzytkownicy';\n        this.paginateBy = 100;\n        this.sortingValues = [\n            ['identifier', 'Po identyfikatorze Użytkownika'],\n            ['email', 'Po adresie e-mail'],\n            ['forename', 'Po imieniu'],\n            ['surname', 'Po nazwisku'],\n            ['status', 'Po statusie'],\n        ];\n        this.sortingLabel = 'Sortuj użytkowników';\n        this.filteringLabel = 'Filtruj listę';\n        this.filtersComponentClass = FiltryUzytkownikow;\n\n        this.getFiltersCount = getUsersFiltersCount;\n    }\n\n    getAdditionalState(props) {\n        return {\n            ...super.getAdditionalState(props),\n            selectedSort: {value: this.sortingValues[3][0], label: this.sortingValues[3][1]},\n            objects: {},\n            filters: USERS_CLEANED_FILTERS,\n        }\n    }\n\n    getFetchUrl() {\n        return API_URLS.users.path\n    }\n\n    getFetchData() {\n        let queryDict = super.getFetchData();\n\n         // set filters values\n        for (let [name, value] of Object.entries(this.state.filters)) {\n            if (name === 'status') {\n                queryDict[name] = value.value;\n            } else if (value !== USERS_CLEANED_FILTERS[name]) {\n                queryDict[name] = value.trim();\n            }\n        }\n\n        return queryDict\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się wyszukać użytkowników. ${message}`\n    }\n\n     getFetchIncorrectStatusError(status) {\n        return `Nie udało się wyszukać użytkowników. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.context.removePermission('usersAndPermissionsPreviewListUsers');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Text tag=\"h1\" mainHeader>Użytkownicy Bazy Konkurencyjności</Text>\n        )\n    }\n\n    renderFiltersButton() {\n        return (\n            <>\n                {super.renderFiltersButton()}\n                <GridCustom flexTop>\n                    <a href='/konto/panel/uzytkownicy/' className=\"mdc-button mdc-button--unelevated btn--primary\">Lista użytkowników CAS</a>\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderEmptyObjects() {\n        return <Text error role=\"alert\">Nie znaleziono użytkowników spełniających kryteria wyszukiwania.</Text>\n    }\n\n    renderList() {\n        const total = this.state.total;\n        return (\n            <>\n                <Text accentHeader tag=\"h2\" role=\"status\">\n                    Znaleziono {total < this.paginateBy ? '' : 'około '}{total} {total === 1 ? 'użytkownika' : 'użytkowników'}.\n                </Text>\n                <TableCustom tableHeaderList={[\n                    'Adres e-mail',\n                    'Imię i nazwisko',\n                    'Status, Identyfikator Użytkownika',\n                    <span className=\"sr-only\">Opcje</span>,\n                ]}>\n                    {this.state.objects.map(o => this.renderUzytkownik(o))}\n                </TableCustom>\n            </>\n        )\n    }\n\n    renderUzytkownik(uzytkownik) {\n        return (\n            <DataTableRow key={uzytkownik.id}>\n                <DataTableCell><Text>{uzytkownik.email}</Text></DataTableCell>\n                <DataTableCell><Text>{uzytkownik.imie} {uzytkownik.nazwisko}</Text></DataTableCell>\n                <DataTableCell>\n                    {uzytkownik.kontoZablokowane ? <Text><Icon aria-hidden=\"true\" icon=\"cancel\" style={{ color: colors.textHintOnLight }} title=\"zablokowany\" /> zablokowany</Text> : <Text><Icon aria-hidden=\"true\" icon=\"check_circle\" style={{ color: colors.secondary }} title=\"aktywny\" /> aktywny</Text>}\n                    <Text className=\"table__secondary-info\">Id: {uzytkownik.identyfikator}</Text>\n                </DataTableCell>\n                <DataTableCell>\n                    <ButtonStyled primary tag={Link} to={`/uzytkownicy/${uzytkownik.id}`}>Podgląd danych</ButtonStyled>\n                </DataTableCell>\n            </DataTableRow>\n        )\n    }\n}\n\nUzytkownicy.contextType = UserContext;\n\nexport { Uzytkownicy };\n","import React, { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { Breadcrumps } from '../../common';\nimport { Permissions } from './Permissions';\nimport { Uzytkownicy } from './Uzytkownicy';\n\n\nconst TAB_INDEXES = {\n    lista: 0,\n    uprawnienia: 1,\n};\nconst REVERTED_TAB_INDEXES = {\n    0: 'lista',\n    1: 'uprawnienia',\n};\n\n\nexport const Users = (props) => {\n    const [selectedTab, setSelectedTab] = useState(TAB_INDEXES.lista);\n    const location = useLocation();\n\n    useEffect(() => {\n        document.title = \"Baza Konkurencyjności - użytkownicy\";\n    }, []);\n\n    useEffect(() => {\n        const params = new URLSearchParams(location.search);\n        const section = params.get('sekcja') || 'lista';\n        setSelectedTab(TAB_INDEXES[section] || TAB_INDEXES.lista);\n    }, [location.search]);\n\n    function handleChangeTab(ev) {\n        props.history.push(\n            `${location.pathname}?sekcja=${\n                REVERTED_TAB_INDEXES[ev.detail.index] ||\n                REVERTED_TAB_INDEXES[0]\n            }`\n        );\n    }\n\n    return (\n        <>\n            <Breadcrumps notZarzadzanieTrescia>\n                <li className=\"breadcrumps__current\">\n                    Administracja użytkownikami i uprawnieniami\n                </li>\n            </Breadcrumps>\n            <TabBar\n                activeTabIndex={selectedTab}\n                onActivate={handleChangeTab}>\n                <Tab aria-label=\"Lista użytkowników, panel zakładek, lista 1 z 2\" label=\"Lista użytkowników\" />\n                <Tab aria-label=\"Przegląd uprawnień, panel zakładek, lista 2 z 2\" label=\"Przegląd uprawnień\" />\n            </TabBar>\n            {selectedTab === TAB_INDEXES.lista && (\n                <Uzytkownicy {...props} />\n            )}\n            {selectedTab === TAB_INDEXES.uprawnienia && <Permissions />}\n        </>\n    )\n};\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\n\nimport { Text } from '../../common';\n\n\nclass DraftToComponents extends Component {\n\n    // helpers\n\n    isEmptyString(str) {\n        return str === undefined || str === null || str.length === 0 || str.trim().length === 0\n    }\n\n    isAtomicEntityBlock(block) {\n        return block.entityRanges.length > 0 || block.type === 'atomic'\n    }\n\n    isList(blockType) {\n        return blockType === 'unordered-list-item' || blockType === 'ordered-list-item';\n    }\n\n    // rendering\n\n    render() {\n        const { role } = this.props;\n\n        return <section className=\"draft-to-components\" role={role}>{this.renderContent()}</section>\n    }\n\n    renderContent() {\n        const content = this.props.content;\n        const blocks = content.blocks;\n        if (!(blocks && blocks.length > 0)) { return null }\n        let orderedListIndex = 0;\n        return blocks.map(block => {\n            switch (block.type) {\n                case 'blockquote':\n                    orderedListIndex = 0;\n                    return this.renderBlockquote(block)\n                case 'ordered-list-item':\n                    orderedListIndex++;\n                    return this.renderOrderedListItem(block, orderedListIndex)\n                case 'unordered-list-item':\n                    orderedListIndex = 0;\n                    return this.renderUnorderedListItem(block)\n                default:\n                    orderedListIndex = 0;\n                    if (this.isAtomicEntityBlock(block)) {\n                        return this.renderAtomic(block, content.entityMap[block.entityRanges[0].key])\n                    }\n                    return this.renderText(block)\n            }\n        })\n    }\n\n    renderBlockquote(block) {\n        return (\n            <Typography key={block.key} tag=\"p\" className=\"draft-to-components__blockquote\">\n                <Icon icon=\"format_quote\" aria-hidden=\"true\"/>\n                {this.renderSections(block)}\n            </Typography>\n        )\n    }\n\n    renderOrderedListItem(block, index) {\n        return <Text key={block.key} tag=\"ol\" className=\"draft-to-components__ol\">{index}. {this.renderSections(block)}</Text>\n    }\n\n    renderUnorderedListItem(block) {\n        return <Text key={block.key} tag=\"ul\" className=\"draft-to-components__ul\">- {this.renderSections(block)}</Text>\n    }\n\n    renderAtomic(block, entity) {\n        switch (entity.type) {\n            case 'LINK':\n                return this.renderLink(block, entity.data)\n            case 'IMAGE':\n                return this.renderImage(block, entity.data)\n            case 'EMBEDDED_LINK':\n                return this.renderEmbed(block, entity.data)\n            default:\n                return null\n        }\n    }\n\n    renderLink(block, data) {\n        return <a key={block.key} id={'a11y-url-' + block.key} href={data.url} className=\"link-text\" target={data.targetOption || ''}>{this.renderSections(block)}</a>\n    }\n\n    renderImage(block, data) {\n        return <img key={block.key} src={data.src} alt={data.alt || ''} width={data.width} height={data.height}/>\n    }\n\n    renderEmbed(block, data) {\n        return <iframe key={block.key} width={data.width} height={data.height} src={data.src} frameBorder=\"0\" title={block.key}></iframe>\n    }\n\n    renderText(block) {\n        return <p key={block.key}>{this.renderSections(block)}</p>\n    }\n\n    renderSections(block) {\n        if (!block.inlineStyleRanges.length) {\n            return this.renderPureText(block.text, block.key)\n        }\n        const inlineStyleRanges = block.inlineStyleRanges.map(range => [range.offset, range.offset + range.length, range.style.toLowerCase()]);\n\n        let charsWithStyles = [];\n        let i = 0;\n        for (let char of block.text) {\n            let charStyles = new Set();\n            for (let r of inlineStyleRanges) {\n                if (i >= r[0] && i <= r[1]) {\n                    charStyles.add(r[2]);\n                }\n            }\n            charsWithStyles.push([char, [...charStyles].join('')]);\n            i++;\n        }\n\n        let currentText = '';\n        let currentStyle = '';\n        let blockSections = [];\n        for (let [char, style] of charsWithStyles) {\n            if (style === currentStyle) {\n                currentText += char;\n            } else {\n                blockSections.push([currentText, currentStyle]);\n                currentText = char;\n                currentStyle = style\n            }\n        }\n        blockSections.push([currentText, currentStyle]);\n\n        return blockSections.map((section, i) => {\n            return this.renderSection(block.key + i, section)\n        })\n    }\n\n    renderPureText(text, blockKey) {\n        return text;\n    }\n\n    renderSection(key, section) {\n        return <span key={key} style={styles[section[1]]}>{section[0]}</span>\n    }\n}\n\n\nconst styles = {\n    bold: {\n        fontWeight: 'bold',\n    },\n    italic: {\n        fontStyle: 'italic',\n    },\n    bolditalic: {\n        fontStyle: 'italic',\n        fontWeight: 'bold',\n    },\n    italicbold: {\n        fontStyle: 'italic',\n        fontWeight: 'bold',\n    },\n    // ^ these styles should be doubled because it is difference if italic or bold is choosen first\n};\n\n\nexport { DraftToComponents };\n","import React from 'react';\nimport {\n    DataTable,\n    DataTableBody,\n    DataTableCell,\n    DataTableContent,\n    DataTableHead,\n    DataTableHeadCell,\n    DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { AuditData, Breadcrumps, ButtonStyled, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport {serializeAuditData} from \"../../../helpers\";\n\n\nclass Ciasteczka extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        if (data === null) {\n            this.setState({initializingOn: false});\n        } else {\n            const cookies = getSerializedObject(\n                data,\n                {\n                    nonRecursiveKeys: ['tresc', ],\n                    dateAttributes: ['dataOpublikowania'],\n                    dateTimeAttributes: ['dataOpublikowania'],\n                }\n            );\n            this.setState({\n                initializingOn: false,\n                ciasteczka: cookies,\n                auditData: serializeAuditData(cookies),\n            });\n        }\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            ciasteczka: {\n                tresc: '',\n                dataOpublikowania: '',\n            },\n            auditData: {},\n        }\n    }\n\n    getFetchUrl() {\n        return API_URLS.cookiesAdmin.path\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać ciasteczek. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania ciasteczek wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.removePermission();\n    }\n\n    removePermission() {\n        this.context.removePermission('generalContentCookiesRegulation');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <>\n                <Breadcrumps>\n                    <li className=\"breadcrumps__current\">Ciasteczka</li>\n                </Breadcrumps>\n                <Text tag=\"h2\" mainHeader>Ciasteczka</Text>\n            </>\n        )\n    }\n\n    renderContent() {\n        if (this.state.ciasteczka.tresc === '') {\n            return <ButtonStyled add onClick={() => this.props.history.push('/zarzadzanie-trescia/ciasteczka/nowe')}>Dodaj ciasteczka</ButtonStyled>;\n        } else {\n            const ciasteczka = this.state.ciasteczka;\n            return (\n                <>\n                    <DataTable className=\"table\">\n                        <DataTableContent>\n                            <DataTableHead>\n                                <DataTableRow>\n                                    <DataTableHeadCell>Treść</DataTableHeadCell>\n                                    <DataTableHeadCell>Aktualna wersja</DataTableHeadCell>\n                                    <DataTableHeadCell></DataTableHeadCell>\n                                </DataTableRow>\n                            </DataTableHead>\n                            <DataTableBody>\n                                <DataTableRow>\n                                    <DataTableCell>\n                                        <DraftToComponents content={ciasteczka.tresc} />\n                                    </DataTableCell>\n                                    <DataTableCell>z dn. {ciasteczka.dataOpublikowania}</DataTableCell>\n                                    <DataTableCell><ButtonStyled lite noMargin onClick={() => this.props.history.push('/zarzadzanie-trescia/ciasteczka/edytuj')}>Edytuj</ButtonStyled></DataTableCell>\n                                </DataTableRow>\n                            </DataTableBody>\n                        </DataTableContent>\n                    </DataTable>\n                    <AuditData {...this.state.auditData} />\n                </>\n            );\n        }\n    }\n}\n\nCiasteczka.contextType = UserContext;\n\nexport { Ciasteczka };\n","import React from 'react';\n\nimport { getCookieValue } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonStyled, GridCustom } from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nconst COOKIE_NAME = 'bzkc';\n\n\nclass CiasteczkaFront extends BaseComponent {\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            showCookies: false,\n            ciasteczka: {},\n        }\n    }\n\n    getFetchUrl() {\n        return '/api/cookies'\n    }\n\n    // handlers\n\n    handleFetchSuccess = (data) => {\n        super.handleFetchSuccess(data);\n\n        if (data === null) {\n            this.setState({initializingOn: false});\n        } else {\n            // if cookies accepted, don't render them\n            const serializedObject = getSerializedObject(\n                data,\n                {\n                    nonRecursiveKeys: ['tresc', ],\n                    dateAttributes: ['dataOpublikowania'],\n                    dateTimeAttributes: ['dataOpublikowania'],\n                }\n            );\n            if (parseInt(getCookieValue(COOKIE_NAME)) === new Date(serializedObject.dataOpublikowania).getTime()) {\n                this.setState({initializingOn: false});\n            } else {\n                this.setState({\n                    initializingOn: false,\n                    showCookies: true,\n                    ciasteczka: serializedObject,\n                });\n            }\n        }\n    }\n\n    handleFetchError = (data) => {\n        // do nothing, don't render error\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({initializingOn: false});\n    }\n\n    handleFetchIncorrectStatus = (status) => {\n        this.handleFetchError(null);\n    }\n\n    handleCloseCiasteczka = (savingDate) => {\n        document.cookie = `${COOKIE_NAME}=${new Date(this.state.ciasteczka.dataOpublikowania).getTime()};path=/`;\n        this.setState({showCookies: false});\n    }\n\n    // rendering\n\n    render() {\n        if (this.state.initializingOn || !this.state.showCookies) { return null }\n        return (\n            <GridCustom noWrap fullwidth className=\" cookies-container\">\n                <DraftToComponents content={this.state.ciasteczka.tresc} />\n                <ButtonStyled\n                    onClick={this.handleCloseCiasteczka}\n                    primary\n                >\n                    <span className=\"sr-only\">Akceptuję politykę dotyczącą wykorzystania plików cookies. </span>Zamknij<span className=\"sr-only\"> pop-up.</span>\n                </ButtonStyled>\n            </GridCustom>\n        )\n    }\n}\n\n\nexport { CiasteczkaFront };\n","import React from 'react';\nimport { Image, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { splitLineByChar } from '../../../helpers';\nimport { DraftToComponents } from './DraftToComponents';\n\nclass DraftToPdf extends DraftToComponents {\n\n    // rendering\n    render() {\n        return this.renderContent()\n    }\n\n    renderBlockquote(block) {\n        return <Text key={block.key} style={styles.blockquote}>\"{this.renderSections(block)}\"</Text>\n    }\n\n    renderOrderedListItem(block, index) {\n        return <Text key={block.key} style={styles.listItem}>{index}. {this.renderSections(block)}</Text>\n    }\n\n    renderUnorderedListItem(block) {\n        return <Text key={block.key} style={styles.listItem}>- {this.renderSections(block)}</Text>\n    }\n\n    renderLink(block, data) {\n        return <Text key={block.key} style={styles.link}>{data.url}</Text>\n    }\n\n    renderImage(block, data) {\n        return (\n            <Image key={block.key} src={data.src} style={styles.image} />\n        )}\n\n    renderEmbed(block, data) {\n        return <Text key={block.key} style={styles.infoText}>Odnośnik do multimediów: <Text style={styles.link}>{data.src}</Text></Text>\n    }\n\n    renderText(block) {\n        return <View key={block.key}>{this.renderSections(block)}</View>\n    }\n\n    renderPureText(text, blockKey) {\n        return splitLineByChar(text).map((line, i) => <Text key={blockKey + i}>{line}</Text>)\n    }\n\n    renderSection(key, section) {\n        return <Text key={key} style={styles[section[1]]}>{section[0]}</Text>\n    }\n}\n\n\nconst styles = StyleSheet.create({\n    bold: {\n        fontWeight: 'bold',\n    },\n    italic: {\n        fontStyle: 'italic',\n    },\n    bolditalic: {\n        fontStyle: 'italic',\n        fontWeight: 'bold',\n    },\n    italicbold: {\n        fontStyle: 'italic',\n        fontWeight: 'bold',\n    },\n    blockquote: {\n        fontStyle: 'italic',\n        paddingLeft: 20,\n        marginVertical: 20\n    },\n    image: {\n        display: 'block',\n        position: 'relative',\n        marginVertical: 20,\n        marginHorizontal: 'auto',\n        width: 200,\n    },\n    infoText: {\n        marginVertical: 20,\n        fontStyle: 'italic',\n        fontWeight: 'bold'\n    },\n    link: {\n        fontStyle: 'normal',\n        fontWeight: 'bold',\n        textDecoration: 'underline'\n    },\n    listItem: {\n        paddingLeft: 20,\n    }\n});\n\n\nexport { DraftToPdf };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    WysiwygEditor,\n} from '../../common';\nimport { Ciasteczka } from './Ciasteczka';\n\n\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz ciasteczka';\n\n\nclass FormCiasteczka extends Ciasteczka {\n\n    // basic functions\n\n    componentDidMount() {\n        if (!this.props.editing) {\n            this.setState({initializingOn: false});\n        } else {\n            // get ciasteczka from server\n            super.componentDidMount();\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        if (data === null) {\n            this.setState({initializingOn: false, pageNotFound: true});\n        } else {\n            this.setState({\n                initializingOn: false,\n                tresc: getSerializedObject(\n                    data, {nonRecursiveKeys: ['tresc', ]}).tresc\n            });\n        }\n    }\n\n    handleChangeAttribute(name, value) {\n        this.setState(prevState => ({\n            [name]: value,\n            errors: Object.assign({}, prevState.errors, {[name]: ''}),\n        }));\n    }\n\n    handleSave() {\n        this.setState(\n            {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n            () => {\n                const [isValid, errors] = this.validate();\n                if (isValid) {\n                    // save ciasteczka on server\n                    this.xhrFetch = fetchApi(\n                        API_URLS.cookiesAdmin.path,\n                        this.firstSaving ? 'POST' : 'PUT',\n                        {},\n                        getSerializedObject(\n                            {tresc: this.state.tresc},\n                            {toServer: true, nonRecursiveKeys: ['tresc',]}\n                        ),\n                        this.handleFetchSaveSuccess,\n                        this.handleFetchSaveError,\n                        this.handleFetchSaveIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n                }\n            }\n        );\n    }\n\n    handleFetchSaveSuccess(data) {\n        this.xhrFetch = null;\n        this.setState(\n            {savingOn: false, saveBtnText: 'Zapisano'},\n            () => {\n                this.firstSaving = false;\n                this.saveMsgTimeout = setTimeout(() => {\n                    this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n                }, 5000)\n            }\n        );\n    }\n\n    handleFetchSaveError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            savingOn: false,\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            fetchSaveError: `Nie udało się zapisać ciasteczek. ${data.message}`,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        let message = '';\n        if (status === 403) {\n            message = `Nie masz uprawnień do ${this.firstSaving\n                ? 'dodawania' : 'edycji'} ciasteczek.`;\n            // update permission value in context\n            this.removePermission();\n        }\n        this.setState({\n            savingOn: false,\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            fetchSaveError: message || `Podczas zapisu ciasteczek wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    // helpers\n\n    preState(props) {\n        this.trescMaxLength = 1000;\n        this.firstSaving = true;\n    }\n\n    getAdditionalState(props) {\n        return {\n            tresc: '',\n            savingOn: false,\n            fetchSaveError: '',\n            errors: {\n                tresc: '',\n            },\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n        }\n    }\n\n    setAdditionalHandlers() {\n        this.handleSave = this.handleSave.bind(this);\n        this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n        this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n        this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n    }\n\n    validate() {\n        // clean errors\n        this.setState({errors: {}});\n\n        let isValid = true;\n        let errors = {};\n\n        // validate tresc\n        const tresc = this.state.tresc;\n        if (!validateWysiwygEditor(tresc)) {\n            errors['tresc'] = 'To pole jest wymagane.';\n            isValid = false;\n        } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n            errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n            isValid = false;\n        }\n\n        return [isValid, errors]\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps>\n                <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/ciasteczka'>Ciasteczka</Link></li>\n                <li className=\"breadcrumps__current\">{this.props.editing ? 'Edytuj' : 'Dodaj'} ciasteczka</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        const {\n            errors,\n            fetchSaveError,\n            saveBtnText,\n            savingOn,\n            tresc,\n        } = this.state;\n        const isTrescInvalid = (errors.tresc || '').length > 0;\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>{this.props.editing ? 'Edytuj' : 'Dodaj'} ciasteczka</Text>\n                <Container>\n                    <GridCustom fullwidth>\n                        <FieldWithLabel label=\"Treść\" className=\"wysiwyg-wrapper\">\n                            <WysiwygEditor\n                                disabled={savingOn}\n                                invalid={isTrescInvalid}\n                                initialContentState={tresc}\n                                localization={{ locale: 'pl' }}\n                                maxLength={this.trescMaxLength}\n                                toolbar={{options: []}}\n                                toolbarHidden\n                                onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n                            />\n                            {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom flexEnd>\n                        <ButtonStyled\n                            disabled={savingOn}\n                            save\n                            onClick={this.handleSave}\n                        >{saveBtnText}</ButtonStyled>\n                    </GridCustom>\n                    {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n                </Container>\n            </>\n        )\n    }\n}\n\nFormCiasteczka.contextType = UserContext;\n\nexport { FormCiasteczka };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars, dateToString } from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    DateCalendar,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    TextFieldCustom,\n    WysiwygEditor,\n} from '../../common';\nimport { BaseComponent } from '../common';\n\n\nconst EMPTY_KOMUNIKAT = {\n    id: null,\n    naglowek: '',\n    tresc: '',\n    czyZoltyPasek: false,\n    czyAktywny: true,\n    czyBezterminowy: true,\n    dataOpublikowania: '',\n    dataWaznosci: '',\n    slug: '',\n};\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz komunikat';\n\n\nclass FormKomunikat extends BaseComponent {\n\n    // base functions\n\n    componentDidMount() {\n        if (this.state.isNew) {\n            this.setState({initializingOn: false});\n        } else {\n            // it is editing, get object from server\n            this.fetchInitialData();\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const komunikat = getSerializedObject(\n            data,\n            {\n                nonRecursiveKeys: ['tresc'],\n                dateAttributes: ['dataOpublikowania', 'dataWaznosci'],\n                dateTimeAttributes: ['dataOpublikowania', 'dataWaznosci'],\n            }\n        ).komunikat;\n        if (!komunikat) {\n            this.setState({initializingOn: false, pageNotFound: true});\n        } else {\n            this.setState(\n                {\n                    initializingOn: false,\n                    komunikat: Object.assign(komunikat, {\n                        id: this.props.match.params.id,\n                        czyBezterminowy: komunikat.dataWaznosci === '',\n                    }),\n                },\n                () => {\n                    const urlParams = this.props.match.params;\n                    if (this.props.editing && komunikat.slug !== urlParams.slug) {\n                        // update url if slugs are not equal\n                        this.props.history.push(`/zarzadzanie-trescia/komunikaty/${urlParams.id}-${komunikat.slug}/edytuj`);\n                    }\n                }\n            );\n        }\n    }\n\n    handleChangeAttribute(name, value) {\n        let newData = {[name]: value}\n        if (name === 'czyAktywny' && !value) {\n            newData['czyZoltyPasek'] = false;\n        }\n        this.setState(prevState => ({\n            komunikat: Object.assign({}, prevState.komunikat, newData),\n            errors: Object.assign({}, prevState.errors, {[name]: ''}),\n        }));\n    }\n\n    handleClearAttributeError(name) {\n        this.setState(prevState => ({\n            errors: Object.assign({}, prevState.errors, {[name]: ''}),\n        }));\n    }\n\n    handleSave() {\n        this.setState(\n            {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n            () => {\n                const [isValid, errors] = this.validate();\n                if (isValid) {\n                    const isNew = this.state.isNew;\n                    // save object on server\n                    this.xhrFetch = fetchApi(\n                        isNew\n                            ? API_URLS.statementsAdmin.path\n                            : API_URLS.statementsAdminDetails.getUrl(\n                                this.state.komunikat.id),\n                        isNew ? 'POST' : 'PUT',\n                        {},\n                        getSerializedObject(\n                            this.state.komunikat, {toServer: true, nonRecursiveKeys: ['tresc', ]}),\n                        this.handleFetchSaveSuccess,\n                        this.handleFetchSaveError,\n                        this.handleFetchSaveIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n                }\n            }\n        );\n    }\n\n    handleFetchSaveSuccess(data) {\n        this.xhrFetchSave = null;\n\n        const komunikat = getSerializedObject(data).komunikat;\n        this.setState(prevState => ({\n                savingOn: false,\n                saveBtnText: 'Zapisano',\n                isNew: false,\n                komunikat: Object.assign({}, prevState.komunikat, komunikat),\n            }),\n            () => {\n                this.firstSaving = false;\n                const urlParams = this.props.match.params;\n                if (this.props.editing && komunikat.slug !== urlParams.slug) {\n                    // update url if slugs are not equal\n                    this.props.history.push(`/zarzadzanie-trescia/komunikaty/${urlParams.id}-${komunikat.slug}/edytuj`);\n                }\n                this.saveMsgTimeout = setTimeout(() => {\n                    this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n                }, 5000)\n            }\n        );\n    }\n\n    handleFetchSaveError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            savingOn: false,\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            fetchSaveError: `Nie udało się zapisać komunikatu. ${translateErrorMessage(data.message)}`,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        if (status === 404) {\n            this.setState({savingOn: false, pageNotFound: true});\n        } else {\n            let message = '';\n            if (status === 403) {\n                message = `Nie masz uprawnień do ${this.state.isNew\n                    ? 'dodawania' : 'edycji'} komunikatu.`;\n                // update permission value in context\n                this.removePermission();\n            }\n            this.setState({\n                savingOn: false,\n                saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n                fetchSaveError: message ||\n                    `Podczas zapisu komunikatu wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n            });\n        }\n    }\n\n    // helpers\n\n    preState(props) {\n        this.trescMaxLength = 2000;\n    }\n\n    getAdditionalState(props) {\n        return {\n            isNew: !props.editing,\n            savingOn: false,\n            komunikat: EMPTY_KOMUNIKAT,\n            fetchSaveError: '',\n            errors: {\n                tresc: '',\n            },\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n        }\n    }\n\n    setAdditionalHandlers() {\n        this.handleSave = this.handleSave.bind(this);\n        this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n        this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n        this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n    }\n\n    getFetchUrl() {\n        return API_URLS.statementsAdminDetails.getUrl(\n            this.props.match.params.id)\n    }\n\n    getFetchData() {\n        return {context: 'admin_panel'}\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać komunikatu do edycji. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania komunikatu do edycji wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.removePermission();\n    }\n\n    removePermission() {\n        this.context.removePermission('statements');\n    }\n\n    validate() {\n        let isValid = true;\n        const requiredMsg = 'To pole jest wymagane.';\n        let errors = {};\n\n        const {\n            czyBezterminowy,\n            dataWaznosci,\n            naglowek,\n            tresc,\n        } = this.state.komunikat;\n\n        // validate naglowek\n        if (!naglowek.length) {\n            errors['naglowek'] = requiredMsg;\n            isValid = false;\n        }\n\n        // validate tresc\n        if (!validateWysiwygEditor(tresc)) {\n            errors['tresc'] = requiredMsg;\n            isValid = false;\n        } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n            errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n            isValid = false;\n        }\n\n        // validate dataWaznosci\n        if (!czyBezterminowy && !dataWaznosci.length) {\n            errors['dataWaznosci'] = requiredMsg;\n            isValid = false;\n        }\n\n        return [isValid, errors]\n    }\n\n    // rendering\n\n    renderHeader() {\n        const komunikat = this.state.komunikat;\n        return (\n            <Breadcrumps>\n                <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/komunikaty'>Komunikaty</Link></li>\n                {komunikat.id !== null ? (\n                    <>\n                        <li className=\"breadcrumps__link\"><Link to={`/zarzadzanie-trescia/komunikaty/${komunikat.id}-${komunikat.slug}`}>Szczegóły komunikatu</Link></li>\n                        <li className=\"breadcrumps__current\">Edycja</li>\n                    </>\n                ) : (\n                    <li className=\"breadcrumps__current\">Dodaj komunikat</li>\n                )}\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        const {\n            errors,\n            fetchSaveError,\n            komunikat,\n            saveBtnText,\n            savingOn,\n        } = this.state;\n\n        const isTrescInvalid = (errors.tresc || '').length > 0;\n        const isNaglowekInvalid = (errors.naglowek || '').length > 0;\n        const isDataWaznosciValid = (errors.dataWaznosci || '').length > 0;\n\n        const dataWaznosciInputRef = React.createRef();\n\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>Edycja komunikatu: {komunikat.naglowek}</Text>\n                <Container>\n                    <GridCustom fullwidth>\n                        <FieldWithLabel\n                            label=\"Nagłówek\"\n                            labelFor=\"naglowek_id\"\n                            tag=\"label\"\n                        >\n                            <TextFieldCustom\n                                aria-describedby={isNaglowekInvalid ? 'naglowek_error' : null}\n                                characterCount\n                                clearFieldContext=\"nagłówek\"\n                                disabled={savingOn}\n                                id=\"naglowek_id\"\n                                invalid={isNaglowekInvalid}\n                                fullwidth\n                                maxLength={200}\n                                value={komunikat.naglowek}\n                                onClear={(ev) => this.handleChangeAttribute('naglowek', '')}\n                                onChange={(ev) => this.handleChangeAttribute('naglowek', ev.target.value)}\n                                onFocus={(ev) => this.handleClearAttributeError('naglowek')} />\n                            {isNaglowekInvalid && <Text error id=\"naglowek_error\">{errors.naglowek}</Text>}\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom fullwidth>\n                        <FieldWithLabel label=\"Treść\" className=\"wysiwyg-wrapper\">\n                            <WysiwygEditor\n                                aria-describedby={isTrescInvalid ? 'komunikat_error' : null}\n                                disabled={savingOn}\n                                invalid={isTrescInvalid}\n                                initialContentState={komunikat.tresc}\n                                localization={{ locale: 'pl' }}\n                                maxLength={this.trescMaxLength}\n                                toolbar={{options: []}}\n                                toolbarHidden\n                                onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n                            />\n                            {isTrescInvalid && <Text error id=\"komunikat_error\">{errors.tresc}</Text>}\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom fullwidth>\n                        <Checkbox\n                            checked={komunikat.czyAktywny}\n                            disabled={savingOn}\n                            label=\"Czy aktywny?\"\n                            onChange={(event) => this.handleChangeAttribute('czyAktywny', event.target.checked)}\n                        />\n                        <Checkbox\n                            disabled={savingOn}\n                            checked={komunikat.czyBezterminowy}\n                            label=\"Czy bezterminowy?\"\n                            onChange={(event) => {\n                                const checked = event.target.checked\n                                this.handleChangeAttribute('czyBezterminowy', checked);\n                                if (checked) {\n                                    this.handleChangeAttribute('dataWaznosci', '');\n                                }\n                            }}\n                        />\n                        <Checkbox\n                            checked={komunikat.czyZoltyPasek}\n                            disabled={savingOn || !komunikat.czyAktywny}\n                            label=\"Czy żółty pasek?\"\n                            onChange={(event) => this.handleChangeAttribute('czyZoltyPasek', event.target.checked)}\n                        />\n                    </GridCustom>\n                    {!komunikat.czyAktywny && <GridCustom flexEnd><Text info>Komunikat nieaktywny nie może być żółtym paskiem</Text></GridCustom>}\n                    {!komunikat.czyBezterminowy && (\n                        <FieldWithLabel label=\"Data ważności\" inputRef={dataWaznosciInputRef} className={savingOn && 'disabled'}>\n                            <DateCalendar\n                                ariaDescribedby={isDataWaznosciValid ? 'dataWaznosci_error' : null}\n                                disabled={savingOn}\n                                fullwidth\n                                invalid={isDataWaznosciValid}\n                                minDate={!komunikat.dataWaznosci ? new Date() : Date.parse(komunikat.dataWaznosci)}\n                                parentRef={dataWaznosciInputRef}\n                                value={Date.parse(komunikat.dataWaznosci)}\n                                onChange={(date) => this.handleChangeAttribute('dataWaznosci', !date ? '' : dateToString(date))}\n                            />\n                            {isDataWaznosciValid && <Text error id=\"dataWaznosci_error\">{errors.dataWaznosci}</Text>}\n                        </FieldWithLabel>\n                    )}\n                    <GridCustom flexEnd className=\" separate-container\">\n                        <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n                    </GridCustom>\n                    {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n                </Container>\n            </>\n        )\n    }\n}\n\nFormKomunikat.contextType = UserContext;\n\nexport { FormKomunikat };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { getSerializedObject } from '../../serializers';\nimport { validateWysiwygEditor } from '../../validators';\nimport { ButtonStyled, Container, GridCellCustom, GridCustom, Text, TextFieldCustom } from '../common';\nimport { BaseComponent } from './common';\nimport { DraftToComponents } from './zarzadzanieTrescia';\nimport { redirectToLoginView } from '../../helpers';\nimport { URLS } from '../../urls/frontend';\n\n\nclass LandingPage extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        // if it is preview for zarzadzanie trescia, get data from props\n        const content = this.props.content;\n        let trescPreviewId = null;\n        if (this.props.content) {\n            trescPreviewId = content.id;\n        }\n\n        let state = {initializingOn: false,};\n        const tresciOgolne = getSerializedObject(\n            data, {nonRecursiveKeys: ['tresc', ]}).tresciOgolne;\n        for (let i of [1, 2, 3]) {\n            let to = tresciOgolne.filter(to => to.placement === `homepage_box${i}`)[0];\n            if (to) {\n                if (trescPreviewId !== null && to.id === trescPreviewId) {\n                    to = content;\n                }\n            } else {\n                to = {};\n            }\n            state[`homepageBox${i}`] = to;\n        }\n        this.setState(state);\n    }\n\n    handleFetchError(data) {\n        // do nothing, don't render error\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({initializingOn: false});\n    }\n\n    handleFetchIncorrectStatus(message) {\n        this.handleFetchError({});\n    }\n\n    handleSearch = () => {\n        this.props.history.push(this.getSearchUrl(this.state.query));\n    }\n\n    handleNewsletter = () => {\n        if(this.props.user?.id !== null) {\n            this.props.history.push(URLS.newsletter.path)\n            return;\n        }\n\n        sessionStorage.setItem(\n          \"currentPathname\",\n          URLS.newsletter.path\n        );\n\n        redirectToLoginView(false);\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            homepageBox1: {},\n            homepageBox2: {},\n            homepageBox3: {},\n            query: '',\n        }\n    }\n\n    getFetchUrl() {\n        return '/api/general-content'\n    }\n\n    getSearchUrl(query) {\n        if (!query.length) {\n            return '/ogloszenia/szukaj'\n        }\n        return encodeURI(`/ogloszenia/szukaj?q=${query}`)\n    }\n\n    // rendering\n\n    renderContent() {\n        document.title = \"Baza Konkurencyjności\";\n        const {\n            homepageBox1,\n            homepageBox2,\n            homepageBox3\n        } = this.state;\n\n        const homepageBox1IsEmpty = Object.keys(homepageBox1).length === 0 || !validateWysiwygEditor(Object.keys(homepageBox1.tresc).length > 0 ? homepageBox1.tresc : '');\n        const homepageBox2IsEmpty = Object.keys(homepageBox2).length === 0 || !validateWysiwygEditor(Object.keys(homepageBox2.tresc).length > 0 ? homepageBox2.tresc : '');\n        const homepageBox3IsEmpty = Object.keys(homepageBox3).length === 0 || !validateWysiwygEditor(Object.keys(homepageBox3.tresc).length > 0 ? homepageBox3.tresc : '');\n        if (homepageBox1IsEmpty && homepageBox2IsEmpty && homepageBox3IsEmpty) {\n            return this.renderSearch()\n        }\n\n        return (\n            <>\n                {this.renderSearch()}\n                {!homepageBox1IsEmpty && this.renderTrescOgolna(homepageBox1)}\n                <GridCustom flexM fullwidth className=\" landing-page-contacts\">\n                    <GridCellCustom>\n                        {!homepageBox2IsEmpty && this.renderTrescOgolna(homepageBox2)}\n                    </GridCellCustom>\n                    <GridCellCustom fill>\n                        {!homepageBox3IsEmpty && this.renderTrescOgolna(homepageBox3)}\n                    </GridCellCustom>\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderSearch() {\n        return (\n          <Container className=\"search\">\n            <GridCustom flexL fullwidth centerVertical>\n              <form\n                onSubmit={this.handleSearch}\n                className=\"search__form\"\n                role=\"search\"\n              >\n                <label className=\"sr-only\" htmlFor=\"search_input_id\">\n                  Wyszukaj ogłoszenie\n                </label>\n                <section className=\"search__input-container\">\n                  <div className=\"search__examples\">\n                    <Text>Na przykład:</Text>\n                    <Link\n                      to={this.getSearchUrl(\"roboty budowlane\")}\n                      className=\"link-text link-text--primary\"\n                    >\n                      <span className=\"sr-only\">Sugerowana fraza: </span>roboty\n                      budowlane,\n                    </Link>\n                    <Link\n                      to={this.getSearchUrl(\"dostawa komputerów\")}\n                      className=\"link-text link-text--primary\"\n                    >\n                      <span className=\"sr-only\">Sugerowana fraza: </span>dostawa\n                      komputerów,\n                    </Link>\n                    <Link\n                      to={this.getSearchUrl(\"szkolenie pracowników\")}\n                      className=\"link-text link-text--primary\"\n                    >\n                      <span className=\"sr-only\">Sugerowana fraza: </span>\n                      szkolenie pracowników.\n                    </Link>\n                  </div>\n                  <TextFieldCustom\n                    className=\"search__input\"\n                    id=\"search_input_id\"\n                    maxLength={250}\n                    onChange={(ev) => this.setState({ query: ev.target.value })}\n                    onClear={(ev) => this.setState({ query: \"\" })}\n                    placeholder=\"Wpisz, czego szukasz\"\n                    value={this.state.query}\n                  />\n                </section>\n                <ButtonStyled\n                  onClick={this.handleSearch}\n                  primary\n                  icon=\"search\"\n                  className=\"search__btn\"\n                >\n                  Wyszukaj ogłoszenie\n                </ButtonStyled>\n                <ButtonStyled\n                  onClick={(ev) => {\n                    ev.preventDefault();\n                    this.handleNewsletter();\n                  }}\n                  lite\n                  icon=\"mail\"\n                  className=\"search__btn\"\n                >\n                  Zapisz się na newsletter ogłoszeń<span className=\"sr-only\"> Zaloguj się, aby zapisać się na newsletter</span>\n                </ButtonStyled>\n              </form>\n              <section className=\"search__secondary\">\n                {this.renderAddOgloszenieLink()}\n              </section>\n            </GridCustom>\n          </Container>\n        );\n    }\n\n    renderAddOgloszenieLink() {\n        const user = this.props.user;\n        if (!user || user.identifier === null) {\n            return (\n                <>\n                    <ButtonStyled\n                        className=\"search__btn\"\n                        icon=\"library_add\"\n                        lite\n                        noMargin\n                        onClick={this.props.onLoginClick}\n                    >\n                        Dodaj ogłoszenie<span className=\"sr-only\"> Zaloguj się, aby dodać ogłoszenie</span>\n                    </ButtonStyled>\n                    <Text className=\"search__info\">Wymaga logowania</Text>\n                </>\n            )\n        }\n        return (\n            <ButtonStyled\n                tag={Link}\n                to=\"/ogloszenia/nowe\"\n                id=\"dodaj_ogloszenie_button_id\"\n                lite\n                noMargin\n                icon=\"library_add\"\n                className=\"search__btn\">\n                Dodaj ogłoszenie\n            </ButtonStyled>\n        )\n    }\n\n    renderTrescOgolna(element) {\n        return (\n            <Container title={element.naglowek}>\n                <DraftToComponents content={element.tresc} />\n            </Container>\n        )\n    }\n}\n\n\nexport { LandingPage };\n","import React, { createContext } from 'react';\n\nimport { getLastTemporaryIdFromList, listOrEmpty } from '../helpers';\nimport {\n    getSerializedList,\n    serializeOrderItemCategories\n} from '../serializers';\nimport {\n    advertisementValidators,\n    publishedAdvertisementAdminValidators,\n    publishedAdvertisementOwnerValidators,\n    validateHarmonogramAttributes,\n    validateKryteriumOcenyAttributes,\n    validateAdvertisementBaseAttributes,\n    validatePrzedmiotZamowieniaBaseAttributes,\n    validateWarunekUdzialuAttributes,\n    validateZalacznikAttributes,\n    validateZamowienieAttributes\n} from '../validators';\n\n\nconst CLEANED_STEP_ERRORS = {\n    'przedmiot': null,\n    'terminy': null,\n    'warunki': null,\n    'czesciKryteria': null,\n    'pozostale': null,\n    'zalaczniki': null,\n};\n\nconst CLEANED_FORM_ERRORS = {\n    ogloszenie: {},\n    zamowienia: {},\n    kryteriaOceny: {},\n    przedmiotyZamowienia: {},\n    harmonogramy: {},\n    warunkiUdzialu: {},\n    zalaczniki: {},\n};\n\n\nconst AdvertisementContext = createContext({\n    // base variables\n    ogloszenie: null,\n    validationOn: false,\n    savingOn: false,\n    // errors\n    stepErrors: Object.assign({}, CLEANED_STEP_ERRORS),\n    formErrors: Object.assign({}, CLEANED_FORM_ERRORS),\n    // const from server\n    roboczeStatus: null,\n    statusyOgloszenia: {},\n    zagranicaId: null,\n    typMiejscaRealizacji: {},\n    przedmiotZamowieniaKategoria: [],   // the whole list\n    przedmiotZamowieniaKategoriaDict: {},   // dict only with types\n    przedmiotZamowieniaPodkategoriaDict: {},  // dict only with subcategories\n    typWarunku: {},\n    projekty: [],\n    nabory: [],\n    osobyDoKontaktu: [],\n    teryt: [],\n    // functions\n    setConstsFromServer: () => {},\n    setConstsFromAdvertisementData: () => {},\n    setOgloszenie: () => {},\n    saveOgloszenie: () => {},\n    updateOgloszenieBeforePublishing: () => {},\n    savePrzedmiotZamowienia: () => {},\n    removePrzedmiotZamowienia: () => {},\n    setAttributeValue: () => {},\n    savePrzedmiotZamowieniaListAttributeValue: () => {},\n    removePrzedmiotZamowieniaListAttributeValue: () => {},\n    saveHarmonogram: () => {},\n    removeHarmonogram: () => {},\n    saveWarunekUdzialu: () => {},\n    removeWarunekUdzialu: () => {},\n    addZamowienie: () => {},\n    removeZamowienie: () => {},\n    movePrzedmiotZamowienia: () => {},\n    setZamowienieAttributeValue: () => {},\n    saveKryteriumOceny: () => {},\n    removeKryteriumOceny: () => {},\n    saveZamowienieListAttributeValue: () => {},\n    removeZamowienieListAttributeValue: () => {},\n    changeProjectsSelected: () => {},\n    addZalacznik: () => {},\n    removeZalacznik: () => {},\n    setZalacznikAttributes: () => {},\n    changeFormLockedState: () => {},\n    validate:\n        (projectsSelected, isAlreadyPublished, advertisementManagerType) => {},\n    clearStepError: () => {},\n    clearPrzedmiotZamowieniaErrors: () => {},\n    clearAttributeError: () => {},\n    clearFormErrors: () => {},\n    clearState: () => {},\n});\n\n\nexport class AdvertisementProvider extends React.Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            // base variables\n            ogloszenie: null,\n            validationOn: false,\n            savingOn: false,\n            // errors\n            stepErrors: Object.assign({}, CLEANED_STEP_ERRORS),\n            formErrors: Object.assign({}, CLEANED_FORM_ERRORS),\n            // const from server\n            roboczeStatus: null,\n            statusyOgloszenia: {},\n            adresId: null,\n            zagranicaId: null,\n            typMiejscaRealizacji: {},\n            przedmiotZamowieniaKategoria: [],   // the whole list\n            przedmiotZamowieniaKategoriaDict: {},   // dict only with types\n            przedmiotZamowieniaPodkategoriaDict: {},  // dict only with subcategories\n            typWarunku: {},\n            projekty: [],\n            nabory: [],\n            osobyDoKontaktu: [],\n            teryt: [],\n            // functions\n            setConstsFromServer: this.setConstsFromServer,\n            setConstsFromAdvertisementData: this.setConstsFromAdvertisementData,\n            setOgloszenie: this.setOgloszenie,\n            saveOgloszenie: this.saveOgloszenie,\n            updateOgloszenieBeforePublishing: this.updateOgloszenieBeforePublishing,\n            savePrzedmiotZamowienia: this.savePrzedmiotZamowienia,\n            removePrzedmiotZamowienia: this.removePrzedmiotZamowienia,\n            movePrzedmiotZamowienia: this.movePrzedmiotZamowienia,\n            setAttributeValue: this.setAttributeValue,\n            savePrzedmiotZamowieniaListAttributeValue: this.savePrzedmiotZamowieniaListAttributeValue,\n            removePrzedmiotZamowieniaListAttributeValue: this.removePrzedmiotZamowieniaListAttributeValue,\n            saveHarmonogram: this.saveHarmonogram,\n            removeHarmonogram: this.removeHarmonogram,\n            saveWarunekUdzialu: this.saveWarunekUdzialu,\n            removeWarunekUdzialu: this.removeWarunekUdzialu,\n            addZamowienie: this.addZamowienie,\n            removeZamowienie: this.removeZamowienie,\n            setZamowienieAttributeValue: this.setZamowienieAttributeValue,\n            saveKryteriumOceny: this.saveKryteriumOceny,\n            removeKryteriumOceny: this.removeKryteriumOceny,\n            saveZamowienieListAttributeValue: this.saveZamowienieListAttributeValue,\n            removeZamowienieListAttributeValue: this.removeZamowienieListAttributeValue,\n            changeProjectsSelected: this.changeProjectsSelected,\n            addZalacznik: this.addZalacznik,\n            removeZalacznik: this.removeZalacznik,\n            setZalacznikAttributes: this.setZalacznikAttributes,\n            changeFormLockedState: this.changeFormLockedState,\n            validate: this.validate,\n            // clean errors\n            clearStepError: this.clearStepError,\n            clearPrzedmiotZamowieniaErrors: this.clearPrzedmiotZamowieniaErrors,\n            clearAttributeError: this.clearAttributeError,\n            clearFormErrors: this.clearFormErrors,\n            clearState: this.clearState,\n        };\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (this.state.ogloszenie !== null && window.formOgloszenie) {\n            window.formOgloszenie.computeProgress();\n        }\n    }\n\n    setConstsFromServer = (data, callback) => {\n        const [\n            przedmiotZamowieniaKategoriaDict,\n            przedmiotZamowieniaPodkategoriaDict\n        ] = serializeOrderItemCategories(data.order_item_categories);\n        this.setState(\n            {\n                roboczeStatus: data.announcement_status_draft,\n                statusyOgloszenia: data.announcement_statuses,\n                adresId: data.address_id,\n                zagranicaId: data.abroad_id,\n                typMiejscaRealizacji: data.order_fulfillment_place_types,\n                przedmiotZamowieniaKategoria: getSerializedList(data.order_item_categories),\n                przedmiotZamowieniaKategoriaDict: przedmiotZamowieniaKategoriaDict,\n                przedmiotZamowieniaPodkategoriaDict: przedmiotZamowieniaPodkategoriaDict,\n                typWarunku: data.participation_condition_types,\n                projekty: getSerializedList(data.projects),\n                nabory: getSerializedList(data.enrollment_numbers),\n                osobyDoKontaktu: getSerializedList(data.contact_persons),\n                teryt: data.teryt_data,\n            },\n            callback\n        );\n    }\n\n    setConstsFromAdvertisementData = (data, callback) => {\n        this.setState(\n            {\n                projekty: getSerializedList(data.projects || []),\n                nabory: getSerializedList(data.enrollment_numbers || []),\n                osobyDoKontaktu: getSerializedList(data.contact_persons || []),\n            },\n            callback\n        );\n    }\n\n    setOgloszenie = (data, callback=null) => {\n        let ogloszenie;\n        if (data === null) {\n            ogloszenie = {\n                ogloszenie: {\n                    id: null,\n                    status: {},\n                    numer: null,\n                    dataOpublikowania : '',\n                },\n                id: null,\n                status: {id: this.state.roboczeStatus},\n                projekty: [],\n                tytul: '',\n                zamowieniaUzupelniajace: '',\n                nabor: null,\n                warunkiZmianyUmowy: '',\n                czyDopuszczalnaOfertaCzesciowa: false,\n                dataOpublikowania: '',\n                terminOfert: '',\n                planowanyTerminPodpisaniaUmowy: '',\n                zamowienia: [],\n                osobyDoKontaktu: [],\n                zalaczniki: [],\n            }\n        } else {\n            ogloszenie = data;\n        }\n        this.setState(\n            {ogloszenie},\n            () => {if (callback) { callback() }}\n        );\n    }\n\n    saveOgloszenie = (data, callback) => {\n        if (data.ogloszenie) {\n            this.setState(\n                prevState => ({\n                    ogloszenie: Object.assign(\n                        {}, prevState.ogloszenie,\n                        {\n                            id: data.id,\n                            ogloszenie: Object.assign(\n                                {}, prevState.ogloszenie.ogloszenie, data.ogloszenie),\n                        }\n                    ),\n                }),\n                callback\n            );\n        }\n    }\n\n    updateOgloszenieBeforePublishing = (callback) => {\n        this.setState(\n            prevState => ({\n                ogloszenie: Object.assign(\n                    {}, prevState.ogloszenie, {\n                        dataOpublikowania: '',\n                        terminOfertData: '',\n                        terminOfertWithTime: false,\n                        terminOfertGodzina: '',\n                    }\n                )\n            }),\n            callback\n        );\n    }\n\n    savePrzedmiotZamowienia = (data, isNew, callback) => {\n        this.setState(\n            (prevState) => {\n                const ogloszenie = prevState.ogloszenie;\n                let zamowienia = [...ogloszenie.zamowienia];\n\n                if (isNew) {\n                    if (!zamowienia.length) {\n                        zamowienia.push({\n                            id: null,\n                            temporaryId: 1,\n                            zamowienieNode: null,\n                            przedmiotyZamowienia: [],\n                            czyWariantowe: false,\n                            kryteriaOceny: [],\n                            szacunkowaWartosc: '',\n                            tytul: '',\n                        });\n                    }\n\n                    data['harmonogramy'] = [];\n                    data['warunkiUdzialu'] = [];\n                    zamowienia[0].przedmiotyZamowienia.push(data);\n                } else {\n                    zamowienia = zamowienia.map(z => {\n                        let przedmiotyZamowienia = [];\n                        for (let pz of z.przedmiotyZamowienia) {\n                            if (pz.temporaryId === data.temporaryId) {\n                                przedmiotyZamowienia.push(Object.assign({}, pz, data));\n                            } else {\n                                przedmiotyZamowienia.push(pz);\n                            }\n                        }\n                        z.przedmiotyZamowienia = przedmiotyZamowienia;\n                        return z\n                    })\n                }\n                return {\n                    ogloszenie: Object.assign(\n                        {}, prevState.ogloszenie, {zamowienia}),\n                }\n            },\n            () => callback()\n        );\n    }\n\n    removePrzedmiotZamowienia = (temporaryId) => {\n        this.setState(\n            (prevState) => {\n                return {\n                    ogloszenie: Object.assign(\n                        {}, prevState.ogloszenie,\n                        {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n                            z.przedmiotyZamowienia = z.przedmiotyZamowienia.filter(\n                                pz => pz.temporaryId !== temporaryId);\n                            return z\n                        })}\n                    ),\n                }\n            }\n        );\n    }\n\n    movePrzedmiotZamowienia = (newZamowienieTemporaryId, temporaryId, callback) => {\n        this.setState(\n            (prevState) => {\n                const zamowienia = prevState.ogloszenie.zamowienia;\n                // get przedmiotZamowienia\n                let pz_ = null;\n                for (let z of zamowienia) {\n                    for (let pz of z.przedmiotyZamowienia) {\n                        if (pz.temporaryId === temporaryId) {\n                            pz_ = pz;\n                            break\n                        }\n                    }\n                }\n\n                if (pz_ !== null) {\n                    // remove from old zamowienie, add to new zamowienie\n                    let zamowienia_ = [];\n                    for (let z of zamowienia) {\n                        // remove\n                        z.przedmiotyZamowienia = z.przedmiotyZamowienia.filter(\n                            pz => pz.temporaryId !== temporaryId);\n                        // add\n                        if (z.temporaryId === newZamowienieTemporaryId) {\n                            z.przedmiotyZamowienia = [...z.przedmiotyZamowienia, pz_];\n                        }\n                        zamowienia_.push(z);\n                    }\n                    return {\n                        ogloszenie: Object.assign(\n                            {}, prevState.ogloszenie, {zamowienia: zamowienia_}),\n                    }\n                } else { return {} }\n\n            },\n            callback\n        );\n    }\n\n    setAttributeValue = (attributeName, value) => {\n        this.setState(prevState => ({\n            ogloszenie: Object.assign({}, prevState.ogloszenie, {[attributeName]: value})\n        }));\n    }\n\n    savePrzedmiotZamowieniaListAttributeValue = (data, isNew, attrName, callback) => {\n        const przedmiotZamowieniaTemporaryId = data['przedmiotZamowieniaTemporaryId'];\n        delete data['przedmiotZamowieniaTemporaryId'];\n        this.setState(\n            prevState => {\n                return {\n                    ogloszenie: Object.assign(\n                        {}, prevState.ogloszenie,\n                        {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n                            let przedmiotyZamowienia = [];\n                            for (let pz of z.przedmiotyZamowienia) {\n                                if (pz.temporaryId === przedmiotZamowieniaTemporaryId) {\n                                    if (isNew) {\n                                        pz[attrName] = [...pz[attrName], data];\n                                    } else {\n                                        let objects = [];\n                                        for (let o of pz[attrName]) {\n                                            if (o.temporaryId === data.temporaryId) {\n                                                o = data;\n                                            }\n                                            objects.push(o);\n                                        }\n                                        pz[attrName] = objects;\n                                    }\n                                }\n                                przedmiotyZamowienia.push(pz);\n                            }\n                            z.przedmiotyZamowienia = przedmiotyZamowienia;\n                            return z\n                        })}\n                    ),\n                }\n            },\n            callback\n        )\n    }\n\n    removePrzedmiotZamowieniaListAttributeValue = (przedmiotZamowieniaTemporaryId, temporaryId, attrName) => {\n        this.setState(\n            prevState => {\n                return {\n                    ogloszenie: Object.assign(\n                        {}, prevState.ogloszenie,\n                        {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n                            let przedmiotyZamowienia = [];\n                            for (let pz of z.przedmiotyZamowienia) {\n                                if (pz.temporaryId === przedmiotZamowieniaTemporaryId) {\n                                    pz[attrName] = pz[attrName].filter(o => o.temporaryId !== temporaryId);\n                                }\n                                przedmiotyZamowienia.push(pz);\n                            }\n                            z.przedmiotyZamowienia = przedmiotyZamowienia;\n                            return z\n                        })}\n                    ),\n                }\n            }\n        );\n    }\n\n    saveHarmonogram = (data, isNew, callback) => {\n        return this.savePrzedmiotZamowieniaListAttributeValue(\n            data, isNew, 'harmonogramy', callback);\n    }\n\n    removeHarmonogram = (przedmiotZamowieniaTemporaryId, temporaryId) => {\n        this.removePrzedmiotZamowieniaListAttributeValue(\n            przedmiotZamowieniaTemporaryId, temporaryId, 'harmonogramy');\n    }\n\n    saveWarunekUdzialu = (data, isNew, callback) => {\n        return this.savePrzedmiotZamowieniaListAttributeValue(\n            data, isNew, 'warunkiUdzialu', callback);\n    }\n\n    removeWarunekUdzialu = (przedmiotZamowieniaTemporaryId, temporaryId) => {\n        this.removePrzedmiotZamowieniaListAttributeValue(\n            przedmiotZamowieniaTemporaryId, temporaryId, 'warunkiUdzialu');\n    }\n\n    addZamowienie = () => {\n        // don't add zamowienie if oferta czesciowa is unavailable\n        if (!this.state.ogloszenie.czyDopuszczalnaOfertaCzesciowa) { return }\n        this.setState(prevState => ({\n            ogloszenie: Object.assign(\n                {}, prevState.ogloszenie,\n                {zamowienia: [...prevState.ogloszenie.zamowienia, {\n                    id: null,\n                    temporaryId: Math.max(...listOrEmpty(prevState.ogloszenie.zamowienia).map(z => z.temporaryId)) + 1,\n                    tytul: '',\n                    czyWariantowe: false,\n                    przedmiotyZamowienia: [],\n                    szacunkowaWartosc: '',\n                    kryteriaOceny: [],\n                }]}\n            ),\n        }));\n    }\n\n    removeZamowienie = (temporaryId) => {\n        this.setState(prevState => ({\n            ogloszenie: Object.assign(\n                {}, prevState.ogloszenie,\n                {zamowienia: prevState.ogloszenie.zamowienia.filter(z => z.temporaryId !== temporaryId)}\n            ),\n        }));\n    }\n\n    setZamowienieAttributeValue = (temporaryId, attrName, value) => {\n        this.setState(prevState => ({\n            ogloszenie: Object.assign(\n                {}, prevState.ogloszenie,\n                {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n                    if (z.temporaryId === temporaryId) {\n                        z[attrName] = value;\n                    }\n                    return z\n                })}\n            ),\n        }));\n    }\n\n    saveZamowienieListAttributeValue = (data, isNew, attrName, callback=null) => {\n        const zamowienieTemporaryId = data['zamowienieTemporaryId'];\n        delete data['zamowienieTemporaryId'];\n        this.setState(\n            prevState => {\n                return {\n                    ogloszenie: Object.assign(\n                        {}, prevState.ogloszenie,\n                        {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n                            if (z.temporaryId === zamowienieTemporaryId) {\n                                if (isNew) {\n                                    z[attrName] = [...z[attrName], data];\n                                } else {\n                                    let objects = [];\n                                    for (let o of z[attrName]) {\n                                        if (o.temporaryId === data.temporaryId) {\n                                            o = data;\n                                        }\n                                        objects.push(o);\n                                    }\n                                    z[attrName] = objects;\n                                }\n                            }\n                            return z\n                        })}\n                    ),\n                }\n            },\n            () => {if (callback) {callback()}}\n        )\n    }\n\n    removeZamowienieListAttributeValue = (zamowienieTemporaryId, temporaryId, attrName) => {\n        this.setState(\n            prevState => ({\n                ogloszenie: Object.assign(\n                    {}, prevState.ogloszenie,\n                    {zamowienia: prevState.ogloszenie.zamowienia.map(z => {\n                        if (z.temporaryId === zamowienieTemporaryId) {\n                            z[attrName] = z[attrName].filter(o => o.temporaryId !== temporaryId);\n                        }\n                        return z\n                    })}\n                ),\n            })\n        );\n    }\n\n    saveKryteriumOceny = (data, isNew, callback) => {\n        this.saveZamowienieListAttributeValue(\n            data, isNew, 'kryteriaOceny', callback);\n    }\n\n    removeKryteriumOceny = (zamowienieTemporaryId, temporaryId) => {\n        this.removeZamowienieListAttributeValue(\n            zamowienieTemporaryId, temporaryId, 'kryteriaOceny');\n    }\n\n    changeProjectsSelected = (checked) => {\n        this.setState(\n            prevState => ({\n                ogloszenie: {\n                    ...prevState.ogloszenie,\n                    ...(checked ? {nabor: null} : {projekty: []})\n                }\n            })\n        );\n    }\n\n    addZalacznik = (data) => {\n        data = data || {};\n        this.setState(\n            prevState => {\n                const zalaczniki = prevState.ogloszenie.zalaczniki;\n                return {\n                    ogloszenie: Object.assign(\n                        {}, prevState.ogloszenie,\n                        {zalaczniki: [...zalaczniki, {\n                            id: null,\n                            temporaryId: getLastTemporaryIdFromList(zalaczniki) + 1,\n                            nazwa: '',\n                            plik: {\n                                id: null,\n                                uri: '',\n                                nazwa: '',\n                                dataUtworzenia: '',\n                                ktoUtworzyl: {imie: '', nazwisko: ''},\n                            },\n                            plikDoWgrania: data.plikDoWgrania || null,\n                            origin: {\n                                id: prevState.ogloszenie.status.label === 'DRAFT' ? prevState.ogloszenie.id : null,\n                            }\n                        }]}\n                    ),\n                }\n            }\n        );\n    }\n\n    removeZalacznik = (temporaryId) => {\n        this.setState(\n            prevState => {\n                const o = prevState.ogloszenie;\n                return {ogloszenie: Object.assign(\n                    {}, o, {zalaczniki: o.zalaczniki.filter(z => z.temporaryId !== temporaryId)}\n                )}\n            }\n        );\n    }\n\n    setZalacznikAttributes = (temporaryId, data) => {\n        this.setState(\n            prevState => {\n                let zalaczniki = [];\n                for (let z of prevState.ogloszenie.zalaczniki) {\n                    if (z.temporaryId === temporaryId) {\n                        z = Object.assign(z, data);\n                    }\n                    zalaczniki.push(z);\n                }\n                return {ogloszenie: Object.assign({}, prevState.ogloszenie, {zalaczniki})}\n            }\n        );\n    }\n\n    changeFormLockedState = (attrName, value, callback=null) => {\n        this.setState(\n            {[attrName]: value},\n            () => {\n                if (callback) {callback()}\n            }\n        );\n    }\n\n    validate = (projectsSelected, isAlreadyPublished, advertisementManagerType) => {\n        const { ogloszenie } = this.state;\n        let [errors, stepErrors] = validateAdvertisementBaseAttributes(\n            ogloszenie,\n            projectsSelected,\n            isAlreadyPublished\n                ? (advertisementManagerType.isAuthor\n                    ? publishedAdvertisementOwnerValidators\n                    : publishedAdvertisementAdminValidators\n                )\n                : advertisementValidators\n        );\n\n        let zamowieniaErrors = {};\n        let zamowieniaStepErrors = {};\n        let kryteriaOcenyErrors = {};\n        let kryteriaOcenyStepErrors = {};\n        if (!isAlreadyPublished) {\n            // do not validate zamowienia and kryteriaOceny\n            [zamowieniaErrors, zamowieniaStepErrors] = validateZamowienieAttributes(\n                ogloszenie, isAlreadyPublished);\n\n            let kryteriaOceny = [];\n            for (let z of ogloszenie.zamowienia) {\n                kryteriaOceny = [...kryteriaOceny, ...z.kryteriaOceny];\n            }\n            [kryteriaOcenyErrors, kryteriaOcenyStepErrors] = validateKryteriumOcenyAttributes(kryteriaOceny);\n        }\n\n        let przedmiotyZamowienia = [];\n        for (let z of ogloszenie.zamowienia) {\n            przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n        }\n        const [przedmiotyZamowieniaErrors, przedmiotyZamowieniaStepErrors] = validatePrzedmiotZamowieniaBaseAttributes(\n            przedmiotyZamowienia, isAlreadyPublished);\n\n        let harmonogramy = [];\n        for (let pz of przedmiotyZamowienia) {\n            harmonogramy = [...harmonogramy, ...pz.harmonogramy];\n        }\n        const [harmonogramyErrors, harmonogramyStepErrors] = validateHarmonogramAttributes(harmonogramy);\n\n        let warunkiUdzialuErrors = {};\n        let warunkiUdzialuStepErrors = {};\n        if (!isAlreadyPublished) {\n            // do not validate warunkiUdzialu\n            let warunkiUdzialu = [];\n            for (let pz of przedmiotyZamowienia) {\n                warunkiUdzialu = [...warunkiUdzialu, ...pz.warunkiUdzialu];\n            }\n            [warunkiUdzialuErrors, warunkiUdzialuStepErrors] = validateWarunekUdzialuAttributes(warunkiUdzialu);\n        }\n\n        let zalacznikiErrors = {};\n        let zalacznikiStepErrors = {};\n        [zalacznikiErrors, zalacznikiStepErrors] = validateZalacznikAttributes(ogloszenie.zalaczniki);\n\n        const finalStepErrors = Object.assign(\n            {\n                'przedmiot': false,\n                'terminy': false,\n                'warunki': false,\n                'czesciKryteria': false,\n                'pozostale': false,\n                'zalaczniki': false,\n            }, stepErrors, zamowieniaStepErrors, kryteriaOcenyStepErrors,\n            przedmiotyZamowieniaStepErrors, harmonogramyStepErrors,\n            warunkiUdzialuStepErrors, zalacznikiStepErrors\n        );\n        this.setState({\n            stepErrors: finalStepErrors,\n            formErrors: {\n                ogloszenie: errors,\n                zamowienia: zamowieniaErrors,\n                kryteriaOceny: kryteriaOcenyErrors,\n                przedmiotyZamowienia: przedmiotyZamowieniaErrors,\n                harmonogramy: harmonogramyErrors,\n                warunkiUdzialu: warunkiUdzialuErrors,\n                zalaczniki: zalacznikiErrors,\n            },\n        });\n\n        // return if is valid\n        return Object.values(finalStepErrors).filter(e => e === true).length === 0\n    }\n\n    clearStepError = (stepName) => {\n        this.setState((prevState) => {\n            let errors = Object.assign({}, prevState.stepErrors);\n            errors[stepName] = null;\n            return {stepErrors: errors}\n        })\n    }\n\n    clearPrzedmiotZamowieniaErrors = (temporaryId, callback) => {\n        if (this.state.formErrors.przedmiotyZamowienia[temporaryId]) {\n            this.setState(\n                prevState => {\n                    let errors = Object.assign({}, prevState.formErrors.przedmiotyZamowienia);\n                    delete errors[temporaryId];\n                    return {formErrors: Object.assign({}, prevState.formErrors, {przedmiotZamowienia: errors})}\n                },\n                () => callback()\n            )\n        } else {\n            callback();\n        }\n    }\n\n    clearAttributeError = (errorName, temporaryId, attrName) => {\n        if (this.state.formErrors[errorName][temporaryId] && this.state.formErrors[errorName][temporaryId][attrName]) {\n            this.setState((prevState) => {\n                let errors = Object.assign({}, prevState.formErrors[errorName]);\n                delete errors[temporaryId][attrName];\n                return {formErrors: Object.assign({}, prevState.formErrors, {[errorName]: errors})}\n            });\n        }\n    }\n\n    clearFormErrors = () => {\n        this.setState({\n            stepErrors: CLEANED_STEP_ERRORS,\n            formErrors: CLEANED_FORM_ERRORS\n        });\n    }\n\n    clearState = (callback=null) => {\n        this.setState(\n            {\n                // base variables\n                ogloszenie: null,\n                validationOn: false,\n                savingOn: false,\n                // errors\n                stepErrors: Object.assign({}, CLEANED_STEP_ERRORS),\n                formErrors: Object.assign({}, CLEANED_FORM_ERRORS),\n                // const from server\n                roboczeStatus: null,\n                statusyOgloszenia: {},\n                adresId: null,\n                zagranicaId: null,\n                typMiejscaRealizacji: {},\n                przedmiotZamowieniaKategoria: [],   // the whole list\n                przedmiotZamowieniaKategoriaDict: {},   // dict only with types\n                przedmiotZamowieniaPodkategoriaDict: {},  // dict only with subcategories\n                typWarunku: {},\n                projekty: [],\n                nabory: [],\n                osobyDoKontaktu: [],\n                teryt: [],\n            },\n            () => {\n                if (callback) { callback() }\n            }\n        );\n    }\n\n    render() {\n        return (\n            <AdvertisementContext.Provider value={this.state}>\n                {this.props.children}\n            </AdvertisementContext.Provider>\n        );\n    }\n}\n\n\nexport const AdvertisementConsumer = AdvertisementContext.Consumer;\nexport { AdvertisementContext };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { Radio } from '@rmwc/radio';\nimport '@material/checkbox/dist/mdc.checkbox.css';\nimport '@material/radio/dist/mdc.radio.css';\n\nimport { fetchApi } from '../../../fetch';\nimport { dateStringToYearMonth, datetimeToString, dateToString,\n         fillWithLeadingZero } from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { customSelectStyles } from '../../vars/vars';\nimport {\n    ButtonStyled,\n    DateCalendar,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Message,\n    Select,\n    Text,\n} from '../../common';\n\n\nconst EMPTY_VALUE = {\n    value: null,\n    label: '--- Wybierz ---',\n};\n\n\nclass FormPublikowanie extends Component {\n\n    constructor(props) {\n        super(props);\n\n        const o = props.formOgloszenie.context.ogloszenie;\n        this.planowanyTerminPodpisaniaUmowy = o.planowanyTerminPodpisaniaUmowy;\n\n        this.state ={\n            initializingOn: true,\n            savingOn: false,\n            publishImmediately: props.formOgloszenie.isAlreadyPublished || o.dataOpublikowania === '',\n            dataOpublikowania: o.dataOpublikowania,\n            terminOfertData: '',\n            terminOfertWithTime: false,\n            terminOfertGodzina: EMPTY_VALUE,\n            error: '',\n            formErrors: {},\n            dialogPublishClassName: null,\n        };\n\n        this.xhrFetch = null;\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        const formOgloszenie = this.props.formOgloszenie;\n        if (formOgloszenie.handleValidate()) {\n            formOgloszenie.handleSave(\n                null,\n                this.handleFetchSaveSuccess,\n                this.handleFetchSaveError,\n                this.handleFetchSaveIncorrectStatus,\n            );\n        } else {\n            this.setState({\n                initializingOn: false,\n                error: 'Ogłoszenie zawiera błędy. Po ich poprawieniu spróbuj opublikować ogłoszenie jeszcze raz.',\n            });\n        }\n    }\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n    }\n\n    // handlers\n\n    handleFetchSaveSuccess = (data) => {\n        const formOgloszenie = this.props.formOgloszenie;\n        formOgloszenie.handleFetchSaveSuccess(\n            data,\n            () => {\n                formOgloszenie.context.updateOgloszenieBeforePublishing(\n                    () => this.setState({\n                        initializingOn: false,\n                        dataOpublikowania: '',\n                    })\n                );\n            }\n        );\n    }\n\n    setError = (message) => {\n        this.setState({initializingOn: false, error: message});\n    }\n\n    handleFetchSaveError = (data) => {\n        this.setError(\n            'Podczas próby opublikowania ogłoszenia wystąpił nieoczekiwany błąd.');\n    }\n\n    handleFetchSaveIncorrectStatus = (status) => {\n        this.setError(\n            `Podczas próby opublikowania ogłoszenia wystąpił nieoczekiwany błąd o kodzie ${status}.`);\n    }\n\n    handleCloseDialog = () => {\n        this.props.formOgloszenie.setState({publishingOn: false})\n    }\n\n    handleChangePublikujOdRazu = (event) => {\n        const publikujOdRazu = event.currentTarget.value === 'true';\n        let data = {publishImmediately: publikujOdRazu};\n        if (publikujOdRazu) {\n            data['dataOpublikowania'] = '';\n        }\n        this.setState(data);\n    }\n\n    handleChangeTerminOfertData = (date) => {\n        let data = {terminOfertData: !date ? '' : dateToString(date)};\n        if (!date) {\n            data['terminOfertGodzina'] = '';\n            data['terminOfertWithTime'] = false;\n        }\n        this.setState(\n            prevState => {\n                data['formErrors'] = Object.assign({}, prevState.formErrors, {terminOfertGodzina: '', terminOfertData: ''});\n                return data\n            }\n        );\n    }\n\n    handleChangeTerminOfertWithTime = (ev) => {\n        const isChecked = ev.target.checked;\n        let data = {terminOfertWithTime: isChecked};\n        if (!isChecked) {\n            data['terminOfertGodzina'] = EMPTY_VALUE;\n        }\n        this.setState(data);\n    }\n\n    handleCalendarOpen = () => {\n        this.setState({ dialogPublishClassName: 'dialog--publish'})\n    }\n\n    handleCalendarClose = () => {\n        this.setState({ dialogPublishClassName: null })\n    }\n\n    handlePublish = () => {\n        this.setState(\n            {savingOn: true},\n            () => {\n                const [isValid, errors] = this.validate();\n                if (isValid) {\n                    this.xhrFetch = fetchApi(\n                        `/api/announcements/${this.props.formOgloszenie.context.ogloszenie.ogloszenie.id}/publish`,\n                        'POST',\n                        {},\n                        getSerializedObject(this.getData(), {toServer: true}),\n                        this.handleFetchPublishSuccess,\n                        this.handleFetchPublishError,\n                        this.handleFetchPublishIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, formErrors: errors});\n                }\n            }\n        );\n    }\n\n    handleFetchPublishSuccess = (data) => {\n        this.xhrFetch = null;\n        this.props.formOgloszenie.setPublishingSuccessInfo(\n            !this.state.dataOpublikowania\n                ? 'Ogłoszenie zostało pomyślnie opublikowane.'\n                :'Ogłoszenie zostało zapisane z przyszłą datą publikacji.'\n        );\n    }\n\n    handleFetchPublishError = (data) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            error: `Podczas próby opublikowania ogłoszenia wystąpił błąd. ${translateErrorMessage(data.message)} Dane ogłoszenia zostały zachowane w kopii roboczej.`,\n            savingOn: false,\n        });\n    }\n\n    handleFetchPublishIncorrectStatus = (status) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            error: `Podczas próby opublikowania ogłoszenia wystąpił nieoczekiwany błąd o kodzie ${status}. Dane ogłoszenia zostały zachowane w kopii roboczej.`,\n            savingOn: false,\n        });\n    }\n\n    // helpers\n\n    validate() {\n        const {\n            dataOpublikowania,\n            publishImmediately,\n            terminOfertGodzina,\n            terminOfertData,\n            terminOfertWithTime,\n        } = this.state;\n\n        let isValid = true;\n        let errors = {};\n\n        if (!publishImmediately && !dataOpublikowania) {\n            isValid = false;\n            errors['dataOpublikowania'] = 'To pole jest wymagane.';\n        }\n\n        const today = dateToString(new Date());\n\n        if (dataOpublikowania && dataOpublikowania <= today) {\n            isValid = false;\n            errors['dataOpublikowania'] = 'Data publikacji musi być późniejsza niż dziś.';\n        }\n        if (!terminOfertData) {\n            isValid = false;\n            errors['terminOfertData'] = 'To pole jest wymagane.';\n        } else {\n            if (terminOfertWithTime && terminOfertGodzina.value === null) {\n                isValid = false;\n                errors['terminOfertGodzina'] = 'To pole jest wymagane.';\n            }\n\n            if (this.planowanyTerminPodpisaniaUmowy && dateStringToYearMonth(this.planowanyTerminPodpisaniaUmowy) < dateStringToYearMonth(terminOfertData)) {\n                isValid = false;\n                errors['terminOfertData'] = 'Planowany termin podpisania umowy nie może być wcześniejszy niż miesiąc i rok wskazane w terminie ofert. Wróć do formularza ogłoszenia i zamień planowany termin podpisania umowy w sekcji Terminy.';\n            } else if (dataOpublikowania && terminOfertData <= dataOpublikowania) {\n                isValid = false;\n                errors['terminOfertData'] = 'Termin składania ofert musi być późniejszy niż data opublikowania.';\n            } else if (terminOfertData <= today) {\n                isValid = false;\n                errors['terminOfertData'] = 'Termin składania ofert musi być późniejszy niż dziś.';\n            }\n        }\n\n        return [isValid, errors]\n    }\n\n    getTomorrow() {\n        return new Date(new Date().getTime() + 24 * 60 * 60 * 1000)\n    }\n\n    getData() {\n        const {\n            dataOpublikowania,\n            terminOfertGodzina,\n            terminOfertData,\n            terminOfertWithTime\n        } = this.state;\n\n        let terminOfert_;\n        if (terminOfertWithTime) {\n            terminOfert_ = `${datetimeToString(new Date(new Date(terminOfertData).setHours(terminOfertGodzina.value || 0)))}:00`;\n        } else {\n            terminOfert_ = `${terminOfertData} 23:59:59`;\n        }\n\n        return {\n            id: this.props.formOgloszenie.context.ogloszenie.id,\n            dataOpublikowania: dataOpublikowania,\n            terminOfert: terminOfert_,\n        }\n    }\n\n    // rendering\n\n    render() {\n        let content = null;\n        if (this.state.initializingOn) {\n            content = <Text info tabIndex=\"1\">Trwa sprawdzanie danych do opublikowania ogłoszenia...</Text>;\n        } else {\n            content = (\n                this.state.error.length > 0 ? this.renderError() : this.renderForm()\n            );\n        }\n        return (\n            <DialogCustom\n                onClose={this.handleCloseDialog}\n            >\n                {content}\n            </DialogCustom>\n        )\n    }\n\n    renderError() {\n        return (\n            <>\n                <Message\n                    error\n                    messageIcon=\"clear\"\n                    messageTitle={this.state.error} />\n                <GridCustom flexEnd>\n                    <ButtonStyled onClick={this.handleCloseDialog} primary>OK</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderForm() {\n        const {\n            dataOpublikowania,\n            publishImmediately,\n            savingOn,\n            terminOfertGodzina,\n            terminOfertData,\n            terminOfertWithTime,\n        } = this.state;\n\n        const terminOfertDataError = this.state.formErrors.terminOfertData || '';\n        const isTerminOfertDataInvalid = terminOfertDataError.length > 0;\n        const terminOfertGodzinaError = this.state.formErrors.terminOfertGodzina || '';\n        const isTerminOfertGodzinaInvalid = terminOfertGodzinaError.length > 0;\n        let terminSkladaniaOfertAriDescribedby1 = null;\n        let terminSkladaniaOfertAriDescribedby2 = null;\n        let terminSkladaniaOfertAriDescribedby = null;\n\n        terminSkladaniaOfertAriDescribedby1 = !['', null].includes(terminOfertData) && 'terminOfertData_id';\n        terminSkladaniaOfertAriDescribedby2 = isTerminOfertDataInvalid && 'terminOfertData_error';\n        terminSkladaniaOfertAriDescribedby = (terminSkladaniaOfertAriDescribedby1 && terminSkladaniaOfertAriDescribedby2) ? `${terminSkladaniaOfertAriDescribedby1} ${terminSkladaniaOfertAriDescribedby2}` : (terminSkladaniaOfertAriDescribedby1 || terminSkladaniaOfertAriDescribedby2)\n\n        const terminOfertInputRef = React.createRef();\n        return (\n            <div className={this.state.dialogPublishClassName}>\n                {this.renderWhenPublishPart()}\n                {!publishImmediately && this.renderPublicationDateField()}\n                <GridCustom flexS fullwidth className=\" date-time-picker\">\n                    <FieldWithLabel\n                        className={savingOn && 'disabled'}\n                        inputRef={terminOfertInputRef}\n                        label=\"Termin składania ofert\"\n                        tag=\"label\">\n                        <DateCalendar\n                            ariaDescribedby={terminSkladaniaOfertAriDescribedby}\n                            disabled={savingOn}\n                            fullwidth\n                            invalid={isTerminOfertDataInvalid}\n                            minDate={!dataOpublikowania ? this.getTomorrow() : Date.parse(dataOpublikowania)}\n                            parentRef={terminOfertInputRef}\n                            value={Date.parse(terminOfertData)}\n                            onChange={this.handleChangeTerminOfertData}\n                            onCalendarOpen={this.handleCalendarOpen}\n                            onCalendarClose={this.handleCalendarClose}\n                        />\n                        {isTerminOfertDataInvalid && <Text error id=\"terminOfertData_error\">{terminOfertDataError}</Text>}\n                    </FieldWithLabel>\n                    <section>\n                        <Checkbox\n                            disabled={savingOn || !terminOfertData}\n                            label=\"Wskaż konkretną godzinę\"\n                            checked={terminOfertWithTime}\n                            onChange={this.handleChangeTerminOfertWithTime}\n                            className=\"date-time-picker__checkbox\"\n                        />\n                        <Select\n                            aria-label={`Godzina ${isTerminOfertGodzinaInvalid ? terminOfertGodzinaError: ''}`}\n                            className={isTerminOfertGodzinaInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n                            isDisabled={savingOn || !terminOfertData || !terminOfertWithTime}\n                            options={[EMPTY_VALUE, ].concat([...Array(24).keys()].map(h => {\n                                return {value: h, label: `${fillWithLeadingZero(h)}:00`}\n                            }))}\n                            placeholder=\"--- Wybierz ---\"\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            value={terminOfertGodzina}\n                            onChange={(selectedOption) => this.setState({terminOfertGodzina: selectedOption})}\n                            styles={customSelectStyles}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                        />\n                        {isTerminOfertGodzinaInvalid && <Text error>{terminOfertGodzinaError}</Text>}\n                    </section>\n                </GridCustom>\n                {!['', null].includes(terminOfertData) && <Text info id=\"terminOfertData_id\">Konieczne jest zachowanie zgodnego z Wytycznymi, minimalnego okresu między publikacją ogłoszenia a terminem składania ofert. Uwaga! Jeżeli koniec wyznaczonego terminu przypada na sobotę lub dzień ustawowo wolny od pracy, w Bazie należy zaznaczyć dzień następujący po dniu lub dniach wolnych od pracy.</Text>}\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled disabled={savingOn} onClick={this.handleCloseDialog} cancel>Wróć do edycji</ButtonStyled>\n                    <ButtonStyled disabled={savingOn} onClick={this.handlePublish} save>Potwierdź publikację</ButtonStyled>\n                </GridCustom>\n            </div>\n        )\n    }\n\n    renderWhenPublishPart() {\n        const {publishImmediately, savingOn} = this.state;\n        const isAlreadyPublished = this.props.formOgloszenie.isAlreadyPublished;\n\n        return (\n            <fieldset>\n                <Text tag=\"legend\" className=\"label\">Kiedy chcesz opublikować ogłoszenie:</Text>\n                <Radio\n                    disabled={isAlreadyPublished || savingOn}\n                    value={true}\n                    name=\"publishImmediatelyRadioGroup\"\n                    checked={publishImmediately === true}\n                    onChange={this.handleChangePublikujOdRazu}\n                    label=\"Publikuj od razu\"\n                    id=\"radio_publish_id\"\n                />\n                <Radio\n                    disabled={isAlreadyPublished || savingOn}\n                    value={false}\n                    name=\"publishImmediatelyRadioGroup\"\n                    checked={publishImmediately === false}\n                    onChange={this.handleChangePublikujOdRazu}\n                    label=\"Publikuj później\"\n                />\n                {isAlreadyPublished && <Text className=\"success-text\">To ogłoszenie zostało już wcześniej opublikowane, w związku z tym nowa wersja zostanie opublikowana natychmiastowo.</Text>}\n            </fieldset>\n        )\n    }\n\n    renderPublicationDateField() {\n        const error = this.state.formErrors.dataOpublikowania || '';\n        const isInvalid = error.length > 0;\n        const dataOpublikowaniaInputRef = React.createRef();\n        return (\n            <FieldWithLabel label=\"Data publikacji\" inputRef={dataOpublikowaniaInputRef} className={this.state.savingOn && 'disabled'}>\n                <DateCalendar\n                    ariaDescribedby={isInvalid ? 'dataOpublikowania_error' : null}\n                    disabled={this.state.savingOn}\n                    fullwidth\n                    invalid={isInvalid}\n                    minDate={this.getTomorrow()}\n                    parentRef={dataOpublikowaniaInputRef}\n                    value={Date.parse(this.state.dataOpublikowania)}\n                    onChange={(date) => this.setState({dataOpublikowania: dateToString(date)})} />\n                {isInvalid && <Text error id=\"dataOpublikowania_error\">{error}</Text>}\n            </FieldWithLabel>\n        )\n    }\n}\n\n\nexport { FormPublikowanie };\n","import React, { useContext } from 'react';\n\nimport { UserContext } from '../../../context/user-context';\nimport { InfoTextWithIcon } from '../../common';\n\n\nconst AlreadyPublishedInfo = ({info}) => {\n    const { user } = useContext(UserContext);\n\n    return <InfoTextWithIcon message={info || (\n        user.advertisementManagerType.isAdmin\n            ? 'Edytujesz opublikowane ogłoszenie jako pracownik instytucji.'\n            : 'To ogłoszenie zostało już opublikowane i nie ma możliwości ' +\n              'zmiany niektórych pól.'\n\n    )} />\n}\n\nexport { AlreadyPublishedInfo };\n","import { Component } from 'react';\n\n\nclass BaseStepComponent extends Component {\n    stepName = '';\n\n    // basic functions\n\n    componentDidMount() {\n        if (!this.props.isPreview) {\n            window.scrollTo(0, 0);\n        }\n\n        // clear step error in menu\n        this.context.clearStepError(this.stepName);\n\n        if (window.formOgloszenie) {\n            window.formOgloszenie.computeProgress();\n        }\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (window.formOgloszenie) {\n            window.formOgloszenie.computeProgress();\n        }\n    }\n}\n\n\nexport { BaseStepComponent }\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { ButtonStyled, DialogCustom, GridCustom, FieldWithLabel, Text, TextFieldCustom } from '../../common';\n\n\nclass FormKryteriumOceny extends Component{\n\n    constructor(props) {\n        super(props);\n\n        if (props.isNew) {\n            this.state = Object.assign({}, props.kryteriumOceny, {\n                czyKryteriumCenowe: false,\n                opis: '',\n            });\n        } else {\n            this.state = Object.assign({}, props.kryteriumOceny);\n        }\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        window.formOgloszenie.computeProgress();\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (window.formOgloszenie) {\n            window.formOgloszenie.computeProgress();\n        }\n    }\n\n    // handlers\n\n    handleSave = () => {\n        const {isNew, kryteriumOceny} = this.props;\n\n        this.props.onSave({\n            id: isNew ? null : kryteriumOceny.id,\n            temporaryId: kryteriumOceny.temporaryId,\n            zamowienieTemporaryId: this.props.zamowienieTemporaryId,\n            czyKryteriumCenowe: this.state.czyKryteriumCenowe,\n            opis: this.state.opis.trim(),\n        }, isNew);\n    }\n\n    handleCloseDialog = () => {\n        this.props.onCloseForm();\n    }\n\n    // rendering\n\n    render() {\n        return (\n            <DialogCustom \n                className=\"dialog\"\n                dialogTitle=\"Dodaj kryterium oceny\"\n                onClose={this.handleCloseDialog}\n            >\n                <>\n                    <Checkbox\n                        label=\"Czy kryterium cenowe?\"\n                        checked={this.state.czyKryteriumCenowe}\n                        onChange={(event) => this.setState({czyKryteriumCenowe: event.target.checked})}\n                    />\n                    <AdvertisementConsumer>\n                        {({formErrors}) => {\n                            const temporaryId = this.props.kryteriumOceny.temporaryId;\n                            const errors = formErrors.kryteriaOceny[temporaryId] || {};\n                            return (\n                                <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor=\"kryteriumOceny_opis_id\">\n                                    <TextFieldCustom\n                                        aria-describedby={(errors.opis || '').length > 0 ? 'kryteriumOceny_opis_error' : null}\n                                        clearFieldContext=\"opis\"\n                                        textarea\n                                        invalid={(errors.opis || '').length > 0}\n                                        fullwidth\n                                        maxLength={300}\n                                        aria-valuemax={300}\n                                        characterCount\n                                        value={this.state.opis}\n                                        onChange={(event) => this.setState({opis: event.target.value})}\n                                        onClear={(ev) => this.setState({opis: ''})}\n                                        id=\"kryteriumOceny_opis_id\"\n                                        aria-label={`Opis, maksymalna liczba znaków: 300. Wpisano ${this.state.opis.length} znaków.`} />\n                                    {(errors.opis || '').length > 0 && <Text error id=\"kryteriumOceny_opis_error\" role=\"alert\">{errors.opis}</Text>}\n                                </FieldWithLabel>\n                            )\n                        }}\n                    </AdvertisementConsumer>\n                    <GridCustom flexEnd>\n                        <ButtonStyled onClick={this.handleCloseDialog} cancel>Anuluj</ButtonStyled>\n                        <ButtonStyled onClick={this.handleSave} save>{this.props.isNew ? 'Dodaj' : 'Zapisz zmiany'}</ButtonStyled>\n                    </GridCustom>\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\n\nexport { FormKryteriumOceny };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { Icon } from '@rmwc/icon';\nimport { Draggable, Droppable } from 'react-simple-drag-n-drop';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { listOrEmpty, roundStringTo } from '../../../helpers';\nimport {\n    Box,\n    ButtonStyled,\n    Container,\n    DialogCustom,\n    Ellipsis,\n    GridCustom,\n    FieldWithLabel,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { FormKryteriumOceny } from './FormKryteriumOceny';\n\n\nclass Zamowienie extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            newKryteriumOcenyOn: false,\n            editingKryteriumOCenyId: null,\n            isRemoving: false,\n            szacunkowaWartosc: props.zamowienie.szacunkowaWartosc || '',\n        };\n    }\n\n    // handlers\n\n    handleMovePrzedmiotZamowieniaFromList(zamowienieTemporaryId, przedmiotZamowieniaTemporaryId) {\n        this.props.saveDraggedTemporaryId(przedmiotZamowieniaTemporaryId).then(\n            () => this.props.onMovePrzedmiotZamowienia(zamowienieTemporaryId));\n    }\n\n    handleCloseForm = () => {\n        this.setState(\n            {\n                newKryteriumOcenyOn: false,\n                editingKryteriumOCenyId: null,\n            },\n            () => {\n                if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n            }\n        );\n    }\n\n    handleSaveKryteriumOceny = (data, isNew) => {\n        const z = this.props.zamowienie;\n        if (isNew && !z.kryteriaOceny.length) {\n            this.context.clearAttributeError('zamowienia', z.temporaryId, 'kryteriumOceny');\n        }\n        this.props.onSaveKryteriumOceny(data, isNew, this.handleCloseForm);\n    }\n\n    handleChangeSzacunkowaWartosc = (ev) => {\n        let value = ev.target.value;\n        this.setState(\n            prevState => {\n                if (value.indexOf(',') === -1 && value.length > 24) {\n                    value = prevState.szacunkowaWartosc;\n                }\n                return {szacunkowaWartosc: value}\n            },\n            () => this.props.onSetZamowienieAttribute(\n                this.props.zamowienie.temporaryId, 'szacunkowaWartosc', value)\n        );\n    }\n\n    handleBlurSzacunkowaWartosc = (ev) => {\n        let value = roundStringTo(ev.target.value);\n        this.setState(\n            {szacunkowaWartosc: value},\n            () => this.props.onSetZamowienieAttribute(\n                this.props.zamowienie.temporaryId, 'szacunkowaWartosc', value)\n        );\n    }\n\n    handleSzacunkowaWartoscKeyPress = (ev) => {\n        const szacunkowaWartosc = this.state.szacunkowaWartosc;\n        const szacunkowaWartoscLenth = szacunkowaWartosc.length;\n        const key = ev.key;\n        const keyIndex = ev.target.selectionStart;\n        if (!/[\\d,]/.test(key)) {\n            ev.preventDefault();\n            return\n        }\n        if (key === ',') {\n            if (szacunkowaWartosc.indexOf(',') > -1 || szacunkowaWartoscLenth === 0) {\n                ev.preventDefault();\n                return\n            }\n            if (keyIndex < szacunkowaWartoscLenth - 2) {\n                ev.preventDefault();\n                return\n            }\n        } else {\n            // it's digit\n\n            const comaIndex = szacunkowaWartosc.indexOf(',');\n\n            if (comaIndex === -1 && szacunkowaWartoscLenth === 24) {\n                ev.preventDefault();\n                return\n            }\n\n            if (comaIndex === 24 && keyIndex <= 24) {\n                ev.preventDefault();\n                return\n            }\n\n            if (comaIndex > -1 && szacunkowaWartoscLenth === comaIndex + 3 && keyIndex > comaIndex) {\n                ev.preventDefault();\n            }\n        }\n    }\n\n    handleSzacunkowaWartoscPaste = (ev) => {\n        // stop data actually being pasted into input\n        ev.preventDefault();\n        // set pasted data via clipboard API\n        const clipboardData = ev.clipboardData || window.clipboardData;\n        const pastedData = clipboardData.getData('Text');\n        if (/^\\d{1,24}(,\\d{2})?$/.test(pastedData)) {\n            this.setState({szacunkowaWartosc: pastedData});\n        }\n    }\n\n    handleCloseRemoveZamowienieDialog = () => {\n        this.setState({isRemoving: false});\n    }\n\n    // rendering\n\n    render() {\n        // const from props\n        const { isAlreadyPublished, formLocked, onSetZamowienieAttribute } = this.props;\n        const { czyWariantowe, kryteriaOceny, przedmiotyZamowienia, temporaryId, tytul } = this.props.zamowienie;\n        const kryteriaOceny_ = listOrEmpty(kryteriaOceny);\n        const czyWariantowe_ = czyWariantowe || false;\n        const tytul_ = tytul || '';\n\n        // const from context\n        const clearAttributeError = this.context.clearAttributeError;\n        const errors = this.context.formErrors.zamowienia[temporaryId] || {};\n\n        const isInvalidTytul = (errors.tytul || '').length > 0;\n        const tytulId = `title_id_${temporaryId}`;\n\n        const isSzacunkowaWartoscInvalid = (errors.szacunkowaWartosc || '').length > 0\n        const szacunkowaWartoscId = `szacunkowaWartosc_id_${temporaryId}`;\n\n        return (\n            <Droppable onDropCallback={() => (isAlreadyPublished || formLocked) ? {} : this.props.onMovePrzedmiotZamowienia(temporaryId)}>\n                <Container key={temporaryId}>\n                    <GridCustom fullwidth>\n                        <Text tag=\"h2\" accentHeader>Część {this.props.index}</Text>\n                        {this.renderRemoveZamowienie()}\n                    </GridCustom>\n                    <FieldWithLabel label=\"Tytuł\" tag=\"label\" labelFor={tytulId}>\n                        <TextFieldCustom\n                            aria-describedby={isInvalidTytul ? 'tytul_error' : null}\n                            aria-label={`Tytuł, maksymalna liczba znaków: 60. Wpisano ${tytul_.length} znaków.`}\n                            aria-required={true}\n                            aria-valuemax={60}\n                            clearFieldContext=\"tytuł\"\n                            characterCount\n                            disabled={isAlreadyPublished || formLocked}\n                            fullwidth\n                            id={tytulId}\n                            invalid={isInvalidTytul}\n                            maxLength={60}\n                            value={tytul_ || ''}\n                            onChange={ev => onSetZamowienieAttribute(\n                                temporaryId, 'tytul', ev.target.value\n                            )}\n                            onClear={ev => onSetZamowienieAttribute(\n                                temporaryId, 'tytul', ''\n                            )} />\n                        {isInvalidTytul && <Text error id=\"tytul_error\">{errors.tytul}</Text>}\n                    </FieldWithLabel>\n                    <Checkbox\n                        className=\"checkbox checkbox--inside\"\n                        disabled={isAlreadyPublished || formLocked}\n                        label=\"Czy dopuszczalne oferty wariantowe?\"\n                        checked={czyWariantowe_}\n                        onChange={ev => onSetZamowienieAttribute(\n                            temporaryId, 'czyWariantowe', ev.target.checked\n                        )}\n                    />\n\n                    <Text tag=\"h2\" sectionHeader>Przedmioty zamówienia</Text>\n                    <Text info>Liczba wyników: {przedmiotyZamowienia.length}</Text>\n                    <ul>\n                        {przedmiotyZamowienia.map((pz) => this.renderPrzedmiotZamowienia(pz))}\n                    </ul>\n                    {(errors.przedmiotyZamowienia || '').length > 0 && <Text error>{errors.przedmiotyZamowienia}</Text>}\n\n                    <FieldWithLabel label=\"Budżet\" tag=\"label\" labelFor={szacunkowaWartoscId}>\n                        <TextFieldCustom\n                            aria-describedby={`szacunkowaWartosc_descr${isSzacunkowaWartoscInvalid ? ' szacunkowaWartosc_error' : ''}`}\n                            aria-valuemax={27}\n                            clearFieldContext=\"budżet\"\n                            characterCount\n                            disabled={formLocked}\n                            fullwidth\n                            id={szacunkowaWartoscId}\n                            invalid={isSzacunkowaWartoscInvalid}\n                            maxLength={27}\n                            value={this.state.szacunkowaWartosc || ''}\n                            onBlur={this.handleBlurSzacunkowaWartosc}\n                            onFocus={(ev) => clearAttributeError('zamowienia', temporaryId, 'szacunkowaWartosc')}\n                            onChange={this.handleChangeSzacunkowaWartosc}\n                            onClear={(ev) => this.setState({szacunkowaWartosc: ''}, () => {\n                                onSetZamowienieAttribute(temporaryId, 'szacunkowaWartosc', '')\n                            })}\n                            onKeyPress={this.handleSzacunkowaWartoscKeyPress}\n                            onPaste={this.handleSzacunkowaWartoscPaste}\n                        />\n                        {isSzacunkowaWartoscInvalid && <Text error id=\"szacunkowaWartosc_error\">{errors.szacunkowaWartosc}</Text>}\n                        <Text info id=\"szacunkowaWartosc_descr\">Wpisz wartość zgodnie ze wzorem: 1000000,00</Text>\n                    </FieldWithLabel>\n\n                    <FieldWithLabel label=\"Kryteria oceny\">\n                        <Text info>Liczba kryteriów oceny: {kryteriaOceny_.length}</Text>\n                        <GridCustom tag=\"ul\">\n                            {kryteriaOceny_.map(ko => this.renderKryteriumOceny(ko))}\n                        </GridCustom>\n                        {(errors.kryteriaOceny || '').length > 0 && <Text error><span className=\"sr-only\">Kryteria oceny - </span> {errors.kryteriaOceny}</Text>}\n                    </FieldWithLabel>\n                    {this.renderKryteriumOcenyForm()}\n                    {this.renderNewKryteriumOcenyButton()}\n                </Container>\n            </Droppable>\n        )\n    }\n\n    renderPrzedmiotZamowienia(pz) {\n        const {isAlreadyPublished, formLocked} = this.props;\n        let boxWithMenu;\n        if (!isAlreadyPublished && this.props.zamowienieTemporaryIds.length > 1) {\n            boxWithMenu = (\n                <>\n                    <h3 className=\"sr-only\">Menu przenieś do innej części</h3>\n                    <ul className=\"box__wide-corner-menu\">\n                        {this.props.zamowienieTemporaryIds.filter(\n                                ([temporaryId, indexOnList]) => parseInt(temporaryId) !== parseInt(this.props.zamowienie.temporaryId)).map(\n                                ([temporaryId, indexOnList]) => (\n                            <li key={temporaryId}>\n                                <ButtonStyled\n                                    className=\"box__menu-item\"\n                                    disabled={formLocked}\n                                    onClick={() => this.handleMovePrzedmiotZamowieniaFromList(temporaryId, pz.temporaryId)}>\n                                    Przenieś do części {indexOnList}\n                                </ButtonStyled>\n                            </li>\n                        ))}\n                    </ul>\n                </>\n            );\n        }\n\n        return (\n            <Draggable\n                isDragAndDropElement\n                key={pz.temporaryId}\n                onDragCallback={() => (isAlreadyPublished || formLocked) ? {} : this.props.saveDraggedTemporaryId(pz.temporaryId)}\n            >\n                <Box\n                    fullwidth\n                    tag=\"li\"\n                    titleWithSubtitle={this.context.przedmiotZamowieniaKategoriaDict[pz.kategoria] || '-'}\n                    subtitle={this.context.przedmiotZamowieniaPodkategoriaDict[pz.podkategoria] || '-'}\n                    boxWithMenu={boxWithMenu}\n                    ariaLabelMoreOptions=\"Przenieś do części\"\n                >\n                    <FieldWithLabel label=\"Opis\">\n                        <Ellipsis>\n                            <Text className=\"long-text\">{pz.opis}</Text>\n                        </Ellipsis>\n                    </FieldWithLabel>\n                </Box>\n            </Draggable>\n        )\n    }\n\n    renderRemoveZamowienie() {\n        if (this.props.isAlreadyPublished) { return null }\n        if (this.state.isRemoving) {\n            if (this.props.zamowienie.przedmiotyZamowienia.length) {\n                return (\n                    <>\n                        <Text error role=\"alert\">To zamówienie ma zdefiniowane przedmioty zamówienia i nie może zostać usunięte.</Text>\n                        <ButtonStyled onClick={() => this.setState({isRemoving: false})}primary>OK</ButtonStyled>\n                    </>\n                )\n            }\n            return (\n                <DialogCustom \n                    className=\"dialog\"\n                    dialogTitle=\"Czy na pewno chcesz usunąć tę część zamówienia wraz ze wszystkimi danymi określonymi dla niej?\"\n                    onClose={this.handleCloseRemoveZamowienieDialog}\n                >\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled onClick={this.handleCloseRemoveZamowienieDialog} cancel>Anuluj</ButtonStyled>\n                        <ButtonStyled onClick={() => this.props.onRemoveZamowienie(this.props.zamowienie.temporaryId)} remove>Usuń</ButtonStyled>\n                    </GridCustom>\n                </DialogCustom>\n            )\n        }\n\n        return (\n            <>\n                <ButtonStyled\n                    disabled={this.props.formLocked || this.props.zamowienie.przedmiotyZamowienia.length > 0}\n                    remove\n                    onClick={() => this.setState({isRemoving: true})}>\n                    Usuń część zamówienia\n                </ButtonStyled>\n            </>\n        )\n    }\n\n    renderKryteriumOceny(kryteriumOceny) {\n        const formLocked = this.props.formLocked;\n        return (\n            <Box key={kryteriumOceny.temporaryId} tag=\"li\" >\n                {Object.keys(this.context.formErrors.kryteriaOceny[kryteriumOceny.temporaryId] || {}).length > 0 && <Text error><Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /><span className=\"sr-only\"Kryterium cenowe zawiera ></span> Błędy!</Text>}\n                <FieldWithLabel label=\"Czy kryterium cenowe\">\n                    <Text>{kryteriumOceny.czyKryteriumCenowe ? 'Tak' : 'Nie'}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Opis\">\n                    <Text className=\"long-text\">{kryteriumOceny.opis || '-'}</Text>\n                </FieldWithLabel>\n                {!this.props.isAlreadyPublished && (\n                    <GridCustom flexEnd additionalClassName=\" box__button-container\">\n                        <ButtonStyled\n                            disabled={formLocked}\n                            remove\n                            onClick={() => this.props.onRemoveKryteriumOceny(\n                                this.props.zamowienie.temporaryId, kryteriumOceny.temporaryId)\n                            }>\n                            Usuń\n                        </ButtonStyled>\n                        <ButtonStyled\n                            disabled={formLocked}\n                            lite\n                            onClick={() => this.setState(\n                                {editingKryteriumOCenyId: kryteriumOceny.temporaryId})\n                            }>\n                            Edytuj{Object.keys(this.context.formErrors.kryteriaOceny[kryteriumOceny.temporaryId] || {}).length > 0 && <span className=\"sr-only\"> Uwaga! kryterium cenowe zawiera błędy.</span>}\n                        </ButtonStyled>\n                    </GridCustom>\n                )}\n            </Box>\n        )\n    }\n\n    renderKryteriumOcenyForm() {\n        if (this.props.isAlreadyPublished || (!this.state.newKryteriumOcenyOn &&\n            this.state.editingKryteriumOCenyId === null)) { return null }\n\n        const {\n            editingKryteriumOCenyId,\n            newKryteriumOcenyOn\n        } = this.state;\n\n        const z = this.props.zamowienie;\n\n        let ko;\n        if (newKryteriumOcenyOn) {\n            ko = {temporaryId: this.props.kryteriumOcenyLastTemporaryId + 1};\n        } else {\n            ko = z.kryteriaOceny.filter(k => k.temporaryId === editingKryteriumOCenyId)[0];\n        }\n\n        return <FormKryteriumOceny\n                    isNew={newKryteriumOcenyOn}\n                    kryteriumOceny={ko}\n                    zamowienieTemporaryId={z.temporaryId}\n                    onCloseForm={this.handleCloseForm}\n                    onSave={this.handleSaveKryteriumOceny} />\n    }\n\n    renderNewKryteriumOcenyButton() {\n        if (this.props.isAlreadyPublished || this.state.newKryteriumOcenyOn) { return null }\n        const { temporaryId } = this.props.zamowienie;\n        const errors = this.context.formErrors.zamowienia[temporaryId] || {};\n        return <ButtonStyled\n                    add\n                    disabled={this.props.formLocked}\n                    onClick={() => this.setState({newKryteriumOcenyOn: true, editingKryteriumOCenyId: null})}>\n                    Dodaj kryterium{(errors.kryteriaOceny || '').length > 0 && <span className=\"sr-only\"> {errors.kryteriaOceny}</span>}\n                </ButtonStyled>\n    }\n}\n\n\nZamowienie.contextType = AdvertisementContext;\n\n\nexport { Zamowienie };\n","import React from 'react';\nimport { Radio } from '@rmwc/radio';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getLastTemporaryId, listOrEmpty } from '../../../helpers';\nimport {\n    ButtonStyled,\n    Container,\n    GridCustom,\n    Steps,\n    Text,\n} from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { Zamowienie } from './Zamowienie';\n\n\nclass StepCzesciKryteria extends BaseStepComponent {\n    stepName = 'czesciKryteria';\n\n    constructor(props) {\n        super(props);\n        this.state = {draggedTemporaryId : null};\n    }\n\n    // handlers\n\n    handleSaveCzyDopuszczalnaOfertaCzesciowa = (ev) => {\n        const czyDopuszczalnaOfertaCzesciowa = ev.currentTarget.value === 'true';\n        this.context.setAttributeValue(\n            'czyDopuszczalnaOfertaCzesciowa', czyDopuszczalnaOfertaCzesciowa);\n    }\n\n    handleSaveDraggableTemporaryId = (temporaryId) => {\n        return new Promise((resolve, reject) => {\n            this.setState({draggedTemporaryId: temporaryId}, resolve());\n        })\n    }\n\n    handleMovePrzedmiotZamowienia = (zamowienieTemporaryId) => {\n        this.context.movePrzedmiotZamowienia(\n            zamowienieTemporaryId,\n            this.state.draggedTemporaryId,\n            () => this.setState({draggedTemporaryId: null})\n        );\n    }\n\n    // rendering\n\n    render() {\n        const { isAlreadyPublished, isPreview } = this.props;\n        const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n        const o = isPreview ? {} : this.context.ogloszenie;\n        const czyDopuszczalnaOfertaCzesciowa = isPreview ? false : o.czyDopuszczalnaOfertaCzesciowa;\n        const changeCzyDopuszczalnaOfertaCzesciowaForbidden = czyDopuszczalnaOfertaCzesciowa && o.zamowienia.length > 1;\n        const radioDisabled = isAlreadyPublished || formLocked || changeCzyDopuszczalnaOfertaCzesciowaForbidden;\n\n        return (\n            <>\n                <PomocEkranowa ekran=\"form_announcement_partscriteria\" content={this.props.pomocEkranowaContent} />\n                {isAlreadyPublished && <AlreadyPublishedInfo />}\n                <Container>\n                    <fieldset>\n                        <Text tag=\"legend\" className=\"label\">Czy dopuszczalna oferta częściowa?</Text>\n                        <Radio\n                            value={true}\n                            disabled={radioDisabled}\n                            name=\"czyDopuszczalnaOfertaCzesciowaRadioGroup\"\n                            checked={czyDopuszczalnaOfertaCzesciowa === true}\n                            onChange={this.handleSaveCzyDopuszczalnaOfertaCzesciowa}\n                            label=\"Tak\"\n                            aria-label=\"Czy dopuszczalna oferta częściowa? Tak\"\n                            id=\"radio_id\"\n                        />\n                        <Radio\n                            value={false}\n                            disabled={radioDisabled}\n                            name=\"czyDopuszczalnaOfertaCzesciowaRadioGroup\"\n                            checked={czyDopuszczalnaOfertaCzesciowa === false}\n                            onChange={this.handleSaveCzyDopuszczalnaOfertaCzesciowa}\n                            label=\"Nie\"\n                            aria-label=\"Czy dopuszczalna oferta częściowa?  Nie\"\n                        />\n                    </fieldset>\n                    {!isAlreadyPublished && changeCzyDopuszczalnaOfertaCzesciowaForbidden &&\n                        <Text info>Usuń dodatkowe części zamówienia aby odblokować tę opcję.</Text>}\n                </Container>\n\n                {this.renderZamowienia(formLocked)}\n\n                <Steps\n                    disabled={formLocked}\n                    elementToFocusRef={this.props.elementToFocusRef}\n                    hasNext\n                    hasPrev\n                    nextLabel=\"Pozostałe\"\n                    prevLabel=\"Warunki\"\n                    onNextClick={() => this.props.onChangeCurrentMenuLink('pozostale')}\n                    onPrevClick={() => this.props.onChangeCurrentMenuLink('warunki')}\n                />\n            </>\n        )\n    }\n\n    renderZamowienia(formLocked) {\n        if (!this.props.isPreview && this.context.ogloszenie.zamowienia.length) {\n            const isAlreadyPublished = this.props.isAlreadyPublished;\n            const {\n                czyDopuszczalnaOfertaCzesciowa,\n                zamowienia,\n            } = this.context.ogloszenie;\n            const zamowienieTemporaryIds = zamowienia.map((z, i) => [z.temporaryId, i + 1]);\n            return (\n                <>\n                    <Text info>Liczba części zamówienia: {zamowienia.length}</Text>\n                    <ul>\n                        {listOrEmpty(zamowienia).map((z, i) => (\n                            <Zamowienie\n                                isAlreadyPublished={isAlreadyPublished}\n                                formLocked={formLocked}\n                                key={z.temporaryId}\n                                index={i + 1}\n                                kryteriumOcenyLastTemporaryId={getLastTemporaryId(\n                                    zamowienia, 'kryteriaOceny')}\n                                zamowienie={z}\n                                zamowienieTemporaryIds={zamowienieTemporaryIds}\n                                onSetZamowienieAttribute={this.context.setZamowienieAttributeValue}\n                                onSaveKryteriumOceny={this.context.saveKryteriumOceny}\n                                onRemoveKryteriumOceny={this.context.removeKryteriumOceny}\n                                onRemoveZamowienie={this.context.removeZamowienie}\n                                saveDraggedTemporaryId={this.handleSaveDraggableTemporaryId}\n                                onMovePrzedmiotZamowienia={this.handleMovePrzedmiotZamowienia} />\n                        ))}\n                    </ul>\n                    {!isAlreadyPublished && czyDopuszczalnaOfertaCzesciowa && (\n                        <GridCustom flexEnd>\n                            <ButtonStyled disabled={formLocked} onClick={this.context.addZamowienie} add>Dodaj część zamówienia</ButtonStyled>\n                        </GridCustom>\n                    )}\n                </>\n            )\n        } else if ((this.context.formErrors.ogloszenie.zamowienia_kryteriaOceny || '').length) {\n            return <Text error>Zdefiniuj przedmioty zamówienia, aby móc dodawać kryteria do części zamówienia.</Text>\n        } else {return null}\n    }\n}\n\n\nStepCzesciKryteria.contextType = AdvertisementContext;\n\n\nexport { StepCzesciKryteria }\n","import React, { useContext, useEffect } from 'react';\n\nimport {\n    AdvertisementContext\n} from '../../../../context/advertisementContext';\n\n\nexport const withStepConfiguration = (StepComponent, stepName) => {\n\n    return (props) => {\n        const context = useContext(AdvertisementContext);\n\n        useEffect(() => {\n            if (!props.isPreview) {\n                window.scrollTo(0, 0);\n            }\n\n            // clear step error in menu\n            context.clearStepError(stepName);\n\n            if (window.formOgloszenie) {\n                window.formOgloszenie.computeProgress();\n            }\n            return () => {\n                if (window.formOgloszenie) {\n                    window.formOgloszenie.computeProgress();\n                }\n            }\n        }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n        return <StepComponent {...props} />\n    }\n}\n","import React, { useContext } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { Typography } from '@rmwc/typography';\n\nimport { SELECT_CLASSNAME, SELECT_INVALID_CLASSNAME } from '../../../const';\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { UserContext } from '../../../context/user-context';\nimport { listOrEmpty } from '../../../helpers';\n         import { sortProjects } from '../../../sorters';\nimport { Container, FieldWithLabel, GridCustom, Select, Steps, Text,\n         TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { withStepConfiguration } from './hoc/withStepConfiguration';\n\n\nconst NO_PROJECT_TEXT =\n    'Nie masz zdefiniowanych projektów. Określ je w menu Projekty i Nabory.';\nconst NO_PROJECT_ADMIN_TEXT =\n    'Ogłoszeniodawca nie ma zdefiniowanych projektów.';\nconst NO_ENROLLMENT_TEXT =\n    'Nie masz zdefiniowanych naborów. Określ je w menu Projekty i Nabory.';\nconst NO_ENROLLMENT_ADMIN_TEXT =\n    'Ogłoszeniodawca nie ma zdefiniowanych naborów.';\nconst NO_OSOBY_TEXT =\n    'Nie masz zdefiniowanych osób do kontaktu. Określ je w ustawieniach profilu.';\n\n\nconst StepPozostaleBase = (props) => {\n\n    function sortProjectsEnrollments(objectList) {\n        return sortProjects(objectList, 'calyNumer_asc')\n    }\n\n    const { isAlreadyPublished, isPreview, projectsSelected } = props;\n\n    const { user } = useContext(UserContext);\n    const { advertisementManagerType } = user;\n    const context = useContext(AdvertisementContext);\n    const {\n        nabory,\n        ogloszenie: o,\n        osobyDoKontaktu,\n        projekty,\n        setAttributeValue\n    } = context;\n\n    const formLocked = isPreview || context.validationOn || context.savingOn;\n\n    const errors = context.formErrors.ogloszenie;\n    const osobyDoKontaktu_ = isPreview ? [] : listOrEmpty(o.osobyDoKontaktu);\n\n    const isProjektyInvalid = (errors.projekty || '').length > 0;\n    const isNumerNaboruInvalid = (errors.nabor || '').length > 0;\n    const isTytulInvalid = (errors.tytul || '').length > 0;\n    const isOsobyDoKontaktuInvalid = (errors.osobyDoKontaktu || '').length > 0;\n\n    let tytul = '';\n    let zamowieniaUzupelniajace = '';\n    let warunkiZmianyUmowy = '';\n    if (!isPreview) {\n        tytul = o.tytul;\n        warunkiZmianyUmowy = o.warunkiZmianyUmowy;\n        zamowieniaUzupelniajace = o.zamowieniaUzupelniajace;\n    }\n\n    const { isAuthor } = advertisementManagerType;\n\n    const projectsEnrollmentsDisabled = formLocked ||\n        (isAlreadyPublished && isAuthor);\n    const contactPersonsDisabled = formLocked ||\n        (isAlreadyPublished && advertisementManagerType.isAdmin);\n\n    return (\n        <>\n            <PomocEkranowa ekran=\"form_announcement_others\" content={props.pomocEkranowaContent} />\n            {isAlreadyPublished && <AlreadyPublishedInfo />}\n            <Container>\n                <FieldWithLabel label=\"Numer ogłoszenia\">\n                    <Typography use=\"headline4\" tag=\"h2\">{isPreview ? '-' : o.ogloszenie.numer || '-'}</Typography>\n                </FieldWithLabel>\n                <Checkbox\n                    checked={projectsSelected}\n                    disabled={projectsEnrollmentsDisabled}\n                    label={`${isAuthor ? 'Mam' : 'Ogłoszeniodawca ma'} projekt`}\n                    onChange={props.onChangeProjectsSelected}\n                />\n                <GridCustom oneRow fullwidth flexBottom>\n                    {projectsSelected && (\n                        <FieldWithLabel\n                            aria-label={isAlreadyPublished\n                                ? 'Dołączone projekty. Projekty nie mogą być już zmienione.'\n                                : `Projekty ${!projekty.length \n                                    ? (isAuthor ? NO_PROJECT_TEXT : NO_PROJECT_ADMIN_TEXT) \n                                    : ''\n                                } ${isProjektyInvalid ? errors.projekty : ''}`\n                            }\n                            label=\"Projekty\"\n                            selectRef={React.createRef()}\n                            tag=\"label\"\n                        >\n                            <Select\n                                className={isProjektyInvalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n                                closeMenuOnSelect={false}\n                                defaultValue={isPreview ? [] : projekty.filter(\n                                    p => o.projekty.includes(parseInt(p.id))\n                                ).map(p => ({value: p.id, label: p.calyNumer}))}\n                                isDisabled={projectsEnrollmentsDisabled}\n                                isClearable={false}\n                                isMulti\n                                isSearchable\n                                noOptionsMessage={() => 'Brak wybranej opcji'}\n                                options={\n                                    sortProjectsEnrollments(projekty)\n                                        .map(p => ({value: p.id, label: p.calyNumer}))\n                                }\n                                placeholder='Wybierz...'\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej. Możesz wybrać kilka opcji.' }}\n                                styles={customSelectStyles}\n                                onChange={selectedOptions => setAttributeValue(\n                                    'projekty', selectedOptions === null ? [] : [...selectedOptions].map(option => parseInt(option.value))\n                                )}\n                            />\n                            {!projekty.length &&\n                                <Text error id=\"no_projects_info\">\n                                    {isAuthor ? NO_PROJECT_TEXT : NO_PROJECT_ADMIN_TEXT}\n                                </Text>\n                            }\n                            {isProjektyInvalid && <Text error>{errors.projekty}</Text>}\n                        </FieldWithLabel>\n                    )}\n                    {!projectsSelected && (\n                        <FieldWithLabel\n                            aria-label={isAlreadyPublished\n                                ? 'Nabór. Nabór nie może być już zmieniony.'\n                                : `Nabór ${!nabory.length \n                                    ? (isAuthor ? NO_ENROLLMENT_TEXT : NO_ENROLLMENT_ADMIN_TEXT)\n                                    : ''\n                                } ${isNumerNaboruInvalid ? errors.nabor : ''}`\n                            }\n                            label=\"Nabór\"\n                            selectRef={React.createRef()}\n                            tag=\"label\"\n                        >\n                            <Select\n                                className={isNumerNaboruInvalid ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n                                closeMenuOnSelect={false}\n                                defaultValue={(isPreview || o.nabor === null) ? null :\n                                    nabory.filter(n => o.nabor.value === n.id)\n                                        .map(p => ({value: p.id, label: p.calyNumer}))\n                                }\n                                isDisabled={projectsEnrollmentsDisabled}\n                                isClearable={false}\n                                isSearchable\n                                noOptionsMessage={() => 'Brak wybranej opcji'}\n                                options={\n                                    sortProjectsEnrollments(nabory)\n                                        .map(n => ({value: n.id, label: n.calyNumer}))\n                                }\n                                placeholder='Wybierz...'\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                styles={customSelectStyles}\n                                onChange={selectedOption => setAttributeValue('nabor', selectedOption)}\n                            />\n                            {!nabory.length &&\n                                <Text error>\n                                    {isAuthor ? NO_ENROLLMENT_TEXT : NO_ENROLLMENT_ADMIN_TEXT }\n                                </Text>\n                            }\n                            {isNumerNaboruInvalid && <Text error>{errors.nabor}</Text>}\n                        </FieldWithLabel>\n                    )}\n                </GridCustom>\n                <FieldWithLabel label=\"Tytuł\" tag=\"label\" labelFor=\"title_id\">\n                    <TextFieldCustom\n                        aria-describedby={isTytulInvalid ? 'tytul_error' : null}\n                        aria-label={`Tytuł, maksymalna liczba znaków: 1000. Wpisano ${tytul.length} znaków.`}\n                        aria-valuemax={1000}\n                        characterCount\n                        clearFieldContext=\"tytuł\"\n                        disabled={formLocked}\n                        fullwidth\n                        id=\"title_id\"\n                        invalid={isTytulInvalid}\n                        maxLength={1000}\n                        textarea\n                        value={tytul}\n                        onChange={ev => setAttributeValue('tytul', ev.target.value)}\n                        onClear={ev => setAttributeValue('tytul', '')} />\n                    {isTytulInvalid && <Text error id=\"tytul_error\">{errors.tytul}</Text>}\n                </FieldWithLabel>\n                <FieldWithLabel\n                    label=\"Zamówienia uzupełniające\"\n                    labelFor=\"zamowieniaUzupelniajace_id\"\n                    tag=\"label\"\n                >\n                    <TextFieldCustom\n                        aria-label={isAlreadyPublished\n                            ? 'Zamówienia uzupełniające. Pole nie może być już edytowane.'\n                            : `Zamówienia uzupełniające, maksymalna liczba znaków: 6000. Wpisano ${zamowieniaUzupelniajace.length} znaków.`\n                        }\n                        aria-valuemax={6000}\n                        characterCount\n                        clearFieldContext=\"zamówienie uzupełniające\"\n                        disabled={isAlreadyPublished || formLocked}\n                        fullwidth\n                        id=\"zamowieniaUzupelniajace_id\"\n                        maxLength={6000}\n                        textarea\n                        value={zamowieniaUzupelniajace}\n                        onChange={ev => setAttributeValue('zamowieniaUzupelniajace', ev.target.value)}\n                        onClear={ev => setAttributeValue('zamowieniaUzupelniajace', '')} />\n                </FieldWithLabel>\n                <FieldWithLabel\n                    label=\"Warunki zmiany umowy\"\n                    labelFor=\"warunkiZmianyUmowy_id\"\n                    tag=\"label\"\n                >\n                    <TextFieldCustom\n                        aria-label={isAlreadyPublished\n                            ? 'Warunki zmiany umowy. Pole nie może być już edytowane.'\n                            : `Warunki zmiany umowy, maksymalna liczba znaków: 6000. Wpisano ${warunkiZmianyUmowy.length} znaków.`\n                        }\n                        aria-valuemax={6000}\n                        clearFieldContext=\"warunki zmiany umowy\"\n                        characterCount\n                        disabled={isAlreadyPublished || formLocked}\n                        id=\"warunkiZmianyUmowy_id\"\n                        fullwidth\n                        maxLength={6000}\n                        textarea\n                        value={warunkiZmianyUmowy}\n                        onChange={ev => setAttributeValue('warunkiZmianyUmowy', ev.target.value)}\n                        onClear={ev => setAttributeValue('warunkiZmianyUmowy', '')} />\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Osoby do kontaktu\" tag=\"label\" selectRef={React.createRef()}>\n                    <Select\n                        aria-label={`Osoby do kontaktu ${!osobyDoKontaktu.length ? NO_OSOBY_TEXT : ''} ${isOsobyDoKontaktuInvalid ? errors.osobyDoKontaktu : ''}`}\n                        className={isOsobyDoKontaktuInvalid > 0 ? SELECT_INVALID_CLASSNAME : SELECT_CLASSNAME}\n                        closeMenuOnSelect={false}\n                        defaultValue={osobyDoKontaktu.filter(o => osobyDoKontaktu_.includes(o.id)).map(\n                            o => ({value: o.id, label: o.imie + ' ' + o.nazwisko}))}\n                        isClearable={false}\n                        isDisabled={contactPersonsDisabled}\n                        isMulti\n                        isSearchable\n                        noOptionsMessage={() => 'Brak wybranej opcji'}\n                        options={osobyDoKontaktu.map(o => ({value: o.id, label: o.imie + ' ' + o.nazwisko}))}\n                        placeholder='Wybierz...'\n                        screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej. Możesz wybrać kilka opcji.' }}\n                        styles={customSelectStyles}\n                        onChange={selectedOptions => setAttributeValue(\n                            'osobyDoKontaktu', selectedOptions === null ? [] : [...selectedOptions].map(option => option.value))}\n                    />\n                    {!osobyDoKontaktu.length && <Text error>{NO_OSOBY_TEXT}</Text>}\n                    {isOsobyDoKontaktuInvalid && <Text error>{errors.osobyDoKontaktu}</Text>}\n                </FieldWithLabel>\n            </Container>\n            <Steps\n                disabled={formLocked}\n                elementToFocusRef={props.elementToFocusRef}\n                hasNext\n                hasPrev\n                nextLabel=\"Załączniki\"\n                prevLabel=\"Części i kryteria\"\n                onNextClick={() => props.onChangeCurrentMenuLink('zalaczniki')}\n                onPrevClick={() => props.onChangeCurrentMenuLink('czesciKryteria')}\n            />\n        </>\n    )\n}\n\nconst StepPozostale = withStepConfiguration(StepPozostaleBase, 'pozostale');\nexport { StepPozostale }\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { customSelectStyles } from '../../vars/vars';\nimport { ButtonStyled, FieldWithLabel, GridCustom, Select, Text } from '../../common';\n\n\nclass FormKodCPV extends Component{\n\n    constructor(props) {\n        super(props);\n        const initial = props.initial ? this.setInitialOptions() : (props.isMulti ? [] : null);\n        this.state = {\n            selectedKod: initial,\n            selectedKodError: '',\n            selectMenuIsOpen: false,\n            inputOptions: initial,\n            moreOptionsAvailable: false,\n            fetchError: '',\n        };\n\n        this.requestId = 0;\n\n        this.xhrFetch = null;\n        this.xhrTimeout = null;\n\n        this.handleChangeInputKodCPV = this.handleChangeInputKodCPV.bind(this);\n        this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n        this.handleFetchError = this.handleFetchError.bind(this);\n        this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n        this.handleBlurKodCPV = this.handleBlurKodCPV.bind(this);\n        this.handleChangeKodCPV = this.handleChangeKodCPV.bind(this);\n        this.handleAddKodCPV = this.handleAddKodCPV.bind(this);\n    }\n\n    // basic functions\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n\n        // clear timeouts if exist\n        if (this.xhrTimeout !== null) {\n            clearTimeout(this.xhrTimeout);\n        }\n    }\n\n    // handlers\n\n    handleChangeInputKodCPV(inputValue) {\n        if (this.xhrTimeout !== null) {\n            clearTimeout(this.xhrTimeout);\n            this.xhrTimeout = null;\n        }\n\n        if (inputValue.length < 5 && (inputValue.length < 3 || !/^[A-Za-z ąĄćĆęĘłŁńŃóÓśŚźŹżŹ]{3,4}$/.test(inputValue))) {\n            this.setState({\n                selectMenuIsOpen: false,\n                inputOptions: [],\n                moreOptionsAvailable: false,\n                fetchError: ''\n            });\n        } else {\n            this.requestId++;\n            this.xhrTimeout = setTimeout(() => {\n                this.setState(\n                    {inputOptions: [], moreOptionsAvailable: false, fetchError: ''},\n                    () => {\n                        // get data from server\n                        this.xhrFetch = fetchApi(\n                            '/api/dictionaries/cpv',\n                            'GET',\n                            {},\n                            {search_key: inputValue, request_id: this.requestId},\n                            this.handleFetchSuccess,\n                            this.handleFetchError,\n                            this.handleFetchIncorrectStatus,\n                        );\n                    }\n                );\n            }, 500);\n        }\n    }\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n\n        if (parseInt(data.request_id) < this.requestId) {\n            // do nothing, there is another fetch on the fly\n            return\n        }\n        let inputOptions = getSerializedObject(data).kodyCPV || [];\n        if (inputOptions.length && this.props.usedIds) {\n            inputOptions = inputOptions.filter(\n                option => !this.props.usedIds.includes(option.id));\n        }\n        this.setState({\n            selectMenuIsOpen: true,\n            inputOptions: inputOptions.map(\n                option => ({\n                    value: option.id,\n                    data: {id: String(option.id), kod: option.kod, nazwa: option.nazwa},\n                    label: `${option.kod} ${option.nazwa}`\n                })\n            ),\n            moreOptionsAvailable: data.meta.last_page > 1,\n        });\n    }\n\n    handleFetchError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            fetchError: `Nie udało się pobrać kodów CPV. ${data.message}`,\n        });\n    }\n\n    handleFetchIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            fetchError: `Nie udało się pobrać kodów CPV. Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    handleBlurKodCPV(ev) {\n        this.setState({selectMenuIsOpen: false});\n    }\n\n    handleChangeKodCPV(selectedOption) {\n        let selectedKod;\n        if (this.props.isMulti) {\n            selectedKod = (selectedOption || []).map(o => o.data);\n        } else {\n            selectedKod = selectedOption.data;\n        }\n        this.setState(\n            {\n                selectMenuIsOpen: false,\n                selectedKod,\n            },\n            () => {\n                if (!this.props.withButtons) {\n                    this.props.addKodCPV(this.state.selectedKod);\n                }\n            }\n        );\n    }\n\n    handleAddKodCPV(event) {\n        if (!this.validate()) { return }\n        this.props.addKodCPV(this.state.selectedKod);\n    }\n\n    // helpers\n\n    setInitialOptions() {\n        const initial = this.props.initial;\n        if (this.props.isMulti) {\n            return initial.map(i => {\n                return {\n                    value: parseInt(i.id),\n                    data: i,\n                    label: `${i.kod} ${i.nazwa}`}\n            })\n        } else {\n            return {\n                value: parseInt(initial.id),\n                data: initial,\n                label: `${initial.kod} ${initial.nazwa}`\n            }\n        }\n    }\n\n    validate() {\n        // clean errors\n        this.setState({selectedKodError: ''});\n        if (this.state.selectedKod === null) {\n            this.setState({selectedKodError: 'To pole jest wymagane.'});\n            return false\n        }\n        return true\n    }\n\n    // rendering\n\n    render() {\n        const {\n            fetchError,\n            inputOptions,\n            moreOptionsAvailable,\n            selectedKod,\n            selectedKodError,\n            selectMenuIsOpen,\n        } = this.state;\n        const isSelectInvalid = selectedKodError.length > 0;\n        const moreOptionsAvailableText = 'Istnieje więcej pasujących wyników. Jeśli na liście nie ma szukanego kodu, wpisz dodatkowe znaki.';\n        return (\n            <>\n                <FieldWithLabel label=\"Kod CPV\" tag=\"label\" selectRef={React.createRef()}>\n                    {moreOptionsAvailable && <Text info>{moreOptionsAvailableText}</Text>}\n                    <Select\n                        screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                        defaultValue={selectedKod}\n                        isMulti={this.props.isMulti || false}\n                        menuIsOpen={selectMenuIsOpen}\n                        options={inputOptions}\n                        placeholder='Wpisz co najmniej 5 cyfr lub 3 litery...'\n                        styles={customSelectStyles}\n                        className={isSelectInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n                        onBlur={this.handleBlurKodCPV}\n                        onChange={this.handleChangeKodCPV}\n                        onInputChange={this.handleChangeInputKodCPV}\n                        components={{\n                            DropdownIndicator: () => null,\n                            IndicatorSeparator: () => null\n                        }}\n                        noOptionsMessage={() => 'Brak wybranej opcji'}\n                        aria-label={`Kody CPV, wpisz co najmniej 5 cyfr lub 3 litery ${moreOptionsAvailable ? moreOptionsAvailableText : ''} ${isSelectInvalid ? selectedKodError : ''} ${fetchError.length > 0 ? fetchError : ''}`}\n                    />\n                    {isSelectInvalid && <Text error id=\"selected_error\">{selectedKodError}</Text>}\n                    {fetchError.length > 0 && <Text error id=\"selected_fetch_error\">{fetchError}</Text>}\n                </FieldWithLabel>\n                {this.props.withButtons && this.renderButtons()}\n            </>\n        )\n    }\n\n    renderButtons() {\n        const addButtonDisabled = this.state.selectedKod === null;\n        return (\n            <GridCustom flexEnd>\n                <ButtonStyled\n                    cancel\n                    onClick={this.props.onCancelKodCPV}\n                >Anuluj<span className=\"sr-only\"> dodawanie kodu CPV</span></ButtonStyled>\n                <ButtonStyled\n                    add={!addButtonDisabled}\n                    disabled={addButtonDisabled}\n                    id=\"potwierdz_dodaj_kodCPV_button_id\"\n                    onClick={this.handleAddKodCPV}\n                >Dodaj<span className=\"sr-only\"> kod CPV. {addButtonDisabled && 'Guzik nieaktywny, musisz wybrać kod, aby go dodać.'}</span></ButtonStyled>\n            </GridCustom>\n        )\n    }\n}\n\n\nexport { FormKodCPV };\n","import React, { Component } from 'react';\n\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { FormKodCPV } from './FormKodCPV';\n\n\nclass KodyCPV extends Component{\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            newKodOn: false,\n            selectedKod: null,\n        };\n\n        this.handleAddKodCPV = this.handleAddKodCPV.bind(this);\n        this.handleRemoveKodCPV = this.handleRemoveKodCPV.bind(this);\n    }\n\n    // handlers\n\n    handleAddKodCPV(selectedCode) {\n        this.setState(\n            {newKodOn: false},\n            () => this.props.addKodCPV(selectedCode)\n        );\n    }\n\n    handleRemoveKodCPV(id_) {\n        this.props.removeKodCPV(id_);\n    }\n\n    handleCancelKodCPV = () => {\n        this.setState({newKodOn: false, selectedKod: null})\n    }\n\n    // rendering\n\n    render() {\n        const kodyCPV = this.props.kodyCPV;\n        return (\n            <>\n                <Text info>Liczba kodów CPV: {kodyCPV.length}</Text>\n                <ul>\n                    {kodyCPV.map(kod_ => {\n                        return (\n                            <GridCustom key={kod_.id} centerVertical fullwidth className=\" separate-content\" tag=\"li\">\n                                <Text>{kod_.kod} {kod_.nazwa}</Text>\n                                <ButtonStyled onClick={(ev) => this.handleRemoveKodCPV(kod_.id)} remove className=\"btn--delete\">\n                                    Usuń<span className=\"sr-only\"> kod CPV</span>\n                                </ButtonStyled>\n                            </GridCustom>\n                        )\n                    })}\n                </ul>\n                {this.renderNewKodForm()}\n            </>\n        )\n    }\n\n    renderNewKodForm() {\n        if (this.state.newKodOn) {\n            return <FormKodCPV\n                        usedIds={this.props.kodyCPV.map(k => parseInt(k.id))}\n                        withButtons\n                        addKodCPV={this.handleAddKodCPV}\n                        onCancelKodCPV={this.handleCancelKodCPV} />\n        }\n        return (\n            <GridCustom flexEnd>\n                <ButtonStyled add id=\"dodaj_kodCPV_button_id\" onClick={() => this.setState({newKodOn: true})}>\n                    Dodaj kod CPV<span className=\"sr-only\"> {this.props.errorsKodyCPV}</span>\n                </ButtonStyled>\n            </GridCustom>\n        )\n    }\n}\n\n\nexport { KodyCPV };\n","import React, { Component } from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport {\n    ButtonStyled,\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKraj, FormMiejscowosc } from '../common';\n\n\nconst POLAND = 'Polska';\nconst EMPTY_ADDRESS = {\n    kraj: POLAND,\n    wojewodztwo: null,\n    powiat: null,\n    gmina: null,\n    miejscowosc: '',\n}\n\n\nclass FormMiejsceRealizacji extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = Object.assign({\n            typ: null,\n            adresErrors: {},\n        }, EMPTY_ADDRESS);\n\n        this.handleChangeMiejscowosc = this.handleChangeMiejscowosc.bind(this);\n        this.handleChangeTyp = this.handleChangeTyp.bind(this);\n        this.handleSaveMiejsceRealizacji = this.handleSaveMiejsceRealizacji.bind(this);\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        this.setState({typ: this.context.adresId});\n    }\n\n    // handlers\n\n    handleChangeMiejscowosc(value) {\n        this.setState(prevState =>\n            ({\n                adresErrors: Object.assign({}, prevState.adresErrors, {miejscowosc: ''}),\n                kraj: POLAND,\n                ...value\n            })\n        );\n    }\n\n    handleChangeZagranicaAttribute(value, field) {\n        this.setState(prevState =>\n            ({\n                adresErrors: Object.assign({}, prevState.adresErrors, {[field]: ''}),\n                [field]: value,\n            })\n        );\n    }\n\n    handleChangeTyp(selectedOptions) {\n        const typ = parseInt(selectedOptions.value);\n        if (typ === this.context.adresId) {\n            this.setState({\n                typ: typ,\n                ...EMPTY_ADDRESS,\n                adresErrors: {},\n            });\n        } else if (typ === this.context.zagranicaId) {\n            this.setState({\n                typ: typ,\n                kraj: null,\n                wojewodztwo: null,\n                powiat: null,\n                gmina: null,\n                miejscowosc: '',\n                adresErrors: {},\n            });\n        } else {\n            this.setState({\n                typ: typ,\n                kraj: POLAND,\n                wojewodztwo: null,\n                powiat: null,\n                gmina: null,\n                miejscowosc: null,\n                adresErrors: {},\n            });\n        }\n    }\n\n    handleSaveMiejsceRealizacji() {\n        if (!this.validate()) { return }\n        this.props.saveMiejsceRealizacji({\n            id: null,\n            temporaryId: this.props.temporaryId,\n            typ: this.state.typ,\n            kraj: this.state.kraj,\n            wojewodztwo: this.state.wojewodztwo,\n            powiat: this.state.powiat,\n            gmina: this.state.gmina,\n            miejscowosc: this.state.miejscowosc,\n        });\n    }\n\n    // helpers\n\n    isSaveButtonDisabled() {\n        // can't save miejsce realizacji if it's adres and not wojewodztwo set\n        // or it's zagranica and not kraj and miejscowosc set\n        const {\n            kraj,\n            miejscowosc,\n            typ,\n        } = this.state;\n        return (\n            (typ === this.context.adresId && (miejscowosc || '').length === 0) ||\n            (typ === this.context.zagranicaId && !((kraj || '').length && (miejscowosc || '').length))\n        )\n    }\n\n    sortMiejscowosc(miejscowosc1, miejscowosc2) {\n        return miejscowosc1.miejscowosc.localeCompare(miejscowosc2.miejscowosc, 'pl')\n    }\n\n    validate() {\n        // clean errors\n        this.setState({adresErrors: {}});\n        const {\n            kraj,\n            miejscowosc,\n            typ,\n        } = this.state;\n        if (typ === this.context.adresId && !miejscowosc.length) {\n            this.setState({adresErrors: {miejscowosc: 'To pole jest wymagane.'}})\n            return false\n        }\n        if (typ === this.context.zagranicaId && (!(kraj || '').length || !miejscowosc.length)) {\n            let errors = {};\n            for (let name of ['kraj', 'miejscowosc']) {\n                if (!(this.state[name] || '').length) {\n                    errors[name] = 'To pole jest wymagane.'\n                }\n            }\n            this.setState({adresErrors: errors});\n            return false\n        }\n        return true\n    }\n\n    // rendering\n\n    render() {\n        const isSaveButtonDisabled = this.isSaveButtonDisabled();\n        const {\n            adresId,\n            typMiejscaRealizacji,\n            zagranicaId,\n        } = this.context;\n        const typ = this.state.typ;\n\n        return (\n            <FieldWithLabel label=\"Rodzaj adresu\" tag=\"label\" selectRef={React.createRef()}>\n                <Select\n                    className=\"select-custom\"\n                    indicatorId=\"mr_rodzajAdresu_id\"\n                    isSearchable={false}\n                    noOptionsMessage={() => 'Brak wybranej opcji'}\n                    options={Object.entries(typMiejscaRealizacji).map(([key, value]) => {\n                        return {value: key, label: value}\n                    })}\n                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                    styles={customSelectStyles}\n                    value={{\n                        value: this.state.typ,\n                        label: typMiejscaRealizacji[this.state.typ]\n                    }}\n                    onChange={this.handleChangeTyp}\n                />\n                <GridCustom flexS noWrap fullwidth>\n                    {adresId === typ && this.renderAdresForm()}\n                    {zagranicaId === typ && this.renderZagranicaForm()}\n                </GridCustom>\n                <GridCustom flexEnd>\n                    <ButtonStyled onClick={this.props.cancelNewMiejsceRealizacji} cancel>Anuluj<span className=\"sr-only\"> dodawanie miejsca realizacji</span></ButtonStyled>\n                    <ButtonStyled onClick={this.handleSaveMiejsceRealizacji} add={!isSaveButtonDisabled} disabled={isSaveButtonDisabled}>Dodaj<span className=\"sr-only\"> miejsce realizacji.{isSaveButtonDisabled && 'Guzik nieaktywny, musisz wybrać miejsce realizacji, aby je dodać.'}</span></ButtonStyled>\n                </GridCustom>\n            </FieldWithLabel>\n        )\n    }\n\n    renderAdresForm() {\n        const adresErrors = this.state.adresErrors;\n        const isSelectInvalid = adresErrors.miejscowosc && adresErrors.miejscowosc.length > 0;\n        return (\n            <FormMiejscowosc\n                error={isSelectInvalid ? adresErrors.miejscowosc : ''}\n                invalid={isSelectInvalid}\n                changeMiejscowosc={this.handleChangeMiejscowosc} />\n        )\n    }\n\n    renderZagranicaForm() {\n        const {\n            adresErrors,\n            kraj,\n            miejscowosc,\n        } = this.state;\n        const isSelectInvalid = adresErrors.kraj && adresErrors.kraj.length > 0;\n        return (\n            <>\n                <FormKraj\n                    error={isSelectInvalid ? adresErrors.kraj : ''}\n                    invalid={isSelectInvalid}\n                    kraj={kraj}\n                    changeKraj={(selectedOption) => this.handleChangeZagranicaAttribute(selectedOption.value, 'kraj')} />\n\n                <FieldWithLabel label=\"Miejscowość\" tag=\"label\" labelFor=\"miejscowosc_id\">\n                    <TextFieldCustom\n                        aria-describedby={adresErrors.miejscowosc && adresErrors.miejscowosc.length > 0 ? 'miejscowosc_error' : null}\n                        clearFieldContext=\"miejscowość\"\n                        value={miejscowosc || ''}\n                        onChange={(event) => this.handleChangeZagranicaAttribute(event.target.value, 'miejscowosc')}\n                        onClear={() => this.handleChangeZagranicaAttribute('', 'miejscowosc')}\n                        aria-required=\"true\"\n                        id=\"miejscowosc_id\" />\n                    {adresErrors.miejscowosc && adresErrors.miejscowosc.length > 0 && <Text error id=\"miejscowosc_error\">{adresErrors.miejscowosc}</Text>}\n                </FieldWithLabel>\n            </>\n        )\n    }\n}\n\nFormMiejsceRealizacji.contextType = AdvertisementContext;\n\nexport { FormMiejsceRealizacji };\n","import React, { useContext } from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { ButtonStyled, GridCustom, FieldWithLabel, Text } from '../../common';\n\n\nconst MiejsceRealizacji = (props) => {\n    const ogloszeniaContext = useContext(AdvertisementContext)\n\n    const {\n        gmina,\n        kraj,\n        miejscowosc,\n        powiat,\n        temporaryId,\n        typ,\n        wojewodztwo,\n    } = props.miejsceRealizacji;\n\n    let address = null;\n    if (typ === ogloszeniaContext.adresId) {\n        address = (\n            <GridCustom fullwidth>\n                <FieldWithLabel label=\"Kraj\">\n                    <Text>{kraj}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Województwo\">\n                    <Text>{wojewodztwo}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Powiat\">\n                    <Text>{powiat || '-'}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Gmina\">\n                    <Text>{gmina || '-'}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Miejscowość\">\n                    <Text>{miejscowosc || '-'}</Text>\n                </FieldWithLabel>\n            </GridCustom>\n        );\n    } else if (typ === ogloszeniaContext.zagranicaId) {\n        address = (\n            <GridCustom fullwidth>\n                <FieldWithLabel label=\"Kraj\">\n                    <Text>{kraj || '-'}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Miejscowość\">\n                    <Text>{miejscowosc || '-'}</Text>\n                </FieldWithLabel>\n            </GridCustom>\n        );\n    }\n\n    return (\n        <li className=\"separate-content\">\n            <GridCustom centerVertical fullwidth>\n                <Text>{ogloszeniaContext.typMiejscaRealizacji[typ]}</Text>\n                <ButtonStyled onClick={() => props.removeMiejsceRealizacji(temporaryId)} remove className=\"btn--delete\">\n                    Usuń<span className=\"sr-only\"> miejsce realizacji</span>\n                </ButtonStyled>\n            </GridCustom>\n            {address}\n        </li>\n    )\n};\n\n\nexport { MiejsceRealizacji };\n","import React, { Component } from 'react';\n\nimport { getLastTemporaryIdFromList } from '../../../helpers';\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { FormMiejsceRealizacji } from './FormMiejsceRealizacji';\nimport { MiejsceRealizacji } from './MiejsceRealizacji';\n\n\nclass MiejscaRealizacji extends Component{\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            newMiejsceRealizacjiOn: false,\n        };\n\n        this.handleSaveMiejsceRealizacji = this.handleSaveMiejsceRealizacji.bind(this);\n    }\n\n    render() {\n        const miejscaRealizacji = this.props.miejscaRealizacji;\n        return (\n            <>\n                <Text info className=\"mr-counter\">Liczba miejsc realizacji: {miejscaRealizacji.length}</Text>\n                <ul>\n                    {miejscaRealizacji.map((mr) =>\n                        <MiejsceRealizacji\n                            key={mr.temporaryId}\n                            miejsceRealizacji={mr}\n                            removeMiejsceRealizacji={this.props.removeMiejsceRealizacji} />\n                    )}\n                </ul>\n                {this.renderNewMiejsceRealizacjiForm()}\n            </>\n        )\n    }\n\n    renderNewMiejsceRealizacjiForm() {\n        if (this.state.newMiejsceRealizacjiOn) {\n            // temporaryId is computed based on temporaryIds of all of miejscaRealizacji\n            // in ogloszenie and all not saved yet miejscaRealizacji in the przedmiotZamowienia\n            const temporaryId = Math.max(this.props.lastTemporaryId, getLastTemporaryIdFromList(this.props.miejscaRealizacji)) + 1;\n            return <FormMiejsceRealizacji\n                        temporaryId={temporaryId}\n                        cancelNewMiejsceRealizacji={() => this.setState({newMiejsceRealizacjiOn: false})}\n                        saveMiejsceRealizacji={this.handleSaveMiejsceRealizacji}\n                        computeProgress={this.props.computeProgress} />\n        } else {\n            if (this.props.miejscaRealizacji.length === 10) {\n                return null\n            }\n            return (\n                <GridCustom flexEnd>\n                    <ButtonStyled add id=\"dodaj_miejsceRealizacji_button_id\" onClick={() => this.setState({newMiejsceRealizacjiOn: true})}>\n                        Dodaj miejsce realizacji<span className=\"sr-only\"> {this.props.errorsKodyMiejscaRealizacji}</span>\n                    </ButtonStyled>\n                </GridCustom>\n            )\n        }\n    }\n\n    handleSaveMiejsceRealizacji(data) {\n        this.props.saveMiejsceRealizacji(data).then(\n            () => this.setState({newMiejsceRealizacjiOn: false}));\n    }\n}\n\n\nexport { MiejscaRealizacji };\n","import React, { Component } from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { ButtonStyled, GridCustom, FieldWithLabel, Select, Text,\n         TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { KodyCPV } from './KodyCPV';\nimport { MiejscaRealizacji } from './MiejscaRealizacji';\n\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: 'Wybierz',\n}\n\n\nclass FormPrzedmiotZamowienia extends Component {\n\n    constructor(props) {\n        super(props);\n        const pz = props.przedmiotZamowienia || {};\n        this.state = {\n            temporaryId: pz.temporaryId,\n            id: pz.id || null,\n            kategoria: pz.kategoria || null,\n            podkategoria: pz.podkategoria || null,\n            okresGwarancji: pz.okresGwarancji || '',\n            opis: pz.opis || '',\n            kodyCPV: pz.kodyCPV || [],\n            miejscaRealizacji: pz.miejscaRealizacji || [],\n            errors: {},\n        };\n\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        this.setState(\n            {errors: this.context.formErrors.przedmiotyZamowienia[this.props.przedmiotZamowienia.temporaryId] || {}},\n            () => window.formOgloszenie.computeProgress()\n        );\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (window.formOgloszenie) {\n            window.formOgloszenie.computeProgress();\n        }\n    }\n\n    // handlers\n\n    handleAddKodCPV = (kod) => {\n        this.setState(\n            prevState => ({\n                kodyCPV: [...prevState.kodyCPV, kod]\n            }),\n        );\n    }\n\n    handleRemoveKodCPV = (id_) => {\n        this.setState(prevState => ({\n            kodyCPV: prevState.kodyCPV.filter(code => parseInt(code.id) !== parseInt(id_)),\n        }));\n    }\n\n    handleRemoveMiejsceRealizacji = (temporaryId) => {\n        this.setState(prevState => ({\n            miejscaRealizacji: prevState.miejscaRealizacji.filter(mr => mr.temporaryId !== temporaryId),\n        }));\n    }\n\n    handleSaveMiejsceRealizacji = (data, isNew) => {\n        return new Promise((resolve, reject) => {\n            this.setState(prevState => ({\n                miejscaRealizacji: [...prevState.miejscaRealizacji, data]\n            }), resolve());\n        })\n    }\n\n    handleSave = () => {\n        const data = this.getData();\n        this.context.clearPrzedmiotZamowieniaErrors(\n            this.props.przedmiotZamowienia.temporaryId,\n            () => this.props.onSave(data)\n        );\n    }\n\n    // helpers\n\n    getData() {\n        let data = Object.assign({}, this.state);\n        delete data['errors'];\n        return data\n    }\n\n    // rendering\n\n    render() {\n        const {\n            errors,\n            kategoria,\n            kodyCPV,\n            miejscaRealizacji,\n            okresGwarancji,\n            opis,\n            podkategoria,\n        } = this.state;\n        const{\n            przedmiotZamowieniaPodkategoriaDict,\n            przedmiotZamowieniaKategoria,\n            przedmiotZamowieniaKategoriaDict,\n        } = this.context;\n\n        const selectClassName = 'select-custom';\n        const selectInvalidClassName = 'select-custom select-custom--invalid';\n        const isAlreadyPublished = this.props.isAlreadyPublished;\n        const kategoriaInvalid = (errors.kategoria || '').length > 0\n\n        return (\n            <>\n                <GridCustom fullwidth flexBottom flexM>\n                    <FieldWithLabel\n                        label=\"Kategoria przedmiotu zamówienia\"\n                        tag=\"label\"\n                        selectRef={React.createRef()}\n                        className=\"select-custom--long\">\n                        <Select\n                            aria-label={`Kategoria przedmiotu zamówienia ${errors.kategoria || ''}`}\n                            className={((errors.kategoria || '').length > 0) ? selectInvalidClassName : selectClassName}\n                            indicatorId=\"pz_kategoria_id\"\n                            isDisabled={isAlreadyPublished}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                            options={[EMPTY_VALUE, ].concat(...przedmiotZamowieniaKategoria.map(t => ({value: t.id, label: t.nazwa})))}\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            styles={customSelectStyles}\n                            value={{value: kategoria || EMPTY_VALUE.value, label: przedmiotZamowieniaKategoriaDict[kategoria] || EMPTY_VALUE.label}}\n                            onChange={(selectedOption) => {\n                                this.setState({kategoria: parseInt(selectedOption.value) || null, podkategoria: null});\n                            }}\n                        />\n                        {kategoriaInvalid && <Text error>{errors.kategoria}</Text>}\n                    </FieldWithLabel>\n                    <FieldWithLabel\n                        label=\"Podkategoria\"\n                        aria-label={kategoria !== null ? null : `Podkategoria, pole nieaktywne. Aby wybrać podkategorię, musisz wybrać kategorię przedmiotu zamówienia. ${errors.podkategoria || ''}`}\n                        selectRef={React.createRef()}\n                        tag=\"label\"\n                        tabIndex={kategoria !== null ? null : '0'}\n                    >\n                        <Select\n                            className={((errors.podkategoria || '').length > 0) ? selectInvalidClassName : selectClassName}\n                            indicatorId=\"pz_podkategoria_id\"\n                            isDisabled={isAlreadyPublished || kategoria === null}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                            options={kategoria === null ? [EMPTY_VALUE, ] : [EMPTY_VALUE, ].concat(\n                                ...przedmiotZamowieniaKategoria.filter(k => parseInt(k.id) === parseInt(kategoria))[0].podkategorie.map(p => ({value: p.id, label: p.nazwa})))}\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            styles={customSelectStyles}\n                            value={{value: podkategoria || EMPTY_VALUE.value, label: przedmiotZamowieniaPodkategoriaDict[podkategoria] || EMPTY_VALUE.label}}\n                            onChange={(selectedOption) => this.setState({podkategoria: parseInt(selectedOption.value) || null})}\n                        />\n                        {(errors.podkategoria || '').length > 0 && <Text error>{errors.podkategoria}</Text>}\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Okres gwarancji\" tag=\"label\" labelFor=\"okresGwarancji_id\">\n                        <TextFieldCustom\n                            aria-valuemax={200}\n                            clearFieldContext=\"okres gwarancji\"\n                            fullwidth\n                            characterCount\n                            maxLength={200}\n                            value={okresGwarancji}\n                            onChange={(event) => this.setState({okresGwarancji: event.target.value})}\n                            onClear={(event) => this.setState({okresGwarancji: ''})}\n                            id=\"okresGwarancji_id\"\n                            aria-label={`Okres gwarancji, maksymalna liczba znaków: 200. Wpisano ${okresGwarancji.length} znaków.`} />\n                    </FieldWithLabel>\n                </GridCustom>\n\n                <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor=\"pz_opis_id\">\n                    <TextFieldCustom\n                        aria-describedby={(errors.opis || '').length > 0 ? 'pz_opis_error' : null}\n                        textarea\n                        fullwidth\n                        maxLength={10000}\n                        aria-valuemax={10000}\n                        clearFieldContext=\"opis\"\n                        characterCount\n                        invalid={(errors.opis || '').length > 0}\n                        value={opis}\n                        onChange={(event) => this.setState({opis: event.target.value})}\n                        onClear={(ev) => this.setState({opis: ''})}\n                        id=\"pz_opis_id\"\n                        aria-label={`Opis, maksymalna liczba znaków: 10000. Wpisano ${opis.length} znaków.`} />\n                    {(errors.opis || '').length > 0 && <Text error id=\"pz_opis_error\">{errors.opis}</Text>}\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Kody CPV\">\n                    {(errors.kodyCPV || '').length > 0 && <Text error>{errors.kodyCPV}</Text>}\n                    <KodyCPV\n                        errorsKodyCPV={errors.kodyCPV}\n                        kodyCPV={kodyCPV}\n                        addKodCPV={this.handleAddKodCPV}\n                        removeKodCPV={this.handleRemoveKodCPV} />\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Miejsce realizacji\">\n                    {(errors.miejscaRealizacji || '').length > 0 && <Text error><span className=\"sr-only\">Miejsce realizacji - </span>{errors.miejscaRealizacji}</Text>}\n                    <MiejscaRealizacji\n                        errorsKodyMiejscaRealizacji={errors.miejscaRealizacji}\n                        miejscaRealizacji={miejscaRealizacji}\n                        lastTemporaryId={this.props.miejsceRealizacjiLastTemporaryId}\n                        removeMiejsceRealizacji={this.handleRemoveMiejsceRealizacji}\n                        saveMiejsceRealizacji={this.handleSaveMiejsceRealizacji} />\n                </FieldWithLabel>\n                <GridCustom flexEnd>\n                    <ButtonStyled cancel onClick={this.props.onCloseForm}>Anuluj</ButtonStyled>\n                    <ButtonStyled\n                        className=\"btn btn--save-main\"\n                        id=\"zapisz_przedmiotZamowienia_button_id\"\n                        save\n                        onClick={this.handleSave}>\n                        Zapisz przedmiot zamówienia\n                    </ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    }\n}\n\nFormPrzedmiotZamowienia.contextType = AdvertisementContext;\n\n\nexport { FormPrzedmiotZamowienia };\n","import React, { Component } from 'react';\nimport '@material/dialog/dist/mdc.dialog.css';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { isNotEmpty, listOrEmpty } from '../../../helpers';\nimport { Box, ButtonStyled, DialogCustom, Ellipsis, GridCustom, FieldWithLabel, Text } from '../../common';\n\n\nclass PrzedmiotZamowienia extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            isRemovingOn: false,\n        };\n    }\n\n    // rendering\n\n    render() {\n        const pz = this.props.przedmiotZamowienia;\n        const formLocked = this.props.formLocked;\n\n        let kodyCPVPrzedmiotuZamowienia;\n        if (isNotEmpty(pz.kodyCPV)) {\n            kodyCPVPrzedmiotuZamowienia = listOrEmpty(pz.kodyCPV).map(kod_ => {\n                return <Text key={kod_.id}>{kod_.kod} {kod_.nazwa}</Text>\n            });\n        } else {\n            kodyCPVPrzedmiotuZamowienia = '-';\n        }\n        return (\n            <AdvertisementConsumer>\n                {({\n                    formErrors,\n                    przedmiotZamowieniaPodkategoriaDict,\n                    przedmiotZamowieniaKategoriaDict\n                }) => (\n                    <Box\n                        fullwidth\n                        invalid={Object.keys(formErrors.przedmiotyZamowienia[pz.temporaryId] || {}).length > 0}\n                        titleWithSubtitle={przedmiotZamowieniaKategoriaDict[pz.kategoria] || '-'}\n                        tag=\"li\"\n                        subtitle={przedmiotZamowieniaPodkategoriaDict[pz.podkategoria] || '-'}\n                        ariaLabelMoreOptions={`Rozwiń opcje przedmiotu zamówienia: edytuj ${!this.props.isAlreadyPublished ? ', usuń' : ''}`}\n                        boxWithMenu={(\n                            <>\n                                <h3 className=\"sr-only\">Menu więcej opcji przedmiotu ogłoszenia</h3>\n                                <ul>\n                                     <li>\n                                        <ButtonStyled\n                                            className=\"box__menu-item\"\n                                            disabled={formLocked}\n                                            lite\n                                            onClick={() => this.props.onEditClick(pz.temporaryId)}>\n                                            Edytuj\n                                        </ButtonStyled>\n                                    </li>\n                                    {!this.props.isAlreadyPublished && (\n                                        <li>\n                                            <ButtonStyled\n                                                className=\"box__menu-item\"\n                                                disabled={formLocked}\n                                                remove\n                                                onClick={() => this.setState({isRemovingOn: true})}>\n                                                Usuń\n                                            </ButtonStyled>\n                                        </li>\n                                    )}\n                                </ul>\n                            </>\n                        )} >\n                        <FieldWithLabel label=\"Opis\">\n                            <Ellipsis>\n                                <Text className=\"long-text\">{pz.opis || '-'}</Text>\n                            </Ellipsis>\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Kod CPV\">\n                            {kodyCPVPrzedmiotuZamowienia}\n                        </FieldWithLabel>\n                        {this.renderRemovingPart()}\n                    </Box>\n                )}\n            </AdvertisementConsumer>\n        )\n    }\n\n    handleCloseRemovingDialog = () => {\n        this.setState({isRemovingOn: false});\n    }\n\n    renderRemovingPart() {\n        if (this.state.isRemovingOn) {\n            return (\n                <DialogCustom \n                    className=\"dialog\"\n                    dialogTitle=\"Czy na pewno chcesz usunąć ten przedmiot zamówienia?\"\n                    onClose={this.handleCloseRemovingDialog}\n                >\n                    <>\n                        <Text>Jeśli tak, zostaną usunięte również następujące obiekty powiązane, o ile zostały zdefiniowane:</Text>\n                        <Text>- Miejsca realizacji</Text>\n                        <Text>- Etapy</Text>\n                        <Text>- Wymagania</Text>\n                        <GridCustom centerVertical flexEnd>\n                            <ButtonStyled onClick={this.handleCloseRemovingDialog} cancel>Anuluj</ButtonStyled>\n                            <ButtonStyled onClick={() => this.props.onRemoveClick(this.props.przedmiotZamowienia.temporaryId)} remove>Usuń</ButtonStyled>\n                        </GridCustom>\n                    </>\n                </DialogCustom>\n            )\n        }\n    }\n}\n\n\nexport { PrzedmiotZamowienia };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getLastTemporaryId, getSortedOrderItemsFromOrder,\n         isNotEmpty } from '../../../helpers';\nimport {\n    ButtonStyled,\n    DialogCustom,\n    GridCustom,\n    Steps,\n    Text,\n} from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { FormPrzedmiotZamowienia } from './FormPrzedmiotZamowienia';\nimport { PrzedmiotZamowienia } from './PrzedmiotZamowienia';\n\n\nclass StepPrzedmiotZamowienia extends BaseStepComponent {\n    stepName = 'przedmiot';\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            formPrzedmiotZamowieniaOn: false,\n            addedPrzedmiotZamowieniaId: null,\n            editedPrzedmiotZamowieniaId: null,\n        };\n    }\n\n    // handlers\n\n    handleCloseForm = () => {\n        this.setState(\n            {\n                formPrzedmiotZamowieniaOn: false,\n                addedPrzedmiotZamowieniaId: null,\n                editedPrzedmiotZamowieniaId: null,\n            },\n            () => {\n                if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n            }\n        );\n    }\n\n    handleSave = (data) => {\n        const isNew = this.state.editedPrzedmiotZamowieniaId === null;\n        this.context.savePrzedmiotZamowienia(\n            data,\n            isNew,\n            () => this.setState(\n                {\n                    formPrzedmiotZamowieniaOn: false,\n                    addedPrzedmiotZamowieniaId: isNew ? data.temporaryId : null,\n                    editedPrzedmiotZamowieniaId: null,\n                }\n            )\n        )\n    }\n\n    handleEditClick = (temporaryId) => {\n        this.setState({\n            formPrzedmiotZamowieniaOn: true,\n            editedPrzedmiotZamowieniaId: temporaryId,\n        });\n    }\n\n    handleRemovePrzedmiotZamowienia = (temporaryId) => {\n        this.context.removePrzedmiotZamowienia(temporaryId);\n    }\n\n    // rendering\n\n    render() {\n        const { isAlreadyPublished, isPreview } = this.props;\n        const przedmiotZamowieniaError = this.context.formErrors.ogloszenie.przedmiotyZamowienia;\n        const o = this.context.ogloszenie;\n        const przedmiotyZamowienia = isPreview ? [] : getSortedOrderItemsFromOrder(o.zamowienia);\n\n        const formLocked = this.props.isPreview || this.context.validationOn || this.context.savingOn;\n        return (\n            <>\n                <PomocEkranowa ekran=\"form_announcement_item\" content={this.props.pomocEkranowaContent} />\n                {isAlreadyPublished && <AlreadyPublishedInfo />}\n                {!isAlreadyPublished && (\n                    <GridCustom flexEnd>\n                        <ButtonStyled\n                            add\n                            className=\"btn btn--main\"\n                            disabled={formLocked}\n                            id=\"dodaj_przedmiotZamowienia_button_id\"\n                            onClick={(e) => {\n                                this.setState({formPrzedmiotZamowieniaOn: true});\n                                e.currentTarget.blur();\n                            }} >\n                            Dodaj nowy przedmiot zamówienia\n                        </ButtonStyled>\n                    </GridCustom>\n                )}\n                <Text tag=\"h2\" sectionHeader>Lista przedmiotów zamówienia</Text>\n                <Text info>Liczba wyników: {przedmiotyZamowienia.length}</Text>\n                <ul>\n                    {przedmiotyZamowienia.map(pz => {\n                        return <PrzedmiotZamowienia\n                            formLocked={formLocked}\n                            isAlreadyPublished={isAlreadyPublished}\n                            key={pz.temporaryId}\n                            przedmiotZamowienia={pz}\n                            onEditClick={this.handleEditClick}\n                            onRemoveClick={this.handleRemovePrzedmiotZamowienia} />\n                    })}\n                </ul>\n                {!isNotEmpty(przedmiotyZamowienia) && (przedmiotZamowieniaError || '').length > 0 && <Text error>{przedmiotZamowieniaError}</Text>}\n                <Steps\n                    disabled={formLocked}\n                    elementToFocusRef={this.props.elementToFocusRef}\n                    hasNext\n                    nextLabel=\"Terminy\"\n                    onNextClick={() => this.props.onChangeCurrentMenuLink('terminy')}\n                />\n                {this.state.addedPrzedmiotZamowieniaId !== null && o.czyDopuszczalnaOfertaCzesciowa && o.zamowienia.length > 1 && (\n                    <DialogCustom \n                        className=\"dialog\"\n                        dialogTitleError='Przedmiot zamówienia został dodany do pierwszej części zamówienia. Można to zmienić w sekcji \"Części i kryteria\".'\n                        style={{ zIndex: 100 }}\n                        onClose={() => this.setState({ addedPrzedmiotZamowieniaId: null })}\n                    >\n                        <GridCustom centerVertical flexEnd>\n                            <ButtonStyled onClick={() => this.setState({ addedPrzedmiotZamowieniaId: null })} primary>OK</ButtonStyled>\n                        </GridCustom>\n                    </DialogCustom>\n                )}\n                {this.state.formPrzedmiotZamowieniaOn && this.renderPrzedmiotZamowieniaForm(przedmiotyZamowienia)}\n            </>\n        )\n    }\n\n    renderPrzedmiotZamowieniaForm(przedmiotyZamowienia) {\n        let przedmiotZamowieniaData = {};\n        const { editedPrzedmiotZamowieniaId } = this.state;\n        const pzLength = przedmiotyZamowienia.length;\n        const zamowienia = this.context.ogloszenie.zamowienia;\n\n        if (editedPrzedmiotZamowieniaId === null) {\n            przedmiotZamowieniaData['temporaryId'] = pzLength ? Math.max(...przedmiotyZamowienia.map(pz => pz.temporaryId)) + 1 : 1;\n            przedmiotZamowieniaData['zamowienieTemporaryId'] = zamowienia.length ? Math.min(...zamowienia.map(z => z.temporaryId)) : 1;\n        } else {\n            for (let pz of przedmiotyZamowienia) {\n                if (pz.temporaryId === editedPrzedmiotZamowieniaId) {\n                    przedmiotZamowieniaData = pz;\n                    break;\n                }\n            }\n        }\n        const isAlreadyPublished = this.props.isAlreadyPublished;\n        return (\n            <DialogCustom \n                className=\"dialog-long-content\"\n                dialogTitle={`${editedPrzedmiotZamowieniaId === null ? 'Dodaj' : 'Edytuj'} przedmiot zamówienia`}\n                style={{ zIndex: 100 }}\n                onClose={this.handleCloseForm}\n            >\n                <>\n                    {isAlreadyPublished && <AlreadyPublishedInfo />}\n                    <FormPrzedmiotZamowienia\n                        isAlreadyPublished={isAlreadyPublished}\n                        miejsceRealizacjiLastTemporaryId={getLastTemporaryId(\n                            przedmiotyZamowienia, 'miejsceRealizacji')}\n                        przedmiotZamowienia={przedmiotZamowieniaData}\n                        onCloseForm={this.handleCloseForm}\n                        onSave={this.handleSave}\n                    />\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\n\nStepPrzedmiotZamowienia.contextType = AdvertisementContext;\n\n\nexport { StepPrzedmiotZamowienia }\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport '@material/checkbox/dist/mdc.checkbox.css';\nimport '@material/form-field/dist/mdc.form-field.css';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { dateToString } from '../../../helpers';\nimport {\n    ButtonStyled,\n    DateCalendar,\n    DialogCustom,\n    GridCustom,\n    FieldWithLabel,\n    Text,\n    TextFieldCustom\n} from '../../common';\n\n\nclass FormHarmonogram extends Component{\n\n    constructor(props) {\n        super(props);\n\n        if (props.isNew) {\n            this.state = Object.assign({}, props.harmonogram, {\n                poczatekRealizacji: '',\n                koniecRealizacji: '',\n                opis: '',\n                czyWystepujePlatnoscCzesciowa: false,\n                isPickerOpen: false,\n            });\n        } else {\n            this.state = Object.assign(\n                {isPickerOpen: false}, props.harmonogram);\n        }\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        window.formOgloszenie.computeProgress();\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (window.formOgloszenie) {\n            window.formOgloszenie.computeProgress();\n        }\n    }\n\n    // helpers\n\n    handleEscPress = (event) => {\n    if (event.keyCode === 27) {\n        if (this.state.isPickerOpen) {\n            event.nativeEvent.stopImmediatePropagation();\n        } else {\n            this.props.onCloseForm();\n        }\n    }\n}\n\n    // handlers\n\n    handleSave = () => {\n        const {isNew, harmonogram} = this.props;\n        this.props.onSave({\n            id: isNew ? null : harmonogram.id,\n            temporaryId: harmonogram.temporaryId,\n            przedmiotZamowieniaTemporaryId: this.props.przedmiotZamowieniaTemporaryId,\n            poczatekRealizacji: this.state.poczatekRealizacji,\n            koniecRealizacji: this.state.koniecRealizacji,\n            opis: this.state.opis.trim(),\n            czyWystepujePlatnoscCzesciowa: this.state.czyWystepujePlatnoscCzesciowa,\n        }, isNew);\n    }\n\n    handleCloseDialog = () => {\n        this.props.onCloseForm();\n    }\n\n    handleCalendarOpen = () => {\n        this.setState({isPickerOpen: true})\n    }\n\n    handleCalendarClose = () => {\n        this.setState({isPickerOpen: false})\n    }\n\n    // rendering\n\n    render() {\n        const poczatekInputRef = React.createRef();\n        const koniecInputRef = React.createRef();\n        return (\n            <AdvertisementConsumer>\n                {({formErrors, clearAttributeError}) => {\n                    const temporaryId = this.props.harmonogram.temporaryId;\n                    const errors = formErrors.harmonogramy[temporaryId] || {};\n                    const koniecRealizacjiErrorVisible = (errors.koniecRealizacji || '').length > 0;\n                    return (\n                        <DialogCustom \n                            className=\"dialog\"\n                            style={{ zIndex: 100 }}\n                            onClose={this.handleCloseDialog}\n                            onKeyDown={this.handleEscPress}\n                        >\n                            <>\n                                <Text className=\"dialog__title-custom\">Dodaj etap</Text>\n                                <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor=\"harmonogram_opis_id\">\n                                    <TextFieldCustom\n                                        aria-label={`Opis, maksymalna liczba znaków: 4000. Wpisano ${this.state.opis.length} znaków.`}\n                                        aria-valuemax={4000}\n                                        clearFieldContext=\"opis\"\n                                        characterCount\n                                        fullwidth\n                                        id=\"harmonogram_opis_id\"\n                                        maxLength={4000}\n                                        onChange={(event) => this.setState({opis: event.target.value})}\n                                        onClear={(ev) => this.setState({opis: ''})}\n                                        textarea\n                                        value={this.state.opis}\n                                    />\n                                </FieldWithLabel>\n                                <FieldWithLabel label=\"Początek\" tag=\"label\" inputRef={poczatekInputRef}>\n                                    <DateCalendar\n                                        dateName=\"Początek\"\n                                        fullwidth\n                                        parentRef={poczatekInputRef}\n                                        value={Date.parse(this.state.poczatekRealizacji)}\n                                        onCalendarOpen={this.handleCalendarOpen}\n                                        onCalendarClose={this.handleCalendarClose}\n                                        onChange={(date) => this.setState({poczatekRealizacji: dateToString(date)})} />\n                                </FieldWithLabel>\n                                <FieldWithLabel label=\"Koniec\" tag=\"label\" inputRef={koniecInputRef}>\n                                    <DateCalendar\n                                        ariaDescribedby={koniecRealizacjiErrorVisible ? 'koniecRealizacji_error' : null}\n                                        dateName=\"Koniec\"\n                                        fullwidth\n                                        invalid={koniecRealizacjiErrorVisible}\n                                        parentRef={koniecInputRef}\n                                        value={Date.parse(this.state.koniecRealizacji)}\n                                        onCalendarOpen={this.handleCalendarOpen}\n                                        onCalendarClose={this.handleCalendarClose}\n                                        onChange={(date) => this.setState(\n                                            {koniecRealizacji: dateToString(date)},\n                                            () => {\n                                                if (koniecRealizacjiErrorVisible) {\n                                                    clearAttributeError('harmonogramy', temporaryId, 'koniecRealizacji')       // it's possible to change value by clicking clear button\n                                                }\n                                            }\n                                        )}\n                                        onFocus={(ev) => {clearAttributeError('harmonogramy', temporaryId, 'koniecRealizacji')}} />\n                                    {koniecRealizacjiErrorVisible && <Text error id=\"koniecRealizacji_error\">{errors.koniecRealizacji}</Text>}\n                                </FieldWithLabel>\n                                <Checkbox\n                                    label=\"Płatność częściowa\"\n                                    checked={this.state.czyWystepujePlatnoscCzesciowa}\n                                    onChange={(event) => this.setState({czyWystepujePlatnoscCzesciowa: event.target.checked})} />\n                                <GridCustom flexEnd>\n                                    <ButtonStyled onClick={this.handleCloseDialog} cancel>Anuluj</ButtonStyled>\n                                    <ButtonStyled id=\"potwierdz_zapisz_harmonogram_button_id\" save onClick={this.handleSave}>{this.props.isNew ? 'Dodaj' : 'Zapisz zmiany'}</ButtonStyled>\n                                </GridCustom>\n                                {(errors.koniecRealizacji || '').length > 0 && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n                            </>\n                        </DialogCustom>\n                    )\n                }}\n            </AdvertisementConsumer>\n        )\n    }\n}\n\n\nexport { FormHarmonogram };\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { Box, ButtonStyled, Ellipsis, GridCustom, FieldWithLabel, Text } from '../../common';\nimport { FormHarmonogram } from './FormHarmonogram';\n\n\nclass Harmonogramy extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            newHarmonogramOn: false,\n            editingHarmonogramId: null,\n        };\n    }\n\n    // handlers\n\n    handleCloseForm = () => {\n        this.setState(\n            {\n                newHarmonogramOn: false,\n                editingHarmonogramId: null,\n            },\n            () => {\n                if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n            }\n        );\n    }\n\n    handleSave = (data, isNew) => {\n        this.props.onSaveHarmonogram(data, isNew, this.handleCloseForm);\n    }\n\n    // rendering\n\n    render() {\n        const {\n            harmonogramy,\n            okresGwarancji,\n            opis,\n            podkategoria,\n            typ,\n        } = this.props;\n        return (\n            <AdvertisementConsumer>\n                {({formErrors, przedmiotZamowieniaPodkategoriaDict, przedmiotZamowieniaKategoriaDict}) => (\n                    <Box\n                        tag=\"li\"\n                        titleWithSubtitle={przedmiotZamowieniaKategoriaDict[typ] || '-'}\n                        subtitle={przedmiotZamowieniaPodkategoriaDict[podkategoria] || '-'}\n                        fullwidth >\n                        <FieldWithLabel label=\"Opis\">\n                            <Ellipsis>\n                                <Text className=\"long-text\">{opis}</Text>\n                            </Ellipsis>\n                        </FieldWithLabel>\n                        {okresGwarancji.length > 0 && (\n                            <FieldWithLabel label=\"Okres gwarancji\">\n                                <Text>{okresGwarancji}</Text>\n                            </FieldWithLabel>\n                        )}\n                        <Text tag=\"h3\" sectionHeader>Etapy</Text>\n                        <Text info>Liczba wyników: {harmonogramy.length}</Text>\n                        <GridCustom tag=\"ul\">\n                            {harmonogramy.map((h, i) => {\n                                return this.renderHarmonogram(h, i + 1, formErrors);\n                            })}\n                        </GridCustom>\n                        {this.renderHarmonogramForm()}\n                        {this.renderNewHarmonogramButton()}\n                    </Box>\n                )}\n            </AdvertisementConsumer>\n        )\n    }\n\n    renderHarmonogram(harmonogram, index, formErrors) {\n        const formLocked = this.props.formLocked;\n        const etapErrors = Object.keys(formErrors.harmonogramy[harmonogram.temporaryId] || {}).length > 0\n        return (\n            <Box key={harmonogram.temporaryId} tag=\"li\">\n                <section>\n                    {etapErrors && (\n                        <Text error role=\"alert\">\n                            <Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /> Niepoprawne informacje o etapie\n                        </Text>\n                    )}\n                    <Text tag=\"h4\" accentHeader>Etap {index}</Text>\n                    <FieldWithLabel label=\"Opis\">\n                        <Ellipsis>\n                            <Text className=\"long-text\">{harmonogram.opis || '-'}</Text>\n                        </Ellipsis>\n                    </FieldWithLabel>\n                    <GridCustom fullwidth>\n                        <FieldWithLabel label=\"Początek\">\n                            <Text>{harmonogram.poczatekRealizacji || '-'}</Text>\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Koniec\">\n                            <Text>{harmonogram.koniecRealizacji || '-'}</Text>\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <FieldWithLabel label=\"Płatność częściowa\">\n                        <Text>{harmonogram.czyWystepujePlatnoscCzesciowa ? 'TAK' : 'NIE'}</Text>\n                    </FieldWithLabel>\n                </section>\n                <GridCustom flexEnd>\n                    <ButtonStyled\n                        disabled={formLocked}\n                        remove\n                        onClick={() => this.props.onRemoveHarmonogram(\n                            this.props.przedmiotZamowieniaTemporaryId, harmonogram.temporaryId)\n                        }>\n                        Usuń<span className=\"sr-only\"> etap {index}</span>\n                    </ButtonStyled>\n                    <ButtonStyled\n                        disabled={formLocked}\n                        lite\n                        onClick={() => this.setState(\n                            {editingHarmonogramId: harmonogram.temporaryId})\n                        }>\n                        Edytuj<span className=\"sr-only\"> etap {index} {etapErrors ? 'Uwaga! Etap zawiera błędy!' : ''}</span>\n                    </ButtonStyled>\n                </GridCustom>\n            </Box>\n        )\n    }\n\n    renderHarmonogramForm() {\n        const {\n            editingHarmonogramId,\n            newHarmonogramOn\n        } = this.state;\n\n        if (newHarmonogramOn || editingHarmonogramId !== null) {\n            let h;\n            if (newHarmonogramOn) {\n                h = {temporaryId: this.props.lastTemporaryId + 1};\n            } else {\n                h = this.props.harmonogramy.filter(\n                    harm => harm.temporaryId === editingHarmonogramId)[0];\n            }\n\n            return <FormHarmonogram\n                        harmonogram={h}\n                        isNew={newHarmonogramOn}\n                        przedmiotZamowieniaTemporaryId={this.props.przedmiotZamowieniaTemporaryId}\n                        onCloseForm={this.handleCloseForm}\n                        onSave={this.handleSave} />\n        }\n        return null\n    }\n\n    renderNewHarmonogramButton() {\n        if (this.state.newHarmonogramOn) { return null }\n        return (\n            <GridCustom flexEnd additionalClassName=\" box__button-container\">\n                <ButtonStyled\n                    add\n                    disabled={this.props.formLocked}\n                    id={`pz${this.props.przedmiotZamowieniaTemporaryId}_dodaj_harmonogram_button_id`}\n                    onClick={() => this.setState({newHarmonogramOn: true})}>\n                    Dodaj etap\n                </ButtonStyled>\n            </GridCustom>\n        )\n    }\n}\n\n\nexport { Harmonogramy };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { dateToString, getLastTemporaryId, getSortedOrderItemsFromOrder,\n         listOrEmpty } from '../../../helpers';\nimport {\n    DateCalendar,\n    FieldWithLabel,\n    GridCustom,\n    Steps,\n    Text,\n} from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { Harmonogramy } from './Harmonogramy';\n\n\nclass StepTerminy extends BaseStepComponent {\n    stepName = 'terminy';\n\n    // rendering\n\n    render() {\n        const { isPreview } = this.props;\n        const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n        const o = this.context.ogloszenie;\n        const przedmiotyZamowienia = isPreview ? [] : getSortedOrderItemsFromOrder(o.zamowienia);\n\n        let przedmiotyZamowienia_;\n        if (przedmiotyZamowienia.length) {\n            przedmiotyZamowienia_ = <ul>{przedmiotyZamowienia.map(pz =>\n                <Harmonogramy\n                    formLocked={formLocked}\n                    harmonogramy={listOrEmpty(pz.harmonogramy)}\n                    key={pz.temporaryId}\n                    lastTemporaryId={getLastTemporaryId(\n                        przedmiotyZamowienia, 'harmonogramy')}\n                    okresGwarancji={pz.okresGwarancji}\n                    opis={pz.opis}\n                    podkategoria={pz.podkategoria}\n                    przedmiotZamowieniaTemporaryId={pz.temporaryId}\n                    typ={pz.kategoria}\n                    onSaveHarmonogram={this.context.saveHarmonogram}\n                    onRemoveHarmonogram={this.context.removeHarmonogram} />\n            )}</ul>\n        } else if ((this.context.formErrors.ogloszenie.przedmiotyZamowienia_harmonogramy || '').length) {\n            przedmiotyZamowienia_ = <Text error>Zdefiniuj przedmioty zamówienia, aby móc dodawać do nich terminy.</Text>;\n        }\n\n        const planowanyTerminPodpisaniaUmowyInputRef = React.createRef();\n        return (\n            <>\n                <PomocEkranowa ekran=\"form_announcement_deadlines\" content={this.props.pomocEkranowaContent} />\n                <GridCustom>\n                    <section>\n                        <FieldWithLabel label=\"Data opublikowania\">\n                            {isPreview ? '---' : o.ogloszenie.dataOpublikowania || '---'}\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Planowany termin podpisania umowy\" tag=\"label\" inputRef={planowanyTerminPodpisaniaUmowyInputRef}>\n                            <DateCalendar\n                                dateCalendarRef={React.createRef()}\n                                dateFormat=\"rok myślnik miesiąc\"\n                                dateFormatCustom=\"yyyy-MM\"\n                                dateName=\"Planowany termin podpisania umowy\"\n                                disabled={formLocked}\n                                parentRef={planowanyTerminPodpisaniaUmowyInputRef}\n                                showMonthYearPicker\n                                value={isPreview ? '' : Date.parse(o.planowanyTerminPodpisaniaUmowy || '')}\n                                onChange={date => this.context.setAttributeValue('planowanyTerminPodpisaniaUmowy', dateToString(date))} />\n                        </FieldWithLabel>\n                    </section>\n                </GridCustom>\n                {przedmiotyZamowienia_}\n                <Steps\n                    disabled={formLocked}\n                    elementToFocusRef={this.props.elementToFocusRef}\n                    hasNext\n                    hasPrev\n                    nextLabel=\"Warunki\"\n                    prevLabel=\"Przedmiot\"\n                    onNextClick={() => this.props.onChangeCurrentMenuLink('warunki')}\n                    onPrevClick={() => this.props.onChangeCurrentMenuLink('przedmiot')}\n                />\n            </>\n        )\n    }\n}\n\n\nStepTerminy.contextType = AdvertisementContext;\n\n\nexport { StepTerminy }\n","import React, { Component } from 'react';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { ButtonStyled, DialogCustom, GridCustom, FieldWithLabel, Select, Text, TextFieldCustom } from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: '--- Wybierz ---',\n}\n\n\nclass FormWarunekUdzialu extends Component{\n\n    constructor(props) {\n        super(props);\n\n        let stateDict = {\n            opisError: '',\n            typError: '',\n            isValidating: false,\n        }\n        if (props.isNew) {\n            this.state = Object.assign(stateDict, props.warunekUdzialu, {\n                typ: null,\n                opis: '',\n            });\n        } else {\n            this.state = Object.assign(stateDict, props.warunekUdzialu);\n        }\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        window.formOgloszenie.computeProgress();\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (window.formOgloszenie) {\n            window.formOgloszenie.computeProgress();\n        }\n    }\n\n    // handlers\n\n    handleChangeTyp(value) {\n        this.setState({typ: parseInt(value) || null});\n    }\n\n    handleSave = (clearFunct) => {\n        if (!this.validate(clearFunct)) { return }\n        const {isNew, warunekUdzialu} = this.props;\n\n        this.props.onSave({\n            id: isNew ? null : warunekUdzialu.id,\n            temporaryId: warunekUdzialu.temporaryId,\n            przedmiotZamowieniaTemporaryId: this.props.przedmiotZamowieniaTemporaryId,\n            typ: this.state.typ,\n            opis: this.state.opis.trim(),\n        }, isNew);\n    }\n\n    handleCloseDialog = () => {\n        this.props.onCloseForm();\n    }\n\n    // helpers\n\n    mergeErrors(globalErrors) {\n        // copy global errors\n        let errors = Object.assign({}, globalErrors);\n\n        // get state errors\n        for (let name of ['typ', 'opis']) {\n            const error = this.state[`${name}Error`];\n            if (error.length) {\n                errors[name] = error;\n            }\n        }\n\n        return errors\n    }\n\n    validate(clearFunct) {\n        // clean errors\n        const temporaryId = this.props.warunekUdzialu.temporaryId;\n        clearFunct('warunkiUdzialu', temporaryId, 'opis')\n        clearFunct('warunkiUdzialu', temporaryId, 'typ')\n        this.setState({isValidating: true, opisError: '', typError: ''});\n\n        let isValid = true;\n        if (this.state.typ === null) {\n            this.setState({typError: 'To pole jest wymagane.'});\n            isValid = false;\n        }\n        if (!this.state.opis.trim()) {\n            this.setState({opisError: 'To pole jest wymagane.'});\n            isValid = false;\n        }\n        this.setState({isValidating: false});\n        return isValid\n    }\n\n    // rendering\n\n    render() {\n        const isValidating = this.state.isValidating;\n        return (\n            <AdvertisementConsumer>\n                {({clearAttributeError, formErrors, typWarunku}) => {\n                    const temporaryId = this.props.warunekUdzialu.temporaryId;\n                    const errors = this.mergeErrors(formErrors.warunkiUdzialu[temporaryId]);\n                    const selectClassName = 'select-custom';\n                    const selectInvalidClassName = 'select-custom select-custom--invalid';\n                    const errorsOpisVisible = (errors.opis || '').length > 0;\n                    const errorsTypVisible = (errors.typ || '').length > 0;\n\n                    return (\n                        <DialogCustom \n                            className=\"dialog\"\n                            dialogTitle=\"Dodaj Warunek udziału\"\n                            onClose={this.handleCloseDialog}\n                        >\n                            <>\n                                <FieldWithLabel label=\"Typ wymagania\" tag=\"label\" selectRef={React.createRef()}>\n                                    <Select\n                                        aria-label={`Typ wymagania ${errors.typ || ''}`}\n                                        aria-describedby={errorsTypVisible ? 'typ_error' : null}\n                                        screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                        className={errorsTypVisible ? selectInvalidClassName : selectClassName}\n                                        isDisabled={isValidating}\n                                        aria-required={true}\n                                        options={[EMPTY_VALUE, ].concat(...Object.entries(typWarunku).filter(([id, _]) => !this.props.usedWarunkiUdzialuIds.includes(parseInt(id))).sort().map(([key, value]) => ({value: key, label: value})))}\n                                        value={{value: this.state.typ || EMPTY_VALUE.value, label: typWarunku[this.state.typ] || EMPTY_VALUE.label}}\n                                        onChange={(selectedOption) => this.handleChangeTyp(selectedOption.value)}\n                                        styles={customSelectStyles}\n                                        noOptionsMessage={() => 'Brak wybranej opcji'}\n                                    />\n                                    {errorsTypVisible && <Text id=\"typ_error\" error>{errors.typ}</Text>}\n                                </FieldWithLabel>\n                                <FieldWithLabel label=\"Opis wymagania\" tag=\"label\" labelFor=\"warunekUdzialu_opis_id\">\n                                    <TextFieldCustom\n                                        aria-describedby={errorsOpisVisible ? 'opis_error' : null}\n                                        clearFieldContext=\"opis wymagania\"\n                                        disabled={isValidating}\n                                        textarea\n                                        fullwidth\n                                        invalid={errorsOpisVisible}\n                                        maxLength={6000}\n                                        characterCount\n                                        value={this.state.opis}\n                                        onChange={(event) => this.setState({opis: event.target.value})}\n                                        onClear={(ev) => this.setState({opis: ''})}\n                                        aria-required={true}\n                                        id=\"warunekUdzialu_opis_id\"\n                                        aria-label={`Opis wymagania, maksymalna liczba znaków: 6000. Wpisano ${this.state.opis.length} znaków.`}\n                                    />\n                                    {errorsOpisVisible && <Text error id=\"opis_error\">{errors.opis}</Text>}\n                                </FieldWithLabel>\n                                <GridCustom flexEnd>\n                                    <ButtonStyled\n                                        cancel\n                                        disabled={isValidating}\n                                        onClick={this.handleCloseDialog} >Anuluj</ButtonStyled>\n                                    <ButtonStyled\n                                        aria-label={this.props.isNew ? 'Dodaj warunek udziału' : 'Zapisz zmiany w warunku udziału'}\n                                        disabled={isValidating}\n                                        save\n                                        onClick={() => this.handleSave(clearAttributeError)} >\n                                        {this.props.isNew ? 'Dodaj' : 'Zapisz zmiany'}\n                                    </ButtonStyled>\n                                </GridCustom>\n                                {(errors.typ || errors.opis || '').length > 0 && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n                            </>\n                        </DialogCustom>\n                    )\n                }}\n            </AdvertisementConsumer>\n        )\n    }\n}\n\n\nexport { FormWarunekUdzialu };\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { AdvertisementConsumer } from '../../../context/advertisementContext';\nimport { Box, ButtonStyled, Ellipsis, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { FormWarunekUdzialu } from './FormWarunekUdzialu';\n\n\nclass WarunkiUdzialu extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            newWarunekUdzialuOn: false,\n            editingWarunekUdzialuTemporaryId: null,\n        };\n    }\n\n    // handlers\n\n    handleCloseForm = () => {\n        this.setState(\n            {\n                newWarunekUdzialuOn: false,\n                editingWarunekUdzialuTemporaryId: null,\n            },\n            () => {\n                if (window.formOgloszenie) { window.formOgloszenie.computeProgress()}\n            }\n        );\n    }\n\n    handleSave = (data, isNew) => {\n        this.props.onSaveWarunekUdzialu(data, isNew, this.handleCloseForm);\n    }\n\n    // rendering\n\n    render() {\n        const {\n            opis,\n            podkategoria,\n            typ,\n            warunkiUdzialu,\n        } = this.props;\n        return (\n             <AdvertisementConsumer>\n                {({\n                    formErrors,\n                    przedmiotZamowieniaPodkategoriaDict,\n                    przedmiotZamowieniaKategoriaDict,\n                    typWarunku\n                }) => (\n                    <Box\n                        tag=\"li\"\n                        titleWithSubtitle={przedmiotZamowieniaKategoriaDict[typ] || '-'}\n                        subtitle={przedmiotZamowieniaPodkategoriaDict[podkategoria] || '-'}\n                        fullwidth >\n                        <FieldWithLabel label=\"Opis\">\n                            <Ellipsis>\n                                <Text className=\"long-text separate-part\">{opis}</Text>\n                            </Ellipsis>\n                        </FieldWithLabel>\n                        <Text tag=\"h3\" sectionHeader>Wymagania</Text>\n                        <Text info>Liczba wyników: {warunkiUdzialu.length}</Text>\n                        <GridCustom tag=\"ul\">\n                            {warunkiUdzialu.map((wu) => this.renderWarunekUdzialu(wu, formErrors, typWarunku))}\n                        </GridCustom>\n                        {this.renderWarunekUdzialuForm()}\n                        {this.renderNewWarunekUdzialuButton(typWarunku)}\n                    </Box>\n                )}\n            </AdvertisementConsumer>\n        )\n    }\n\n    renderWarunekUdzialu(warunekUdzialu, formErrors, typWarunku) {\n        const formLocked = this.props.formLocked;\n        return (\n            <Box key={warunekUdzialu.temporaryId} tag=\"li\">\n                {Object.keys(formErrors.warunkiUdzialu[warunekUdzialu.temporaryId] || {}).length > 0 && <Text error role=\"alert\"><Icon aria-hidden=\"true\" icon={{ icon: 'warning', size: 'xsmall' }} style={{marginRight: 3}} /> Błędy!</Text>}\n                <FieldWithLabel label=\"Typ wymagania\">\n                    <Text>{typWarunku[warunekUdzialu.typ] || '-'}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Opis wymagania\">\n                    <Ellipsis>\n                        <Text className=\"long-text\">{warunekUdzialu.opis || '-'}</Text>\n                    </Ellipsis>\n                </FieldWithLabel>\n                {!this.props.isAlreadyPublished && (\n                    <GridCustom flexEnd className=\"btn-container-bottom\">\n                        <ButtonStyled\n                            disabled={formLocked}\n                            remove\n                            onClick={() => this.props.onRemoveWarunekUdzialu(\n                                this.props.przedmiotZamowieniaTemporaryId, warunekUdzialu.temporaryId)\n                            }>\n                            Usuń\n                        </ButtonStyled>\n                        <ButtonStyled\n                            disabled={formLocked}\n                            lite\n                            onClick={() => this.setState(\n                                {newWarunekUdzialuOn: null, editingWarunekUdzialuTemporaryId: warunekUdzialu.temporaryId})\n                            }>\n                            Edytuj\n                        </ButtonStyled>\n                    </GridCustom>\n                )}\n            </Box>\n        )\n    }\n\n    renderWarunekUdzialuForm() {\n        const {\n            editingWarunekUdzialuTemporaryId,\n            newWarunekUdzialuOn,\n        } = this.state;\n        if (newWarunekUdzialuOn || editingWarunekUdzialuTemporaryId !== null) {\n            const {\n                lastTemporaryId,\n                przedmiotZamowieniaTemporaryId,\n                warunkiUdzialu,    // list of warunekUdzialu for this przedmiotZamowienia\n            } = this.props;\n\n            let wu, usedWarunkiUdzialuIds;\n            if (newWarunekUdzialuOn) {\n                wu = {temporaryId: lastTemporaryId + 1};\n                usedWarunkiUdzialuIds = warunkiUdzialu.map(wu => parseInt(wu.typ));\n            } else {\n                wu = warunkiUdzialu.filter(\n                    w => w.temporaryId === editingWarunekUdzialuTemporaryId)[0];\n                usedWarunkiUdzialuIds = warunkiUdzialu.map(\n                    wu => parseInt(wu.typ)).filter((id) => id !== parseInt(wu.typ));\n            }\n\n            return <FormWarunekUdzialu\n                        isNew={newWarunekUdzialuOn}\n                        przedmiotZamowieniaTemporaryId={przedmiotZamowieniaTemporaryId}\n                        usedWarunkiUdzialuIds={usedWarunkiUdzialuIds}\n                        warunekUdzialu={wu}\n                        onCloseForm={this.handleCloseForm}\n                        onSave={this.handleSave} />\n        }\n        return null\n    }\n\n    renderNewWarunekUdzialuButton(typWarunku) {\n        if (this.props.isAlreadyPublished) { return null }\n\n        if (!this.state.newWarunekUdzialuOn &&\n                Object.keys(typWarunku).filter(id => !this.props.warunkiUdzialu.map(\n                    wu => parseInt(wu.typ)).includes(parseInt(id))).length) {\n            return (\n                <GridCustom flexEnd additionalClassName=\" box__button-container\">\n                    <ButtonStyled\n                        add\n                        disabled={this.props.formLocked}\n                        id={`pz${this.props.przedmiotZamowieniaTemporaryId}_dodaj_warunekUdzialu_button_id`}\n                        onClick={() => this.setState({newWarunekUdzialuOn: true, editingWarunekUdzialuTemporaryId: null})}>\n                        Dodaj wymaganie\n                    </ButtonStyled>\n                </GridCustom>\n            )\n        }\n        return null\n    }\n}\n\n\nexport { WarunkiUdzialu };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getLastTemporaryId, getSortedOrderItemsFromOrder,\n         listOrEmpty } from '../../../helpers';\nimport { GridCustom, Steps, Text } from '../../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\nimport { WarunkiUdzialu } from './WarunkiUdzialu';\n\n\nclass StepWarunki extends BaseStepComponent {\n    stepName = 'warunki';\n\n    // rendering\n\n    render() {\n        const { isAlreadyPublished, isPreview } = this.props;\n        const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n        const o = this.context.ogloszenie;\n        const przedmiotyZamowienia = isPreview ? [] : getSortedOrderItemsFromOrder(o.zamowienia);\n\n        let przedmiotyZamowienia_;\n        if (przedmiotyZamowienia.length) {\n            przedmiotyZamowienia_ = przedmiotyZamowienia.map(pz =>\n                <WarunkiUdzialu\n                    isAlreadyPublished={isAlreadyPublished}\n                    formLocked={formLocked}\n                    key={pz.temporaryId}\n                    lastTemporaryId={getLastTemporaryId(\n                        przedmiotyZamowienia, 'warunkiUdzialu')}\n                    opis={pz.opis}\n                    podkategoria={pz.podkategoria}\n                    przedmiotZamowieniaTemporaryId={pz.temporaryId}\n                    typ={pz.kategoria}\n                    warunkiUdzialu={listOrEmpty(pz.warunkiUdzialu)}\n                    onSaveWarunekUdzialu={this.context.saveWarunekUdzialu}\n                    onRemoveWarunekUdzialu={this.context.removeWarunekUdzialu} />\n            )\n        } else if ((this.context.formErrors.ogloszenie.przedmiotyZamowienia_warunkiUdzialu || '').length) {\n            przedmiotyZamowienia_ = <Text error>Zdefiniuj przedmioty zamówienia, aby móc dodawać do nich warunki.</Text>\n        }\n\n        return (\n            <>\n                <PomocEkranowa ekran=\"form_announcement_conditions\" content={this.props.pomocEkranowaContent} />\n                {isAlreadyPublished && <AlreadyPublishedInfo />}\n                <GridCustom tag=\"ul\">{przedmiotyZamowienia_}</GridCustom>\n                <Steps\n                    disabled={formLocked}\n                    elementToFocusRef={this.props.elementToFocusRef}\n                    hasNext\n                    hasPrev\n                    nextLabel=\"Części i kryteria\"\n                    prevLabel=\"Terminy\"\n                    onNextClick={() => this.props.onChangeCurrentMenuLink('czesciKryteria')}\n                    onPrevClick={() => this.props.onChangeCurrentMenuLink('terminy')}\n                />\n            </>\n        )\n    }\n}\n\n\nStepWarunki.contextType = AdvertisementContext;\n\n\nexport { StepWarunki }\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { Steps, Text } from '../../common';\nimport { Zalaczniki } from '../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { AlreadyPublishedInfo } from './AlreadyPublishedInfo';\nimport { BaseStepComponent } from './BaseStepComponent';\n\n\nconst MAX_ATTACHMENTS_NUMBER = 20;\n\n\nclass StepZalaczniki extends BaseStepComponent {\n    stepName = 'zalaczniki';\n\n    // helpers\n    distinguishAttachments() {\n        let oldAttachments = [];\n        let currentAttachments = [];\n        const ogloszenie = this.context.ogloszenie;\n        for (let attachment of ogloszenie.zalaczniki) {\n            if (!attachment.origin) { continue }\n            if ((ogloszenie.status.label === 'DRAFT' && attachment.origin.id === this.context.ogloszenie.id) || (ogloszenie.status.label !== 'DRAFT' && attachment.origin.id === null)) {\n                currentAttachments.push(attachment);\n            } else {\n                oldAttachments.push(attachment);\n            }\n        }\n        return [oldAttachments, currentAttachments]\n    }\n\n    // rendering\n\n    render() {\n        const { isAlreadyPublished, isPreview } = this.props;\n        const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n        const [oldAttachments, currentAttachments] = isPreview ? [[], []] : this.distinguishAttachments();\n        const oldAttachmentsLength = oldAttachments.length;\n        return (\n            <>\n                <PomocEkranowa ekran=\"form_announcement_attachments\" content={this.props.pomocEkranowaContent} />\n                <Text tag=\"h2\" sectionHeader>Załączniki</Text>\n                <Text info className=\"text--counter\">Liczba wyników: {oldAttachments.length + currentAttachments.length}</Text>\n                <Text info>Możesz załączyć maksymalnie {MAX_ATTACHMENTS_NUMBER} plików.</Text>\n                {this.renderCurrentAttachments(\n                    currentAttachments, oldAttachmentsLength, isAlreadyPublished, formLocked)}\n                {this.renderOldAttachments(oldAttachments, oldAttachmentsLength, isAlreadyPublished)}\n                <Steps\n                    disabled={formLocked}\n                    elementToFocusRef={this.props.elementToFocusRef}\n                    hasPrev\n                    prevLabel=\"Pozostałe\"\n                    onPrevClick={() => this.props.onChangeCurrentMenuLink('pozostale')}\n                />\n            </>\n        )\n    }\n\n    renderCurrentAttachments(attachments, oldAttachmentsLength, isAlreadyPublished, formLocked) {\n        return (\n            <Zalaczniki\n                isAlreadyPublished={false}\n                contextForSaving='advertisement'\n                errors={this.context.formErrors.zalaczniki}\n                formLocked={formLocked}\n                header={isAlreadyPublished ? 'Załączniki dodane w bieżącej wersji' : ''}\n                maxLength={MAX_ATTACHMENTS_NUMBER}\n                withoutHeader={!(isAlreadyPublished && oldAttachmentsLength)}\n                zalaczniki={attachments}\n                zalacznikiLength={attachments.length + oldAttachmentsLength}\n                addZalacznik={this.context.addZalacznik}\n                removeZalacznik={this.context.removeZalacznik}\n                saveZalacznikAttributes={this.context.setZalacznikAttributes}>\n                {oldAttachmentsLength > 0 && <Text info className=\"text--counter\">Liczba wyników: {attachments.length}</Text>}\n            </Zalaczniki>\n        )\n    }\n\n    renderOldAttachments(attachments, attachmentsLength, isAlreadyPublished) {\n        if (!attachmentsLength) { return null }\n        return (\n            <Zalaczniki\n                isAlreadyPublished={isAlreadyPublished}\n                contextForSaving='advertisement'\n                errors={this.context.formErrors.zalaczniki}\n                header={'Załączniki dodane w poprzednich wersjach'}\n                formLocked={true}\n                maxLength={MAX_ATTACHMENTS_NUMBER}\n                zalaczniki={attachments}\n                addZalacznik={this.context.addZalacznik}\n                removeZalacznik={this.context.removeZalacznik}\n                saveZalacznikAttributes={this.context.setZalacznikAttributes}>\n                <Text info className=\"text--counter\">Liczba wyników: {attachments.length}</Text>\n                <AlreadyPublishedInfo info='To ogłoszenie zostało już opublikowane i nie ma możliwości edycji załączników dodanych w poprzednich wersjach.' />\n            </Zalaczniki>\n        )\n    }\n}\n\n\nStepZalaczniki.contextType = AdvertisementContext;\n\n\nexport { StepZalaczniki }\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\nimport '@material/form-field/dist/mdc.form-field.css';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { fetchApi } from '../../../fetch';\nimport { computeProgress, dateToString, getOrderItemsLength, setFocusOnElement } from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { URLS } from '../../../urls/frontend';\nimport {\n    ButtonStyled,\n    DialogCustom,\n    GridCellCustom,\n    GridCustom,\n    LinearProgressCustom,\n    MenuBasic,\n    Message,\n    Text,\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { FormPublikowanie } from './FormPublikowanie';\nimport { StepCzesciKryteria } from './StepCzesciKryteria';\nimport { StepPozostale } from './StepPozostale';\nimport { StepPrzedmiotZamowienia } from './StepPrzedmiotZamowienia';\nimport { StepTerminy } from './StepTerminy';\nimport { StepWarunki } from './StepWarunki';\nimport { StepZalaczniki } from './StepZalaczniki';\n\n\nconst DEFAULT_OGLOSZENIE = {\n    ogloszenie: {\n        id: null,\n        status: {},\n        numer: null,\n        dataOpublikowania : '',\n    },\n    id: null,\n    projekty: [],\n    tytul: '',\n    zamowieniaUzupelniajace: '',\n    nabor: null,\n    warunkiZmianyUmowy: '',\n    czyDopuszczalnaOfertaCzesciowa: false,\n    dataOpublikowania: '',\n    terminOfert: '',\n    planowanyTerminPodpisaniaUmowy: '',\n    zamowienia: [],\n    osobyDoKontaktu: [],\n    zalaczniki: [],\n};\n\n\nclass FormOgloszenie extends BaseComponent {\n    componentDidMount() {\n        // clear context state before first request to server\n        this.context.clearState(\n            () => {\n                if (this.props.preview) { return }\n\n                document.title = `Baza Konkurencyjności - ${this.state.isNew ? 'dodaj ogłoszenie' : 'edycja ogłoszenia'}`;\n                super.componentDidMount();\n            }\n        );\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.userId !== this.props.userId) {\n            this.setState(prevState => {\n                if (!this.state.isNew) {\n                    this.initializeData();  // TODO: check if dictionaries are valid for new user\n                }\n            });\n        }\n    }\n\n    componentWillUnmount() {\n        super.componentWillUnmount();\n\n        if (this.xhrSaveFetch !== null) {\n            this.xhrSaveFetch.abort();\n        }\n\n        if (this.clearMenuErrorTimeout !== null) {\n            clearTimeout(this.clearMenuErrorTimeout);\n        }\n\n        // don't leave not default data and errors in state\n        this.context.clearState();\n        if (this.props.setAdvertisementManagerType) {\n            this.props.setAdvertisementManagerType(\n                {isAuthor: false, isAdmin: false});\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        const { isNew } = this.state;\n        if (!isNew) {\n            // clean some data, it will be set from advertisement dictionaries data\n            Object.assign(data, {\n                projects: [],\n                enrollment_numbers: [],\n                contact_persons: [],\n            })\n        }\n\n        this.context.setConstsFromServer(\n            data,\n            () => {\n                // prepare advertisement data\n                if (isNew) {\n                    this.props.setAdvertisementManagerType(\n                        {isAuthor: true, isAdmin: false},\n                        this.context.setOgloszenie(\n                            null,\n                            () => this.setState({initializingOn: false})\n                        )\n                    );\n                } else {\n                    this.getAdvertisementDataFromServer(this.props.match.params.id);\n                }\n            }\n        );\n    }\n\n    handleSetCurrentMenuLink(id) {\n        this.setState({currentMenuLink: id});\n        setFocusOnElement(this.formContentRef);\n    }\n\n    handleChangeCurrentMenuLink = (stepName) => {\n        this.handleSetCurrentMenuLink(this.menuLinksMapNameId[stepName]);\n    }\n\n    handleChangeProjectsSelected = (ev) => {\n        const checked = ev.target.checked;\n        this.setState(\n            {projectsSelected: checked},\n            () => this.context.changeProjectsSelected(checked)\n        );\n    }\n\n    handleReturnToList = () => {\n        this.props.history.push(URLS[\n            this.props.userData.advertisementManagerType.isAdmin\n                ? 'managementAdvertisements'\n                : 'advertisements'\n        ].path);\n    }\n\n    handleFetchOgloszenieSuccess = (data, additionalSuccessFunction=null) => {\n        this.xhrFetch = null;     // clean xhr object\n\n        let ogloszenie = Object.assign(\n            {}, DEFAULT_OGLOSZENIE,\n            getSerializedObject(data.advertisement, {\n                dateAttributes: [\n                    'planowanyTerminPodpisaniaUmowy', 'dataModyfikacji',\n                    'poczatekRealizacji', 'koniecRealizacji', 'dataOpublikowania'],\n                dateTimeAttributes: ['dataUtworzenia', ],\n                addTemporaryId: true,\n            })\n        );\n\n        const nabor = ogloszenie.ogloszenie.nabor || null;\n        Object.assign(ogloszenie, {\n            zamowienia: this.reformatPrzedmiotyZamowieniaData(ogloszenie.zamowienia),\n            projekty: ogloszenie.ogloszenie.projekty.map(p => p.id),\n            osobyDoKontaktu: ogloszenie.osobyDoKontaktu.map(o => o.id),\n            nabor: nabor !== null ? {value: nabor.id, label: nabor.calyNumer} : null,\n        });\n        delete ogloszenie.ogloszenie['projekty'];\n        delete ogloszenie.ogloszenie['nabor'];\n\n        document.title = \"Baza Konkurencyjności - edycja ogłoszenia \" + ogloszenie.tytul;\n        this.isAlreadyPublished = !!this.props.preview ? false : parseInt(\n            ogloszenie.ogloszenie.status.id) !== parseInt(this.context.roboczeStatus);\n\n        this.context.setConstsFromAdvertisementData(\n            data.dictionaries,\n            () => {\n                const {jestAutorem = false} = ogloszenie.ogloszenie;\n                this.props.setAdvertisementManagerType(\n                    {isAuthor: jestAutorem, isAdmin: !jestAutorem},\n                    () => {\n                        this.context.setOgloszenie(\n                            ogloszenie,\n                            () => this.setState(\n                                {\n                                    initializingOn: false,\n                                    projectsSelected: ogloszenie.projekty.length > 0 || ogloszenie.nabor === null,\n                                },\n                                () => {\n                                    // do some additional steps\n                                    if (additionalSuccessFunction) {\n                                        additionalSuccessFunction();\n                                    }\n                                }\n                            )\n                        );\n                    }\n                );\n            }\n        )\n    }\n\n    handleFetchError = (data) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState(\n            {\n                fetchError: translateErrorMessage(data.message),\n                initializingOn: false,\n            },\n            () => {\n                if (this.context.savingOn) {\n                    this.context.changeFormLockedState('savingOn', false);\n                }\n            }\n        );\n    }\n\n    handleFetchIncorrectStatus = (status) => {\n        this.xhrFetch = null;     // clean xhr object\n\n        if ([403, 404].includes(status)) {\n            this.setState({pageNotFound: true, initializingOn: false});\n            return\n        }\n        this.setState(\n            {\n                fetchError: `Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n                initializingOn: false,\n            },\n            () => {\n                if (this.context.savingOn) {\n                    this.context.changeFormLockedState('savingOn', false);\n                }\n            }\n        );\n    }\n\n    handleValidate = () => {\n        this.context.changeFormLockedState('validationOn', true);\n\n        this.setState({\n            instruction: true,\n            validationAria: 'Sprawdź poprawność danych. Zwalidowano ogłoszenie. Wskaż element w menu, aby odczytać wynik walidacji.'\n        });\n        setTimeout((prevState) => {\n            this.setState({ validationAria: prevState });\n        }, 500);\n\n        let projectsSelected = this.state.projectsSelected;\n        if (\n            this.isAlreadyPublished &&\n            this.props.userData.advertisementManagerType.isAuthor\n        ) {\n            // set as null and don't validate it; owner can't edit projects/enrollment\n            projectsSelected = null;\n        }\n\n        const isValid = this.context.validate(\n            projectsSelected,\n            this.isAlreadyPublished,\n            this.props.userData.advertisementManagerType\n        );\n\n        // clear error/info for current step in menu after 10 seconds\n        this.clearMenuErrorTimeout = setTimeout(() => {\n            this.context.clearStepError(this.menuLinksMapIdName[this.state.currentMenuLink]);\n        }, 10000);\n\n        this.context.changeFormLockedState('validationOn', false);\n\n        return isValid\n    }\n\n    handleSave = (\n        ev=null,\n        callbackSuccess=null,\n        callbackError=null,\n        callbackIncorrectStatus=null\n    ) => {\n\n        const cleanData = () => {\n            this.xhrSaveFetch = null;     // clean xhr object\n            this.context.changeFormLockedState('savingOn', false);\n        }\n\n        let callbackError_ = null;\n        if (callbackError) {\n            callbackError_ = (data) => {\n                callbackError(data);\n                cleanData();\n            }\n        }\n\n        let callbackIncorrectStatus_ = null;\n        if (callbackIncorrectStatus) {\n            callbackIncorrectStatus_ = (status) => {\n                callbackIncorrectStatus(status);\n                cleanData();\n            }\n        }\n\n        this.context.changeFormLockedState(\n            'savingOn', true,\n            () => {\n                const isNew = this.state.isNew;\n                const data = this.getDataForSaving();\n                // save advertisement on server\n                this.xhrSaveFetch = fetchApi(\n                    isNew ? '/api/announcements' : `/api/announcements/${data.ogloszenie.id}`,\n                    isNew ? 'POST' : 'PUT',\n                    {},\n                    getSerializedObject(data, {toServer: true}),\n                    callbackSuccess || this.handleFetchSaveSuccess,\n                    callbackError_ || this.handleFetchSaveError,\n                    callbackIncorrectStatus_ || this.handleFetchSaveIncorrectStatus,\n                );\n            }\n        )\n    }\n\n    handleFetchSaveSuccess = (data, callback=null) => {\n        this.xhrSaveFetch = null;\n        // clear errors\n        this.context.clearFormErrors();\n\n        const ogloszenie = getSerializedObject(data.advertisement);\n        this.context.saveOgloszenie(\n            ogloszenie,\n            () => this.getAdvertisementDataFromServer(\n                this.context.ogloszenie.ogloszenie.id,\n                () => {\n                    this.context.changeFormLockedState(\n                        'savingOn', false,\n                        () => {\n                            this.setState(\n                                {\n                                    isNew: false,\n                                    fetchSaveError: '',\n                                    saveBtnText: 'Zapisano',\n                                },\n                                () => {\n                                    this.saveMsgTimeout = setTimeout(() => {\n                                        this.setState({saveBtnText: 'Zapisz wersję roboczą'});\n                                    }, 5000)\n                                    if (callback) { callback() }\n                                }\n                            );\n                        }\n                    );\n                }\n            )\n        );\n    }\n\n    handleFetchSaveError = (data) => {\n        this.xhrSaveFetch = null;     // clean xhr object\n        this.setState(\n            {fetchSaveError: translateErrorMessage(data.message)},\n            () => this.context.changeFormLockedState('savingOn', false)\n        );\n    }\n\n    handleFetchSaveIncorrectStatus = (status) => {\n        this.xhrSaveFetch = null;     // clean xhr object\n        let msg;\n        if (status === 403) {\n            msg = 'Nie masz uprawnień do edycji tego ogłoszenia.';\n        } else {\n            msg = `Wystąpił nieoczekiwany błąd o kodzie ${status}.`;\n        }\n        this.setState(\n            {fetchSaveError: msg},\n            () => this.context.changeFormLockedState('savingOn', false)\n        );\n    }\n\n    setPublishingSuccessInfo(info) {\n        this.setState({\n            publishingOn: false,\n            publishingSuccessInfo: info,\n        });\n    }\n\n    handlePublishByAdmin = () => {\n        if (this.handleValidate()) {\n            this.handleSave(\n                null,\n                () => this.setPublishingSuccessInfo(\n                    'Ogłoszenie zostało pomyślnie opublikowane.')\n            );\n        } else {\n            this.setState({\n                notValidByAdminError:\n                    'Ogłoszenie zawiera błędy. Po ich poprawieniu spróbuj ' +\n                    'opublikować ogłoszenie jeszcze raz.',\n            });\n        }\n    }\n\n    handlePublish = () => {\n        const { advertisementManagerType } = this.props.userData;\n        if (advertisementManagerType.isAuthor) {\n            this.setState({publishingOn: true});\n        } else if (advertisementManagerType.isAdmin) {\n            this.handlePublishByAdmin();\n        }\n    }\n\n    handleClosePublishingSuccessDialog = () => {\n        this.props.history.push(\n            this.props.userData.advertisementManagerType.isAuthor\n                ? URLS.advertisements.path\n                : URLS.advertisementsDetails.getUrl(this.props.match.params.id)\n        );\n    }\n\n    handleClosePublishingByAdminErrorDialog = () => {\n        this.setState({notValidByAdminError: ''});\n    }\n\n    // helpers\n\n    preState(props) {\n        this.handleSetCurrentMenuLink = this.handleSetCurrentMenuLink.bind(this);\n        this.menuLinks = [\n            {name: 'przedmiot', id: 1, label: 'Przedmiot', onClick: this.handleSetCurrentMenuLink},\n            {name: 'terminy', id: 2, label: 'Terminy', onClick: this.handleSetCurrentMenuLink},\n            {name: 'warunki', id: 3, label: 'Warunki', onClick: this.handleSetCurrentMenuLink},\n            {name: 'czesciKryteria', id: 4, label: 'Części i kryteria', onClick: this.handleSetCurrentMenuLink},\n            {name: 'pozostale', id: 5, label: 'Pozostałe', onClick: this.handleSetCurrentMenuLink},\n            {name: 'zalaczniki', id: 6, label: 'Załączniki', onClick: this.handleSetCurrentMenuLink},\n        ];\n        this.menuLinksMapNameId = {};\n        this.menuLinksMapIdName = {};\n        for (let link of this.menuLinks) {\n            this.menuLinksMapNameId[link.name] = link.id;\n            this.menuLinksMapIdName[link.id] = link.name;\n        }\n\n        this.isAlreadyPublished = false;\n    }\n\n    getAdditionalState(props) {\n        return {\n            initializingOn: props.preview ? false : true,\n            progress: 0,\n            currentMenuLink: props.preview && props.step ? this.menuLinksMapNameId[props.step] || 1 : 1,\n            saveBtnText: 'Zapisz wersję roboczą',\n            instruction: false,\n            isNew: props.isNew,\n            validationAria: null,\n            publishingOn: false,\n            projectsSelected: true,\n            fetchSaveError: '',\n            notValidByAdminError: '',\n            publishingSuccessInfo: '',\n        }\n    }\n\n    postState(props) {\n        super.postState(props);\n        this.clearMenuErrorTimeout = null;\n        this.formContentRef = React.createRef();\n        this.menuBasicRef = React.createRef();\n        this.xhrSaveFetch = null;\n    }\n\n    getFetchUrl() {\n        return '/api/dictionaries'\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się pobrać danych do formularza. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania danych do formularza wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    getAdvertisementDataFromServer(id_, additionalSuccessFunction) {\n        this.xhrFetch = fetchApi(\n            `/api/announcements/${id_}`,\n            'GET',\n            {},\n            {\n                dictionaries: ['projects', 'enrollment_numbers', 'contact_persons'],\n                version_mode: 'draft_or_last_published'\n            },\n            (data) => this.handleFetchOgloszenieSuccess(data, additionalSuccessFunction),\n            this.handleFetchError,\n            this.handleFetchIncorrectStatus,\n        );\n    }\n\n    computeProgress() {\n        let progress;\n        if (this.state.currentMenuLink === this.menuLinksMapNameId['przedmiot']) {\n            progress = computeProgress(getOrderItemsLength(this.context.ogloszenie.zamowienia) > 0 ? 1 : 0, 1);\n        } else {\n            progress = computeProgress();\n        }\n        if (progress !== this.state.progress) {\n            this.setState({progress});\n        }\n    }\n\n    reformatPrzedmiotyZamowieniaData(zamowienia) {\n        let temporaryId = 1;\n        return zamowienia.map(z => {\n            let przedmiotyZamowienia = [];\n            for (let pz of z.przedmiotyZamowienia) {\n                pz.temporaryId = temporaryId++;\n                pz.kategoria = pz.kategoria ? pz.kategoria.id : null;\n                pz.podkategoria = pz.podkategoria ? pz.podkategoria.id : null;\n                for (let mr of pz.miejscaRealizacji) {\n                    mr.typ = mr.typ.id;\n                }\n                for (let wu of pz.warunkiUdzialu) {\n                    wu.typ = wu.typ.id;\n                }\n                przedmiotyZamowienia.push(pz);\n            }\n            z.przedmiotyZamowienia = przedmiotyZamowienia;\n            return z\n        })\n    }\n\n    getDataForSaving() {\n        if (this.isAlreadyPublished) {\n            return this.getPublishedDataForSaving()\n        }\n\n        const ogloszenie = this.context.ogloszenie;\n        return {\n            ogloszenie: {\n                id: ogloszenie.ogloszenie.id,\n                projekty: ogloszenie.projekty,\n                nabor: ogloszenie.nabor === null ? null : ogloszenie.nabor.value,\n            },\n            id: ogloszenie.id,\n            tytul: ogloszenie.tytul.trim(),\n            zamowieniaUzupelniajace: ogloszenie.zamowieniaUzupelniajace.trim(),\n            warunkiZmianyUmowy: ogloszenie.warunkiZmianyUmowy.trim(),\n            czyDopuszczalnaOfertaCzesciowa: ogloszenie.czyDopuszczalnaOfertaCzesciowa,\n            planowanyTerminPodpisaniaUmowy: ogloszenie.planowanyTerminPodpisaniaUmowy,\n            zamowienia: ogloszenie.zamowienia.map(z => (\n                {\n                    id: z.id,\n                    zamowienieNode: z.zamowienieNode ? z.zamowienieNode.id : null,\n                    tytul: z.tytul,\n                    czyWariantowe: z.czyWariantowe,\n                    przedmiotyZamowienia: z.przedmiotyZamowienia.map(pz => {\n                        return Object.assign({}, pz, {kodyCPV: pz.kodyCPV.map(kod_ => kod_.id)})\n                    }),\n                    szacunkowaWartosc: z.szacunkowaWartosc,\n                    kryteriaOceny: z.kryteriaOceny,\n                }\n            )),\n            osobyDoKontaktu: ogloszenie.osobyDoKontaktu,\n            zalaczniki: ogloszenie.zalaczniki.map(z => ({id: z.id, nazwa: z.nazwa, plik: z.plik.id})),\n        }\n    }\n\n    getPublishedDataForSaving() {\n        const { ogloszenie} = this.context;\n        const { advertisementManagerType } = this.props.userData;\n        return {\n            ogloszenie: {\n                id: ogloszenie.ogloszenie.id,\n                // institution administrator can edit projects and enrollments\n                ...(advertisementManagerType.isAdmin\n                    ? {\n                        projekty: ogloszenie.projekty,\n                        nabor: ogloszenie.nabor === null ? null : ogloszenie.nabor.value,\n                    }\n                    : {}\n                )\n            },\n            id: ogloszenie.id,\n            tytul: ogloszenie.tytul.trim(),\n            planowanyTerminPodpisaniaUmowy: ogloszenie.planowanyTerminPodpisaniaUmowy,\n            zamowienia: ogloszenie.zamowienia.map(z => (\n                {\n                    id: z.id,\n                    zamowienieNode: z.zamowienieNode.id,\n                    przedmiotyZamowienia: z.przedmiotyZamowienia.map(pz => (\n                        {\n                            id: pz.id,\n                            okresGwarancji: pz.okresGwarancji,\n                            opis: pz.opis,\n                            kodyCPV: pz.kodyCPV.map(kod_ => kod_.id),\n                            miejscaRealizacji: pz.miejscaRealizacji,\n                            harmonogramy: pz.harmonogramy,\n                            groupUuid: pz.group_uuid,\n                        }\n                    )),\n                    szacunkowaWartosc: z.szacunkowaWartosc,\n                }\n            )),\n            // advertisement owner can edit contact persons\n            ...(advertisementManagerType.isAuthor\n                ? {osobyDoKontaktu: ogloszenie.osobyDoKontaktu}\n                : {}\n            ),\n            zalaczniki: ogloszenie.zalaczniki.map(\n                z => ({id: z.id, nazwa: z.nazwa, plik: z.plik.id})),\n        }\n    }\n\n    // rendering\n\n    renderContent() {\n        const currentMenuLink = this.state.currentMenuLink;\n\n        let fetchSaveError = null;\n        if (this.state.fetchSaveError.length) {\n            fetchSaveError = (\n                <GridCustom centerHorizontal>\n                    <Text error role=\"alert\">{this.state.fetchSaveError}</Text>\n                    <ButtonStyled onClick={() => this.setState({fetchSaveError: ''})} lite>OK</ButtonStyled>\n                </GridCustom>\n            );\n        }\n\n        return (\n            <GridCustom flexL noWrap>\n                <GridCellCustom>\n                    <MenuBasic\n                        addProgressIcon={true}\n                        children={this.menuLinks}\n                        currentMenuLink={currentMenuLink}\n                        disabled={!!this.props.preview || this.context.validationOn || this.context.savingOn}\n                        errors={this.context.stepErrors}\n                        ref={this.menuBasicRef}\n                        title={`${this.state.isNew ? 'Dodanie' : 'Edycja'} ogłoszenia`} />\n                    {this.state.instruction && this.renderInstruction()}\n                </GridCellCustom>\n                <GridCellCustom fill customRef={this.formContentRef} tabIndex=\"-1\">\n                    {this.renderFuturePublishingInfo()}\n                    <LinearProgressCustom progress={this.state.progress} />\n                    {currentMenuLink === this.menuLinksMapNameId['przedmiot'] && this.renderPrzedmiotZamowienia()}\n                    {currentMenuLink === this.menuLinksMapNameId['terminy'] && this.renderTerminy()}\n                    {currentMenuLink === this.menuLinksMapNameId['warunki'] && this.renderWarunki()}\n                    {currentMenuLink === this.menuLinksMapNameId['czesciKryteria'] && this.renderCzesciKryteria()}\n                    {currentMenuLink === this.menuLinksMapNameId['pozostale'] && this.renderPozostale()}\n                    {currentMenuLink === this.menuLinksMapNameId['zalaczniki'] && this.renderZalaczniki()}\n\n                    {this.renderButtons()}\n                    {fetchSaveError}\n                </GridCellCustom>\n                {this.state.notValidByAdminError.length > 0 &&\n                    this.renderPublishingByAdminError()\n                }\n                {this.state.publishingSuccessInfo.length > 0 &&\n                    this.renderPublishingSuccessInfo()\n                }\n            </GridCustom>\n        )\n    }\n\n    renderInstruction() {\n        return (\n            <section className=\"instruction\">\n                <Text info><Icon icon=\"done\" aria-hidden=\"true\" /> Poprawna walidacja</Text>\n                <Text info><Icon icon=\"error_outline\" aria-hidden=\"true\" /> Wymaga uwagi</Text>\n            </section>\n        )\n    }\n\n    renderFuturePublishingInfo() {\n        if (this.props.preview) { return }\n        const dataOpublikowania = this.context.ogloszenie.dataOpublikowania;\n        if (dataOpublikowania && dataOpublikowania > dateToString(new Date())) {\n            return (\n                <Text info>\n                    To ogłoszenie ma ustawiony przyszły termin publikacji oraz przyszły termin składania ofert. Po zapisie kopii roboczej pola te zostaną wyczyszczone.\n                </Text>\n            )\n        }\n        return null\n    }\n\n    renderPrzedmiotZamowienia() {\n        const isPreview = !!this.props.preview;\n        return <StepPrzedmiotZamowienia\n                    elementToFocusRef={this.formContentRef}\n                    isAlreadyPublished={this.isAlreadyPublished}\n                    isPreview={isPreview}\n                    pomocEkranowaContent={isPreview ? this.props.content : null}\n                    onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n                />\n    }\n\n    renderTerminy() {\n        const isPreview = !!this.props.preview;\n        return <StepTerminy\n                    elementToFocusRef={this.formContentRef}\n                    isPreview={isPreview}\n                    pomocEkranowaContent={isPreview ? this.props.content : null}\n                    onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n                />\n    }\n\n    renderWarunki() {\n        const isPreview = !!this.props.preview;\n        return <StepWarunki\n                    elementToFocusRef={this.formContentRef}\n                    isAlreadyPublished={this.isAlreadyPublished}\n                    isPreview={isPreview}\n                    pomocEkranowaContent={isPreview ? this.props.content : null}\n                    onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n                />\n    }\n\n    renderCzesciKryteria() {\n        const isPreview = !!this.props.preview;\n        return <StepCzesciKryteria\n                    elementToFocusRef={this.formContentRef}\n                    isAlreadyPublished={this.isAlreadyPublished}\n                    isPreview={isPreview}\n                    pomocEkranowaContent={isPreview ? this.props.content : null}\n                    onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n                />\n    }\n\n    renderPozostale() {\n        const isPreview = !!this.props.preview;\n        return <StepPozostale\n                    elementToFocusRef={this.formContentRef}\n                    isAlreadyPublished={this.isAlreadyPublished}\n                    isPreview={isPreview}\n                    pomocEkranowaContent={isPreview ? this.props.content : null}\n                    projectsSelected={this.state.projectsSelected}\n                    onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n                    onChangeProjectsSelected={this.handleChangeProjectsSelected}\n                />\n    }\n\n    renderZalaczniki() {\n        const isPreview = !!this.props.preview;\n        return <StepZalaczniki\n                    elementToFocusRef={this.formContentRef}\n                    isAlreadyPublished={this.isAlreadyPublished}\n                    isPreview={isPreview}\n                    pomocEkranowaContent={isPreview ? this.props.content : null}\n                    onChangeCurrentMenuLink={this.handleChangeCurrentMenuLink}\n                />\n    }\n\n    renderButtons() {\n        const isPreview = !!this.props.preview;\n        const formLocked = isPreview || this.context.validationOn || this.context.savingOn;\n        const { instruction, saveBtnText, validationAria } = this.state;\n        return (\n            <>\n                <GridCustom flexEnd>\n                    <ButtonStyled\n                        disabled={formLocked}\n                        lite\n                        noMargin\n                        onClick={this.handleValidate}\n                    >Sprawdź poprawność danych</ButtonStyled>\n                    {validationAria && (\n                        <span className=\"sr-only\" role=\"alert\" aria-live=\"assertive\">{validationAria}</span>\n                    )}\n                    {instruction && (\n                        <button type=\"button\" onClick={() => setFocusOnElement(this.menuBasicRef)} className=\"sr-only\">Przejdź do menu</button>\n                    )}\n                </GridCustom>\n                <GridCustom fullwidth className=\"advertisement-form-save\">\n                    {(isPreview || this.props.userData.advertisementManagerType.isAuthor) && (\n                        <>\n                            <ButtonStyled disabled={formLocked} onClick={this.handleSave} save noMargin>{saveBtnText}</ButtonStyled>\n                            {saveBtnText === 'Zapisano' && <span role=\"alert\" className=\"sr-only\">Zapisano!</span>}\n                        </>\n                    )}\n                    <ButtonStyled\n                        className=\"btn btn--main btn--save-main\"\n                        disabled={formLocked}\n                        noMargin\n                        onClick={this.handlePublish}\n                        save\n                    >\n                        Publikuj ogłoszenie\n                    </ButtonStyled>\n                </GridCustom>\n                <GridCustom>\n                    <ButtonStyled disabled={formLocked} onClick={this.handleReturnToList} prev noMargin>Powrót do listy ogłoszeń</ButtonStyled>\n                </GridCustom>\n                {this.state.publishingOn && (\n                    <FormPublikowanie {...this.props} formOgloszenie={this} roboczeStatus={this.context.roboczeStatus} />)}\n            </>\n        )\n    }\n\n    renderPublishingSuccessInfo() {\n        return (\n            <DialogCustom onClose={this.handleClosePublishingSuccessDialog}>\n                <Message\n                    success\n                    messageIcon=\"check_circle_outline\"\n                    messageTitle={this.state.publishingSuccessInfo} />\n                <GridCustom flexEnd>\n                    <ButtonStyled onClick={this.handleClosePublishingSuccessDialog} primary>OK</ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n\n    renderPublishingByAdminError() {\n        return (\n            <DialogCustom onClose={this.handleClosePublishingByAdminErrorDialog}>\n                <Message\n                    error\n                    messageIcon=\"clear\"\n                    messageTitle={this.state.notValidByAdminError} />\n                <GridCustom flexEnd>\n                    <ButtonStyled\n                        primary\n                        onClick={this.handleClosePublishingByAdminErrorDialog}\n                    >\n                        OK\n                    </ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n}\n\n\nFormOgloszenie.contextType = AdvertisementContext;\n\nexport { FormOgloszenie };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Switch } from '@rmwc/switch';\n\nimport '@material/switch/dist/mdc.switch.css';\n\nimport { fetchApi } from '../../../fetch';\nimport { ADVERTISEMENTS_CLEANED_FILTERS, filterAdvertisements } from '../../../filters';\nimport {\n    dateToString,\n    getUserFullName,\n    isAdvertisementLocked,\n    triggerBodyClick\n} from '../../../helpers';\nimport { serializeObject, serializeObjectList } from '../../../serializers';\nimport { ADVERTISEMENTS_SORTING_VALUES, sortAdvertisements } from '../../../sorters';\nimport { URLS } from '../../../urls/frontend';\nimport {\n    Box,\n    ButtonStyled,\n    Container,\n    DateCalendar,\n    DialogCustom,\n    GridCustom,\n    FieldWithLabel,\n    Select,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia';\nimport { BadgeAnchor, Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\n\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: '--- Wybierz ---',\n}\nconst ANNOUNCEMENT_STATUS_DRAFT = 'announcement_status_draft';\nconst ANNOUNCEMENT_STATUS_PUBLISHED = 'announcement_status_published';\nconst ANNOUNCEMENT_STATUSES = 'announcement_statuses';\n\n\nclass Ogloszenia extends BaseComponent {\n\n    // basic functions\n\n    componentDidMount() {\n        if (this.props.preview) { return }\n\n        document.title = \"Baza Konkurencyjności - ogłoszenia\";\n        super.componentDidMount();\n    }\n\n    componentWillUnmount() {\n        super.componentWillUnmount();\n        // abort api requests if exist\n        for (let xhr of [this.xhrRemoveAdvertisement, this.xhrCopyAdvertisement,\n                         this.xhrCancelAdvertisement]) {\n            if (xhr !== null) {\n                xhr.abort();\n            }\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess = (data) => {\n        super.handleFetchSuccess(data);\n\n        const ogloszenia = serializeObjectList(data.advertisements);\n\n        // update const values according to data from server\n        this.obublikowaneStatusId = data.dictionaries[ANNOUNCEMENT_STATUS_PUBLISHED];\n        this.roboczeStatusId = data.dictionaries[ANNOUNCEMENT_STATUS_DRAFT];\n        this.statusyOgloszen = data.dictionaries[ANNOUNCEMENT_STATUSES];\n\n        // update state after const defining\n        this.setState({initializingOn: false, ogloszenia: ogloszenia});\n    }\n\n    handleRemoveOgloszenie = (removeFunct, dialogComponent) => {\n        // remove advertisement on server\n            this.xhrRemoveAdvertisement = fetchApi(\n            `/api/announcements/${this.state.removedOgloszenieId}`,\n            'DELETE',\n            {},\n            {},\n            this.handleFetchRemoveOgloszenieSuccess,\n            this.handleFetchRemoveOgloszenieError,\n            this.handleFetchRemoveOgloszenieIncorrectStatus,\n        );\n    }\n\n    handleFetchRemoveOgloszenieSuccess = (data) => {\n        this.xhrRemoveAdvertisement = null;     // clean xhr object\n\n        // remove advertisement from state\n        this.setState(prevState => ({\n            ogloszenia: prevState.ogloszenia.filter(o => o.ogloszenie.id !== prevState.removedOgloszenieId),\n        }), this.handleCloseActionDialog);\n    }\n\n    handleFetchRemoveOgloszenieError = (data) => {\n        this.xhrRemoveAdvertisement = null;     // clean xhr object\n        this.setState({fetchActionError: data.message});\n    }\n\n    handleFetchRemoveOgloszenieIncorrectStatus = (status) => {\n        this.xhrRemoveAdvertisement = null;     // clean xhr object\n        this.setState({fetchActionError: `Wystąpił nieoczekiwany błąd o kodzie ${status}.`});\n    }\n\n    handleCopyOgloszenie = (baseOgloszenieId) => {\n        this.setState(\n            {copyingOgloszenieId: baseOgloszenieId},\n            () => {\n                this.xhrCopyAdvertisement = fetchApi(\n                    `/api/announcements/${baseOgloszenieId}/copy`,\n                    'POST',\n                    {},\n                    {},\n                    this.handleFetchCopyOgloszenieSuccess,\n                    this.handleFetchCopyOgloszenieError,\n                    this.handleFetchCopyOgloszenieIncorrectStatus,\n                );\n            }\n        );\n    }\n\n    handleFetchCopyOgloszenieSuccess = (data, baseOgloszenieId) => {\n        this.xhrCopyAdvertisement = null;      // clean xhr object\n\n        // update advertisements list and other state values\n        const ogloszenie = serializeObject(data.advertisement);\n        this.setState(prevState => ({\n            ogloszenia: [...prevState.ogloszenia, ogloszenie],\n            copiedOgloszenieIds: [...prevState.copiedOgloszenieIds, ogloszenie.ogloszenie.id],\n        }));\n    }\n\n    handleFetchCopyOgloszenieError = (data) => {\n        this.xhrCopyAdvertisement = null;      // clean xhr object\n        this.setState({fetchActionError: `Podczas kopiowania ogłoszenia wystąpił nieoczekiwany błąd: ${data.message}`});\n    }\n\n    handleFetchCopyOgloszenieIncorrectStatus = (status) => {\n        this.xhrCopyAdvertisement = null;      // clean xhr object\n        this.setState({fetchActionError: `Podczas kopiowania ogłoszenia wystąpił nieoczekiwany błąd o kodzie ${status}.`});\n    }\n\n    handleToggleFilters = (checked) => {\n        if (checked) {\n            this.setFiltersData();\n            this.setState({filtersAreOn: true});\n        } else {\n            this.setState({\n                filtersAreOn: false,\n                filters: ADVERTISEMENTS_CLEANED_FILTERS,\n            });\n        }\n    }\n\n    handleChangeFilter = (name, value) => {\n        this.setState((prevState) => {\n            return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n        });\n    }\n\n    handleCancelOgloszenie = () => {\n        // cancel advertisement on server\n        this.xhrRemoveAdvertisement = fetchApi(\n            `/api/announcements/${this.state.cancelledOgloszenieId}/cancel`,\n            'POST',\n            {},\n            {},\n            this.handleFetchCancelOgloszenieSuccess,\n            this.handleFetchCancelOgloszenieError,\n            this.handleFetchCancelOgloszenieIncorrectStatus,\n        );\n    }\n\n    handleFetchCancelOgloszenieSuccess = (data) => {\n        this.xhrCancelAdvertisement = null;     // clean xhr object\n        const ogloszenieData = serializeObject(data.advertisement);\n\n        // update advertisement status in the state\n        this.setState(\n            prevState => {\n                let ogloszenia = [];\n                for (let o of prevState.ogloszenia) {\n                    if (o.ogloszenie.id === prevState.cancelledOgloszenieId) {\n                        o.ogloszenie.status = Object.assign({}, o.ogloszenie.status, ogloszenieData.status);\n                    }\n                    ogloszenia.push(o);\n                }\n                return {ogloszenia}\n            },\n            this.handleCloseActionDialog\n        );\n    }\n\n    handleFetchCancelOgloszenieError = (data) => {\n        this.xhrCancelAdvertisement = null;     // clean xhr object\n        this.setState({fetchActionError: data.message});\n    }\n\n    handleFetchCancelOgloszenieIncorrectStatus = (status) => {\n        this.xhrCancelAdvertisement = null;     // clean xhr object\n        this.setState({fetchActionError: `Wystąpił nieoczekiwany błąd o kodzie ${status}.`});\n    }\n\n    handleCloseActionDialog = () => {\n        this.setState({\n            removedOgloszenieId: null,\n            removedOgloszenieTitle: '',\n            cancelledOgloszenieId: null,\n            cancelledOgloszenieTitle: '',\n        });\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            initializingOn: props.preview ? false : true,\n            filtersAreOn: false,\n            currentSortingValue: {\n                value: ADVERTISEMENTS_SORTING_VALUES[0][0],\n                label: ADVERTISEMENTS_SORTING_VALUES[0][1],\n            },\n            removedOgloszenieId: null,\n            removedOgloszenieTitle: '',\n            cancelledOgloszenieId: null,\n            cancelledOgloszenieTitle: '',\n            filters: Object.assign({}, ADVERTISEMENTS_CLEANED_FILTERS),\n            copyingOgloszenieId: null,  // for dialog after copying id of base ogloszenie\n            copiedOgloszenieIds: [],   // for distinguishing on the list\n            ogloszenia: [],\n            fetchActionError: '',\n        }\n    }\n\n    postState(props) {\n        this.obublikowaneStatusId = null;\n        this.roboczeStatusId = null;\n        this.statusyOgloszen = {};\n\n        this.actionComponent = null;\n\n        // keep xhr objects for componentWillUnmount\n        this.xhrRemoveAdvertisement = null;\n        this.xhrCopyAdvertisement = null;\n        this.xhrCancelAdvertisement = null;\n\n        if (this.props.preview) { return }\n\n        this.createdByList = [];    // needed for filtering\n        this.modifiedByList = [];    // needed for filtering\n    }\n\n    getFetchUrl() {\n        return '/api/announcements'\n    }\n\n    getFetchData() {\n        return {\n            dictionaries: [\n                ANNOUNCEMENT_STATUS_DRAFT, ANNOUNCEMENT_STATUS_PUBLISHED,\n                ANNOUNCEMENT_STATUSES],\n            mode: 'advertiser',\n        }\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się pobrać ogłoszeń. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się pobrać danych ogłoszeń. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    // helpers\n\n    setFiltersData() {\n\n        // set data for Utworzył and Modyfikował filters\n        let creators = [];\n        let createdByList = []\n        let modifiers = [];\n        let modifiedByList = [];\n\n        for (let o of this.state.ogloszenia) {\n            const { ktoUtworzyl, ktoModyfikowal } = o.ogloszenie;\n            if (ktoUtworzyl) {\n                const creator = getUserFullName(ktoUtworzyl);\n                if (!creators.includes(creator)) {\n                    creators.push(creator);\n                    createdByList.push([creator, ktoUtworzyl.id]);\n                }\n            }\n\n            if (ktoModyfikowal) {\n                const modifier = getUserFullName(ktoModyfikowal);\n                if (!modifiers.includes(modifier)) {\n                    modifiers.push(modifier);\n                    modifiedByList.push([modifier, ktoModyfikowal.id])\n                }\n            }\n        }\n\n        this.createdByList = createdByList.sort().map(([creator, id]) => [id, creator]);\n        this.modifiedByList = modifiedByList.sort().map(([modifier, id]) => [id, modifier]);\n    }\n\n    // rendering\n\n    renderContent() {\n        const {\n            cancelledOgloszenieId,\n            copyingOgloszenieId,\n            currentSortingValue,\n            filters,\n            filtersAreOn,\n            ogloszenia,\n            removedOgloszenieId,\n        } = this.state;\n        const { preview } = this.props;\n\n        const advertisements = sortAdvertisements(\n            filterAdvertisements(ogloszenia, filtersAreOn, filters),\n            currentSortingValue.value\n        );\n\n        return (\n            <>\n                <PomocEkranowa ekran=\"announcements_list_advertiser\" content={this.props.isPreview ? this.props.content : null}/>\n                <Text tag=\"h2\" mainHeader>Lista ogłoszeń</Text>\n                <Text info>Liczba ogłoszeń: {advertisements.length}</Text>\n                <Container className=\"filters-container\">\n                    <GridCustom>\n                        <FieldWithLabel tag=\"label\" label=\"Sortuj\" selectRef={React.createRef()}>\n                            <Select\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                className=\"select-custom\"\n                                isDisabled={preview}\n                                isSearchable={false}\n                                options={ADVERTISEMENTS_SORTING_VALUES.map(([value, label]) => ({value, label}))}\n                                value={currentSortingValue}\n                                onChange={(selectedOption) => this.setState({currentSortingValue: selectedOption})}\n                                styles={customSelectStyles}\n                                noOptionsMessage={() => 'Brak wybranej opcji'}\n                            />\n                        </FieldWithLabel>\n                        <FieldWithLabel\n                            className=\"filters-container__filters\"\n                            label=\"Filtruj\"\n                            labelFor=\"ogloszenia_filters_id\"\n                            tag=\"label\"\n                        >\n                            <Switch\n                                aria-label={`Filtruj. Panel filtrów ${filtersAreOn ? 'otwarty, zawartość listy będzie dopasowana po wpisaniu każdego nowego znaku w panelu filtrów.' : 'ukryty'}`}\n                                checked={filtersAreOn}\n                                disabled={preview}\n                                onChange={(ev) => this.handleToggleFilters(ev.target.checked)}\n                                id=\"ogloszenia_filters_id\"\n                            />\n                        </FieldWithLabel>\n                    </GridCustom>\n                </Container>\n                <GridCustom flexL noWrap flexTop>\n                    {filtersAreOn && this.renderFilters()}\n                    <GridCustom centerHorizontal className=\"advertisements-list\" tag=\"ul\">\n                        {this.renderAddOgloszenieButton()}\n                        {advertisements.map((o) => this.renderOgloszenie(o))}\n                    </GridCustom>\n                    {removedOgloszenieId !== null && this.renderRemovingOgloszenie()}\n                    {cancelledOgloszenieId !== null && this.renderCancellingOgloszenie()}\n                </GridCustom>\n                {copyingOgloszenieId !== null && this.renderCopiedMessage(\n                    advertisements.filter(o => parseInt(o.ogloszenie.id) === parseInt(copyingOgloszenieId))[0].tytul)}\n            </>\n        )\n    }\n\n    renderFilters() {\n        const filters = this.state.filters;\n\n        const ktoUtworzylList = this.createdByList;\n        const ktoUtworzylDict = {};\n        for (let [id, username] of ktoUtworzylList) {\n            ktoUtworzylDict[id] = username;\n        }\n\n        const ktoModyfikowalList = this.modifiedByList;\n        const ktoModyfikowalDict = {};\n        for (let [id, username] of ktoModyfikowalList) {\n            ktoModyfikowalDict[id] = username;\n        }\n\n        const dataUtworzeniaInputRef = React.createRef();\n        const dataModyfikacjiInputRef = React.createRef();\n        const terminOfertInputRef = React.createRef();\n\n        return (\n            <Container className=\"filters\" style={{zIndex: 5}}>\n                <GridCustom>\n                    <FieldWithLabel label=\"Tytuł\" tag=\"label\" labelFor=\"filters_title_id\">\n                        <TextFieldCustom\n                            autoFocus\n                            clearFieldContext=\"tytuł\"\n                            maxLength={1000}\n                            value={filters.tytul}\n                            onChange={(ev) => this.handleChangeFilter('tytul', ev.target.value)}\n                            className=\"filters__input\"\n                            onClear={(ev) => this.handleChangeFilter('tytul', '')}\n                            id=\"filters_title_id\" />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Numer ogłoszenia\" tag=\"label\" labelFor=\"filters_number_id\">\n                        <TextFieldCustom\n                            clearFieldContext=\"numer ogłoszenia\"\n                            maxLength={20}\n                            value={filters.ogloszenie_numer}\n                            onChange={(ev) => this.handleChangeFilter('ogloszenie_numer', ev.target.value)}\n                            className=\"filters__input\"\n                            onClear={(ev) => this.handleChangeFilter('ogloszenie_numer', '')}\n                            id=\"filters_number_id\" />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Utworzył\" tag=\"label\" selectRef={React.createRef()}>\n                        <Select\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            className=\"select-custom filters__input\"\n                            options={[EMPTY_VALUE, ].concat(...ktoUtworzylList.map(([id, label]) => ({value: id, label: label})))}\n                            value={{value: filters.ktoUtworzyl || EMPTY_VALUE.value, label: ktoUtworzylDict[filters.ktoUtworzyl] || EMPTY_VALUE.label}}\n                            onChange={(selectedOption) =>this.handleChangeFilter(\n                                'ktoUtworzyl', selectedOption === null ? 0 : parseInt(selectedOption.value))}\n                            styles={customSelectStyles}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                        />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Data utworzenia\" tag=\"label\" inputRef={dataUtworzeniaInputRef}>\n                        <DateCalendar\n                            dateName=\"Data utworzenia\"\n                            parentRef={dataUtworzeniaInputRef}\n                            value={Date.parse(filters.dataUtworzenia)}\n                            onChange={(date) => this.handleChangeFilter('dataUtworzenia', dateToString(date))} />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Status\" tag=\"label\" selectRef={React.createRef()}>\n                        <Select\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            className=\"select-custom filters__input\"\n                            options={[EMPTY_VALUE, ].concat(...Object.entries(this.statusyOgloszen).map(([id, name]) => [name, id]).sort().map(([name, id]) => ({value: id, label: name})))}\n                            value={{value: filters.status || EMPTY_VALUE.value, label: this.statusyOgloszen[filters.status] || EMPTY_VALUE.label}}\n                            onChange={(selectedOption) =>this.handleChangeFilter(\n                                'status', selectedOption === null ? 0 : parseInt(selectedOption.value))}\n                            styles={customSelectStyles}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                        />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Modyfikował\" tag=\"label\" selectRef={React.createRef()}>\n                        <Select\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            className=\"select-custom filters__input\"\n                            options={[EMPTY_VALUE, ].concat(...ktoModyfikowalList.map(([id, label]) => ({value: id, label: label})))}\n                            value={{value: filters.ktoModyfikowal || EMPTY_VALUE.value, label: ktoModyfikowalDict[filters.ktoModyfikowal] || EMPTY_VALUE.label}}\n                            onChange={(selectedOption) =>this.handleChangeFilter(\n                                'ktoModyfikowal', selectedOption === null ? 0 : parseInt(selectedOption.value))}\n                            styles={customSelectStyles}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                        />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Data modyfikacji\" tag=\"label\" inputRef={dataModyfikacjiInputRef}>\n                        <DateCalendar\n                            dateName=\"Data modyfikacji\"\n                            parentRef={dataModyfikacjiInputRef}\n                            value={Date.parse(filters.dataModyfikacji)}\n                            onChange={(date) => this.handleChangeFilter('dataModyfikacji', dateToString(date))} />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Termin składania ofert\" tag=\"label\" inputRef={terminOfertInputRef}>\n                        <DateCalendar\n                            dateName=\"Termin składania ofert\"\n                            parentRef={terminOfertInputRef}\n                            value={Date.parse(filters.terminOfert)}\n                            onChange={(date) => this.handleChangeFilter('terminOfert', dateToString(date))} />\n                    </FieldWithLabel>\n                </GridCustom>\n            </Container>\n        )\n    }\n\n    renderAddOgloszenieButton() {\n        return (\n            <Box flexiblewidth>\n                <GridCustom center fullheight>\n                    <ButtonStyled\n                        add\n                        disabled={!!this.props.preview}\n                        onClick={() => this.props.history.push('/ogloszenia/nowe')}\n                        className=\"btn\" >\n                        Dodaj nowe ogłoszenie\n                    </ButtonStyled>\n                </GridCustom>\n            </Box>\n        )\n    }\n\n    renderOgloszenie(o) {\n        const status = parseInt(o.ogloszenie.status.id);\n        const isDraft = status === parseInt(this.roboczeStatusId);\n        const isPublished = status === parseInt(this.obublikowaneStatusId);\n        const isLocked = isAdvertisementLocked(o.ogloszenie.status);\n        const { dataOpublikowania } = o.ogloszenie;\n        return (\n            <Box\n                className=\"box--advertisement\"\n                flexiblewidth\n                tag=\"li\"\n                titleOneRow={o.tytul || '-'}\n                key={o.id}\n                ariaLabelMoreOptions={`Rozwiń opcje ogłoszenia ${o.tytul}: edytuj, skopiuj, usuń`}\n                boxWithMenu={(\n                    <>\n                        <h3 className=\"sr-only\">Menu więcej opcji ogłoszenia</h3>\n                        <ul>\n                            <li>\n                                <ButtonStyled\n                                    disabled={!isDraft && !isPublished}\n                                    onClick={() => this.props.history.push(\n                                        URLS.advertisementsEdit.getUrl(o.ogloszenie.id)\n                                    )}\n                                    className=\"box__menu-item\" >\n                                    Edytuj\n                                </ButtonStyled>\n                            </li>\n                            <li>\n                                <ButtonStyled\n                                    className=\"box__menu-item\"\n                                    disabled={isLocked}\n                                    onClick={() => {\n                                        this.handleCopyOgloszenie(o.ogloszenie.id);\n                                        // hide box menu by triggering click\n                                        triggerBodyClick();\n                                    }}\n                                >\n                                    Skopiuj\n                                </ButtonStyled>\n                            </li>\n                            <li>\n                                <ButtonStyled\n                                    onClick={() => {\n                                        this.setState(\n                                            {removedOgloszenieId: o.ogloszenie.id, removedOgloszenieTitle: o.tytul},\n                                            () => triggerBodyClick()    // hide box menu by triggering click\n                                        );\n                                    }}\n                                    disabled={!isDraft}\n                                    className=\"box__menu-item\" >\n                                    Usuń\n                                </ButtonStyled>\n                            </li>\n                            <li>\n                                <ButtonStyled\n                                    onClick={() => {\n                                        this.setState(\n                                            {cancelledOgloszenieId: o.ogloszenie.id, cancelledOgloszenieTitle: o.tytul},\n                                            () => triggerBodyClick()    // hide box menu by triggering click\n                                        );\n                                    }}\n                                    disabled={!isPublished}\n                                    className=\"box__menu-item\" >\n                                    Anuluj\n                                </ButtonStyled>\n                            </li>\n                        </ul>\n                    </>\n                )} >\n\n                {this.state.copiedOgloszenieIds.includes(o.ogloszenie.id) && <Text info>Ogłoszenie skopiowane</Text>}\n                <GridCustom fullwidth>\n                    <FieldWithLabel label=\"Numer ogłoszenia\">\n                        <Text>{o.ogloszenie.numer || '-'}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Status\">\n                        <Text>{o.ogloszenie.status.nazwa}</Text>\n                        {status === this.obublikowaneStatusId && o.ogloszenie.czyMaKopieRobocza && <Text info>+ Posiada kopię roboczą</Text>}\n                    </FieldWithLabel>\n                </GridCustom>\n                <GridCustom fullwidth>\n                    <FieldWithLabel label={`Data ${dataOpublikowania?.length > 0 && dataOpublikowania > dateToString(new Date()) ? 'odroczonej ' : ''}publikacji`}>\n                        <Text>{dataOpublikowania || '-'}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Termin składania ofert\">\n                        <Text>{o.terminOfert || '-'}</Text>\n                    </FieldWithLabel>\n                </GridCustom>\n                <FieldWithLabel label=\"Czy dopuszczalna oferta częściowa?\">\n                    <Text>\n                        {o.czyDopuszczalnaOfertaCzesciowa ? 'TAK' : 'NIE'}\n                        {o.czyDopuszczalnaOfertaCzesciowa && ` (Części: ${o.liczbaZamowien})`}\n                    </Text>\n                </FieldWithLabel>\n\n                <BadgeAnchor style={{width: '100%'}}>\n                    <ButtonStyled\n                        className='corner-button'\n                        disabled={isLocked}\n                        primary\n                        tag={Link}\n                        to={`/ogloszenia/${o.ogloszenie.id}${status === this.roboczeStatusId ? '/robocza' : ''}`}\n                    >\n                        Pokaż szczegóły<span className=\"sr-only\">{` ogłoszenia ${o.tytul}`}</span>\n                    </ButtonStyled>\n                    {o.badge_count > 0 && <Badge label={o.badge_count} />}\n                </BadgeAnchor>\n\n\n            </Box>\n        )\n    }\n\n    renderRemovingOgloszenie() {\n        return this.renderActionDialog('usunąć', 'Usuń', 'removed', this.handleRemoveOgloszenie)\n    }\n\n    renderCopiedMessage(baseOgloszenieTytul) {\n        let content;\n        if (this.state.fetchActionError.length) {\n            content = (\n                <Text error role=\"alert\">Nie udało się skopiować ogłoszenia. {this.state.fetchActionError}</Text>\n            );\n        } else {\n            content = `Ogłoszenie ${baseOgloszenieTytul.length > 0 ? '\"' + baseOgloszenieTytul + '\"' : 'bez tytułu'} zostało skopiowane.`;\n        }\n        return (\n            <DialogCustom\n                className=\"dialog\"\n                dialogTitle={content}\n                onClose={() => this.setState({ copyingOgloszenieId: null, fetchActionError: '' })}\n            >\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled onClick={() => this.setState({copyingOgloszenieId: null, fetchActionError: ''})} primary>OK</ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n\n    renderCancellingOgloszenie() {\n        return this.renderActionDialog('anulować', 'Anuluj', 'cancelled', this.handleCancelOgloszenie)\n    }\n\n    renderActionDialog(verbString, actionName, actionPrefix, fetchHandler) {\n        let content, title = null;\n        if (this.state.fetchActionError.length) {\n            title = `Nie udało się ${verbString} ogłoszenia.`;\n\n            content = (\n                <>\n                    <Text error role=\"alert\">{this.state.fetchActionError}</Text>\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled\n                            onClick={() => this.setState(\n                                {fetchActionError: '', [`${actionPrefix}OgloszenieId`]: null, [`${actionPrefix}OgloszenieTitle`]: ''}\n                            )}\n                            primary>\n                            OK\n                        </ButtonStyled>\n                    </GridCustom>\n                </>\n            );\n        } else {\n            title = `Czy na pewno chcesz ${verbString} ogłoszenie \"${this.state[`${actionPrefix}OgloszenieTitle`] || 'Bez tytułu'}\"?`;\n\n            content = (\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled onClick={this.handleCloseActionDialog} cancel>Nie. Wróć do listy</ButtonStyled>\n                    <ButtonStyled onClick={fetchHandler} remove>{actionName} ogłoszenie</ButtonStyled>\n                </GridCustom>\n            );\n        }\n        return (\n            <DialogCustom \n                className=\"dialog\"\n                dialogTitle={title}\n                dialogRef={(c) => { this.actionComponent = c }}\n                onClose={() => { this.setState({ [`${actionPrefix}OgloszenieId`]: null, [`${actionPrefix}OgloszenieTitle`]: '' }) }}\n            >\n                {content}\n            </DialogCustom>\n        )\n    }\n}\n\nexport { Ogloszenia };\n","import React from 'react';\n\nimport { AdvertisementContext } from '../../../context/advertisementContext';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonStyled, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass PomocEkranowa extends BaseComponent {\n\n    // basic functions\n\n    componentDidMount() {\n        // id content declared in props, render it\n        if (this.props.content) {\n            this.setState({initializingOn: false, pomoc: this.props.content});\n            return\n        }\n        // get pomoc from server\n        this.fetchInitialData();\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n        this.setState({\n            initializingOn: false,\n            pomoc: getSerializedObject(\n                data, {nonRecursiveKeys: ['tresc', ]}).pomoc,\n        });\n    }\n\n    handleFetchError(data) {\n        // do nothing, don't render error\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({initializingOn: false});\n    }\n\n    handleFetchIncorrectStatus(status) {\n        // do nothing, don't render error\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({initializingOn: false});\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            showText: true,\n            pomoc: {},\n        }\n    }\n\n    getFetchUrl() {\n        return `/api/help/${this.props.ekran}`\n    }\n\n    getFetchData() {\n        return {screen: this.props.ekran}\n    }\n\n    // rendering\n\n    render() {\n        if (this.state.initializingOn || !Object.keys(this.state.pomoc).length) { return null }\n        const {\n            pomoc,\n            showText,\n        } = this.state;\n        return (\n            <section className=\"help\">\n                <Text tag=\"h2\" accentHeader>{pomoc.naglowek}</Text>\n                <ButtonStyled lite onClick={() => this.setState(prevState => ({showText: !prevState.showText}))} className=\"help__show-more\">{showText ? 'Zwiń pomoc' : 'Rozwiń pomoc'}</ButtonStyled>\n                {showText && <DraftToComponents content={pomoc.tresc} />}\n            </section>\n        )\n    }\n}\n\n\nPomocEkranowa.contextType = AdvertisementContext;\n\n\nexport { PomocEkranowa };\n","import React from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n    hasPerspectiveInstitutions,\n    hasPerspectiveRegions,\n    serializePerspectiveForSelect\n} from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, DialogCustom, FieldWithLabel, GridCustom, Text, TextFieldCustom } from '../../common';\nimport {\n    FormBaseComponent,\n    INSTITUTION_NUMBER_DEFAULT_DICT,\n    ProjectNumberSelectsWithPerspectives\n} from '../common';\n\nconst SELECTS_CODES = {\n    programOperacyjny: 'AAAA',\n    osPriorytetowa: '00',\n    dzialanie: '00',\n    dzialanieIpoddzialanie: '00.00',\n    region: '00',\n    instytucja: 'AA.00',\n};\n\n\nclass Form extends FormBaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n        if ((data.perspectives || []).length) {\n            const perspectives =\n                serializePerspectiveForSelect(data).perspectives;\n            this.setState(\n                {\n                    initializingOn: false,\n                    fetchError: '',\n                    perspektywa: perspectives[0],\n                    perspektywy: perspectives,\n                },\n                () => {\n                    this.setNumberParts();\n                    this.setState({fullNumber: this.getFullNumber()});\n                }\n            );\n            return\n        }\n        this.handleFetchError({});\n    }\n\n    handleFetchIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            initializingOn: false,\n            fetchError: this.getFetchIncorrectStatusError(status),\n        });\n    }\n\n    handleChangePerspektywa = (data, callback) => {\n        this.setState(\n            {\n                perspektywa: data.perspective,\n                programOperacyjny: data.programme,\n                osPriorytetowa: data.priority,\n                dzialanie: data.activity,\n                numerInstytucji: data.institutionNumber,\n                region: data.region,\n                instytucja: data.institution,\n            },\n            () => {\n                this.setNumberParts();\n                this.updateNumber();\n                if (callback) {\n                    callback();\n                }\n            }\n        );\n    }\n\n    handleChangeProgramOperacyjny = (data, callback) => {\n        this.setState(\n            {\n                programOperacyjny: data.programme,\n                osPriorytetowa: data.priority,\n                dzialanie: data.activity,\n                region: data.region,\n                instytucja: data.institution,\n            },\n            () => {\n                this.updateNumber();\n                if (callback) {\n                    callback();\n                }\n            }\n        );\n    };\n\n    handleChangeOsPriorytetowa = (data, callback) => {\n        this.setState(\n            {\n                osPriorytetowa: data.priority,\n                dzialanie: data.activity,\n                region: data.region,\n                instytucja: data.institution,\n            },\n            () => {\n                this.updateNumber();\n                if (callback) {\n                    callback();\n                }\n            }\n        );\n    };\n\n    handleChangeDzialanie = (data, callback) => {\n        this.setState(\n            {\n                dzialanie: data.activity,\n                region: data.region,\n                instytucja: data.institution,\n            },\n            () => {\n                this.updateNumber();\n                if (callback) { callback()}\n            }\n        );\n    };\n\n    handleChangeRegion = (data) => {\n        this.setState(\n            {region: data.region},\n            this.updateNumber\n        );\n    };\n\n    handleChangeInstytucja = (data) => {\n        this.setState(\n            {instytucja: data.institution},\n            this.updateNumber\n        );\n    };\n\n    changeInputNumber(value, attrName, defaultDict) {\n        value = value.replace(/[^\\da-zA-Z-/.]/, '').toUpperCase();\n        this.setState(\n            prevState => ({\n                [attrName]: {\n                    ...prevState[attrName],\n                    ...(!value ? defaultDict : {value, code: value, label: value}),\n                }\n            }),\n            this.updateNumber\n        );\n    }\n\n    handleChangeOthers = (value) => {\n        this.changeInputNumber(\n            value, 'suffix', {...this.getSuffixDefaultDict()});\n    };\n\n    handleChangeInstitutionNumber = (value) => {\n        this.changeInputNumber(\n            value, 'numerInstytucji', INSTITUTION_NUMBER_DEFAULT_DICT);\n    }\n\n    handleSave = () => {\n        this.setState(\n            {savingOn: true, errors: {}},\n            () => {\n                let data = {\n                    nazwa: this.state.nazwa.trim(),\n                    programOperacyjny: (this.state.programOperacyjny || {}).value || 0,\n                    osPriorytetowa: (this.state.osPriorytetowa || {}).value || 0,\n                    dzialanie: (this.state.dzialanie || {}).value || 0,\n                    numer: this.state.suffix.value || '',\n                };\n\n                const { perspektywa } = this.state;\n                data['perspektywa'] = perspektywa.value;\n                if (hasPerspectiveRegions(perspektywa)) {\n                    if (!this.props.isProjekt) {\n                        data['institutionNumber'] =\n                            this.state.numerInstytucji.value || '';\n                    }\n                    data['region'] = (this.state.region || {}).value || 0;\n                }\n                if (hasPerspectiveInstitutions(perspektywa)) {\n                    data['institution'] = (\n                        this.state.instytucja || {}).value || 0;\n                }\n\n                // save object on server\n                this.xhrFetchSave = fetchApi(\n                    this.props.saveUrl,\n                    'POST',\n                    {},\n                    getSerializedObject(data, {toServer: true}),\n                    this.handleFetchSaveSuccess,\n                    this.handleFetchSaveError,\n                    this.handleFetchSaveIncorrectStatus,\n                    this.handleShowSaveErrors,\n                );\n            }\n        );\n    }\n\n    handleFetchSaveSuccess = (data) => {\n        super.handleFetchSaveSuccess(data);\n        this.props.onSave(getSerializedObject(data)[this.props.isProjekt ? 'projekt' : 'nabor']);\n    }\n\n    // helpers\n\n    preState(props) {\n        this.parts = [];\n    }\n\n    getSuffixDefaultDict() {\n        return {\n            value: '',\n            code: this.props.suffixMask,\n            label: this.props.suffixMask,\n        }\n    }\n\n    getAdditionalState(props) {\n        return {\n            // fields\n            nazwa: '',\n            perspektywa: null,\n            programOperacyjny: null,\n            osPriorytetowa: null,\n            dzialanie: null,\n            // this one is form old perspective and enrollment\n            numerInstytucji: {...INSTITUTION_NUMBER_DEFAULT_DICT},\n            region: null,\n            instytucja: null,\n            suffix: {...this.getSuffixDefaultDict()},\n            // helpers\n            fullNumber: '',\n            perspektywy: [],\n            osiePriorytetowe: [],\n            dzialania: [],\n            regiony: [],\n            instytucje: [],\n        }\n    }\n\n    postState(props) {\n        this.xhrFetchSave = null;\n        this.state['fullNumber'] = this.getFullNumber();\n    }\n\n    getFetchUrl() {\n        return API_URLS.perspectives.path\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać danych do formularza. ${translateErrorMessage(message)}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się pobrać danych do formularza. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    setNumberParts() {\n        let parts = [\n            ['', 'programOperacyjny'],\n            ['.', 'osPriorytetowa'],\n        ];\n        const { perspektywa } = this.state;\n        const hasRegions = hasPerspectiveRegions(perspektywa);\n        const hasInstitutions = hasPerspectiveInstitutions(perspektywa);\n\n        if (hasRegions) {\n            parts.push(['.', 'dzialanie', 'dzialanieIpoddzialanie']);\n            if (!this.props.isProjekt) {\n                parts.push(['-', 'numerInstytucji']);\n            }\n            parts.push(['-', 'region']);\n        }\n        if (hasInstitutions) {\n            parts.push(['.', 'dzialanie']);\n            parts.push(['-', 'instytucja']);\n        }\n\n        parts.push(['-', 'suffix']);\n        this.parts = parts;\n    }\n\n    getFullNumber() {\n        let fullNumber = '';\n        for (let [separator, attrName, alternativeAttrName] of this.parts) {\n            const attrValue = this.state[attrName];\n            fullNumber += `${separator}${attrValue === null \n                ? (SELECTS_CODES[alternativeAttrName] || SELECTS_CODES[attrName])\n                : attrValue.code\n            }`;\n        }\n        return fullNumber\n    }\n\n    updateNumber() {\n        const fullNumber = this.getFullNumber();\n        this.setState(\n            {fullNumber},\n            () => {\n                if (this.props.onNumberChange) {\n                    this.props.onNumberChange(fullNumber);\n                }\n            }\n        );\n    }\n\n    // rendering\n\n    render() {\n\n        let content;\n        if (this.state.initializingOn) {\n            content = <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n        } else {\n            const { title } = this.props;\n            content = (\n                <>\n                    <h2 id=\"addDialogLabel\" className=\"text--main-header\"> {title}</h2>\n                    {this.renderNumer()}\n                    {this.renderNazwa()}\n                    <GridCustom flexEnd className=\" box__button-container\">\n                        <ButtonStyled\n                            cancel\n                            disabled={this.state.savingOn}\n                            onClick={this.props.onClose}\n                        >Anuluj</ButtonStyled>\n                        <ButtonStyled\n                            disabled={this.state.savingOn}\n                            primary\n                            onClick={this.handleSave}\n                        >\n                            Zapisz<span className=\"sr-only\"> projekt</span>\n                        </ButtonStyled>\n                    </GridCustom>\n                    {this.renderError('fetchError')}\n                    {this.renderError('fetchSaveError')}\n                </>\n            );\n        }\n\n        return (\n            <DialogCustom\n                ariaLabelledby=\"addDialogLabel\"\n                className=\"dialog-long-content\"\n                onClose={this.props.onClose}\n            >\n                {content}\n            </DialogCustom>\n\n        )\n    }\n\n     renderNumer() {\n        return (\n            <>\n                <GridCustom centerVertical>\n                    <Text className=\"text--project-info\">Powstały numer:</Text> <Text accentHeader>{this.state.fullNumber}</Text>\n                </GridCustom>\n                {this.renderSelects()}\n                {this.renderOthers()}\n            </>\n        )\n    }\n\n    renderSelects() {\n        const { errors } = this.state;\n        return (\n            <ProjectNumberSelectsWithPerspectives\n                activity={this.state.dzialanie}\n                activityErrors={errors.dzialanie || []}\n                disabled={this.state.savingOn}\n                institution={this.state.instytucja}\n                institutionErrors={errors.instytucja || []}\n                institutionNumber={this.state.numerInstytucji}\n                institutionNumberErrors={errors.numerInstytucji || []}\n                perspective={this.state.perspektywa}\n                perspectiveErrors={errors.perspektywa}\n                perspectives={this.state.perspektywy}\n                priority={this.state.osPriorytetowa}\n                priorityErrors={errors.osPriorytetowa || []}\n                programme={this.state.programOperacyjny}\n                programmeErrors={errors.programOperacyjny || []}\n                region={this.state.region}\n                regionErrors={errors.region || []}\n                withInstitutionNumber={!this.props.isProjekt}\n                onChangeActivity={this.handleChangeDzialanie}\n                onChangeInstitution={this.handleChangeInstytucja}\n                onChangeInstitutionNumber={this.handleChangeInstitutionNumber}\n                onChangePerspective={this.handleChangePerspektywa}\n                onChangePriority={this.handleChangeOsPriorytetowa}\n                onChangeProgramme={this.handleChangeProgramOperacyjny}\n                onChangeRegion={this.handleChangeRegion}\n            />\n        )\n    }\n\n    renderOthers() {\n        const { errors, suffix } = this.state;\n        const isSuffixInvalid = (errors.numer || []).length > 0;\n        const maxSuffixLength = this.props.suffixMask.length\n        return (\n            <FieldWithLabel\n                label=\"Dalsza część numeru\"\n                labelFor=\"suffix_id\"\n                tag=\"label\"\n                selectRef={React.createRef()}\n            >\n                <TextFieldCustom\n                    aria-describedby={`suffix_mask_info${isSuffixInvalid ? ' numer_instytucji_error' : ''}`}\n                    aria-label={`Dalsza część numeru. Wpisano ${suffix.value.length} znaków.`}\n                    aria-required={true}\n                    aria-valuemax={maxSuffixLength}\n                    characterCount\n                    clearFieldContext=\"dalsza część numeru\"\n                    disabled={this.state.savingOn}\n                    fullwidth\n                    id=\"suffix_id\"\n                    invalid={isSuffixInvalid}\n                    maxLength={maxSuffixLength}\n                    value={suffix.value}\n                    onChange={event => this.handleChangeOthers(event.target.value)}\n                    onClear={event => this.handleChangeOthers('')} />\n                {isSuffixInvalid && <ul id=\"numer_instytucji_error\">{errors.numer.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                <Text info id=\"suffix_mask_info\"><span className=\"sr-only\">Wpisz numer zgodnie ze wzorem: </span>{this.props.suffixMask}</Text>\n            </FieldWithLabel>\n        )\n    }\n\n    renderNazwa() {\n        const { errors, nazwa, savingOn } = this.state;\n        const isNazwaInvalid = (errors.nazwa || []).length > 0;\n        return (\n            <FieldWithLabel label=\"Tytuł\" tag=\"label\" labelFor=\"title_id\">\n                <TextFieldCustom\n                    aria-describedby={isNazwaInvalid ? 'title_error' : null}\n                    aria-label={`Tytuł, maksymalna liczba znaków: 200. Wpisano ${nazwa.length} znaków.`}\n                    aria-required={true}\n                    aria-valuemax={200}\n                    characterCount\n                    clearFieldContext=\"tytuł\"\n                    disabled={savingOn}\n                    invalid={isNazwaInvalid}\n                    id=\"title_id\"\n                    maxLength={200}\n                    required\n                    fullwidth\n                    value={nazwa}\n                    onChange={(event) => this.setState({nazwa: event.target.value})}\n                    onClear={(event) => this.setState({nazwa: ''})} />\n                {isNazwaInvalid && <ul id=\"title_error\">{errors.nazwa.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n            </FieldWithLabel>\n        )\n    }\n\n    renderError(errorName) {\n        if (this.state[errorName].length) {\n            return (\n                <GridCustom centerHorizontal>\n                    <Text error>{this.state[errorName]}</Text>\n                    <ButtonStyled onClick={() => this.setState({[errorName]: ''})} lite>OK</ButtonStyled>\n                </GridCustom>\n            );\n        }\n        return null\n    }\n}\n\n\nexport { Form };\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { ButtonStyled, Ellipsis, FieldWithLabel, GridCustom, Text } from '../../common';\n\n\nconst Ogloszenie = (props) => {\n    const [showDetails, setShowDetails] = useState(false);\n    const ogloszenie = props.ogloszenie;\n    const wersja = ogloszenie.wersja;\n\n    return (\n        <section className=\"separate-content\">\n            <Ellipsis>\n                <Text className=\"text--title\">{wersja.tytul || '-'}</Text>\n            </Ellipsis>\n            <GridCustom>\n                <FieldWithLabel label=\"Numer\">\n                    <Text>{ogloszenie.numer || '-'}</Text>\n                </FieldWithLabel>\n                {showDetails && (\n                    <FieldWithLabel label=\"Status\">\n                        <Text>{ogloszenie.status.nazwa}</Text>\n                    </FieldWithLabel>\n                )}\n            </GridCustom>\n            {showDetails && (\n                <GridCustom>\n                    <FieldWithLabel label=\"Data publikacji\">\n                        <Text>{wersja.dataOpublikowania || '-'}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Termin składania ofert\">\n                        <Text>{wersja.terminOfert || '-'}</Text>\n                    </FieldWithLabel>\n                </GridCustom>\n            )}\n            <ButtonStyled\n                lite\n                onClick={() => setShowDetails(prevShowDetails => !prevShowDetails)}\n                aria-label={(showDetails ? 'Zwiń' : 'Rozwiń') + ' szczegóły ogłoszenia ' + (wersja.tytul || 'numer' + ogloszenie.numer)}\n            >\n                {(showDetails ? 'Zwiń ' : 'Rozwiń ') + ' szczegóły ogłoszenia'}\n            </ButtonStyled>\n            <ButtonStyled\n                tag={Link}\n                to={`/ogloszenia/${ogloszenie.id}${ogloszenie.status.label === 'DRAFT' ? '/robocza' : ''}`}\n                primary\n                aria-label={'Przejdź do ogłoszenia ' + (wersja.tytul || 'numer ' + ogloszenie.numer)} >\n                Przejdź do ogłoszenia\n            </ButtonStyled>\n        </section>\n    );\n}\n\nexport { Ogloszenie };\n","import React, { Component } from 'react';\n\nimport { getUserFullName } from '../../../helpers';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport {\n    AuditData,\n    Box,\n    ButtonStyled,\n    FieldWithLabel,\n    Text\n} from '../../common';\nimport { Ogloszenie } from './Ogloszenie';\n\n\nclass Projekt extends Component {\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            ogloszenia: [],\n            detailsOn: false,\n            initializingDetailsOn: false,\n            removingOn: false,\n            fetchError: '',\n        }\n        this.isProject = props.projekt.typ === 'project';\n\n        this.xhrFetch = null;\n    }\n\n    // basic functions\n\n    componentWillUnmount() {\n        // abort api request if exists\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n    }\n\n    // handlers\n\n    handleShowOgloszenia = () => {\n        this.setState(\n            {\n                detailsOn: true,\n                initializingDetailsOn: true,\n                fetchError: '',\n            },\n            this.getOgloszenia\n        );\n    }\n\n    handleHideOgloszenia = () => {\n        this.setState({\n            detailsOn: false,\n            initializingDetailsOn: false,\n            fetchError: '',\n        });\n    }\n\n    handleFetchOgloszeniaSuccess = (data) => {\n        this.xhrFetch = null;\n        this.setState({\n            initializingDetailsOn: false,\n            ogloszenia: getSerializedObject(data).ogloszenia,\n        });\n    }\n\n    handleFetchOgloszeniaError = (data) => {\n        this.xhrFetch = null;\n        this.setState({\n            initializingDetailsOn: false,\n            fetchError: `Nie udało się pobrać danych ogłoszeń. ${translateErrorMessage(data.message)}`,\n        });\n    }\n\n    handleFetchOgloszeniaIncorrectStatus = (status) => {\n        this.xhrFetch = null;\n        this.setState({\n            initializingDetailsOn: false,\n            fetchError: `Nie udało się pobrać danych ogłoszeń. Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    handleCloseRemovingOn = () => {\n        this.setState({removingOn: false});\n    }\n\n    // helpers\n\n    getOgloszenia() {\n        // save ogloszenia from server\n        this.xhrFetch = fetchApi(\n            `/api/announcements/project_enrollment/${this.props.projekt.id}`,\n            'GET',\n            {},\n            {},\n            this.handleFetchOgloszeniaSuccess,\n            this.handleFetchOgloszeniaError,\n            this.handleFetchOgloszeniaIncorrectStatus,\n        );\n    }\n\n    // rendering\n\n    render() {\n        const { projekt } = this.props;\n        const { detailsOn } = this.state;\n        const isProject = projekt.typ === 'project';\n\n        return (\n            <Box titleOneRow={projekt.calyNumer} tag=\"li\" flexiblewidth>\n                <FieldWithLabel label={isProject ? 'Projekt' : 'Nabór'}>\n                    <Text>{projekt.nazwa || '-'}</Text>\n                </FieldWithLabel>\n                <div>\n                    <ButtonStyled\n                        primary\n                        onClick={detailsOn ? this.handleHideOgloszenia : this.handleShowOgloszenia}\n                    >\n                        {detailsOn ? 'Ukryj ' : 'Pokaż '} szczegóły {isProject ? 'projektu ' : 'naboru '}\n                        <span className=\"sr-only\">{projekt.nazwa}</span>\n                    </ButtonStyled>\n                    {this.renderOgloszeniaDetails()}\n                    {this.renderRemovingPart()}\n                </div>\n                <AuditData\n                    className=\"box--half-width\"\n                    createdAt={projekt.dataUtworzenia}\n                    createdBy={getUserFullName(projekt.ktoUtworzyl || {})}\n                    flexiblewidth\n                    modifiedAt={projekt.dataModyfikacji}\n                    modifiedBy={getUserFullName(projekt.ktoModyfikowal || {})}\n                />\n            </Box>\n        );\n    }\n\n    renderOgloszeniaDetails() {\n        if (!this.state.detailsOn) { return null }\n        if (this.state.initializingDetailsOn) {\n            return <Text info>Trwa pobieranie danych ogłoszeń...</Text>\n        }\n        if (this.state.fetchError.length) {\n            return <Text error role=\"alert\">{this.state.fetchError}</Text>\n        }\n\n        const { ogloszenia } = this.state;\n        const { projekt } = this.props;\n        let ogloszenia_;\n        if (ogloszenia.length) {\n            ogloszenia_ = (\n                <ul>\n                    {ogloszenia.map(o => <li key={o.id}><Ogloszenie ogloszenie={o} /></li>)}\n                </ul>\n            );\n        } else {\n            ogloszenia_ = <Text error>Ten {this.isProject ? 'projekt' : 'nabór'} nie ma przypisanych ogłoszeń.</Text>;\n        }\n        return (\n            <>\n                <Text tag=\"h3\" accentHeader>\n                    Lista ogłoszeń\n                    <span className=\"sr-only\">\n                        {` podpiętych do ${this.isProject ? 'projektu' : 'naboru'} ${projekt.nazwa}`}\n                    </span>:\n                </Text>\n                {ogloszenia_}\n            </>\n        )\n    }\n\n    renderRemovingPart() {\n        if (!this.state.removingOn) {\n            return (\n                <ButtonStyled\n                    remove\n                    onClick={() => this.setState({removingOn: true})}\n                >\n                    Usuń{this.isProject ? ' projekt ' : ' nabór '}<span className=\"sr-only\"> {this.props.projekt.nazwa}</span>\n                </ButtonStyled>\n            )\n        }\n\n        if (this.props.projekt.maOpublikowaneOgloszenia) {\n            return (\n                <>\n                    <Text error role=\"alert\">Tego {this.isProject ? 'projektu' : 'naboru'} nie można usunąć, ponieważ ma przypisane ogłoszenia już opublikowane.</Text>\n                    <ButtonStyled onClick={this.handleCloseRemovingOn} primary>OK</ButtonStyled>\n                </>\n            )\n        }\n        const { projekt } = this.props;\n        let msg;\n        if (projekt.maRoboczeOgloszenia) {\n            msg = (\n                <Text error role=\"alert\">\n                    Ten {this.isProject ? 'projekt' : 'nabór'} ma przypisane ogłoszenia o statusie \"Robocze\" i po usunięciu zostaną one od niego odpięte.\n                </Text>\n            );\n        } else {\n            msg = <Text info role=\"alert\">Ten {this.isProject ? 'projekt' : 'nabór'} nie ma przypisanych ogłoszeń i może być bezpiecznie usunięty.</Text>;\n        }\n        return (\n            <>\n                {msg}\n                <ButtonStyled\n                    remove\n                    onClick={() => this.props.onRemove(projekt.id, this.isProject)}\n                >\n                    Usuń{this.isProject ? ' projekt ' : ' nabór '}<span className=\"sr-only\">{projekt.nazwa}</span>\n                </ButtonStyled>\n                <ButtonStyled onClick={this.handleCloseRemovingOn} cancel>Anuluj<span className=\"sr-only\"> usuwanie{this.isProject ? ' projektu ' : ' naboru '}{projekt.nazwa}</span></ButtonStyled>\n            </>\n        )\n    }\n};\n\n\nexport { Projekt };\n","import React from 'react';\nimport { Switch } from '@rmwc/switch';\n\nimport { CZY_PROJEKT_CHOICES } from '../../../const';\nimport { fetchApi } from '../../../fetch';\nimport { filterProjects, PROJECTS_CLEANED_FILTERS } from '../../../filters';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { PROJECTS_SORTING_VALUES, sortProjects } from '../../../sorters';\nimport {\n    Box,\n    ButtonStyled,\n    Container,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { PomocEkranowa } from '../zarzadzanieTrescia/PomocEkranowa';\nimport { Form } from './Form';\nimport { Projekt } from './Projekt';\n\n\nclass Projekty extends BaseComponent {\n\n    // basic functions\n\n    componentDidMount() {\n        if (this.props.preview) {\n            this.setState({initializingOn: false});\n            return\n        }\n\n        document.title = \"Baza Konkurencyjności - projekty\";\n        super.componentDidMount();\n    };\n\n    // handlers\n\n    handleFetchSuccess = (data) => {\n        super.handleFetchSuccess(data);\n        this.setState({\n            projekty: getSerializedObject(data).projektyNabory,\n            initializingOn: false,\n        });\n    }\n\n    handleSave = (data) => {\n        this.setState(prevState => {\n            return {\n                formOn: false,\n                projekty: [...prevState.projekty, data],\n            }\n        });\n    }\n\n    handleToggleFilters(checked) {\n        if (checked) {\n            this.setState({filtersAreOn: true});\n        } else {\n            this.setState({\n                filtersAreOn: false,\n                filters: PROJECTS_CLEANED_FILTERS,\n            });\n        }\n    }\n\n    handleChangeFilter(name, value) {\n        this.setState(prevState => {\n            return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n        });\n    }\n\n    handleRemove = (id, isProject) => {\n        // remove project on server\n        this.xhrFetch = fetchApi(\n            `/api/${isProject ? 'project' : 'enrollment'}/${id}`,\n            'DELETE',\n            {},\n            {},\n            this.handleFetchRemoveSuccess,\n            this.handleFetchRemoveError,\n            this.handleFetchRemoveIncorrectStatus,\n        );\n    }\n\n    handleFetchRemoveSuccess = (data) => {\n        this.xhrFetch = null;\n        const serializedData = getSerializedObject(data);\n        this.setState(prevState => ({\n            projekty: prevState.projekty.filter(\n                p => parseInt(p.id) !== parseInt((serializedData.projekt || serializedData.nabor || {}).id),\n            ),\n            removingError: '',\n        }));\n    }\n\n    handleFetchRemoveError = (data) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({removingError: `Nie udało się usunąć obiektu. ${translateErrorMessage(data.message)}`});\n    }\n\n    handleFetchRemoveIncorrectStatus = (status) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({removingError: `Nie udało się usunąć obiektu. Wystąpił nieoczekiwany błąd o kodzie ${status}.`});\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            currentSortingValue: {\n                value: PROJECTS_SORTING_VALUES[0][0],\n                label: PROJECTS_SORTING_VALUES[0][1],\n            },\n            czyNewProjekt: true,\n            formOn: false,\n            filtersAreOn: false,\n            filters: Object.assign({}, PROJECTS_CLEANED_FILTERS),\n            projekty: [],\n            removingError: '',\n        }\n    }\n\n    getFetchUrl() {\n        return '/api/project_enrollment'\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać danych projektów i naborów. ${translateErrorMessage(message)}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się pobrać danych projektów i naborów. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    // rendering\n\n    renderContent() {\n        const {\n            currentSortingValue,\n            filters,\n            filtersAreOn,\n            formOn,\n            projekty\n        } = this.state;\n\n        const projects = sortProjects(\n            filterProjects(projekty, filtersAreOn, filters),\n            currentSortingValue.value\n        );\n\n        const isPreview = !!this.props.preview;\n\n        return (\n            <>\n                <PomocEkranowa ekran=\"projects_list_advertiser\" content={isPreview ? this.props.content : null}/>\n                <Text tag=\"h2\" mainHeader>Lista projektów i naborów</Text>\n                <Text info className=\"text--counter\">Liczba wyników: {projects.length}</Text>\n                <Container className=\" filters-container\">\n                    <GridCustom>\n                        <FieldWithLabel label=\"Sortuj\" tag=\"label\" selectRef={React.createRef()}>\n                            <Select\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                value={currentSortingValue}\n                                isDisabled={isPreview}\n                                isSearchable={false}\n                                options={PROJECTS_SORTING_VALUES.map(([value, label]) => ({value, label}))}\n                                onChange={(selectedOption) => this.setState({currentSortingValue: selectedOption})}\n                                className=\"select-custom\"\n                                styles={customSelectStyles}\n                                noOptionsMessage={() => 'Brak wybranej opcji'}\n                            />\n                        </FieldWithLabel>\n                        <FieldWithLabel\n                            className=\"filters-container__filters\"\n                            label=\"Filtruj\"\n                            tag=\"label\"\n                            labelFor=\"project_filters_id\"\n                        >\n                            <Switch\n                                aria-label={`Filtruj. Panel filtrów ${this.state.filtersAreOn ? 'otwarty, zawartość listy będzie dopasowana po wpisaniu każdego nowego znaku w panelu filtrów.' : 'ukryty'}`}\n                                checked={filtersAreOn}\n                                disabled={isPreview}\n                                onChange={(ev) => this.handleToggleFilters(ev.target.checked)}\n                                id=\"project_filters_id\"\n                            />\n                        </FieldWithLabel>\n                    </GridCustom>\n                </Container>\n                <GridCustom flexL noWrap flexTop>\n                    {filtersAreOn && this.renderFilters()}\n                    <GridCustom tag=\"ul\">\n                        <Box flexiblewidth tag=\"li\">\n                            <div>\n                                <ButtonStyled\n                                    add\n                                    disabled={isPreview}\n                                    onClick={(e) => {\n                                        this.setState({formOn: true, czyNewProjekt: true});\n                                        e.currentTarget.blur();\n                                    }}>\n                                    Dodaj projekt\n                                </ButtonStyled>\n                                <ButtonStyled\n                                    add\n                                    disabled={isPreview}\n                                    onClick={(e) => {\n                                        this.setState({formOn: true, czyNewProjekt: false});\n                                        e.currentTarget.blur();\n                                    }}>\n                                    Dodaj nabór\n                                </ButtonStyled>\n                            </div>\n                        </Box>\n                        {projects.map(p => <Projekt key={p.id} projekt={p} onRemove={this.handleRemove} />)}\n                    </GridCustom>\n                </GridCustom>\n                {formOn && this.renderForm()}\n                {this.state.removingError.length > 0 && this.renderRemovingErrorDialog()}\n            </>\n        )\n    }\n\n    renderFilters() {\n        const filters = this.state.filters;\n        return (\n            <Container className=\"filters\">\n                <GridCustom>\n                    <FieldWithLabel label=\"Numer projektu lub naboru\" tag=\"label\" labelFor=\"filters_project_number_id\">\n                        <TextFieldCustom\n                            autoFocus\n                            className=\"filters__input\"\n                            clearFieldContext=\"numer projektu lub naboru\"\n                            id=\"filters_project_number_id\"\n                            onChange={(ev) => this.handleChangeFilter('calyNumer', ev.target.value)}\n                            onClear={(ev) => this.handleChangeFilter('calyNumer', '')}\n                            value={filters.calyNumer}\n                        />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Tytuł projektu lub naboru\" tag=\"label\" labelFor=\"filters_project_title_id\">\n                        <TextFieldCustom\n                            clearFieldContext=\"tytuł projektu\"\n                            value={filters.nazwa}\n                            onChange={(ev) => this.handleChangeFilter('nazwa', ev.target.value)}\n                            className=\"filters__input\"\n                            onClear={(ev) => this.handleChangeFilter('nazwa', '')}\n                            id=\"filters_project_title_id\" />\n                    </FieldWithLabel>\n                    <FieldWithLabel\n                        label=\"Typ obiektu\"\n                        tag=\"label\"\n                        selectRef={React.createRef()}\n                    >\n                        <Select\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            className=\"select-custom\"\n                            options={CZY_PROJEKT_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n                            value={{value: filters.typ.value || CZY_PROJEKT_CHOICES[0][0], label: filters.typ.label || CZY_PROJEKT_CHOICES[0][1]}}\n                            onChange={(selectedOption) => this.handleChangeFilter('typ', selectedOption)}\n                            styles={customSelectStyles}\n                        />\n                    </FieldWithLabel>\n                </GridCustom>\n            </Container>\n        )\n    }\n\n    renderForm() {\n        let isProjekt, suffixMask, saveUrl, title;\n        if (this.state.czyNewProjekt) {\n            isProjekt = true;\n            suffixMask = \"0000/00\";\n            saveUrl = '/api/project';\n            title = 'Dodaj projekt';\n        } else {\n            isProjekt = false;\n            suffixMask = \"000/00\";\n            saveUrl = '/api/enrollment';\n            title = 'Dodaj nabór';\n        }\n        return <Form\n            isProjekt={isProjekt}\n            suffixMask={suffixMask}\n            saveUrl={saveUrl}\n            title={title}\n            userProjectsNumbers={this.state.projekty.map(p => p.numer)}\n            onClose={() => this.setState({formOn: false})}\n            onSave={this.handleSave} />\n    }\n\n    renderRemovingErrorDialog() {\n        return (\n            <DialogCustom\n                className=\"dialog\"\n                dialogTitleError={this.state.removingError}\n                onClose={() => this.setState({ removingError: '' })}\n            >\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled onClick={() => this.setState({removingError: ''})} primary>OK</ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n}\n\n\nexport { Projekty };\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n  ButtonStyled,\n  FieldWithLabel,\n  GridCustom,\n  Select,\n  TextFieldCustom,\n  Text,\n  DialogCustom,\n} from \"../../common\";\nimport { customSelectStyles } from \"../../vars/vars\";\n\nimport { serializeObjectList } from \"../../../serializers\";\n\nimport { fetchApi } from \"../../../fetch\";\n\nimport {\n  sortMiejsceRealizacjiFilter,\n  sortProgrammeFilter,\n} from \"../../../sorters\";\n\nimport { FormKodCPV } from \"../ogloszenia/FormKodCPV\";\n\nconst EMPTY_VALUE = {\n  value: 0,\n  label: \"Wybierz\",\n};\n\nconst ORDER_ITEM_CATEGORIES = \"order_item_categories\";\n\nconst serializeProgrammeSelectStructure = (data) => {\n  let data_ = {};\n  for (let programme of Object.values(data)) {\n    data_[programme.id] = `${programme.code.toUpperCase()} - ${programme.name}`;\n  }\n  return Object.entries(data_).sort(sortProgrammeFilter) || [];\n};\n\nconst removeEmptyArraysAndNulls = (obj) => {\n  if (!obj) {\n    return {};\n  }\n\n  return Object.fromEntries(\n    Object.entries(obj).filter(\n      ([_, value]) =>\n        value !== null && (!Array.isArray(value) || value.length > 0)\n    )\n  );\n};\n\nexport const NewsletterSettingsFilter = (props) => {\n  const [state, setState] = useState({\n    isSelectOpen: false,\n    dictionaries: {\n      programOperacyjny: [],\n      przedmiotZamowieniaKategoria: [],\n      miejsceRealizacji: [],\n    },\n    currentDictionaries: {\n      programOperacyjny: [],\n      przedmiotZamowieniaKategoria: [],\n      miejsceRealizacji: [],\n    },\n    errors: { errorNipOgloszeniodawcy: {} },\n    filters: removeEmptyArraysAndNulls(props.filter) || {},\n    isLoading: true,\n  });\n\n  useEffect(() => {\n    fetchApi(\n      \"/api/dictionaries/search-filters\",\n      \"GET\",\n      {},\n      {},\n      (data) => {\n        const dictionaries = {\n          przedmiotZamowieniaKategoria: serializeObjectList(\n            data[ORDER_ITEM_CATEGORIES]\n          ),\n          programOperacyjny: serializeProgrammeSelectStructure(\n            data.operation_programme\n          ),\n          miejsceRealizacji:\n            Object.entries(data.location_id).sort(\n              sortMiejsceRealizacjiFilter\n            ) || [],\n        };\n        setState({ ...state, dictionaries: dictionaries, isLoading: false });\n      },\n      () => {},\n      () => {}\n    );\n  }, []);\n\n  /** Hook to filter out already selected dictionaries */\n  useEffect(() => {\n    const operationalProgramsIdsInFilter =\n      state.filters.programme?.map((x) => `${x.value}`) ?? [];\n\n    const fulfillmentPlacesIdsInFilter =\n      state.filters.fulfillmentPlaces?.map((x) => x.value) ?? [];\n\n    const currentDictionaries = {\n      przedmiotZamowieniaKategoria:\n        state.dictionaries.przedmiotZamowieniaKategoria,\n      miejsceRealizacji: state.dictionaries.miejsceRealizacji.filter(\n        (x) => !fulfillmentPlacesIdsInFilter.includes(x[0])\n      ),\n      programOperacyjny: state.dictionaries.programOperacyjny.filter(\n        (x) => !operationalProgramsIdsInFilter.includes(x[0])\n      ),\n    };\n\n    setState({ ...state, currentDictionaries });\n  }, [state.filters, state.dictionaries]);\n\n  const handleChangeFilter = (name, value) => {\n    let dict = { [name]: value };\n    if (name === \"advertiserIdentificationNumber\") {\n      // allow to insert only letters and digits\n      dict[\"advertiserIdentificationNumber\"] = value.replace(/[^a-zA-Z\\d]/, \"\");\n    } else {\n      dict[name] = value;\n    }\n    if (name === \"category\") {\n      let updatedFilters = state.filters;\n      updatedFilters.subcategory = undefined;\n      setState({ ...state, filters: updatedFilters });\n      delete dict[\"subcategory\"];\n    }\n    // clean error (just in case if exists)\n    let errors = Object.assign({}, state.errors);\n    delete errors[name];\n\n    const newFilters = Object.assign({}, state.filters, dict);\n\n    if (value?.length === 0 || !value) {\n      delete newFilters[name];\n    }\n\n    setState({\n      ...state,\n      errors,\n      filters: newFilters,\n    });\n  };\n\n  const handleKeyDown = (event) => {\n    if (event.key === \"Escape\") {\n      if (state.isSelectOpen) {\n        event.stopPropagation();\n      } else {\n        props.close();\n      }\n    }\n  };\n\n  return state.isLoading ? (\n    <></>\n  ) : (\n    <DialogCustom\n      onClose={props.close}\n      className=\"dialog-long-content\"\n      ariaLabelledby=\"addFilterLabel\"\n      onKeyDown={handleKeyDown}\n    >\n      <h2 id=\"addFilterLabel\" className=\"text--main-header\">\n        Filtr newslettera\n      </h2>\n      <section className=\"filters-dialog__filters-section\">\n        <GridCustom fullwidth flexM>\n          <FieldWithLabel\n            label=\"Program Operacyjny\"\n            tag=\"label\"\n            selectRef={React.createRef()}\n          >\n            <Select\n              screenReaderStatus={() => {\n                return \"Wybierz opcję z listy rozwijanej\";\n              }}\n              className=\"select-custom\"\n              isMulti\n              options={state.currentDictionaries.programOperacyjny.map(\n                ([value, label]) => ({ value, label })\n              )}\n              placeholder=\"Zacznij wpisywać...\"\n              value={state.filters.programme}\n              onChange={(selectedOption) =>\n                handleChangeFilter(\"programme\", selectedOption || [])\n              }\n              onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n              onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n              styles={customSelectStyles}\n              noOptionsMessage={() => \"Brak wybranej opcji\"}\n            />\n          </FieldWithLabel>\n          <FieldWithLabel\n            label=\"Kategoria przedmiotu zamówienia\"\n            tag=\"label\"\n            selectRef={React.createRef()}\n          >\n            <Select\n              screenReaderStatus={() => {\n                return \"Wybierz opcję z listy rozwijanej\";\n              }}\n              className=\"select-custom\"\n              options={[EMPTY_VALUE].concat(\n                ...state.currentDictionaries.przedmiotZamowieniaKategoria.map(\n                  (t) => ({\n                    value: t.id,\n                    label: t.nazwa,\n                  })\n                )\n              )}\n              value={state.filters.category || EMPTY_VALUE}\n              onChange={(selectedOption) => {\n                handleChangeFilter(\n                  \"category\",\n                  selectedOption.value === 0 ? null : selectedOption\n                );\n              }}\n              onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n              onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n              styles={customSelectStyles}\n              noOptionsMessage={() => \"Brak wybranej opcji\"}\n            />\n          </FieldWithLabel>\n        </GridCustom>\n        <GridCustom fullwidth flexM>\n          <FieldWithLabel\n            label=\"Podkategoria\"\n            aria-label={\n              state.filters.category !== null\n                ? null\n                : \"Podkategoria, pole nieaktywne. Aby wybrać podkategorię, musisz wybrać kategorię przedmiotu zamówienia.\"\n            }\n            selectRef={React.createRef()}\n            tag=\"label\"\n            tabIndex={state.filters.category !== null ? null : \"0\"}\n          >\n            <Select\n              screenReaderStatus={() => {\n                return \"Wybierz opcję z listy rozwijanej\";\n              }}\n              className=\"select-custom\"\n              isDisabled={state.filters.category === null}\n              options={\n                state.filters.category === null\n                  ? [EMPTY_VALUE]\n                  : [EMPTY_VALUE].concat(\n                      ...(state.currentDictionaries.przedmiotZamowieniaKategoria\n                        .filter(\n                          (k) =>\n                            parseInt(k.id) ===\n                            parseInt(state.filters.category?.value)\n                        )[0]\n                        ?.podkategorie.map((p) => ({\n                          value: p.id,\n                          label: p.nazwa,\n                        })) ?? [])\n                    )\n              }\n              value={state.filters.subcategory || EMPTY_VALUE}\n              onChange={(selectedOption) =>\n                handleChangeFilter(\n                  \"subcategory\",\n                  selectedOption.value === 0 ? null : selectedOption\n                )\n              }\n              onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n              onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n              styles={customSelectStyles}\n              aria-hidden={state.filters.category === null}\n              aria-label={state.filters.category !== null && \"Podkategoria\"}\n              noOptionsMessage={() => \"Brak wybranej opcji\"}\n            />\n          </FieldWithLabel>\n          <FormKodCPV\n            isMulti\n            initial={state.filters.cpvItem}\n            addKodCPV={(selectedOptions) =>\n              handleChangeFilter(\"cpvItem\", selectedOptions || [])\n            }\n          />\n        </GridCustom>\n        <GridCustom fullwidth flexM>\n          <FieldWithLabel\n            label=\"Miejsce realizacji\"\n            tag=\"label\"\n            selectRef={React.createRef()}\n          >\n            <Select\n              screenReaderStatus={() => {\n                return \"Wybierz opcję z listy rozwijanej\";\n              }}\n              className=\"select-custom\"\n              isMulti\n              options={state.currentDictionaries.miejsceRealizacji.map((m) => ({\n                value: m[0],\n                label: m[1],\n              }))}\n              placeholder=\"Zacznij wpisywać...\"\n              value={state.filters.fulfillmentPlaces}\n              onChange={(selectedOption) =>\n                handleChangeFilter(\"fulfillmentPlaces\", selectedOption || [])\n              }\n              onMenuOpen={() => setState({ ...state, isSelectOpen: true })}\n              onMenuClose={() => setState({ ...state, isSelectOpen: false })}\n              styles={{\n                ...customSelectStyles,\n                menuPortal: (provided, state) => ({\n                  ...provided,\n                  maxHeight: \"160px\",\n                }),\n                menuList: (provided, state) => ({\n                  ...provided,\n                  maxHeight: \"160px\",\n                }),\n              }}\n              noOptionsMessage={() => \"Brak wybranej opcji\"}\n            />\n          </FieldWithLabel>\n          <FieldWithLabel\n            label=\"Numer identyfikacyjny ogłoszeniodawcy\"\n            tag=\"label\"\n            labelFor=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n          >\n            <TextFieldCustom\n              aria-describedby={\n                (state.errors.errorNipOgloszeniodawcy || \"\").length > 0\n                  ? \"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n                  : null\n              }\n              aria-label={`Numer identyfikacyjny ogłoszeniodawcy: 255. Wpisz tylko cyfry. Wpisano ${\n                state.filters.advertiserIdentificationNumber?.length ?? 0\n              } znaków.`}\n              aria-valuemax={255}\n              characterCount\n              className=\"filters__input\"\n              clearFieldContext=\"numer identyfikacyjny ogłoszeniodawcy\"\n              id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n              invalid={(state.errors.errorNipOgloszeniodawcy || \"\").length > 0}\n              maxLength={255}\n              onChange={(ev) =>\n                handleChangeFilter(\n                  \"advertiserIdentificationNumber\",\n                  ev.target.value\n                )\n              }\n              onClear={(ev) =>\n                handleChangeFilter(\"advertiserIdentificationNumber\", \"\")\n              }\n              onKeyUp={(ev) =>\n                handleChangeFilter(\n                  \"advertiserIdentificationNumber\",\n                  ev.target.value\n                )\n              }\n              value={state.filters.advertiserIdentificationNumber ?? \"\"}\n            />\n            {(state.errors.errorNipOgloszeniodawcy || \"\").length > 0 && (\n              <Text\n                error\n                id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n              >\n                {state.errors.errorNipOgloszeniodawcy}\n              </Text>\n            )}\n          </FieldWithLabel>\n        </GridCustom>\n      </section>\n      <GridCustom flexEnd>\n        <ButtonStyled\n          disabled={\n            Object.keys(state.filters).filter((x) => x !== \"id\")?.length <= 0\n          }\n          onClick={() => {\n            props.save(state.filters);\n          }}\n          primary\n        >\n          Zapisz\n        </ButtonStyled>\n        <ButtonStyled onClick={props.close} remove>\n          Anuluj\n        </ButtonStyled>\n      </GridCustom>\n    </DialogCustom>\n  );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { PomocEkranowa } from \"../zarzadzanieTrescia\";\nimport { Text } from \"../../common\";\nimport { Elevation, Switch } from \"rmwc\";\nimport {\n  GridCustom,\n  ButtonStyled,\n  GridCellCustom,\n  DialogCustom,\n} from \"../../common\";\nimport { Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\nimport { NewsletterSettingsFilter } from \"./NewsletterSettingsFilter\";\nimport { generateUUIDV4 } from \"../../../helpers\";\nimport { fetchApi } from \"../../../fetch\";\nimport { Link } from \"react-router-dom\";\nimport { dateToString } from \"../../../helpers\";\nimport { Pagination } from \"../../common\";\n\nexport const NewsletterSettings = ({ isPreview, content }) => {\n  const [showDeleteFilterModal, setShowDeleteFilterModal] = useState(undefined);\n  const [filterModalData, setFilterModalData] = useState({\n    visible: false,\n    filter: undefined,\n  });\n  const [filters, setFilters] = useState([]);\n  const [advertisements, setAdvertisements] = useState([]);\n\n  const yesterdayDate = dateToString(\n    new Date(new Date().valueOf() - 1000 * 60 * 60 * 24)\n  );\n\n  const dayBeforeYesterdayDate = dateToString(\n    new Date(new Date().valueOf() - 1000 * 60 * 60 * 24 * 2)\n  );\n\n  const [advertisementsFilters, setAdvertisementsFilters] = useState({\n    page: 1,\n    total: 1,\n    day: yesterdayDate,\n    status: \"new\",\n  });\n\n  const [updatedCount, setUpdatedCount] = useState(0);\n  const [newCount, setNewCount] = useState(0);\n  const [isBusy, setIsBusy] = useState(false);\n\n  const PAGE_LIMIT = 5;\n\n  const refreshUpdatedAnnouncementsCount = () => {\n    return new Promise((resolve, reject) => {\n      fetchApi(\n        `/api/announcements?mode=newsletter&page=1&limit=1&day=${advertisementsFilters.day}&newsletter_status=updated`,\n        \"GET\",\n        {},\n        {},\n        (announcements) => {\n          setUpdatedCount(announcements.meta.total);\n          resolve();\n        },\n        () => {\n          reject();\n        },\n        () => {\n          reject();\n        }\n      );\n    });\n  };\n\n  const refreshNewAnnouncementsCount = () => {\n    return new Promise((resolve, reject) => {\n      fetchApi(\n        `/api/announcements?mode=newsletter&page=1&limit=1&day=${advertisementsFilters.day}&newsletter_status=new`,\n        \"GET\",\n        {},\n        {},\n        (announcements) => {\n          setNewCount(announcements.meta.total);\n          resolve();\n        },\n        () => {\n          reject();\n        },\n        () => {\n          reject();\n        }\n      );\n    });\n  };\n\n  const refreshFilters = () => {\n    fetchApi(\n      \"/api/newsletter-filters\",\n      \"GET\",\n      {},\n      {},\n      (filters) => {\n        const { newsletter_filters } = filters;\n\n        const mappedFilters = newsletter_filters.map((filter) => {\n          const modalFilter = filter.modal_settings;\n\n          return {\n            id: generateUUIDV4(),\n            name: buildFilterName(modalFilter),\n            filter: { ...modalFilter, id: filter.id },\n            filterByPropertiesCount: countFilters(modalFilter),\n            enabled: filter.enabled,\n          };\n        });\n\n        setFilters(mappedFilters);\n      },\n      () => {},\n      () => {}\n    );\n  };\n\n  useEffect(() => {\n    refreshFilters();\n  }, []);\n\n  useEffect(() => {\n    setIsBusy(true);\n\n    var promise1 = refreshAnnouncements();\n    var promise2 = refreshUpdatedAnnouncementsCount();\n    var promise3 = refreshNewAnnouncementsCount();\n\n    Promise.all([promise1, promise2, promise3]).then(() => {\n      setIsBusy(false);\n    });\n  }, [\n    advertisementsFilters.page,\n    advertisementsFilters.status,\n    advertisementsFilters.day,\n  ]);\n\n  const countFilters = (filter) => {\n    const modalFilterProperties = Object.keys(filter)\n      .map((key) => {\n        if (Array.isArray(filter[key]) && filter[key].length > 0) {\n          return filter[key];\n        } else if (!Array.isArray(filter[key]) && filter[key] && key !== \"id\") {\n          return filter[key];\n        }\n        return null;\n      })\n      .filter((x) => x);\n\n    return modalFilterProperties.length;\n  };\n\n  const refreshAnnouncements = () => {\n    const filters = advertisementsFilters;\n\n    return new Promise((resolve, reject) => {\n      fetchApi(\n        `/api/announcements?mode=newsletter&page=${filters.page}&limit=${PAGE_LIMIT}&day=${filters.day}&newsletter_status=${filters.status}`,\n        \"GET\",\n        {},\n        {},\n        (announcements) => {\n          setAdvertisements(announcements.advertisements);\n          setAdvertisementsFilters({\n            ...advertisementsFilters,\n            total: announcements.meta.total,\n          });\n\n          if (filters.status === \"new\") {\n            setNewCount(announcements.meta.total);\n          } else if (filters.status === \"updated\") {\n            setUpdatedCount(announcements.meta.total);\n          }\n          resolve();\n        },\n        () => {\n          reject();\n        },\n        () => {\n          reject();\n        }\n      );\n    });\n  };\n\n  const addFilter = (filter) => {\n    if (Object.keys(filter)?.length > 0) {\n      mapAndSaveFilter(null, filter, () => {\n        refreshFilters();\n        refreshAnnouncements();\n        refreshUpdatedAnnouncementsCount();\n        refreshNewAnnouncementsCount();\n      });\n    }\n  };\n\n  const editFilter = (id, filter) => {\n    mapAndSaveFilter(filter.id, filter, () => {\n      const updatedFilters = filters.map((existingFilter) => {\n        if (existingFilter.id === id) {\n          return {\n            id: id,\n            name: buildFilterName(filter),\n            filter: filter,\n            filterByPropertiesCount: countFilters(filter),\n          };\n        } else {\n          return existingFilter;\n        }\n      });\n\n      setFilters(updatedFilters);\n      refreshAnnouncements();\n      refreshUpdatedAnnouncementsCount();\n    });\n  };\n\n  const mapAndSaveFilter = (id, filter, onSuccess) => {\n    const filterToSave = {\n      advertiser_identification_number: filter.advertiserIdentificationNumber,\n      programme_ids: filter.programme?.map((x) => x.value) ?? [],\n      category_id: filter.category?.value,\n      subcategory_id: filter.subcategory?.value,\n      cpv_item_ids: filter.cpvItem?.map((x) => x.id) ?? [],\n      fulfillment_place_codes:\n        filter.fulfillmentPlaces?.map((x) => x.value) ?? [],\n    };\n\n    const requestUrl = id\n      ? `/api/newsletter-filters/${id}`\n      : `/api/newsletter-filters`;\n\n    const requestMethod = id ? \"PUT\" : \"POST\";\n\n    fetchApi(\n      requestUrl,\n      requestMethod,\n      {},\n      filterToSave,\n      () => onSuccess(),\n      () => {},\n      () => {}\n    );\n  };\n\n  const enableDisableFilter = (checked, filter) => {\n    fetchApi(\n      `/api/newsletter-filters/${filter.filter.id}/enabled`,\n      \"PUT\",\n      {},\n      { enabled: checked },\n      () => {\n        const updatedFilters = [\n          ...filters.map((x) => {\n            if (x.id === filter.id) {\n              x.enabled = checked;\n            }\n\n            return x;\n          }),\n        ];\n        setFilters(updatedFilters);\n        refreshAnnouncements();\n        refreshUpdatedAnnouncementsCount();\n        refreshNewAnnouncementsCount();\n      },\n      () => {},\n      () => {}\n    );\n  };\n\n  const deleteFilter = (filter) => {\n    fetchApi(\n      `/api/newsletter-filters/${filter.filter.id}`,\n      \"DELETE\",\n      {},\n      {},\n      () => {\n        const newFilters = filters.filter((x) => x.id !== filter.id);\n        setFilters(newFilters);\n        refreshAnnouncements();\n        refreshUpdatedAnnouncementsCount();\n        refreshNewAnnouncementsCount();\n        setShowDeleteFilterModal(undefined);\n      },\n      () => {},\n      () => {}\n    );\n  };\n\n  const buildFilterName = (filter) => {\n    const { id, ...rest } = filter;\n\n    const propValues = Object.values(rest)\n      .filter((x) => x)\n      .map((value) => {\n        if (Array.isArray(value)) {\n          return value\n            .map((item) => {\n              if (item.hasOwnProperty(\"label\")) {\n                return item.label;\n              } else {\n                return `${item.kod} ${item.nazwa}`;\n              }\n            })\n            .join(\", \");\n        } else if (typeof value === \"object\") {\n          return value?.label;\n        } else {\n          return value;\n        }\n      });\n    return propValues.filter((x) => x).join(\"; \");\n  };\n\n  const handleChangePage = (next = true) => {\n    if (next) {\n      setAdvertisementsFilters({\n        ...advertisementsFilters,\n        page: advertisementsFilters.page + 1,\n      });\n    } else {\n      if (advertisementsFilters.page > 1) {\n        setAdvertisementsFilters({\n          ...advertisementsFilters,\n          page: advertisementsFilters.page - 1,\n        });\n      }\n    }\n  };\n\n  const handleAddToFavorites = (object) => {\n    fetchApi(\n      `/api/favorite-announcements/${object.advertisement.id}`,\n      \"POST\",\n      {},\n      {},\n      () => {\n        const index = advertisements.findIndex((obj) => obj.id === object.id);\n        const updatedObjects = [...advertisements];\n        updatedObjects[index] = { ...updatedObjects[index], favorite: true };\n        setAdvertisements(updatedObjects);\n      }\n    );\n  };\n\n  const handleRemoveFromFavorites = (object) => {\n    fetchApi(\n      `/api/favorite-announcements/${object.advertisement.id}`,\n      \"DELETE\",\n      {},\n      {},\n      () => {\n        const index = advertisements.findIndex((obj) => obj.id === object.id);\n        const updatedObjects = [...advertisements];\n        updatedObjects[index] = { ...updatedObjects[index], favorite: false };\n        setAdvertisements(updatedObjects);\n      }\n    );\n  };\n\n  return (\n    <>\n      <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n        <PomocEkranowa\n          ekran=\"newsletter_settings\"\n          content={isPreview ? content : null}\n        />\n        <Text tag=\"h2\" mainHeader>\n          Ustawienia newslettera\n        </Text>\n\n        <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"15px\" }}>\n          {filters.map((filter, index) => {\n            return (\n              <Elevation z={4} style={{ padding: 10 }} key={index}>\n                <GridCustom\n                  centerVertical\n                  fullwidth\n                  className=\"newsletter-settings\"\n                >\n                  <Switch\n                    aria-label={`Włącz filtry dla ${filter.name}`}\n                    id={`filters_${index}`}\n                    checked={filter.enabled}\n                    onChange={(ev) =>\n                      enableDisableFilter(ev.target.checked, filter)\n                    }\n                  >\n                    {filter.name}\n                  </Switch>\n                  <GridCustom\n                    noWrap\n                    className=\"newsletter-settings-filter-buttons\"\n                  >\n                    <ButtonStyled\n                      icon=\"list\"\n                      lite\n                      onClick={() => {\n                        setFilterModalData({\n                          visible: true,\n                          filter: filter.filter,\n                          id: filter.id,\n                        });\n                      }}\n                    >\n                      EDYTUJ\n                      <Badge\n                        className=\"bluebadge\"\n                        label={filter.filterByPropertiesCount}\n                        align=\"inline\"\n                      />\n                    </ButtonStyled>\n\n                    <ButtonStyled\n                      remove\n                      icon=\"delete\"\n                      onClick={() => {\n                        setShowDeleteFilterModal(filter);\n                      }}\n                    >\n                      USUŃ\n                    </ButtonStyled>\n                  </GridCustom>\n                </GridCustom>\n              </Elevation>\n            );\n          })}\n        </div>\n        <ButtonStyled\n          icon=\"add\"\n          lite\n          style={{ marginLeft: \"auto\" }}\n          onClick={() => {\n            setFilterModalData({ visible: true, filter: undefined });\n          }}\n        >\n          Dodaj\n        </ButtonStyled>\n        <Text tag=\"h2\" mainHeader>\n          Wyniki\n        </Text>\n\n        <GridCustom centerVertical centerHorizontal>\n          <p>Data opublikowania:</p>\n          <ButtonStyled\n            primary={advertisementsFilters.day === dayBeforeYesterdayDate}\n            lite={advertisementsFilters.day !== dayBeforeYesterdayDate}\n            disabled={isBusy}\n            onClick={() => {\n              setAdvertisementsFilters({\n                ...advertisementsFilters,\n                day: dayBeforeYesterdayDate,\n                page: 1,\n              });\n            }}\n          >\n            {dayBeforeYesterdayDate}\n          </ButtonStyled>\n          <ButtonStyled\n            primary={advertisementsFilters.day === yesterdayDate}\n            lite={advertisementsFilters.day !== yesterdayDate}\n            disabled={isBusy}\n            onClick={() => {\n              setAdvertisementsFilters({\n                ...advertisementsFilters,\n                day: yesterdayDate,\n                page: 1,\n              });\n            }}\n          >\n            {yesterdayDate}\n          </ButtonStyled>\n        </GridCustom>\n\n        <GridCustom centerVertical centerHorizontal>\n          <ButtonStyled\n            primary={advertisementsFilters.status === \"new\"}\n            lite={advertisementsFilters.status !== \"new\"}\n            disabled={isBusy}\n            onClick={() => {\n              setAdvertisementsFilters({\n                ...advertisementsFilters,\n                status: \"new\",\n                page: 1,\n              });\n            }}\n          >\n            NOWE ({newCount} OGŁOSZEŃ)\n          </ButtonStyled>\n          <ButtonStyled\n            primary={advertisementsFilters.status === \"updated\"}\n            lite={advertisementsFilters.status !== \"updated\"}\n            disabled={isBusy}\n            onClick={() => {\n              setAdvertisementsFilters({\n                ...advertisementsFilters,\n                status: \"updated\",\n                page: 1,\n              });\n            }}\n          >\n            ZAKTUALIZOWANE ({updatedCount} OGŁOSZEŃ)\n          </ButtonStyled>\n        </GridCustom>\n\n        <ul style={{ listStyleType: \"none\" }}>\n          {advertisements.map((advertisement) => {\n            return (\n              <li\n                key={advertisement.id}\n                className=\"separate-content search__item\"\n              >\n                <GridCustom fullwidth key={advertisement.advertisement.id}>\n                  <GridCellCustom>\n                    <Link\n                      to={`/ogloszenia/${advertisement.advertisement.id}`}\n                      className=\"link-text\"\n                    >\n                      <span\n                        dangerouslySetInnerHTML={{\n                          __html: advertisement.title,\n                        }}\n                      ></span>\n                    </Link>\n                    {advertisement.is_mine && (\n                      <span className=\"author-label\">Moje ogłoszenie</span>\n                    )}\n                  </GridCellCustom>\n                  {!advertisement.is_mine && (\n                    <GridCellCustom style={{ minWidth: \"255px\" }}>\n                      {advertisement.favorite === false && (\n                        <ButtonStyled\n                          onClick={() => handleAddToFavorites(advertisement)}\n                          primary\n                          icon=\"favorite\"\n                        >\n                          DODAJ DO ULUBIONYCH\n                          <span className=\"sr-only\">\n                            ogłoszenie {advertisement.title}\n                          </span>\n                        </ButtonStyled>\n                      )}\n                      {advertisement.favorite === true && (\n                        <ButtonStyled\n                          onClick={() =>\n                            handleRemoveFromFavorites(advertisement)\n                          }\n                          remove\n                          icon=\"close\"\n                        >\n                          USUŃ Z ULUBIONYCH\n                          <span className=\"sr-only\">\n                            {\" \"}\n                            ogłoszenie {advertisement.title}\n                          </span>\n                        </ButtonStyled>\n                      )}\n                    </GridCellCustom>\n                  )}\n                </GridCustom>\n\n                <p\n                  dangerouslySetInnerHTML={{\n                    __html: advertisement.description,\n                  }}\n                ></p>\n                <GridCustom flexM fullwidth>\n                  <Text info className=\"search__results-meta\">\n                    Opublikowano: {advertisement.publication_date}\n                  </Text>\n                  <Text info className=\"search__results-meta\">\n                    Termin składania ofert: {advertisement.submission_deadline}\n                  </Text>\n                  <Text\n                    info\n                    className=\"search__results-meta search__results-meta--company-name\"\n                  >\n                    <span\n                      dangerouslySetInnerHTML={{\n                        __html: advertisement?.advertiser_address_details?.name,\n                      }}\n                    ></span>\n                  </Text>\n                  {(advertisement.fulfillment_place || \"\").length > 0 && (\n                    <Text info className=\"search__results-meta\">\n                      {advertisement.fulfillment_place}\n                    </Text>\n                  )}\n                </GridCustom>\n              </li>\n            );\n          })}\n        </ul>\n        <Pagination\n          currentPage={advertisementsFilters.page}\n          hasNext={\n            advertisementsFilters.page * PAGE_LIMIT <\n            advertisementsFilters.total\n          }\n          hasPrev={advertisementsFilters.page > 1}\n          handleChangePage={handleChangePage}\n        />\n      </div>\n      {filterModalData.visible && (\n        <NewsletterSettingsFilter\n          filter={filterModalData.filter}\n          save={(filter) => {\n            if (filterModalData.filter) {\n              editFilter(filterModalData.id, filter);\n            } else {\n              addFilter(filter);\n            }\n\n            setFilterModalData({ visible: false, filter: undefined });\n          }}\n          close={() => {\n            setFilterModalData({ visible: false, filter: undefined });\n          }}\n        />\n      )}\n      {showDeleteFilterModal && (\n        <DialogCustom\n          className=\"dialog\"\n          dialogTitle=\"Czy na pewno chcesz usunąć filtr newslettera?\"\n          onClose={() => {\n            setShowDeleteFilterModal(undefined);\n          }}\n        >\n          <GridCustom centerVertical flexEnd>\n            <ButtonStyled\n              onClick={() => {\n                setShowDeleteFilterModal(undefined);\n              }}\n              cancel\n            >\n              Anuluj\n            </ButtonStyled>\n            <ButtonStyled\n              onClick={() => {\n                deleteFilter(showDeleteFilterModal);\n              }}\n              remove\n            >\n              Usuń\n            </ButtonStyled>\n          </GridCustom>\n        </DialogCustom>\n      )}\n    </>\n  );\n};\n","import React, { Component } from \"react\";\n\nimport {\n  ButtonStyled,\n  FieldWithLabel,\n  GridCustom,\n  Select,\n  TextFieldCustom,\n  Text,\n} from \"../../common\";\nimport { customSelectStyles } from \"../../vars/vars\";\n\nimport { serializeObjectList } from \"../../../serializers\";\n\nimport { fetchApi } from \"../../../fetch\";\n\nimport {\n  sortMiejsceRealizacjiFilter,\n  sortProgrammeFilter,\n} from \"../../../sorters\";\n\nimport { FormKodCPV } from \"../ogloszenia/FormKodCPV\";\n\nconst EMPTY_VALUE = {\n  value: 0,\n  label: \"Wybierz\",\n};\n\nconst ORDER_ITEM_CATEGORIES = \"order_item_categories\";\n\nconst serializeProgrammeSelectStructure = (data) => {\n  let data_ = {};\n  for (let programme of Object.values(data)) {\n    data_[programme.id] = `${programme.code.toUpperCase()} - ${programme.name}`;\n  }\n  return Object.entries(data_).sort(sortProgrammeFilter) || [];\n};\n\nclass FavoritesFilters extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      initializingOn: true,\n      filters: props.filters,\n      dictionaries: props.dictionaries,\n      errors: {},\n    };\n\n    this.xhrFetch = null;\n\n    this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n    this.handleFetchError = this.handleFetchError.bind(this);\n    this.handleFetchIncorrectStatus =\n      this.handleFetchIncorrectStatus.bind(this);\n    this.handleApplyFilters = this.handleApplyFilters.bind(this);\n  }\n\n  componentDidMount() {\n    if (!Object.keys(this.state.dictionaries).length) {\n      // get dictionaries from server\n      this.xhrFetch = fetchApi(\n        \"/api/dictionaries/search-filters\",\n        \"GET\",\n        {},\n        {},\n        this.handleFetchSuccess,\n        this.handleFetchError,\n        this.handleFetchIncorrectStatus\n      );\n    } else {\n      this.setState({ initializingOn: false });\n    }\n  }\n\n  componentWillUnmount() {\n    // abort api request if exist\n    if (this.xhrFetch !== null) {\n      this.xhrFetch.abort();\n    }\n  }\n\n  //handlers\n\n  handleFetchSuccess(data) {\n    this.xhrFetch = null;\n    let dictionaries = {\n      przedmiotZamowieniaKategoria: serializeObjectList(\n        data[ORDER_ITEM_CATEGORIES]\n      ),\n      programOperacyjny: serializeProgrammeSelectStructure(\n        data.operation_programme\n      ),\n      miejsceRealizacji:\n        Object.entries(data.location_id).sort(sortMiejsceRealizacjiFilter) ||\n        [],\n    };\n\n    this.setState(\n      {\n        initializingOn: false,\n        dictionaries,\n      },\n      () => this.props.updateDictionaries(dictionaries)\n    );\n  }\n\n  handleFetchError(data) {\n    this.xhrFetch = null; // clean xhr object\n    this.setState({\n      initializingOn: false,\n      fetchError: `Nie udało się pobrać danych do filtrów. ${data.message}`,\n    });\n  }\n\n  handleFetchIncorrectStatus(status) {\n    this.xhrFetch = null; // clean xhr object\n    this.setState({\n      initializingOn: false,\n      fetchError: `Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n    });\n  }\n\n  handleApplyFilters() {\n    this.props.updateFilters(this.state.filters);\n  }\n\n  handleChangeFilter(name, value) {\n    this.setState((prevState) => {\n      let dict = { [name]: value };\n      if (name === \"advertiserIdentificationNumber\") {\n        // allow to insert only letters and digits\n        dict[\"advertiserIdentificationNumber\"] = value.replace(\n          /[^a-zA-Z\\d]/,\n          \"\"\n        );\n      } else {\n        dict[name] = value;\n      }\n      if (name === \"category\") {\n        dict[\"subcategory\"] = null;\n      }\n      // clean error (just in case if exists)\n      let errors = Object.assign({}, prevState.errors);\n      delete errors[name];\n      return { errors, filters: Object.assign({}, prevState.filters, dict) };\n    });\n  }\n\n  // rendering\n\n  render() {\n    const filters = this.state.filters;\n    if (this.state.initializingOn) {\n      return (\n        <Text info tabIndex=\"1\">\n          Trwa inicjalizacja danych...\n        </Text>\n      );\n    } else {\n      return (\n        <>\n          <section className=\"filters-dialog__filters-section\">\n            <GridCustom fullwidth flexM>\n              <FieldWithLabel\n                label=\"Program Operacyjny\"\n                tag=\"label\"\n                selectRef={React.createRef()}\n              >\n                <Select\n                  screenReaderStatus={() => {\n                    return \"Wybierz opcję z listy rozwijanej\";\n                  }}\n                  className=\"select-custom\"\n                  isMulti\n                  options={this.state.dictionaries.programOperacyjny.map(\n                    ([value, label]) => ({ value, label })\n                  )}\n                  placeholder=\"Zacznij wpisywać...\"\n                  value={filters.programme}\n                  onChange={(selectedOption) =>\n                    this.handleChangeFilter(\"programme\", selectedOption || [])\n                  }\n                  styles={customSelectStyles}\n                  noOptionsMessage={() => \"Brak wybranej opcji\"}\n                />\n              </FieldWithLabel>\n              <FieldWithLabel\n                label=\"Kategoria przedmiotu zamówienia\"\n                tag=\"label\"\n                selectRef={React.createRef()}\n              >\n                <Select\n                  screenReaderStatus={() => {\n                    return \"Wybierz opcję z listy rozwijanej\";\n                  }}\n                  className=\"select-custom\"\n                  options={[EMPTY_VALUE].concat(\n                    ...this.state.dictionaries.przedmiotZamowieniaKategoria.map(\n                      (t) => ({\n                        value: t.id,\n                        label: t.nazwa,\n                      })\n                    )\n                  )}\n                  value={filters.category || EMPTY_VALUE}\n                  onChange={(selectedOption) => {\n                    this.handleChangeFilter(\n                      \"category\",\n                      selectedOption.value === 0 ? null : selectedOption\n                    );\n                  }}\n                  styles={customSelectStyles}\n                  noOptionsMessage={() => \"Brak wybranej opcji\"}\n                />\n              </FieldWithLabel>\n            </GridCustom>\n            <GridCustom fullwidth flexM>\n              <FieldWithLabel\n                label=\"Podkategoria\"\n                aria-label={\n                  filters.category !== null\n                    ? null\n                    : \"Podkategoria, pole nieaktywne. Aby wybrać podkategorię, musisz wybrać kategorię przedmiotu zamówienia.\"\n                }\n                selectRef={React.createRef()}\n                tag=\"label\"\n                tabIndex={filters.category !== null ? null : \"0\"}\n              >\n                <Select\n                  screenReaderStatus={() => {\n                    return \"Wybierz opcję z listy rozwijanej\";\n                  }}\n                  className=\"select-custom\"\n                  isDisabled={filters.category === null}\n                  options={\n                    filters.category === null\n                      ? [EMPTY_VALUE]\n                      : [EMPTY_VALUE].concat(\n                          ...this.state.dictionaries.przedmiotZamowieniaKategoria\n                            .filter(\n                              (k) =>\n                                parseInt(k.id) ===\n                                parseInt(filters.category?.value)\n                            )[0]\n                            .podkategorie.map((p) => ({\n                              value: p.id,\n                              label: p.nazwa,\n                            }))\n                        )\n                  }\n                  value={filters.subcategory || EMPTY_VALUE}\n                  onChange={(selectedOption) =>\n                    this.handleChangeFilter(\n                      \"subcategory\",\n                      selectedOption.value === 0 ? null : selectedOption\n                    )\n                  }\n                  styles={customSelectStyles}\n                  aria-hidden={filters.category === null}\n                  aria-label={filters.category !== null && \"Podkategoria\"}\n                  noOptionsMessage={() => \"Brak wybranej opcji\"}\n                />\n              </FieldWithLabel>\n              <FormKodCPV\n                isMulti\n                initial={filters.cpvItem}\n                addKodCPV={(selectedOptions) =>\n                  this.handleChangeFilter(\"cpvItem\", selectedOptions || [])\n                }\n              />\n            </GridCustom>\n            <GridCustom fullwidth flexM>\n              <FieldWithLabel\n                label=\"Miejsce realizacji\"\n                tag=\"label\"\n                selectRef={React.createRef()}\n              >\n                <Select\n                  screenReaderStatus={() => {\n                    return \"Wybierz opcję z listy rozwijanej\";\n                  }}\n                  className=\"select-custom\"\n                  isMulti\n                  options={this.state.dictionaries.miejsceRealizacji.map(\n                    (m) => ({\n                      value: m[0],\n                      label: m[1],\n                    })\n                  )}\n                  placeholder=\"Zacznij wpisywać...\"\n                  value={filters.fulfillmentPlaces}\n                  onChange={(selectedOption) =>\n                    this.handleChangeFilter(\n                      \"fulfillmentPlaces\",\n                      selectedOption || []\n                    )\n                  }\n                  styles={customSelectStyles}\n                  noOptionsMessage={() => \"Brak wybranej opcji\"}\n                />\n              </FieldWithLabel>\n              <FieldWithLabel\n                label=\"Numer identyfikacyjny ogłoszeniodawcy\"\n                tag=\"label\"\n                labelFor=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n              >\n                <TextFieldCustom\n                  aria-describedby={\n                    (this.state.errors.errorNipOgloszeniodawcy || \"\").length > 0\n                      ? \"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n                      : null\n                  }\n                  aria-label={`Numer identyfikacyjny ogłoszeniodawcy: 255. Wpisz tylko cyfry. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n                  aria-valuemax={255}\n                  characterCount\n                  className=\"filters__input\"\n                  clearFieldContext=\"numer identyfikacyjny ogłoszeniodawcy\"\n                  id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n                  invalid={\n                    (this.state.errors.errorNipOgloszeniodawcy || \"\").length > 0\n                  }\n                  maxLength={255}\n                  onChange={(ev) =>\n                    this.handleChangeFilter(\n                      \"advertiserIdentificationNumber\",\n                      ev.target.value\n                    )\n                  }\n                  onClear={(ev) =>\n                    this.handleChangeFilter(\n                      \"advertiserIdentificationNumber\",\n                      \"\"\n                    )\n                  }\n                  onKeyUp={(ev) =>\n                    this.handleChangeFilter(\n                      \"advertiserIdentificationNumber\",\n                      ev.target.value\n                    )\n                  }\n                  value={filters.advertiserIdentificationNumber}\n                />\n                {(this.state.errors.errorNipOgloszeniodawcy || \"\").length >\n                  0 && (\n                  <Text\n                    error\n                    id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_error\"\n                  >\n                    {this.state.errors.errorNipOgloszeniodawcy}\n                  </Text>\n                )}\n              </FieldWithLabel>\n            </GridCustom>\n          </section>\n          <GridCustom flexEnd>\n            <ButtonStyled onClick={this.props.closeFilters} cancel>\n              Anuluj\n            </ButtonStyled>\n            <ButtonStyled onClick={this.handleApplyFilters} primary>\n              Zastosuj kryteria\n            </ButtonStyled>\n          </GridCustom>\n        </>\n      );\n    }\n  }\n}\n\nexport { FavoritesFilters };\n","import React from \"react\";\nimport { PomocEkranowa } from \"../zarzadzanieTrescia\";\nimport { PaginatedBaseComponent } from \"../common\";\n\nimport { Link } from \"react-router-dom\";\nimport {\n  getFavoritesAdvertFiltersCount,\n  FAVORITES_ADVERT_CLEANED_FILTERS,\n} from \"../../../filters\";\nimport { FavoritesFilters } from \"./FavoritesFilters\";\n\nimport {\n  Box,\n  FieldWithLabel,\n  GridCustom,\n  ButtonStyled,\n  Text,\n} from \"../../common\";\nimport { dateToString } from \"../../../helpers\";\nimport { isAdvertisementLocked } from \"../../../helpers\";\nimport { fetchApi } from \"../../../fetch\";\nimport { BadgeAnchor, Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\n\nclass Favorites extends PaginatedBaseComponent {\n  preState(props) {\n    super.preState(props);\n    this.objectsName = \"ogloszenia\";\n    this.paginateBy = 20;\n    this.sortingValues = [\n      [\"publicationDate\", \"Po dacie publikacji ogłoszeń\"],\n      [\"submissionDeadline\", \"Po terminie składania ofert\"],\n      [\"default\", \"Domyślnie\"],\n    ];\n    this.filteringLabel = \"Filtruj listę\";\n    this.filtersComponentClass = FavoritesFilters;\n\n    this.getFiltersCount = getFavoritesAdvertFiltersCount;\n  }\n\n  postState(props) {\n    super.postState(props);\n    this.dictionaries = {};\n  }\n\n  handleReload = (link = null) => {\n    this.setState({ initializingOn: true, fetchError: \"\", objects: [] }, () => {\n      this.fetchInitialData();\n    });\n  };\n\n  getAdditionalState(props) {\n    const params = new URLSearchParams(props.location.search);\n    return Object.assign({}, super.getAdditionalState(props), {\n      selectedSort: {\n        value: this.sortingValues[2][0],\n        label: this.sortingValues[2][1],\n      },\n      query: params.get(\"q\") || \"\",\n      filters: FAVORITES_ADVERT_CLEANED_FILTERS,\n    });\n  }\n\n  renderHeader() {\n    return (\n      <>\n        <PomocEkranowa\n          ekran=\"favorites_list\"\n          content={this.props.isPreview ? this.props.content : null}\n        />\n        <Text tag=\"h1\" mainHeader>\n          Lista ulubionych ogłoszeń\n        </Text>\n      </>\n    );\n  }\n\n  renderEmptyObjects() {\n    return (\n      <Text error role=\"alert\">\n        Nie znaleziono ogłoszeń spełniających kryteria wyszukiwania.\n      </Text>\n    );\n  }\n\n  getFetchUrl() {\n    return \"/api/announcements\";\n  }\n\n  getFetchData() {\n    let queryDict = super.getFetchData();\n\n    if (this.state.query.length) {\n      queryDict[\"query\"] = this.state.query;\n    }\n    for (let [name, value] of Object.entries(this.state.filters)) {\n      if ([\"publicationDateRange\", \"submissionDeadlineRange\"].includes(name)) {\n        for (let [subname, subvalue] of Object.entries(value)) {\n          if (subname === \"type\") {\n            continue;\n          }\n          if (!!subvalue) {\n            queryDict[`${name}[${subname}]`] = subvalue;\n          }\n        }\n      } else if (name === \"cpvItem\") {\n        if (Object.keys(value).length) {\n          queryDict[name] = value.map((kod) => kod.kod);\n        }\n      } else if (\"programme\" === name) {\n        if (value.length) {\n          queryDict[name] = value.map((mr) => mr.value.toUpperCase());\n        }\n      } else if (\"fulfillmentPlaces\" === name) {\n        if (value.length) {\n          queryDict[name] = value.map((mr) => mr.value);\n        }\n      } else if ([\"category\", \"subcategory\"].includes(name)) {\n        if (value !== null) {\n          queryDict[name] = value.label;\n        }\n      } else if (\n        (name === \"status\" && Object.keys(value).length) ||\n        value !== FAVORITES_ADVERT_CLEANED_FILTERS[name]\n      ) {\n        queryDict[name] = value;\n      } else if (name === \"mode\") {\n        queryDict[name] = value;\n      }\n    }\n    return queryDict;\n  }\n\n  renderFiltersComponent() {\n    return (\n      <this.filtersComponentClass\n        dictionaries={this.dictionaries}\n        filters={this.state.filters}\n        closeFilters={() => this.setState({ filtersAreOn: false })}\n        updateDictionaries={(dictionaries) =>\n          (this.dictionaries = dictionaries)\n        }\n        updateFilters={this.handleApplyFilters}\n      />\n    );\n  }\n\n  renderList() {\n    const total = this.state.total;\n    return (\n      <>\n        <Text accentHeader tag=\"h2\" role=\"alert\">\n          Znaleziono {total < this.paginateBy ? \"\" : \"około \"}\n          {total} ogłoszeń\n        </Text>\n        <GridCustom flexL noWrap flexTop>\n          <GridCustom centerHorizontal className=\"advertisements-list\" tag=\"ul\">\n            {this.state.objects.map((o) => this.renderOgloszenie(o))}\n          </GridCustom>\n        </GridCustom>\n      </>\n    );\n  }\n\n  handleAddToFavorites = (id) => {\n    fetchApi(`/api/favorite-announcements/${id}`, \"POST\", {}, {}, () => {\n      this.handleReload();\n    });\n  };\n\n  handleRemoveFromFavorites = (id) => {\n    fetchApi(`/api/favorite-announcements/${id}`, \"DELETE\", {}, {}, () => {\n      this.handleReload();\n    });\n  };\n\n  renderOgloszenie(o) {\n    const status = parseInt(o.ogloszenie.status?.id);\n    const isLocked = isAdvertisementLocked(o.ogloszenie.status);\n    return (\n      <Box\n        className=\"box--advertisement\"\n        flexiblewidth\n        tag=\"li\"\n        titleOneRow={o.tytul || \"-\"}\n        key={o.id}\n      >\n        <GridCustom fullwidth>\n          <FieldWithLabel label=\"Numer ogłoszenia\">\n            <Text>{o.ogloszenie.numer || \"-\"}</Text>\n          </FieldWithLabel>\n          <FieldWithLabel label=\"Status\">\n            <Text>{o.ogloszenie.status?.nazwa}</Text>\n          </FieldWithLabel>\n        </GridCustom>\n        <GridCustom fullwidth>\n          <FieldWithLabel\n            label={`Data ${\n              o.dataOpublikowania?.length > 0 &&\n              o.dataOpublikowania > dateToString(new Date())\n                ? \"odroczonej \"\n                : \"\"\n            }publikacji`}\n          >\n            <Text>{o.dataOpublikowania || \"-\"}</Text>\n          </FieldWithLabel>\n          <FieldWithLabel label=\"Termin składania ofert\">\n            <Text>{o.terminOfert || \"-\"}</Text>\n          </FieldWithLabel>\n        </GridCustom>\n        <FieldWithLabel label=\"Czy dopuszczalna oferta częściowa?\">\n          <Text>\n            {o.czyDopuszczalnaOfertaCzesciowa ? \"TAK\" : \"NIE\"}\n            {o.czyDopuszczalnaOfertaCzesciowa &&\n              ` (Części: ${o.liczbaZamowien})`}\n          </Text>\n        </FieldWithLabel>\n\n        <BadgeAnchor style={{ width: \"100%\" }}>\n          <ButtonStyled\n            className=\"corner-button\"\n            disabled={isLocked}\n            primary\n            tag={Link}\n            to={`/ogloszenia/${o.ogloszenie.id}${\n              status === this.roboczeStatusId ? \"/robocza\" : \"\"\n            }`}\n          >\n            Pokaż szczegóły\n            <span className=\"sr-only\">{` ogłoszenia ${o.tytul}`}</span>\n          </ButtonStyled>\n          {o.badge_count > 0 && (\n            <Badge label={o.badge_count} />\n          )}\n        </BadgeAnchor>\n\n        {o.favorite === false && (\n          <ButtonStyled\n            onClick={() => this.handleAddToFavorites(o.ogloszenie.id)}\n            primary\n            icon=\"favorite\"\n          >\n            DODAJ DO ULUBIONYCH\n            <span className=\"sr-only\"> ogłoszenie {o.tytul}</span>\n          </ButtonStyled>\n        )}\n        {o.favorite === true && (\n          <ButtonStyled\n            onClick={() => this.handleRemoveFromFavorites(o.ogloszenie.id)}\n            remove\n            icon=\"close\"\n          >\n            USUŃ Z ULUBIONYCH\n            <span className=\"sr-only\"> ogłoszenie {o.tytul}</span>\n          </ButtonStyled>\n        )}\n      </Box>\n    );\n  }\n}\n\nexport { Favorites };\n","import React, { Component } from 'react';\n\nimport { ButtonStyled, DialogCustom } from '../../common';\nimport { LandingPage } from '../LandingPage';\nimport { FormOgloszenie } from '../ogloszenia/FormOgloszenie';\nimport { Ogloszenia } from '../ogloszenia/Ogloszenia';\nimport { Projekty } from '../projekty/Projekty';\nimport { NewsletterSettings } from '../newsletter/NewsletterSettings';\nimport { Favorites } from '../newsletter/Favorites';\n\n\nclass TrescPreview extends Component {\n\n    // rendering\n\n    render() {\n        return (\n            <DialogCustom\n                className=\"dialog-long-content dialog-long-content--preview\"\n                style={{zIndex: 100}}\n                onClose={this.props.closePreview}\n            >\n                <>\n                    <ButtonStyled onClick={this.props.closePreview} primary className=\"dialog-long-content__close\">Zamknij podgląd</ButtonStyled>\n                    <p className=\"top-app-bar-imitation\">Baza Konkurencyjności</p>\n                    {this.renderPreview()}\n                </>\n            </DialogCustom>\n        )\n    }\n\n    renderPreview() {\n        let Component = null;\n        let step = null;\n        switch (this.props.screen) {\n            case 'homePage':\n                Component = LandingPage;\n                break;\n            case 'projekty_lista_ogloszeniodawca':\n                Component = Projekty;\n                break;\n            case 'ogloszenia_lista_ogloszeniodawca':\n                Component = Ogloszenia;\n                break;\n            case 'newsletter_ustawienia':\n                Component = NewsletterSettings;\n                break;\n            case 'ulubione_lista':\n                Component = Favorites;\n                break;\n            default:\n                Component = FormOgloszenie;\n                step = this.props.screen.split('_').pop();\n        }\n        if (!Component) { return null }\n        return <Component preview content={this.props.content} step={step} {...{location: {search: {}}}}/>\n    }\n}\n\n\nexport { TrescPreview };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport Select from 'react-select';\nimport { Radio } from '@rmwc/radio';\n\nimport { EKRANOWA, EKRANY_DICT, OGOLNA } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport {\n    countWysiwygChars,\n    extractYoutubeSrc,\n    getAuthTokenCookieValue,\n    refreshTimerAfterRequest\n} from '../../../helpers';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    TextFieldCustom,\n    WysiwygEditor,\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { TrescPreview } from './TrescPreview';\n\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: '--- Wybierz ---',\n}\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz pomoc';\n\n\nclass FormPomoc extends BaseComponent {\n\n    // base functions\n\n    componentDidMount() {\n        this.fetchInitialData();\n    }\n\n    componentWillUnmount() {\n        super.componentWillUnmount();\n        if (this.xhrSaveFile !== null) {\n            this.xhrSaveFile.abort();\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const serializedData = getSerializedObject(\n            data, {nonRecursiveKeys: ['tresc', ]});\n        if (this.state.isNew) {\n            this.setState({\n                initializingOn: false,\n                availableParents: serializedData.pomoce.parents_candidates.data || [],\n                availableRelatives: serializedData.pomoce.parents_candidates.data || [],\n                availableScreens: serializedData.pomoce.screens_available || [],\n            });\n            return\n        }\n        const pomoc = serializedData.pomoc;\n        const typOgolna = pomoc.typ === OGOLNA;\n        const rozdzialNadrzedny = !pomoc.rozdzialNadrzedny ? null : {value: pomoc.rozdzialNadrzedny.id, label: pomoc.rozdzialNadrzedny.naglowek};\n        this.setState(\n            {\n                initializingOn: false,\n                ...Object.assign({}, pomoc, {\n                    ekran: typOgolna ? EMPTY_VALUE : (\n                        pomoc.ekran ? {value: pomoc.ekran, label: EKRANY_DICT[pomoc.ekran].label} : EMPTY_VALUE),\n                    tresc: !Object.keys(pomoc.tresc).length ? '' : pomoc.tresc,\n                    rozdzialNadrzedny,\n                    powiazane: pomoc.powiazane.map(p => ({value: p.id, label: p.naglowek})),\n                }),\n                isRoot: pomoc.root || false,\n                hasChildren: pomoc.has_children || false,\n                originalTypOgolna: typOgolna,\n                originalRozdzialNadrzedny: rozdzialNadrzedny === null ? null : rozdzialNadrzedny.value,\n                typOgolna,\n                availableParents: serializedData.slowniki.parents_candidates.data || [],\n                availableRelatives: serializedData.slowniki.relatives_candidates.data || [],\n                availableScreens: serializedData.slowniki.screens_available || [],\n            },\n            () => {\n                // update url if slugs are not equal\n                const urlParams = this.props.match.params;\n                if (pomoc.slug !== urlParams.slug) {\n                    this.props.history.push(`/zarzadzanie-trescia/pomoc/${urlParams.id}-${pomoc.slug}/edytuj`);\n                }\n            }\n        );\n    }\n\n    handleSaveTypOgolna(ev) {\n        this.setState({\n            typOgolna: ev.currentTarget.value === 'true',\n            ekran: EMPTY_VALUE,\n            rozdzialNadrzedny: EMPTY_VALUE,\n            powiazane: [],\n        });\n    }\n\n    handleChangeAttribute(name, value) {\n        this.setState(prevState => ({\n            [name]: value,\n            errors: Object.assign({}, prevState.errors, {[name]: ''}),\n        }));\n    }\n\n    handleClearAttributeError(name) {\n        this.setState(prevState => ({\n            errors: Object.assign({}, prevState.errors, {[name]: ''}),\n        }));\n    }\n\n    handleUploadFile(file) {\n        return new Promise((resolve, reject) => {\n            const formData = new FormData();\n            formData.append('file', file);\n\n            this.xhrSaveFile = new XMLHttpRequest();\n            this.xhrSaveFile.open('POST', '/api/files?context=help');\n\n            const authTokenCookieValue = getAuthTokenCookieValue();\n            if (authTokenCookieValue) {\n                this.xhrSaveFile.setRequestHeader(\n                    'X-Auth-Token', authTokenCookieValue);\n            }\n\n            this.xhrSaveFile.onload = () => {\n                refreshTimerAfterRequest(\n                    authTokenCookieValue, this.xhrSaveFile.status);\n                let success = true;\n                let error;\n                let jsonData = {};\n                try {\n                    jsonData = JSON.parse(this.xhrSaveFile.responseText);\n                } catch(error) {\n                    success = false;\n                }\n\n                if (success) {\n                    if (jsonData.status === 'OK') {\n                        resolve({data: {link: jsonData.data.file.uri}});\n                        return\n                    } else if (jsonData.errors) {\n                        error = translateErrorMessage(jsonData.errors.file);\n                    } else {\n                        error = translateErrorMessage(jsonData.message);\n                    }\n                } else if (this.xhrSaveFile.status === 413) {\n                    error = 'Wybrany plik jest zbyt duży. Maksymalny rozmiar pliku to 25 MB.';\n                } else {\n                    error = `Wystąpił nieoczekiwany błąd o kodzie ${this.xhrSaveFile.status}. Nie udało się dodać pliku.`;\n                }\n                this.setState({uploadImageError: error}, () => reject(error));\n                this.xhrSaveFile = null;\n            };\n\n            this.xhrSaveFile.onerror = () => {\n                this.xhrSaveFile = null;\n                const error = 'Wystąpił nieoczekiwany błąd. Nie udało się dodać pliku.';\n                this.setState({uploadImageError: error}, () => reject(error));\n            };\n\n            this.xhrSaveFile.send(formData);\n        })\n    }\n\n    handleLoadEmbed(url) {\n        const embeddedUrl = extractYoutubeSrc(url);\n        if (!embeddedUrl) {\n            this.setState({loadEmbedError: 'Podano niepoprawny url wideo.'});\n            return\n        }\n        return embeddedUrl\n    }\n\n    handleSave() {\n        this.setState(\n            {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n            () => {\n                const [isValid, errors] = this.validate();\n                if (isValid) {\n                    const { id, isNew } = this.state;\n                    for (let block of this.state.tresc.blocks) {\n\t\t\t\t\t\tif(block.type === 'unstyled' && block.entityRanges.length){\n\t\t\t\t\t\t\tfor (let entityRange of block.entityRanges){\n\t\t\t\t\t\t\t\tdelete this.state.tresc.entityMap[entityRange.key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tblock.entityRanges.length = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n                    // save pomoc on server\n                    this.xhrFetch = fetchApi(\n                        isNew\n                            ? API_URLS.helpAdmin.path\n                            : API_URLS.helpAdminDetails.getUrl(id),\n                        isNew ? 'POST' : 'PUT',\n                        {},\n                        getSerializedObject(\n                            {\n                                id: id,\n                                typ: this.state.typOgolna ? OGOLNA : EKRANOWA,\n                                rozdzialNadrzedny: this.state.rozdzialNadrzedny ? this.state.rozdzialNadrzedny.value : null,\n                                ekran: this.state.ekran.value,\n                                naglowek: this.state.naglowek,\n                                tresc: this.state.tresc,\n                                powiazane: this.state.powiazane.map(p => p.value),\n                                root: this.state.isRoot,\n                            },\n                            {toServer: true, nonRecursiveKeys: ['tresc', ]}\n                        ),\n                        this.handleFetchSaveSuccess,\n                        this.handleFetchSaveError,\n                        this.handleFetchSaveIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n                }\n            }\n        );\n    }\n\n    handleFetchSaveSuccess(data) {\n        this.xhrFetch = null;\n        this.setState(\n            prevState => ({\n                isNew: false,\n                savingOn: false,\n                saveBtnText: 'Zapisano',\n                id: getSerializedObject(data).pomoc.id,\n                originalRozdzialNadrzedny: prevState.rozdzialNadrzedny === null ? null : prevState.rozdzialNadrzedny.value,\n            }),\n            () => {\n                this.isNew = false;\n                this.saveMsgTimeout = setTimeout(() => {\n                    this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n                }, 5000)\n            }\n        );\n    }\n\n    handleFetchSaveError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            savingOn: false,\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            fetchSaveError: `Nie udało się zapisać pomocy. ${data.message}`,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        if (status === 404) {\n            this.setState({savingOn: false, pageNotFound: true});\n        } else {\n            let message = '';\n            if (status === 403) {\n                message = `Nie masz uprawnień do ${this.state.isNew\n                    ? 'dodawania' : 'edycji'} pomocy.`;\n                // update permission value in context\n                this.removePermission();\n            }\n            this.setState({\n                savingOn: false,\n                saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n                fetchSaveError: message || `Podczas zapisu pomocy wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n            });\n        }\n    }\n\n    handlePreview() {\n        if (this.state.ekran.value === 0) { return }\n        const [isValid, errors] = this.validate();\n        if (isValid) {\n            this.setState({previewOn: true});\n        } else {\n            this.setState({errors});\n        }\n    }\n\n    // helpers\n\n    preState(props) {\n        this.trescMaxLength = 5000;\n    }\n\n    getAdditionalState(props) {\n        return {\n            isNew: !props.editing,\n            isRoot: false,\n            hasChildren: false,\n            previewOn: false,\n            originalTypOgolna: null,\n            originalRozdzialNadrzedny: 0,\n            id: null,\n            typOgolna: null,\n            rozdzialNadrzedny: EMPTY_VALUE,\n            ekran: EMPTY_VALUE,\n            naglowek: '',\n            tresc: '',\n            powiazane: [],\n            savingOn: false,\n            errors: {\n                ekran: '',\n                naglowek: '',\n            },\n            uploadImageError: '',\n            loadEmbedError: '',\n            fetchSaveError: '',\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            availableParents: [],\n            availableRelatives: [],\n            availableScreens: [],\n        };\n    }\n\n    postState(props) {\n        this.xhrSaveFile = null;\n    }\n\n    setAdditionalHandlers() {\n        this.handleSaveTypOgolna = this.handleSaveTypOgolna.bind(this);\n        this.handleUploadFile = this.handleUploadFile.bind(this);\n        this.handleLoadEmbed = this.handleLoadEmbed.bind(this);\n        this.handleSave = this.handleSave.bind(this);\n        this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n        this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n        this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n        this.handlePreview = this.handlePreview.bind(this);\n    }\n\n    getFetchUrl() {\n        if (this.state.isNew) {\n            return API_URLS.helpAdminDictionaries.path\n        }\n        return API_URLS.helpAdminDetails.getUrl(this.props.match.params.id)\n    }\n\n    getFetchData() {\n        if (this.state.isNew) {\n            return {}\n        }\n        return {dictionary: 'auto_determining'}\n    }\n\n    getFetchError(message) {\n        if (this.state.isNew) {\n            return `Nie udało się pobrać danych do formularza pomocy. ${message}`\n        }\n        return `Nie udało się pobrać pomocy. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        if (this.state.isNew) {\n            return `Podczas pobierania danych do formularza pomocy wystąpił nieoczekiwany błąd o kodzie ${status}`\n        }\n        return `Podczas pobierania pomocy wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.removePermission();\n    }\n\n    removePermission() {\n        this.context.removePermission('help');\n    }\n\n    validate() {\n        let isValid = true;\n        const {\n            isRoot,\n            naglowek,\n            rozdzialNadrzedny,\n            tresc,\n            typOgolna,\n        } = this.state;\n        const requiredMsg = 'To pole jest wymagane.';\n        let errors = {};\n\n        // validateTyp\n        if (![true, false].includes(typOgolna)) {\n            errors['typOgolna'] = requiredMsg;\n            isValid = false;\n        }\n\n        // validate rozdzialNadrzedny\n        if (!isRoot && typOgolna === true && rozdzialNadrzedny.value === 0) {\n            errors['rozdzialNadrzedny'] = requiredMsg;\n            isValid = false;\n        }\n\n        // validate naglowek\n        if (!naglowek.length) {\n            errors['naglowek'] = requiredMsg;\n            isValid = false;\n        }\n\n        // validate tresc\n        if (!validateWysiwygEditor(tresc)) {\n            errors['tresc'] = requiredMsg;\n            isValid = false;\n        } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n            errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n            isValid = false;\n        }\n\n        return [isValid, errors]\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps>\n                <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/pomoc'>Pomoc</Link></li>\n                <li className=\"breadcrumps__current\">{this.state.isNew ? 'Dodaj' : 'Edytuj'} pomoc</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        const {\n            ekran,\n            isNew,\n            loadEmbedError,\n            naglowek,\n            previewOn,\n            savingOn,\n            tresc,\n            typOgolna,\n            uploadImageError,\n        } = this.state;\n        const typeChosen = [true, false].includes(typOgolna);\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>{this.state.isNew ? 'Dodaj' : 'Edytuj'} pomoc</Text>\n                <Container className=\"container-with-wysiwyg\">\n                    <GridCustom fullwidth>\n                        <fieldset>\n                            <Text tag=\"legend\" className=\"label\">Typ pomocy</Text>\n                            {!isNew && <Text info>Podczas edycji pomocy nie jest możliwa zmiana jej typu.</Text>}\n                            <Radio\n                                checked={typOgolna === true}\n                                disabled={!isNew || savingOn}\n                                name=\"typRadioGroup\"\n                                value={true}\n                                onChange={this.handleSaveTypOgolna}\n                                label=\"Ogólna\"\n                            />\n                            <Radio\n                                checked={typOgolna === false}\n                                disabled={!isNew || savingOn}\n                                name=\"typRadioGroup\"\n                                value={false}\n                                onChange={this.handleSaveTypOgolna}\n                                label=\"Na ekranie aplikacji\"\n                            />\n                        </fieldset>\n                    </GridCustom>\n                    {typOgolna === true && this.renderTypOgolnaForm()}\n                    {typOgolna === false && this.renderTypNaEkranieForm()}\n                    {typeChosen && this.renderCommonFields()}\n                    {typOgolna === true && this.renderPowiazaneForm()}\n                    {typeChosen && this.renderButtons(typOgolna)}\n                </Container>\n                {uploadImageError.length > 0 && this.renderUploadImageErrorDialog()}\n                {loadEmbedError.length > 0 && this.renderLoadEmbedErrorDialog()}\n                {previewOn && (\n                    <TrescPreview\n                        content={{naglowek, tresc}}\n                        screen={EKRANY_DICT[ekran.value].id}\n                        closePreview={() => this.setState({previewOn: false})}\n                    />\n                )}\n            </>\n        )\n    }\n\n    renderTypOgolnaForm() {\n        const {\n            errors,\n            hasChildren,\n            isRoot,\n            originalRozdzialNadrzedny,\n            originalTypOgolna,\n            rozdzialNadrzedny,\n            savingOn,\n            typOgolna\n        } = this.state;\n        const isRozdzialNadrzednyInvalid = (errors.rozdzialNadrzedny || '').length > 0;\n        return (\n            <FieldWithLabel label=\"Rozdział nadrzędny\">\n                {isRoot && (\n                    <Text info>To pierwsza pomoc dodana do serwisu, więc nie da się dla niej wybrać rozdziału nadrzędnego.</Text>\n                )}\n                {!isRoot && typOgolna && originalTypOgolna && rozdzialNadrzedny.value !== originalRozdzialNadrzedny && hasChildren && (\n                    <Text info>Uwaga! Dla edytowanej pomocy istnieją pomoce podrzędne, zmiana rozdziału nadrzędnego spowoduje przepięcie pod wskazany rozdział całej gałęzi.</Text>\n                )}\n                <Select\n                    aria-describedby={isRozdzialNadrzednyInvalid ? 'rozdzialNadrzedny_error' : null}\n                    className={isRozdzialNadrzednyInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n                    isDisabled={isRoot || savingOn}\n                    options={[EMPTY_VALUE, ...this.state.availableParents.map(p => ({value: p.id, label: p.naglowek}))]}\n                    placeholder='Wybierz...'\n                    value={rozdzialNadrzedny}\n                    onChange={(selectedOption) => this.handleChangeAttribute('rozdzialNadrzedny', selectedOption)}\n                    styles={customSelectStyles}\n                />\n                {isRozdzialNadrzednyInvalid && <Text error id=\"rozdzialNadrzedny_error\">{errors.rozdzialNadrzedny}</Text>}\n            </FieldWithLabel>\n        )\n    }\n\n    renderTypNaEkranieForm() {\n        const {\n            availableScreens,\n            ekran,\n            errors,\n            savingOn\n        } = this.state;\n        const isEkranInvalid = (errors.ekran || '').length > 0;\n        return (\n            <FieldWithLabel label=\"Ekran\">\n                {!availableScreens.length && <Text info>Wszystkie ekrany są aktualnie wykorzystane w innych pomocach. Możesz odpiąć ekran od istniejącej pomocy, żeby ustawić go w nowej pomocy.</Text>}\n                <Select\n                    aria-describedby={isEkranInvalid ? 'ekran_error' : null}\n                    className={isEkranInvalid ? 'select-custom select-custom--invalid' : 'select-custom'}\n                    isDisabled={savingOn}\n                    options={[EMPTY_VALUE, ].concat(...availableScreens.map(s => {\n                        return {value: s, label: EKRANY_DICT[s].label}\n                    }))}\n                    screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                    value={ekran}\n                    onChange={(selectedOption) => this.handleChangeAttribute('ekran', selectedOption)}\n                    styles={customSelectStyles}\n                />\n                {isEkranInvalid && <Text error id=\"ekran_error\">{errors.ekran}</Text>}\n            </FieldWithLabel>\n        )\n    }\n\n    renderCommonFields() {\n        const {\n            errors,\n            savingOn,\n            naglowek,\n            tresc,\n        } = this.state;\n        const isNaglowekInvalid = (errors.naglowek || '').length > 0;\n        const isTrescInvalid = (errors.tresc || '').length > 0;\n        return (\n            <>\n                <FieldWithLabel label=\"Nagłówek\">\n                    <TextFieldCustom\n                        aria-describedby={isNaglowekInvalid ? 'naglowek_error' : null}\n                        characterCount\n                        clearFieldContext=\"nagłówek\"\n                        disabled={savingOn}\n                        invalid={isNaglowekInvalid}\n                        fullwidth\n                        maxLength={300}\n                        value={naglowek}\n                        onClear={(ev) => this.handleChangeAttribute('naglowek', '')}\n                        onChange={(ev) => this.handleChangeAttribute('naglowek', ev.target.value)}\n                        onFocus={(ev) => this.handleClearAttributeError('naglowek')} />\n                    {isNaglowekInvalid && <Text error id=\"naglowek_error\">{errors.naglowek}</Text>}\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Treść\" className=\"wysiwyg-container\">\n                    <WysiwygEditor\n                        invalid={isTrescInvalid}\n                        initialContentState={tresc}\n                        maxLength={this.trescMaxLength}\n                        toolbar={{\n                            options: ['inline', 'list', 'blockType', 'link', 'image', 'embedded'],\n                            inline: {\n                                inDropdown: false,\n                                options: ['bold', 'italic'],\n                            },\n                            list: {\n                                inDropdown: false,\n                                options: ['unordered', 'ordered'],\n                            },\n                            blockType: {\n                                inDropdown: false,\n                                options: ['Blockquote', ],\n                            },\n                            link: { inDropdown: false },\n                            image: {\n                                urlEnabled: false,\n                                uploadEnabled: true,\n                                alignmentEnabled: false,\n                                uploadCallback: this.handleUploadFile,\n                                previewImage: true,\n                                inputAccept: 'image/gif,image/jpeg,image/jpg,image/png,image/svg',\n                                alt: {present: true, mandatory: true},\n                                defaultSize: {\n                                    height: 'auto',\n                                    width: 500,\n                                },\n                            },\n                            embedded: {\n                                defaultSize: {\n                                    height: 300,\n                                    width: 500,\n                                },\n                                embedCallback: this.handleLoadEmbed\n                            },\n                        }}\n                        localization={{ locale: 'pl' }}\n                        onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n                    />\n                    {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n                </FieldWithLabel>\n            </>\n        )\n    }\n\n    renderPowiazaneForm() {\n        const optionsForPowiazane = this.state.availableRelatives.map(r => ({value: r.id, label: r.naglowek}));\n        const isRoot = this.state.isRoot;\n        return (\n            <GridCustom fullwidth>\n                <FieldWithLabel label=\"Powiązane\">\n                    {(isRoot && <Text info>To pierwsza pomoc dodana do serwisu, więc nie da się dla niej wybrać powiązanych.</Text>) || (!optionsForPowiazane.length && <Text info>Nie ma jeszcze innych pomocy do ustawienia jako powiązane.</Text>)}\n                    <Select\n                        className={'select-custom'}\n                        closeMenuOnSelect={false}\n                        defaultValue={this.state.powiazane}\n                        isClearable={false}\n                        isDisabled={this.state.isRoot || !optionsForPowiazane.length || this.state.savingOn}\n                        isMulti\n                        isSearchable\n                        options={optionsForPowiazane}\n                        placeholder='Wybierz...'\n                        screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                        onChange={selectedOptions => this.handleChangeAttribute(\n                            'powiazane', selectedOptions === null ? [] : selectedOptions\n                        )}\n                        styles={customSelectStyles}\n                    />\n                </FieldWithLabel>\n            </GridCustom>\n        )\n    }\n\n    renderUploadImageErrorDialog() {\n        return this.renderErrorDialog('uploadImageError')\n    }\n\n    renderLoadEmbedErrorDialog() {\n        return this.renderErrorDialog('loadEmbedError')\n    }\n\n    renderErrorDialog(errorName) {\n        // TODO: after close wysiwyg toolbar component hides and it's impossible to show error in the component.\n        // https://github.com/jpuri/react-draft-wysiwyg/blob/master/src/controls/Image/Component/index.js#L138\n        return (\n            <DialogCustom\n                dialogTitleError={this.state[errorName]}\n                style={{zIndex: 100}}\n                onClose={() => this.setState({[errorName]: ''})}\n            >\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled onClick={() => this.setState({ [errorName]: '' })} primary>OK</ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n\n    renderButtons(typOgolna) {\n        const {\n            ekran,\n            fetchSaveError,\n            saveBtnText,\n            savingOn\n        } = this.state;\n        return (\n            <>\n                <GridCustom fullwidth={typOgolna === false} flexEnd={typOgolna === true}>\n                    {typOgolna === false && <ButtonStyled disabled={ekran.value === 0 || savingOn} primary onClick={this.handlePreview}>Podgląd na ekranie</ButtonStyled>}\n                    <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n                </GridCustom>\n                {fetchSaveError.length > 0 && <Text error>{fetchSaveError}</Text>}\n            </>\n        )\n    }\n}\n\nFormPomoc.contextType = UserContext;\n\nexport { FormPomoc };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { validateWysiwygEditor } from '../../../validators';\nimport {\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    WysiwygEditor,\n} from '../../common';\nimport { BaseComponent } from '../common';\n\n\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz regulamin';\n\n\nclass FormRegulamin extends BaseComponent {\n    // basic functions\n\n    componentDidMount() {\n        if (!this.props.editing) {\n            this.setState({initializingOn: false});\n        } else {\n            // get regulamin from server\n            super.componentDidMount()\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const regulamin = getSerializedObject(\n            data,\n            {\n                nonRecursiveKeys: ['tresc'],\n                dateAttributes: ['dataOpublikowania', ],\n                dateTimeAttributes: ['dataOpublikowania', ],\n            },\n        ).regulaminy;\n        if (!regulamin) {\n            this.setState({initializingOn: false, pageNotFound: true});\n        } else {\n            this.setState({\n                initializingOn: false,\n                tresc: regulamin.tresc,\n                dataOpublikowania: this.version === 'aktualna' ? '' : regulamin.dataOpublikowania,\n            });\n        }\n    }\n\n    handleChangeAttribute(name, value) {\n        this.setState(prevState => ({\n            [name]: value,\n            errors: Object.assign({}, prevState.errors, {[name]: ''}),\n        }));\n    }\n\n    handleSave() {\n        this.setState(\n            {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n            () => {\n                const [isValid, errors] = this.validate();\n                if (isValid) {\n                    // save regulamin on server\n                    this.xhrFetch = fetchApi(\n                        API_URLS.regulationsAdmin.path,\n                        this.firstSaving ? 'POST' : 'PUT',\n                        {},\n                        getSerializedObject(\n                            {tresc: this.state.tresc},\n                            {toServer: true, nonRecursiveKeys: ['tresc', ]}\n                        ),\n                        this.handleFetchSaveSuccess,\n                        this.handleFetchSaveError,\n                        this.handleFetchSaveIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n                }\n            }\n        );\n    }\n\n    handleFetchSaveSuccess(data) {\n        this.xhrFetchSave = null;\n        this.setState(\n            {\n                savingOn: false,\n                saveBtnText: 'Zapisano',\n                dataOpublikowania: getSerializedObject(\n                    data,\n                    {\n                        dateAttributes: ['dataOpublikowania', ],\n                        dateTimeAttributes: ['dataOpublikowania', ],\n                    },\n                ).regulaminy.dataOpublikowania},\n            () => {\n                this.firstSaving = false;\n                this.saveMsgTimeout = setTimeout(() => {\n                    this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n                }, 5000)\n            }\n        );\n    }\n\n    handleFetchSaveError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            savingOn: false,\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            fetchSaveError: `Nie udało się zapisać regulaminu. ${data.message}`,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        if (status === 404) {\n            this.setState({savingOn: false, pageNotFound: true});\n        } else {\n            let message = '';\n            if (status === 403) {\n                message = `Nie masz uprawnień do ${this.firstSaving\n                    ? 'dodawania' : 'edycji'} regulaminu.`;\n                // update permission value in context\n                this.removePermission();\n            }\n            this.setState({\n                savingOn: false,\n                saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n                fetchSaveError: message || `Podczas zapisu regulaminu wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n            });\n        }\n    }\n\n    // helpers\n\n    preState(props) {\n        this.trescMaxLength = 50000;\n        this.firstSaving = !props.editing;\n\n        this.version = null;\n        if (props.editing) {\n            const params = new URLSearchParams(props.location.search);\n            this.version = params.get('wersja') || this.version;\n        }\n    }\n\n    getAdditionalState(props) {\n        return {\n            savingOn: false,\n            tresc: '',\n            dataOpublikowania: '',\n            fetchSaveError: '',\n            errors: {\n                tresc: '',\n            },\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n        }\n    }\n\n    setAdditionalHandlers() {\n        this.handleSave = this.handleSave.bind(this);\n        this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n        this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n        this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n    }\n\n    getFetchUrl() {\n        return API_URLS.regulationsAdmin.path\n    }\n\n    getFetchData() {\n        let query = {};\n        if (!(this.version === 'aktualna')) {\n            query['version'] = 'for_publication';\n        }\n        return query\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać wersji regulaminu do edycji. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania wersji regulaminu do edycji wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.removePermission();\n    }\n\n    removePermission() {\n        this.context.removePermission('generalContentCookiesRegulation');\n    }\n\n    validate() {\n        let isValid = true;\n        let errors = {};\n\n        const tresc = this.state.tresc;\n        // validate tresc\n        if (!validateWysiwygEditor(tresc)) {\n            errors['tresc'] = 'To pole jest wymagane.';\n            isValid = false;\n        } else if (countWysiwygChars(tresc) > this.trescMaxLength) {\n            errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n            isValid = false;\n        }\n\n        return [isValid, errors]\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps>\n                <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/regulaminy'>Regulamin</Link></li>\n                <li className=\"breadcrumps__current\">{this.props.editing ? 'Edytuj' : 'Dodaj'} regulamin</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        const {\n            dataOpublikowania,\n            errors,\n            fetchSaveError,\n            saveBtnText,\n            savingOn,\n            tresc,\n        } = this.state;\n        const isTrescInvalid = (errors.tresc || '').length > 0;\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>{this.props.editing ? 'Edytuj' : 'Dodaj'} regulamin</Text>\n                <Container>\n                    <GridCustom fullwidth>\n                        <FieldWithLabel label=\"Treść\" className=\"wysiwyg-wrapper\">\n                            <WysiwygEditor\n                                disabled={savingOn}\n                                invalid={isTrescInvalid}\n                                initialContentState={tresc}\n                                maxLength={this.trescMaxLength}\n                                toolbar={{\n                                    options: ['list', 'link'],\n                                    list: {\n                                        inDropdown: false ,\n                                        options: ['unordered', 'ordered'],\n                                    },\n                                    link: { inDropdown: false },\n                                }}\n                                localization={{ locale: 'pl' }}\n                                onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n                            />\n                            {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom flexEnd>\n                        {dataOpublikowania.length > 0 && (new Date(dataOpublikowania).getTime() > new Date().getTime()) && <Text info>Regulamin zostanie opublikowany {dataOpublikowania}.</Text>}\n                    </GridCustom>\n                    <GridCustom flexEnd>\n                        <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n                    </GridCustom>\n                    {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n                </Container>\n            </>\n        )\n    }\n}\n\nFormRegulamin.contextType = UserContext;\n\nexport { FormRegulamin };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { countWysiwygChars } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    GridCustom,\n    Text,\n    WysiwygEditor,\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { TrescPreview } from './TrescPreview';\n\n\nconst SAVE_BUTTON_DEFAULT_LABEL = 'Zapisz treść';\n\n\nclass FormTrescOgolna extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const trescOgolna = getSerializedObject(\n            data, {nonRecursiveKeys: ['tresc', ]}).trescOgolna;\n        this.setState({\n            initializingOn: false,\n            id: parseInt(this.props.match.params.id),\n            naglowek: trescOgolna.naglowek,\n            tresc: Object.keys(trescOgolna.tresc).length > 0 ? trescOgolna.tresc : '',\n        });\n    }\n\n    handleChangeAttribute(name, value) {\n        this.setState(prevState => ({\n            [name]: value,\n            errors: Object.assign({}, prevState.errors, {[name]: ''}),\n        }));\n    }\n\n    handleSave() {\n        this.setState(\n            {savingOn: true, fetchSaveError: '', saveBtnText: 'Trwa zapisywanie...'},\n            () => {\n                const [isValid, errors] = this.validate();\n                if (isValid) {\n                    const id_ = this.props.match.params.id;\n                    // save trescOgolna on server\n                    this.xhrFetch = fetchApi(\n                        API_URLS.generalContentAdminDetails.getUrl(id_),\n                        'PUT',\n                        {},\n                        getSerializedObject(\n                            {id: id_, tresc: this.state.tresc},\n                            {toServer: true, nonRecursiveKeys: ['tresc', ]},\n                        ),\n                        this.handleFetchSaveSuccess,\n                        this.handleFetchSaveError,\n                        this.handleFetchSaveIncorrectStatus,\n                    );\n                } else {\n                    this.setState({savingOn: false, errors, saveBtnText: SAVE_BUTTON_DEFAULT_LABEL});\n                }\n            }\n        );\n    }\n\n    handleFetchSaveSuccess(data) {\n        this.xhrFetchSave = null;\n        this.setState(\n            {\n                savingOn: false,\n                saveBtnText: 'Zapisano',\n            },\n            () => {\n                this.saveMsgTimeout = setTimeout(() => {\n                    this.setState({saveBtnText: SAVE_BUTTON_DEFAULT_LABEL})\n                }, 5000)\n            }\n        );\n    }\n\n    handleFetchSaveError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            savingOn: false,\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            fetchSaveError: `Nie udało się zapisać treści ogólnej. ${data.message}`,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        if (status === 404) {\n            this.setState({savingOn: false, pageNotFound: true});\n        } else {\n            let message = '';\n            if (status === 403) {\n                message = 'Nie masz uprawnień do edycji treści ogólnych.';\n                // update permission value in context\n                this.removePermission();\n            }\n            this.setState({\n                savingOn: false,\n                saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n                fetchSaveError: message || `Podczas zapisu treści ogólnej wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n            });\n        }\n    }\n\n    // helpers\n\n    preState(props) {\n        this.trescMaxLength = 2000;\n    }\n\n    getAdditionalState(props) {\n        return {\n            previewOn: false,\n            savingOn: false,\n            id: '',\n            naglowek: '',\n            tresc: '',\n            errors: {\n                tresc: '',\n            },\n            saveBtnText: SAVE_BUTTON_DEFAULT_LABEL,\n            fetchSaveError: '',\n        }\n    }\n\n    setAdditionalHandlers() {\n        this.handleSave = this.handleSave.bind(this);\n        this.handleSave = this.handleSave.bind(this);\n        this.handleFetchSaveSuccess = this.handleFetchSaveSuccess.bind(this);\n        this.handleFetchSaveError = this.handleFetchSaveError.bind(this);\n        this.handleFetchSaveIncorrectStatus = this.handleFetchSaveIncorrectStatus.bind(this);\n    }\n\n    getFetchUrl() {\n        return API_URLS.generalContentAdminDetails.getUrl(\n            this.props.match.params.id)\n    }\n\n    validate() {\n        let isValid = true;\n        let errors = {};\n\n        // validate tresc\n        if (countWysiwygChars(this.state.tresc) > this.trescMaxLength) {\n            errors['tresc'] = `To pole może mieć maksymalnie ${this.trescMaxLength} znaków.`;\n            isValid = false;\n        }\n\n        return [isValid, errors]\n    }\n\n    callback403 = () => {\n        this.removePermission();\n    }\n\n    removePermission() {\n        this.context.removePermission('generalContentCookiesRegulation');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <>\n                <Breadcrumps>\n                    <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/tresci-ogolne'>Treści ogólne</Link></li>\n                    <li className=\"breadcrumps__current\">Edytuj {this.state.naglowek}</li>\n                </Breadcrumps>\n                <Text tag=\"h2\" mainHeader>Edycja: {this.state.naglowek}</Text>\n            </>\n        )\n    }\n\n    renderContent() {\n        const {\n            errors,\n            fetchSaveError,\n            id,\n            naglowek,\n            previewOn,\n            saveBtnText,\n            savingOn,\n            tresc,\n        } = this.state;\n        const isTrescInvalid = (errors.tresc || '').length > 0;\n        return (\n            <>\n                <Container className=\"wysiwyg-wrapper\">\n                    <WysiwygEditor\n                        disabled={savingOn}\n                        invalid={isTrescInvalid}\n                        initialContentState={tresc}\n                        localization={{ locale: 'pl' }}\n                        maxLength={this.trescMaxLength}\n                        wysiwygClassName=\"wysiwyg__wrapper-with-toolbar\"\n                        toolbar={{\n                            options: ['inline', 'list', 'blockType'],\n                            inline: {\n                                inDropdown: false,\n                                options: ['bold', 'italic'],\n                            },\n                            list: {\n                                inDropdown: false,\n                                options: ['unordered', 'ordered'],\n                            },\n                            blockType: {\n                                inDropdown: false,\n                                options: ['Blockquote', ],\n                            },\n                        }}\n                        onContentStateChange={(contentState) => this.handleChangeAttribute('tresc', contentState)}\n                    />\n                    {isTrescInvalid && <Text error>{errors.tresc}</Text>}\n                    <GridCustom fullwidth>\n                        <ButtonStyled disabled={savingOn} primary onClick={() => this.setState({previewOn: true})}>Podgląd na ekranie</ButtonStyled>\n                        <ButtonStyled disabled={savingOn} save onClick={this.handleSave}>{saveBtnText}</ButtonStyled>\n                    </GridCustom>\n                    {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n                </Container>\n                {previewOn && (\n                    <TrescPreview\n                        content={{id, naglowek, tresc}}\n                        screen='homePage'\n                        closePreview={() => this.setState({previewOn: false})}\n                    />\n                )}\n            </>\n        )\n    }\n}\n\nFormTrescOgolna.contextType = UserContext;\n\nexport { FormTrescOgolna };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { serializeAuditData } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    AuditData,\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\nimport { colors } from '../../vars/vars';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass Komunikat extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const komunikat = getSerializedObject(\n            data,\n            {\n                nonRecursiveKeys: ['tresc'],\n                dateAttributes: ['dataOpublikowania', 'dataWaznosci'],\n                dateTimeAttributes: ['dataOpublikowania', 'dataWaznosci'],\n            }\n        ).komunikat;\n        if (!komunikat) {\n            this.setState({initializingOn: false, pageNotFound: true});\n        } else {\n            this.setState(\n                {\n                    initializingOn: false,\n                    komunikat,\n                    auditData: serializeAuditData(komunikat),\n                },\n                () => this.setUrlWithCorrectSlug(komunikat)\n            );\n        }\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {komunikat: {}, auditData: {}}\n    }\n\n    getFetchUrl() {\n        return API_URLS.statementsAdminDetails.getUrl(\n            this.props.match.params.id)\n    }\n\n    getFetchData() {\n        return {context: 'admin_panel'}\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać komunikatu. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania komunikatu wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    setUrlWithCorrectSlug(komunikat) {\n        // update url if slugs are not equal\n        const urlParams = this.props.match.params;\n        if (komunikat.slug !== urlParams.slug) {\n            this.props.history.push(`/zarzadzanie-trescia/komunikaty/${urlParams.id}-${komunikat.slug}`);\n        }\n    }\n\n    callback403 = () => {\n        this.context.removePermission('statements');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <>\n                <Breadcrumps>\n                    <li className=\"breadcrumps__link\"><Link\n                        to='/zarzadzanie-trescia/komunikaty'>Komunikaty</Link>\n                    </li>\n                    <li className=\"breadcrumps__current\">Szczegóły komunikatu\n                    </li>\n                </Breadcrumps>\n                <Text tag=\"h2\" mainHeader>Szczegóły\n                    komunikatu: {this.state.komunikat.naglowek}</Text>\n            </>\n        )\n    }\n\n    renderContent() {\n        const komunikat = this.state.komunikat;\n        return (\n            <>\n                <Container className=\"details-preview separate-container\">\n                    <GridCustom flexEnd>\n                        <ButtonStyled primary noMargin\n                                      onClick={() => this.props.history.push(`/zarzadzanie-trescia/komunikaty/${this.props.match.params.id}-${komunikat.slug}/edytuj`)}>Edytuj\n                            komunikat</ButtonStyled>\n                    </GridCustom>\n                    <GridCustom flexL fullwidth noWrap>\n                        <section\n                            className=\"details-preview__part details-preview__part--main\">\n                            <FieldWithLabel label=\"Nagłówek\">\n                                <Text>{komunikat.naglowek}</Text>\n                            </FieldWithLabel>\n                            <FieldWithLabel label=\"Treść\">\n                                <DraftToComponents content={komunikat.tresc}/>\n                            </FieldWithLabel>\n                            <FieldWithLabel label=\"Slug\">\n                                <Text>{komunikat.slug}</Text>\n                            </FieldWithLabel>\n                        </section>\n                        <aside\n                            className=\"details-preview__part details-preview__part--aside\">\n                            <GridCustom>\n                                <FieldWithLabel label=\"Aktywny\">\n                                    {komunikat.czyAktywny ? (\n                                        <Icon icon=\"check_circle\"\n                                              style={{color: colors.secondary}}\n                                              title=\"Tak\" aria-hidden=\"true\"/>\n                                    ) : (\n                                        <Icon icon=\"cancel\"\n                                              style={{color: colors.textHintOnLight}}\n                                              title=\"Nie\" aria-hidden=\"true\"/>\n                                    )}\n                                </FieldWithLabel>\n                                <FieldWithLabel label=\"Żółty pasek\">\n                                    {komunikat.czyZoltyPasek ? (\n                                        <Icon icon=\"check_circle\"\n                                              style={{color: colors.secondary}}\n                                              title=\"Tak\" aria-hidden=\"true\"/>\n                                    ) : (\n                                        <Icon icon=\"cancel\"\n                                              style={{color: colors.textHintOnLight}}\n                                              title=\"Nie\" aria-hidden=\"true\"/>\n                                    )}\n                                </FieldWithLabel>\n                            </GridCustom>\n                            <GridCustom>\n                                <FieldWithLabel label=\"Bezterminowy\">\n                                    {komunikat.dataWaznosci.length === 0 ? (\n                                        <Icon icon=\"check_circle\"\n                                              style={{color: colors.secondary}}\n                                              title=\"Tak\" aria-hidden=\"true\"/>\n                                    ) : (\n                                        <Icon icon=\"cancel\"\n                                              style={{color: colors.textHintOnLight}}\n                                              title=\"Nie\" aria-hidden=\"true\"/>\n                                    )}\n                                </FieldWithLabel>\n                                <FieldWithLabel label=\"Data ważności\">\n                                    <Text>{komunikat.dataWaznosci || '-'}</Text>\n                                </FieldWithLabel>\n                            </GridCustom>\n                            <FieldWithLabel label=\"Data opublikowania\">\n                                <Text>{komunikat.dataOpublikowania}</Text>\n                            </FieldWithLabel>\n                        </aside>\n                    </GridCustom>\n                </Container>\n                <AuditData {...this.state.auditData} />\n            </>\n        )\n    }\n}\n\nKomunikat.contextType = UserContext;\n\nexport { Komunikat };\n","import React from 'react';\nimport { Icon } from '@rmwc/icon';\nimport {\n    DataTable,\n    DataTableBody,\n    DataTableCell,\n    DataTableContent,\n    DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    Breadcrumps,\n    ButtonStyled,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\nimport { colors } from '../../vars/vars';\nimport { BaseComponent } from '../common';\n\n\nclass Komunikaty extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        this.setState({\n            initializingOn: false,\n            komunikaty: getSerializedObject(\n                data,\n                {\n                    nonRecursiveKeys: ['tresc', ],\n                    dateAttributes: ['dataOpublikowania', ],\n                    dateTimeAttributes: ['dataOpublikowania', ],\n                }\n            ).komunikaty,\n        });\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {komunikaty: []}\n    }\n\n    getFetchUrl() {\n        return API_URLS.statementsAdmin.path\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać komunikatów. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania komunikatów wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.context.removePermission('statements');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <>\n                <Breadcrumps>\n                    <li className=\"breadcrumps__current\">Komunikaty</li>\n                </Breadcrumps>\n                <GridCustom fullwidth centerVertical>\n                    <Text tag=\"h2\" mainHeader>Komunikaty</Text>\n                    <ButtonStyled add onClick={() => this.props.history.push('/zarzadzanie-trescia/komunikaty/nowy')}>Dodaj komunikat</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderContent() {\n        if (!this.state.komunikaty.length) {\n            return <Text error role=\"alert\">Nie dodano jeszcze żadnego komunikatu.</Text>\n        }\n        const sort = (k1, k2) => {\n            return k1.id > k2.id ? -1 : 1\n        };\n        return (\n            <DataTable className=\"table\">\n                <DataTableContent>\n                    <DataTableBody>\n                        {this.state.komunikaty.sort(sort).map(k => (\n                            <DataTableRow key={k.id}>\n                                <DataTableCell>\n                                    <Text>{k.naglowek}</Text>\n                                    <GridCustom>\n                                        <FieldWithLabel label=\"Aktywny\">\n                                            {k.czyAktywny ? (\n                                                <Icon aria-hidden=\"true\" icon=\"check_circle\" style={{ color: colors.secondary }} title=\"Tak\" />\n                                            ) : (\n                                                <Icon aria-hidden=\"true\" icon=\"cancel\" style={{ color: colors.textHintOnLight }} title=\"Nie\" />\n                                            )}\n                                        </FieldWithLabel>\n                                        <FieldWithLabel label=\"Żółty pasek\">\n                                            {k.czyZoltyPasek ? (\n                                                <Icon aria-hidden=\"true\" icon=\"check_circle\" style={{ color: colors.secondary }} title=\"Tak\" />\n                                            ) : (\n                                                <Icon aria-hidden=\"true\" icon=\"cancel\" style={{ color: colors.textHintOnLight }} title=\"Nie\" />\n                                            )}\n                                        </FieldWithLabel>\n                                        <FieldWithLabel label=\"Data opublikowania\">\n                                            {k.dataOpublikowania || '-'}\n                                        </FieldWithLabel>\n                                    </GridCustom>\n                                </DataTableCell>\n                                <DataTableCell>\n                                    <ButtonStyled lite onClick={() => this.props.history.push(`/zarzadzanie-trescia/komunikaty/${k.id}-${k.slug}/edytuj`)}>Edytuj</ButtonStyled>\n                                    <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/komunikaty/${k.id}-${k.slug}`)}>Szczegóły</ButtonStyled>\n                                </DataTableCell>\n                            </DataTableRow>\n                        ))}\n                    </DataTableBody>\n                </DataTableContent>\n            </DataTable>\n        )\n    }\n}\n\nKomunikaty.contextType = UserContext;\n\nexport { Komunikaty };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { isNotEmpty } from '../../../helpers';\nimport { Breadcrumps, Container, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { Komunikat } from './Komunikat';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass KomunikatFront extends Komunikat {\n\n    // helpers\n\n    getFetchUrl() {\n        return `/api/statements/${this.props.match.params.id}`\n    }\n\n    getFetchData() {\n        return {}\n    }\n\n    setUrlWithCorrectSlug(komunikat) {\n        // update url if slugs are not equal\n        const urlParams = this.props.match.params;\n        if (komunikat.slug !== urlParams.slug) {\n            this.props.history.push(`/komunikaty/${urlParams.id}-${komunikat.slug}`);\n        }\n    }\n\n    callback403 = () => {}\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps isFront>\n                <li className=\"breadcrumps__link\"><Link to='/komunikaty'>Komunikaty</Link></li>\n                <li className=\"breadcrumps__current\">Szczegóły komunikatu</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        document.title = \"Baza Konkurencyjności - komunikat\";\n        const komunikat = this.state.komunikat;\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>Komunikat \"{this.state.komunikat.naglowek}\"</Text>\n                <GridCustom fullwidth>\n                    <FieldWithLabel label=\"Data opublikowania\">\n                        <Text>{komunikat.dataOpublikowania}</Text>\n                    </FieldWithLabel>\n                    {isNotEmpty(komunikat.dataWaznosci) && (\n                        <FieldWithLabel label=\"Data ważności\">\n                            <Text>{komunikat.dataWaznosci}</Text>\n                        </FieldWithLabel>\n                    )}\n                </GridCustom>\n                <Container>\n                    <FieldWithLabel label=\"Treść\">\n                        <DraftToComponents content={komunikat.tresc} />\n                    </FieldWithLabel>\n                </Container>\n            </>\n        )\n    }\n}\n\n\nexport { KomunikatFront };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n    DataTableCell,\n    DataTableRow,\n} from '@rmwc/data-table';\n\nimport { dateToString } from '../../../helpers';\nimport { Breadcrumps, ButtonStyled, TableCustom, Text } from '../../common';\nimport { Komunikaty } from './Komunikaty';\n\n\nclass KomunikatyFront extends Komunikaty {\n\n    // helpers\n\n    getFetchUrl() {\n        return '/api/statements'\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <>\n                <Breadcrumps isFront>\n                    <li className=\"breadcrumps__current\">Komunikaty</li>\n                </Breadcrumps>\n                <Text tag=\"h2\" mainHeader>Lista komunikatów</Text>\n            </>\n        )\n    }\n\n    renderContent() {\n    document.title = \"Baza Konkurencyjności - komunikaty\";\n        if (!this.state.komunikaty.length) {\n            return <Text error role=\"alert\">Brak komunikatów.</Text>\n        }\n        const sort = (k1, k2) => {\n            return k1.dataOpublikowania > k2.dataOpublikowania ? -1 : 1\n        };\n        return (\n            <TableCustom tableHeaderList={['Data opublikowania', 'Treść komunikatu', <span className=\"sr-only\">Szczegóły</span>]}>\n                {this.state.komunikaty.filter(\n                    k => k.czyAktywny === true && (!k.dataWaznosci.length || k.dataWaznosci >= dateToString(new Date()))\n                ).sort(sort).map(k => (\n                    <DataTableRow key={k.id}>\n                        <DataTableCell>\n                            <Text>{k.dataOpublikowania}</Text>\n                        </DataTableCell>\n                        <DataTableCell>\n                            <Text>{k.naglowek}</Text>\n                        </DataTableCell>\n                        <DataTableCell>\n                            <ButtonStyled tag={Link} to={`/komunikaty/${k.id}-${k.slug}`} primary noMargin>\n                                Szczegóły<span className=\"sr-only\"> komunikatu</span>\n                            </ButtonStyled>\n                        </DataTableCell>\n                    </DataTableRow>\n                ))}\n            </TableCustom>\n            \n        )\n    }\n}\n\n\nexport { KomunikatyFront };\n","export default __webpack_public_path__ + \"static/media/Roboto-Bold.4f39c579.ttf\";","export default __webpack_public_path__ + \"static/media/Roboto-Italic.2a1b89d7.ttf\";","export default __webpack_public_path__ + \"static/media/Roboto-Regular-with-special.9bb8205f.ttf\";","import { Font, StyleSheet } from '@react-pdf/renderer';\n\nimport robotoBold from '../../static/fonts/Roboto-Bold.ttf';\nimport robotoItalic from '../../static/fonts/Roboto-Italic.ttf';\nimport robotoRegular from '../../static/fonts/Roboto-Regular-with-special.ttf';\n\nFont.register({ family: 'Roboto', fonts: [\n    { src: robotoRegular}, // font-style: normal, font-weight: normal\n    { src: robotoItalic, fontStyle: 'italic' },\n    { src: robotoBold, fontWeight: 700 },\n]});\n\nFont.registerHyphenationCallback(word => {\n    // Breaks the lines with long strings of the same character, without white spaces.\n    const wordPartSize = 40;\n    let parts = [];\n\n    if (word.length && word.length < wordPartSize) {\n        parts = [word];\n    } else {\n        for (let i = 0; i < word.length; i += wordPartSize) {\n            parts.push(word.slice(i, i + wordPartSize));\n        }\n    }\n\n    return parts;\n});\n\n\nconst pdfStyles = StyleSheet.create({\n    mainPdfContainerStyle: {\n        padding: 40,\n        fontSize: 11,\n        lineHeight: 1.6,\n        fontFamily: 'Roboto',\n    },\n    flexContainerStyle: {\n        display: 'flex',\n        flexDirection: 'row',\n        flexWrap: 'wrap'\n    },\n    gridSection: {\n        width: 300\n    },\n    borderedSectionStyle: {\n        paddingVertical: 0,\n        paddingHorizontal: 10,\n        marginVertical: 10,\n        marginLeft: 10,\n        borderLeftWidth: 1,\n        borderLeftColor: '#666A6D'\n    },\n    borderedDashedSectionStyle: {\n        padding: 10,\n        marginBottom: 20,\n        borderWidth: 1,\n        borderStyle: 'dashed',\n        borderColor: '#666A6D'\n    },\n    borderedSeparateSectionStyle: {\n        paddingBottom: 5,\n        marginBottom: 50,\n        borderBottomWidth: 1,\n        borderBottomColor: '#666A6D'\n    },\n    pzTitleSection: {\n        padding: 5,\n        marginBottom: 10,\n        borderWidth: 1,\n        borderLeftWidth: 5,\n        borderColor: '#666A6D'\n    },\n    textHeaderStyle: {\n        marginTop: 20,\n        marginBottom: 5,\n        fontSize: 16,\n        fontWeight: 700\n    },\n    textWithLabelStyle: {\n        minWidth: '45%',\n        marginBottom: 10,\n    },\n    labelStyle: {\n        marginTop: 5,\n        marginBottom: 3,\n        fontSize: 12,\n        fontWeight: 700,\n        color: '#666A6D'\n    },\n    labelHeaderStyle: {\n        fontSize: 16,\n        marginTop: 30,\n    },\n    dateTextStyle: {\n        fontWeight: 700\n    },\n    textInfoStyle: {\n        marginBottom: 5,\n        fontSize: 10,\n        fontStyle: 'italic',\n        color: '#666A6D'\n    },\n    errorStyle: {\n        color: '#ff0000'\n    },\n    titleStyle: {\n        fontSize: 18,\n    },\n    sectionTitleStyle: {\n        padding: 3,\n        paddingLeft: 15,\n        marginBottom: 10,\n        fontSize: 16,\n        fontWeight: 700,\n        borderColor: '#666A6D',\n        borderLeftWidth: 5,\n    },\n});\n\n\nexport { pdfStyles };\n","import React from 'react';\nimport { Document, Page, View } from '@react-pdf/renderer';\n\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\nimport { DraftToPdf } from './DraftToPdf';\n\n\nconst PdfWithDraftContent = (props) => {\n    return (\n        <Document>\n            <Page size=\"A4\" style={pdfStyles.mainPdfContainerStyle} wrap>\n                <PdfHeader title={props.title} />\n                {props.renderHeader && props.renderHeader()}\n                <View style={pdfStyles.borderedSeparateSectionStyle}>\n                    <DraftToPdf content={props.content}/>\n                </View>\n                {props.renderFooter && props.renderFooter()}\n            </Page>\n        </Document>\n    )\n}\n\n\nexport { PdfWithDraftContent };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Text as PdfText, StyleSheet } from '@react-pdf/renderer';\nimport { Icon } from '@rmwc/icon';\n\nimport { EKRANY_DICT, OGOLNA } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { generatePdfDocument, serializeAuditData } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    AuditData,\n    Breadcrumps,\n    ButtonCreatePdf,\n    ButtonStyled,\n    Container,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport { PdfWithDraftContent } from './PdfWithDraftContent';\n\n\nclass Pomoc extends BaseComponent {\n\n    // basic functions\n\n    componentDidMount() {\n        super.componentDidMount();\n\n        window.onpopstate = () => {\n            this.handleReload();\n        }\n    }\n\n    componentWillUnmount() {\n        window.onpopstate = () => {};\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const pomoc = getSerializedObject(\n            data,\n            {\n                nonRecursiveKeys: ['tresc', ],\n                dateAttributes: ['dataOpublikowania', ],\n                dateTimeAttributes: ['dataOpublikowania', ],\n            }\n        ).pomoc;\n        this.setState(\n            {\n                initializingOn: false,\n                pomoc: Object.assign(pomoc, {typOgolna: pomoc.typ === OGOLNA}),\n                auditData: serializeAuditData(pomoc),\n            },\n            () => this.setUrlWithCorrectSlug(pomoc)\n        );\n    }\n\n    handleReload() {\n        this.setState(\n            {initializingOn: true},\n            () => {this.fetchInitialData()}\n        );\n    }\n\n    handleChangePomoc(newId, newSlug) {\n        this.props.history.push(`/zarzadzanie-trescia/pomoc/${newId}-${newSlug}`);\n        this.handleReload();\n    }\n\n    handleCreatePdf = () => {\n        const pomoc = this.state.pomoc;\n        this.setState(\n            {pdfCreatingOn: true},\n            () => {\n                let pdfHeaderText;\n                let ekranLabel = '---';\n                if (pomoc.typOgolna) {\n                    pdfHeaderText = `Rozdział nadrzędny: ${!pomoc.rozdzialNadrzedny ? '---' : pomoc.rozdzialNadrzedny.naglowek}`;\n                } else {\n                    if (pomoc.ekran) {\n                        ekranLabel = EKRANY_DICT[pomoc.ekran].label || ekranLabel;\n                    }\n                    pdfHeaderText = `Ekran: ${ekranLabel}`;\n                }\n                generatePdfDocument(\n                    <PdfWithDraftContent\n                        content={pomoc.tresc}\n                        renderHeader={() => (\n                            <>\n                                <PdfText style={[styles.pdfHeaderStyle, styles.pdfHeaderSecondaryStyle]}>\n                                    {pdfHeaderText}\n                                </PdfText>\n                                <PdfText style={styles.pdfHeaderStyle}>Tytuł: {pomoc.naglowek}</PdfText>\n                            </>\n                        )}\n                    />,\n                    'pomoc.pdf',\n                    this.callbackPfdCreated\n                );\n            }\n        );\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            pomoc: {},\n            pdfCreatingOn: false,\n            auditData: {},\n        }\n    }\n\n    getFetchUrl() {\n        return API_URLS.helpAdminDetails.getUrl(this.props.match.params.id)\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać pomocy. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania pomocy wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    setUrlWithCorrectSlug(pomoc) {\n        // update url if slugs are not equal\n        const urlParams = this.props.match.params;\n        if (pomoc.slug !== urlParams.slug) {\n            this.props.history.push(`/zarzadzanie-trescia/pomoc/${urlParams.id}-${pomoc.slug}`);\n        }\n    }\n\n    callbackPfdCreated = () => {\n        this.setState({pdfCreatingOn: false});\n    }\n\n    callback403 = () => {\n        this.context.removePermission('help');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps>\n                <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/pomoc'>Pomoc</Link></li>\n                <li className=\"breadcrumps__current\">Szczegóły</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        const pomoc = this.state.pomoc;\n        const {\n            id,\n            naglowek,\n            rozdzialNadrzedny,\n            slug,\n            typOgolna\n        } = pomoc;\n\n        let ekranLabel = '---';\n        if (!pomoc.typOgolna && pomoc.ekran) {\n            ekranLabel = EKRANY_DICT[pomoc.ekran].label || ekranLabel;\n        }\n\n        return (\n            <>\n                <GridCustom flexEnd>\n                    <ButtonCreatePdf\n                        pdfCreatingOn={this.state.pdfCreatingOn}\n                        onClick={this.handleCreatePdf} />\n                </GridCustom>\n                <Text tag=\"h2\" mainHeader>{naglowek}</Text>\n                <Container className=\"details-preview separate-container\">\n                    <GridCustom flexEnd>\n                        <ButtonStyled primary noMargin onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/${id}-${slug}/edytuj`)}>Edytuj pomoc</ButtonStyled>\n                    </GridCustom>\n                    <GridCustom flexL fullwidth noWrap>\n                        <section className=\"details-preview__part details-preview__part--main\">\n                            <FieldWithLabel label=\"Typ pomocy\">\n                                <Text>{typOgolna ? 'ogólna' : 'ekranowa'}</Text>\n                            </FieldWithLabel>\n                            <FieldWithLabel label=\"Nagłówek\">\n                                <Text>{naglowek}</Text>\n                            </FieldWithLabel>\n                            <FieldWithLabel label=\"Treść\">\n                                <DraftToComponents content={pomoc.tresc} />\n                            </FieldWithLabel>\n                        </section>\n                        <aside className=\"details-preview__part details-preview__part--aside\">\n                            <FieldWithLabel label=\"Data opublikowania\">\n                                <Text>{pomoc.dataOpublikowania}</Text>\n                            </FieldWithLabel>\n                            <FieldWithLabel label=\"Slug\">\n                                <Text>{slug}</Text>\n                            </FieldWithLabel>\n                            {typOgolna && (\n                                <>\n                                    <FieldWithLabel label=\"Rozdział nadrzędny\">\n                                        {!rozdzialNadrzedny ? <Text>---</Text> : (\n                                            <button key={rozdzialNadrzedny.id} onClick={() => this.handleChangePomoc(rozdzialNadrzedny.id, rozdzialNadrzedny.slug)} className=\"link-text\">\n                                                <Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{rozdzialNadrzedny.naglowek}\n                                            </button>\n                                        )}\n                                    </FieldWithLabel>\n                                    <FieldWithLabel label=\"Powiązane\">\n                                        {pomoc.powiazane.length > 0 ? pomoc.powiazane.map(p => (\n                                            <button key={p.id} onClick={() => this.handleChangePomoc(p.id, p.slug)} className=\"link-text\">\n                                                <Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{p.naglowek}\n                                            </button>\n                                        )) : <Text>---</Text>}\n                                    </FieldWithLabel>\n                                </>\n                            )}\n                            {!typOgolna && (\n                                <FieldWithLabel label=\"Ekran\">\n                                    <Text>{ekranLabel}</Text>\n                                </FieldWithLabel>\n                            )}\n                            <FieldWithLabel label=\"Id\">\n                                <Text>{id}</Text>\n                            </FieldWithLabel>\n                        </aside>\n                    </GridCustom>\n                </Container>\n                <AuditData {...this.state.auditData} />\n            </>\n        )\n    }\n}\n\nconst styles = StyleSheet.create({\n    pdfHeaderStyle: {\n        lineHeight: 1.6,\n        marginBottom: 5,\n        fontSize: 16,\n        fontWeight: 'bold'\n    },\n    pdfHeaderSecondaryStyle: {\n        fontSize: 12,\n    }\n})\n\nPomoc.contextType = UserContext;\n\nexport { Pomoc };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { EKRANY_DICT } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\n\n\nclass PomocUsun extends BaseComponent {\n\n    // basic functions\n\n    componentDidMount() {\n        if (this.props.typOgolna) {\n            this.fetchInitialData();\n        } else {\n            this.setState({initializingOn: false});\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n        this.setState({\n            initializingOn: false,\n            ...getSerializedObject(data).pomoc\n        });\n    }\n\n    handleRemovePomoc() {\n        this.setState({removingOn: true});\n        this.xhrFetch = fetchApi(\n            API_URLS.helpAdminDetails.getUrl(this.props.pomoc.id),\n            'DELETE',\n            {},\n            {},\n            this.handleFetchRemoveSuccess,\n            this.handleFetchRemoveError,\n            this.handleFetchRemoveIncorrectStatus,\n        );\n    }\n\n    handleFetchRemoveSuccess(data) {\n        this.xhrFetchSave = null;\n        this.props.removePomoc(this.props.pomoc.id);\n    }\n\n    handleFetchRemoveError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            removingOn: false,\n            fetchRemoveError: `Nie udało się usunąć pomocy. ${data.message}`,\n        });\n    }\n\n    handleFetchRemoveIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        let message = '';\n        if (status === 403) {\n            message = 'Nie masz uprawnień do usuwania pomocy.';\n            // update permission value in context\n            this.context.removePermission('help');\n        }\n        this.setState({\n            removingOn: false,\n            fetchRemoveError: message || `Podczas usuwania pomocy wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            removingOn: false,\n            fetchRemoveError: '',\n            root: false,\n            dzieci: [],\n            powiazaneDlaObecnego: [],\n        }\n    }\n\n    setAdditionalHandlers() {\n        this.handleRemovePomoc = this.handleRemovePomoc.bind(this);\n        this.handleFetchRemoveSuccess = this.handleFetchRemoveSuccess.bind(this);\n        this.handleFetchRemoveError = this.handleFetchRemoveError.bind(this);\n        this.handleFetchRemoveIncorrectStatus = this.handleFetchRemoveIncorrectStatus.bind(this);\n    }\n\n    getFetchUrl() {\n        return `/api/help/${this.props.pomoc.id}/related`\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać danych pomocy. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania danych pomocy wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    // rendering\n\n    render() {\n        let content = null,\n            children = null;\n        if (this.state.initializingOn) {\n            content = <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n        } else {\n            const pomoc = this.props.pomoc;\n            if (this.props.typOgolna) {\n                if (this.state.root) {\n                    children = <Text error role=\"status\">Nie można usunąć pomocy \"{pomoc.naglowek}\", ponieważ jest to pierwsza pomoc w systemie.</Text>;\n                    content = this.renderRemovingImpossible(children);\n                } else if (this.state.dzieci.length || this.state.powiazaneDlaObecnego.length) {\n                    children = this.renderRelatives();\n                    content = this.renderRemovingImpossible(children);\n                } else {\n                    content = this.renderConfirmation();\n                }\n            } else {\n                if (!pomoc.ekran) {\n                    content = this.renderConfirmation();\n                } else {\n                    children = <Text error role=\"status\">Pomocy \"{pomoc.naglowek}\" nie można usunąć, ponieważ jest przypisana do ekranu \"{!pomoc.ekran ? '---' : EKRANY_DICT[pomoc.ekran].label}\". Odepnij pomoc od ekranu, a następnie spróbuj ponownie.</Text>;\n                    content = this.renderRemovingImpossible(children);\n                }\n            }\n        }\n\n        return (\n            <DialogCustom\n                onClose={this.props.closePomocForRemoving}\n            >\n                {content}\n            </DialogCustom>\n        )\n    }\n\n    renderRemovingImpossible(children) {\n        return (\n            <>\n                <h2 id=\"dialogLabel\">{children}</h2>\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled onClick={this.props.closePomocForRemoving} primary>OK</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderRelatives() {\n        return (\n            <>\n                <Text error role=\"status\">Nie można usunąć pomocy \"{this.props.pomoc.naglowek}\", ponieważ jest ona powiązana z innymi obiektami:</Text>\n                {this.state.dzieci.length > 0 && this.renderList('Pomoce, dla których jest rodziałem nadrzędnym:', this.state.dzieci)}\n                {this.state.powiazaneDlaObecnego.length > 0 && this.renderList('Pomoce, z którymi jest powiązana:', this.state.powiazaneDlaObecnego)}\n            </>\n        )\n    }\n\n    renderList(header, objects) {\n        return (\n            <>\n                <Text>{header}</Text>\n                <ul>\n                    {objects.map(o => (\n                        <li key={o.id}><Link to={`/zarzadzanie-trescia/pomoc/${o.id}-${o.slug}`} className=\"link-text\"><Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{o.naglowek}</Link></li>\n                    ))}\n                </ul>\n            </>\n        )\n    }\n\n    renderConfirmation() {\n        const {\n            fetchRemoveError,\n            removingOn,\n        } = this.state;\n        return (\n            <>\n                <h2 id=\"dialogLabel\">Czy na pewno chcesz usunąć pomoc \"{this.props.pomoc.naglowek}\"?</h2>\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled disabled={removingOn} onClick={this.props.closePomocForRemoving} cancel>Nie, wróć do listy</ButtonStyled>\n                    <ButtonStyled disabled={removingOn} onClick={this.handleRemovePomoc} remove>Usuń pomoc</ButtonStyled>\n                </GridCustom>\n                {fetchRemoveError.length > 0 && <Text error role=\"alert\">{fetchRemoveError}</Text>}\n            </>\n        )\n    }\n}\n\nPomocUsun.contextType = UserContext;\n\nexport { PomocUsun };\n","import React from 'react';\nimport { TabBar, Tab } from '@rmwc/tabs';\nimport {\n    DataTable,\n    DataTableBody,\n    DataTableCell,\n    DataTableContent,\n    DataTableHead,\n    DataTableHeadCell,\n    DataTableRow,\n} from '@rmwc/data-table';\nimport '@material/tab-bar/dist/mdc.tab-bar.css';\nimport '@material/tab-scroller/dist/mdc.tab-scroller.css';\nimport '@material/tab/dist/mdc.tab.css';\nimport '@material/tab-indicator/dist/mdc.tab-indicator.css';\nimport '@rmwc/data-table/data-table.css';\n\nimport { EKRANY_DICT } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Breadcrumps, ButtonStyled, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { PomocUsun } from './PomocUsun';\nimport { TrescPreview } from './TrescPreview';\n\n\nclass Pomoce extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n        this.setState({\n            initializingOn: false,\n            fetchError: '',\n            pomoce: getSerializedObject(\n                data, {nonRecursiveKeys: ['tresc', ]}).pomoce,\n        });\n    }\n\n    handleChangeTypPomocy(typOgolna) {\n        this.setState(\n            {\n                initializingOn: true,\n                typOgolna,\n                pomoce: [],\n            },\n            () =>  {\n                this.props.history.push(`/zarzadzanie-trescia/pomoc${typOgolna === false ? '?typ=ekranowa' : ''}`);\n                this.fetchInitialData()\n            }\n        )\n    }\n\n    handleRemovePomoc(id_) {\n        this.setState(prevState => {\n            return {\n                pomocForRemoving: null,\n                pomoce: prevState.pomoce.filter(p => p.id !== id_),\n            }\n        })\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        const params = new URLSearchParams(props.location.search);\n        return {\n            previewOn: false,\n            pomoce: [],\n            typOgolna: params.get('typ') !== 'ekranowa',\n            pomocForPreview: null,\n            pomocForRemoving: null,\n        }\n    }\n\n    setAdditionalHandlers() {\n        this.handleRemovePomoc = this.handleRemovePomoc.bind(this);\n    }\n\n    getFetchUrl() {\n        return API_URLS.helpAdmin.path\n    }\n\n    getFetchData() {\n        let query = {};\n        if (!this.state.typOgolna) {\n            query['type'] = 'screen_assigned';\n        }\n        return query\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać pomocy. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania pomocy wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.context.removePermission('help');\n    }\n\n    // rendering\n    renderHeader() {\n        const typOgolna = this.state.typOgolna;\n        return (\n            <>\n                <Breadcrumps>\n                    <li className=\"breadcrumps__current\">Pomoc</li>\n                </Breadcrumps>\n                <GridCustom fullwidth centerVertical>\n                    <Text tag=\"h2\" mainHeader>Pomoc</Text>\n                    <ButtonStyled add onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/nowa`)}>Dodaj pomoc</ButtonStyled>\n                </GridCustom>\n                <TabBar>\n                    <Tab disabled={typOgolna === true} onClick={() => this.handleChangeTypPomocy(true)}>Ogólna</Tab>\n                    <Tab disabled={typOgolna === false} onClick={() => this.handleChangeTypPomocy(false)}>Na ekranie aplikacji</Tab>\n                </TabBar>\n            </>\n        )\n    }\n\n    renderContent() {\n        return (\n            <>\n                {this.renderList()}\n                {this.state.previewOn && this.renderPreview()}\n                {this.state.pomocForRemoving !== null && (\n                    <PomocUsun\n                        pomoc={this.state.pomocForRemoving}\n                        typOgolna={this.state.typOgolna}\n                        closePomocForRemoving={() => this.setState({pomocForRemoving: null})}\n                        removePomoc={this.handleRemovePomoc}\n                    />\n                )}\n            </>\n        )\n    }\n\n    renderList() {\n        if (!this.state.pomoce.length) {\n            return <Text error role=\"alert\">Nie dodano jeszcze żadnej pomocy {this.state.typOgolna ? 'ogólnej' : 'na ekranie aplikacji'}.</Text>\n        }\n        const typOgolna = this.state.typOgolna;\n\n        const sort = (p1, p2) => {\n            return p1.id > p2.id ? -1 : 1\n        };\n\n        return (\n            <DataTable className=\"table\">\n                <DataTableContent>\n                    <DataTableHead>\n                        <DataTableRow>\n                            <DataTableHeadCell>Nagłówek pomocy</DataTableHeadCell>\n                            {!typOgolna && <DataTableHeadCell>Przypięta do ekranu</DataTableHeadCell>}\n                            <DataTableHeadCell></DataTableHeadCell>\n                        </DataTableRow>\n                    </DataTableHead>\n                    <DataTableBody>\n                        {this.state.pomoce.sort(sort).map(p => (\n                            <DataTableRow key={p.id}>\n                                <DataTableCell>\n                                    {typOgolna && !p.rozdzialNadrzedny && <Text info>Pierwsza!</Text>}\n                                    <Text>{p.naglowek}</Text>\n                                </DataTableCell>\n                                {!typOgolna && (\n                                    <DataTableCell className=\"table__width-needy-cell\">\n                                            {!p.ekran ? <Text error>Nieprzypięta do ekranu</Text> : <Text >{EKRANY_DICT[p.ekran].label}</Text>}\n                                            <ButtonStyled lite disabled={!p.ekran} onClick={() => this.setState({previewOn: true, pomocForPreview: p})} noMargin>\n                                                Podgląd na ekranie\n                                            </ButtonStyled>\n                                    </DataTableCell>\n                                )}\n                                <DataTableCell>\n                                    <ButtonStyled remove onClick={() => this.setState({pomocForRemoving: p})}>Usuń</ButtonStyled>\n                                    <ButtonStyled lite onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/${p.id}-${p.slug}/edytuj`)}>Edytuj</ButtonStyled>\n                                    <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/pomoc/${p.id}-${p.slug}`)}>Szczegóły</ButtonStyled>\n                                </DataTableCell>\n                            </DataTableRow>\n                        ))}\n                    </DataTableBody>\n                </DataTableContent>\n            </DataTable>\n        )\n    }\n\n    renderPreview() {\n        const pomoc = this.state.pomocForPreview;\n        if (!pomoc.ekran) { return null }\n        return (\n            <TrescPreview\n                content={{naglowek: pomoc.naglowek, tresc: pomoc.tresc}}\n                screen={EKRANY_DICT[pomoc.ekran].id}\n                closePreview={() => this.setState({previewOn: false, pomocForPreview: null})}\n            />\n        )\n    }\n}\n\nPomoce.contextType = UserContext;\n\nexport { Pomoce };\n","import React, { Component } from 'react';\nimport { Document, Page, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\nimport { DraftToPdf } from './DraftToPdf';\n\n\nclass PomoceFrontPdf extends Component {\n\n    render() {\n        return (\n            <Document>\n                <Page size=\"A4\" style={pdfStyles.mainPdfContainerStyle} wrap>\n                    <PdfHeader />\n                    <View>\n                        {this.renderPomoc(this.props.pomoce[0], this.props.pomoce, 1)}\n                    </View>\n                </Page>\n            </Document>\n        )\n    }\n\n    renderPomoc(pomoc, pomoce, deepLevel) {\n        return (\n            <View key={pomoc.id}>\n                <Text style={pdfStyles.textHeaderStyle}>{pomoc.naglowek}</Text>\n                <View style={styles.sectionTextStyle}>\n                    <DraftToPdf content={pomoc.tresc}/>\n                </View>\n                {this.renderPomocePodrzedne(pomoc.id, pomoce, deepLevel)}\n            </View>\n        )\n    }\n\n    renderPomocePodrzedne(pomocId, pomoce, deepLevel) {\n        const pomocePodrzedne = pomoce.filter(p => p.rozdzialNadrzedny.id === pomocId);\n        if (!pomocePodrzedne.length) { return null }\n        return (\n            <View style={[styles.secondarySectionStyle, (deepLevel >= 5) && styles.noPadding]}>\n                {pomocePodrzedne.map(p => this.renderPomoc(p, pomoce, deepLevel + 1))}\n            </View>\n        )\n    }\n}\n\n\nconst styles = StyleSheet.create({\n    sectionTextStyle: {\n        marginBottom: 20\n    },\n    secondarySectionStyle: {\n        paddingLeft: 16\n    },\n    noPadding: {\n        paddingLeft: 0\n    }\n});\n\n\nexport { PomoceFrontPdf };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { generatePdfDocument } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { Breadcrumps, ButtonCreatePdf, Container, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { PomoceFrontPdf } from './PomoceFrontPdf';\n\n\nclass PomoceFront extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n        this.setState({\n            initializingOn: false,\n            pomoce: getSerializedObject(\n                data, {nonRecursiveKeys: ['tresc', ]}).pomoce,\n        });\n    }\n\n    handleCreatePdf = () => {\n        this.setState(\n            {pdfCreatingOn: true},\n            () => generatePdfDocument(\n                <PomoceFrontPdf pomoce={this.state.pomoce.sort(this.sortPomoce)} />,\n                'pomoc.pdf',\n                this.callbackPfdCreated\n            )\n        );\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            pomoce: [],\n            pdfCreatingOn: false,\n        }\n    }\n\n    getFetchUrl() {\n        return '/api/help'\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać pomocy. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania pomocy wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callbackPfdCreated = () => {\n        this.setState({pdfCreatingOn: false});\n    }\n\n    sortPomoce(p1, p2) {\n        return p1.id > p2.id ? 1 : -1\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps isFront>\n                <li className=\"breadcrumps__current\">Pomoc</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        document.title = \"Baza Konkurencyjności - pomoc\";\n        if (!this.state.pomoce.length) {\n            return <Text error role=\"alert\">Brak dostępnych pomocy.</Text>\n        }\n        const pomoce = this.state.pomoce.sort(this.sortPomoce);\n        return (\n            <>\n                <GridCustom fullwidth centerVertical>\n                    <Text tag=\"h2\" mainHeader>Pomoc</Text>\n                    <GridCustom flexEnd>\n                        <ButtonCreatePdf\n                            pdfCreatingOn={this.state.pdfCreatingOn}\n                            onClick={this.handleCreatePdf} />\n                    </GridCustom>\n                </GridCustom>\n\n                <Container className=\"help__list-of-content\">\n                    <ul>\n                        {this.renderPomoc(pomoce[0], pomoce, 1)}\n                    </ul>\n                </Container>\n            </>\n        )\n    }\n\n    renderPomoc(pomoc, pomoce, deepLevel) {\n        return (\n            <li key={pomoc.id}>\n                <Link to={`/pomoc/${pomoc.id}-${pomoc.slug}`} className=\"link-text\"><Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{pomoc.naglowek}</Link>\n                {this.renderPomocePodrzedne(pomoc.id, pomoce, deepLevel)}\n            </li>\n        )\n    }\n\n    renderPomocePodrzedne(pomocId, pomoce, deepLevel) {\n        const pomocePodrzedne = pomoce.filter(p => p.rozdzialNadrzedny.id === pomocId);\n        if (!pomocePodrzedne.length) { return null }\n\n        let pomocePodrzedneClassName = 'help__separate-list';\n        if (deepLevel >= 5) { pomocePodrzedneClassName += ' help__separate-list--deep'}\n        return (\n            <ul className={pomocePodrzedneClassName}>\n                {pomocePodrzedne.map(p => this.renderPomoc(p, pomoce, deepLevel + 1))}\n            </ul>\n        )\n    }\n\n}\n\n\nexport { PomoceFront };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\n\nimport { Breadcrumps, Container, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport { Pomoc } from './Pomoc';\n\n\nclass PomocFront extends Pomoc {\n\n    // handlers\n\n    handleChangePomoc(newId, newSlug) {\n        this.props.history.push(`/pomoc/${newId}-${newSlug}`);\n        this.handleReload();\n    }\n\n    // helpers\n\n    getFetchUrl() {\n        return `/api/help/${this.props.match.params.id}`\n    }\n\n    setUrlWithCorrectSlug(pomoc) {\n        // update url if slugs are not equal\n        const urlParams = this.props.match.params;\n        if (pomoc.slug !== urlParams.slug) {\n            this.props.history.push(`/pomoc/${urlParams.id}-${pomoc.slug}`);\n        }\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps isFront>\n                <li className=\"breadcrumps__link\"><Link to='/pomoc'>Pomoc</Link></li>\n                <li className=\"breadcrumps__current\">Szczegóły pomocy</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        document.title = \"Baza Konkurencyjności - pomoc\";\n        const pomoc = this.state.pomoc;\n        return (\n            <>\n                <Container className=\"article\" tag=\"article\">\n                    <Typography use=\"headline4\" tag=\"h2\" className=\"article__header\">{this.state.pomoc.naglowek}</Typography>\n                    <DraftToComponents content={pomoc.tresc} className=\"article__text\"/>\n                </Container>\n                <GridCustom>\n                    {pomoc.powiazane.length > 0 && (\n                        <FieldWithLabel label=\"Powiązane\">\n                            {pomoc.powiazane.map(p => (\n                                <button key={p.id} onClick={() => this.handleChangePomoc(p.id, p.slug)} className=\"link-text\"><Icon icon=\"arrow_right\" aria-hidden=\"true\" className=\"help__help-item-icon\" />{p.naglowek}</button>\n                            ))}\n                        </FieldWithLabel>\n                    )}\n                    <FieldWithLabel label=\"Data opublikowania\">\n                        <Text>{pomoc.dataOpublikowania}</Text>\n                    </FieldWithLabel>\n                </GridCustom>\n            </>\n        )\n    }\n}\n\n\nexport { PomocFront };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Text as PdfText, StyleSheet } from '@react-pdf/renderer';\n\nimport { UserContext } from '../../../context/user-context';\nimport { generatePdfDocument, serializeAuditData } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    AuditData,\n    Breadcrumps,\n    ButtonCreatePdf,\n    Container,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\nimport { PdfWithDraftContent } from './PdfWithDraftContent';\n\n\nclass Regulamin extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const regulamin = getSerializedObject(\n            data,\n            {\n                nonRecursiveKeys: ['tresc', ],\n                dateAttributes: ['dataOpublikowania', ],\n            }\n        ).regulaminy;\n        if (!regulamin) {\n            this.setState({initializingOn: false, pageNotFound: true});\n        } else {\n            this.setState({\n                initializingOn: false,\n                tresc: regulamin.tresc,\n                dataOpublikowania: regulamin.dataOpublikowania,\n                auditData: serializeAuditData(regulamin),\n            });\n        }\n    }\n\n    handleCreatePdf = () => {\n        this.setState(\n            {pdfCreatingOn: true},\n            () => {\n                if (this.props.current) {\n                    generatePdfDocument(\n                        <PdfWithDraftContent\n                            renderHeader={() => <PdfText style={styles.pdfHeaderStyle}>Regulamin</PdfText>}\n                            content={this.state.tresc}\n                            renderFooter={() => <PdfText>Data ostatniej aktualizacji: {this.state.dataOpublikowania}.</PdfText>}\n                        />,\n                        'regulamin.pdf',\n                        this.callbackPfdCreated\n                    );\n                } else {\n                    generatePdfDocument(\n                        <PdfWithDraftContent content={this.state.tresc} title='Wersja \"Do opublikowania\" regulaminu' />,\n                        'regulamin_do_opublikowania.pdf',\n                        this.callbackPfdCreated\n                    );\n                }\n            }\n        );\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            tresc: '',\n            dataOpublikowania: '',\n            pdfCreatingOn: false,\n            auditData: {},\n        }\n    }\n\n    getFetchUrl() {\n        return API_URLS[\n            this.props.front ? 'regulations' : 'regulationsAdmin'\n        ].path\n    }\n\n    getFetchData() {\n        let query = {};\n        if (!this.props.current) {\n            query['version'] = 'for_publication';\n        }\n        return query\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać regulaminu. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania regulaminu wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callbackPfdCreated = () => {\n        this.setState({pdfCreatingOn: false});\n    }\n\n    callback403 = () => {\n        this.context.removePermission('generalContentCookiesRegulation');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps isFront={this.props.front}>\n                { this.props.front ? (\n                    <li className=\"breadcrumps__current\">Regulamin</li>\n                ) : (\n                    <>\n                        <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/regulaminy'>Regulamin</Link></li>\n                        <li className=\"breadcrumps__current\">{this.props.current ? 'Szczegóły wersji aktualnej' : 'Szczegóły wersji \"Do opublikowania\"'}</li>\n                    </>\n                )}\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        document.title = \"Baza Konkurencyjności - regulamin\";\n        const dataOpublikowania = this.state.dataOpublikowania;\n\n        if (this.props.current) {\n            return (\n                <>\n                    <GridCustom fullwidth centerVertical flexS>\n                        <Text tag=\"h2\" mainHeader>Regulamin</Text>\n                            {this.renderPdfButton()}\n                    </GridCustom>\n                    <Container className=\"separate-container\">\n                        <DraftToComponents content={this.state.tresc} />\n                    </Container>\n                    <FieldWithLabel label=\"Data ostatniej aktualizacji\">\n                        <Text>{dataOpublikowania}</Text>\n                    </FieldWithLabel>\n                    <AuditData {...this.state.auditData} />\n                </>\n            )\n        }\n        return (\n            <>\n                <GridCustom fullwidth centerVertical flexS>\n                    <Text tag=\"h2\" mainHeader>Regulamin<Text info>wersja \"Do opublikowania\"</Text></Text>\n                    <GridCustom flexEnd>\n                        {this.renderPdfButton()}\n                    </GridCustom>\n                </GridCustom>\n                <Container className=\"separate-container\">\n                    <DraftToComponents content={this.state.tresc} />\n                </Container>\n                <FieldWithLabel label=\"Data opublikowania\">\n                    <Text>{dataOpublikowania}</Text>\n                </FieldWithLabel>\n                <AuditData {...this.state.auditData} />\n            </>\n        )\n    }\n\n    renderPdfButton() {\n        let pdfCreatingButtonLabel;\n\n        if (this.state.pdfCreatingOn) {\n            if (this.props.current) {\n                pdfCreatingButtonLabel = 'Tworzenie pliku pdf z regulaminem...'\n            } else {\n                pdfCreatingButtonLabel = 'Tworzenie pliku pdf z regulaminem w wersji \"Do opublikowania\"...'\n            }\n        } else {\n            if (this.props.current) {\n                pdfCreatingButtonLabel = 'Pobierz plik pdf z regulaminem'\n            } else {\n                pdfCreatingButtonLabel = 'Pobierz plik pdf z regulaminem w wersji \"Do opublikowania\"'\n            }\n        }\n\n        return (\n            <ButtonCreatePdf\n                pdfCreatingOn={this.state.pdfCreatingOn}\n                onClick={this.handleCreatePdf}>{pdfCreatingButtonLabel}</ButtonCreatePdf>\n        )\n    }\n}\n\nconst styles = StyleSheet.create({\n    pdfHeaderStyle: {\n        lineHeight: 1.6,\n        marginBottom: 5,\n        fontSize: 16,\n        fontWeight: 'bold'\n    },\n})\n\nRegulamin.contextType = UserContext;\n\nexport { Regulamin };\n","import React from 'react';\nimport {\n    DataTable,\n    DataTableBody,\n    DataTableCell,\n    DataTableContent,\n    DataTableHead,\n    DataTableHeadCell,\n    DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Breadcrumps, ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\n\n\nclass Regulaminy extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n\n        const regulaminy = getSerializedObject(data).regulaminy;\n        this.setState({\n            initializingOn: false,\n            currentExists: regulaminy.aktualnyIstnieje,\n            forPublicationExists: regulaminy.doPublikacjiIstnieje,\n        });\n    }\n\n    handleCloseCurrentVersionDialog() {\n        this.setState({editCurrentVersionOn: false});\n    }\n\n    handleRemoveDoOpublikowania() {\n        this.setState({removingDoOpublikowaniaOn: true});\n    }\n\n    handleCloseRemoveDoOpublikowaniaDialog() {\n        this.setState({removingDoOpublikowaniaOn: false});\n    }\n\n    handleRemove() {\n        // remove ruleForPublication from server\n        this.xhrFetch = fetchApi(\n            API_URLS.regulationsAdmin.path,\n            'DELETE',\n            {},\n            {},\n            this.handleFetchRemoveSuccess,\n            this.handleFetchRemoveError,\n            this.handleFetchRemoveIncorrectStatus,\n        );\n    }\n\n    handleFetchRemoveSuccess(data) {\n        this.xhrFetchSave = null;\n        this.setState({removingDoOpublikowaniaOn: false, forPublicationExists: false});\n    }\n\n    handleFetchRemoveError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            fetchRemoveError: `Nie udało się usunąć wersji regulaminu. ${data.message}`,\n        });\n    }\n\n    handleFetchRemoveIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        if (status === 404) {\n            this.setState({savingOn: false, pageNotFound: true});\n        } else {\n            let message = '';\n            if (status === 403) {\n                message = 'Nie masz uprawnień do usuwania regulaminu.';\n                // update permission value in context\n                this.removePermission();\n            }\n            this.setState({\n                fetchRemoveError: message || `Podczas usuwania wersji regulaminu wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n            });\n        }\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            editCurrentVersionOn: false,\n            removingDoOpublikowaniaOn: false,\n            currentExists: false,\n            forPublicationExists: false,\n            fetchRemoveError: '',\n        }\n    }\n\n    setAdditionalHandlers() {\n        this.handleCloseCurrentVersionDialog = this.handleCloseCurrentVersionDialog.bind(this);\n        this.handleRemoveDoOpublikowania = this.handleRemoveDoOpublikowania.bind(this);\n        this.handleCloseRemoveDoOpublikowaniaDialog = this.handleCloseRemoveDoOpublikowaniaDialog.bind(this);\n\n        this.handleRemove = this.handleRemove.bind(this);\n        this.handleFetchRemoveSuccess = this.handleFetchRemoveSuccess.bind(this);\n        this.handleFetchRemoveError = this.handleFetchRemoveError.bind(this);\n        this.handleFetchRemoveIncorrectStatus = this.handleFetchRemoveIncorrectStatus.bind(this);\n    }\n\n    getFetchUrl() {\n        return API_URLS.regulationsAdminDetails.path\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać regulaminów. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania regulaminów wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.removePermission();\n    }\n\n    removePermission() {\n        this.context.removePermission('generalContentCookiesRegulation');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <>\n                <Breadcrumps>\n                    <li className=\"breadcrumps__current\">Regulamin</li>\n                </Breadcrumps>\n                <Text tag=\"h2\" mainHeader>Regulamin</Text>\n            </>\n        )\n    }\n\n    renderContent() {\n        document.title = \"Baza Konkurencyjności - regulaminy\";\n        if (!this.state.currentExists) {\n            return <ButtonStyled add onClick={() => this.props.history.push(`/zarzadzanie-trescia/regulaminy/nowy`)}>Dodaj regulamin</ButtonStyled>\n        }\n\n        const history = this.props.history;\n        return (\n            <>\n                <DataTable className=\"table\">\n                    <DataTableContent>\n                        <DataTableHead>\n                            <DataTableRow>\n                                <DataTableHeadCell>Wersja regulaminu</DataTableHeadCell>\n                                <DataTableHeadCell></DataTableHeadCell>\n                            </DataTableRow>\n                        </DataTableHead>\n                        <DataTableBody>\n                            <DataTableRow>\n                                <DataTableCell>Wersja aktualna</DataTableCell>\n                                <DataTableCell>\n                                    <ButtonStyled lite onClick={() => this.setState({editCurrentVersionOn: true})}>Edytuj</ButtonStyled>\n                                    <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/aktualny')}>Szczegóły</ButtonStyled>\n                                </DataTableCell>\n                            </DataTableRow>\n                            {this.state.forPublicationExists && (\n                                <DataTableRow>\n                                    <DataTableCell>Wersja \"Do opublikowania\"</DataTableCell>\n                                    <DataTableCell>\n                                        <ButtonStyled lite onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj')}>Edytuj</ButtonStyled>\n                                        <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/do-opublikowania')}>Szczegóły</ButtonStyled>\n                                        <ButtonStyled remove onClick={this.handleRemoveDoOpublikowania}>Usuń</ButtonStyled>\n                                    </DataTableCell>\n                                </DataTableRow>\n                            )}\n                        </DataTableBody>\n                    </DataTableContent>\n                </DataTable>\n                {this.state.editCurrentVersionOn && this.renderEditCurrentVersionDialog()}\n                {this.state.removingDoOpublikowaniaOn && this.renderRemoveDoOpublikowaniaDialog()}\n            </>\n        )\n    }\n\n    renderEditCurrentVersionDialog() {\n        const history = this.props.history;\n        let content, title = null;\n        if (this.state.forPublicationExists) {\n            title = 'Istnieje wersja \"Do opublikowania\" regulaminu.';\n            content = (\n                <>\n                    <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj?wersja=aktualna')}>Nadpisz wersję \"Do opublikowania\" aktualną wersją</ButtonStyled>\n                    <GridCustom>\n                        <ButtonStyled cancel onClick={this.handleCloseCurrentVersionDialog}>Anuluj</ButtonStyled>\n                        <ButtonStyled lite onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj')}>Edytuj wersję \"Do opublikowania\"</ButtonStyled>\n                    </GridCustom>\n                </>\n            )\n        } else {\n            title ='Nie istnieje żadna wersja \"Do opublikowania\" regulaminu.';\n            content = (\n                <GridCustom>\n                    <ButtonStyled cancel onClick={this.handleCloseCurrentVersionDialog}>Anuluj</ButtonStyled>\n                    <ButtonStyled primary onClick={() => history.push('/zarzadzanie-trescia/regulaminy/edytuj?wersja=aktualna')}>Utwórz wersję \"Do opublikowania\" na podstawie aktualnej wersji</ButtonStyled>\n                </GridCustom>\n            )\n        }\n\n        return (\n            <DialogCustom\n                dialogTitle={title}\n                onClose={this.handleCloseCurrentVersionDialog}\n            >\n                {content}\n            </DialogCustom>\n        )\n    }\n\n    renderRemoveDoOpublikowaniaDialog() {\n        return (\n            <DialogCustom\n                dialogTitle='Czy na pewno chcesz usunąć wersję \"Do opublikowania\" regulaminu?'\n                onClose={this.handleCloseRemoveDoOpublikowaniaDialog}\n            >\n                <>\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled onClick={this.handleCloseRemoveDoOpublikowaniaDialog} cancel>Anuluj</ButtonStyled>\n                        <ButtonStyled onClick={this.handleRemove} remove>Usuń</ButtonStyled>\n                    </GridCustom>\n                    {this.state.fetchRemoveError.length > 0 && <Text error role=\"alert\">{this.state.fetchRemoveError}</Text>}\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\nRegulaminy.contextType = UserContext;\n\nexport { Regulaminy };\n","import React from 'react';\nimport {\n    DataTable,\n    DataTableBody,\n    DataTableCell,\n    DataTableContent,\n    DataTableHead,\n    DataTableHeadCell,\n    DataTableRow,\n} from '@rmwc/data-table';\n\nimport { UserContext } from '../../../context/user-context';\nimport { getSerializedObject } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport { Breadcrumps, ButtonStyled, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { TrescPreview } from './TrescPreview';\n\n\nclass TresciOgolne extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n        this.setState({\n            initializingOn: false,\n            fetchError: '',\n            tresciOgolne: getSerializedObject(\n                data, {nonRecursiveKeys: ['tresc', ]}).tresciOgolne,\n        });\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            previewOn: false,\n            tresciOgolne: [],\n            trescForPreview: null,\n        }\n    }\n\n    getFetchUrl() {\n        return API_URLS.generalContentAdmin.path\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać treści ogólnych. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania treści ogólnych wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.context.removePermission('generalContentCookiesRegulation');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <>\n                <Breadcrumps>\n                    <li className=\"breadcrumps__current\">Treści ogólne</li>\n                </Breadcrumps>\n                <Text tag=\"h2\" mainHeader>Treści ogólne</Text>\n            </>\n        )\n    }\n\n    renderContent() {\n        return (\n            <>\n                <DataTable className=\"table\">\n                    <DataTableContent>\n                        <DataTableHead>\n                            <DataTableRow>\n                                <DataTableHeadCell>Nazwa treści</DataTableHeadCell>\n                                <DataTableHeadCell></DataTableHeadCell>\n                            </DataTableRow>\n                        </DataTableHead>\n                        <DataTableBody>\n                            {this.state.tresciOgolne.map(to => (\n                                <DataTableRow key={to.id}>\n                                    <DataTableCell>\n                                        <Text>{to.naglowek}</Text>\n                                    </DataTableCell>\n                                    <DataTableCell>\n                                        <ButtonStyled lite onClick={() => this.setState({previewOn: true, trescForPreview: to})}>Podgląd na ekranie</ButtonStyled>\n                                        <ButtonStyled lite onClick={() => this.props.history.push(`/zarzadzanie-trescia/tresci-ogolne/${to.id}/edytuj`)}>Edytuj</ButtonStyled>\n                                        <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/tresci-ogolne/${to.id}`)}>Szczegóły</ButtonStyled>\n                                    </DataTableCell>\n                                </DataTableRow>\n                            ))}\n                        </DataTableBody>\n                    </DataTableContent>\n                </DataTable>\n                {this.state.previewOn && this.renderPreview()}\n            </>\n        )\n    }\n\n    renderPreview() {\n        return (\n            <TrescPreview\n                content={this.state.trescForPreview}\n                screen='homePage'\n                closePreview={() => this.setState({previewOn: false, trescForPreview: null})}\n            />\n        )\n    }\n}\n\nTresciOgolne.contextType = UserContext;\n\nexport { TresciOgolne };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { serializeAuditData } from '../../../helpers';\nimport { getSerializedObject,  } from '../../../serializers';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    AuditData,\n    Breadcrumps,\n    ButtonStyled,\n    Container,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport { DraftToComponents } from './DraftToComponents';\n\n\nclass TrescOgolna extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        super.handleFetchSuccess(data);\n        const trescOgolna = getSerializedObject(\n            data, {nonRecursiveKeys: ['tresc', ]}).trescOgolna;\n        this.setState({\n            initializingOn: false,\n            fetchError: '',\n            trescOgolna,\n            auditData: serializeAuditData(trescOgolna),\n        });\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {trescOgolna: null, auditData: {}}\n    }\n\n    getFetchUrl() {\n        return API_URLS.generalContentAdminDetails.getUrl(\n            this.props.match.params.id)\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać treści ogólnej. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania treści ogólnej wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callback403 = () => {\n        this.context.removePermission('generalContentCookiesRegulation');\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Breadcrumps>\n                <li className=\"breadcrumps__link\"><Link to='/zarzadzanie-trescia/tresci-ogolne'>Treści ogólne</Link></li>\n                <li className=\"breadcrumps__current\">Szczegóły {this.state.trescOgolna ? this.state.trescOgolna.naglowek : ''}</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderContent() {\n        const to = this.state.trescOgolna;\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>{to.naglowek}</Text>\n                <Container>\n                    <GridCustom flexEnd>\n                        <ButtonStyled primary onClick={() => this.props.history.push(`/zarzadzanie-trescia/tresci-ogolne/${this.props.match.params.id}/edytuj`)}>Edytuj</ButtonStyled>\n                    </GridCustom>\n                    <FieldWithLabel label=\"Treść\">\n                        <DraftToComponents content={to.tresc} />\n                    </FieldWithLabel>\n                </Container>\n                <AuditData {...this.state.auditData} />\n            </>\n        )\n    }\n}\n\nTrescOgolna.contextType = UserContext;\n\nexport { TrescOgolna };\n","import React, { useContext, useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\nimport { Card, CardPrimaryAction, CardMedia } from '@rmwc/card';\nimport { Typography } from '@rmwc/typography';\nimport '@material/card/dist/mdc.card.css';\n\nimport { UserContext } from '../../../context/user-context';\nimport { refreshTimerAfterSativaRequest } from '../../../helpers';\nimport { NotPermittedPage, Text } from '../../common';\n\n\nconst ZarzadzanieTrescia = (props) => {\n    const [timerRefreshed, setTimerRefreshed] = useState(false);\n    if (!timerRefreshed) {\n        refreshTimerAfterSativaRequest();\n        setTimerRefreshed(true);\n    }\n\n    useEffect(() => {\n        document.title = 'Baza Konkurencyjności - zarządzanie treścią';\n    }, [])\n\n    const { permissions } = useContext(UserContext);\n\n    if (!permissions.fullContent) { return <NotPermittedPage /> }\n\n    return (\n        <>\n            <Text tag=\"h2\" mainHeader>Administracja treściami</Text>\n            <nav>\n                <ul className=\"content-manage grid-custom grid-custom--center\">\n                    {permissions.help && (\n                        <li>\n                            <Card tag={Link} to='/zarzadzanie-trescia/pomoc' className=\"content-manage__item\">\n                                <CardPrimaryAction>\n                                    <CardMedia className=\"content-manage__icon\">\n                                        <Icon icon={{ icon: 'contact_support', size: 'xlarge' }} aria-hidden=\"true\"/>\n                                    </CardMedia>\n                                    <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Pomoc</Typography>\n                                </CardPrimaryAction>\n                            </Card>\n                        </li>\n                    )}\n                    {permissions.generalContentCookiesRegulation && (\n                        <>\n                            <li>\n                                <Card tag={Link} to='/zarzadzanie-trescia/regulaminy' className=\"content-manage__item\">\n                                    <CardPrimaryAction>\n                                        <CardMedia className=\"content-manage__icon\">\n                                            <Icon icon={{ icon: 'menu_book', size: 'xlarge' }} aria-hidden=\"true\"/>\n                                        </CardMedia>\n                                        <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Regulamin</Typography>\n                                    </CardPrimaryAction>\n                                </Card>\n                            </li>\n                            <li>\n                                <Card tag={Link} to='/zarzadzanie-trescia/ciasteczka' className=\"content-manage__item\">\n                                    <CardPrimaryAction>\n                                        <CardMedia className=\"content-manage__icon\">\n                                            <Icon icon={{ icon: 'verified_user', size: 'xlarge' }} aria-hidden=\"true\"/>\n                                        </CardMedia>\n                                        <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Ciasteczka</Typography>\n                                    </CardPrimaryAction>\n                                </Card>\n                            </li>\n                            <li>\n                                <Card tag={Link} to='/zarzadzanie-trescia/tresci-ogolne' className=\"content-manage__item\">\n                                    <CardPrimaryAction>\n                                        <CardMedia className=\"content-manage__icon\">\n                                            <Icon icon={{ icon: 'view_quilt', size: 'xlarge' }} aria-hidden=\"true\"/>\n                                        </CardMedia>\n                                        <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Treści ogólne</Typography>\n                                    </CardPrimaryAction>\n                                </Card>\n                            </li>\n                        </>\n                    )}\n                    {permissions.statements && (\n                        <li>\n                            <Card tag={Link} to='/zarzadzanie-trescia/komunikaty' className=\"content-manage__item\">\n                                <CardPrimaryAction>\n                                    <CardMedia className=\"content-manage__icon\">\n                                        <Icon icon={{ icon: 'announcement', size: 'xlarge' }} aria-hidden=\"true\"/>\n                                    </CardMedia>\n                                    <Typography use=\"headline6\" tag=\"h2\" className=\"content-manage__text\">Komunikaty</Typography>\n                                </CardPrimaryAction>\n                            </Card>\n                        </li>\n                    )}\n                </ul>\n            </nav>\n        </>\n    )\n}\n\n\nexport { ZarzadzanieTrescia };\n","import React from 'react';\n\nimport { getSerializedObject } from '../../../serializers';\nimport { DraftToComponents } from './DraftToComponents';\nimport { KomunikatFront } from './KomunikatFront';\n\n\nclass ZoltyPasekFront extends KomunikatFront {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        const komunikat = getSerializedObject(\n            data,\n            {\n                nonRecursiveKeys: ['tresc', ],\n                dateAttributes: ['dataOpublikowania', 'dataWaznosci'],\n                dateTimeAttributes: ['dataOpublikowania', 'dataWaznosci'],\n            }\n        ).komunikaty[0];\n        if (!komunikat) {\n            this.setState({initializingOn: false});\n        } else {\n            this.setState({initializingOn: false, komunikat});\n        }\n    }\n\n    // helpers\n\n    getFetchUrl() {\n        return '/api/statements'\n    }\n\n    getFetchData() {\n        return {yellow_stripe: true}\n    }\n\n    // rendering\n\n    render() {\n        if (this.state.initializingOn || !Object.keys(this.state.komunikat).length) { return null }\n        return this.renderContent()\n    }\n\n    renderContent() {\n        const { tresc } = this.state.komunikat;\n        const trescKomunikatu = tresc.blocks.map(b => b.text).join(' ');\n\n        return (\n            <section className=\"yellow-comment\" aria-label={`Ważny komunikat: ${trescKomunikatu}`} role=\"status\" aria-live=\"polite\">\n                <DraftToComponents content={tresc} />\n            </section>\n        )\n    }\n}\n\n\nexport { ZoltyPasekFront };\n","import React, { useState } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\n\nimport { refreshTimerAfterSativaRequest } from '../../helpers';\nimport { Container } from '../common';\n\n\nconst DeklaracjaDostepnosci = (props) => {\n    document.title = 'Deklaracja dostępności serwisu Baza Konkurencyjności';\n    window.scrollTo(0, 0);\n\n    const [timerRefreshed, setTimerRefreshed] = useState(false);\n    if (!timerRefreshed) {\n        refreshTimerAfterSativaRequest();\n        setTimerRefreshed(true);\n    }\n\n    return (\n        <Container className=\"article\">\n            <Typography id=\"a11y-deklaracja\" use=\"headline4\" tag=\"h2\" className=\"article__header\">Deklaracja dostępności serwisu Baza Konkurencyjności</Typography>\n            <Typography id=\"a11y-wstep\" use=\"body1\" tag=\"p\" className=\"article__text\"><span id=\"a11y-podmiot\">Ministerstwo Funduszy i Polityki Regionalnej</span> zobowiązuje się zapewnić dostępność swojej strony internetowej zgodnie z przepisami ustawy z 4 kwietnia 2019 r. o dostępności cyfrowej stron internetowych i aplikacji mobilnych podmiotów publicznych. Deklaracja dostępności dotyczy strony serwisu <a id=\"a11y-url\" href=\"/\" className=\"link-text\">https://bazakonkurencyjnosci.funduszeeuropejskie.gov.pl/</a>.</Typography>\n            <ul className=\"article__list\">\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">Data publikacji strony internetowej: <span id=\"a11y-data-publikacja\">7 września 2019 r.</span></Typography>\n                </li>\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">Data ostatniej aktualizacji: <span id=\"a11y-data-aktualizacja\">25 lipca 2024 r.</span></Typography>\n                </li>\n            </ul>\n\t\t\t\n\t\t\t<Typography use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Stan dostępności cyfrowej</Typography>\n\t\t\t<Typography id=\"a11y-status\" use=\"body1\" tag=\"p\" className=\"article__text\">Strona internetowa jest zgodna z załącznikiem do ustawy z dnia 4 kwietnia 2019 r. o dostępności cyfrowej stron internetowych i aplikacji mobilnych podmiotów publicznych.</Typography>\n\t\t\t\n\t\t\t<Typography id=\"a11y-przygotowanie\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Przygotowanie deklaracji dostępności</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Deklarację sporządzono dnia <span id=\"a11y-data-sporzadzenie\">1 października 2021 r.</span></Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Data ostatniego przeglądu deklaracji: <span id=\"a11y-data-przeglad\">14 marca 2025 r.</span></Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Deklarację sporządziliśmy na podstawie samooceny w oparciu o <a href=\"https://www.gov.pl/attachment/1a3e2bb5-6d60-4897-ac2f-07a8e91e70ed\" className=\"link-text\">Listę kontrolną do badania dostępności cyfrowej strony internetowej v. 2.2</a> (docx, 0,12MB).</Typography>\n\t\t\t\n\t\t\t<Typography id=\"a11y-skroty\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Skróty klawiszowe</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Na stronie internetowej można korzystać ze standardowych skrótów klawiaturowych.</Typography>\n\n\t\t\t<Typography id=\"a11y-kontakt\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Informacje zwrotne i dane kontaktowe</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Problemy z dostępnością serwisu Baza Konkurencyjności prosimy zgłaszać do Departamentu Koordynacji Wdrażania Funduszy Unii Europejskiej - mejlowo <a href=\"mailto:cst@mfipr.gov.pl\" id=\"a11y-email\">cst@mfipr.gov.pl</a> lub telefonicznie <a href=\"tel:+48 22 273 79 00\" id=\"a11y-telefon\">+48 22 273 79 00</a>.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Każdy ma prawo wystąpić z żądaniem zapewnienia dostępności cyfrowej tej strony internetowej lub jej elementów.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Zgłaszając takie żądanie podaj:</Typography>\n\t\t\t<ul className=\"article__list\">\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">swoje imię i nazwisko,</Typography>\n                </li>\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">swoje dane kontaktowe (np. numer telefonu, e-mail),</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">dokładny adres strony internetowej, na której jest niedostępny cyfrowo element lub treść,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">opis na czym polega problem i jaki sposób rozwiązania byłby dla Ciebie najwygodniejszy.</Typography>\n                </li>\n            </ul>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Na Twoje zgłoszenie odpowiemy najszybciej jak to możliwe, nie później niż w ciągu 7 dni od jego otrzymania.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Jeżeli ten termin będzie dla nas zbyt krótki poinformujemy Cię o tym. W tej informacji podamy nowy termin, do którego poprawimy zgłoszone przez Ciebie błędy lub przygotujemy informacje w alternatywny sposób. Ten nowy termin nie będzie dłuższy niż 2 miesiące.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Jeżeli nie będziemy w stanie zapewnić dostępności cyfrowej strony internetowej lub treści, wskazanej w Twoim żądaniu, zaproponujemy Ci dostęp do nich w alternatywny sposób.</Typography>\n\n\t\t\t<Typography id=\"a11y-procedura\" use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Obsługa wniosków i skarg związanych z dostępnością</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Jeżeli w odpowiedzi na Twój wniosek o zapewnienie dostępności cyfrowej, odmówimy zapewnienia żądanej przez Ciebie dostępności cyfrowej, a Ty nie zgadzasz się z tą odmową, masz prawo złożyć skargę.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Skargę masz prawo złożyć także, jeśli nie zgadzasz się na skorzystanie z alternatywnego sposobu dostępu, który zaproponowaliśmy Ci w odpowiedzi na Twój wniosek o zapewnienie dostępności cyfrowej. </Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Ewentualną skargę złóż do Departamentu Koordynacji Wdrażania Funduszy Unii Europejskiej, e-mail: <a href=\"mailto:cst@mfipr.gov.pl\">cst@mfipr.gov.pl</a>.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Po wyczerpaniu wszystkich możliwości skargę można przesłać także do <a href=\"https://bip.brpo.gov.pl/pl/content/zlozenie-wniosku-do-rzecznika-praw-obywatelskich\" className=\"link-text\" title=\"Przejście do serwisu zewnętrznego Rzecznika Praw Obywatelskich\">Rzecznika Praw Obywatelskich</a>.</Typography>\n\n\t\t\t<Typography use=\"headline5\" tag=\"h3\" className=\"article__section-title article__text\">Pozostałe informacje</Typography>\n            <Typography id=\"a11y-architektura\" use=\"headline6\" tag=\"h4\" className=\"article__section-title article__text\">Dostępność architektoniczna</Typography>\n            <Typography use=\"body1\" tag=\"p\" className=\"article__text\">Budynek Ministerstwa Funduszy i Polityki Regionalnej znajdujący się w Warszawie przy ul. Wspólnej 2/4 został przystosowany do użytkowania przez osoby z niepełnosprawnościami poprzez:</Typography>\n\t\t\t<ul className=\"article__list\">\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">stosowne oznakowanie,</Typography>\n                </li>\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">likwidację barier architektonicznych,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">likwidację barier komunikacyjnych,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">umożliwienie dostępu do pomieszczeń urzędu dla osób z niepełnosprawnością,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">zastosowanie ergonomicznych rozwiązań.</Typography>\n                </li>\n            </ul>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">W szczególności zrealizowano następujące działania:</Typography>\n\t\t\t<ol className=\"article__list article__text\" style={{ listStyle: 'decimal', marginLeft: '24px' }}>\n                <li>\n                    <Typography use=\"body1\" tag=\"p\">Do obsługi osób z niepełnosprawnością oznakowano drzwi wejściowe do budynku Ministerstwa od ul. Wspólnej.</Typography>\n                </li>\n                <li>\n                    <Typography use=\"body1\" tag=\"p\">Przed budynkiem Ministerstwa oznakowano kolorem niebieskim 4 miejsca parkingowe dla osób z niepełnosprawnością.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">W celu obsługi osób z niepełnosprawnością wykonano nową ladę w oknie podawczym kancelarii z odcinkowym obniżeniem blatu.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Zastosowano kontrastowe elementy architektury poprzez wyróżnienie recepcji oraz dziennika podawczego.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Wykonano linie naprowadzające oraz pola uwagi w strefach ogólnodostępnych od wejścia od ul. Wspólnej do budynku.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Wykonano wyróżnienie początku i końca wszystkich biegów schodowych, a przed dojściem do schodów na każdej kondygnacji zastosowano fakturę ostrzegawczą.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Wykonano podjazd wraz z poręczami w celu umożliwienia dostępu do budynku Ministerstwa osób z niepełnosprawnością poruszających się na wózkach.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Przy wejściu numer II od ul. Wspólnej zainstalowano drzwi otwierane automatycznie umożliwiające bezkolizyjne wejście do budynku.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Zakupiono schodołaz umożliwiający osobom z niepełnosprawnością korzystanie z dużej sali konferencyjnej nr 5114B na V piętrze.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Zamontowano platformę dla osób z niepełnosprawnością na V piętrze budynku w sali konferencyjnej nr 5114 A .</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Dla osób z niepełnosprawnościami została przystosowana winda D1 z siedziskiem.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Wykonano w windzie D1 dodatkową sygnalizację dźwiękową z pełnymi komunikatami głosowymi określającymi kierunek jazdy windy, otwarcie/zamknięcie drzwi, kondygnację, na której zatrzymała się winda.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Dla obsługi osób z niepełnosprawnością zamontowano trzy platformy umożliwiające pokonanie schodów.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Na sali konferencyjnej im. Grażyny Gęsickiej oraz w recepcji obsługującej klientów zainstalowano w podłodze pętle indukcyjne umożliwiające wzmocnienie dźwięku dla osób z aparatami słuchowymi.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Na sali konferencyjnej im. Grażyny Gęsickiej zakupiono rampę przenośną umożliwiającą prelegentowi z niepełnosprawnością dostanie się na podest z mównicą.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Zakupiono dodatkową, mobilną pętlę indukcyjną wzmacniającą dźwięk na salach konferencyjnych (sala 1105, sala 5114 AiB) oraz dodatkowo dwie pętle przenośne przeznaczone do rozmów między dwoma lub kilkoma osobami przy biurku lub stole.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">W ramach modernizacji budynku Ministerstwa dostosowano 8 łazienek na potrzeby osób z niepełnosprawnością.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Wykonano instalacje alarmowe we wszystkich toaletach dla osób z niepełnosprawnością.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">W łazience na IV piętrze zainstalowano nasadkę toaletową z podłokietnikami umożliwiającą osobom z niepełnosprawnością korzystanie z WC.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Wykonano dodatkowe poręcze na klatkach schodowych oraz trzy poręcze na zewnątrz budynku zgodnie z przepisami pożarowymi.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Dokupiono fotele do ewakuacji osób z niepełnosprawnościami oraz zemdlonych (w sumie mamy 25 foteli).</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Oznaczono windy posiadające udogodnienia dla osób z niepełnosprawnością.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Wykonano plany tyflograficzne wybranych toalet (przy Sali im. G. Gęsickiej, sali 1105 na I piętrze, sali 5114 A i B na V piętrze oraz toalet ogólnodostępnych znajdujących się po wejściu do budynku od strony ul. Żurawiej).</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Zamontowano znaczniki dźwiękowe przed wybranymi salami konferencyjnymi (sala im. G.Gęsickiej, sala 1105 na I piętrze oraz sala 5114 A i B na V piętrze) informującymi o rozkładzie sal. Znaczniki współpracują z bezpłatną aplikacją INTONAVI. Za pomocą tej aplikacji można wyznaczyć trasę do wybranego znacznika oraz zapoznać się z opisem przestrzeni, w której znajduje się znacznik.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Zamontowano znaczniki dźwiękowe przy wejściach do budynku od strony ulic Żurawiej i Wspólnej. Znaczniki te informują o wejściu do budynku. Znaczniki współpracują z bezpłatną aplikacją INTONAVI. Za pomocą tej aplikacji można wyznaczyć trasę do wybranego znacznika oraz zapoznać się z opisem przestrzeni, w której znajduje się znacznik.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Na parterze, przy wejściu głównym do budynku od ulicy Wspólnej oraz przy wejściu do budynku od ulicy Żurawiej zainstalowano plany tyflograficzne obrazujące rozkład pomieszczeń w  strefie ogólnodostępnej w sposób wizualny i dotykowy (w alfabecie Braille’a). Plany mają również znaczniki NFC umożliwiające pobranie rzutów rozkładu pomieszczeń zaprezentowanych na planach tyflograficznych.</Typography>\n                </li>\n\t\t\t\t<li>\n                    <Typography use=\"body1\" tag=\"p\">Poniżej umieszczono również do pobrania rzuty rozkładu pomieszczeń ogólnodostępnych od ul. Wspólnej i od ul. Żurawiej.</Typography>\n                </li>\n            </ol>\n\n\t\t\t<Typography id=\"a11y-komunikacja\" use=\"headline6\" tag=\"h4\" className=\"article__section-title article__text\">Dostępność komunikacyjno - informacyjna</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">Aby skutecznie komunikować się z naszym urzędem, osoby niesłyszące lub słabo słyszące mogą:</Typography>\n\t\t\t<ul className=\"article__list article__text\">\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">skorzystać z usługi <a href=\"https://tlumacz.migam.org/ministerstwo_funduszy_i_polityki_regionalnej\" className=\"link-text\" title=\"Przejście do serwisu zewnętrznego Tłumacz Migam\">Tłumacz Migam</a>, która umożliwia połączenia wideo z tłumaczem języka migowego z poziomu przeglądarki internetowej, aplikacji mobilnej oraz dowolnego urządzenia z kamerą. Usługa ta jest dostępna w dni robocze w godzinach pracy urzędu 8:15-16:15,</Typography>\n                </li>\n                <li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">napisać pismo/złożyć wniosek na adres: Ministerstwo Funduszy i Polityki Regionalnej, ul. Wspólna 2/4, 00-926 Warszawa,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">wysłać e-maila na adres: <a href=\"mailto:kancelaria@mfipr.gov.pl\">kancelaria@mfipr.gov.pl</a>,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">skontaktować się telefonicznie przy pomocy osoby trzeciej na numer telefonu: <a href=\"tel:+48 22 250 01 30\">22 250 01 30</a>,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">skontaktować się osobiście zgłaszając się w siedzibie urzędu w godzinach urzędowania 8:15-16:15,</Typography>\n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">wysłać wiadomość SMS/MMS na numer telefonu: <a href=\"tel:+48 662 252 227\">662 252 227</a></Typography> \n                </li>\n\t\t\t\t<li className=\"article__list-item\">\n                    <Icon icon={{ icon: 'arrow_right', size: 'medium' }} aria-hidden=\"true\"/>\n                    <Typography use=\"body1\" tag=\"span\">wysłać faks na numer telefonu: 22 273 87 32. W treści faksu prosimy o podanie nazwy komórki organizacyjnej (biura, departamentu), której sprawa dotyczy.</Typography>\n                </li>\n            </ul>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">W kontakcie z naszym urzędem osoba słabo słysząca może także skorzystać z systemu pętli indukcyjnej na recepcji głównej i w sali konferencyjnej im. Grażyny Gęsickiej.</Typography>\n\t\t\t<Typography use=\"body1\" tag=\"p\" className=\"article__text\">W Ministerstwie wyznaczono <a href=\"https://www.gov.pl/web/fundusze-regiony/koordynator-dostepnosci\" className=\"link-text\" title=\"Przejście do serwisu zewnętrznego\">koordynatora ds. dostępności</a>.</Typography>\n        </Container>\n    );\n}\n\nexport { DeklaracjaDostepnosci };\n","import React from 'react';\n\nimport { ADVERTISEMENT_STATUS_FILTERS_CHOICES } from '../../../const';\nimport { dateToString } from '../../../helpers';\nimport {\n    DateCalendar,\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { ProjectNumberSelectsWithPerspectives } from '../common';\n\n\nexport const AdvertisementDataFilters = ({\n    filters, perspectives, onChangeFilter, onChangeProjectNumberSelect\n}) => {\n    const announcementPublicationDateFrom = !!filters.announcementPublicationDateFrom\n        ? new Date(filters.announcementPublicationDateFrom)\n        : '';\n    const announcementPublicationDateTo = !!filters.announcementPublicationDateTo\n        ? new Date(filters.announcementPublicationDateTo)\n        : '';\n    const submissionDeadlineFrom = !!filters.submissionDeadlineFrom\n        ? new Date(filters.submissionDeadlineFrom)\n        : '';\n    const submissionDeadlineTo = !!filters.submissionDeadlineTo\n        ? new Date(filters.submissionDeadlineTo)\n        : '';\n    const announcementPublicationDateFromInputRef = React.createRef();\n    const announcementPublicationDateToInputRef = React.createRef();\n    const submissionDeadlineFromInputRef = React.createRef();\n    const submissionDeadlineToInputRef = React.createRef();\n\n    return (\n        <>\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel\n                    label=\"Status\"\n                    selectRef={React.createRef()}\n                    tag=\"label\">\n                    <Select\n                        aria-label=\"Status\"\n                        className=\"select-custom\"\n                        options={ADVERTISEMENT_STATUS_FILTERS_CHOICES}\n                        screenReaderStatus={() => {return ''}}\n                        styles={customSelectStyles}\n                        value={filters.announcementStatus}\n                        onChange={selectedOption => onChangeFilter(\n                            'announcementStatus', selectedOption)}\n                    />\n                </FieldWithLabel>\n                <FieldWithLabel\n                    label=\"Numer\"\n                    labelFor=\"filters_announcementNumber_id\"\n                    tag=\"label\">\n                    <TextFieldCustom\n                        aria-label={`Numer, maksymalna liczba znaków: 50. Wpisano ${filters.announcementNumber.length} znaków.`}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"numer\"\n                        id=\"filters_announcementNumber_id\"\n                        maxLength={50}\n                        value={filters.announcementNumber}\n                        onChange={ev => onChangeFilter('announcementNumber', ev.target.value)}\n                        onClear={ev => onChangeFilter('announcementNumber', '')} />\n                </FieldWithLabel>\n            </GridCustom>\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel\n                    label=\"Tytuł\"\n                    labelFor=\"filters_title_id\"\n                    tag=\"label\">\n                    <TextFieldCustom\n                        characterCount\n                        aria-label={`Tytuł, maksymalna liczba znaków: 500. Wpisano ${filters.title.length} znaków.`}\n                        className=\"filters__input\"\n                        clearFieldContext=\"tytuł\"\n                        id=\"filters_title_id\"\n                        maxLength={500}\n                        value={filters.title}\n                        onChange={ev => onChangeFilter('title', ev.target.value)}\n                        onClear={ev => onChangeFilter('title', '')} />\n                </FieldWithLabel>\n            </GridCustom>\n            <ProjectNumberSelectsWithPerspectives\n                activity={filters.announcementProjectEnrollmentActivity}\n                activityErrors={[]}\n                disabled={false}\n                institution={filters.announcementProjectEnrollmentInstitution}\n                institutionErrors={[]}\n                isClearable={true}\n                mode=\"advertisements\"\n                perspective={filters.announcementProjectEnrollmentPerspective}\n                perspectiveErrors={[]}\n                perspectives={perspectives}\n                perspectivesAsSelect={true}\n                priority={filters.announcementProjectEnrollmentPriority}\n                priorityErrors={[]}\n                programme={filters.announcementProjectEnrollmentProgramme}\n                programmeErrors={[]}\n                region={filters.announcementProjectEnrollmentRegion}\n                regionErrors={[]}\n                withInstitutionNumber={false}\n                onChangeActivity={onChangeProjectNumberSelect}\n                onChangeInstitution={onChangeProjectNumberSelect}\n                onChangePerspective={onChangeProjectNumberSelect}\n                onChangePriority={onChangeProjectNumberSelect}\n                onChangeProgramme={onChangeProjectNumberSelect}\n                onChangeRegion={onChangeProjectNumberSelect}\n            />\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel\n                    label=\"Numer projektu lub naboru\"\n                    labelFor=\"filters_announcementProjectEnrollmentFullNumber_id\"\n                    tag=\"label\">\n                    <TextFieldCustom\n                        aria-label={`Numer projektu lub naboru, maksymalna liczba znaków: 50. Wpisano ${filters.announcementProjectEnrollmentFullNumber.length} znaków.`}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"numer projektu lub naboru\"\n                        id=\"filters_announcementProjectEnrollmentFullNumber_id\"\n                        maxLength={50}\n                        value={filters.announcementProjectEnrollmentFullNumber}\n                        onChange={ev => onChangeFilter('announcementProjectEnrollmentFullNumber', ev.target.value)}\n                        onClear={ev => onChangeFilter('announcementProjectEnrollmentFullNumber', '')} />\n                </FieldWithLabel>\n            </GridCustom>\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel\n                    label=\"Data publikacji\"\n                    tag=\"label\">\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel\n                            inputRef={announcementPublicationDateFromInputRef}\n                            label=\"od\"\n                            tag=\"label\">\n                            <DateCalendar\n                                dateName=\"Od\"\n                                maxDate={announcementPublicationDateTo || undefined}\n                                parentRef={announcementPublicationDateFromInputRef}\n                                value={announcementPublicationDateFrom}\n                                onChange={date => onChangeFilter('announcementPublicationDateFrom', dateToString(date))} />\n                        </FieldWithLabel>\n                        <FieldWithLabel\n                            inputRef={announcementPublicationDateToInputRef}\n                            label=\"do\"\n                            tag=\"label\">\n                            <DateCalendar\n                                dateName=\"Do\"\n                                minDate={announcementPublicationDateFrom || undefined}\n                                parentRef={announcementPublicationDateToInputRef}\n                                value={announcementPublicationDateTo}\n                                onChange={date => onChangeFilter('announcementPublicationDateTo', dateToString(date))} />\n                        </FieldWithLabel>\n                    </GridCustom>\n                </FieldWithLabel>\n                <FieldWithLabel\n                    label=\"Termin składania ofert\"\n                    tag=\"label\">\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel\n                            inputRef={submissionDeadlineFromInputRef}\n                            label=\"od\"\n                            tag=\"label\">\n                            <DateCalendar\n                                dateName=\"Od\"\n                                maxDate={submissionDeadlineTo || undefined}\n                                parentRef={submissionDeadlineFromInputRef}\n                                value={submissionDeadlineFrom}\n                                onChange={date => onChangeFilter('submissionDeadlineFrom', dateToString(date))} />\n                        </FieldWithLabel>\n                        <FieldWithLabel\n                            inputRef={submissionDeadlineToInputRef}\n                            label=\"do\"\n                            tag=\"label\">\n                            <DateCalendar\n                                dateName=\"Do\"\n                                minDate={submissionDeadlineFrom || undefined}\n                                parentRef={submissionDeadlineToInputRef}\n                                value={submissionDeadlineTo}\n                                onChange={date => onChangeFilter('submissionDeadlineTo', dateToString(date))} />\n                        </FieldWithLabel>\n                    </GridCustom>\n                </FieldWithLabel>\n            </GridCustom>\n        </>\n    )\n}\n","import React, { useContext } from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { URLS } from '../../../urls/frontend';\nimport { ButtonStyled, Ellipsis, MoreOptionsButton, Text } from '../../common';\n\n\nconst STATUS_ICONS = {\n    DRAFT: 'radio_button_unchecked',\n    PUBLISHED: 'calendar_today',\n    CLOSED: 'event_busy',\n    CANCELLED: 'arrow_circle_down',\n    LOCKED: 'highlight_off',\n    RESOLVED: 'event_available',\n};\n\n\nexport const AdvertisementListRow = ({\n    advertisement, onFilterAdvertisementByUserEmail\n}) => {\n    let history = useHistory();\n    const {\n        advertisement: advertisement_,\n        publicationDate: versionPublicationDate,\n        submissionDeadline,\n    } = advertisement;\n    const {\n        createdBy: user,\n        status,\n        publicationDate: advertisementPublicationDate,\n    } = advertisement_;\n\n    const handleFilterProjectsByUserEmail = () => {\n        history.push(\n            `${URLS.managementProjects.path}?email=${user.email}&sort=type&strona=1`);\n    };\n\n    const handleGoToManageUserPage = () => {\n        history.push(URLS.usersDetails.getUrl(user.id));\n    };\n\n    const handleFilterAdvertisementsByUserEmail = () => {\n        onFilterAdvertisementByUserEmail(user.email);\n    };\n\n    const { permissions } = useContext(UserContext);\n\n    return (\n        <DataTableRow>\n            <DataTableCell>\n                <div className=\"table--administration__meta\">\n                    <Link to={`/ogloszenia/${advertisement_.id}${status.label === 'DRAFT' ? '/robocza' : ''}`} className=\"link-text\">\n                        {advertisement_.number}\n                    </Link>\n                    <Ellipsis lineHeight={19} lines={2}>\n                        <Text use=\"caption\" className=\"table--administration__user-info\">{advertisement.title}</Text>\n                    </Ellipsis>\n                </div>\n            </DataTableCell>\n            <DataTableCell>\n                <div className={`table--administration__type-col ${status.label === 'CANCELLED' ? 'type-cancelled' : ''}`}>\n                    <Icon aria-hidden=\"true\" icon={STATUS_ICONS[status.label]} />\n                    <Text>{status.name}</Text>\n                </div>\n            </DataTableCell>\n            <DataTableCell>\n                <div className=\"table--administration__action-col\">\n                    <div className=\"table--administration__meta\">\n                        <Text>{user.forename} {user.surname}</Text>\n                        <Text use=\"caption\" className=\"table--administration__user-info\">{user.email}</Text>\n                    </div>\n                    <MoreOptionsButton menuAriaLabel=\"Otwórz menu użytkownika: zarządzaj użytkownikiem, filtruj projekty i nabory dla tego użytkownika, filtruj ogłoszenia dla tego użytkownika.\">\n                        <Text use=\"caption\" className=\"table--administration__user-id\">ID {user.identifier}</Text>\n                        <ul className=\"table--administration__user-menu-list\">\n                            {permissions.fullUsersAndPermissions &&\n                                <li>\n                                    <ButtonStyled noMargin onClick={handleGoToManageUserPage}>\n                                        Zarządzaj użytkownikiem\n                                    </ButtonStyled>\n                                </li>\n                            }\n                            {permissions.projectsEnrollments &&\n                                <li>\n                                    <ButtonStyled noMargin onClick={handleFilterProjectsByUserEmail}>\n                                        Filtruj projekty i nabory\n                                    </ButtonStyled>\n                                </li>\n                            }\n                            <li><ButtonStyled noMargin onClick={handleFilterAdvertisementsByUserEmail}>Filtruj ogłoszenia</ButtonStyled></li>\n                        </ul>\n                    </MoreOptionsButton>\n                </div>\n            </DataTableCell>\n            <DataTableCell>\n                <div className=\"table--administration__meta\">\n                    {status.label === 'DRAFT' ? (\n                        <>\n                            <Text use=\"caption\" className=\"table--administration__user-info\">\n                                {advertisementPublicationDate\n                                    ? `zaplanowana publikacja: ${advertisementPublicationDate}`\n                                    : 'jeszcze nie opublikowane'\n                                }\n                            </Text>\n                            {submissionDeadline?.length > 0 && (\n                                <Text use=\"caption\" className=\"table--administration__user-info\">\n                                    termin: {submissionDeadline}\n                                </Text>\n                            )}\n                        </>\n                    ) : (\n                        ['CANCELLED', 'LOCKED'].includes(status.label)\n                            ? (\n                                <Text use=\"caption\" className=\"table--administration__user-info\">\n                                    publikacja: {advertisementPublicationDate}\n                                </Text>\n                            )\n                            : (\n                                <>\n                                    <Text use=\"caption\" className=\"table--administration__user-info\">\n                                        publikacja: {advertisementPublicationDate}\n                                    </Text>\n                                    {advertisementPublicationDate !== versionPublicationDate && (\n                                        <Text use=\"caption\" className=\"table--administration__user-info last-change\">\n                                            ost. zmiana: {versionPublicationDate}\n                                        </Text>\n                                    )}\n                                    <Text use=\"caption\" className=\"table--administration__user-info\">\n                                        termin: {submissionDeadline}\n                                    </Text>\n                                </>\n                            )\n                    )}\n                </div>\n            </DataTableCell>\n        </DataTableRow>\n    )\n};\n","import React from 'react';\n\nimport {\n    RODZAJ_ADRESU_FILTERS_CHOICES,\n    TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES\n} from '../../../const';\nimport {\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKraj, FormMiejscowosc } from '../common';\n\n\nexport const AdvertiserDataFilters = ({\n    filters, onChangeAdvertiserIdentificationNumber, onChangeFilter,\n    onChangePolishLocality, ...props\n}) => {\n    const { advertiserAddressType, advertiserIdentificationNumberType } = filters;\n    const { value: advertiserAddressTypeValue } = advertiserAddressType;\n\n    function handlePasteNumerIdentyfikacyjny(ev) {\n         // stop data actually being pasted into input\n        ev.stopPropagation();\n        ev.preventDefault();\n\n        // set pasted data via clipboard API\n        const clipboardData = ev.clipboardData || window.clipboardData;\n        const pastedData = clipboardData.getData('Text');\n        onChangeAdvertiserIdentificationNumber(pastedData, true);\n    }\n\n    return (\n        <>\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel\n                    label=\"Nazwa\"\n                    labelFor=\"filters_advertiserName_id\"\n                    tag=\"label\">\n                    <TextFieldCustom\n                        aria-label={`Nazwa, maksymalna liczba znaków: 100. Wpisano ${filters.advertiserName.length} znaków.`}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"nazwa\"\n                        id=\"filters_advertiserName_id\"\n                        maxLength={100}\n                        value={filters.advertiserName}\n                        onChange={ev => onChangeFilter('advertiserName', ev.target.value)}\n                        onClear={ev => onChangeFilter('advertiserName', '')} />\n                </FieldWithLabel>\n            </GridCustom>\n\n            <GridCustom fullwidth flexM className=\"filters-dialog__advertisement-filters-base\">\n                <FieldWithLabel\n                    className=\"filters-dialog__advertisement-adress-type\"\n                    label=\"Rodzaj adresu\"\n                    selectRef={React.createRef()}\n                    tag=\"label\">\n                    <Select\n                        aria-label=\"Rodzaj adresu. Dalsze opcje filtrowania zostaną wyświetlone po wybraniu konkretnej opcji.\"\n                        className=\"select-custom\"\n                        options={RODZAJ_ADRESU_FILTERS_CHOICES}\n                        screenReaderStatus={() => {return ''}}\n                        styles={customSelectStyles}\n                        value={advertiserAddressType}\n                        onChange={selectedOption =>\n                            props.onChangeAdvertiserAddressType(selectedOption)\n                        }\n                    />\n                </FieldWithLabel>\n                {advertiserAddressTypeValue === 'poland' && (\n                    <div className=\"filters-dialog__advertisement-adress-fields\">\n                        <FieldWithLabel\n                            label=\"NIP/PESEL\"\n                            tag=\"label\"\n                            selectRef={React.createRef()}\n                        >\n                            <Select\n                                aria-label=\"PESEL/NIP\"\n                                className=\"select-custom\"\n                                options={TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES}\n                                screenReaderStatus={() => {return ''}}\n                                styles={customSelectStyles}\n                                value={advertiserIdentificationNumberType}\n                                onChange={selectedOption =>\n                                    props.onChangeAdvertiserIdentificationNumberType(selectedOption)\n                                }\n                            />\n                            {advertiserIdentificationNumberType && advertiserIdentificationNumberType.value === 'all' && (\n                                <Text info>Pole do wprowadzenia numeru pojawi się po wybraniu wartości NIP lub PESEL.</Text>\n                            )}\n                        </FieldWithLabel>\n                        {['nip', 'pesel'].includes(advertiserIdentificationNumberType.value) && (\n                            <FieldWithLabel\n                                label={advertiserIdentificationNumberType.label}\n                                labelFor=\"filters_advertiserIdentificationNumber_id\"\n                                tag=\"label\">\n                                <TextFieldCustom\n                                    aria-describedby=\"advertiserIdentificationNumber_id\"\n                                    aria-label={`${advertiserIdentificationNumberType.label}, maksymalna liczba znaków: ${advertiserIdentificationNumberType.value === 'nip' ? 10 : 11}. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n                                    characterCount\n                                    className=\"filters__input\"\n                                    clearFieldContext={advertiserIdentificationNumberType.label}\n                                    id=\"filters_advertiserIdentificationNumber_poland\"\n                                    maxLength={advertiserIdentificationNumberType.value === 'nip' ? 10 : 11}\n                                    value={filters.advertiserIdentificationNumber}\n                                    onChange={ev => onChangeAdvertiserIdentificationNumber(ev.target.value, true)}\n                                    onClear={ev => onChangeAdvertiserIdentificationNumber('')}\n                                    onKeyUp={ev => onChangeAdvertiserIdentificationNumber(ev.target.value, true)}\n                                    onPaste={handlePasteNumerIdentyfikacyjny} />\n                                <Text info id=\"advertiserIdentificationNumber_poland\">(dla podmiotów z Polski)</Text>\n                            </FieldWithLabel>\n                        )}\n                    </div>\n                )}\n                {advertiserAddressTypeValue === 'abroad' && (\n                    <FieldWithLabel\n                        label=\"Numer identyfikacyjny\"\n                        labelFor=\"filters_advertiserIdentificationNumber_abroad\"\n                        tag=\"label\">\n                        <TextFieldCustom\n                            aria-label={`Numer identyfikacyjny, maksymalna liczba znaków: 100. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"numer identyfikacyjny\"\n                            id=\"filters_advertiserIdentificationNumber_id\"\n                            maxLength={100}\n                            value={filters.advertiserIdentificationNumber}\n                            onChange={ev => onChangeAdvertiserIdentificationNumber(ev.target.value)}\n                            onClear={ev => onChangeAdvertiserIdentificationNumber('')} />\n                        <Text info id=\"advertiserIdentificationNumber_abroad\">(dla podmiotów zagranicznych)</Text>\n                    </FieldWithLabel>\n                )}\n            </GridCustom>\n            {advertiserAddressTypeValue === 'poland' && (\n                <FormMiejscowosc\n                    error=\"\"\n                    isClearable\n                    invalid={false}\n                    miejscowosc={filters.advertiserAddressLocality.length > 0\n                        ? {\n                            wojewodztwo: filters.advertiserAddressVoivodeship,\n                            powiat: filters.advertiserAddressPoviat,\n                            gmina: filters.advertiserAddressCommune,\n                            miejscowosc: filters.advertiserAddressLocality,\n                        }\n                        : null\n                    }\n                    changeMiejscowosc={onChangePolishLocality} />\n            )}\n            {advertiserAddressTypeValue === 'abroad' && (\n                <>\n                    <FormKraj\n                        error={''}\n                        formLocked={false}\n                        isClearable\n                        invalid={false}\n                        krajName={filters.advertiserAddressCountry}\n                        changeKraj={selectedOption => onChangeFilter(\n                            'advertiserAddressCountry',\n                            selectedOption === null ? '' : selectedOption.label\n                        )} />\n                    <FieldWithLabel \n                        label=\"Miejscowość\"\n                        tag=\"label\"\n                        labelFor=\"filters_advertiserAddressLocality_id\"\n                    >\n                        <TextFieldCustom\n                            aria-label={`Miejscowość, maksymalna liczba znaków: 50. Wpisano ${filters.advertiserAddressLocality.length} znaków.`}\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"miejscowość\"\n                            id=\"filters_advertiserAddressLocality_id\"\n                            maxLength={50}\n                            value={filters.advertiserAddressLocality}\n                            onChange={ev => onChangeFilter('advertiserAddressLocality', ev.target.value)}\n                            onClear={ev => onChangeFilter('advertiserAddressLocality', '')} />\n                    </FieldWithLabel>\n                </>\n            )}\n        </>\n    )\n}\n","import React from 'react';\n\nimport { FieldWithLabel, GridCustom, TextFieldCustom } from '../../common';\n\n\nexport const UserDataFilters = ({userEmail, userForename, userSurname, onChangeFilter}) => {\n\n    return (\n        <>\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel \n                    label=\"Adres e-mail\"\n                    tag=\"label\"\n                    labelFor=\"filters_userEmail_id\"\n                >\n                    <TextFieldCustom\n                        aria-label={`Adres e-mail, maksymalna liczba znaków: 100. Wpisano ${userEmail.length} znaków.`}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"adres e-mail\"\n                        id=\"filters_userEmail_id\"\n                        maxLength={100}\n                        value={userEmail}\n                        onChange={ev => onChangeFilter('userEmail', ev.target.value)}\n                        onClear={ev => onChangeFilter('userEmail', '')} />\n                </FieldWithLabel>\n            </GridCustom>\n            <GridCustom fullwidth flexM>\n                <FieldWithLabel\n                    label=\"Imię\"\n                    tag=\"label\"\n                    labelFor=\"filters_userForename_id\"\n                >\n                    <TextFieldCustom\n                        aria-label={`Imię, maksymalna liczba znaków: 50. Wpisano ${userForename.length} znaków.`}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"imię\"\n                        id=\"filters_userForename_id\"\n                        maxLength={50}\n                        value={userForename}\n                        onChange={ev => onChangeFilter('userForename', ev.target.value)}\n                        onClear={ev => onChangeFilter('userForename', '')} />\n                </FieldWithLabel>\n                <FieldWithLabel\n                    label=\"Nazwisko\"\n                    tag=\"label\"\n                    labelFor=\"filters_userSurname_id\"\n                >\n                    <TextFieldCustom\n                        aria-label={`Nazwisko, maksymalna liczba znaków: 50. Wpisano ${userSurname.length} znaków.`}\n                        characterCount\n                        className=\"filters__input\"\n                        clearFieldContext=\"nazwisko\"\n                        id=\"filters_userSurname_id\"\n                        maxLength={50}\n                        value={userSurname}\n                        onChange={ev => onChangeFilter('userSurname', ev.target.value)}\n                        onClear={ev => onChangeFilter('userSurname', '')} />\n                </FieldWithLabel>\n            </GridCustom>\n        </>\n    )\n}\n","import React, { useState } from 'react';\n\nimport { TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES } from '../../../const';\nimport { serializePerspectiveForSelect } from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS } from '../../../filters';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    ButtonStyled,\n    GridCustom,\n    Loader,\n    Text,\n} from '../../common';\nimport { AdvertisementDataFilters } from './AdvertisementDataFilters';\nimport { AdvertiserDataFilters } from './AdvertiserDataFilters';\nimport { UserDataFilters } from './UserDataFilters';\n\n\nexport const AdvertisementsFilters = (props) => {\n    const [filters, setFilters] = useState(props.filters);\n    const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n        url: API_URLS.perspectives.path,\n        fetchData: {mode: 'advertisements'},\n        serializeFetchDataFunction: serializePerspectiveForSelect,\n    });\n\n    function handleChangeFilter(name, value) {\n        setFilters({...filters, [name]: value});\n    }\n\n    function handleApplyFilters() {\n        props.onUpdateFilters(filters);\n    }\n\n    function handleChangeAdvertiserAddressType(value) {\n        setFilters(prevFilters => {\n            let dct = {\n                advertiserAddressType: value,\n                advertiserIdentificationNumber: '',\n                advertiserAddressLocality: '',\n            };\n            dct['advertiserIdentificationNumberType'] =\n                value.value !== 'poland'\n                    ? TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES.filter(\n                        choice => choice.value === 'all')[0]\n                    : ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS[\n                        'advertiserIdentificationNumberType'];\n            if (value.value !== 'poland') {\n                dct = {...dct, ...{\n                    advertiserAddressVoivodeship: '',\n                    advertiserAddressPoviat: '',\n                    advertiserAddressCommune: '',\n                    advertiserAddressLocality: '',\n                }};\n            }\n            if (value.value !== 'abroad') {\n                dct['advertiserAddressCountry'] = '';\n            }\n            return {...prevFilters, ...dct}\n        });\n    }\n\n    function handleChangeAdvertiserIdentificationNumberType(value) {\n        setFilters(prevFilters => {\n            let dct = {advertiserIdentificationNumberType: value};\n            if (prevFilters.advertiserIdentificationNumberType.value !== value.value) {\n                // clean advertiserIdentificationNumber\n                dct['advertiserIdentificationNumber'] = '';\n            }\n            return {...filters, ...dct}}\n        );\n    }\n\n    function handleChangeAdvertiserIdentificationNumber(value, onlyDigits=false) {\n        if (onlyDigits) {\n            value = value.replace(/[^\\d]/g, '');\n        }\n        handleChangeFilter('advertiserIdentificationNumber', value);\n    }\n\n    function setSerializedData(data, serializationDict) {\n        let serializedData = {};\n        for (let [name, value] of Object.entries(data)) {\n            serializedData[serializationDict[name]] = value;\n        }\n        setFilters({...filters, ...serializedData});\n    }\n\n    function handleChangeProjectNumberSelect(data) {\n        setSerializedData(data, {\n            perspective: 'announcementProjectEnrollmentPerspective',\n            programme: 'announcementProjectEnrollmentProgramme',\n            priority: 'announcementProjectEnrollmentPriority',\n            activity: 'announcementProjectEnrollmentActivity',\n            institution: 'announcementProjectEnrollmentInstitution',\n            region: 'announcementProjectEnrollmentRegion',\n        });\n    }\n\n    function handleChangePolishLocality(data) {\n        if (data === null) {\n            // it's possible to get data as null from locality form\n            data = {\n                wojewodztwo: '',\n                powiat: '',\n                gmina: '',\n                miejscowosc: '',\n            };\n        }\n        setSerializedData(data, {\n            wojewodztwo: 'advertiserAddressVoivodeship',\n            powiat: 'advertiserAddressPoviat',\n            gmina: 'advertiserAddressCommune',\n            miejscowosc: 'advertiserAddressLocality',\n        });\n    }\n\n    return loadingOn ? <Loader /> : (fetchError\n        ? (\n            <>\n                <Text error>{fetchError}</Text>\n                <ButtonStyled cancel onClick={props.onCloseFilters}>OK</ButtonStyled>\n            </>\n        )\n        : (\n            <>\n                <section className=\"filters-dialog__filters-section\">\n                    <Text className=\"filters-dialog__filters-headers\">Informacje o użytkowniku</Text>\n                    <UserDataFilters\n                        userEmail={filters.userEmail}\n                        userForename={filters.userForename}\n                        userSurname={filters.userSurname}\n                        onChangeFilter={handleChangeFilter} />\n                    <Text className=\"filters-dialog__filters-headers\">Informacje o podmiocie</Text>\n                    <AdvertiserDataFilters\n                        filters={filters}\n                        onChangeAdvertiserAddressType={handleChangeAdvertiserAddressType}\n                        onChangeAdvertiserIdentificationNumber={handleChangeAdvertiserIdentificationNumber}\n                        onChangeAdvertiserIdentificationNumberType={handleChangeAdvertiserIdentificationNumberType}\n                        onChangeFilter={handleChangeFilter}\n                        onChangePolishLocality={handleChangePolishLocality} />\n                    <Text className=\"filters-dialog__filters-headers\">Informacje o ogłoszeniu</Text>\n                    <AdvertisementDataFilters\n                        filters={filters}\n                        perspectives={data.perspectives}\n                        onChangeFilter={handleChangeFilter}\n                        onChangeProjectNumberSelect={handleChangeProjectNumberSelect} />\n                </section>\n                <GridCustom flexEnd>\n                    <ButtonStyled cancel onClick={props.onCloseFilters}>Anuluj</ButtonStyled>\n                    <ButtonStyled primary onClick={handleApplyFilters}>Zastosuj kryteria</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport {\n    ADVERTISEMENT_STATUS_FILTERS_CHOICES,\n    RODZAJ_ADRESU_FILTERS_CHOICES,\n    TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES\n} from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport {\n    ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS,\n    getAdvertisementsManagementsFiltersCount\n} from '../../../filters';\nimport { usePaginatedFetchApi } from '../../../hooks';\nimport { setInitialSorterByUrlParam } from '../../../sorters';\nimport {\n    Breadcrumps,\n    Container,\n    Loader,\n    NotPermittedPage,\n    PaginatedListHeader,\n    Pagination,\n    SortersFiltersRow,\n    TableCustom,\n    Text\n} from '../../common';\nimport { AdvertisementListRow } from './AdvertisementListRow';\nimport { AdvertisementsFilters } from './AdvertisementsFilters';\n\n\nconst SORTERS = {\n    announcementStatus_asc:\n        ['announcementStatus_asc', 'Po statusie rosnąco', 0],\n    announcementStatus_desc:\n        ['announcementStatus_desc', 'Po statusie malejąco', 1],\n    announcementNumber_asc:\n        ['announcementNumber_asc', 'Po numerze ogłoszenia rosnąco', 2],\n    announcementNumber_desc:\n        ['announcementNumber_desc', 'Po numerze ogłoszenia malejąco', 3],\n    userEmail_asc: [\n        'userEmail_asc',\n        'Po e-mailu użytkownika, który dodał ogłoszenie rosnąco', 4],\n    userEmail_desc: [\n        'userEmail_desc',\n        'Po e-mailu użytkownika, który dodał ogłoszenie malejąco', 5],\n    announcementPublicationDate_asc: [\n        'announcementPublicationDate_asc',\n        'Po dacie opublikowania ogłoszenia rosnąco', 6],\n    announcementPublicationDate_desc: [\n        'announcementPublicationDate_desc',\n        'Po dacie opublikowania ogłoszenia malejąco', 7],\n    submissionDeadline_asc: [\n        'submissionDeadline_asc', 'Po terminie składania ofert rosnąco', 8],\n    submissionDeadline_desc: [\n        'submissionDeadline_desc', 'Po terminie składania ofert malejąco', 9],\n    title_asc: ['title_asc', 'Po tytule ogłoszenia rosnąco', 10],\n    title_desc: ['title_desc', 'Po tytule ogłoszenia malejąco', 11],\n};\nconst SORTING_VALUES = Object.values(SORTERS).sort((s1, s2) => s1[2] - s2[2]);\nconst DEFAULT_SORTER = 'announcementNumber_desc';\nconst OBJECTS_ATTR_NAME = 'versions';\nconst PAGINATED_BY = 20;\nconst BASE_API_URL = '/api/admin/announcements';\nconst SERIALIZER_CONFIG = {\n    dateAttributes: ['publicationDate', 'submissionDeadline'],\n    dateTimeAttributes: ['submissionDeadline', ],\n    dateTimeToLastMinuteAttributes: ['submissionDeadline', ],\n    removeTemporaryId: true,\n};\nconst SERIALIZATION_URL_LIST = [\n    ['userEmail', 'email'],\n    ['userForename', 'imie'],\n    ['userSurname', 'nazwisko'],\n    ['advertiserName', 'nazwaPodmiotu'],\n    ['advertiserAddressType', 'typAdresu'],\n    ['advertiserIdentificationNumberType', 'typNumeruIdent'],\n    ['advertiserIdentificationNumber', 'numerIdent'],\n    ['advertiserAddressCountry', 'kraj'],\n    ['advertiserAddressVoivodeship', 'woj'],\n    ['advertiserAddressPoviat', 'pow'],\n    ['advertiserAddressCommune', 'gm'],\n    ['advertiserAddressLocality', 'miejscowosc'],\n    ['announcementStatus', 'statusOgl'],\n    ['announcementNumber', 'numerOgl'],\n    ['title', 'tytul'],\n    ['announcementProjectEnrollmentPerspective', 'perspektywa'],\n    ['announcementProjectEnrollmentProgramme', 'programOperacyjny'],\n    ['announcementProjectEnrollmentPriority', 'osPriorytetowa'],\n    ['announcementProjectEnrollmentActivity', 'dzialanie'],\n    ['announcementProjectEnrollmentInstitution', 'instytucja'],\n    ['announcementProjectEnrollmentRegion', 'region'],\n    ['announcementProjectEnrollmentFullNumber', 'numerProj'],\n    ['announcementPublicationDateFrom', 'dataPublOd'],\n    ['announcementPublicationDateTo', 'dataPublDo'],\n    ['submissionDeadlineFrom', 'terminOfertOd'],\n    ['submissionDeadlineTo', 'terminOfertDo'],\n    ['page', 'strona'],\n];\nconst SERIALIZATION_URL_DICT_TO_POLISH = {};\nfor (let [eng, pol] of SERIALIZATION_URL_LIST) {\n    SERIALIZATION_URL_DICT_TO_POLISH[eng] = pol;\n}\n\nconst IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST = [\n    'announcementProjectEnrollmentPerspective',\n    'announcementProjectEnrollmentProgramme',\n    'announcementProjectEnrollmentPriority',\n    'announcementProjectEnrollmentActivity',\n    'announcementProjectEnrollmentInstitution',\n    'announcementProjectEnrollmentRegion'\n];\n\n\nfunction setInitialPageNumber(urlParams) {\n    let pageNumber = parseInt(urlParams.get('strona'));\n    if (!(pageNumber > 0)) {\n        pageNumber = 1;\n    }\n    return pageNumber\n}\n\nfunction setInitialFilters(urlParams) {\n    // set some default values\n    let filters = {\n        advertiserAddressType:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressType,\n        advertiserIdentificationNumberType:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserIdentificationNumberType,\n        advertiserIdentificationNumber:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserIdentificationNumber,\n        advertiserAddressCountry:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressCountry,\n        advertiserAddressVoivodeship:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressVoivodeship,\n        advertiserAddressPoviat:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressPoviat,\n        advertiserAddressCommune:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressCommune,\n        advertiserAddressLocality:\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS.advertiserAddressLocality,\n    };\n\n    const setValue = (valueName) => {\n        const value = urlParams.get(SERIALIZATION_URL_DICT_TO_POLISH[valueName]);\n        if (value && value.length) {\n            filters[valueName] = value;\n        }\n    };\n\n    for (let [name, value] of Object.entries(\n            ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS)) {\n        if ([\n            'advertiserIdentificationNumberType',\n            'advertiserIdentificationNumber',\n            'advertiserAddressCountry',\n            'advertiserAddressVoivodeship',\n            'advertiserAddressPoviat',\n            'advertiserAddressCommune',\n            'advertiserAddressLocality'\n        ].includes(name)) { continue }\n        let searchParamValue = urlParams.get(\n            SERIALIZATION_URL_DICT_TO_POLISH[name]);\n        if (name === 'advertiserAddressType') {\n            for (let choice of RODZAJ_ADRESU_FILTERS_CHOICES) {\n                if (searchParamValue && choice.value === searchParamValue) {\n                    filters[name] = choice;\n                    if (searchParamValue === 'poland') {\n\n                        // set locality if 4 parameters chosen\n                        const advertiserAddressVoivodeship = urlParams.get(\n                            SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressVoivodeship']) || null;\n                        const advertiserAddressPoviat = urlParams.get(\n                            SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressPoviat']) || null;\n                        const advertiserAddressCommune = urlParams.get(\n                            SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressCommune']) || null;\n                        const advertiserAddressLocality = urlParams.get(\n                            SERIALIZATION_URL_DICT_TO_POLISH['advertiserAddressLocality']) || null;\n                        if (advertiserAddressVoivodeship\n                            && advertiserAddressPoviat\n                            && advertiserAddressCommune\n                            && advertiserAddressLocality\n                        ) {\n                            filters = {...filters, ...{\n                                advertiserAddressVoivodeship,\n                                advertiserAddressPoviat,\n                                advertiserAddressCommune,\n                                advertiserAddressLocality\n                            }};\n                        }\n\n                        const advertiserIdentificationNumberType = urlParams.get(\n                            SERIALIZATION_URL_DICT_TO_POLISH['advertiserIdentificationNumberType']) || '';\n                        if (!advertiserIdentificationNumberType.length) { break }\n\n                        // find correct advertiserIdentificationNumberType\n                        for (let type_ of TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES) {\n                            if (advertiserIdentificationNumberType === type_.value) {\n                                filters['advertiserIdentificationNumberType'] = type_;\n                                // find advertiserIdentificationNumber\n                                setValue('advertiserIdentificationNumber');\n                                break\n                            }\n                        }\n                    } else {\n                        filters['advertiserIdentificationNumberType'] =\n                            TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES.filter(\n                                choice => choice.value === 'all'\n                            )[0];\n                        if (searchParamValue === 'abroad') {\n                            // find advertiserIdentificationNumber\n                            setValue('advertiserIdentificationNumber');\n                            // find advertiserAddressCountry\n                            setValue('advertiserAddressCountry');\n                            // find advertiserAddressLocality\n                            setValue('advertiserAddressLocality');\n                        }\n                    }\n                    break\n                }\n            }\n        } else if (name === 'announcementStatus') {\n            // set from choices\n            let filterSet = false;\n            for (let choice of ADVERTISEMENT_STATUS_FILTERS_CHOICES) {\n                if (searchParamValue && choice.value === searchParamValue) {\n                    filters[name] = choice;\n                    filterSet = true;\n                    break\n                }\n            }\n            if (!filterSet) {\n                // set default value\n                filters[name] = value;\n            }\n        } else if (IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST.includes(name)) {\n            searchParamValue = parseInt(searchParamValue);\n            // if it's possible to parse, set them, else set default value\n            filters[name] = searchParamValue > 0\n                ? {value: searchParamValue} : value;\n        } else if ([\n            // date fields\n            'announcementPublicationDateFrom', 'announcementPublicationDateTo',\n            'submissionDeadlineFrom', 'submissionDeadlineTo'\n        ].includes(name)) {\n            filters[name] = /\\d{4}-\\d{2}-\\d{2}/.test(searchParamValue)\n                ? searchParamValue : value;\n        } else {\n            filters[name] = searchParamValue || value;\n        }\n    }\n    return filters\n}\n\nfunction getFiltersFetchData(filters) {\n    const data = {};\n    for (let [name, value] of Object.entries(filters)) {\n        if ([\n            'advertiserAddressType',\n            'advertiserIdentificationNumberType',\n            'announcementStatus'\n        ].includes(name)) {\n            data[name] = value.value;\n        } else if (value !== ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS[name]) {\n            if (IMPLEMENTATION_LEVEL_SELECTS_NAMES_LIST.includes(name)\n            ) {\n                data[name] = value.value;\n            } else {\n                data[name] = value.trim();\n            }\n        }\n    }\n    return data\n}\n\n\nexport const Advertisements = (props) => {\n    const params = new URLSearchParams(props.location.search);\n\n    const [pageNumber, setPageNumber] = useState(setInitialPageNumber(params));\n\n    const [selectedSort, setSelectedSort] = useState(null);\n    const [filters, setFilters] = useState(null);\n    const [filtersCounter, setFiltersCounter] = useState(0);\n    const [filtersAreOn, setFiltersAreOn] = useState(false);\n\n    function setInitialSorterAndFilters() {\n        // configure sorter\n        setSelectedSort(\n            setInitialSorterByUrlParam(params, SORTERS, DEFAULT_SORTER));\n\n        // configure filters\n        const setCleanedLocalityFilters = (filtersData) => {\n            filtersData = {...filtersData, ...{\n                advertiserAddressVoivodeship: '',\n                advertiserAddressPoviat: '',\n                advertiserAddressCommune: '',\n                advertiserAddressLocality: '',\n            }};\n            setFilters(filtersData);\n            setFiltersCounter(getAdvertisementsManagementsFiltersCount(filtersData));\n        }\n        const filters_ = setInitialFilters(params);\n        let xhrFetch = null;\n        if (filters_.advertiserAddressType.value === 'poland' && filters_.advertiserAddressLocality.length) {\n            xhrFetch = fetchApi(\n                '/api/dictionaries/teryt',\n                'GET',\n                {},\n                {locality_search_key: filters_.advertiserAddressLocality},\n                (data) => {\n                    for (let {voivodeship, poviat, commune, locality} of data.teryt_items || []) {\n                        // if fits, set it as correct filters\n                        if (voivodeship === filters_.advertiserAddressVoivodeship\n                            && poviat === filters_.advertiserAddressPoviat\n                            && commune === filters_.advertiserAddressCommune\n                            && locality === filters_.advertiserAddressLocality\n                        ) {\n                            setFilters(filters_);\n                            setFiltersCounter(getAdvertisementsManagementsFiltersCount(filters_));\n                            return\n                        }\n                    }\n                    setCleanedLocalityFilters(filters_);\n                },\n                () => setCleanedLocalityFilters(filters_),\n                () => setCleanedLocalityFilters(filters_)\n            );\n        } else {\n            setFilters(filters_);\n            setFiltersCounter(getAdvertisementsManagementsFiltersCount(filters_));\n        }\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }\n    useEffect(setInitialSorterAndFilters, []);\n\n    const {\n        data, loadingOn, fetchError, notPermitted, permissionsCheckingOn\n    } = usePaginatedFetchApi(\n        pageNumber, selectedSort, filters, getFiltersFetchData,\n        PAGINATED_BY, OBJECTS_ATTR_NAME, BASE_API_URL,\n        SERIALIZATION_URL_DICT_TO_POLISH, SERIALIZER_CONFIG);\n\n    const { removePermission } = useContext(UserContext);\n    useEffect(() => {\n        if (notPermitted) {\n            removePermission('advertisements');\n        }\n    }, [notPermitted]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    if (permissionsCheckingOn) {\n        return <Loader />\n    }\n\n    if (notPermitted) {\n        return <NotPermittedPage />\n    }\n\n    function handleChangePage(next=true) {\n        setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n    }\n\n    function handleChangeSort(selectedSort) {\n        setPageNumber(1);\n        setSelectedSort(selectedSort);\n    }\n\n    function handleOpenFilters() {\n        setFiltersAreOn(true);\n    }\n\n    function handleCloseFilters() {\n        setFiltersAreOn(false);\n    }\n\n    function handleUpdateFilters(filters) {\n        setPageNumber(1);\n        setFilters(filters);\n        handleCloseFilters();\n        setFiltersCounter(getAdvertisementsManagementsFiltersCount(filters));\n    }\n\n    function handleFilterAdvertisementsByUserEmail(userEmail) {\n        setPageNumber(1);\n        const sorter = SORTERS[DEFAULT_SORTER];\n        setSelectedSort({value: sorter[0], label: sorter[1]});\n        setFilters({...ADVERTISEMENTS_MANAGEMENTS_CLEANED_FILTERS, userEmail});\n    }\n\n    return (\n        <>\n            <Breadcrumps notZarzadzanieTrescia>\n                <li className=\"breadcrumps__current\">Administracja ogłoszeniami</li>\n            </Breadcrumps>\n            <PaginatedListHeader\n                title=\"Lista ogłoszeń\"\n                total={data ? data.total : 0} />\n            <SortersFiltersRow\n                // sorters\n                selectedSort={selectedSort}\n                sortingValues={SORTING_VALUES}\n                onChangeSort={handleChangeSort}\n                // filters\n                filters={filters}\n                filtersCounter={filtersCounter}\n                filtersAreOn={filtersAreOn}\n                FiltersComponent={AdvertisementsFilters}\n                onCloseFilters={handleCloseFilters}\n                onOpenFilters={handleOpenFilters}\n                onUpdateFilters={handleUpdateFilters} />\n            {loadingOn\n                ? <Loader />\n                : (fetchError\n                    ? <Text error>{fetchError}</Text>\n                    : (\n                        data && data.objects.length > 0\n                            ? (\n                                <>\n                                    <Container>\n                                        <TableCustom\n                                            tableHeaderList={['Oznaczenie', 'Status', 'Użytkownik', 'Daty']}\n                                        >\n                                            {data.objects.map(advertisement => (\n                                                <AdvertisementListRow\n                                                    advertisement={advertisement}\n                                                    key={advertisement.id}\n                                                    onFilterAdvertisementByUserEmail={handleFilterAdvertisementsByUserEmail} />\n                                            ))}\n                                        </TableCustom>\n                                        <Pagination\n                                            currentPage={pageNumber}\n                                            hasNext={data.hasNext}\n                                            hasPrev={data.hasPrev}\n                                            handleChangePage={handleChangePage} />\n                                    </Container>\n                                </>\n                            )\n                            : <Text error>Nie znaleziono ogłoszeń spełniających kryteria wyszukiwania.</Text>\n                    )\n                )\n            }\n        </>\n    )\n};\n","import React, { useEffect,useState } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { getSerializedErrorsFromServer } from '../../../serializers';\nimport {\n    CancelSaveButtonsRow,\n    DialogCustom,\n    FetchErrorWithOkayButton,\n    FieldWithLabel,\n    InfoTextWithIcon,\n    Text,\n    TextFieldCustom\n} from '../../common';\n\n\nexport const EditProjectForm = ({project, onClose, onSave}) => {\n    const isProject = project.type === 'project';\n\n    const [name, setName] = useState(project.name);\n    const [savingOn, setSavingOn] = useState(false);\n    const [errors, setErrors] = useState({});\n    const [fetchSaveError, setFetchSaveError] = useState(null);\n\n    function save() {\n        if (!savingOn) { return }\n\n        let xhrFetch = null;\n\n        function callbackSuccess(data) {\n            xhrFetch = null;\n            onSave(project.id, data[isProject ? 'project' : 'enrollment']);\n        }\n\n        function callbackError(data) {\n            xhrFetch = null;\n            setFetchSaveError(data.message);\n            setSavingOn(false);\n        }\n\n        function callbackIncorrectStatus(status) {\n            xhrFetch = null;\n            setFetchSaveError(status === 403\n                ? `Nie masz uprawnień do edycji tego ${isProject ? 'projektu' : 'naboru'}.`\n                : `Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n            );\n            setSavingOn(false);\n        }\n\n        function callbackShowSaveErrors(errors) {\n            xhrFetch = null;\n            setErrors(getSerializedErrorsFromServer(errors, {mapToCamelCaseName: true}));\n            setSavingOn(false);\n        }\n\n        xhrFetch = fetchApi(\n            `/api/admin/${isProject ? 'project' : 'enrollment'}/${project.id}`,\n            'PUT', {}, {name}, callbackSuccess, callbackError,\n            callbackIncorrectStatus, callbackShowSaveErrors\n        );\n        return () => {\n            if (xhrFetch !== null) {xhrFetch.abort()}\n        }\n    }\n    useEffect(save, [savingOn])\n\n    function handleSave() {\n        setErrors({});\n        setSavingOn(true);\n    }\n\n    const isNameInvalid = (errors.name || []).length > 0;\n    return (\n        <DialogCustom\n            ariaLabelledby=\"addDialogLabel\"\n            className=\"dialog\"\n            onClose={onClose}\n        >\n            <h2 id=\"addDialogLabel\" className=\"text--main-header\">Edytuj {isProject ? 'projekt' : 'nabór'}</h2>\n            <Text className=\"text--project-info\">Numer</Text> <Text accentHeader>{project.fullNumber}</Text>\n            <FieldWithLabel\n                label=\"Tytuł\"\n                tag=\"label\"\n                labelFor=\"name_id\"\n            >\n                <TextFieldCustom\n                    aria-describedby={isNameInvalid ? 'name_error' : null}\n                    aria-label={`Tytuł, maksymalna liczba znaków: 200. Wpisano ${name.length} znaków.`}\n                    aria-required={true}\n                    aria-valuemax={200}\n                    characterCount\n                    clearFieldContext=\"tytuł\"\n                    disabled={savingOn}\n                    fullwidth\n                    id=\"name_id\"\n                    invalid={isNameInvalid}\n                    maxLength={200}\n                    required={isProject}\n                    value={name}\n                    onChange={ev => setName(ev.target.value)}\n                    onClear={ev => setName('')} />\n                {isNameInvalid && <ul id=\"name_error\">{errors.name.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n            </FieldWithLabel>\n            {project.attachedAdvertisementsAmount > 0 && (\n                <InfoTextWithIcon message={`Tytuł zostanie zaktualizowany we wszystkich ogłoszeniach, z którymi powiązany jest ten ${isProject ? 'projekt' : 'nabór'}.`} />\n            )}\n            <CancelSaveButtonsRow disabled={savingOn} onCancel={onClose} onSave={handleSave} />\n            {fetchSaveError !== null && (\n                <FetchErrorWithOkayButton\n                    message={fetchSaveError}\n                    onClickOkay={() => setFetchSaveError(null)} />\n            )}\n        </DialogCustom>\n    )\n}\n","import React, { useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { DataTableCell, DataTableRow } from '@rmwc/data-table';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { URLS } from '../../../urls/frontend';\nimport { ButtonStyled, MoreOptionsButton, Text } from '../../common';\n\n\nconst ADVERTISEMENTS_GET_COMMON_URL_PARAMS =\n    '&sort=announcementNumber_desc&statusOgl=all&strona=1&typAdresu=all' +\n    '&typNumeruIdent=all';\n\n\nexport const ProjectListRow = ({project, onFilterProjectsByUserEmail,\n        onSelectProjectForEditing}) => {\n    let history = useHistory();\n    const isProject = project.type === 'project';\n    const { createdBy: user } = project;\n\n    const handleFilterProjectsByUserEmail = () => {\n        onFilterProjectsByUserEmail(user.email);\n    };\n\n    const handleGoToManageUserPage = () => {\n        history.push(URLS.usersDetails.getUrl(user.id));\n    };\n\n    const handleFilterAdvertisementsByUserEmail = () => {\n        history.push(`${URLS.managementAdvertisements.path}?email=${user.email}${ADVERTISEMENTS_GET_COMMON_URL_PARAMS}`);\n    };\n\n    const handleFilterAdvertisementsByFullNumber = () => {\n        history.push(`${URLS.managementAdvertisements.path}?numerProj=${project.fullNumber}${ADVERTISEMENTS_GET_COMMON_URL_PARAMS}`);\n    };\n\n    const attachedAdvertisementsAmount = project.attachedAdvertisementsAmount || 0;\n\n    const { permissions } = useContext(UserContext);\n\n    return (\n        <DataTableRow>\n            <DataTableCell>\n                <div className=\"table--administration__type-col\">\n                    <Icon aria-hidden=\"true\" icon={isProject ? 'label' : 'label_outline'} />\n                    <Text>{isProject ? 'Projekt' : 'Nabór'}</Text>\n                </div>\n            </DataTableCell>\n            <DataTableCell>\n                <div className=\"table--administration__action-col\">\n                    <div className=\"table--administration__meta\">\n                        <Text>{user.forename} {user.surname}</Text>\n                        <Text use=\"caption\" className=\"table--administration__user-info\">{user.email}</Text>\n                    </div>\n                    <MoreOptionsButton menuAriaLabel=\"Otwórz menu użytkownika: zarządzaj użytkownikiem, filtruj projekty i nabory dla tego użytkownika, filtruj ogłoszenia dla tego użytkownika.\">\n                        <Text use=\"caption\" className=\"table--administration__user-id\">ID {user.identifier}</Text>\n                        <ul className=\"table--administration__user-menu-list\">\n                            {permissions.fullUsersAndPermissions &&\n                                <li>\n                                    <ButtonStyled noMargin onClick={handleGoToManageUserPage}>\n                                        Zarządzaj użytkownikiem\n                                    </ButtonStyled>\n                                </li>\n                            }\n                            <li><ButtonStyled noMargin onClick={handleFilterProjectsByUserEmail}>Filtruj projekty i nabory</ButtonStyled></li>\n                            {permissions.advertisements &&\n                                <li>\n                                    <ButtonStyled noMargin onClick={handleFilterAdvertisementsByUserEmail}>\n                                        Filtruj ogłoszenia\n                                    </ButtonStyled>\n                                </li>\n                            }\n                        </ul>\n                    </MoreOptionsButton>\n                </div>\n            </DataTableCell>\n            <DataTableCell>\n                <div className=\"table--administration__action-col\">\n                    <div className=\"table--administration__meta\">\n                        <Text>{project.fullNumber}</Text>\n                        <Text use=\"caption\" className=\"table--administration__user-info\">{project.name}</Text>\n                    </div>\n                    {(permissions.advertisements || project.canEdit) && (\n                        <MoreOptionsButton menuAriaLabel=\"Otwórz menu: powiązane ogłoszenia.\">\n                            <ul className=\"table--administration__user-menu-list\">\n                                {permissions.advertisements &&\n                                <li>\n                                    <ButtonStyled\n                                        disabled={!attachedAdvertisementsAmount}\n                                        noMargin\n                                        onClick={handleFilterAdvertisementsByFullNumber}\n                                    >\n                                        Powiązane ogłoszenia\n                                        <span\n                                            className=\"btn--counter btn--counter-primary\"\n                                            title=\"Powiązane ogłoszenia\">{attachedAdvertisementsAmount}</span>\n                                    </ButtonStyled>\n                                </li>\n                                }\n                                {project.canEdit && (\n                                    <li>\n                                        <ButtonStyled\n                                            noMargin\n                                            onClick={ev => onSelectProjectForEditing(project)}\n                                        >\n                                            Edytuj {isProject ? 'projekt' : 'nabór'}\n                                        </ButtonStyled>\n                                    </li>\n                                )}\n                            </ul>\n                        </MoreOptionsButton>\n                    )}\n                </div>\n            </DataTableCell>\n        </DataTableRow>\n    )\n};\n","import React, { useState } from 'react';\n\nimport { PROJECTS_MANAGEMENTS_CHOICES } from '../../../const';\nimport { serializePerspectiveForSelect } from '../../../helpers';\nimport { useOneTimeFetchApi } from '../../../hooks';\nimport { API_URLS } from '../../../urls/api';\nimport {\n    ButtonStyled,\n    FieldWithLabel,\n    GridCustom,\n    Loader,\n    Select,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { ProjectNumberSelectsWithPerspectives } from '../common';\nimport { UserDataFilters } from './UserDataFilters';\n\n\nexport const ProjectsFilters = (props) => {\n    const [filters, setFilters] = useState(props.filters);\n    const {data, loadingOn, fetchError} = useOneTimeFetchApi({\n        url: API_URLS.perspectives.path,\n        fetchData: {mode: 'projects_enrollments'},\n        serializeFetchDataFunction: serializePerspectiveForSelect,\n    });\n\n    function handleChangeFilter(name, value) {\n        setFilters({...filters, [name]: value});\n    }\n\n    function handleApplyFilters() {\n        props.onUpdateFilters(filters);\n    }\n\n    function handleChangeProjectNumberSelect(data) {\n        setFilters({...filters, ...data});\n    }\n\n    return loadingOn ? <Loader /> : (fetchError\n        ? (\n            <>\n                <Text error>{fetchError}</Text>\n                <ButtonStyled cancel onClick={props.onCloseFilters}>OK</ButtonStyled>\n            </>\n        )\n        : (\n            <>\n                <section className=\"filters-dialog__filters-section\">\n                    <Text>Informacje o użytkowniku</Text>\n                    <UserDataFilters\n                        userEmail={filters.userEmail}\n                        userForename={filters.userForename}\n                        userSurname={filters.userSurname}\n                        onChangeFilter={handleChangeFilter} />\n                    <Text>Informacje o projekcie lub naborze</Text>\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel\n                            label=\"Kontekst\"\n                            tag=\"label\"\n                            selectRef={React.createRef()} tabIndex=\"-1\">\n                            <Select\n                                aria-label=\"Kontekst\"\n                                className=\"select-custom\"\n                                screenReaderStatus={() => {return ''}}\n                                options={PROJECTS_MANAGEMENTS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n                                styles={customSelectStyles}\n                                value={{value: filters.type.value || PROJECTS_MANAGEMENTS_CHOICES[0][0], label: filters.type.label || PROJECTS_MANAGEMENTS_CHOICES[0][1]}}\n                                onChange={(selectedOption) => handleChangeFilter('type', selectedOption)} />\n                        </FieldWithLabel>\n                        <FieldWithLabel\n                            label=\"Numer\"\n                            tag=\"label\"\n                            labelFor=\"filters_fullNumber_id\"\n                        >\n                            <TextFieldCustom\n                                aria-label=\"Numer\"\n                                className=\"filters__input\"\n                                clearFieldContext=\"numer\"\n                                id=\"filters_fullNumber_id\"\n                                value={filters.fullNumber}\n                                onChange={ev => handleChangeFilter('fullNumber', ev.target.value)}\n                                onClear={ev => handleChangeFilter('fullNumber', '')} />\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel\n                            label=\"Tytuł\"\n                            tag=\"label\"\n                            labelFor=\"filters_name_id\"\n                        >\n                            <TextFieldCustom\n                                aria-label=\"Tytuł\"\n                                className=\"filters__input\"\n                                clearFieldContext=\"tytuł\"\n                                id=\"filters_name_id\"\n                                value={filters.name}\n                                onChange={ev => handleChangeFilter('name', ev.target.value)}\n                                onClear={ev => handleChangeFilter('name', '')} />\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <ProjectNumberSelectsWithPerspectives\n                        activity={filters.activity}\n                        activityErrors={[]}\n                        disabled={false}\n                        institution={filters.institution}\n                        institutionErrors={[]}\n                        isClearable={true}\n                        mode=\"projects_enrollments\"\n                        perspective={filters.perspective}\n                        perspectiveErrors={[]}\n                        perspectives={data.perspectives}\n                        perspectivesAsSelect={true}\n                        priority={filters.priority}\n                        priorityErrors={[]}\n                        programme={filters.programme}\n                        programmeErrors={[]}\n                        region={filters.region}\n                        regionErrors={[]}\n                        withInstitutionNumber={false}\n                        onChangeActivity={handleChangeProjectNumberSelect}\n                        onChangeInstitution={handleChangeProjectNumberSelect}\n                        onChangePerspective={handleChangeProjectNumberSelect}\n                        onChangePriority={handleChangeProjectNumberSelect}\n                        onChangeProgramme={handleChangeProjectNumberSelect}\n                        onChangeRegion={handleChangeProjectNumberSelect} />\n                </section>\n                <GridCustom flexEnd>\n                    <ButtonStyled cancel onClick={props.onCloseFilters}>Anuluj</ButtonStyled>\n                    <ButtonStyled primary onClick={handleApplyFilters}>Zastosuj kryteria</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    )\n};\n","import React, { useContext, useEffect, useState } from 'react';\n\nimport { PROJECTS_MANAGEMENTS_CHOICES } from '../../../const';\nimport { UserContext } from '../../../context/user-context';\nimport { usePaginatedFetchApi } from '../../../hooks';\nimport {\n    getProjectsManagementsFiltersCount,\n    PROJECTS_MANAGEMENTS_CLEANED_FILTERS\n} from '../../../filters';\nimport { setInitialSorterByUrlParam } from '../../../sorters';\nimport {\n    Breadcrumps,\n    Container,\n    Loader,\n    NotPermittedPage,\n    PaginatedListHeader,\n    Pagination,\n    SortersFiltersRow,\n    TableCustom,\n    Text\n} from '../../common';\nimport { EditProjectForm } from './EditProjectForm';\nimport { ProjectListRow } from './ProjectListRow';\nimport { ProjectsFilters } from './ProjectsFilters';\n\n\nconst SORTERS = {\n    type: ['type', 'Po kontekście', 0],\n    userEmail: ['userEmail', 'Po adresie e-mail użytkownika', 1],\n    fullNumber: ['fullNumber', 'Po numerze', 2],\n};\nconst SORTING_VALUES = Object.values(SORTERS).sort((s1, s2) => s1[2] - s2[2]);\nconst DEFAULT_SORTER = 'type';\nconst OBJECTS_ATTR_NAME = 'projectsEnrollments';\nconst PAGINATED_BY = 20;\nconst BASE_API_URL = '/api/admin/project_enrollment';\nconst SERIALIZATION_URL_LIST = [\n    ['userEmail', 'email'],\n    ['userForename', 'imie'],\n    ['userSurname', 'nazwisko'],\n    ['type', 'typ'],\n    ['fullNumber', 'numer'],\n    ['name', 'nazwa'],\n    ['perspective', 'perspektywa'],\n    ['programme', 'programOperacyjny'],\n    ['priority', 'osPriorytetowa'],\n    ['activity', 'dzialanie'],\n    ['institution', 'instytucja'],\n    ['region', 'region'],\n    ['page', 'strona'],\n];\nconst SERIALIZATION_URL_DICT_TO_POLISH = {};\nfor (let [eng, pol] of SERIALIZATION_URL_LIST) {\n    SERIALIZATION_URL_DICT_TO_POLISH[eng] = pol;\n}\n\n\nfunction setInitialPageNumber(urlParams) {\n    let pageNumber = parseInt(urlParams.get('strona'));\n    if (!(pageNumber > 0)) {\n        pageNumber = 1;\n    }\n    return pageNumber\n}\n\nfunction setInitialFilters(urlParams) {\n    let filters = {};\n    for (let [name, value] of Object.entries(PROJECTS_MANAGEMENTS_CLEANED_FILTERS)) {\n        let searchParamValue = urlParams.get(\n            SERIALIZATION_URL_DICT_TO_POLISH[name]);\n        if (name === 'type') {\n            let filterSet = false;\n            for (let type_ of PROJECTS_MANAGEMENTS_CHOICES) {\n                if (searchParamValue && searchParamValue.toString() === type_[0]) {\n                    filters[name] = {value: type_[0], label: type_[1]};\n                    filterSet = true;\n                    break;\n                }\n            }\n            if (!filterSet) {\n                filters[name] = value;\n            }\n        } else if ([\n            'perspective', 'programme', 'priority', 'activity', 'institution',\n            'region'\n        ].includes(name)) {\n            searchParamValue = parseInt(searchParamValue);\n            // if it's possible to parse, set it, else set default value\n            filters[name] = searchParamValue > 0 ? {value: searchParamValue} : value;\n        } else {\n            filters[name] = searchParamValue || value;\n        }\n    }\n    return filters\n}\n\nfunction getFiltersFetchData(filters) {\n    const data = {};\n    for (let [name, value] of Object.entries(filters)) {\n        if (['type', ].includes(name)) {\n            if (['project', 'enrollment'].includes(value.value)) {\n                data[name] = value.value;\n            }\n        } else if (value !== PROJECTS_MANAGEMENTS_CLEANED_FILTERS[name]) {\n            if ([\n                'perspective', 'programme', 'priority', 'activity',\n                'institution', 'region'\n            ].includes(name)) {\n                data[name] = value.value;\n            } else {\n                data[name] = value.trim();\n            }\n        }\n    }\n    return data\n}\n\n\nexport const Projects = (props) => {\n    const params = new URLSearchParams(props.location.search);\n    const [pageNumber, setPageNumber] = useState(setInitialPageNumber(params));\n\n    const [selectedSort, setSelectedSort] = useState(null);\n    const [filters, setFilters] = useState(null);\n    const [filtersCounter, setFiltersCounter] = useState(0);\n    const [filtersAreOn, setFiltersAreOn] = useState(false);\n\n    function setInitialSorterAndFilters() {\n        // configure sorter\n        setSelectedSort(\n            setInitialSorterByUrlParam(params, SORTERS, DEFAULT_SORTER));\n\n        // configure filters\n        const filters_ = setInitialFilters(params);\n        setFilters(filters_);\n        setFiltersCounter(getProjectsManagementsFiltersCount(filters_));\n    }\n\n    useEffect(setInitialSorterAndFilters, []);\n\n    const {\n        data, loadingOn, fetchError, notPermitted, permissionsCheckingOn,\n        updateData\n    } = usePaginatedFetchApi(\n        pageNumber, selectedSort, filters, getFiltersFetchData,\n        PAGINATED_BY, OBJECTS_ATTR_NAME, BASE_API_URL,\n        SERIALIZATION_URL_DICT_TO_POLISH, {}, true);\n    const [editedProject, setEditedProject] = useState(null);\n\n    const { removePermission } = useContext(UserContext);\n    useEffect(() => {\n        if (notPermitted) {\n            removePermission('projectsEnrollments');\n        }\n    }, [notPermitted]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    if (permissionsCheckingOn) {\n        return <Loader />\n    }\n\n    if (notPermitted) {\n        return <NotPermittedPage />\n    }\n\n    function handleChangeSort(selectedSort) {\n        setPageNumber(1);\n        setSelectedSort(selectedSort);\n    }\n\n    function handleOpenFilters() {\n        setFiltersAreOn(true);\n    }\n\n    function handleCloseFilters() {\n        setFiltersAreOn(false);\n    }\n\n    function handleUpdateFilters(filters) {\n        setPageNumber(1);\n        setFilters(filters);\n        handleCloseFilters();\n        setFiltersCounter(getProjectsManagementsFiltersCount(filters));\n    }\n\n    function handleFilterProjectsByUserEmail(userEmail) {\n        setPageNumber(1);\n        const sorter = SORTERS[DEFAULT_SORTER];\n        setSelectedSort({value: sorter[0], label: sorter[1]});\n        setFilters({...PROJECTS_MANAGEMENTS_CLEANED_FILTERS, userEmail});\n    }\n\n    function handleChangePage(next=true) {\n        setPageNumber(prev => next ? prev + 1 : Math.max(prev -1, 1));\n    }\n\n    function handleSaveProject(projectId, data) {\n        updateData(projectId, {name: data.name});\n        setEditedProject(null);\n    }\n\n    return (\n        <>\n            <Breadcrumps notZarzadzanieTrescia>\n                <li className=\"breadcrumps__current\">Administracja projektami i naborami</li>\n            </Breadcrumps>\n            <PaginatedListHeader\n                title=\"Lista projektów i naborów\"\n                total={data ? data.total : 0} />\n            <SortersFiltersRow\n                // sorters\n                selectedSort={selectedSort}\n                sortingValues={SORTING_VALUES}\n                onChangeSort={handleChangeSort}\n                // filters\n                filters={filters}\n                filtersCounter={filtersCounter}\n                filtersAreOn={filtersAreOn}\n                FiltersComponent={ProjectsFilters}\n                onCloseFilters={handleCloseFilters}\n                onOpenFilters={handleOpenFilters}\n                onUpdateFilters={handleUpdateFilters} />\n            {loadingOn\n                ? <Loader />\n                : (fetchError\n                    ? <Text error>{fetchError}</Text>\n                    : (\n                        data && data.objects.length > 0\n                            ? (\n                                <>\n                                    <Container>\n                                        <TableCustom\n                                            tableHeaderList={['Kontekst', 'Użytkownik', 'Numer']}\n                                        >\n                                            {data.objects.map(project => (\n                                                <ProjectListRow\n                                                    key={project.id}\n                                                    project={project}\n                                                    onFilterProjectsByUserEmail={handleFilterProjectsByUserEmail}\n                                                    onSelectProjectForEditing={project => setEditedProject(project)} />\n                                            ))}\n                                        </TableCustom>\n                                        <Pagination\n                                            currentPage={pageNumber}\n                                            hasNext={data.hasNext}\n                                            hasPrev={data.hasPrev}\n                                            handleChangePage={handleChangePage} />\n                                    </Container>\n                                    {editedProject !== null && (\n                                        <EditProjectForm\n                                            project={editedProject}\n                                            onClose={() => setEditedProject(null)}\n                                            onSave={handleSaveProject} />\n                                    )}\n                                </>\n                            )\n                            : <Text error>Nie znaleziono projektów ani naborów spełniających kryteria wyszukiwania.</Text>\n                    )\n                )\n            }\n        </>\n    )\n};\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { fetchApi } from '../../../fetch';\nimport { serializeObjectList } from '../../../serializers';\nimport {\n    sortMiejsceRealizacjiFilter,\n    sortProgrammeFilter\n} from '../../../sorters';\nimport { validateSearchFilters } from '../../../validators';\nimport {\n    ButtonStyled,\n    DateSelect,\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    Text,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\nimport { FormKodCPV } from './FormKodCPV';\n\n\nconst EMPTY_VALUE = {\n    value: 0,\n    label: 'Wybierz',\n};\nconst ORDER_ITEM_CATEGORIES = 'order_item_categories';\nconst ANULOWANE_STATUS = 'CANCELLED';\nconst OPUBLIKOWANE_STATUS = 'PUBLISHED';\nconst ZAMKNIETE_STATUS = 'CLOSED';\nconst ROZSTRZYGNIETE_STATUS = 'RESOLVED';\n\n\nconst serializeProgrammeSelectStructure = (data) => {\n    let data_ = {};\n    for (let programme of Object.values(data)) {\n        data_[programme.id] =\n            `${programme.code.toUpperCase()} - ${programme.name}`;\n    }\n    return Object.entries(data_).sort(sortProgrammeFilter) || []\n}\n\n\nclass FiltryWyszukiwarki extends Component {\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            initializingOn: true,\n            filters: props.filters,\n            errors: {},\n            fetchError: '',\n            dictionaries: props.dictionaries,\n        };\n\n        this.xhrFetch = null;\n\n        this.handleFetchSuccess = this.handleFetchSuccess.bind(this);\n        this.handleFetchError = this.handleFetchError.bind(this);\n        this.handleFetchIncorrectStatus = this.handleFetchIncorrectStatus.bind(this);\n        this.handleApplyFilters = this.handleApplyFilters.bind(this);\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        if (!Object.keys(this.state.dictionaries).length) {\n            // get dictionaries from server\n            this.xhrFetch = fetchApi('/api/dictionaries/search-filters',\n                'GET',\n                {},\n                {},\n                this.handleFetchSuccess,\n                this.handleFetchError,\n                this.handleFetchIncorrectStatus,\n            );\n        } else {\n            this.setState({initializingOn: false});\n        }\n    }\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n    }\n\n    //handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        let dictionaries = {\n            przedmiotZamowieniaKategoria: serializeObjectList(data[ORDER_ITEM_CATEGORIES]),\n            programOperacyjny: serializeProgrammeSelectStructure(\n                data.operation_programme),\n            miejsceRealizacji: Object.entries(data.location_id).sort(\n                sortMiejsceRealizacjiFilter) || [],\n        };\n\n        this.setState(\n            {\n                initializingOn: false,\n                dictionaries\n            },\n            () => this.props.updateDictionaries(dictionaries)\n        );\n    }\n\n    handleFetchError(data) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            initializingOn: false,\n            fetchError: `Nie udało się pobrać danych do filtrów. ${data.message}`,\n        });\n    }\n\n    handleFetchIncorrectStatus(status) {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            initializingOn: false,\n            fetchError: `Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n        });\n    }\n\n    handleChangeFilter(name, value) {\n        this.setState(prevState => {\n            let dict = {[name]: value};\n            if (name === 'advertiserIdentificationNumber') {\n                // allow to insert only letters and digits\n                dict['advertiserIdentificationNumber'] = value.replace(/[^a-zA-Z\\d]/, '');\n            } else {\n                dict[name] = value;\n            }\n            if (name === 'category') {\n                dict['subcategory'] = null;\n            }\n            // clean error (just in case if exists)\n            let errors = Object.assign({}, prevState.errors);\n            delete errors[name];\n            return {errors, filters: Object.assign({}, prevState.filters, dict)}\n        });\n    }\n\n    handleChangeStatusFilter(value, checked) {\n        this.setState(prevState => {\n            if (checked) {\n                if (!prevState.filters.status.includes(value)) {\n                    // clean error\n                    let errors = Object.assign({}, prevState.errors);\n                    delete errors['status'];\n                    return {\n                        errors,\n                        filters: Object.assign({}, prevState.filters, {status: [...prevState.filters.status, value]}),\n                    }\n                }\n            } else {\n                if (prevState.filters.status.includes(value)) {\n                    // clean error\n                    let errors = Object.assign({}, prevState.errors);\n                    delete errors['status'];\n                    return {\n                        errors,\n                        filters: Object.assign({}, prevState.filters, {status: prevState.filters.status.filter(s => s !== value)}),\n                    }\n                }\n            }\n            return {}\n        });\n    }\n\n    handleChangeDateFilter(filterName, dataDict) {\n        this.setState(prevState => {\n            // clean error\n            let errors = Object.assign({}, prevState.errors);\n            delete errors[filterName];\n            return {\n                errors,\n                filters: Object.assign({}, prevState.filters,\n                    {[filterName]: Object.assign({}, prevState.filters[filterName], dataDict)}),\n            }\n        });\n    }\n\n    handleApplyFilters() {\n        const filters = this.state.filters;\n        const [isValid, errors] = validateSearchFilters(filters);\n        if (isValid) {\n            this.props.updateFilters(filters);\n            return\n        }\n        this.setState({errors});\n    }\n\n    // rendering\n\n    render() {\n        if (this.state.initializingOn) {\n            return <Text info tabIndex=\"1\">Trwa inicjalizacja danych...</Text>;\n        } else if (this.state.fetchError.length) {\n            return (\n                <>\n                    <Text error role=\"alert\">{this.state.fetchError}</Text>\n                    <GridCustom flexEnd>\n                        <ButtonStyled onClick={this.props.closeFilters} lite>OK</ButtonStyled>\n                    </GridCustom>\n                </>\n            );\n        } else {\n            return (\n                <>\n                    {this.renderInformacjeOogloszeniu()}\n                    {this.renderPrzedmiotZamowienia()}\n                    {this.renderDaneOgloszeniodawcy()}\n                    <GridCustom flexEnd>\n                        <ButtonStyled onClick={this.props.closeFilters} cancel>Anuluj</ButtonStyled>\n                        <ButtonStyled id=\"zastosuj_kryteria_wyszukiwania_button_id\" onClick={this.handleApplyFilters} primary>Zastosuj kryteria</ButtonStyled>\n                    </GridCustom>\n                </>\n            );\n        }\n    }\n\n    renderInformacjeOogloszeniu() {\n        const {\n            errors,\n            filters,\n        } = this.state;\n        const statuses = filters.status;\n        return (\n            <section className=\"filters-dialog__filters-section\">\n                <Text>Informacje o ogłoszeniu</Text>\n                <GridCustom fullwidth flexM>\n                    <FieldWithLabel label=\"Tytuł ogłoszenia\" tag=\"label\" labelFor=\"filters_title_id\">\n                        <TextFieldCustom\n                            aria-label={`Tytuł ogłoszenia, maksymalna liczba znaków: 1000. Wpisano ${filters.title.length} znaków.`}\n                            aria-valuemax={1000}\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"tytuł ogłoszenia\"\n                            id=\"filters_title_id\"\n                            maxLength={1000}\n                            onChange={(ev) => this.handleChangeFilter('title', ev.target.value)}\n                            onClear={(ev) => this.handleChangeFilter('title', '')}\n                            value={filters.title} />\n                    </FieldWithLabel>\n                    <fieldset>\n                        <Text tag=\"legend\" className=\"label\">Status ogłoszenia</Text>\n                        <Checkbox\n                            label=\"Aktywne opublikowane\"\n                            checked={statuses.includes(OPUBLIKOWANE_STATUS)}\n                            onChange={(event) => this.handleChangeStatusFilter(OPUBLIKOWANE_STATUS, event.target.checked)}\n                        />\n                        <Checkbox\n                            label=\"Zamknięte\"\n                            checked={statuses.includes(ZAMKNIETE_STATUS)}\n                            onChange={(event) => this.handleChangeStatusFilter(ZAMKNIETE_STATUS, event.target.checked)}\n                        />\n                        <Checkbox\n                            label=\"Anulowane\"\n                            checked={statuses.includes(ANULOWANE_STATUS)}\n                            onChange={(event) => this.handleChangeStatusFilter(ANULOWANE_STATUS, event.target.checked)}\n                        />\n                        <Checkbox\n                            label=\"Rozstrzygnięte\"\n                            checked={statuses.includes(ROZSTRZYGNIETE_STATUS)}\n                            onChange={(event) => this.handleChangeStatusFilter(ROZSTRZYGNIETE_STATUS, event.target.checked)}\n                        />\n                        {errors.status && errors.status.length > 0 && <Text error role=\"alert\">{errors.status}</Text>}\n                    </fieldset>\n                </GridCustom>\n                <GridCustom fullwidth flexM>\n                    <FieldWithLabel label=\"Data publikacji\" tag=\"label\" inputRef={React.createRef()}>\n                        <DateSelect\n                            selectAriaLabel={`Data publikacji ${errors.publicationDateRange && errors.publicationDateRange.length > 0 ? errors.publicationDateRange : ''}`}\n                            value={filters.publicationDateRange}\n                            updateDate={(name, value) => this.handleChangeDateFilter('publicationDateRange', name, value)}\n                        />\n                        {errors.publicationDateRange && errors.publicationDateRange.length > 0 && <Text error>{errors.publicationDateRange}</Text>}\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Termin składania ofert\" tag=\"label\">\n                        <DateSelect\n                            selectAriaLabel={`Termin składania ofert ${errors.submissionDeadlineRange && errors.submissionDeadlineRange.length > 0 ? errors.submissionDeadlineRange : ''}`}\n                            value={filters.submissionDeadlineRange}\n                            updateDate={(name, value) => this.handleChangeDateFilter('submissionDeadlineRange', name, value)}\n                        />\n                        {errors.submissionDeadlineRange && errors.submissionDeadlineRange.length > 0 && <Text error role=\"alert\">{errors.submissionDeadlineRange}</Text>}\n                    </FieldWithLabel>\n                </GridCustom>\n                <FieldWithLabel\n                    label=\"Program Operacyjny\"\n                    tag=\"label\"\n                    selectRef={React.createRef()}\n                >\n                    <Select\n                        screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                        className=\"select-custom\"\n                        isMulti\n                        options={this.state.dictionaries.programOperacyjny.map(\n                            ([value, label]) => ({value, label}))\n                        }\n                        placeholder='Zacznij wpisywać...'\n                        value={filters.programme}\n                        onChange={(selectedOption) => this.handleChangeFilter('programme', selectedOption || [])}\n                        styles={customSelectStyles}\n                        noOptionsMessage={() => 'Brak wybranej opcji'}\n                    />\n                </FieldWithLabel>\n            </section>\n        )\n    }\n\n    renderDaneOgloszeniodawcy() {\n        const filters = this.state.filters;\n        const errorNipOgloszeniodawcy = this.state.errors.advertiserIdentificationNumber;\n        return (\n            <section className=\"filters-dialog__filters-section\">\n                <Text>Dane ogłoszeniodawcy</Text>\n                <GridCustom fullwidth flexM>\n                    <FieldWithLabel label=\"Nazwa ogłoszeniodawcy\" tag=\"label\" labelFor=\"filters_nazwa_ogloszeniodawcy_id\">\n                        <TextFieldCustom\n                            aria-label={`Nazwa ogłoszeniodawcy, maksymalna liczba znaków: 250. Wpisano ${filters.advertiserName.length} znaków.`}\n                            aria-valuemax={250}\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"nazwa ogłoszeniodawcy\"\n                            id=\"filters_nazwa_ogloszeniodawcy_id\"\n                            maxLength={250}\n                            onChange={(ev) => this.handleChangeFilter('advertiserName', ev.target.value)}\n                            onClear={(ev) => this.handleChangeFilter('advertiserName', '')}\n                            value={filters.advertiserName} />\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Numer identyfikacyjny ogłoszeniodawcy\" tag=\"label\" labelFor=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\">\n                        <TextFieldCustom\n                            aria-describedby={(errorNipOgloszeniodawcy || '').length > 0 ? 'filters_numer_identyfikacyjny_ogloszeniodawcy_error' : null}\n                            aria-label={`Numer identyfikacyjny ogłoszeniodawcy: 255. Wpisz tylko cyfry. Wpisano ${filters.advertiserIdentificationNumber.length} znaków.`}\n                            aria-valuemax={255}\n                            characterCount\n                            className=\"filters__input\"\n                            clearFieldContext=\"numer identyfikacyjny ogłoszeniodawcy\"\n                            id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_id\"\n                            invalid={(errorNipOgloszeniodawcy || '').length > 0}\n                            maxLength={255}\n                            onChange={(ev) => this.handleChangeFilter('advertiserIdentificationNumber', ev.target.value)}\n                            onClear={(ev) => this.handleChangeFilter('advertiserIdentificationNumber', '')}\n                            onKeyUp={(ev) => this.handleChangeFilter('advertiserIdentificationNumber', ev.target.value)}\n                            value={filters.advertiserIdentificationNumber} />\n                        {(errorNipOgloszeniodawcy || '').length > 0 && <Text error id=\"filters_numer_identyfikacyjny_ogloszeniodawcy_error\">{errorNipOgloszeniodawcy}</Text>}\n                    </FieldWithLabel>\n                </GridCustom>\n            </section>\n        )\n    }\n\n    renderPrzedmiotZamowienia() {\n        const {\n            miejsceRealizacji,\n            przedmiotZamowieniaKategoria,\n        } = this.state.dictionaries;\n        const {\n            category,\n            cpvItem,\n            fulfillmentPlaces,\n            subcategory,\n        } = this.state.filters;\n        return (\n            <section className=\"filters-dialog__filters-section\">\n                <Text>Przedmiot zamówienia w ogłoszeniu</Text>\n                <GridCustom fullwidth flexM>\n                    <FieldWithLabel\n                        label=\"Kategoria przedmiotu zamówienia\"\n                        tag=\"label\"\n                        selectRef={React.createRef()}\n                    >\n                        <Select\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            className=\"select-custom\"\n                            options={[EMPTY_VALUE, ].concat(...przedmiotZamowieniaKategoria.map(t => ({value: t.id, label: t.nazwa})))}\n                            value={category || EMPTY_VALUE}\n                            onChange={(selectedOption) => {\n                                this.handleChangeFilter('category', selectedOption.value === 0 ? null : selectedOption);\n                            }}\n                            styles={customSelectStyles}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                        />\n                    </FieldWithLabel>\n                    <FieldWithLabel\n                        label=\"Podkategoria\"\n                        aria-label={category !== null ? null : 'Podkategoria, pole nieaktywne. Aby wybrać podkategorię, musisz wybrać kategorię przedmiotu zamówienia.'}\n                        selectRef={React.createRef()}\n                        tag=\"label\"\n                        tabIndex={category !== null ? null : '0'}\n                    >\n                        <Select\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            className=\"select-custom\"\n                            isDisabled={category === null}\n                            options={category === null ? [EMPTY_VALUE, ] : [EMPTY_VALUE, ].concat(\n                                ...przedmiotZamowieniaKategoria.filter(k => parseInt(k.id) === parseInt(category.value))[0].podkategorie.map(p => ({value: p.id, label: p.nazwa})))}\n                            value={subcategory || EMPTY_VALUE}\n                            onChange={(selectedOption) => this.handleChangeFilter('subcategory', selectedOption.value === 0 ? null : selectedOption)}\n                            styles={customSelectStyles}\n                            aria-hidden={category === null}\n                            aria-label={category !== null && 'Podkategoria'}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                        />\n                    </FieldWithLabel>\n                </GridCustom>\n                <GridCustom fullwidth flexM>\n                    <FormKodCPV\n                        isMulti\n                        initial={cpvItem}\n                        addKodCPV={selectedOptions => this.handleChangeFilter('cpvItem', selectedOptions || [])} />\n                    <FieldWithLabel\n                        label=\"Miejsce realizacji\"\n                        tag=\"label\"\n                        selectRef={React.createRef()}\n                    >\n                        <Select\n                            screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                            className=\"select-custom\"\n                            isMulti\n                            options={miejsceRealizacji.map(m => ({value: m[0], label: m[1]}))}\n                            placeholder='Zacznij wpisywać...'\n                            value={fulfillmentPlaces}\n                            onChange={(selectedOption) => this.handleChangeFilter('fulfillmentPlaces', selectedOption || [])}\n                            styles={customSelectStyles}\n                            noOptionsMessage={() => 'Brak wybranej opcji'}\n                        />\n                    </FieldWithLabel>\n                </GridCustom>\n            </section>\n        )\n    }\n}\n\nexport { FiltryWyszukiwarki };\n","import React from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport { Box, ButtonStyled, FieldWithLabel, Text } from '../../common';\nimport { ZalacznikiSelect } from '../common';\n\n\nconst FormRozstrzygniecieWariant = (props) => {\n    const { wariant } = props;\n    const checkboxLabel = <>Wybierz ofertę <span className=\"sr-only\">od {wariant.nazwaOferenta}</span></>;\n    \n    let offerTitle = `${wariant.cena} PLN`;\n    if (wariant.isSelected) {\n        offerTitle = <><span className=\"sr-only\">Wybrana oferta: </span> {wariant.cena} PLN</>\n    }\n\n    return (\n        <Box titleOneRow={offerTitle} tag=\"li\" >\n            <Text>{wariant.nazwaOferenta}</Text>\n            {wariant.opis.length > 0 && (\n                <FieldWithLabel label=\"Opis\">\n                    <Text className=\"long-text\">{wariant.opis}</Text>\n                </FieldWithLabel>\n            )}\n            <FieldWithLabel\n                label=\"Załączniki\"\n                tag=\"label\"\n                selectRef={wariant.zalaczniki.length > 0 ? React.createRef() : null} >\n                <ZalacznikiSelect zalaczniki={wariant.zalaczniki} />\n            </FieldWithLabel>\n            {wariant.isRefused && (\n                <ButtonStyled\n                    primary\n                    onClick={ev => props.onOfferRestore(wariant.ofertaId)}\n                >Przywróć ofertę{props.hasOfertaManyWarianty && ' i wszystkie jej warianty'}</ButtonStyled>)}\n            {!wariant.isRefused && (\n                <>\n                    <ButtonStyled\n                        remove\n                        onClick={ev => props.onOfferRefuse(wariant.ofertaId)}\n                    >Odrzuć ofertę<span className=\"sr-only\"> od {wariant.nazwaOferenta} </span>{props.hasOfertaManyWarianty && ' i wszystkie jej warianty'}</ButtonStyled>\n                    <Checkbox\n                        className=\"checkbox--btn checkbox--btn-primary \"\n                        label={checkboxLabel}\n                        checked={wariant.isSelected}\n                        onChange={ev => props.onWariantSelect(\n                            ev.target.checked, props.zamowienieNode, wariant.id)}\n                    />\n                </>\n            )}\n        </Box>\n    );\n}\n\nexport { FormRozstrzygniecieWariant };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\nimport { TabBar, Tab } from '@rmwc/tabs';\n\nimport { Box, ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { FormRozstrzygniecieWariant } from './FormRozstrzygniecieWariant';\n\n\nconst TAB_INDEXES = {\n    notRefused: 0,\n    refused: 1,\n};\n\n\nclass FormCzescRozstrzygniecia extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            selectedTab: TAB_INDEXES['notRefused'],\n            refusingOfertaId: null,\n            restoringOfertaId: null,\n        };\n    }\n\n    // handlers\n\n    handleRefuse = (ofertaId) => {\n        this.setState({refusingOfertaId: ofertaId});\n    }\n\n    handleRestore = (ofertaId) => {\n        this.setState({restoringOfertaId: ofertaId});\n    }\n\n    handleCloseDialog = (ofertaIdAttributeName) => {\n        this.setState({[ofertaIdAttributeName]: null});\n    }\n\n    // helpers\n\n    hasManyWarianty(ofertaId) {\n        return this.props.warianty.filter(w => w.ofertaId === ofertaId).length > 1\n    }\n\n    sortWarianty = (w1, w2) => {\n        return w1.nazwaOferenta.localeCompare(w2.nazwaOferenta, 'pl')\n    }\n\n    // rendering\n\n    render() {\n        if (this.props.warianty.length) {\n            return (\n                <>\n                    {this.renderHeader()}\n                    <TabBar\n                        activeTabIndex={this.state.selectedTab}\n                        className=\"tab-bar\"\n                        onActivate={ev => this.setState({selectedTab: ev.detail.index})}\n                    >\n                        <Tab>Oferty spełniające kryteria</Tab>\n                        <Tab>Oferty odrzucone</Tab>\n                    </TabBar>\n                    <Text tag=\"h2\" sectionHeader>Lista wariantów{this.props.hasMultiplyZamowienia && ` do części`}</Text>\n                    {this.props.hasMultiplyZamowienia && <Text label>{this.props.zamowienie.tytul}</Text>}\n                    {this.renderNotRefused()}\n                    {this.renderRefused()}\n                </>\n            )\n        }\n        return (\n            <>\n                {this.renderHeader()}\n                <Text tag=\"h2\" sectionHeader>Lista ofert{this.props.hasMultiplyZamowienia && ` do części`}</Text>\n                {this.props.hasMultiplyZamowienia && <Text label>{this.props.zamowienie.tytul}</Text>}\n                {this.renderNotRefused()}\n            </>\n        )\n    }\n\n    renderHeader() {\n        const zamowienie = this.props.zamowienie;\n\n        return (\n            <>\n                <div className=\"offer-resolve__name\">\n                    <span className=\"sr-only\" role=\"alert\">Wybierz ofertę spośród listy ofert spełniających kryteria. Możesz odrzucić oferty. Możesz nie wybrać żadnej oferty.</span>\n                    <Text tag=\"h2\" sectionHeader>Rozstrzygnięcie części:</Text>\n                    <Text label>{zamowienie.tytul}</Text>\n                </div>\n\n                <GridCustom tag=\"ul\">\n                    {zamowienie.kryteriaOceny.map(ko => (\n                        <Box key={ko.id} tag=\"li\" titleOneRow={ko.czyKryteriumCenowe ? 'Kryterium cenowe' : 'Kryterium pozacenowe'}>\n                            {ko.opis}\n                        </Box>\n                    ))}\n                </GridCustom>\n\n            </>\n        )\n    }\n\n    renderNotRefused() {\n        if (this.state.selectedTab !== TAB_INDEXES['notRefused']) {return null}\n        const zamowienie = this.props.zamowienie;\n        const warianty = this.props.warianty.filter(w => !w.isRefused);\n\n        return (\n            <>\n                <Text info>Liczba wyników: {warianty.length}</Text>\n                <GridCustom tag=\"ul\">\n                    {warianty.sort(this.sortWarianty).map(w => (\n                        <FormRozstrzygniecieWariant\n                            hasOfertaManyWarianty={this.hasManyWarianty(w.ofertaId)}\n                            key={w.id}\n                            wariant={w}\n                            zamowienieNode={zamowienie.zamowienieNode.id}\n                            onOfferRefuse={this.handleRefuse}\n                            onWariantSelect={this.props.onWariantSelect} />\n                    ))}\n                    {!warianty.length && <Text error>Nie złożono ofert{this.props.hasMultiplyZamowienia && ` do części: \"${this.props.zamowienie.tytul}\"`}</Text>}\n                </GridCustom>\n                <GridCustom centerHorizontal>\n                    <Checkbox\n                        className=\"checkbox--btn\"\n                        label=\"Nie wybieram żadnej oferty\"\n                        checked={this.props.zadnaOfertaWybrana}\n                        onChange={event => this.props.onNoOfferSelectedChange(event.target.checked, zamowienie.zamowienieNode.id)}\n                    />\n                </GridCustom>\n                {this.state.refusingOfertaId !== null && this.renderRefusingDialog()}\n            </>\n        )\n    }\n\n    renderRefused() {\n        if (this.state.selectedTab !== TAB_INDEXES['refused']) {return null}\n        const warianty = this.props.warianty.filter(w => w.isRefused);\n        return (\n            <>\n                <Text info>Liczba wyników: {warianty.length}</Text>\n                <GridCustom tag=\"ul\">\n                    {warianty.sort(this.sortWarianty).map(w => (\n                        <FormRozstrzygniecieWariant\n                            hasOfertaManyWarianty={this.hasManyWarianty(w.ofertaId)}\n                            key={w.id}\n                            refused\n                            wariant={w}\n                            zamowienieNode={this.props.zamowienie.zamowienieNode.id}\n                            onOfferRestore={this.handleRestore}\n                        />\n                    ))}\n                </GridCustom>\n                {this.state.restoringOfertaId !== null && this.renderRestoringDialog()}\n            </>\n        )\n    }\n\n    renderRefusingDialog() {\n        return this.renderDialog(\n            'refusingOfertaId',\n            'odrzucić',\n            this.props.onOfferRefuse,\n            'Oferta zostanie odrzucona z chwilą zapisania rozstrzygnięcia.'\n        )\n    }\n\n    renderRestoringDialog() {\n        return this.renderDialog(\n            'restoringOfertaId',\n            'przywrócić',\n            this.props.onOfferRestore,\n            'Oferta zostanie przywrócona z chwilą zapisania rozstrzygnięcia.'\n        )\n    }\n\n    renderDialog(ofertaIdAttributeName, titleAdverb, callback, additionalInfo) {\n        let title = `Czy na pewno chcesz ${titleAdverb} tę ofertę`;\n        if (this.hasManyWarianty(this.state[ofertaIdAttributeName])) {\n            title += ' wraz ze wszystkimi jej wariantami?';\n        } else {\n            title += '?';\n        }\n        return (\n            <DialogCustom\n                dialogTitle={title}\n                onClose={() => this.handleCloseDialog(ofertaIdAttributeName)}\n            >\n                <>\n                    <Text>{additionalInfo}</Text>\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled cancel onClick={() => this.handleCloseDialog(ofertaIdAttributeName)}>Nie</ButtonStyled>\n                        <ButtonStyled\n                            save\n                            onClick={() => {\n                                const ofertaId = this.state[ofertaIdAttributeName];\n                                this.setState(\n                                    {[ofertaIdAttributeName]: null},\n                                    () => callback(this.props.zamowienie.zamowienieNode.id, ofertaId)\n                                );\n                            }}\n                        >Tak</ButtonStyled>\n                    </GridCustom>\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\n\nexport { FormCzescRozstrzygniecia };\n","import React, { Component } from 'react';\n\nimport { dateToString } from '../../../helpers';\nimport {\n    ButtonStyled,\n    DateCalendar,\n    FieldWithLabel,\n    GridCustom,\n    Select,\n    TextFieldCustom\n} from '../../common';\nimport { customSelectStyles } from '../../vars/vars';\n\n\n// TODO: get from backend\nconst OGLOSZENIE_STATUS_CHOICES = [\n    ['all', 'Wszystkie'],\n    ['published', 'Opublikowane'],\n    ['closed', 'Zamknięte'],\n    ['cancelled', 'Anulowane'],\n    ['resolved', 'Rozstrzygnięte'],\n];\nconst OFERTA_STATUS_CHOICES = [\n    ['all', 'Wszystkie'],\n    ['draft', 'Robocza'],\n    ['submitted', 'Złożona'],\n];\n\n\nclass FiltryOfert extends Component {\n\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            filters: props.filters,\n        };\n    }\n\n    //handlers\n\n    handleChangeFilter(name, value) {\n        this.setState(prevState => {\n            return {filters: Object.assign({}, prevState.filters, {[name]: value})}\n        });\n    }\n\n    handleApplyFilters = () => {\n        this.props.updateFilters(this.state.filters);\n    }\n\n    // rendering\n\n    render() {\n        const filters = this.state.filters;\n        const submissionDeadlineInputRef = React.createRef();\n        const announcementPublicationDateInputRef = React.createRef();\n        return (\n            <>\n                <section className=\"filters-dialog__filters-section\">\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel label=\"Tytuł ogłoszenia\" tag=\"label\" labelFor=\"filters_title_id\">\n                            <TextFieldCustom\n                                clearFieldContext=\"tytuł ogłoszenia\"\n                                value={filters.title}\n                                onChange={(ev) => this.handleChangeFilter('title', ev.target.value)}\n                                className=\"filters__input\"\n                                onClear={(ev) => this.handleChangeFilter('title', '')}\n                                id=\"filters_title_id\" />\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Numer ogłoszenia\" tag=\"label\" labelFor=\"filters_number_id\">\n                            <TextFieldCustom\n                                clearFieldContext=\"numer ogłoszenia\"\n                                value={filters.announcementNumber}\n                                onChange={(ev) => this.handleChangeFilter('announcementNumber', ev.target.value)}\n                                className=\"filters__input\"\n                                onClear={(ev) => this.handleChangeFilter('announcementNumber', '')}\n                                id=\"filters_number_id\" />\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom flexM>\n                        <FieldWithLabel label=\"Termin składania ofert\" tag=\"label\" inputRef={submissionDeadlineInputRef}>\n                            <DateCalendar\n                                dateName=\"Termin składania ofert\"\n                                parentRef={submissionDeadlineInputRef}\n                                value={Date.parse(filters.submissionDeadline)}\n                                onChange={date => this.handleChangeFilter('submissionDeadline', dateToString(date))} />\n                        </FieldWithLabel>\n                        <FieldWithLabel label=\"Data opublikowania ogłoszenia\" tag=\"label\" inputRef={announcementPublicationDateInputRef}>\n                            <DateCalendar\n                                dateName=\"Data opublikowania ogłoszenia\"\n                                parentRef={announcementPublicationDateInputRef}\n                                value={Date.parse(filters.announcementPublicationDate)}\n                                onChange={date => this.handleChangeFilter('announcementPublicationDate', dateToString(date))} />\n                        </FieldWithLabel>\n                    </GridCustom>\n                    <GridCustom fullwidth flexM>\n                        <FieldWithLabel\n                            label=\"Status ogłoszenia\"\n                            tag=\"label\"\n                            selectRef={React.createRef()}>\n                            <Select\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                className=\"select-custom\"\n                                options={OGLOSZENIE_STATUS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n                                value={{value: filters.announcementStatus.value || OGLOSZENIE_STATUS_CHOICES[0][0], label: filters.announcementStatus.label || OGLOSZENIE_STATUS_CHOICES[0][1]}}\n                                onChange={selectedOption => this.handleChangeFilter('announcementStatus', selectedOption)}\n                                styles={customSelectStyles}\n                            />\n                        </FieldWithLabel>\n                        <FieldWithLabel\n                            label=\"Status oferty\"\n                            tag=\"label\"\n                            selectRef={React.createRef()}>\n                            <Select\n                                screenReaderStatus={() => { return 'Wybierz opcję z listy rozwijanej' }}\n                                className=\"select-custom\"\n                                options={OFERTA_STATUS_CHOICES.map(s => ({value: s[0], label: s[1]}))}\n                                value={{value: filters.offerStatus.value || OFERTA_STATUS_CHOICES[0][0], label: filters.offerStatus.label || OFERTA_STATUS_CHOICES[0][1]}}\n                                onChange={selectedOption => this.handleChangeFilter('offerStatus', selectedOption)}\n                                styles={customSelectStyles}\n                            />\n                        </FieldWithLabel>\n                    </GridCustom>\n                </section>\n                <GridCustom flexEnd>\n                    <ButtonStyled onClick={this.props.closeFilters} cancel>Anuluj</ButtonStyled>\n                    <ButtonStyled onClick={this.handleApplyFilters} primary>Zastosuj kryteria</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    }\n}\n\n\nexport { FiltryOfert, OFERTA_STATUS_CHOICES, OGLOSZENIE_STATUS_CHOICES };\n","import React from 'react';\nimport '@material/form-field/dist/mdc.form-field.css';\n\nimport {\n    Box, ButtonStyled, FieldWithLabel, GridCustom, NumberTextField, Text,\n    TextFieldCustom\n} from '../../common';\n\n\nconst FormWariant = (props) => {\n    const { errors, formLocked, onlyCena, priceAutofocus, wariant } = props;\n\n    const renderCena = () => {\n        return (\n            <>\n                <NumberTextField\n                    attrName=\"cena\"\n                    autoFocus={priceAutofocus}\n                    errors={errors.cena}\n                    formLocked={formLocked}\n                    fullwidth\n                    label=\"Cena\"\n                    parentTemporaryId={wariant.temporaryId}\n                    value={wariant.cena}\n                    onChange={value => props.onChangeWariantAttribute('cena', value)} />\n\n                { errors.cena && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy!</span>}\n            </>\n        )\n    }\n\n    if (onlyCena) {\n        return renderCena()\n    }\n\n    const wariantOpisId = `wariant_${wariant.temporaryId}_opis_id`;\n    const isOpisInvalid = (errors.opis || []).length > 0;\n    return (\n        <Box flexiblewidth tag=\"li\">\n            {renderCena()}\n            <FieldWithLabel label=\"Opis\" tag=\"label\" labelFor={wariantOpisId}>\n                <TextFieldCustom\n                    aria-describedby={isOpisInvalid ? 'wariant_error' : null}\n                    aria-label={`Opis, maksymalna liczba znaków: 120. Wpisano ${wariant.opis.length} znaków.`}\n                    aria-valuemax={120}\n                    characterCount\n                    clearFieldContext=\"opis\"\n                    disabled={formLocked}\n                    fullwidth\n                    id={wariantOpisId}\n                    invalid={isOpisInvalid}\n                    maxLength={120}\n                    value={wariant.opis}\n                    onChange={ev => props.onChangeWariantAttribute('opis', ev.target.value)}\n                    onClear={ev => props.onChangeWariantAttribute('opis', '')}\n                    textarea />\n                {isOpisInvalid && (\n                    <>\n                        <ul id=\"wariant_error\">{errors.opis.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n                        <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy!</span>\n                    </>\n                )}\n            </FieldWithLabel>\n            <GridCustom flexEnd>\n                <ButtonStyled\n                    disabled={formLocked}\n                    remove\n                    onClick={props.onRemoveWariant}>Usuń<span className=\"sr-only\"> wariant</span></ButtonStyled>\n            </GridCustom>\n        </Box>\n    )\n}\n\n\nexport { FormWariant };\n","import React, { Component } from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport {\n    ButtonStyled,\n    Container,\n    GridCustom,\n    Text,\n} from '../../common';\nimport { FormDanePodmiotuFields, Zalaczniki } from '../common';\nimport { FormWariant } from './FormWariant';\n\nconst MAX_ATTACHMENTS_NUMBER = 20;\nconst MAX_WARIANTY_NUMBER = 20;\n\n\nclass FormOfertaFields extends Component {\n\n    // helpers\n\n    getWariantLasttemporaryId() {\n        let lastTemporaryId = 0;\n        for (let o of Object.values(this.props.oferty)) {\n            for (let w of o.warianty) {\n                if (w.temporaryId > lastTemporaryId) {\n                    lastTemporaryId = w.temporaryId;\n                }\n            }\n        }\n        return lastTemporaryId\n    }\n\n    getEmptyOferta() {\n        return {\n            czyWariantowe: false,\n            warianty: [this.getEmptyWariant(), ],\n        }\n    }\n\n    getEmptyWariant() {\n        return {\n            id: null,\n            temporaryId: this.getWariantLasttemporaryId(),\n            cena: '',\n            opis: '',\n        }\n    }\n\n    // rendering\n\n    render() {\n        return (\n            <>\n                {this.renderDanePodmiotu()}\n                {this.renderOferty()}\n                {this.renderZalaczniki()}\n            </>\n        )\n    }\n\n    renderDanePodmiotu() {\n        if (!this.props.withDanePodmiotuForm) { return null }\n        return (\n            <Container className=\"details-preview separate-container\">\n                <GridCustom flexEnd fullwidth>\n                    <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n                </GridCustom>\n                <FormDanePodmiotuFields\n                    data={this.props.danePodmiotu}\n                    errors={this.props.errors.danePodmiotu || {}}\n                    formLocked={this.props.formLocked}\n                    changeAttribute={this.props.changeAttribute}\n                    changeMiejscowosc={this.props.changeMiejscowosc}\n                    changeNumerIdentyfikacyjny={this.props.changeNumerIdentyfikacyjny}\n                    changeRodzajAdresu={this.props.changeRodzajAdresu}\n                />\n            </Container>\n        )\n    }\n\n    renderOferty() {\n        const zamowienia = this.props.zamowienia;\n        const ofertyErrors = (this.props.errors.oferty || {}).errors || [];\n        const isOfertyInvalid = ofertyErrors.length > 0;\n\n        return (\n            <Container className=\"separate-container\">\n                <GridCustom flexEnd fullwidth>\n                    <Text tag=\"h2\" mainHeader>Dane oferty</Text>\n                </GridCustom>\n                {isOfertyInvalid && <ul>{ofertyErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                {zamowienia.length > 1 ? (\n                    zamowienia.map(z => this.renderMultiplyOferta(z))\n                ) : this.renderSingleOferta(zamowienia[0])}\n            </Container>\n        )\n    }\n\n    renderMultiplyOferta(zamowienie) {\n        const zamowienieNodeId = zamowienie.zamowienieNode.id;\n        const oferta = this.props.oferty.filter(\n            o => o.zamowienieNode === zamowienieNodeId)[0] || null;\n        const isChecked = oferta !== null;\n        const formLocked = this.props.formLocked;\n        const czyWariantoweErrors = oferta === null ? {} : ((this.props.errors.oferty || {})[oferta.temporaryId] || {}).czyWariantowe || [];\n        const isCzyWariantoweInvalid = oferta === null ? true : czyWariantoweErrors.length > 0;\n        return (\n            <Container key={zamowienieNodeId} className={!isChecked ? 'container--no-border' : null}>\n                <GridCustom fullwidth flexM className=\"offer__btn-container\">\n                    <div className=\"offer__part-name\">\n                        <Checkbox\n                            aria-label={`Dodaj ofertę częściową do cześci ${ zamowienie.tytul }`}\n                            checked={isChecked}\n                            className=\"checkbox--btn\"\n                            disabled={formLocked}\n                            label=\"Dodaj ofertę częściową do części\"\n                            onChange={event => this.props.changeAddOferta(zamowienieNodeId, event.target.checked)}\n                        />\n                        <Text label>{zamowienie.tytul}</Text>\n                    </div>\n                    {zamowienie.czyWariantowe && isChecked && oferta !== null && (\n                        <>\n                            <Checkbox\n                                aria-describedby={isCzyWariantoweInvalid ? 'czyWariantowe_error' : null}\n                                checked={oferta.czyWariantowe}\n                                className=\"checkbox--btn\"\n                                disabled={formLocked}\n                                label={'Oferta wariantowa'}\n                                onChange={event => this.props.changeCzyWariantowa(zamowienieNodeId, event.target.checked)}\n                            />\n                            {isCzyWariantoweInvalid && (\n                                <>\n                                    <ul id=\"czyWariantowe_error\">{czyWariantoweErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n                                    <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy!</span>\n                                </>\n                            )}\n                        </>\n                    )}\n                </GridCustom>\n                {isChecked && this.renderWarianty(zamowienie, oferta)}\n            </Container>\n        )\n    }\n\n    renderSingleOferta(zamowienie) {\n        if (!zamowienie) { return null }\n        const oferta = this.props.oferty.filter(\n            o => o.zamowienieNode === zamowienie.zamowienieNode.id)[0] || null;\n        if (!oferta) { return null }\n        return (\n            <Container>\n                <GridCustom fullwidth flexM className=\"offer__btn-container\">\n                    <div className=\"offer__pz\">\n                        <Text accentHeader>Dodaj ofertę do zamówienia</Text>\n                        <Text label>{zamowienie.tytul}</Text>\n                    </div>\n                    {zamowienie.czyWariantowe && (\n                        <Checkbox\n                            checked={oferta.czyWariantowe}\n                            className=\"checkbox--btn\"\n                            disabled={this.props.formLocked}\n                            label={'Oferta wariantowa'}\n                            onChange={event => this.props.changeCzyWariantowa(zamowienie.zamowienieNode.id, event.target.checked)}\n                        />\n                    )}\n                </GridCustom>\n                {this.renderWarianty(zamowienie, oferta)}\n            </Container>\n        )\n    }\n\n    renderWarianty(zamowienie, oferta) {\n        if (zamowienie.czyWariantowe) {\n            const zamowienieNodeId = zamowienie.zamowienieNode.id;\n            const formLocked = this.props.formLocked;\n            const wariantyErrors = ((this.props.errors.oferty || {})[oferta.temporaryId] || {}).warianty || {};\n            const isWariantyInvalid = (wariantyErrors.errors || []).length > 0;\n            return (\n                <>\n                    {oferta.czyWariantowe && (\n                        <>\n                            <GridCustom fullwidth flexTop>\n                                <Text tag=\"h2\" sectionHeader>Lista wariantów</Text>\n                                {oferta.warianty.length < MAX_WARIANTY_NUMBER && (\n                                    <ButtonStyled\n                                        add\n                                        disabled={formLocked}\n                                        onClick={() => this.props.onAddWariant(zamowienieNodeId)} >\n                                        Dodaj wariant oferty\n                                    </ButtonStyled>\n                                )}\n                            </GridCustom>\n                            <Text info className=\"text--counter\">Liczba wyników: {oferta.warianty.length}</Text>\n                            <Text info>Możesz dodać maksymalnie {MAX_WARIANTY_NUMBER} wariantów.</Text>\n                            {isWariantyInvalid && (\n                                <>\n                                    <ul>{wariantyErrors.errors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>\n                                    <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy!</span>\n                                </>\n                            )}\n                            <GridCustom tag=\"ul\">\n                                {oferta.warianty.map(w => {\n                                    return (\n                                        <FormWariant\n                                            errors={wariantyErrors[w.temporaryId] || {}}\n                                            formLocked={formLocked}\n                                            key={w.temporaryId}\n                                            priceAutofocus\n                                            wariant={w}\n                                            onChangeWariantAttribute={(attrName, value) => this.props.onChangeWariantAttribute(\n                                                zamowienieNodeId, w.temporaryId, attrName, value\n                                            )}\n                                            onRemoveWariant={() => this.props.onRemoveWariant(zamowienieNodeId, w.temporaryId)}\n                                        />\n                                    )\n                                })}\n                            </GridCustom>\n                        </>\n                    )}\n                    {!oferta.czyWariantowe && this.renderSingleWariant(oferta, zamowienieNodeId)}\n                </>\n            )\n        } else {\n            return this.renderSingleWariant(oferta, zamowienie.zamowienieNode.id)\n        }\n    }\n\n    renderSingleWariant(oferta, zamowienieId) {\n        const wariant = oferta.warianty[0];\n        const wariantyErrors = ((this.props.errors.oferty || {})[oferta.temporaryId] || {}).warianty || {};\n        return (\n            <>\n                <FormWariant\n                    errors={wariantyErrors[wariant.temporaryId] || {}}\n                    formLocked={this.props.formLocked}\n                    key={wariant.temporaryId}\n                    onlyCena={true}\n                    wariant={wariant}\n                    onChangeWariantAttribute={(attrName, value) => this.props.onChangeWariantAttribute(\n                        zamowienieId, wariant.temporaryId, attrName, value\n                    )}\n                    onRemoveWariant={() => this.props.onRemoveWariant(zamowienieId, wariant.temporaryId)}\n                />\n                { wariantyErrors && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy!</span> }\n            </>\n        )\n    }\n\n    renderZalaczniki() {\n        return (\n            <Container className=\"details-preview separate-container\">\n                <Zalaczniki\n                    contextForSaving='offer'\n                    errors={this.props.errors.zalaczniki || {}}\n                    formLocked={this.props.formLocked}\n                    isPreview={false}\n                    maxLength={MAX_ATTACHMENTS_NUMBER}\n                    zalaczniki={this.props.zalaczniki}\n                    addZalacznik={this.props.changeAddZalacznik}\n                    removeZalacznik={this.props.changeRemoveZalacznik}\n                    saveZalacznikAttributes={this.props.changeSaveZalacznikAttributes}\n                >\n                    <Text info className=\"text--counter\">Liczba wyników: {this.props.zalaczniki.length}</Text>\n                    <Text info>Możesz załączyć maksymalnie {MAX_ATTACHMENTS_NUMBER} plików.</Text>\n                </Zalaczniki>\n            </Container>\n        )\n    }\n}\n\n\nexport { FormOfertaFields };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { OFERTA_STATUSES, TYP_NUMERU_IDENTYFIKACYJNEGO } from '../../../const';\nimport { fetchApi } from '../../../fetch';\nimport { getLastTemporaryIdFromList, reformatDanePodmiotu } from '../../../helpers';\nimport {\n    getSerializedObjectErrorsFormServer,\n    getSerializedObject,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    ButtonStyled,\n    Container,\n    DialogCustom,\n    GridCustom,\n    Text,\n} from '../../common';\nimport { DanePodmiotu, FormBaseComponent } from '../common';\nimport { FormOfertaFields } from './FormOfertaFields';\n\nconst RODZAJ_ADRESU_CHOICES = [\n    {\n        value: 'poland',\n        label: 'Polska',\n    },\n    {\n        value: 'abroad',\n        label: 'Zagranica',\n    },\n];\nconst TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES = [\n    {\n        value: 'nip',\n        label: 'NIP',\n    },\n    {\n        value: 'pesel',\n        label: 'PESEL',\n    },\n];\nconst EMPTY_DANE_PODMIOTU_DATA = {\n    nazwa: '',\n    rodzajAdresu: RODZAJ_ADRESU_CHOICES[0],\n    adres: {\n        kraj: 'Polska',\n        wojewodztwo: '',\n        powiat: '',\n        gmina: '',\n        miejscowosc: '',\n        kodPocztowy: '',\n        ulica: '',\n        numerDomu: '',\n    },\n    typNumeruIdentyfikacyjnego: TYP_NUMERU_IDENTYFIKACYJNEGO_CHOICES[0],\n    numerIdentyfikacyjny: '',\n};\n\n\nclass FormOferta extends FormBaseComponent {\n\n    // handlers\n\n    handleFetchUserDataSuccess = (data) => {\n        this.xhrFetch = null;\n        this.setState(\n            prevState => {\n                let oferty = [];\n                const zamowienia = this.props.zamowienia;\n                if (zamowienia.length === 1) {\n                    oferty.push(this.getEmptyOferta(1, zamowienia[0].zamowienieNode.id));\n                }\n                return {\n                    initializingOn: false,\n                    danePodmiotu: reformatDanePodmiotu(\n                        getSerializedObject(data).uzytkownik.danePodmiotu),\n                    oferty: oferty,\n                    zalaczniki: [],\n                    id: null,\n                    status: OFERTA_STATUSES.draft,\n                }\n            }\n        );\n    }\n\n    handleFetchOfferDataSuccess = (data) => {\n        this.xhrFetch = null;\n        data = getSerializedObject(\n            data, {addTemporaryId: true}\n        ).pakietOfert;\n        this.setState({\n            initializingOn: false,\n            danePodmiotu: reformatDanePodmiotu(data.danePodmiotu),\n            oferty: (data.oferty || []).map(o => {\n                o.zamowienieNode = o.zamowienieNode.id;\n                return o\n            }),\n            zalaczniki: data.zalaczniki || [],\n            id: data.id,\n            status: data.status,\n        });\n    }\n\n    handleCloseCancellingDialog = () => {\n        this.setState({cancellingOn: false});\n    }\n\n    handleCloseRemovingDialog = () => {\n        this.setState({removingOn: false});\n    }\n\n    handleCloseSubmittingDialog = () => {\n        this.setState({submittingDialogOn: false});\n    }\n\n    handleChangeAddOferta = (zamowienieNodeId, isChecked) => {\n        this.setState(prevState => {\n            if (isChecked) {\n                return {oferty: [...prevState.oferty, this.getEmptyOferta(\n                    Math.max(...[...(prevState.oferty.map(o => o.temporaryId)), 0]) + 1,\n                    zamowienieNodeId\n                )]}\n            } else {\n                return {oferty: prevState.oferty.filter(\n                    o => o.zamowienieNode !== zamowienieNodeId)}\n            }\n        });\n    }\n\n    handleChangeCzyWariantowa = (zamowienieNodeId, isChecked) => {\n        this.setState(prevState => {\n            let warianty = [];\n            if (!isChecked) {\n                warianty.push(this.getEmptyWariant());\n            }\n            return {oferty: prevState.oferty.map(o => {\n                if (o.zamowienieNode === zamowienieNodeId) {\n                    o.czyWariantowe = isChecked;\n                    o.warianty = warianty;\n                }\n                return o\n            })}\n        });\n    }\n\n    handleAddWariant = (zamowienieNodeId) => {\n        this.setState(prevState => {\n            return {oferty: prevState.oferty.map(o => {\n                if (o.zamowienieNode === zamowienieNodeId) {\n                    o.warianty = [...o.warianty, this.getEmptyWariant()];\n                }\n                return o\n            })}\n        })\n    }\n\n    handleChangeWariantAttribute = (zamowienieNodeId, temporaryId, attrName, value) => {\n        this.setState(prevState => {\n            return prevState.oferty.map(o => {\n                if (o.zamowienieNode === zamowienieNodeId) {\n                    let warianty = [];\n                    for (let w of o.warianty) {\n                        if (w.temporaryId === temporaryId) {\n                            w[attrName] = value;\n                        }\n                        warianty.push(w);\n                    }\n\n                    o.warianty = warianty;\n                }\n                return o\n            })\n        });\n    }\n\n    handleRemoveWariant = (zamowienieNodeId, temporaryId) => {\n        this.setState(prevState => {\n            return {oferty: prevState.oferty.map(o => {\n                if (o.zamowienieNode === zamowienieNodeId) {\n                    o.warianty = o.warianty.filter(w => w.temporaryId !== temporaryId);\n                }\n                return o\n            })}\n        });\n    }\n\n    handleAddZalacznik = (data) => {\n        data = data || {};\n\n        this.setState(prevState => {\n            return {zalaczniki: [...prevState.zalaczniki, {\n                id: null,\n                temporaryId: getLastTemporaryIdFromList(prevState.zalaczniki) + 1,\n                nazwa: '',\n                plik: {\n                    id: null,\n                    uri: '',\n                    nazwa: '',\n                    dataUtworzenia: '',\n                    ktoUtworzyl: {imie: '', nazwisko: ''},\n                },\n                plikDoWgrania: data.plikDoWgrania || null,\n            }]}\n        })\n    }\n\n    handleSaveZalacznikAttributes = (temporaryId, data) => {\n        this.setState((prevState) => {\n            let zalaczniki = [];\n            for (let z of prevState.zalaczniki) {\n                if (z.temporaryId === temporaryId) {\n                    z = Object.assign(z, data);\n                }\n                zalaczniki.push(z);\n            }\n            return {zalaczniki}\n        });\n    }\n\n    handleRemoveZalacznik = (temporaryId) => {\n        this.setState(prevState => {\n            return {zalaczniki: prevState.zalaczniki.filter((z) => z.temporaryId !== temporaryId)}\n        });\n    }\n\n    handleFetchSaveSuccess = (data) => {\n        super.handleFetchSaveSuccess(data);\n        data = getSerializedObject(data, {addTemporaryId: true}).pakietOfert;\n        this.setState(\n            {\n                savingOn: false,\n                isNew: false,\n                saveBtnText: 'Zapisano',\n                id: data.id,\n                status: data.status,\n                zalaczniki: data.zalaczniki,\n            },\n            () => {\n                this.saveMsgTimeout = setTimeout(() => {\n                    this.setState({saveBtnText: this.saveBtnDefaultText})\n                }, 5000)\n            }\n        );\n    }\n\n    handleShowSaveErrors = (errors) => {\n        this.xhrFetchSave = null;\n        this.setState(\n            prevState => ({\n                savingOn: false,\n                saveBtnText: this.saveBtnDefaultText,\n                errors: getSerializedObjectErrorsFormServer(\n                    errors,\n                    {\n                        ogloszenie: this.props.ogloszenieId,\n                        oferty: prevState.oferty,\n                        zalaczniki: prevState.zalaczniki,\n                    },\n                    ['oferty', 'warianty', 'zalaczniki']\n                ),\n            })\n        );\n    }\n\n    handleRemove = () => {\n        this.xhrFetch = fetchApi(\n            `/api/offerset/announcement/${this.props.ogloszenieId}`,\n            'DELETE',\n            {},\n            {},\n            this.handleFetchRemoveSuccess,\n            this.handleFetchRemoveError,\n            this.handleFetchRemoveIncorrectStatus\n        );\n    }\n\n    handleFetchRemoveSuccess = (data) => {\n        this.xhrFetch = null;\n        window.location.reload();\n    }\n\n    handleFetchRemoveError = (data) => {\n        this.xhrFetch = null;\n        this.setState({\n            removingOn: false,\n            fetchRemoveError: `Nie udało się usunąć oferty. ${translateErrorMessage(data.message)}`,\n        });\n    }\n\n    handleFetchRemoveIncorrectStatus = (status) => {\n        this.xhrFetch = null;\n        this.setState({\n            removingOn: false,\n            fetchRemoveError: `Nie udało się usunąć oferty. Wystąpił błąd o kodzie ${status}.`,\n        });\n    }\n\n    handleSubmit = () => {\n        this.setState(\n            {savingOn: true, submittingDialogOn: false, fetchSaveError: ''},\n            () => {\n                this.xhrFetchSave = fetchApi(\n                    this.getSubmitUrl(),\n                    'PUT',\n                    {},\n                    this.getSerializedDataForSubmitting(),\n                    this.handleFetchSubmitSuccess,\n                    this.handleFetchSaveError,\n                    this.handleFetchSaveIncorrectStatus,\n                    this.handleShowSaveErrors,\n                );\n            }\n        );\n    }\n\n    handleFetchSubmitSuccess = (data) => {\n        this.xhrFetchSave = null;\n        this.props.onSubmitOferta((data.offerset || {}).id || null);\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            isNew: props.isNew,\n            cancellingOn: false,\n            removingOn: false,\n            submittingDialogOn: false,\n            danePodmiotu: {},\n            oferty: [],\n            zalaczniki: [],\n            fetchRemoveError: '',\n        };\n    }\n\n    fetchInitialData = () => {\n        if (this.state.isNew) {\n            this.xhrFetch = fetchApi(\n                '/api/users/0',\n                'GET',\n                {},\n                {},\n                this.handleFetchUserDataSuccess,\n                this.handleFetchError,\n                this.handleFetchIncorrectStatus,\n            );\n        } else {\n            this.xhrFetch = fetchApi(\n                `/api/offerset/announcement/${this.props.ogloszenieId}`,\n                'GET',\n                {},\n                {},\n                this.handleFetchOfferDataSuccess,\n                this.handleFetchError,\n                this.handleFetchIncorrectStatus,\n            );\n        }\n    }\n\n    getFetchError(message) {\n        message = translateErrorMessage(message);\n        if (this.state.isNew) {\n            return `Nie udało się pobrać danych do formularza oferty. ${message}`\n        }\n        return `Nie udało się pobrać danych oferty. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        if (this.state.isNew) {\n            return `Podczas pobierania danych do formularza oferty wystąpił nieoczekiwany błąd o kodzie ${status}`\n        }\n        return `Podczas pobierania danych oferty wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    getWariantLastTemporaryId() {\n        let lastTemporaryId = 0;\n        for (let o of Object.values(this.state.oferty)) {\n            for (let w of o.warianty) {\n                if (w.temporaryId > lastTemporaryId) {\n                    lastTemporaryId = w.temporaryId;\n                }\n            }\n        }\n        return lastTemporaryId\n    }\n\n    getEmptyOferta(temporaryId, zamowienieNodeId) {\n        return {\n            id: null,\n            temporaryId,\n            zamowienieNode: zamowienieNodeId,\n            czyWariantowe: false,\n            warianty: [this.getEmptyWariant(), ],\n        }\n    }\n\n    getEmptyWariant() {\n        return {\n            id: null,\n            temporaryId: this.getWariantLastTemporaryId() + 1,\n            cena: null,\n            opis: '',\n        }\n    }\n\n    formPreState(props) {\n        this.saveBtnDefaultText = 'Zapisz wersję roboczą oferty';\n    }\n\n    getSaveUrl() {\n        return this.state.isNew ? '/api/offerset' : `/api/offerset/announcement/${this.props.ogloszenieId}`\n    }\n\n    getSaveMethod() {\n        return this.state.isNew ? 'POST' : 'PUT'\n    }\n\n    getDataForSaving() {\n        const data = {\n            oferty: this.state.oferty,\n            zalaczniki: this.state.zalaczniki.map(z => {\n                return {id: z.id, nazwa: z.nazwa, plik: z.plik.id}\n            }),\n        }\n        if (this.state.isNew) {\n            data['ogloszenie'] = this.props.ogloszenieId;\n        }\n        return getSerializedObject(data, {toServer: true});\n    }\n\n    getSubmitUrl() {\n        return `/api/offerset/announcement/${this.props.ogloszenieId}/submit`\n    }\n\n    getDataForSubmitting() {\n        return {\n            ogloszenie: this.props.ogloszenieId,\n            oferty: this.state.oferty,\n            zalaczniki: this.state.zalaczniki.map(z => {\n                return {id: z.id, nazwa: z.nazwa, plik: z.plik.id}\n            }),\n        }\n    }\n\n    getSerializedDataForSubmitting() {\n        return getSerializedObject(\n            this.getDataForSubmitting(), {toServer: true})\n    }\n\n    // rendering\n\n    renderContent() {\n        const statusOferty = this.state.status;\n        const formLocked = this.state.savingOn;\n        const { fetchSaveError, fetchRemoveError, isNew } = this.state;\n        const ogloszenieErrors = (this.state.errors || {}).ogloszenie || [];\n        const formOfertaErrors = fetchRemoveError.length > 0 || fetchSaveError.length > 0 || ogloszenieErrors.length > 0;\n\n        return (\n            <>\n                <Text tag=\"h1\" mainHeader>{isNew ? 'Utwórz' : 'Edytuj'} ofertę</Text>\n                {this.renderDanePodmiotu()}\n                <FormOfertaFields\n                    errors={this.state.errors}\n                    formLocked={formLocked}\n                    oferty={this.state.oferty}\n                    withDanePodmiotuForm={false}\n                    zalaczniki={this.state.zalaczniki}\n                    zamowienia={this.props.zamowienia}\n                    changeAddOferta={this.handleChangeAddOferta}\n                    changeCzyWariantowa={this.handleChangeCzyWariantowa}\n                    changeAddZalacznik={this.handleAddZalacznik}\n                    changeRemoveZalacznik={this.handleRemoveZalacznik}\n                    changeSaveZalacznikAttributes={this.handleSaveZalacznikAttributes}\n                    onAddWariant={this.handleAddWariant}\n                    onChangeWariantAttribute={this.handleChangeWariantAttribute}\n                    onRemoveWariant={this.handleRemoveWariant}\n                />\n                <GridCustom flexEnd fullwidth flexM flexTop>\n                    <GridCustom>\n                        <ButtonStyled\n                            cancel\n                            disabled={formLocked}\n                            onClick={(e) => {\n                                this.setState({cancellingOn: true})\n                                e.currentTarget.blur();\n                            }}>\n                            Anuluj {isNew ? 'tworzenie' : 'edycję'} oferty \n                        </ButtonStyled>\n                        {!isNew && (\n                            <ButtonStyled\n                                disabled={formLocked}\n                                remove\n                                onClick={() => this.setState({removingOn: true, fetchRemoveError: ''})}>\n                                Usuń ofertę\n                            </ButtonStyled>\n                        )}\n                        {statusOferty !== null && ['DRAFT', 'WITHDRAWN'].includes(statusOferty.label) && (\n                            <>\n                                <ButtonStyled\n                                    disabled={formLocked}\n                                    lite\n                                    onClick={this.handleSave}>\n                                    {this.state.saveBtnText}\n                                </ButtonStyled>\n                                {this.state.saveBtnText === 'Zapisano' && <span role=\"alert\" className=\"sr-only\">Zapisano!</span>}\n                            </>\n                        )}\n                    </GridCustom>\n                    <ButtonStyled\n                        className=\"btn btn--main\"\n                        disabled={formLocked || !Object.keys(this.state.danePodmiotu).length}\n                        save\n                        onClick={() => this.setState(\n                            {submittingDialogOn: true, removingOn: false, cancellingOn: false})}>\n                        Złóż ofertę\n                    </ButtonStyled>\n                </GridCustom>\n                {fetchRemoveError.length > 0 && <Text error>{fetchRemoveError}</Text>}\n                {fetchSaveError.length > 0 && <Text error>{fetchSaveError}</Text>}\n                {ogloszenieErrors.length > 0 && <ul>{ogloszenieErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                {formOfertaErrors && <span className=\"sr-only\" role=\"alert\">Formularz zawiera błędy!</span>}\n\n                {!formLocked && this.state.cancellingOn && this.renderCancelDialog()}\n                {!formLocked && this.state.removingOn && this.renderRemoveDialog()}\n                {!formLocked && this.state.submittingDialogOn && this.renderSubmitDialog()}\n            </>\n        )\n    }\n\n    renderDanePodmiotu() {\n        let content;\n        if (!Object.keys(this.state.danePodmiotu).length) {\n            content = (\n                <div role=\"status\" aria-live=\"polite\">\n                    <Text error>\n                        Nie zdefiniowano danych podmiotu dla użytkownika. Aby je ustawić, <Link to=\"/uzytkownicy/moj-profil\" className=\"link-text\">przejdź do swojego profilu</Link>.\n                    </Text>\n                    <Text error>\n                        Oferta nie będzie mogła zostać złożona. W dalszym ciągu będzie można ją zapisać.\n                    </Text>\n                </div>\n            );\n        } else {\n            content = (\n                <>\n                    <DanePodmiotu danePodmiotu={this.state.danePodmiotu} />\n                    <Text info>\n                        Te dane podmiotu zostaną dołączone do oferty. Aby je zmienić, <Link to=\"/uzytkownicy/moj-profil\" className=\"link-text\">przejdź do swojego profilu</Link> i edytuj dane podmiotu.\n                    </Text>\n                </>\n            );\n        }\n        return (\n            <Container>\n                <GridCustom flexEnd fullwidth>\n                    <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n                </GridCustom>\n                {content}\n            </Container>\n        )\n    }\n\n    renderCancelDialog() {\n        let confirmButton;\n        if (this.state.isNew) {\n            confirmButton = <ButtonStyled save tag={Link} onClick={() => window.location.reload()} to={`/ogloszenia/${this.props.ogloszenieId}`}>Tak</ButtonStyled>;\n        } else {\n            confirmButton = <ButtonStyled save onClick={() => window.location.reload()}>Tak</ButtonStyled>;\n        }\n\n        return (\n            <DialogCustom\n                dialogTitle={`Czy na pewno chcesz anulować ${this.state.isNew ? 'tworzenie' : 'edycję'} oferty? Wszystkie niezapisane dane zostaną utracone.`}\n                onClose={this.handleCloseCancellingDialog}\n            >\n                <GridCustom flexEnd>\n                    <ButtonStyled onClick={this.handleCloseCancellingDialog} cancel>Nie</ButtonStyled>\n                    {confirmButton}\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n\n    renderBaseDialog(onClose, onConfirm, title) {\n        return (\n            <DialogCustom\n                dialogTitle={title}\n                onClose={onClose}\n            >\n                <GridCustom flexEnd>\n                    <ButtonStyled cancel onClick={onClose}>Nie</ButtonStyled>\n                    <ButtonStyled save onClick={onConfirm}>Tak</ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n\n    renderRemoveDialog() {\n        return this.renderBaseDialog(\n            this.handleCloseRemovingDialog, this.handleRemove,\n            'Czy na pewno chcesz usunąć tę ofertę?'\n        )\n    }\n\n    renderSubmitDialog() {\n        return this.renderBaseDialog(\n            this.handleCloseSubmittingDialog, this.handleSubmit,\n            'Czy na pewno chcesz złożyć tę ofertę?'\n        )\n    }\n}\n\n\nclass FormOfertaOgloszeniodawca extends FormOferta {\n\n    // handlers\n\n    handleChangeRodzajAdresu = (value) => {\n        this.setState(prevState => {\n            if (value.value === prevState.danePodmiotu.rodzajAdresu.value) {\n                return {}\n            }\n            let dct = {\n                numerIdentyfikacyjny: '',\n                rodzajAdresu: value,\n            };\n            let adres = {\n                kraj: null,\n                wojewodztwo: '',\n                powiat: '',\n                gmina: '',\n                miejscowosc: '',\n            };\n            if (value.value === 'poland') {\n                adres.kraj = 'Polska';\n                dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[0];\n            } else {\n                // set abroad\n                dct['typNumeruIdentyfikacyjnego'] = TYP_NUMERU_IDENTYFIKACYJNEGO[2];\n            }\n            return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {\n                ...dct,\n                adres: Object.assign({}, prevState.danePodmiotu.adres, adres),\n            })}\n        });\n    }\n\n    handleChangeAttribute = (name, value, isAdresPart) => {\n        this.setState(prevState => {\n            let dict = {[name]: value};\n            if (name === 'typNumeruIdentyfikacyjnego' && prevState.danePodmiotu['typNumeruIdentyfikacyjnego'].value !== value.value) {\n                dict['numerIdentyfikacyjny'] = '';\n            }\n            if (isAdresPart) {\n                return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {\n                    adres: Object.assign({}, prevState.danePodmiotu.adres, dict),\n                })}\n            } else {\n                return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, dict)}\n            }\n        });\n    }\n\n    handleChangeMiejscowosc = (value) => {\n        this.setState(prevState => {\n            return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {\n                adres: Object.assign({}, prevState.danePodmiotu.adres, value)\n            })}\n        });\n    }\n\n    handleChangeNumerIdentyfikacyjny = (value, onlyDigits=false) => {\n        if (onlyDigits) {\n            value = value.replace(/[^\\d]/, '');\n        }\n        this.setState(prevState => {\n            return {danePodmiotu: Object.assign({}, prevState.danePodmiotu, {numerIdentyfikacyjny: value})}\n        });\n    }\n\n    handleSave = () => {}\n\n    handleShowSaveErrors = (errors) => {\n        this.xhrFetchSave = null;\n        this.setState(\n            prevState => ({\n                savingOn: false,\n                saveBtnText: this.saveBtnDefaultText,\n                errors: getSerializedObjectErrorsFormServer(\n                    errors,\n                    this.getDataForSubmitting(),\n                    ['oferty', 'warianty', 'zalaczniki']\n                ),\n            })\n        );\n    }\n\n    handleFetchSubmitSuccess = (data) => {\n        this.props.onSubmitForm(data, this.state.isNew);\n    }\n\n    // helpers\n\n    fetchInitialData = () => {\n        if (this.state.isNew) {\n            let data = {initializingOn: false};\n            if (this.props.zamowienia.length === 1) {\n                data['oferty'] = [this.getEmptyOferta(\n                    1, this.props.zamowienia[0].zamowienieNode.id), ];\n            }\n            this.setState(data);\n        } else {\n            this.xhrFetch = fetchApi(\n                `/api/offerset/${this.props.ofertaId}`,\n                'GET',\n                {},\n                {},\n                this.handleFetchOfferDataSuccess,\n                this.handleFetchError,\n                this.handleFetchIncorrectStatus,\n            );\n        }\n    }\n\n    getAdditionalState(props) {\n        return Object.assign(\n            super.getAdditionalState(props),\n            {danePodmiotu: Object.assign({}, EMPTY_DANE_PODMIOTU_DATA)}\n        );\n    }\n\n    formPreState(props) {\n        this.saveBtnDefaultText = 'Zapisz ofertę';\n    }\n\n    getSubmitUrl() {\n        if (this.state.isNew) {\n            return `/api/offerset/announcement/${this.props.ogloszenieId}/submit`\n        }\n        return `/api/offerset/${this.props.ofertaId}/submit`\n    }\n\n    getDataForSubmitting() {\n        const danePodmiotu = this.state.danePodmiotu;\n        const adres = danePodmiotu.adres;\n        return {\n            ogloszenie: this.props.ogloszenieId,\n            danePodmiotu: {\n                nazwa: danePodmiotu.nazwa,\n                typNumeruIdentyfikacyjnego: danePodmiotu.typNumeruIdentyfikacyjnego.value,\n                numerIdentyfikacyjny: danePodmiotu.numerIdentyfikacyjny,\n                adres: {\n                    kraj: adres.kraj,\n                    wojewodztwo: adres.wojewodztwo,\n                    powiat: adres.powiat,\n                    gmina: adres.gmina,\n                    miejscowosc: adres.miejscowosc,\n                    kodPocztowy: adres.kodPocztowy,\n                    ulica: adres.ulica,\n                    numerDomu: adres.numerDomu,\n                },\n            },\n            oferty: this.state.oferty,\n            zalaczniki: this.state.zalaczniki.map(z => {\n                return {id: z.id, temporaryId: z.temporaryId, nazwa: z.nazwa, plik: z.plik.id}\n            }),\n        }\n    }\n\n    // rendering\n\n    renderHeader() {\n        return null\n    }\n\n    renderContent() {\n        const { fetchSaveError, isNew } = this.state;\n        const ogloszenieErrors = (this.state.errors || {}).ogloszenie || [];\n        const formLocked = this.state.savingOn;\n        return (\n            <>\n                <Text tag=\"h1\" mainHeader>{isNew ? 'Dodaj' : 'Edytuj'} ofertę</Text>\n                <FormOfertaFields\n                    danePodmiotu={this.state.danePodmiotu}\n                    errors={this.state.errors}\n                    formLocked={formLocked}\n                    oferty={this.state.oferty}\n                    withDanePodmiotuForm={true}\n                    zalaczniki={this.state.zalaczniki}\n                    zamowienia={this.props.zamowienia}\n                    changeAttribute={this.handleChangeAttribute}\n                    changeMiejscowosc={this.handleChangeMiejscowosc}\n                    changeNumerIdentyfikacyjny={this.handleChangeNumerIdentyfikacyjny}\n                    changeRodzajAdresu={this.handleChangeRodzajAdresu}\n                    changeAddOferta={this.handleChangeAddOferta}\n                    changeCzyWariantowa={this.handleChangeCzyWariantowa}\n                    changeAddZalacznik={this.handleAddZalacznik}\n                    changeRemoveZalacznik={this.handleRemoveZalacznik}\n                    changeSaveZalacznikAttributes={this.handleSaveZalacznikAttributes}\n                    onAddWariant={this.handleAddWariant}\n                    onChangeWariantAttribute={this.handleChangeWariantAttribute}\n                    onRemoveWariant={this.handleRemoveWariant}\n                />\n                <GridCustom flexEnd>\n                    <ButtonStyled\n                        cancel\n                        disabled={formLocked}\n                        onClick={this.props.onCloseForm}>\n                        Anuluj {isNew ? 'tworzenie' : 'edycję'} oferty\n                    </ButtonStyled>\n                    <ButtonStyled\n                        disabled={formLocked}\n                        primary\n                        onClick={this.handleSubmit}\n                    >{this.state.saveBtnText}</ButtonStyled>\n                </GridCustom>\n                {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n                {ogloszenieErrors.length > 0 && <ul role=\"alert\">{ogloszenieErrors.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                {this.state.cancellingOn && this.renderCancelDialog()}\n            </>\n        )\n    }\n}\n\n\nexport { FormOferta, FormOfertaOgloszeniodawca };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@rmwc/icon';\n\nimport { UserContext } from '../../../context/user-context';\nimport { fetchApi } from '../../../fetch';\nimport { reformatDanePodmiotu, serializeAuditData } from '../../../helpers';\nimport {\n    getSerializedObject,\n    serializeObject,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    AuditData,\n    Box,\n    ButtonStyled,\n    Container,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Message,\n    OfferStatus,\n    Text\n} from '../../common';\nimport { BaseComponent, DanePodmiotu, ZalacznikiSelect } from '../common';\n\n\nclass Oferta extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        this.setState(\n            {zamowienia: (serializeObject(data.advertisement).zamowienia || []).map(z => {\n                return {\n                    id: z.id,\n                    zamowienieNode: z.zamowienieNode,\n                    tytul: z.tytul,\n                    czyWariantowe: z.czyWariantowe,\n                }\n            })},\n            this.getOfferData\n        );\n    }\n\n    handleFetchOfferDataSuccess = (data) => {\n        this.xhrFetch = null;\n        data = getSerializedObject(\n            data, {addTemporaryId: true}).pakietOfert;\n        if (!data) {\n            this.setState({\n                initializingOn: false,\n                fetchError: 'Nie udało się pobrać danych oferty.',\n            });\n        } else {\n            this.setState({\n                initializingOn: false,\n                danePodmiotu: data.danePodmiotu ? reformatDanePodmiotu(data.danePodmiotu) : {},\n                oferty: (data.oferty || []).map(o => {\n                    o.zamowienieNode = o.zamowienieNode.id;\n                    return o\n                }),\n                zalaczniki: data.zalaczniki || [],\n                id: data.id,\n                status: data.status,\n                auditData: serializeAuditData(data),\n            });\n        }\n    }\n\n    handleCloseWithdrawingDialog = () => {\n        this.setState({withdrawingOn: false});\n    }\n\n    handleWithdraw = () => {\n        if (this.props.preview) { return }\n\n        this.xhrFetch = fetchApi(\n            `/api/offerset/announcement/${this.props.ogloszenieId}/withdraw`,\n            'PUT',\n            {},\n            {},\n            this.handleFetchWithdrawSuccess,\n            this.handleFetchWithdrawError,\n            this.handleFetchWithdrawIncorrectStatus\n        );\n    }\n\n    handleFetchWithdrawSuccess = (data) => {\n        this.xhrFetch = null;\n        this.props.onWithdrawOferta();\n    }\n\n    handleFetchWithdrawError = (data) => {\n        this.xhrFetch = null;\n        this.setState({\n            withdrawingOn: false,\n            fetchWithdrawError: `Nie udało się wycofać oferty. ${translateErrorMessage(data.message)}`,\n        });\n    }\n\n    handleFetchWithdrawIncorrectStatus = (status) => {\n        this.xhrFetch = null;\n        this.setState({\n            withdrawingOn: false,\n            fetchWithdrawError: `Nie udało się wycofać oferty. Wystąpił błąd o kodzie ${status}.`,\n        });\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        const commonState = {\n            zamowienia: [],\n            danePodmiotu: {},\n            oferty: [],\n            zalaczniki: [],\n            auditData: {},\n        };\n        if (this.props.preview) {\n            return commonState\n        }\n        return {\n            ...commonState,\n            withdrawingOn: false,\n            fetchWithdrawError: '',\n        }\n    }\n\n    getFetchUrl() {\n        return `/api/announcements/${this.props.ogloszenieId}`\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się pobrać danych oferty. ${(message)}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się pobrać danych oferty. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    getOfferData = () => {\n        let url;\n        if (this.props.ofertaId) {\n            url = `/api/offerset/${this.props.ofertaId}`;\n        } else {\n            url = `/api/offerset/announcement/${this.props.ogloszenieId}`;\n        }\n        this.xhrFetch = fetchApi(\n            url,\n            'GET',\n            {},\n            {},\n            this.handleFetchOfferDataSuccess,\n            this.handleFetchError,\n            this.handleFetchIncorrectStatus,\n        );\n    }\n\n    // rendering\n\n    renderFetchError() {\n        if (this.props.preview) {\n            return (\n                <Message\n                    error\n                    id=\"sessionDialogLabel\"\n                    messageIcon=\"report_problem\"\n                    messageTitle={this.state.fetchError}>\n                    <ButtonStyled primary onClick={this.props.onClosePreview}>OK</ButtonStyled>\n                </Message>\n            )\n        }\n        return super.renderFetchError()\n    }\n\n    renderHeader() {\n        if (this.state.initializingOn || this.state.fetchError.length) { return null }\n\n        const {label, nazwa} = this.state.status;\n\n        return (\n            <>\n                {this.props.preview && (\n                    <ButtonStyled\n                        className=\"dialog-long-content__close\"\n                        primary\n                        onClick={this.props.onClosePreview}>\n                        Zamknij podgląd\n                    </ButtonStyled>\n                )}\n                <OfferStatus\n                    statusIcon={label === 'DRAFT' ? 'assignment' : (label === 'SUBMITTED' ? 'assignment_turned_in' : 'assignment_return')}\n                    statusName={nazwa} />\n                <Text tag=\"h2\" mainHeader>Podgląd oferty</Text>\n            </>\n        )\n    }\n\n    renderContent() {\n        return (\n            <>\n                {this.renderDanePodmiotu()}\n                {this.renderOferty()}\n                {this.renderZalaczniki()}\n                {!this.props.preview && (\n                    <>\n                        {this.renderActionsButtons()}\n                        {this.state.withdrawingOn && this.renderWithdrawDialog()}\n                    </>\n                )}\n                {this.state.danePodmiotu.ktoUtworzyl.id === this.context.user.id &&\n                    <AuditData {...this.state.auditData} />\n                }\n            </>\n        )\n    }\n\n    renderDanePodmiotu() {\n        let content;\n        if (!Object.keys(this.state.danePodmiotu).length) {\n            content = (\n                <Text error>\n                    Nie zdefiniowano danych podmiotu dla użytkownika. Aby je ustawić, <Link to=\"/uzytkownicy/moj-profil\" className=\"link-text\">przejdź do swojego profilu</Link>.\n                </Text>\n            );\n        } else {\n            content = (\n                <>\n                    <DanePodmiotu danePodmiotu={this.state.danePodmiotu} />\n                    <Text info>Te dane podmiotu zostaną dołączone do oferty.</Text>\n                </>\n            );\n        }\n        return (\n            <Container>\n                <Text tag=\"h2\" mainHeader>Dane podmiotu</Text>\n                {content}\n            </Container>\n        )\n    }\n\n    renderOferty() {\n        const zamowienia = this.state.zamowienia;\n        return (\n            <Container className=\"details-preview separate-container\">\n                <GridCustom flexEnd fullwidth>\n                    <Text tag=\"h2\" mainHeader>Dane oferty</Text>\n                </GridCustom>\n                {zamowienia.length > 1 ? (\n                    zamowienia.map(z => this.renderMultiplyOferta(z))\n                ) : this.renderSingleOferta()}\n            </Container>\n        )\n    }\n\n    renderMultiplyOferta(zamowienie) {\n        const oferta = this.state.oferty.filter(o => o.zamowienieNode === zamowienie.zamowienieNode.id)[0] || null;\n        if (!oferta) {\n            return (\n                <div key={zamowienie.id} className=\"offer__part-name offer__part-name--offer-details offer__part-name--no-offer\">\n                    <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"cancel\" /> Oferta częściowa do części</Text>\n                    <Text label>{zamowienie.tytul} <span>- brak</span></Text>\n                </div>\n            )\n        }\n        return (\n            <Container key={oferta.id} fullwidth>\n                <GridCustom flexEnd fullwidth>\n                    <div className=\"offer__part-name offer__part-name--offer-details\">\n                        <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta częściowa do części</Text>\n                        <Text label>{zamowienie.tytul}</Text>\n                    </div>\n                    {oferta.czyWariantowe && <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta wariantowa</Text>}\n                </GridCustom>\n                {oferta.czyWariantowe ? this.renderWariantowa(oferta) : this.renderNiewariantowa(oferta)}\n            </Container>\n        )\n    }\n\n    renderWariantowa(oferta) {\n        return (\n            <>\n                <Text tag=\"h2\" sectionHeader>Lista wariantów</Text>\n                <Text info>Liczba wyników: {oferta.warianty.length}</Text>\n                <GridCustom tag=\"ul\">\n                    {oferta.warianty.map(w => (\n                        <Box key={w.id} tag=\"li\" titleOneRow={`${w.cena} PLN`} flexiblewidth>\n                            {w.opis.length > 0 && (\n                                <FieldWithLabel label=\"Opis\">\n                                    <Text className=\"long-text\">{w.opis}</Text>\n                                </FieldWithLabel>\n                            )}\n                        </Box>\n                    ))}\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderNiewariantowa(oferta) {\n        return (\n            <FieldWithLabel label=\"Cena\">\n                <Text>{oferta.warianty[0].cena} PLN</Text>\n            </FieldWithLabel>\n        )\n    }\n\n    renderSingleOferta() {\n        const oferta = this.state.oferty[0];\n        return (\n            <Container key={oferta.id} fullwidth>\n                <GridCustom flexEnd fullwidth>\n                    <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta do ogłoszenia</Text>\n                    {oferta.czyWariantowe && <Text className=\"text--btn\"><Icon aria-hidden=\"true\" icon=\"check_box\" /> Oferta wariantowa</Text>}\n                </GridCustom>\n                {oferta.czyWariantowe ? this.renderWariantowa(oferta) : this.renderNiewariantowa(oferta)}\n            </Container>\n        )\n    }\n\n    renderZalaczniki() {\n        const { zalaczniki, id } = this.state;\n        return (\n            <Container className=\"details-preview separate-container\">\n                <Text tag=\"h2\" sectionHeader>Załączniki</Text>\n                <Text info className=\"text--counter\">Liczba wyników: {zalaczniki.length}</Text>\n                <ZalacznikiSelect zalaczniki={zalaczniki} offersetId={id} />\n            </Container>\n        )\n    }\n\n    renderActionsButtons() {\n        if (this.state.status.label !== 'SUBMITTED') { return null }\n        const withdrawingError = this.state.fetchWithdrawError;\n        return (\n            <>\n                <GridCustom flexEnd>\n                    <ButtonStyled\n                        lite\n                        onClick={() => this.setState({withdrawingOn: true, fetchWithdrawError: ''})}>\n                        Wycofaj ofertę\n                    </ButtonStyled>\n                </GridCustom>\n                <GridCustom flexEnd>\n                    {withdrawingError.length > 0 && <Text error>{withdrawingError}</Text>}\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderWithdrawDialog() {\n        return (\n            <DialogCustom \n                dialogTitle=\"Czy na pewno chcesz wycofać tę ofertę?\"\n                onClose={this.handleCloseWithdrawingDialog}\n            >\n                <GridCustom flexEnd>\n                    <ButtonStyled cancel onClick={this.handleCloseWithdrawingDialog}>Nie</ButtonStyled>\n                    <ButtonStyled primary onClick={this.handleWithdraw}>Tak</ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n}\n\n\nOferta.contextType = UserContext;\n\nexport { Oferta };\n","import React from 'react';\n\nimport { getPricesRange } from '../../../helpers';\nimport { Box, FieldWithLabel, Text } from '../../common';\nimport { ZalacznikiSelect } from '../common';\n\n\nconst OfertaBox = (props) => {\n    const { className, oferta } = props;\n    const { danePodmiotu, warianty } = oferta;\n\n    let myOfferLabel = null;\n    if (props.showMyOfferLabel) {\n        myOfferLabel = <Text className=\"offer__my-offer-label\">Moja oferta</Text>;\n    }\n\n    let cena;\n    let opis = null;\n    if (props.showFullVariants) {\n        if (warianty.length > 1) {\n            cena = (\n                <ul>\n                    {warianty.map((w, i) => (\n                        <li key={i} className=\"variant\">\n                            <Text className=\"variant__price\">{i + 1}. {w.cena} PLN</Text>\n                            <Text className=\"long-text variant__content\">{w.opis}</Text>\n                        </li>\n                    ))}\n                </ul>\n            );\n        } else {\n            cena = `${warianty[0].cena} PLN`;\n        }\n        if (props.isSelected && warianty[0].opis.length > 0) {\n            opis = (\n                <FieldWithLabel label=\"Opis\" tag=\"label\">\n                    <Text className=\"long-text\">{warianty[0].opis}</Text>\n                </FieldWithLabel>\n            )\n        }\n    } else {\n        if (warianty.length > 1) {\n            const prices = getPricesRange(warianty.map(w => w.cena))\n            cena = `${prices.min} - ${prices.max} PLN (${warianty.length} warianty)`;\n        } else {\n            cena = `${warianty[0].cena} PLN`;\n        }\n    }\n\n    let zalaczniki = null;\n    if (props.showAttachments) {\n        zalaczniki = (\n            <FieldWithLabel\n                label=\"Załączniki\"\n                tag=\"label\"\n                selectRef={oferta.zalaczniki.length > 0 ? React.createRef() : null}>\n                <ZalacznikiSelect zalaczniki={oferta.zalaczniki} offersetId={oferta.pakietId}/>\n            </FieldWithLabel>\n        );\n    }\n\n    const adres = danePodmiotu.adres || {};\n    return (\n        <Box\n            flexiblewidth\n            className={className}\n            tag=\"li\"\n            titleOneRow={(\n                <>\n                    Oferta {danePodmiotu.nazwa}\n                    {myOfferLabel}\n                </>\n            )}\n        >\n            {oferta.isRefused && <Text error><span className=\"sr-only\">Ta oferta jest </span>Odrzucona</Text>}\n            <>\n                <FieldWithLabel label=\"Nazwa podmiotu\" tag=\"label\">\n                    <Text>{danePodmiotu.nazwa}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Miejscowość\" tag=\"label\">\n                    <Text>{`${adres.miejscowosc || ''}${adres.kraj === 'Polska' ? '' : ', ' + (adres.kraj || '')}`}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Cena\" tag=\"label\">{cena}</FieldWithLabel>\n                {opis}\n                {zalaczniki}\n            </>\n        </Box>\n    )\n};\n\n\nexport { OfertaBox }\n","import React from 'react';\nimport { Oferta } from './Oferta';\nimport { DialogCustom } from '../../common';\n\n\nconst OfertaPreview = (props) => {\n    return (\n        <DialogCustom\n            className=\"dialog-long-content\"\n            onClose={props.onClosePreview}\n        >\n            <Oferta\n                ogloszenieId={props.ogloszenieId}\n                ofertaId={props.ofertaId}\n                preview={true}\n                onClosePreview={props.onClosePreview} />\n        </DialogCustom>\n    )\n};\n\n\nexport { OfertaPreview }\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { getOffersFiltersCount } from '../../../filters';\nimport { isAdvertisementLocked } from '../../../helpers';\nimport { Box, Breadcrumps, ButtonStyled, FieldWithLabel, GridCustom, Text } from '../../common';\nimport { PaginatedBaseComponent } from '../common';\nimport { FiltryOfert, OFERTA_STATUS_CHOICES, OGLOSZENIE_STATUS_CHOICES } from './FiltryOfert';\nimport { OfertaPreview } from './OfertaPreview';\nimport { BadgeAnchor, Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\n\nclass Oferty extends PaginatedBaseComponent {\n\n    // handlers\n\n    handleClosePreview = () => {\n        this.setState({\n            previewOn: false,\n            previewedOfferAnnouncementId: null,\n        });\n    }\n\n    // helpers\n\n    preState(props) {\n        super.preState(props);\n        this.objectsName = 'pakietyOfert';\n        this.sortingValues = [\n            ['announcementTitle_asc', 'Po tytule ogłoszenia rosnąco'],\n            ['announcementTitle_desc', 'Po tytule ogłoszenia malejąco'],\n            ['announcementNumber_asc', 'Po numerze ogłoszenia rosnąco'],\n            ['announcementNumber_desc', 'Po numerze ogłoszenia malejąco'],\n            ['submissionDeadline_asc', 'Po terminie składania ofert rosnąco'],\n            ['submissionDeadline_desc', 'Po terminie składania ofert malejąco'],\n            ['announcementStatus_asc', 'Po statusie ogłoszenia rosnąco'],\n            ['announcementStatus_desc', 'Po statusie ogłoszenia malejąco'],\n            ['offerStatus_asc', 'Po statusie oferty rosnąco'],\n            ['offerStatus_desc', 'Po statusie oferty malejąco'],\n            ['announcementPublicationDate_asc', 'Po dacie publikacji ogłoszenia rosnąco'],\n            ['announcementPublicationDate_desc', 'Po dacie publikacji ogłoszenia malejąco'],\n        ];\n        this.sortingLabel = 'Sortuj oferty';\n        this.filteringLabel = 'Filtruj listę';\n        this.filtersComponentClass = FiltryOfert;\n\n        this.getFiltersCount = getOffersFiltersCount;\n    }\n\n    getAdditionalState(props) {\n        let selectedSort;\n        for (let s of this.sortingValues) {\n            if (s[0] === 'submissionDeadline_desc') {\n                selectedSort = s;\n                break\n            }\n        }\n        return {\n            ...super.getAdditionalState(props),\n            selectedSort: {value: selectedSort[0], label: selectedSort[1]},\n            objects: {},\n            filters: this.getEmptyFilters(),\n            previewOn: false,\n            previewedOfferAnnouncementId: null,\n        }\n    }\n\n    getFetchUrl() {\n        return '/api/offerset/my'\n    }\n\n    getFetchData() {\n        let queryDict = super.getFetchData();\n\n        // set filters values\n        const emptyFilters = this.getEmptyFilters();\n        for (let [name, value] of Object.entries(this.state.filters)) {\n            if (['announcementStatus', 'offerStatus'].includes(name)) {\n                if (value.value !== 'all') {\n                    queryDict[name] = value.value.toUpperCase();\n                }\n            } else if (value !== emptyFilters[name]) {\n                queryDict[name] = value.trim();\n            }\n        }\n\n        return queryDict\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się pobrać ofert. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania ofert wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    getEmptyFilters() {\n        return {\n            title: '',\n            submissionDeadline: '',\n            announcementPublicationDate: '',\n            announcementNumber: '',\n            announcementStatus: {value: OGLOSZENIE_STATUS_CHOICES[0][0], label: OGLOSZENIE_STATUS_CHOICES[0][1]},\n            offerStatus: {value: OFERTA_STATUS_CHOICES[0][0], label: OFERTA_STATUS_CHOICES[0][1]},\n        }\n    }\n\n    // rendering\n\n    renderHeader() {\n        document.title = \"Baza Konkurencyjności - oferty\";\n        return (\n            <Breadcrumps notZarzadzanieTrescia>\n                <li className=\"breadcrumps__current\">Moje oferty</li>\n            </Breadcrumps>\n        )\n    }\n\n    renderFiltersCount() {\n        return this.getFiltersCount(this.state.filters, this.getEmptyFilters())\n    }\n\n    renderEmptyObjects() {\n        return <Text info>Brak ofert spełniających kryteria wyszukiwania.</Text>\n    }\n\n    renderList() {\n        const total = this.state.total;\n        let ofertaLabel = '';\n        if (total === 1) {\n            ofertaLabel = 'ofertę';\n        } else {\n            const totalString = total.toString();\n            if (['2', '3', '4'].includes(totalString.slice(totalString.length - 1))) {\n                ofertaLabel = 'oferty';\n            } else {\n                ofertaLabel = 'ofert';\n            }\n        }\n        return (\n            <>\n                <Text accentHeader tag=\"h2\" className=\"offer__count\">Znaleziono {total < this.paginateBy ? '' : 'około '}{total} {ofertaLabel}</Text>\n                <GridCustom tag=\"ul\">\n                    {this.state.objects.map(pakietOfert => this.renderPakietOfert(pakietOfert))}\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderPakietOfert(pakietOfert) {\n        const { dataOpublikowania, numer, status } = pakietOfert.ogloszenie;\n        // only published and closed statuses of announcement can show more content\n        const zamowieniaNodes = (pakietOfert.oferty || []).map(o => o.zamowienieNode);\n        const wersja = pakietOfert.ogloszenie.wersja || {};\n        const ogloszenieId = pakietOfert.ogloszenie.id;\n        const offerSubtitle = (\n            <><span className=\"sr-only\">Oferta złożona do ogłoszenia: </span>{numer}</>\n        )\n        const isLocked = isAdvertisementLocked(status);\n\n        return (\n            <Box\n                className=\"offer__box\"\n                flexiblewidth\n                headerTag=\"h3\"\n                key={pakietOfert.id}\n                subtitle={offerSubtitle}\n                tag=\"li\"\n                titleTwoRows={isLocked ? '' : `Data opublikowania: ${dataOpublikowania}`}\n            >\n                <GridCustom fullwidth>\n                    <FieldWithLabel label=\"Status ogłoszenia\">\n                        <Text>{status.nazwa}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Termin składania ofert\">\n                        {isLocked ? <Text className=\"offer__box-hidden-text\"></Text> : <Text>{wersja.terminOfert}</Text>}\n                    </FieldWithLabel>\n                </GridCustom>\n                <GridCustom fullwidth>\n                    <FieldWithLabel label=\"Tytuł ogłoszenia\">\n                        {isLocked ? <Text className=\"offer__box-hidden-text\"></Text> : <Text className=\"long-text\">{wersja.tytul}</Text>}\n                    </FieldWithLabel>\n                </GridCustom>\n                <GridCustom fullwidth>\n                    <FieldWithLabel label=\"Status oferty\">\n                        <Text>{pakietOfert.status.nazwa}</Text>\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Części, których dotyczy oferta\">\n                        {isLocked ? <Text className=\"offer__box-hidden-text\"></Text> :\n                            (wersja.zamowienia || []).length < 2 ? 'Całe ogłoszenie' :\n                                zamowieniaNodes.map(z => (\n                                    <Text key={z.id}>- {z.ostatniaWersja.tytul || ''}</Text>)\n                            )\n                        }\n                    </FieldWithLabel>\n                </GridCustom>\n                <div className=\"btn-container\">\n                    <ButtonStyled\n                        disabled={isLocked}\n                        primary\n                        onClick={(e) => {\n                            this.setState({previewOn: true, previewedOfferAnnouncementId: ogloszenieId});\n                            e.currentTarget.blur();\n                        }}>\n                        Podgląd oferty\n                    </ButtonStyled>\n                    <BadgeAnchor style={{width: '100%'}}>\n                        <ButtonStyled\n                            disabled={isLocked}\n                            primary\n                            tag={Link}\n                            to={`/ogloszenia/${ogloszenieId}`}>\n                            Przejdź do szczegółów ogłoszenia\n                        </ButtonStyled>\n                        {pakietOfert.badge_count > 0 && <Badge label={pakietOfert.badge_count} />}\n                    </BadgeAnchor>\n                </div>\n            </Box>\n        )\n    }\n\n    renderAdditionalAfterBaseContent() {\n        return this.state.previewOn ? this.renderPreview() : null\n    }\n\n    renderPreview() {\n        return <OfertaPreview\n            ogloszenieId={this.state.previewedOfferAnnouncementId}\n            onClosePreview={this.handleClosePreview} />\n    }\n}\n\n\nexport { Oferty };\n","import React from 'react';\n\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { ButtonStyled, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { FormRozstrzygniecie } from '../ogloszenia';\nimport { OfertaBox } from './OfertaBox';\nimport { OfertaPreview } from './OfertaPreview';\n\n\nclass OfertyOwnerClosedStatus extends BaseComponent {\n    showAttachments = true;\n    showFullVariants = true;\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        const serializedData =  getSerializedObject(data);\n\n        if (this.props.setAdvertisementManagerType && data.extra && Object.keys(data.extra).length) {\n            this.props.setAdvertisementManagerType({\n                isAuthor: data.extra.is_advertiser, isAdmin: data.extra.is_admin\n            });\n        }\n\n        this.setState({\n            initializingOn: false,\n            pakietyOfert: serializedData.pakietyOfert,\n        });\n    }\n\n    handleMyOfferButtonClick = () => {\n        if (this.props.isAdvertisementOwner && !this.props.onlyAdmin) { return }\n        this.setState({previewOn: true});\n    }\n\n    handleClosePreview = () => {\n        this.setState({previewOn: false});\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            formOn: false,\n            previewOn: false,\n            pakietyOfert: [],\n        }\n    }\n\n    getFetchUrl() {\n        return `/api/offerset/announcement/${this.props.ogloszenie.ogloszenie.id}/list`\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać danych ofert. ${translateErrorMessage(message)}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się pobrać danych ofert. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    sortOferty(oferta1, oferta2) {\n        return oferta1.danePodmiotu.nazwa.localeCompare(oferta2.danePodmiotu.nazwa, 'pl')\n    }\n\n    sortWarianty(wariant1, wariant2) {\n        return wariant1.cena - wariant2.cena\n    }\n\n    // rendering\n\n    renderElements() {\n        const isAdvertisementOwner = this.props.isAdvertisementOwner;\n        if (isAdvertisementOwner && this.state.formOn) {\n            return <FormRozstrzygniecie {...this.props} isNew={true} pakietyOfert={this.state.pakietyOfert} />\n        }\n        const onlyAdmin = this.props.onlyAdmin;\n        return (\n            <>\n                {onlyAdmin && this.renderMyOfferButton()}\n                {this.renderContent()}\n                {isAdvertisementOwner && (\n                    <GridCustom flexEnd>\n                        <ButtonStyled primary onClick={() => this.setState({formOn: true})} className=\"btn btn--main\" icon=\"verified_user\">Dodaj rozstrzygnięcie</ButtonStyled>\n                    </GridCustom>\n                )}\n                {onlyAdmin && this.state.previewOn && this.renderPreview()}\n            </>\n        )\n    }\n\n    renderMyOfferButton() {\n        if (this.state.pakietyOfert.filter(\n                po => po.ktoUtworzyl.id === this.props.user.id).length) {\n            return (\n                <GridCustom flexEnd>\n                    <ButtonStyled primary onClick={this.handleMyOfferButtonClick}>\n                        Szczegóły mojej oferty\n                    </ButtonStyled>\n                </GridCustom>\n            )\n        }\n        return null\n    }\n\n    renderContent() {\n        const zamowienia = this.props.ogloszenie.zamowienia;\n        if (zamowienia.length > 1) {\n            return zamowienia.map(z => this.renderZamowienie(z, true))\n        }\n        return this.renderZamowienie(zamowienia[0], false)\n    }\n\n    renderZamowienie(zamowienie, isMultiply) {\n        return (\n            <div key={zamowienie.id} className=\"offer__list\">\n                <div className=\"offer-resolve__name\">\n                    <Text tag=\"h2\" sectionHeader>Lista złożonych ofert{isMultiply && ` do części:`}</Text>\n                    {isMultiply && <Text label>{zamowienie.tytul}</Text>}\n                </div>\n                {this.renderOferty(zamowienie, isMultiply)}\n            </div>\n        )\n    }\n\n    renderOferty(zamowienie, isMultiply) {\n        let oferty = [];\n        for (let po of this.state.pakietyOfert) {\n            for (let o of po.oferty) {\n                if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n                    let oferta = Object.assign({}, o, {\n                        oferentId: po.ktoUtworzyl.id,\n                        danePodmiotu: po.danePodmiotu,\n                        zalaczniki: po.zalaczniki,\n                        pakietId: po.id\n                    });\n                    oferty.push(oferta);\n                    break\n                }\n            }\n        }\n        if (!oferty.length) {\n            return (\n                <div className=\"offer__list\">\n                    <Text info className=\"text--counter\">Liczba wyników: 0</Text>\n                    <Text error>Nie złożono żadnej oferty{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n                </div>\n            )\n        }\n        return (\n            <>\n                <Text info>Liczba wyników: {oferty.length}</Text>\n                <GridCustom tag=\"ul\">\n                    {oferty.sort(this.sortOferty).map(o => this.renderOferta(o))}\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderOferta(oferta) {\n        const userId = this.props.user.id;\n        const showMyOfferLabel = this.props.isAdvertisementOwner ? false : (\n            !!userId ? oferta.oferentId === userId : false);\n        return this.renderOfertaBox(oferta, showMyOfferLabel)\n    }\n\n    renderOfertaBox(oferta, showMyOfferLabel, isSelected=false) {\n        return <OfertaBox\n                   className={isSelected ? 'box--selected' : ''}\n                   isSelected={isSelected}\n                   key={oferta.id}\n                   oferta={oferta}\n                   showAttachments={this.showAttachments}\n                   showFullVariants={this.showFullVariants}\n                   showMyOfferLabel={showMyOfferLabel} />\n    }\n\n    renderPreview() {\n        return <OfertaPreview\n            ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n            onClosePreview={this.handleClosePreview} />\n    }\n}\n\n\nexport { OfertyOwnerClosedStatus };\n","import React from 'react';\n\nimport { OfertyOwnerClosedStatus } from './OfertyOwnerClosedStatus';\n\n\nclass OfertyOffererClosedStatus extends OfertyOwnerClosedStatus {\n    showAttachments = false;\n    showFullVariants = false;\n\n    // rendering\n\n    renderElements() {\n        return (\n            <>\n                {this.renderMyOfferButton()}\n                {this.renderContent()}\n                {this.state.previewOn && this.renderPreview()}\n            </>\n        )\n    }\n}\n\n\nexport { OfertyOffererClosedStatus };\n","import React from 'react';\n\nimport { OFERTA_STATUSES } from '../../../const';\nimport { getSerializedObject, translateErrorMessage } from '../../../serializers';\nimport { ButtonStyled, DialogCustom, GridCustom, Text } from '../../common';\nimport { BaseComponent } from '../common';\nimport { FormOferta } from './FormOferta';\nimport { Oferta } from './Oferta';\n\n\nclass OfertyOffererPublishedStatus extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n\n        const serializedData = getSerializedObject(data, {addTemporaryId: true});\n        const pakietOfert = serializedData.pakietOfert;\n        if (!pakietOfert) {\n            this.setState({initializingOn: false});\n            return\n        }\n\n        this.setState({\n            initializingOn: false,\n            formOn: ['DRAFT', 'WITHDRAWN'].includes(pakietOfert.status.label),\n            pakietOfert: pakietOfert,\n        });\n    }\n\n    handleCloseForm = () => {\n        this.setState(\n            {formOn: false},\n            () => this.handleReload()\n        );\n    }\n\n    handleWithdrawOferta = () => {\n        this.setState(prevState => ({\n            formOn: true,\n            withdrawingOfferConfirmationOn: true,\n            submittingOfferConfirmationOn: false,\n            pakietOfert: Object.assign(\n                {}, prevState.pakietOfert, {status: OFERTA_STATUSES.withdrawn}),\n        }));\n    }\n\n    handleCloseWithdrawingOfferConfirmationDialog = () => {\n        window.location.reload();\n    }\n\n    handleSubmitOferta = (offerSetId) => {\n        this.setState(prevState => ({\n            formOn: false,\n            withdrawingOfferConfirmationOn: false,\n            submittingOfferConfirmationOn: true,\n            pakietOfert: Object.assign(\n                {}, prevState.pakietOfert, {status: OFERTA_STATUSES.submitted, id: offerSetId}),\n        }));\n    }\n\n    handleCloseSubmittingOfferConfirmationDialog = () => {\n        window.location.reload();\n    }\n\n    handleReload = () => {\n        this.setState(\n            {initializingOn: true, fetchError: '', pakietOfert: null},\n            () => {this.fetchInitialData()}\n        );\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            formOn: false,\n            withdrawingOfferConfirmationOn: false,\n            submittingOfferConfirmationOn: false,\n            pakietOfert: null,\n        }\n    }\n\n    getFetchUrl() {\n        return `/api/offerset/announcement/${this.props.ogloszenie.ogloszenie.id}`\n    }\n\n    getFetchError(message) {\n        return `Nie udało się pobrać danych oferty. ${translateErrorMessage(message)}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się pobrać danych oferty. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    // rendering\n\n    renderContent() {\n        if (this.state.formOn) {\n            return (\n                <>\n                    <FormOferta\n                        isNew={this.state.pakietOfert === null}\n                        ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n                        zamowienia={this.props.ogloszenie.zamowienia}\n                        onCloseForm={this.handleCloseForm}\n                        onSubmitOferta={this.handleSubmitOferta}\n                    />\n                    {this.state.withdrawingOfferConfirmationOn && this.renderWithdrawingOfferConfirmationDialog()}\n                </>\n            )\n        }\n        const { pakietOfert } = this.state;\n        if (!pakietOfert || !pakietOfert.id) {\n            return (\n                <div className=\"login-info-container\">\n                    <ButtonStyled add onClick={() => this.setState({formOn: true})} className=\"btn btn--main\">Utwórz ofertę</ButtonStyled>\n                </div>\n            )\n        }\n        return (\n            <>\n                <Oferta ogloszenieId={this.props.ogloszenie.ogloszenie.id} onWithdrawOferta={this.handleWithdrawOferta} />\n                {this.state.submittingOfferConfirmationOn && this.renderSubmittingOfferConfirmationDialog()}\n            </>\n        )\n    }\n\n    renderBaseDialog(onClose, title, content) {\n        return (\n            <DialogCustom\n                dialogTitle={title}\n                onClose={onClose}\n            >\n                <>\n                    {content}\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled primary onClick={onClose}>OK</ButtonStyled>\n                    </GridCustom>\n                </>\n            </DialogCustom>\n        )\n    }\n\n    renderWithdrawingOfferConfirmationDialog() {\n        return this.renderBaseDialog(\n            this.handleCloseWithdrawingOfferConfirmationDialog,\n            'Wycofałeś ofertę.',\n            (\n                <GridCustom>\n                    <Text>Możesz ją teraz usunąć lub edytować i ponownie złożyć.</Text>\n                    <Text>Możesz również zrezygnować z edycji oferty i opuścić zakładkę.</Text>\n                </GridCustom>\n            )\n        )\n    }\n\n    renderSubmittingOfferConfirmationDialog() {\n        return this.renderBaseDialog(\n            this.handleCloseSubmittingOfferConfirmationDialog,\n            'Oferta została złożona.', null\n        )\n    }\n}\n\n\nexport { OfertyOffererPublishedStatus };\n","import React, { Component } from 'react';\nimport { Document, Page, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { splitLineByChar } from '../../../helpers';\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\n\n\nclass OfertyResolvedStatusPdf extends Component {\n\n    // helpers\n\n    checkRefused(offerId) {\n        let isRefused = false;\n        for (let z of this.props.rozstrzygniecie.zamowieniaNodes) {\n            for (let o of z.oferty) {\n                if (o.id === offerId) {\n                    isRefused = o.isRefused;\n                    break\n                }\n            }\n        }\n        return isRefused\n    }\n\n    // rendering\n\n    render() {\n        return (\n            <Document>\n                <Page size=\"A4\" style={pdfStyles.mainPdfContainerStyle} wrap>\n                    <PdfHeader />\n                    <View>\n                        <Text style={pdfStyles.labelStyle}>Rozstrzygnięcie ogłoszenia</Text>\n                        <Text>{this.props.tytulOgloszenia}</Text>\n                        {this.renderContent()}\n                        {this.renderKomentarz()}\n                    </View>\n                </Page>\n            </Document>\n        )\n    }\n\n    renderContent() {\n        if (this.props.zamowienia.length > 1) {\n            return this.props.zamowienia.map(z => this.renderZamowienie(z, true))\n        }\n        return this.renderZamowienie(this.props.zamowienia[0], false)\n    }\n\n    renderZamowienie(zamowienie, isMultiply) {\n        return (\n            <View key={zamowienie.id}>\n                <Text style={pdfStyles.labelHeaderStyle}>\n                    Rozstrzygnięcie{isMultiply ? ` części: ${zamowienie.tytul}` : ''}\n                </Text>\n                {this.renderSelectedOferta(zamowienie, isMultiply)}\n                {this.renderOferty(zamowienie, isMultiply)}\n            </View>\n        )\n    }\n\n    renderSelectedOferta(zamowienie, isMultiply) {\n        const zamowienieFromRozstrzygniecie = (\n            this.props.rozstrzygniecie.zamowieniaNodes || []).filter(\n                z => z.id === zamowienie.zamowienieNode.id)[0];\n        if (!zamowienieFromRozstrzygniecie || !zamowienieFromRozstrzygniecie.wybranyWariant) {\n            return <Text>{isMultiply ? `Dla części: \"${zamowienie.tytul}\" nie` : 'Nie'} wybrano żadnej oferty.</Text>\n        }\n\n        const selectedWariantId = zamowienieFromRozstrzygniecie.wybranyWariant.id;\n        let selectedPakietOfert = null;\n        let selectedOferta = null;\n        let selectedWariant = null;\n        for (let po of this.props.pakietyOfert) {\n            for (let o of po.oferty) {\n                for (let w of o.warianty) {\n                    if (w.id === selectedWariantId) {\n                        selectedPakietOfert = po;\n                        selectedOferta = o;\n                        selectedWariant = w;\n                        break\n                    }\n                }\n                if (selectedWariant !== null) {\n                    break\n                }\n            }\n            if (selectedWariant !== null) {\n                break\n            }\n        }\n\n        if (!selectedWariant) {\n            return <Text error role=\"alert\">Wystąpił nieoczekiwany błąd.</Text>\n        }\n\n        let header;\n        if (isMultiply) {\n            header = `Dla części: \"${zamowienie.tytul}\" została wybrana oferta`;\n        } else {\n            header = 'Została wybrana oferta';\n        }\n\n        const oferta_ = {\n            id: selectedOferta.id,\n            danePodmiotu: selectedPakietOfert.danePodmiotu,\n            warianty: [selectedWariant, ],\n        }\n\n        return (\n            <>\n                <Text style={pdfStyles.labelStyle}>{header}</Text>\n                {this.renderOfertaBox(oferta_, [selectedWariant,], true)}\n            </>\n        )\n    }\n\n    renderCena(warianty) {\n        let cena;\n        if (warianty.length > 1) {\n            cena = (\n                <>\n                    {warianty.map((w, i) => (\n                        <View key={i}>\n                            <Text>{i + 1}. {w.cena} PLN</Text>\n                            {splitLineByChar(w.opis).map((line, i) => <Text key={i} style={styles.offerVariantDescrStyle}>{line}</Text>)}\n                        </View>\n                    ))}\n                 </>\n            );\n        } else {\n            cena = <Text>{warianty[0].cena} PLN</Text>;\n        }\n        return (\n            <>\n                <Text style={pdfStyles.labelStyle}>Cena</Text>\n                {cena}\n            </>\n        )\n    }\n\n    renderOferty(zamowienie, isMultiply) {\n        let oferty = [];\n        for (let po of this.props.pakietyOfert) {\n            for (let o of po.oferty) {\n                if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n                    let oferta = Object.assign({}, o, {\n                        oferentId: po.ktoUtworzyl.id,\n                        danePodmiotu: po.danePodmiotu,\n                        zalaczniki: po.zalaczniki,\n                        isRefused: this.checkRefused(o.id),\n                    });\n                    oferty.push(oferta);\n                    break\n                }\n            }\n        }\n\n        if (!oferty.length) {\n            return <Text>Nie złożono żadnej oferty{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n        }\n\n        // exclude selected offer\n\n        const selectedWariantId = ((this.props.rozstrzygniecie.zamowieniaNodes || []).filter(\n            z => z.id === zamowienie.zamowienieNode.id)[0] || {}).wybranyWariant.id;\n\n        let filteredOferty = [];\n        for (let o of oferty) {\n            let oferta = Object.assign({}, o);\n            oferta.warianty = o.warianty.filter(w => w.id !== selectedWariantId);\n            filteredOferty.push(oferta)\n        }\n        filteredOferty = filteredOferty.filter(o => o.warianty.length > 0);\n\n        if (!filteredOferty.length) {\n            return <Text>Nie złożono innych ofert{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n        }\n\n        return (\n            <View style={styles.otherOffersContainerStyle}>\n                <Text>Pozostałe oferty{isMultiply ? ` do części: \"${zamowienie.tytul}\"` : ''}</Text>\n                <Text style={pdfStyles.textInfoStyle}>Liczba wyników: {filteredOferty.length}</Text>\n                {filteredOferty.sort(this.sortOferty).map(o => this.renderOfertaBox(o, o.warianty))}\n            </View>\n        )\n    }\n\n    renderOfertaBox(oferta, warianty, selected=false) {\n        const { borderedDashedSectionStyle, labelStyle } = pdfStyles;\n        const danePodmiotu = oferta.danePodmiotu;\n        const adres = danePodmiotu.adres;\n        return (\n            <View key={oferta.id} style={selected ? styles.selectedOfferStyle : borderedDashedSectionStyle}>\n                {oferta.isRefused && <Text style={labelStyle}>Odrzucona</Text>}\n                <Text style={labelStyle}>Nazwa podmiotu</Text>\n                <Text>{danePodmiotu.nazwa}</Text>\n                <Text style={labelStyle}>Miejscowość</Text>\n                <Text>{`${adres.miejscowosc}${adres.kraj === 'Polska' ? '' : ', ' + adres.kraj}`}</Text>\n                {this.renderCena(warianty)}\n            </View>\n        )\n    }\n\n    renderKomentarz() {\n        if (!(this.props.rozstrzygniecie.komentarz || '').length) { return null }\n        return (\n            <View>\n                <Text style={pdfStyles.labelStyle}>Komentarz</Text>\n                {splitLineByChar(this.props.rozstrzygniecie.komentarz).map((line, i) => <Text key={i} style={styles.commentTextStyle}>{line}</Text>)}\n            </View>\n        )\n    }\n}\n\nconst styles = StyleSheet.create({\n    selectedOfferStyle: {\n        padding: 10,\n        marginBottom: 30,\n        borderWidth: 2,\n        borderColor: '#666A6D'\n    },\n    otherOffersContainerStyle: {\n        marginTop: 20\n    },\n    offerVariantDescrStyle: {\n        paddingLeft: 10,\n        marginBottom: 8\n    },\n    commentTextStyle: {\n        whiteSpace: 'pre-line',\n    }\n});\n\n\nexport { OfertyResolvedStatusPdf };\n","import React from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport { generatePdfDocument } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonCreatePdf, ButtonStyled, Container, GridCustom, Text } from '../../common';\nimport { ZalacznikiSelect } from '../common';\nimport { FormRozstrzygniecie } from '../ogloszenia';\nimport { OfertyOwnerClosedStatus } from './OfertyOwnerClosedStatus';\nimport { OfertyResolvedStatusPdf } from './OfertyResolvedStatusPdf';\n\n\nclass OfertyOwnerResolvedStatus extends OfertyOwnerClosedStatus {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        const serializedData =  getSerializedObject(data, {toFixAttributes: ['cena', ]});\n\n        if (this.props.setAdvertisementManagerType && data.extra && Object.keys(data.extra).length) {\n            this.props.setAdvertisementManagerType({\n                isAuthor: data.extra.is_advertiser, isAdmin: data.extra.is_admin\n            });\n        }\n\n        this.setState(\n            {pakietyOfert: serializedData.pakietyOfert},\n            () => {\n                this.xhrFetch = fetchApi(\n                    `/api/announcements/${this.props.ogloszenie.ogloszenie.id}/settlement`,\n                    'GET',\n                    {},\n                    {},\n                    this.handleFetchSettlementSuccess,\n                    this.handleFetchError,\n                    this.handleFetchIncorrectStatus,\n                );\n            }\n        );\n    }\n\n    handleFetchIncorrectStatus(status) {\n        this.xhrFetch = null;\n        this.setState({\n            initializingOn: false,\n            fetchError: this.getFetchIncorrectStatusError(status),\n        });\n    }\n\n    handleFetchSettlementSuccess = (data) => {\n        this.setState({\n            initializingOn: false,\n            rozstrzygniecie: getSerializedObject(data).rozstrzygniecie,\n        })\n    }\n\n    handleCreatePdf = () => {\n        const { ogloszenie } = this.props;\n        this.setState(\n            {pdfCreatingOn: true},\n            () => generatePdfDocument(\n                <OfertyResolvedStatusPdf\n                    pakietyOfert={this.state.pakietyOfert}\n                    rozstrzygniecie={this.state.rozstrzygniecie}\n                    tytulOgloszenia={ogloszenie.tytul}\n                    zamowienia={this.props.ogloszenie.zamowienia} />,\n                `rozstrzygniecie_ogloszenia_${ogloszenie.ogloszenie.id}.pdf`,\n                this.callbackPfdCreated\n            )\n        );\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return Object.assign({}, super.getAdditionalState(props), {pdfCreatingOn: false})\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się pobrać danych rozstrzygnięcia. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się pobrać danych rozstrzygnięcia. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    callbackPfdCreated = () => {\n        this.setState({pdfCreatingOn: false});\n    }\n\n    checkRefused(offerId) {\n        let isRefused = false;\n        for (let z of this.state.rozstrzygniecie.zamowieniaNodes) {\n            for (let o of z.oferty) {\n                if (o.id === offerId) {\n                    isRefused = o.isRefused;\n                    break\n                }\n            }\n        }\n        return isRefused\n    }\n\n    // rendering\n\n    renderElements() {\n        const isAdvertisementOwner = this.props.isAdvertisementOwner;\n        if (isAdvertisementOwner && this.state.formOn) {\n            return <FormRozstrzygniecie {...this.props} isNew={false} pakietyOfert={this.state.pakietyOfert} />\n        }\n        const onlyAdmin = this.props.onlyAdmin;\n        return (\n            <>\n                {isAdvertisementOwner && this.renderPdfButton()}\n                {onlyAdmin && this.renderMyOfferButton()}\n                {this.renderContent()}\n                {this.renderZalacznikiRozstrzygniecia()}\n                {this.renderKomentarz()}\n                {isAdvertisementOwner && (\n                    <GridCustom flexEnd>\n                        <ButtonStyled className=\"btn btn--main\" primary onClick={() => this.setState({formOn: true})}>\n                            Zmień rozstrzygnięcie\n                        </ButtonStyled>\n                    </GridCustom>\n                )}\n                {onlyAdmin && this.state.previewOn && this.renderPreview()}\n            </>\n        )\n    }\n\n    renderPdfButton() {\n        return (\n            <GridCustom flexEnd>\n                <ButtonCreatePdf\n                    pdfCreatingOn={this.state.pdfCreatingOn}\n                    onClick={this.handleCreatePdf}\n                >\n                    Wydruk listy ofert <span className=\"sr-only\">Pobierz plik PDF ofert z rozstrzygnięciem ogłoszenia {this.props.ogloszenie.tytul}</span>\n                </ButtonCreatePdf>\n            </GridCustom>\n        )\n    }\n\n    renderZamowienie(zamowienie, isMultiply) {\n        return (\n            <div key={zamowienie.id} className=\"offer__list\">\n                <div className=\"offer-resolve__name\">\n                    <Text tag=\"h2\" sectionHeader>Rozstrzygnięcie{isMultiply && ` części:`}</Text>\n                    {isMultiply && <Text label>{zamowienie.tytul}</Text>}\n                </div>\n                {this.renderSelectedOferta(zamowienie, isMultiply)}\n                {this.renderOferty(zamowienie, isMultiply)}\n            </div>\n        )\n    }\n\n    renderSelectedOferta(zamowienie, isMultiply) {\n        const zamowienieFromRozstrzygniecie = (\n            this.state.rozstrzygniecie.zamowieniaNodes || []).filter(\n                z => z.id === zamowienie.zamowienieNode.id)[0];\n        if (!zamowienieFromRozstrzygniecie || !zamowienieFromRozstrzygniecie.wybranyWariant) {\n            return <Text accentHeader>{isMultiply ? `Dla części: \"${zamowienie.tytul}\" nie` : 'Nie'} wybrano żadnej oferty.</Text>\n        }\n\n        const selectedWariantId = zamowienieFromRozstrzygniecie.wybranyWariant.id;\n        let selectedPakietOfert = null;\n        let selectedOferta = null;\n        let selectedWariant = null;\n        for (let po of this.state.pakietyOfert) {\n            for (let o of po.oferty) {\n                for (let w of o.warianty) {\n                    if (w.id === selectedWariantId) {\n                        selectedPakietOfert = po;\n                        selectedOferta = o;\n                        selectedWariant = w;\n                        break\n                    }\n                }\n                if (selectedWariant !== null) {\n                    break\n                }\n            }\n            if (selectedWariant !== null) {\n                break\n            }\n        }\n\n        if (!selectedWariant) {\n            return <Text error role=\"alert\">Wystąpił nieoczekiwany błąd.</Text>\n        }\n\n        let header;\n        if (isMultiply) {\n            header = `Dla części: \"${zamowienie.tytul}\" została wybrana oferta`;\n        } else {\n            header = 'Została wybrana oferta';\n        }\n\n        const oferta_ = {\n            id: selectedOferta.id,\n            danePodmiotu: selectedPakietOfert.danePodmiotu,\n            warianty: [selectedWariant, ],\n            zalaczniki: selectedPakietOfert.zalaczniki,\n            pakietId: selectedPakietOfert.id\n        }\n        const userId = this.props.user.id;\n        const showMyOfferLabel = this.props.isAdvertisementOwner ? false : (\n            !!userId ? selectedPakietOfert.ktoUtworzyl.id === userId : false);\n\n        return (\n            <div key={selectedOferta.id}>\n                <Text tag=\"h3\" accentHeader>{header}</Text>\n                {this.renderOfertaBox(oferta_, showMyOfferLabel, true)}\n            </div>\n        )\n    }\n\n    renderOferty(zamowienie, isMultiply) {\n        let oferty = [];\n        for (let po of this.state.pakietyOfert) {\n            for (let o of po.oferty) {\n                if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n                    let oferta = Object.assign({}, o, {\n                        oferentId: po.ktoUtworzyl.id,\n                        danePodmiotu: po.danePodmiotu,\n                        zalaczniki: po.zalaczniki,\n                        isRefused: this.checkRefused(o.id),\n                        pakietId: po.id\n                    });\n                    oferty.push(oferta);\n                    break\n                }\n            }\n        }\n\n        if (!oferty.length) {\n            return <Text info>Nie złożono żadnej oferty{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n        }\n\n        // exclude selected offer\n\n        const selectedWariantId = ((this.state.rozstrzygniecie.zamowieniaNodes || []).filter(\n            z => z.id === zamowienie.zamowienieNode.id)[0] || {}).wybranyWariant.id;\n\n        let filteredOferty = [];\n        for (let o of oferty) {\n            let oferta = Object.assign({}, o);\n            oferta.warianty = o.warianty.filter(w => w.id !== selectedWariantId);\n            filteredOferty.push(oferta)\n        }\n        filteredOferty = filteredOferty.filter(o => o.warianty.length > 0);\n\n        if (!filteredOferty.length) {\n            return <Text info>Nie złożono innych ofert{isMultiply ? ` do części: ${zamowienie.tytul}` : ''}</Text>\n        }\n\n        return (\n            <>\n                <Text tag=\"h3\" accentHeader>Pozostałe oferty{isMultiply ? ` do części: \"${zamowienie.tytul}\"` : ''}</Text>\n                <Text info>Liczba wyników: {filteredOferty.length}</Text>\n                <GridCustom>\n                    {filteredOferty.sort(this.sortOferty).map(o => this.renderOferta(o))}\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderZalacznikiRozstrzygniecia() {\n        const zalaczniki = this.state.rozstrzygniecie.zalaczniki;\n        return (\n            <Container>\n                <Text tag=\"h2\" sectionHeader>Załączniki</Text>\n                {zalaczniki.length > 0 && <Text info>Liczba wyników: {zalaczniki.length}</Text>}\n                <ZalacznikiSelect\n                    label={{attrName: 'jestProtokolem', description: 'Protokół'}}\n                    zalaczniki={zalaczniki} />\n            </Container>\n        )\n    }\n\n    renderKomentarz() {\n        if (!(this.state.rozstrzygniecie.komentarz || '').length) { return null }\n        return (\n            <Container>\n                <Text tag=\"h2\" mainHeader>Komentarz</Text>\n                <Text className=\"long-text\">{this.state.rozstrzygniecie.komentarz}</Text>\n            </Container>\n        )\n    }\n}\n\n\nexport { OfertyOwnerResolvedStatus };\n","import React from 'react';\n\nimport { OfertyOwnerResolvedStatus } from './OfertyOwnerResolvedStatus';\n\n\nclass OfertyOffererResolvedStatus extends OfertyOwnerResolvedStatus {\n    showAttachments = false;\n    showFullVariants = false;\n\n    // rendering\n\n    renderElements() {\n        return (\n            <>\n                {this.renderMyOfferButton()}\n                {this.renderContent()}\n                {this.renderKomentarz()}\n                {this.state.previewOn && this.renderPreview()}\n            </>\n        )\n    }\n}\n\n\nexport { OfertyOffererResolvedStatus };\n","import React from \"react\";\n\nimport { translateErrorMessage } from \"../../../serializers\";\nimport { Box, GridCustom, Text, ButtonStyled } from \"../../common\";\nimport { BaseComponent } from \"../common\";\nimport { BadgeAnchor, Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\nimport { fetchApi } from \"../../../fetch\";\nimport { MenuContext } from \"../../../context/menuContext\";\n\nclass OfertyOwnerPublishedStatus extends BaseComponent {\n\n  static contextType = MenuContext;\n\n  // handlers\n\n  handleFetchSuccess(data) {\n    super.handleFetchSuccess();\n    this.setState({\n      initializingOn: false,\n      offersCount: data.offersets.length,\n      offers: data.offersets,\n    });\n  }\n\n  handleRemoveBadge = (id) => {\n    fetchApi(\n        `/api/badge/offerset/${id}`,\n        \"DELETE\",\n        {},\n        {},\n        () => {\n            this.fetchInitialData();\n            this.props.refresh();\n            this.context.refreshBadges();\n        }\n    );\n  };\n\n  // helpers\n\n  getAdditionalState(props) {\n    return { offersCount: 0 };\n  }\n\n  getFetchUrl() {\n    return `/api/offerset/announcement/${this.props.ogloszenie.ogloszenie.id}/list`;\n  }\n\n  getFetchError(message) {\n    return `Nie udało się pobrać danych ofert. ${translateErrorMessage(\n      message\n    )}`;\n  }\n\n  getFetchIncorrectStatusError(status) {\n    return `Nie udało się pobrać danych ofert. Wystąpił nieoczekiwany błąd o kodzie ${status}.`;\n  }\n\n  // rendering\n\n  renderContent() {\n    return (\n      <>\n        <Text tag=\"h2\" sectionHeader>\n          Lista złożonych ofert\n        </Text>\n        <Text info className=\"text--counter\">\n          Liczba wyników: {this.state.offersCount}\n        </Text>\n        {this.renderList()}\n      </>\n    );\n  }\n\n  renderList() {\n    if (!this.state.offersCount) {\n      return null;\n    }\n    return (\n      <>\n        <Text accentHeader>\n          Podgląd ofert będzie dostępny po zamknięciu ogłoszenia.\n        </Text>\n        <GridCustom tag=\"ul\">\n          {[...this.state.offers].map((offer, index) => (\n            <Box\n              key={index}\n              tag=\"li\"\n              titleOneRow=\"Oferta\"\n              flexiblewidth\n              aria-hidden=\"true\"\n            >\n              <Text className=\"offer__box-hidden-text\"></Text>\n              <Text className=\"offer__box-hidden-text\"></Text>\n              <Text className=\"offer__box-hidden-text\"></Text>\n              <Text className=\"offer__box-hidden-text\"></Text>\n              {offer.badge && (\n                <BadgeAnchor>\n                  <ButtonStyled\n                    primary\n                    icon=\"check\"\n                    onClick={() => this.handleRemoveBadge(offer.id)}\n                  >\n                    USUŃ OZNACZENIE JAKO NOWE\n                  </ButtonStyled>\n                  <Badge label=\"N\" />\n                </BadgeAnchor>\n              )}\n            </Box>\n          ))}\n        </GridCustom>\n      </>\n    );\n  }\n}\n\nexport { OfertyOwnerPublishedStatus };\n","import React from 'react';\nimport { Checkbox } from '@rmwc/checkbox';\n\nimport {\n    getLastTemporaryIdFromList,\n    reformatDanePodmiotu,\n} from '../../../helpers';\nimport {\n    getSerializedObject,\n    getSerializedObjectErrorsFormServer,\n    translateErrorMessage\n} from '../../../serializers';\nimport {\n    Box,\n    ButtonStyled,\n    Container,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    GridCellCustom,\n    MenuBasic,\n    Steps,\n    Text,\n    TextFieldCustom,\n} from '../../common';\nimport { FormBaseComponent, Zalaczniki } from '../common';\nimport { FormOfertaOgloszeniodawca, OfertaPreview } from '../oferty';\nimport { FormCzescRozstrzygniecia } from './FormCzescRozstrzygniecia';\n\n\nconst MAX_ATTACHMENTS_NUMBER = 20;\n\n\nclass FormRozstrzygniecie extends FormBaseComponent {\n\n    componentDidMount() {\n        window.scrollTo(0, 0);\n        this.handleSetCurrentMenuLink(0);\n\n        if (this.props.isNew) {\n            this.setState({initializingOn: false});\n        } else {\n            this.fetchInitialData();\n        }\n    }\n\n    // handlers\n    handleFetchSuccess(data) {\n        this.xhrFetch = null;\n        data = getSerializedObject(data, {addTemporaryId: true}).rozstrzygniecie;\n        for (let z of data.zamowieniaNodes) {\n            z.wybranyWariant = z.wybranyWariant.id || null;\n        }\n        this.setState(Object.assign(\n            data,\n            {initializingOn: false})\n        );\n    }\n\n    handleSetCurrentMenuLink(id) {\n        this.setState(prevState =>\n            {\n                const menuLinks = prevState.menuLinks;\n                let next = null, prev=null, name=null;\n                for (let i=0; i < menuLinks.length; i++) {\n                    if (id === menuLinks[i].id) {\n                        name = menuLinks[i].name;\n                        if (i > 0) {\n                            prev = {\n                                label: menuLinks[i - 1].label,\n                                id: menuLinks[i - 1].id,\n                            };\n                        }\n                        if (i < menuLinks.length - 1) {\n                            next = {\n                                label: menuLinks[i + 1].label,\n                                id: menuLinks[i + 1].id,\n                            };\n                        }\n                    }\n                }\n                return {\n                    currentMenuLink: {id, name, next, prev}\n                }\n            }\n        );\n    }\n\n    handleCloseForm = () => {\n        this.setState({offerFormOn: false, editingOffersetId: null});\n    }\n\n    handleSubmitOfertaForm = (data, isNew) => {\n        data = getSerializedObject(data).pakietOfert;\n        data.danePodmiotu = reformatDanePodmiotu(data.danePodmiotu);\n        // set dict of orderNode and offer ids\n        let idsDict = {};\n        for (let o of data.oferty) {\n            idsDict[o.zamowienieNode.id] = o.id;\n        }\n        this.setState(\n            prevState => {\n                if (isNew) {\n                    return {\n                        offerFormOn: false,\n                        pakietyOfert: [...prevState.pakietyOfert, data],\n                        zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n                            if (idsDict[z.id]) {\n                                const ofertaId = idsDict[z.id];\n                                z.oferty = [...z.oferty, {id: ofertaId, temporaryId: ofertaId, isRefused: false}]\n                            }\n                            return z\n                        }),\n                    }\n                } else {\n                    return {\n                        offerFormOn: false,\n                        editingOffersetId: null,\n                        pakietyOfert: prevState.pakietyOfert.map(po => {\n                            if (po.id === data.id) {\n                                return data\n                            }\n                            return po\n                        }),\n                    }\n                }\n            }\n        );\n    }\n\n    handleCloseOfferPreview = () => {\n        this.setState({offerPreviewOn: false, previewedOfferId: null});\n    }\n\n    handleAddZalacznik = (data) => {\n        data = data || {};\n\n        this.setState(prevState => ({\n            zalaczniki: [...prevState.zalaczniki, {\n                id: null,\n                temporaryId: getLastTemporaryIdFromList(prevState.zalaczniki) + 1,\n                jestProtokolem: false,\n                nazwa: '',\n                plik: {\n                    id: null,\n                    uri: '',\n                    nazwa: '',\n                    dataUtworzenia: '',\n                    ktoUtworzyl: {imie: '', nazwisko: ''},\n                },\n                plikDoWgrania: data.plikDoWgrania || null,\n            }],\n        }))\n    }\n\n    handleSaveZalacznikAttributes = (temporaryId, data) => {\n        this.setState(prevState => {\n            return {zalaczniki: prevState.zalaczniki.map(z => {\n                if (z.temporaryId === temporaryId) {\n                    return Object.assign(z, data)\n                } else {\n                    return z\n                }\n            })}\n        });\n    }\n\n    handleRemoveZalacznik = (temporaryId) => {\n        this.setState(prevState => {\n            return {zalaczniki: prevState.zalaczniki.filter(z => z.temporaryId !== temporaryId)}\n        });\n    }\n\n    handleChangeZalacznikIsProtocol = (checked, temporaryId) => {\n        this.setState(prevState => {\n            let zalaczniki = [];\n            for (let z of prevState.zalaczniki) {\n                if (z.temporaryId === temporaryId) {\n                    z.jestProtokolem = checked;\n                } else {\n                    if (checked) {\n                        z.jestProtokolem = false;\n                    }\n                }\n                zalaczniki.push(z);\n            }\n            return {zalaczniki: zalaczniki}\n        });\n    }\n\n    handleNoOfferSelectedChange = (checked, zamowienieId) => {\n        this.setState(prevState => {\n            return {zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n                if (z.id === zamowienieId) {\n                    z.zadnaOfertaWybrana = checked;\n                    if (checked) {\n                        z.wybranyWariant = null;\n                    }\n                }\n                return z\n            })}\n        });\n    }\n\n    handleRefuseOffer = (zamowienieId, ofertaId) => {\n        this.setOfferRefuseValue(zamowienieId, ofertaId, true);\n    }\n\n    handleRestoreOffer = (zamowienieId, ofertaId) => {\n        this.setOfferRefuseValue(zamowienieId, ofertaId, false);\n    }\n\n    handleSelectWariant = (checked, zamowienieNode, wariantId) => {\n        this.setState(prevState => ({\n            zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n                if (z.id === zamowienieNode) {\n                    if (checked) {\n                        z.wybranyWariant = wariantId;\n                        z.zadnaOfertaWybrana = false;\n                    } else {\n                        z.wybranyWariant = null;\n                    }\n                }\n                return z\n            })\n        }));\n    }\n\n    handleRemoveOfertaZewnetrzna = (pakietOfertId) => {\n        this.setState(prevState => {\n            // get variants ids for offerset\n            let variantsIds = [];\n            for (let po of prevState.pakietyOfert) {\n                if (po.id === pakietOfertId) {\n                    for (let o of po.oferty) {\n                        variantsIds = [...variantsIds, ...o.warianty.map(w => w.id)];\n                    }\n                    break\n                }\n            }\n            return {\n                ofertyDoUsuniecia: [...prevState.ofertyDoUsuniecia, pakietOfertId],\n                zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n                    if (variantsIds.includes(z.wybranyWariant)) {\n                        z.wybranyWariant = null;\n                    }\n                    return z\n                }),\n            }\n        });\n    }\n\n    handleFetchSaveSuccess(data) {\n        this.xhrFetchSave = null;\n        window.location.reload();\n    }\n\n    handleShowSaveErrors = (errors) => {\n        this.xhrFetchSave = null;\n        const errors_ = getSerializedObjectErrorsFormServer(\n            errors,\n            this.getNotSerializedDataForSaving(),\n            ['ofertyDoUsuniecia', 'zamowieniaNodes', 'oferty', 'zalaczniki']\n        );\n        this.setState(\n            prevState => ({\n                savingOn: false,\n                saveBtnText: this.saveBtnDefaultText,\n                errors: errors_,\n                errorsDialogOn: Object.values(errors_.zamowieniaNodes).filter(\n                    z => (z.zadnaOfertaWybrana || []).length > 0).length > 0,\n            })\n        );\n    }\n\n    // helpers\n\n    preState(props) {\n        // it has to be here, because 'getMenuLinks' function needs it\n        this.handleSetCurrentMenuLink = this.handleSetCurrentMenuLink.bind(this);\n    }\n\n    formPreState(props) {\n        this.saveBtnDefaultText = 'Publikuj rozstrzygnięcie';\n    }\n\n    getAdditionalState(props) {\n\n        const getOfertyByZamowienieNodeId = (zamowienieNodeId) => {\n            let oferty = [];\n            for (let po of this.props.pakietyOfert) {\n                for (let o of po.oferty) {\n                    if (zamowienieNodeId === o.zamowienieNode.id) {\n                        oferty.push({id: o.id, temporaryId: o.id, isRefused: false});\n                    }\n                }\n            }\n            return oferty\n        }\n\n        const zamowienia = this.props.ogloszenie.zamowienia;\n        return {\n            isNew: props.isNew,\n            offerFormOn: false,\n            editingOffersetId: null,\n            offerPreviewOn: false,\n            previewedOfferId: null,\n            errorsDialogOn: false,\n            menuLinks: this.getMenuLinks(zamowienia),\n            currentMenuLink: {\n                id: null,\n                name: null,\n                next: null,\n                prev: null,\n            },\n            pakietyOfert: [...this.props.pakietyOfert],\n            nieMaWiecejOfert: false,\n            ofertyDoUsuniecia: [],\n            zalaczniki: [],\n            komentarz: '',\n            zamowieniaNodes: zamowienia.map(z => ({\n                id: z.zamowienieNode.id,\n                temporaryId: z.id,\n                zadnaOfertaWybrana: false,\n                wybranyWariant: null,\n                oferty: getOfertyByZamowienieNodeId(z.zamowienieNode.id),\n            })),\n        };\n    }\n\n    getFetchUrl() {\n        return `/api/announcements/${this.props.ogloszenie.ogloszenie.id}/settlement`\n    }\n\n    getFetchError(message) {\n        message = translateErrorMessage(message);\n        if (this.state.isNew) {\n            return `Nie udało się pobrać danych do rozstrzygnieca ogłoszenia. ${message}`\n        }\n        return `Nie udało się pobrać danych do rozstrzygnieca ogłoszenia. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        if (this.state.isNew) {\n            return `Podczas pobierania danych do rozstrzygnieca ogłoszenia wystąpił nieoczekiwany błąd o kodzie ${status}`\n        }\n        return `Podczas pobierania danych do rozstrzygnieca ogłoszenia wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    getMenuLinks(zamowienia) {\n        let index = 0;\n        let links = [\n            {name: 'offers_completing', id: index++, label: 'Kompletowanie ofert', onClick: this.handleSetCurrentMenuLink},\n        ];\n        for (let z of zamowienia) {\n            links.push({name: z.id, id: index, label: `Oferty${zamowienia.length > 1 ? ' do części ' + index : ''}`, onClick: this.handleSetCurrentMenuLink});\n            index++;\n        }\n        links.push({name: 'summary', id: index, label: 'Podsumowanie', onClick: this.handleSetCurrentMenuLink});\n        return links\n    }\n\n    setOfferRefuseValue(zamowienieId, ofertaId, isRefused) {\n        this.setState(prevState => {\n            let wariantIds = [];\n            if (isRefused) {\n                // get ids of variants for the offer to unselect if selected\n                for (let po of prevState.pakietyOfert) {\n                    for (let o of po.oferty) {\n                        if (o.id === ofertaId) {\n                            wariantIds = o.warianty.map(w => w.id);\n                        }\n                    }\n                }\n            }\n\n            // get previously selected wariant to check if it hasn't been already refused\n            let prevWybranyWariant = null;\n            for (let z of prevState.zamowieniaNodes) {\n                if (z.id === zamowienieId) {\n                    prevWybranyWariant = z.wybranyWariant;\n                }\n            }\n\n            return {\n                zamowieniaNodes: prevState.zamowieniaNodes.map(z => {\n                    if (z.id === zamowienieId) {\n                        z.oferty = z.oferty.map(o => {\n                            if (o.id === ofertaId) {\n                                o.isRefused = isRefused;\n                            }\n                            return o\n                        });\n                        z.wybranyWariant = isRefused && wariantIds.includes(prevWybranyWariant) ? null : prevWybranyWariant;\n                    }\n                    return z\n                }),\n            }\n        });\n    }\n\n    getSaveUrl() {\n        return `/api/announcements/${this.props.ogloszenie.ogloszenie.id}/resolve`\n    }\n\n    getSaveMethod() {\n        return this.props.isNew ? 'POST' : 'PUT'\n    }\n\n    getDataForSaving() {\n        return getSerializedObject(\n            this.getNotSerializedDataForSaving(),\n            {toServer: true, removeTemporaryId: true}\n        )\n    }\n\n    getNotSerializedDataForSaving() {\n        return {\n            ofertyDoUsuniecia: this.state.ofertyDoUsuniecia,\n            zamowieniaNodes: this.state.zamowieniaNodes,\n            komentarz: this.state.komentarz,\n            zalaczniki: this.state.zalaczniki.map(z => ({\n                id: z.id,\n                temporaryId: z.temporaryId,\n                nazwa: z.nazwa,\n                plik: z.plik.id,\n                jestProtokolem: z.jestProtokolem\n            })),\n        }\n    }\n\n    // rendering\n\n    renderContent() {\n        const currentMenuLinkName = this.state.currentMenuLink.name;\n        return (\n            <>\n                <GridCustom flexL noWrap>\n                    <GridCellCustom>\n                        <MenuBasic\n                            addProgressIcon={true}\n                            children={this.state.menuLinks}\n                            currentMenuLink={this.state.currentMenuLink.id}\n                            disabled={this.state.savingOn}\n                            disabledFrom={this.state.nieMaWiecejOfert ? null : 1}\n                            errors={{}}\n                            title={`${this.state.isNew ? 'Dodawanie' : 'Edycja'} rozstrzygnięcia`} />\n                    </GridCellCustom>\n                    <GridCellCustom className=\"offer-resolve__container\" id=\"offer-resolve_content\">\n                        {currentMenuLinkName === 'offers_completing' && this.renderOffersCompleting()}\n                        {this.props.ogloszenie.zamowienia.map(z => {\n                            if (currentMenuLinkName === z.id) {\n                                return this.renderOffers(z)\n                            }\n                            return null\n                        })}\n                        {currentMenuLinkName === 'summary' && this.renderSummary()}\n                    </GridCellCustom>\n                </GridCustom>\n                {this.state.offerFormOn && this.renderFormOferta()}\n                {this.state.offerPreviewOn && this.renderOfertaPreview()}\n            </>\n        )\n    }\n\n    renderOffersCompleting() {\n        const pakietyOfertZewnetrzne = this.state.pakietyOfert.filter(\n            po => po.ktoUtworzyl.id === this.props.user.id);\n        return (\n            <>\n                <Container>\n                    <span className=\"sr-only\" role=\"alert\">Jeśli masz oferty spoza Bazy Konkurencyjności, dodaj je klikając w guzik \"Dodaj ofertę, która wpłynęła innym kanałem\". Jeśli nie masz innych ofert, lub wprowadziłeś wszystkie, które wpłynęły innym kanałem, zaznacz checkbox \"Nie ma więcej ofert\".</span>\n                    <GridCustom flexEnd>\n                        <ButtonStyled\n                            add\n                            disabled={this.state.nieMaWiecejOfert}\n                            onClick={() => this.setState({offerFormOn: true})}\n                        >\n                            Dodaj ofertę, która wpłynęła innym kanałem\n                        </ButtonStyled>\n                    </GridCustom>\n                    <Text tag=\"h1\" sectionHeader>Lista ofert złożonych poza Bazą Konkurencyjności</Text>\n                    <Text info>Liczba wyników: {pakietyOfertZewnetrzne.length}</Text>\n                    <GridCustom tag=\"ul\">\n                        {pakietyOfertZewnetrzne.map(oferta => this.renderOfertaZewnetrzna(oferta))}\n                    </GridCustom>\n                    <GridCustom centerHorizontal>\n                        <Checkbox\n                            checked={this.state.nieMaWiecejOfert}\n                            className=\"checkbox--btn\"\n                            label=\"Nie ma więcej ofert\"\n                            onChange={event => this.setState({nieMaWiecejOfert: event.target.checked})}\n                        />\n                    </GridCustom>\n                </Container>\n                <Steps\n                    disabled={this.state.nieMaWiecejOfert ? null : 1}\n                    hasNext\n                    nextLabel={this.state.currentMenuLink.next.label}\n                    onNextClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.next.id)}\n                />\n            </>\n        )\n    }\n\n    renderOfertaZewnetrzna(pakietOfert) {\n        const { adres, nazwa } = pakietOfert.danePodmiotu;\n        const zamowienia = this.props.ogloszenie.zamowienia;\n        const isRemoved = this.state.ofertyDoUsuniecia.includes(pakietOfert.id);\n        return (\n            <Box\n                boxWithMenu={isRemoved ? null : (\n                    <>\n                        <h3 className=\"sr-only\">Menu więcej opcji ogłoszenia</h3>\n                        <ul>\n                            <li>\n                                <ButtonStyled\n                                    className=\"box__menu-item\"\n                                    onClick={() => this.setState({offerFormOn: true, editingOffersetId : pakietOfert.id})}>\n                                    Edytuj\n                                </ButtonStyled>\n                                <ButtonStyled className=\"box__menu-item\" onClick={() => this.handleRemoveOfertaZewnetrzna(pakietOfert.id)}>Usuń</ButtonStyled>\n                            </li>\n                        </ul>\n                    </>\n                )}\n                key={pakietOfert.id}\n                titleOneRow={`Oferta ${nazwa}`}\n                tag=\"li\"\n            >\n                <FieldWithLabel label=\"Nazwa podmiotu\">\n                    <Text className=\"long-text\">{nazwa}</Text>\n                </FieldWithLabel>\n                <FieldWithLabel label=\"Miejscowość\">\n                    <Text className=\"long-text\">{adres.miejscowosc}{adres.kraj !== 'Polska' ? ', ' + adres.kraj : ''}</Text>\n                </FieldWithLabel>\n                {zamowienia.length > 1 && (\n                    <FieldWithLabel label=\"Złożona do części\">\n                        {(pakietOfert.oferty || []).map(o => (\n                            <Text className=\"long-text\" key={o.id}>- {((o.zamowienieNode || {}).ostatniaWersja || {}).tytul}</Text>\n                        ))}\n                    </FieldWithLabel>\n                )}\n                {isRemoved ? (\n                        <Text error>Oferta zostanie usunięta z chwilą zapisania rozstrzygnięcia.</Text>\n                    ) : (\n                        <ButtonStyled\n                            ariaLabel={`Pokaż szczegóły oferty ${nazwa}`}\n                            className='corner-button'\n                            primary\n                            onClick={() => this.setState({offerPreviewOn: true, previewedOfferId: pakietOfert.id})}\n                        >Pokaż szczegóły</ButtonStyled>\n                    )\n                }\n            </Box>\n        )\n    }\n\n    renderOffers(zamowienie) {\n        let offersStateDict = {};\n        let wybranyWariant = null;\n        for (let z of this.state.zamowieniaNodes) {\n            if (z.id === zamowienie.zamowienieNode.id) {\n                wybranyWariant = z.wybranyWariant;\n            }\n            for (let o of z.oferty) {\n                offersStateDict[o.id] = o.isRefused;\n            }\n        }\n\n        let warianty = [];\n        const ofertyDoUsuniecia = this.state.ofertyDoUsuniecia;\n        for (let po of this.state.pakietyOfert) {\n            if (ofertyDoUsuniecia.includes(po.id)) {\n                continue\n            }\n            for (let o of po.oferty) {\n                if (o.zamowienieNode.id === zamowienie.zamowienieNode.id) {\n                    for (let w of o.warianty) {\n                        warianty.push(Object.assign({}, w, {\n                            nazwaOferenta: (po.danePodmiotu || {}).nazwa || '',\n                            isRefused: offersStateDict[o.id] || false,\n                            isSelected: wybranyWariant === w.id,\n                            ofertaId: o.id,\n                            zalaczniki: po.zalaczniki || [],\n                        }));\n                    }\n                }\n            }\n        }\n\n        let zadnaOfertaWybrana = false;\n        for (let z of this.state.zamowieniaNodes) {\n            if (z.id === zamowienie.zamowienieNode.id) {\n                zadnaOfertaWybrana = z.zadnaOfertaWybrana;\n                break\n            }\n        }\n\n        return (\n            <GridCellCustom key={zamowienie.id} className=\"offer-resolve__container\">\n                <Container>\n                    <span className=\"sr-only\" role=\"alert\">Możesz odrzucić oferty, wybrać zwycięską ofertę lub zaznaczyć, że nie wybierasz żadnej oferty.</span>\n                    <FormCzescRozstrzygniecia\n                        hasMultiplyZamowienia={this.props.ogloszenie.zamowienia.length > 1}\n                        zadnaOfertaWybrana={zadnaOfertaWybrana}\n                        warianty={warianty}\n                        zamowienie={zamowienie}\n                        onNoOfferSelectedChange={this.handleNoOfferSelectedChange}\n                        onOfferRefuse={this.handleRefuseOffer}\n                        onOfferRestore={this.handleRestoreOffer}\n                        onWariantSelect={this.handleSelectWariant}\n                    />\n            </Container>\n                <Steps\n                    hasNext\n                    hasPrev\n                    nextLabel={this.state.currentMenuLink.next.label}\n                    prevLabel={this.state.currentMenuLink.prev.label}\n                    onNextClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.next.id)}\n                    onPrevClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.prev.id)}\n                />\n            </GridCellCustom>\n        )\n    }\n\n    renderSummary() {\n        const formLocked = this.state.savingOn;\n        const fetchSaveError = this.state.fetchSaveError;\n        return (\n            <GridCellCustom className=\"offer-resolve__container\">\n                <Container>\n                    <span className=\"sr-only\" role=\"alert\">Podsumowanie: możesz dodać załącznik, oznaczyć wybrany załącznik jako protokół, a następnie opublikować rozstrzygnięcie.</span>\n                    <Text tag=\"h2\" mainHeader>Podsumowanie</Text>\n                    {this.renderSelectedOfertyList()}\n                    {this.renderZalaczniki()}\n                    {this.renderKomentarz()}\n                </Container>\n                <Steps\n                    disabled={formLocked}\n                    hasPrev\n                    prevLabel={this.state.currentMenuLink.prev.label}\n                    onPrevClick={() => this.handleSetCurrentMenuLink(this.state.currentMenuLink.prev.id)}\n                />\n                <GridCustom flexEnd>\n                    <ButtonStyled\n                        className=\"btn btn--main\"\n                        disabled={formLocked}\n                        save\n                        onClick={this.handleSave}\n                    >{this.state.saveBtnText}</ButtonStyled>\n                </GridCustom>\n                {fetchSaveError.length > 0 && <Text error role=\"alert\">{fetchSaveError}</Text>}\n                {this.state.errorsDialogOn && this.renderErrorsDialog()}\n            </GridCellCustom>\n        )\n    }\n\n    renderFormOferta() {\n        return (\n            <DialogCustom\n                className=\"dialog-long-content\"\n                onClose={this.handleCloseForm}\n            >\n                <FormOfertaOgloszeniodawca\n                    isNew={this.state.editingOffersetId === null}\n                    ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n                    ofertaId={this.state.editingOffersetId}\n                    zamowienia={this.props.ogloszenie.zamowienia.map(z => ({\n                        id: z.id,\n                        zamowienieNode: z.zamowienieNode,\n                        tytul: z.tytul,\n                        czyWariantowe: z.czyWariantowe,\n                    }))}\n                    onCloseForm={this.handleCloseForm}\n                    onSubmitForm={this.handleSubmitOfertaForm}\n                />\n            </DialogCustom>\n        )\n    }\n\n    renderOfertaPreview() {\n        if (!this.state.previewedOfferId) { return null }\n        return <OfertaPreview\n            ofertaId={this.state.previewedOfferId}\n            ogloszenieId={this.props.ogloszenie.ogloszenie.id}\n            onClosePreview={this.handleCloseOfferPreview} />\n    }\n\n    renderZalaczniki() {\n        return (\n            <Container>\n                <Zalaczniki\n                    checkAttributeName=\"jestProtokolem\"\n                    checkLabel=\"Oznacz jako protokół\"\n                    contextForSaving='settlement'\n                    errors={this.state.errors.zalaczniki || {}}\n                    formLocked={this.state.savingOn}\n                    isPreview={false}\n                    maxLength={MAX_ATTACHMENTS_NUMBER}\n                    withCheck={true}\n                    zalaczniki={this.state.zalaczniki}\n                    addZalacznik={this.handleAddZalacznik}\n                    removeZalacznik={this.handleRemoveZalacznik}\n                    saveZalacznikAttributes={this.handleSaveZalacznikAttributes}\n                    onCheckChange={this.handleChangeZalacznikIsProtocol}\n                >\n                    <Text info className=\"text--counter\">Liczba wyników: {this.state.zalaczniki.length}</Text>\n                    <Text info>Możesz załączyć maksymalnie {MAX_ATTACHMENTS_NUMBER} plików.</Text>\n                </Zalaczniki>\n            </Container>\n        )\n    }\n\n    renderKomentarz() {\n        const isKomentarzInvalid = (this.state.errors.komentarz || []).length > 0;\n        return (\n            <Container>\n                <FieldWithLabel label=\"Komentarz\" tag=\"label\" labelFor=\"notes_id\">\n                    <TextFieldCustom\n                        aria-describedby={isKomentarzInvalid ? 'notes_error' : null}\n                        aria-label={`Komentarz, maksymalna liczba znaków: 1000. Wpisano ${this.state.komentarz.length} znaków.`}\n                        aria-valuemax={1000}\n                        characterCount\n                        clearFieldContext=\"komentarz\"\n                        disabled={this.state.savingOn}\n                        invalid={isKomentarzInvalid}\n                        fullwidth\n                        id=\"notes_id\"\n                        maxLength={1000}\n                        textarea\n                        value={this.state.komentarz}\n                        onChange={event => this.setState({komentarz: event.target.value})}\n                        onClear={(ev) => this.setState({komentarz: ''})} />\n                    {isKomentarzInvalid && <ul id=\"notes_error\">{this.state.errors.komentarz.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                </FieldWithLabel>\n            </Container>\n        )\n    }\n\n    renderSelectedOfertyList() {\n        const zamowienia = this.props.ogloszenie.zamowienia;\n        if (zamowienia.length === 1) {\n            return this.renderZamowienieSummary(zamowienia[0], false)\n        }\n        return zamowienia.map(z => this.renderZamowienieSummary(z, true))\n    }\n\n    renderZamowienieSummary(zamowienie, isMultiply) {\n        let zamowienieFromState = null;\n        for (let z of this.state.zamowieniaNodes) {\n            if (z.id === zamowienie.zamowienieNode.id) {\n                zamowienieFromState = z;\n            }\n        }\n\n        if (!zamowienieFromState) {\n            return this.renderUnexpectedSummaryPartError(zamowienie, isMultiply)\n        }\n\n        if (zamowienieFromState.zadnaOfertaWybrana) {\n           return this.renderNoOfferSelected(zamowienie, isMultiply)\n        }\n\n        if (zamowienieFromState.wybranyWariant === null) {\n           return this.renderNoChoice(zamowienie, isMultiply)\n        }\n\n        // get selectedWariant data\n        let wybranyWariant = null;\n        for (let po of this.state.pakietyOfert) {\n            for (let o of po.oferty) {\n                for (let w of o.warianty) {\n                    if (w.id === zamowienieFromState.wybranyWariant) {\n                        wybranyWariant = Object.assign(\n                            {}, w, {nazwaOferenta: po.danePodmiotu.nazwa});\n                        break\n                    }\n                }\n                if (wybranyWariant !== null) {\n                    break\n                }\n            }\n            if (wybranyWariant !== null) {\n                break\n            }\n        }\n\n        if (wybranyWariant === null) {\n            return this.renderUnexpectedSummaryPartError(zamowienie, isMultiply);\n        }\n\n        let info;\n        if (isMultiply) {\n            info = <Text label>Dla części \"{zamowienie.tytul}\" została wybrana oferta</Text>;\n        } else {\n            info = <Text label>Została wybrana oferta</Text>;\n        }\n\n        return (\n            <div key={zamowienie.id} className=\"offer-resolve__summary\">\n                {info}\n                <Box titleOneRow={`${wybranyWariant.cena} PLN`}>\n                    <Text className=\"long-text\">{wybranyWariant.nazwaOferenta}</Text>\n                    {wybranyWariant.opis.length > 0 && (\n                        <FieldWithLabel label=\"Opis\">\n                            <Text className=\"long-text\">{wybranyWariant.opis}</Text>\n                        </FieldWithLabel>\n                    )}\n                </Box>\n            </div>\n        )\n    }\n\n    renderNoOfferSelected(zamowienie, isMultiply) {\n        if (isMultiply) {\n            return (\n                <div className=\"offer-resolve__summary\" key={zamowienie.id}>\n                    <Text label>Dla części \"{zamowienie.tytul}\" nie wybrano żadnej oferty.</Text>\n                </div>\n            )\n        }\n        return (\n            <div className=\"offer-resolve__summary\">\n                <Text label>Nie wybrano żadnej oferty.</Text>\n            </div>\n        )\n    }\n\n    renderNoChoice(zamowienie, isMultiply) {\n        if (isMultiply) {\n            return (\n                <div key={zamowienie.id} className=\"offer-resolve__summary\">\n                    <Text label>Dla części \"{zamowienie.tytul}\"</Text>\n                    <Text error>Nie dokonano wyboru</Text>\n                </div>\n            )\n        }\n        return (\n            <div className=\"offer-resolve__summary\">\n                <Text>Dla oferty</Text>\n                <Text error>Nie dokonano wyboru</Text>\n            </div>\n        )\n    }\n\n    renderUnexpectedSummaryPartError(zamowienie, isMultiply) {\n        if (isMultiply) {\n            return (\n                <Text error key={zamowienie.id} role=\"alert\">\n                   Wystąpił nieoczekiwany problem z częścią \"{zamowienie.tytul}\"\n               </Text>\n            )\n        }\n        return <Text error role=\"alert\">Wystąpił nieoczekiwany problem.</Text>\n    }\n\n    renderErrorsDialog() {\n        const errors = this.state.errors.zamowieniaNodes || {};\n        const zamowienia = this.props.ogloszenie.zamowienia;\n        const isMultiply = zamowienia.length > 1;\n        return (\n            <DialogCustom\n                className=\"dialog\"\n                dialogTitleError=\"Podczas próby rozstrzygnięcia wystąpiły błędy dotyczące wyboru ofert.\"\n                onClose={() => this.setState({errorsDialogOn: false})}\n            >\n                <>\n                    {zamowienia.map(z => {\n                        const zamowienieErrors = (errors[z.zamowienieNode.id] || {}).zadnaOfertaWybrana || [];\n                        if (zamowienieErrors.length) {\n                            let info;\n                            if (isMultiply) {\n                                info = <Text error>Dla części \"{z.tytul}\" wystąpiły następujące błędy:</Text>;\n                            } else {\n                                info = <Text error>Dla oferty wystąpiły następujące błędy:</Text>;\n                            }\n                            return (\n                                <div key={z.id} role=\"status\" aria-live=\"polite\">\n                                    {info}\n                                    {zamowienieErrors.map((e, i) => <Text error key={i}>{e}</Text>)}\n                                </div>\n                            )\n                        }\n                        return null\n                    })}\n                    <GridCustom centerVertical flexEnd>\n                        <ButtonStyled onClick={() => this.setState({errorsDialogOn: false})} primary>OK</ButtonStyled>\n                    </GridCustom>\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\n\nexport { FormRozstrzygniecie };\n","import React, { Component } from 'react';\nimport { Icon } from '@rmwc/icon';\n\nimport { fetchApi } from '../../../fetch';\nimport { serializeObjectList, translateErrorMessage } from '../../../serializers';\nimport { ButtonStyled, DialogCustom, FieldWithLabel, GridCustom, Text } from '../../common';\n\n\nclass ListaWersji extends Component{\n\n    constructor(props) {\n        super(props);\n\n        this.state ={\n            initializingOn: true,\n            versions: [],\n            error: '',\n        };\n\n        this.xhrFetch = null;\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        // get version list from server\n        this.xhrFetch = fetchApi(\n            `/api/announcements/${this.props.ogloszenieId}/versions`,\n            'GET',\n            {},\n            {mode: 'advertiser'},\n            this.handleFetchVersionListSuccess,\n            this.handleFetchVersionListError,\n            this.handleFetchVersionListIncorrectStatus,\n        );\n    }\n\n    componentWillUnmount() {\n        // abort api request if exist\n        if (this.xhrFetch !== null) {\n            this.xhrFetch.abort();\n        }\n    }\n\n    // handlers\n\n    handleFetchVersionListSuccess = (data) => {\n        this.xhrFetch = null;\n        this.setState({initializingOn: false, versions: serializeObjectList(data.versions)});\n    }\n\n    handleFetchVersionListError = (data) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({initializingOn: false, error: `Podczas pobierania listy wersji wystąpił nieoczekiwany błąd: ${translateErrorMessage(data.message)}`});\n    }\n\n    handleFetchVersionListIncorrectStatus = (status) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({initializingOn: false, error: `Podczas pobierania listy wersji wystąpił nieoczekiwany błąd o kodzie ${status}.`});\n    }\n\n    handleCloseDialog = () => {\n        this.props.closeVersionDialog();\n    }\n\n    // helpers\n\n    sortVersions(versions) {\n        let draft = null, published = [];\n        for (let v of versions) {\n            if (v.status.id === this.props.roboczeStatusId) {\n                draft = v;\n            } else {\n                published.push(v);\n            }\n        }\n\n        // sort published versions by id\n        published.sort((v1, v2) => {\n            return v1.id > v2.id ? -1 : 1\n        })\n\n        return [draft, published]\n    }\n\n    // rendering\n\n    render() {\n        let content = null;\n        const { error } = this.state;\n\n        if (this.state.initializingOn) {\n            content = <Text info>Trwa pobieranie danych z serwera...</Text>;\n        } else {\n            content = error.length > 0 ? this.renderError() : this.renderVersionList();\n        }\n        return (\n            <DialogCustom \n                onClose={this.handleCloseDialog}\n                dialogTitle={(error.length > 0) ? error : `Wszystkie wersje ogłoszenia`}\n            >\n                {content}\n            </DialogCustom>\n        )\n    }\n\n    renderError() {\n        return (\n            <GridCustom centerVertical flexEnd>\n                <ButtonStyled onClick={this.handleCloseDialog} primary>OK</ButtonStyled>\n            </GridCustom>\n        )\n    }\n\n    renderVersionList() {\n        let content = null;\n        if (this.state.versions.length) {\n            // sort versions\n            let [draft, published] = this.sortVersions(this.state.versions);\n\n            const ogloszenieId = this.props.ogloszenieId;\n            let currentlyVisibleMarker = (\n                <>\n                    <Icon icon=\"find_in_page\" aria-hidden=\"true\" style={{'marginRight': 3}}/>\n                    <Text>Aktualnie przeglądasz</Text>\n                </>\n            );\n\n            content = (\n                <>\n                    {this.renderDraftList(draft, currentlyVisibleMarker)}\n                    {published.length > 0 ? (\n                        <FieldWithLabel label=\"Wersje opublikowane:\">\n                            {published.map((v, index) => (\n                                <GridCustom centerVertical key={v.id} className=\"published-version__item\">\n                                    <button onClick={() => this.props.reload(index === 0 ? `/ogloszenia/${ogloszenieId}` : `/ogloszenia/${ogloszenieId}/wersja${v.id}`)} className=\"link-text\">\n                                        Wersja {published.length - index}, opublikowana {v.dataOpublikowania}{index === 0 ? ' - obowiązująca' : ''}\n                                    </button>\n                                    {parseInt(this.props.id) === v.id && currentlyVisibleMarker}\n                                    {!v.isCreatedByAdvertiser &&\n                                        <Text className=\"published-version__author-info\">\n                                            Utworzona przez pracownika instytucji\n                                        </Text>\n                                    }\n                                </GridCustom>\n                            ))}\n                        </FieldWithLabel>\n                    ) : <Text info>Brak wersji opublikowanych</Text>}\n                </>\n            );\n        } else {\n            content = <Text info>To ogłoszenie nie ma innych wersji.</Text>;\n        }\n        return (\n            <>\n                {content}\n                <GridCustom centerVertical flexEnd>\n                    <ButtonStyled onClick={this.handleCloseDialog} primary>Zamknij</ButtonStyled>\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderDraftList(draft, currentlyVisibleMarker) {\n        if (!this.props.isAuthor && !draft) { return null }\n        return (\n            <FieldWithLabel label=\"Wersje robocze:\">\n                {draft !== null ? (\n                    <GridCustom centerVertical>\n                        <button onClick={() => this.props.reload(`/ogloszenia/${this.props.ogloszenieId}/robocza`)} className=\"link-text\">\n                            Wersja robocza, modyfikowana {draft.dataModyfikacji}\n                        </button>\n                        {parseInt(this.props.id) === draft.id && currentlyVisibleMarker}\n                    </GridCustom>\n                ) : <Text info>Brak wersji roboczych</Text>}\n            </FieldWithLabel>\n        )\n    }\n}\n\n\nexport { ListaWersji };\n","import React, { useContext, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { UserContext } from '../../../context/user-context';\nimport { isAdvertisementLocked, getUserFullName } from '../../../helpers';\nimport {useOneTimeFetchApi, usePutFetchApi} from '../../../hooks';\nimport { getSerializedObject } from '../../../serializers';\nimport { URLS } from '../../../urls/frontend';\nimport {\n    ButtonStyled,\n    CancelSaveButtonsRow,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\n\n\nexport const ManageAdvertisementButtons = ({\n    advertisement, onChangeAdvertisementStatus\n}) => {\n\n    let { data, loadingOn: initializationOn } = useOneTimeFetchApi({\n        url: `/api/admin/permissions_ads_projects_enrollments/ad/${advertisement.ogloszenie.id}`,\n    });\n\n    const isLocked = isAdvertisementLocked(advertisement.ogloszenie.status);\n    let history = useHistory();\n    const [confirmDialogOn, setConfirmDialogOn] = useState(false);\n    const [loadingOn, setLoadingOn] = useState(false);\n    const [fetchError, setFetchError] = useState(null);\n\n    function handleFetchSuccess(data) {\n        setConfirmDialogOn(false);\n        onChangeAdvertisementStatus(\n            getSerializedObject(data).ogloszenie.status)\n    }\n\n    usePutFetchApi({\n        url: `/api/admin/announcements/${advertisement.ogloszenie.id}/${isLocked ? 'un' : ''}lock`,\n        callbackPutSuccess: handleFetchSuccess,\n        loadingOn,\n        setLoadingOn,\n        setFetchError,\n        message403error:\n            `Nie masz uprawnień do ${isLocked ? 'odblokowania' : 'blokowania'}\n             tego ogłoszenia.`,\n    });\n\n    const { permissions: userBasicPermission } = useContext(UserContext);\n\n    if (initializationOn || !data) { return null}\n\n    function hasPermission(parentName, name) {\n        return (data.permission[parentName] || {})[name] || false\n    }\n\n    // what's now? If there is no base permission, return null\n    if (!hasPermission('advertisementAdministration', 'searchNPreviewData')) {\n        return null\n    }\n\n    function handleOpenConfirmDialog() {\n        setFetchError(null);\n        setConfirmDialogOn(true);\n    }\n\n    function handleCloseConfirmDialog() {\n        setConfirmDialogOn(false);\n    }\n\n    function handleLock() {\n        setLoadingOn(true);\n    }\n\n    function handleGoToAdvertisementPage() {\n        history.push(\n            URLS.advertisementsEdit.getUrl(advertisement.ogloszenie.id));\n    }\n\n    const {ktoUtworzyl: advertiser = {}} = advertisement.ogloszenie;\n\n    function handleGoToManageUserPage() {\n        history.push(URLS.usersDetails.getUrl(advertiser.id));\n    }\n\n    function handleFilterProjectsByUserEmail() {\n        history.push(\n            `${URLS.managementProjects.path}?email=${advertiser.email}&sort=type&strona=1`);\n    }\n\n    function handleFilterAdvertisementsByUserEmail() {\n        const ADVERTISEMENTS_GET_COMMON_URL_PARAMS =\n            '&sort=announcementNumber_desc&statusOgl=all&strona=1&typAdresu=all' +\n            '&typNumeruIdent=all';\n        history.push(\n            `${URLS.managementAdvertisements.path}?email=${advertiser.email}${ADVERTISEMENTS_GET_COMMON_URL_PARAMS}`);\n    }\n\n    const isDraft = advertisement.ogloszenie.status.label === 'DRAFT';\n    return (\n        <>\n            <GridCustom fullwidth flexM className=\"manage-lock\">\n                <FieldWithLabel label=\"Ogłoszenie\">\n                    <Text>\n                        {isLocked || isDraft\n                            ? 'Widoczne tylko dla użytkowników posiadających uprawnienia do podglądu.'\n                            : 'Widoczne dla wszystkich.'\n                        }\n                    </Text>\n                    {!isDraft && (\n                        <>\n                            {hasPermission('advertisementAdministration', 'editData') && (\n                                <ButtonStyled\n                                    disabled={advertisement.ogloszenie.status.label !== 'PUBLISHED'}\n                                    icon=\"edit\"\n                                    lite\n                                    onClick={handleGoToAdvertisementPage}\n                                >\n                                    Edytuj\n                                </ButtonStyled>\n                            )}\n\n                            {hasPermission('advertisementAdministration', 'blocking') && (\n                                <ButtonStyled\n                                    lite\n                                    icon={isLocked ? 'check_circle' : 'cancel'}\n                                    onClick={handleOpenConfirmDialog}\n                                    primary\n                                >\n                                    {isLocked ? 'Odblokuj' : 'Zablokuj'}\n                                </ButtonStyled>\n                            )}\n                        </>\n                    )}\n                </FieldWithLabel>\n                <GridCustom fullwidth flexL className=\"manage-lock__user\">\n                    <FieldWithLabel label=\"Użytkownik\">\n                        <Text>{getUserFullName(advertiser)}</Text>\n                        <Text className=\"manage-lock__user-data manage-lock__user-data--email\">{advertiser.email}</Text>\n                        <Text className=\"manage-lock__user-data\">ID {advertiser.identyfikator}</Text>\n                    </FieldWithLabel>\n                    <div className=\"manage-lock__buttons\">\n                        {userBasicPermission.usersAndPermissionsPreviewListUsers && (\n                            <ButtonStyled\n                                lite\n                                icon=\"person\"\n                                onClick={handleGoToManageUserPage}\n                            >\n                                Zarządzaj użytkownikiem\n                            </ButtonStyled>\n                        )}\n                        {hasPermission('projectsEnrollmentsAdministration', 'searchNPreviewData') && (\n                            <ButtonStyled\n                                lite\n                                icon=\"line_weight\"\n                                onClick={handleFilterProjectsByUserEmail}\n                            >\n                                Lista projektów\n                            </ButtonStyled>\n                        )}\n                        <ButtonStyled\n                            lite\n                            icon=\"description\"\n                            onClick={handleFilterAdvertisementsByUserEmail}\n                        >\n                            Lista ogłoszeń\n                        </ButtonStyled>\n                    </div>\n                </GridCustom>\n            </GridCustom>\n            {confirmDialogOn && (\n                <DialogCustom\n                    dialogTitle={`Czy na pewno chcesz ${isLocked ? 'odblokować' : 'zablokować'} to ogłoszenie?`}\n                    onClose={handleCloseConfirmDialog}\n                >\n                    <CancelSaveButtonsRow\n                        disabled={loadingOn}\n                        cancelText=\"Nie\"\n                        saveText=\"Tak\"\n                        onCancel={handleCloseConfirmDialog}\n                        onSave={handleLock} />\n                    {fetchError !== null && <Text error>{fetchError}</Text>}\n                </DialogCustom>\n            )}\n        </>\n    )\n};\n","import React, { Component } from 'react';\nimport { Document, Page, StyleSheet, Text, View } from '@react-pdf/renderer';\n\nimport { splitLineByChar } from '../../../helpers';\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\n\n\nclass PytaniaForOgloszeniePdf extends Component {\n\n    // rendering\n    render() {\n        const { numerOgloszenia, tytulOgloszenia } = this.props;\n        const { labelStyle, mainPdfContainerStyle } = pdfStyles;\n\n        return (\n            <Document>\n                <Page size=\"A4\" style={mainPdfContainerStyle} wrap>\n                    <PdfHeader />\n                    <View>\n                        <Text style={labelStyle}>Ogłoszenie nr {numerOgloszenia}</Text>\n                        <Text>{tytulOgloszenia}</Text>\n                        {this.renderQuestionsList()}\n                    </View>\n                </Page>\n            </Document>\n        )\n    }\n\n    renderQuestionsList() {\n        const { pytania } = this.props;\n        const { textHeaderStyle, textInfoStyle } = pdfStyles;\n\n        if (pytania.length >= 1) {\n            return (\n                <>\n                    <Text style={textHeaderStyle}>Lista opublikowanych pytań i odpowiedzi</Text>\n                    <Text>Liczba wyników: {pytania.length}</Text>\n                    {pytania.map(q => this.renderQuestion(q))}\n                </>\n            )\n        }\n\n        return <Text style={textInfoStyle}>Nie zadano żadnego pytania.</Text>\n    }\n\n    renderAnswer(question) {\n        const { odpowiedz } = question;\n\n        if (odpowiedz) {\n            const { status } = question;\n\n            let answerLabel = '';\n            if (status.label === 'PUBLISHED') {\n                answerLabel = 'Udzielono odpowiedzi';\n            } else if (status.label === 'DRAFT') {\n                answerLabel = 'Robocza wersja odpowiedzi';\n            }\n\n            return (\n                <View style={styles.answerContainerStyle}>\n                    <Text style={pdfStyles.labelStyle}>{answerLabel}</Text>\n                    {splitLineByChar(odpowiedz.tresc).map((line, i) => <Text key={i}>{line}</Text>)}\n                </View>\n            )\n        }\n\n        return <Text style={pdfStyles.textInfoStyle}>Nie udzielono odpowiedzi</Text>;\n    }\n\n    renderQuestion(question) {\n        const { dataOpublikowania, dataUtworzenia, id, jestAutorem, numer, tresc } = question;\n\n        return (\n            <View key={id} style={styles.questionContainerStyle}>\n                {jestAutorem && <Text style={styles.myLabelStyle}>Moje pytanie</Text>}\n                <Text style={pdfStyles.labelStyle}>Pytanie numer {numer}, data wysłania {dataUtworzenia}{dataOpublikowania && `, data opublikowania ${dataOpublikowania}`}</Text>\n                {splitLineByChar(tresc).map((line, i) => <Text key={i}>{line}</Text>)}\n                {this.renderAnswer(question)}\n            </View>\n        )\n    }\n\n}\n\nconst styles = StyleSheet.create({\n    myLabelStyle: {\n        width: 70,\n        borderBottomWidth: 2,\n        borderBottomColor: '#666A6D',\n        color: '#666A6D',\n        textTransform: 'uppercase',\n        fontSize: 10,\n        fontWeight: 700,\n    },\n    questionContainerStyle: {\n        paddingVertical: 10,\n        marginBottom: 10,\n        borderBottomWidth: 1,\n        borderBottomColor: '#666A6D'\n    },\n    answerContainerStyle: {\n        paddingLeft: 20\n    }\n});\n\n\nexport { PytaniaForOgloszeniePdf };\n","import React from 'react';\n\nimport { generatePdfDocument } from '../../../helpers';\nimport { getSerializedObject } from '../../../serializers';\nimport { ButtonCreatePdf, GridCustom } from '../../common';\nimport { BaseComponent } from '../common';\nimport { PytaniaForOgloszeniePdf } from './PytaniaForOgloszeniePdf';\n\n\nclass BasePytaniaForOgloszenieWidthPdf extends BaseComponent {\n\n    // handlers\n\n    handleFetchSuccess(data) {\n        this.xhrFetch = null; // clean xhr object\n        this.setState({\n            fetchError: '',\n            initializingOn: false,\n            pytania: getSerializedObject(data).pytania,\n        });\n    }\n\n    handleCreatePdf = () => {\n        const { ogloszenie, tytul } = this.props.ogloszenie;\n\n        this.setState(\n            {pdfCreatingOn: true},\n            () => generatePdfDocument(\n                <PytaniaForOgloszeniePdf\n                    pytania={this.state.pytania}\n                    tytulOgloszenia={tytul}\n                    numerOgloszenia={ogloszenie.numer} />,\n                `pytania_do_ogloszenia_nr_${ogloszenie.numer}.pdf`,\n                this.callbackPfdCreated\n            )\n        );\n    }\n\n    // helpers\n\n    callbackPfdCreated = () => {\n        this.setState({pdfCreatingOn: false});\n    }\n\n    getFetchUrl() {\n        return `/api/question/announcement/${this.props.ogloszenie.ogloszenie.id}`\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się pobrać pytań dla tego ogłoszenia. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Podczas pobierania pytań dla tego ogłoszenia wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    // rendering\n\n    renderPrintButton() {\n        return (\n            <GridCustom flexEnd>\n                <ButtonCreatePdf\n                    pdfCreatingOn={this.state.pdfCreatingOn}\n                    onClick={this.handleCreatePdf}>\n                        Wydruk listy pytań<span className=\"sr-only\"> do ogłoszenia {this.props.ogloszenie.tytul}</span>\n                    </ButtonCreatePdf>\n            </GridCustom>\n        )\n    }\n}\n\nexport { BasePytaniaForOgloszenieWidthPdf };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n    getSerializedObject,\n    getSerializedObjectErrorsFormServer,\n    translateErrorMessage,\n} from '../../../serializers';\n\nimport {\n    ButtonStyled,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    TextFieldCustom,\n} from '../../common';\n\n\nclass FormOdpowiedz extends Component {\n    constructor(props) {\n        super(props);\n        const { pytanie } = this.props;\n        this.state = {\n            id: pytanie.odpowiedz.id || '',\n            tresc: pytanie.odpowiedz.tresc || '',\n            pytanieTresc: pytanie.tresc,\n            savingOn: false,\n            fetchError: '',\n            errors: {},\n            isNew: !pytanie.odpowiedz.id\n        };\n    }\n\n    handleSaveDraft = () => this.handleSave();\n\n    handleSavePublished = () => this.handleSave(true);\n\n    handleSave = (published=false) => {\n        this.setState(\n            {savingOn: true},\n            () => {\n                // Save edited question and add/edit answer\n                this.xhrSave = fetchApi(\n                    `/api/question/${this.props.pytanie.id}${published ? '?mode=publish' : ''}`,\n                    'PUT',\n                    {},\n                    getSerializedObject(this.getData(), { toServer: true }),\n                    this.handleFetchSaveSuccess,\n                    this.handleFetchSaveError,\n                    this.handleFetchSaveIncorrectStatus,\n                    this.handleShowSaveErrors,\n                );\n            }\n        )\n    }\n\n    handleFetchSaveSuccess = (data) => {\n        this.xhrSave = null;\n        this.props.onUpdate(\n            this.props.pytanie.id,\n            getSerializedObject(data).pytanie\n        );\n    }\n\n    handleFetchSaveError = (data) => {\n        this.xhrSave = null;\n\n        this.setState({\n            fetchError: translateErrorMessage(data.message),\n            savingOn: false,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus = (status) => {\n        this.xhrSave = null;\n\n        this.setState({\n            fetchError: `Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n            savingOn: false,\n        });\n    }\n\n    handleShowSaveErrors = (errors) => {\n        this.xhrSave = null;\n\n        this.setState({\n            errors: getSerializedObjectErrorsFormServer(errors, this.getData()),\n            savingOn: false,\n        });\n    }\n\n    getData(){\n        return {\n            tresc: this.state.pytanieTresc,\n            odpowiedz: {tresc: this.state.tresc},\n        }\n    }\n\n    render() {\n        const { onCloseForm } = this.props;\n        const {\n            dataOpublikowania,\n            dataUtworzenia,\n            numer\n        } = this.props.pytanie;\n\n        const {\n            errors,\n            fetchError,\n            pytanieTresc,\n            savingOn,\n            tresc\n        } = this.state;\n\n        const isTrescInvalid = ((errors.odpowiedz || {}).tresc || []).length > 0;\n        const isPytanieTrescInvalid = (errors.tresc || []).length > 0;\n        const isFormInvalid = isTrescInvalid || isPytanieTrescInvalid;\n\n        let questionLabel = `Pytanie nr ${numer}, data wysłania ${dataUtworzenia}`;\n\n        if (dataOpublikowania) {\n            questionLabel += `, data opublikowania ${dataOpublikowania}`\n        }\n\n        return (\n            <DialogCustom\n                dialogTitle=\"Odpowiedz na pytanie\"\n                onClose={onCloseForm}\n            >\n                <>\n                    <Text className=\"question__label\">{questionLabel}</Text>\n                    <FieldWithLabel label=\"Treść pytania\" tag=\"label\" labelFor=\"trescPytania_id\">\n                        <TextFieldCustom\n                            aria-describedby={isPytanieTrescInvalid ? 'trescPytania_error' : null}\n                            aria-label={`Treść pytania, maksymalna liczba znaków: 2000. Wpisano ${pytanieTresc.length} znaków.`}\n                            aria-valuemax={2000}\n                            characterCount\n                            clearFieldContext=\"treść pytania\"\n                            disabled={savingOn}\n                            fullwidth\n                            id=\"trescPytania_id\"\n                            invalid={isPytanieTrescInvalid}\n                            maxLength={2000}\n                            onClear={(ev) => this.setState({pytanieTresc: ''})}\n                            onChange={(ev) => this.setState({pytanieTresc: ev.target.value})}\n                            textarea\n                            value={pytanieTresc} />\n                        {isPytanieTrescInvalid && <ul id=\"trescPytania_error\">{errors.tresc.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                    </FieldWithLabel>\n                    <FieldWithLabel label=\"Odpowiedź\" tag=\"label\" labelFor=\"trescOdpowiedzi_id\">\n                        <TextFieldCustom\n                            aria-describedby={isTrescInvalid ? 'trescOdpowiedzi_error' : null}\n                            aria-label={`Odpowiedź, maksymalna liczba znaków: 5000. Wpisano ${tresc.length} znaków.`}\n                            aria-valuemax={5000}\n                            characterCount\n                            clearFieldContext=\"odpowiedź\"\n                            disabled={savingOn}\n                            fullwidth\n                            id=\"trescOdpowiedzi_id\"\n                            invalid={isTrescInvalid}\n                            maxLength={5000}\n                            onClear={(ev) => this.setState({tresc: ''})}\n                            onChange={(ev) => this.setState({tresc: ev.target.value})}\n                            textarea\n                            value={tresc} />\n                        {isTrescInvalid && <ul id=\"trescOdpowiedzi_error\">{errors.odpowiedz.tresc.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                    </FieldWithLabel>\n                    {fetchError.length > 0 && <Text error role=\"alert\">{fetchError}</Text>}\n                    <GridCustom flexTop fullwidth>\n                        <GridCustom>\n                            <ButtonStyled\n                                cancel\n                                disabled={savingOn}\n                                onClick={onCloseForm}>\n                                Anuluj\n                            </ButtonStyled>\n                            {(this.props.pytanie.status.label !== 'PUBLISHED') && (\n                                <ButtonStyled\n                                    disabled={savingOn}\n                                    lite\n                                    onClick={this.handleSaveDraft} >\n                                    Zapisz wersję roboczą\n                                </ButtonStyled>\n                            ) }\n                        </GridCustom>\n                        <ButtonStyled\n                            className=\"btn btn--main\"\n                            disabled={savingOn}\n                            onClick={this.handleSavePublished}\n                            save >\n                            Opublikuj\n                        </ButtonStyled>\n                    </GridCustom>\n                    {isFormInvalid && <span role=\"alert\" className=\"sr-only\">Formularz zawiera błędy.</span>}\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\nexport { FormOdpowiedz };\n","import React, { Component } from 'react';\n\nimport { fetchApi } from '../../../fetch';\nimport {\n    getSerializedErrorsFromServer,\n    getSerializedObject,\n    translateErrorMessage,\n} from '../../../serializers';\n\nimport {\n    ButtonStyled,\n    DialogCustom,\n    FieldWithLabel,\n    GridCustom,\n    Text,\n    TextFieldCustom,\n} from '../../common';\n\n\nclass FormPytanie extends Component {\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            tresc: '',\n            savingOn: false,\n            fetchError: '',\n            errors: {},\n        }\n    }\n\n    handleSave = () => {\n        this.setState(\n            {savingOn: true},\n            () => {\n                // save object on server\n                this.xhrSave = fetchApi(\n                    '/api/question',\n                    'POST',\n                    {},\n                    getSerializedObject(\n                        {\n                            tresc: this.state.tresc,\n                            ogloszenie: this.props.advertisementId,\n                        },\n                        {toServer: true}\n                    ),\n                    this.handleFetchSaveSuccess,\n                    this.handleFetchSaveError,\n                    this.handleFetchSaveIncorrectStatus,\n                    this.handleShowSaveErrors,\n                );\n            }\n        )\n    }\n\n    handleFetchSaveSuccess = (data) => {\n        this.xhrSave = null;\n        this.props.onAddQuestion(getSerializedObject(data).pytanie);\n    }\n\n    handleFetchSaveError = (data) => {\n        this.xhrSave = null;\n\n        this.setState({\n            fetchError: translateErrorMessage(data.message),\n            savingOn: false,\n        });\n    }\n\n    handleFetchSaveIncorrectStatus = (status) => {\n        this.xhrSave = null;\n\n        this.setState({\n            fetchError: `Wystąpił nieoczekiwany błąd o kodzie ${status}.`,\n            savingOn: false,\n        });\n    }\n\n    handleShowSaveErrors = (errors) => {\n        this.xhrSave = null;\n\n        this.setState({\n            errors: getSerializedErrorsFromServer(errors),\n            savingOn: false,\n        });\n    }\n\n    render() {\n        const { onCloseForm } = this.props;\n        const { errors, fetchError, savingOn, tresc } = this.state;\n        const isTrescInvalid = (errors.tresc || []).length > 0;\n\n        return (\n            <DialogCustom\n                dialogTitle=\"Zadaj pytanie\"\n                onClose={onCloseForm}\n            >\n                <>\n                    <FieldWithLabel label=\"Treść pytania\" tag=\"label\" labelFor=\"tresc_id\">\n                        <TextFieldCustom\n                            aria-describedby={isTrescInvalid ? 'tresc_error' : null}\n                            aria-label={`Treść pytania, maksymalna liczba znaków: 2000. Wpisano ${tresc.length} znaków.`}\n                            aria-valuemax={2000}\n                            characterCount\n                            clearFieldContext=\"treść pytania\"\n                            disabled={savingOn}\n                            fullwidth\n                            id=\"tresc_id\"\n                            invalid={isTrescInvalid}\n                            onClear={(ev) => this.setState({tresc: ''})}\n                            onChange={(ev) => this.setState({tresc: ev.target.value})}\n                            maxLength={2000}\n                            value={tresc}\n                            textarea />\n                        {isTrescInvalid && <ul id=\"tresc_error\" role=\"alert\">{errors.tresc.map((e, i) => <Text error key={i} tag=\"li\">{e}</Text>)}</ul>}\n                    </FieldWithLabel>\n                    {fetchError.length > 0 && <Text error role=\"alert\">{fetchError}</Text>}\n                    <GridCustom fullwidth flexTop>\n                        <ButtonStyled\n                            cancel\n                            disabled={savingOn}\n                            onClick={onCloseForm}>\n                            Anuluj\n                        </ButtonStyled>\n                        <ButtonStyled\n                            className=\"btn btn--main\"\n                            disabled={savingOn}\n                            icon={savingOn ? 'send' : 'done'}\n                            onClick={this.handleSave}\n                            primary >\n                            {savingOn ? 'Wysyłam...' : 'Zadaj pytanie'}\n                        </ButtonStyled>\n                    </GridCustom>\n                </>\n            </DialogCustom>\n        )\n    }\n}\n\nexport { FormPytanie };\n","import React, { Component } from \"react\";\nimport { Icon } from \"@rmwc/icon\";\n\nimport {\n  ButtonStyled,\n  Container,\n  FieldWithLabel,\n  GridCustom,\n  Text,\n} from \"../../common\";\nimport { BadgeAnchor, Badge } from \"@rmwc/badge\";\nimport \"@rmwc/badge/badge.css\";\nimport { fetchApi } from \"../../../fetch\";\nimport { MenuContext } from \"../../../context/menuContext\";\n\nclass Pytanie extends Component {\n  static contextType = MenuContext;\n\n  // handlers\n\n  handleAnswer = (e) => {\n    this.props.onClickAnswer(this.props.question.id);\n    e.currentTarget.blur();\n  };\n\n  handleRemoveBadge = () => {\n    fetchApi(\n      `/api/badge/question/${this.props.question.id}`,\n      \"DELETE\",\n      {},\n      {},\n      () => {\n        this.props.reloadAnnouncement();\n      }\n    );\n  };\n\n  // rendering\n  render() {\n    const { jestAutorem, tresc, trescOryginalna, badge } = this.props.question;\n    const { refreshBadges } = this.context;\n\n    return (\n      <Container containerTag=\"li\" className=\"question\">\n        {jestAutorem && !this.props.noAuthorLabel && (\n          <Text className=\"author-label\">Moje pytanie</Text>\n        )}\n        <FieldWithLabel label={this.renderPytanieLabel()}>\n          {trescOryginalna && trescOryginalna !== tresc && (\n            <>\n              <Text className=\"question__original-content--header\">\n                Zmieniono treść pytania. Oryginalna treść:\n              </Text>\n              <Text className=\"question__original-content long-text\">\n                {trescOryginalna}\n              </Text>\n            </>\n          )}\n          <Text className=\"long-text\">\n            {trescOryginalna && trescOryginalna !== tresc && (\n              <span className=\"sr-only\">Wyświetlana treść: </span>\n            )}\n            {tresc || \"\"}\n          </Text>\n        </FieldWithLabel>\n        {this.renderOdpowiedz()}\n        {this.props.allowAnswer && (\n          <GridCustom flexEnd>{this.renderPytanieButton()}</GridCustom>\n        )}\n        {badge && (\n          <GridCustom flexEnd>\n            <BadgeAnchor>\n              <ButtonStyled\n                onClick={() => {\n                  this.handleRemoveBadge();\n                  refreshBadges();\n                }}\n                primary\n                icon=\"check\"\n              >\n                USUŃ OZNACZENIE JAKO NOWE\n                <span className=\"sr-only\"> dla pytania {this.renderPytanieLabel()}</span>\n              </ButtonStyled>\n              <Badge label=\"N\" />\n            </BadgeAnchor>\n          </GridCustom>\n        )}\n      </Container>\n    );\n  }\n\n  renderPytanieLabel() {\n    const { dataOpublikowania, dataUtworzenia, numer, status } =\n      this.props.question;\n\n    let questionLabel = `Pytanie numer ${numer}, data wysłania ${dataUtworzenia}`;\n\n    if (status.label === \"PUBLISHED\") {\n      questionLabel += `, data opublikowania ${dataOpublikowania}`;\n    }\n\n    return questionLabel;\n  }\n\n  renderOdpowiedzLabel() {\n    if (this.props.question.status.label === \"PUBLISHED\") {\n      return \"Udzielono odpowiedzi\";\n    } else {\n      return \"Robocza wersja odpowiedzi\";\n    }\n  }\n\n  renderOdpowiedz() {\n    if (this.props.question.odpowiedz) {\n      return (\n        <FieldWithLabel\n          label={this.renderOdpowiedzLabel()}\n          className=\"question__answer\"\n        >\n          <Icon\n            aria-hidden=\"true\"\n            icon=\"subdirectory_arrow_right\"\n            className=\"question__answer-icon\"\n          />\n          <Text className=\"long-text\">\n            {this.props.question.odpowiedz.tresc}\n          </Text>\n        </FieldWithLabel>\n      );\n    }\n\n    return <Text info>Brak odpowiedzi</Text>;\n  }\n\n  renderPytanieButton() {\n    const { status } = this.props.question;\n\n    if (!this.props.annoucementOwner) {\n      return null;\n    }\n    switch (status.label) {\n      case \"DRAFT\":\n        return (\n          <ButtonStyled lite noMargin onClick={this.handleAnswer}>\n            Edytuj / Publikuj\n            <span className=\"sr-only\"> {this.renderPytanieLabel()}</span>\n          </ButtonStyled>\n        );\n      case \"PUBLISHED\":\n        return (\n          <ButtonStyled lite noMargin onClick={this.handleAnswer}>\n            Edytuj<span className=\"sr-only\"> {this.renderPytanieLabel()}</span>\n          </ButtonStyled>\n        );\n      case \"NEW\":\n        return (\n          <ButtonStyled primary noMargin onClick={this.handleAnswer}>\n            Udziel odpowiedzi\n            <span className=\"sr-only\"> na {this.renderPytanieLabel()}</span>\n          </ButtonStyled>\n        );\n      default:\n        return null;\n    }\n  }\n}\n\nexport { Pytanie };\n","import React from 'react';\n\nimport { BasePytaniaForOgloszenieWidthPdf } from './BasePytaniaForOgloszenieWidthPdf';\nimport { FormOdpowiedz } from './FormOdpowiedz';\nimport { Pytanie } from './Pytanie';\nimport { Container, Text } from '../../common';\n\n\nclass PytaniaForOgloszenieAnnouncementOwner extends BasePytaniaForOgloszenieWidthPdf {\n\n    handleUpdate = (id, data) => {\n        const { odpowiedz, status, tresc } = data;\n        this.setState(\n            prevState => ({\n                answeredQuestionId: null,\n                pytania: prevState.pytania.map(q => {\n                    if (q.id === id) {\n                        q = Object.assign({}, q, {\n                            tresc: tresc,\n                            status: status,\n                            odpowiedz: {\n                                id: odpowiedz.id,\n                                tresc: odpowiedz.tresc\n                            }\n                        });\n                    }\n                    return q\n                }),\n            })\n        );\n    }\n\n    handleShowAnswerForm = (id) => {\n        this.setState({answerFormOn: true, answeredQuestionId: id});\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            pytania: [],\n            answerFormOn: false,\n            answeredQuestionId: null,\n            pdfCreatingOn: false,\n        }\n    }\n\n    // rendering\n\n    renderContent() {\n        const pytania = this.state.pytania;\n\n        if (!pytania.length) {\n            return <Text info>Nie zadano żadnego pytania.</Text>\n        }\n\n        return (\n            <>\n                <Container className=\"questions-container\">\n                    {this.renderPrintButton()}\n                    <Text tag=\"h3\" mainHeader>Zadane pytania</Text>\n                    <Text info>Liczba wyników: {pytania.length}</Text>\n                    {this.state.answerFormOn && this.renderAnswerForm()}\n                    <ul>\n                        {pytania.map((q) => {\n                            return (\n                                <Pytanie\n                                    allowAnswer={this.props.ogloszenie.ogloszenie.status.label === 'PUBLISHED'}\n                                    key={q.id}\n                                    question={q}\n                                    annoucementOwner\n                                    onClickAnswer={this.handleShowAnswerForm}\n                                    reloadAnnouncement={this.props.reloadAnnouncement} />\n                            )\n                        })}\n                    </ul>\n                </Container>\n\n            </>\n        )\n    }\n\n    renderAnswerForm(pytanie) {\n        if (this.state.answeredQuestionId === null) { return null };\n\n        const answeredQuestion = this.state.pytania.filter(q => q.id === this.state.answeredQuestionId)[0]\n        if ([null, undefined].includes(answeredQuestion)) { return null };\n        return (\n            <FormOdpowiedz\n                pytanie={answeredQuestion}\n                onCloseForm={() => this.setState({answerFormOn: false, answeredQuestionId: null})}\n                onUpdate={this.handleUpdate} />\n        )\n    }\n}\n\nexport { PytaniaForOgloszenieAnnouncementOwner };\n","import React from 'react';\n\nimport { BasePytaniaForOgloszenieWidthPdf } from './BasePytaniaForOgloszenieWidthPdf';\nimport { Pytanie } from './Pytanie';\nimport { ButtonStyled, Container, Text } from '../../common';\nimport { redirectToLoginView } from '../../../helpers';\n\n\nclass PytaniaForOgloszenieAnonymous extends BasePytaniaForOgloszenieWidthPdf {\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            pytania: [],\n        }\n    }\n\n    // rendering\n\n    renderContent() {\n        const pytania = this.state.pytania;\n        const ogloszenieStatus = this.props.ogloszenie.ogloszenie.status.label;\n\n        return (\n            <>\n                {ogloszenieStatus === 'PUBLISHED' && (\n                    <div className=\"login-info-container\">\n                        <ButtonStyled add onClick={redirectToLoginView} className=\"btn btn--main\">Dodaj pytanie</ButtonStyled>\n                        <Text info>Wymaga logowania</Text>\n                    </div>\n                )}\n\n                <Container className=\"questions-container\">\n                    {this.renderPrintButton()}\n                    {!pytania.length ? <Text info>Do tego ogłoszenia nie ma opublikowanych pytań.</Text> : (\n                        <div className=\"questions-list-container\">\n                            <Text mainHeader>Opublikowane pytania i odpowiedzi</Text>\n                            <Text info className=\"text--counter\">Liczba wyników: {pytania.length}</Text>\n                            <ul>\n                                {pytania.map((q) => <Pytanie key={q.id} question={q} reloadAnnouncement={this.props.reloadAnnouncement} />)}\n                            </ul>\n                        </div>\n                    )}\n                </Container>\n            </>\n        )\n    }\n}\n\n\nexport { PytaniaForOgloszenieAnonymous };\n","import React from 'react';\n\nimport { BasePytaniaForOgloszenieWidthPdf } from './BasePytaniaForOgloszenieWidthPdf';\nimport { FormPytanie } from './FormPytanie';\nimport { Pytanie } from './Pytanie';\nimport { ButtonStyled, Container, DialogCustom, GridCustom, Text } from '../../common';\n\n\nclass PytaniaForOgloszenieLoggedIn extends BasePytaniaForOgloszenieWidthPdf {\n\n    handleAddQuestion = (data) => {\n        this.setState(prevState => ({\n            questionFormOn: false,\n            pytania: [...prevState.pytania, data],\n            confirmInfo: true,\n        }));\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            pytania: [],\n            questionFormOn: false,\n            confirmInfo: false,\n        }\n    }\n\n    // rendering\n\n    renderContent() {\n        const { confirmInfo, pytania, questionFormOn, } = this.state;\n        const ogloszenieStatus = this.props.ogloszenie.ogloszenie.status.label;\n        const myQuestionsList = pytania.filter(q => q.jestAutorem);\n        const publishedQuestionsList = pytania.filter(q => q.status.label === 'PUBLISHED');\n        myQuestionsList.sort((a,b) => (a.numer > b.numer) ? 1 : ((b.numer > a.numer) ? -1 : 0));\n\n        return (\n            <>\n                {ogloszenieStatus === 'PUBLISHED' && (\n                    <div className=\"login-info-container\">\n                        <ButtonStyled\n                            add\n                            className=\"btn btn--main\"\n                            onClick={(e) => {\n                                this.setState({questionFormOn: true});\n                                e.currentTarget.blur();\n                            }} >\n                            Dodaj pytanie\n                        </ButtonStyled>\n                    </div>\n                )}\n                <Container className=\"questions-container\">\n                    {this.renderQuestionsList('Moje pytania', myQuestionsList, 'Nie zadałeś pytań do tego ogłoszenia.', true)}\n                </Container>\n                <Container className=\"questions-container\">\n                    {this.renderPrintButton()}\n                    {this.renderQuestionsList('Lista wszystkich opublikowanych pytań i odpowiedzi', publishedQuestionsList, 'Do tego ogłoszenia nie ma opublikowanych pytań.')}\n                </Container>\n                {questionFormOn && this.renderQuestionForm()}\n                {confirmInfo && this.renderConfirmationDialog()}\n            </>\n        )\n    }\n\n    renderQuestionsList(questionsListName, questionsList, noQuestionsInfo, noAuthor=false) {\n        if (questionsList.length) {\n            return (\n                <div className=\"questions-list-container\">\n                    <Text tag=\"h3\" mainHeader>{questionsListName}</Text>\n                    <Text info>Liczba wyników: {questionsList.length}</Text>\n                    <ul>\n                        {questionsList.map((q) => <Pytanie key={q.id} question={q} noAuthorLabel={noAuthor} reloadAnnouncement={this.props.reloadAnnouncement} />)}\n                    </ul>\n                </div>\n            )\n        }\n\n        return <Text info>{noQuestionsInfo}</Text>\n    }\n\n    renderQuestionForm() {\n        return (\n            <FormPytanie\n                advertisementId={this.props.ogloszenie.ogloszenie.id}\n                onCloseForm={() => this.setState({questionFormOn: false})}\n                onAddQuestion={this.handleAddQuestion} />\n        )\n    }\n\n    renderConfirmationDialog() {\n        return (\n            <DialogCustom\n                dialogTitle=\"Wysłano pytanie.\"\n                onClose={() => this.setState({confirmInfo: false})} >\n                <GridCustom flexEnd>\n                    <ButtonStyled save onClick={() => this.setState({ confirmInfo: false })}>OK</ButtonStyled>\n                </GridCustom>\n            </DialogCustom>\n        )\n    }\n}\n\nexport { PytaniaForOgloszenieLoggedIn };\n","import React, { Component, Fragment } from 'react';\nimport { Icon } from '@rmwc/icon';\nimport { Typography } from '@rmwc/typography';\nimport '@rmwc/icon/icon.css';\n\nimport {\n    dateStringToYearMonth,\n    datetimeStringToISO,\n    getUserFullName,\n    isNotEmpty,\n    listOrEmpty,\n\tsaveFileFromApi\n} from '../../../helpers';\nimport {\n    Box,\n    Container,\n    GridCustom,\n    FieldWithLabel,\n    Text,\n    AuditData,\n\tButtonStyled\n} from '../../common';\n\n\nconst TYP_NUMERU_IDENTYFIKACYJNEGO = {\n    'nip': 'NIP',\n    'pesel': 'PESEL',\n    'numer_zagraniczny': 'Numer identyfikacyjny',\n}\n\n\nclass OgloszenieDetails extends Component {\n\n    // base functions\n\n    componentDidMount() {\n        document.title = \"Baza Konkurencyjności - szczegóły ogłoszenia \" + this.props.ogloszenie.tytul;\n        window.scrollTo(0, 0);\n    }\n\n    // helpers\n\n    getPrzedmiotyZamowieniaList() {\n        let przedmiotyZamowienia = [];\n        for (let z of this.props.ogloszenie.zamowienia) {\n            przedmiotyZamowienia = [...przedmiotyZamowienia, ...z.przedmiotyZamowienia];\n        }\n        return przedmiotyZamowienia\n    }\n\n    getHarmonogramList(przedmiotyZamowienia) {\n        let harmonogramy = [];\n        for (let pz of przedmiotyZamowienia) {\n            if (!isNotEmpty(pz.harmonogramy, 'list')) {\n                continue\n            }\n            let i = 1;\n            for (let h of pz.harmonogramy) {\n                harmonogramy.push({\n                    date: h.poczatekRealizacji,\n                    label: `Etap${i} (początek): ${pz.kategoria.nazwa || '-'} / ${pz.podkategoria.nazwa || '-'} / ${(pz.opis || '').substring(0, 100)}...`,\n                    key: `${pz.id}_${i}_1`,\n                    hasPointer: true,\n                })\n                harmonogramy.push({\n                    date: h.koniecRealizacji,\n                    label: `Etap${i} (koniec): ${pz.kategoria.nazwa || '-'} / ${pz.podkategoria.nazwa || '-'} / ${(pz.opis || '').substring(0, 100)}... ${h.czyWystepujePlatnoscCzesciowa ? ' / występuje płatność częściowa' : ''}`,\n                    key:`${pz.id}_${i}_2`,\n                    hasPointer: true,\n                })\n                i++;\n            }\n        }\n        return harmonogramy\n    }\n\n    prepareChartData(harmonogramy) {\n        const baseHeigth = 15;\n        harmonogramy = listOrEmpty(harmonogramy);\n        if (harmonogramy.length === 1) {\n            harmonogramy[0]['height'] = 0;\n        } else {\n            const firstDate = harmonogramy[0].date;\n            if (!firstDate.length) {    // every date is empty\n                for (let obj of harmonogramy) {\n                    obj['height'] = baseHeigth;\n                }\n            } else {\n                let lastDate = '';\n                for (let i = harmonogramy.length - 1; i >= 0; i--){\n                    if (isNotEmpty(harmonogramy[i].date)) {\n                        lastDate = harmonogramy[i].date;\n                        break\n                    }\n                }\n\n                const maxDistance = new Date(\n                    datetimeStringToISO(lastDate)).getTime() - new Date(\n                    datetimeStringToISO(firstDate)).getTime();\n                const factor = (harmonogramy.length - 1) * 100;\n                for (let i = 0; i < harmonogramy.length; i++) {\n                    const obj = harmonogramy[i];\n                    if (!obj.date.length) {\n                        obj['height'] = baseHeigth;\n                    } else {\n                        const nextObj = harmonogramy[i + 1];\n                        if (i < harmonogramy.length - 1 && nextObj.date !== null) {\n                            if (obj.date === nextObj.date) {\n                                obj['height'] = 0;\n                                nextObj['hasPointer'] = false;\n                            } else if (!nextObj.date.length) {\n                                obj['height'] = baseHeigth;\n                            } else {\n                                const height = (new Date(\n                                    datetimeStringToISO(nextObj.date)).getTime() - new Date(\n                                    datetimeStringToISO(obj.date)).getTime()) / maxDistance * factor;\n                                obj['height'] = height < 20 ? 20 : (height > 170 ? 170 : height);\n                            }\n                        } else {\n                            obj['height'] = baseHeigth;\n                        }\n                    }\n                }\n            }\n            //we don't want to have line after last element\n            harmonogramy[harmonogramy.length - 1]['height'] = 0;\n        }\n        return harmonogramy\n    }\n\nhandleSaveFileFromApi = (url, fileName) => {\n        this.setState(\n            () => saveFileFromApi(\n                url,\n\t\t\t\tfileName)\n        );\n    }\n\n    // rendering\n\n    render() {\n        const o = this.props.ogloszenie;\n        const { ogloszenie } = o;\n        const { nabor } = ogloszenie;\n        const showVersionModeInfo = this.props.versionMode && o.status.label !== 'DRAFT' && ogloszenie.ostatniaOpublikowanaWersjaId !== o.id;\n        return (\n            <>\n                {showVersionModeInfo && <Text className=\"success-text\"><Icon icon=\"error\" aria-hidden=\"true\" style={{'marginRight': 3}} />To jest nieaktualna wersja ogłoszenia. Ta wersja została opublikowana dnia {o.dataOpublikowania}.</Text>}\n                <Container className=\"details-preview\">\n                    <GridCustom flexL fullwidth noWrap>\n                        <section className=\"details-preview__part details-preview__part--main\">\n                            {isNotEmpty(ogloszenie.projekty, 'list') && (\n                                <FieldWithLabel label=\"Powstaje w kontekście projektu\">\n                                    {ogloszenie.projekty.map(p => <Text key={p.id}>{p.calyNumer} - {p.nazwa}</Text>)}\n                                </FieldWithLabel>\n                            )}\n                            {!!nabor && (\n                                <FieldWithLabel label=\"Powstaje w kontekście naboru\">\n                                    <Text>{nabor.calyNumer}{nabor.nazwa.length > 0 ? ` - ${nabor.nazwa}` : ''}</Text>\n                                </FieldWithLabel>\n                            )}\n                            {isNotEmpty(o.zamowieniaUzupelniajace) && (\n                                <FieldWithLabel label=\"Zamówienia uzupełniające\">\n                                    <Text className=\"long-text\">{o.zamowieniaUzupelniajace}</Text>\n                                </FieldWithLabel>\n                            )}\n                            {isNotEmpty(o.warunkiZmianyUmowy) && (\n                                <FieldWithLabel label=\"Warunki zmiany umowy\">\n                                    <Text className=\"long-text\">{o.warunkiZmianyUmowy}</Text>\n                                </FieldWithLabel>\n                            )}\n                            {isNotEmpty(o.zalaczniki, 'list') && (\n                                <FieldWithLabel label=\"Załączniki\">\n                                    {/* attachments are sorted by origin announcement version */}\n                                    {o.zalaczniki.map(origin => this.renderOrigin(origin))}\n                                </FieldWithLabel>\n                            )}\n                        </section>\n                        <aside className=\"details-preview__part details-preview__part--aside\">\n                            <FieldWithLabel label=\"Czy dopuszczalna oferta częściowa?\">\n                                <Text>{o.czyDopuszczalnaOfertaCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n                            </FieldWithLabel>\n\n                            {this.renderDaneAdresoweOgloszeniodawcy()}\n                            {isNotEmpty(o.osobyDoKontaktu, 'list') && this.renderOsobyDoKontaktu()}\n                        </aside>\n                    </GridCustom>\n                </Container>\n                {this.renderZamowienia()}\n                {this.renderPodsumowanie()}\n                {(ogloszenie.jestAutorem || ogloszenie.isAdmin) &&\n                    <AuditData {...this.props.auditData} />\n                }\n            </>\n        )\n    }\n\n    renderOrigin(origin) {\n        const ogloszenie = this.props.ogloszenie;\n        let indexVersion = (ogloszenie.ogloszenie.all_available_version_ids || []).indexOf(origin.id);\n        if (indexVersion > -1) {\n            indexVersion++;\n        } else {\n            indexVersion = '';\n        }\n        let label = origin.id === ogloszenie.id ? (\n            this.props.draftMode ? 'aktualnej wersji roboczej' : `obowiązującej wersji z dn. ${origin.dataOpublikowania}`\n        ) : `wersji ${indexVersion} z dn. ${origin.dataOpublikowania}`;\n        return this.renderAttachmentsForOrigin(origin, label)\n    }\n\n    renderAttachmentsForOrigin(origin, label) {\n        return (\n            <Fragment key={origin.id}>\n                <Typography tag=\"h2\" use=\"button\" className=\"attachements__header\">Dodane do ogłoszenia w {label}</Typography>\n                <ol className=\"attachements__list\">\n                    {origin.zalaczniki.map((z, i) => {\n                        if (z.nazwa.length || Object.keys(z.plik).length) {\n                            return (\n                                <li key={z.id} className=\"grid-custom attachements__download-item\">\n                                    <Text key={z.id}>\n                                        {i + 1}. {z.nazwa || 'Załącznik bez nazwy'}\n                                        {z.plik && z.plik.uri.length > 0 && <ButtonStyled className=\"btn--pdf-dowload\" onClick={(ev) => this.handleSaveFileFromApi(z.plik.uri, z.plik.nazwa)}>Pobierz</ButtonStyled>}\n                                    </Text>\n                                </li>\n                            )\n                        } else {return null}\n                    })}\n                </ol>\n            </Fragment>\n        )\n    }\n\n    renderDaneAdresoweOgloszeniodawcy() {\n        if (!this.props.ogloszenie.daneAdresoweOgloszeniodawcy) {\n            return null\n        }\n        const daneAdresowe = this.props.ogloszenie.daneAdresoweOgloszeniodawcy || {};\n        const adres = daneAdresowe.adres || {};\n        return (\n            <FieldWithLabel label=\"Dane adresowe ogłoszeniodawcy\">\n                <Text>{daneAdresowe.nazwa}</Text>\n                <Text>{adres.ulica} {adres.numerDomu}</Text>\n                <Text>{adres.kodPocztowy} {adres.miejscowosc}</Text>\n                {adres.country === 'Polska' && (\n                    <>\n                        <Text>gmina/dzielnica: {adres.gmina}</Text>\n                        <Text>powiat: {adres.powiat}</Text>\n                        <Text>woj.: {adres.wojewodztwo}</Text>\n                    </>\n                )}\n                {adres.kraj !== 'Polska' && (\n                    <Text>{adres.kraj}</Text>\n                )}\n                <Text>{TYP_NUMERU_IDENTYFIKACYJNEGO[daneAdresowe.typNumeruIdentyfikacyjnego]}: {daneAdresowe.numerIdentyfikacyjny}</Text>\n            </FieldWithLabel>\n        )\n    }\n\n    renderOsobyDoKontaktu() {\n        return (\n            <FieldWithLabel label=\"Osoby do kontaktu\">\n                {this.props.ogloszenie.osobyDoKontaktu.map(osoba => {\n                    return (\n                        <div key={osoba.id} className=\"separate-content\">\n                            <Text>{getUserFullName(osoba)}</Text>\n                            <Text>tel.: {osoba.numerTelefonu || '-'}</Text>\n                            <Text>e-mail: {osoba.email}</Text>\n                        </div>\n                    )\n                })}\n            </FieldWithLabel>\n        )\n    }\n\n    renderZamowienia() {\n        const o = this.props.ogloszenie;\n\n        if (!isNotEmpty(o.zamowienia)) {\n            return (\n                <>\n                    <Text tag=\"h2\" mainHeader>Części zamówienia</Text>\n                    <Container>\n                        <Text error>Brak zdefiniowanych części zamówienia</Text>\n                    </Container>\n                </>\n            )\n        }\n\n        let tableOfContetns = null;\n\n        if (o.zamowienia.length > 1) {\n            tableOfContetns = (\n                <Container>\n                    <Text className=\"label\">Spis treści</Text>\n                    {o.zamowienia.map((z, i) => (\n                        <button key={z.id} onClick={() => window.scrollTo(0, refs[i].current.offsetTop)} className=\"link-text announcement__part-link\"><span className=\"sr-only\">Przejdź do części: </span>Część {i + 1}{isNotEmpty(z.tytul) && `: ${z.tytul}`}</button>\n                    ))}\n                </Container>\n            )\n        }\n\n        const refs = o.zamowienia.map(z => React.createRef());\n\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>Części zamówienia</Text>\n                {tableOfContetns}\n                <ul>\n                    {o.zamowienia.map((z, i) => (\n                        <li key={z.id} ref={refs[i]} className=\"announcement__part\">\n                            <GridCustom fullwidth noWrap flexTop flexM>\n                                <section className=\"announcement__part-title\">\n                                    <Text mainHeader tag=\"h2\">Część {i + 1}</Text>\n                                    {isNotEmpty(z.tytul) && <Typography use=\"headline6\" tag=\"h2\">{z.tytul}</Typography>}\n                                </section>\n                                <section className=\"announcement__part-price\">\n                                    {isNotEmpty(z.szacunkowaWartosc) && (\n                                        <FieldWithLabel label=\"Budżet\">\n                                            <Typography use=\"headline6\">{z.szacunkowaWartosc.replace('.', ',')} PLN</Typography>\n                                        </FieldWithLabel>\n                                    )}\n                                    <FieldWithLabel label=\"Czy dopuszczalne oferty wariantowe\">\n                                        <Text>{z.czyWariantowe === true ? 'TAK' : 'NIE'}</Text>\n                                    </FieldWithLabel>\n                                </section>\n                            </GridCustom>\n                            {this.renderPrzedmiotyZamowienia(z.przedmiotyZamowienia)}\n                            {this.renderKryteriaOceny(z.kryteriaOceny)}\n                        </li>\n                    ))}\n                </ul>\n            </>\n        )\n    }\n\n    renderPrzedmiotyZamowienia(przedmiotyZamowienia) {\n        if (isNotEmpty(przedmiotyZamowienia, 'list')) {\n            return (\n                <>\n                    <Text tag=\"h3\" accentHeader>Przedmioty zamówienia</Text>\n                    <ul>\n                        {przedmiotyZamowienia.map((pz) => this.renderPrzedmiotZamowienia(pz))}\n                    </ul>\n                </>\n            )\n        }\n        return (\n            <>\n                <Text tag=\"h3\" accentHeader>Przedmioty zamówienia</Text>\n                <Text error>Brak zdefiniowanych przedmiotów zamówienia</Text>\n            </>\n        )\n    }\n\n    renderPrzedmiotZamowienia(przedmiotZamowienia) {\n        return <Box\n                    fullwidth\n                    key={przedmiotZamowienia.id}\n                    headerTag=\"h4\"\n                    tag=\"li\"\n                    titleWithSubtitle={przedmiotZamowienia.kategoria.nazwa || '-'}\n                    subtitle={przedmiotZamowienia.podkategoria.nazwa || '-'}\n                >\n                    {isNotEmpty(przedmiotZamowienia.opis) && (\n                        <FieldWithLabel label=\"Opis\">\n                            <Text className=\"long-text\">{przedmiotZamowienia.opis}</Text>\n                        </FieldWithLabel>\n                    )}\n                    {isNotEmpty(przedmiotZamowienia.okresGwarancji) && (\n                        <FieldWithLabel label=\"Okres gwarancji\">\n                            <Text>{przedmiotZamowienia.okresGwarancji}</Text>\n                        </FieldWithLabel>\n                    )}\n                    {isNotEmpty(przedmiotZamowienia.kodyCPV, 'list') && this.renderKodyCPV(przedmiotZamowienia.kodyCPV)}\n                    {isNotEmpty(przedmiotZamowienia.miejscaRealizacji, 'list') && this.renderMiejscaRealizacji(przedmiotZamowienia.miejscaRealizacji)}\n                    {isNotEmpty(przedmiotZamowienia.harmonogramy, 'list') && this.renderHarmonogram(przedmiotZamowienia.harmonogramy)}\n                    {isNotEmpty(przedmiotZamowienia.warunkiUdzialu, 'list') && this.renderWarunkiUdziału(przedmiotZamowienia.warunkiUdzialu)}\n                </Box>\n    }\n\n    renderKodyCPV(kodyCPV) {\n        return (\n            <FieldWithLabel label=\"Kody CPV\">\n                {kodyCPV.map(kod_ => <Text key={kod_.id}>{kod_.kod} {kod_.nazwa}</Text>)}\n            </FieldWithLabel>\n        )\n    }\n\n    renderMiejscaRealizacji(miejscaRealizacji) {\n        return (\n            <FieldWithLabel label=\"Miejsca realizacji\">\n                {miejscaRealizacji.map(mr => {\n                    let address = null;\n                    if (mr.kraj || mr.wojewodztwo || mr.powiat || mr.gmina || mr.miejscowosc) {\n                        address = (\n                            <GridCustom fullwidth className=\" separate-content\">\n                                {isNotEmpty(mr.kraj) && (\n                                    <FieldWithLabel label=\"Kraj\">\n                                        <Text>{mr.kraj}</Text>\n                                    </FieldWithLabel>\n                                )}\n                                {isNotEmpty(mr.wojewodztwo) && (\n                                    <FieldWithLabel label=\"Województwo\">\n                                        <Text>{mr.wojewodztwo}</Text>\n                                    </FieldWithLabel>\n                                )}\n                                {isNotEmpty(mr.powiat) && (\n                                    <FieldWithLabel label=\"Powiat\">\n                                        <Text>{mr.powiat || '-'}</Text>\n                                    </FieldWithLabel>\n                                )}\n                                {isNotEmpty(mr.gmina) && (\n                                    <FieldWithLabel label=\"Gmina\">\n                                        <Text>{mr.gmina || '-'}</Text>\n                                    </FieldWithLabel>\n                                )}\n                                {isNotEmpty(mr.miejscowosc) && (\n                                    <FieldWithLabel label=\"Miejscowość\">\n                                        <Text>{mr.miejscowosc || '-'}</Text>\n                                    </FieldWithLabel>\n                                )}\n                            </GridCustom>\n                        );\n                    }\n                    return (\n                        <div key={mr.id}>\n                            <GridCustom centerVertical className=\" separate-content\">\n                                <Text>{mr.typ.nazwa}</Text>\n                            </GridCustom>\n                            {address}\n                        </div>\n                    )\n                })}\n            </FieldWithLabel>\n        )\n    }\n\n    renderHarmonogram(harmonogramy) {\n        let i = 0;\n        return (\n            <>\n                <Text tag=\"h2\" accentHeader>Harmonogram</Text>\n                <ul>\n                    {harmonogramy.map((h) => {\n                        i++;\n                        return (\n                            <li key={h.id} className=\"separate-content\">\n                                <Text info>Etap {i}</Text>\n                                <GridCustom>\n                                    {isNotEmpty(h.poczatekRealizacji) && (\n                                        <FieldWithLabel label=\"Początek realizacji\">\n                                            <Text>{h.poczatekRealizacji}</Text>\n                                        </FieldWithLabel>\n                                    )}\n                                    {isNotEmpty(h.koniecRealizacji) && (\n                                        <FieldWithLabel label=\"Koniec realizacji\">\n                                            <Text>{h.koniecRealizacji}</Text>\n                                        </FieldWithLabel>\n                                    )}\n                                    <FieldWithLabel label=\"Czy występuje płatność częściowa\">\n                                        <Text>{h.czyWystepujePlatnoscCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n                                    </FieldWithLabel>\n                                </GridCustom>\n                                {isNotEmpty(h.opis) && (\n                                    <FieldWithLabel label=\"Opis\">\n                                        <Text className=\"long-text\">{h.opis}</Text>\n                                    </FieldWithLabel>\n                                )}\n                            </li>\n                        )\n                    })}\n                </ul>\n            </>\n        )\n    }\n\n    renderWarunkiUdziału(warunkiUdzialu) {\n        return (\n            <>\n                <Text tag=\"h3\" accentHeader>Warunki, jakie musi spełniać oferent</Text>\n                {warunkiUdzialu.map((wu) =>\n                    <div key={wu.id} className=\"separate-content\">\n                        {wu.typ.id !== null && (\n                            <FieldWithLabel label=\"Typ\">\n                                <Text>{wu.typ.nazwa}</Text>\n                            </FieldWithLabel>\n                        )}\n                        {isNotEmpty(wu.opis) && (\n                            <FieldWithLabel label=\"Opis\">\n                                <Text className=\"long-text\">{wu.opis}</Text>\n                            </FieldWithLabel>\n                        )}\n                    </div>\n                )}\n            </>\n        )\n    }\n\n    renderKryteriaOceny(kryteriaOceny) {\n        if (!isNotEmpty(kryteriaOceny, 'list')) {\n            return (\n                <>\n                    <Text tag=\"h3\" accentHeader>Kryteria oceny</Text>\n                    <Text error>Brak zdefiniowanych kryteriów oceny</Text>\n                </>\n            )\n        }\n        return (\n            <>\n                <Text tag=\"h3\" accentHeader>Kryteria oceny</Text>\n                <GridCustom tag=\"ul\">\n                    {kryteriaOceny.map((ko) => (\n                        <Box key={ko.id} tag=\"li\">\n                            <Text label>Czy kryterium cenowe</Text>\n                            <Text>{ko.czyKryteriumCenowe === true ? 'TAK' : 'NIE'}</Text>\n                            {isNotEmpty(ko.opis) && (\n                                <FieldWithLabel label=\"Opis\">\n                                    <Text className=\"long-text\">{ko.opis}</Text>\n                                </FieldWithLabel>\n                            )}\n                        </Box>\n                    ))}\n                </GridCustom>\n            </>\n        )\n    }\n\n    renderPodsumowanie() {\n        return (\n            <>\n                <Text tag=\"h2\" mainHeader>Podsumowanie</Text>\n                <Text tag=\"h3\" accentHeader>Oś czasu związana z ogłoszeniem i ofertowaniem</Text>\n                {this.renderOgloszeniePodsumowanie()}\n\n                <Text tag=\"h3\" accentHeader>Oś czasu realizacji przedmiotów zamówienia</Text>\n                {this.renderPrzedmiotyZamowieniaPodsumowanie()}\n            </>\n        )\n    }\n\n    renderOgloszeniePodsumowanie() {\n        const o = this.props.ogloszenie;\n        const harmonogram = [\n            {\n                date: o.dataOpublikowania || '',\n                label: 'data opublikowania',\n                key: `${o.id}_dataOpublikowania`,\n                hasPointer: true,\n            },\n            {\n                date: o.terminOfert || '',\n                label: 'termin składania ofert',\n                key: `${o.id}_terminOfert`,\n                hasPointer: true,\n            },\n            {\n                date: o.planowanyTerminPodpisaniaUmowy || '',\n                dateForShowing: (dateStringToYearMonth(o.planowanyTerminPodpisaniaUmowy)),\n                label: 'planowany termin podpisania umowy',\n                key: `${o.id}_planowanyTerminPodpisaniaUmowy`,\n                hasPointer: true,\n            },\n        ];\n        return this.renderChartData(harmonogram)\n    }\n\n    renderPrzedmiotyZamowieniaPodsumowanie() {\n        const przedmiotyZamowienia = this.getPrzedmiotyZamowieniaList();\n        if (!przedmiotyZamowienia.length) {\n            return this.renderTextError('Brak zdefiniowanych przedmiotów zamówienia.')\n        }\n\n        const harmonogramForRendering = this.getHarmonogramList(przedmiotyZamowienia);\n        if (!harmonogramForRendering.length) {\n            return this.renderTextError('Brak zdefiniowanych etapów dla przedmiotów zamówienia.')\n        }\n\n        harmonogramForRendering.sort((h1, h2) => {\n            if (h1.date.length === 0) {return 1}\n            if (h2.date.length === 0) {return -1}\n            return h1.date < h2.date ? -1 : 1\n        });\n\n        return this.renderChartData(harmonogramForRendering);\n    }\n\n    renderChartData(harmonogramy) {\n        this.prepareChartData(harmonogramy);\n        return harmonogramy.map((h) => (\n            <div key={h.key} className=\"time-line\">\n                <GridCustom noWrap>\n                    <div className='time-line__icon'>\n                        <Icon aria-hidden=\"true\" icon={{ icon: h.hasPointer && 'date_range' }} />\n                    </div>\n                    <Text className=\"time-line__text\">{h.dateForShowing || h.date || '????-??-??'} - {h.label}</Text>\n                </GridCustom>\n                <div className=\"time-line__time-container\" style={{height: `${h.height}px`}}></div>\n            </div>\n        ))\n    }\n\n    renderTextError(text) {\n        return <Text error>{text}</Text>\n    }\n}\n\n\nexport { OgloszenieDetails, TYP_NUMERU_IDENTYFIKACYJNEGO };\n","import React from 'react';\nimport { Document, Page, Text, View } from '@react-pdf/renderer';\n\nimport { dateStringToYearMonth, isNotEmpty, splitLineByChar } from '../../../helpers';\nimport { PdfHeader } from '../../common';\nimport { pdfStyles } from '../../vars/pdfStyles';\nimport { OgloszenieDetails, TYP_NUMERU_IDENTYFIKACYJNEGO } from './OgloszenieDetails';\n\n\nclass OgloszeniePdf extends OgloszenieDetails {\n\n    // base functions\n\n    componentDidMount() {\n        // it's redefined, because we don't want to scroll page and change its\n        // title, like in base class\n    }\n\n    // rendering\n\n    render() {\n        const {\n            flexContainerStyle,\n            labelStyle,\n            textWithLabelStyle,\n            mainPdfContainerStyle,\n            sectionTitleStyle,\n            titleStyle\n        } = pdfStyles;\n\n        const o = this.props.ogloszenie;\n        const nabor = o.ogloszenie.nabor;\n        const title = `${parseInt(this.props.roboczeStatusId) === parseInt(o.status.id) ? 'Wersja robocza ogłoszenia: ' : ''}${o.tytul}`;\n        const showVersionModeInfo = this.props.versionMode && o.status.label !== 'DRAFT' && o.ogloszenie.ostatniaOpublikowanaWersjaId !== o.id;\n        return (\n            <Document\n                title={title}\n                creator='Wygenerowano za pośrednictwem serwisu Baza Konkurencyjności.' >\n                <Page size=\"A4\" style={mainPdfContainerStyle} wrap>\n                    <PdfHeader title={title} />\n\n                    {showVersionModeInfo && <Text style={labelStyle}>To jest nieaktualna wersja ogłoszenia. Ta wersja została opublikowana dnia {o.dataOpublikowania}.</Text>}\n                    <Text style={sectionTitleStyle}>Ogłoszenie</Text>\n                    <View style={flexContainerStyle}>\n                        {isNotEmpty(o.ogloszenie.numer) && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Numer</Text>\n                                <Text>{o.ogloszenie.numer}</Text>\n                            </View>\n                        )}\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Id</Text>\n                            <Text>{o.ogloszenie.id}</Text>\n                        </View>\n                    </View>\n                    {isNotEmpty(o.ogloszenie.projekty, 'list') && (\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Powstaje w kontekście projektu</Text>\n                            {o.ogloszenie.projekty.map(p => <Text key={p.id}>{p.calyNumer} - {p.nazwa}</Text>)}\n                        </View>\n                    )}\n                    {!!nabor && (\n                       <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Powstaje w kontekście naboru</Text>\n                            <Text>{nabor.calyNumer}{nabor.nazwa.length > 0 ? ` - ${nabor.nazwa}` : ''}</Text>\n                        </View>\n                    )}\n                    {isNotEmpty(o.tytul) && (\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Tytuł</Text>\n                            {splitLineByChar(o.tytul).map((line, i) => <Text key={i} style={titleStyle}>{line}</Text>)}\n                        </View>\n                    )}\n                    {isNotEmpty(o.zamowieniaUzupelniajace) && (\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Zamówienia uzupełniające</Text>\n                            {splitLineByChar(o.zamowieniaUzupelniajace).map((line, i) => <Text key={i}>{line}</Text>)}\n                        </View>\n                    )}\n                    {isNotEmpty(o.warunkiZmianyUmowy) && (\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Warunki zmiany umowy</Text>\n                            {splitLineByChar(o.warunkiZmianyUmowy).map((line, i) => <Text key={i}>{line}</Text>)}\n                        </View>\n                    )}\n                    {isNotEmpty(o.zalaczniki, 'list') && (\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Załączniki</Text>\n                            {/* attachments are sorted by origin announcement version */}\n                            {o.zalaczniki.map(origin => this.renderOrigin(origin))}\n                        </View>\n                    )}\n                    <View style={textWithLabelStyle}>\n                        <Text style={labelStyle}>Czy dopuszczalna oferta częściowa?</Text>\n                        <Text>{o.czyDopuszczalnaOfertaCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n                    </View>\n                    <View style={flexContainerStyle}>\n                        {this.renderPublishedDates(o)}\n                    </View>\n                    <View style={flexContainerStyle}>\n                        {isNotEmpty(o.terminOfert) && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Termin składania ofert</Text>\n                                <Text>{o.terminOfert}</Text>\n                            </View>\n                        )}\n                        {isNotEmpty(o.planowanyTerminPodpisaniaUmowy) && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Planowany termin podpisania umowy</Text>\n                                <Text>{dateStringToYearMonth(o.planowanyTerminPodpisaniaUmowy)}</Text>\n                            </View>\n                        )}\n                    </View>\n                    {this.renderDaneAdresoweOgloszeniodawcy()}\n                    {isNotEmpty(o.osobyDoKontaktu, 'list') && this.renderOsobyDoKontaktu()}\n                    <Text style={sectionTitleStyle}>Części zamówienia</Text>\n                    {this.renderZamowienia()}\n                    <Text style={sectionTitleStyle}>Podsumowanie</Text>\n                    {this.renderPodsumowanie()}\n                </Page>\n              </Document>\n        )\n    }\n\n    renderAttachmentsForOrigin(origin, label) {\n        return (\n            <View key={origin.id}>\n                <Text>Dodane do ogłoszenia w {label}</Text>\n                {origin.zalaczniki.map((z, i) => {\n                    if (z.nazwa.length ||  Object.keys(z.plik).length) {\n                        return <Text key={z.id}>{i + 1}. {z.nazwa || 'Załącznik bez nazwy'}</Text>\n                    } else {return null}\n                })}\n            </View>\n        )\n    }\n\n    renderPublishedDates(ogloszenie) {\n        if (this.props.draftMode) { return null }\n        const {\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n        if (this.props.versionMode && isNotEmpty(ogloszenie.dataOpublikowania)) {\n            return (\n                <View style={textWithLabelStyle}>\n                    <Text style={labelStyle}>Data opublikowania wersji</Text>\n                    <Text>{ogloszenie.dataOpublikowania}</Text>\n                </View>\n            )\n        }\n        return (\n            <>\n                {isNotEmpty(ogloszenie.ogloszenie.dataOpublikowania) && (\n                    <View style={textWithLabelStyle}>\n                        <Text style={labelStyle}>Data opublikowania ogłoszenia</Text>\n                        <Text>{ogloszenie.ogloszenie.dataOpublikowania}</Text>\n                    </View>\n                )}\n                {isNotEmpty(ogloszenie.dataOpublikowania) && (\n                    <View style={textWithLabelStyle}>\n                        <Text style={labelStyle}>Data ostatniej zmiany</Text>\n                        <Text>{ogloszenie.dataOpublikowania}</Text>\n                    </View>\n                )}\n            </>\n        )\n    }\n\n    renderDaneAdresoweOgloszeniodawcy() {\n        if (!this.props.ogloszenie.daneAdresoweOgloszeniodawcy) {\n            return null\n        }\n        const {\n            borderedSectionStyle,\n            gridSection,\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        const daneAdresowe = this.props.ogloszenie.daneAdresoweOgloszeniodawcy || {};\n        const adres = daneAdresowe.adres || {};\n        return (\n            <View style={textWithLabelStyle} wrap={false}>\n                <Text style={labelStyle}>Dane adresowe ogłoszeniodawcy</Text>\n                <View style={[borderedSectionStyle, gridSection]}>\n                    <Text>{daneAdresowe.nazwa}</Text>\n                    <Text>{adres.ulica} {adres.numerDomu}</Text>\n                    <Text>{adres.kodPocztowy} {adres.miejscowosc}</Text>\n                    {adres.country === 'Polska' && (\n                        <>\n                            <Text>gmina/dzielnica: {adres.gmina}</Text>\n                            <Text>powiat: {adres.powiat}</Text>\n                            <Text>woj.: {adres.wojewodztwo}</Text>\n                        </>\n                    )}\n\n                    {adres.kraj !== 'Polska' && (\n                        <Text>{adres.kraj}</Text>\n                    )}\n                    <Text>{TYP_NUMERU_IDENTYFIKACYJNEGO[daneAdresowe.typNumeruIdentyfikacyjnego]}: {daneAdresowe.numerIdentyfikacyjny}</Text>\n                </View>\n            </View>\n        )\n    }\n\n    renderOsobyDoKontaktu() {\n        const {\n            borderedSectionStyle,\n            flexContainerStyle,\n            gridSection,\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        return (\n            <View style={textWithLabelStyle} wrap={false}>\n                <Text style={labelStyle}>Osoby do kontaktu</Text>\n                <View style={[flexContainerStyle, {flexWrap: 'wrap'}]}>\n                    {this.props.ogloszenie.osobyDoKontaktu.map(osoba => {\n                        return (\n                            <View key={osoba.id} style={[borderedSectionStyle, gridSection]}>\n                                <Text>{osoba.imie} {osoba.nazwisko}</Text>\n                                <Text>tel.: {osoba.numerTelefonu || '-'}</Text>\n                                <Text>e-mail: {osoba.email}</Text>\n                            </View>\n                        )\n                    })}\n                </View>\n            </View>\n        )\n    }\n\n    renderZamowienia() {\n        const o = this.props.ogloszenie;\n        if (!isNotEmpty(o.zamowienia)) {\n            const {\n                textInfoStyle,\n                errorStyle,\n            } = pdfStyles;\n            return (\n                <Text style={[textInfoStyle, errorStyle]}>Brak zdefiniowanych części zamówienia</Text>\n            )\n        }\n        const {\n            labelStyle,\n            sectionTitleStyle,\n            textWithLabelStyle,\n            titleStyle\n        } = pdfStyles;\n\n        return (\n            <View>\n                {o.zamowienia.map((z, i) => (\n                    <View key={z.id}>\n                        <Text style={sectionTitleStyle}>Część: {i + 1}</Text>\n                        {isNotEmpty(z.tytul) && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Tytuł części {i + 1}</Text>\n                                <Text style={titleStyle}>{z.tytul}</Text>\n                            </View>\n                        )}\n                        {isNotEmpty(z.szacunkowaWartosc) && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Budżet części {i + 1}</Text>\n                                <Text style={titleStyle}>{z.szacunkowaWartosc.replace('.', ',')} PLN</Text>\n                            </View>\n                        )}\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Czy dopuszczalne oferty wariantowe</Text>\n                            <Text>{z.czyWariantowe === true ? 'TAK' : 'NIE'}</Text>\n                        </View>\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Przedmioty zamówienia do części {i + 1}</Text>\n                            {this.renderPrzedmiotyZamowienia(z.przedmiotyZamowienia)}\n                        </View>\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Kryteria oceny do części {i + 1}</Text>\n                            {this.renderKryteriaOceny(z.kryteriaOceny)}\n                        </View>\n                    </View>\n                ))}\n            </View>\n        )\n    }\n\n    renderPrzedmiotyZamowienia(przedmiotyZamowienia) {\n         if (isNotEmpty(przedmiotyZamowienia, 'list')) {\n            return przedmiotyZamowienia.map((pz) => this.renderPrzedmiotZamowienia(pz))\n        }\n        const {\n            errorStyle,\n            textInfoStyle,\n        } = pdfStyles;\n        return (\n            <Text style={[textInfoStyle, errorStyle]}>Brak zdefiniowanych przedmiotów zamówienia</Text>\n        )\n    }\n\n    renderPrzedmiotZamowienia(przedmiotZamowienia) {\n        const {\n            borderedSectionStyle,\n            labelStyle,\n            pzTitleSection,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        return (\n            <View key={przedmiotZamowienia.id} style={borderedSectionStyle}>\n                <View style={pzTitleSection}>\n                    <View style={textWithLabelStyle}>\n                        <Text style={labelStyle}>Typ</Text>\n                        <Text>{przedmiotZamowienia.kategoria.nazwa || '-'}</Text>\n                    </View>\n                    <View style={textWithLabelStyle}>\n                        <Text style={labelStyle}>Podkategoria</Text>\n                        <Text>{przedmiotZamowienia.podkategoria.nazwa || '-'}</Text>\n                    </View>\n                </View>\n                <View style={textWithLabelStyle}>\n                    {isNotEmpty(przedmiotZamowienia.opis) && (\n                        <>\n                            <Text style={labelStyle}>Opis</Text>\n                            {splitLineByChar(przedmiotZamowienia.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n                        </>\n                    )}\n                </View>\n                <View style={textWithLabelStyle}>\n                    {isNotEmpty(przedmiotZamowienia.okresGwarancji) && (\n                        <>\n                            <Text style={labelStyle}>Okres gwarancji</Text>\n                            <Text>{przedmiotZamowienia.okresGwarancji}</Text>\n                        </>\n                    )}\n                </View>\n                {isNotEmpty(przedmiotZamowienia.kodyCPV, 'list') && this.renderKodyCPV(przedmiotZamowienia.kodyCPV)}\n                {isNotEmpty(przedmiotZamowienia.miejscaRealizacji, 'list') && this.renderMiejscaRealizacji(przedmiotZamowienia.miejscaRealizacji)}\n                {isNotEmpty(przedmiotZamowienia.harmonogramy, 'list') && this.renderHarmonogram(przedmiotZamowienia.harmonogramy)}\n                {isNotEmpty(przedmiotZamowienia.warunkiUdzialu, 'list') && this.renderWarunkiUdziału(przedmiotZamowienia.warunkiUdzialu)}\n            </View>\n        )\n    }\n\n    renderKodyCPV(kodyCPV) {\n        const {\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        return (\n            <View style={textWithLabelStyle}>\n                <Text style={labelStyle}>Kody CPV</Text>\n                {kodyCPV.map(kod_ =>  <Text key={kod_.id}>{kod_.kod} {kod_.nazwa}</Text>)}\n            </View>\n        )\n    }\n\n    renderMiejscaRealizacji(miejscaRealizacji) {\n        const {\n            flexContainerStyle,\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        return (\n            <View style={textWithLabelStyle}>\n                <Text style={labelStyle}>Miejsca realizacji</Text>\n                {miejscaRealizacji.map(mr => {\n                    let address = null;\n                    if (mr.kraj || mr.wojewodztwo || mr.powiat || mr.gmina || mr.miejscowosc) {\n                        address = (\n                            <View style={flexContainerStyle}>\n                                {isNotEmpty(mr.kraj) && (\n                                    <View style={textWithLabelStyle}>\n                                        <Text style={labelStyle}>Kraj</Text>\n                                        <Text>{mr.kraj}</Text>\n                                    </View>\n                                )}\n                                {isNotEmpty(mr.wojewodztwo) && (\n                                    <View style={textWithLabelStyle}>\n                                        <Text style={labelStyle}>Województwo</Text>\n                                        <Text>{mr.wojewodztwo}</Text>\n                                    </View>\n                                )}\n                                {isNotEmpty(mr.powiat) && (\n                                    <View style={textWithLabelStyle}>\n                                        <Text style={labelStyle}>Powiat</Text>\n                                        <Text>{mr.powiat || '-'}</Text>\n                                    </View>\n                                )}\n                                {isNotEmpty(mr.gmina) && (\n                                    <View style={textWithLabelStyle}>\n                                        <Text style={labelStyle}>Gmina</Text>\n                                        <Text>{mr.gmina || '-'}</Text>\n                                    </View>\n                                )}\n                                {isNotEmpty(mr.miejscowosc) && (\n                                    <View>\n                                        <Text style={labelStyle}>Miejscowość</Text>\n                                        <Text>{mr.miejscowosc || '-'}</Text>\n                                    </View>\n                                )}\n                            </View>\n                        );\n                    }\n                    return (\n                        <View key={mr.id}>\n                            <Text style={labelStyle}>{mr.typ.nazwa}</Text>\n                            {address}\n                        </View>\n                    )\n                })}\n            </View>\n        )\n    }\n\n    renderHarmonogram(harmonogramy) {\n        const {\n            borderedSeparateSectionStyle,\n            flexContainerStyle,\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        let i = 0;\n        return (\n            <>\n                <Text style={labelStyle}>Harmonogram</Text>\n                {harmonogramy.map((h) => {\n                    i++;\n                    return (\n                        <View key={h.id} style={borderedSeparateSectionStyle}>\n                            <Text style={labelStyle}>Etap {i}</Text>\n                            <View style={flexContainerStyle}>\n                                {isNotEmpty(h.poczatekRealizacji) && (\n                                    <View style={textWithLabelStyle}>\n                                        <Text style={labelStyle}>Początek realizacji</Text>\n                                        <Text>{h.poczatekRealizacji}</Text>\n                                    </View>\n                                )}\n                                {isNotEmpty(h.koniecRealizacji) && (\n                                    <View style={textWithLabelStyle}>\n                                        <Text style={labelStyle}>Koniec realizacji</Text>\n                                        <Text>{h.koniecRealizacji}</Text>\n                                    </View>\n                                )}\n                            </View>\n                            {isNotEmpty(h.opis) && (\n                                <View style={textWithLabelStyle}>\n                                    <Text style={labelStyle}>Opis</Text>\n                                    {splitLineByChar(h.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n                                </View>\n                            )}\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Czy występuje płatność częściowa</Text>\n                                <Text>{h.czyWystepujePlatnoscCzesciowa === true ? 'TAK' : 'NIE'}</Text>\n                            </View>\n                        </View>\n                    )\n                })}\n            </>\n        )\n    }\n\n    renderWarunkiUdziału(warunkiUdzialu) {\n        const {\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        return (\n            <View>\n                <Text style={labelStyle}>Warunki, jakie musi spełniać oferent</Text>\n                {warunkiUdzialu.map((wu) =>\n                    <View key={wu.id}>\n                        {wu.typ.id !== null && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Typ</Text>\n                                <Text>{wu.typ.nazwa}</Text>\n                            </View>\n                        )}\n                        {isNotEmpty(wu.opis) && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Opis</Text>\n                                {splitLineByChar(wu.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n                            </View>\n                        )}\n                    </View>\n                )}\n            </View>\n        )\n    }\n\n    renderKryteriaOceny(kryteriaOceny) {\n        if (!isNotEmpty(kryteriaOceny, 'list')) {\n            const {\n                errorStyle,\n                textInfoStyle,\n            } = pdfStyles;\n            return (\n                <Text style={[textInfoStyle, errorStyle]}>Brak zdefiniowanych kryteriów oceny</Text>\n            )\n        }\n        const {\n            borderedSeparateSectionStyle,\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n        return (\n            <>\n                {kryteriaOceny.map((ko) => (\n                    <View key={ko.id} style={borderedSeparateSectionStyle}>\n                        <View style={textWithLabelStyle}>\n                            <Text style={labelStyle}>Czy kryterium cenowe?</Text>\n                            <Text>{ko.czyKryteriumCenowe === true ? 'TAK' : 'NIE'}</Text>\n                        </View>\n                        {isNotEmpty(ko.opis) && (\n                            <View style={textWithLabelStyle}>\n                                <Text style={labelStyle}>Opis</Text>\n                                {splitLineByChar(ko.opis).map((line, i) => <Text key={i}>{line}</Text>)}\n                            </View>\n                        )}\n                    </View>\n                ))}\n            </>\n        )\n    }\n\n    renderPodsumowanie() {\n        const {\n            labelStyle,\n            textWithLabelStyle,\n        } = pdfStyles;\n\n        return (\n            <>\n                <View style={textWithLabelStyle}>\n                    <Text style={labelStyle}>Oś czasu związana z ogłoszeniem i ofertowaniem</Text>\n                    {this.renderOgloszeniePodsumowanie()}\n                </View>\n                <View style={textWithLabelStyle}>\n                    <Text style={labelStyle}>Oś czasu realizacji przedmiotów zamówienia</Text>\n                    {this.renderPrzedmiotyZamowieniaPodsumowanie()}\n                </View>\n            </>\n        )\n    }\n\n    renderChartData(harmonogramy) {\n        this.prepareChartData(harmonogramy);\n        return harmonogramy.map((h) => (\n            <View key={h.key}>\n                <Text style={!h.hasPointer && {paddingLeft: 12}}>\n                    <Text style={pdfStyles.dateTextStyle}>{h.hasPointer ? '-> ' : '' }{h.dateForShowing || h.date || '????-??-??'}</Text> - {h.label}\n                </Text>\n                <Text style={{height: `${h.height}px`, borderLeftWidth: 2, borderLeftStyle: 'dashed'}}></Text>\n            </View>\n        ))\n    }\n\n    renderTextError(text) {\n        return <Text style={[pdfStyles.textInfoStyle, pdfStyles.errorStyle]}>{text}</Text>\n    }\n}\n\nexport { OgloszeniePdf };\n","import React from 'react';\nimport { TabBar, Tab } from '@rmwc/tabs';\nimport { BadgeAnchor, Badge } from '@rmwc/badge';\nimport '@rmwc/badge/badge.css';\n\nimport {\n    dateStringToYearMonth,\n    generatePdfDocument,\n    isNotEmpty,\n    redirectToLoginView,\n    serializeAuditData\n} from '../../../helpers';\nimport {\n    translateErrorMessage,\n    serializeObject,\n} from '../../../serializers';\nimport {\n    ButtonCreatePdf,\n    ButtonStyled,\n    Container,\n    FieldWithLabel,\n    GridCustom,\n    Text\n} from '../../common';\nimport { BaseComponent } from '../common';\nimport {\n    OfertyOffererClosedStatus,\n    OfertyOffererPublishedStatus,\n    OfertyOffererResolvedStatus,\n    OfertyOwnerClosedStatus,\n    OfertyOwnerPublishedStatus,\n    OfertyOwnerResolvedStatus\n} from '../oferty';\nimport {\n    PytaniaForOgloszenieAnnouncementOwner,\n    PytaniaForOgloszenieAnonymous,\n    PytaniaForOgloszenieLoggedIn,\n} from '../pytania';\nimport { ListaWersji } from'./ListaWersji';\nimport { ManageAdvertisementButtons } from'./ManageAdvertisementButtons';\nimport { OgloszenieDetails } from'./OgloszenieDetails';\nimport { OgloszeniePdf } from'./OgloszeniePdf';\nimport { fetchApi } from \"../../../fetch\";\nimport { MenuContext } from \"../../../context/menuContext\";\n\n\nconst ANNOUNCEMENT_STATUS_DRAFT = 'announcement_status_draft';\nconst ANNOUNCEMENT_STATUS_PUBLISHED = 'announcement_status_published';\nconst TAB_INDEXES = {\n    ogloszenie: 0,\n    oferty: 1,\n    pytania: 2,\n};\nconst REVERTED_TAB_INDEXES = {\n    0: 'ogloszenie',\n    1: 'oferty',\n    2: 'pytania',\n};\n\n\nclass Ogloszenie extends BaseComponent {\n\n    static contextType = MenuContext;\n\n    // basic functions\n\n    componentDidMount() {\n        super.componentDidMount();\n        window.onpopstate = () => {\n            this.handleReload();\n        }\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.user.identifier !== this.props.user.identifier) {\n            this.handleReload();\n        }\n    }\n\n    componentWillUnmount() {\n        super.componentWillUnmount();\n        this.props.setAdvertisementManagerType(\n            {isAuthor: false, isAdmin: false});\n        window.onpopstate = () => {};\n    }\n\n    // handlers\n\n    handleFetchSuccess = (data) => {\n        this.xhrFetch = null;\n\n        const ogloszenie = serializeObject(data.advertisement);\n        this.props.setAdvertisementManagerType(\n            {\n                isAuthor: ogloszenie.ogloszenie.jestAutorem || false,\n                isAdmin: ogloszenie.ogloszenie.isAdmin || false,\n            },\n            () => {\n                // set values from dictionaries\n                this.obublikowaneStatusId = data.dictionaries[ANNOUNCEMENT_STATUS_PUBLISHED];\n                this.roboczeStatusId = parseInt(data.dictionaries[ANNOUNCEMENT_STATUS_DRAFT]);\n\n                // reformat attachments\n                ogloszenie.zalaczniki = this.sortAttachmentsByOrigins(\n                    ogloszenie.zalaczniki || []);\n\n                ogloszenie.czyUlubione = data.favorite;\n                ogloszenie.badge = data.badge;\n                ogloszenie.offer_set_badge_count = data.offer_set_badge_count;\n                ogloszenie.question_badge_count = data.question_badge_count;\n\n                const params = new URLSearchParams(this.props.location.search);\n                let section = params.get('sekcja') || 'ogloszenie';\n                const isCurrentVersion =\n                    !(this.props.draftMode || this.props.versionMode);\n                if (!isCurrentVersion) {\n                    section = 'ogloszenie';\n                }\n\n                this.setState({\n                    initializingOn: false,\n                    ogloszenie: ogloszenie,\n                    selectedTab: TAB_INDEXES[section] || 0,\n                    auditData: serializeAuditData(isCurrentVersion\n                        ? data.advertisement.advertisement\n                        : data.advertisement\n                    ),\n                });\n            }\n        )\n    }\n\n    handleFetchError = (data) => {\n        this.xhrFetch = null;     // clean xhr object\n        this.setState({\n            fetchError: translateErrorMessage(data.message),\n            initializingOn: false,\n        });\n    }\n\n    handleFetchIncorrectStatus = (status) => {\n        this.xhrFetch = null;     // clean xhr object\n\n        if (status === 404) {\n            this.setState({pageNotFound: true, initializingOn: false});\n            return\n        }\n        this.setState({\n            initializingOn: false,\n            fetchError: status === 403\n                ? 'Nie masz uprawnień do przegladania tej strony.'\n                : `Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n        });\n    }\n\n    handleCloseVersionDialog = () => {\n        this.setState({showOtherVersionOn: false});\n    }\n\n    handleReload = (link=null) => {\n        if (link !== null) {\n            this.props.history.push(link);\n        }\n        this.setState(\n            {initializingOn: true, showOtherVersionOn: false},\n            this.fetchInitialData\n        );\n    }\n\n    handleCreatePdf = () => {\n        this.setState(\n            {pdfCreatingOn: true},\n            () => generatePdfDocument(\n                <OgloszeniePdf\n                    draftMode={this.props.draftMode}\n                    ogloszenie={this.state.ogloszenie}\n                    roboczeStatusId={this.roboczeStatusId}\n                    versionMode={this.props.versionMode} />,\n                `ogloszenie_${this.props.match.params.id}.pdf`,\n                this.callbackPfdCreated\n            )\n        );\n    }\n\n    handleChangeTab = (ev) => {\n        const selectedTab = ev.detail.index;\n        this.setState(\n            {selectedTab: selectedTab},\n            () => {\n                //update url \"sekcja\" param\n                this.props.history.push(\n                    `${window.location.pathname}?sekcja=${REVERTED_TAB_INDEXES[selectedTab] || REVERTED_TAB_INDEXES[0]}`);\n            }\n        );\n    }\n\n    handleChangeAdvertisementStatus = (status) => {\n        this.setState(prevState => ({\n            ogloszenie: {\n                ...prevState.ogloszenie, ...{\n                    ogloszenie: {...prevState.ogloszenie.ogloszenie, status}\n                }\n            }\n        }));\n    }\n\n    handleAddToFavorite = () => {\n        fetchApi(\n            `/api/favorite-announcements/${this.props.match.params.id}`,\n            \"POST\",\n            {},\n            {},\n            () => {\n                this.handleReload();\n            }\n          );\n    }\n\n    handleRemoveBadge = () => {\n        fetchApi(\n            `/api/badge/announcements/${this.props.match.params.id}`,\n            \"DELETE\",\n            {},\n            {},\n            () => {\n                this.handleReload();\n                this.context.refreshBadges();\n            }\n          );\n    }\n\n    handleRemoveFromFavorite = () => {\n        fetchApi(\n            `/api/favorite-announcements/${this.props.match.params.id}`,\n            \"DELETE\",\n            {},\n            {},\n            () => {\n                this.handleReload();\n            }\n          );\n    }\n\n    // helpers\n\n    getAdditionalState(props) {\n        return {\n            showOtherVersionOn: false,\n            pdfCreatingOn: false,\n            ogloszenie: null,\n            selectedTab: null,\n            auditData: {},\n        }\n    }\n\n    postState(props) {\n        super.postState(props);\n        this.obublikowaneStatusId = null;\n        this.roboczeStatusId = null;\n    }\n\n    getFetchUrl() {\n        let url = `/api/announcements/${this.props.match.params.id}`;\n        if (this.props.versionMode) {\n            url += `/versions/${this.props.match.params.versionId}`;\n        }\n        return url\n    }\n\n    getFetchData() {\n        let body = {dictionaries: [ANNOUNCEMENT_STATUS_DRAFT, ANNOUNCEMENT_STATUS_PUBLISHED]};\n        if (this.props.draftMode) {\n            body['version_mode'] = 'draft';\n        }\n        return body\n    }\n\n    callbackPfdCreated = () => {\n        this.setState({pdfCreatingOn: false});\n    }\n\n    sortAttachmentsByOrigins(attachments) {\n        let origins = {};\n        let originsIds = [];\n        for (let attachment of attachments) {\n            const originId = (attachment.origin || {}).id || null;\n            if (!originId) { continue }\n            if (!originsIds.includes(originId)) {\n                origins[originId] = {\n                    dataOpublikowania: attachment.origin.dataOpublikowania || '',\n                    zalaczniki: [\n                        {\n                            id: attachment.id,\n                            nazwa: attachment.nazwa,\n                            plik: attachment.plik,\n                        },\n                    ],\n                };\n                originsIds.push(originId);\n            } else {\n                origins[originId]['zalaczniki'] = [...origins[originId]['zalaczniki'], {\n                    id: attachment.id,\n                    nazwa: attachment.nazwa,\n                    plik: attachment.plik,\n                }];\n            }\n        }\n\n        let originsList = Object.entries(origins).map(data => Object.assign(data[1], {id: parseInt(data[0])}));\n        return originsList.sort((origin1, origin2) => {\n            return origin1.id < origin2.id\n        })\n    }\n\n    // rendering\n\n    renderPublishedDates(ogloszenie) {\n        if (this.props.draftMode) { return null }\n\n        if (this.props.versionMode && isNotEmpty(ogloszenie.dataOpublikowania)) {\n            return (\n                <FieldWithLabel label=\"Data opublikowania wersji\" className=\"announcement--date\">\n                    <Text>{ogloszenie.dataOpublikowania}</Text>\n                </FieldWithLabel>\n            )\n        }\n        return (\n            <>\n                {isNotEmpty(ogloszenie.ogloszenie.dataOpublikowania) && (\n                    <FieldWithLabel label=\"Data opublikowania ogłoszenia\" className=\"announcement--date\">\n                        <Text>{ogloszenie.ogloszenie.dataOpublikowania}</Text>\n                    </FieldWithLabel>\n                )}\n                {isNotEmpty(ogloszenie.dataOpublikowania) && (\n                    <FieldWithLabel label=\"Data ostatniej zmiany\" className=\"announcement--date\">\n                        <Text>{ogloszenie.dataOpublikowania}</Text>\n                    </FieldWithLabel>\n                )}\n            </>\n        )\n    }\n\n    renderHeader() {\n        if (this.state.ogloszenie === null) { return null }\n        const o = this.state.ogloszenie;\n        let isMyAdvertisement = false;\n        if (this.props.user.id === o.ogloszenie.ktoUtworzyl.id) {\n            isMyAdvertisement = true;\n        }\n\n        return (\n            <>\n                {!this.props.userAnonymous\n                    && !o.ogloszenie.jestAutorem\n                    && <ManageAdvertisementButtons\n                        advertisement={o}\n                        onChangeAdvertisementStatus={this.handleChangeAdvertisementStatus} />\n                }\n                <GridCustom flexS fullwidth centerVertical>\n                    {isNotEmpty(o.ogloszenie.numer) && (\n                        <Text tag=\"h2\" mainHeader>Ogłoszenie nr {o.ogloszenie.numer}</Text>\n                    )}\n                    <GridCustom>\n                    {(!isMyAdvertisement && o.czyUlubione === false) && <ButtonStyled onClick={this.handleAddToFavorite} primary\n                    icon=\"favorite\">DODAJ DO ULUBIONYCH<span className=\"sr-only\"> ogłoszenie {this.state.ogloszenie.tytul}</span></ButtonStyled>}\n                    {(!isMyAdvertisement && o.czyUlubione === true) && <ButtonStyled onClick={this.handleRemoveFromFavorite} remove\n                    icon=\"close\">USUŃ Z ULUBIONYCH<span className=\"sr-only\"> ogłoszenie {this.state.ogloszenie.tytul}</span></ButtonStyled>}\n                    <ButtonCreatePdf\n                        pdfCreatingOn={this.state.pdfCreatingOn}\n                        onClick={this.handleCreatePdf}\n                    >\n                        Pobierz plik PDF<span className=\"sr-only\"> ogłoszenia {this.state.ogloszenie.tytul}</span>\n                    </ButtonCreatePdf>\n                    </GridCustom>\n\n                </GridCustom>\n\n                <Container>\n                    {isNotEmpty(o.tytul) && (\n                        <Text tag=\"h1\" className=\"text--main-title long-text\">{o.tytul}</Text>\n                    )}\n                    <GridCustom fullwidth flexM centerVertical>\n                        <Text tag=\"h2\" accentHeader>Status ogłoszenia: {o.ogloszenie.status.nazwa}</Text>\n                        {o.badge && <BadgeAnchor>\n                            <ButtonStyled onClick={this.handleRemoveBadge} primary icon=\"check\">USUŃ OZNACZENIE JAKO NOWE<span className=\"sr-only\"> ogłoszenia {this.state.ogloszenie.tytul}</span></ButtonStyled>\n                            <Badge label=\"N\" />\n                        </BadgeAnchor>}\n                        \n                        {parseInt(o.status.id) === this.roboczeStatusId && <Text accentHeader>Status wersji: {o.status.nazwa}</Text>}\n                        <ButtonStyled\n                            className=\"announcement__btn-versions\"\n                            lite\n                            noMargin\n                            onClick={(e) => {\n                                this.setState({showOtherVersionOn: true});\n                                e.currentTarget.blur();\n                            }}>\n                            Podejrzyj inne wersje<span className=\"sr-only\"> ogłoszenia {o.tytul}</span>\n                        </ButtonStyled>\n                        {this.state.showOtherVersionOn && (\n                            <ListaWersji\n                                id={o.id}\n                                isAuthor={o.ogloszenie.ktoUtworzyl.id === this.props.user.id}\n                                isPublished={this.obublikowaneStatusId === o.ogloszenie.status.id}\n                                ogloszenieId={this.props.match.params.id}\n                                roboczeStatusId={this.roboczeStatusId}\n                                closeVersionDialog={this.handleCloseVersionDialog}\n                                reload={this.handleReload}\n                            />)}\n                    </GridCustom>\n                    <GridCustom fullwidth flexM>\n                        {isNotEmpty(o.terminOfert) && (\n                            <FieldWithLabel label=\"Termin składania ofert\" className=\"announcement--date\">\n                                <Text>{o.terminOfert}</Text>\n                            </FieldWithLabel>\n                        )}\n                        {this.renderPublishedDates(o)}\n                        {isNotEmpty(o.planowanyTerminPodpisaniaUmowy) && (\n                            <FieldWithLabel label=\"Planowany termin podpisania umowy\" className=\"announcement--date\">\n                                <Text>{dateStringToYearMonth(o.planowanyTerminPodpisaniaUmowy)}</Text>\n                            </FieldWithLabel>\n                        )}\n                    </GridCustom>\n                </Container>\n                <TabBar\n                    activeTabIndex={this.state.selectedTab}\n                    onActivate={this.handleChangeTab}\n                >\n                    <Tab label=\"Ogłoszenie\" aria-label=\"Ogłoszenie, panel zakładek, lista 1 z 3\"/>\n                    <Tab label=\"Oferty\" aria-label=\"Oferty, panel zakładek, lista 2 z 3\" disabled={this.props.draftMode || this.props.versionMode}>\n                        {o.offer_set_badge_count > 0 && <Badge label={o.offer_set_badge_count} align='inline'/>}\n                    </Tab>\n                    <Tab label=\"Pytania\" aria-label=\"Pytania, panel zakładek, lista 3 z 3\" disabled={this.props.draftMode || this.props.versionMode}>\n                        {o.question_badge_count > 0 && <Badge label={o.question_badge_count}  align='inline'/>}\n                    </Tab>\n                </TabBar>\n            </>\n        )\n    }\n\n    renderContent() {\n        switch (this.state.selectedTab) {\n            case TAB_INDEXES['oferty']:\n                return this.renderOferty()\n            case TAB_INDEXES['pytania']:\n                return this.renderPytania()\n            default:\n                return this.renderOgloszenie()\n        }\n    }\n\n    renderOferty() {\n        if (this.props.draftMode || this.props.versionMode) { return null }\n        switch (this.state.ogloszenie.ogloszenie.status.label) {\n            case 'DRAFT':\n                return null\n            case 'PUBLISHED':\n                return this.renderOfertyForPublishedStatus()\n            case 'CANCELLED':\n                return this.renderOfertyForCancelledStatus()\n            case 'CLOSED':\n                return this.renderOfertyForClosedStatus()\n            case 'RESOLVED':\n                return this.renderOfertyForResolvedStatus()\n            default:\n                return null\n        }\n    }\n\n    renderOfertyForPublishedStatus() {\n        if (this.props.userAnonymous) {\n            return (\n                <div className=\"login-info-container\">\n                    <ButtonStyled add onClick={redirectToLoginView} className=\"btn btn--main\">Utwórz ofertę</ButtonStyled>\n                    <Text info>Wymaga logowania</Text>\n                </div>\n            )\n        }\n        // check if advertisement owner\n        if (this.props.user.advertisementManagerType.isAuthor) {\n            return <OfertyOwnerPublishedStatus ogloszenie={this.state.ogloszenie} refresh={() => this.handleReload()} />\n        }\n        return <OfertyOffererPublishedStatus ogloszenie={this.state.ogloszenie} />\n    }\n\n    renderOfertyForCancelledStatus() {\n        return <Text info>Ogłoszenie zostało anulowane dla wszystkich oferentów.</Text>\n    }\n\n    renderOfertyForClosedStatus() {\n        return this.renderOfertyForAfterPublishedStatus(\n            OfertyOwnerClosedStatus, OfertyOffererClosedStatus)\n    }\n\n    renderOfertyForResolvedStatus() {\n        return this.renderOfertyForAfterPublishedStatus(\n            OfertyOwnerResolvedStatus, OfertyOffererResolvedStatus)\n    }\n\n    renderOfertyForAfterPublishedStatus(OwnerComponent, OffererComponent) {\n        const { advertisementManagerType } = this.props.user;\n        const { isAuthor: isAdvertisementOwner } = advertisementManagerType;\n        if (isAdvertisementOwner || advertisementManagerType.isAdmin) {\n            return <OwnerComponent\n                       {...this.props}\n                       isAdvertisementOwner={isAdvertisementOwner}\n                       ogloszenie={this.state.ogloszenie}\n                       onlyAdmin={!isAdvertisementOwner} />\n        }\n        return <OffererComponent {...this.props} ogloszenie={this.state.ogloszenie} />\n    }\n\n    renderPytania() {\n\t\t\n        if (this.props.userAnonymous) {\n            return <PytaniaForOgloszenieAnonymous ogloszenie={this.state.ogloszenie} reloadAnnouncement={this.handleReload} />\n        } else if (this.state.ogloszenie.ogloszenie.ktoUtworzyl.id === this.props.user.id) {\n            return <PytaniaForOgloszenieAnnouncementOwner ogloszenie={this.state.ogloszenie} reloadAnnouncement={this.handleReload} />\n        }\n\n        return <PytaniaForOgloszenieLoggedIn ogloszenie={this.state.ogloszenie} reloadAnnouncement={this.handleReload} />\n    }\n\n    renderOgloszenie() {\n        if (this.state.ogloszenie === null) { return null }\n        const o = this.state.ogloszenie;\n        return (\n            <OgloszenieDetails\n                auditData={this.state.auditData}\n                ogloszenie={o}\n                versionMode={this.props.versionMode}\n                draftMode={this.props.draftMode} />\n        )\n    }\n}\n\n\nexport { Ogloszenie };\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { fetchApi } from '../../../fetch';\nimport { MIEJSCE_REALIZACJI_OLD_BK_DICT } from '../../../const';\nimport { getSearchFiltersCount, SEARCH_CLEANED_FILTERS } from '../../../filters';\nimport { dateToStringOldBK } from '../../../helpers';\nimport { ButtonStyled, Container, GridCustom, GridCellCustom, Text, TextFieldCustom } from '../../common';\nimport { PaginatedBaseComponent } from '../common';\nimport { FiltryWyszukiwarki } from './FiltryWyszukiwarki';\n\n\nconst STATUS_MAP = {\n    CANCELLED: 'canceled',\n    PUBLISHED: 'active',\n    CLOSED: 'archived',\n};\n\n\nclass Wyszukiwarka extends PaginatedBaseComponent {\n\n    // basic functions\n\n    componentDidMount() {\n        document.title = \"Baza Konkurencyjności - wyszukiwarka\";\n\n        super.componentDidMount();\n    }\n\n    componentDidUpdate(prevProps, prevState) {\n        if (prevProps.userIdentifier !== this.props.userIdentifier) {\n            this.handleReload();\n        }\n    }\n\n    // handlers\n\n    handleReload = (link=null) => {\n        this.setState(\n            {initializingOn: true, fetchError: '', objects: []},\n            () => {this.fetchInitialData()}\n        );\n    }\n\n    handleSubmit = (ev) => {\n        ev.preventDefault();\n        this.handleReload();\n    }\n\n    handleChangeQuery = (value) => {\n        this.setState(\n            {query: value, pageNumber: 1},\n            () => {\n                // change url\n                this.props.history.push(\n                    encodeURI(`${window.location.pathname}${value.length > 0 ? `?q=${value}` : ''}`));\n            }\n        );\n    }\n\n    handleAddToFavorites = (object) => {\n        fetchApi(\n            `/api/favorite-announcements/${object.id}`,\n            \"POST\",\n            {},\n            {},\n            () => {\n                const index = this.state.objects.findIndex(obj => obj.id === object.id);\n                const updatedObjects = [...this.state.objects];\n                updatedObjects[index] = { ...updatedObjects[index], favorite: true};\n                this.setState({ objects: updatedObjects });\n            }\n          );\n    }\n\n    handleRemoveFromFavorites = (object) => {\n        fetchApi(\n            `/api/favorite-announcements/${object.id}`,\n            \"DELETE\",\n            {},\n            {},\n            () => {\n                const index = this.state.objects.findIndex(obj => obj.id === object.id);\n                const updatedObjects = [...this.state.objects];\n                updatedObjects[index] = { ...updatedObjects[index], favorite: false};\n                this.setState({ objects: updatedObjects });\n            }\n          );\n    }\n\n    // helpers\n\n    preState(props) {\n        super.preState();\n\n        // redefine from base class\n        this.objectsName = 'ogloszenia';\n        this.paginateBy = 20;\n        this.sortingValues = [\n            ['publicationDate', 'Po dacie publikacji ogłoszeń'],\n            ['submissionDeadline', 'Po terminie składania ofert'],\n            ['default', 'Domyślnie'],\n        ];\n        this.sortingLabel = 'Sortuj wyniki wyszukiwania';\n        this.filtersComponentClass = FiltryWyszukiwarki;\n\n        this.getFiltersCount = getSearchFiltersCount;\n    }\n\n    getAdditionalState(props) {\n        const params = new URLSearchParams(props.location.search);\n        return Object.assign({}, super.getAdditionalState(props), {\n            selectedSort: {value: this.sortingValues[2][0], label: this.sortingValues[2][1]},\n            query: params.get('q') || '',\n            filters: SEARCH_CLEANED_FILTERS,\n        })\n    }\n\n    postState(props) {\n        super.postState(props);\n        this.dictionaries = {};\n    }\n\n    getFetchUrl() {\n        return '/api/announcements/search'\n    }\n\n    getFetchData() {\n        let queryDict = super.getFetchData();\n\n        if (this.state.query.length) {\n            queryDict['query'] = this.state.query;\n        }\n        for (let [name, value] of Object.entries(this.state.filters)) {\n            if (['publicationDateRange', 'submissionDeadlineRange'].includes(name)) {\n                for (let [subname, subvalue] of Object.entries(value)) {\n                    if (subname === 'type') { continue }\n                    if (!!subvalue) {\n                        queryDict[`${name}[${subname}]`] = subvalue;\n                    }\n                }\n            } else if (name === 'cpvItem') {\n                if (Object.keys(value).length) {\n                    queryDict[name] = value.map(kod => kod.kod);\n                }\n            } else if ('programme' === name) {\n                if (value.length) {\n                        queryDict[name] = value.map(mr => mr.value.toUpperCase());\n                }\n            } else if ('fulfillmentPlaces' === name) {\n                    if (value.length) {\n                            queryDict[name] = value.map(mr => mr.value);\n                    }\n            } else if (['category', 'subcategory'].includes(name)) {\n                if (value !== null) {\n                    queryDict[name] = value.label;\n                }\n            } else if ((name === 'status' && Object.keys(value).length) ||\n                    value !== SEARCH_CLEANED_FILTERS[name]\n            ) {\n                queryDict[name] = value;\n            }\n        }\n        return queryDict\n    }\n\n    getFetchError(message) {\n        message = super.getFetchError(message);\n        return `Nie udało się wyszukać ogłoszeń. ${message}`\n    }\n\n    getFetchIncorrectStatusError(status) {\n        return `Nie udało się wyszukać ogłoszeń. Wystąpił nieoczekiwany błąd o kodzie ${status}.`\n    }\n\n    // rendering\n\n    renderHeader() {\n        return (\n            <Container>\n                <form onSubmit={this.handleSubmit}>\n                    <label htmlFor=\"search_input\" className=\"sr-only\">Wyszukaj ogłoszenie</label>\n                    <GridCustom flexS fullwidth>\n                        <TextFieldCustom\n                            clearFieldContext=\"szukaj\"\n                            fullwidth\n                            maxLength={250}\n                            value={this.state.query}\n                            onChange={ev => this.handleChangeQuery(ev.target.value)}\n                            onClear={ev => this.handleChangeQuery('')}\n                            id=\"search_input\" />\n                        <ButtonStyled className=\"search__btn\" icon=\"search\" id=\"szukaj_button_id\" primary onClick={this.handleReload}>Szukaj</ButtonStyled>\n                    </GridCustom>\n                </form>\n            </Container>\n        )\n    }\n\n    renderEmptyObjects() {\n        return <Text error role=\"alert\">Nie znaleziono ogłoszeń spełniających kryteria wyszukiwania.</Text>\n    }\n\n    renderList() {\n        const total = this.state.total;\n        return (\n            <>\n                <Text accentHeader tag=\"h2\" role=\"alert\">Znaleziono {total < this.paginateBy ? '' : 'około '}{total} ogłoszeń</Text>\n                <ul>\n                    {this.state.objects.map(o => this.renderObject(o))}\n                </ul>\n            </>\n        )\n    }\n\n    renderFiltersComponent() {\n        return (\n            <this.filtersComponentClass\n                dictionaries={this.dictionaries}\n                filters={this.state.filters}\n                closeFilters={() => this.setState({filtersAreOn: false})}\n                updateDictionaries={dictionaries => this.dictionaries = dictionaries}\n                updateFilters={this.handleApplyFilters}\n            />\n        )\n    }\n\n    renderObject(object) {\n        return (\n            <li key={object.id} className=\"separate-content search__item\">              \n                <GridCustom fullwidth>\n                    <GridCellCustom>\n                        <Link to={`/ogloszenia/${object.id}`} className=\"link-text\"><span dangerouslySetInnerHTML={{__html: object.tytul}}></span></Link>\n                        {object.moje && <span className=\"author-label\">Moje ogłoszenie</span>}\n                    </GridCellCustom>\n                    {!object.moje && (\n                        <GridCellCustom style={{minWidth: '255px'}}>\n                            {(object.favorite === false) && <ButtonStyled onClick={() => this.handleAddToFavorites(object)} primary\n                                icon=\"favorite\">DODAJ DO ULUBIONYCH<span className=\"sr-only\"> ogłoszenie {object.tytul}</span></ButtonStyled>}\n                            {(object.favorite === true) && <ButtonStyled onClick={() => this.handleRemoveFromFavorites(object)} remove\n                                icon=\"close\">USUŃ Z ULUBIONYCH<span className=\"sr-only\"> ogłoszenie {object.tytul}</span></ButtonStyled>}\n                        </GridCellCustom>\n                    )}\n                </GridCustom>\n\n                <p dangerouslySetInnerHTML={{__html: object.tresc}}></p>\n                <GridCustom flexM fullwidth>\n                    <Text info className=\"search__results-meta\">Opublikowano: {object.dataOpublikowania}</Text>\n                    <Text info className=\"search__results-meta\">Termin składania ofert: {object.terminOfert}</Text>\n                    <Text info className=\"search__results-meta search__results-meta--company-name\"><span dangerouslySetInnerHTML={{__html: object.nazwaOgloszeniodawcy}}></span></Text>\n                    {(object.miejsceRealizacji || '').length > 0 && <Text info className=\"search__results-meta\">{object.miejsceRealizacji}</Text>}\n                </GridCustom>\n            </li>\n        )\n    }\n\n    renderAdditionalAfterBaseContent() {\n        return this.renderOldBkLink()\n    }\n\n    renderOldBkLink() {\n        const filters = this.state.filters;\n        const isPublicationDateRangeCustom = filters.publicationDateRange.type === 'custom'\n        const isSubmissionDeadlineRangeCustom = filters.submissionDeadlineRange.type === 'custom'\n        return (\n            <form name=\"search\" method=\"post\" action=\"https://archiwum-bazakonkurencyjnosci.funduszeeuropejskie.gov.pl/publication/list/\" target=\"_blank\">\n                {this.state.query.length > 0 && <input type=\"hidden\" id=\"filter_keyword\" name=\"filter[keyword]\" value={this.state.query} />}\n                {filters.status.map((s, i) => <input type=\"hidden\" key={i} id={`search_status_${i}`} name=\"search[status][]\" value={`${STATUS_MAP[s]}`} />)}\n                {isPublicationDateRangeCustom && filters.publicationDateRange.from && (\n                    <input type=\"hidden\" id=\"search_dateStart\" name=\"search[dateStart]\" value={`${dateToStringOldBK(new Date(filters.publicationDateRange.from))}`} />\n                )}\n                {isPublicationDateRangeCustom && filters.publicationDateRange.to && (\n                    <input type=\"hidden\" id=\"search_dateStop\" name=\"search[dateStop]\" value={`${dateToStringOldBK(new Date(filters.publicationDateRange.to))}`} />\n                )}\n                {isSubmissionDeadlineRangeCustom && filters.submissionDeadlineRange.from && (\n                    <input type=\"hidden\" id=\"search_datePublicationStart\" name=\"search[datePublicationStart]\" value={`${dateToStringOldBK(new Date(filters.submissionDeadlineRange.from))}`} />\n                )}\n                {isSubmissionDeadlineRangeCustom && filters.submissionDeadlineRange.to && (\n                    <input type=\"hidden\" id=\"search_datePublicationStop\" name=\"search[datePublicationStop]\" value={`${dateToStringOldBK(new Date(filters.submissionDeadlineRange.to))}`} />\n                )}\n                <input type=\"hidden\" id=\"search_adUsers\" name=\"search[adUsers]\" value=\"all\" />\n                {filters.category && <input type=\"hidden\" id=\"search_category_0\" name=\"search[category][]\" value={filters.category} />}\n                {filters.subcategory && <input type=\"hidden\" id=\"search_subcategory_0\" name=\"search[subcategory][]\" value={filters.subcategory} />}\n                {filters.fulfillmentPlaces.map(m => {\n                    const value = MIEJSCE_REALIZACJI_OLD_BK_DICT[m.value];\n                    if (!!value) {\n                        return <input type=\"hidden\" key={value} id={`search_province_${value}`} name=\"search[province][]\" value={value} />\n                    } else {\n                        return null\n                    }\n                })}\n                <ButtonStyled lite onClick={() => { }} type=\"submit\">Przeszukaj starą Bazę Konkurencyjności<span className=\"sr-only\"> Strona zostanie otwarta w nowym oknie</span></ButtonStyled>\n            </form>\n        )\n    }\n}\n\nexport { Wyszukiwarka };\n","import React, { useEffect, useState } from \"react\";\nimport { fetchApi } from \"../../../fetch\";\nimport { GridCustom, FieldWithLabel } from \"../../common\";\nimport { Typography, Elevation, Switch } from \"rmwc\";\nimport { colors } from \"../../vars/vars\";\n\nconst translationMap = {\n  MY_ADVERTISEMENT: \"Zmiany mojego ogłoszenia\",\n  MY_OFFERS: \"Zmiany ogłoszenia z moją ofertą\",\n  MY_FAVORITE_ADVERTISEMENT: \"Zmiany ulubionych ogłoszeń\",\n  MY_ADVERTISEMENT_QUESTION_SUBMITTED:\n    \"Gdy w moim ogłoszeniu pojawi się nowe pytanie\",\n  MY_ADVERTISEMENT_OFFER_SUBMITTED_OR_CHANGED:\n    \"Gdy w moim ogłoszeniu pojawi się nowa lub zmieniona oferta\",\n  MY_ADVERTISEMENT_OFFER_WITHDRAWN:\n    \"Gdy w moim ogłoszeniu zostanie wycofana oferta\",\n  MY_ADVERTISEMENT_ENDS_IN_24_HOURS:\n    \"Gdy moje ogłoszenie skończy się w ciągu 24 godzin\",\n  MY_OFFERS_ADVERTISEMENT_SUBMITTED_CHANGES:\n    \"Gdy w ogłoszeniu zostaną opublikowane zmiany\",\n  MY_OFFERS_ADVERTISEMENT_STATUS_CHANGED: \"Gdy w ogłoszeniu zmieni się status\",\n  MY_OFFERS_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED:\n    \"Gdy w ogłoszeniu zostanie dodana lub zmieniona odpowiedź\",\n  MY_FAVORITE_ADVERTISEMENT_SUBMITTED_CHANGES:\n    \"Gdy w ulubionym ogłoszeniu zostaną opublikowane zmiany\",\n  MY_FAVORITE_ADVERTISEMENT_STATUS_CHANGED:\n    \"Gdy w ulubionym ogłoszeniu zmieni się status\",\n  MY_FAVORITE_ADVERTISEMENT_ANSWER_SUBMITTED_OR_CHANGED:\n    \"Gdy w ulubionym ogłoszeniu zostanie dodana lub zmieniona odpowiedź\",\n    MY_FAVORITE_ADVERTISEMENT_ENDS_IN_24_HOURS:\n    \"Gdy ulubione ogłoszenie skończy się w ciągu 24 godzin\"\n};\n\nconst CircleWithLetter = () => {\n  return (\n    <div className=\"circle\">\n      <span>N</span>\n    </div>\n  );\n};\n\nexport default CircleWithLetter;\n\nexport const Notifications = (props) => {\n  const [notificationOptions, setNotificationOptions] = useState();\n\n  useEffect(() => {\n    fetchApi(\"/api/notification-type-enabled\", \"GET\", {}, {}, (data) => {\n      setNotificationOptions(data);\n    });\n  }, []);\n\n  const notificationsEnabled = notificationOptions?.notifications?.enabled;\n\n  const handleToggleNotifications = (checked) => {\n    fetchApi(\n      \"/api/notification-type-enabled/NOTIFICATIONS\",\n      \"PUT\",\n      {},\n      { enabled: checked },\n      () => {\n        setNotificationOptions({\n          ...notificationOptions,\n          notifications: {\n            ...notificationOptions.notifications,\n            enabled: checked,\n          },\n        });\n      }\n    );\n  };\n\n  const handleToggleNotification = (type, checked) => {\n    const groups = [...notificationOptions.groups];\n\n    for (let i = 0; i < groups.length; i++) {\n      const group = groups[i];\n      for (let j = 0; j < group.items.length; j++) {\n        const item = group.items[j];\n        if (item.type === type) {\n          item.enabled = checked;\n          break;\n        }\n      }\n    }\n\n    fetchApi(\n      `/api/notification-type-enabled/${type}`,\n      \"PUT\",\n      {},\n      { enabled: checked },\n      () => {\n        setNotificationOptions({\n          ...notificationOptions,\n          groups: [...groups],\n        });\n      }\n    );\n  };\n\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"10px\" }}>\n      <Typography use=\"headline5\" tag=\"h5\">\n        Ustawienia powiadomień\n      </Typography>\n      <Elevation z={4} style={{ background: colors.warn }}>\n        <GridCustom>\n          <p style={{ margin: 10 }}>\n            Uwaga: Jeśli wyłączysz powiadomienia, oznaczenia <CircleWithLetter /> nie będą się wyświetlać.\n          </p>\n        </GridCustom>\n\n      </Elevation>\n      <Elevation z={4}>\n        <div\n          style={{ background: colors.primary, color: \"white\", padding: 10 }}\n        >\n          <Typography use=\"headline6\" tag=\"h6\">\n            Ustawienia powiadomień\n          </Typography>\n        </div>\n        <GridCustom>\n          <FieldWithLabel\n            label=\"Wysyłaj powiadomienia e-mail\"\n            tag=\"label\"\n            labelFor=\"notifications_enabled\"\n            style={{ margin: 10 }}\n          >\n            <Switch\n              aria-label={`${\n                notificationsEnabled ? \"Wyłącz\" : \"Włącz\"\n              } powiadomienia`}\n              checked={notificationsEnabled}\n              onChange={(ev) => handleToggleNotifications(ev.target.checked)}\n              id=\"notifications_enabled\"\n            />\n          </FieldWithLabel>\n        </GridCustom>\n      </Elevation>\n\n      {notificationsEnabled && (\n        <Elevation z={4}>\n          <div\n            style={{ background: colors.primary, color: \"white\", padding: 10 }}\n          >\n            <Typography use=\"headline6\" tag=\"h6\">\n              Ustawienia typów powiadomień\n            </Typography>\n          </div>\n\n          {notificationOptions.groups.map((group) => {\n            return (\n              <div style={{ marginLeft: 5 }}>\n                <p style={{fontWeight: '600'}}>{translationMap[group.type]}</p>\n                {group.items.map((item) => {\n                  return (\n                    <GridCustom>\n                      <FieldWithLabel\n                        label={translationMap[item.type]}\n                        tag=\"label\"\n                        labelFor={`notification_${item.type}`}\n                        className=\"switch-nonboldtext\"\n                      >\n                        <Switch\n                          aria-label={`${\n                            notificationsEnabled ? \"Wyłącz\" : \"Włącz\"\n                          } powiadomienia ${translationMap[group.type]}`}\n                          checked={item.enabled}\n                          onChange={(ev) =>\n                            handleToggleNotification(\n                              item.type,\n                              ev.target.checked\n                            )\n                          }\n                          id={`notification_${item.type}`}\n                        />\n                      </FieldWithLabel>\n                    </GridCustom>\n                  );\n                })}\n              </div>\n            );\n          })}\n        </Elevation>\n      )}\n    </div>\n  );\n};\n","import React, { useEffect, useState, useContext } from \"react\";\nimport { TabBar, Tab } from \"@rmwc/tabs\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Notifications } from \"./Notifications\";\nimport { NewsletterSettings } from \"./NewsletterSettings\";\nimport { Favorites } from \"./Favorites\";\nimport { UserContext } from \"../../../context/user-context\";\n\nconst tabIndexMap = new Map([\n  [\"newsletter\", 0],\n  [\"powiadomienia\", 1],\n  [\"ulubione\", 2],\n]);\n\nfunction getMapKeyByValue(value) {\n  for (let [key, val] of tabIndexMap.entries()) {\n    if (val === value) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\nconst Newsletter = (props) => {\n  const location = useLocation();\n  const history = useHistory();\n\n  useEffect(() => {\n    sessionStorage.setItem(\n      \"currentPathname\",\n      window.location.pathname + window.location.search\n    );\n  }, []);\n\n  useEffect(() => {\n    const activeTab = location.search?.split(\"?sekcja=\")?.[1];\n    if (activeTab) {\n      setActiveTabIndex(tabIndexMap.get(activeTab));\n    }\n  }, [location.search]);\n\n  const [activeTabIndex, setActiveTabIndex] = useState(0);\n\n  const { user } = useContext(UserContext);\n\n  return (\n    <>\n      {user.identifier === null ? (\n        <p>Zaloguj się aby wyświetlić zawartość tej strony.</p>\n      ) : (\n        <>\n          <TabBar\n            activeTabIndex={activeTabIndex}\n            onActivate={(event) => {\n              const tabName = getMapKeyByValue(event.detail.index);\n              history.push(`${window.location.pathname}?sekcja=${tabName}`);\n            }}\n          >\n            <Tab>Newsletter</Tab>\n            <Tab>Powiadomienia</Tab>\n            <Tab>Ulubione</Tab>\n          </TabBar>\n          {activeTabIndex === 0 && <NewsletterSettings />}\n          {activeTabIndex === 1 && <Notifications />}\n          {activeTabIndex === 2 && <Favorites {...props} />}\n        </>\n      )}\n    </>\n  );\n};\n\nexport { Newsletter };\n","import React from \"react\";\nimport { URLS } from \"../../../urls/frontend\";\nimport { useHistory } from \"react-router-dom\";\nimport { GridCustom, ButtonStyled, Container } from \"../../common\";\nimport { Typography } from \"@rmwc/typography\";\nimport { Icon } from \"@rmwc/icon\";\n\nexport const UnsubscribeSuccess = () => {\n    const history = useHistory();\n  \n    const handleGoToMainPage = () => {\n      history.push(URLS.home.path);\n    };\n  \n    return (\n      <Container>\n        <GridCustom centerHorizontal>\n          <Icon\n            className=\"subscription-icon__success\"\n            icon={{ icon: \"check_circle_outline\" }}\n            aria-hidden=\"true\"\n          />\n        </GridCustom>\n        <GridCustom fullheight centerHorizontal>\n          <Typography\n            use=\"headline3\"\n            tag=\"h3\"\n            style={{ textAlign: \"center\", margin: \"2rem 0\" }}\n          >\n            Newsletter i powiadomienia są wyłączone\n          </Typography>\n        </GridCustom>\n        <GridCustom fullheight centerHorizontal>\n          <Typography use=\"body1\">\n            Aby ponownie włączyć newsletter przejdź do{\" \"}\n            <a href={URLS.newsletter.path}>edycji newslettera</a>.\n          </Typography>\n        </GridCustom>\n        <GridCustom fullheight centerHorizontal>\n          <Typography use=\"body1\">\n            Aby ponownie włączyć powiadomienia przejdź do{\" \"}\n            <a href={`${URLS.newsletter.path}?sekcja=powiadomienia`}>\n              edycji powiadomień\n            </a>\n            .\n          </Typography>\n        </GridCustom>\n        <GridCustom fullheight centerHorizontal>\n          <Typography use=\"body1\" style={{ marginTop: \"1rem\" }}>\n            Aby włączyć newsletter lub powiadomienia musisz być zalogowany.\n          </Typography>\n        </GridCustom>\n        <GridCustom fullheight centerHorizontal>\n          <ButtonStyled\n            primary\n            className=\"search__btn\"\n            onClick={handleGoToMainPage}\n          >\n            OK\n          </ButtonStyled>\n        </GridCustom>\n      </Container>\n    );\n  };","import React, { useEffect, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { GridCustom, ButtonStyled, Container } from \"../../common\";\nimport { Icon } from \"@rmwc/icon\";\nimport { Typography } from \"@rmwc/typography\";\nimport { URLS } from \"../../../urls/frontend\";\nimport { fetchApi } from \"../../../fetch\";\nimport { UnsubscribeSuccess } from \"./UnsubscribeSuccess\";\n\nconst UnsubscribeConfirmation = (props) => {\n  const history = useHistory();\n  const location = useLocation();\n\n  const [token, setToken] = useState(undefined);\n\n  useEffect(() => {\n    const token = location.search?.split(\"?token=\")?.[1];\n    if (token) {\n      setToken(token);\n    } else {\n      handleGoToMainPage();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [location.search]);\n\n  const handleGoToMainPage = () => {\n    history.push(URLS.home.path);\n  };\n\n  const handleError = (error) => {\n    throw new Error(error);\n  };\n\n  const handleConfirm = () => {\n    fetchApi(\n      `/api/notification-opt-out-link/${token}`,\n      \"POST\",\n      {},\n      {},\n      () => {\n        props.setConfirmed(true);\n      },\n      handleError,\n      handleError\n    );\n  };\n\n  return (\n    <Container>\n      <GridCustom centerHorizontal>\n        <Icon\n          className=\"subscription-icon\"\n          icon={{ icon: \"help_outline\" }}\n          aria-hidden=\"true\"\n        />\n      </GridCustom>\n      <GridCustom fullheight centerHorizontal>\n        <Typography\n          use=\"headline2\"\n          tag=\"h2\"\n          style={{ textAlign: \"center\", margin: \"3rem 0\" }}\n        >\n          Czy na pewno chcesz wyłączyć <br />\n          newsletter i powiadomienia?\n        </Typography>\n      </GridCustom>\n      <GridCustom fullheight centerHorizontal>\n        <ButtonStyled primary className=\"search__btn\" onClick={handleConfirm}>\n          TAK, CHCĘ WYŁĄCZYĆ NEWSLETTER I POWIADOMIENIA\n        </ButtonStyled>\n        <ButtonStyled lite className=\"search__btn\" onClick={handleGoToMainPage}>\n          NIE, PRZEJDŹ DO STRONY GŁÓWNEJ\n        </ButtonStyled>\n      </GridCustom>\n    </Container>\n  );\n};\n\nexport const Subscriptions = () => {\n  const [confirmed, setConfirmed] = useState(false);\n\n  return confirmed ? (\n    <UnsubscribeSuccess />\n  ) : (\n    <UnsubscribeConfirmation setConfirmed={setConfirmed} />\n  );\n};\n","import React, { useContext, useEffect } from 'react';\nimport { Redirect, Route, Switch, useHistory } from 'react-router-dom';\n\nimport { AdvertisementProvider } from '../context/advertisementContext';\nimport { MenuContext } from '../context/menuContext';\nimport { UserContext } from '../context/user-context';\nimport { URLS } from '../urls/frontend';\nimport { NotFoundPage } from './common';\nimport { DeklaracjaDostepnosci } from './layoutElements/DeklaracjaDostepnosci';\nimport {\n    Activities,\n    Institutions,\n    Perspectives,\n    Priorities,\n    Programmes,\n    Regions,\n    Subactivities\n} from './layoutElements/implementationLevelsManagement';\nimport { LandingPage } from './layoutElements/LandingPage';\nimport { Advertisements, Projects } from './layoutElements/management';\nimport { FormOgloszenie, Ogloszenia, Ogloszenie, Wyszukiwarka } from './layoutElements/ogloszenia';\nimport { Oferty } from './layoutElements/oferty';\nimport { Newsletter } from './layoutElements/newsletter/Newsletter';\nimport { Projekty } from './layoutElements/projekty';\nimport {\n    BladLogowania, Logowanie, ProfilUzytkownika, User, Users\n} from './layoutElements/uzytkownicy';\nimport {\n    Ciasteczka,\n    FormCiasteczka, FormKomunikat, FormPomoc, FormRegulamin, FormTrescOgolna,\n    Komunikat, Komunikaty, KomunikatFront, KomunikatyFront,\n    Pomoc, Pomoce, PomoceFront, PomocFront,\n    Regulamin, Regulaminy,\n    TresciOgolne, TrescOgolna,\n    ZarzadzanieTrescia\n} from './layoutElements/zarzadzanieTrescia';\nimport { Subscriptions } from './layoutElements/subscriptions/Subscriptions'\n\n\n// add url pattern here if you want to light the menu link on for that page\nconst URL_PATTERNS_BY_MENU_LINK_NAME = {\n    projects: [URLS.projects.pattern],\n    advertisements: [\n        'advertisements', 'advertisementsNew', 'advertisementsEdit'].map(\n        name => URLS[name].pattern),\n    offers: [URLS.offers.pattern],\n    newsletter: [URLS.newsletter.pattern],\n    accessibility: [URLS.accessibility.pattern],\n    users: ['users', 'usersDetails', 'usersMyProfile'].map(\n        name => URLS[name].pattern),\n    projectsManagement: [URLS.managementProjects.pattern],\n    advertisementsManagement: [URLS.managementAdvertisements.pattern],\n    contentsManagement: [\n        'managementContents',\n        'managementContentsHelps',\n        'managementContentsHelpsNew',\n        'managementContentsHelpsEdit',\n        'managementContentsHelpsDetails',\n        'managementContentsRegulations',\n        'managementContentsRegulationsCurrent',\n        'managementContentsRegulationsForPublishing',\n        'managementContentsRegulationsNew',\n        'managementContentsRegulationsEdit',\n        'managementContentsCookies',\n        'managementContentsCookiesNew',\n        'managementContentsCookiesEdit',\n        'managementContentsGeneralContents',\n        'managementContentsGeneralContentsEdit',\n        'managementContentsGeneralContentsDetails',\n        'managementContentsStatements',\n        'managementContentsStatementsNew',\n        'managementContentsStatementsEdit',\n        'managementContentsStatementsDetails'\n    ].map(name => URLS[name].pattern),\n    implementationLevelsDictionaryManagement: [\n        'managementPerspectives',\n        'managementProgrammesForPerspective',\n        'managementPrioritiesForProgramme',\n        'managementSubactivitiesForPriority',\n        'managementActivitiesForPriority',\n        'managementRegionsForSubactivity',\n        'managementInstitutionsForActivity',\n    ].map(name => URLS[name].pattern),\n};\n\n\nconst Routes = ({ onLoginClick, onSetMenuLinkByName }) => {\n\n    const {\n        permissions,\n        user,\n        setAdvertisementManagerType\n    } = useContext(UserContext);\n    const userAnonymous = user.identifier === null;\n\n    const history = useHistory();\n\n    function setMenuLink() {\n        for (let [linkName, patternList] of Object.entries(\n                URL_PATTERNS_BY_MENU_LINK_NAME)) {\n            for (let pattern of patternList) {\n                if (pattern.test(history.location.pathname)) {\n                    onSetMenuLinkByName(linkName);\n                    return\n                }\n            }\n        }\n        // if not found, clear menu link\n        onSetMenuLinkByName(null);\n    }\n    useEffect(setMenuLink, [history.location.pathname, ]);\n\n    const getComponent = (component, permissionName=null) => {\n        if (userAnonymous) {\n            return <Redirect to=\"/\" />\n        }\n        if (permissionName !== null && !permissions[permissionName]) {\n            return <NotFoundPage />\n        }\n        return component\n    }\n\n    const { menuLinkKey } = useContext(MenuContext);\n\n    return (\n        <AdvertisementProvider>\n            <Switch>\n                <Route\n                    exact path={URLS.home.path}\n                    render={(props) => <LandingPage\n                        {...props}\n                        user={user}\n                        onLoginClick={onLoginClick} />\n                    } />\n                <Route\n                    exact path={URLS.login.path}\n                    render={(props) => <Logowanie {...props} user={user} />}\n                />\n                <Route\n                    exact path={URLS.loginError.path}\n                    render={(props) => userAnonymous\n                        ? <BladLogowania {...props} />\n                        : <Redirect to=\"/\" />\n                    } />\n                <Route\n                    exact path={URLS.projects.path}\n                    render={(props) => getComponent(\n                        <Projekty {...props} />\n                    )} />\n                <Route\n                    exact path={URLS.advertisements.path}\n                    render={(props) => getComponent(\n                        <Ogloszenia {...props} />\n                    )} />\n                <Route\n                    exact path={URLS.advertisementsSearch.path}\n                    render={(props) => <Wyszukiwarka\n                        {...props} userIdentifier={user.identifier} />\n                    } />\n                <Route\n                    exact path={URLS.advertisementsNew.path}\n                    render={(props) => getComponent(\n                        <FormOgloszenie\n                            {...props}\n                            isNew={true}\n                            ref={(c) => {window.formOgloszenie = c}}\n                            setAdvertisementManagerType={setAdvertisementManagerType}\n                            userData={user}\n                        />\n                    )} />\n                <Route\n                    exact path={URLS.advertisementsDetails.path}\n                    render={(props) => <Ogloszenie\n                        {...props}\n                        user={user}\n                        userAnonymous={userAnonymous}\n                        setAdvertisementManagerType={setAdvertisementManagerType} />\n                    } />\n                <Route\n                    exact path={URLS.advertisementsDetailsDraft.path}\n                    render={(props) => getComponent(\n                        <Ogloszenie\n                            {...props}\n                            draftMode={true}\n                            user={user}\n                            setAdvertisementManagerType={setAdvertisementManagerType}\n                        />\n                )} />\n                <Route\n                    exact path={URLS.advertisementsDetailsVersion.path}\n                    render={(props) => <Ogloszenie\n                        {...props}\n                        user={user}\n                        userAnonymous={userAnonymous}\n                        versionMode={true}\n                        setAdvertisementManagerType={setAdvertisementManagerType} />\n                    } />\n                <Route\n                    exact path={URLS.advertisementsEdit.path}\n                    render={(props) => getComponent(\n                        <FormOgloszenie\n                            {...props}\n                            isNew={false}\n                            ref={(c) => {window.formOgloszenie = c}}\n                            setAdvertisementManagerType={setAdvertisementManagerType}\n                            userData={user}\n                        />\n                    )} />\n                <Route\n                    exact path={URLS.offers.path}\n                    render={(props) => getComponent(\n                        <Oferty {...props} />\n                    )} />\n                <Route\n                    exact path={URLS.newsletter.path} \n                    render={(props) => <Newsletter key={menuLinkKey} {...props} />}/>\n                <Route\n                    exact path={URLS.accessibility.path}\n                    component={DeklaracjaDostepnosci} />\n                <Route\n                    exact path={URLS.users.path}\n                    render={(props) => getComponent(\n                        <Users key={menuLinkKey} {...props} />,\n                        'fullUsersAndPermissions'\n                    )} />\n                <Route\n                    exact path={URLS.usersDetails.path}\n                    render={(props) => getComponent(\n                        <User {...props} />,\n                        'fullUsersAndPermissions'\n                    )} />\n                <Route\n                    exact path={URLS.usersMyProfile.path}\n                    render={(props) => getComponent(\n                        <ProfilUzytkownika {...props} />\n                    )} />\n                <Route\n                    exact path={URLS.managementProjects.path}\n                    render={(props) => getComponent(\n                        <Projects key={menuLinkKey} {...props} />,\n                        'projectsEnrollments'\n                    )} />\n                <Route\n                    exact path={URLS.managementAdvertisements.path}\n                    render={(props) => getComponent(\n                        <Advertisements key={menuLinkKey} {...props} />,\n                        'advertisements'\n                    )} />\n                <Route\n                    exact path={URLS.managementContents.path}\n                    render={(props) => getComponent(\n                        <ZarzadzanieTrescia {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsHelps.path}\n                    render={(props) => getComponent(\n                        <Pomoce {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsHelpsNew.path}\n                    render={(props) => getComponent(\n                        <FormPomoc {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsHelpsEdit.path}\n                    render={(props) => getComponent(\n                        <FormPomoc {...props} editing={true} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsHelpsDetails.path}\n                    render={(props) => getComponent(\n                        <Pomoc {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsRegulations.path}\n                    render={(props) => getComponent(\n                        <Regulaminy {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsRegulationsCurrent.path}\n                    render={(props) => getComponent(\n                        <Regulamin {...props} front={false} current={true} />,\n                        'fullContent'\n                    )} />\n                <Route\n                    exact\n                    path={URLS.managementContentsRegulationsForPublishing.path}\n                    render={(props) => getComponent(\n                       <Regulamin {...props} front={false} current={false} />,\n                        'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsRegulationsNew.path}\n                    render={(props) => getComponent(\n                       <FormRegulamin {...props} />\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsRegulationsEdit.path}\n                    render={(props) => getComponent(\n                       <FormRegulamin {...props} editing={true} />,\n                        'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsCookies.path}\n                    render={(props) => getComponent(\n                        <Ciasteczka {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsCookiesNew.path}\n                    render={(props) => getComponent(\n                        <FormCiasteczka {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsCookiesEdit.path}\n                    render={(props) => getComponent(\n                        <FormCiasteczka {...props} editing={true} />,\n                        'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsGeneralContents.path}\n                    render={(props) => getComponent(\n                        <TresciOgolne {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact\n                    path={URLS.managementContentsGeneralContentsEdit.path}\n                    render={(props) => getComponent(\n                        <FormTrescOgolna {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact\n                    path={URLS.managementContentsGeneralContentsDetails.path}\n                    render={(props) => getComponent(\n                        <TrescOgolna {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsStatements.path}\n                    render={(props) => getComponent(\n                        <Komunikaty {...props} />, 'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsStatementsNew.path}\n                    render={(props) => getComponent(\n                        <FormKomunikat {...props} editing={false} />,\n                        'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsStatementsEdit.path}\n                    render={(props) => getComponent(\n                        <FormKomunikat {...props} editing={true} />,\n                        'fullContent'\n                    )} />\n                <Route\n                    exact path={URLS.managementContentsStatementsDetails.path}\n                    render={(props) => getComponent(\n                        <Komunikat {...props} />, 'fullContent'\n                    )} />\n                <Route exact path={URLS.managementPerspectives.path}>\n                    {getComponent(<Perspectives />, 'previewDictionaries')}\n                </Route>\n                <Route exact path={URLS.managementProgrammesForPerspective.path}>\n                    {getComponent(<Programmes />, 'previewDictionaries')}\n                </Route>\n                <Route exact path={URLS.managementPrioritiesForProgramme.path}>\n                    {getComponent(<Priorities />, 'previewDictionaries')}\n                </Route>\n                <Route exact path={URLS.managementSubactivitiesForPriority.path}>\n                    {getComponent(<Subactivities />, 'previewDictionaries')}\n                </Route>\n                <Route exact path={URLS.managementActivitiesForPriority.path}>\n                    {getComponent(<Activities />, 'previewDictionaries')}\n                </Route>\n                <Route exact path={URLS.managementRegionsForSubactivity.path}>\n                    {getComponent(<Regions />, 'previewDictionaries')}\n                </Route>\n                <Route exact path={URLS.managementInstitutionsForActivity.path}>\n                    {getComponent(<Institutions />, 'previewDictionaries')}\n                </Route>\n                <Route\n                    exact path={URLS.helps.path}\n                    component={PomoceFront} />\n                <Route\n                    exact path={URLS.helpsDetails.path}\n                    component={PomocFront} />\n                <Route\n                    exact path={URLS.regulations.path}\n                    render={(props) =>\n                        <Regulamin {...props} front={true} current={true} />\n                    } />\n                <Route\n                    exact path={URLS.subscriptions.path}\n                    component={Subscriptions} />\n                <Route\n                    exact path={URLS.statements.path}\n                    component={KomunikatyFront} />\n                <Route\n                    exact path={URLS.statementsDetails.path}\n                    component={KomunikatFront} />\n                <Route path=\"*\" component={NotFoundPage} />\n            </Switch>\n        </AdvertisementProvider>\n    )\n}\n\n\nexport { Routes };\n","import React, { Component } from 'react';\nimport { BrowserRouter as Router, Link, useLocation } from 'react-router-dom';\nimport { Button } from '@rmwc/button';\nimport { DrawerAppContent } from '@rmwc/drawer';\nimport { Icon } from '@rmwc/icon';\nimport { TopAppBar, TopAppBarFixedAdjust, TopAppBarActionItem, TopAppBarRow, TopAppBarSection, TopAppBarTitle } from '@rmwc/top-app-bar';\nimport '@material/elevation/dist/mdc.elevation.css';\nimport '@material/top-app-bar/dist/mdc.top-app-bar.css';\nimport '@material/textfield/dist/mdc.textfield.css';\nimport '@material/floating-label/dist/mdc.floating-label.css';\nimport '@material/notched-outline/dist/mdc.notched-outline.css';\nimport '@material/line-ripple/dist/mdc.line-ripple.css';\n\nimport { TOKEN_COOKIE_NAME } from '../const';\nimport { MenuProvider } from '../context/menuContext';\nimport { UserContext } from '../context/user-context';\nimport { fetchApi, fetchSativaApi } from '../fetch';\nimport { deleteCookie, getCookieValue, redirectToLoginView, setFocusOnElement } from '../helpers';\nimport { URLS } from '../urls/frontend';\nimport { MenuDrawer, SkipLinks, Text } from './common';\nimport { Sesja, SessionDialog } from './layoutElements/uzytkownicy';\nimport { CiasteczkaFront, ZoltyPasekFront } from './layoutElements/zarzadzanieTrescia';\nimport { Routes } from './Routes';\n\nimport ueFooter from '../static/img/FE_footer.png'\n\n\nconst SKIP_LINKS_PRIVATE = [\n    {\n        id: 1,\n        label: 'Przejdź do projektów',\n        linkTo: URLS.projects.path,\n    },\n    {\n        id: 2,\n        label: 'Przejdź do ogłoszeń',\n        linkTo: URLS.advertisements.path,\n    },\n    {\n        id: 3,\n        label: 'Przejdź do ofert',\n        linkTo: URLS.offers.path,\n    },\n];\n\nconst SKIP_LINKS = [\n    {\n        id: 4,\n        label: 'Przejdź do deklaracji dostępności',\n        linkTo: URLS.accessibility.path,\n    },\n    {\n        id: 5,\n        label: 'Przejdź do treści',\n        linkTo: '#',\n    },\n];\n\nconst MENU_LINKS = [\n    {\n        icon: 'question_answer',\n        id: 1,\n        label: 'Moje projekty i nabory',\n        linkTo: URLS.projects.path,\n        name: 'projects',\n        onlyAuthenticated: true,\n    },\n    {\n        icon: 'send',\n        id: 2,\n        label: 'Moje ogłoszenia',\n        linkTo: URLS.advertisements.path,\n        name: 'advertisements',\n        onlyAuthenticated: true,\n    },\n    {\n        icon: 'list',\n        id: 3,\n        label: 'Moje oferty',\n        linkTo: URLS.offers.path,\n        name: 'offers',\n        onlyAuthenticated: true,\n    },\n    {\n        icon: 'mail',\n        id: 4,\n        label: 'Newsletter, powiadomienia, ulubione',\n        linkTo: `${URLS.newsletter.path}?sekcja=newsletter`,\n        name: 'newsletter',\n        onlyAuthenticated: true,\n    },\n    {\n        icon: 'accessibility',\n        id: 5,\n        label: 'Deklaracja dostępności',\n        linkTo: URLS.accessibility.path,\n        name: 'accessibility',\n    },\n    {\n        icon: 'people',\n        id: 6,\n        label: 'Administracja użytkownikami i uprawnieniami',\n        linkTo: `${URLS.users.path}?sekcja=lista`,\n        name: 'users',\n        onlyAuthenticated: true,\n        permissionName: 'fullUsersAndPermissions',\n    },\n    {\n        icon: 'account_tree_icon',\n        id: 7,\n        label: 'Administracja słownikiem poziomów wdrażania',\n        linkTo: URLS.managementPerspectives.path,\n        name: 'implementationLevelsDictionaryManagement',\n        onlyAuthenticated: true,\n        permissionName: 'previewDictionaries',\n    },\n    {\n        icon: 'vertical_split',\n        id: 8,\n        label: 'Administracja treściami',\n        linkTo: URLS.managementContents.path,\n        name: 'contentsManagement',\n        onlyAuthenticated: true,\n        permissionName: 'fullContent',\n    },\n    {\n        icon: 'line_weight',\n        id: 9,\n        label: 'Administracja projektami i\\u00a0naborami',\n        linkTo: URLS.managementProjects.path,\n        name: 'projectsManagement',\n        onlyAuthenticated: true,\n        permissionName: 'projectsEnrollments',\n    },\n    {\n        icon: 'description',\n        id: 10,\n        label: 'Administracja ogłoszeniami',\n        linkTo: URLS.managementAdvertisements.path,\n        name: 'advertisementsManagement',\n        onlyAuthenticated: true,\n        permissionName: 'advertisements',\n    },\n];\n\n\nconst UePadding = (props) => {\n    const location = useLocation();\n\n    if (location.pathname != '/') {\n        return <></>\n    }\n\n    return <div style={{paddingBottom: \"14rem\"}}></div>\n}\n\n\nconst UeFooter = (props) => {\n    const location = useLocation();\n\n    if (location.pathname != '/') {\n        return <></>\n    }\n\n    return (\n        <>\n            <div style={{textAlign: \"center\"}}>\n                <img style={{maxWidth: \"800px\", width: \"90%\", height: \"auto\"}} alt=\"Zestawienie znaków: Fundusze Europejskie, Barwy Rzeczypospolitej Polskiej, Unia Europejska\" src={ueFooter}/>\n            </div>\n            <div style={{textAlign: \"center\", marginBottom: \"4rem\"}}>\n                Projekt współfinansowany z Funduszu Spójności i budżetu państwa\n            </div>\n        </>\n    )\n}\n\n\nclass App extends Component {\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            initializingOn: window.location.pathname !== URLS.login.path,\n            currentMenuLink: null,\n            openMenu: false,\n            mobile: true,\n            currentHref: '/',\n            logoutError: '',\n            logoutDoneOn: false,\n        }\n\n        this.appContentRef = React.createRef();\n\n        this.xhrFetch = null;\n        this.xhrLogoutFetch = null;\n\n        this.updateMenuDisplay = this.updateMenuDisplay.bind(this);\n    }\n\n    // basic functions\n\n    componentDidMount() {\n        this.updateMenuDisplay();\n        window.addEventListener('resize', this.updateMenuDisplay);\n\n        if (this.state.initializingOn) {\n            // if token cookie exists, check it on server\n            if (getCookieValue(TOKEN_COOKIE_NAME)) {\n                this.xhrFetch = fetchApi(\n                    '/api/authentication/identity',\n                    'GET',\n                    {},\n                    {},\n                    this.handleFetchSuccess,\n                    this.handleFetchError,\n                    this.handleFetchIncorrectStatus,\n                );\n            } else {\n                this.setState({initializingOn: false});\n            }\n        }\n    }\n\n    componentWillUnmount() {\n        // abort api requests if exist\n        for (let fetch of [this.xhrFetch, this.xhrLogoutFetch]) {\n            if (fetch !== null) {\n                fetch.abort();\n            }\n        }\n    }\n\n    // handlers\n\n    handleFetchSuccess = (data) => {\n        this.xhrFetch = null;\n        this.context.set(\n            data,\n            () => this.setState({initializingOn: false})\n        )\n    }\n\n    handleFetchError = (data) => {\n        this.xhrFetch = null;\n        this.clearAuthCookie();\n        this.setState({initializingOn: false});\n    }\n\n    handleFetchIncorrectStatus = (status) => {\n        this.xhrFetch = null;\n        this.clearAuthCookie();\n        this.setState({initializingOn: false});\n    }\n\n    handleLogin = () => {\n        redirectToLoginView();\n    }\n\n    handleLogout = () => {\n        this.xhrLogoutFetch = fetchSativaApi(\n            '/api/token/revoke',\n            this.handleFetchLogoutSuccess,\n            this.handleFetchLogoutError,\n            this.handleFetchLogoutIncorrectStatus,\n        );\n    }\n\n    handleFetchLogoutSuccess = (data) => {\n        this.xhrLogoutFetch = null;\n        this.clearAuthCookie(\n            () => this.context.logout(() => this.setState({logoutDoneOn: true}))\n        );\n    }\n\n    handleFetchLogoutError = (data) => {\n        this.xhrLogoutFetch = null;\n        this.setState({logoutError: `Nie udało się wylogować użytkownika. ${data.message}`});\n    }\n\n    handleFetchLogoutIncorrectStatus = (status) => {\n        this.xhrLogoutFetch = null;\n        this.setState({logoutError: `Nie udało się wylogować użytkownika. Wystąpił błąd o kodzie ${status}.`});\n    }\n\n    handleSetMenuLinkByName = (linkName) => {\n        if (linkName === null) {\n            this.setState({currentMenuLink: null});\n            return\n        }\n        for (let link of MENU_LINKS) {\n            if (link.name === linkName) {\n                this.setState({currentMenuLink: link.id});\n                return\n            }\n        }\n        this.setState({currentMenuLink: null});\n    }\n\n    // helpers\n\n    setCurrentMenuLink(id) {\n        this.setState({currentMenuLink: id});\n        setFocusOnElement(this.appContentRef);\n    }\n\n    updateMenuDisplay() {\n        this.setState({mobile: window.innerWidth >= 1340 ? false : true});\n    }\n\n    clearAuthCookie = (callback=null) => {\n        deleteCookie(TOKEN_COOKIE_NAME, callback);\n    }\n\n    // rendering\n\n    render() {\n        if (this.state.initializingOn) {\n            return <Text info>Trwa inicjalizacja danych...</Text>\n        }\n\n        let skipLinks = [...SKIP_LINKS];\n        if (this.context.user.identifier) {\n            skipLinks = [...SKIP_LINKS_PRIVATE, ...SKIP_LINKS];\n        }\n\n        // Router should be on the top of components, because MenuDrawer needs routing\n        return (\n            <>\n                <Router>\n                    <MenuProvider style={{display: \"flex\"}}>\n                        <SkipLinks children={skipLinks} />\n                        <CiasteczkaFront />\n                        {this.renderHeader()}\n                        <TopAppBarFixedAdjust />\n                        {this.renderMenu()}\n                        {this.renderContent()}\n                        {this.renderFooter()}\n                    </MenuProvider>\n                </Router>\n                {this.state.logoutError.length > 0 && this.renderLogoutError()}\n                {this.state.logoutDoneOn && this.renderLogoutDialog()}\n            </>\n        )\n    }\n\n    renderHeader() {\n        const { mobile } = this.state;\n        return (\n            <TopAppBar fixed={!mobile} className={!mobile && 'top-app-bar--desktop'}>\n                <TopAppBarRow>\n                    <TopAppBarSection alignStart>\n                        {mobile && (\n                            <Button\n                                className=\"btn--icon-only btn--primary\"\n                                onClick={() => {this.setState(prevState => ({openMenu: !prevState.openMenu}))}}\n                                title=\"Rozwiń menu\"\n                                unelevated >\n                                <span className=\"sr-only\">Rozwiń menu</span>\n                                <Icon aria-hidden=\"true\" icon=\"menu\" />\n                            </Button>\n                        )}\n                        <TopAppBarTitle tag=\"h1\">\n                            <Link to={URLS.home.path} className=\"main-page-title\">\n                                Baza Konkurencyjności\n                            </Link>\n                        </TopAppBarTitle>\n                    </TopAppBarSection>\n                    <TopAppBarSection alignEnd>\n                        <Sesja ref={c => {window.sessionComponent = c}} />\n                        {this.renderUserWidget()}\n                    </TopAppBarSection>\n                </TopAppBarRow>\n            </TopAppBar>\n        )\n    }\n\n    renderUserWidget() {\n        if (this.context.user.identifier === null) {\n            return (\n                <Button\n                    className=\"btn--icon-only btn--primary\"\n                    onClick={this.handleLogin}\n                    title=\"Zaloguj\"\n                    unelevated>\n                    <span className=\"sr-only\">Zaloguj się</span>\n                    <Icon aria-hidden=\"true\" icon=\"power_settings_new\" />\n                </Button>\n            )\n        }\n        const { forename, surname } = this.context.user;\n        return (\n            <>\n                <Link to={URLS.usersMyProfile.path} className=\"link-text\">\n                    <TopAppBarActionItem\n                        aria-hidden=\"false\"\n                        aria-label=\"Mój profil\"\n                        title=\"Mój profil\"\n                        icon=\"account_circle\" />\n                </Link>\n                <Text className=\"header-user-name\">{forename} {surname}</Text>\n                <Button\n                    className=\"btn--icon-only btn--primary\"\n                    onClick={this.handleLogout}\n                    title=\"Wyloguj\"\n                    unelevated >\n                    <span className=\"sr-only\">Wyloguj się</span>\n                    <Icon aria-hidden=\"true\" icon=\"power_settings_new\" />\n                </Button>\n            </>\n        )\n    }\n\n    renderMenu() {\n        const {\n            currentMenuLink,\n            mobile,\n            openMenu,\n        } = this.state;\n\n        let menuLinks = [...MENU_LINKS];\n        if (!this.context.user.identifier) {\n            menuLinks = menuLinks.filter(link => link.onlyAuthenticated !== true);\n        } else {\n            const permissions = this.context.permissions;\n            menuLinks = menuLinks.filter(\n                link => !link.permissionName ||\n                    permissions[link.permissionName] || false\n            );\n        }\n\n        return (\n            <MenuDrawer\n                children={menuLinks}\n                currentMenuLink={currentMenuLink}\n                openMenu={openMenu}\n                onMenuClose={() => {this.setState(prevState => ({openMenu: !prevState.openMenu}))}}\n                mobile={mobile} />\n        )\n    }\n\n    renderContent() {\n        return (\n            <DrawerAppContent>\n                <div ref={this.appContentRef} tabIndex=\"-1\">\n                    <ZoltyPasekFront />\n                    <main className=\"main\">\n                        <Routes\n                            onLoginClick={this.handleLogin}\n                            onSetMenuLinkByName={this.handleSetMenuLinkByName} />\n                    </main>\n                </div>\n                <UePadding/>\n            </DrawerAppContent>\n        )\n    }\n\n    renderFooter() {\n        return (\n            <>\n                <div style={{flexGrow: 1}}></div>\n                <footer className=\"footer\">\n                    <nav aria-label=\"Nawigacja w stopce\">\n                        <UeFooter/>\n                        <ul className=\"footer__list\">\n                            <li><Link to={URLS.helps.path} className=\"link-text footer__list-item\">Pomoc</Link></li>\n                            <li><Link to={URLS.regulations.path} className=\"link-text footer__list-item\">Regulamin</Link></li>\n                            <li><Link to={URLS.statements.path} className=\"link-text footer__list-item\">Komunikaty</Link></li>\n                        </ul>\n                    </nav>\n                </footer>\n            </>\n        )\n    }\n\n    renderLogoutError() {\n        return <SessionDialog\n                   callback={() => this.setState({logoutError: ''})}\n                   error\n                   messageTitle={this.state.logoutError}\n                   messageIcon=\"error_outline\"\n                   withButton />\n    }\n\n    renderLogoutDialog() {\n        return <SessionDialog\n                   callback={() => window.location.reload()}\n                   messageContent=\"Aby uzyskać dostęp do widoków dla zarejestrowanych użytkowników, zaloguj się ponownie.\"\n                   messageTitle=\"Użytkownik został wylogowany.\"\n                   withButton />\n    }\n}\n\n\nApp.contextType = UserContext;\n\nexport default App;\n","export default \"data:image/png;base64,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\"","// This optional code is used to register a service worker.\n// register() is not called by default.\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 subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\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 function register(config) {\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.href);\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/facebook/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. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\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              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\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      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.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, config);\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 React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './components/App';\nimport { colors } from './components/vars/vars';\nimport * as serviceWorker from './serviceWorker';\nimport { ThemeProvider } from '@rmwc/theme';\nimport './static/styles/base.sass';\n\nimport { UserProvider } from './context/user-context';\n\n\nReactDOM.render(\n    <ThemeProvider options={colors} >\n        <UserProvider>\n            <App />\n        </UserProvider>\n    </ThemeProvider>,\n    document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}