{"version":3,"sources":["pages/profiles/features/profile-empty/images/landingImage.png","components/header/wetuLogo.png","components/email-input/images/icon_warning.svg","components/wizard.room.card/images/landingImage.png","pages/profile-wizard/features/wizard.step-12/images/landingImage.png","components/grid.row/images/landingImage.png","components/profile/types.ts","pages/profile-form/profile.form.types.ts","app/config.ts","api/profile.service.ts","components/toast/toast.slice.ts","utils/General.ts","components/profile/profile.slice.ts","api/profileitem.service.ts","api/blob.service.ts","components/profile/profileitem/profileitem.slice.ts","api/media.service.ts","components/profile/mediaitem/mediaitem.slice.ts","app/app.slice.ts","app/root-reducer.ts","app/store.ts","components/map/map.tsx","components/email-input/email-input.tsx","pages/home/home.page.tsx","pages/page-3/page-3.page.tsx","pages/page-4/page-4.page.tsx","pages/page5/page-5.page.tsx","components/header/features/profile.creation.header/profile.creation.header.tsx","components/header/features/profile.general.header/profile.general.header.tsx","components/header/features/header.factory/header.factory.tsx","components/header/header.tsx","components/wizard/wizard.tsx","components/wizard.card/wizard.card.tsx","components/suggestion.modal/suggestion.modal.tsx","utils/Validation.ts","pages/profile-wizard/features/wizard.step-1/wizard.step-1.tsx","pages/profile-wizard/features/wizard.step-2/wizard.step-2.tsx","utils/GoogleMapsUtils.ts","components/google.places.search/google.places.search.tsx","components/insights.card/insights.card.tsx","pages/profile-wizard/features/wizard.step-3/wizard.step-3.tsx","pages/profile-wizard/features/wizard.step-4/wizard.step-4.tsx","pages/profile-wizard/features/wizard.step-5/wizard.step-5.tsx","components/checkbox.accordion/checkbox.accordion.tsx","components/facilities/facilities.tsx","pages/profile-wizard/features/wizard.step-6/wizard.step-6.tsx","components/pill.text.input/pill.text.input.tsx","pages/profile-wizard/features/wizard.step-7/wizard.step-7.tsx","components/indeterminate.checkbox/types.ts","components/show.more/show.more.tsx","components/time.picker/time.picker.tsx","components/number.stepper/number.stepper.tsx","components/star.rating/features/star.icon/star.icon.tsx","components/star.rating/features/rating.icon/rating.icon.tsx","components/star.rating/star.rating.tsx","pages/profile-wizard/features/wizard.step-8/wizard.step-8.tsx","components/accept.decline.modal/accept.decline.modal.tsx","components/dropzone/features/types.ts","components/dropzone/features/image/dropzone.image.tsx","components/dropzone/features/video/dropzone.video.tsx","components/dropzone/features/virtualTour/dropzone.virtualTour.tsx","components/translatable.text.editor/translatable.text.editor.tsx","components/dropzone/features/image.edit.modal/image.edit.modal.tsx","components/dropzone/dropzone.tsx","components/profile/profileitem/types.ts","components/indeterminate.checkbox/indeterminate.checkbox.tsx","components/profile.images.card/profile.images.card.tsx","pages/profile-wizard/features/wizard.step-9/wizard.step-9.tsx","components/profile.grid/profile.grid.tsx","components/wizard.room.card/wizard.room.card.tsx","pages/profile-form/pages/sleeping-arrangements/features/sleeping.arrangements.overlay/sleeping.arrangements.overlay.tsx","components/wizard.section.card/wizard.section.card.tsx","pages/profile-wizard/features/wizard.step-10/wizard.step-10.tsx","pages/profile-wizard/features/wizard.step-11/wizard.step-11.tsx","pages/profile-wizard/features/wizard.step-12/wizard.step-12.tsx","pages/profile-wizard/features/wizard.step-13/wizard.step-13.tsx","pages/profile-wizard/profile.wizard.page.tsx","pages/profiles/features/profile-empty/profile-empty.tsx","components/label.pill/label.pill.tsx","components/content.rating.bar/content.rating.bar.tsx","components/menu.button/features/menu.items/menu.items.tsx","components/menu.button/features/menu.toggle/menu.toggle.tsx","components/menu.button/menu.button.tsx","components/to.do.button/to.do.button.tsx","components/grid.row/grid.row.tsx","utils/DateUtils.ts","components/sort.label/sort.label.tsx","pages/profile-form/pages/contact-details/contact-details.page.tsx","pages/profiles/features/profile-list/profile-list.tsx","pages/profiles/profiles.page.tsx","components/toast/toast.tsx","pages/profile-form/features/sidebar/profile.form.sidebar.tsx","components/profile.status.card/features/profile.status.dropdown.toggle/profile.status.dropdown.toggle.tsx","components/profile.status.card/profile.status.card.tsx","components/languages.modal/languages.modal.tsx","pages/profile-form/pages/basic-info/basic.info.page.tsx","components/drag.sortable/drag.sortable.card/drag.sortable.card.tsx","components/drag.sortable/drag.sortable.tsx","pages/profile-form/pages/sleeping-arrangements/sleeping.arrangements.page.tsx","pages/profile-form/pages/media/features/appearances/media.appearances.tsx","components/embed.videos.modal/embed.videos.modal.tsx","pages/profile-form/pages/media/features/videos/media.videos.tsx","components/embed.virtualtours.modal/embed.virtualtours.modal.tsx","pages/profile-form/pages/media/features/virtual.tours/media.virtual.tours.tsx","pages/profile-form/pages/media/media.page.tsx","pages/profile-form/features/checklist/profile.checklist.tsx","pages/profile-form/pages/fast-facts/fast-facts.page.tsx","pages/profile-form/pages/facilities/features/facilities.section.card/facilities.section.card.tsx","pages/profile-form/pages/facilities/facilities.page.tsx","components/multi-select/features/multiselect.toggle/multiselect.toggle.tsx","components/multi-select/multiselect.tsx","components/multi.select.repeater/multi.select.repeater.tsx","pages/profile-form/pages/integrations/features/gds.card/gds.card.tsx","pages/profile-form/pages/integrations/features/integrations.card/integrations.card.tsx","pages/profile-form/pages/integrations/integrations.page.tsx","pages/profile-form/pages/documents/features/document.item.feature.tsx","components/language.picker/language.picker.tsx","pages/profile-form/pages/documents/documents.page.tsx","pages/profile-form/profile.form.container.tsx","app/App.tsx","index.tsx"],"names":["module","exports","ProfileStatusEnum","ContactTypeEnum","LinkTypeEnum","EntityTypeEnum","MediaTypeEnum","TranslationItemTypeEnum","FeatureTypeEnum","TimeFormatEnum","BookingAffiliateEnum","GDSEnum","DocumentTypeEnum","DocumentVisibilityEnum","getMediaTypeEnumAsLabel","type","isPlural","label","embedVideo","video","virtualTour","documentation","ProfileFormPageEnum","ProfileFormPageSectionEnum","ProfileFacilitiesSectionEnum","initialCreateProfile","name","category","entityType","profile","latitude","longitude","isEnhanced","isPublished","translationItems","features","checkinTimeFrom","hours","minutes","checkinTimeTo","checkoutTimeFrom","checkoutTimeTo","starRating","roomCount","typesArray","icon","description","value","categoryArray","RoomConfiguration","languages","id","language","languageDictionary","en","zh","cs","da","nl","fi","fr","de","it","no","pl","pt","ru","es","sv","ProfileSummaryDropdownMenuItems","key","privacy","tier","ProfileSidebarMenuItems","isSelected","isCompleted","url","basicInfo","isEnhancedOnly","fastFacts","media","sleepingArrangements","facilities","contactDetails","location","addedServices","rates","documents","integrations","ChecklistSections","images","page","videos","virtualTours","appearances","facilitiesProperty","facilitiesSleepingArrangements","facilitiesServices","facilitiesActivitiesOnSite","facilitiesActivitiesNearby","enquiries","contacts","socialMedia","gdsCodes","MediaAppearancesSections","featuresData","facility","affiliates","affiliate","none","nightsbridge","resRequest","gdsData","title","amadeus","isChecked","subtitle","galileo","pegasus","sabre","travelPort","worldSpan","getApiBaseUrl","window","hostname","envFileBaseUrl","process","REACT_APP_API_BASE_URL","slice","baseProfileUrl","getProfileById","profileId","accountId","a","axios","get","headers","catch","error","response","console","data","status","updateProfile","payload","post","createProfile","validateProfile","getProfileSummaries","toastSlice","createSlice","initialState","show","message","reducers","showGlobalToast","state","action","hideGlobalToast","actions","logError","err","pluralise","word","checker","pluralSuffix","addPlural","replaceAll","text","findString","replaceString","split","join","pin","drivingLatitude","drivingLongitude","shortDescription","enText","translations","richDescription","searchAliases","availableLanguages","qualityAssuranceBody","alternativeRating","timeFormat","Hours24","minimumChildAge","affiliateCode","clientName","links","isLoaded","profileSummaries","isValidated","loading","saving","submitting","getDefaultContact","contactType","skype","address","countryCode","dialCode","email","telephone","website","onlineReservationUrl","isFeaturesSelected","sectionName","subSectionName","featureArray","i","find","x","length","isEnquiriesComplete","frontDesk","reservation","isContactsComplete","filter","marketing","sales","accounts","isContactComplete","isSocialMediaComplete","items","Object","values","contact","isFormPageProfileComplete","pageId","isGDSCodesCompleted","keys","trim","findIndex","isLanguagesSelected","property","sleepingArrangments","services","activitiesOnSite","activitiesNearby","getById","createAsyncThunk","rejectWithValue","push","physicalAddress","updateProfileFromStore","unusedPayload","dispatch","store","getState","profileSlice","sectionsComplete","update","create","validate","getSummaries","ResetProfile","UpdateSectionComplete","sectionsCompleteCopy","_","cloneDeep","getSectionsComplete","UpdateSectionCompleteWithValue","current","UpdateSectionsComplete","UpdateProfileLanguages","UpdateProfileName","caseReducers","UpdateProfileType","UpdateProfileCategory","UpdateProfileStreetAddress","streetAddress","UpdateProfilePostalCode","postalCode","UpdateProfileCountry","country","resetPin","ResetProfilePin","UpdateProfileCity","city","UpdateProfilePin","UpdateProfileCheckinTimeFrom","UpdateProfileCheckinTimeTo","UpdateProfileCheckoutTimeFrom","UpdateProfileCheckoutTimeTo","UpdateProfileRoomCount","UpdateProfileStarRating","UpdateProfileFeatures","UpdateProfileNameAddressLocation","addressContact","index","indexOf","UpdateProfileShortDescription","UpdateProfileLocation","UpdateProfileSearchAliases","UpdateProfileRichDescription","UpdateProfileLinks","UpdateProfileContact","doesItemExist","map","item","UpdateQualityAssuranceBody","UpdateAlternativeRating","UpdateTimeFormat","UpdateMinimumChildAge","UpdateAffiliate","UpdateAffiliateCode","UpdateClientName","UpdateGDSCodes","UpdateIsProfileLoaded","extraReducers","builder","addCase","pending","fulfilled","updateProfileItemsDb_service","getProfileItems","deleteProfileItemDb_service","createProfileItemDb_service","uploadBlob","deleteBlob","profileItems","mediaItems","createProfileItem","uploadRoomBlob","multipleImages","getAll","uploadRoomMedia","getProfileItemsById","getProfileItemCount","profileItemSlice","deleteRoomBlob","blobNames","updateProfileItemsDb","isChanged","deleteProfileItem","undefined","ResetProfileItem","UpdateProfileItemMediaItems","UpdateExistingProfileItemMedia","profileItemsClone","UpdateProfileItems","changedItems","profilesItems","splice","clonedProfileItems","parentId","uploadProfileEmbedVideos","uploadProfileMedia_service","deleteProfileMedia_service","updateProfileMedia_service","getMediaItems_service","isMediaItemSliceLoading","isMediaComplete","mediaItemSlice","mediaType","image","getMediaItems","languageCodes","j","languageCode","updateChangedMedia","changedMedia","updateMedia","deleteMedia","showToast","uploadMedia","formData","multipleMedia","uploadEmbedVideos","IMediaIEmbed","enableToast","toastMessage","ResetMediaItems","UpdateMediaItems","UpdateChangedMedia_Reducer","mediaItemsClone","UpdateMedia_Reducer","currentMediaItems","forEach","applicationSlice","showUpdateProfileMenu","ToggleUpdateProfileMenu","rootReducer","combineReducers","toast","configureStore","reducer","Reason","useAppDispatch","useDispatch","HomePage","className","Page3","Page4","Page5","ProfileCreationHeader","displaySaveAndExit","useSelector","Fragment","Col","xs","offset","span","Button","onClick","variant","ProfileGeneralHeader","isProfiles","isUpdateProfile","md","path","link","Nav","Item","to","exact","activeClassName","placeholder","Form","Label","Check","height","width","cx","cy","r","fillOpacity","strokeWidth","stroke","HeaderFactory","useLocation","isInProfiles","pathname","includes","isOnProfileUpdatePage","position","Number","lastIndexOf","isNaN","sliceWithIdAndGuid","sliceWithOnlyId","getCurrentPathWithoutParams","Header","history","useHistory","Navbar","fixed","bg","Image","src","logo","Wizard","step","children","finalNavigation","startingStep","navigateTo","useState","stepCount","setStepCount","currentStepIndex","setCurrentStepIndex","stepData","setStepData","useEffect","React","Children","count","child","completed","skip","newStepDataArray","getStepData","nextStep","Container","fluid","Row","progressBarEnabled","ProgressBar","now","max","toArray","displayFooterNavigation","displayRoomCancel","pageCallBack2","displayNext","disabled","displayPreview","open","displayFinalize","displayRoomDone","pageCallBack1","Beacon","WizardCard","callBack","lg","Card","Body","Subtitle","Text","SuggestionModal","isOpen","setIsOpen","noSuggestion","showSuggestionBox","setText","hideModal","toLowerCase","Modal","size","onHide","hidden","onChange","event","target","Footer","IsStepComplete","stepComplete","WizardStep1Page","selectionCallBack","border","Title","WizardStep2Page","loadMapApi","mapsURL","scripts","document","getElementsByTagName","googleMapScript","createElement","async","defer","body","appendChild","getGoogleField","googlePlacesResult","searchFieldName","address_components","types","y","long_name","getAddress","streetNumber","route","sublocality","getCity","place","getCountry","getPostalCode","GooglePlacesSearch","placeHolder","setPlace","hasError","setHasError","google","initAutocomplete","profileNameBox","getElementById","getAttribute","searchBox","maps","places","SearchBox","setAttribute","addListener","e","getPlaces","addEventListener","Group","Control","freeTextPlace","handlePlaceChange","autoComplete","InsightsCard","titleIcon","stickyStyling","getIcon","WizardStep3Page","getWordCount","profileName","setProfileName","setCount","googlePlaceResult","toString","geometry","lat","lng","machineTranslations","as","rows","WizardStep4Page","lAddress","setAddress","lCity","setCity","lPostalCode","setPostalCode","lCountry","setCountry","handleAddressChange","freeTextStreetAddress","googleStreetAddress","saveAddress","handleCountryChange","handleCityChange","handlePostalCodeChange","hasGoogleError","markers","Map","props","mapRef","useRef","initialCenter","setCoordinates","center","zoom","draggableCursor","marker","Marker","draggable","setZoom","infowindow","InfoWindow","content","evt","latLng","setCenter","addMarker","LatLng","ref","WizardStep5Page","googleMapLoaded","setMapLoaded","latLong","CheckboxAccordion","fixedCount","accordionCallBack","fixedItems","accordionItems","addFeatures","object","checked","loadCheckedState","toUpperCase","Accordion","Collapse","eventKey","Toggle","Facilities","featureDataSectionName","labels","updatedFeatures","entries","WizardStep6Page","featuresCount","PillTextInput","addCallBack","removeCallBack","changeCallBack","unique","newName","setNewName","addButtonClick","onKeyPress","handleKeyPress","endsWith","WizardStep7Page","languageExists","setLanguageExists","setMessage","addAdditionalLanguage","addedLanguage","checkLanguageExists","checkBoxIndex","itemName","initialInputState","ErrorMessage","HasError","IsValid","ShowErrorLink","IsLoading","IndeterminateCheckboxEnum","EmailInput","validated","showLabel","validationEvent","validationState","setValidationState","updateStateValues","prev","validateEmail_Event","RegExp","test","validationHandler","Format","None","reason","showLink","Availability","Error","isInvalid","isValid","defaultValue","onBlur","Spinner","animation","role","Feedback","warningImage","href","ShowMore","callback","showContent","setShowContent","TimePicker","time","checkInTime","setCheckInTime","padNumber","getTimeString","num","numStr","InputGroup","Dropdown","Menu","h","m","handleTime","createSelectOptions","NumberStepper","initialCount","min","ButtonGroup","keyChange","StarIcon","color","Provider","RatingIcon","rating","hoverRating","onMouseEnter","onMouseLeave","onSaveRating","fill","useMemo","StarRating","starAmount","setRating","setHoverRating","amount","setAmount","WizardStep8Page","getTelephone","existingContact","getCountryCode","parseInt","getDialCode","setCountryCode","reservationCountryCode","setTelephone","reservationTelephone","setReservationTelephone","getEmail","setEmail","showReservation","setShowReservation","checkinTimeFromLocal","setCheckinTimeFromLocal","checkinTimeToLocal","setCheckinTimeToLocal","checkoutTimeFromLocal","setCheckoutTimeFromLocal","checkoutTimeToLocal","setCheckoutTimeToLocal","roomCountLocal","setRoomCountLocal","frontDeskDialCode","setFrontDeskDialCode","reservationDialCode","setReservationDialCode","countCallback","useCallback","ratingCallback","isPhoneValid","phone","frontDeskContact","reservationContact","cCode","contactCopy","updatePhone","enableSearch","inputStyle","defaultMask","countryCodeEditable","updateValue","updateResPhone","AcceptDeclineModal","showModal","declineButtonText","acceptButtonText","confirmationRequired","confirmationLabel","confirmed","setConfirmed","declineButtonClick","closeButton","ItemTypes","DropZoneImage","imageClass","moveImage","imageSelectedCallBack","imageSelected","forceShowCheckbox","hasFileSizeWarning","onEditClickCallback","imageDropCallback","isImagesEditable","mouseEntered","setMouseEntered","useDrop","accept","collect","monitor","handlerId","getHandlerId","hover","dragIndex","hoverIndex","drop","useDrag","isDragging","end","drag","data-handler-id","selectionState","onImageSelected","OverlayTrigger","placement","overlay","Tooltip","DropZoneVideo","DropZoneVirtualTour","mediaSelected","isMediaEditable","moveMedia","mediaSelectedCallBack","mediaDropCallback","onMediaSelected","TranslatableTextEditor","setTranslationText","enhanced","translatableText","applyWordCount","useMultiLineTextArea","currentLanguageCode","setCurrentLanguageCode","showNavButtons","setShowNavButtons","languageNavElement","setLanguageCodes","wordCount","setWordCount","taText_onChange","copy","getLanguageCodeHasValue","translation","scrollNavbar","goForward","scrollLeft","hasOverflow","offsetWidth","scrollWidth","Tab","defaultActiveKey","activeKey","Link","Content","Pane","ImageEditModal","closeCallBack","currentImageIndex","deleteCallback","saveCallback","imagesLocal","setImagesLocal","currentImageIndexLocal","setCurrentImageIndexLocal","isImageLoaded","setIsImageLoaded","showDeleteModal","setShowDeleteModal","showCloseConfirmModal","setShowCloseConfirmModal","initialJson","setInitialJson","JSON","stringify","fileSize","closeConfirmCallBack","leavePage","deleteImagesCallBack","deleteImages","indexTemp","isCompleteBefore","Promise","all","then","isCompleteAfter","updatePayload","setTranslatableTitleCallback","imageCollection","setTranslatableDescriptionCallback","isChanges","closeButtonClick","closeLabel","style","display","alt","onLoad","sm","megapixels","toFixed","formatImageResolution","fileSizeKb","originalFileName","credit","credit_onChange","DropZone","uploadCallBack","itemDropCallback","modalPopupCallback","selectCallback","invalidFilesCallback","dropMediaItems","itemLimit","invalids","acceptedFileTypes","addButtonText","isItemsEditable","mediaCount","documentType","confirmPermission","getMediaName","mediaName","showEditModal","setShowEditModal","currentItemIndex","setCurrentItemIndex","setMediaItems","invalidFiles","setInvalidFiles","hasDragOver","setHasDragOver","hasSelectedItems","setHasSelectedItems","showingMoreItems","setShowingMoreItems","showUsagePolicy","setShowUsagePolicy","usagePolicyFiles","setUsagePolicyFiles","setConfirmationLabel","itemDisplayAmount","setItemDisplayAmount","permissionConfirmationBody","originalSequenceNumbers","setOriginalSequenceNumbers","isMediaLoaded","isNewSavedSequence","assign","sequence","anyItemSetToTrue","handleFiles","files","file","mediaItemsTemp","invalidFileTemp","sequenceNumber","supportedValidFilesMessage","filePath","azureContainerName","covidNotice","visibility","publicAndTrade","newArray","concat","acceptUsagePolicyCallback","isAccepted","handleChange","filesInput","Array","from","moveItem","dragItem","$splice","itemDrop","mediaItemsCopy","onItemSelected","itemCollection","itemIndex","onEditVirtualTourClickCallback","openModalPopup","renderAddItemsButton","File","fileInputOnClick","multiple","renderVideoDropZone","renderImageDropZone","renderVirtualTourDropzone","onDragOver","stopPropagation","preventDefault","dataTransfer","kind","onDragEnter","onDragLeave","onDragEnd","onDrop","filetype","mediaItem","newIndex","newItems","newItemIndex","ProfileItemTypeEnum","ProfileItemUnitOfAreaEnum","IndeterminateCheckbox","setState","indetSetter","el","indeterminate","unchecked","ProfileImagesCard","isProfileForm","mediaPayload","uploadCallback","uploadedImages","setUploadedImages","selectedImages","setSelectedImages","displayInvalidFiles","setDisplayInvalidFiles","setShowModal","maxImages","uploadImageCallBackLocal","invalidFilesArray","selectedMediaItems","setAllImagesState","checkboxCallback","newMediaItems","WizardStep9Page","uploadMediaCallBack","uploadedMedia","FormData","mItem","append","uploadMediaFormData","deleteMediaCallBack","selectedMedia","getImages","sort","getFunction","getMediaCount","StatusEnum","ColumnHeaderEnum","WizardRoomCard","room","deleteCallBack","editCallBack","deleteRoomConfirmationOnClick","deleteRoom","landingImage","SleepingArrangementsOverlay","addNewItemCallback","profileItem","setProfileItem","profileItemTypes","profileItemUnitOfAreaTypes","facilityData","showImageModal","setShowImageModal","clickedCancel","setClickedCancel","initialProfile","setInitialProfile","originalName","setOriginalName","currentProfileItemIndex","setCurrentProfileItemIndex","setIsValid","showSectionalMessage","setShowSectionalMessage","combinedMedia","unionBy","b","onSaveClick","clonedProfileItem","hasChanges","profileItemType","Math","apply","getNewSequenceNumber","isValidForm","payloadAction","newProfileItem","uploadImageCallBack","pImage","uploadImages","localMediaItems","itemsToDeleteFromStorage","configuration","units","cancelCallBack","cancelPage","cloneProfileItem","didClose","Alert","handleRoomNameChange","custom","onChangeRoomType","onChangeRoomConfiguration","onSizeChangeNumberOnly","option","onChangeUnitOfArea","controlId","onChangeDescription","translationItemId","WizardSectionCard","navLink","navText","rooms","showProfileItemModal","setShowProfileItemModal","getDefaultProfileItem","SquareMeter","Room","selectedProfileItem","setSelectedProfileItem","DeleteProfileItemCallback","profileItemDeletePayload","editRoomCallback","WizardStep10Page","WizardStep11Page","publishProfile","isFormPageProfileItemsComplete","goBack","WizardStep12Page","setTimeout","WizardStep13Page","firstProfile","getMessageBody","ProfileWizard","useParams","setStep","ProfileEmpty","LabelPill","pillClass","displayLabel","inProgress","inReview","ContentRatingBar","MenuItems","forwardRef","aria-labelledby","labeledBy","startsWith","MenuToggle","MenuButton","menuItems","itemOnClick","Divider","ToDoButton","buttonLabel","noBorder","GridRow","profileSummary","defaultPageUrl","onDoubleClick","imageURL","contentRating","dateString","currentDate","Date","toDateString","date","days","getTime","getDate","getMonth","getFullYear","GetDate","lastModified","SortLabel","sortValue","currentSortColumn","sortDirection","setSortDirection","UrlTypeEnum","ProfileGrid","orderBy","sortedProfiles","setSortedProfiles","order","setOrder","setCurrentSortColumn","columnHeaders","statuses","active","currentStatus","setCurrentStatus","currentSearchValue","setCurrentSearchValue","currentTier","setCurrentTier","currentType","setCurrentType","sortProfilesByDirectionAndColumn","profiles","summary","sortProfilesByFilterValues","aria-label","aria-describedby","NavDropdown","Table","responsive","bordered","columnHeader","ProfileList","setShow","onClose","dismissible","Heading","Profiles","Toaster","aria-live","aria-atomic","zIndex","top","right","margin","minWidth","minHeight","Toast","delay","autohide","Sidebar","expanded","setCompletedCallback","backButtonText","setMenuItems","itemsTemp","isInitialLoad","getInitialMenuItemState","setSelectedMenuItem","menuItemClone","currentSelection","menuItem","ProfileStatusDropdownToggle","selectedValue","ProfileStatusCard","pageInformation","closed","getCurrentStatus","setSelectedValue","handleSelect","LanguagesModal","languageValues","setLanguages","remainingLanguages","handleLanguageClick","BasicInfoPage","profileAliases","setProfileAliases","aliasMessage","setAliasMessage","aliasExists","setAliasExists","shortDescriptions","setShortDescriptions","richDescriptions","setRichDescriptions","setShortTranslationText","setRichTranslationText","accepted","pName","alias","updatedAliases","DragSortableCard","moveCard","groupId","cardDropCallback","divElement","opacity","data-groupid","DragSortable","cards","setCards","cardsTemp","dragCard","cardDropCallbackLocal","card","SleepingArrangementsPage","addProfileItemClick","newSequences","accommType","typeItems","renderSection","didSave","MediaAppearancesCard","coverImageSections","section","EmbedVideosModal","closeCallback","displayClearButton","setDisplayClearButton","embedVideoUrl","setEmbedVideoUrl","invalidUrl","setInvalidUrl","multipleEmbedUploads","setMultipleEmbedUploads","displayUploadUrlInfo","setDisplayUploadUrlInfo","messageStyle","setMessageStyle","resetUrlInput","checkUrlValidation","submit","isValidURL","str","Boolean","URL","originalUrlName","videoUrl","embedMediaItem","convertToEmbedLink","hasAcceptedUsagePolicy","closeMessage","getEmbedLinkAndVideoId","originalLink","getYoutubeVideoId","getVimeoVideoId","match","CloseButton","MediaVideosCard","uploadedVideos","setUploadedVideos","selectedVideos","setSelectedVideos","showEmbedModal","setShowEmbedModal","deleteVideosCallBack","deleteVideos","setAllVideosState","uploadVideoCallBack","embedVideosCloseCallBack","embedVideosCallBack","EmbedVirtualToursModal","displayTitleClearButton","setDisplayTitleClearButton","virtualTourTitle","setVirtualTourTitle","resetTitleInput","MediaVirtualToursCard","setUploadedMedia","setSelectedMedia","embedPopupModalOpenCallBack","embedPopupModalOpen","MediaPage","setVideos","setImages","setVirtualTours","imagesComplete","setImagesComplete","videosComplete","setVideosComplete","virtualToursComplete","setVirtualToursComplete","getVideos","getVirtualTours","returnValues","wasComplete","isCompleteNow","ProfileChecklist","availableSections","sections","setSections","currentSection","setCurrentSection","yAxisOffset","element","getBoundingClientRect","pageYOffset","scrollTo","behavior","setCurrentSectionAndScroll","FastFactsPage","languagesMessage","setLanguagesMessage","otherLanguages","otherLanguagesNames","setQualityAssuranceBody","setStarRating","setAlternativeRating","setTimeFormat","setCheckinTimeFrom","setCheckinTimeTo","setCheckoutTimeFrom","setCheckoutTimeTo","setMinimumChildAge","setFeatures","showAltRating","setShowAltRating","timeFormats","roomCountCallback","inputString","altRating","newTimeFormat","htmlFor","Hours12","getTimeFormatLabel","getTimeFormatLabel2","minChildAgeChange","FacilitiesSectionCard","sectionId","FacilitiesPage","propertyCompleted","setPropertyCompleted","roomsCompleted","setRoomsCompleted","servicesCompleted","setServicesCompleted","activitiesOnSiteCompleted","setActivitiesOnSiteCompleted","activitiesNearbyCompleted","setActivitiesNearbyCompleted","MultiSelectToggle","MultiSelect","multiSelectCallback","hasSelectAll","confirmDeselectCallback","getNumDeselectMediaItemsCallback","confirmDeselectOkText","confirmDeselectCancelText","confirmDeselectTitleText","confirmDeselectBodyText","selectAll","setSelectAll","initialMenuItems","setInitialMenuItems","newlyAddedSections","setNewlyAddedSections","showConfirmDeleteModal","setShowConfirmDeleteModal","confirmDeleteBodyTextLocal","setConfirmDeleteBodyTextLocal","confirmDeleteTitleTextLocal","setConfirmDeleteTitleTextLocal","deSelectedItems","setDeSelectedItems","onDoneClick","deSelectedItemsTemp","newlyAddedItems","numDeSelectedSections","numDeselectedMediaItems","formatMessage","checkDeSelectedItems","messageText","numDeSelectedObjects","openPos","closePos","wordWithBrackets","substring","tokens","numItems","onSelectAll","onItemClick","readOnly","doDelete","dataCopy","selectFromNewItems","MultiSelectRepeater","dropDownDefaultText","multiSelectData","ContactDetailsPage","getContact","getContactField","savedContact","returnValue","isFrontDeskPhoneComplete","setIsFrontDeskPhoneComplete","isReservationsPhoneComplete","setIsReservationsPhoneComplete","showFrontDeskPhoneValidation","setShowFrontDeskPhoneValidation","showReservationsPhoneValidation","setShowReservationsPhoneValidation","setWebsite","onlineResUrl","setOnlineResUrl","socialLinks","setSocialLinks","isInvalidUrl_website","setIsInvalidUrl_website","isInvalidUrl_onlineRes","setIsInvalidUrl_onlineRes","isInvalidUrls","setIsInvalidUrls","multiSelectDataContacts","setMultiSelectDataContacts","multiSelectDataLinks","setMultiSelectDataLinks","updateEmail","initMultiSelectData","getInitMultiSelectData","isContactSection","getIsInvalidSocialUrl","socialMediaLink","validateLinkUrlAndSave","isInValid","twitter","itemsCopy","updateLinkValue","getSectionComplete","isFrontDeskPhoneValidation","isReservationsPhoneValidation","updateFrontDeskPhone","validateFrontDeskTelephone","updateReservationsPhone","validateReservationsTelephone","newValue","updateContactSkype","saveWebsite","saveOnlineResUrl","updateContactName","updateContactPhone","linksTemp","updateLinkLocal","linkType","linksCopy","removeLink","GDSCard","modifiedGDSData","setModifiedGDSData","clone","filteredData","gds","gdsClone","updateGDSCodes","removeGDSCode","IntegrationsCard","bookingAffiliate","IntegrationsPage","DocumentItem","documentsCount","updateCallback","loadedCallback","documentLocal","setDocumentLocal","showConfirmationModal","setShowConfirmationModal","hasEditedName","setHasEditName","getDocumentLabel","translationText","updateTranslatableTextLabel","getVisibilityUiString","private","tradeOnly","deleteCallbackLocal","getFileExtension","fileExtension","pop","getViewableContentType","fileExtensionLower","config","responseType","contentType","fileBytes","Blob","createObjectURL","documentOpenClick","openLink","showInvalidNameWarning","userInput","newLabel","updateDocumentNameLocal","updateDocumentNameGlobal","getPlaceholderText","enumAsString","newDocument","updateDocumentVisibility","LanguagePicker","languageCompletionDots","setLanguageCodeCallback","langCode","DocumentsPage","multiSelectDataDocuments","setMultiSelectDataDocuments","setLanguageCompletionDots","isLoading","setIsLoading","isLoadingSection","setIsLoadingSection","getDocuments","getDocumentCount","updateLanguagePickerDots","existingItems","languageDocs","existing","docs","getDocumentsEnumUiLabel","documentsEnum","factSheet","foodAndBeverage","faqs","otherGeneral","getExistingDocument","uploadCallBackLocal","docType","documentItemUpdateCallback","mediaItem1","mediaItem2","documentsCopy","deleteMediaItems","mItems","getDeselectedMediaItemForDelete","mediaItemsToDelete","getContent","sectionDocuments","getDocumentsByType","fileBrowseClick","deselectedItems","ProfileFormContainer","memo","displayName","setDisplayName","profileIdTemp","setProfileIdTemp","insights","setInsights","initialProfileJson","setInitialProfileJson","checklistSections","insight","navigateToProfile","isForward","profileStatusCallBack","savePage","getCurrentProfileSummaryIndex","menuItemCallBack","renderPage","renderStatusCard","App","DndProvider","backend","HTML5Backend","ReactDOM","render"],"mappings":"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","file":"static/js/main.e1ff2d4f.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/landingImage.208e60b7.png\";","module.exports = __webpack_public_path__ + \"static/media/wetuLogo.c5d096cb.png\";","module.exports = __webpack_public_path__ + \"static/media/icon_warning.9109d5a2.svg\";","module.exports = __webpack_public_path__ + \"static/media/landingImage.208e60b7.png\";","module.exports = __webpack_public_path__ + \"static/media/landingImage.208e60b7.png\";","module.exports = __webpack_public_path__ + \"static/media/landingImage.208e60b7.png\";","import { Dictionary } from \"@reduxjs/toolkit\"\n//#region Enums\n\nexport enum ProfileStatusEnum {\n none = \"\",\n active = \"Active\",\n disabled = \"Disabled\",\n rejected = \"Rejected\",\n inProgress = \"InProgress\",\n inReview = \"InReview\",\n closed = \"Closed\"\n}\n\nexport enum ContactTypeEnum {\n none = \"\",\n physicalAddress = \"PhysicalAddress\",\n marketing = \"Marketing\",\n sales = \"Sales\",\n frontDesk = \"FrontDesk\",\n reservation = \"Reservation\",\n accounts = \"Accounts\"\n}\n\n//Social media types\nexport enum LinkTypeEnum {\n facebook = \"Facebook\",\n twitter = \"Twitter\",\n instagram = \"Instagram\",\n pinterest = \"Pinterest\"\n}\n\nexport enum EntityTypeEnum {\n none = 'None',\n profile = 'Profile',\n profileItem = 'ProfileItem',\n media = 'Media',\n translationItem = 'TranslationItem',\n directions = 'Directions',\n}\n\nexport enum MediaTypeEnum {\n none = 'None',\n image = 'Image',\n video = 'Video',\n embedVideo = 'EmbedVideo',\n virtualTour = 'VirtualTour',\n panorama = 'Panorama',\n documentation = 'Documentation',\n splashImage = 'SplashImage',\n photosCoverImage = 'PhotosCoverImage',\n roomsCoverImage = 'RoomsCoverImage',\n videosCoverImage = 'VideosCoverImage',\n activitiesCoverImage = 'ActivitiesCoverImage',\n panoramasCoverImage = 'PanoramasCoverImage',\n destinationsCoverImage = 'DestinationsCoverImage',\n accommodationsCoverImage = 'AccommodationsCoverImage',\n amenitiesCoverImage = 'AmenitiesCoverImage',\n attractionsCoverImage = 'AttractionsCoverImage',\n documentsCoverImage = 'DocumentsCoverImage',\n facilitiesCoverImage = 'FacilitiesCoverImage',\n libraryCoverImage = 'LibraryCoverImage',\n mapCoverImage = 'MapCoverImage',\n restaurantsCoverImage = 'RestaurantsCoverImage',\n sliderImages = 'SliderImages',\n specialsCoverImage = 'SpecialsCoverImage',\n travelGuidesCoverImage = 'TravelGuidesCoverImage',\n whyStayHereCoverImage = 'WhyStayHereCoverImage'\n}\n\nexport const getMediaTypeEnumAsLabel = (type: MediaTypeEnum, isPlural: boolean) => {\n let label: string;\n switch (type) {\n case MediaTypeEnum.embedVideo:\n case MediaTypeEnum.video: {\n label = \"Video\";\n break;\n }\n case MediaTypeEnum.virtualTour: {\n label = \"Virtual tour\";\n break;\n }\n case MediaTypeEnum.documentation: {\n label = \"Document\";\n break;\n }\n default: {\n label = \"Image\";\n break;\n }\n }\n if (isPlural) {\n label += \"s\";\n }\n return label;\n}\n\nexport enum TranslationItemTypeEnum {\n none = \"None\",\n name = \"Name\",\n label = \"Label\",\n description = \"Description\",\n shortDescription = \"ShortDescription\",\n richDescription = \"RichDescription\",\n conditions = \"Conditions\",\n included = \"Included\",\n rateSeason = \"RateSeason\",\n direction = \"Direction\"\n }\n\nexport enum FeatureTypeEnum {\n none = \"None\",\n language = \"Language\",\n facility = \"Facility\"\n }\n \nexport enum TimeFormatEnum {\n Hours12 = \"12Hour\",\n Hours24 = \"24Hour\"\n}\n\nexport enum BookingAffiliateEnum {\n none = \"None\",\n nightsbridge = \"Nightsbridge\",\n resRequest = \"ResRequest\"\n}\n\nexport enum GDSEnum {\n amadeus = \"Amadeus\",\n sabre = \"Sabre\",\n travelPort = \"Travelport\",\n galileo = \"Galileo\",\n worldSpan = \"Worldspan\",\n pegasus = \"Pegasus\"\n}\n\nexport enum DocumentTypeEnum {\n none = 'None',\n covidNotice = 'CovidNotice',\n factSheet = 'FactSheet',\n rates = 'Rates',\n specials = 'Specials',\n foodAndBeverage = 'FoodAndBeverage',\n brochure = 'Brochure',\n conferencing = 'Conferencing',\n directions = 'Directions',\n faqs = 'Faqs',\n menu = 'Menu',\n activities = 'Activities',\n spa = 'Spa',\n weddings = 'Weddings',\n otherGeneral = 'OtherGeneral'\n}\n\nexport enum DocumentVisibilityEnum {\n publicAndTrade = 'PublicAndTrade',\n tradeOnly = 'TradeOnly',\n private = 'Private'\n}\n\n//#endregion Enums\n\n//#region Interfaces\nexport interface IProfile {\n id: string;\n type: string;\n entityType: EntityTypeEnum;\n category: string;\n name: string; \n streetAddress: string;\n country: string;\n postalCode: string;\n city: string;\n isEnhanced: boolean;\n searchAliases: string[];\n availableLanguages: string[];\n shortDescription: ITranslatableText;\n richDescription: ITranslatableText;\n contacts: IContact[];\n links: Dictionary;\n unitsId: string;\n pin: IPin;\n gdsCodes: Dictionary;\n isPublished: boolean; \n status: ProfileStatusEnum;\n features: IFeature[];\n config: { [key:string]: IPageProps };\n checkinTimeFrom: ITime;\n checkinTimeTo: ITime;\n checkoutTimeFrom: ITime;\n checkoutTimeTo: ITime;\n roomCount: number;\n starRating: number;\n translationItems: ITranslationItem[];\n contentRating: number;\n qualityAssuranceBody: string;\n alternativeRating: string;\n timeFormat: TimeFormatEnum;\n minimumChildAge: number;\n sectionsComplete: Dictionary;\n affiliate: BookingAffiliateEnum;\n affiliateCode: string;\n clientName: string;\n isLoaded: boolean;\n}\n\nexport interface IProfileSummary {\n id: string;\n type: string;\n entityType: EntityTypeEnum;\n category: string;\n imageURL: string;\n name: string; \n isEnhanced: boolean;\n isPublished: boolean; \n status: ProfileStatusEnum;\n contentRating: number;\n lastModified: string;\n profileId: string;\n}\n\nexport interface ITime {\n hours: number;\n minutes: number;\n}\n\nexport interface IMediaIEmbedApiPayload { \n IMediaIEmbed: IMediaIEmbed; \n enableToast : boolean;\n toastMessage: string,\n}\n\nexport interface IMediaIEmbed { \n label: string; \n entityType: EntityTypeEnum;\n mediaType : MediaTypeEnum;\n url: string; \n profileId: string; \n azureContainerName: string;\n originalFileName: string\n sequence: number;\n hasAcceptedUsagePolicy : boolean;\n}\n\nexport interface IMediaItem {\n id: string;\n label: ITranslatableText;\n description: ITranslatableText;\n entityType: EntityTypeEnum;\n mediaType: MediaTypeEnum;\n documentType: DocumentTypeEnum; // Covid-19, Menu, Rate Sheet, Fact Sheet, etc.\n url: string;\n credit: string;\n profileId: string;\n hasFileSizeWarning: boolean;\n filePath: string;\n azureContainerName: string;\n file?: File;\n isChecked: boolean;\n parentId: string;\n width: number;\n height: number;\n fileSizeKb: number;\n originalFileName: string\n sequence: number;\n isChanged: boolean; //This is only needed on the UI, and not on the API. Just a temp variable to show if sequence number has changed from what is in the DB.\n visibility: DocumentVisibilityEnum;\n}\n\nexport interface ITranslatableText {\n enText: string;\n translations: Dictionary;\n machineTranslations: Dictionary;\n}\n\nexport interface ILatLong {\n latitude: number;\n longitude: number;\n}\n\nexport interface IContact {\n type?: string;\n name?: string;\n address?: string;\n email?: string;\n telephone?: string;\n countryCode?: string;\n dialCode?: string;\n skype?: string;\n website?: string;\n onlineReservationUrl?: string;\n}\n\nexport interface IFeature {\n id: number;\n name: string;\n type: string;\n}\n\n\nexport interface IMenuItem {\n key: string;\n label: string;\n privacy: string;\n tier: string;\n}\n\nexport interface ISidebarMenuItem {\n label: string;\n isSelected: boolean;\n isCompleted: boolean;\n url: string;\n isEnhancedOnly: boolean;\n}\n\nexport interface IUpdateProfileNameAddressLocation {\n name: string,\n pin: IPin,\n address: string,\n city: string;\n country: string;\n postalCode: string;\n}\n\nexport interface IUpdateProfileCompleteAddress {\n address: string,\n city: string;\n country: string;\n postalCode: string;\n}\n\nexport interface IUpdateProfileLocation {\n latitude: number,\n longitude: number,\n}\n\nexport interface IUpdateProfilePayload { \n id: string;\n name: string;\n isEnhanced: boolean;\n entityType: EntityTypeEnum;\n isPublished: boolean;\n type: string;\n category: string;\n latitude: number;\n longitude: number;\n checkinTimeFrom: ITime;\n checkoutTimeFrom: ITime;\n checkinTimeTo: ITime;\n checkoutTimeTo: ITime;\n features: IFeature[];\n searchAliases: string[];\n translationItems: ITranslationItem[];\n shortDescription: ITranslatableText;\n richDescription: ITranslatableText;\n availableLanguages: string[];\n status: string;\n qualityAssuranceBody: string;\n starRating: number;\n alternativeRating: string;\n roomCount: number;\n timeFormat: TimeFormatEnum;\n minimumChildAge: number;\n sectionsComplete: Dictionary;\n gdsCodes: Dictionary;\n clientName: string;\n affiliateCode: string;\n affiliate: BookingAffiliateEnum;\n contacts: IContact[];\n links: Dictionary;\n}\n\nexport interface IUploadBlob {\n files: File[];\n}\n\nexport interface ICreateProfilePayload { \n name: string;\n isEnhanced: boolean;\n entityType: EntityTypeEnum;\n isPublished: boolean;\n type: string;\n category: string;\n latitude: number;\n longitude: number;\n translationItems: ITranslationItem[];\n checkinTimeFrom: ITime;\n checkoutTimeFrom: ITime;\n checkinTimeTo: ITime;\n checkoutTimeTo: ITime;\n features: IFeature[];\n starRating: number;\n roomCount: number;\n}\n\nexport const initialCreateProfile: ICreateProfilePayload = {\n name: '',\n type: '',\n category: '',\n entityType: EntityTypeEnum.profile,\n latitude: 0,\n longitude: 0,\n isEnhanced: true,\n isPublished: false,\n translationItems: [] as ITranslationItem[],\n features: [] as IFeature[],\n checkinTimeFrom: {hours: 14, minutes: 0},\n checkinTimeTo: {hours: 0, minutes: 0},\n checkoutTimeFrom: {hours: 10, minutes: 0},\n checkoutTimeTo: {hours: 0, minutes: 0},\n starRating: 0,\n roomCount: 0\n}\n\nexport interface IUploadMediaPayload {\n formData: FormData;\n mediaType: MediaTypeEnum;\n}\n\nexport interface IDeleteMediaPayload {\n showToast: boolean\n mediaItems : IMediaItem[];\n mediaType: MediaTypeEnum;\n}\n\nexport interface IUpdateMediaPayload { \n mediaItems : IMediaItem[];\n mediaType: MediaTypeEnum;\n}\n\nexport interface IValidateProfilePayload { \n id: string;\n media: IMediaItem[];\n sectionsComplete: Dictionary;\n}\n\nexport interface IUpdateProfileDescriptionPayload {\n code: string;\n value: string;\n}\n\nexport interface IUpdateProfileContact {\n type: string;\n name: string;\n email: string;\n address: string;\n telephone: string;\n skype: string;\n countryCode?: string;\n dialCode?: string;\n}\n\nexport interface IUpdateProfileLink {\n id: string;\n type: string;\n url: string;\n}\n\nexport interface IPin {\n latitude: number;\n longitude: number;\n drivingLatitude: number;\n drivingLongitude: number;\n}\n\nexport interface ICreateReviewPayload {\n profileId: string;\n}\n\nexport interface IPageProps {\n title: string;\n description: string;\n tabs: { [key:string]: IFormTab };\n}\n\nexport interface IFormTab {\n title: string;\n description: string;\n sections: { [key:string]: ISection };\n}\n\nexport interface ISection {\n title: string;\n description: string;\n selected: boolean;\n components: string[];\n}\n\n export interface ITranslationItem {\n id: string;\n profileId: string;\n parentId: string;\n parentEntityType: EntityTypeEnum;\n entityType: EntityTypeEnum;\n type: TranslationItemTypeEnum;\n text: string;\n directionText: string[];\n isMachineTranslation: boolean;\n languageCode: string;\n }\n\n export interface DropzoneImage {\n file: File;\n isChecked: boolean;\n }\n\nexport interface DeleteBlob {\n blobNames: string[];\n azureContainerName: string;\n}\n\nexport interface IGetByIdPayload {\n profileId: string;\n accountId: string;\n}\n\nexport interface IBookingAffiliate {\n affiliate: BookingAffiliateEnum,\n description: string;\n}\n\nexport interface IMultiSelectData {\n title: string;\n subtitle: string;\n key: string;\n isChecked: boolean;\n}\n//#endregion Interfaces","export enum ProfileFormPageEnum {\n none = \"\",\n basicInfo = \"BasicInfo\",\n fastFacts = \"FastFacts\",\n media = \"Media\",\n sleepingArrangements = \"SleepingArrangements\",\n facilities = \"Facilities\",\n contactDetails = \"ContactDetails\",\n location = \"Location\",\n addedServices = \"AddedServices\",\n rates = \"Rates\",\n documents = \"Documents\",\n integrations = \"Integrations\"\n}\n\nexport interface ChecklistSection {\n label: string;\n id: ProfileFormPageSectionEnum;\n page: ProfileFormPageEnum;\n isEnhancedOnly: boolean;\n isCompleted: boolean;\n}\n\nexport enum ProfileFormPageSectionEnum {\n images = \"ProfileImages\",\n videos = \"ProfileVideos\",\n virtualTours = \"ProfileVirtualTours\",\n appearances = \"ProfileAppearances\",\n facilitiesServices = \"FacilitiesServices\",\n facilitiesProperty = \"FacilitiesProperty\",\n facilitiesActivitiesOnSite = \"FacilitiesActivitiesOnSite\",\n facilitiesActivitiesNearby = \"FacilitiesActivitiesNearby\",\n facilitiesSleepingArrangements = \"FacilitiesSleepingArrangements\",\n integrations = \"Integrations\",\n gdsCodes = \"GDSCodes\",\n enquiries = \"Enquiries\",\n contacts = \"Contacts\",\n socialMedia = \"SocialMedia\",\n documents = \"Documents\"\n}\n\nexport interface Insights {\n title: string;\n titleIcon: string;\n description: string[];\n}\n\nexport enum ProfileFacilitiesSectionEnum {\n property = \"Property\",\n activitiesOnSite = \"Activities On Site\",\n activitiesNearby = \"Activities Nearby\",\n services = \"Services\",\n sleepingArrangments = \"Rooms\",\n fastFacts = \"Fast Facts\"\n}\n","import { IFeature, FeatureTypeEnum, IMenuItem, ISidebarMenuItem, BookingAffiliateEnum, IBookingAffiliate, IMultiSelectData, GDSEnum } from 'components/profile/types';\nimport { ChecklistSection, ProfileFormPageEnum, ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport { Dictionary } from \"@reduxjs/toolkit\"\n\ndeclare interface DefinedDictionary {\n [id: string]: T;\n}\n\ninterface Card {\n name: string;\n icon: string;\n description: string;\n value: string;\n}\n\nexport const typesArray: Card[] = [\n {name: \"Stays\", icon :\"\", description: \"Hotels, B&Bs, boats etc\", value: \"Accommodation\"},\n {name: \"Things to do\", icon :\"\", description: \"\", value: \"Activity\"},\n {name: \"Venue\", icon :\"\", description: \"\", value: \"Venue\"},\n {name: \"Food & Beverage\", icon :\"\", description: \"\", value: \"Restaurant\"},\n {name: \"Person\", icon :\"\", description: \"\", value: \"Person\"},\n {name: \"Transportation\", icon :\"\", description: \"\", value: \"Vehicle\"},\n {name: \"Destination\", icon :\"\", description: \"\", value: \"Destination\"},\n {name: \"Infrastructure\", icon :\"\", description: \"\", value: \"Infrastructure\"},\n {name: \"Variant\", icon :\"\", description: \"\", value: \"Variant\"},\n]\n\nexport const categoryArray: Card[] = [\n {name: \"Hotel\", icon :\"\", description: \"\", value: \"Hotel\"},\n {name: \"Guest House\", icon :\"\", description: \"\", value: \"Guest House\"},\n {name: \"Short Term Rental\", icon :\"\", description: \"\", value: \"Short Term Rental\"},\n {name: \"Villa\", icon :\"\", description: \"\", value: \"Villa\"},\n {name: \"Lodge\", icon :\"\", description: \"\", value: \"Lodge\"},\n {name: \"Motel\", icon :\"\", description: \"\", value: \"Motel\"},\n {name: \"Rail\", icon :\"\", description: \"\", value: \"Rail\"},\n {name: \"Boat\", icon :\"\", description: \"\", value: \"Boat\"},\n {name: \"Mobile Safari\", icon :\"\", description: \"\", value: \"Mobile Safari\"},\n {name: \"Camp\", icon :\"\", description: \"\", value: \"Camp\"},\n {name: \"Vehicle\", icon :\"\", description: \"\", value: \"Vehicle\"},\n]\n\n\nexport const RoomConfiguration: string[] = [\n \"Select\",\n \"Single\",\n \"Double\",\n \"Twin\",\n \"Triple\",\n \"Quad/Family\",\n \"Queen\",\n \"King\",\n \"Suite\",\n \"Studio\",\n \"Connecting\",\n \"Murphy\",\n \"Accessible\",\n]\n\nexport const languages: IFeature[] = [\n {id: 1001, name: \"English\", type: FeatureTypeEnum.language},\n {id: 1002, name: \"Chinese\", type: FeatureTypeEnum.language},\n {id: 1003, name: \"Dutch\", type: FeatureTypeEnum.language},\n {id: 1004, name: \"French\", type: FeatureTypeEnum.language},\n {id: 1005, name: \"German\", type: FeatureTypeEnum.language},\n {id: 1006, name: \"Indian\", type: FeatureTypeEnum.language},\n {id: 1007, name: \"Italian\", type: FeatureTypeEnum.language},\n {id: 1008, name: \"Japanese\", type: FeatureTypeEnum.language},\n {id: 1009, name: \"Portuguese\", type: FeatureTypeEnum.language},\n {id: 1010, name: \"Russian\", type: FeatureTypeEnum.language},\n {id: 1011, name: \"Spanish\", type: FeatureTypeEnum.language},\n {id: 1012, name: \"Afrikaans\", type: FeatureTypeEnum.language},\n {id: 1013, name: \"Flemish\", type: FeatureTypeEnum.language},\n {id: 1014, name: \"Swahili\", type: FeatureTypeEnum.language},\n {id: 1015, name: \"Xhosa\", type: FeatureTypeEnum.language},\n {id: 1016, name: \"Zulu\", type: FeatureTypeEnum.language},\n\n]\n\nexport const languageDictionary: Dictionary = {\n en: \"English\",\n zh: \"Chinese (Simplified)\",\n \"zh-TW\": \"Chinese (Traditional)\",\n cs: \"Czech\",\n da: \"Danish\",\n nl: \"Dutch\",\n fi: \"Finnish\",\n fr: \"French\",\n de: \"German\",\n it: \"Italian\",\n no: \"Norwegian\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n ru: \"Russian\",\n es: \"Spanish\",\n sv: \"Swedish\"\n}\n\nexport const ProfileSummaryDropdownMenuItems: IMenuItem[] = [\n {key: \"edit\", label: \"Edit profile\", privacy: \"N/A\", tier: \"Enhanced\" },\n {key: \"open\", label: \"Open iBrochure\", privacy: \"Public\", tier: \"Enhanced\" },\n {key: \"copy\", label: \"Copy link\", privacy: \"Public\", tier: \"Enhanced\" },\n {key: \"share\", label: \"Wetu Share\", privacy: \"Public\", tier: \"Enhanced\" },\n {key: \"embed\", label: \"Embed profile\", privacy: \"Public\", tier: \"Enhanced\" },\n {key: \"map\", label: \"Map view\", privacy: \"N/A\", tier: \"Enhanced\" },\n {key: \"disable\", label: \"Disable profile\", privacy: \"Public\", tier: \"N/A\" },\n]\n\nexport const ProfileSidebarMenuItems: ISidebarMenuItem[] = [\n {label: \"Basic Info\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.basicInfo, isEnhancedOnly: false },\n {label: \"Fast Facts\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.fastFacts, isEnhancedOnly: true },\n {label: \"Media\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.media, isEnhancedOnly: false },\n {label: \"Sleeping arrangements\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.sleepingArrangements, isEnhancedOnly: true },\n {label: \"Facilities\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.facilities, isEnhancedOnly: false },\n {label: \"Contact details\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.contactDetails, isEnhancedOnly: false },\n {label: \"Location\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.location, isEnhancedOnly: false },\n {label: \"Added services\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.addedServices, isEnhancedOnly: true },\n {label: \"Rates\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.rates, isEnhancedOnly: true },\n {label: \"Documents\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.documents, isEnhancedOnly: false },\n {label: \"Integrations\", isSelected: false, isCompleted: false, url: ProfileFormPageEnum.integrations, isEnhancedOnly: false}\n]\n\nexport const ChecklistSections: ChecklistSection[] = [\n {label: \"Images\", id: ProfileFormPageSectionEnum.images, page: ProfileFormPageEnum.media, isEnhancedOnly: false, isCompleted: false},\n {label: \"Videos\", id: ProfileFormPageSectionEnum.videos, page: ProfileFormPageEnum.media, isEnhancedOnly: true, isCompleted: false},\n {label: \"Virtual Tours\", id: ProfileFormPageSectionEnum.virtualTours, page: ProfileFormPageEnum.media, isEnhancedOnly: true, isCompleted: false},\n {label: \"Appearances\", id: ProfileFormPageSectionEnum.appearances, page: ProfileFormPageEnum.media, isEnhancedOnly: true, isCompleted: false},\n {label: \"Property\", id: ProfileFormPageSectionEnum.facilitiesProperty, page: ProfileFormPageEnum.facilities, isEnhancedOnly: false, isCompleted: false},\n {label: \"Sleeping Arrangements\", id: ProfileFormPageSectionEnum.facilitiesSleepingArrangements, page: ProfileFormPageEnum.facilities, isEnhancedOnly: false, isCompleted: false},\n {label: \"Services\", id: ProfileFormPageSectionEnum.facilitiesServices, page: ProfileFormPageEnum.facilities, isEnhancedOnly: false, isCompleted: false},\n {label: \"Activities on site\", id: ProfileFormPageSectionEnum.facilitiesActivitiesOnSite, page: ProfileFormPageEnum.facilities, isEnhancedOnly: false, isCompleted: false},\n {label: \"Activities nearby\", id: ProfileFormPageSectionEnum.facilitiesActivitiesNearby, page: ProfileFormPageEnum.facilities, isEnhancedOnly: false, isCompleted: false},\n {label: \"Enquiries\", id: ProfileFormPageSectionEnum.enquiries, page: ProfileFormPageEnum.contactDetails, isEnhancedOnly: false, isCompleted: false},\n {label: \"Contacts\", id: ProfileFormPageSectionEnum.contacts, page: ProfileFormPageEnum.contactDetails, isEnhancedOnly: false, isCompleted: false},\n {label: \"Social media\", id: ProfileFormPageSectionEnum.socialMedia, page: ProfileFormPageEnum.contactDetails, isEnhancedOnly: false, isCompleted: false},\n {label: \"Integrations\", id: ProfileFormPageSectionEnum.integrations, page: ProfileFormPageEnum.integrations, isEnhancedOnly: false, isCompleted: false},\n {label: \"GDS codes\", id: ProfileFormPageSectionEnum.gdsCodes, page: ProfileFormPageEnum.integrations, isEnhancedOnly: false, isCompleted: false},\n]\n\nexport const MediaAppearancesSections: string[] = [\n \"Why stay here\",\n \"Room types\", \n \"Unit types\", \n \"Restaurant\",\n \"Activities\",\n \"Facilities\",\n \"Map\",\n \"Documents\"\n];\n\nexport const featuresData: DefinedDictionary> = {\n \"Property\": {\n \"General\": [\n {id: 1, name: \"Activity desk\", type: FeatureTypeEnum.facility },\n {id: 2, name: \"Bar\", type: FeatureTypeEnum.facility },\n {id: 3, name: \"Barbeque facilities\", type: FeatureTypeEnum.facility},\n {id: 4, name: \"Business centre\", type: FeatureTypeEnum.facility },\n {id: 262, name: \"Casino\", type: FeatureTypeEnum.facility},\n {id: 5, name: \"Conference centre\", type: FeatureTypeEnum.facility},\n {id: 6, name: \"Chapel\", type: FeatureTypeEnum.facility },\n {id: 263, name: \"Cinema\", type: FeatureTypeEnum.facility},\n {id: 7, name: \"Communal dining\", type: FeatureTypeEnum.facility },\n {id: 8, name: \"Eco friendly\", type: FeatureTypeEnum.facility },\n {id: 264, name: \"Gym / Fitness centre\", type: FeatureTypeEnum.facility},\n {id: 9, name: \"Gym on property\", type: FeatureTypeEnum.facility },\n {id: 10, name: \"Gym nearby\", type: FeatureTypeEnum.facility },\n {id: 265, name: \"Indoor pool\", type: FeatureTypeEnum.facility},\n {id: 11, name: \"Kiddies club\", type: FeatureTypeEnum.facility},\n {id: 323, name: \"Kiddies pool / Splash pool\", type: FeatureTypeEnum.facility},\n {id: 12, name: \"Library\", type: FeatureTypeEnum.facility },\n {id: 322, name: \"Lounges\", type: FeatureTypeEnum.facility},\n {id: 13, name: \"Malaria free\", type: FeatureTypeEnum.facility },\n {id: 266, name: \"Nightclubs\", type: FeatureTypeEnum.facility },\n {id: 267, name: \"Outdoor pool / Pool deck\", type: FeatureTypeEnum.facility},\n {id: 14, name: \"Pool\", type: FeatureTypeEnum.facility },\n {id: 15, name: \"Restaurant\", type: FeatureTypeEnum.facility },\n {id: 16, name: \"Secure parking\", type: FeatureTypeEnum.facility},\n {id: 321, name: \"Shops\", type: FeatureTypeEnum.facility},\n {id: 17, name: \"Spa\", type: FeatureTypeEnum.facility},\n {id: 268, name: \"Theatres\", type: FeatureTypeEnum.facility},\n {id: 18, name: \"TV room\", type: FeatureTypeEnum.facility},\n {id: 269, name: \"Wedding Chapel\", type: FeatureTypeEnum.facility},\n {id: 270, name: \"Wellness centre\", type: FeatureTypeEnum.facility}\n ],\n \"Connectivity\": [\n {id: 19, name: \"Battery charging facilities\", type: FeatureTypeEnum.facility},\n {id: 271, name: \"Internet access\", type: FeatureTypeEnum.facility},\n {id: 20, name: \"Internet access complimentary\", type: FeatureTypeEnum.facility},\n {id: 21, name: \"Internet access paid\", type: FeatureTypeEnum.facility},\n {id: 22, name: \"Mobile connectivity\", type: FeatureTypeEnum.facility},\n {id: 23, name: \"Skype phones\", type: FeatureTypeEnum.facility},\n ]\n },\n \"Rooms\": {\n \"General\": [\n {id: 24, name: \"Air conditioning\", type: FeatureTypeEnum.facility},\n {id: 272, name: \"Balcony\", type: FeatureTypeEnum.facility},\n {id: 25, name: \"Balcony / Deck\", type: FeatureTypeEnum.facility},\n {id: 273, name: \"Camp beds\", type: FeatureTypeEnum.facility},\n {id: 26, name: \"Cooking equipment\", type: FeatureTypeEnum.facility},\n {id: 27, name: \"Cooking facilities\", type: FeatureTypeEnum.facility}, \n {id: 28, name: \"Complimentary Wi-Fi\", type: FeatureTypeEnum.facility},\n {id: 274, name: \"Cooking equipment\", type: FeatureTypeEnum.facility},\n {id: 275, name: \"Cooking facilities\", type: FeatureTypeEnum.facility},\n {id: 29, name: \"Disabled rooms\", type: FeatureTypeEnum.facility},\n {id: 276, name: \"Dome tent\", type: FeatureTypeEnum.facility},\n {id: 277, name: \"Driver's cabin\", type: FeatureTypeEnum.facility},\n {id: 30, name: \"Electrical outlets\", type: FeatureTypeEnum.facility},\n {id: 278, name: \"Family safari tent\", type: FeatureTypeEnum.facility},\n {id: 31, name: \"Fan\", type: FeatureTypeEnum.facility},\n {id: 32, name: \"Fireplace\", type: FeatureTypeEnum.facility},\n {id: 315, name: \"Foam mattress\", type: FeatureTypeEnum.facility},\n {id: 33, name: \"Fridge\", type: FeatureTypeEnum.facility},\n {id: 34, name: \"Heater\", type: FeatureTypeEnum.facility},\n {id: 35, name: \"Internet access complimentary\", type: FeatureTypeEnum.facility},\n {id: 36, name: \"Internet access paid\", type: FeatureTypeEnum.facility},\n {id: 279, name: \"LED camp lights\", type: FeatureTypeEnum.facility},\n {id: 37, name: \"Lounge\", type: FeatureTypeEnum.facility},\n {id: 280, name: \"Mini bar\", type: FeatureTypeEnum.facility},\n {id: 38, name: \"Mini bar complimentary\", type: FeatureTypeEnum.facility},\n {id: 39, name: \"Mini bar paid\", type: FeatureTypeEnum.facility},\n {id: 40, name: \"Mosquito nets\", type: FeatureTypeEnum.facility},\n {id: 281, name: \"Mosquito netting\", type: FeatureTypeEnum.facility},\n {id: 282, name: \"Oil / Paraffin lamps\", type: FeatureTypeEnum.facility},\n {id: 41, name: \"Outside shower\", type: FeatureTypeEnum.facility},\n {id: 42, name: \"Plunge pool\", type: FeatureTypeEnum.facility},\n {id: 283, name: \"Private lounge / Sitting area\", type: FeatureTypeEnum.facility},\n {id: 43, name: \"Private pool / Jacuzzi\", type: FeatureTypeEnum.facility},\n {id: 44, name: \"Pure cotton linen\", type: FeatureTypeEnum.facility},\n {id: 284, name: \"Reversing Camera\", type: FeatureTypeEnum.facility},\n {id: 285, name: \"Roof hatch\", type: FeatureTypeEnum.facility},\n {id: 45, name: \"Safe\", type: FeatureTypeEnum.facility},\n {id: 286, name: \"Sahara style tent\", type: FeatureTypeEnum.facility},\n {id: 46, name: \"Sala\", type: FeatureTypeEnum.facility},\n {id: 47, name: \"Satellite / Cable TV\", type: FeatureTypeEnum.facility},\n {id: 287, name: \"Smoke alarm\", type: FeatureTypeEnum.facility},\n {id: 48, name: \"Smoking rooms\", type: FeatureTypeEnum.facility},\n {id: 288, name: \"Solid base camp beds\", type: FeatureTypeEnum.facility},\n {id: 289, name: \"Stretcher beds\", type: FeatureTypeEnum.facility},\n {id: 290, name: \"Swivel front cabin seats\", type: FeatureTypeEnum.facility},\n {id: 291, name: \"Telephone\", type: FeatureTypeEnum.facility},\n {id: 49, name: \"Television\", type: FeatureTypeEnum.facility},\n {id: 292, name: \"Under seat storage\", type: FeatureTypeEnum.facility},\n {id: 50, name: \"Underfloor heating\", type: FeatureTypeEnum.facility},\n {id: 293, name: \"Upper dashboard refrigerated compartment\", type: FeatureTypeEnum.facility},\n {id: 51, name: \"Verandah\", type: FeatureTypeEnum.facility},\n {id: 294, name: \"Wardrobe\", type: FeatureTypeEnum.facility},\n {id: 295, name: \"Water storage tank\", type: FeatureTypeEnum.facility},\n {id: 52, name: \"Wheelchair friendly\", type: FeatureTypeEnum.facility}, \n \n ],\n \"Bath/Laundry\": [\n {id: 53, name: \"Bath\", type: FeatureTypeEnum.facility},\n {id: 296, name: \"Bath towels\", type: FeatureTypeEnum.facility},\n {id: 297, name: \"Bed linen\", type: FeatureTypeEnum.facility},\n {id: 298, name: \"Bucket shower\", type: FeatureTypeEnum.facility},\n {id: 299, name: \"Bunk bed\", type: FeatureTypeEnum.facility},\n {id: 54, name: \"Clothes press\", type: FeatureTypeEnum.facility},\n {id: 55, name: \"Detached private bathroom\", type: FeatureTypeEnum.facility},\n {id: 56, name: \"Dressing gowns\", type: FeatureTypeEnum.facility},\n {id: 57, name: \"Ensuite\", type: FeatureTypeEnum.facility},\n {id: 300, name: \"External shower\", type: FeatureTypeEnum.facility},\n {id: 58, name: \"Hairdryer\", type: FeatureTypeEnum.facility}, \n {id: 301, name: \"Hand towels\", type: FeatureTypeEnum.facility}, \n {id: 59, name: \"Heated towel rails\", type: FeatureTypeEnum.facility},\n {id: 60, name: \"Iron / Ironing board\", type: FeatureTypeEnum.facility},\n {id: 61, name: \"Laundry facilities\", type: FeatureTypeEnum.facility},\n {id: 62, name: \"Laundry service available\", type: FeatureTypeEnum.facility},\n {id: 63, name: \"Laundry service complimentary\", type: FeatureTypeEnum.facility},\n {id: 302, name: \"Mid ensuite with separate shower / toilet\", type: FeatureTypeEnum.facility},\n {id: 303, name: \"Queen bed\", type: FeatureTypeEnum.facility},\n {id: 64, name: \"Shared ablutions\", type: FeatureTypeEnum.facility},\n {id: 65, name: \"Shower\", type: FeatureTypeEnum.facility},\n {id: 304, name: \"Twin bed\", type: FeatureTypeEnum.facility},\n {id: 305, name: \"Vanity cabinet\", type: FeatureTypeEnum.facility}\n ],\n \"Kitchen\": [\n {id: 306, name: \"Drinking water filtration system\", type: FeatureTypeEnum.facility},\n {id: 307, name: \"Fridge / Freezer\", type: FeatureTypeEnum.facility},\n {id: 308, name: \"Gas cooker\", type: FeatureTypeEnum.facility},\n {id: 309, name: \"Gas cylinders\", type: FeatureTypeEnum.facility},\n {id: 310, name: \"Gas hot water system\", type: FeatureTypeEnum.facility},\n {id: 311, name: \"Kitchenette\", type: FeatureTypeEnum.facility},\n {id: 312, name: \"Microwave\", type: FeatureTypeEnum.facility},\n {id: 313, name: \"Portable BBQ\", type: FeatureTypeEnum.facility},\n {id: 314, name: \"Table\", type: FeatureTypeEnum.facility},\n ],\n \"Entertainment\": [\n {id: 316, name: \"AM / FM / iPod / iPhone / USB Stereo\", type: FeatureTypeEnum.facility},\n {id: 317, name: \"External stereo\", type: FeatureTypeEnum.facility},\n {id: 318, name: \"Internal stereo\", type: FeatureTypeEnum.facility},\n {id: 319, name: \"iPod / iPhone / USB Dock\", type: FeatureTypeEnum.facility},\n {id: 320, name: \"LCD DVD / TV\", type: FeatureTypeEnum.facility}\n ]\n },\n \"Services\": {\n \"Available Services\": [\n {id: 66, name: \"24-hour security\", type: FeatureTypeEnum.facility},\n {id: 67, name: \"Airport shuttle available\", type: FeatureTypeEnum.facility},\n {id: 68, name: \"Airport shuttle complimentary\", type: FeatureTypeEnum.facility},\n {id: 69, name: \"ATM\", type: FeatureTypeEnum.facility}, \n {id: 70, name: \"Babysitting\", type: FeatureTypeEnum.facility},\n {id: 71, name: \"Chauffeur\", type: FeatureTypeEnum.facility},\n {id: 72, name: \"Credit card\", type: FeatureTypeEnum.facility},\n {id: 73, name: \"Disability\", type: FeatureTypeEnum.facility},\n {id: 74, name: \"Foreign exchange\", type: FeatureTypeEnum.facility},\n {id: 75, name: \"Laundry service available\", type: FeatureTypeEnum.facility},\n {id: 76, name: \"Laundry service complimentary\", type: FeatureTypeEnum.facility},\n {id: 77, name: \"Meal on request\", type: FeatureTypeEnum.facility},\n {id: 78, name: \"Private vehicle available\", type: FeatureTypeEnum.facility},\n {id: 79, name: \"Room service\", type: FeatureTypeEnum.facility},\n {id: 80, name: \"Room service 24 hours\", type: FeatureTypeEnum.facility},\n {id: 81, name: \"Travel desk\", type: FeatureTypeEnum.facility}, \n ]\n },\n \"Activities On Site\": {\n \"Water Sports\": [\n {id: 82, name: \"Boating\", type: FeatureTypeEnum.facility},\n {id: 83, name: \"Canoeing\", type: FeatureTypeEnum.facility},\n {id: 84, name: \"Catch and release fishing\", type: FeatureTypeEnum.facility},\n {id: 85, name: \"Fishing\", type: FeatureTypeEnum.facility},\n {id: 86, name: \"Jet skis\", type: FeatureTypeEnum.facility},\n {id: 87, name: \"Kayaking\", type: FeatureTypeEnum.facility},\n {id: 88, name: \"Kite surfing\", type: FeatureTypeEnum.facility},\n {id: 89, name: \"Mokoro excursion\", type: FeatureTypeEnum.facility},\n {id: 90, name: \"Para sailing\", type: FeatureTypeEnum.facility},\n {id: 91, name: \"Sailing\", type: FeatureTypeEnum.facility},\n {id: 92, name: \"Scuba diving\", type: FeatureTypeEnum.facility},\n {id: 93, name: \"Snorkelling\", type: FeatureTypeEnum.facility},\n {id: 94, name: \"Surfing\", type: FeatureTypeEnum.facility},\n {id: 95, name: \"Water skiing\", type: FeatureTypeEnum.facility},\n {id: 96, name: \"Windsurfing\", type: FeatureTypeEnum.facility}, \n ],\n \"Land Sports\": [\n {id: 97, name: \"Boules\", type: FeatureTypeEnum.facility},\n {id: 98, name: \"Bowls\", type: FeatureTypeEnum.facility},\n {id: 99, name: \"Cycling\", type: FeatureTypeEnum.facility},\n {id: 100, name: \"Golf\", type: FeatureTypeEnum.facility},\n {id: 101, name: \"Horse riding\", type: FeatureTypeEnum.facility},\n {id: 102, name: \"Practice green\", type: FeatureTypeEnum.facility},\n {id: 103, name: \"Quad biking\", type: FeatureTypeEnum.facility},\n {id: 104, name: \"Squash court\", type: FeatureTypeEnum.facility},\n {id: 105, name: \"Tennis court\", type: FeatureTypeEnum.facility}, \n ],\n \"Sightseeing / Excursions\": [\n {id: 106, name: \"Beach drop off\", type: FeatureTypeEnum.facility},\n {id: 107, name: \"Garden tours\", type: FeatureTypeEnum.facility},\n {id: 108, name: \"Massages\", type: FeatureTypeEnum.facility},\n {id: 109, name: \"Helicopter scenic flights\", type: FeatureTypeEnum.facility},\n {id: 110, name: \"Natural history tours\", type: FeatureTypeEnum.facility},\n {id: 111, name: \"Whale watching\", type: FeatureTypeEnum.facility},\n {id: 112, name: \"Scenic flights\", type: FeatureTypeEnum.facility},\n \n ],\n \"Wildlife and Nature\": [\n {id: 113, name: \"Big 5\", type: FeatureTypeEnum.facility},\n {id: 114, name: \"Bord watching\", type: FeatureTypeEnum.facility},\n {id: 115, name: \"Elephant interaction\", type: FeatureTypeEnum.facility},\n {id: 116, name: \"Elephant back safaris\", type: FeatureTypeEnum.facility},\n {id: 117, name: \"Game drives\", type: FeatureTypeEnum.facility},\n {id: 118, name: \"Game viewing\", type: FeatureTypeEnum.facility},\n {id: 119, name: \"Game viewing hide\", type: FeatureTypeEnum.facility},\n {id: 120, name: \"Game walks\", type: FeatureTypeEnum.facility},\n {id: 121, name: \"Gorilla tracking\", type: FeatureTypeEnum.facility},\n {id: 122, name: \"Horse back safari\", type: FeatureTypeEnum.facility},\n {id: 123, name: \"Night drives\", type: FeatureTypeEnum.facility},\n {id: 124, name: \"Rhino tracking\", type: FeatureTypeEnum.facility},\n {id: 125, name: \"Safaris\", type: FeatureTypeEnum.facility},\n {id: 126, name: \"Sleep outs\", type: FeatureTypeEnum.facility},\n {id: 127, name: \"Turtle tracking\", type: FeatureTypeEnum.facility}, \n {id: 128, name: \"Walks guided\", type: FeatureTypeEnum.facility},\n {id: 129, name: \"Walks self guided\", type: FeatureTypeEnum.facility},\n {id: 130, name: \"Wildlife tours\", type: FeatureTypeEnum.facility}, \n ],\n \"Food and Beverage\": [\n {id: 131, name: \"Cooking courses\", type: FeatureTypeEnum.facility},\n {id: 132, name: \"Fine dining\", type: FeatureTypeEnum.facility}, \n {id: 133, name: \"Gourmet picnic\", type: FeatureTypeEnum.facility},\n {id: 134, name: \"High tea\", type: FeatureTypeEnum.facility},\n ]\n },\n \"Activities Nearby\": {\n \"General\": [ \n {id: 135, name: \"Adrenaline activites\", type: FeatureTypeEnum.facility},\n {id: 136, name: \"Child friendly activities\", type: FeatureTypeEnum.facility},\n ],\n \"Water Sports\": [\n {id: 137, name: \"Beach\", type: FeatureTypeEnum.facility},\n {id: 138, name: \"Boating\", type: FeatureTypeEnum.facility},\n {id: 139, name: \"Canoeing\", type: FeatureTypeEnum.facility},\n {id: 140, name: \"Catch and release fishing\", type: FeatureTypeEnum.facility},\n {id: 141, name: \"Deep sea fishing\", type: FeatureTypeEnum.facility},\n {id: 142, name: \"Fishing\", type: FeatureTypeEnum.facility},\n {id: 143, name: \"Fly fishing\", type: FeatureTypeEnum.facility},\n {id: 144, name: \"Jet skis\", type: FeatureTypeEnum.facility},\n {id: 145, name: \"Kayaking / Padling\", type: FeatureTypeEnum.facility},\n {id: 146, name: \"Kite surfing\", type: FeatureTypeEnum.facility},\n {id: 147, name: \"Marine adventures\", type: FeatureTypeEnum.facility},\n {id: 148, name: \"Marine tidal pool\", type: FeatureTypeEnum.facility},\n {id: 149, name: \"Para sailing\", type: FeatureTypeEnum.facility},\n {id: 150, name: \"Sailing\", type: FeatureTypeEnum.facility},\n {id: 151, name: \"Scuba diving\", type: FeatureTypeEnum.facility},\n {id: 152, name: \"Sea kayaking\", type: FeatureTypeEnum.facility},\n {id: 153, name: \"Snorkelling\", type: FeatureTypeEnum.facility},\n {id: 154, name: \"Surfing\", type: FeatureTypeEnum.facility},\n {id: 155, name: \"Water skiing\", type: FeatureTypeEnum.facility},\n {id: 156, name: \"Windsurfing\", type: FeatureTypeEnum.facility},\n ],\n \"Land Sports\": [\n {id: 157, name: \"Boules\", type: FeatureTypeEnum.facility},\n {id: 158, name: \"Bowls\", type: FeatureTypeEnum.facility},\n {id: 159, name: \"Cycling\", type: FeatureTypeEnum.facility},\n {id: 160, name: \"Golf\", type: FeatureTypeEnum.facility},\n {id: 161, name: \"Health and fitness centre\", type: FeatureTypeEnum.facility},\n {id: 162, name: \"Hiking\", type: FeatureTypeEnum.facility},\n {id: 163, name: \"Horse riding\", type: FeatureTypeEnum.facility},\n {id: 164, name: \"Mini golf\", type: FeatureTypeEnum.facility},\n {id: 165, name: \"Mountain biking\", type: FeatureTypeEnum.facility}, \n {id: 166, name: \"Practice green\", type: FeatureTypeEnum.facility},\n {id: 167, name: \"Quad biking\", type: FeatureTypeEnum.facility},\n {id: 168, name: \"Rock climbing\", type: FeatureTypeEnum.facility},\n {id: 169, name: \"Squash court\", type: FeatureTypeEnum.facility},\n {id: 170, name: \"Tennis court\", type: FeatureTypeEnum.facility}, \n ],\n \"Unique Experiences\": [\n {id: 171, name: \"Helicopter rides\", type: FeatureTypeEnum.facility},\n {id: 172, name: \"Helicopter scenic flights\", type: FeatureTypeEnum.facility},\n {id: 173, name: \"Hot air ballooning\", type: FeatureTypeEnum.facility},\n {id: 174, name: \"Paragliding\", type: FeatureTypeEnum.facility},\n {id: 175, name: \"Sky diving\", type: FeatureTypeEnum.facility},\n {id: 176, name: \"Scenic flights\", type: FeatureTypeEnum.facility},\n ],\n \"Sightseeing / Excursions\": [\n {id: 177, name: \"Amusement park\", type: FeatureTypeEnum.facility},\n {id: 178, name: \"Art galleries\", type: FeatureTypeEnum.facility},\n {id: 179, name: \"Battlefield tours\", type: FeatureTypeEnum.facility},\n {id: 180, name: \"Boat cruises\", type: FeatureTypeEnum.facility},\n {id: 181, name: \"Cultural tours\", type: FeatureTypeEnum.facility},\n {id: 182, name: \"Garden tours\", type: FeatureTypeEnum.facility},\n {id: 183, name: \"General sightseeing\", type: FeatureTypeEnum.facility},\n {id: 184, name: \"Historical tours\", type: FeatureTypeEnum.facility},\n {id: 185, name: \"Museums\", type: FeatureTypeEnum.facility},\n {id: 186, name: \"Mokoro excursion\", type: FeatureTypeEnum.facility},\n {id: 187, name: \"Natural history tours\", type: FeatureTypeEnum.facility},\n {id: 188, name: \"River cruises\", type: FeatureTypeEnum.facility},\n {id: 189, name: \"Shark cage diving\", type: FeatureTypeEnum.facility},\n {id: 190, name: \"Treetop canopy tours\", type: FeatureTypeEnum.facility}, \n ],\n \"Wildlife and Nature\": [\n {id: 191, name: \"Animal encounters\", type: FeatureTypeEnum.facility},\n {id: 192, name: \"Big 5\", type: FeatureTypeEnum.facility},\n {id: 193, name: \"Bird watching\", type: FeatureTypeEnum.facility},\n {id: 194, name: \"Elephant interaction\", type: FeatureTypeEnum.facility},\n {id: 195, name: \"Elephant back safaris\", type: FeatureTypeEnum.facility},\n {id: 196, name: \"Game drives\", type: FeatureTypeEnum.facility},\n {id: 197, name: \"Game viewing\", type: FeatureTypeEnum.facility},\n {id: 198, name: \"Game walks\", type: FeatureTypeEnum.facility},\n {id: 199, name: \"Gorilla tracking\", type: FeatureTypeEnum.facility}, \n {id: 200, name: \"Horse back safari\", type: FeatureTypeEnum.facility},\n {id: 201, name: \"Night drives\", type: FeatureTypeEnum.facility},\n {id: 202, name: \"Rhino tracking\", type: FeatureTypeEnum.facility},\n {id: 203, name: \"Safaris\", type: FeatureTypeEnum.facility},\n {id: 204, name: \"Turtle tracking\", type: FeatureTypeEnum.facility},\n {id: 205, name: \"Walks guided\", type: FeatureTypeEnum.facility},\n {id: 206, name: \"Walks self guided\", type: FeatureTypeEnum.facility},\n {id: 207, name: \"Wildlife tours\", type: FeatureTypeEnum.facility}, \n ],\n \"Food and Beverage\": [\n {id: 208, name: \"Cooking courses\", type: FeatureTypeEnum.facility},\n {id: 209, name: \"Wine tasting\", type: FeatureTypeEnum.facility}, \n ]\n },\n \"Fast Facts\": {\n \"Friendly\": [ \n {id: 210, name: \"Business\", type: FeatureTypeEnum.facility},\n {id: 211, name: \"Children\", type: FeatureTypeEnum.facility},\n {id: 212, name: \"Disability\", type: FeatureTypeEnum.facility},\n {id: 213, name: \"Honeymoon\", type: FeatureTypeEnum.facility},\n {id: 214, name: \"Leisure\", type: FeatureTypeEnum.facility},\n {id: 215, name: \"Luxury\", type: FeatureTypeEnum.facility},\n {id: 216, name: \"Pet\", type: FeatureTypeEnum.facility},\n {id: 217, name: \"Romance\", type: FeatureTypeEnum.facility},\n {id: 218, name: \"Vegetarian\", type: FeatureTypeEnum.facility},\n {id: 219, name: \"Weddings\", type: FeatureTypeEnum.facility}\n ],\n \"Special Interest\": [ \n {id: 221, name: \"Adventure\", type: FeatureTypeEnum.facility},\n {id: 222, name: \"Battlefields\", type: FeatureTypeEnum.facility},\n {id: 223, name: \"Beach / Coastal\", type: FeatureTypeEnum.facility},\n {id: 224, name: \"Big 5\", type: FeatureTypeEnum.facility},\n {id: 225, name: \"Birding\", type: FeatureTypeEnum.facility},\n {id: 226, name: \"Cycling\", type: FeatureTypeEnum.facility},\n {id: 227, name: \"Fishing\", type: FeatureTypeEnum.facility},\n {id: 228, name: \"Flora\", type: FeatureTypeEnum.facility},\n {id: 229, name: \"Golf\", type: FeatureTypeEnum.facility},\n {id: 230, name: \"Gourmet\", type: FeatureTypeEnum.facility},\n {id: 231, name: \"Hiking\", type: FeatureTypeEnum.facility},\n {id: 232, name: \"History & Culture\", type: FeatureTypeEnum.facility},\n {id: 233, name: \"Indigenous Culture / Art\", type: FeatureTypeEnum.facility},\n {id: 234, name: \"Leisure\", type: FeatureTypeEnum.facility},\n {id: 235, name: \"Nature\", type: FeatureTypeEnum.facility},\n {id: 236, name: \"Relaxation\", type: FeatureTypeEnum.facility},\n {id: 237, name: \"Shopping\", type: FeatureTypeEnum.facility},\n {id: 238, name: \"Sports\", type: FeatureTypeEnum.facility},\n {id: 239, name: \"Star Gazing\", type: FeatureTypeEnum.facility},\n {id: 240, name: \"Watersports\", type: FeatureTypeEnum.facility},\n {id: 241, name: \"Wildlife\", type: FeatureTypeEnum.facility},\n {id: 242, name: \"Wine\", type: FeatureTypeEnum.facility}\n ],\n \"Tour Operator / Travel Agent Guidance\": [ \n {id: 243, name: \"BAR Pricing\", type: FeatureTypeEnum.facility},\n {id: 244, name: \"Cash Payment Only\", type: FeatureTypeEnum.facility},\n {id: 245, name: \"Disabled Access\", type: FeatureTypeEnum.facility},\n {id: 246, name: \"Elderly Friendly\", type: FeatureTypeEnum.facility},\n {id: 247, name: \"Game Drive (Max 10 pax)\", type: FeatureTypeEnum.facility},\n {id: 248, name: \"Game Drive (Max 12 pax)\", type: FeatureTypeEnum.facility},\n {id: 249, name: \"Game Drive (Max 4 pax with window seats)\", type: FeatureTypeEnum.facility},\n {id: 250, name: \"Game Drive (Max 6 pax with window seats)\", type: FeatureTypeEnum.facility},\n {id: 251, name: \"Game Drive (Max 9 pax)\", type: FeatureTypeEnum.facility},\n {id: 252, name: \"Honeymoon Suite Available\", type: FeatureTypeEnum.facility},\n {id: 253, name: \"Interleading Rooms Available\", type: FeatureTypeEnum.facility},\n {id: 254, name: \"Limited Electricity\", type: FeatureTypeEnum.facility},\n {id: 255, name: \"No Electricity\", type: FeatureTypeEnum.facility},\n {id: 256, name: \"Private Game Drive Vehicle Available\", type: FeatureTypeEnum.facility},\n {id: 257, name: \"Private Restaurant Dining\", type: FeatureTypeEnum.facility},\n {id: 258, name: \"Seasonal Activities\", type: FeatureTypeEnum.facility},\n {id: 259, name: \"Sole Use Available\", type: FeatureTypeEnum.facility},\n {id: 260, name: \"Triple for Adult Available\", type: FeatureTypeEnum.facility},\n {id: 261, name: \"Triple for Children Available\", type: FeatureTypeEnum.facility}\n ]\n }\n}\n\nexport const minimumImages = 6;\nexport const maximumImages = 30;\nexport const minimumVideos = 1;\n\nexport const affiliates: IBookingAffiliate[] = [\n {affiliate: BookingAffiliateEnum.none, description: \"\"}, \n {affiliate: BookingAffiliateEnum.nightsbridge, description: \"When you provide your NightsBridge ID, your room information will be automatically linked and populated from your Nightsbridge records.\"}, \n {affiliate: BookingAffiliateEnum.resRequest, description: \"\"}, \n];\n\nexport const gdsData: IMultiSelectData[] = [\n {title: GDSEnum.amadeus, key: GDSEnum.amadeus, isChecked: false, subtitle: \"\"},\n {title: GDSEnum.galileo, key: GDSEnum.galileo, isChecked: false, subtitle: \"\"},\n {title: GDSEnum.pegasus, key: GDSEnum.pegasus, isChecked: false, subtitle: \"\"},\n {title: GDSEnum.sabre, key: GDSEnum.sabre, isChecked: false, subtitle: \"\"},\n {title: GDSEnum.travelPort, key: GDSEnum.travelPort, isChecked: false, subtitle: \"\"},\n {title: GDSEnum.worldSpan, key: GDSEnum.worldSpan, isChecked: false, subtitle: \"\"}\n];\n\nexport const getApiBaseUrl = () => {\n if (window?.location?.hostname === 'localhost') {\n var envFileBaseUrl = process.env?.REACT_APP_API_BASE_URL;\n if (envFileBaseUrl) {\n if (envFileBaseUrl.slice(-1) !== '/') {\n envFileBaseUrl += '/';\n }\n }\n return envFileBaseUrl ? envFileBaseUrl : 'https://localhost:44386/api/v1/';\n } \n else {\n return 'https://profile-management-api.dev.wetu.com/api/v1/';\n }\n}","import axios from 'axios';\nimport { IProfile, IUpdateProfilePayload, ICreateProfilePayload, IProfileSummary, IValidateProfilePayload } from 'components/profile/types';\nimport { getApiBaseUrl } from '../app/config';\n\nconst baseProfileUrl = getApiBaseUrl() + 'profile/';\n\nexport async function getProfileById(profileId: string, accountId: string) {\n return axios.get(baseProfileUrl + `GetById?profileId=${profileId}&accountId=${accountId}`, { \n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n }).catch(function (error) {\n if (error.response) {\n console.error('getProfileById error.response.data: ', error.response.data);\n console.error('getProfileById error.response.status: ', error.response.status);\n }\n });\n}\n\nexport async function updateProfile(payload: IUpdateProfilePayload) {\n return axios.post(baseProfileUrl + \"Update\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n });\n}\n\nexport async function createProfile(payload: ICreateProfilePayload) {\n return axios.post(baseProfileUrl + \"Create\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n });\n}\n\nexport async function validateProfile(payload: IValidateProfilePayload) {\n return axios.post(baseProfileUrl + \"Validate\", payload, { \n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n });\n}\n\nexport async function getProfileSummaries(id: string) {\n return axios.get(baseProfileUrl + `GetProfileSummaries?accountId=${id}`, { \n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n });\n}","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { Toast } from \"./types\";\n\nconst initialState = {\n show: false,\n title: \"\",\n message: \"\"\n};\n\nconst toastSlice = createSlice({\n name: 'toast',\n initialState,\n reducers: {\n showGlobalToast(state, action: PayloadAction) {\n state.show = true;\n state.message = action.payload.message;\n state.title = action.payload.title;\n },\n hideGlobalToast(state) {\n state.show = false;\n state.message = \"\";\n }\n }\n});\n\nexport const {\n showGlobalToast,\n hideGlobalToast\n} = toastSlice.actions;\n\nexport default toastSlice.reducer;","export const logError = (err: any) => {\n console.error(err); //eg. \"Error: Request failed with status code 500.\"\n if (err?.response?.data) {\n console.error(err.response.data); //ex.Message and StackTrace from API.\n }\n}\n\n//TypeScript overload based on https://stackoverflow.com/questions/61364475/how-to-define-overloaded-signatures-for-a-const-in-typescript\nexport type Pluralise = {\n (word: string, count: number, suffix?: string): string;\n (word: string, isPlural: boolean, suffix?: string): string;\n}\n\nexport const pluralise: Pluralise = (word: string, checker: number | boolean, pluralSuffix?: string): string => {\n pluralSuffix = pluralSuffix ? pluralSuffix : 's'; //If plural suffix not supplied assume 's'.\n if (typeof checker === 'number') {\n return checker !== 1 ? addPlural(word, pluralSuffix) : word;\n }\n else if (typeof checker === 'boolean') {\n return checker ? addPlural(word, pluralSuffix) : word;\n }\n return 'unknown';\n}\n\nconst addPlural = (word: string, pluralSuffix: string) => {\n if (pluralSuffix === 'ies' || pluralSuffix === 'ves') { //https://www.teachstarter.com/au/teaching-resource/rules-for-plurals-s-es-ies-ves/\n word = word.slice(0, -1); //category => categor. But most words are just 's', eg. document => documents\n }\n return word + pluralSuffix;\n}\n\nexport const replaceAll = (text: string, findString: string, replaceString: string): string => {\n const array = text.split(findString);\n return array.join(replaceString);\n}","\nimport { createAsyncThunk, createSlice, Dictionary, PayloadAction, current } from \"@reduxjs/toolkit\";\nimport { createProfile, getProfileById, getProfileSummaries, updateProfile, validateProfile } from \"api/profile.service\";\nimport { showGlobalToast } from \"components/toast/toast.slice\";\nimport { IProfile, IUpdateProfileNameAddressLocation, IFeature, IUpdateProfileContact, IContact,\n ContactTypeEnum, IUpdateProfileLocation, ICreateProfilePayload, ITranslatableText, ITranslationItem, EntityTypeEnum, IUpdateProfilePayload,\n IProfileSummary, IValidateProfilePayload, IGetByIdPayload, TimeFormatEnum, BookingAffiliateEnum } from \"./types\";\nimport { ProfileFacilitiesSectionEnum, ProfileFormPageEnum } from 'pages/profile-form/profile.form.types';\nimport { featuresData } from 'app/config';\nimport { FeatureTypeEnum } from 'components/profile/types';\nimport _ from 'lodash';\nimport store from \"app/store\";\nimport { logError } from 'utils/General';\n\nexport const initialState = {\n profile: {\n id: \"\",\n pin: {latitude: 0, longitude: 0, drivingLatitude: 0, drivingLongitude: 0},\n contacts: [] as IContact[],\n entityType: EntityTypeEnum.profile,\n isEnhanced: true,\n isPublished: false,\n shortDescription: {enText: '', translations: {} } as ITranslatableText,\n richDescription: {enText: '', translations: {} } as ITranslatableText,\n translationItems: [] as ITranslationItem[],\n features: [] as IFeature[],\n checkinTimeFrom: {hours: 14, minutes: 0},\n checkinTimeTo: {hours: 0, minutes: 0},\n checkoutTimeFrom: {hours: 10, minutes: 0},\n checkoutTimeTo: {hours: 0, minutes: 0},\n searchAliases: [] as string[],\n availableLanguages: [] as string[],\n qualityAssuranceBody: \"\",\n starRating: 0,\n alternativeRating: '',\n roomCount: 0,\n timeFormat: TimeFormatEnum.Hours24,\n minimumChildAge: 0,\n affiliate: BookingAffiliateEnum.none,\n affiliateCode: \"\",\n clientName: \"\",\n gdsCodes: {} as Dictionary,\n links: {} as Dictionary,\n isLoaded: false\n } as IProfile,\n \n profileSummaries: [] as IProfileSummary[],\n isValidated: false,\n loading: true,\n saving: false,\n submitting: false\n};\n\nexport const getDefaultContact = (contactType: ContactTypeEnum) => {\n let contact: IContact = {\n type: contactType,\n skype: '',\n address: '',\n countryCode: '',\n dialCode: '',\n email: '',\n name: '',\n telephone: '',\n website: '',\n onlineReservationUrl: ''\n };\n return contact;\n}\n\nexport const isFeaturesSelected = (profile: IProfile, sectionName: string) => {\n if (profile.features) {\n const data = featuresData[sectionName];\n for (const subSectionName in data) {\n const featureArray: IFeature[] = data[subSectionName];\n for (let i = 0; i < featureArray.length; i++) {\n if (profile.features.find(x => x.id === featureArray[i].id)) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\nexport const isEnquiriesComplete = (profile: IProfile) : boolean => {\n const frontDesk: IContact = profile.contacts.find(x => x.type === ContactTypeEnum.frontDesk) as IContact;\n const reservation: IContact = profile.contacts.find(x => x.type === ContactTypeEnum.reservation) as IContact;\n return !!((frontDesk && frontDesk.telephone) || (reservation && reservation.telephone));\n}\n\nexport const isContactsComplete = (profile: IProfile) : boolean => {\n const contacts = profile.contacts.filter(x => x.type === ContactTypeEnum.marketing || x.type === ContactTypeEnum.sales || \n x.type === ContactTypeEnum.accounts);\n for (let i = 0; i < contacts?.length; i++) {\n if (isContactComplete(contacts[i])) {\n return true;\n }\n }\n return false;\n}\n\nexport const isSocialMediaComplete = (profile: IProfile) : boolean => {\n const items = Object.values(profile.links);\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i]) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport const isContactComplete = (contact: IContact) : boolean => {\n return !!(contact.address || contact.email || contact.name || contact.onlineReservationUrl || contact.skype || contact.telephone\n || contact.website);\n}\n\nexport const getSectionsComplete = (profile: IProfile, pageId: string): Dictionary => {\n let sectionsCompleteCopy: Dictionary = {};\n if (profile.sectionsComplete) {\n sectionsCompleteCopy = _.cloneDeep(profile.sectionsComplete);\n }\n sectionsCompleteCopy[pageId] = isFormPageProfileComplete(profile, pageId);\n return sectionsCompleteCopy;\n}\n\nexport const isFormPageProfileComplete = (profile: IProfile, pageId: string): boolean => {\n const isLanguagesSelected = () => {\n return profile.features?.findIndex(x => x.type === FeatureTypeEnum.language) >= 0;\n }\n\n const isGDSCodesCompleted = (profile: IProfile) => {\n return profile.gdsCodes && Object.keys(profile.gdsCodes).length > 0 && Object.keys(profile.gdsCodes).filter(x => profile.gdsCodes[x]).length > 0;\n }\n\n switch (pageId) {\n case ProfileFormPageEnum.basicInfo: {\n return !!(profile.name && profile.name.length > 0 && profile.shortDescription?.enText?.trim().length > 0);\n }\n case ProfileFormPageEnum.fastFacts: {\n return profile.qualityAssuranceBody?.length > 0 ||\n (profile.starRating && profile.starRating > 0) ||\n (profile.alternativeRating?.length > 0) ||\n (profile.roomCount && profile.roomCount > 0) ||\n (profile.timeFormat && profile.timeFormat !== initialState.profile.timeFormat) ||\n (profile.checkinTimeFrom && profile.checkinTimeFrom.hours !== initialState.profile.checkinTimeFrom?.hours) ||\n (profile.checkinTimeFrom && profile.checkinTimeFrom.minutes !== initialState.profile.checkinTimeFrom?.minutes) ||\n (profile.checkinTimeTo && profile.checkinTimeTo.hours !== initialState.profile.checkinTimeTo?.hours) ||\n (profile.checkinTimeTo && profile.checkinTimeTo.minutes !== initialState.profile.checkinTimeTo?.minutes) ||\n (profile.checkoutTimeFrom && profile.checkoutTimeFrom.hours !== initialState.profile.checkoutTimeFrom?.hours) ||\n (profile.checkoutTimeFrom && profile.checkoutTimeFrom.minutes !== initialState.profile.checkoutTimeFrom?.minutes) ||\n (profile.checkoutTimeTo && profile.checkoutTimeTo.hours !== initialState.profile.checkoutTimeTo?.hours) ||\n (profile.checkoutTimeTo && profile.checkoutTimeTo.minutes !== initialState.profile.checkoutTimeTo?.minutes) ||\n (profile.minimumChildAge && profile.minimumChildAge > 0) ||\n isLanguagesSelected() ||\n isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.fastFacts);\n } \n case ProfileFormPageEnum.facilities: {\n return isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.property) && \n isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.sleepingArrangments) && \n isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.services) && \n isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.activitiesOnSite) && \n isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.activitiesNearby);\n }\n case ProfileFormPageEnum.integrations: {\n if (profile.affiliate === BookingAffiliateEnum.none) {\n return false;\n }\n\n if (profile.affiliate === BookingAffiliateEnum.nightsbridge && profile.affiliateCode?.length > 0 && isGDSCodesCompleted(profile)) {\n return true;\n }\n\n if (profile.affiliate === BookingAffiliateEnum.resRequest && profile.affiliateCode?.length > 0 && profile.clientName?.length > 0 && isGDSCodesCompleted(profile)) {\n return true;\n }\n\n return false;\n }\n case ProfileFormPageEnum.contactDetails: {\n return isEnquiriesComplete(profile) && isContactsComplete(profile) && isSocialMediaComplete(profile);\n }\n default: {\n return false;\n }\n }\n}\n\nexport const getById = createAsyncThunk('profile/getById', async (payload: IGetByIdPayload, { rejectWithValue }) => {\n try {\n const response = await getProfileById(payload.profileId, payload.accountId);\n //This is needed because a zero-length array is removed from the object which gives \"features is not iterable\" error. You can test by initializing it after the mapper on the API side.\n if (response && response.data) {\n if (!response.data.features) {\n response.data.features = [];\n }\n if (!response.data.contacts) {\n response.data.contacts = [];\n //Again, this is needed to avoid the React error (changing an input from uncontrolled to controlled or vice versa).\n response.data.contacts.push(getDefaultContact(ContactTypeEnum.frontDesk));\n response.data.contacts.push(getDefaultContact(ContactTypeEnum.reservation));\n response.data.contacts.push(getDefaultContact(ContactTypeEnum.marketing));\n response.data.contacts.push(getDefaultContact(ContactTypeEnum.sales));\n response.data.contacts.push(getDefaultContact(ContactTypeEnum.physicalAddress));\n }\n if (!response.data.links) {\n response.data.links = {};\n response.data.links['Facebook'] = '';\n response.data.links['Twitter'] = '';\n response.data.links['Instagram'] = '';\n response.data.links['Pinterest'] = '';\n }\n return response.data;\n }\n return null;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\nexport const updateProfileFromStore = createAsyncThunk('profile/updateProfileFromStore', async (unusedPayload: string | void, { dispatch, rejectWithValue }) => {\n try\n {\n let profile = store.getState().profileSlice.profile;\n const response = await updateProfile({\n id: profile.id,\n category: profile.category,\n isEnhanced: profile.isEnhanced,\n latitude: profile.pin.latitude,\n longitude: profile.pin.longitude,\n name: profile.name,\n type: profile.type,\n entityType: EntityTypeEnum.profile,\n checkinTimeFrom: profile.checkinTimeFrom,\n checkoutTimeFrom: profile.checkoutTimeFrom,\n checkinTimeTo: profile.checkinTimeTo,\n checkoutTimeTo: profile.checkoutTimeTo,\n isPublished: profile.isPublished,\n translationItems: profile.translationItems,\n features: profile.features,\n searchAliases: profile.searchAliases,\n shortDescription: profile.shortDescription,\n richDescription: profile.richDescription,\n availableLanguages: profile.availableLanguages,\n status: profile.status,\n qualityAssuranceBody: profile.qualityAssuranceBody,\n starRating: profile.starRating,\n alternativeRating: profile.alternativeRating,\n roomCount: profile.roomCount,\n timeFormat: profile.timeFormat,\n minimumChildAge: profile.minimumChildAge,\n clientName: profile.clientName,\n affiliate: profile.affiliate,\n affiliateCode: profile.affiliateCode,\n gdsCodes: profile.gdsCodes,\n sectionsComplete: profile.sectionsComplete,\n contacts: profile.contacts,\n links: profile.links\n });\n return response.data;\n }\n catch(err) {\n logError(err);\n dispatch(showGlobalToast({title: \"Error\", message: \"Your changes were not saved.\"}));\n return rejectWithValue(false);\n }\n})\n\nexport const update = createAsyncThunk('profile/update', async (payload: IUpdateProfilePayload, { dispatch, rejectWithValue }) => {\n try {\n const response = await updateProfile(payload);\n dispatch(showGlobalToast({title: \"Success\", message: \"Profile saved\"}));\n return response.data;\n }\n catch(err) {\n logError(err);\n dispatch(showGlobalToast({title: \"Error\", message: \"Your changes were not saved.\"}));\n return rejectWithValue(false);\n }\n})\n\nexport const create = createAsyncThunk('profile/create', async (payload: ICreateProfilePayload, { dispatch, rejectWithValue }) => {\n try {\n const response = await createProfile(payload);\n dispatch(showGlobalToast({title: \"Success\", message: \"Profile saved\"}));\n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\nexport const validate = createAsyncThunk('profile/validate', async (payload: IValidateProfilePayload, { rejectWithValue }) => {\n try {\n const response = await validateProfile(payload);\n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\nexport const getSummaries = createAsyncThunk('profile/getProfileSummaries', async (id: string, { rejectWithValue }) => {\n try {\n const response = await getProfileSummaries(id);\n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\nconst profileSlice = createSlice({\n name: 'profileSlice',\n initialState,\n reducers: {\n ResetProfile(state) {\n state.profile = initialState.profile;\n },\n UpdateSectionComplete(state, action) {\n state.profile.sectionsComplete = getSectionsComplete(state.profile, action.payload);\n },\n UpdateSectionCompleteWithValue(state, action) {\n let sectionsCompleteCopy: Dictionary = {};\n if (state.profile.sectionsComplete) {\n //'current' is needed to fix 'Proxy' state: https://stackoverflow.com/questions/64586207/redux-toolkit-state-showing-as-proxy-undefined-within-reducer\n sectionsCompleteCopy = _.cloneDeep(current(state.profile.sectionsComplete));\n }\n sectionsCompleteCopy[action.payload.pageId] = action.payload.value;\n state.profile.sectionsComplete = sectionsCompleteCopy;\n },\n UpdateSectionsComplete(state, action) {\n state.profile.sectionsComplete = action.payload;\n },\n UpdateProfileLanguages(state, action: PayloadAction) {\n state.profile.availableLanguages = action.payload;\n },\n UpdateProfileName(state, action) {\n state.profile.name = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.basicInfo, type: ''} );\n },\n UpdateProfileType(state, action) {\n state.profile.type = action.payload;\n }, \n UpdateProfileCategory(state, action) {\n state.profile.category = action.payload;\n }, \n UpdateProfileStreetAddress(state, action) {\n state.profile.streetAddress = action.payload;\n }, \n UpdateProfilePostalCode(state, action) {\n state.profile.postalCode = action.payload;\n },\n UpdateProfileCountry(state, action) {\n state.profile.country = action.payload.value;\n if (action.payload.resetPin) {\n profileSlice.caseReducers.ResetProfilePin(state);\n }\n },\n UpdateProfileCity(state, action) {\n state.profile.city = action.payload.value;\n if (action.payload.resetPin) {\n profileSlice.caseReducers.ResetProfilePin(state);\n }\n },\n UpdateProfilePin(state, action) {\n state.profile.pin = action.payload;\n },\n UpdateProfileCheckinTimeFrom(state, action) {\n state.profile.checkinTimeFrom = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateProfileCheckinTimeTo(state, action) {\n state.profile.checkinTimeTo = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateProfileCheckoutTimeFrom(state, action) {\n state.profile.checkoutTimeFrom = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateProfileCheckoutTimeTo(state, action) {\n state.profile.checkoutTimeTo = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateProfileRoomCount(state, action) {\n state.profile.roomCount = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateProfileStarRating(state, action) {\n state.profile.starRating = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateProfileFeatures(state, action) {\n state.profile.features = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.facilities, type: ''} );\n },\n ResetProfilePin(state) {\n state.profile.pin = {latitude: 0, longitude: 0, drivingLatitude: 0, drivingLongitude: 0};\n },\n UpdateProfileNameAddressLocation(state, action) {\n const payload = action.payload as IUpdateProfileNameAddressLocation; \n\n state.profile.pin = payload.pin;\n state.profile.name = payload.name;\n state.profile.streetAddress = payload.address;\n state.profile.postalCode = payload.postalCode;\n state.profile.country = payload.country;\n state.profile.city = payload.city;\n \n let addressContact: IContact = state.profile.contacts.find(i => i.type === ContactTypeEnum.physicalAddress) as IContact;\n let index = state.profile.contacts.indexOf(addressContact);\n\n if (!addressContact) {\n addressContact = { type: ContactTypeEnum.physicalAddress, address: payload.address as string, name: \"\", \"email\": \"\", \"telephone\": \"\",\"skype\": \"\", \"countryCode\": \"\" };\n state.profile.contacts.push(addressContact);\n }\n else {\n addressContact = { type: ContactTypeEnum.physicalAddress, address: payload.address as string, name: \"\", \"email\": \"\", \"telephone\": \"\",\"skype\": \"\", \"countryCode\": \"\" };\n state.profile.contacts[index] = addressContact;\n }\n },\n UpdateProfileShortDescription(state, action: PayloadAction) {\n state.profile.shortDescription = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.basicInfo, type: ''} );\n },\n UpdateProfileLocation(state, action){\n const payload = action.payload as IUpdateProfileLocation\n let pin = {\n latitude: payload.latitude,\n longitude: payload.longitude,\n drivingLatitude: payload.latitude,\n drivingLongitude: payload.longitude,\n };\n\n pin.drivingLatitude = payload.latitude;\n pin.drivingLongitude = payload.longitude;\n state.profile.pin = pin;\n },\n UpdateProfileSearchAliases(state, action) {\n state.profile.searchAliases = action.payload;\n },\n UpdateProfileRichDescription(state, action: PayloadAction) {\n state.profile.richDescription = action.payload;\n },\n UpdateProfileLinks(state, action) {\n state.profile.links = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.contactDetails, type: ''} );\n },\n UpdateProfileContact(state, action) {\n const payload = action.payload as IUpdateProfileContact;\n let contacts: IContact[] = [];\n if(!state.profile.contacts) {\n state.profile.contacts = contacts;\n contacts = [...state.profile.contacts, payload]\n } else {\n contacts = [...state.profile.contacts];\n var doesItemExist = contacts.find(x => x.type === payload.type);\n if(doesItemExist) {\n contacts = state.profile.contacts.map((item, index) => {\n if(item.type === payload.type) {\n return {\n ...item,\n ...payload\n }\n }\n return item;\n });\n } else {\n contacts = [...state.profile.contacts, payload];\n }\n }\n state.profile.contacts = contacts;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.contactDetails, type: ''} );\n }, \n UpdateQualityAssuranceBody(state, action) {\n state.profile.qualityAssuranceBody = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateAlternativeRating(state, action) {\n state.profile.alternativeRating = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateTimeFormat(state, action) {\n state.profile.timeFormat = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateMinimumChildAge(state, action) {\n state.profile.minimumChildAge = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.fastFacts, type: ''} );\n },\n UpdateAffiliate(state, action: PayloadAction) {\n state.profile.affiliate = action.payload;\n switch (action.payload) {\n case BookingAffiliateEnum.none: {\n state.profile.affiliateCode = \"\";\n state.profile.clientName = \"\";\n break;\n }\n case BookingAffiliateEnum.nightsbridge: {\n state.profile.clientName = \"\";\n break;\n }\n }\n\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.integrations, type: ''} );\n },\n UpdateAffiliateCode(state, action: PayloadAction) {\n state.profile.affiliateCode = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.integrations, type: ''} );\n },\n UpdateClientName(state, action: PayloadAction) {\n state.profile.clientName = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.integrations, type: ''} );\n },\n UpdateGDSCodes(state, action: PayloadAction>) {\n state.profile.gdsCodes = action.payload;\n profileSlice.caseReducers.UpdateSectionComplete(state, { payload: ProfileFormPageEnum.integrations, type: ''} );\n },\n UpdateIsProfileLoaded(state, action: PayloadAction) {\n state.profile.isLoaded = action.payload;\n }\n },\n extraReducers: builder => {\n builder.addCase(getById.pending, (state) => {\n state.loading = true;\n }) \n builder.addCase(getById.fulfilled, (state, action) => {\n state.loading = false;\n if (action.payload) {\n state.profile = action.payload;\n }\n })\n builder.addCase(create.pending, (state) => {\n state.profile = initialState.profile;\n state.isValidated = false;\n state.loading = true;\n }) \n builder.addCase(create.fulfilled, (state, action) => {\n state.loading = false;\n state.profile.id = action.payload.id;\n })\n builder.addCase(validate.fulfilled, (state, action) => {\n state.profile.isPublished = action.payload.isPublished;\n state.isValidated = true;\n })\n builder.addCase(getSummaries.pending, (state, action) => {\n state.profileSummaries = [];\n state.loading = true;\n })\n builder.addCase(getSummaries.fulfilled, (state, action) => {\n state.profileSummaries = action.payload;\n state.loading = false;\n })\n builder.addCase(update.pending, (state) => {\n state.saving = true;\n }) \n builder.addCase(update.fulfilled, (state) => {\n state.saving = false;\n })\n },\n});\n\nexport const {\n UpdateSectionComplete,\n UpdateSectionCompleteWithValue,\n UpdateSectionsComplete,\n UpdateProfileName,\n UpdateProfileType,\n UpdateProfileCategory,\n UpdateProfileNameAddressLocation,\n UpdateProfileSearchAliases,\n UpdateProfileFeatures,\n UpdateProfileShortDescription,\n UpdateProfileRichDescription,\n UpdateProfileContact,\n UpdateProfileLinks,\n UpdateProfileLocation,\n UpdateProfileStreetAddress,\n UpdateProfileCity,\n UpdateProfileCountry,\n UpdateProfilePostalCode,\n UpdateProfilePin,\n UpdateProfileCheckinTimeFrom,\n UpdateProfileCheckinTimeTo,\n UpdateProfileCheckoutTimeFrom,\n UpdateProfileCheckoutTimeTo,\n ResetProfilePin,\n UpdateProfileRoomCount,\n UpdateProfileStarRating,\n ResetProfile,\n UpdateProfileLanguages,\n UpdateQualityAssuranceBody,\n UpdateAlternativeRating,\n UpdateTimeFormat,\n UpdateMinimumChildAge,\n UpdateAffiliate,\n UpdateAffiliateCode,\n UpdateClientName,\n UpdateGDSCodes,\n UpdateIsProfileLoaded\n} = profileSlice.actions;\n\nexport default profileSlice.reducer;","import axios from 'axios';\nimport { IProfileItemDeletePayload, IProfileItem } from 'components/profile/profileitem/types';\nimport { getApiBaseUrl } from '../app/config';\n\nconst baseProfileUrl = getApiBaseUrl() + 'profileitem/';\n\nexport async function updateProfileItemsDb_service(payload: IProfileItem[]) { \n return axios.post(baseProfileUrl + \"updateProfileItems\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n }).catch(function (error) {\n if (error.response) {\n console.error('updateProfileItemsDb_service error.response.data: ', error.response.data);\n console.error('updateProfileItemsDb_service error.response.status: ', error.response.status);\n }\n });\n}\n\nexport async function getProfileItems(id: string) { \n return axios.get(baseProfileUrl + `GetProfileItems?profileId=${id}`, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n }).catch(function (error) {\n if (error.response) {\n console.error('getProfileItems error.response.data: ', error.response.data);\n console.error('getProfileItems error.response.status: ', error.response.status);\n }\n });\n};\n\nexport async function deleteProfileItemDb_service(payload: IProfileItemDeletePayload) { \n return axios.post(baseProfileUrl + \"DeleteProfileItem\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n });\n}\n\nexport async function createProfileItemDb_service(payload: IProfileItem) { \n return axios.post(baseProfileUrl + \"Create\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n })\n}\n\n\n\n","import axios from 'axios';\nimport { DeleteBlob } from 'components/profile/types';\nimport { getApiBaseUrl } from '../app/config';\n\nconst baseProfileUrl = getApiBaseUrl() + 'blob/';\n\nexport async function uploadBlob(payload: FormData) {\n return axios.post(baseProfileUrl + \"Upload\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'content-type': 'multipart/form-data'\n }\n });\n} \n\nexport async function deleteBlob(payload: DeleteBlob) {\n return axios.post(baseProfileUrl + \"Delete\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'content-type': 'multipart/form-data'\n }\n });\n} \n\n","import { IProfileItem, IProfileItemDeletePayload, IProfileItemMediaUpdate } from \"./types\";\nimport { createAsyncThunk, createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport _ from 'lodash';\nimport { createProfileItemDb_service, deleteProfileItemDb_service, getProfileItems, updateProfileItemsDb_service } from \"api/profileitem.service\";\nimport { showGlobalToast } from \"components/toast/toast.slice\";\nimport { uploadBlob, deleteBlob } from \"api/blob.service\";\nimport { DeleteBlob, IMediaItem } from \"../types\";\nimport store from \"app/store\";\nimport { logError } from 'utils/General';\n\nconst initialState = {\n profileItems: [] as IProfileItem[],\n mediaItems: [] as IMediaItem[],\n isValidated: false,\n loading: true,\n saving: false,\n submitting: false\n};\n\nexport const isFormPageProfileItemsComplete = (profileItems: IProfileItem[], pageId: string): boolean => {\n return !!(profileItems && profileItems.length && profileItems.length > 0);\n}\n\nexport const createProfileItem = createAsyncThunk('profileItem/Create', async (payload: IProfileItem, { dispatch, rejectWithValue }) => {\n try {\n const response = await createProfileItemDb_service(payload);\n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\nexport const uploadRoomBlob = createAsyncThunk('blob/Upload', async (payload: FormData, { dispatch, rejectWithValue }) => {\n //uploadRoomBlob: If you open the Sleeping Arrangements overlay and upload an image a blob is created but the MediaItem is only created when they click Done, because the parentId is the ProfileItem. See comment in API BlobService.UploadAsync\n try {\n const response = await uploadBlob(payload);\n var multipleImages = payload.getAll('files');\n dispatch(showGlobalToast({title: \"Success\", message: multipleImages && multipleImages.length > 1 ? \"Images added\" : \"Image added\"}));\n return response.data;\n }\n catch(err) {\n logError(err);\n dispatch(showGlobalToast({title: \"Failure\", message: \"Image upload failed\"}));\n return rejectWithValue(false);\n }\n})\n\nexport const uploadRoomMedia = createAsyncThunk('blob/UploadRoomMedia', async (payload: FormData, { dispatch, rejectWithValue }) => {\n try {\n const response = await uploadBlob(payload);\n var multipleImages = payload.getAll('files');\n dispatch(showGlobalToast({title: \"Success\", message: multipleImages && multipleImages.length > 1 ? \"Images added\" : \"Image added\"}));\n return response.data;\n }\n catch(err) {\n logError(err);\n dispatch(showGlobalToast({title: \"Failure\", message: \"Image upload failed\"}));\n return rejectWithValue(false);\n }\n})\n\nexport const getProfileItemsById = createAsyncThunk('profileitem/GetProfileItems', async (id: string, { rejectWithValue }) => {\n try {\n const response = await getProfileItems(id);\n return response && response.data ? response.data : null;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\nexport const getProfileItemCount = createAsyncThunk('blob/getProfileItemCount', async (payload: string | void, { dispatch, rejectWithValue }) => {\n return store.getState().profileItemSlice.profileItems?.length;\n})\n\nexport const deleteRoomBlob = createAsyncThunk('blob/Delete', async (payload: DeleteBlob, { dispatch, rejectWithValue }) => {\n try {\n const response = await deleteBlob(payload);\n dispatch(showGlobalToast({title: \"Success\", message: payload.blobNames.length > 1 ? \"Images deleted\" : \"Image deleted\"}));\n return response.data;\n }\n catch(err) {\n logError(err);\n dispatch(showGlobalToast({title: \"Failure\", message: \"Image delete failed\"}));\n return rejectWithValue(false);\n }\n})\n\nexport const updateProfileItemsDb = createAsyncThunk('profileitem/UpdateProfileItemsDb', async (payload: IProfileItem[], {dispatch, rejectWithValue }) => {\n try {\n const response = await updateProfileItemsDb_service(payload.filter(x => x.isChanged));\n if (response && response.status && response.data && response.status === 200) {\n dispatch(showGlobalToast({title: \"Success\", message: \"Sleeping arrangements saved\"}));\n }\n\n return payload;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\nexport const deleteProfileItem = createAsyncThunk('profileitem/DeleteProfileItem', async (payload: IProfileItemDeletePayload, { dispatch, rejectWithValue }) => {\n try {\n const response = await deleteProfileItemDb_service(payload); \n \n if (response.status === 200 && response.data.id !== undefined)\n {\n dispatch(showGlobalToast({title: \"Success\", message: `${payload.type} deleted`}));\n }\n \n return response.data; \n\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n})\n\n\nconst profileItemSlice = createSlice({\n name: 'profileItemSlice',\n initialState,\n reducers: {\n ResetProfileItem(state) {\n state.profileItems = initialState.profileItems;\n state.mediaItems = initialState.mediaItems;\n },\n UpdateProfileItemMediaItems(state, action: PayloadAction) {\n state.mediaItems = action.payload;\n },\n UpdateExistingProfileItemMedia(state, action: PayloadAction) {\n state.mediaItems = [];\n let profileItemsClone = _.cloneDeep(state.profileItems);\n\n const index = profileItemsClone.findIndex(x => x.id === action.payload.id);\n if(index > -1) {\n profileItemsClone[index].media = action.payload.media;\n }\n state.profileItems = profileItemsClone;\n },\n UpdateProfileItems(state, action: PayloadAction) {\n let profileItemsClone = _.cloneDeep(state.profileItems);\n const changedItems = action.payload;\n for (let i = 0; i < changedItems.length; i++) {\n let index = profileItemsClone.findIndex(x => x.id === changedItems[i].id);\n profileItemsClone[index] = changedItems[i];\n }\n state.profileItems = profileItemsClone;\n }\n },\n extraReducers: builder => {\n builder.addCase(createProfileItem.pending, (state) => {\n state.mediaItems = [];\n })\n builder.addCase(createProfileItem.fulfilled, (state, action: PayloadAction) => { \n state.saving = false;\n let index = state.profileItems.findIndex(i => i.id === action.payload.id);\n if (index > -1) { \n state.profileItems[index] = action.payload;\n } else { \n let profilesItems = _.cloneDeep(state.profileItems)\n profilesItems.push(action.payload) \n state.profileItems = profilesItems;\n } \n })\n builder.addCase(deleteProfileItem.fulfilled, (state, action) => { \n let index = state.profileItems.findIndex(i => i.id === action.payload.id);\n if (index > -1) { \n state.profileItems.splice(index, 1) \n } \n })\n builder.addCase(uploadRoomBlob.pending, (state) => {\n state.loading = true;\n })\n builder.addCase(uploadRoomBlob.fulfilled, (state, action: PayloadAction) => {\n state.mediaItems = [...state.mediaItems, ...action.payload];\n state.loading = false;\n })\n builder.addCase(deleteRoomBlob.pending, (state) => {\n state.loading = true;\n })\n builder.addCase(deleteRoomBlob.fulfilled, (state) => {\n state.loading = false;\n })\n builder.addCase(uploadRoomMedia.fulfilled, (state, action: PayloadAction) => {\n let clonedProfileItems =_.cloneDeep(state.profileItems);\n \n const index = clonedProfileItems.findIndex(i => i.id === action.payload[0].parentId);\n \n if (index > -1) { \n clonedProfileItems[index].media = [...clonedProfileItems[index].media, ...action.payload]; \n state.profileItems = clonedProfileItems;\n state.mediaItems = [...state.mediaItems, ...action.payload]; \n }\n })\n builder.addCase(getProfileItemsById.pending, (state) => { \n state.loading = true;\n })\n builder.addCase(getProfileItemsById.fulfilled, (state, action) => { \n state.loading = false;\n if (action.payload) {\n state.profileItems = action.payload;\n }\n })\n builder.addCase(updateProfileItemsDb.fulfilled, (state, action) => {\n if (action.payload) {\n let profileItemsClone = _.cloneDeep(state.profileItems);\n const changedItems = action.payload;\n for (let i = 0; i < changedItems.length; i++) {\n let index = profileItemsClone.findIndex(x => x.id === changedItems[i].id);\n profileItemsClone[index] = changedItems[i];\n }\n state.profileItems = profileItemsClone;\n }\n })\n },\n});\n\nexport const { \n ResetProfileItem,\n UpdateProfileItemMediaItems,\n UpdateProfileItems,\n UpdateExistingProfileItemMedia\n} = profileItemSlice.actions;\n\nexport default profileItemSlice.reducer;","import { getApiBaseUrl } from 'app/config';\nimport axios from 'axios';\nimport { IMediaIEmbed, IMediaItem } from 'components/profile/types';\n\nconst baseProfileUrl = getApiBaseUrl() + 'media/';\n\nexport async function uploadProfileEmbedVideos(payload: IMediaIEmbed) {\n return axios.post(baseProfileUrl + \"UploadProfileEmbedVideos\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*' \n }\n });\n}\n\nexport async function uploadProfileMedia_service(payload: FormData) {\n return axios.post(baseProfileUrl + \"UploadProfileMedia\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'content-type': 'multipart/form-data'\n }\n });\n }\n \n export async function deleteProfileMedia_service(payload: IMediaItem[]) {\n return axios.post(baseProfileUrl + \"DeleteProfileMedia\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*'\n }\n });\n }\n\n export async function updateProfileMedia_service(payload: IMediaItem[]) {\n return axios.post(baseProfileUrl + \"UpdateProfileMedia\", payload, {\n headers: {\n 'Access-Control-Allow-Origin': '*'\n }\n });\n }\n\n export async function getMediaItems_service(profileId: string) {\n return axios.get(baseProfileUrl + `GetMediaItems?profileId=${profileId}`, { \n headers: {\n 'Access-Control-Allow-Origin': '*',\n }\n }).catch(function (error) {\n if (error.response) {\n console.error('getMediaItems_service error.response.data: ', error.response.data);\n console.error('getMediaItems_service error.response.status: ', error.response.status);\n }\n });\n }","import { createAsyncThunk, createSlice, PayloadAction, current } from \"@reduxjs/toolkit\";\nimport { deleteProfileMedia_service, getMediaItems_service, updateProfileMedia_service, uploadProfileMedia_service, uploadProfileEmbedVideos } from \"api/media.service\";\nimport store from \"app/store\";\nimport { ProfileFormPageEnum, ProfileFormPageSectionEnum } from \"pages/profile-form/profile.form.types\";\nimport { minimumImages, minimumVideos, languageDictionary } from 'app/config';\nimport { IMediaItem, IDeleteMediaPayload, MediaTypeEnum, IUpdateMediaPayload, IMediaIEmbedApiPayload, IUploadMediaPayload, \n getMediaTypeEnumAsLabel, EntityTypeEnum, DocumentTypeEnum, DocumentVisibilityEnum} from \"../types\";\nimport { showGlobalToast } from \"components/toast/toast.slice\";\nimport { logError } from 'utils/General';\nimport _ from 'lodash';\n\nconst initialState = {\n mediaItems: [] as IMediaItem[],\n isMediaItemSliceLoading: true,\n saving: false,\n submitting: false\n};\n\nexport const isMediaComplete = (pageId: string): boolean => {\n const mediaItems = store.getState().mediaItemSlice.mediaItems;\n switch (pageId) {\n case ProfileFormPageEnum.media:\n case ProfileFormPageSectionEnum.images : {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.image).length >= minimumImages;\n }\n case ProfileFormPageSectionEnum.videos : {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.video || x.mediaType === MediaTypeEnum.embedVideo).length >= minimumVideos; \n }\n case ProfileFormPageSectionEnum.virtualTours : {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.virtualTour).length >= 1;\n }\n case ProfileFormPageSectionEnum.documents: {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.documentation).length >= 1;\n }\n default: {\n return false;\n }\n }\n}\n\nexport const getDefaultNewDocument = (documentsEnum: DocumentTypeEnum) : IMediaItem => {\n return {\n id: '',\n label: {enText: '', machineTranslations: {}, translations: {}},\n description: {enText: '', machineTranslations: {}, translations: {}},\n mediaType: MediaTypeEnum.documentation,\n entityType: EntityTypeEnum.media,\n azureContainerName: '',\n credit: '',\n filePath: '',\n fileSizeKb: 0,\n hasFileSizeWarning: false,\n height: 0,\n isChanged: false,\n isChecked: false,\n originalFileName: '',\n parentId: '',\n profileId: '',\n documentType: documentsEnum,\n sequence: 0,\n url: '',\n width: 0,\n visibility: DocumentVisibilityEnum.publicAndTrade\n };\n}\n\nexport const getMediaItems = createAsyncThunk('profile/getMediaItems', async (profileId: string, { rejectWithValue }) => {\n try { \n const response = await getMediaItems_service(profileId);\n const languageCodes = Object.keys(languageDictionary);\n //We need to initialize translations dictionaries, otherwise we get \"Warning: A component is changing a controlled input of type undefined to be uncontrolled.\"\n if (response && response.data) {\n for (let i = 0; i < languageCodes?.length; i++) {\n for (let j = 0; j < response.data.length; j++) {\n const languageCode = languageCodes[i];\n if (!response.data[j].label.translations[languageCode]) {\n response.data[j].label.translations[languageCode] = '';\n }\n if (!response.data[j].description.translations[languageCode]) {\n response.data[j].description.translations[languageCode] = '';\n }\n }\n }\n }\n return response && response.data ? response.data : null;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n })\n\n export const updateChangedMedia = createAsyncThunk('profile/updateChangedMedia', async (payload: IMediaItem[], { dispatch, rejectWithValue }) => {\n try {\n const changedMedia: IMediaItem[] = payload.filter(x => x.isChanged);\n if (changedMedia && changedMedia.length > 0) {\n const response = await updateProfileMedia_service(changedMedia);\n dispatch(showGlobalToast({title: \"Success\", message: getMediaTypeEnumAsLabel(changedMedia[0].mediaType, payload.length > 1) + \" saved.\"}));\n return response.data;\n }\n return null;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n })\n\n export const updateMedia = createAsyncThunk('profile/updateProfileMedia', async (payload: IMediaItem[], { rejectWithValue }) => {\n try {\n const response = await updateProfileMedia_service(payload);\n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n })\n\n export const deleteMedia = createAsyncThunk('media/deleteProfileMedia', async (payload: IDeleteMediaPayload, { dispatch, rejectWithValue }) => {\n try {\n const response = await deleteProfileMedia_service(payload.mediaItems);\n if(payload.showToast) {\n dispatch(showGlobalToast({title: \"Success\", message: getMediaTypeEnumAsLabel(payload.mediaType, payload.mediaItems.length > 1) + \" deleted\"}));\n }\n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n })\n\n export const uploadMedia = createAsyncThunk('media/uploadProfileMedia', async (payload: IUploadMediaPayload, { dispatch, rejectWithValue }) => {\n try {\n const response = await uploadProfileMedia_service(payload.formData);\n var multipleMedia = payload.formData.getAll('files');\n dispatch(showGlobalToast({title: \"Success\", message: getMediaTypeEnumAsLabel(payload.mediaType, !multipleMedia || multipleMedia.length > 1) + \" added\"}));\n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n })\n\n export const uploadEmbedVideos = createAsyncThunk('media/UploadProfileEmbedVideos', async (payload: IMediaIEmbedApiPayload, { dispatch, rejectWithValue }) => {\n try {\n const response = await uploadProfileEmbedVideos(payload.IMediaIEmbed); \n if (payload.enableToast) {\n dispatch(showGlobalToast({title: \"Success\", message: payload.toastMessage }));\n } \n return response.data;\n }\n catch(err) {\n logError(err);\n return rejectWithValue(false);\n }\n }) \n\n const mediaItemSlice = createSlice({\n name: 'mediaItemSlice',\n initialState,\n reducers: {\n ResetMediaItems(state) {\n state.mediaItems = initialState.mediaItems;\n },\n UpdateMediaItems(state, action) {\n if (action.payload) {\n state.mediaItems = action.payload\n }\n },\n UpdateChangedMedia_Reducer(state, action: PayloadAction) {\n let mediaItemsClone: IMediaItem[] = _.cloneDeep(state.mediaItems);\n const changedItems = action.payload;\n for (let i = 0; i < changedItems.length; i++) {\n let index = mediaItemsClone.findIndex(x => x.id === changedItems[i].id);\n mediaItemsClone[index] = changedItems[i];\n }\n state.mediaItems = mediaItemsClone;\n },\n UpdateMedia_Reducer(state, action: PayloadAction) {\n const currentMediaItems = current(state.mediaItems);\n let images: IMediaItem[] =currentMediaItems.filter(x => x.mediaType === MediaTypeEnum.image);\n let videos: IMediaItem[]= currentMediaItems.filter(x => x.mediaType === MediaTypeEnum.video || x.mediaType === MediaTypeEnum.embedVideo );\n let virtualTours: IMediaItem[]= currentMediaItems.filter(x => x.mediaType === MediaTypeEnum.virtualTour);\n let documents: IMediaItem[]= currentMediaItems.filter(x => x.mediaType === MediaTypeEnum.documentation);\n let mediaType = action.payload?.mediaType ? action.payload.mediaType : MediaTypeEnum.image;\n \n switch (mediaType) {\n case MediaTypeEnum.image: {\n images = action.payload.mediaItems;\n break;\n }\n case MediaTypeEnum.video:\n case MediaTypeEnum.embedVideo: {\n videos = action.payload.mediaItems;\n break;\n }\n case MediaTypeEnum.virtualTour: {\n virtualTours = action.payload.mediaItems;\n break;\n }\n case MediaTypeEnum.documentation: {\n documents = action.payload.mediaItems;\n break;\n }\n default: {\n break;\n } \n }\n state.mediaItems = [ ...images , ...videos, ...virtualTours, ...documents];\n },\n },\n extraReducers: builder => {\n builder.addCase(getMediaItems.pending, (state) => {\n state.mediaItems = [];\n })\n builder.addCase(getMediaItems.fulfilled, (state, action) => { \n state.isMediaItemSliceLoading = false;\n if (action.payload) {\n state.mediaItems = action.payload;\n }\n })\n builder.addCase(deleteMedia.fulfilled, (state) => {\n state.isMediaItemSliceLoading = false;\n })\n builder.addCase(uploadEmbedVideos.fulfilled, (state, action: PayloadAction) => {\n let media: IMediaItem[] = state.mediaItems;\n let embedVideo = action.payload; \n state.mediaItems = [ ...media , ...embedVideo];\n })\n builder.addCase(updateMedia.fulfilled, (state, action: PayloadAction) => {\n let images: IMediaItem[] = state.mediaItems.filter(x => x.mediaType === MediaTypeEnum.image);\n let videos: IMediaItem[]= state.mediaItems.filter(x => x.mediaType === MediaTypeEnum.video || x.mediaType === MediaTypeEnum.embedVideo );\n let virtualTour: IMediaItem[]= state.mediaItems.filter(x => x.mediaType === MediaTypeEnum.virtualTour);\n let mediaType = MediaTypeEnum.image;\n \n if(action.payload.length > 0 ) {\n mediaType = action.payload[0].mediaType;\n }\n \n switch(mediaType) {\n case MediaTypeEnum.image: {\n images = action.payload;\n break;\n }\n case MediaTypeEnum.video:\n case MediaTypeEnum.embedVideo: {\n videos = action.payload;\n break;\n }\n case MediaTypeEnum.virtualTour: {\n virtualTour = action.payload;\n break;\n }\n default : {\n break;\n } \n }\n state.mediaItems = [ ...images , ...videos, ...virtualTour];\n })\n builder.addCase(uploadMedia.pending, (state) => {\n state.isMediaItemSliceLoading = false;\n })\n builder.addCase(uploadMedia.fulfilled, (state, action: PayloadAction) => {\n state.isMediaItemSliceLoading = false;\n state.mediaItems = [...state.mediaItems, ...action.payload];\n })\n builder.addCase(updateChangedMedia.fulfilled, (state, action: PayloadAction) => {\n if (action.payload) {\n state.mediaItems.forEach((item) => {\n item.isChanged = false;\n return item;\n })\n }\n })\n },\n});\n\nexport const {\n ResetMediaItems,\n UpdateMediaItems,\n UpdateChangedMedia_Reducer,\n UpdateMedia_Reducer\n} = mediaItemSlice.actions;\n\nexport default mediaItemSlice.reducer;","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nconst initialState = { \n showUpdateProfileMenu: true, \n};\n\nconst applicationSlice = createSlice({\n name: 'headerSlice',\n initialState,\n reducers: {\n ToggleUpdateProfileMenu(state, action: PayloadAction) {\n state.showUpdateProfileMenu = action.payload;\n } \n },\n extraReducers: builder => { \n },\n});\n\nexport const {\n ToggleUpdateProfileMenu\n} = applicationSlice.actions;\n\nexport default applicationSlice.reducer;","import { combineReducers } from '@reduxjs/toolkit';\nimport profileSlice from 'components/profile/profile.slice';\nimport profileItemSlice from 'components/profile/profileitem/profileitem.slice';\nimport mediaItemSlice from 'components/profile/mediaitem/mediaitem.slice';\nimport applicationSlice from 'app/app.slice';\nimport toast from 'components/toast/toast.slice';\n\nconst rootReducer = combineReducers({\n\tprofileSlice,\n\tprofileItemSlice,\n\tmediaItemSlice,\n\tapplicationSlice,\n\ttoast\n});\n\nexport type RootState = ReturnType;\nexport default rootReducer;","import { configureStore, Action } from '@reduxjs/toolkit';\nimport { ThunkAction } from 'redux-thunk';\nimport rootReducer, { RootState } from './root-reducer';\nimport { useDispatch } from 'react-redux'\n\nconst store = configureStore({\n reducer: rootReducer\n});\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n module.hot.accept('./root-reducer', () => {\n const newRootReducer = require('./root-reducer').default\n store.replaceReducer(newRootReducer)\n });\n}\n\nexport type AppDispatch = typeof store.dispatch;\n//https://stackoverflow.com/questions/63811401/property-then-does-not-exist-on-type-asyncthunkaction-redux-toolkit\nexport const useAppDispatch = () => useDispatch() // Export a hook that can be reused to resolve types\nexport type AppThunk = ThunkAction, RootState, any, Action>;\n\nexport default store;","import React, {useRef, useEffect} from 'react';\nimport './map.scss';\nimport { IMapProps } from './types';\n\nlet map: google.maps.Map;\nlet markers: google.maps.Marker[] = [];\n\nexport const Map = (props: IMapProps) => {\n const mapRef = useRef(null);\n const initialCenter: google.maps.LatLngLiteral = {lat: 0, lng: 0};\n const { setCoordinates, pin } = props;\n\n useEffect(() => {\n if(mapRef.current){\n map = new google.maps.Map(mapRef.current,{\n center: initialCenter,\n zoom: 12,\n draggableCursor: 'default'\n });\n }\n }, [ initialCenter, setCoordinates ]);\n\n useEffect(() => {\n const addMarker = (location:google.maps.LatLng) => { \n const marker = new google.maps.Marker({\n position: location,\n draggable: true,\n map: map\n });\n \n if (location.lat() === 0 && location.lng() === 0) {\n map.setZoom(3);\n var infowindow = new google.maps.InfoWindow({\n content: 'Drag to position pin'\n });\n \n google.maps.event.addListener(map, 'tilesloaded', function() {\n infowindow.open(map,marker);\n });\n }\n markers.push(marker);\n google.maps.event.addListener(marker, 'dragend', (evt) =>{\n setCoordinates( evt.latLng );\n });\n map.setCenter(location);\n }\n \n if (pin){\n const location = new google.maps.LatLng(pin.latitude, pin.longitude);\n addMarker(location)\n }\n }, [pin, initialCenter, setCoordinates]);\n\n return ( \n \n
\n
\n )\n}\n","import { ContactTypeEnum } from 'components/profile/types';\nimport React, { useState, FocusEvent } from 'react';\nimport { Form, Spinner, Image } from 'react-bootstrap';\nimport './email-input.scss';\nimport warningImage from './images/icon_warning.svg';\n\ninterface Props {\n email: string;\n validated?: (isValid: boolean) => void;\n showLabel?: boolean;\n validationEvent?: string;\n callBack: (updateValue: string | boolean, name: string, contactType?: ContactTypeEnum) => void;\n contactType?: ContactTypeEnum;\n}\n\nconst initialInputState = {\n ErrorMessage: \"\",\n HasError: false,\n IsValid: false,\n ShowErrorLink: false,\n IsLoading: false\n}\n\nenum Reason {\n Availability,\n Format,\n Error,\n None\n}\n\nexport const EmailInput = ({callBack, email, validated, showLabel = true, validationEvent = \"onChange\", contactType }: Props) => {\n const [validationState, setValidationState] = useState(initialInputState);\n\n const updateStateValues = (state: string, value: string | boolean) => {\n setValidationState(prev => ({\n ...prev,\n [state]: value,\n }));\n };\n\n const validateEmail_Event = (e: FocusEvent) => {\n const value = e.target.value;\n\n updateStateValues(\"HasError\", false);\n updateStateValues(\"IsValid\", false);\n\n if (value) {\n // eslint-disable-next-line\n let regexp = new RegExp(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n let isValidFormat = regexp.test(value);\n \n if (isValidFormat) {\n callBack(value, \"email\", contactType);\n } else {\n validationHandler(Reason.Format);\n }\n } else {\n validationHandler(Reason.None);\n callBack(value, \"email\", contactType);\n } \n\n if (validated) {\n validated(initialInputState.IsValid);\n }\n }\n\n const validationHandler = ( reason: Reason) => {\n let message = \"\";\n let hasError = false;\n let showLink = false;\n\n switch (reason) {\n case Reason.Format: {\n message = \"Please enter a valid email address in the format name@email.com.\";\n hasError = true;\n showLink = false;\n break;\n }\n case Reason.Availability: {\n message = \"This email is already registered. Please check inbox or \";\n hasError = true;\n showLink = true;\n break;\n }\n case Reason.Error: {\n message = \"Something went wrong. Please try again.\";\n hasError = true;\n showLink = false;\n break;\n }\n case Reason.None: {\n message = \"\";\n hasError = false;\n showLink = false;\n break;\n }\n default: {\n message = \"\";\n hasError = false;\n showLink = false;\n break;\n }\n } \n\n updateStateValues(\"ErrorMessage\", message);\n updateStateValues(\"HasError\", hasError);\n updateStateValues(\"ShowErrorLink\", showLink);\n }\n\n return (\n
\n \n\n { showLabel &&\n Email*\n }\n\n
\n\n {validationEvent === \"onChange\" &&\n \n }\n\n {validationEvent === \"onBlur\" &&\n \n }\n\n {validationState.IsLoading &&\n \n }\n\n \n
\n \n {validationState.ErrorMessage} {validationState.ShowErrorLink && Log in?}\n
\n
\n\n
\n \n
\n
\n )\n}","import './home.page.scss'\nimport React from 'react';\n\n\nexport const HomePage = () => {\n return (\n
\n

Home page

\n
\n )\n}","import React from 'react';\nimport './page-3.page.scss';\n\nexport const Page3 = () => {\n return (\n
\n

Page 3

\n
\n )\n}","import React from 'react';\nimport './page-4.page.scss';\n\nexport const Page4 = () => {\n return (\n
\n

Page 4

\n
\n )\n}","import React from 'react';\nimport './page-5.page.scss';\n\nexport const Page5 = () => {\n return (\n
\n

Page 5

\n
\n )\n}","import React from 'react';\nimport { Col, Button } from 'react-bootstrap';\nimport './profile.creation.header.scss';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { create, update } from 'components/profile/profile.slice';\n//import { createPItem, updatePItem } from 'components/profile/profileitem/profileitem.slice';\nimport { RootState } from 'app/root-reducer';\nimport { EntityTypeEnum } from 'components/profile/types';\n\ninterface IProps {\n displaySaveAndExit?: boolean;\n }\n\nexport const ProfileCreationHeader = ({displaySaveAndExit} : IProps) => {\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n\n const dispatch = useDispatch();\n\n const updateProfile = () => {\n if(profile.id) {\n dispatch(update({\n id: profile.id,\n category: profile.category,\n isEnhanced: profile.isEnhanced,\n latitude: profile.pin.latitude,\n longitude: profile.pin.longitude,\n name: profile.name,\n type: profile.type,\n entityType: EntityTypeEnum.profile,\n checkinTimeFrom: profile.checkinTimeFrom,\n checkoutTimeFrom: profile.checkoutTimeFrom,\n checkinTimeTo: profile.checkinTimeTo,\n checkoutTimeTo: profile.checkoutTimeTo,\n isPublished: profile.isPublished,\n features: profile.features,\n searchAliases: profile.searchAliases,\n translationItems: profile.translationItems,\n shortDescription: profile.shortDescription,\n richDescription: profile.richDescription,\n availableLanguages: profile.availableLanguages,\n status: profile.status,\n qualityAssuranceBody: profile.qualityAssuranceBody,\n starRating: profile.starRating,\n alternativeRating: profile.alternativeRating,\n roomCount: profile.roomCount,\n timeFormat: profile.timeFormat,\n minimumChildAge: profile.minimumChildAge,\n sectionsComplete: profile.sectionsComplete,\n clientName: profile.clientName,\n affiliate: profile.affiliate,\n affiliateCode: profile.affiliateCode,\n gdsCodes: profile.gdsCodes,\n contacts: profile.contacts,\n links: profile.links \n }));\n } else {\n dispatch(create({\n category: profile.category,\n isEnhanced: profile.isEnhanced,\n latitude: profile.pin.latitude,\n longitude: profile.pin.longitude,\n name: profile.name,\n type: profile.type,\n entityType: EntityTypeEnum.profile,\n checkinTimeFrom: profile.checkinTimeFrom,\n checkoutTimeFrom: profile.checkoutTimeFrom,\n checkinTimeTo: profile.checkinTimeTo,\n checkoutTimeTo: profile.checkoutTimeTo, \n isPublished: profile.isPublished,\n translationItems: profile.translationItems, \n features: profile.features,\n roomCount: profile.roomCount,\n starRating: profile.starRating\n }));\n }\n }\n \n return (\n \n \n {displaySaveAndExit &&\n \n }\n \n \n )\n}","import React from 'react';\nimport { Col, Nav , Form} from 'react-bootstrap';\nimport './profile.general.header.scss';\nimport { BsList } from \"react-icons/bs\";\nimport { NavLink } from 'react-router-dom';\nimport { ToggleUpdateProfileMenu } from 'app/app.slice';\nimport { useSelector } from 'react-redux';\nimport {useDispatch } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\n\ninterface IProps {\n isProfiles: boolean;\n isUpdateProfile: boolean;\n }\n\nexport const ProfileGeneralHeader = ({isProfiles, isUpdateProfile} : IProps) => {\n const { showUpdateProfileMenu } = useSelector((state: RootState) => state.applicationSlice);\n const dispatch = useDispatch();\n\n const links = [ \n {name: \"Home\", path: \"\"},\n {name: \"Profiles\", path: \"/profiles/\"},\n {name: \"Page 3\", path: \"/page3/\"},\n {name: \"Page 4\", path: \"/page4/\"},\n {name: \"Page 5\", path: \"/page5/\"}\n ];\n\n const toggleProfileUpdateMenu =() => {\n dispatch(ToggleUpdateProfileMenu(!showUpdateProfileMenu)); \n }\n\n return (\n \n \n {isUpdateProfile &&\n
\n toggleProfileUpdateMenu()} />\n
\n \n } \n \n {links.map((link,index) => (\n \n {isProfiles && link.name === \"Profiles\" &&\n \n \n
  • {link.name}
  • \n
    \n
    \n } \n {isProfiles && link.name !== \"Profiles\" &&\n \n \n
  • {link.name}
  • \n
    \n
    \n }\n {!isProfiles &&\n \n \n
  • {link.name}
  • \n
    \n
    \n } \n \n ))}\n \n \n \n \n \n \n {isUpdateProfile && \n \n
    \n
    \n AutoSave\n \n
    \n\n
    \n } \n \n \n \n
    \n Kelly Stower\n
    \n
    \n \n
    \n )\n}","import { useLocation } from \"react-router-dom\";\nimport React from 'react';\nimport { ProfileCreationHeader } from \"../profile.creation.header/profile.creation.header\";\nimport { ProfileGeneralHeader } from \"../profile.general.header/profile.general.header\";\n\nexport const HeaderFactory = () => {\n const location = useLocation();\n const isInProfiles = location.pathname.includes(\"profiles\"); \n const isOnProfileUpdatePage = location.pathname.includes(\"profiles/update\");\n\n const getCurrentPathWithoutParams = (pathname: string) => { \n let path: number = 0;\n path = Number(pathname.slice(pathname.lastIndexOf('/') + 1));\n if(isNaN(path)) {\n const sliceWithIdAndGuid = pathname.slice(pathname.lastIndexOf('/', pathname.lastIndexOf('/')-1));\n const sliceWithOnlyId = sliceWithIdAndGuid.slice(sliceWithIdAndGuid.indexOf('/') + 1, sliceWithIdAndGuid.lastIndexOf('/'));\n path = Number(sliceWithOnlyId);\n }\n if(isNaN(path)) {\n path = 0;\n }\n return path;\n }\n\n const position = getCurrentPathWithoutParams(location.pathname); \n\n\tswitch (true) {\n case (position === 0):\n return ;\n case (position > 4 && position < 11): \n return ; \n default:\n return null;\n }\n}","import React from 'react';\nimport { Col, Image, Navbar, Nav } from 'react-bootstrap';\nimport { useHistory } from 'react-router';\nimport logo from './wetuLogo.png';\nimport './header.scss';\nimport { HeaderFactory } from './features/header.factory/header.factory';\n\nexport const Header = () => {\n\n const history = useHistory();\n\n return (\n \n \n \n history.push('')} className=\"logo\" src={logo}/>\n \n \n \n \n )\n}","// Indexing starts 1, component id's will need to be aligned with this in the order of their placement\nimport React, { useEffect, useState } from 'react';\nimport { useHistory } from \"react-router-dom\";\nimport { Container, Row, Col, ProgressBar, Button, Navbar, Nav } from 'react-bootstrap';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './wizard.scss';\nimport { Step } from './types';\nimport { RootState } from 'app/root-reducer';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { create, update } from 'components/profile/profile.slice';\nimport { BsChevronRight, BsChevronLeft } from 'react-icons/bs';\nimport { EntityTypeEnum } from 'components/profile/types';\n\ndeclare var Beacon: any;\n\ninterface IProps {\n navigateTo: string;\n finalNavigation?: string;\n startingStep?: number;\n step: Step;\n children: React.ReactNode;\n}\n\nexport const Wizard = ({step, children, finalNavigation = '/home', startingStep = 1, navigateTo = ''}: IProps) => {\n const [stepCount, setStepCount] = useState(1);\n const [currentStepIndex, setCurrentStepIndex] = useState(startingStep);\n const [stepData, setStepData] = useState([]);\n const history = useHistory();\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const dispatch = useDispatch();\n\n useEffect(() => {\n setCurrentStepIndex(startingStep);\n }, [startingStep]);\n\n useEffect(() => {\n setStepCount(React.Children.count(children));\n }, [children]);\n\n useEffect(() => {\n if(React.Children.count(children) > 1) {\n React.Children.forEach(children, ((child: any, i: number) => {\n setStepData(stepData => [\n ...stepData,\n {\n id: i,\n completed: false,\n skip: false\n }\n ]);\n }));\n } else {\n setStepData(stepData => [\n ...stepData,\n {\n id: 0,\n completed: false,\n skip: false\n }\n ]);\n }\n \n }, [children]);\n\n useEffect(() => {\n const getStepData = (stepData: Step[]) => {\n let newStepDataArray = [...stepData];\n if(newStepDataArray && newStepDataArray.length > 0) {\n newStepDataArray[step.id].completed = step.completed;\n newStepDataArray[step.id].skip = step.skip;\n }\n return newStepDataArray;\n }\n setStepData(profile => profile = getStepData(profile));\n }, [step.id, step.completed, step.skip]);\n\n const nextStep = () => {\n history.push(navigateTo + (currentStepIndex + 1));\n }\n\n const previousStep = () => {\n history.push(navigateTo + (currentStepIndex - 1));\n }\n\n const RoomCancel = () => {\n if (step.pageCallBack2) {\n step.pageCallBack2();\n }\n }\n\n const RoomDone = () => {\n if (step.pageCallBack1) {\n step.pageCallBack1();\n } \n history.push(navigateTo + 10);\n }\n\n const finalize = () => {\n\n if(currentStepIndex === 10)\n { \n if(profile.id) {\n dispatch(update({\n id: profile.id,\n category: profile.category,\n isEnhanced: profile.isEnhanced,\n latitude: profile.pin.latitude,\n longitude: profile.pin.longitude,\n name: profile.name,\n type: profile.type,\n checkinTimeFrom: profile.checkinTimeFrom,\n checkoutTimeFrom: profile.checkoutTimeFrom,\n checkinTimeTo: profile.checkinTimeTo,\n checkoutTimeTo: profile.checkoutTimeTo,\n isPublished: profile.isPublished,\n entityType: EntityTypeEnum.profile,\n features: profile.features,\n searchAliases: profile.searchAliases,\n translationItems: profile.translationItems,\n shortDescription: profile.shortDescription,\n richDescription: profile.richDescription,\n availableLanguages: profile.availableLanguages,\n status: profile.status,\n qualityAssuranceBody: profile.qualityAssuranceBody,\n starRating: profile.starRating,\n alternativeRating: profile.alternativeRating,\n roomCount: profile.roomCount,\n timeFormat: profile.timeFormat,\n minimumChildAge: profile.minimumChildAge,\n sectionsComplete: profile.sectionsComplete,\n clientName: profile.clientName,\n affiliate: profile.affiliate,\n affiliateCode: profile.affiliateCode,\n gdsCodes: profile.gdsCodes,\n contacts: profile.contacts,\n links: profile.links \n }));\n } else {\n dispatch(create({\n category: profile.category,\n isEnhanced: profile.isEnhanced,\n isPublished: profile.isPublished,\n checkinTimeFrom: profile.checkinTimeFrom,\n checkoutTimeFrom: profile.checkoutTimeFrom,\n checkinTimeTo: profile.checkinTimeTo,\n checkoutTimeTo: profile.checkoutTimeTo,\n latitude: profile.pin.latitude,\n longitude: profile.pin.longitude,\n name: profile.name,\n type: profile.type,\n entityType: EntityTypeEnum.profile,\n translationItems: profile.translationItems, \n features: profile.features,\n roomCount: profile.roomCount,\n starRating: profile.starRating\n }));\n }\n \n nextStep();\n }else\n {\n history.push(finalNavigation);\n }\n \n }\n\n const preview = () => {\n //navigate to Wetu iBrochure; Open in a new browser tab.\n window.open('https://andrew.dev.wetu.com/iBrochure/1205/?profileId=1a149980-4a1e-44e8-a424-5282b8c00174', '_blank');\n }\n return (\n \n \n \n {\n (step.progressBarEnabled !== false) && \n }\n \n \n \n {\n (React.Children.count(children) === 1) && children\n }\n {\n (React.Children.count(children) > 1) && React.Children.toArray(children)[currentStepIndex - 1]\n }\n \n \n \n \n \n \n { step.displayFooterNavigation && !step.displayRoomCancel &&\n currentStepIndex > 1 &&\n \n }\n\n { step.displayFooterNavigation && step.displayRoomCancel &&\n \n } \n \n \n \n \n {\n step.displayFooterNavigation && step.displayNext &&\n \n }\n { step.displayFooterNavigation &&\n step.displayPreview &&\n \n }\n { step.displayFooterNavigation &&\n step.displayFinalize &&\n \n } \n \n { step.displayFooterNavigation &&\n step.displayRoomDone &&\n \n } \n\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from 'react';\nimport { Card, Col } from 'react-bootstrap';\nimport './wizard.card.scss';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\n\ninterface IProps {\n name: string;\n description: string;\n value: string;\n callBack: (value:string) => void;\n}\n\nexport const WizardCard = ({name, description, value, callBack}:IProps) => {\n const { type, category } = useSelector((state: RootState) => state.profileSlice.profile);\n\n const card_onClick = () => {\n callBack(value);\n }\n\n return (\n \n card_onClick()}>\n \n
    \n {name}\n \n {description}\n \n
    \n
    \n \n )\n}","import React, { useState } from 'react';\nimport { Modal, Button } from 'react-bootstrap';\nimport './suggestion.modal.scss';\nimport { useDispatch} from 'react-redux';\nimport { showGlobalToast } from 'components/toast/toast.slice';\n\ninterface IProps {\n title: string;\n callBack: (value:string) => void;\n}\n\n\nexport const SuggestionModal = ({title, callBack}:IProps) =>\n{\n const [isOpen, setIsOpen] = useState(false); \n const [noSuggestion, showSuggestionBox] = React.useState(false);\n const dispatch = useDispatch();\n const [text, setText] = useState(\"\"); \n\nconst showModal = () => {\n setIsOpen(true);\n};\n\nconst hideModal = () => {\n setIsOpen(false);\n showSuggestionBox(false);\n};\n\nconst SuggestionModal = () => {\n showSuggestionBox(true);\n}\n\nconst submit = () => {\n hideModal();\n callBack(text);\n dispatch(showGlobalToast({title: \"Success\", message: \"Thank you! Your suggestion was submitted\"}));\n}\n\n return( \n
    \n \n \n \n \n\n \n \n \n \n \n \n \n \n
    \n )\n\n}","export const IsStepComplete = (values: string[]): boolean => {\n let stepComplete: boolean = false;\n \n for(let i = 0; i < values.length; i++) {\n if(values[i] && values[i].length > 0) {\n stepComplete = true;\n } else {\n stepComplete = false;\n break;\n }\n }\n\n return stepComplete;\n}","import React from 'react';\nimport { typesArray } from 'app/config';\nimport './wizard.step-1.scss';\nimport { WizardCard } from 'components/wizard.card/wizard.card';\nimport { UpdateProfileType } from \"components/profile/profile.slice\";\nimport { useDispatch, useSelector } from 'react-redux';\nimport { SuggestionModal } from 'components/suggestion.modal/suggestion.modal';\nimport { Container, Row, Col, Card } from 'react-bootstrap';\nimport { IsStepComplete } from 'utils/Validation';\nimport { WizardCallback } from 'components/wizard/types';\nimport { useEffect } from 'react';\nimport { RootState } from 'app/root-reducer';\n\nconst WizardStep1Page = ({callBack}: WizardCallback) => {\n const dispatch = useDispatch();\n const { type } = useSelector((state: RootState) => state.profileSlice.profile);\n\n useEffect(() => {\n const stepComplete = IsStepComplete([type]);\n callBack({id: 1, completed: stepComplete, skip: false, displayFooterNavigation: true, displayNext: true});\n }, [type, callBack]);\n\n const selectionCallBack = (value:string) => {\n dispatch(UpdateProfileType(value));\n }\n\n const suggestionCallBack = (value:string) => { \n //add dispatch for email\n }\n\n return (\n \n \n \n \n \n \n \n Create a Profile on Wetu in no time!\n To get started, choose the type of profile you want to create.\n
    \n {typesArray.map(item => )}\n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n )\n}\n\nexport default WizardStep1Page","import React, { useEffect } from 'react'\nimport { categoryArray } from 'app/config';\nimport './wizard.step-2.scss';\nimport { WizardCard } from 'components/wizard.card/wizard.card';\nimport { UpdateProfileCategory } from \"components/profile/profile.slice\";\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Row, Col, Card } from 'react-bootstrap';\nimport { SuggestionModal } from 'components/suggestion.modal/suggestion.modal';\nimport { IsStepComplete } from 'utils/Validation';\nimport { WizardCallback } from 'components/wizard/types';\nimport { RootState } from 'app/root-reducer';\n\nconst WizardStep2Page = ({callBack}: WizardCallback) => {\n const dispatch = useDispatch();\n const { category } = useSelector((state: RootState) => state.profileSlice.profile);\n\n useEffect(() => {\n const stepComplete = IsStepComplete([category]);\n callBack({id: 2, completed: stepComplete, skip: false, displayFooterNavigation: true, displayNext: true});\n }, [category, callBack]);\n\n const selectionCallBack = (value:string) => {\n dispatch(UpdateProfileCategory(value));\n }\n \n const suggestionCallBack = (value:string) => { \n //add dispatch for email\n }\n\n return (\n \n \n \n \n \n \n \n Create a Profile on Wetu in no time!\n From the list below, which category is most similar to your property?\n
    \n {categoryArray.map(item => )}\n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n )\n}\n\nexport default WizardStep2Page\n\n","export const loadMapApi = () => {\n const mapsURL = \"https://maps.googleapis.com/maps/api/js?v=3&libraries=places&key=AIzaSyBCwh6Ojt_w2K1BYwJteHhkpbRA6JG05Yc\";\n const scripts = document.getElementsByTagName('script');\n \n for (let i = 0; i < scripts.length; i++){\n if (scripts[i].src.indexOf(mapsURL) === 0 ){\n return scripts[i];\n }\n }\n\n const googleMapScript = document.createElement('script');\n googleMapScript.src = mapsURL;\n googleMapScript.async = true;\n googleMapScript.defer = true; \n window.document.body.appendChild(googleMapScript);\n return googleMapScript;\n};\n\nconst getGoogleField = (googlePlacesResult: google.maps.places.PlaceResult, searchFieldName: string) => {\n return googlePlacesResult.address_components?.find(x => x.types.find(y => y === searchFieldName))?.long_name\n}\n\nexport const getAddress = (googlePlacesResult: google.maps.places.PlaceResult): string => {\n let address = '';\n\n const streetNumber: string | undefined = getGoogleField(googlePlacesResult, 'street_number');\n if(streetNumber) {\n address += streetNumber;\n }\n\n const route: string | undefined = getGoogleField(googlePlacesResult, 'route');\n if(route) {\n address += (streetNumber ? ', ' : '') + route;\n }\n\n const sublocality: string | undefined = getGoogleField(googlePlacesResult, 'sublocality_level_1') || getGoogleField(googlePlacesResult, 'sublocality_level_2');\n if(sublocality) {\n address += (route ? ', ' : '') + sublocality;\n }\n\n return address;\n}\n\nexport const getCity = (place: google.maps.places.PlaceResult): string => {\n //Google Search Results API is not consistent with which field is used to store city. This logic was derived from our own test data.\n let city = getGoogleField(place, 'postal_town');\n if (!city) {\n city = getGoogleField(place, 'locality');\n }\n if (!city) {\n city = getGoogleField(place, 'administrative_area_level_2');\n }\n if (!city) {\n city = getGoogleField(place, 'administrative_area_level_1');\n }\n return city ? city : '';\n}\n\nexport const getCountry = (place: google.maps.places.PlaceResult): string => {\n const country = getGoogleField(place, 'country');\n return country ? country : '';\n}\n\n export const getPostalCode = (place: google.maps.places.PlaceResult): string => {\n const postalCode = getGoogleField(place, 'postal_code');\n return postalCode ? postalCode : '';\n}","import React, { useEffect, useState } from 'react';\nimport { getAddress, loadMapApi } from 'utils/GoogleMapsUtils';\nimport { Form } from 'react-bootstrap';\nimport './google.places.search.scss';\n\ninterface IProps {\n type?: string;\n callBack: (placeResult: google.maps.places.PlaceResult, hasError: boolean) => void;\n value?: string;\n label?: string;\n placeHolder?: string;\n}\n\nexport const GooglePlacesSearch = ({callBack, type = '', value = '', label = '', placeHolder = ''}: IProps) => {\n const [place, setPlace] = useState(value);\n const [hasError, setHasError] = useState(false);\n\n useEffect(() => {\n let googleMapScript = null;\n if (typeof google === 'undefined') {\n googleMapScript = loadMapApi();\n }\n\n const initAutocomplete = () => {\n const profileNameBox: HTMLInputElement = document.getElementById(\"address-input\") as HTMLInputElement;\n if (!profileNameBox.getAttribute(\"isSearchBoxLoaded\")) {\n const searchBox = new google.maps.places.SearchBox(profileNameBox);\n profileNameBox.setAttribute('isSearchBoxLoaded', 'loaded'); \n searchBox.addListener(\"places_changed\", (e: any) => {\n const places = searchBox.getPlaces();\n if (places && places.length > 0) {\n const place: google.maps.places.PlaceResult = places[0];\n if(type === 'name') {\n setPlace(place.name);\n }\n else {\n setPlace(getAddress(place));\n setHasError(false);\n }\n callBack(place, hasError);\n }\n });\n }\n }\n if (typeof google === 'undefined') {\n googleMapScript?.addEventListener('load', function () {\n initAutocomplete();\n });\n }\n else\n {\n initAutocomplete();\n }\n }, [callBack, type, hasError]);\n\n const handlePlaceChange = (event: any) => {\n setPlace(event.target.value);\n const freeTextPlace: google.maps.places.PlaceResult = {\n name: event.target.value\n }\n callBack(freeTextPlace, false);\n }\n\n return (\n \n {label}\n handlePlaceChange(event)} id=\"address-input\" name=\"address-input-name\" type=\"search\" placeholder={ placeHolder } autoComplete=\"off\" />\n \n )\n}","import React from 'react';\nimport { Card } from 'react-bootstrap';\nimport './insights.card.scss';\nimport { BiBulb } from 'react-icons/bi';\n\ninterface IProps {\n title?: string;\n titleIcon?: string\n description?: string[];\n stickyStyling?: boolean;\n}\n\nexport const InsightsCard = ({titleIcon = '', description = [], title = '', stickyStyling = false}:IProps) => {\n const getIcon = () => {\n switch(titleIcon) {\n case 'BiBulb': {\n return \n }\n default: {\n return null;\n }\n }\n }\n return (\n \n \n {getIcon()} {title}\n {description.map((text, index) => {text})}\n \n \n )\n}","import React, { useEffect, useState } from 'react'\nimport './wizard.step-3.scss';\nimport { RootState } from 'app/root-reducer';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { UpdateProfileNameAddressLocation, UpdateProfileShortDescription } from \"components/profile/profile.slice\";\nimport { GooglePlacesSearch } from 'components/google.places.search/google.places.search';\nimport { Container, Row, Col, Card, Form } from 'react-bootstrap';\nimport { InsightsCard } from 'components/insights.card/insights.card';\nimport { IUpdateProfileNameAddressLocation } from 'components/profile/types';\nimport { IsStepComplete } from 'utils/Validation';\nimport { getAddress, getCity, getCountry, getPostalCode } from 'utils/GoogleMapsUtils';\nimport { WizardCallback } from 'components/wizard/types';\n\nconst WizardStep3Page = ({callBack}: WizardCallback) => {\n\n const getWordCount = (text: string) => {\n return text ? text.trim().split(' ').length : 0;\n }\n\n const { shortDescription, name } = useSelector((state: RootState) => state.profileSlice.profile);\n \n const [ profileName, setProfileName ] = useState(name);\n\n const [ count, setCount ] = useState(getWordCount(shortDescription?.enText));\n const dispatch = useDispatch();\n\n useEffect(() => {\n const stepComplete = IsStepComplete([profileName, shortDescription.enText]);\n callBack({id: 3, completed: stepComplete, skip: false, displayFooterNavigation: true, displayNext: true});\n }, [callBack, profileName, shortDescription.enText]);\n\n const description_onChange = (value: string) => {\n setCount(getWordCount(value));\n dispatch(UpdateProfileShortDescription({ enText: value, translations: {}, machineTranslations: {}}))\n }\n\n const googlePlacesCallback = (googlePlaceResult: google.maps.places.PlaceResult) => {\n if (typeof googlePlaceResult !== 'undefined') {\n if (typeof googlePlaceResult.name !== 'undefined') {\n setProfileName(googlePlaceResult.name.toString());\n }\n\n const payload: IUpdateProfileNameAddressLocation = {\n name: typeof googlePlaceResult.name !== 'undefined' ? googlePlaceResult.name : '',\n pin: {\n latitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location ? googlePlaceResult.geometry.location.lat() : 0,\n longitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location ? googlePlaceResult.geometry.location.lng() : 0,\n drivingLatitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location ? googlePlaceResult.geometry.location.lat() : 0,\n drivingLongitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location ? googlePlaceResult.geometry.location.lng() : 0,\n },\n address: getAddress(googlePlaceResult),\n city: getCity(googlePlaceResult),\n country: getCountry(googlePlaceResult),\n postalCode: getPostalCode(googlePlaceResult)\n }\n dispatch(UpdateProfileNameAddressLocation(payload));\n }\n } \n \n return (\n \n \n \n \n \n \n Describe your property\n Start by telling us the name and description of your property.\n \n \n Description\n 200 ? 'warning-border' : ''} value={shortDescription?.enText} onChange={(e) => description_onChange(e.target.value)} id=\"description-input\" as=\"textarea\" rows={3}/>\n {\n (count > 200) &&\n {count - 200} words over limit\n }\n {\n (count <= 200) && \n Word Count: {count} of 200\n }\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default WizardStep3Page\n","import React, { useEffect, useState } from 'react';\nimport './wizard.step-4.scss';\nimport { Container, Row, Col, Card, Form } from 'react-bootstrap';\nimport { GooglePlacesSearch } from 'components/google.places.search/google.places.search';\nimport { InsightsCard } from 'components/insights.card/insights.card';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { IsStepComplete } from 'utils/Validation';\nimport { UpdateProfileCity, UpdateProfileCountry, UpdateProfilePin, UpdateProfilePostalCode, UpdateProfileStreetAddress } from 'components/profile/profile.slice';\nimport { getAddress, getCity, getCountry, getPostalCode } from 'utils/GoogleMapsUtils';\nimport { WizardCallback } from 'components/wizard/types';\n\nconst WizardStep4Page = ({callBack}: WizardCallback) => {\n\n const { streetAddress, city, postalCode, country } = useSelector((state: RootState) => state.profileSlice.profile);\n const [ lAddress, setAddress ] = useState(streetAddress ? streetAddress : '');\n const [ lCity, setCity ] = useState(city ? city : '');\n const [ lPostalCode, setPostalCode ] = useState(postalCode ? postalCode : '');\n const [ lCountry, setCountry ] = useState(country ? country : '');\n const [ hasError, setHasError ] = useState(false);\n const dispatch = useDispatch();\n \n useEffect(() => {\n const stepComplete = IsStepComplete([streetAddress, city, country]);\n callBack({id: 4, completed: stepComplete, skip: false, displayFooterNavigation: true, displayNext: true});\n }, [callBack, city, hasError, postalCode, streetAddress, country]);\n\n const googlePlacesCallback = (googlePlaceResult: google.maps.places.PlaceResult, hasGoogleError: boolean) => {\n setHasError(hasGoogleError);\n if(!hasGoogleError && googlePlaceResult.name) {\n const googleStreetAddress = getAddress(googlePlaceResult);\n const freeTextStreetAddress = googlePlaceResult.name;\n const country = getCountry(googlePlaceResult);\n const city = getCity(googlePlaceResult);\n const postalCode = getPostalCode(googlePlaceResult);\n handleCountryChange(country, true);\n handleCityChange(city, true);\n handlePostalCodeChange(postalCode);\n handleAddressChange(freeTextStreetAddress, googleStreetAddress);\n\n const pin = {\n latitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location ? googlePlaceResult.geometry.location.lat() : 0,\n longitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location && googlePlaceResult.geometry ? googlePlaceResult.geometry.location.lng() : 0,\n drivingLatitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location && googlePlaceResult.geometry ? googlePlaceResult.geometry.location.lat() : 0,\n drivingLongitude: googlePlaceResult && googlePlaceResult.geometry && googlePlaceResult?.geometry?.location && googlePlaceResult.geometry ? googlePlaceResult.geometry.location.lng() : 0,\n }\n\n dispatch(UpdateProfilePin(pin));\n } else {\n handleAddressChange('');\n }\n }\n\n const handleAddressChange = (freeTextStreetAddress: string, googleStreetAddress: string = '') => {\n const saveAddress = googleStreetAddress ? googleStreetAddress : freeTextStreetAddress;\n setAddress(saveAddress);\n dispatch(UpdateProfileStreetAddress(saveAddress));\n } \n\n const handleCountryChange = (value: string, isFromGoogleLookup: boolean = false) => {\n setCountry(value);\n dispatch(UpdateProfileCountry({value: value, resetPin: false}));\n }\n \n const handleCityChange = (value: string, isFromGoogleLookup: boolean = false) => {\n setCity(value);\n dispatch(UpdateProfileCity({value: value, resetPin: false}));\n }\n\n const handlePostalCodeChange = (value: string) => {\n setPostalCode(value);\n dispatch(UpdateProfilePostalCode(value));\n }\n\n return (\n \n \n \n \n \n \n \n Where's your property located?\n \n \n \n \n Country/region\n handleCountryChange(event.target.value)} />\n \n \n City\n handleCityChange(event.target.value)} />\n \n \n Postal code\n handlePostalCodeChange(event.target.value)} />\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default WizardStep4Page;","import React, {useState, useEffect} from 'react';\nimport { Container, Row, Col, Card } from 'react-bootstrap';\nimport './wizard.step-5.scss';\nimport { RootState } from 'app/root-reducer';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { loadMapApi } from 'utils/GoogleMapsUtils';\nimport { Map } from 'components/map/map';\nimport { UpdateProfileLocation } from 'components/profile/profile.slice';\nimport { WizardCallback } from 'components/wizard/types';\n\nconst WizardStep5Page = ({callBack}: WizardCallback) => {\n const { pin } = useSelector((state: RootState) => state.profileSlice.profile);\n const [googleMapLoaded, setMapLoaded] = useState(false);\n const dispatch = useDispatch();\n \n const setNewCoordinates = (latLong: google.maps.LatLng) => {\n dispatch(UpdateProfileLocation( {latitude: latLong.lat(), longitude: latLong.lng()} ));\n }\n\n useEffect(() => {\n callBack({id: 5, completed: pin ? true : false, skip: false, displayFooterNavigation: true, displayNext: true});\n }, [callBack, pin]);\n\n useEffect(() => {\n const googleMapScript = loadMapApi();\n googleMapScript.addEventListener('load', function () {\n setMapLoaded(true);\n });\n }, [] );\n\n return (\n \n \n \n \n \n \n \n Pin the location of your property\n This is the location we'll show to guests on our site. Drag the pin so that it matches the exact location of your property.\n {(googleMapLoaded || typeof google !== 'undefined') && (\n \n )}\n \n \n \n \n \n )\n}\n\nexport default WizardStep5Page","import React, { useState } from 'react';\nimport { Accordion, Card , Container, Row, Col } from 'react-bootstrap';\nimport './checkbox.accordion.scss';\nimport { IFeature } from 'components/profile/types';\nimport { BsChevronDown, BsChevronUp } from \"react-icons/bs\";\n\ninterface AccordionProps {\n title: string;\n label?: string;\n fixedCount: number;\n content: IFeature[]; \n accordionCallBack: Function;\n features: IFeature[];\n}\n\nexport const CheckboxAccordion = ({ title, label, content, fixedCount, features, accordionCallBack }: AccordionProps) => {\nconst fixedItems = content.slice(0, fixedCount); \nconst accordionItems = content.slice(fixedCount); \nconst [isOpen, setIsOpen] = useState(false);\n\nconst toggleIcon = () => {\n setIsOpen(!isOpen); \n}\n\nconst addFeatures = (event : any, object: IFeature) => {\n accordionCallBack(event.target.checked, object);\n}\n\nconst loadCheckedState = (object: IFeature): boolean => {\n const copyArray = [...features]; \n const indexArray = copyArray.findIndex(x => x.id === object.id);\n return indexArray > -1; \n}\n\n return (\n \n
    {title.toUpperCase()}
    \n {label &&\n
    {label}
    \n }\n \n \n {\n fixedItems.map((object, index) => (\n (index % 2 === 0) &&\n
    \n \n
    \n )) \n }\n \n \n {fixedItems.map((object, index) => (\n (index % 2 !== 0) &&\n
    \n \n
    \n ))}\n \n
    \n \n {(content && content.length > 6) &&\n \n \n \n \n \n \n {accordionItems.map((object, index) => (\n (index % 2 === 0) &&\n
    \n \n
    \n \n ))}\n \n \n {accordionItems.map((object, index) => (\n (index % 2 !== 0 ) && \n
    \n \n
    \n ))}\n \n
    \n
    \n
    \n toggleIcon()} className=\"cursor-pointer accordion-button-icon accordion-collapse-button\" as={Card.Header} eventKey=\"0\"> \n {(!isOpen) && Show more }\n {(isOpen) && Show less } \n \n
    \n
    \n }\n
    \n )\n }","import React from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { CheckboxAccordion } from 'components/checkbox.accordion/checkbox.accordion';\nimport { featuresData } from 'app/config';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { IFeature } from 'components/profile/types';\nimport { UpdateProfileFeatures } from 'components/profile/profile.slice';\nimport './facilities.scss';\n\ninterface IProps {\n featureDataSectionName: string;\n labels?: string[];\n}\n\nexport const Facilities = ({featureDataSectionName, labels}:IProps) =>{\n const { features } = useSelector((state: RootState) => state.profileSlice.profile); \n const dispatch = useDispatch();\n const data = featuresData[featureDataSectionName];\n const accordionCallBack = (checked: boolean, facility: IFeature) => {\n let updatedFeatures = [];\n \n if(checked){ \n updatedFeatures = [...features, facility]\n } else {\n updatedFeatures = [...features];\n const index = updatedFeatures.findIndex(x => x.id === facility.id);\n if (index > -1) { \n updatedFeatures.splice(index, 1);\n }\n }\n dispatch(UpdateProfileFeatures(updatedFeatures));\n }\n\n return ( \n \n \n \n {\n Object.entries(data).map((child, i) => ( \n \n ))\n }\n \n \n
    \n
    \n )\n }","import React, { useEffect } from 'react';\nimport { Container, Row, Col, Card, Form } from 'react-bootstrap';\nimport { Facilities } from 'components/facilities/facilities';\nimport { WizardCallback } from 'components/wizard/types';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { FeatureTypeEnum } from 'components/profile/types';\n\nconst WizardStep6Page = ({callBack}: WizardCallback) => {\n const { features } = useSelector((state: RootState) => state.profileSlice.profile);\n \n useEffect(() => {\n const featuresCount = features.filter(x => x.type === FeatureTypeEnum.facility).length;\n callBack({id: 6, completed: true, skip: featuresCount > 0 ? false : true, displayFooterNavigation: true, displayNext: true});\n }, [callBack, features]);\n\n return (\n \n \n \n \n \n \n \n What facilities can guests use at your hotel? \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n \n export default WizardStep6Page\n \n","import React, { useState } from 'react';\nimport { Container, Row, Form } from 'react-bootstrap';\nimport './pill.text.input.scss';\nimport { BsFillPlusCircleFill, BsX } from \"react-icons/bs\";\n\ninterface IProps {\n title?: string;\n addCallBack: Function;\n removeCallBack: Function;\n changeCallBack: Function;\n items: string[];\n unique: boolean;\n message: string;\n}\n\nexport const PillTextInput = ({title, items, addCallBack, removeCallBack, changeCallBack, unique, message}:IProps) => {\n\n const [ newName, setNewName ] = useState(\"\");\n const onRemove = (name: string) => {\n removeCallBack(name);\n }\n\n const onChange = (value: string) => {\n if(!unique && value.endsWith(',')){\n return;\n }\n changeCallBack(value);\n setNewName(value);\n }\n\n const handleKeyPress = (event:KeyboardEvent) => {\n if((event.key === 'Enter' || event.key === ',') && unique){\n setNewName(\"\");\n addCallBack(newName);\n }\n }\n\n const addButtonClick = () => {\n setNewName(\"\");\n addCallBack(newName);\n }\n\n const cancelOnClick= () => {\n setNewName(\"\");\n }\n \n return (\n handleKeyPress(event)} onClick={() => cancelOnClick()}>\n \n \n {title &&\n {title}\n }\n onChange(event.target.value)}/>\n { (newName !== \"\") &&\n
    \n
    addButtonClick()}>\n \n
    \n
    addButtonClick()}>\n { (unique) &&\n {\"Add: \"} \n }\n {message}\n
    \n
    \n }\n
    \n
    \n \n
    \n { items &&\n items.map((item,index) =>
    {item} onRemove(item)}/>
    )\n }\n
    \n
    \n
    \n )\n}","import React, { useEffect, useState } from 'react'\nimport { Container, Row, Col, Card } from 'react-bootstrap';\nimport './wizard.step-7.scss';\nimport { WizardCallback } from 'components/wizard/types';\nimport { languages } from 'app/config';\nimport { CheckboxAccordion } from 'components/checkbox.accordion/checkbox.accordion';\nimport { IFeature } from 'components/profile/types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { UpdateProfileFeatures } from 'components/profile/profile.slice';\nimport { RootState } from 'app/root-reducer';\nimport { FeatureTypeEnum } from 'components/profile/types';\nimport { PillTextInput } from 'components/pill.text.input/pill.text.input';\n\nconst WizardStep7Page = ({callBack}: WizardCallback) => {\n\n const { features } = useSelector((state: RootState) => state.profileSlice.profile);\n const dispatch = useDispatch();\n const otherLanguages = features.filter(x => x.id === 0 && x.type === FeatureTypeEnum.language);\n const items = otherLanguages.map(x => x.name);\n const [ languageExists, setLanguageExists ] = useState(false);\n const [ message, setMessage ] = useState(\"\");\n \n useEffect(() => {\n const featuresCount = features.filter(x => x.type === FeatureTypeEnum.language).length;\n callBack({id: 7, completed: true, skip: featuresCount > 0 ? false : true, displayFooterNavigation: true, displayNext: true});\n }, [callBack, features]);\n \n const accordionCallBack = (checked: boolean, language: IFeature) => {\n let updatedFeatures = [];\n if(checked){\n updatedFeatures = [...features, language]\n } else {\n updatedFeatures = [...features];\n const index = updatedFeatures.findIndex(x => x.id === language.id);\n if (index > -1) { \n updatedFeatures.splice(index, 1);\n }\n }\n dispatch(UpdateProfileFeatures(updatedFeatures));\n }\n\n const languageCallBack = (name: string) => {\n addAdditionalLanguage(name);\n }\n\n const addAdditionalLanguage = (name: string) => {\n const addedLanguage: IFeature = {\n id: 0,\n type: FeatureTypeEnum.language,\n name: name,\n };\n const updatedFeatures = [...features, addedLanguage]\n dispatch(UpdateProfileFeatures(updatedFeatures));\n }\n\n const onRemove = (itemName: string) => {\n let updatedFeatures = [...features];\n const index = updatedFeatures.findIndex(x => x.id === 0 && x.type === FeatureTypeEnum.language && x.name === itemName);\n if (index > -1) { \n updatedFeatures.splice(index, 1);\n }\n dispatch(UpdateProfileFeatures(updatedFeatures));\n }\n\n const changeCallBack = (name: string) => {\n checkLanguageExists(name);\n }\n \n const checkLanguageExists = (value: string) =>{\n let updatedFeatures = [...features];\n\n const index = updatedFeatures.findIndex(x => x.id === 0 && x.type === FeatureTypeEnum.language && x.name.toLowerCase() === value.toLowerCase());\n const checkBoxIndex = languages.findIndex(x => x.name.toLowerCase() === value.toLowerCase());\n \n if (index > -1 || checkBoxIndex > -1) {\n setLanguageExists(true);\n if (index > -1) {\n setMessage(\"'\" + value + \"' already added\");\n } else {\n setMessage(\"'\" + value + \"' available in language list\");\n }\n } else {\n setLanguageExists(false);\n setMessage(value);\n }\n }\n \n return (\n \n \n \n \n \n \n \n\n What languages do you or your staff speak?\n
    \n SELECT LANGUAGES\n
    \n \n {\n \n } \n \n \n
    \n
    \n \n \n \n
    \n
    \n )\n}\n\nexport default WizardStep7Page\n","export enum IndeterminateCheckboxEnum {\n unchecked = 0,\n indeterminate = 1,\n checked = 2\n}","import React, { useEffect, useState } from 'react';\nimport { Container, Row, Col, Button } from 'react-bootstrap';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './show.more.scss';\n\ninterface IProps {\n label?: string;\n callback: () => void;\n show: boolean,\n children: React.ReactNode\n}\n\nexport const ShowMore = ({callback, label = '+ Add item', show = false, children}: IProps) => {\n const [showContent, setShowContent] = useState(show);\n\n useEffect(() => {\n setShowContent(show);\n }, [setShowContent, show]);\n\n const showMore = () => {\n setShowContent(true);\n callback();\n }\n\n return (\n \n \n \n {!showContent &&\n \n }\n {\n showContent && (\n children\n )\n } \n \n \n \n );\n}\n","import React, { FunctionComponent, useEffect, useState } from 'react';\nimport { Container, Row, Col, InputGroup, Dropdown } from 'react-bootstrap';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport 'react-popper/dist/index.umd';\nimport 'bootstrap/dist/js/bootstrap.bundle';\nimport {ITime} from '../../components/profile/types';\nimport './time.picker.scss';\n\ninterface IProps {\n label?: string;\n callback: (time: ITime) => void;\n time: ITime;\n}\n\nexport const TimePicker: FunctionComponent = ({callback, time = { hours: -1, minutes: -1 } }: IProps) => {\n const [checkInTime, setCheckInTime] = useState('Select time'); \n useEffect(() => {\n const getTimeString = (time: ITime) => {\n return padNumber(time.hours) + ':' + padNumber(time.minutes);\n }\n if (time.hours >= 0) {\n setCheckInTime(getTimeString(time));\n }\n\n }, [setCheckInTime, time]);\n\n const padNumber = (num: number) => {\n let numStr = num.toString();\n if (numStr.length < 2) {\n numStr = '0' + numStr;\n }\n return numStr;\n }\n\n const handleTime = (h: number, m: number) => {\n setCheckInTime(padNumber(h) + ':' + padNumber(m));\n let time = {} as ITime;\n time.hours = h;\n time.minutes = m;\n callback(time);\n }\n\n const createSelectOptions = () => {\n let items = [];\n let id = 1;\n for (let h = 0; h <= 23; h++) {\n for (let m = 0; m <= 30; m += 30) {\n items.push( handleTime(h, m)}>{padNumber(h)} : {padNumber(m)});\n id++;\n }\n }\n return items;\n\n }\n return (\n \n \n \n \n \n \n {checkInTime}\n \n \n {\n createSelectOptions()\n }\n \n \n \n \n \n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { Container, Row, Col, Button, ButtonGroup, Form } from 'react-bootstrap';\nimport './number.stepper.scss';\n\ninterface IProps {\n title?: string;\n callBack: (value:number) => void;\n initialCount?: number;\n min?: number;\n max?: number;\n className?: string;\n}\n\nexport const NumberStepper = ({title = '', callBack, initialCount = 0, min = 0, max = 9999, className = \"\"}:IProps) => {\n const [count, setCount] = useState(initialCount);\n\n useEffect(() => {\n callBack(count);\n }, [count, callBack]); \n\n const increment = () => {\n if (count < max) {\n setCount(count => count + 1);\n }\n }\n\n const decrement = () => {\n if (count > min) {\n setCount(count => count === 0 ? count : count - 1);\n }\n }\n\n const keyChange = (event : any) => {\n if (event.target.value !== '') {\n const num = Number(event.target.value);\n if (num >= min && num <= max) {\n setCount(num);\n }\n }\n else {\n setCount(min);\n } \n }\n return (\n \n \n \n {title}\n \n \n \n \n \n min ? count : ''} onChange={(e: any) => keyChange(e)} placeholder={min.toString()}/>\n \n \n \n \n \n \n )\n}","import React from 'react';\nimport { IconContext } from \"react-icons\";\nimport { BsStarFill, BsStar } from \"react-icons/bs\";\nimport './star.icon.scss';\n\ninterface IProps {\n color?: string;\n}\nexport const StarIcon = ({color = '#7987A1'}: IProps) => {\n \n return (\n \n
    \n {\n color === '#7987A1' &&\n \n }\n {\n color !== '#7987A1' &&\n \n }\n
    \n
    \n )\n}","import { StarIcon } from '../star.icon/star.icon';\nimport React from 'react';\n\ninterface IProps {\n index: number,\n rating: number,\n hoverRating: number,\n onMouseEnter: (index: number) => void,\n onMouseLeave: () => void,\n onSaveRating: (index: number) => void\n}\nexport const RatingIcon = ({index, rating, hoverRating, onMouseEnter, onMouseLeave, onSaveRating}: IProps) => {\n const fill = React.useMemo(() => {\n if(hoverRating >= index) {\n return '#FAD63D';\n } else if(!hoverRating && rating >= index) {\n return '#FAD63D';\n }\n }, [rating, hoverRating, index]);\n return (\n
    onMouseEnter(index)} onMouseLeave={() => onMouseLeave()} onClick={() => onSaveRating(index)} >\n \n
    \n )\n}","import { RatingIcon } from 'components/star.rating/features/rating.icon/rating.icon';\nimport React, { useEffect, useState } from 'react';\nimport './star.rating.scss';\n\ninterface IProps {\n starAmount?: number;\n starRating?: number;\n callBack: (rating: number) => void\n}\nexport const StarRating = ({starAmount = 5, starRating = 0, callBack}: IProps) => {\n const [rating, setRating] = React.useState(starRating);\n const [hoverRating, setHoverRating] = React.useState(0);\n const [amount, setAmount] = useState([]);\n\n useEffect(() => {\n for(let i: number = 1; i <= starAmount; i++) {\n setAmount(amount => [...amount, i]);\n }\n }, [starAmount]);\n\n useEffect(() => {\n callBack(rating);\n }, [callBack, rating]);\n\n const onMouseEnter = (index: number) => {\n setHoverRating(index);\n };\n const onMouseLeave = () => {\n setHoverRating(0);\n };\n const onSaveRating = (index: number) => {\n if (index === rating) { \n index = 0;\n }\n setRating(index);\n };\n\n return(\n
    \n {amount.map((index) => {\n return (\n \n )\n })}\n
    \n );\n}","import React, {useState, useEffect, useCallback} from 'react';\nimport { Container, Row, Col, Card, Form } from 'react-bootstrap';\nimport './wizard.step-8.scss';\nimport { RootState } from 'app/root-reducer';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { UpdateProfileCheckinTimeFrom, UpdateProfileCheckinTimeTo, UpdateProfileCheckoutTimeFrom, UpdateProfileCheckoutTimeTo, UpdateProfileContact, UpdateProfileRoomCount, UpdateProfileStarRating } from 'components/profile/profile.slice';\nimport { WizardCallback } from 'components/wizard/types';\nimport PhoneInput from \"react-phone-input-2\";\nimport 'react-phone-input-2/lib/bootstrap.css';\nimport { IContact, ContactTypeEnum, ITime } from '../../../../components/profile/types';\nimport { EmailInput } from \"components/email-input/email-input\";\nimport { ShowMore } from '../../../../components/show.more/show.more';\nimport { TimePicker } from '../../../../components/time.picker/time.picker';\nimport { NumberStepper } from '../../../../components/number.stepper/number.stepper';\nimport { StarRating } from '../../../../components/star.rating/star.rating';\n\nconst WizardStep8Page = ({callBack}: WizardCallback) => {\n const { contacts, checkinTimeFrom, checkinTimeTo, checkoutTimeFrom, checkoutTimeTo, roomCount, starRating } = useSelector((state: RootState) => state.profileSlice.profile);\n const dispatch = useDispatch();\n const getTelephone = (contactType: ContactTypeEnum) => {\n const existingContact = contacts.find(x => x.type === contactType);\n if (existingContact) {\n return existingContact.telephone;\n }\n return null;\n }\n const getCountryCode = (contactType: ContactTypeEnum) => {\n const existingContact = contacts.find(x => x.type === contactType);\n if (existingContact && existingContact.countryCode && parseInt(existingContact.countryCode) > 0) {\n return existingContact.countryCode;\n }\n return '';\n }\n const getEmail = () => {\n const existingContact = contacts.find(x => x.type === ContactTypeEnum.frontDesk);\n if (existingContact && existingContact.email) {\n return existingContact.email;\n }\n return '';\n }\n const getDialCode = (contactType: ContactTypeEnum) => {\n const existingContact = contacts.find(x => x.type === contactType);\n if (existingContact) {\n return existingContact.dialCode;\n }\n return null;\n }\n \n const [countryCode, setCountryCode] = useState(getCountryCode(ContactTypeEnum.frontDesk));\n const [reservationCountryCode] = useState(getCountryCode(ContactTypeEnum.reservation));\n const [telephone, setTelephone] = useState(getTelephone(ContactTypeEnum.frontDesk));\n const [reservationTelephone, setReservationTelephone] = useState(getTelephone(ContactTypeEnum.reservation));\n const [email, setEmail] = useState(getEmail());\n const [showReservation, setShowReservation] = useState(false);\n const [checkinTimeFromLocal, setCheckinTimeFromLocal] = useState(checkinTimeFrom);\n const [checkinTimeToLocal, setCheckinTimeToLocal] = useState(checkinTimeTo);\n const [checkoutTimeFromLocal, setCheckoutTimeFromLocal] = useState(checkoutTimeFrom);\n const [checkoutTimeToLocal, setCheckoutTimeToLocal] = useState(checkoutTimeTo);\n const [roomCountLocal, setRoomCountLocal] = useState(roomCount);\n const [rating, setRating] = useState(starRating);\n const [frontDeskDialCode, setFrontDeskDialCode] = useState(getDialCode(ContactTypeEnum.frontDesk));\n const [reservationDialCode, setReservationDialCode] = useState(getDialCode(ContactTypeEnum.reservation));\n\n const updatePhone = (cCode: string, phone: string, dialCode: string) => {\n const existingContact: IContact = contacts.find(x => x.type === ContactTypeEnum.frontDesk) as IContact;\n if (existingContact) {\n const contactCopy = {...existingContact, countryCode: cCode, dialCode: dialCode, telephone: phone};\n setTelephone(phone);\n setCountryCode(cCode);\n setFrontDeskDialCode(dialCode);\n dispatch(UpdateProfileContact(contactCopy));\n } \n else {\n const contact: IContact = { type: ContactTypeEnum.frontDesk, countryCode: cCode, dialCode: dialCode, telephone: phone};\n if (contact.telephone) {\n setTelephone(contact.telephone);\n setFrontDeskDialCode(contact.dialCode);\n }\n if (contact.countryCode) {\n setCountryCode(contact.countryCode);\n }\n dispatch(UpdateProfileContact(contact));\n }\n }\n\n const updateResPhone = (cCode: string, phone: string, dialCode: string) => {\n const existingContact: IContact = contacts.find(x => x.type === ContactTypeEnum.reservation) as IContact;\n if (existingContact) {\n const contactCopy = {...existingContact, countryCode: cCode, dialCode: dialCode, telephone: phone};\n setReservationTelephone(phone);\n setReservationDialCode(dialCode);\n dispatch(UpdateProfileContact(contactCopy));\n } \n else {\n const contact: IContact = {type: ContactTypeEnum.reservation, telephone: phone, dialCode: dialCode};\n if (contact.telephone) {\n setReservationTelephone(contact.telephone);\n setReservationDialCode(dialCode);\n \n }\n dispatch(UpdateProfileContact(contact));\n }\n }\n\n const updateEmail = (updateValue: string | boolean, name: string) => {\n const existingContact: IContact = contacts.find(x => x.type === ContactTypeEnum.frontDesk) as IContact;\n if (existingContact) {\n const contactCopy = {...existingContact, email: updateValue};\n dispatch(UpdateProfileContact(contactCopy));\n }\n else {\n const contact: IContact = {type: ContactTypeEnum.frontDesk, email: updateValue !== false ? updateValue.toString() : ''};\n setEmail(updateValue as string);\n dispatch(UpdateProfileContact(contact));\n }\n }\n\n const timePickerCallbackCheckinFrom = (time: ITime) => {\n dispatch(UpdateProfileCheckinTimeFrom(time));\n setCheckinTimeFromLocal(time);\n }\n \n const timePickerCallbackCheckinTo = (time: ITime) => {\n dispatch(UpdateProfileCheckinTimeTo(time));\n setCheckinTimeToLocal(time);\n }\n\n const timePickerCallbackCheckoutFrom = (time: ITime) => {\n dispatch(UpdateProfileCheckoutTimeFrom(time));\n setCheckoutTimeFromLocal(time);\n }\n \n const timePickerCallbackCheckoutTo = (time: ITime) => {\n dispatch(UpdateProfileCheckoutTimeTo(time));\n setCheckoutTimeToLocal(time);\n }\n\n const showRes = () => {\n setShowReservation(true);\n }\n\n const countCallback = useCallback((count: number) => {\n \n dispatch(UpdateProfileRoomCount(count));\n setRoomCountLocal(count);\n }, [dispatch]);\n \n const ratingCallback = useCallback((rating: number) => {\n dispatch(UpdateProfileStarRating(rating));\n setRating(rating);\n }, [dispatch]);\n\n const isPhoneValid = (phone: string | undefined, dialCode: string | null | undefined) => {\n return phone && dialCode && phone.length > dialCode?.length;\n }\n\n useEffect(() => {\n if (reservationTelephone) {\n setShowReservation(true);\n }\n }, [reservationTelephone] );\n\n useEffect(() => {\n const isCompleted = () => {\n const frontDeskContact: IContact = contacts.find(x => x.type === ContactTypeEnum.frontDesk) as IContact;\n const reservationContact: IContact = contacts.find(x => x.type === ContactTypeEnum.reservation) as IContact;\n if ((frontDeskContact && isPhoneValid(frontDeskContact?.telephone, frontDeskDialCode)) ||\n (reservationContact && isPhoneValid(reservationContact?.telephone, reservationDialCode))) { \n return true;\n }\n return false;\n }\n callBack({id: 8, completed: isCompleted(), skip: false, displayFooterNavigation: true, displayNext: true});\n }, [callBack, contacts, roomCount, frontDeskDialCode, reservationDialCode]);\n\n return (\n \n \n \n \n \n \n \n Property information\n FRONT DESK\n \n Telephone Number\n { if ('countryCode' in country) updatePhone(country.countryCode, telephone, country.dialCode); }}\n enableSearch={true}\n inputStyle={{ width: \"100%\" }}\n defaultMask=\".. ... ....\"\n countryCodeEditable={true}\n />\n \n \n Email address\n \n \n
    \n \n RESERVATION NUMBER\n\n Telephone Number\n { if ('countryCode' in country) updateResPhone(country.countryCode, telephone, country.dialCode); }}\n enableSearch={true}\n inputStyle={{ width: \"100%\" }}\n defaultMask=\".. ... ....\"\n countryCodeEditable={true}\n />\n \n
    \n CHECK IN\n \n \n \n \n From\n \n \n \n - \n \n \n Until\n \n \n \n \n \n CHECK OUT\n \n \n \n \n From\n \n \n \n - \n \n \n Until\n \n \n \n \n \n \n Number of rooms\n \n \n \n Star rating\n \n \n
    \n
    \n \n \n \n
    \n
    \n )\n}\n\nexport default WizardStep8Page","import React, { useState } from 'react';\nimport { Modal, Button, Form } from 'react-bootstrap';\nimport './accept.decline.modal.scss';\n\ninterface IProps {\n showModal?: boolean;\n title?: string;\n body?: string;\n declineButtonText?: string;\n acceptButtonText?: string;\n callBack: (outcome: boolean) => void;\n confirmationRequired?: boolean;\n confirmationLabel?: string;\n}\n\nexport const AcceptDeclineModal = ({title = '', showModal = false, body = '', callBack, declineButtonText = 'Close', acceptButtonText = 'Save changes', confirmationRequired = false, confirmationLabel = ''}: IProps) => {\n const [ confirmed, setConfirmed ] = useState(false);\n\n const acceptButtonClick = () => {\n setConfirmed(false);\n callBack(true);\n }\n\n const declineButtonClick = () => {\n setConfirmed(false);\n callBack(false);\n }\n\n return (\n declineButtonClick()}>\n \n {title}\n \n \n

    {body}

    \n {\n confirmationRequired &&\n
    \n setConfirmed(e.target.checked)} label={confirmationLabel} />*\n
    \n }\n

    \n
    \n \n \n \n \n
    \n )\n}","export const ItemTypes = {\n IMAGE: 'image',\n VIDEO: 'video'\n}\n\nexport interface DragItem {\n index: number;\n id: string;\n type: string;\n groupId: string;\n}\n","import React, { useRef, useState, useEffect} from 'react';\nimport { Image, OverlayTrigger, Tooltip, Spinner, Button, Form } from 'react-bootstrap';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { DragItem, ItemTypes } from '../types';\nimport { BsFillExclamationTriangleFill, BsPencil } from \"react-icons/bs\";\nimport { GrDrag } from \"react-icons/gr\";\nimport './dropzone.image.scss';\n\ninterface DropzoneImageIProps {\n src?: File;\n imageClass: string;\n moveImage: (dragIndex: number, hoverIndex: number) => void;\n id: string;\n index: number;\n imageSelectedCallBack: (selected: boolean, url: string, fileSizeWarning: boolean, file?: File) => void;\n imageSelected?: boolean;\n forceShowCheckbox?: boolean;\n url: string;\n hasFileSizeWarning: boolean;\n isImagesEditable: boolean;\n onEditClickCallback: (index: number) => void;\n imageDropCallback: () => void;\n}\n\nexport const DropZoneImage = ({url, id, index, src, imageClass, moveImage, imageSelectedCallBack, imageSelected = false, forceShowCheckbox = false, hasFileSizeWarning, \n onEditClickCallback, imageDropCallback, isImagesEditable = false}: DropzoneImageIProps) => {\n const ref = useRef(null);\n const [mouseEntered, setMouseEntered] = useState(forceShowCheckbox);\n const [{ handlerId }, drop] = useDrop({\n accept: ItemTypes.IMAGE,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId()\n }\n },\n hover(item: DragItem) {\n if (!ref.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n moveImage(dragIndex, hoverIndex);\n item.index = hoverIndex;\n }\n })\n\n const [{ isDragging }, drag] = useDrag({\n type: ItemTypes.IMAGE,\n item: () => {\n return { id, index };\n },\n collect: (monitor: any) => ({\n isDragging: monitor.isDragging()\n }),\n end: () => {\n imageDropCallback();\n }\n })\n\n drag(drop(ref));\n\n const onImageMouseEnter = () => {\n setMouseEntered(true);\n }\n\n const onImageMouseLeave = () => {\n if(!forceShowCheckbox) {\n setMouseEntered(false);\n }\n }\n\n const onImageSelected = (e: any) => {\n const selectionState: boolean = e.target.checked;\n imageSelectedCallBack(selectionState, url, hasFileSizeWarning, src);\n }\n\n const onEditClick = (e: any) => {\n onEditClickCallback(index);\n }\n\n useEffect(() => {\n setMouseEntered(forceShowCheckbox);\n }, [forceShowCheckbox]);\n\n return (\n \n {\n (url && url.length > 0) &&\n
    onImageMouseEnter()} onMouseLeave={() => onImageMouseLeave()} ref={ref} \n className={`${isDragging ? \"image-drag-active\" : (isImagesEditable ? \"image-drag-inactive-editable\" : \"image-drag-inactive\")}`} data-handler-id={handlerId}>\n
    \n
    \n
    \n {\n mouseEntered &&\n onImageSelected(e)} />\n }\n {\n hasFileSizeWarning &&\n \n low resolution\n \n }\n >\n \n \n }\n
    \n { isImagesEditable && mouseEntered && \n \n }\n { !isImagesEditable && mouseEntered &&\n
    \n \n
    \n }\n
    \n
    \n
    \n \n \n
    \n
    \n }\n {\n (!url) &&\n \n }\n
    \n )\n};","import React, { useRef, useState, useEffect} from 'react';\nimport { OverlayTrigger, Tooltip, Spinner, Button, Form } from 'react-bootstrap';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { DragItem, ItemTypes } from '../types';\nimport { BsFillExclamationTriangleFill, BsPencil } from \"react-icons/bs\";\nimport { GrDrag } from \"react-icons/gr\";\nimport './dropzone.video.scss';\nimport { MediaTypeEnum } from 'components/profile/types';\n\ninterface DropzoneVideoIProps {\n src?: File;\n imageClass: string;\n moveImage: (dragIndex: number, hoverIndex: number) => void;\n id: string;\n index: number;\n imageSelectedCallBack: (selected: boolean, url: string, fileSizeWarning: boolean, file?: File) => void;\n imageSelected?: boolean;\n forceShowCheckbox?: boolean;\n url: string;\n hasFileSizeWarning: boolean;\n isImagesEditable: boolean;\n mediaType: MediaTypeEnum;\n onEditClickCallback: (index: number) => void;\n imageDropCallback: () => void;\n}\n\nexport const DropZoneVideo = ({url, id, index, src, imageClass, moveImage, imageSelectedCallBack, imageSelected = false, forceShowCheckbox = false, hasFileSizeWarning, \n onEditClickCallback, imageDropCallback, isImagesEditable = false, mediaType}: DropzoneVideoIProps) => {\n const ref = useRef(null);\n const [mouseEntered, setMouseEntered] = useState(forceShowCheckbox);\n\n const [{ handlerId }, drop] = useDrop({\n accept: ItemTypes.VIDEO,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId()\n }\n },\n hover(item: DragItem) {\n if (!ref.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n moveImage(dragIndex, hoverIndex);\n item.index = hoverIndex;\n }\n })\n\n const [{ isDragging }, drag] = useDrag({\n type: ItemTypes.VIDEO,\n item: () => { \n return { id, index };\n },\n collect: (monitor: any) => ({\n isDragging: monitor.isDragging()\n }),\n end: () => {\n imageDropCallback();\n }\n })\n\n drag(drop(ref));\n\n const onImageMouseEnter = () => {\n setMouseEntered(true);\n }\n\n const onImageMouseLeave = () => {\n if(!forceShowCheckbox) {\n setMouseEntered(false);\n }\n }\n\n const onImageSelected = (e: any) => {\n const selectionState: boolean = e.target.checked;\n imageSelectedCallBack(selectionState, url, hasFileSizeWarning, src);\n }\n\n const onEditClick = (e: any) => {\n onEditClickCallback(index);\n }\n\n useEffect(() => {\n setMouseEntered(forceShowCheckbox);\n }, [forceShowCheckbox]);\n\n return (\n \n {\n (url && url.length > 0) &&\n
    onImageMouseEnter()} onMouseLeave={() => onImageMouseLeave()} ref={ref} \n className={`${isDragging ? \"image-drag-active\" : (isImagesEditable ? \"image-drag-inactive-editable\" : \"image-drag-inactive\")}`} data-handler-id={handlerId}>\n
    \n
    \n
    \n {\n mouseEntered &&\n onImageSelected(e)} />\n }\n {\n hasFileSizeWarning &&\n \n low resolution\n \n }\n >\n \n \n }\n
    \n { isImagesEditable && mouseEntered && \n \n }\n { !isImagesEditable && mouseEntered &&\n
    \n \n
    \n }\n
    \n
    \n
    \n { (mediaType === MediaTypeEnum.video) &&\n \n }\n {\n (mediaType === MediaTypeEnum.embedVideo) && \n \n }\n
    \n
    \n }\n {\n (!url) &&\n \n }\n
    \n )\n};","import React, { useRef, useState, useEffect} from 'react';\nimport { OverlayTrigger, Tooltip, Spinner, Button, Form } from 'react-bootstrap';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { DragItem, ItemTypes } from '../types';\nimport { BsImage, BsFillExclamationTriangleFill, BsPencil } from \"react-icons/bs\";\nimport { GrDrag } from \"react-icons/gr\";\nimport './dropzone.virtualTour.scss';\nimport { ITranslatableText } from 'components/profile/types';\n\ninterface DropzoneVirtualTourIProps {\n src?: File; \n id: string;\n label: ITranslatableText;\n index: number;\n mediaSelected?: boolean;\n forceShowCheckbox?: boolean;\n url: string;\n hasFileSizeWarning: boolean;\n isMediaEditable: boolean;\n moveMedia: (dragIndex: number, hoverIndex: number) => void;\n mediaSelectedCallBack: (selected: boolean, url: string, fileSizeWarning: boolean, file?: File) => void;\n onEditClickCallback: (index: number) => void;\n mediaDropCallback: () => void;\n}\n\nexport const DropZoneVirtualTour = ({url, id, label, index, src, mediaSelected = false, forceShowCheckbox = false, hasFileSizeWarning, \n isMediaEditable = false, moveMedia, mediaSelectedCallBack, onEditClickCallback, mediaDropCallback}: DropzoneVirtualTourIProps) => {\n const ref = useRef(null);\n const [mouseEntered, setMouseEntered] = useState(forceShowCheckbox);\n\n const [{ handlerId }, drop] = useDrop({\n accept: ItemTypes.VIDEO,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId()\n }\n },\n hover(item: DragItem) {\n if (!ref.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n moveMedia(dragIndex, hoverIndex);\n item.index = hoverIndex;\n }\n })\n\n const [{ isDragging }, drag] = useDrag({\n type: ItemTypes.VIDEO,\n item: () => { \n return { id, index };\n },\n collect: (monitor: any) => ({\n isDragging: monitor.isDragging()\n }),\n end: () => {\n mediaDropCallback();\n }\n })\n\n drag(drop(ref));\n\n const onMediaMouseEnter = () => {\n setMouseEntered(true);\n }\n\n const onMediaMouseLeave = () => {\n if(!forceShowCheckbox) {\n setMouseEntered(false);\n }\n }\n\n const onMediaSelected = (e: any) => {\n const selectionState: boolean = e.target.checked;\n mediaSelectedCallBack(selectionState, url, hasFileSizeWarning, src);\n }\n\n const onEditClick = (e: any) => {\n onEditClickCallback(index);\n }\n\n useEffect(() => {\n setMouseEntered(forceShowCheckbox);\n }, [forceShowCheckbox]);\n\n return (\n \n {\n (url && url.length > 0) &&\n
    onMediaMouseEnter()} onMouseLeave={() => onMediaMouseLeave()} ref={ref} \n className={`${isDragging ? \"image-drag-active\" : (isMediaEditable ? \"image-drag-inactive-editable\" : \"image-drag-inactive\")}`} data-handler-id={handlerId}>\n
    \n
    \n
    \n {\n mouseEntered &&\n onMediaSelected(e)} />\n }\n {\n hasFileSizeWarning &&\n \n low resolution\n \n }\n >\n \n \n }\n
    \n { isMediaEditable && mouseEntered && \n \n }\n { !isMediaEditable && mouseEntered &&\n
    \n \n
    \n }\n
    \n
    \n
    \n \n
    {label.enText}
    \n
    \n
    \n }\n {\n (!url) &&\n \n }\n
    \n )\n};","import React, { useRef, useState } from 'react';\nimport { Tab, Nav, Form, Button } from 'react-bootstrap';\nimport { languageDictionary } from 'app/config';\nimport { ITranslatableText } from 'components/profile/types';\nimport _ from 'lodash';\nimport './translatable.text.editor.scss';\nimport { BsChevronRight, BsChevronLeft } from 'react-icons/bs';\nimport { MdLens } from 'react-icons/md';\nimport { useEffect } from 'react';\n\ninterface ITranslatableTextEditor {\n enhanced: boolean;\n size: number;\n translatableText: ITranslatableText;\n setTranslationText(translateableText: ITranslatableText, languageCode: string): void;\n availableLanguages: string[];\n applyWordCount: boolean;\n useMultiLineTextArea: boolean;\n }\n\nexport const TranslatableTextEditor = ({setTranslationText, enhanced, size, translatableText, availableLanguages, applyWordCount, useMultiLineTextArea}: ITranslatableTextEditor) => {\n const getWordCount = (text: string) => {\n return text ? text.trim().split(' ').length : 0;\n }\n const [ currentLanguageCode, setCurrentLanguageCode ] = useState(\"en\");\n const [ showNavButtons, setShowNavButtons ] = useState(false);\n const languageNavElement = useRef(null);\n const [ languageCodes, setLanguageCodes ] = useState(availableLanguages);\n const [ wordCount, setWordCount ] = useState(getWordCount(translatableText?.enText));\n\n useEffect(() => {\n setLanguageCodes(availableLanguages);\n }, [availableLanguages]);\n \n const taText_onChange = (e: any, languageCode: string) => {\n let copy = _.cloneDeep(translatableText);\n if (copy) {\n if (languageCode === 'en') {\n copy.enText = e.target.value;\n setWordCount(getWordCount(copy.enText));\n } else {\n copy.translations[languageCode] = e.target.value;\n }\n setTranslationText(copy, currentLanguageCode);\n }\n\n setTranslationText(copy, currentLanguageCode);\n }\n\n const getLanguageCodeHasValue = (languageCode: string): boolean => {\n if (languageCode === \"en\") {\n return translatableText?.enText?.length > 0;\n } else {\n let translation = translatableText?.translations[languageCode];\n if (translation) {\n return translation.length > 0;\n } else {\n return false;\n }\n }\n }\n\n const scrollNavbar = (goForward: boolean) => {\n if (languageNavElement.current !== null) {\n if (goForward) {\n languageNavElement.current.scrollLeft += 150;\n } else {\n languageNavElement.current.scrollLeft -= 150;\n }\n }\n }\n\n useEffect(() => {\n if (languageNavElement.current && languageCodes.length > 1) {\n const hasOverflow = languageNavElement.current.offsetWidth < languageNavElement.current.scrollWidth;\n setShowNavButtons(hasOverflow);\n }\n }, [languageCodes]);\n\n return (\n \n \n { (enhanced) &&\n
    \n {\n showNavButtons &&\n \n }\n \n {showNavButtons &&\n \n }\n
    \n }\n \n {languageCodes.map((languageCode) => (\n (languageDictionary[languageCode]) &&\n \n {useMultiLineTextArea && \n taText_onChange(e, languageCode)}/>\n }\n {!useMultiLineTextArea && \n taText_onChange(e, languageCode)}/>\n }\n \n \n )\n )}\n \n
    \n {\n (applyWordCount && wordCount > 200 && currentLanguageCode === \"en\") &&\n {wordCount - 200} words over limit\n }\n {\n (applyWordCount && wordCount <= 200 && currentLanguageCode === \"en\") && \n Word Count: {wordCount} of 200\n }\n
    \n )\n}","import React, { useCallback, useState, useEffect } from 'react';\nimport { Modal, Button, Container, Row, Col, Spinner, Form } from 'react-bootstrap';\nimport './image.edit.modal.scss';\nimport { IMediaItem, ITranslatableText, IDeleteMediaPayload, MediaTypeEnum, IUpdateMediaPayload} from 'components/profile/types';\nimport { BsChevronRight, BsChevronLeft, BsTrash } from 'react-icons/bs';\nimport { TranslatableTextEditor } from 'components/translatable.text.editor/translatable.text.editor';\nimport _ from 'lodash';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport { useAppDispatch } from 'app/store';\nimport { updateMedia, deleteMedia, UpdateMedia_Reducer, isMediaComplete } from 'components/profile/mediaitem/mediaitem.slice';\nimport { updateProfileFromStore, UpdateSectionCompleteWithValue} from 'components/profile/profile.slice';\nimport { ProfileFormPageEnum } from 'pages/profile-form/profile.form.types';\n\ninterface IProps {\n showModal?: boolean;\n profileName?: string;\n closeCallBack: () => void;\n images: IMediaItem[];\n currentImageIndex: number;\n isEnhanced: boolean;\n languageCodes: string[];\n deleteCallback: (newIndex: number) => void;\n saveCallback: (newImages: IMediaItem[], newImageIndex: number) => void;\n}\n\nexport const ImageEditModal = ({profileName, showModal, closeCallBack, images, currentImageIndex, isEnhanced, languageCodes, deleteCallback, saveCallback}: IProps) => {\n const [ imagesLocal, setImagesLocal ] = useState(images);\n const [ currentImageIndexLocal, setCurrentImageIndexLocal ] = useState(currentImageIndex);\n const [ isImageLoaded, setIsImageLoaded ] = useState(false);\n const [ showDeleteModal, setShowDeleteModal ] = useState(false);\n const [ showCloseConfirmModal, setShowCloseConfirmModal ] = useState(false);\n const [ initialJson, setInitialJson ] = useState();\n const dispatch = useAppDispatch();\n\n /*********** When you first open the modal (when images is changed):\n - (showModal opens the modal)\n - ImagesLocal is created from images\n - currentImageIndexLocal is set from currentImageIndex\n ************/\n useEffect(() => {\n setImagesLocal(images);\n setCurrentImageIndexLocal(currentImageIndex);\n }, [images, showModal, currentImageIndex]);\n \n useEffect(() => {\n //When you change image within the modal (when currentImageIndexLocal is changed) set current image from imagesLocal.\n setIsImageLoaded(false);\n }, [currentImageIndexLocal]);\n\n useEffect(() => {\n if (!initialJson && images && images.length > 0) {\n setInitialJson(JSON.stringify(images));\n }\n }, [images, initialJson])\n\n const closeButtonClick = () => {\n const isChanges = initialJson !== JSON.stringify(imagesLocal);\n setShowCloseConfirmModal(isChanges);\n if (!isChanges) {\n closeCallBack();\n }\n }\n\n const closeConfirmCallBack = useCallback((leavePage: boolean) => {\n setShowCloseConfirmModal(false);\n if (leavePage) {\n closeCallBack();\n }\n }, [closeCallBack]);\n\n const formatFileSize = (fileSize: number): string => {\n if (fileSize > 0) {\n if (fileSize < 1000) {\n return fileSize + ' KB';\n }\n return (fileSize / 1000) + ' MB';\n }\n return '';\n }\n \n const formatImageResolution = (width: number, height: number): string => {\n if (width > 0 && height > 0) {\n const megapixels: number = (width * height) / 1000000;\n return `${width} x ${height}px (${megapixels.toFixed(1)} MP)`;\n }\n return '';\n }\n\n const nextButtonClick = () => {\n if (currentImageIndexLocal < images?.length) {\n setCurrentImageIndexLocal(index => ++index);\n }\n }\n\n const backButtonClick = () => {\n if (currentImageIndexLocal > 0) {\n setCurrentImageIndexLocal(index => --index);\n }\n }\n\n const credit_onChange = (credit: string) => {\n const imageCollection = _.cloneDeep(imagesLocal);\n imageCollection[currentImageIndexLocal].credit = credit;\n setImagesLocal(imageCollection);\n } \n\n const onDeleteClick = () => {\n setShowDeleteModal(true);\n }\n\n const deleteImagesCallBack = useCallback((deleteImages: boolean) => {\n setShowDeleteModal(false);\n if (deleteImages) {\n let mediaItems: IMediaItem[] = _.cloneDeep(imagesLocal);\n let indexTemp = currentImageIndexLocal;\n if (currentImageIndexLocal === (imagesLocal.length - 1) && currentImageIndexLocal > 0) {\n indexTemp--;\n setCurrentImageIndexLocal(indexTemp);\n deleteCallback(indexTemp); //Call parent (eg. Dropzone.tsx) to reset the current image index.\n }\n mediaItems.splice(currentImageIndexLocal, 1);\n setImagesLocal(mediaItems);\n const payload: IDeleteMediaPayload = { mediaItems: [imagesLocal[currentImageIndexLocal]], showToast: true, mediaType: MediaTypeEnum.image };\n \n const isCompleteBefore = isMediaComplete(ProfileFormPageEnum.media)\n Promise.all([\n dispatch(deleteMedia(payload))\n ]).then(() => {\n const isCompleteAfter = isMediaComplete(ProfileFormPageEnum.media);\n if (isCompleteBefore && !isCompleteAfter) {\n Promise.all([\n dispatch(UpdateSectionCompleteWithValue({ pageId: ProfileFormPageEnum.media, value: false })),\n dispatch(updateProfileFromStore())\n ])\n }\n })\n \n\n const updatePayload : IUpdateMediaPayload = {mediaItems: mediaItems, mediaType: MediaTypeEnum.image }\n dispatch(UpdateMedia_Reducer(updatePayload));\n if (mediaItems?.length === 0) {\n closeCallBack();\n }\n else {\n setIsImageLoaded(true);\n } \n }\n }, [dispatch, imagesLocal, currentImageIndexLocal, deleteCallback, closeCallBack]);\n \n const setTranslatableTitleCallback = useCallback((translatableText: ITranslatableText) => {\n const imageCollection = _.cloneDeep(imagesLocal);\n imageCollection[currentImageIndexLocal].label = translatableText;\n setImagesLocal(imageCollection);\n }, [imagesLocal, currentImageIndexLocal]);\n\n const setTranslatableDescriptionCallback = useCallback((translatableText: ITranslatableText) => {\n const imageCollection = _.cloneDeep(imagesLocal);\n imageCollection[currentImageIndexLocal].description = translatableText;\n setImagesLocal(imageCollection);\n }, [imagesLocal, currentImageIndexLocal]);\n\n const onSaveClick = () => {\n //Calls UpdateProfileImages to save Media (label, description and credit en text and translation are saved on the MediaItem document) AND the profile (label/description is dependent on profile.availableLanguages).\n dispatch(updateMedia(imagesLocal));\n setInitialJson(JSON.stringify(imagesLocal));\n saveCallback(imagesLocal, currentImageIndexLocal);\n }\n\n return (\n closeButtonClick()} className=\"image-edit-modal\" animation={false}>\n \n \n \n \n 1 ? \"these images\" : \"this image\"} will be lost.`} declineButtonText=\"Stay on page\" acceptButtonText=\"Leave page\" />\n
    \n {profileName}
    \n Image {currentImageIndexLocal + 1} of {imagesLocal?.length}\n
    \n
    \n {/* */}\n \n
    \n \n
    \n
    \n
    \n \n \n \n \n \n \n { images?.length > 1 && currentImageIndexLocal > 0 && isImageLoaded &&\n \n }\n \n \n \"\" setIsImageLoaded(true)} />\n {!isImageLoaded &&\n \n }\n \n \n { currentImageIndexLocal < (images?.length - 1) && isImageLoaded &&\n \n }\n \n \n \n \n { isImageLoaded &&\n
    \n {/* */}\n \n \n
    \n }\n \n
    \n \n \n {isImageLoaded &&\n <>\n \n \n Resolution:\n {formatImageResolution(imagesLocal[currentImageIndexLocal]?.width, imagesLocal[currentImageIndexLocal]?.height)}\n \n \n File-size:\n {formatFileSize(imagesLocal[currentImageIndexLocal]?.fileSizeKb)}\n \n \n File name:\n {imagesLocal[currentImageIndexLocal]?.originalFileName}\n \n \n \n Title *\n \n \n \n Photographer credit *\n credit_onChange(e.target.value)} id=\"credit-input\" type=\"text\" />\n \n \n Description\n \n \n \n }\n \n
    \n
    \n
    \n
    \n )\n}","import React, { useCallback, useEffect, useState } from 'react';\nimport { Container, Row, Col, Form, Accordion, Card, Button, Spinner } from 'react-bootstrap';\nimport './dropzone.scss';\nimport { DropZoneImage } from './features/image/dropzone.image';\nimport { DropZoneVideo } from './features/video/dropzone.video';\nimport { DropZoneVirtualTour } from './features/virtualTour/dropzone.virtualTour';\nimport { ImageEditModal } from './features/image.edit.modal/image.edit.modal';\nimport update from 'immutability-helper';\nimport _ from 'lodash';\nimport { DocumentTypeEnum, DocumentVisibilityEnum, EntityTypeEnum, IMediaItem, MediaTypeEnum } from 'components/profile/types';\nimport { BsChevronDown, BsChevronUp } from 'react-icons/bs';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport { Dictionary } from '@reduxjs/toolkit';\nimport { pluralise } from 'utils/General';\n\ninterface DropzoneIProps {\n uploadCallBack: (items: IMediaItem[], invalidFiles: string[]) => void;\n itemDropCallback?: (items: IMediaItem[]) => void;\n modalPopupCallback?: (value: Boolean) => void;\n saveCallback?: () => void;\n selectCallback?: (mediaItems: IMediaItem[]) => void;\n invalidFilesCallback?: (invalidFiles: string[]) => void;\n profileName?: string\n dropMediaItems: IMediaItem[];\n itemLimit?: number;\n invalids?: string[];\n isEnhanced: boolean;\n isItemsEditable?: boolean;\n languageCodes: string[];\n acceptedFileTypes?: string[];\n addButtonText: string; \n mediaType: MediaTypeEnum;\n mediaCount: number;\n documentType?: DocumentTypeEnum;\n confirmPermission?: boolean;\n }\n\nconst DropZone = ({uploadCallBack, itemDropCallback, saveCallback, modalPopupCallback, selectCallback, invalidFilesCallback, \n dropMediaItems, itemLimit = 30, invalids = [], acceptedFileTypes, addButtonText, profileName, isEnhanced, mediaType, \n isItemsEditable = false, languageCodes, mediaCount, documentType, confirmPermission = true}: DropzoneIProps) => {\n\n const getMediaName = (isPlural: boolean): string => {\n const mediaName = mediaType === MediaTypeEnum.image ? \"image\" : mediaType === MediaTypeEnum.documentation ? \"document\" : \"video\";\n return pluralise(mediaName, isPlural);\n }\n\n const [ showEditModal, setShowEditModal ] = useState(false);\n const [ currentItemIndex, setCurrentItemIndex ] = useState(0);\n const [ mediaItems, setMediaItems ] = useState(dropMediaItems);\n const [ invalidFiles, setInvalidFiles ] = useState(invalids);\n const [ hasDragOver, setHasDragOver ] = useState(false);\n const [ hasSelectedItems, setHasSelectedItems ] = useState(false);\n const [ showingMoreItems, setShowingMoreItems ] = useState(false);\n const [ showUsagePolicy, setShowUsagePolicy ] = useState(false);\n const [ usagePolicyFiles, setUsagePolicyFiles ] = useState([]);\n const [ confirmationLabel, setConfirmationLabel ] = useState(`I confirm we have permission to use these ${getMediaName(true)}.`);\n const [ itemDisplayAmount, setItemDisplayAmount] = useState(4); //The number of media items that will display in the dropzone without a 'Show more' button appearing.\n const [ permissionConfirmationBody ] = useState(`Before you upload ${getMediaName(true)}, please confirm you have permission to use them.`);\n const [ originalSequenceNumbers, setOriginalSequenceNumbers ] = useState>();\n\n const isMediaLoaded = useCallback(() => {\n //mediaItems comes from the local state of MediaPage. But setting local state is async and we don't know when it is finished updating.\n //So initially mediaItems will be empty, then populate. This was causing an unwanted re-render.\n //mediaCount is set directly from the mediaItems on MediaPage once mediaItems have loaded (without going via any local state).\n //So mediaCount can be trusted and used to compare with mediaItems.\n //TODO: we could into something like this: https://github.com/the-road-to-learn-react/use-state-with-callback#usage\n return mediaCount === mediaItems?.length;\n }, [mediaCount, mediaItems])\n\n //useEffect: set local mediaItems from dropMediaItems passed from the parent component (ultimately from the API)\n useEffect(() => {\n if (dropMediaItems?.length === mediaCount) {\n setMediaItems(dropMediaItems);\n //If originalSequenceNumbers has not been set, set it from dropMediaItems (from the DB).\n setOriginalSequenceNumbers(items => {\n const isNewSavedSequence = !dropMediaItems.find(x => x.isChanged);\n return !items || isNewSavedSequence ? Object.assign({}, ...dropMediaItems.map((x) => ({[x.id]: x.sequence}))) : items;\n })\n }\n }, [dropMediaItems, mediaCount]);\n\n //useEffect: Set local invalidFiles from invalids passed from the parent component.\n useEffect(() => {\n if (isMediaLoaded()) {\n setInvalidFiles(invalids);\n }\n }, [invalids, isMediaLoaded]);\n\n //useEffect: update the show more component when media are added/removed.\n useEffect(() => {\n if (isMediaLoaded()) {\n const forceShowCheckbox = (): boolean => {\n const anyItemSetToTrue: IMediaItem[] = mediaItems?.filter(x => x.isChecked);\n if (anyItemSetToTrue?.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n \n if (mediaItems?.length <= 4 && itemDisplayAmount !== 4 && showingMoreItems) {\n setItemDisplayAmount(4);\n setShowingMoreItems(false);\n }\n \n const isShowCheckbox = forceShowCheckbox();\n if (isShowCheckbox !== hasSelectedItems) {\n setHasSelectedItems(forceShowCheckbox());\n }\n }\n \n }, [mediaItems, showingMoreItems, itemDisplayAmount, isMediaLoaded, hasSelectedItems]);\n\n const dragOver = (e: any) => {\n if (mediaType !== MediaTypeEnum.virtualTour) {\n e.stopPropagation();\n e.preventDefault();\n if (e.dataTransfer.items[0].kind === 'file') {\n setHasDragOver(true);\n }\n }\n }\n \n const dragEnter = (e: any) => {\n if (mediaType !== MediaTypeEnum.virtualTour) {\n e.preventDefault();\n }\n }\n \n const dragLeave = (e: any) => {\n if (mediaType !== MediaTypeEnum.virtualTour) {\n e.preventDefault();\n if (e.dataTransfer.items[0].kind === 'file') {\n setHasDragOver(false);\n } \n }\n }\n\n const dragEnd = (e: any) => {\n if (mediaType !== MediaTypeEnum.virtualTour) {\n e.preventDefault();\n setHasDragOver(false);\n }\n }\n \n const fileDrop = (e: any) => {\n if (mediaType !== MediaTypeEnum.virtualTour) {\n e.stopPropagation();\n e.preventDefault();\n if (mediaItems?.length === itemLimit) {\n if (e.dataTransfer.items[0].kind === 'file') {\n setHasDragOver(false);\n }\n return;\n }\n const files: File[] = Array.from(e.dataTransfer.files);\n if (files.length) {\n setConfirmationLabel(files.length > 1 ? `I confirm we have permission to use these ${getMediaName(true)}.` : \n `I confirm we have permission to use this ${getMediaName(false)}.`);\n if (confirmPermission) {\n setShowUsagePolicy(true);\n setUsagePolicyFiles(files);\n }\n else {\n handleFiles(files);\n }\n }\n }\n }\n\n const handleFiles = useCallback((files: File[]) => {\n const validateFile = (file: File) => {\n return !acceptedFileTypes || acceptedFileTypes.indexOf(file.type) !== -1;\n }\n\n let mediaItemsTemp: IMediaItem[] = [];\n let invalidFileTemp: string[] = invalidFiles;\n let sequenceNumber = mediaItems.length;\n for (let i = 0; i < files.length; i++) {\n if (validateFile(files[i])) {\n mediaItemsTemp.push({file:files[i], isChecked: false, url: '', hasFileSizeWarning: false, id: '', filePath: '', \n label: {enText: '', translations: {}, machineTranslations: {}}, description: {enText: '', translations: {}, machineTranslations: {}}, \n profileId: '', entityType: EntityTypeEnum.media, azureContainerName: '', mediaType: mediaType, credit: '', documentType: documentType ? documentType : DocumentTypeEnum.covidNotice,\n parentId: '', fileSizeKb: 0, width: 0, height: 0, originalFileName: '', sequence: sequenceNumber, isChanged: false,\n visibility: DocumentVisibilityEnum.publicAndTrade});\n sequenceNumber++;\n } else {\n const supportedValidFilesMessage = `is not a supported file type. Upload files ending in ${mediaType === MediaTypeEnum.image ? \".jpg, .png.\" : \"webm, mp4, mov\"}`;\n invalidFileTemp.push(files[i].name + supportedValidFilesMessage);\n }\n }\n if (invalidFileTemp.length > 0) {\n if (invalidFilesCallback) {\n invalidFilesCallback(invalidFileTemp);\n }\n }\n if (mediaItemsTemp.length > 0) {\n const newArray = mediaItems.concat(mediaItemsTemp);\n setMediaItems(newArray);\n uploadCallBack(newArray, invalidFileTemp);\n }\n \n }, [acceptedFileTypes, mediaType, mediaItems, invalidFiles, documentType, uploadCallBack, invalidFilesCallback])\n\n const acceptUsagePolicyCallback = useCallback((isAccepted: boolean) => {\n setShowUsagePolicy(false);\n if (isAccepted) {\n handleFiles(usagePolicyFiles);\n }\n setUsagePolicyFiles([]);\n setHasDragOver(false);\n }, [handleFiles, usagePolicyFiles])\n\n const handleChange = (filesInput: FileList) => {\n const files: File[] = Array.from(filesInput);\n if (mediaType === MediaTypeEnum.documentation) {\n handleFiles(files);\n }\n else if (mediaType !== MediaTypeEnum.virtualTour) {\n if (files.length && confirmPermission) { \n setConfirmationLabel(files.length > 1 ? `I confirm we have permission to use these ${mediaType === MediaTypeEnum.image ? \"images\" : \"videos\"}.` : \n `I confirm we have permission to use this ${mediaType === MediaTypeEnum.image ? \"image\" : \"video\"}.`); \n setShowUsagePolicy(true);\n setUsagePolicyFiles(files);\n }\n else {\n handleFiles(files);\n setHasDragOver(false);\n }\n }\n }\n\n const moveItem = useCallback((dragIndex: number, hoverIndex: number) => {\n const dragItem = mediaItems[dragIndex];\n setMediaItems(\n update(mediaItems, {\n $splice: [\n [dragIndex, 1],\n [hoverIndex, 0, dragItem],\n ],\n }),\n )\n }, [mediaItems])\n\n const itemDrop = useCallback(() => {\n let mediaItemsCopy: IMediaItem[] = _.cloneDeep(mediaItems);\n for (let i = 0; i < mediaItemsCopy.length; i++) {\n mediaItemsCopy[i].sequence = i;\n if (originalSequenceNumbers && mediaItemsCopy[i].sequence !== originalSequenceNumbers[mediaItemsCopy[i].id]) {\n mediaItemsCopy[i].isChanged = true;\n }\n else {\n mediaItemsCopy[i].isChanged = false;\n }\n }\n setMediaItems(mediaItemsCopy);\n if (itemDropCallback) {\n itemDropCallback(mediaItemsCopy);\n }\n }, [mediaItems, itemDropCallback, originalSequenceNumbers]);\n\n const onItemSelected = (isChecked: boolean, url: string) => {\n const itemCollection: IMediaItem[] = _.cloneDeep(mediaItems);\n const index = itemCollection.findIndex(x => x.url === url);\n itemCollection[index].isChecked = isChecked;\n setMediaItems(itemCollection);\n if (selectCallback) {\n selectCallback(itemCollection);\n }\n }\n\n const onEditClickCallback = (itemIndex: number) => {\n setCurrentItemIndex(itemIndex);\n setShowEditModal(true);\n }\n \n const onEditVirtualTourClickCallback = (itemIndex: number) => {\n setCurrentItemIndex(itemIndex); \n }\n\n const closeCallBack = () => {\n setShowEditModal(false);\n }\n\n const deleteCallback = (newIndex: number) => {\n setCurrentItemIndex(newIndex);\n }\n\n const saveCallbackLocal = (newItems: IMediaItem[], newItemIndex: number) => {\n setMediaItems(newItems);\n setCurrentItemIndex(newItemIndex);\n if (saveCallback) {\n saveCallback();\n }\n }\n\n const openModalPopup = useCallback(() => {\n if (modalPopupCallback) {\n modalPopupCallback(true)\n }\n }, [modalPopupCallback]); \n\n const accordianToggle = () => {\n if (showingMoreItems){\n setItemDisplayAmount(4);\n } else {\n if (mediaItems?.length >= 5){\n setItemDisplayAmount(5);\n } else {\n setItemDisplayAmount(4);\n } \n }\n setShowingMoreItems(!showingMoreItems); \n }\n\n const fileInputOnClick = (e: any) => {\n //Clear the existing file input value so that if they browse for the same file again (after clicking cancel the first time) the onChange event handler for the file input fires. \n //From this example: https://newbedev.com/html-input-file-selection-event-not-firing-upon-selecting-the-same-file\n e.target.value = '';\n }\n\n const renderAddItemsButton = () => {\n return (\n
    \n
    \n \n fileInputOnClick(e)}\n onChange={(e: any) => handleChange(e.target.files)} multiple={true}>\n {addButtonText}\n \n
    \n
    \n

    or drag to upload

    \n
    \n
    \n )\n }\n\n const renderVideoDropZone = (item: IMediaItem, index: number) => {\n return (\n \n )\n }\n\n const renderImageDropZone = (item: IMediaItem, index: number) => {\n return (\n \n )\n }\n\n const renderVirtualTourDropzone = (item: IMediaItem, index: number) => {\n return (\n \n )\n }\n\n return (\n \n
    0 && mediaItems?.length < 30)) ? \"dashed-border-interact\" : \"\"} \n ${hasDragOver && mediaItems?.length < 30 ? \"dropzone-interact-background\" : \"\"}`}\n onDragOver={dragOver}\n onDragEnter={dragEnter}\n onDragLeave={dragLeave}\n onDragEnd={dragEnd}\n onDrop={fileDrop}>\n {\n (mediaType === MediaTypeEnum.virtualTour) && (dropMediaItems.length === 0) &&\n \n \n \n \n \n \n \n }\n {\n (!hasDragOver && mediaItems?.length === 0) && (mediaType !== MediaTypeEnum.virtualTour) &&\n \n \n \n \n handleChange(e.target.files)} multiple={true}>\n {addButtonText}\n \n \n \n \n \n

    or drop files to upload

    \n \n
    \n { acceptedFileTypes &&\n \n \n

    Supported file types {acceptedFileTypes.map((filetype, index) => .{filetype.split(\"/\")[1].toUpperCase()} )}

    \n \n
    \n }\n
    \n }\n {\n (hasDragOver && mediaItems?.length >= 0 && mediaItems?.length < itemLimit) && (mediaType !== MediaTypeEnum.virtualTour) &&\n \n \n \n

    drop files to upload

    \n \n
    \n
    \n }\n {\n (hasDragOver && mediaItems?.length === itemLimit) &&\n \n \n \n

    You can upload a maximum of {itemLimit} {mediaType}

    \n \n
    \n
    \n }\n {\n (!hasDragOver && mediaItems?.length > 0 && mediaItems?.length <= itemLimit && mediaType !== MediaTypeEnum.documentation) &&\n \n
    \n
    \n {(mediaType === MediaTypeEnum.video) && \n mediaItems?.slice(0, itemDisplayAmount).map((mediaItem, index) =>
    \n {renderVideoDropZone(mediaItem, index)}\n
    )\n }\n {(mediaType === MediaTypeEnum.image) &&\n mediaItems?.slice(0, itemDisplayAmount).map((mediaItem, index) =>
    \n {renderImageDropZone(mediaItem, index)}
    )\n }\n {(mediaType === MediaTypeEnum.virtualTour) &&\n mediaItems?.slice(0, itemDisplayAmount).map((mediaItem, index) =>
    \n {renderVirtualTourDropzone(mediaItem, index)}
    )\n }\n\n { !showingMoreItems && (mediaType !== MediaTypeEnum.virtualTour) &&\n renderAddItemsButton() \n }\n { !showingMoreItems && (mediaType === MediaTypeEnum.virtualTour) &&\n
    \n
    \n \n
    \n
    \n }\n \n
    \n {\n mediaItems?.length >= itemDisplayAmount && mediaItems?.length > 4 &&\n \n \n \n \n
    \n {mediaItems?.map((mediaItem, index) => index >= itemDisplayAmount ? \n
    \n {(mediaType === MediaTypeEnum.video) && \n renderVideoDropZone(mediaItem, index)\n }\n {(mediaType === MediaTypeEnum.image) &&\n renderImageDropZone(mediaItem, index)\n }\n {(mediaType === MediaTypeEnum.virtualTour) &&\n renderVirtualTourDropzone(mediaItem, index)\n }\n
    \n : \n null)} \n {\n mediaItems?.length >= itemDisplayAmount && (mediaType === MediaTypeEnum.virtualTour || mediaType === MediaTypeEnum.image) &&\n renderAddItemsButton()\n }\n { (mediaType === MediaTypeEnum.virtualTour) &&\n
    \n
    \n \n
    \n
    \n }\n
    \n
    \n
    \n accordianToggle()} className=\"margin-top-none cursor-pointer\" as={Card.Header} eventKey=\"0\">\n {(!showingMoreItems) && Show more }\n {(showingMoreItems) && Show less } \n \n
    \n
    \n }\n
    \n
    \n }\n {\n (!hasDragOver && mediaItems?.length > 0 && mediaItems?.length <= itemLimit && mediaType === MediaTypeEnum.documentation ) &&\n \n }\n
    \n \n \n \n );\n}\n\nexport default DropZone;","import { ITranslationItem, IFeature, EntityTypeEnum, IMediaItem } from \"../types\";\n\nexport enum ProfileItemTypeEnum\n {\n None = \"None\",\n Activities = \"Activities\",\n Apartment = \"Apartment\",\n Cabana = \"Cabana\",\n Cabin = \"Cabin\",\n Carriage = \"Carriage\",\n Dome = \"Dome\",\n Feature = \"Feature\",\n Unit = \"Unit\",\n Villa = \"Villa\",\n Restaurant = \"Restaurant\",\n Room = \"Room\",\n SleepingArrangement = \"Sleeping Arrangement\",\n Suite = \"Suite\",\n Tent = \"Tent\",\n }\n \n export enum ProfileItemUnitOfAreaEnum\n {\n SquareMeter = \"Square meters\",\n SquareFeet = \"Square feet\",\n }\n \n\n export interface IProfileItem {\n id: string;\n profileId: string;\n entityType: EntityTypeEnum.profileItem;\n features: IFeature[];\n name: string;\n configuration: string; //Single, double, twin etc.\n description: ITranslationItem; \n type: ProfileItemTypeEnum,\n media: IMediaItem[];\n sequence: number;\n isChanged: boolean;\n units: string;\n size: number;\n count: number;\n }\n\n export interface IProfileItemMediaUpdate {\n id: string;\n media: IMediaItem[];\n}\n\nexport interface IProfileItemDeletePayload\n{\n id: string;\n profileId: string;\n media: IMediaItem[];\n translationItemId: string;\n type: ProfileItemTypeEnum;\n}\n\n export interface IProfileItemPayload {\n id: string;\n profileId: string;\n entityType: EntityTypeEnum.profileItem;\n features: IFeature[];\n name: string;\n configuration: string;\n description: ITranslationItem; \n type: ProfileItemTypeEnum,\n media: IMediaItem[];\n}\n\nexport interface IRoomPayload extends IProfileItemPayload {\n units: string;\n size: number;\n count: number;\n sequence: number;\n isChanged: boolean;\n}\n","import React, { useState, useCallback} from 'react';\nimport { useEffect } from 'react';\nimport { Form } from 'react-bootstrap';\nimport { IndeterminateCheckboxEnum } from './types';\nimport './indeterminate.checkbox.scss';\n\ninterface IProps {\n callBack: (value: number) => void;\n value: IndeterminateCheckboxEnum;\n}\n\nexport const IndeterminateCheckbox = ({callBack, value}: IProps) => {\n const [state, setState] = useState(value);\n\n useEffect(() => {\n setState(value);\n }, [value]);\n\n const indetSetter = useCallback((el: HTMLInputElement) => {\n if (el) {\n if (state === IndeterminateCheckboxEnum.indeterminate) {\n el.indeterminate = true;\n } else if (state === IndeterminateCheckboxEnum.checked) {\n el.indeterminate = false;\n } else if (state === IndeterminateCheckboxEnum.unchecked) {\n el.indeterminate = false;\n }\n }\n \n }, [state]);\n\n const advance = () => {\n setState(prev => (prev + 1) % 3);\n callBack((state + 1) % 3);\n }\n \n return ;\n }","import { maximumImages, minimumImages } from 'app/config';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport DropZone from 'components/dropzone/dropzone';\nimport { IndeterminateCheckbox } from 'components/indeterminate.checkbox/indeterminate.checkbox';\nimport { IndeterminateCheckboxEnum } from 'components/indeterminate.checkbox/types';\nimport { UpdateMedia_Reducer } from 'components/profile/mediaitem/mediaitem.slice';\nimport { IMediaItem , MediaTypeEnum} from 'components/profile/types';\nimport _ from 'lodash';\nimport { ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Card, Form, Button } from 'react-bootstrap';\nimport { BsFillExclamationCircleFill, BsX } from 'react-icons/bs';\nimport { MdLens } from 'react-icons/md';\nimport \"./profile.images.card.scss\";\nimport { useAppDispatch } from 'app/store';\n\ninterface IProps {\n profileName?: string;\n title: string;\n subtitle: string;\n isProfileForm?: boolean;\n availableLanguages: string[];\n isEnhanced: boolean;\n isImagesEditable: boolean;\n isCompleted: boolean;\n mediaPayload: IMediaItem[];\n saveCallback?: () => void;\n deleteCallback?: (selectedMedia: IMediaItem[], mediaType: MediaTypeEnum) => void;\n uploadCallback?: (mediaItems: IMediaItem[], uploadedMedia: IMediaItem[], mediaType: MediaTypeEnum) => void;\n mediaCount: number;\n}\n\nexport const ProfileImagesCard = ({profileName, title, subtitle, isProfileForm = false, availableLanguages, isEnhanced, \n isImagesEditable, isCompleted, mediaPayload, mediaCount, saveCallback, deleteCallback, uploadCallback}: IProps) => {\n const [ uploadedImages, setUploadedImages ] = useState([]);\n const [ selectedImages, setSelectedImages ] = useState([]);\n const [ invalidFiles, setInvalidFiles ] = useState([]);\n const [ displayInvalidFiles, setDisplayInvalidFiles ] = useState(false); \n const [ showModal, setShowModal ] = useState(false);\n const dispatch = useAppDispatch(); \n const [ maxImages ] = useState(isEnhanced ? maximumImages : minimumImages); \n\n //When MediaItems are loaded from the DB, update our local copy\n useEffect(() => {\n setUploadedImages(mediaPayload);\n }, [mediaPayload]);\n\n const uploadImageCallBackLocal = useCallback((mediaItems: IMediaItem[], invalidFiles: string[]) => {\n if (uploadCallback) {\n uploadCallback(mediaItems, uploadedImages, MediaTypeEnum.image);\n }\n }, [uploadedImages, uploadCallback]);\n\n const invalidFilesCallback = useCallback((invalidFilesArray: string[]) => {\n setInvalidFiles(invalidFilesArray);\n if(invalidFilesArray.length > 0) {\n setDisplayInvalidFiles(true);\n }\n }, [])\n\n const selectCallback = useCallback((mediaItems: IMediaItem[]) => {\n const selectedMediaItems = mediaItems.filter(x => x.isChecked === true);\n setSelectedImages(selectedMediaItems);\n }, [])\n \n const deleteSelectedImages = () => {\n setShowModal(true);\n }\n\n const deleteImagesCallBack = useCallback((deleteImages: boolean) => {\n setShowModal(false);\n if (deleteImages) {\n setSelectedImages([]);\n if (deleteCallback) {\n deleteCallback(selectedImages, MediaTypeEnum.image);\n }\n }\n }, [selectedImages, deleteCallback])\n\n const setAllImagesState = useCallback((checked: boolean) => {\n const images: IMediaItem[] = _.cloneDeep(uploadedImages);\n images.forEach(image => {\n image.isChecked = checked;\n });\n setUploadedImages(images);\n }, [uploadedImages]);\n\n const checkboxCallback = useCallback((value: number) => {\n switch(value) {\n case 0: {\n setAllImagesState(false);\n break;\n }\n case 1: {\n break;\n }\n case 2: {\n setAllImagesState(true);\n break;\n }\n }\n }, [setAllImagesState]);\n\n const clearInvalidFiles = () => {\n setInvalidFiles([]);\n }\n\n const imageDropCallback = (newMediaItems: IMediaItem[]) => {\n dispatch(UpdateMedia_Reducer({mediaItems: newMediaItems, mediaType: MediaTypeEnum.image}));\n }\n\n const saveCallbackLocal = () => {\n if (saveCallback) {\n saveCallback();\n }\n }\n\n return (\n \n \n \n {\n isProfileForm && \n }\n {title}\n \n \n {subtitle}\n \n {\n (invalidFiles.length > 0 && displayInvalidFiles) &&\n \n \n \n
      These images couldn't be added
    \n
    \n \n
    \n
    \n
      \n {invalidFiles.map((item, index) =>
    • {item}
    • )}\n
    \n
    \n
    \n }\n {\n (uploadedImages && selectedImages.length === 0) &&\n Images {uploadedImages.length} / {maxImages} - You can add up to {maxImages} photos.\n }\n {\n selectedImages.length > 0 &&\n
    \n {selectedImages.length} {selectedImages.length === 1 ? \"image\" : \"images\"} selected\n \n 1 ? 'Keep images' : 'Keep image'} \n acceptButtonText={selectedImages.length > 1 ? 'Delete images' : 'Delete image'} />\n
    \n }\n \n
    \n
    \n )\n}","import React, { useEffect, useCallback } from 'react'\nimport { WizardCallback } from 'components/wizard/types';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { InsightsCard } from 'components/insights.card/insights.card';\nimport './wizard.step-9.scss';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { ProfileImagesCard } from 'components/profile.images.card/profile.images.card';\nimport { EntityTypeEnum, IDeleteMediaPayload, IMediaItem, MediaTypeEnum } from 'components/profile/types';\nimport { deleteMedia, UpdateMedia_Reducer, uploadMedia } from 'components/profile/mediaitem/mediaitem.slice';\nimport { useAppDispatch } from 'app/store';\nimport _ from 'lodash';\n\nconst WizardStep9Page = ({callBack}: WizardCallback) => {\n\n const { availableLanguages, isEnhanced, id } = useSelector((state: RootState) => state.profileSlice.profile);\n const { mediaItems } = useSelector((state: RootState) => state.mediaItemSlice);\n const dispatch = useAppDispatch();\n\n const stepComplete = useCallback((): boolean => {\n return mediaItems.length > 0;\n }, [mediaItems.length]);\n \n useEffect(() => {\n callBack({id: 9, completed: stepComplete(), skip: false, displayFooterNavigation: true, displayNext: true});\n }, [callBack, mediaItems, stepComplete]);\n\n const uploadMediaCallBack = useCallback((newMediaItems: IMediaItem[], uploadedMedia: IMediaItem[], mediaType: MediaTypeEnum) => {\n const uploadMediaFormData = () => {\n const formData = new FormData();\n newMediaItems.forEach(mItem => {\n if (mItem.url === '' && mItem.file) {\n formData.append(\"files\", mItem.file);\n formData.append(\"sequences\", mItem.sequence.toString());\n }\n });\n\n formData.append(\"container\", \"profile-wizard-images\");\n // id in this case is the profileid\n formData.append(\"profileId\", id);\n formData.append(\"parentEntityType\", EntityTypeEnum.profile);\n formData.append(\"mediaType\", mediaType);\n formData.append(\"hasAcceptedUsagePolicy\", \"true\");\n \n if (formData.get('files') != null) {\n dispatch(uploadMedia({mediaType: mediaType, formData: formData }));\n }\n }\n if (id && newMediaItems.length > uploadedMedia.length) {\n uploadMediaFormData();\n }\n }, [dispatch, id]);\n\n const deleteMediaCallBack = useCallback((selectedMedia: IMediaItem[], mediaType: MediaTypeEnum) => {\n const payload: IDeleteMediaPayload = { mediaItems: selectedMedia, showToast: true, mediaType: mediaType };\n let mediaItemsTemp: IMediaItem[] = _.cloneDeep(mediaItems);\n selectedMedia.forEach(image => {\n const index = mediaItemsTemp.findIndex(x => x.id === image.id);\n mediaItemsTemp.splice(index, 1);\n });\n\n dispatch(deleteMedia(payload));\n dispatch(UpdateMedia_Reducer({mediaItems: mediaItemsTemp, mediaType: mediaType}));\n \n }, [dispatch, mediaItems])\n\n const getImages = useCallback(() => {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.image).sort(x => x.sequence);\n }, [mediaItems])\n \n const getMediaCount = (getFunction: () => IMediaItem[]) => {\n return getFunction()?.length;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default WizardStep9Page;","import { GridRow } from 'components/grid.row/grid.row';\nimport { IProfileSummary } from 'components/profile/types';\nimport { SortLabel } from 'components/sort.label/sort.label';\nimport React, { useState, useEffect } from 'react';\nimport { Button, Form, InputGroup, Nav, Navbar, NavDropdown, Table } from 'react-bootstrap';\nimport './profile.grid.scss';\nimport _ from 'lodash';\nimport { BsLayoutThreeColumns, BsSearch} from 'react-icons/bs';\nimport { typesArray } from 'app/config';\nimport { ProfileFormPageEnum } from '../../pages/profile-form/profile.form.types';\n\ninterface IProfileGridProps {\n profileSummaries: IProfileSummary[];\n} \n\ninterface IColumnHeader {\n label: string;\n key: ColumnHeaderEnum;\n}\n\ninterface IStatus {\n label: string;\n key: StatusEnum;\n}\n\nenum StatusEnum {\n all = \"All\",\n active = \"Active\",\n inProgress = \"InProgress\",\n inReview = \"InReview\",\n disabled = \"Disabled\"\n}\n\nenum ColumnHeaderEnum {\n name = \"name\",\n status = \"status\",\n visibility = \"isPublished\",\n rating = \"contentRating\",\n tier = \"isEnhanced\",\n type = \"type\",\n lastModified = \"lastModified\"\n}\n\ninterface IType {\n label: string;\n value: string;\n}\n\nexport const ProfileGrid = ({profileSummaries}: IProfileGridProps) => {\n const [sortedProfiles, setSortedProfiles] = useState(_.orderBy(profileSummaries, ColumnHeaderEnum.lastModified, \"desc\"));\n const [order, setOrder] = useState(\"desc\");\n const [currentSortColumn, setCurrentSortColumn] = useState(ColumnHeaderEnum.lastModified);\n const columnHeaders: IColumnHeader[] = [{label:\"Name\", key: ColumnHeaderEnum.name},\n {label:\"Status\", key: ColumnHeaderEnum.status},\n {label:\"To Do\", key: ColumnHeaderEnum.status},\n {label:\"Visibility\", key: ColumnHeaderEnum.visibility},\n {label:\"Rating\", key: ColumnHeaderEnum.rating},\n {label:\"Tier\", key: ColumnHeaderEnum.tier},\n {label:\"Type\", key: ColumnHeaderEnum.type},\n {label:\"Last Modified\", key: ColumnHeaderEnum.lastModified} ];\n const statuses: IStatus[] = [{label: \"All\", key: StatusEnum.all},\n {label: \"Active\", key: StatusEnum.active},\n {label: \"In Progress\", key: StatusEnum.inProgress},\n {label: \"In Review\", key: StatusEnum.inReview},\n {label: \"Disabled\", key: StatusEnum.disabled} ]; \n const [currentStatus, setCurrentStatus] = useState(\"All\");\n const [currentSearchValue, setCurrentSearchValue] = useState(\"\");\n const [currentTier, setCurrentTier] = useState(\"\");\n const [currentType, setCurrentType] = useState({label: \"\", value: \"\"});\n\n const sortProfilesByDirectionAndColumn = (sortValue: string, sortDirection: string) => {\n const sort = sortDirection === \"asc\" ? \"asc\" : \"desc\"; \n setCurrentSortColumn(sortValue);\n setOrder(sort);\n }\n \n useEffect(() => {\n const sortProfilesByFilterValues = () => {\n const profiles = _.filter(profileSummaries, (summary) => {\n return summary.name?.toLowerCase().includes(currentSearchValue.toLowerCase()) &&\n (currentTier !== \"\" && currentTier === \"Enhanced\" ? summary.isEnhanced : currentTier !== \"\" && currentTier === \"Basic\" ? !summary.isEnhanced : true) &&\n (currentStatus !== \"All\" ? summary.status.toString() === currentStatus : true) &&\n (currentType.value !== \"\" ? summary.type === currentType.value : true);\n });\n const sort = order === \"asc\" ? \"asc\" : \"desc\";\n setSortedProfiles(_.orderBy(profiles, [currentSortColumn], [sort]));\n }\n\n sortProfilesByFilterValues();\n }, [currentSearchValue, profileSummaries, currentTier, currentStatus, currentType, currentSortColumn, order]);\n\n const handleSearchValueChange = (value: string) => {\n setCurrentSearchValue(value);\n }\n\n return (\n
    \n \n \n \n \n \n \n \n {\n columnHeaders.map((columnHeader, index) => )\n }\n \n \n \n \n {\n sortedProfiles.map((profileSummary,index) => )\n }\n \n
    \n
    \n )\n}","import React, { useCallback, useState } from 'react'\nimport { Container, Row, Col, Card, Button, Image } from 'react-bootstrap';\nimport './wizard.room.card.scss';\nimport landingImage from './images/landingImage.png'; \nimport { IProfileItem } from 'components/profile/profileitem/types';\nimport { useHistory } from \"react-router-dom\";\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\n\ninterface IProps {\n index: number,\n room: IProfileItem,\n deleteCallBack: (room: IProfileItem) => void;\n editCallBack?: (room: IProfileItem) => void;\n}\n\nexport const WizardRoomCard = ({room, deleteCallBack, editCallBack, index }: IProps) => {\n const [ showModal, setShowModal ] = useState(false);\n const history = useHistory();\n\n const deleteRoomModalOnClick = (room : IProfileItem) => {\n setShowModal(true);\n };\n\n const deleteRoomConfirmationOnClick = useCallback((deleteRoom: boolean) => { \n if (deleteRoom) {\n deleteCallBack(room);\n }\n setShowModal(false);\n }, [deleteCallBack, room]);\n\n const editClick = () => {\n if (editCallBack) {\n editCallBack(room);\n }\n else {\n history.push(\"14/\"+room.id);\n }\n }\n\n return (\n \n \n \n \n \n \n 0 ? room.media[0].url : landingImage} className=\"room-image\">\n \n \n \n {room.type}\n
    \n \n \n \n
    \n
    \n \n
    {room.name}
    \n
    \n \n
    {room.description?.text}
    \n
    \n \n
    \n
    \n
    \n
    \n \n )\n}","import { featuresData, RoomConfiguration } from 'app/config';\nimport { RootState } from 'app/root-reducer';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport { CheckboxAccordion } from 'components/checkbox.accordion/checkbox.accordion';\nimport DropZone from 'components/dropzone/dropzone';\nimport { IndeterminateCheckbox } from 'components/indeterminate.checkbox/indeterminate.checkbox';\nimport { IndeterminateCheckboxEnum } from 'components/indeterminate.checkbox/types';\nimport { NumberStepper } from 'components/number.stepper/number.stepper';\nimport { UpdateSectionCompleteWithValue, updateProfileFromStore } from 'components/profile/profile.slice';\nimport { deleteMedia, UpdateMedia_Reducer } from 'components/profile/mediaitem/mediaitem.slice';\nimport { createProfileItem, deleteProfileItem, getProfileItemCount, UpdateExistingProfileItemMedia, UpdateProfileItemMediaItems, updateProfileItemsDb, uploadRoomBlob, uploadRoomMedia } from 'components/profile/profileitem/profileitem.slice';\nimport { ProfileFormPageEnum } from 'pages/profile-form/profile.form.types';\nimport { IProfileItem, IProfileItemDeletePayload, ProfileItemTypeEnum, ProfileItemUnitOfAreaEnum } from 'components/profile/profileitem/types';\nimport { IDeleteMediaPayload, EntityTypeEnum, IFeature, IMediaItem, MediaTypeEnum, DocumentTypeEnum } from 'components/profile/types';\nimport { showGlobalToast } from 'components/toast/toast.slice';\nimport _ from 'lodash';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Container, Modal, Row, Col, Button, Card, Form, Alert } from 'react-bootstrap';\nimport { BsCheckCircle, BsFillExclamationCircleFill, BsTrash, BsX } from 'react-icons/bs';\nimport { useSelector } from 'react-redux';\nimport './sleeping.arrangements.overlay.scss';\nimport { useAppDispatch } from 'app/store';\n\ninterface IProps {\n showModal: boolean;\n callBack: (showModal: boolean, didSave: boolean, profileItem: IProfileItem) => void;\n item: IProfileItem;\n addNewItemCallback: (type: ProfileItemTypeEnum) => void;\n}\n\nexport const SleepingArrangementsOverlay = ({showModal, callBack, item, addNewItemCallback}: IProps) => {\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const { profileItems, mediaItems } = useSelector((state: RootState) => state.profileItemSlice);\n const [ showCloseConfirmModal, setShowCloseConfirmModal ] = useState(false);\n const [ profileItem, setProfileItem ] = useState(item);\n const [ profileItemTypes ] = useState(Object.values(ProfileItemTypeEnum).filter(x => x !== \"Restaurant\" && x !== \"Activities\" && x !== \"Feature\" && x !== \"None\"));\n const [ profileItemUnitOfAreaTypes ] = useState(Object.values(ProfileItemUnitOfAreaEnum));\n const [ wordCount, setWordCount ] = useState(0);\n const [ displayInvalidFiles, setDisplayInvalidFiles ] = useState(false);\n const [ selectedImages, setSelectedImages ] = useState([]);\n const [ invalidFiles, setInvalidFiles ] = useState([]);\n const [ facilityData ] = useState(Object.entries(featuresData)[1]);\n const [ showImageModal, setShowImageModal ] = useState(false);\n const [ clickedCancel, setClickedCancel ] = useState(false);\n const [ initialProfile, setInitialProfile ] = useState(null);\n const [ originalName, setOriginalName ] = useState(item.name);\n const [ showDeleteModal, setShowDeleteModal ] = useState(false);\n const [ currentProfileItemIndex, setCurrentProfileItemIndex ] = useState(0);\n const [ isValid, setIsValid ] = useState(true);\n const [ showSectionalMessage, setShowSectionalMessage ] = useState(false);\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n setProfileItem(item);\n setInitialProfile(item);\n setWordCount(item.description.text ? item.description.text.trim().split(' ').length - 1 : 0);\n setOriginalName(item.name);\n }, [item]);\n\n useEffect(() => {\n setCurrentProfileItemIndex(profileItems.findIndex(x => x.id === item.id));\n }, [profileItems, item.id]);\n\n useEffect(() => {\n if (!initialProfile) {\n setInitialProfile(_.cloneDeep(item));\n }\n }, [item, initialProfile]);\n\n useEffect(() => {\n const combinedMedia = _.unionBy(mediaItems, item.media, 'id').sort((a, b) => (a.sequence > b.sequence ? 1 : -1));\n setProfileItem(profileItem => profileItem = {...profileItem, media: combinedMedia });\n }, [mediaItems, item.media]);\n\n const closeButtonClick = () => {\n if (hasChanges()) {\n setShowCloseConfirmModal(true);\n } else {\n callBack(false, false, profileItem);\n setInitialProfile(null);\n setShowSectionalMessage(false);\n }\n }\n\n const closeConfirmCallBack = (didClose: boolean) => {\n if (didClose) {\n setShowCloseConfirmModal(false);\n setInitialProfile(null);\n setShowSectionalMessage(false);\n callBack(false, false, profileItem);\n } else {\n setShowCloseConfirmModal(false);\n }\n }\n\n const isValidForm = (): boolean => {\n return profileItem.name?.length > 0 && profileItem.description?.text?.length > 0;\n }\n\n const getNewSequenceNumber = (profileItemType: ProfileItemTypeEnum) : number => {\n //We can't just return the array length because if they delete the first item in the array then add a new item this would create a duplicate sequence number.\n //Also we need to use negative numbers to make the newest item appear at the top in our DragSortable list.\n //So we need to get the smallest existing sequence number, and subtract 1.\n //We will sometimes get a non-contiguous array (eg. -2,-4,-5) but that doesn't affect the functionality.\n //This negative number system will also be overwritten to positive (eg. 0...5) when they drag-sort but that also doesn't matter.\n return Math.min.apply(\n Math, profileItems?.filter(x => x.type === profileItemType)?.map(\n function (item: IProfileItem) {\n return item.sequence;\n }\n )\n ) - 1;\n }\n\n const onSaveClick = () => {\n let clonedProfileItem = _.cloneDeep(profileItem);\n clonedProfileItem.isChanged = hasChanges();\n clonedProfileItem.sequence = getNewSequenceNumber(profileItem.type);\n\n if (isValidForm()) {\n if (!clonedProfileItem.id) {\n dispatch(createProfileItem(clonedProfileItem)).then(\n (payloadAction) => {\n const newProfileItem = payloadAction.payload as IProfileItem;\n setProfileItem(newProfileItem);\n setInitialProfile(newProfileItem);\n\n //Only update Profile.sectionsComplete if the completion status of the SleepingArrangements section has changed.\n dispatch(getProfileItemCount()).then(\n (payloadAction) => {\n const profileItemCount = payloadAction.payload as number;\n if (profileItemCount === 1) {\n Promise.all([\n dispatch(UpdateSectionCompleteWithValue({ pageId: ProfileFormPageEnum.sleepingArrangements, value: true})),\n dispatch(updateProfileFromStore())\n ]);\n }\n })\n }\n ) \n setShowSectionalMessage(true);\n } \n else {\n dispatch(updateProfileItemsDb([clonedProfileItem]));\n }\n setShowCloseConfirmModal(false);\n callBack(true, true, clonedProfileItem);\n setIsValid(true);\n } else {\n setIsValid(false);\n }\n }\n\n const handleRoomNameChange = (value: string) => { \n let cloneProfileItem = _.cloneDeep(profileItem);\n cloneProfileItem.name = value;\n setProfileItem(cloneProfileItem);\n }\n\n const countCallback = useCallback((count: number) => {\n setProfileItem(x => x = {...x, count : count});\n }, []);\n\n const onChangeDescription = (value: string) => {\n const count: number = value.split(' ').length - 1;\n setWordCount(count);\n if (count <= 200) {\n let cloneProfileItem = _.cloneDeep(profileItem)\n cloneProfileItem.description.text = value; \n setProfileItem(cloneProfileItem);\n }\n }\n\n const onChangeRoomType = (value: string) => { \n let cloneProfileItem = _.cloneDeep(profileItem);\n cloneProfileItem.type = value as ProfileItemTypeEnum;\n setProfileItem(cloneProfileItem);\n }\n\n const onSizeChangeNumberOnly = (value: number) => {\n let cloneProfileItem = _.cloneDeep(profileItem);\n if (value) { \n cloneProfileItem.size = Number(value);\n }\n else { \n cloneProfileItem.size = 0;\n }\n setProfileItem(cloneProfileItem); \n };\n\n const onChangeUnitOfArea = (value: string) => { \n let cloneProfileItem = _.cloneDeep(profileItem);\n cloneProfileItem.units = value as ProfileItemUnitOfAreaEnum;\n setProfileItem(cloneProfileItem);\n }\n\n const onChangeRoomConfiguration = (value: string) => { \n value = value !== \"Select\" ? value : \"\";\n let cloneProfileItem = _.cloneDeep(profileItem);\n cloneProfileItem.configuration = value;\n setProfileItem(cloneProfileItem);\n }\n\n const clearInvalidFiles = () => {\n setInvalidFiles([]);\n }\n\n const uploadImageCallBack = useCallback((images: IMediaItem[], invalidFiles: string[]) => {\n const selectedImages = images.filter(x => x.isChecked === true);\n setSelectedImages(selectedImages);\n setInvalidFiles(invalidFiles);\n if (invalidFiles.length > 0) {\n setDisplayInvalidFiles(true);\n }\n \n const uploadImages = () => {\n const formData = new FormData();\n images.forEach(pImage => {\n if (pImage.url === '' && pImage.file) {\n formData.append(\"files\", pImage.file);\n formData.append(\"sequences\", pImage.sequence.toString());\n }\n });\n \n if(formData.get(\"files\") === null) {\n return;\n }\n \n formData.append(\"container\", \"profile-wizard-images\");\n formData.append(\"profileId\", profile.id);\n formData.append(\"profileItemId\", profileItem.id);\n formData.append(\"parentEntityType\", EntityTypeEnum.profileItem);\n formData.append(\"mediaType\", MediaTypeEnum.image);\n formData.append(\"documentType\", DocumentTypeEnum.none);\n\n if(!profileItem.id) {\n dispatch(uploadRoomBlob(formData));\n } else { \n dispatch(uploadRoomMedia(formData));\n } \n \n }\n \n if (profile.id && images.length > profileItem.media?.length) {\n uploadImages();\n }\n }, [dispatch, profile.id, profileItem.media, profileItem.id]);\n\n const deleteImagesCallBack = useCallback((deleteImages: boolean) => {\n setShowImageModal(false);\n if (deleteImages) {\n const localMediaItems: IMediaItem[] = _.cloneDeep(profileItem.media);\n selectedImages.forEach(image => {\n const index = localMediaItems.findIndex(x => x.id === image.id);\n localMediaItems.splice(index, 1);\n });\n let itemsToDeleteFromStorage = selectedImages.filter(x => x.parentId);\n \n if (itemsToDeleteFromStorage.length > 0) {\n const payload: IDeleteMediaPayload = { mediaItems: itemsToDeleteFromStorage, showToast: true, mediaType: MediaTypeEnum.image };\n dispatch(deleteMedia(payload));\n } else {\n dispatch(showGlobalToast({title: \"Success\", message: localMediaItems.length > 1 ? \"Images deleted\" : \"Image deleted\"}));\n }\n \n if (profileItem.id) {\n dispatch(UpdateExistingProfileItemMedia({id: profileItem.id, media: localMediaItems}));\n } else {\n dispatch(UpdateProfileItemMediaItems(localMediaItems));\n }\n \n setSelectedImages([]);\n }\n }, [dispatch, selectedImages, profileItem.media, profileItem.id])\n\n const deleteSelectedImages = () => {\n setShowImageModal(true);\n }\n\n const hasChanges = () => {\n return !!(initialProfile && profileItem && (\n initialProfile.name !== profileItem.name ||\n initialProfile.type !== profileItem.type ||\n initialProfile.configuration !== profileItem.configuration ||\n initialProfile.count !== profileItem.count ||\n initialProfile.size !== profileItem.size ||\n initialProfile.units !== profileItem.units ||\n initialProfile.description.text !== profileItem.description.text ||\n JSON.stringify(initialProfile.media) !== JSON.stringify(profileItem.media) ||\n JSON.stringify(initialProfile.features) !== JSON.stringify(profileItem.features)\n ));\n } \n\n const setAllImagesState = useCallback((checked: boolean) => {\n const media = _.cloneDeep(profileItem.media);\n media.forEach(item => {\n item.isChecked = checked;\n });\n setProfileItem(profileItem => profileItem = {...profileItem, media: media});\n }, [profileItem.media]);\n\n const checkboxCallback = useCallback((value: number) => {\n switch(value) {\n case 0: {\n setAllImagesState(false);\n break;\n }\n case 1: {\n break;\n }\n case 2: {\n setAllImagesState(true);\n break;\n }\n }\n }, [setAllImagesState]);\n\n const cancelCallBack = useCallback((cancelPage: boolean) => {\n setClickedCancel(false);\n if (cancelPage) {\n const payload: IDeleteMediaPayload = { mediaItems: mediaItems, showToast: false, mediaType: MediaTypeEnum.image };\n dispatch(deleteMedia(payload));\n if (profileItem.id) {\n let items = _.cloneDeep(profileItem.media);\n mediaItems.forEach(image => {\n const index = items.findIndex(x => x.id === image.id);\n items.splice(index, 1)\n });\n \n dispatch(UpdateExistingProfileItemMedia({id: profileItem.id, media: items}));\n } else {\n dispatch(UpdateProfileItemMediaItems([]));\n }\n }\n\n callBack(false, false, profileItem);\n }, [dispatch, mediaItems, callBack, profileItem]);\n\n const deleteProfileItemCallback = (confirmed: boolean) => {\n setShowDeleteModal(false);\n\n if (confirmed) {\n const payload: IProfileItemDeletePayload = {\n media: profileItem.media,\n id: profileItem.id,\n profileId: profile.id,\n translationItemId: profileItem.description.id,\n type: profileItem.type\n }\n dispatch(deleteProfileItem(payload));\n callBack(false, true, profileItem);\n }\n }\n\n const accordionCallBack = (checked: boolean, facility: IFeature) => { \n let cloneProfileItem = _.cloneDeep(profileItem);\n if (checked) {\n const index = cloneProfileItem.features.findIndex(x => x.id === facility.id);\n if (index === -1) {\n cloneProfileItem.features.push(facility);\n }\n } \n else {\n const index = cloneProfileItem.features.findIndex(x => x.id === facility.id);\n if (index > -1) { \n cloneProfileItem.features.splice(index, 1);\n }\n }\n setProfileItem(x => x = {...x, features : cloneProfileItem.features});\n }\n\n const addNewSleepingArrangement = () => {\n setShowSectionalMessage(false);\n addNewItemCallback(profileItem.type);\n }\n\n const selectCallback = useCallback((mediaItems: IMediaItem[]) => {\n const selectedMediaItems = mediaItems.filter(x => x.isChecked === true);\n setSelectedImages(selectedMediaItems);\n }, [])\n \n const invalidFilesCallback = useCallback((invalidFilesArray: string[]) => {\n setInvalidFiles(invalidFilesArray);\n if(invalidFilesArray.length > 0) {\n setDisplayInvalidFiles(true);\n }\n }, [])\n\n const imageDropCallback = (newMediaItems: IMediaItem[]) => {\n dispatch(UpdateMedia_Reducer({mediaItems: newMediaItems, mediaType: MediaTypeEnum.image}));\n }\n\n const getMediaCount = () => {\n return profileItem.media?.length;\n }\n\n return(\n closeButtonClick()}>\n \n \n \n \n \n
    \n {profile.name}
    \n {\n item.id !== '' && Sleeping arrangement {currentProfileItemIndex + 1} of {profileItems.length}\n }\n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n \n

    {originalName.length > 0 ? originalName : \"Add sleeping arrangements\"}

    \n {\n showSectionalMessage && \n \n
    \n
    {originalName} created
    \n
    setShowSectionalMessage(false)} className=\"close-button\">
    \n
    \n \n
    \n }\n \n \n What does your room type look like?\n Add your various room types with enticing descriptions and images.\n \n \n \n \n Name *\n handleRoomNameChange(event.target.value)} />\n {\n (!isValid && !profileItem.name) &&
    Please enter a name
    \n }\n
    \n \n \n \n
    Type
    \n onChangeRoomType(event.target.value)} >\n { profileItemTypes.map((x, index) => (\n \n ))}\n \n
    \n \n
    \n\n \n \n \n
    Configuration
    \n onChangeRoomConfiguration(event.target.value)} >\n {RoomConfiguration.map((x, index) => (\n \n ))}\n \n
    \n \n \n \n How many of this type do you have?\n \n \n \n
    \n \n \n \n Size\n
    \n onSizeChangeNumberOnly(parseInt(event.target.value)) } />\n {profileItemUnitOfAreaTypes.map((option,i)=>{\n return \n })}\n
    \n
    \n \n \n \n
    \n\n \n \n \n Description *\n 200 ? 'warning-border' : ''} as=\"textarea\" rows={5} name=\"description-input\" value={profileItem.description.text} onChange={event => onChangeDescription(event.target.value)} />\n\n { (wordCount > 200) &&\n {wordCount - 200} words over limit\n }\n {\n (wordCount <= 200) &&\n {200 - wordCount} words remaining\n }\n {\n (!isValid && !profileItem.description.text) &&
    Please enter a description
    \n }\n
    \n \n
    \n
    \n
    \n\n \n \n Images\n {\n (invalidFiles.length > 0 && displayInvalidFiles) &&\n \n \n
      These images couldn't be added
    \n
      \n {invalidFiles.map((item, index) =>
    • {item}
    • )}\n
    \n
    \n
    \n }\n {\n selectedImages.length > 0 &&\n
    \n {selectedImages.length} {selectedImages.length === 1 ? \"image\" : \"images\"} selected\n \n 1 ? 'Keep images' : 'Keep image'} acceptButtonText={selectedImages.length > 1 ? 'Delete images' : 'Delete image'} />\n
    \n } \n \n
    \n
    \n \n \n \n Facilities\n \n \n {Object.entries(facilityData[1]).map((child) => ( \n \n ))}\n \n \n \n \n \n {\n item.id && \n }\n \n
    \n
    \n
    \n )\n}","import React, {useCallback, useState} from 'react';\nimport { Container, Row, Col, Card, Nav } from 'react-bootstrap';\nimport './wizard.section.card.scss';\nimport { BsCheck } from \"react-icons/bs\";\nimport { useHistory } from \"react-router-dom\";\nimport { IProfileItem, IProfileItemDeletePayload, ProfileItemTypeEnum, ProfileItemUnitOfAreaEnum } from 'components/profile/profileitem/types';\nimport { WizardRoomCard } from 'components/wizard.room.card/wizard.room.card';\nimport { deleteProfileItem } from 'components/profile/profileitem/profileitem.slice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { SleepingArrangementsOverlay } from 'pages/profile-form/pages/sleeping-arrangements/features/sleeping.arrangements.overlay/sleeping.arrangements.overlay';\nimport { EntityTypeEnum, ITranslationItem } from 'components/profile/types';\nimport { RootState } from 'app/root-reducer';\n\ninterface IProps {\n name: string;\n title: string;\n description: string;\n navLink: string;\n navText: string;\n checked: boolean;\n rooms?: IProfileItem[];\n}\n\nexport const WizardSectionCard = ({name, title, description, navLink, navText, checked, rooms}:IProps) => {\n const { id } = useSelector((state: RootState) => state.profileSlice.profile);\n const dispatch = useDispatch();\n const [ showProfileItemModal, setShowProfileItemModal ] = useState(false);\n const getDefaultProfileItem = (type: ProfileItemTypeEnum): IProfileItem => {\n return {\n id: \"\", \n features: [], \n name: \"\", \n configuration: \"\", \n description: {} as ITranslationItem, \n entityType: EntityTypeEnum.profileItem, \n isChanged: false, \n media: [], \n profileId: id, \n sequence: 0, \n type: type,\n count: 0,\n size: 0,\n units: ProfileItemUnitOfAreaEnum.SquareMeter\n };\n }\n const [ selectedProfileItem, setSelectedProfileItem ] = useState(getDefaultProfileItem(ProfileItemTypeEnum.Room));\n const history = useHistory();\n\n const onClickHandler = () => {\n if (rooms) {\n setShowProfileItemModal(true);\n } else {\n history.push(navLink);\n }\n }\n\n const DeleteProfileItemCallback = useCallback((room: IProfileItem) => { \n const profileItemDeletePayload : IProfileItemDeletePayload = { id : room.id, profileId: room.profileId , media: room.media, translationItemId: room.description.id, type: room.type} \n dispatch(deleteProfileItem(profileItemDeletePayload));\n }, [dispatch]);\n\n const profileItemOverlayCallback = () => {\n setShowProfileItemModal(false);\n }\n\n const editRoomCallback = (profileItem: IProfileItem) => {\n setSelectedProfileItem(profileItem);\n setShowProfileItemModal(true);\n }\n\n const addNewItemCallback = (type: ProfileItemTypeEnum) => {\n setSelectedProfileItem(getDefaultProfileItem(type));\n setShowProfileItemModal(true);\n }\n\n return (\n \n \n \n \n \n \n
    {checked && }
    \n \n \n {title}\n {name}\n \n {description}\n \n \n \n
    \n {navText}\n
    \n \n
    \n { (rooms) &&\n \n {rooms.map( (item,index) => )}\n \n \n } \n
    \n
    \n
    \n \n )\n}","import React, { useEffect } from 'react'\nimport './wizard.step-10.scss';\nimport { WizardSectionCard } from 'components/wizard.section.card/wizard.section.card';\nimport { Container, Row, Col, Card } from 'react-bootstrap';\nimport { WizardCallback } from 'components/wizard/types';\nimport { RootState } from 'app/root-reducer';\nimport { useSelector } from 'react-redux';\n\nconst WizardStep10Page = ({callBack}: WizardCallback) => {\n const { profileItems } = useSelector((state: RootState) => state.profileItemSlice);\n\n useEffect(() => {\n callBack({id: 10, completed: true, displayFooterNavigation: true, displayPreview: true, displayFinalize: true});\n }, [callBack] );\n\n return (\n \n \n \n \n \n \n \n
    \n \n \n 0 ? true : false } name=\"Room Setup\" description=\"Tell us about your rooms.\" navLink=\"/profiles/create/14\" navText=\"Add rooms\" key=\"3\" rooms={profileItems}/>\n
    \n
    \n
    \n \n
    \n
    \n )\n}\n\nexport default WizardStep10Page","import React, { useEffect } from 'react'\nimport './wizard.step-11.scss';\nimport { useHistory } from \"react-router-dom\";\nimport { Container, Row, Col, Card, Button } from 'react-bootstrap';\nimport { WizardCallback } from 'components/wizard/types';\nimport { ProfileFormPageEnum } from '../../../profile-form/profile.form.types';\nimport { isFormPageProfileComplete, UpdateSectionsComplete } from 'components/profile/profile.slice';\nimport { isFormPageProfileItemsComplete } from 'components/profile/profileitem/profileitem.slice';\nimport { Dictionary } from 'lodash';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\n\nconst WizardStep11Page = ({callBack}: WizardCallback) => {\n const history = useHistory();\n const { profileItems } = useSelector((state: RootState) => state.profileItemSlice);\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const dispatch = useDispatch();\n\n useEffect(() => {\n callBack({id: 11, completed: true, displayFooterNavigation: false, skip: false});\n }, [callBack] );\n\n const editProfile = () => {\n history.goBack(); \n } \n\n const getSectionsComplete = (): Dictionary => {\n //Once all changes have been made in the wizard and before publishing, generate the sectionsComplete dictionary which is used for the completion dots in the Profile Manager.\n //This is needed so that when a profile is opened in the Manager, the sidebar dots are already set (without having to make extra ProfileItem API calls, or having to visit each page to load the dot).\n //Better to do here than on the API so all completion dot logic is in one place.\n let sectionsComplete: Dictionary = {};\n Object.values(ProfileFormPageEnum).forEach((item, i) => {\n if (item === ProfileFormPageEnum.sleepingArrangements) {\n sectionsComplete[item] = isFormPageProfileItemsComplete(profileItems, item);\n }\n else if (item) { //Don't save none \"\"\n sectionsComplete[item] = isFormPageProfileComplete(profile, item);\n }\n })\n return sectionsComplete;\n }\n\n const publishProfile = () => {\n const sectionsComplete: Dictionary = getSectionsComplete();\n dispatch(UpdateSectionsComplete(sectionsComplete));\n history.push('/profiles/create/12')\n } \n\n return (\n \n \n \n \n \n You're ready to publish!\n If you’d like to update your content, you can easily do so after you click “Publish profile”\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n ) \n} \nexport default WizardStep11Page","import React, { useEffect } from 'react'\nimport './wizard.step-12.scss';\nimport { Container, Row, Col, Card, Spinner } from 'react-bootstrap';\nimport landingImage from './images/landingImage.png'; \nimport { useDispatch, useSelector } from 'react-redux';\nimport { validate } from 'components/profile/profile.slice';\nimport { RootState } from 'app/root-reducer';\nimport { useHistory } from \"react-router-dom\";\n\nconst WizardStep12Page = () => {\n const dispatch = useDispatch();\n const { profile, isValidated } = useSelector((state: RootState) => state.profileSlice);\n const { mediaItems } = useSelector((state: RootState) => state.mediaItemSlice);\n const history = useHistory();\n \n useEffect(() => {\n if(!isValidated){\n setTimeout(() => dispatch(validate({\n id: profile.id,\n media: mediaItems,\n sectionsComplete: profile.sectionsComplete\n })), 5000) \n }\n \n if(isValidated && profile.isPublished) {\n history.push('/profiles/create/13')\n } \n\n if(isValidated && !profile.isPublished ) {\n history.push('/profiles/')\n } \n }, [isValidated, profile.id, profile.isPublished, dispatch, history, mediaItems, profile.sectionsComplete]);\n\n return (\n \n \n \n \n \n \"\"\n Creating your profile\n You're almost there!\n \n \n \n \n \n \n ) \n} \n\nexport default WizardStep12Page","import React, { useEffect } from 'react'\nimport './wizard.step-13.scss';\nimport { useHistory } from \"react-router-dom\";\nimport { Container, Row, Col, Card, Button } from 'react-bootstrap';\nimport { WizardCallback } from 'components/wizard/types';\nimport { ResetProfile } from \"components/profile/profile.slice\";\nimport {useDispatch } from 'react-redux';\nimport { ResetProfileItem } from 'components/profile/profileitem/profileitem.slice';\n\nconst WizardStep13Page = ({callBack}: WizardCallback) => {\n const history = useHistory(); \n const firstProfile = false; //later database hookup from profiles.slice(not build yet), check an array if array more then one we assign false to this \n const dispatch = useDispatch();\n\n useEffect(() => {\n callBack({id: 13, completed: true, displayFooterNavigation: false, skip: false, progressBarEnabled: false});\n }, [callBack] );\n\n\n const createNewProfile = () => {\n dispatch(ResetProfile());\n dispatch(ResetProfileItem());\n history.push('/profiles/create/1')\n }\n\n const myProfiles = () => {\n history.push('/profiles/')\n }\n\n const getMessageBody = (firstProfile: boolean): string => {\n if(firstProfile)\n {\n return \"Congratulations! You published your first profile.\";\n\n }else\n {\n return \"Success! Your profile was published.\"; \n } \n }\n\n return (\n \n \n \n \n \n \n
    \n
    \n {getMessageBody(firstProfile)}\n What would you like to do next? \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n ) \n} \n\n\nexport default WizardStep13Page","import React, { useCallback, useState } from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport { useParams } from 'react-router';\nimport { Wizard } from 'components/wizard/wizard';\nimport WizardStep1Page from './features/wizard.step-1/wizard.step-1';\nimport WizardStep2Page from './features/wizard.step-2/wizard.step-2';\nimport WizardStep3Page from './features/wizard.step-3/wizard.step-3';\nimport WizardStep4Page from './features/wizard.step-4/wizard.step-4';\nimport WizardStep5Page from './features/wizard.step-5/wizard.step-5';\nimport WizardStep6Page from './features/wizard.step-6/wizard.step-6';\nimport WizardStep7Page from './features/wizard.step-7/wizard.step-7';\nimport WizardStep8Page from './features/wizard.step-8/wizard.step-8';\nimport WizardStep9Page from './features/wizard.step-9/wizard.step-9';\nimport WizardStep10Page from './features/wizard.step-10/wizard.step-10';\nimport WizardStep11Page from './features/wizard.step-11/wizard.step-11';\nimport WizardStep12Page from './features/wizard.step-12/wizard.step-12';\nimport WizardStep13Page from './features/wizard.step-13/wizard.step-13';\nimport { Step } from 'components/wizard/types';\n\ninterface ParamType {\n id: string;\n}\n\nexport const ProfileWizard = () => {\n const { id } = useParams();\n const [step, setStep] = useState({id: 0, completed: false, displayFooterNavigation: true, skip: false});\n\n const callBack = useCallback((step: Step) => {\n setStep(step);\n }, []);\n \n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}","import React from 'react';\nimport landingImage from './images/landingImage.png'; \nimport { Button } from 'react-bootstrap';\nimport { Container } from 'react-bootstrap';\nimport './profile-empty.scss';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { create } from 'components/profile/profile.slice';\nimport { ResetProfileItem } from 'components/profile/profileitem/profileitem.slice';\nimport {initialCreateProfile } from 'components/profile/types';\n\nconst ProfileEmpty = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n\n const createProfileClick = () => {\n dispatch(create(initialCreateProfile));\n dispatch(ResetProfileItem());\n history.push('/profiles/create/1');\n }\n\n return (\n
    \n \n
    \n \"\"\n

    Add and manage your profiles

    \n
    This is where you'll add profiles and manage your content
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n )\n}\n\nexport default ProfileEmpty","import { ProfileStatusEnum } from 'components/profile/types';\nimport React from 'react';\nimport { Container } from 'react-bootstrap';\nimport './label.pill.scss';\n\ninterface IProps {\n label: string;\n}\n\nexport const LabelPill = ({label}:IProps) => {\n\n const pillClass:string = label.toLowerCase();\n let displayLabel:string = label;\n \n if(label === ProfileStatusEnum.inProgress){\n displayLabel = \"In Progress\";\n }\n \n if(label === ProfileStatusEnum.inReview){\n displayLabel = \"In Review\";\n }\n\n return (\n \n
    {displayLabel}
    \n
    \n )\n}","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\nimport './content.rating.bar.scss';\n\ninterface IContentRatingBarProps {\n rating: number;\n}\n\nexport const ContentRatingBar = ({rating}:IContentRatingBarProps) => {\n\n let variant: string = \"success\" ;\n\n if(rating < 80){\n variant = \"warning\";\n }\n\n if(rating < 50){\n variant = \"danger\";\n } \n\n return (\n
    \n \n {rating + \"%\"}\n
    \n )\n}","import React, { useState } from \"react\";\n\ntype CustomMenuProps = {\n children?: React.ReactNode;\n style?: React.CSSProperties;\n className?: string;\n labeledBy?: string;\n};\n\nexport const MenuItems = React.forwardRef(\n(props: CustomMenuProps, ref: React.Ref) => {\n const [value] = useState('');\n\n return (\n \n
      \n {React.Children.toArray(props.children).filter(\n (child: any) =>\n !value || child.props.children.toLowerCase().startsWith(value)\n )}\n
    \n \n );\n}\n);","import React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { BsThreeDots } from \"react-icons/bs\";\n\ntype CustomToggleProps = {\n children?: React.ReactNode;\n onClick?: (event: React.MouseEvent) => {};\n };\n\nexport const MenuToggle = React.forwardRef((props: CustomToggleProps, ref: React.Ref) => (\n {\n e.preventDefault();\n if (props.onClick) props.onClick(e);\n }}\n >\n \n {props.children}\n \n));","import { ProfileSummaryDropdownMenuItems } from 'app/config';\nimport { IMenuItem } from 'components/profile/types';\nimport React, { useState } from 'react';\nimport { Dropdown, Container, Row, Col } from 'react-bootstrap';\nimport { useHistory } from 'react-router-dom';\nimport { MenuItems } from './features/menu.items/menu.items';\nimport { MenuToggle } from './features/menu.toggle/menu.toggle';\nimport './menu.button.scss';\n\ninterface IProps {\n url: string;\n}\n\nexport const MenuButton = ({url}: IProps) => {\n const history = useHistory();\n const [menuItems] = useState(ProfileSummaryDropdownMenuItems);\n\n const itemOnClick = (key: string) => {\n switch(key) {\n case \"edit\": {\n history.push(url);\n break;\n }\n default: {\n break;\n }\n }\n }\n\n return(\n \n \n \n \n \n \n \n \n {\n menuItems.map((item, index) => {\n if(item.key === \"delete\" || item.key === \"disable\") {\n return itemOnClick(item.key)} eventKey={item.key}>{item.label}\n }\n\n return itemOnClick(item.key)} eventKey={item.key}>{item.label}\n })\n }\n \n \n \n \n \n \n );\n}","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport './to.do.button.scss';\nimport { BsDash } from \"react-icons/bs\";\n\ninterface IToDoButtonProps {\n status: string;\n}\n\nexport const ToDoButton = ({status}:IToDoButtonProps) => {\n let buttonLabel: string = \"\"\n let noBorder: boolean = true\n\n if(status === \"Disabled\"){\n buttonLabel = \"Relist\"\n noBorder = false;\n }\n\n if(status === \"InProgress\"){\n buttonLabel = \"Finish\"\n noBorder = false;\n }\n \n return (\n
    \n \n
    \n )\n}","import { IProfileSummary } from 'components/profile/types';\nimport React from 'react';\nimport { Image, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport landingImage from './images/landingImage.png'; \nimport './grid.row.scss';\nimport { LabelPill } from 'components/label.pill/label.pill';\nimport { GetDate } from 'utils/DateUtils';\nimport { ContentRatingBar } from 'components/content.rating.bar/content.rating.bar';\nimport { MenuButton } from 'components/menu.button/menu.button';\nimport { ToDoButton } from 'components/to.do.button/to.do.button';\nimport { useHistory } from 'react-router-dom';\nimport { BsEyeFill } from \"react-icons/bs\";\n\ninterface GridRowProps {\n profileSummary: IProfileSummary;\n defaultPageUrl: string;\n} \n\nexport const GridRow = ({profileSummary, defaultPageUrl}: GridRowProps) => {\n const history = useHistory();\n const preview = () => {\n window.open('https://andrew.dev.wetu.com/'+profileSummary.id, '_blank');\n }\n\n return (\n history.push(defaultPageUrl)}>\n \n
    \n { (profileSummary.imageURL) &&\n
    \n }\n { (!profileSummary.imageURL) &&\n
    \n }\n
    \n
    {profileSummary.category}
    \n
    history.push(defaultPageUrl)}>{profileSummary.name}\n (\n \n Preview profile\n \n )}\n placement=\"bottom\">\n preview()}/>\n \n
    \n
    \n
    \n \n \n
    \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n {profileSummary.isPublished ? \"Public\" : \"Private\"}\n
    \n \n \n
    \n \n
    \n \n \n
    \n {profileSummary.isEnhanced ? \"Enhanced\" : \"Basic\"}\n
    \n \n \n
    \n {profileSummary.type === \"Accommodation\" ? \"Stays\" : profileSummary.type}\n
    \n \n \n
    \n {GetDate(profileSummary.lastModified)}\n
    \n \n \n
    \n \n
    \n \n \n )\n}","export const GetDate = (dateString: string): string => {\n\n const currentDate: Date = new Date(new Date().toDateString());\n const date: Date = new Date(new Date(dateString).toDateString()); \n const days = (currentDate.getTime() - date.getTime())/ (1000 * 60 * 60 * 24);\n const months: string[] = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n let message = date.getDate() + \" \" + months[date.getMonth()] + \" \" + date.getFullYear();\n \n if(days === 0) {\n message = \"< 1 day ago\"\n } else if(days === 1) {\n message = \" 1 day ago\"\n } else if( days < 8) {\n message = days + \" days ago\";\n }\n return message;\n}","import React, { useEffect, useState } from 'react';\nimport './sort.label.scss';\nimport { FaSort, FaSortUp, FaSortDown } from \"react-icons/fa\";\n\ninterface ISortLabelProps {\n label: string;\n sortValue: string;\n currentSortColumn: string;\n callBack: (sortValue: string, sortDirection: string) => void;\n}\n\nexport const SortLabel = ({label, sortValue, currentSortColumn, callBack}:ISortLabelProps) => {\n const [sortDirection, setSortDirection] = useState(\"unSorted\");\n\n useEffect(() => { \n if(currentSortColumn !== \"\" && currentSortColumn !== sortValue){\n setSortDirection(\"unSorted\");\n }\n }, [currentSortColumn, sortValue] );\n\n const sortOnClick= () => {\n if(sortDirection === \"unSorted\"){\n setSortDirection(\"asc\");\n }\n\n if(sortDirection === \"asc\"){\n setSortDirection(\"desc\");\n }\n\n if(sortDirection === \"desc\"){\n setSortDirection(\"asc\");\n }\n callBack(sortValue, sortDirection);\n }\n\n return (\n
    sortOnClick()}>\n {label}\n
    \n { (sortDirection === \"unSorted\") &&\n \n }\n { (sortDirection === \"asc\") &&\n \n }\n { (sortDirection === \"desc\") &&\n \n }\n
    \n
    \n )\n}","import React, { useState, useEffect } from 'react';\nimport { RootState } from 'app/root-reducer';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Row, Col, Card, Form, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport { UpdateProfileContact, UpdateProfileLinks, getDefaultContact } from 'components/profile/profile.slice';\nimport { BsDot, BsInfoCircleFill, BsFillExclamationCircleFill, BsFillTrashFill } from 'react-icons/bs';\nimport { ContactTypeEnum, IContact, IMultiSelectData } from 'components/profile/types';\nimport { ChecklistSection, ProfileFormPageSectionEnum } from '../../profile.form.types';\nimport './contact-details.page.scss';\nimport PhoneInput from \"react-phone-input-2\";\nimport { EmailInput } from \"components/email-input/email-input\";\nimport { ShowMore } from 'components/show.more/show.more';\nimport { MultiSelectRepeater } from 'components/multi.select.repeater/multi.select.repeater';\nimport { Dictionary } from '@reduxjs/toolkit';\nimport _ from 'lodash';\nimport { LinkTypeEnum }from 'components/profile/types';\n\ninterface IProps {\n sections: ChecklistSection[];\n}\n\nenum UrlTypeEnum\n{\n website = \"Website\",\n onlineReservation = \"OnlineReservation\",\n facebook = \"Facebook\",\n instagram = \"Instagram\",\n twitter = \"Twitter\",\n pinterest = \"Pinterest\"\n}\n\nexport const ContactDetailsPage = ({sections}: IProps) => {\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n\n const getContact = (contactType: ContactTypeEnum) : IContact => {\n let existingContact: IContact = _.cloneDeep(profile.contacts.find(x => x.type === contactType)) as IContact;\n if (!existingContact) {\n existingContact = getDefaultContact(contactType);\n }\n return existingContact;\n }\n\n const getContactField = (contact: IContact): string => {\n let savedContact: IContact = _.cloneDeep(profile.contacts.find(x => x.type === contact.type)) as IContact;\n if (!savedContact) {\n savedContact = {};\n }\n const returnValue = contact.address ? savedContact.address?.toString() :\n contact.countryCode ? savedContact.countryCode?.toString() :\n contact.dialCode ? savedContact.dialCode?.toString() :\n contact.email ? savedContact.email?.toString() :\n contact.name ? savedContact.name?.toString() :\n contact.skype ? savedContact.skype?.toString() :\n contact.telephone ? savedContact.telephone?.toString() :\n contact.website ? savedContact.website?.toString() :\n contact.onlineReservationUrl ? savedContact.onlineReservationUrl?.toString() : '';\n return returnValue ? returnValue : '';\n }\n\n const isValidURL = (str: string | undefined) : boolean => {\n if (!str) {\n //If the URL field is empty, do not show red validation formatting.\n return true;\n }\n try\n {\n return Boolean(new URL(str)); \n }\n catch (e)\n {\n return false;\n }\n }\n\n/*\nWe need 2 boolean values for each phone to determine whether to show red validation text/formatting because:\n - [A] The user is required to enter EITHER a front desk OR reservations number, and...\n - [B] Validation text/formatting should not show on page load (just when they click out of the field).\n*/\n const [ isFrontDeskPhoneComplete, setIsFrontDeskPhoneComplete ] = useState(false);\n const [ isReservationsPhoneComplete, setIsReservationsPhoneComplete ] = useState(false);\n const [ showFrontDeskPhoneValidation, setShowFrontDeskPhoneValidation ] = useState(false);\n const [ showReservationsPhoneValidation, setShowReservationsPhoneValidation ] = useState(false);\n \n const [ website, setWebsite ] = useState(getContactField({type: ContactTypeEnum.reservation, website: ' '}));\n const [ onlineResUrl, setOnlineResUrl ] = useState(getContactField({type: ContactTypeEnum.reservation, onlineReservationUrl: ' '}));\n const [ reservationContact ] = useState(getContact(ContactTypeEnum.reservation));\n const [ socialLinks, setSocialLinks ] = useState>({});\n const [ isInvalidUrl_website, setIsInvalidUrl_website] = useState(!isValidURL(reservationContact.website));\n const [ isInvalidUrl_onlineRes, setIsInvalidUrl_onlineRes] = useState(!isValidURL(reservationContact.onlineReservationUrl));\n const [ isInvalidUrls, setIsInvalidUrls] = useState>({});\n const [ showReservation, setShowReservation ] = useState(!!(reservationContact.telephone));\n const [ multiSelectDataContacts, setMultiSelectDataContacts ] = useState([]);\n const [ multiSelectDataLinks, setMultiSelectDataLinks ] = useState([]);\n const dispatch = useDispatch();\n\n const updateEmail = (updateValue: string | boolean, name: string, contactType?: ContactTypeEnum) => {\n let existingContact: IContact = _.cloneDeep(profile.contacts.find(x => x.type === contactType)) as IContact;\n existingContact.email = updateValue as string;\n dispatch(UpdateProfileContact(existingContact));\n }\n\n useEffect(() => {\n if (Object.keys(socialLinks).length === 0) {\n setSocialLinks(profile.links);\n }\n }, [setSocialLinks, profile.links, socialLinks])\n\n //Set the isInvalidUrls flags which are used by the UI to set validation formatting and messages.\n useEffect(() => {\n if (Object.keys(isInvalidUrls).length === 0) {\n Object.values(UrlTypeEnum).forEach((item) => {\n isInvalidUrls[item] = false;\n })\n }\n }, [isInvalidUrls])\n\n //Set the IMultiSelectData for social media links. IMultiSelectData is used by the MultiSelectRepeater.\n useEffect(() => {\n const getInitMultiSelectData = () : IMultiSelectData[] => {\n const initMultiSelectData: IMultiSelectData[] = [];\n for (let i = 0; i < Object.keys(profile.links).length; i++) {\n initMultiSelectData.push({\n title: Object.keys(profile.links)[i],\n subtitle: '',\n isChecked: !!(profile.links[Object.keys(profile.links)[i]]),\n key: Object.keys(profile.links)[i]\n });\n }\n return initMultiSelectData;\n }\n if (multiSelectDataLinks.length === 0) {\n setMultiSelectDataLinks(getInitMultiSelectData());\n }\n }, [profile.links, multiSelectDataLinks.length])\n\n //Initialise MultiSelectData used for the Contacts MultiSelectRepeater.\n useEffect(() => {\n const getInitMultiSelectData = () : IMultiSelectData[] => {\n const initMultiSelectData: IMultiSelectData[] = [{\n title: \"Marketing contact person\", \n subtitle: \"These contact details will display on your iBrochure.\",\n isChecked: isContactSection(ContactTypeEnum.marketing),\n key: ContactTypeEnum.marketing\n },\n {\n title: \"Sales person\",\n subtitle: \"Internal and Wetu purposes and will not show on any output.\",\n isChecked: isContactSection(ContactTypeEnum.sales),\n key: ContactTypeEnum.sales\n },\n {\n title: \"Accounts contact person\",\n subtitle: \"Contact information for your Agents and Tour Operators to see in the Wetu System.\",\n isChecked: isContactSection(ContactTypeEnum.accounts),\n key: ContactTypeEnum.accounts\n }\n ];\n return initMultiSelectData;\n }\n const isContactSection = (contactType: ContactTypeEnum): boolean => {\n if (profile.contacts) {\n const contact = profile.contacts.find(x => x.type === contactType);\n if (contact) {\n for (let i = 0; i < Object.keys(contact).length; i++) {\n if (Object.keys(contact)[i] !== 'type') {\n if (Object.values(contact)[i]) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n if (multiSelectDataContacts.length === 0) {\n setMultiSelectDataContacts(getInitMultiSelectData());\n }\n }, [setMultiSelectDataContacts, multiSelectDataContacts.length, profile.contacts])\n\n const showRes = () => {\n setShowReservation(true);\n }\n\n const getLinkValue = (key: string): string => {\n if (socialLinks[key]) {\n return socialLinks[key] as string;\n }\n return '';\n }\n\n const updateLinkLocal = (key: string, value: string) => {\n const copy = _.cloneDeep(socialLinks);\n copy[key] = value;\n setSocialLinks(copy);\n }\n\n const updateLinkValue = (key: string, value: string) => {\n let copy = _.cloneDeep(profile.links);\n copy[key] = value;\n dispatch(UpdateProfileLinks(copy));\n }\n\n const updateContactName = (contactType: ContactTypeEnum, newValue: string) => {\n let existingContact = getContact(contactType);\n existingContact.name = newValue;\n dispatch(UpdateProfileContact(existingContact));\n }\n\n const updateContactPhone = (contactType: ContactTypeEnum, countryCode: string, telephone: string, dialCode: string) => {\n let existingContact = getContact(contactType);\n existingContact.telephone = telephone;\n existingContact.countryCode = countryCode;\n existingContact.dialCode = dialCode;\n dispatch(UpdateProfileContact(existingContact));\n }\n\n const updateFrontDeskPhone = (countryCode: string, telephone: string, dialCode: string) => {\n let existingContact = getContact(ContactTypeEnum.frontDesk);\n existingContact.telephone = telephone;\n existingContact.countryCode = countryCode;\n existingContact.dialCode = dialCode;\n setIsFrontDeskPhoneComplete(!!telephone);\n setShowFrontDeskPhoneValidation(!telephone);\n setShowReservationsPhoneValidation(false);\n dispatch(UpdateProfileContact(existingContact));\n }\n\n const updateReservationsPhone = (countryCode: string, telephone: string, dialCode: string) => {\n let existingContact = getContact(ContactTypeEnum.reservation);\n existingContact.telephone = telephone;\n existingContact.countryCode = countryCode;\n existingContact.dialCode = dialCode;\n setIsReservationsPhoneComplete(!!existingContact.telephone);\n setShowFrontDeskPhoneValidation(false);\n setShowReservationsPhoneValidation(!existingContact.telephone);\n dispatch(UpdateProfileContact(existingContact));\n }\n\n const updateContactSkype = (contactType: ContactTypeEnum, newValue: string) => {\n let existingContact = getContact(contactType);\n existingContact.skype = newValue;\n dispatch(UpdateProfileContact(existingContact));\n }\n\n const getIsInvalidSocialUrl = (socialMediaLink: LinkTypeEnum): boolean => {\n return !!isInvalidUrls[socialMediaLink];\n }\n\n const updateWebsite = (value: string) => {\n setWebsite(value);\n }\n\n const updateOnlineResUrl = (value: string) => {\n setOnlineResUrl(value);\n }\n\n const saveWebsite = () => {\n const isValid = isValidURL(website);\n setIsInvalidUrl_website(!isValid);\n if (isValid) {\n let existingContact = getContact(ContactTypeEnum.reservation);\n existingContact.website = website;\n dispatch(UpdateProfileContact(existingContact));\n }\n }\n\n const saveOnlineResUrl = () => {\n const isValid = isValidURL(onlineResUrl);\n setIsInvalidUrl_onlineRes(!isValid);\n if (isValid) {\n let existingContact = getContact(ContactTypeEnum.reservation);\n existingContact.onlineReservationUrl = onlineResUrl;\n dispatch(UpdateProfileContact(existingContact));\n }\n }\n\n const validateLinkUrlAndSave = (url: string, socialMediaLink: LinkTypeEnum) => {\n const isInValid = socialMediaLink === LinkTypeEnum.twitter ? false : !isValidURL(url);\n setIsInvalidUrls(items => {\n let itemsCopy = _.cloneDeep(items);\n let isInvalid = isInValid;\n itemsCopy[socialMediaLink] = isInvalid;\n return itemsCopy;\n });\n if (!isInValid) {\n updateLinkValue(socialMediaLink, url);\n }\n }\n \n const selectCallbackContacts = (data: IMultiSelectData[]) => {\n setMultiSelectDataContacts(data);\n data.forEach((item) => {\n let savedContact: IContact = _.cloneDeep(profile.contacts.find(x => x.type === item.key)) as IContact;\n if (savedContact && !item.isChecked) {\n dispatch(UpdateProfileContact(getDefaultContact(savedContact.type as ContactTypeEnum)));\n }\n });\n }\n\n const selectCallbackLinks = (data: IMultiSelectData[]) => {\n setMultiSelectDataLinks(data);\n let linksTemp = _.cloneDeep(profile.links);\n let isChanges = false;\n data.forEach((item) => {\n if (!item.isChecked && linksTemp[item.key]) {\n linksTemp[item.key] = '';\n isChanges = true;\n }\n });\n if (isChanges) {\n setSocialLinks(linksTemp);\n dispatch(UpdateProfileLinks(linksTemp));\n }\n }\n\n const removeContact = (contactType: ContactTypeEnum) => {\n setMultiSelectDataContacts(items => {\n let itemsCopy = _.cloneDeep(items);\n itemsCopy.forEach(item => {\n if (item.key === contactType) {\n item.isChecked = false;\n }\n });\n return itemsCopy;\n });\n dispatch(UpdateProfileContact(getDefaultContact(contactType)));\n }\n\n const removeLink = (linkType: LinkTypeEnum) => {\n setMultiSelectDataLinks(items => {\n let itemsCopy = _.cloneDeep(items);\n itemsCopy.forEach(item => {\n if (item.key === linkType) {\n item.isChecked = false;\n }\n });\n return itemsCopy;\n })\n let linksCopy = _.cloneDeep(profile.links);\n linksCopy[linkType] = '';\n dispatch(UpdateProfileLinks(linksCopy));\n }\n\n const validateFrontDeskTelephone = () => {\n let existingContact = getContact(ContactTypeEnum.frontDesk);\n setIsFrontDeskPhoneComplete(!!existingContact.telephone);\n setShowFrontDeskPhoneValidation(!existingContact.telephone);\n }\n\n const validateReservationsTelephone = () => {\n let existingContact = getContact(ContactTypeEnum.reservation);\n setIsReservationsPhoneComplete(!!existingContact.telephone);\n setShowReservationsPhoneValidation(!existingContact.telephone);\n }\n\n const getSectionComplete = (sectionId: ProfileFormPageSectionEnum) : boolean => {\n return !!sections.find(x => x.id === sectionId)?.isCompleted;\n }\n\n const isFrontDeskPhoneValidation = () : boolean => {\n return !isFrontDeskPhoneComplete && showFrontDeskPhoneValidation && !isReservationsPhoneComplete;\n }\n\n const isReservationsPhoneValidation = () : boolean => {\n return !isReservationsPhoneComplete && showReservationsPhoneValidation && !isFrontDeskPhoneComplete;\n }\n\n return (\n
    \n \n \n Enquiries\n FRONT DESK\n \n \n \n \n Telephone Number *\n
    \n { if ('countryCode' in country) \n updateFrontDeskPhone(country.countryCode, telephone, country.dialCode)}}\n enableSearch={true} inputStyle={{ width: \"100%\" }} defaultMask=\".. ... ....\" countryCodeEditable={true}\n onBlur={() => validateFrontDeskTelephone()}\n />\n
    \n \n
    \n \n \n \n Email address\n \n \n \n
    \n
    \n \n \n \n RESERVATIONS\n \n \n Telephone Number *\n
    \n { if ('countryCode' in country) \n updateReservationsPhone(country.countryCode, telephone, country.dialCode)}}\n enableSearch={true} inputStyle={{ width: \"100%\" }} defaultMask=\".. ... ....\" countryCodeEditable={true}\n onBlur={() => validateReservationsTelephone()}\n />\n
    \n \n
    \n
    \n \n Skype username\n updateContactSkype(ContactTypeEnum.reservation, event.target.value)}/>\n \n \n Website\n updateWebsite(event.target.value)} onBlur={() => saveWebsite() }\n />\n \n \n \n URL to online reservation system\n Send clients to a specific web page by adding a URL to the Book Now button of this listing. }>\n \n \n \n updateOnlineResUrl(event.target.value)} onBlur={() => saveOnlineResUrl() }\n />\n { isInvalidUrl_onlineRes &&\n <> Please enter a valid URL\n }\n { !isInvalidUrl_onlineRes &&\n Example https://book.reservations.com/123\n }\n \n \n
    \n
    \n
    \n\n \n \n {\n multiSelectDataContacts.map((item, index) => \n item.isChecked &&\n \n \n \n
    \n {item.title}\n
    removeContact(item.key as ContactTypeEnum)} className=\"gds-trash\">\n \n
    \n
    \n Contact name\n updateContactName(item.key as ContactTypeEnum, event.target.value)} />\n Telephone number\n { if ('countryCode' in country) \n updateContactPhone(item.key as ContactTypeEnum, country.countryCode, telephone, country.dialCode)}}\n enableSearch={true} inputStyle={{ width: \"100%\" }} defaultMask=\".. ... ....\" countryCodeEditable={true}\n />\n Email address\n \n
    \n \n
    \n )\n }\n
    \n\n \n \n {\n multiSelectDataLinks.map((item, index) => \n item.isChecked &&\n \n \n \n {item.title}\n
    \n updateLinkLocal(item.key, event.target.value)}\n className={!getIsInvalidSocialUrl(item.key as LinkTypeEnum) ? \"\" : \"invalid-url\"} type=\"search\"\n onBlur={(event: React.FocusEvent) => validateLinkUrlAndSave((event.target as HTMLInputElement).value, item.key as LinkTypeEnum)} \n />\n
    removeLink(item.key as LinkTypeEnum)} className=\"gds-trash\">\n \n
    \n
    \n \n
    \n \n
    \n )\n }\n
    \n
    \n )\n}","import React, { useState } from 'react'\nimport './profile-list.scss';\nimport { Button, Alert } from 'react-bootstrap';\nimport { Container } from 'react-bootstrap';\nimport { useHistory } from 'react-router-dom';\nimport { BsFillExclamationTriangleFill } from \"react-icons/bs\";\nimport { IProfileSummary } from 'components/profile/types';\nimport { ProfileGrid } from 'components/profile.grid/profile.grid';\nimport { useDispatch } from 'react-redux';\nimport { create } from 'components/profile/profile.slice';\nimport { ResetProfileItem } from 'components/profile/profileitem/profileitem.slice';\nimport {initialCreateProfile } from 'components/profile/types';\n\ninterface ProfileListProps {\n name: string;\n profileSummaries: IProfileSummary[]\n} \n\nexport const ProfileList = ({name, profileSummaries}: ProfileListProps) => {\n const history = useHistory();\n const dispatch = useDispatch();\n const [show, setShow] = useState(false);\n\n const createProfileClick = () => {\n dispatch(create(initialCreateProfile));\n dispatch(ResetProfileItem());\n history.push('/profiles/create/1');\n }\n \n return (\n
    \n \n
    \n

    My profiles

    \n \n
    \n
    \n { (show) &&\n setShow(false)} dismissible>\n This profile is currently being reviewed:\n
      \n
    • {name} is currently being reviewed. The Supplier Success team will be in touch shortly.
    • \n
    \n
    \n }\n \n
    \n
    \n )\n}\n\nexport default ProfileList","import React, { useEffect } from 'react'\nimport './profiles.page.scss';\nimport ProfileEmpty from './features/profile-empty/profile-empty';\nimport ProfileList from './features/profile-list/profile-list';\nimport { RootState } from 'app/root-reducer';\nimport { useSelector } from 'react-redux';\nimport {useDispatch } from 'react-redux';\nimport { getSummaries } from 'components/profile/profile.slice';\nimport { Spinner } from 'react-bootstrap';\n\nexport const Profiles = () => {\n const { profile, profileSummaries, loading } = useSelector((state: RootState) => state.profileSlice);\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(getSummaries(\"e6e02556-8724-4592-bbeb-fd4c0c4130b1\"));\n }, [dispatch] );\n \n return (\n
    \n { loading &&\n
    \n \n
    \n }\n { ( profileSummaries.length === 0 && !loading) &&\n \n }\n { \n ( profileSummaries.length > 0 ) &&\n \n }\n
    \n )\n}","import { RootState } from 'app/root-reducer';\nimport React from 'react';\nimport { Toast } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { hideGlobalToast } from './toast.slice';\n\nexport const Toaster = () => {\n const dispatch = useDispatch();\n const { show, title, message } = useSelector((state: RootState) => state.toast);\n\n const hide = () => {\n dispatch(hideGlobalToast());\n }\n\n return (\n \n {\n show && (\n
    \n
    \n \n \n \"\"\n {title}\n \n {message}\n \n
    \n
    \n )\n }\n
    \n )\n};","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Nav, Navbar } from 'react-bootstrap';\nimport './profile.form.sidebar.scss';\nimport { BsDot } from 'react-icons/bs';\nimport _ from 'lodash';\nimport { ISidebarMenuItem } from 'components/profile/types';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { BsChevronLeft, BsCircle } from 'react-icons/bs';\nimport { ProfileFormPageEnum } from '../../profile.form.types';\nimport { ProfileSidebarMenuItems } from 'app/config';\nimport { RootState } from 'app/root-reducer';\n\ninterface IProps {\n expanded: boolean;\n callBack: (menuItems: ISidebarMenuItem[], url: string) => void;\n url: string;\n backButtonText: string;\n setCompletedCallback: (menuItems: ISidebarMenuItem[]) => void;\n}\n\ninterface ParamType {\n id: string;\n pageId: string;\n}\n\nexport const Sidebar = ({expanded, callBack, setCompletedCallback, url, backButtonText}: IProps) => {\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const [ menuItems, setMenuItems ] = useState([]);\n const { pageId } = useParams();\n const history = useHistory();\n\n //useEffect: updates menuItems when profile.sectionsComplete changes.\n useEffect(() => {\n const getInitialMenuItemState = (): ISidebarMenuItem[] => {\n let items = _.cloneDeep(ProfileSidebarMenuItems);\n if (!profile.isEnhanced) {\n items = items.filter(x => !x.isEnhancedOnly);\n }\n return items;\n }\n \n if (profile.id) {\n let itemsTemp: ISidebarMenuItem[] = [];\n setMenuItems(items => {\n let isInitialLoad = items?.length === 0;\n itemsTemp = (isInitialLoad && profile.id) ? getInitialMenuItemState() : _.cloneDeep(items);\n for (let i = 0; i < itemsTemp.length; i++) {\n itemsTemp[i].isCompleted = !!(profile.sectionsComplete[itemsTemp[i].url]);\n itemsTemp[i].isSelected = (itemsTemp[i].url === pageId);\n }\n return itemsTemp;\n });\n }\n }, [pageId, profile.id, profile.isEnhanced, profile.sectionsComplete]);\n\n //useEffect: When menuItems changes push these changes to the parent so the new completion dots can propagate to the child pages (so they can set their dots).\n useEffect(() => {\n if (menuItems && menuItems.length) {\n setCompletedCallback(menuItems);\n }\n }, [menuItems, setCompletedCallback])\n\n const setSelectedMenuItem = (index: number) => {\n let menuItemClone = _.cloneDeep(menuItems);\n let currentSelection = menuItemClone.find(x => x.isSelected === true);\n if(currentSelection) {\n currentSelection.isSelected = false;\n }\n let menuItem = menuItemClone[index];\n menuItem.isSelected = true;\n callBack(menuItemClone, menuItem.url);\n }\n\n const onBackClick = () => {\n history.push(url);\n }\n\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { BsFillCaretDownFill } from 'react-icons/bs';\nimport './profile.status.dropdown.toggle.scss';\n\ntype CustomToggleProps = {\n children?: React.ReactNode;\n onClick?: (event: React.MouseEvent) => {};\n selectedValue: string;\n };\n\nexport const ProfileStatusDropdownToggle = React.forwardRef((props: CustomToggleProps, ref: React.Ref) => (\n {\n e.preventDefault();\n if (props.onClick) {\n props.onClick(e);\n };\n }}\n >\n
    \n {props.selectedValue}\n {props.children}\n
    \n \n));","import { IProfile, ProfileStatusEnum } from 'components/profile/types';\nimport React, { useState } from 'react';\nimport { Button, Card, Col, Container, Dropdown, ProgressBar, Row } from 'react-bootstrap';\nimport { ProfileStatusDropdownToggle } from './features/profile.status.dropdown.toggle/profile.status.dropdown.toggle';\nimport './profile.status.card.scss';\nimport { BsCheck } from 'react-icons/bs';\n\ninterface IProps {\n profile: IProfile;\n pageInformation: PageInformation;\n callBack: (status: string) => void;\n stickyStyling?: boolean;\n}\n\ninterface PageInformation {\n label: string;\n contentRating: number;\n}\n\nexport const ProfileStatusCard = ({profile, pageInformation, callBack, stickyStyling = false}: IProps) => {\n\n const getCurrentStatus = (): string => {\n switch(profile.status) {\n case ProfileStatusEnum.active: {\n return 'Active';\n }\n case ProfileStatusEnum.disabled: {\n return 'Disabled';\n }\n case ProfileStatusEnum.closed: {\n return 'Closed';\n }\n default: {\n return 'Active';\n }\n }\n }\n\n const [selectedValue, setSelectedValue] = useState(getCurrentStatus());\n\n const handleSelect = (value: string) => {\n setSelectedValue(value);\n callBack(value);\n }\n\n return (\n \n \n \n \n \n \n Profile status\n \n \n \n \n \n \n \n \n \n \n \n { profile.contentRating ? profile.contentRating : 0 }%\n \n \n \n \n \n \n \n \n handleSelect(\"Active\")} eventKey={\"Active\"}>\n \n \n \n \n Active\n \n \n Your profile is live and searchable
    in the Wetu system\n
    \n \n \n {\n selectedValue === ProfileStatusEnum.active && \n }\n \n
    \n
    \n
    \n handleSelect(\"Disabled\")} eventKey={\"Disabled\"}>\n \n \n \n \n Temporarily closed (disabled)\n \n \n Hide your profile from
    search results\n
    \n \n \n {\n selectedValue === ProfileStatusEnum.disabled && \n }\n \n
    \n
    \n
    \n \n handleSelect(\"Closed\")} eventKey={\"Closed\"}>\n \n \n \n \n Permanently closed\n \n \n Deactivate your profile and
    initiate the removing process\n
    \n \n \n {\n selectedValue === ProfileStatusEnum.closed && \n }\n \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n \n { profile.isEnhanced ? \"Enhanced\" : \"Basic\"} profile\n \n \n \n \n { profile.category }\n \n \n
    \n
    \n
    \n \n \n \n \n { pageInformation.label }\n \n \n \n \n \n \n \n { pageInformation.contentRating }%\n \n \n \n \n
    \n )\n}","import { languageDictionary } from 'app/config';\nimport React, { useState, useEffect } from 'react';\nimport { Modal, Button, Form, Container, Row, Col } from 'react-bootstrap';\n\ninterface IProps {\n showModal?: boolean;\n title?: string;\n body?: string;\n declineButtonText?: string;\n acceptButtonText?: string;\n languageValues: string[];\n callBack: (outcome: boolean, values: string[]) => void\n}\n\nexport const LanguagesModal = ({languageValues, title = '', showModal = false, body = '', callBack, declineButtonText = 'Close', acceptButtonText = 'Save changes'}: IProps) => {\n \n const [show, setShow] = useState(showModal);\n const [languages, setLanguages] = useState(languageValues);\n\n useEffect(() => {\n setShow(showModal);\n }, [showModal]);\n\n const acceptButtonClick = () => {\n setShow(false);\n callBack(true, languages);\n }\n\n const declineButtonClick = () => {\n setShow(false);\n setLanguages(languageValues);\n callBack(false, languages);\n }\n\n const handleLanguageClick = (checked: boolean, value: string) => {\n if (checked) {\n setLanguages(values => [...values, value]);\n } else {\n const remainingLanguages = languages.filter(x => x !== value);\n setLanguages(remainingLanguages);\n }\n }\n \n return (\n declineButtonClick()}>\n \n {title}\n \n \n \n \n \n {body}\n \n \n \n {\n Object.keys(languageDictionary).map((languageCode, index) => \n \n handleLanguageClick(event.target.checked, languageCode)} checked={languages.find(x => x === languageCode) ? true : false} disabled={languageCode === \"en\"} type={'checkbox'} label={languageDictionary[languageCode]} />\n )\n }\n \n \n \n \n \n \n \n \n \n )\n}","import React, { useCallback, useState } from 'react';\nimport { RootState } from 'app/root-reducer';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Row, Col, Card, Form, Button } from 'react-bootstrap';\nimport './basic.info.page.scss';\nimport { UpdateProfileLanguages, UpdateProfileRichDescription, UpdateProfileShortDescription, UpdateProfileName, \n UpdateProfileSearchAliases } from \"components/profile/profile.slice\";\nimport { ITranslatableText } from 'components/profile/types';\nimport { PillTextInput } from 'components/pill.text.input/pill.text.input';\nimport { BsDot } from 'react-icons/bs';\nimport { LanguagesModal } from 'components/languages.modal/languages.modal';\nimport { TranslatableTextEditor } from 'components/translatable.text.editor/translatable.text.editor';\n\ninterface IProps {\n isCompleted: boolean;\n}\n\nexport const BasicInfoPage = ({isCompleted}: IProps) => {\n\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const [ profileName, setProfileName ] = useState(profile.name);\n const [ profileAliases, setProfileAliases ] = useState(profile.searchAliases);\n const [ aliasMessage, setAliasMessage ] = useState(\"\");\n const [ aliasExists, setAliasExists ] = useState(false);\n const [ showModal, setShowModal ] = useState(false);\n const [ languages ] = useState(profile.availableLanguages);\n const [ shortDescriptions, setShortDescriptions] = useState(profile.shortDescription);\n const [ richDescriptions, setRichDescriptions] = useState(profile.richDescription);\n\n const dispatch = useDispatch();\n\n const name_onChange = (pName: string) => {\n setProfileName(pName);\n dispatch(UpdateProfileName(pName));\n }\n\n const addAlias = (alias: string) => {\n let updatedAliases = profile.searchAliases ? [...profile.searchAliases, alias] : [alias];\n setProfileAliases(updatedAliases);\n dispatch(UpdateProfileSearchAliases(updatedAliases));\n }\n\n const removeAlias = (alias: string) => {\n let updatedAliases = [...profile.searchAliases];\n const index = updatedAliases.findIndex(x => x === alias);\n if (index > -1) { \n updatedAliases.splice(index, 1);\n }\n setProfileAliases(updatedAliases);\n dispatch(UpdateProfileSearchAliases(profileAliases));\n }\n\n const checkChangeAlias = (alias: string) => {\n let updatedAliases = profile.searchAliases ? [...profile.searchAliases] : [];\n const index = updatedAliases.findIndex(x => x.toLowerCase() === alias.toLowerCase());\n if (index > -1) {\n setAliasExists(true);\n setAliasMessage(`'${alias}' already added`);\n } \n else {\n setAliasExists(false);\n setAliasMessage(alias);\n }\n }\n\n const handleLanguages = (accepted: boolean, languages: string[]) => {\n if (accepted) {\n dispatch(UpdateProfileLanguages(languages));\n }\n setShowModal(false);\n }\n\n const setShortTranslationText = useCallback((translatableText: ITranslatableText) => {\n setShortDescriptions(translatableText);\n dispatch(UpdateProfileShortDescription(translatableText));\n }, [dispatch]);\n\n const setRichTranslationText = useCallback((translatableText: ITranslatableText) => {\n setRichDescriptions(translatableText);\n dispatch(UpdateProfileRichDescription(translatableText));\n }, [dispatch]);\n\n return (\n \n \n \n \n \n Basic info\n \n \n { profile.isEnhanced &&\n \n \n \n \n }\n \n \n \n \n \n Profile name\n name_onChange(e.target.value)} id=\"name-input\" type=\"text\" />\n \n \n GENERAL DESCRIPTION\n The description will be used exclusively by the trade partners who access and use your content in Wetu. This description will display in their various Wetu outputs, including itineraries.\n \n \n { profile.isEnhanced &&\n \n EXTENDED DESCRIPTION\n The iBrochure description will only appear on your iBrochure, and not on any of the other Wetu outputs. Here you have more range to write about your product.\n \n \n }\n \n ALIAS\n Add an alias for your location to help with searching for this point. The Alias can be a number, a reference code or a nickname that you use to distinguish your listings.\n \n \n \n \n )\n}","import React, { useRef } from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { DragItem, ItemTypes } from '../../dropzone/features/types';\nimport './drag.sortable.card.scss';\nimport { GrDrag } from \"react-icons/gr\";\n\ninterface IProps {\n id: number;\n index: number;\n groupId: string; //This prevents problems if you have more than one DragSortable on the same page: dragging an element from one list into the other can affect the other list order.\n moveCard: (dragIndex: number, hoverIndex: number) => void;\n children: React.ReactNode;\n cardDropCallback: () => void;\n}\n\nexport const DragSortableCard = ({ id, children, index, moveCard, groupId, cardDropCallback }: IProps) => {\n //Code adapted from https://codesandbox.io/s/itdrm?file=/src/Container.jsx\n const ref = useRef(null);\n const [{ handlerId }, drop] = useDrop({\n accept: ItemTypes.IMAGE,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n };\n },\n hover(item: DragItem) {\n if (!ref.current) {\n return;\n }\n\n const dragIndex = item.index;\n const hoverIndex = index;\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n \n if (ref && ref.current) {\n const divElement = ref.current as unknown as HTMLDivElement;\n if (divElement) {\n const type = divElement.getAttribute('data-groupid');\n if (type !== item.groupId) {\n return;\n }\n }\n }\n moveCard(dragIndex, hoverIndex);\n item.index = hoverIndex;\n },\n });\n\n const [{ isDragging }, drag] = useDrag({\n type: ItemTypes.IMAGE,\n item: () => {\n return { id, index, groupId };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n end: () => {\n cardDropCallback();\n }\n });\n const opacity = isDragging ? 0 : 1;\n drag(drop(ref));\n return (\n
    \n \n\t\t\t{children}\n\t\t
    \n )\n}","import React, { useState, useCallback } from 'react';\nimport { DragSortableCard } from './drag.sortable.card/drag.sortable.card';\nimport update from 'immutability-helper';\nimport { useEffect } from 'react';\nimport './drag.sortable.scss';\n\ninterface CardItem {\n id: number;\n child: any;\n groupId: string;\n}\n\ninterface IProps {\n groupId: string;\n children: React.ReactNode;\n cardDropCallback: (newSequence: number[], groupId: string) => void;\n}\n\nexport const DragSortable = ({groupId, children, cardDropCallback}: IProps) => {\n const [cards, setCards] = useState([]);\n\n useEffect(() => {\n let cardsTemp: CardItem[] = [];\n React.Children.toArray(children).map((child, index) => \n cardsTemp.push({ id: index, groupId: groupId, child: child })\n )\n setCards(cardsTemp);\n }, [children, groupId])\n\n const moveCard = useCallback((dragIndex, hoverIndex) => {\n const dragCard = cards[dragIndex];\n setCards(update(cards, {\n $splice: [\n [dragIndex, 1],\n [hoverIndex, 0, dragCard],\n ],\n }));\n }, [cards]);\n\n const cardDropCallbackLocal = useCallback(() => {\n cardDropCallback(cards.map(x => x.id), groupId);\n }, [cardDropCallback, cards, groupId])\n\n return (\n
    \n { cards && cards.length > 1 &&\n cards.map((card, i) => \n \n {card.child}\n \n )\n }\n { cards && cards.length === 1 &&\n cards[0].child\n }\n
    \n )\n}","import React, { useState, useCallback, useEffect } from 'react';\nimport './sleeping.arrangements.page.scss';\nimport { DragSortable } from 'components/drag.sortable/drag.sortable';\nimport { Container, Row, Col, Card, Form, Button, Spinner } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { useAppDispatch } from 'app/store';\nimport { RootState } from 'app/root-reducer';\nimport { WizardRoomCard } from 'components/wizard.room.card/wizard.room.card';\nimport { IProfileItem, IProfileItemDeletePayload, ProfileItemTypeEnum, ProfileItemUnitOfAreaEnum } from 'components/profile/profileitem/types';\nimport { MdLens } from 'react-icons/md';\nimport { getProfileItemsById, UpdateProfileItemMediaItems, UpdateProfileItems, deleteProfileItem, getProfileItemCount } \n from 'components/profile/profileitem/profileitem.slice';\nimport { SleepingArrangementsOverlay } from './features/sleeping.arrangements.overlay/sleeping.arrangements.overlay';\nimport _ from 'lodash';\nimport { EntityTypeEnum, ITranslationItem } from 'components/profile/types';\nimport landingImage from '../../../profiles/features/profile-empty/images/landingImage.png';\nimport { UpdateSectionCompleteWithValue, updateProfileFromStore } from 'components/profile/profile.slice';\nimport { ProfileFormPageEnum } from 'pages/profile-form/profile.form.types';\n\ninterface IProps {\n isCompleted: boolean;\n}\n\nexport const SleepingArrangementsPage = ({isCompleted}: IProps) => {\n const { profileItems, loading } = useSelector((state: RootState) => state.profileItemSlice);\n const { id } = useSelector((state: RootState) => state.profileSlice.profile);\n const [ showProfileItemModal, setShowProfileItemModal ] = useState(false);\n\n const getDefaultProfileItem = (type: ProfileItemTypeEnum): IProfileItem => {\n return {\n id: \"\", \n features: [], \n name: \"\", \n configuration: \"\", \n description: { text: \"\", profileId: id } as ITranslationItem, \n entityType: EntityTypeEnum.profileItem, \n isChanged: false, \n media: [], \n profileId: id, \n sequence: 0, \n type: type,\n count: 0,\n size: 0,\n units: ProfileItemUnitOfAreaEnum.SquareMeter\n };\n }\n const [ selectedProfileItem, setSelectedProfileItem ] = useState(getDefaultProfileItem(ProfileItemTypeEnum.Room));\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (id) {\n dispatch(getProfileItemsById(id));\n }\n }, [dispatch, id]);\n\n const addProfileItemClick = (type: ProfileItemTypeEnum) => {\n setSelectedProfileItem(getDefaultProfileItem(type));\n setShowProfileItemModal(true);\n }\n \n const deleteCallback = (profileItem: IProfileItem) => {\n const payload: IProfileItemDeletePayload = {\n media: profileItem.media,\n id: profileItem.id,\n profileId: id,\n translationItemId: profileItem.description.id,\n type: profileItem.type\n }\n \n //References example at: https://github.com/reduxjs/redux-thunk\n dispatch(deleteProfileItem(payload)).then(() => {\n dispatch(getProfileItemCount()).then(\n (payloadAction) => {\n const isProfileItems = (payloadAction.payload as number) > 0;\n if (!isProfileItems) {\n Promise.all([\n dispatch(UpdateSectionCompleteWithValue({ pageId: ProfileFormPageEnum.sleepingArrangements, value: false })),\n dispatch(updateProfileFromStore())\n ])\n }\n }\n )\n })\n }\n\n const editCallBack = (profileItem: IProfileItem) => {\n setSelectedProfileItem(profileItem);\n setShowProfileItemModal(true);\n }\n\n const cardDropCallback = useCallback((newSequences: number[], accommType: string) => {\n let typeItems = _.cloneDeep(profileItems.filter(x => x.type === accommType).sort((a, b) => (a.sequence > b.sequence ? 1 : -1)));\n newSequences.map((item, i) => {\n typeItems[item].isChanged = typeItems[item].sequence !== i ? true : false;\n typeItems[item].sequence = i;\n return item;\n })\n let changedItems = typeItems.filter(x => x.isChanged);\n dispatch(UpdateProfileItems(changedItems));\n }, [dispatch, profileItems])\n\n const profileItemOverlayCallback = (showModal: boolean, didSave: boolean, profileItem: IProfileItem) => {\n setShowProfileItemModal(showModal);\n dispatch(UpdateProfileItemMediaItems([]))\n if (didSave) {\n setSelectedProfileItem(profileItem);\n } else {\n setSelectedProfileItem(getDefaultProfileItem(ProfileItemTypeEnum.Room));\n }\n }\n\n const addNewItemCallback = (type: ProfileItemTypeEnum) => {\n setSelectedProfileItem(getDefaultProfileItem(type));\n setShowProfileItemModal(true);\n dispatch(UpdateProfileItemMediaItems([]));\n }\n\n const renderSection = (accommType: string, index: number) => {\n const items: IProfileItem[] = profileItems.filter(x => x.type === accommType).sort((a, b) => (a.sequence > b.sequence ? 1 : -1));\n if (items && items.length && items.length > 0) {\n return (\n \n
    \n {accommType}s\n \n
    \n \n {items.map((item, i) => \n \n )}\n \n \n )\n }\n return null;\n }\n\n return (\n \n {\n loading && \n }\n {\n !loading && (profileItems && profileItems.length > 0) &&\n \n \n \n \n \n Sleeping Arrangements\n \n \n Add your various sleeping arrangements, like rooms and units, with enticing descriptions and images. These are required if you want to add rates, even if you only have one sleeping arrangement.\n \n \n \n { Object.values(ProfileItemTypeEnum).map((accommType, index) => (\n renderSection(accommType, index)\n ))}\n \n \n }\n {\n !loading && profileItems?.length === 0 && \n \n \n \"\"\n \n Sleeping arrangements\n \n \n Your sleeping arrangements are major selling points for your property and are shown in all Wetu products and outputs.\n \n \n \n \n }\n \n \n )\n}","import { MediaAppearancesSections } from 'app/config';\nimport { ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport React, { useState } from 'react';\nimport { Card, Form, Container, Row, Col } from 'react-bootstrap';\nimport { BsImage, BsThreeDots } from 'react-icons/bs';\nimport { MdLens } from 'react-icons/md';\nimport \"./media.appearances.scss\";\n\nexport const MediaAppearancesCard = () => {\n const [ coverImageSections ] = useState(MediaAppearancesSections);\n return(\n \n \n \n
    Appearances
    \n
    \n \n LANDING PAGE IMAGE\n \n \n The picture you provide here will be shown on the landing of your iBrochure.
    \n If you do not provide one, your first image in the Gallery will be used instead.\n
    \n \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n SLIDER OVERVIEW IMAGES\n \n \n Use this only if you want to take full control of the images shown in the slider gallery on the \n overview page. If you do not provide any, the first three images you have uploaded in the Gallery will be selected.\n \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n COVER IMAGES\n \n \n The image(s) you provide here will be shown to visitors on your iBrochure. Use this only if you\n want to take full control of the images shown on the overview page. If you do not provide any, cover images will automatically be generated.\n \n \n \n {\n coverImageSections.map((section, index) => \n
    {section}
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n )\n }\n
    \n
    \n
    \n
    \n )\n}","import React, { useState } from 'react';\nimport {InputGroup, CloseButton, Container, Modal, Button, Form, Row, Col } from 'react-bootstrap';\nimport './embed.videos.modal.scss';\nimport { BsFillExclamationCircleFill } from 'react-icons/bs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { EntityTypeEnum, IMediaIEmbed, MediaTypeEnum, IMediaIEmbedApiPayload } from 'components/profile/types';\nimport { uploadEmbedVideos } from 'components/profile/mediaitem/mediaitem.slice';\n\ninterface IProps {\n showModal?: boolean; \n callBack: (outcome: string) => void; \n closeCallback: (outcome: boolean) => void;\n}\n\nexport const EmbedVideosModal = ({showModal = false, callBack, closeCallback }: IProps) => {\n const { id } = useSelector((state: RootState) => state.profileSlice.profile);\n const { mediaItems } = useSelector((state: RootState) => state.mediaItemSlice);\n const [ confirmed, setConfirmed ] = useState(false);\n const [ displayClearButton, setDisplayClearButton ] = useState(false);\n const [ embedVideoUrl, setEmbedVideoUrl ] = useState('');\n const [ invalidUrl, setInvalidUrl ] = useState(false);\n const [ multipleEmbedUploads, setMultipleEmbedUploads ] = useState(false);\n const [ displayUploadUrlInfo, setDisplayUploadUrlInfo ] = useState('');\n const [ messageStyle, setMessageStyle ] = useState('added-url'); \n const dispatch = useDispatch(); \n\n const acceptButtonClick = () => {\n checkUrlValidation(false, true); \n }\n\n const closeButtonClick = () => {\n setConfirmed(false);\n resetUrlInput();\n closeCallback(false);\n setMessageStyle('added-url');\n setDisplayUploadUrlInfo('');\n setMultipleEmbedUploads(false);\n }\n\n const onInputChange = (value: string) => {\n setMessageStyle('added-url')\n setDisplayClearButton(true);\n setEmbedVideoUrl(value)\n\n if(value === \"\" ) {\n setInvalidUrl(false);\n setEmbedVideoUrl(\"\");\n setDisplayClearButton(false);\n } \n }\n\n const confirmationEvent = (value : boolean) => { \n setConfirmed(value);\n if(value) { \n checkUrlValidation(value, false);\n } \n }\n\n const checkUrlValidation = (value : any, submit: boolean) => {\n if (value || confirmed) {\n validate(embedVideoUrl, submit)\n }\n }\n\n const resetUrlInput = () => {\n setInvalidUrl(false)\n setEmbedVideoUrl(\"\");\n setDisplayClearButton(false); \n }\n\n const isValidURL = (str: string) => {\n try { return Boolean(new URL(str)); }\n catch (e) { return false; }\n } \n\n const validate = (originalUrlName: string, submit: boolean) => {\n\n const videoUrl = originalUrlName.toLowerCase();\n setDisplayClearButton(true);\n\n if (isValidURL(videoUrl)) { \n if(videoUrl.includes(\"youtu.be\") || videoUrl.includes(\"youtube.\") || videoUrl.includes(\"vimeo.\")) { \n if (displayUploadUrlInfo !== '') {\n setMessageStyle('added-url-fade-in')\n } \n\n setInvalidUrl(false);\n\n if (submit) { \n const embedMediaItem : IMediaIEmbed = {\n entityType: EntityTypeEnum.profile, \n label: \"\",\n mediaType : MediaTypeEnum.embedVideo,\n url: convertToEmbedLink(originalUrlName), \n profileId: id, \n azureContainerName: \"profile-wizard-images\",\n originalFileName: originalUrlName,\n sequence: mediaItems.length,\n hasAcceptedUsagePolicy: true\n }\n const apiPayload : IMediaIEmbedApiPayload = {\n toastMessage: \"Virtual tour added\",\n IMediaIEmbed: embedMediaItem, \n enableToast : multipleEmbedUploads ? false: true }\n \n dispatch(uploadEmbedVideos(apiPayload));\n\n if (!multipleEmbedUploads) {\n setConfirmed(false);\n resetUrlInput();\n closeCallback(false);\n closeMessage();\n } else { \n setDisplayUploadUrlInfo(originalUrlName);\n setConfirmed(false); \n resetUrlInput(); \n } \n\n } \n\n } else { \n setInvalidUrl(true);\n }\n\n } else {\n setInvalidUrl(true);\n }\n\n if(originalUrlName === \"\" ) {\n setInvalidUrl(false);\n setDisplayClearButton(false);\n }\n\n }\n \n const convertToEmbedLink = (url: string): string => { \n let mediaUrl = getEmbedLinkAndVideoId(url); \n return mediaUrl; \n } \n \n const getEmbedLinkAndVideoId = (originalLink: string) : string => {\n \n let videoId = ''; \n if (isValidURL(originalLink)) { \n if (originalLink.includes('youtube')) {\n videoId = getYoutubeVideoId(originalLink); \n return 'https://www.youtube.com/embed/' + videoId;\n \n } else if (originalLink.includes('vimeo')) {\n videoId = getVimeoVideoId(originalLink); \n return 'https://player.vimeo.com/video/' + videoId; \n }\n } \n return \"\"; \n } \n \n const getVimeoVideoId = (url: string) => {\n var regExp = /(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^/]*)\\/videos\\/|album\\/(?:\\d+)\\/video\\/|video\\/|)(\\d+)(?:[a-zA-Z0-9_-]+)?/i;\n var match = url.match(regExp);\n return (match && match[1].length > 0) ? match[1] : \"\";\n } \n \n const getYoutubeVideoId = (url: string) => {\n var regExp = /^https?:\\/\\/(?:www\\.youtube(?:-nocookie)?\\.com\\/|m\\.youtube\\.com\\/|youtube\\.com\\/)?(?:ytscreeningroom\\?vi?=|youtu\\.be\\/|vi?\\/|user\\/.+\\/u\\/\\w{1,2}\\/|embed\\/|watch\\?(?:.*&)?vi?=|&vi?=|\\?(?:.*&)?vi?=)([^#&?\\n/<>\"']*)/i;\n var match = url.match(regExp);\n return (match && match[1].length === 11) ? match[1] : \"\";\n }\n\n\n const anotherEmbedUploadConfirmation = (value : boolean) => { \n setMultipleEmbedUploads(value);\n }\n\n const closeMessage = () => {\n setDisplayUploadUrlInfo('')\n setMessageStyle('added-url'); \n }\n\n return (\n closeButtonClick()}>\n \n \n Embed video\n \n \n {displayUploadUrlInfo !== '' &&\n
    \n
    \n \n \n Video '{displayUploadUrlInfo}' added \n closeMessage() } /> \n \n
    \n
    \n }\n

    Paste the URL of your Youtube or Vimeo video into the field below.

    \n\n \n Youtube or Vimeo URL \n \n onInputChange(event.target.value)} />\n resetUrlInput() } hidden={!displayClearButton} />\n \n \n \n \n \n
    \n confirmationEvent(e.target.checked)} label=\"I confirm we have permission to use this video \" />*\n
    \n \n

    \n
    \n \n
    \n anotherEmbedUploadConfirmation(e.target.checked)} />\n
    \n \n \n
    \n
    \n
    \n )\n}","import DropZone from 'components/dropzone/dropzone';\nimport { ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { UpdateMedia_Reducer } from 'components/profile/mediaitem/mediaitem.slice';\nimport { IMediaItem, MediaTypeEnum } from 'components/profile/types';\nimport { IndeterminateCheckbox } from 'components/indeterminate.checkbox/indeterminate.checkbox';\nimport { IndeterminateCheckboxEnum } from 'components/indeterminate.checkbox/types';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport { Card, Form, Button } from 'react-bootstrap';\nimport { MdLens } from 'react-icons/md';\nimport \"./media.videos.scss\";\nimport { BsFillExclamationCircleFill, BsX } from 'react-icons/bs';\nimport { useDispatch } from 'react-redux';\nimport _ from 'lodash';\nimport { EmbedVideosModal } from 'components/embed.videos.modal/embed.videos.modal';\n\nexport interface IProps {\n title: string;\n subtitle: string;\n isEnhanced: boolean;\n languageCodes: string[];\n mediaPayload: IMediaItem[];\n isImagesEditable: boolean;\n isCompleted: boolean;\n isProfileForm?: boolean;\n mediaCount: number;\n saveCallback?: () => void;\n uploadCallback?: (mediaItems: IMediaItem[], uploadedMedia: IMediaItem[], mediaType: MediaTypeEnum) => void;\n deleteCallback: (selectedMedia: IMediaItem[], mediaType: MediaTypeEnum) => void;\n}\n\nexport const MediaVideosCard = ({title, subtitle, isEnhanced, languageCodes, mediaPayload, isImagesEditable, isCompleted, isProfileForm,\n mediaCount, saveCallback, uploadCallback, deleteCallback }: IProps) => {\n const [ addButtonText ] = useState(\"Add Videos\");\n const [ acceptedFileTypes ] = useState(['video/webm', 'video/mp4', 'video/mov']);\n const [ uploadedVideos, setUploadedVideos ] = useState([]);\n const [ selectedVideos, setSelectedVideos ] = useState([]);\n const [ invalidFiles, setInvalidFiles ] = useState([]);\n const [ displayInvalidFiles, setDisplayInvalidFiles ] = useState(false); \n const [ showModal, setShowModal ] = useState(false);\n const [ showEmbedModal, setShowEmbedModal ] = useState(false);\n const dispatch = useDispatch();\n\n useEffect(() => {\n setUploadedVideos(mediaPayload);\n }, [mediaPayload]);\n\n const deleteSelectedVideos = () => {\n setShowModal(true);\n }\n\n const deleteVideosCallBack = useCallback((deleteVideos: boolean) => {\n setShowModal(false);\n if (deleteVideos) {\n deleteCallback(selectedVideos, MediaTypeEnum.video);\n setSelectedVideos([]);\n setUploadedVideos([]);\n }\n }, [selectedVideos, deleteCallback])\n\n const setAllVideosState = useCallback((checked: boolean) => {\n const videos: IMediaItem[] = _.cloneDeep(uploadedVideos);\n videos.forEach(video => {\n video.isChecked = checked;\n });\n setUploadedVideos(videos);\n }, [uploadedVideos]);\n\n const checkboxCallback = useCallback((value: number) => {\n switch(value) {\n case 0: {\n setAllVideosState(false);\n break;\n }\n case 1: {\n break;\n }\n case 2: {\n setAllVideosState(true);\n break;\n }\n }\n }, [setAllVideosState]);\n\n const clearInvalidFiles = () => {\n setInvalidFiles([]);\n }\n \n const saveCallbackLocal = () => {\n if (saveCallback) {\n saveCallback();\n }\n }\n\n const uploadVideoCallBack = useCallback((videos: IMediaItem[], invalidFiles: string[]) => {\n if (uploadCallback) {\n uploadCallback(videos, uploadedVideos, MediaTypeEnum.video);\n }\n }, [uploadedVideos, uploadCallback]);\n\n const invalidFilesCallback = useCallback((invalidFilesArray: string[]) => {\n setInvalidFiles(invalidFilesArray);\n if(invalidFilesArray.length > 0) {\n setDisplayInvalidFiles(true);\n }\n }, [])\n \n const selectCallback = useCallback((mediaItems: IMediaItem[]) => {\n const selectedMediaItems = mediaItems.filter(x => x.isChecked === true);\n setSelectedVideos(selectedMediaItems);\n }, [])\n\n const videoDropCallback = (newMediaItems: IMediaItem[]) => {\n dispatch(UpdateMedia_Reducer({mediaItems: newMediaItems, mediaType: MediaTypeEnum.video}));\n }\n\n const embedPopupModalOpen = () => {\n setShowEmbedModal(true);\n }\n\n const embedVideosCloseCallBack = useCallback(() => {\n setShowEmbedModal(false);\n }, []);\n\n const embedVideosCallBack = useCallback(() => {\n }, []);\n\n return(\n \n \n \n
    \n {isProfileForm && } \n {title} \n
    \n \n
    \n \n {subtitle}\n \n \n {\n (invalidFiles.length > 0 && displayInvalidFiles) &&\n \n \n
      These files couldn't be added
    \n
      \n {invalidFiles.map((item, index) =>
    • {item}
    • )}\n
    \n
    \n
    \n }\n {\n (uploadedVideos && selectedVideos.length === 0) &&\n {mediaPayload.length === 1 ? \"Video\" : \"Videos\"} {mediaPayload.length} \n }\n {\n (selectedVideos.length > 0 && mediaPayload.length !== 0 ) &&\n
    \n {selectedVideos.length} {selectedVideos.length === 1 ? \"video\" : \"videos\"} selected\n \n 1 ? 'Keep videos' : 'Keep video'} \n acceptButtonText={selectedVideos.length > 1 ? 'Delete videos' : 'Delete video'} />\n
    \n }\n\n \n
    \n
    \n )\n}","import React, { useState } from 'react';\nimport {InputGroup, CloseButton, Container, Modal, Button, Form, Row, Col } from 'react-bootstrap';\nimport './embed.virtualtours.modal.scss';\nimport { BsFillExclamationCircleFill } from 'react-icons/bs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { EntityTypeEnum, MediaTypeEnum, IMediaIEmbed, IMediaIEmbedApiPayload } from 'components/profile/types';\nimport { uploadEmbedVideos } from 'components/profile/mediaitem/mediaitem.slice';\n\ninterface IProps {\n showModal?: boolean; \n callBack: (outcome: string) => void; \n closeCallback: (outcome: boolean) => void;\n}\n\nexport const EmbedVirtualToursModal = ({showModal = false, callBack, closeCallback }: IProps) => {\n const { id } = useSelector((state: RootState) => state.profileSlice.profile);\n const { mediaItems } = useSelector((state: RootState) => state.mediaItemSlice);\n const [ confirmed, setConfirmed ] = useState(false);\n const [ displayClearButton, setDisplayClearButton ] = useState(false);\n const [ displayTitleClearButton, setDisplayTitleClearButton ] = useState(false); \n const [ embedVideoUrl, setEmbedVideoUrl ] = useState('');\n const [ virtualTourTitle, setVirtualTourTitle ] = useState('');\n const [ invalidUrl, setInvalidUrl ] = useState(false);\n const [ multipleEmbedUploads, setMultipleEmbedUploads ] = useState(false);\n const [ displayUploadUrlInfo, setDisplayUploadUrlInfo ] = useState('');\n const [ messageStyle, setMessageStyle ] = useState('added-url'); \n const dispatch = useDispatch(); \n\n const acceptButtonClick = () => {\n checkUrlValidation(false, true); \n }\n\n const closeButtonClick = () => {\n setConfirmed(false);\n resetUrlInput();\n resetTitleInput();\n closeCallback(false);\n setMessageStyle('added-url');\n setDisplayUploadUrlInfo('');\n setMultipleEmbedUploads(false);\n }\n\n const onTitleInputChange = (title: string) => { \n setVirtualTourTitle(title);\n setDisplayTitleClearButton(true);\n \n }\n\n const resetTitleInput = () => { \n setVirtualTourTitle(\"\");\n setDisplayTitleClearButton(false); \n }\n\n const onInputChange = (url: string) => { \n setMessageStyle('added-url')\n setDisplayClearButton(true);\n setEmbedVideoUrl(url)\n\n if(url === \"\" ) {\n setInvalidUrl(false);\n setEmbedVideoUrl(\"\");\n setDisplayClearButton(false);\n } \n }\n\n const confirmationEvent = (value : boolean) => { \n setConfirmed(value);\n if(value) { \n checkUrlValidation(value, false);\n } \n }\n\n const checkUrlValidation = (value : any, submit: boolean) => {\n if (value || confirmed) {\n validate(embedVideoUrl, submit)\n }\n }\n\n const resetUrlInput = () => {\n setInvalidUrl(false)\n setEmbedVideoUrl(\"\");\n setDisplayClearButton(false); \n }\n\n const isValidURL = (str: string) => {\n try { return Boolean(new URL(str)); }\n catch (e) { return false; }\n } \n\n const validate = (originalUrlName: string, submit: boolean) => {\n\n const videoUrl = originalUrlName.toLowerCase();\n setDisplayClearButton(true);\n\n if (isValidURL(videoUrl) ) { \n \n if (displayUploadUrlInfo !== '') {\n setMessageStyle('added-url-fade-in')\n } \n\n setInvalidUrl(false);\n\n if (submit) { \n const embedMediaItem : IMediaIEmbed = {\n entityType: EntityTypeEnum.profile, \n label: virtualTourTitle,\n mediaType : MediaTypeEnum.virtualTour,\n url: originalUrlName, \n profileId: id, \n azureContainerName: \"profile-wizard-images\",\n originalFileName: originalUrlName,\n sequence: mediaItems.length,\n hasAcceptedUsagePolicy: true\n }\n const apiPayload : IMediaIEmbedApiPayload = {\n toastMessage: \"Virtual tour added\",\n IMediaIEmbed: embedMediaItem, \n enableToast : multipleEmbedUploads ? false: true } \n\n dispatch(uploadEmbedVideos(apiPayload));\n\n if (!multipleEmbedUploads) {\n setConfirmed(false);\n resetUrlInput();\n resetTitleInput();\n closeCallback(false);\n closeMessage();\n } else { \n setDisplayUploadUrlInfo(originalUrlName) \n resetUrlInput();\n resetTitleInput(); \n setConfirmed(false); \n } \n\n }\n\n } else {\n setInvalidUrl(true);\n }\n\n if(originalUrlName === \"\") {\n setInvalidUrl(false);\n setDisplayClearButton(false);\n }\n } \n\n const anotherEmbedUploadConfirmation = (value : boolean) => { \n setMultipleEmbedUploads(value);\n }\n\n const closeMessage = () => {\n setDisplayUploadUrlInfo('')\n setMessageStyle('added-url'); \n }\n\n return (\n closeButtonClick()}>\n \n \n Embed virtual tour\n \n \n {displayUploadUrlInfo !== '' &&\n
    \n
    \n \n \n Virtual tour '{displayUploadUrlInfo}' added \n closeMessage() } /> \n \n
    \n
    \n }\n

    Paste the link of your standalone HTML viewer (such as Google Street View or an HTML5 panorama) into the field below.

    \n \n \n Title*\n \n onTitleInputChange(event.target.value)} />\n \n resetTitleInput() } hidden={!displayTitleClearButton} />\n \n\n Embed link*\n \n onInputChange(event.target.value)} />\n resetUrlInput() } hidden={!displayClearButton} />\n \n \n \n \n \n
    \n confirmationEvent(e.target.checked)} label=\"I confirm we have permission to use this virtual tour \" />*\n
    \n \n

    \n
    \n \n
    \n anotherEmbedUploadConfirmation(e.target.checked)} />\n
    \n \n \n
    \n
    \n
    \n )\n}","import DropZone from 'components/dropzone/dropzone';\nimport { ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport { IMediaItem, MediaTypeEnum } from 'components/profile/types';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Card, Form, Button } from 'react-bootstrap';\nimport { MdLens } from 'react-icons/md';\nimport \"./media.virtual.tours.scss\";\nimport { UpdateMedia_Reducer } from 'components/profile/mediaitem/mediaitem.slice';\nimport { EmbedVirtualToursModal } from 'components/embed.virtualtours.modal/embed.virtualtours.modal';\nimport { IndeterminateCheckbox } from 'components/indeterminate.checkbox/indeterminate.checkbox';\nimport { IndeterminateCheckboxEnum } from 'components/indeterminate.checkbox/types';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport { useAppDispatch } from 'app/store';\nimport _ from 'lodash';\n\nexport interface IProps {\n title: string;\n subtitle: string;\n isEnhanced: boolean;\n languageCodes: string[];\n mediaPayload: IMediaItem[];\n isMediaEditable: boolean;\n isCompleted: boolean;\n isProfileForm?: boolean;\n mediaCount: number;\n saveCallback?: () => void;\n deleteCallback: (selectedMedia: IMediaItem[], mediaType: MediaTypeEnum) => void;\n}\n\nexport const MediaVirtualToursCard = ({title, subtitle, isEnhanced, languageCodes, mediaPayload, isMediaEditable, isCompleted, isProfileForm,\n mediaCount, saveCallback, deleteCallback }: IProps) => {\n const [ addButtonText] = useState(\"Embed virtual tour\");\n const [ acceptedFileTypes] = useState(['']);\n const [ uploadedMedia, setUploadedMedia ] = useState([]);\n const [ selectedMedia, setSelectedMedia ] = useState([]);\n const [ invalidFiles, setInvalidFiles ] = useState([]); \n const [ showModal, setShowModal ] = useState(false);\n const [ showEmbedModal, setShowEmbedModal ] = useState(false);\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n setUploadedMedia(mediaPayload);\n }, [mediaPayload]);\n\n const deleteSelectedMedia = () => {\n setShowModal(true);\n }\n\n const deleteMediaCallBack = useCallback((deleteImages: boolean) => {\n setShowModal(false);\n if (deleteImages) {\n setSelectedMedia([]);\n deleteCallback(selectedMedia, MediaTypeEnum.virtualTour);\n }\n }, [selectedMedia, deleteCallback])\n\n const setAllImagesState = useCallback((checked: boolean) => {\n const images: IMediaItem[] = _.cloneDeep(uploadedMedia);\n images.forEach(image => {\n image.isChecked = checked;\n });\n setUploadedMedia(images);\n }, [uploadedMedia]);\n\n const checkboxCallback = useCallback((value: number) => {\n switch(value) {\n case 0: {\n setAllImagesState(false);\n break;\n }\n case 1: {\n break;\n }\n case 2: {\n setAllImagesState(true);\n break;\n }\n }\n }, [setAllImagesState]);\n \n const saveCallbackLocal = () => {\n if (saveCallback) {\n saveCallback();\n }\n }\n\n const uploadMediaCallBack = useCallback((videos: IMediaItem[], invalidFiles: string[]) => { \n const selectedMedia = videos.filter(x => x.isChecked === true);\n setSelectedMedia(selectedMedia);\n setInvalidFiles(invalidFiles);\n }, []);\n\n const selectCallback = useCallback((mediaItems: IMediaItem[]) => {\n const selectedMediaItems = mediaItems.filter(x => x.isChecked === true);\n setSelectedMedia(selectedMediaItems);\n }, [])\n\n const embedPopupModalOpenCallBack = useCallback(() => {\n embedPopupModalOpen();\n }, []);\n\n const embedPopupModalOpen = () => {\n setShowEmbedModal(true);\n } \n\n const embedVideosCloseCallBack = useCallback(() => {\n setShowEmbedModal(false);\n }, []);\n\n const embedVideosCallBack = useCallback(() => {\n }, []); \n\n const virtualTourDropCallback = (newMediaItems: IMediaItem[]) => {\n dispatch(UpdateMedia_Reducer({mediaItems: newMediaItems, mediaType: MediaTypeEnum.virtualTour}));\n }\n\n return(\n \n \n \n
    \n {isProfileForm && } \n {title} \n
    \n
    \n \n {subtitle}\n \n \n {\n (selectedMedia.length > 0 && mediaPayload.length !== 0 ) && \n
    \n {selectedMedia.length} {selectedMedia.length === 1 ? \"virtual tour\" : \"virtual tours\"} selected\n \n 1 ? 'Keep virtual tours' : 'Keep virtual tour'} \n acceptButtonText={selectedMedia.length > 1 ? 'Delete virtual tours' : 'Delete virtual tour'} />\n
    \n }\n\n \n
    \n
    \n )\n}","import { minimumImages, minimumVideos } from 'app/config';\nimport { RootState } from 'app/root-reducer';\nimport { ProfileImagesCard } from 'components/profile.images.card/profile.images.card';\nimport { IDeleteMediaPayload, EntityTypeEnum, IMediaItem, MediaTypeEnum } from 'components/profile/types';\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { useSelector } from 'react-redux';\nimport { MediaAppearancesCard } from './features/appearances/media.appearances';\nimport { MediaVideosCard } from './features/videos/media.videos';\nimport { MediaVirtualToursCard } from './features/virtual.tours/media.virtual.tours';\nimport { useAppDispatch } from 'app/store';\nimport { deleteMedia, getMediaItems, uploadMedia, isMediaComplete, UpdateMedia_Reducer } from 'components/profile/mediaitem/mediaitem.slice';\nimport { updateProfileFromStore, UpdateSectionCompleteWithValue} from 'components/profile/profile.slice';\nimport { ProfileFormPageEnum } from 'pages/profile-form/profile.form.types';\nimport _ from 'lodash';\n\ninterface IProps {\n saveCallback: () => void;\n}\n\nexport const MediaPage = ({saveCallback}: IProps) => {\n const { isEnhanced, availableLanguages, name, id } = useSelector((state: RootState) => state.profileSlice.profile);\n const { mediaItems, isMediaItemSliceLoading } = useSelector((state: RootState) => state.mediaItemSlice);\n const [ videos, setVideos ] = useState([]);\n const [ images, setImages ] = useState([]);\n const [ virtualTours, setVirtualTours ] = useState([]);\n const [ imagesComplete, setImagesComplete ] = useState(false);\n const [ videosComplete, setVideosComplete ] = useState(false);\n const [ virtualToursComplete, setVirtualToursComplete ] = useState(false);\n const dispatch = useAppDispatch();\n\n const getImages = useCallback(() => {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.image).sort((a, b) => a.sequence > b.sequence ? 1 : -1);\n }, [mediaItems])\n\n const getVideos = useCallback(() => {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.video || x.mediaType === MediaTypeEnum.embedVideo).sort((a, b) => a.sequence > b.sequence ? 1 : -1);\n }, [mediaItems])\n\n const getVirtualTours = useCallback(() => {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.virtualTour).sort((a, b) => a.sequence > b.sequence ? 1 : -1);\n }, [mediaItems])\n\n const getMediaCount = (getFunction: () => IMediaItem[]) => {\n return getFunction()?.length;\n }\n\n useEffect(() => {\n //Load MediaItems from API\n if (id) {\n dispatch(getMediaItems(id));\n }\n }, [dispatch, id]);\n\n useEffect(() => {\n //Set mediaItems (from API) into local component state.\n if (!isMediaItemSliceLoading) {\n //mediaItems has now been populated. \n setImages(getImages());\n setVideos(getVideos());\n setVirtualTours(getVirtualTours());\n\n setImagesComplete(mediaItems.filter(x => x.mediaType === MediaTypeEnum.image).length >= minimumImages);\n setVideosComplete(mediaItems.filter(x => x.mediaType === MediaTypeEnum.video || x.mediaType === MediaTypeEnum.embedVideo).length >= minimumVideos);\n setVirtualToursComplete(mediaItems.filter(x => x.mediaType === MediaTypeEnum.virtualTour).length >= 1);\n }\n }, [mediaItems, isMediaItemSliceLoading, getImages, getVideos, getVirtualTours]);\n\n const uploadMediaCallBack = useCallback((newMediaItems: IMediaItem[], uploadedMedia: IMediaItem[], mediaType: MediaTypeEnum) => {\n const uploadMediaFormData = () => {\n const formData = new FormData();\n newMediaItems.forEach(mItem => {\n if (mItem.url === '' && mItem.file) {\n formData.append(\"files\", mItem.file);\n formData.append(\"sequences\", mItem.sequence.toString());\n }\n });\n\n formData.append(\"container\", \"profile-wizard-images\");\n // id in this case is the profileid\n formData.append(\"profileId\", id);\n formData.append(\"parentEntityType\", EntityTypeEnum.profile);\n formData.append(\"mediaType\", mediaType);\n formData.append(\"hasAcceptedUsagePolicy\", \"true\");\n\n if (formData.get('files') != null) {\n //When uploading we should only update SectionsComplete on the Profile document if we have just hit the minimum required num images.\n Promise.all([\n isMediaComplete(ProfileFormPageEnum.media)\n ]).then(returnValues => {\n const isCompleteBefore = returnValues[0] as boolean;\n dispatch(uploadMedia({mediaType: mediaType, formData: formData })).then(() => {\n const isCompleteAfter = isMediaComplete(ProfileFormPageEnum.media);\n if (!isCompleteBefore && isCompleteAfter) {\n Promise.all([\n dispatch(UpdateSectionCompleteWithValue({ pageId: ProfileFormPageEnum.media, value: true })),\n dispatch(updateProfileFromStore())\n ])\n }\n })\n })\n }\n }\n if (id && newMediaItems.length > uploadedMedia.length) {\n uploadMediaFormData();\n }\n }, [dispatch, id]);\n\n const deleteMediaCallBack = useCallback((selectedMedia: IMediaItem[], mediaType: MediaTypeEnum) => {\n const payload: IDeleteMediaPayload = { mediaItems: selectedMedia, showToast: true, mediaType: mediaType };\n let mediaItemsTemp: IMediaItem[] = _.cloneDeep(mediaItems);\n selectedMedia.forEach(image => {\n const index = mediaItemsTemp.findIndex(x => x.id === image.id);\n mediaItemsTemp.splice(index, 1);\n });\n\n //If we are updating images, we need to update SectionsComplete. But we should only update the DB if there has been a change, ie. delete below the minimum required images.\n if (mediaType === MediaTypeEnum.image) {\n const wasComplete = isMediaComplete(ProfileFormPageEnum.media)\n Promise.all([\n dispatch(deleteMedia(payload)),\n dispatch(UpdateMedia_Reducer({mediaItems: mediaItemsTemp, mediaType: mediaType}))\n ]).then(() => {\n const isCompleteNow = isMediaComplete(ProfileFormPageEnum.media);\n if (wasComplete && !isCompleteNow) {\n Promise.all([\n dispatch(UpdateSectionCompleteWithValue({ pageId: ProfileFormPageEnum.media, value: false })),\n dispatch(updateProfileFromStore())\n ])\n }\n });\n }\n else {\n dispatch(deleteMedia(payload));\n dispatch(UpdateMedia_Reducer({mediaItems: mediaItemsTemp, mediaType: mediaType}));\n }\n }, [dispatch, mediaItems])\n\n return (\n !isMediaItemSliceLoading ?\n \n \n {\n isEnhanced && \n \n \n \n \n \n }\n \n : null\n )\n}","import React, { useState } from 'react';\nimport { ChecklistSection } from 'pages/profile-form/profile.form.types';\nimport { Container, Row, Card, Col } from 'react-bootstrap';\nimport { BsDot } from 'react-icons/bs';\nimport './profile.checklist.scss';\nimport { useEffect } from 'react';\nimport { ProfileFormPageEnum } from '../../profile.form.types';\n\ninterface IProps {\n availableSections: ChecklistSection[];\n}\n\nexport const ProfileChecklist = ({availableSections}: IProps) => {\n \n const [ sections, setSections ] = useState([]);\n const [ currentSection, setCurrentSection ] = useState(\"\");\n const [ yAxisOffset ] = useState(-60);\n\n useEffect(() => {\n setSections(availableSections);\n }, [availableSections]);\n\n const setCurrentSectionAndScroll = (section: ChecklistSection) => {\n setCurrentSection(section.id); \n const element = document.getElementById(section.id);\n if (element) {\n const y = element.getBoundingClientRect().top + window.pageYOffset + yAxisOffset;\n window.scrollTo({top: y, behavior: 'smooth'});\n }\n }\n \n return (\n \n \n Checklist\n \n \n {\n sections.map((section, index) => \n setCurrentSectionAndScroll(section)} key={index} className={`checklist-item ${currentSection === section.id ? \"checklist-item-active\" : \"\"}`}>\n \n
    {section.label}
    \n \n \n \n \n
    )\n }\n
    \n
    \n )\n}","import React, { useState, useCallback } from 'react';\nimport { RootState } from 'app/root-reducer';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Row, Col, Card, Form } from 'react-bootstrap';\nimport './fast-facts.page.scss';\nimport { PillTextInput } from 'components/pill.text.input/pill.text.input';\nimport { UpdateQualityAssuranceBody, UpdateProfileStarRating, UpdateAlternativeRating, UpdateProfileRoomCount, UpdateTimeFormat, UpdateProfileCheckinTimeFrom, \n UpdateProfileCheckoutTimeFrom, UpdateProfileCheckinTimeTo, UpdateProfileCheckoutTimeTo, UpdateMinimumChildAge, UpdateProfileFeatures } from 'components/profile/profile.slice';\nimport { BsDot, BsTrash } from 'react-icons/bs';\nimport { StarRating } from 'components/star.rating/star.rating';\nimport { ShowMore } from 'components/show.more/show.more';\nimport { NumberStepper } from 'components/number.stepper/number.stepper';\nimport { TimeFormatEnum, ITime, FeatureTypeEnum, IFeature } from '../../../../components/profile/types';\nimport { TimePicker } from 'components/time.picker/time.picker';\nimport { CheckboxAccordion } from 'components/checkbox.accordion/checkbox.accordion';\nimport { languages } from 'app/config';\nimport { Facilities } from 'components/facilities/facilities';\nimport { initialState } from '../../../../components/profile/profile.slice';\n\ninterface IProps {\n isCompleted: boolean;\n}\n\nexport const FastFactsPage = ({isCompleted}: IProps) => {\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const [ roomCountLocal, setRoomCountLocal ] = useState(profile.roomCount ? profile.roomCount : 0);\n const [ languagesMessage, setLanguagesMessage ] = useState(\"\");\n const [ languageExists, setLanguageExists ] = useState(false);\n const otherLanguages = profile.features?.filter(x => x.id === 0 && x.type === FeatureTypeEnum.language);\n const otherLanguagesNames = otherLanguages?.map(x => x.name);\n const [ qualityAssuranceBody, setQualityAssuranceBody ] = useState(profile.qualityAssuranceBody ? profile.qualityAssuranceBody : '');\n const [ starRating, setStarRating ] = useState(profile.starRating ? profile.starRating : 0);\n const [ alternativeRating, setAlternativeRating ] = useState(profile.alternativeRating ? profile.alternativeRating : '');\n const [ timeFormat, setTimeFormat ] = useState(profile.timeFormat? profile.timeFormat : initialState.profile.timeFormat);\n const [ checkinTimeFrom, setCheckinTimeFrom ] = useState(profile.checkinTimeFrom ? profile.checkinTimeFrom : initialState.profile.checkinTimeFrom);\n const [ checkinTimeTo, setCheckinTimeTo ] = useState(profile.checkinTimeTo ? profile.checkinTimeTo : initialState.profile.checkinTimeTo);\n const [ checkoutTimeFrom, setCheckoutTimeFrom ] = useState(profile.checkoutTimeFrom ? profile.checkoutTimeFrom : initialState.profile.checkoutTimeFrom);\n const [ checkoutTimeTo, setCheckoutTimeTo ] = useState(profile.checkoutTimeTo ? profile.checkoutTimeTo : initialState.profile.checkoutTimeTo);\n const [ minimumChildAge, setMinimumChildAge ] = useState(profile.minimumChildAge ? profile.minimumChildAge : 0);\n const [ features, setFeatures ] = useState(profile.features);\n const [ showAltRating, setShowAltRating ] = useState(profile.alternativeRating?.length > 0);\n const dispatch = useDispatch();\n\n const facilityLabels: string[] = [\n \"Use the Friendly options to highlight special capabilities of your property. Check options that are unusual for establishments in your area.\",\n \"Use the Special Interests options to showcase a few particular, outstanding benefits of your location that are sure to draw visitors.\",\n \"\"\n ];\n const featuresSectionName = \"Fast Facts\";\n\n const timeFormats = Object.values(TimeFormatEnum);\n \n const getTimeFormatLabel = (timeFormat: TimeFormatEnum): string => {\n switch (timeFormat) {\n case TimeFormatEnum.Hours12:\n return \"12 Hour\";\n case TimeFormatEnum.Hours24:\n return \"24 Hour\";\n default:\n return '';\n }\n }\n \n const getTimeFormatLabel2 = (timeFormat: TimeFormatEnum): string => {\n switch (timeFormat) {\n case TimeFormatEnum.Hours12:\n return \"12:00 AM - 11:59 PM\";\n case TimeFormatEnum.Hours24:\n return \"00:00 - 24:00\";\n default:\n return '';\n }\n }\n\n const qualityAssuranceBodyChange = (inputString: string) => {\n setQualityAssuranceBody(inputString);\n dispatch(UpdateQualityAssuranceBody(inputString));\n }\n\n const altRatingChange = (altRating: string) => {\n setAlternativeRating(altRating);\n dispatch(UpdateAlternativeRating(altRating));\n }\n \n const deleteAltRating = () => {\n setShowAltRating(false);\n setAlternativeRating('');\n dispatch(UpdateAlternativeRating(''));\n }\n\n const addAlternativeRatingCallback = () => {\n setShowAltRating(true);\n }\n\n const ratingCallback = useCallback((rating: number) => {\n setStarRating(rating);\n dispatch(UpdateProfileStarRating(rating));\n }, [dispatch]);\n\n const roomCountCallback = useCallback((count: number) => {\n dispatch(UpdateProfileRoomCount(count));\n setRoomCountLocal(count);\n }, [dispatch]);\n\n const timeFormatChange = (newTimeFormat: TimeFormatEnum) => {\n setTimeFormat(newTimeFormat);\n dispatch(UpdateTimeFormat(newTimeFormat));\n }\n\n const timePickerCallbackCheckinFrom = (time: ITime) => {\n setCheckinTimeFrom(time);\n dispatch(UpdateProfileCheckinTimeFrom(time));\n }\n \n const timePickerCallbackCheckinTo = (time: ITime) => {\n setCheckinTimeTo(time);\n dispatch(UpdateProfileCheckinTimeTo(time));\n }\n\n const timePickerCallbackCheckoutFrom = (time: ITime) => {\n setCheckoutTimeFrom(time);\n dispatch(UpdateProfileCheckoutTimeFrom(time));\n }\n \n const timePickerCallbackCheckoutTo = (time: ITime) => {\n setCheckoutTimeTo(time);\n dispatch(UpdateProfileCheckoutTimeTo(time));\n }\n\n const minChildAgeChange = (event: any) => {\n if (event.target.value) {\n const num = Number(event.target.value);\n if (num >= 0) {\n setMinimumChildAge(num);\n dispatch(UpdateMinimumChildAge(num));\n }\n }\n else {\n setMinimumChildAge(0);\n dispatch(UpdateMinimumChildAge(0));\n }\n }\n \n const languageAccordionCallBack = (checked: boolean, language: IFeature) => {\n let updatedFeatures = [];\n if (checked) {\n updatedFeatures = [...profile.features, language];\n } \n else {\n updatedFeatures = [...profile.features];\n const index = updatedFeatures.findIndex(x => x.id === language.id);\n if (index > -1) { \n updatedFeatures.splice(index, 1);\n }\n }\n setFeatures(updatedFeatures);\n dispatch(UpdateProfileFeatures(updatedFeatures));\n }\n \n const addAdditionalLanguage = (name: string) => {\n const addedLanguage = {\n id: 0,\n type: FeatureTypeEnum.language,\n name: name\n } as IFeature;\n const updatedFeatures = [...profile.features, addedLanguage]\n setFeatures(updatedFeatures);\n dispatch(UpdateProfileFeatures(updatedFeatures));\n }\n \n const languageCallBack = (name: string) => {\n addAdditionalLanguage(name);\n }\n\n const checkLanguageExists = (value: string) =>{\n let updatedFeatures = [...profile.features];\n\n const index = updatedFeatures.findIndex(x => x.id === 0 && x.type === FeatureTypeEnum.language && x.name.toLowerCase() === value.toLowerCase());\n const checkBoxIndex = languages.findIndex(x => x.name.toLowerCase() === value.toLowerCase());\n \n if (index > -1 || checkBoxIndex > -1) {\n setLanguageExists(true);\n if (index > -1) {\n setLanguagesMessage(`${value} already added`);\n } \n else {\n setLanguagesMessage(`${value} available in language list`);\n }\n } \n else {\n setLanguageExists(false);\n setLanguagesMessage(value);\n }\n }\n\n const changeLanguageCallBack = (name: string) => {\n checkLanguageExists(name);\n }\n\n const onRemoveLanguage = (itemName: string) => {\n let updatedFeatures = [...profile.features];\n const index = updatedFeatures.findIndex(x => x.id === 0 && x.type === FeatureTypeEnum.language && x.name === itemName);\n if (index > -1) { \n updatedFeatures.splice(index, 1);\n }\n setFeatures(updatedFeatures);\n dispatch(UpdateProfileFeatures(updatedFeatures));\n }\n\n return (\n \n \n \n \n \n Fast Facts\n The details you select will be displayed on your iBrochure and will also appear on digital itineraries featuring your listing that are built by Operators in Wetu.\n \n \n \n \n \n Quality Assurance Body\n qualityAssuranceBodyChange(e.target.value)} id=\"qab-input\" type=\"text\" />\n E.g. AAA, TGCSA, Hotelstars Union\n \n \n Star rating\n \n \n \n Rating\n
    \n altRatingChange(e.target.value)} id=\"alt-rating-input\" type=\"text\" className=\"alt-image-rating\"/> deleteAltRating()}/>\n
    \n E.g. 5 Diamonds, 4.4/5 Excellent, 9/10\n
    \n \n Number of rooms\n \n \n \n TIME FORMAT\n {timeFormats.map((option, i) => {\n return
    \n timeFormatChange(event.target.value as TimeFormatEnum)} value={option} />\n \n
    \n })}\n
    \n CHECK IN\n \n \n \n \n From\n \n \n \n - \n \n \n Until\n \n \n \n \n \n CHECK OUT\n \n \n \n \n By\n \n \n \n - \n \n \n  \n \n \n \n \n \n \n Minimum child age\n 0 ? minimumChildAge : ''} onChange={(e) => minChildAgeChange(e)} id=\"min-age-input\" type=\"number\" placeholder=\"0\"/>\n \n \n SPOKEN LANGUAGES\n Select all the languages spoken by staff members at your establishment.\n \n {\n \n }\n \n \n \n \n \n \n
    \n
    \n )\n}","import { Facilities } from 'components/facilities/facilities';\nimport React from 'react';\nimport { Card } from \"react-bootstrap\"\nimport { MdLens } from 'react-icons/md';\nimport { FacilitiesProps } from '../../types';\n\nexport const FacilitiesSectionCard = ({isCompleted = false, featureDataSectionName, labels, sectionId, subtitle, title}: FacilitiesProps) => {\n\n return(\n \n \n \n \n {title}\n \n \n {subtitle}\n \n \n \n \n )\n}","import React, { useEffect, useState } from 'react';\nimport './facilities.page.scss';\nimport { FacilitiesSectionCard } from './features/facilities.section.card/facilities.section.card';\nimport { ProfileFacilitiesSectionEnum, ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { isFeaturesSelected } from 'components/profile/profile.slice';\n\nexport const FacilitiesPage = () => {\n\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const [ propertyCompleted, setPropertyCompleted ] = useState(false);\n const [ roomsCompleted, setRoomsCompleted ] = useState(false);\n const [ servicesCompleted, setServicesCompleted ] = useState(false);\n const [ activitiesOnSiteCompleted, setActivitiesOnSiteCompleted ] = useState(false);\n const [ activitiesNearbyCompleted, setActivitiesNearbyCompleted ] = useState(false);\n \n useEffect(() => {\n setPropertyCompleted(isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.property));\n setRoomsCompleted(isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.sleepingArrangments));\n setServicesCompleted(isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.services));\n setActivitiesOnSiteCompleted(isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.activitiesOnSite));\n setActivitiesNearbyCompleted(isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.activitiesNearby));\n }, [profile]);\n\n return(\n
    \n \n \n \n \n \n
    \n )\n}","import React from \"react\";\nimport { Button } from \"react-bootstrap\";\n\ntype CustomToggleProps = {\n children?: React.ReactNode;\n onClick?: (event: React.MouseEvent) => {};\n };\n\nexport const MultiSelectToggle = React.forwardRef((props: CustomToggleProps, ref: React.Ref) => (\n {\n e.preventDefault();\n if (props.onClick) props.onClick(e);\n }}\n >\n {props.children}\n \n));","import React, { useEffect, useState } from 'react';\nimport { Dropdown, Form } from 'react-bootstrap';\nimport _ from 'lodash';\nimport { MultiSelectToggle } from './features/multiselect.toggle/multiselect.toggle';\nimport './multiselect.scss';\nimport { BsCaretDownFill } from 'react-icons/bs';\nimport { IndeterminateCheckboxEnum } from 'components/indeterminate.checkbox/types';\nimport { IndeterminateCheckbox } from 'components/indeterminate.checkbox/indeterminate.checkbox';\nimport { IMultiSelectData } from 'components/profile/types';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport { pluralise, replaceAll } from 'utils/General';\n\ninterface MultiSelectProps {\n data: IMultiSelectData[];\n multiSelectCallback: (data: IMultiSelectData[]) => void;\n title: string;\n hasSelectAll?: boolean;\n\n //Parameters to handle confirmation dialog to confirm deletion if items are de-selected.\n confirmDeselectCallback?: (data: IMultiSelectData[]) => void;\n getNumDeselectMediaItemsCallback?: (data: IMultiSelectData[]) => number;\n confirmDeselectOkText?: string;\n confirmDeselectCancelText?: string;\n confirmDeselectTitleText?: string;\n confirmDeselectBodyText?: string; //\"Delete {n} {document}?\" converted to eg. \"Delete 3 documents\"\n}\n\nexport const MultiSelect = ({data, multiSelectCallback, title, hasSelectAll = false, confirmDeselectCallback, getNumDeselectMediaItemsCallback,\n confirmDeselectOkText, confirmDeselectCancelText, confirmDeselectTitleText, confirmDeselectBodyText }: MultiSelectProps) => {\n\n const [ menuItems, setMenuItems ] = useState(data);\n const [ show, setShow ] = useState(false);\n const [ selectAll, setSelectAll ] = useState(IndeterminateCheckboxEnum.unchecked);\n const [ initialMenuItems, setInitialMenuItems ] = useState([]);\n const [ newlyAddedSections, setNewlyAddedSections ] = useState([]);\n const [ showConfirmDeleteModal, setShowConfirmDeleteModal ] = useState(false);\n const [ confirmDeleteBodyTextLocal, setConfirmDeleteBodyTextLocal ] = useState('');\n const [ confirmDeleteTitleTextLocal, setConfirmDeleteTitleTextLocal ] = useState('');\n const [ deSelectedItems, setDeSelectedItems ] = useState([]);\n\n useEffect(() => {\n setMenuItems(data);\n setInitialMenuItems( _.cloneDeep(data));\n }, [data]);\n\n useEffect(() => {\n // Select all\n if (hasSelectAll) {\n const determineSelectAll = () => {\n if (menuItems.filter(x => x.isChecked).length === menuItems.length) {\n setSelectAll(IndeterminateCheckboxEnum.checked);\n } else if (menuItems.filter(x => x.isChecked).length === 0) {\n setSelectAll(IndeterminateCheckboxEnum.unchecked);\n } else {\n setSelectAll(IndeterminateCheckboxEnum.indeterminate);\n }\n }\n determineSelectAll();\n }\n }, [menuItems, hasSelectAll]);\n\n const onItemClick = (index: number) => {\n let items = _.cloneDeep(menuItems);\n items[index].isChecked = !items[index].isChecked;\n setMenuItems(items);\n }\n\n const checkDeSelectedItems = () => {\n if (confirmDeselectCallback) {\n const existingItems = initialMenuItems?.filter(x => x.isChecked);\n const deSelectedItemsTemp = existingItems.filter(x => x.isChecked && menuItems.find(y => y.key === x.key)?.isChecked === false);\n const newlyAddedItems = menuItems.filter(x => x.isChecked && initialMenuItems.find(y => y.key === x.key && !y.isChecked));\n setNewlyAddedSections(newlyAddedItems); //They may have added new sections as well as de-selecting existing sections.\n const numDeSelectedSections = deSelectedItemsTemp.length;\n\n let numDeselectedMediaItems = 0;\n //We know how many checkboxes (sections) have been de-selected, next we need the total number of objects (eg. documents) associated with the de-selected sections.\n if (getNumDeselectMediaItemsCallback) {\n numDeselectedMediaItems = getNumDeselectMediaItemsCallback(deSelectedItemsTemp);\n }\n if (numDeselectedMediaItems > 0 && getNumDeselectMediaItemsCallback) {\n //Interpolate the message strings, replacing placeholders with literals, then open the confirmation modal.\n setConfirmDeleteBodyTextLocal(formatMessage(confirmDeselectBodyText, numDeselectedMediaItems, numDeSelectedSections));\n setConfirmDeleteTitleTextLocal(formatMessage(confirmDeselectTitleText, numDeselectedMediaItems, numDeSelectedSections));\n setDeSelectedItems(deSelectedItemsTemp);\n setShowConfirmDeleteModal(true);\n return false;\n }\n }\n return true;\n }\n\n const onDoneClick = () => {\n if (checkDeSelectedItems()) {\n setShow(false);\n multiSelectCallback(menuItems);\n }\n }\n\n const formatMessage = (messageText: string | undefined, numDeSelectedObjects: number, numDeSelectedSections: number): string => {\n //Replace placeholders with string literals.\n if (messageText) {\n messageText = replaceAll(messageText, '{NUMSECTIONS}', numDeSelectedSections.toString()); //Number of de-selected checkboxes.\n messageText = replaceAll(messageText, '{NUMOBJECTS}', numDeSelectedObjects.toString()); //Number of objects (mediaItems) that would be deleted as a result.\n \n let openPos = messageText.indexOf('{');\n while (openPos >= 0) {\n let closePos = messageText.indexOf('}', openPos + 1);\n if (closePos > openPos) {\n const wordWithBrackets = messageText.substring(openPos, closePos + 1);\n const wordWithParams = messageText.substring(openPos + 1, closePos); //Format: word|plural suffix|num sections\n const tokens = wordWithParams.split('|');\n if (tokens.length === 3) {\n const word: string = tokens[0]; //eg. category\n const pluralSuffix: string = tokens[1]; //'s' or 'ies'\n const countType: string = tokens[2]; //Either NUMSECTIONS or NUMOBJECTS\n const numItems = countType === 'NUMSECTIONS' ? numDeSelectedSections : numDeSelectedObjects;\n if (word === 'its') {\n const newString = numItems !== 1 ? 'their' : word;\n messageText = replaceAll(messageText, wordWithBrackets, newString);\n }\n else {\n messageText = replaceAll(messageText, wordWithBrackets, pluralise(word, numItems, pluralSuffix));\n }\n openPos = messageText.indexOf('{');\n }\n }\n else {\n openPos = messageText.indexOf('{', openPos + 1);\n }\n }\n }\n return messageText ? messageText : '';\n }\n\n const onSelectAll = () => {\n let items = _.cloneDeep(menuItems);\n items.forEach(item => item.isChecked = !selectAll);\n setMenuItems(items);\n }\n\n const selectFromNewItems = (data: IMultiSelectData[], newItems: IMultiSelectData[]): IMultiSelectData[] => {\n //Update data by checking items that are found in newItems.\n let dataCopy = _.cloneDeep(data);\n for (let i = 0; i < dataCopy.length; i++) {\n if (newItems.find(x => x.key === dataCopy[i].key)) {\n dataCopy[i].isChecked = true;\n }\n }\n return dataCopy;\n }\n\n const deleteCallbackLocal = (doDelete: boolean) => {\n setShowConfirmDeleteModal(false);\n if (!doDelete) {\n setMenuItems(selectFromNewItems(initialMenuItems, newlyAddedSections));\n }\n else {\n setShowConfirmDeleteModal(false);\n setShow(false);\n if (confirmDeselectCallback) {\n confirmDeselectCallback(deSelectedItems);\n }\n if (newlyAddedSections.length > 0) {\n //If they confirm that they want to de-select and delete associated mediaItems, we need to update with any newly added sections they may have selected.\n multiSelectCallback(menuItems);\n }\n }\n }\n\n return (\n <>\n \n setShow(!show)} className=\"multiselect-toggle\" as={MultiSelectToggle}>\n {title} \n \n \n {\n hasSelectAll && \n
    onSelectAll()} className=\"select-all\">\n \n Select all\n
    \n }\n {\n menuItems.map((item, index) => {\n return
    onItemClick(index)}>\n
    {item.title}
    \n {\n item.subtitle &&
    {item.subtitle}
    \n }\n
    \n })\n }\n \n onDoneClick()}>Done\n
    \n
    \n { confirmDeselectCallback && confirmDeselectTitleText && confirmDeleteBodyTextLocal && showConfirmDeleteModal &&\n \n }\n \n )\n}","import { MultiSelect } from 'components/multi-select/multiselect';\nimport { IMultiSelectData } from 'components/profile/types';\nimport React from 'react';\nimport { Card } from 'react-bootstrap';\nimport './multi.select.repeater.scss';\n\ninterface IProps {\n id: string;\n title: string;\n dropDownDefaultText: string;\n multiSelectData: IMultiSelectData[];\n multiSelectCallback: (data: IMultiSelectData[]) => void;\n children: React.ReactNode;\n hasSelectAll?: boolean;\n \n //Parameters to prompt the user to confirm before de-selecting items which would otherwise be deleted:\n confirmDeselectCallback?: (data: IMultiSelectData[]) => void;\n getNumDeselectMediaItemsCallback?: (data: IMultiSelectData[]) => number;\n confirmDeselectOkText?: string;\n confirmDeselectCancelText?: string;\n confirmDeselectTitleText?: string;\n confirmDeselectBodyText?: string; //\"Delete {n} {document}?\" converted to eg. \"Delete 3 documents\"\n}\n\nexport const MultiSelectRepeater = ({id, title, dropDownDefaultText, multiSelectData, multiSelectCallback, children, hasSelectAll,\n confirmDeselectCallback, confirmDeselectOkText, confirmDeselectCancelText, confirmDeselectTitleText, confirmDeselectBodyText,\n getNumDeselectMediaItemsCallback}: IProps) => {\n \n const multiSelectCallbackLocal = (data: IMultiSelectData[]) => {\n multiSelectCallback(data);\n }\n\n return(\n \n \n
    \n {title}\n {\n multiSelectData.length > 0 && \n \n }\n
    \n {\n children\n }\n
    \n
    \n )\n}","import { Dictionary } from '@reduxjs/toolkit';\nimport { gdsData } from 'app/config';\nimport { RootState } from 'app/root-reducer';\nimport { MultiSelect } from 'components/multi-select/multiselect';\nimport { UpdateGDSCodes } from 'components/profile/profile.slice';\nimport { IMultiSelectData } from 'components/profile/types';\nimport _ from 'lodash';\nimport { ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport React, { useEffect, useState } from 'react';\nimport { Card, Form } from 'react-bootstrap';\nimport { BsFillTrashFill } from 'react-icons/bs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport './gds.card.scss';\n\nexport const GDSCard = () => {\n const { gdsCodes } = useSelector((state: RootState) => state.profileSlice.profile);\n const [ modifiedGDSData, setModifiedGDSData ] = useState([]);\n const dispatch = useDispatch();\n\n useEffect(() => {\n let clone = _.cloneDeep(gdsData);\n clone.forEach(x => {\n if (gdsCodes && x.key in gdsCodes) {\n x.isChecked = true;\n } else {\n x.isChecked = false;\n }\n });\n setModifiedGDSData(clone);\n }, [gdsCodes]);\n\n const gdsCodeSelectCallback = (data: IMultiSelectData[]) => {\n const filteredData = data.filter(x => x.isChecked);\n dispatch(UpdateGDSCodes(Object.assign({}, ...filteredData.map((x) => ({[x.key]: gdsCodes && gdsCodes[x.key] ? gdsCodes[x.key] : \"\"})))));\n }\n\n const updateGDSCodes = (key: string, value: string) => {\n let gdsClone: Dictionary = _.cloneDeep(gdsCodes);\n gdsClone[key] = value;\n dispatch(UpdateGDSCodes(gdsClone));\n }\n\n const removeGDSCode = (key: string) => {\n let gdsClone: Dictionary = _.cloneDeep(gdsCodes);\n delete gdsClone[key];\n dispatch(UpdateGDSCodes(gdsClone));\n }\n\n return(\n \n \n
    \n Add your GDS codes\n {\n modifiedGDSData.length > 0 && \n }\n
    \n {\n gdsCodes && Object.keys(gdsCodes).map((gds: string, index: number) => \n
    \n {gds}\n
    \n updateGDSCodes(gds, event.target.value)} type=\"search\">\n
    removeGDSCode(gds)} className=\"gds-trash\">
    \n
    \n
    )\n }\n
    \n
    \n )\n}","import { affiliates } from 'app/config';\nimport { RootState } from 'app/root-reducer';\nimport { UpdateAffiliate, UpdateAffiliateCode, UpdateClientName } from 'components/profile/profile.slice';\nimport { IBookingAffiliate, BookingAffiliateEnum } from 'components/profile/types';\nimport { ProfileFormPageSectionEnum } from 'pages/profile-form/profile.form.types';\nimport React from 'react';\nimport { Card, Form } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport './integrations.scss';\n\nexport const IntegrationsCard = () => {\n const { affiliate, affiliateCode, clientName } = useSelector((state: RootState) => state.profileSlice.profile);\n const dispatch = useDispatch();\n\n return(\n \n \n Integrations\n \n If you are part of a booking system, please enter your details to use their system on our site.\n Please make sure that both Affiliate and Code are selected/populated.\n \n Booking affiliate\n {\n affiliates.map((bookingAffiliate: IBookingAffiliate, index: number) => \n dispatch(UpdateAffiliate(bookingAffiliate.affiliate))}\n id={bookingAffiliate.affiliate}/>\n {\n bookingAffiliate.description &&\n {bookingAffiliate.description}\n }\n )\n }\n {\n affiliate !== BookingAffiliateEnum.none &&\n
    \n
    Affiliate code *
    \n dispatch(UpdateAffiliateCode(event.target.value))} className=\"affiliate-control\" type=\"search\" />\n
    \n \n }\n {\n affiliate === BookingAffiliateEnum.resRequest &&\n
    \n
    Principal ID / Client name *
    \n dispatch(UpdateClientName(event.target.value))} className=\"affiliate-control\" type=\"search\" />\n
    \n }\n
    \n
    \n )\n}","import React from 'react';\nimport { GDSCard } from './features/gds.card/gds.card';\nimport { IntegrationsCard } from './features/integrations.card/integrations.card';\n\nexport const IntegrationsPage = () => {\n return(\n \n \n \n \n )\n}","import { DocumentVisibilityEnum, IMediaItem, ITranslatableText } from 'components/profile/types';\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { Row, Col, Form, Dropdown, Button } from 'react-bootstrap';\nimport { BsFileEarmarkText, BsTrash, BsFillExclamationCircleFill } from 'react-icons/bs';\nimport _ from 'lodash';\nimport './document.item.feature.scss';\nimport { AcceptDeclineModal } from 'components/accept.decline.modal/accept.decline.modal';\nimport axios, { AxiosRequestConfig } from 'axios';\n\ninterface IProps {\n document: IMediaItem;\n languageCode: string;\n documentsCount: number;\n updateCallback: (newDocument: IMediaItem) => void;\n deleteCallback: (newDocument: IMediaItem) => void;\n loadedCallback: () => void; //To set isLoaded flag for Spinner.\n}\n\nexport const DocumentItem = ({document, languageCode, documentsCount, updateCallback, deleteCallback, loadedCallback}: IProps) => {\n const [ documentLocal, setDocumentLocal ] = useState(_.cloneDeep(document));\n const [ showConfirmationModal, setShowConfirmationModal ] = useState(false);\n const [ hasEditedName, setHasEditName ] = useState(false);\n const [ currentLanguageCode, setCurrentLanguageCode ] = useState(languageCode); //We want to force a re-render through the useEffect when they change languageCode, so create a local copy here.\n\n const getDocumentLabel = useCallback((): string => {\n const translationText = documentLocal.label?.translations[currentLanguageCode];\n return currentLanguageCode === 'en' && documentLocal.label.enText ? documentLocal.label.enText : translationText ? translationText : '';\n }, [currentLanguageCode, documentLocal.label]);\n \n useEffect(() => {\n setDocumentLocal(_.cloneDeep(document));\n }, [document])\n\n useEffect(() => {\n setCurrentLanguageCode(languageCode);\n }, [languageCode, getDocumentLabel])\n\n useEffect(() => {\n loadedCallback();\n }, [loadedCallback])\n\n const updateTranslatableTextLabel = (translatableText: ITranslatableText, value: string) => {\n let copy = _.cloneDeep(translatableText);\n if (currentLanguageCode === 'en') {\n copy.enText = value;\n }\n else {\n copy.translations[currentLanguageCode] = value;\n }\n return copy;\n }\n\n const updateDocumentNameLocal = (userInput: string) => {\n //Update local state so user input is seen in the text box.\n const newLabel: ITranslatableText = updateTranslatableTextLabel(documentLocal.label, userInput);\n setDocumentLocal({...documentLocal, label: newLabel} );\n setHasEditName(true);\n }\n\n const updateDocumentNameGlobal = (userInput: string) => {\n //Update Redux (but not DB, that is updated on Save).\n const newLabel: ITranslatableText = updateTranslatableTextLabel(documentLocal.label, userInput);\n updateCallback( {...documentLocal, label: newLabel} );\n }\n\n const getVisibilityUiString = (visibility: string) => {\n //We are separating out the enum value from UI labels, so that future UI changes do not causes data retrieval problems.\n return visibility === DocumentVisibilityEnum.private ? 'Private'\n : visibility === DocumentVisibilityEnum.tradeOnly ? 'Trade only'\n : 'Public and trade';\n }\n\n const updateDocumentVisibility = (enumAsString: string) => {\n //Update local state and also global (redux).\n const newDocument: IMediaItem = {...documentLocal, visibility: enumAsString as DocumentVisibilityEnum};\n setDocumentLocal(newDocument);\n updateCallback(newDocument);\n }\n\n const deleteCallbackLocal = useCallback((doDelete: boolean) => {\n //Called from confirmation modal.\n setShowConfirmationModal(false);\n if (doDelete) {\n deleteCallback(documentLocal);\n }\n setShowConfirmationModal(false);\n }, [deleteCallback, documentLocal]);\n\n const deleteOnClick = () => {\n setShowConfirmationModal(true);\n }\n\n const getFileExtension = (url: string): string => {\n const fileExtension = url.split(/[#?]/)[0].split('.')?.pop()?.trim()?.toLowerCase();\n return fileExtension ? fileExtension : '';\n }\n\n const getViewableContentType = (fileExtensionLower: string) => {\n //Return the content type for file types that can be viewed in a new browser tab.\n return fileExtensionLower === 'pdf' ? 'application/pdf'\n : fileExtensionLower === 'jpg' ? 'image/jpeg'\n : fileExtensionLower === 'jpeg' ? 'image/jpeg'\n : fileExtensionLower === 'png' ? 'image/png'\n : fileExtensionLower === 'gif' ? 'image/gif'\n : fileExtensionLower === 'svg' ? 'image/svg+xml'\n : '';\n }\n\n async function openLink(url: string) {\n //PDFs and images should be opened in new browser tab by getting data in bytes and setting content type: //https://stackoverflow.com/questions/61135269/displaying-pdf-file-from-azure-blob-storage-container-in-new-tab\n //By default window.open(url, \"_blank\") downloads the file.\n const config: AxiosRequestConfig = {\n responseType: \"blob\"\n };\n try {\n const fileExtension = getFileExtension(url);\n const contentType = getViewableContentType(fileExtension);\n if (contentType) {\n const response = await axios.get(url, config);\n const fileBytes = new Blob([response.data], { type: contentType });\n url = URL.createObjectURL(fileBytes);\n }\n window.open(url, \"_blank\");\n }\n catch (e) {\n console.error('Error opening file', e);\n window.open(url, \"_blank\");\n }\n }\n \n const documentOpenClick = () => {\n openLink(documentLocal.url);\n }\n\n const getDeleteConfirmationModalTitle = () => {\n return `Delete 1 of ${documentsCount} documents?`;\n }\n\n const showInvalidNameWarning = (): boolean => {\n return currentLanguageCode === 'en' && hasEditedName && !getDocumentLabel();\n }\n\n const getPlaceholderText = (): string => {\n return documentLocal.label?.enText;\n }\n\n return (\n \n \n \n \n \n updateDocumentNameLocal((event.target.value))}\n onBlur={(event: React.FocusEvent) => updateDocumentNameGlobal((event.target as HTMLInputElement).value)} \n placeholder={getPlaceholderText()}\n />\n \n \n \n \n \n {getVisibilityUiString(document.visibility)}\n \n \n { Object.values(DocumentVisibilityEnum).map((item: string) => \n updateDocumentVisibility(item)}>\n {getVisibilityUiString(item)}\n \n )\n }\n \n \n \n \n \n \n \n \n )\n}","import React, { useRef, useState } from 'react';\nimport { Tab, Nav, Button } from 'react-bootstrap';\nimport { languageDictionary } from 'app/config';\nimport './language.picker.scss';\nimport { BsChevronRight, BsChevronLeft } from 'react-icons/bs';\nimport { MdLens } from 'react-icons/md';\nimport { useEffect } from 'react';\nimport { Dictionary } from '@reduxjs/toolkit';\n\ninterface ILanguagePicker {\n availableLanguages: string[];\n languageCompletionDots: Dictionary; //includes 'en'\n setLanguageCodeCallback: (languageCode: string) => void;\n }\n\nexport const LanguagePicker = ({availableLanguages, languageCompletionDots, setLanguageCodeCallback}: ILanguagePicker) => {\n //This component was adapted from TranslatableTextEditor, the textbox replaced with callbacks so the language tabs can be connected to any UI element.\n const [ currentLanguageCode, setCurrentLanguageCode ] = useState(\"en\");\n const [ showNavButtons, setShowNavButtons ] = useState(false);\n const [ languageCodes, setLanguageCodes ] = useState(availableLanguages);\n const languageNavElement = useRef(null);\n\n useEffect(() => {\n setLanguageCodes(availableLanguages);\n }, [availableLanguages]);\n \n const setCurrentLanguageCodeLocal = (langCode: string) => {\n setCurrentLanguageCode(langCode);\n setLanguageCodeCallback(langCode);\n }\n\n const getLanguageCodeHasValue = (languageCode: string): boolean => {\n return !!languageCompletionDots[languageCode];\n }\n\n const scrollNavbar = (goForward: boolean) => {\n if (languageNavElement.current !== null) {\n if (goForward) {\n languageNavElement.current.scrollLeft += 150;\n } else {\n languageNavElement.current.scrollLeft -= 150;\n }\n }\n }\n\n useEffect(() => {\n if (languageNavElement.current && languageCodes.length > 1) {\n const hasOverflow = languageNavElement.current.offsetWidth < languageNavElement.current.scrollWidth;\n setShowNavButtons(hasOverflow);\n }\n }, [languageCodes]);\n\n return (\n \n
    \n { showNavButtons &&\n \n }\n \n { showNavButtons &&\n \n }\n
    \n
    \n )\n}","import React, { useState, useCallback, useEffect } from 'react';\nimport { RootState } from 'app/root-reducer';\nimport { useSelector } from 'react-redux';\nimport { Container, Form, Card, Row, Col, OverlayTrigger, Tooltip, Spinner } from 'react-bootstrap';\nimport { MdLens } from 'react-icons/md';\nimport { BsInfoCircleFill } from 'react-icons/bs';\nimport { MultiSelectRepeater } from 'components/multi.select.repeater/multi.select.repeater';\nimport { IMultiSelectData, DocumentTypeEnum, MediaTypeEnum, IMediaItem, EntityTypeEnum, IUpdateMediaPayload,\n IDeleteMediaPayload, DocumentVisibilityEnum} from 'components/profile/types';\nimport './documents.page.scss';\nimport _ from 'lodash';\nimport { deleteMedia, getDefaultNewDocument, getMediaItems, isMediaComplete, UpdateMedia_Reducer, \n uploadMedia, UpdateChangedMedia_Reducer } from 'components/profile/mediaitem/mediaitem.slice';\nimport DropZone from 'components/dropzone/dropzone';\nimport { DocumentItem } from './features/document.item.feature';\nimport { ProfileFormPageEnum } from 'pages/profile-form/profile.form.types';\nimport { useAppDispatch } from 'app/store';\nimport { updateProfileFromStore, UpdateSectionCompleteWithValue } from 'components/profile/profile.slice';\nimport { DragSortable } from 'components/drag.sortable/drag.sortable';\nimport { Dictionary } from '@reduxjs/toolkit';\nimport { LanguagePicker } from 'components/language.picker/language.picker';\nimport { languageDictionary } from 'app/config';\n\ninterface IProps {\n isCompleted: boolean;\n}\n\nexport const DocumentsPage = ({isCompleted}: IProps) => {\n const { profile } = useSelector((state: RootState) => state.profileSlice);\n const { mediaItems, isMediaItemSliceLoading } = useSelector((state: RootState) => state.mediaItemSlice);\n const [ multiSelectDataDocuments, setMultiSelectDataDocuments ] = useState([]);\n const [ uploadedImages ] = useState([]);\n const [ currentLanguageCode, setCurrentLanguageCode ] = useState('en');\n const [ languageCompletionDots, setLanguageCompletionDots ] = useState>({}); //includes 'en'\n const [ isLoading, setIsLoading ] = useState(false);\n const [ isLoadingSection, setIsLoadingSection ] = useState('');\n const dispatch = useAppDispatch();\n\n const getDocuments = useCallback(() => {\n return mediaItems.filter(x => x.mediaType === MediaTypeEnum.documentation);\n }, [mediaItems])\n\n const getDocumentCount = () => {\n return getDocuments()?.length;\n }\n\n const getDocumentsByType = (documentType: DocumentTypeEnum): IMediaItem[] => {\n return getDocuments()?.filter(x => x.documentType === documentType);\n }\n\n const updateLanguagePickerDots = useCallback((documents: IMediaItem[]) => {\n //(for document label) if all documents have eg. a German translation set the dot to blue. Otherwise grey.\n setLanguageCompletionDots(existingItems => {\n if (existingItems) {\n let itemsCopy = _.cloneDeep(existingItems);\n profile.availableLanguages?.forEach((languageCode) => {\n let languageDocs = documents.filter(x => x.label.translations[languageCode]);\n itemsCopy[languageCode] = documents.length === languageDocs.length;\n });\n let languageDocs = documents.filter(x => x.label.enText);\n itemsCopy['en'] = documents.length === languageDocs.length;\n return itemsCopy;\n }\n return {};\n });\n }, [profile.availableLanguages]);\n\n useEffect(() => {\n //Load MediaItems from API\n if (profile.id) {\n dispatch(getMediaItems(profile.id));\n setCurrentLanguageCode(existing => {\n if (!existing) {\n return 'en';\n }\n return existing;\n });\n }\n }, [dispatch, profile.id]);\n\n useEffect(() => {\n //Set completion dots for the language tabs.\n if (!isMediaItemSliceLoading) {\n updateLanguagePickerDots(getDocuments());\n }\n }, [mediaItems, getDocuments, isMediaItemSliceLoading, updateLanguagePickerDots])\n\n useEffect(() => {\n //Set multiSelectDataDocuments, used by MultiSelectRepeater.\n const getInitMultiSelectData = () : IMultiSelectData[] => {\n const initMultiSelectData: IMultiSelectData[] = [];\n const docs = getDocuments();\n if (profile.isEnhanced) {\n for (let i = 0; i < Object.keys(DocumentTypeEnum).length; i++) {\n if (Object.values(DocumentTypeEnum)[i] !== DocumentTypeEnum.none) {\n initMultiSelectData.push({\n title: getDocumentsEnumUiLabel(Object.values(DocumentTypeEnum)[i]),\n subtitle: '',\n isChecked: !!docs.find(x => x.documentType === Object.values(DocumentTypeEnum)[i].toString()),\n key: Object.values(DocumentTypeEnum)[i],\n });\n }\n }\n }\n else {\n initMultiSelectData.push({\n title: getDocumentsEnumUiLabel(DocumentTypeEnum.covidNotice),\n subtitle: '',\n isChecked: true,\n key: DocumentTypeEnum.covidNotice\n })\n }\n return initMultiSelectData;\n }\n \n if (multiSelectDataDocuments.length === 0 && !isMediaItemSliceLoading) {\n setMultiSelectDataDocuments(getInitMultiSelectData());\n }\n }, [mediaItems, multiSelectDataDocuments.length, getDocuments, isMediaItemSliceLoading, profile.isEnhanced])\n \n const getDocumentsEnumUiLabel = (documentsEnum: DocumentTypeEnum) => {\n switch (documentsEnum) {\n case DocumentTypeEnum.covidNotice:\n return \"COVID-19 notice\";\n case DocumentTypeEnum.factSheet:\n return \"Fact sheet\";\n case DocumentTypeEnum.foodAndBeverage:\n return \"Food and beverage\";\n case DocumentTypeEnum.faqs:\n return \"FAQs\";\n case DocumentTypeEnum.otherGeneral:\n return \"Other / General\"\n default:\n return documentsEnum;\n }\n }\n\n const getExistingDocument = (documentType: string): IMediaItem | undefined => {\n return getDocuments().find(x => x.documentType === documentType);\n }\n\n const multiSelectCallback = (data: IMultiSelectData[]) => {\n //User clicked Done in the MultiSelect control.\n let deselectedItems: IMediaItem[] = [];\n multiSelectDataDocuments?.filter(x => x.isChecked)?.forEach((item) => {\n if (!data.find(x => x.key === item.key)?.isChecked) {\n deselectedItems.push(...getDocuments()?.filter(x => x.documentType === item.key));\n }\n })\n setMultiSelectDataDocuments(data);\n }\n\n const uploadCallBackLocal = useCallback((mediaItems: IMediaItem[]) => {\n const docType: DocumentTypeEnum = mediaItems?.length > 0 ? mediaItems[0].documentType : DocumentTypeEnum.covidNotice;\n setIsLoading(true);\n setIsLoadingSection(docType);\n let documentsCopy = _.cloneDeep(getDocuments());\n documentsCopy.push(getDefaultNewDocument(docType));\n const uploadMediaFormData = () => {\n const formData = new FormData();\n mediaItems.forEach(mItem => {\n if (mItem.url === '' && mItem.file) {\n formData.append(\"files\", mItem.file);\n formData.append(\"sequences\", mItem.sequence.toString());\n }\n });\n\n formData.append(\"container\", \"profile-wizard-images\");\n formData.append(\"profileId\", profile.id);\n formData.append(\"parentEntityType\", EntityTypeEnum.profile);\n formData.append(\"mediaType\", MediaTypeEnum.documentation);\n formData.append(\"documentType\", docType);\n formData.append(\"hasAcceptedUsagePolicy\", \"true\");\n\n if (formData.get('files') != null) {\n //When uploading we should only update SectionsComplete on the Profile document if we have just hit the minimum required num images.\n Promise.all([\n isMediaComplete(ProfileFormPageEnum.documents)\n ]).then(returnValues => {\n const isCompleteBefore = returnValues[0] as boolean;\n dispatch(uploadMedia({mediaType: MediaTypeEnum.documentation, formData: formData })).then(() => {\n const isCompleteAfter = isMediaComplete(ProfileFormPageEnum.documents);\n if (!isCompleteBefore && isCompleteAfter) {\n Promise.all([\n dispatch(UpdateSectionCompleteWithValue({ pageId: ProfileFormPageEnum.documents, value: true })),\n dispatch(updateProfileFromStore())\n ])\n }\n })\n })\n }\n }\n if (mediaItems.length > 0) {\n uploadMediaFormData();\n }\n }, [dispatch, profile.id, getDocuments]);\n\n const isDocumentsDifferent = (mediaItem1: IMediaItem, mediaItem2: IMediaItem): boolean => {\n return mediaItem1.documentType !== mediaItem2.documentType\n || JSON.stringify(mediaItem1.label) !== JSON.stringify(mediaItem2.label)\n || mediaItem1.visibility !== mediaItem2.visibility;\n }\n\n const documentItemUpdateCallback = useCallback((document: IMediaItem) => {\n let documentsCopy = _.cloneDeep(getDocuments());\n for (let i = 0; i < documentsCopy.length; i++) {\n if (documentsCopy[i].id === document.id) {\n if (isDocumentsDifferent(documentsCopy[i], document)) {\n document.isChanged = true;\n }\n documentsCopy[i] = document;\n }\n }\n\n const updatePayload : IUpdateMediaPayload = {mediaItems: documentsCopy, mediaType: MediaTypeEnum.documentation };\n dispatch(UpdateMedia_Reducer(updatePayload)); //Just update the slice. We save the slice data to the DB when they hit Save.\n updateLanguagePickerDots(documentsCopy);\n\n }, [dispatch, getDocuments, updateLanguagePickerDots])\n\n const deleteMediaItems = useCallback((mItems: IMediaItem[]) => {\n let mediaItemsTemp: IMediaItem[] = _.cloneDeep(mediaItems);\n \n mItems.forEach(mItem => {\n const index = mediaItemsTemp.findIndex(x => x.id === mItem.id);\n mediaItemsTemp.splice(index, 1);\n });\n\n const payload: IDeleteMediaPayload = { mediaItems: mItems, showToast: true, mediaType: MediaTypeEnum.documentation };\n const isCompleteBefore = isMediaComplete(ProfileFormPageEnum.documents);\n Promise.all([\n dispatch(deleteMedia(payload)),\n dispatch(UpdateMedia_Reducer({mediaItems: mediaItemsTemp, mediaType: MediaTypeEnum.documentation}))\n ]).then(() => {\n const isCompleteNow = isMediaComplete(ProfileFormPageEnum.documents);\n if (isCompleteBefore && !isCompleteNow) {\n Promise.all([\n dispatch(UpdateSectionCompleteWithValue({ pageId: ProfileFormPageEnum.documents, value: false })),\n dispatch(updateProfileFromStore())\n ])\n }\n });\n dispatch(deleteMedia(payload));\n }, [dispatch, mediaItems])\n\n const deleteCallback = useCallback((document: IMediaItem) => {\n //Callback from DocumentItem delete button\n deleteMediaItems([document]);\n }, [deleteMediaItems])\n\n const getDeselectedMediaItemForDelete = useCallback((data: IMultiSelectData[]): IMediaItem[] => {\n //When user de-selects items in the MultiSelectRepeater we need to confirm they want to delete, then delete objects associated with these list items (IMediaItem).\n let mediaItemsToDelete: IMediaItem[] = [];\n data.forEach((item) => {\n const mediaItemsTemp: IMediaItem[] = mediaItems.filter(x => x.documentType?.toString() === item.key);\n if (mediaItemsTemp) {\n mediaItemsToDelete.push(...mediaItemsTemp);\n }\n });\n return mediaItemsToDelete\n }, [mediaItems])\n\n const getNumDeselectMediaItemsCallback = useCallback((data: IMultiSelectData[]): number => {\n return getDeselectedMediaItemForDelete(data).length;\n }, [getDeselectedMediaItemForDelete]);\n\n const confirmDeselectCallback = useCallback((data: IMultiSelectData[]) => {\n //When user de-selects items in the MultiSelectRepeater we need to confirm they want to delete\n const mediaItemsToDelete = getDeselectedMediaItemForDelete(data);\n deleteMediaItems(mediaItemsToDelete);\n\n //Update local multiSelectDataDocuments, to hide the dropzones.\n setMultiSelectDataDocuments(items => {\n let copy = _.cloneDeep(items);\n data.forEach((item) => {\n let existing = copy.find(x => x.key === item.key);\n if (existing) {\n existing.isChecked = false;\n }\n })\n return copy;\n });\n }, [deleteMediaItems, getDeselectedMediaItemForDelete]);\n\n const cardDropCallback = useCallback((newSequences: number[], documentType: string) => {\n //Used for DragSort of DocumentItems.\n let typeItems = _.cloneDeep(mediaItems.filter(x => x.mediaType === MediaTypeEnum.documentation)\n .filter(x => x.documentType === documentType).sort((a, b) => (a.sequence > b.sequence ? 1 : -1)));\n newSequences.map((item, i) => {\n typeItems[item].isChanged = typeItems[item].sequence !== i ? true : false;\n typeItems[item].sequence = i;\n return item;\n })\n let changedItems = typeItems.filter(x => x.isChanged);\n dispatch(UpdateChangedMedia_Reducer(changedItems));\n }, [dispatch, mediaItems])\n\n const fileBrowseClick = (files: FileList, documentType: string) => {\n //Adapted from DropZone code.\n let mediaItemsTemp: IMediaItem[] = [];\n let sequenceNumber = mediaItems.length;\n\n for (let i = 0; i < files.length; i++) {\n mediaItemsTemp.push({file:files[i], isChecked: false, url: '', hasFileSizeWarning: false, id: '', filePath: '', \n label: {enText: '', translations: {}, machineTranslations: {}}, description: {enText: '', translations: {}, machineTranslations: {}}, \n profileId: '', entityType: EntityTypeEnum.media, azureContainerName: '', mediaType: MediaTypeEnum.documentation, credit: '', \n documentType: documentType as DocumentTypeEnum,\n parentId: '', fileSizeKb: 0, width: 0, height: 0, originalFileName: '', sequence: sequenceNumber, isChanged: false,\n visibility: DocumentVisibilityEnum.publicAndTrade});\n sequenceNumber++;\n }\n uploadCallBackLocal(mediaItemsTemp);\n }\n\n const loadedCallback = useCallback(() => {\n //Set isLoading flag for loading spinner.\n setIsLoading(false);\n }, [])\n\n const getContent = (item: IMultiSelectData, index: number) => {\n //For Enhanced: The root UI object (with the \"Documents\" title) is the MultiSelectRepeater.\n //For Basic: The root UI object is a with same id as the MultiSelectRepeater, so the CSS is scoped to the same top-level object.\n if ((item.isChecked && !getExistingDocument(item.key))) {\n return (\n
    \n {item.title}\n \n
    \n )\n }\n else if (item.isChecked || (!profile.isEnhanced && getExistingDocument(item.key))) {\n const documentsByType = getDocumentsByType(item.key as DocumentTypeEnum);\n var sectionDocuments = documentsByType.sort((a, b) => (a.sequence > b.sequence ? 1 : -1));\n\n return (\n
    \n
    \n {item.title}\n \n fileBrowseClick(e.target.files, item.key)} multiple={true}>\n + Add documents\n \n
    \n \n Name of file\n {profile.availableLanguages?.length > 1 && profile.isEnhanced &&\n ({languageDictionary[currentLanguageCode]})\n }\n \n Visibility \n \n Public and trade
    \n Display documents on your iBrochure for travellers and trade partners to access.

    \n Trade only
    \n To be used exclusively by the trade partners who access and use your content in Wetu.

    \n Private
    \n Documents will not display anywhere else in the Wetu system, to ensure that they are kept private from the public and trade.\n }>\n \n
    \n
    \n \n \n \n
    \n \n { sectionDocuments.length > 1 &&\n sectionDocuments.map((item, index) => \n \n )}\n { sectionDocuments.length === 1 &&\n
    \n \n
    \n }\n
    \n { isLoading && isLoadingSection === item.key &&\n \n }\n
    \n )\n }\n return null;\n }\n\n const setLanguageCodeCallback = (languageCode: string) => {\n setCurrentLanguageCode(languageCode); //This will propagate down into the DocumentItem component.\n }\n\n return (\n \n \n { profile.isEnhanced &&\n \n { getDocumentCount() > 0 && profile.availableLanguages?.length > 1 &&\n \n }\n { multiSelectDataDocuments.map((item, index) =>\n getContent(item, index) \n )}\n \n }\n { !profile.isEnhanced &&\n \n \n Documents\n { multiSelectDataDocuments.map((item, index) =>\n getContent(item, index) \n )}\n \n \n }\n \n )\n}","import React, { useEffect, useState } from 'react';\nimport { RootState } from 'app/root-reducer';\nimport { useSelector } from 'react-redux';\nimport { useAppDispatch } from 'app/store';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { Container, Row, Col, Spinner, Button } from 'react-bootstrap';\nimport './profile.form.container.scss';\nimport { Sidebar } from './features/sidebar/profile.form.sidebar';\nimport { getById, update, isFeaturesSelected, isEnquiriesComplete, isContactsComplete, isSocialMediaComplete,\n UpdateIsProfileLoaded } from 'components/profile/profile.slice';\nimport { isMediaComplete, updateChangedMedia } from 'components/profile/mediaitem/mediaitem.slice';\nimport { updateProfileItemsDb } from 'components/profile/profileitem/profileitem.slice';\nimport { BsChevronLeft, BsChevronRight } from 'react-icons/bs';\nimport { ProfileStatusCard } from 'components/profile.status.card/profile.status.card';\nimport { useCallback } from 'react';\nimport { ChecklistSection, Insights, ProfileFacilitiesSectionEnum, ProfileFormPageEnum, ProfileFormPageSectionEnum } from './profile.form.types';\nimport { BasicInfoPage } from './pages/basic-info/basic.info.page';\nimport { SleepingArrangementsPage } from './pages/sleeping-arrangements/sleeping.arrangements.page';\nimport { BookingAffiliateEnum, EntityTypeEnum } from 'components/profile/types';\nimport { InsightsCard } from 'components/insights.card/insights.card';\nimport { ISidebarMenuItem } from 'components/profile/types';\nimport { ChecklistSections } from 'app/config';\nimport { MediaPage } from './pages/media/media.page';\nimport { ProfileChecklist } from './features/checklist/profile.checklist';\nimport { FastFactsPage } from './pages/fast-facts/fast-facts.page';\nimport { FacilitiesPage } from './pages/facilities/facilities.page';\nimport { ContactDetailsPage } from './pages/contact-details/contact-details.page';\nimport { IntegrationsPage } from './pages/integrations/integrations.page';\nimport { DocumentsPage } from './pages/documents/documents.page';\n\ndeclare var Beacon: any;\n\ninterface ParamType {\n id: string;\n pageId: string;\n}\n\nconst ProfileFormContainerTemp = () => {\n const { profileSummaries, profile, loading } = useSelector((state: RootState) => state.profileSlice);\n const { profileItems } = useSelector((state: RootState) => state.profileItemSlice);\n const { mediaItems } = useSelector((state: RootState) => state.mediaItemSlice);\n const { showUpdateProfileMenu } = useSelector((state: RootState) => state.applicationSlice);\n const dispatch = useAppDispatch();\n const history = useHistory();\n const { id, pageId } = useParams();\n const [ displayName, setDisplayName ] = useState(\"\");\n const [ menuItems, setMenuItems ] = useState([]);\n const [ profileIdTemp, setProfileIdTemp ] = useState(\"\");\n const [ sections, setSections ] = useState([]);\n const [ insights, setInsights ] = useState({ title: \"\", titleIcon: \"\", description: [\"\"]});\n const [ initialProfileJson, setInitialProfileJson ] = useState('');\n\n useEffect(() => {\n if (id) {\n dispatch(getById({profileId: id, accountId: 'e6e02556-8724-4592-bbeb-fd4c0c4130b1'})).then(() => {\n dispatch(UpdateIsProfileLoaded(true));\n });\n }\n }, [dispatch, id]);\n \n if ((!displayName && profile?.name) || (profile?.id && profileIdTemp && profile.id !== profileIdTemp)) {\n setDisplayName(profile.name);\n setProfileIdTemp(profile.id);\n }\n\n // menu item use effect\n useEffect(() => {\n if (!initialProfileJson && profile.isLoaded) {\n setInitialProfileJson(JSON.stringify(profile));\n }\n }, [profile, initialProfileJson]);\n\n // checklist sections use effect\n useEffect(() => {\n if (profile.isLoaded) {\n const checklistSections = ChecklistSections.filter(x => {\n return x.page === pageId && (profile.isEnhanced ? true : x.isEnhancedOnly === false);\n });\n\n switch (pageId) {\n case ProfileFormPageEnum.basicInfo:\n break;\n case ProfileFormPageEnum.fastFacts:\n break;\n case ProfileFormPageEnum.media: \n checklistSections.forEach(x => {\n if (x.id === ProfileFormPageSectionEnum.images) {\n x.isCompleted = isMediaComplete(ProfileFormPageSectionEnum.images);\n }\n if (x.id === ProfileFormPageSectionEnum.videos) { \n x.isCompleted = isMediaComplete(ProfileFormPageSectionEnum.videos);\n }\n if (x.id === ProfileFormPageSectionEnum.virtualTours) { \n x.isCompleted = isMediaComplete(ProfileFormPageSectionEnum.virtualTours);\n }\n });\n break;\n case ProfileFormPageEnum.sleepingArrangements:\n break;\n case ProfileFormPageEnum.facilities:\n checklistSections.forEach(x => {\n if (x.id === ProfileFormPageSectionEnum.facilitiesProperty) {\n x.isCompleted = isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.property);\n }\n if (x.id === ProfileFormPageSectionEnum.facilitiesServices) {\n x.isCompleted = isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.services);\n }\n if (x.id === ProfileFormPageSectionEnum.facilitiesActivitiesNearby) {\n x.isCompleted = isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.activitiesNearby);\n }\n if (x.id === ProfileFormPageSectionEnum.facilitiesActivitiesOnSite) {\n x.isCompleted = isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.activitiesOnSite);\n }\n if (x.id === ProfileFormPageSectionEnum.facilitiesSleepingArrangements) {\n x.isCompleted = isFeaturesSelected(profile, ProfileFacilitiesSectionEnum.sleepingArrangments);\n }\n });\n break;\n case ProfileFormPageEnum.contactDetails:\n checklistSections.forEach(x => {\n if (x.id === ProfileFormPageSectionEnum.enquiries) {\n x.isCompleted = isEnquiriesComplete(profile);\n }\n if (x.id === ProfileFormPageSectionEnum.contacts) {\n x.isCompleted = isContactsComplete(profile);\n }\n if (x.id === ProfileFormPageSectionEnum.socialMedia) {\n x.isCompleted = isSocialMediaComplete(profile);\n }\n });\n break;\n case ProfileFormPageEnum.integrations:\n checklistSections.forEach(x => {\n if (x.id === ProfileFormPageSectionEnum.integrations) {\n if (profile.affiliate !== BookingAffiliateEnum.none) {\n if (profile.affiliate === BookingAffiliateEnum.nightsbridge) {\n x.isCompleted = profile.affiliateCode?.length > 0;\n }\n if (profile.affiliate === BookingAffiliateEnum.resRequest) {\n x.isCompleted = profile.affiliateCode?.length > 0 && profile.clientName?.length > 0;\n }\n }\n }\n if (x.id === ProfileFormPageSectionEnum.gdsCodes) {\n x.isCompleted = profile.gdsCodes && Object.keys(profile.gdsCodes).length > 0 && Object.keys(profile.gdsCodes).filter(x => profile.gdsCodes[x]).length > 0;\n }\n });\n break;\n default:\n break;\n }\n \n setSections(checklistSections);\n }\n }, [pageId, profile, mediaItems]);\n\n // insights use effect\n useEffect(() => {\n if (profile.isLoaded) {\n let insight: Insights = { title: \"\", titleIcon: \"\", description: [\"\"]};\n switch (pageId) {\n case ProfileFormPageEnum.basicInfo:\n break;\n case ProfileFormPageEnum.fastFacts:\n break;\n case ProfileFormPageEnum.media:\n insight = { title: \"Image recommendations\", titleIcon: \"\", description: [\"JPG or PNG images\", \"Landscape images display better than portrait\", \"Images larger than 1MB\"]};\n break;\n case ProfileFormPageEnum.sleepingArrangements:\n break;\n case ProfileFormPageEnum.facilities:\n break;\n default:\n break;\n }\n setInsights(insight);\n }\n }, [pageId, profile.isLoaded]);\n\n const navigateToProfile = (isForward: boolean) => {\n const index = profileSummaries.findIndex(x => x.profileId === id);\n if(isForward) {\n const summary = profileSummaries[index + 1];\n if(summary) {\n history.push(`/profiles/update/${summary.profileId}/${pageId}`);\n }\n } else {\n const summary = profileSummaries[index - 1];\n if(summary) {\n history.push(`/profiles/update/${summary.profileId}/${pageId}`);\n }\n }\n }\n\n const viewIBrochure = () => {\n window.open('https://andrew.dev.wetu.com/'+ profile.id, '_blank');\n }\n\n const profileStatusCallBack = useCallback(() => {\n //dispatch changes here\n }, [])\n\n const renderPage = () => {\n let index: number = menuItems.findIndex(x => x.url === pageId);\n let isCompleted: boolean = (index >= 0) ? menuItems[index].isCompleted : false;\n switch (pageId) {\n case ProfileFormPageEnum.basicInfo:\n return \n case ProfileFormPageEnum.fastFacts:\n return \n case ProfileFormPageEnum.media:\n return \n case ProfileFormPageEnum.sleepingArrangements:\n return \n case ProfileFormPageEnum.facilities:\n return \n case ProfileFormPageEnum.contactDetails:\n return \n case ProfileFormPageEnum.documents:\n return \n case ProfileFormPageEnum.integrations:\n return \n default:\n return
    default
    \n }\n }\n\n const renderStatusCard = () => {\n switch (pageId) {\n case ProfileFormPageEnum.basicInfo:\n return \n case ProfileFormPageEnum.fastFacts:\n return \n case ProfileFormPageEnum.facilities:\n return \n case ProfileFormPageEnum.sleepingArrangements:\n return \n case ProfileFormPageEnum.contactDetails:\n return \n case ProfileFormPageEnum.documents:\n return \n default:\n return \n }\n }\n\n const savePage = () => {\n if (pageId === ProfileFormPageEnum.sleepingArrangements) {\n dispatch(updateProfileItemsDb(profileItems));\n }\n if (pageId !== ProfileFormPageEnum.media && pageId !== ProfileFormPageEnum.documents) {\n dispatch(update({\n id: profile.id,\n category: profile.category,\n isEnhanced: profile.isEnhanced,\n latitude: profile.pin.latitude,\n longitude: profile.pin.longitude,\n name: profile.name,\n type: profile.type,\n entityType: EntityTypeEnum.profile,\n checkinTimeFrom: profile.checkinTimeFrom,\n checkoutTimeFrom: profile.checkoutTimeFrom,\n checkinTimeTo: profile.checkinTimeTo,\n checkoutTimeTo: profile.checkoutTimeTo,\n isPublished: profile.isPublished,\n translationItems: profile.translationItems,\n features: profile.features,\n searchAliases: profile.searchAliases,\n shortDescription: profile.shortDescription,\n richDescription: profile.richDescription,\n availableLanguages: profile.availableLanguages,\n status: profile.status,\n qualityAssuranceBody: profile.qualityAssuranceBody,\n starRating: profile.starRating,\n alternativeRating: profile.alternativeRating,\n roomCount: profile.roomCount,\n timeFormat: profile.timeFormat,\n minimumChildAge: profile.minimumChildAge,\n clientName: profile.clientName,\n affiliate: profile.affiliate,\n affiliateCode: profile.affiliateCode,\n gdsCodes: profile.gdsCodes,\n sectionsComplete: profile.sectionsComplete,\n contacts: profile.contacts,\n links: profile.links\n }));\n setDisplayName(profile.name);\n }\n else {\n dispatch(updateChangedMedia(mediaItems));\n }\n }\n\n const getCurrentProfileSummaryIndex = (): number => {\n return profileSummaries.findIndex(x => x.profileId === id);\n }\n\n const setCompletedCallback = useCallback((items: ISidebarMenuItem[]) => {\n setMenuItems(items);\n }, []);\n\n const menuItemCallBack = useCallback((items: ISidebarMenuItem[], url: string) => {\n setMenuItems(items);\n history.push(url);\n }, [history]);\n\n return (\n profile && profile.isLoaded ?\n \n \n \n \n \n \n \n \n \n {\n loading && !profile && \n }\n {\n (!loading && profile) &&\n \n \n \n

    {displayName}

    \n \n \n \n \n \n {\n profile.isEnhanced && \n \n }\n \n \n {\n profileSummaries.length > 1 &&\n \n \n \n \n }\n \n
    \n
    \n \n \n { sections.length >= 2 && }\n \n \n { renderPage() }\n \n \n { renderStatusCard() }\n \n \n \n \n \n
    \n }\n \n
    \n
    \n \n
    \n
    \n : null\n )\n}\n\nexport const ProfileFormContainer = React.memo(ProfileFormContainerTemp);","import './App.scss';\nimport React from 'react';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom'\nimport { HomePage } from 'pages/home/home.page';\nimport { Page3 } from 'pages/page-3/page-3.page';\nimport { Page4 } from 'pages/page-4/page-4.page';\nimport { Page5 } from 'pages/page5/page-5.page';\nimport { Header } from 'components/header/header';\nimport { ProfileWizard } from 'pages/profile-wizard/profile.wizard.page';\nimport { Profiles } from 'pages/profiles/profiles.page';\nimport { Toaster } from 'components/toast/toast';\nimport { ProfileFormContainer } from 'pages/profile-form/profile.form.container';\n\nexport const App = () => {\n return (\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport store from './app/store';\nimport './index.scss';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport { App } from 'app/App';\n\nconst render = () => {\n\n ReactDOM.render(\n \n \n ,\n document.getElementById('root')\n );\n}\n\nrender();\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n module.hot.accept('./app/App', render)\n}"],"sourceRoot":""}